@liveroom-tech/react-immersive 4.2.10 → 4.3.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/README.md +0 -24
- package/dist/chunk-7X37KAPE.mjs +1 -0
- package/dist/chunk-IUALYWYG.mjs +26 -0
- package/dist/{chunk-WVKZCAVE.mjs → chunk-K7DMBJBJ.mjs} +1 -1
- package/dist/hosted.css +1 -0
- package/dist/hosted.d.mts +97 -0
- package/dist/hosted.d.ts +97 -0
- package/dist/hosted.js +3689 -0
- package/dist/hosted.mjs +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.mts +13 -418
- package/dist/index.d.ts +13 -418
- package/dist/index.js +8 -8
- package/dist/index.mjs +1 -26
- package/dist/{utils-BkdZxLFF.d.mts → objectBinding-CBRYMYk6.d.mts} +48 -62
- package/dist/{utils-BkdZxLFF.d.ts → objectBinding-CBRYMYk6.d.ts} +48 -62
- package/dist/publicProps-BST1E8an.d.mts +349 -0
- package/dist/publicProps-Bv3_PCP0.d.ts +349 -0
- package/dist/utils.d.mts +18 -1
- package/dist/utils.d.ts +18 -1
- package/dist/utils.mjs +1 -1
- package/package.json +6 -1
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";"use client";var ux=Object.create;var $o=Object.defineProperty;var px=Object.getOwnPropertyDescriptor;var hx=Object.getOwnPropertyNames;var mx=Object.getPrototypeOf,fx=Object.prototype.hasOwnProperty;var gx=(e,t,n)=>t in e?$o(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var bx=(e,t)=>()=>(e&&(t=e(e=0)),t);var Lh=(e,t)=>{for(var n in t)$o(e,n,{get:t[n],enumerable:!0})},kh=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of hx(t))!fx.call(e,r)&&r!==n&&$o(e,r,{get:()=>t[r],enumerable:!(i=px(t,r))||i.enumerable});return e};var Dh=(e,t,n)=>(n=e!=null?ux(mx(e)):{},kh(t||!e||!e.__esModule?$o(n,"default",{value:e,enumerable:!0}):n,e)),vx=e=>kh($o({},"__esModule",{value:!0}),e);var Ud=(e,t,n)=>gx(e,typeof t!="symbol"?t+"":t,n);var Bh={};Lh(Bh,{bvhWorkerCode:()=>xx});var xx,Nh=bx(()=>{"use strict";xx=`(()=>{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 kx=Object.create;var ss=Object.defineProperty;var Lx=Object.getOwnPropertyDescriptor;var Dx=Object.getOwnPropertyNames;var Bx=Object.getPrototypeOf,Nx=Object.prototype.hasOwnProperty;var Ox=(e,t,n)=>t in e?ss(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var Ix=(e,t)=>()=>(e&&(t=e(e=0)),t);var jh=(e,t)=>{for(var n in t)ss(e,n,{get:t[n],enumerable:!0})},Hh=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Dx(t))!Nx.call(e,r)&&r!==n&&ss(e,r,{get:()=>t[r],enumerable:!(i=Lx(t,r))||i.enumerable});return e};var Gh=(e,t,n)=>(n=e!=null?kx(Bx(e)):{},Hh(t||!e||!e.__esModule?ss(n,"default",{value:e,enumerable:!0}):n,e)),zx=e=>Hh(ss({},"__esModule",{value:!0}),e);var $d=(e,t,n)=>Ox(e,typeof t!="symbol"?t+"":t,n);var Wh={};jh(Wh,{bvhWorkerCode:()=>Ux});var Ux,Xh=Ix(()=>{"use strict";Ux=`(()=>{var Ls=1;var Ds=3,wn=0,Ui=1,Fi=2;var di=0,pi=1,mi=2,gi=3,_i=4,xi=5,yi=6,vi=7,Ns=0,Us=1,Fs=2;var Bi=1,Oi=2,zi=3,Vi=4,ki=5,Gi=6,Hi=7;var Wi=300,Bs=301,Xi=302;var Os=306,Mi=1e3,Ie=1001,Si=1002;var zs=1006;var Vs=1008;var ks=1009;var Gs=1015;var Hs=1023;var De=2300,ln=2301,an=2302,bi=2303,Ti=2400,Ai=2401,Ei=2402;var qi="",_t="srgb",wi="srgb-linear",Ci="linear",cn="srgb";var Ri=35044;var Le=2e3,Pi=2001;function Fr(c){for(let t=c.length-1;t>=0;--t)if(c[t]>=65535)return!0;return!1}function Br(c){return ArrayBuffer.isView(c)&&!(c instanceof DataView)}function Ii(c){return document.createElementNS("http://www.w3.org/1999/xhtml",c)}var xs={},un=null;function Ws(c){let t=c[0];if(typeof t=="string"&&t.startsWith("TSL:")){let e=c[1];e&&e.isStackTrace?c[0]+=" "+e.getLocation():c[1]='Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.'}return c}function Q(...c){c=Ws(c);let t="THREE."+c.shift();if(un)un("warn",t,...c);else{let e=c[0];e&&e.isStackTrace?console.warn(e.getError(t)):console.warn(t,...c)}}function G(...c){c=Ws(c);let t="THREE."+c.shift();if(un)un("error",t,...c);else{let e=c[0];e&&e.isStackTrace?console.error(e.getError(t)):console.error(t,...c)}}function Li(...c){let t=c.join(" ");t in xs||(xs[t]=!0,Q(...c))}var Or={[di]:pi,[mi]:yi,[_i]:vi,[gi]:xi,[pi]:di,[yi]:mi,[vi]:_i,[xi]:gi},Yt=class{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[t]===void 0&&(n[t]=[]),n[t].indexOf(e)===-1&&n[t].push(e)}hasEventListener(t,e){let n=this._listeners;return n===void 0?!1:n[t]!==void 0&&n[t].indexOf(e)!==-1}removeEventListener(t,e){let n=this._listeners;if(n===void 0)return;let i=n[t];if(i!==void 0){let s=i.indexOf(e);s!==-1&&i.splice(s,1)}}dispatchEvent(t){let e=this._listeners;if(e===void 0)return;let n=e[t.type];if(n!==void 0){t.target=this;let i=n.slice(0);for(let s=0,r=i.length;s<r;s++)i[s].call(this,t);t.target=null}}},st=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];var yl=Math.PI/180,zr=180/Math.PI;function Cn(){let c=Math.random()*4294967295|0,t=Math.random()*4294967295|0,e=Math.random()*4294967295|0,n=Math.random()*4294967295|0;return(st[c&255]+st[c>>8&255]+st[c>>16&255]+st[c>>24&255]+"-"+st[t&255]+st[t>>8&255]+"-"+st[t>>16&15|64]+st[t>>24&255]+"-"+st[e&63|128]+st[e>>8&255]+"-"+st[e>>16&255]+st[e>>24&255]+st[n&255]+st[n>>8&255]+st[n>>16&255]+st[n>>24&255]).toLowerCase()}function U(c,t,e){return Math.max(t,Math.min(e,c))}function Vr(c,t){return(c%t+t)%t}function Zn(c,t,e){return(1-e)*c+e*t}function Ee(c,t){switch(t.constructor){case Float32Array:return c;case Uint32Array:return c/4294967295;case Uint16Array:return c/65535;case Uint8Array:return c/255;case Int32Array:return Math.max(c/2147483647,-1);case Int16Array:return Math.max(c/32767,-1);case Int8Array:return Math.max(c/127,-1);default:throw new Error("Invalid component type.")}}function ut(c,t){switch(t.constructor){case Float32Array:return c;case Uint32Array:return Math.round(c*4294967295);case Uint16Array:return Math.round(c*65535);case Uint8Array:return Math.round(c*255);case Int32Array:return Math.round(c*2147483647);case Int16Array:return Math.round(c*32767);case Int8Array:return Math.round(c*127);default:throw new Error("Invalid component type.")}}var H=class c{static{c.prototype.isVector2=!0}constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){let e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=U(this.x,t.x,e.x),this.y=U(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=U(this.x,t,e),this.y=U(this.y,t,e),this}clampLength(t,e){let n=this.length();return this.divideScalar(n||1).multiplyScalar(U(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){let e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;let n=this.dot(t)/e;return Math.acos(U(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){let e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){let n=Math.cos(e),i=Math.sin(e),s=this.x-t.x,r=this.y-t.y;return this.x=s*n-r*i+t.x,this.y=s*i+r*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},Lt=class{constructor(t=0,e=0,n=0,i=1){this.isQuaternion=!0,this._x=t,this._y=e,this._z=n,this._w=i}static slerpFlat(t,e,n,i,s,r,o){let a=n[i+0],l=n[i+1],u=n[i+2],f=n[i+3],h=s[r+0],d=s[r+1],p=s[r+2],m=s[r+3];if(f!==m||a!==h||l!==d||u!==p){let _=a*h+l*d+u*p+f*m;_<0&&(h=-h,d=-d,p=-p,m=-m,_=-_);let g=1-o;if(_<.9995){let x=Math.acos(_),y=Math.sin(x);g=Math.sin(g*x)/y,o=Math.sin(o*x)/y,a=a*g+h*o,l=l*g+d*o,u=u*g+p*o,f=f*g+m*o}else{a=a*g+h*o,l=l*g+d*o,u=u*g+p*o,f=f*g+m*o;let x=1/Math.sqrt(a*a+l*l+u*u+f*f);a*=x,l*=x,u*=x,f*=x}}t[e]=a,t[e+1]=l,t[e+2]=u,t[e+3]=f}static multiplyQuaternionsFlat(t,e,n,i,s,r){let o=n[i],a=n[i+1],l=n[i+2],u=n[i+3],f=s[r],h=s[r+1],d=s[r+2],p=s[r+3];return t[e]=o*p+u*f+a*d-l*h,t[e+1]=a*p+u*h+l*f-o*d,t[e+2]=l*p+u*d+o*h-a*f,t[e+3]=u*p-o*f-a*h-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){let n=t._x,i=t._y,s=t._z,r=t._order,o=Math.cos,a=Math.sin,l=o(n/2),u=o(i/2),f=o(s/2),h=a(n/2),d=a(i/2),p=a(s/2);switch(r){case"XYZ":this._x=h*u*f+l*d*p,this._y=l*d*f-h*u*p,this._z=l*u*p+h*d*f,this._w=l*u*f-h*d*p;break;case"YXZ":this._x=h*u*f+l*d*p,this._y=l*d*f-h*u*p,this._z=l*u*p-h*d*f,this._w=l*u*f+h*d*p;break;case"ZXY":this._x=h*u*f-l*d*p,this._y=l*d*f+h*u*p,this._z=l*u*p+h*d*f,this._w=l*u*f-h*d*p;break;case"ZYX":this._x=h*u*f-l*d*p,this._y=l*d*f+h*u*p,this._z=l*u*p-h*d*f,this._w=l*u*f+h*d*p;break;case"YZX":this._x=h*u*f+l*d*p,this._y=l*d*f+h*u*p,this._z=l*u*p-h*d*f,this._w=l*u*f-h*d*p;break;case"XZY":this._x=h*u*f-l*d*p,this._y=l*d*f-h*u*p,this._z=l*u*p+h*d*f,this._w=l*u*f+h*d*p;break;default:Q("Quaternion: .setFromEuler() encountered an unknown order: "+r)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){let n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){let e=t.elements,n=e[0],i=e[4],s=e[8],r=e[1],o=e[5],a=e[9],l=e[2],u=e[6],f=e[10],h=n+o+f;if(h>0){let d=.5/Math.sqrt(h+1);this._w=.25/d,this._x=(u-a)*d,this._y=(s-l)*d,this._z=(r-i)*d}else if(n>o&&n>f){let d=2*Math.sqrt(1+n-o-f);this._w=(u-a)/d,this._x=.25*d,this._y=(i+r)/d,this._z=(s+l)/d}else if(o>f){let d=2*Math.sqrt(1+o-n-f);this._w=(s-l)/d,this._x=(i+r)/d,this._y=.25*d,this._z=(a+u)/d}else{let d=2*Math.sqrt(1+f-n-o);this._w=(r-i)/d,this._x=(s+l)/d,this._y=(a+u)/d,this._z=.25*d}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<1e-8?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(U(this.dot(t),-1,1)))}rotateTowards(t,e){let n=this.angleTo(t);if(n===0)return this;let i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){let n=t._x,i=t._y,s=t._z,r=t._w,o=e._x,a=e._y,l=e._z,u=e._w;return this._x=n*u+r*o+i*l-s*a,this._y=i*u+r*a+s*o-n*l,this._z=s*u+r*l+n*a-i*o,this._w=r*u-n*o-i*a-s*l,this._onChangeCallback(),this}slerp(t,e){let n=t._x,i=t._y,s=t._z,r=t._w,o=this.dot(t);o<0&&(n=-n,i=-i,s=-s,r=-r,o=-o);let a=1-e;if(o<.9995){let l=Math.acos(o),u=Math.sin(l);a=Math.sin(a*l)/u,e=Math.sin(e*l)/u,this._x=this._x*a+n*e,this._y=this._y*a+i*e,this._z=this._z*a+s*e,this._w=this._w*a+r*e,this._onChangeCallback()}else this._x=this._x*a+n*e,this._y=this._y*a+i*e,this._z=this._z*a+s*e,this._w=this._w*a+r*e,this.normalize();return this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){let t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),n=Math.random(),i=Math.sqrt(1-n),s=Math.sqrt(n);return this.set(i*Math.sin(t),i*Math.cos(t),s*Math.sin(e),s*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},M=class c{static{c.prototype.isVector3=!0}constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return n===void 0&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(ys.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(ys.setFromAxisAngle(t,e))}applyMatrix3(t){let e=this.x,n=this.y,i=this.z,s=t.elements;return this.x=s[0]*e+s[3]*n+s[6]*i,this.y=s[1]*e+s[4]*n+s[7]*i,this.z=s[2]*e+s[5]*n+s[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){let e=this.x,n=this.y,i=this.z,s=t.elements,r=1/(s[3]*e+s[7]*n+s[11]*i+s[15]);return this.x=(s[0]*e+s[4]*n+s[8]*i+s[12])*r,this.y=(s[1]*e+s[5]*n+s[9]*i+s[13])*r,this.z=(s[2]*e+s[6]*n+s[10]*i+s[14])*r,this}applyQuaternion(t){let e=this.x,n=this.y,i=this.z,s=t.x,r=t.y,o=t.z,a=t.w,l=2*(r*i-o*n),u=2*(o*e-s*i),f=2*(s*n-r*e);return this.x=e+a*l+r*f-o*u,this.y=n+a*u+o*l-s*f,this.z=i+a*f+s*u-r*l,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){let e=this.x,n=this.y,i=this.z,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i,this.y=s[1]*e+s[5]*n+s[9]*i,this.z=s[2]*e+s[6]*n+s[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=U(this.x,t.x,e.x),this.y=U(this.y,t.y,e.y),this.z=U(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=U(this.x,t,e),this.y=U(this.y,t,e),this.z=U(this.z,t,e),this}clampLength(t,e){let n=this.length();return this.divideScalar(n||1).multiplyScalar(U(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){let n=t.x,i=t.y,s=t.z,r=e.x,o=e.y,a=e.z;return this.x=i*a-s*o,this.y=s*r-n*a,this.z=n*o-i*r,this}projectOnVector(t){let e=t.lengthSq();if(e===0)return this.set(0,0,0);let n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return Jn.copy(this).projectOnVector(t),this.sub(Jn)}reflect(t){return this.sub(Jn.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){let e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;let n=this.dot(t)/e;return Math.acos(U(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){let e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){let i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){let e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){let e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){let t=Math.random()*Math.PI*2,e=Math.random()*2-1,n=Math.sqrt(1-e*e);return this.x=n*Math.cos(t),this.y=e,this.z=n*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},Jn=new M,ys=new Lt,N=class c{static{c.prototype.isMatrix3=!0}constructor(t,e,n,i,s,r,o,a,l){this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,n,i,s,r,o,a,l)}set(t,e,n,i,s,r,o,a,l){let u=this.elements;return u[0]=t,u[1]=i,u[2]=o,u[3]=e,u[4]=s,u[5]=a,u[6]=n,u[7]=r,u[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){let e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){let e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){let n=t.elements,i=e.elements,s=this.elements,r=n[0],o=n[3],a=n[6],l=n[1],u=n[4],f=n[7],h=n[2],d=n[5],p=n[8],m=i[0],_=i[3],g=i[6],x=i[1],y=i[4],S=i[7],v=i[2],b=i[5],T=i[8];return s[0]=r*m+o*x+a*v,s[3]=r*_+o*y+a*b,s[6]=r*g+o*S+a*T,s[1]=l*m+u*x+f*v,s[4]=l*_+u*y+f*b,s[7]=l*g+u*S+f*T,s[2]=h*m+d*x+p*v,s[5]=h*_+d*y+p*b,s[8]=h*g+d*S+p*T,this}multiplyScalar(t){let e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){let t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],u=t[8];return e*r*u-e*o*l-n*s*u+n*o*a+i*s*l-i*r*a}invert(){let t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],u=t[8],f=u*r-o*l,h=o*a-u*s,d=l*s-r*a,p=e*f+n*h+i*d;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return t[0]=f*m,t[1]=(i*l-u*n)*m,t[2]=(o*n-i*r)*m,t[3]=h*m,t[4]=(u*e-i*a)*m,t[5]=(i*s-o*e)*m,t[6]=d*m,t[7]=(n*a-l*e)*m,t[8]=(r*e-n*s)*m,this}transpose(){let t,e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){let e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,s,r,o){let a=Math.cos(s),l=Math.sin(s);return this.set(n*a,n*l,-n*(a*r+l*o)+r+t,-i*l,i*a,-i*(-l*r+a*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply($n.makeScale(t,e)),this}rotate(t){return this.premultiply($n.makeRotation(-t)),this}translate(t,e){return this.premultiply($n.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){let e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,n,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){let e=this.elements,n=t.elements;for(let i=0;i<9;i++)if(e[i]!==n[i])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){let n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return new this.constructor().fromArray(this.elements)}},$n=new N,vs=new N().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Ms=new N().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function kr(){let c={enabled:!0,workingColorSpace:wi,spaces:{},convert:function(i,s,r){return this.enabled===!1||s===r||!s||!r||(this.spaces[s].transfer===cn&&(i.r=It(i.r),i.g=It(i.g),i.b=It(i.b)),this.spaces[s].primaries!==this.spaces[r].primaries&&(i.applyMatrix3(this.spaces[s].toXYZ),i.applyMatrix3(this.spaces[r].fromXYZ)),this.spaces[r].transfer===cn&&(i.r=he(i.r),i.g=he(i.g),i.b=he(i.b))),i},workingToColorSpace:function(i,s){return this.convert(i,this.workingColorSpace,s)},colorSpaceToWorking:function(i,s){return this.convert(i,s,this.workingColorSpace)},getPrimaries:function(i){return this.spaces[i].primaries},getTransfer:function(i){return i===qi?Ci:this.spaces[i].transfer},getToneMappingMode:function(i){return this.spaces[i].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(i,s=this.workingColorSpace){return i.fromArray(this.spaces[s].luminanceCoefficients)},define:function(i){Object.assign(this.spaces,i)},_getMatrix:function(i,s,r){return i.copy(this.spaces[s].toXYZ).multiply(this.spaces[r].fromXYZ)},_getDrawingBufferColorSpace:function(i){return this.spaces[i].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(i=this.workingColorSpace){return this.spaces[i].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(i,s){return Li("ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),c.workingToColorSpace(i,s)},toWorkingColorSpace:function(i,s){return Li("ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),c.colorSpaceToWorking(i,s)}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],n=[.3127,.329];return c.define({[wi]:{primaries:t,whitePoint:n,transfer:Ci,toXYZ:vs,fromXYZ:Ms,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:_t},outputColorSpaceConfig:{drawingBufferColorSpace:_t}},[_t]:{primaries:t,whitePoint:n,transfer:cn,toXYZ:vs,fromXYZ:Ms,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:_t}}}),c}var gt=kr();function It(c){return c<.04045?c*.0773993808:Math.pow(c*.9478672986+.0521327014,2.4)}function he(c){return c<.0031308?c*12.92:1.055*Math.pow(c,.41666)-.055}var jt,hn=class{static getDataURL(t,e="image/png"){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let n;if(t instanceof HTMLCanvasElement)n=t;else{jt===void 0&&(jt=Ii("canvas")),jt.width=t.width,jt.height=t.height;let i=jt.getContext("2d");t instanceof ImageData?i.putImageData(t,0,0):i.drawImage(t,0,0,t.width,t.height),n=jt}return n.toDataURL(e)}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){let e=Ii("canvas");e.width=t.width,e.height=t.height;let n=e.getContext("2d");n.drawImage(t,0,0,t.width,t.height);let i=n.getImageData(0,0,t.width,t.height),s=i.data;for(let r=0;r<s.length;r++)s[r]=It(s[r]/255)*255;return n.putImageData(i,0,0),e}else if(t.data){let e=t.data.slice(0);for(let n=0;n<e.length;n++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[n]=Math.floor(It(e[n]/255)*255):e[n]=It(e[n]);return{data:e,width:t.width,height:t.height}}else return Q("ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied."),t}},Gr=0,fn=class{constructor(t=null){this.isSource=!0,Object.defineProperty(this,"id",{value:Gr++}),this.uuid=Cn(),this.data=t,this.dataReady=!0,this.version=0}getSize(t){let e=this.data;return typeof HTMLVideoElement<"u"&&e instanceof HTMLVideoElement?t.set(e.videoWidth,e.videoHeight,0):typeof VideoFrame<"u"&&e instanceof VideoFrame?t.set(e.displayWidth,e.displayHeight,0):e!==null?t.set(e.width,e.height,e.depth||0):t.set(0,0,0),t}set needsUpdate(t){t===!0&&this.version++}toJSON(t){let e=t===void 0||typeof t=="string";if(!e&&t.images[this.uuid]!==void 0)return t.images[this.uuid];let n={uuid:this.uuid,url:""},i=this.data;if(i!==null){let s;if(Array.isArray(i)){s=[];for(let r=0,o=i.length;r<o;r++)i[r].isDataTexture?s.push(Kn(i[r].image)):s.push(Kn(i[r]))}else s=Kn(i);n.url=s}return e||(t.images[this.uuid]=n),n}};function Kn(c){return typeof HTMLImageElement<"u"&&c instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&c instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&c instanceof ImageBitmap?hn.getDataURL(c):c.data?{data:Array.from(c.data),width:c.width,height:c.height,type:c.data.constructor.name}:(Q("Texture: Unable to serialize Texture."),{})}var Hr=0,Qn=new M,fe=class c extends Yt{constructor(t=c.DEFAULT_IMAGE,e=c.DEFAULT_MAPPING,n=Ie,i=Ie,s=zs,r=Vs,o=Hs,a=ks,l=c.DEFAULT_ANISOTROPY,u=qi){super(),this.isTexture=!0,Object.defineProperty(this,"id",{value:Hr++}),this.uuid=Cn(),this.name="",this.source=new fn(t),this.mipmaps=[],this.mapping=e,this.channel=0,this.wrapS=n,this.wrapT=i,this.magFilter=s,this.minFilter=r,this.anisotropy=l,this.format=o,this.internalFormat=null,this.type=a,this.offset=new H(0,0),this.repeat=new H(1,1),this.center=new H(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new N,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.colorSpace=u,this.userData={},this.updateRanges=[],this.version=0,this.onUpdate=null,this.renderTarget=null,this.isRenderTargetTexture=!1,this.isArrayTexture=!!(t&&t.depth&&t.depth>1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Qn).x}get height(){return this.source.getSize(Qn).y}get depth(){return this.source.getSize(Qn).z}get image(){return this.source.data}set image(t){this.source.data=t}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.channel=t.channel,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.normalized=t.normalized,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.colorSpace=t.colorSpace,this.renderTarget=t.renderTarget,this.isRenderTargetTexture=t.isRenderTargetTexture,this.isArrayTexture=t.isArrayTexture,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}setValues(t){for(let e in t){let n=t[e];if(n===void 0){Q(\`Texture.setValues(): parameter '\${e}' has value of undefined.\`);continue}let i=this[e];if(i===void 0){Q(\`Texture.setValues(): property '\${e}' does not exist.\`);continue}i&&n&&i.isVector2&&n.isVector2||i&&n&&i.isVector3&&n.isVector3||i&&n&&i.isMatrix3&&n.isMatrix3?i.copy(n):this[e]=n}}toJSON(t){let e=t===void 0||typeof t=="string";if(!e&&t.textures[this.uuid]!==void 0)return t.textures[this.uuid];let n={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(n.userData=this.userData),e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==Wi)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case Mi:t.x=t.x-Math.floor(t.x);break;case Ie:t.x=t.x<0?0:1;break;case Si:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case Mi:t.y=t.y-Math.floor(t.y);break;case Ie:t.y=t.y<0?0:1;break;case Si:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}};fe.DEFAULT_IMAGE=null;fe.DEFAULT_MAPPING=Wi;fe.DEFAULT_ANISOTROPY=1;var de=class c{static{c.prototype.isVector4=!0}constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){let e=this.x,n=this.y,i=this.z,s=this.w,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i+r[12]*s,this.y=r[1]*e+r[5]*n+r[9]*i+r[13]*s,this.z=r[2]*e+r[6]*n+r[10]*i+r[14]*s,this.w=r[3]*e+r[7]*n+r[11]*i+r[15]*s,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);let e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,s,a=t.elements,l=a[0],u=a[4],f=a[8],h=a[1],d=a[5],p=a[9],m=a[2],_=a[6],g=a[10];if(Math.abs(u-h)<.01&&Math.abs(f-m)<.01&&Math.abs(p-_)<.01){if(Math.abs(u+h)<.1&&Math.abs(f+m)<.1&&Math.abs(p+_)<.1&&Math.abs(l+d+g-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;let y=(l+1)/2,S=(d+1)/2,v=(g+1)/2,b=(u+h)/4,T=(f+m)/4,A=(p+_)/4;return y>S&&y>v?y<.01?(n=0,i=.707106781,s=.707106781):(n=Math.sqrt(y),i=b/n,s=T/n):S>v?S<.01?(n=.707106781,i=0,s=.707106781):(i=Math.sqrt(S),n=b/i,s=A/i):v<.01?(n=.707106781,i=.707106781,s=0):(s=Math.sqrt(v),n=T/s,i=A/s),this.set(n,i,s,e),this}let x=Math.sqrt((_-p)*(_-p)+(f-m)*(f-m)+(h-u)*(h-u));return Math.abs(x)<.001&&(x=1),this.x=(_-p)/x,this.y=(f-m)/x,this.z=(h-u)/x,this.w=Math.acos((l+d+g-1)/2),this}setFromMatrixPosition(t){let e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=U(this.x,t.x,e.x),this.y=U(this.y,t.y,e.y),this.z=U(this.z,t.z,e.z),this.w=U(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=U(this.x,t,e),this.y=U(this.y,t,e),this.z=U(this.z,t,e),this.w=U(this.w,t,e),this}clampLength(t,e){let n=this.length();return this.divideScalar(n||1).multiplyScalar(U(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}};var W=class c{static{c.prototype.isMatrix4=!0}constructor(t,e,n,i,s,r,o,a,l,u,f,h,d,p,m,_){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,n,i,s,r,o,a,l,u,f,h,d,p,m,_)}set(t,e,n,i,s,r,o,a,l,u,f,h,d,p,m,_){let g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=s,g[5]=r,g[9]=o,g[13]=a,g[2]=l,g[6]=u,g[10]=f,g[14]=h,g[3]=d,g[7]=p,g[11]=m,g[15]=_,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new c().fromArray(this.elements)}copy(t){let e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){let e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){let e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return this.determinant()===0?(t.set(1,0,0),e.set(0,1,0),n.set(0,0,1),this):(t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this)}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){if(t.determinant()===0)return this.identity();let e=this.elements,n=t.elements,i=1/te.setFromMatrixColumn(t,0).length(),s=1/te.setFromMatrixColumn(t,1).length(),r=1/te.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*s,e[5]=n[5]*s,e[6]=n[6]*s,e[7]=0,e[8]=n[8]*r,e[9]=n[9]*r,e[10]=n[10]*r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){let e=this.elements,n=t.x,i=t.y,s=t.z,r=Math.cos(n),o=Math.sin(n),a=Math.cos(i),l=Math.sin(i),u=Math.cos(s),f=Math.sin(s);if(t.order==="XYZ"){let h=r*u,d=r*f,p=o*u,m=o*f;e[0]=a*u,e[4]=-a*f,e[8]=l,e[1]=d+p*l,e[5]=h-m*l,e[9]=-o*a,e[2]=m-h*l,e[6]=p+d*l,e[10]=r*a}else if(t.order==="YXZ"){let h=a*u,d=a*f,p=l*u,m=l*f;e[0]=h+m*o,e[4]=p*o-d,e[8]=r*l,e[1]=r*f,e[5]=r*u,e[9]=-o,e[2]=d*o-p,e[6]=m+h*o,e[10]=r*a}else if(t.order==="ZXY"){let h=a*u,d=a*f,p=l*u,m=l*f;e[0]=h-m*o,e[4]=-r*f,e[8]=p+d*o,e[1]=d+p*o,e[5]=r*u,e[9]=m-h*o,e[2]=-r*l,e[6]=o,e[10]=r*a}else if(t.order==="ZYX"){let h=r*u,d=r*f,p=o*u,m=o*f;e[0]=a*u,e[4]=p*l-d,e[8]=h*l+m,e[1]=a*f,e[5]=m*l+h,e[9]=d*l-p,e[2]=-l,e[6]=o*a,e[10]=r*a}else if(t.order==="YZX"){let h=r*a,d=r*l,p=o*a,m=o*l;e[0]=a*u,e[4]=m-h*f,e[8]=p*f+d,e[1]=f,e[5]=r*u,e[9]=-o*u,e[2]=-l*u,e[6]=d*f+p,e[10]=h-m*f}else if(t.order==="XZY"){let h=r*a,d=r*l,p=o*a,m=o*l;e[0]=a*u,e[4]=-f,e[8]=l*u,e[1]=h*f+m,e[5]=r*u,e[9]=d*f-p,e[2]=p*f-d,e[6]=o*u,e[10]=m*f+h}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Wr,t,Xr)}lookAt(t,e,n){let i=this.elements;return ft.subVectors(t,e),ft.lengthSq()===0&&(ft.z=1),ft.normalize(),Nt.crossVectors(n,ft),Nt.lengthSq()===0&&(Math.abs(n.z)===1?ft.x+=1e-4:ft.z+=1e-4,ft.normalize(),Nt.crossVectors(n,ft)),Nt.normalize(),Ke.crossVectors(ft,Nt),i[0]=Nt.x,i[4]=Ke.x,i[8]=ft.x,i[1]=Nt.y,i[5]=Ke.y,i[9]=ft.y,i[2]=Nt.z,i[6]=Ke.z,i[10]=ft.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){let n=t.elements,i=e.elements,s=this.elements,r=n[0],o=n[4],a=n[8],l=n[12],u=n[1],f=n[5],h=n[9],d=n[13],p=n[2],m=n[6],_=n[10],g=n[14],x=n[3],y=n[7],S=n[11],v=n[15],b=i[0],T=i[4],A=i[8],E=i[12],C=i[1],R=i[5],w=i[9],P=i[13],L=i[2],D=i[6],O=i[10],it=i[14],Tt=i[3],At=i[7],Je=i[11],$e=i[15];return s[0]=r*b+o*C+a*L+l*Tt,s[4]=r*T+o*R+a*D+l*At,s[8]=r*A+o*w+a*O+l*Je,s[12]=r*E+o*P+a*it+l*$e,s[1]=u*b+f*C+h*L+d*Tt,s[5]=u*T+f*R+h*D+d*At,s[9]=u*A+f*w+h*O+d*Je,s[13]=u*E+f*P+h*it+d*$e,s[2]=p*b+m*C+_*L+g*Tt,s[6]=p*T+m*R+_*D+g*At,s[10]=p*A+m*w+_*O+g*Je,s[14]=p*E+m*P+_*it+g*$e,s[3]=x*b+y*C+S*L+v*Tt,s[7]=x*T+y*R+S*D+v*At,s[11]=x*A+y*w+S*O+v*Je,s[15]=x*E+y*P+S*it+v*$e,this}multiplyScalar(t){let e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){let t=this.elements,e=t[0],n=t[4],i=t[8],s=t[12],r=t[1],o=t[5],a=t[9],l=t[13],u=t[2],f=t[6],h=t[10],d=t[14],p=t[3],m=t[7],_=t[11],g=t[15],x=a*d-l*h,y=o*d-l*f,S=o*h-a*f,v=r*d-l*u,b=r*h-a*u,T=r*f-o*u;return e*(m*x-_*y+g*S)-n*(p*x-_*v+g*b)+i*(p*y-m*v+g*T)-s*(p*S-m*b+_*T)}transpose(){let t=this.elements,e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){let i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){let t=this.elements,e=t[0],n=t[1],i=t[2],s=t[3],r=t[4],o=t[5],a=t[6],l=t[7],u=t[8],f=t[9],h=t[10],d=t[11],p=t[12],m=t[13],_=t[14],g=t[15],x=e*o-n*r,y=e*a-i*r,S=e*l-s*r,v=n*a-i*o,b=n*l-s*o,T=i*l-s*a,A=u*m-f*p,E=u*_-h*p,C=u*g-d*p,R=f*_-h*m,w=f*g-d*m,P=h*g-d*_,L=x*P-y*w+S*R+v*C-b*E+T*A;if(L===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);let D=1/L;return t[0]=(o*P-a*w+l*R)*D,t[1]=(i*w-n*P-s*R)*D,t[2]=(m*T-_*b+g*v)*D,t[3]=(h*b-f*T-d*v)*D,t[4]=(a*C-r*P-l*E)*D,t[5]=(e*P-i*C+s*E)*D,t[6]=(_*S-p*T-g*y)*D,t[7]=(u*T-h*S+d*y)*D,t[8]=(r*w-o*C+l*A)*D,t[9]=(n*C-e*w-s*A)*D,t[10]=(p*b-m*S+g*x)*D,t[11]=(f*S-u*b-d*x)*D,t[12]=(o*E-r*R-a*A)*D,t[13]=(e*R-n*E+i*A)*D,t[14]=(m*y-p*v-_*x)*D,t[15]=(u*v-f*y+h*x)*D,this}scale(t){let e=this.elements,n=t.x,i=t.y,s=t.z;return e[0]*=n,e[4]*=i,e[8]*=s,e[1]*=n,e[5]*=i,e[9]*=s,e[2]*=n,e[6]*=i,e[10]*=s,e[3]*=n,e[7]*=i,e[11]*=s,this}getMaxScaleOnAxis(){let t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){let e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){let e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){let e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){let n=Math.cos(e),i=Math.sin(e),s=1-n,r=t.x,o=t.y,a=t.z,l=s*r,u=s*o;return this.set(l*r+n,l*o-i*a,l*a+i*o,0,l*o+i*a,u*o+n,u*a-i*r,0,l*a-i*o,u*a+i*r,s*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,s,r){return this.set(1,n,s,0,t,1,r,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){let i=this.elements,s=e._x,r=e._y,o=e._z,a=e._w,l=s+s,u=r+r,f=o+o,h=s*l,d=s*u,p=s*f,m=r*u,_=r*f,g=o*f,x=a*l,y=a*u,S=a*f,v=n.x,b=n.y,T=n.z;return i[0]=(1-(m+g))*v,i[1]=(d+S)*v,i[2]=(p-y)*v,i[3]=0,i[4]=(d-S)*b,i[5]=(1-(h+g))*b,i[6]=(_+x)*b,i[7]=0,i[8]=(p+y)*T,i[9]=(_-x)*T,i[10]=(1-(h+m))*T,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){let i=this.elements;t.x=i[12],t.y=i[13],t.z=i[14];let s=this.determinant();if(s===0)return n.set(1,1,1),e.identity(),this;let r=te.set(i[0],i[1],i[2]).length(),o=te.set(i[4],i[5],i[6]).length(),a=te.set(i[8],i[9],i[10]).length();s<0&&(r=-r),yt.copy(this);let l=1/r,u=1/o,f=1/a;return yt.elements[0]*=l,yt.elements[1]*=l,yt.elements[2]*=l,yt.elements[4]*=u,yt.elements[5]*=u,yt.elements[6]*=u,yt.elements[8]*=f,yt.elements[9]*=f,yt.elements[10]*=f,e.setFromRotationMatrix(yt),n.x=r,n.y=o,n.z=a,this}makePerspective(t,e,n,i,s,r,o=Le,a=!1){let l=this.elements,u=2*s/(e-t),f=2*s/(n-i),h=(e+t)/(e-t),d=(n+i)/(n-i),p,m;if(a)p=s/(r-s),m=r*s/(r-s);else if(o===Le)p=-(r+s)/(r-s),m=-2*r*s/(r-s);else if(o===Pi)p=-r/(r-s),m=-r*s/(r-s);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return l[0]=u,l[4]=0,l[8]=h,l[12]=0,l[1]=0,l[5]=f,l[9]=d,l[13]=0,l[2]=0,l[6]=0,l[10]=p,l[14]=m,l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(t,e,n,i,s,r,o=Le,a=!1){let l=this.elements,u=2/(e-t),f=2/(n-i),h=-(e+t)/(e-t),d=-(n+i)/(n-i),p,m;if(a)p=1/(r-s),m=r/(r-s);else if(o===Le)p=-2/(r-s),m=-(r+s)/(r-s);else if(o===Pi)p=-1/(r-s),m=-s/(r-s);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return l[0]=u,l[4]=0,l[8]=0,l[12]=h,l[1]=0,l[5]=f,l[9]=0,l[13]=d,l[2]=0,l[6]=0,l[10]=p,l[14]=m,l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(t){let e=this.elements,n=t.elements;for(let i=0;i<16;i++)if(e[i]!==n[i])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){let n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}},te=new M,yt=new W,Wr=new M(0,0,0),Xr=new M(1,1,1),Nt=new M,Ke=new M,ft=new M,Ss=new W,bs=new Lt,Ne=class c{constructor(t=0,e=0,n=0,i=c.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){let i=t.elements,s=i[0],r=i[4],o=i[8],a=i[1],l=i[5],u=i[9],f=i[2],h=i[6],d=i[10];switch(e){case"XYZ":this._y=Math.asin(U(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-u,d),this._z=Math.atan2(-r,s)):(this._x=Math.atan2(h,l),this._z=0);break;case"YXZ":this._x=Math.asin(-U(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(o,d),this._z=Math.atan2(a,l)):(this._y=Math.atan2(-f,s),this._z=0);break;case"ZXY":this._x=Math.asin(U(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(-f,d),this._z=Math.atan2(-r,l)):(this._y=0,this._z=Math.atan2(a,s));break;case"ZYX":this._y=Math.asin(-U(f,-1,1)),Math.abs(f)<.9999999?(this._x=Math.atan2(h,d),this._z=Math.atan2(a,s)):(this._x=0,this._z=Math.atan2(-r,l));break;case"YZX":this._z=Math.asin(U(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-u,l),this._y=Math.atan2(-f,s)):(this._x=0,this._y=Math.atan2(o,d));break;case"XZY":this._z=Math.asin(-U(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(h,l),this._y=Math.atan2(o,s)):(this._x=Math.atan2(-u,d),this._y=0);break;default:Q("Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,n===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return Ss.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Ss,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return bs.setFromEuler(this),this.setFromQuaternion(bs,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}};Ne.DEFAULT_ORDER="XYZ";var dn=class{constructor(){this.mask=1}set(t){this.mask=(1<<t|0)>>>0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return(this.mask&t.mask)!==0}isEnabled(t){return(this.mask&(1<<t|0))!==0}},qr=0,Ts=new M,ee=new Lt,wt=new W,Qe=new M,we=new M,Yr=new M,Zr=new Lt,As=new M(1,0,0),Es=new M(0,1,0),ws=new M(0,0,1),Cs={type:"added"},Jr={type:"removed"},ne={type:"childadded",child:null},jn={type:"childremoved",child:null},Zt=class c extends Yt{constructor(){super(),this.isObject3D=!0,Object.defineProperty(this,"id",{value:qr++}),this.uuid=Cn(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=c.DEFAULT_UP.clone();let t=new M,e=new Ne,n=new Lt,i=new M(1,1,1);function s(){n.setFromEuler(e,!1)}function r(){e.setFromQuaternion(n,void 0,!1)}e._onChange(s),n._onChange(r),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new W},normalMatrix:{value:new N}}),this.matrix=new W,this.matrixWorld=new W,this.matrixAutoUpdate=c.DEFAULT_MATRIX_AUTO_UPDATE,this.matrixWorldAutoUpdate=c.DEFAULT_MATRIX_WORLD_AUTO_UPDATE,this.matrixWorldNeedsUpdate=!1,this.layers=new dn,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.customDepthMaterial=void 0,this.customDistanceMaterial=void 0,this.static=!1,this.userData={},this.pivot=null}onBeforeShadow(){}onAfterShadow(){}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return ee.setFromAxisAngle(t,e),this.quaternion.multiply(ee),this}rotateOnWorldAxis(t,e){return ee.setFromAxisAngle(t,e),this.quaternion.premultiply(ee),this}rotateX(t){return this.rotateOnAxis(As,t)}rotateY(t){return this.rotateOnAxis(Es,t)}rotateZ(t){return this.rotateOnAxis(ws,t)}translateOnAxis(t,e){return Ts.copy(t).applyQuaternion(this.quaternion),this.position.add(Ts.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(As,t)}translateY(t){return this.translateOnAxis(Es,t)}translateZ(t){return this.translateOnAxis(ws,t)}localToWorld(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return this.updateWorldMatrix(!0,!1),t.applyMatrix4(wt.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?Qe.copy(t):Qe.set(t,e,n);let i=this.parent;this.updateWorldMatrix(!0,!1),we.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?wt.lookAt(we,Qe,this.up):wt.lookAt(Qe,we,this.up),this.quaternion.setFromRotationMatrix(wt),i&&(wt.extractRotation(i.matrixWorld),ee.setFromRotationMatrix(wt),this.quaternion.premultiply(ee.invert()))}add(t){if(arguments.length>1){for(let e=0;e<arguments.length;e++)this.add(arguments[e]);return this}return t===this?(G("Object3D.add: object can't be added as a child of itself.",t),this):(t&&t.isObject3D?(t.removeFromParent(),t.parent=this,this.children.push(t),t.dispatchEvent(Cs),ne.child=t,this.dispatchEvent(ne),ne.child=null):G("Object3D.add: object not an instance of THREE.Object3D.",t),this)}remove(t){if(arguments.length>1){for(let n=0;n<arguments.length;n++)this.remove(arguments[n]);return this}let e=this.children.indexOf(t);return e!==-1&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(Jr),jn.child=t,this.dispatchEvent(jn),jn.child=null),this}removeFromParent(){let t=this.parent;return t!==null&&t.remove(this),this}clear(){return this.remove(...this.children)}attach(t){return this.updateWorldMatrix(!0,!1),wt.copy(this.matrixWorld).invert(),t.parent!==null&&(t.parent.updateWorldMatrix(!0,!1),wt.multiply(t.parent.matrixWorld)),t.applyMatrix4(wt),t.removeFromParent(),t.parent=this,this.children.push(t),t.updateWorldMatrix(!1,!0),t.dispatchEvent(Cs),ne.child=t,this.dispatchEvent(ne),ne.child=null,this}getObjectById(t){return this.getObjectByProperty("id",t)}getObjectByName(t){return this.getObjectByProperty("name",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,i=this.children.length;n<i;n++){let r=this.children[n].getObjectByProperty(t,e);if(r!==void 0)return r}}getObjectsByProperty(t,e,n=[]){this[t]===e&&n.push(this);let i=this.children;for(let s=0,r=i.length;s<r;s++)i[s].getObjectsByProperty(t,e,n);return n}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(we,t,Yr),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(we,Zr,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);let e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);let e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverse(t)}traverseVisible(t){if(this.visible===!1)return;t(this);let e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverseVisible(t)}traverseAncestors(t){let e=this.parent;e!==null&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale);let t=this.pivot;if(t!==null){let e=t.x,n=t.y,i=t.z,s=this.matrix.elements;s[12]+=e-s[0]*e-s[4]*n-s[8]*i,s[13]+=n-s[1]*e-s[5]*n-s[9]*i,s[14]+=i-s[2]*e-s[6]*n-s[10]*i}this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),this.matrixWorldNeedsUpdate=!1,t=!0);let e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){let n=this.parent;if(t===!0&&n!==null&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldAutoUpdate===!0&&(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix)),e===!0){let i=this.children;for(let s=0,r=i.length;s<r;s++)i[s].updateWorldMatrix(!1,!0)}}toJSON(t){let e=t===void 0||typeof t=="string",n={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.7,type:"Object",generator:"Object3D.toJSON"});let i={};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.castShadow===!0&&(i.castShadow=!0),this.receiveShadow===!0&&(i.receiveShadow=!0),this.visible===!1&&(i.visible=!1),this.frustumCulled===!1&&(i.frustumCulled=!1),this.renderOrder!==0&&(i.renderOrder=this.renderOrder),this.static!==!1&&(i.static=this.static),Object.keys(this.userData).length>0&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),i.up=this.up.toArray(),this.pivot!==null&&(i.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(i.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(i.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(i.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(i.type="InstancedMesh",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(i.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(i.type="BatchedMesh",i.perObjectFrustumCulled=this.perObjectFrustumCulled,i.sortObjects=this.sortObjects,i.drawRanges=this._drawRanges,i.reservedRanges=this._reservedRanges,i.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),i.instanceInfo=this._instanceInfo.map(o=>({...o})),i.availableInstanceIds=this._availableInstanceIds.slice(),i.availableGeometryIds=this._availableGeometryIds.slice(),i.nextIndexStart=this._nextIndexStart,i.nextVertexStart=this._nextVertexStart,i.geometryCount=this._geometryCount,i.maxInstanceCount=this._maxInstanceCount,i.maxVertexCount=this._maxVertexCount,i.maxIndexCount=this._maxIndexCount,i.geometryInitialized=this._geometryInitialized,i.matricesTexture=this._matricesTexture.toJSON(t),i.indirectTexture=this._indirectTexture.toJSON(t),this._colorsTexture!==null&&(i.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(i.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(i.boundingBox=this.boundingBox.toJSON()));function s(o,a){return o[a.uuid]===void 0&&(o[a.uuid]=a.toJSON(t)),a.uuid}if(this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(i.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=s(t.geometries,this.geometry);let o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){let a=o.shapes;if(Array.isArray(a))for(let l=0,u=a.length;l<u;l++){let f=a[l];s(t.shapes,f)}else s(t.shapes,a)}}if(this.isSkinnedMesh&&(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0&&(s(t.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){let o=[];for(let a=0,l=this.material.length;a<l;a++)o.push(s(t.materials,this.material[a]));i.material=o}else i.material=s(t.materials,this.material);if(this.children.length>0){i.children=[];for(let o=0;o<this.children.length;o++)i.children.push(this.children[o].toJSON(t).object)}if(this.animations.length>0){i.animations=[];for(let o=0;o<this.animations.length;o++){let a=this.animations[o];i.animations.push(s(t.animations,a))}}if(e){let o=r(t.geometries),a=r(t.materials),l=r(t.textures),u=r(t.images),f=r(t.shapes),h=r(t.skeletons),d=r(t.animations),p=r(t.nodes);o.length>0&&(n.geometries=o),a.length>0&&(n.materials=a),l.length>0&&(n.textures=l),u.length>0&&(n.images=u),f.length>0&&(n.shapes=f),h.length>0&&(n.skeletons=h),d.length>0&&(n.animations=d),p.length>0&&(n.nodes=p)}return n.object=i,n;function r(o){let a=[];for(let l in o){let u=o[l];delete u.metadata,a.push(u)}return a}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.pivot=t.pivot!==null?t.pivot.clone():null,this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.static=t.static,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let n=0;n<t.children.length;n++){let i=t.children[n];this.add(i.clone())}return this}};Zt.DEFAULT_UP=new M(0,1,0);Zt.DEFAULT_MATRIX_AUTO_UPDATE=!0;Zt.DEFAULT_MATRIX_WORLD_AUTO_UPDATE=!0;var Xs={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Ut={h:0,s:0,l:0},je={h:0,s:0,l:0};function ti(c,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?c+(t-c)*6*e:e<1/2?t:e<2/3?c+(t-c)*6*(2/3-e):c}var j=class{constructor(t,e,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,n)}set(t,e,n){if(e===void 0&&n===void 0){let i=t;i&&i.isColor?this.copy(i):typeof i=="number"?this.setHex(i):typeof i=="string"&&this.setStyle(i)}else this.setRGB(t,e,n);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=_t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,gt.colorSpaceToWorking(this,e),this}setRGB(t,e,n,i=gt.workingColorSpace){return this.r=t,this.g=e,this.b=n,gt.colorSpaceToWorking(this,i),this}setHSL(t,e,n,i=gt.workingColorSpace){if(t=Vr(t,1),e=U(e,0,1),n=U(n,0,1),e===0)this.r=this.g=this.b=n;else{let s=n<=.5?n*(1+e):n+e-n*e,r=2*n-s;this.r=ti(r,s,t+1/3),this.g=ti(r,s,t),this.b=ti(r,s,t-1/3)}return gt.colorSpaceToWorking(this,i),this}setStyle(t,e=_t){function n(s){s!==void 0&&parseFloat(s)<1&&Q("Color: Alpha component of "+t+" will be ignored.")}let i;if(i=/^(\\w+)\\(([^\\)]*)\\)/.exec(t)){let s,r=i[1],o=i[2];switch(r){case"rgb":case"rgba":if(s=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(s[4]),this.setRGB(Math.min(255,parseInt(s[1],10))/255,Math.min(255,parseInt(s[2],10))/255,Math.min(255,parseInt(s[3],10))/255,e);if(s=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(s[4]),this.setRGB(Math.min(100,parseInt(s[1],10))/100,Math.min(100,parseInt(s[2],10))/100,Math.min(100,parseInt(s[3],10))/100,e);break;case"hsl":case"hsla":if(s=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(o))return n(s[4]),this.setHSL(parseFloat(s[1])/360,parseFloat(s[2])/100,parseFloat(s[3])/100,e);break;default:Q("Color: Unknown color model "+t)}}else if(i=/^\\#([A-Fa-f\\d]+)$/.exec(t)){let s=i[1],r=s.length;if(r===3)return this.setRGB(parseInt(s.charAt(0),16)/15,parseInt(s.charAt(1),16)/15,parseInt(s.charAt(2),16)/15,e);if(r===6)return this.setHex(parseInt(s,16),e);Q("Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=_t){let n=Xs[t.toLowerCase()];return n!==void 0?this.setHex(n,e):Q("Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=It(t.r),this.g=It(t.g),this.b=It(t.b),this}copyLinearToSRGB(t){return this.r=he(t.r),this.g=he(t.g),this.b=he(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=_t){return gt.workingToColorSpace(rt.copy(this),t),Math.round(U(rt.r*255,0,255))*65536+Math.round(U(rt.g*255,0,255))*256+Math.round(U(rt.b*255,0,255))}getHexString(t=_t){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=gt.workingColorSpace){gt.workingToColorSpace(rt.copy(this),e);let n=rt.r,i=rt.g,s=rt.b,r=Math.max(n,i,s),o=Math.min(n,i,s),a,l,u=(o+r)/2;if(o===r)a=0,l=0;else{let f=r-o;switch(l=u<=.5?f/(r+o):f/(2-r-o),r){case n:a=(i-s)/f+(i<s?6:0);break;case i:a=(s-n)/f+2;break;case s:a=(n-i)/f+4;break}a/=6}return t.h=a,t.s=l,t.l=u,t}getRGB(t,e=gt.workingColorSpace){return gt.workingToColorSpace(rt.copy(this),e),t.r=rt.r,t.g=rt.g,t.b=rt.b,t}getStyle(t=_t){gt.workingToColorSpace(rt.copy(this),t);let e=rt.r,n=rt.g,i=rt.b;return t!==_t?\`color(\${t} \${e.toFixed(3)} \${n.toFixed(3)} \${i.toFixed(3)})\`:\`rgb(\${Math.round(e*255)},\${Math.round(n*255)},\${Math.round(i*255)})\`}offsetHSL(t,e,n){return this.getHSL(Ut),this.setHSL(Ut.h+t,Ut.s+e,Ut.l+n)}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(Ut),t.getHSL(je);let n=Zn(Ut.h,je.h,e),i=Zn(Ut.s,je.s,e),s=Zn(Ut.l,je.l,e);return this.setHSL(n,i,s),this}setFromVector3(t){return this.r=t.x,this.g=t.y,this.b=t.z,this}applyMatrix3(t){let e=this.r,n=this.g,i=this.b,s=t.elements;return this.r=s[0]*e+s[3]*n+s[6]*i,this.g=s[1]*e+s[4]*n+s[7]*i,this.b=s[2]*e+s[5]*n+s[8]*i,this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}},rt=new j;j.NAMES=Xs;var vt=new M,Ct=new M,ei=new M,Rt=new M,ie=new M,se=new M,Rs=new M,ni=new M,ii=new M,si=new M,ri=new de,oi=new de,ai=new de,St=class c{constructor(t=new M,e=new M,n=new M){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){i.subVectors(n,e),vt.subVectors(t,e),i.cross(vt);let s=i.lengthSq();return s>0?i.multiplyScalar(1/Math.sqrt(s)):i.set(0,0,0)}static getBarycoord(t,e,n,i,s){vt.subVectors(i,e),Ct.subVectors(n,e),ei.subVectors(t,e);let r=vt.dot(vt),o=vt.dot(Ct),a=vt.dot(ei),l=Ct.dot(Ct),u=Ct.dot(ei),f=r*l-o*o;if(f===0)return s.set(0,0,0),null;let h=1/f,d=(l*a-o*u)*h,p=(r*u-o*a)*h;return s.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Rt)===null?!1:Rt.x>=0&&Rt.y>=0&&Rt.x+Rt.y<=1}static getInterpolation(t,e,n,i,s,r,o,a){return this.getBarycoord(t,e,n,i,Rt)===null?(a.x=0,a.y=0,"z"in a&&(a.z=0),"w"in a&&(a.w=0),null):(a.setScalar(0),a.addScaledVector(s,Rt.x),a.addScaledVector(r,Rt.y),a.addScaledVector(o,Rt.z),a)}static getInterpolatedAttribute(t,e,n,i,s,r){return ri.setScalar(0),oi.setScalar(0),ai.setScalar(0),ri.fromBufferAttribute(t,e),oi.fromBufferAttribute(t,n),ai.fromBufferAttribute(t,i),r.setScalar(0),r.addScaledVector(ri,s.x),r.addScaledVector(oi,s.y),r.addScaledVector(ai,s.z),r}static isFrontFacing(t,e,n,i){return vt.subVectors(n,e),Ct.subVectors(t,e),vt.cross(Ct).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return vt.subVectors(this.c,this.b),Ct.subVectors(this.a,this.b),vt.cross(Ct).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return c.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return c.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,n,i,s){return c.getInterpolation(t,this.a,this.b,this.c,e,n,i,s)}containsPoint(t){return c.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return c.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){let n=this.a,i=this.b,s=this.c,r,o;ie.subVectors(i,n),se.subVectors(s,n),ni.subVectors(t,n);let a=ie.dot(ni),l=se.dot(ni);if(a<=0&&l<=0)return e.copy(n);ii.subVectors(t,i);let u=ie.dot(ii),f=se.dot(ii);if(u>=0&&f<=u)return e.copy(i);let h=a*f-u*l;if(h<=0&&a>=0&&u<=0)return r=a/(a-u),e.copy(n).addScaledVector(ie,r);si.subVectors(t,s);let d=ie.dot(si),p=se.dot(si);if(p>=0&&d<=p)return e.copy(s);let m=d*l-a*p;if(m<=0&&l>=0&&p<=0)return o=l/(l-p),e.copy(n).addScaledVector(se,o);let _=u*p-d*f;if(_<=0&&f-u>=0&&d-p>=0)return Rs.subVectors(s,i),o=(f-u)/(f-u+(d-p)),e.copy(i).addScaledVector(Rs,o);let g=1/(_+m+h);return r=m*g,o=h*g,e.copy(n).addScaledVector(ie,r).addScaledVector(se,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}},X=class{constructor(t=new M(1/0,1/0,1/0),e=new M(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e+=3)this.expandByPoint(Mt.fromArray(t,e));return this}setFromBufferAttribute(t){this.makeEmpty();for(let e=0,n=t.count;e<n;e++)this.expandByPoint(Mt.fromBufferAttribute(t,e));return this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){let n=Mt.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return new this.constructor().copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);let n=t.geometry;if(n!==void 0){let s=n.getAttribute("position");if(e===!0&&s!==void 0&&t.isInstancedMesh!==!0)for(let r=0,o=s.count;r<o;r++)t.isMesh===!0?t.getVertexPosition(r,Mt):Mt.fromBufferAttribute(s,r),Mt.applyMatrix4(t.matrixWorld),this.expandByPoint(Mt);else t.boundingBox!==void 0?(t.boundingBox===null&&t.computeBoundingBox(),tn.copy(t.boundingBox)):(n.boundingBox===null&&n.computeBoundingBox(),tn.copy(n.boundingBox)),tn.applyMatrix4(t.matrixWorld),this.union(tn)}let i=t.children;for(let s=0,r=i.length;s<r;s++)this.expandByObject(i[s],e);return this}containsPoint(t){return t.x>=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,Mt),Mt.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Ce),en.subVectors(this.max,Ce),re.subVectors(t.a,Ce),oe.subVectors(t.b,Ce),ae.subVectors(t.c,Ce),Ft.subVectors(oe,re),Bt.subVectors(ae,oe),Xt.subVectors(re,ae);let e=[0,-Ft.z,Ft.y,0,-Bt.z,Bt.y,0,-Xt.z,Xt.y,Ft.z,0,-Ft.x,Bt.z,0,-Bt.x,Xt.z,0,-Xt.x,-Ft.y,Ft.x,0,-Bt.y,Bt.x,0,-Xt.y,Xt.x,0];return!ci(e,re,oe,ae,en)||(e=[1,0,0,0,1,0,0,0,1],!ci(e,re,oe,ae,en))?!1:(nn.crossVectors(Ft,Bt),e=[nn.x,nn.y,nn.z],ci(e,re,oe,ae,en))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,Mt).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(Mt).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(Pt[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Pt[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Pt[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Pt[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Pt[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Pt[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Pt[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Pt[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Pt),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(t){return this.min.fromArray(t.min),this.max.fromArray(t.max),this}},Pt=[new M,new M,new M,new M,new M,new M,new M,new M],Mt=new M,tn=new X,re=new M,oe=new M,ae=new M,Ft=new M,Bt=new M,Xt=new M,Ce=new M,en=new M,nn=new M,qt=new M;function ci(c,t,e,n,i){for(let s=0,r=c.length-3;s<=r;s+=3){qt.fromArray(c,s);let o=i.x*Math.abs(qt.x)+i.y*Math.abs(qt.y)+i.z*Math.abs(qt.z),a=t.dot(qt),l=e.dot(qt),u=n.dot(qt);if(Math.max(-Math.max(a,l,u),Math.min(a,l,u))>o)return!1}return!0}var J=new M,sn=new H,$r=0,ot=class extends Yt{constructor(t,e,n=!1){if(super(),Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:$r++}),this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=n,this.usage=Ri,this.updateRanges=[],this.gpuType=Gs,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,s=this.itemSize;i<s;i++)this.array[t+i]=e.array[n+i];return this}copyArray(t){return this.array.set(t),this}applyMatrix3(t){if(this.itemSize===2)for(let e=0,n=this.count;e<n;e++)sn.fromBufferAttribute(this,e),sn.applyMatrix3(t),this.setXY(e,sn.x,sn.y);else if(this.itemSize===3)for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.applyMatrix3(t),this.setXYZ(e,J.x,J.y,J.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.applyMatrix4(t),this.setXYZ(e,J.x,J.y,J.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.applyNormalMatrix(t),this.setXYZ(e,J.x,J.y,J.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)J.fromBufferAttribute(this,e),J.transformDirection(t),this.setXYZ(e,J.x,J.y,J.z);return this}set(t,e=0){return this.array.set(t,e),this}getComponent(t,e){let n=this.array[t*this.itemSize+e];return this.normalized&&(n=Ee(n,this.array)),n}setComponent(t,e,n){return this.normalized&&(n=ut(n,this.array)),this.array[t*this.itemSize+e]=n,this}getX(t){let e=this.array[t*this.itemSize];return this.normalized&&(e=Ee(e,this.array)),e}setX(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize]=e,this}getY(t){let e=this.array[t*this.itemSize+1];return this.normalized&&(e=Ee(e,this.array)),e}setY(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize+1]=e,this}getZ(t){let e=this.array[t*this.itemSize+2];return this.normalized&&(e=Ee(e,this.array)),e}setZ(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize+2]=e,this}getW(t){let e=this.array[t*this.itemSize+3];return this.normalized&&(e=Ee(e,this.array)),e}setW(t,e){return this.normalized&&(e=ut(e,this.array)),this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.normalized&&(e=ut(e,this.array),n=ut(n,this.array)),this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,i){return t*=this.itemSize,this.normalized&&(e=ut(e,this.array),n=ut(n,this.array),i=ut(i,this.array)),this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this}setXYZW(t,e,n,i,s){return t*=this.itemSize,this.normalized&&(e=ut(e,this.array),n=ut(n,this.array),i=ut(i,this.array),s=ut(s,this.array)),this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this.array[t+3]=s,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){let t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.from(this.array),normalized:this.normalized};return this.name!==""&&(t.name=this.name),this.usage!==Ri&&(t.usage=this.usage),t}dispose(){this.dispatchEvent({type:"dispose"})}};var pn=class extends ot{constructor(t,e,n){super(new Uint16Array(t),e,n)}};var mn=class extends ot{constructor(t,e,n){super(new Uint32Array(t),e,n)}};var gn=class extends ot{constructor(t,e,n){super(new Float32Array(t),e,n)}},Kr=new X,Re=new M,li=new M,pe=class{constructor(t=new M,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){let n=this.center;e!==void 0?n.copy(e):Kr.setFromPoints(t).getCenter(n);let i=0;for(let s=0,r=t.length;s<r;s++)i=Math.max(i,n.distanceToSquared(t[s]));return this.radius=Math.sqrt(i),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){let e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){let n=this.center.distanceToSquared(t);return e.copy(t),n>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;Re.subVectors(t,this.center);let e=Re.lengthSq();if(e>this.radius*this.radius){let n=Math.sqrt(e),i=(n-this.radius)*.5;this.center.addScaledVector(Re,i/n),this.radius+=i}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(li.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(Re.copy(t.center).add(li)),this.expandByPoint(Re.copy(t.center).sub(li))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(t){return this.radius=t.radius,this.center.fromArray(t.center),this}},Qr=0,mt=new W,ui=new Zt,ce=new M,dt=new X,Pe=new X,K=new M,Ue=class c extends Yt{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:Qr++}),this.uuid=Cn(),this.name="",this.type="BufferGeometry",this.index=null,this.indirect=null,this.indirectOffset=0,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Fr(t)?mn:pn)(t,1):this.index=t,this}setIndirect(t,e=0){return this.indirect=t,this.indirectOffset=e,this}getIndirect(){return this.indirect}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return this.attributes[t]!==void 0}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){let e=this.attributes.position;e!==void 0&&(e.applyMatrix4(t),e.needsUpdate=!0);let n=this.attributes.normal;if(n!==void 0){let s=new N().getNormalMatrix(t);n.applyNormalMatrix(s),n.needsUpdate=!0}let i=this.attributes.tangent;return i!==void 0&&(i.transformDirection(t),i.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(t){return mt.makeRotationFromQuaternion(t),this.applyMatrix4(mt),this}rotateX(t){return mt.makeRotationX(t),this.applyMatrix4(mt),this}rotateY(t){return mt.makeRotationY(t),this.applyMatrix4(mt),this}rotateZ(t){return mt.makeRotationZ(t),this.applyMatrix4(mt),this}translate(t,e,n){return mt.makeTranslation(t,e,n),this.applyMatrix4(mt),this}scale(t,e,n){return mt.makeScale(t,e,n),this.applyMatrix4(mt),this}lookAt(t){return ui.lookAt(t),ui.updateMatrix(),this.applyMatrix4(ui.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(ce).negate(),this.translate(ce.x,ce.y,ce.z),this}setFromPoints(t){let e=this.getAttribute("position");if(e===void 0){let n=[];for(let i=0,s=t.length;i<s;i++){let r=t[i];n.push(r.x,r.y,r.z||0)}this.setAttribute("position",new gn(n,3))}else{let n=Math.min(t.length,e.count);for(let i=0;i<n;i++){let s=t[i];e.setXYZ(i,s.x,s.y,s.z||0)}t.length>e.count&&Q("BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new X);let t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){G("BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new M(-1/0,-1/0,-1/0),new M(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let n=0,i=e.length;n<i;n++){let s=e[n];dt.setFromBufferAttribute(s),this.morphTargetsRelative?(K.addVectors(this.boundingBox.min,dt.min),this.boundingBox.expandByPoint(K),K.addVectors(this.boundingBox.max,dt.max),this.boundingBox.expandByPoint(K)):(this.boundingBox.expandByPoint(dt.min),this.boundingBox.expandByPoint(dt.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&G('BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new pe);let t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){G("BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.",this),this.boundingSphere.set(new M,1/0);return}if(t){let n=this.boundingSphere.center;if(dt.setFromBufferAttribute(t),e)for(let s=0,r=e.length;s<r;s++){let o=e[s];Pe.setFromBufferAttribute(o),this.morphTargetsRelative?(K.addVectors(dt.min,Pe.min),dt.expandByPoint(K),K.addVectors(dt.max,Pe.max),dt.expandByPoint(K)):(dt.expandByPoint(Pe.min),dt.expandByPoint(Pe.max))}dt.getCenter(n);let i=0;for(let s=0,r=t.count;s<r;s++)K.fromBufferAttribute(t,s),i=Math.max(i,n.distanceToSquared(K));if(e)for(let s=0,r=e.length;s<r;s++){let o=e[s],a=this.morphTargetsRelative;for(let l=0,u=o.count;l<u;l++)K.fromBufferAttribute(o,l),a&&(ce.fromBufferAttribute(t,l),K.add(ce)),i=Math.max(i,n.distanceToSquared(K))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&G('BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}computeTangents(){let t=this.index,e=this.attributes;if(t===null||e.position===void 0||e.normal===void 0||e.uv===void 0){G("BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)");return}let n=e.position,i=e.normal,s=e.uv;this.hasAttribute("tangent")===!1&&this.setAttribute("tangent",new ot(new Float32Array(4*n.count),4));let r=this.getAttribute("tangent"),o=[],a=[];for(let A=0;A<n.count;A++)o[A]=new M,a[A]=new M;let l=new M,u=new M,f=new M,h=new H,d=new H,p=new H,m=new M,_=new M;function g(A,E,C){l.fromBufferAttribute(n,A),u.fromBufferAttribute(n,E),f.fromBufferAttribute(n,C),h.fromBufferAttribute(s,A),d.fromBufferAttribute(s,E),p.fromBufferAttribute(s,C),u.sub(l),f.sub(l),d.sub(h),p.sub(h);let R=1/(d.x*p.y-p.x*d.y);isFinite(R)&&(m.copy(u).multiplyScalar(p.y).addScaledVector(f,-d.y).multiplyScalar(R),_.copy(f).multiplyScalar(d.x).addScaledVector(u,-p.x).multiplyScalar(R),o[A].add(m),o[E].add(m),o[C].add(m),a[A].add(_),a[E].add(_),a[C].add(_))}let x=this.groups;x.length===0&&(x=[{start:0,count:t.count}]);for(let A=0,E=x.length;A<E;++A){let C=x[A],R=C.start,w=C.count;for(let P=R,L=R+w;P<L;P+=3)g(t.getX(P+0),t.getX(P+1),t.getX(P+2))}let y=new M,S=new M,v=new M,b=new M;function T(A){v.fromBufferAttribute(i,A),b.copy(v);let E=o[A];y.copy(E),y.sub(v.multiplyScalar(v.dot(E))).normalize(),S.crossVectors(b,E);let R=S.dot(a[A])<0?-1:1;r.setXYZW(A,y.x,y.y,y.z,R)}for(let A=0,E=x.length;A<E;++A){let C=x[A],R=C.start,w=C.count;for(let P=R,L=R+w;P<L;P+=3)T(t.getX(P+0)),T(t.getX(P+1)),T(t.getX(P+2))}}computeVertexNormals(){let t=this.index,e=this.getAttribute("position");if(e!==void 0){let n=this.getAttribute("normal");if(n===void 0)n=new ot(new Float32Array(e.count*3),3),this.setAttribute("normal",n);else for(let h=0,d=n.count;h<d;h++)n.setXYZ(h,0,0,0);let i=new M,s=new M,r=new M,o=new M,a=new M,l=new M,u=new M,f=new M;if(t)for(let h=0,d=t.count;h<d;h+=3){let p=t.getX(h+0),m=t.getX(h+1),_=t.getX(h+2);i.fromBufferAttribute(e,p),s.fromBufferAttribute(e,m),r.fromBufferAttribute(e,_),u.subVectors(r,s),f.subVectors(i,s),u.cross(f),o.fromBufferAttribute(n,p),a.fromBufferAttribute(n,m),l.fromBufferAttribute(n,_),o.add(u),a.add(u),l.add(u),n.setXYZ(p,o.x,o.y,o.z),n.setXYZ(m,a.x,a.y,a.z),n.setXYZ(_,l.x,l.y,l.z)}else for(let h=0,d=e.count;h<d;h+=3)i.fromBufferAttribute(e,h+0),s.fromBufferAttribute(e,h+1),r.fromBufferAttribute(e,h+2),u.subVectors(r,s),f.subVectors(i,s),u.cross(f),n.setXYZ(h+0,u.x,u.y,u.z),n.setXYZ(h+1,u.x,u.y,u.z),n.setXYZ(h+2,u.x,u.y,u.z);this.normalizeNormals(),n.needsUpdate=!0}}normalizeNormals(){let t=this.attributes.normal;for(let e=0,n=t.count;e<n;e++)K.fromBufferAttribute(t,e),K.normalize(),t.setXYZ(e,K.x,K.y,K.z)}toNonIndexed(){function t(o,a){let l=o.array,u=o.itemSize,f=o.normalized,h=new l.constructor(a.length*u),d=0,p=0;for(let m=0,_=a.length;m<_;m++){o.isInterleavedBufferAttribute?d=a[m]*o.data.stride+o.offset:d=a[m]*u;for(let g=0;g<u;g++)h[p++]=l[d++]}return new ot(h,u,f)}if(this.index===null)return Q("BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed."),this;let e=new c,n=this.index.array,i=this.attributes;for(let o in i){let a=i[o],l=t(a,n);e.setAttribute(o,l)}let s=this.morphAttributes;for(let o in s){let a=[],l=s[o];for(let u=0,f=l.length;u<f;u++){let h=l[u],d=t(h,n);a.push(d)}e.morphAttributes[o]=a}e.morphTargetsRelative=this.morphTargetsRelative;let r=this.groups;for(let o=0,a=r.length;o<a;o++){let l=r[o];e.addGroup(l.start,l.count,l.materialIndex)}return e}toJSON(){let t={metadata:{version:4.7,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,this.name!==""&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),this.parameters!==void 0){let a=this.parameters;for(let l in a)a[l]!==void 0&&(t[l]=a[l]);return t}t.data={attributes:{}};let e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});let n=this.attributes;for(let a in n){let l=n[a];t.data.attributes[a]=l.toJSON(t.data)}let i={},s=!1;for(let a in this.morphAttributes){let l=this.morphAttributes[a],u=[];for(let f=0,h=l.length;f<h;f++){let d=l[f];u.push(d.toJSON(t.data))}u.length>0&&(i[a]=u,s=!0)}s&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);let r=this.groups;r.length>0&&(t.data.groups=JSON.parse(JSON.stringify(r)));let o=this.boundingSphere;return o!==null&&(t.data.boundingSphere=o.toJSON()),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;let e={};this.name=t.name;let n=t.index;n!==null&&this.setIndex(n.clone());let i=t.attributes;for(let l in i){let u=i[l];this.setAttribute(l,u.clone(e))}let s=t.morphAttributes;for(let l in s){let u=[],f=s[l];for(let h=0,d=f.length;h<d;h++)u.push(f[h].clone(e));this.morphAttributes[l]=u}this.morphTargetsRelative=t.morphTargetsRelative;let r=t.groups;for(let l=0,u=r.length;l<u;l++){let f=r[l];this.addGroup(f.start,f.count,f.materialIndex)}let o=t.boundingBox;o!==null&&(this.boundingBox=o.clone());let a=t.boundingSphere;return a!==null&&(this.boundingSphere=a.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:"dispose"})}};var hi=new M,jr=new M,to=new N,Jt=class{constructor(t=new M(1,0,0),e=0){this.isPlane=!0,this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){let i=hi.subVectors(n,e).cross(jr.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){let t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(t).addScaledVector(this.normal,-this.distanceToPoint(t))}intersectLine(t,e,n=!0){let i=t.delta(hi),s=this.normal.dot(i);if(s===0)return this.distanceToPoint(t.start)===0?e.copy(t.start):null;let r=-(t.start.dot(this.normal)+this.constant)/s;return n===!0&&(r<0||r>1)?null:e.copy(t.start).addScaledVector(i,r)}intersectsLine(t){let e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){let n=e||to.getNormalMatrix(t),i=this.coplanarPoint(hi).applyMatrix4(t),s=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(s),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new this.constructor().copy(this)}};function qs(c){let t={};for(let e in c){t[e]={};for(let n in c[e]){let i=c[e][n];if(Ps(i))i.isRenderTargetTexture?(Q("UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms()."),t[e][n]=null):t[e][n]=i.clone();else if(Array.isArray(i))if(Ps(i[0])){let s=[];for(let r=0,o=i.length;r<o;r++)s[r]=i[r].clone();t[e][n]=s}else t[e][n]=i.slice();else t[e][n]=i}}return t}function ct(c){let t={};for(let e=0;e<c.length;e++){let n=qs(c[e]);for(let i in n)t[i]=n[i]}return t}function Ps(c){return c&&(c.isColor||c.isMatrix3||c.isMatrix4||c.isVector2||c.isVector3||c.isVector4||c.isTexture||c.isQuaternion)}function rn(c,t){return!c||c.constructor===t?c:typeof t.BYTES_PER_ELEMENT=="number"?new t(c):Array.prototype.slice.call(c)}var Ot=class{constructor(t,e,n,i){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=i!==void 0?i:new e.constructor(n),this.sampleValues=e,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(t){let e=this.parameterPositions,n=this._cachedIndex,i=e[n],s=e[n-1];n:{t:{let r;e:{i:if(!(t<i)){for(let o=n+2;;){if(i===void 0){if(t<s)break i;return n=e.length,this._cachedIndex=n,this.copySampleValue_(n-1)}if(n===o)break;if(s=i,i=e[++n],t<i)break t}r=e.length;break e}if(!(t>=s)){let o=e[1];t<o&&(n=2,s=o);for(let a=n-2;;){if(s===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(n===a)break;if(i=s,s=e[--n-1],t>=s)break t}r=n,n=0;break e}break n}for(;n<r;){let o=n+r>>>1;t<e[o]?r=o:n=o+1}if(i=e[n],s=e[n-1],s===void 0)return this._cachedIndex=0,this.copySampleValue_(0);if(i===void 0)return n=e.length,this._cachedIndex=n,this.copySampleValue_(n-1)}this._cachedIndex=n,this.intervalChanged_(n,s,i)}return this.interpolate_(n,s,t,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){let e=this.resultBuffer,n=this.sampleValues,i=this.valueSize,s=t*i;for(let r=0;r!==i;++r)e[r]=n[s+r];return e}interpolate_(){throw new Error("call to abstract method")}intervalChanged_(){}},_n=class extends Ot{constructor(t,e,n,i){super(t,e,n,i),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:Ti,endingEnd:Ti}}intervalChanged_(t,e,n){let i=this.parameterPositions,s=t-2,r=t+1,o=i[s],a=i[r];if(o===void 0)switch(this.getSettings_().endingStart){case Ai:s=t,o=2*e-n;break;case Ei:s=i.length-2,o=e+i[s]-i[s+1];break;default:s=t,o=n}if(a===void 0)switch(this.getSettings_().endingEnd){case Ai:r=t,a=2*n-e;break;case Ei:r=1,a=n+i[1]-i[0];break;default:r=t-1,a=e}let l=(n-e)*.5,u=this.valueSize;this._weightPrev=l/(e-o),this._weightNext=l/(a-n),this._offsetPrev=s*u,this._offsetNext=r*u}interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,u=this._offsetPrev,f=this._offsetNext,h=this._weightPrev,d=this._weightNext,p=(n-e)/(i-e),m=p*p,_=m*p,g=-h*_+2*h*m-h*p,x=(1+h)*_+(-1.5-2*h)*m+(-.5+h)*p+1,y=(-1-d)*_+(1.5+d)*m+.5*p,S=d*_-d*m;for(let v=0;v!==o;++v)s[v]=g*r[u+v]+x*r[l+v]+y*r[a+v]+S*r[f+v];return s}},xn=class extends Ot{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,u=(n-e)/(i-e),f=1-u;for(let h=0;h!==o;++h)s[h]=r[l+h]*f+r[a+h]*u;return s}},yn=class extends Ot{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t){return this.copySampleValue_(t-1)}},vn=class extends Ot{interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,u=this.settings||this.DefaultSettings_,f=u.inTangents,h=u.outTangents;if(!f||!h){let m=(n-e)/(i-e),_=1-m;for(let g=0;g!==o;++g)s[g]=r[l+g]*_+r[a+g]*m;return s}let d=o*2,p=t-1;for(let m=0;m!==o;++m){let _=r[l+m],g=r[a+m],x=p*d+m*2,y=h[x],S=h[x+1],v=t*d+m*2,b=f[v],T=f[v+1],A=(n-e)/(i-e),E,C,R,w,P;for(let L=0;L<8;L++){E=A*A,C=E*A,R=1-A,w=R*R,P=w*R;let O=P*e+3*w*A*y+3*R*E*b+C*i-n;if(Math.abs(O)<1e-10)break;let it=3*w*(y-e)+6*R*A*(b-y)+3*E*(i-b);if(Math.abs(it)<1e-10)break;A=A-O/it,A=Math.max(0,Math.min(1,A))}s[m]=P*_+3*w*A*S+3*R*E*T+C*g}return s}},pt=class{constructor(t,e,n,i){if(t===void 0)throw new Error("THREE.KeyframeTrack: track name is undefined");if(e===void 0||e.length===0)throw new Error("THREE.KeyframeTrack: no keyframes in track named "+t);this.name=t,this.times=rn(e,this.TimeBufferType),this.values=rn(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(t){let e=t.constructor,n;if(e.toJSON!==this.toJSON)n=e.toJSON(t);else{n={name:t.name,times:rn(t.times,Array),values:rn(t.values,Array)};let i=t.getInterpolation();i!==t.DefaultInterpolation&&(n.interpolation=i)}return n.type=t.ValueTypeName,n}InterpolantFactoryMethodDiscrete(t){return new yn(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new xn(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new _n(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodBezier(t){let e=new vn(this.times,this.values,this.getValueSize(),t);return this.settings&&(e.settings=this.settings),e}setInterpolation(t){let e;switch(t){case De:e=this.InterpolantFactoryMethodDiscrete;break;case ln:e=this.InterpolantFactoryMethodLinear;break;case an:e=this.InterpolantFactoryMethodSmooth;break;case bi:e=this.InterpolantFactoryMethodBezier;break}if(e===void 0){let n="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(this.createInterpolant===void 0)if(t!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw new Error(n);return Q("KeyframeTrack:",n),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return De;case this.InterpolantFactoryMethodLinear:return ln;case this.InterpolantFactoryMethodSmooth:return an;case this.InterpolantFactoryMethodBezier:return bi}}getValueSize(){return this.values.length/this.times.length}shift(t){if(t!==0){let e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]+=t}return this}scale(t){if(t!==1){let e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]*=t}return this}trim(t,e){let n=this.times,i=n.length,s=0,r=i-1;for(;s!==i&&n[s]<t;)++s;for(;r!==-1&&n[r]>e;)--r;if(++r,s!==0||r!==i){s>=r&&(r=Math.max(r,1),s=r-1);let o=this.getValueSize();this.times=n.slice(s,r),this.values=this.values.slice(s*o,r*o)}return this}validate(){let t=!0,e=this.getValueSize();e-Math.floor(e)!==0&&(G("KeyframeTrack: Invalid value size in track.",this),t=!1);let n=this.times,i=this.values,s=n.length;s===0&&(G("KeyframeTrack: Track is empty.",this),t=!1);let r=null;for(let o=0;o!==s;o++){let a=n[o];if(typeof a=="number"&&isNaN(a)){G("KeyframeTrack: Time is not a valid number.",this,o,a),t=!1;break}if(r!==null&&r>a){G("KeyframeTrack: Out of order keys.",this,o,a,r),t=!1;break}r=a}if(i!==void 0&&Br(i))for(let o=0,a=i.length;o!==a;++o){let l=i[o];if(isNaN(l)){G("KeyframeTrack: Value is not a valid number.",this,o,l),t=!1;break}}return t}optimize(){let t=this.times.slice(),e=this.values.slice(),n=this.getValueSize(),i=this.getInterpolation()===an,s=t.length-1,r=1;for(let o=1;o<s;++o){let a=!1,l=t[o],u=t[o+1];if(l!==u&&(o!==1||l!==t[0]))if(i)a=!0;else{let f=o*n,h=f-n,d=f+n;for(let p=0;p!==n;++p){let m=e[f+p];if(m!==e[h+p]||m!==e[d+p]){a=!0;break}}}if(a){if(o!==r){t[r]=t[o];let f=o*n,h=r*n;for(let d=0;d!==n;++d)e[h+d]=e[f+d]}++r}}if(s>0){t[r]=t[s];for(let o=s*n,a=r*n,l=0;l!==n;++l)e[a+l]=e[o+l];++r}return r!==t.length?(this.times=t.slice(0,r),this.values=e.slice(0,r*n)):(this.times=t,this.values=e),this}clone(){let t=this.times.slice(),e=this.values.slice(),n=this.constructor,i=new n(this.name,t,e);return i.createInterpolant=this.createInterpolant,i}};pt.prototype.ValueTypeName="";pt.prototype.TimeBufferType=Float32Array;pt.prototype.ValueBufferType=Float32Array;pt.prototype.DefaultInterpolation=ln;var zt=class extends pt{constructor(t,e,n){super(t,e,n)}};zt.prototype.ValueTypeName="bool";zt.prototype.ValueBufferType=Array;zt.prototype.DefaultInterpolation=De;zt.prototype.InterpolantFactoryMethodLinear=void 0;zt.prototype.InterpolantFactoryMethodSmooth=void 0;var Mn=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}};Mn.prototype.ValueTypeName="color";var Sn=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}};Sn.prototype.ValueTypeName="number";var bn=class extends Ot{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){let s=this.resultBuffer,r=this.sampleValues,o=this.valueSize,a=(n-e)/(i-e),l=t*o;for(let u=l+o;l!==u;l+=4)Lt.slerpFlat(s,0,r,l-o,r,l,a);return s}},Fe=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}InterpolantFactoryMethodLinear(t){return new bn(this.times,this.values,this.getValueSize(),t)}};Fe.prototype.ValueTypeName="quaternion";Fe.prototype.InterpolantFactoryMethodSmooth=void 0;var Vt=class extends pt{constructor(t,e,n){super(t,e,n)}};Vt.prototype.ValueTypeName="string";Vt.prototype.ValueBufferType=Array;Vt.prototype.DefaultInterpolation=De;Vt.prototype.InterpolantFactoryMethodLinear=void 0;Vt.prototype.InterpolantFactoryMethodSmooth=void 0;var Tn=class extends pt{constructor(t,e,n,i){super(t,e,n,i)}};Tn.prototype.ValueTypeName="vector";var An=class{constructor(t,e,n){let i=this,s=!1,r=0,o=0,a,l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this._abortController=null,this.itemStart=function(u){o++,s===!1&&i.onStart!==void 0&&i.onStart(u,r,o),s=!0},this.itemEnd=function(u){r++,i.onProgress!==void 0&&i.onProgress(u,r,o),r===o&&(s=!1,i.onLoad!==void 0&&i.onLoad())},this.itemError=function(u){i.onError!==void 0&&i.onError(u)},this.resolveURL=function(u){return a?a(u):u},this.setURLModifier=function(u){return a=u,this},this.addHandler=function(u,f){return l.push(u,f),this},this.removeHandler=function(u){let f=l.indexOf(u);return f!==-1&&l.splice(f,2),this},this.getHandler=function(u){for(let f=0,h=l.length;f<h;f+=2){let d=l[f],p=l[f+1];if(d.global&&(d.lastIndex=0),d.test(u))return p}return null},this.abort=function(){return this.abortController.abort(),this._abortController=null,this}}get abortController(){return this._abortController||(this._abortController=new AbortController),this._abortController}},Ys=new An,En=class{constructor(t){this.manager=t!==void 0?t:Ys,this.crossOrigin="anonymous",this.withCredentials=!1,this.path="",this.resourcePath="",this.requestHeader={},typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}load(){}loadAsync(t,e){let n=this;return new Promise(function(i,s){n.load(t,i,e,s)})}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}abort(){return this}};En.DEFAULT_MATERIAL_NAME="__DEFAULT";var Yi="\\\\[\\\\]\\\\.:\\\\/",eo=new RegExp("["+Yi+"]","g"),Zi="[^"+Yi+"]",no="[^"+Yi.replace("\\\\.","")+"]",io=/((?:WC+[\\/:])*)/.source.replace("WC",Zi),so=/(WCOD+)?/.source.replace("WCOD",no),ro=/(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace("WC",Zi),oo=/\\.(WC+)(?:\\[(.+)\\])?/.source.replace("WC",Zi),ao=new RegExp("^"+io+so+ro+oo+"$"),co=["material","materials","bones","map"],Di=class{constructor(t,e,n){let i=n||k.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}getValue(t,e){this.bind();let n=this._targetGroup.nCachedObjects_,i=this._bindings[n];i!==void 0&&i.getValue(t,e)}setValue(t,e){let n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,s=n.length;i!==s;++i)n[i].setValue(t,e)}bind(){let t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()}unbind(){let t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}},k=class c{constructor(t,e,n){this.path=e,this.parsedPath=n||c.parseTrackName(e),this.node=c.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new c.Composite(t,e,n):new c(t,e,n)}static sanitizeNodeName(t){return t.replace(/\\s/g,"_").replace(eo,"")}static parseTrackName(t){let e=ao.exec(t);if(e===null)throw new Error("PropertyBinding: Cannot parse trackName: "+t);let n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(".");if(i!==void 0&&i!==-1){let s=n.nodeName.substring(i+1);co.indexOf(s)!==-1&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=s)}if(n.propertyName===null||n.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n}static findNode(t,e){if(e===void 0||e===""||e==="."||e===-1||e===t.name||e===t.uuid)return t;if(t.skeleton){let n=t.skeleton.getBoneByName(e);if(n!==void 0)return n}if(t.children){let n=function(s){for(let r=0;r<s.length;r++){let o=s[r];if(o.name===e||o.uuid===e)return o;let a=n(o.children);if(a)return a}return null},i=n(t.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.targetObject[this.propertyName]}_getValue_array(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)t[e++]=n[i]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++]}_setValue_array_setNeedsUpdate(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){let n=this.resolvedProperty;for(let i=0,s=n.length;i!==s;++i)n[i]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node,e=this.parsedPath,n=e.objectName,i=e.propertyName,s=e.propertyIndex;if(t||(t=c.findNode(this.rootNode,e.nodeName),this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t){Q("PropertyBinding: No target node found for track: "+this.path+".");return}if(n){let l=e.objectIndex;switch(n){case"materials":if(!t.material){G("PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!t.material.materials){G("PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}t=t.material.materials;break;case"bones":if(!t.skeleton){G("PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}t=t.skeleton.bones;for(let u=0;u<t.length;u++)if(t[u].name===l){l=u;break}break;case"map":if("map"in t){t=t.map;break}if(!t.material){G("PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!t.material.map){G("PropertyBinding: Can not bind to material.map as node.material does not have a map.",this);return}t=t.material.map;break;default:if(t[n]===void 0){G("PropertyBinding: Can not bind to objectName of node undefined.",this);return}t=t[n]}if(l!==void 0){if(t[l]===void 0){G("PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,t);return}t=t[l]}}let r=t[i];if(r===void 0){let l=e.nodeName;G("PropertyBinding: Trying to update property for track: "+l+"."+i+" but it wasn't found.",t);return}let o=this.Versioning.None;this.targetObject=t,t.isMaterial===!0?o=this.Versioning.NeedsUpdate:t.isObject3D===!0&&(o=this.Versioning.MatrixWorldNeedsUpdate);let a=this.BindingType.Direct;if(s!==void 0){if(i==="morphTargetInfluences"){if(!t.geometry){G("PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);return}if(!t.geometry.morphAttributes){G("PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}t.morphTargetDictionary[s]!==void 0&&(s=t.morphTargetDictionary[s])}a=this.BindingType.ArrayElement,this.resolvedProperty=r,this.propertyIndex=s}else r.fromArray!==void 0&&r.toArray!==void 0?(a=this.BindingType.HasFromToArray,this.resolvedProperty=r):Array.isArray(r)?(a=this.BindingType.EntireArray,this.resolvedProperty=r):this.propertyName=i;this.getValue=this.GetterByBindingType[a],this.setValue=this.SetterByBindingTypeAndVersioning[a][o]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}};k.Composite=Di;k.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3};k.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2};k.prototype.GetterByBindingType=[k.prototype._getValue_direct,k.prototype._getValue_array,k.prototype._getValue_arrayElement,k.prototype._getValue_toArray];k.prototype.SetterByBindingTypeAndVersioning=[[k.prototype._setValue_direct,k.prototype._setValue_direct_setNeedsUpdate,k.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[k.prototype._setValue_array,k.prototype._setValue_array_setNeedsUpdate,k.prototype._setValue_array_setMatrixWorldNeedsUpdate],[k.prototype._setValue_arrayElement,k.prototype._setValue_arrayElement_setNeedsUpdate,k.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[k.prototype._setValue_fromArray,k.prototype._setValue_fromArray_setNeedsUpdate,k.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];var vl=new Float32Array(1);var Ni=class c{static{c.prototype.isMatrix2=!0}constructor(t,e,n,i){this.elements=[1,0,0,1],t!==void 0&&this.set(t,e,n,i)}identity(){return this.set(1,0,0,1),this}fromArray(t,e=0){for(let n=0;n<4;n++)this.elements[n]=t[n+e];return this}set(t,e,n,i){let s=this.elements;return s[0]=t,s[2]=e,s[1]=n,s[3]=i,this}};var Is=new M,on=new M,le=new M,ue=new M,fi=new M,lo=new M,uo=new M,at=class{constructor(t=new M,e=new M){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){Is.subVectors(t,this.start),on.subVectors(this.end,this.start);let n=on.dot(on);if(n===0)return 0;let s=on.dot(Is)/n;return e&&(s=U(s,0,1)),s}closestPointToPoint(t,e,n){let i=this.closestPointToPointParameter(t,e);return this.delta(n).multiplyScalar(i).add(this.start)}distanceSqToLine3(t,e=lo,n=uo){let i=10000000000000001e-32,s,r,o=this.start,a=t.start,l=this.end,u=t.end;le.subVectors(l,o),ue.subVectors(u,a),fi.subVectors(o,a);let f=le.dot(le),h=ue.dot(ue),d=ue.dot(fi);if(f<=i&&h<=i)return e.copy(o),n.copy(a),e.sub(n),e.dot(e);if(f<=i)s=0,r=d/h,r=U(r,0,1);else{let p=le.dot(fi);if(h<=i)r=0,s=U(-p/f,0,1);else{let m=le.dot(ue),_=f*h-m*m;_!==0?s=U((m*d-p*h)/_,0,1):s=0,r=(m*s+d)/h,r<0?(r=0,s=U(-p/f,0,1)):r>1&&(r=1,s=U((m-p)/f,0,1))}}return e.copy(o).addScaledVector(le,s),n.copy(a).addScaledVector(ue,r),e.distanceToSquared(n)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return new this.constructor().copy(this)}};typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"184"}}));typeof window<"u"&&(window.__THREE__?Q("WARNING: Multiple instances of Three.js being imported."):window.__THREE__="184");var ho=\`#ifdef USE_ALPHAHASH
|
|
2
2
|
if ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;
|
|
3
3
|
#endif\`,fo=\`#ifdef USE_ALPHAHASH
|
|
4
4
|
const float ALPHA_HASH_SCALE = 0.05;
|
|
@@ -3661,15 +3661,15 @@ 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
|
|
3664
|
+
`});var TS={};jh(TS,{BindingBuilder:()=>oh,DEFAULT_SCENE_CONFIG:()=>gi,MATERIAL_BLENDING_MODES:()=>ud,MATERIAL_SIDES:()=>dd,ModelViewer:()=>Lp,SimpleModelViewer:()=>dh,defineObjectBindings:()=>R0,material:()=>Sd,patchBindings:()=>ja,patchSceneConfig:()=>Md,selectBindingKeys:()=>Gr,selectBindings:()=>_d,useObjectBinding:()=>M0,useObjectBindingIds:()=>T0,useObjectBindings:()=>E0,useSceneConfig:()=>k0,useShareableViewerState:()=>H0,useViewerActions:()=>B0,useViewerAnimations:()=>nd,useViewerCamera:()=>td,useViewerConnection:()=>N0,useViewerEffects:()=>U0,useViewerHover:()=>L0,useViewerModel:()=>D0,useViewerSelection:()=>_0});module.exports=zx(TS);var z=require("react");var ro=require("three"),ki=require("three-mesh-bvh"),qh=!1,no=new WeakMap,ls=new WeakMap;function Vx(){qh||(ro.Mesh.prototype.raycast=ki.acceleratedRaycast,qh=!0)}function Fx(e){let t=new Set;return e.traverse(n=>{let i=n.geometry;!i||!i.attributes?.position||t.add(i)}),[...t]}function Yh(e){let t=0;for(let n of e){let i=n.index?n.index.count:n.attributes.position.count;t+=i/3}return t}var xa=12e6;function Bl(e){return cs(e)>xa}function cs(e){let t=new Set;return e.traverse(n=>{let i=n.geometry;i?.attributes?.position&&t.add(i)}),Yh([...t])}function jx(e,t){return new Promise((n,i)=>{let r=l=>{let u=l.data;if(!u||!u.error&&!u.serialized)return;if(e.removeEventListener("message",r),e.removeEventListener("error",a),u.error){i(new Error(String(u.error)));return}let{serialized:d}=u,h=ki.MeshBVH.deserialize(d,t,{setIndex:!1});d.index&&(t.index?t.index.array=d.index:t.setIndex(new ro.BufferAttribute(d.index,1,!1))),t.boundingBox=h.getBoundingBox(new ro.Box3),n(h)},a=l=>{e.removeEventListener("message",r),e.removeEventListener("error",a),i(new Error(l.message||"BVH worker error"))};e.addEventListener("message",r),e.addEventListener("error",a);let o=t.index?t.index.array.slice():null,s=t.attributes.position.array.slice(),c=[s,...o?[o]:[]].map(l=>l.buffer);e.postMessage({index:o,position:s,options:{groups:[...t.groups]}},c)})}async function Hx(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await Promise.resolve().then(()=>(Xh(),Wh)),t=new Blob([e],{type:"text/javascript"}),n=URL.createObjectURL(t),i=new Worker(n);return{worker:i,dispose:()=>{i.terminate(),URL.revokeObjectURL(n)}}}catch{return null}}async function Gx(e,t){if(t)try{return await jx(t,e)}catch{}let n=ki.computeBoundsTree.call(e);return e.boundsTree=void 0,await new Promise(i=>setTimeout(i,0)),n}async function Wx(e,t,n){if(e.boundsTree)return;if(t.buildPromise)return t.buildPromise;let i=(async()=>{let r=await n();t.references>0&&!e.boundsTree&&(e.boundsTree=r,t.ownedTree=r)})();return t.buildPromise=i.finally(()=>{t.buildPromise=void 0,t.references===0&&no.delete(e)}),t.buildPromise}async function io(e,t){if(t?.aborted)return;let n=ls.get(e);if(!n){if(n=Fx(e),Yh(n)>xa){ls.set(e,[]);return}ls.set(e,n);for(let r of n){let a=no.get(r)??{references:0};a.references+=1,no.set(r,a)}}if(n.length===0)return;Vx();let i=await Hx();if(t?.aborted){i?.dispose();return}try{for(let r of n){if(t?.aborted)return;let a=no.get(r);a&&await Wx(r,a,()=>Gx(r,i?.worker))}}finally{i?.dispose()}}function ya(e){let t=ls.get(e);if(t){ls.delete(e);for(let n of t){let i=no.get(n);i&&(i.references=Math.max(0,i.references-1),!(i.references>0)&&(i.ownedTree&&n.boundsTree===i.ownedTree&&(ki.disposeBoundsTree.call(n),n.boundsTree=void 0),i.ownedTree=void 0,i.buildPromise||no.delete(n)))}}}var ed=require("@react-three/drei"),Ro=require("@react-three/fiber"),Vb=require("qrcode.react"),mt=require("three");var $h=require("lucide-react");var Li=require("react/jsx-runtime");function wa({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)($h.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 Kh=require("react"),Nl=class extends Kh.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,i){this.props.onLoadError?.(n)}render(){return this.state.hasError?null:this.props.children}};var ao=require("three");var Zh="riEditorGizmo";function Jh(e){return e.userData[Zh]=!0,e}function Qh(e){let t=[];return e.traverse(n=>{n.visible&&n.userData[Zh]&&(n.visible=!1,t.push(n))}),()=>{for(let n of t)n.visible=!0}}function Ol(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:n,scene:i,camera:r,invalidate:a}=e;if(!n.getContextAttributes().preserveDrawingBuffer)return Promise.reject(new Error("Screenshot capture is disabled. Set preserveDrawingBuffer on ModelViewer to enable it."));let{transparent:o=!1}=t,s=n.getSize(new ao.Vector2),c=n.getPixelRatio(),l=r instanceof ao.PerspectiveCamera?r.aspect:null,u=i.background,d=t.width??s.x,h=t.height??s.y,f=d!==s.x||h!==s.y,m=Qh(i);return o&&(i.background=null),f&&(n.setPixelRatio(1),n.setSize(d,h,!1),r instanceof ao.PerspectiveCamera&&(r.aspect=d/h,r.updateProjectionMatrix())),a(),new Promise((x,E)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let w,p;try{w=n.domElement.toDataURL("image/png")}catch(g){p=g}m(),o&&(i.background=u),f&&(n.setPixelRatio(c),n.setSize(s.x,s.y,!1),r instanceof ao.PerspectiveCamera&&l!==null&&(r.aspect=l,r.updateProjectionMatrix())),a(),p?E(p):x(w)})})})}var Br=require("react");var em=require("three-stdlib");function fi(e,t){let n=URL.createObjectURL(e),i=document.createElement("a");i.href=n,i.download=t,i.style.display="none";try{document.body.appendChild(i),i.click()}finally{i.remove(),window.setTimeout(()=>{URL.revokeObjectURL(n)},1e3)}}function tm({scene:e,objectBindings:t,matRefs:n,downloadFilename:i,onComplete:r}){import("three").then(({Group:a,Mesh:o})=>{let s=new a,c=new Map;for(let[d,h]of Object.entries(t))c.set(h.modelObjectId??d,d);let l=d=>{let h=d;for(;h;){let f=h.name||h.uuid,m=c.get(f)??f,x=t[m];if(x?x.visible===!1:h.visible===!1)return!1;h=h.parent}return!0};e.traverse(d=>{let h=d;if(!h.isMesh||!h.geometry||!l(h))return;let f=h.name||h.uuid,m=c.get(f)??f,x=n[m]??h.material;if(!x)return;let E=new o(h.geometry,x);E.name=f,E.applyMatrix4(h.matrixWorld),s.add(E)}),new em.GLTFExporter().parse(s,d=>{let h=d instanceof ArrayBuffer?new Blob([d],{type:"model/gltf-binary"}):new Blob([JSON.stringify(d)],{type:"model/gltf+json"}),f=d instanceof ArrayBuffer?".glb":".gltf";fi(h,`${i}${f}`),r()},d=>{console.error("GLTFExporter error:",d),r()},{binary:!0})})}var om=require("fflate");var nm=require("fflate");function Il(e,t=6){return new Promise((n,i)=>{(0,nm.zip)(e,{level:t},(r,a)=>{r?i(r):n(a)})})}var ds=2048,rm=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function im(e){return e.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}function Jd(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function sm(e){return Jd(e,"model")}function Kd(e,t){return e.index?Math.round(e.index.getX(t)):t}function Xx(e,t,n){let i=Kd(e,n),r=Kd(e,n+1),a=Kd(e,n+2);if(i>=t.count||r>=t.count||a>=t.count)return null;let o=[{index:i,u:t.getX(i),v:t.getY(i)},{index:r,u:t.getX(r),v:t.getY(r)},{index:a,u:t.getX(a),v:t.getY(a)}];return o.every(s=>Number.isFinite(s.u)&&Number.isFinite(s.v))?o:null}function am(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function Zd(e,t,n,i){let r,a;i?(r=t.index,a=n.index):(r=am(t),a=am(n));let o=r<a?`${r}|${a}`:`${a}|${r}`,s=e.get(o);s?s.count+=1:e.set(o,{count:1,start:t,end:n})}function qx(e,t,n){Zd(e,t[0],t[1],n),Zd(e,t[1],t[2],n),Zd(e,t[2],t[0],n)}function Yx(e,t){return Array.isArray(e)?e[t]??null:e}function $x(e){let t=new Map,n=0,i=0,r=0;return e.traverse(a=>{let o=a;if(!o.isMesh||!o.geometry||!o.material)return;let s=o.geometry,c=s.getAttribute("uv");if(!c||c.itemSize<2||c.count<3)return;n+=1;let l=o.name||`Mesh ${n}`,u=s.index?.count??c.count,d=s.groups.length>0?s.groups:[{start:0,count:u,materialIndex:0}];for(let h of d){let f=h.materialIndex??0,m=Yx(o.material,f);if(!m)continue;let x=t.get(m.uuid);x||(i+=1,x={name:m.name||`Material ${i}`,layers:new Map},t.set(m.uuid,x));let E=x.layers.get(o.uuid);E||(E={name:l,color:rm[r%rm.length],edges:new Map},r+=1,x.layers.set(o.uuid,E));let w=Math.max(0,h.start),p=Math.min(u,w+h.count);for(let g=w;g+2<p;g+=3){let _=Xx(s,c,g);_&&qx(E.edges,_,!!s.index)}}}),[...t.values()].filter(a=>[...a.layers.values()].some(o=>o.edges.size>0))}function zl(e){return(e*ds).toFixed(2)}function Kx(e){return`M${zl(e.start.u)} ${zl(1-e.start.v)}L${zl(e.end.u)} ${zl(1-e.end.v)}`}function Zx(e){let t=im(e.name),n=[...e.layers.values()].filter(i=>i.edges.size>0).map((i,r)=>{let a=im(i.name),o=`${Jd(i.name,"mesh")}-${r+1}`,s=[...i.edges.values()],c=s.filter(d=>d.count===1),u=(c.length>0?c:s).map(Kx).join("");return[` <g id="${o}" data-mesh="${a}" fill="none" stroke="${i.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${a}</title>`,` <path d="${u}"/>`," </g>"].join(`
|
|
3665
3665
|
`)}).join(`
|
|
3666
|
-
`);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${
|
|
3667
|
-
`)}function kx(e,t="model"){let n=Ex(e),i=Kh(t);return n.map((r,a)=>{let o=jd(r.name,`material-${a+1}`);return{filename:n.length===1?`${i}-uv-layout.svg`:`${i}-uv-${o}-${a+1}.svg`,materialName:r.name,meshCount:[...r.layers.values()].filter(c=>c.edges.size>0).length,svg:Lx(r)}})}async function Zh(e,t="model"){let n=kx(e,t);if(n.length===0)return n;if(n.length===1)return bi(new Blob([n[0].svg],{type:"image/svg+xml;charset=utf-8"}),n[0].filename),n;let i=Object.fromEntries(n.map(a=>[a.filename,(0,$h.strToU8)(a.svg)])),r=await Ml(i);return bi(new Blob([r],{type:"application/zip"}),`${Kh(t)}-uv-layouts.zip`),n}function Jh({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:i,downloadFilename:r}){let[a,o]=(0,Nr.useState)(!1),[s,c]=(0,Nr.useState)(!1),[l,u]=(0,Nr.useState)(null);(0,Nr.useEffect)(()=>{if(!s)return;let x=()=>c(!1);return window.addEventListener("pointerdown",x),()=>window.removeEventListener("pointerdown",x)},[s]);let d=(0,Nr.useCallback)(()=>{u(null),c(x=>!x)},[]),h=(0,Nr.useCallback)(()=>{let x=e.current;x&&(c(!1),o(!0),Gh({scene:x,objectBindings:i,matRefs:t.current,downloadFilename:r,onComplete:()=>o(!1)}))},[r,t,i,e]),m=(0,Nr.useCallback)(()=>{c(!1),Sl(n.current).then(x=>{let E=document.createElement("a");E.href=x,E.download=`${r}.png`,document.body.appendChild(E),E.click(),document.body.removeChild(E)}).catch(x=>{console.error("Screenshot failed:",x)})},[r,n]),f=(0,Nr.useCallback)(async()=>{let x=e.current;if(x)try{if((await Zh(x,r)).length===0){u("This model does not contain UV coordinates.");return}u(null),c(!1)}catch(E){console.error("UV layout export failed:",E),u("Could not create the UV layout archive.")}},[r,e]);return{isDownloading:a,downloadMenuOpen:s,uvExportError:l,toggleDownloadMenu:d,handleDownloadMesh:h,handleDownloadScreenshot:m,handleDownloadUvLayout:f}}var cn=require("react"),Or=require("three");function Dx(e){let t=new Or.Box3().setFromObject(e),n=new Or.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 Bx(e){let t=new Or.Box3().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new Or.Vector3),i=t.getSize(new Or.Vector3).length()/2;return!Number.isFinite(i)||i<=0?null:{center:[n.x,n.y,n.z],radius:i}}function Qh({canvasAreaRef:e,controlsRef:t,sceneRef:n,modelUrl:i,modelRotation:r,bindingTransformSignature:a,modelLoaded:o}){let[s,c]=(0,cn.useState)(!1),[l,u]=(0,cn.useState)([]),[d,h]=(0,cn.useState)(!1),[m,f]=(0,cn.useState)(null),[x,E]=(0,cn.useState)(null),w=(0,cn.useRef)(!1),p=(0,cn.useRef)(0),g=(0,cn.useRef)(null);w.current=s;let _=(0,cn.useCallback)(M=>{M.updateMatrixWorld(!0),f(Dx(M)),E(Bx(M))},[]),S=(0,cn.useCallback)(()=>u([]),[]),T=(0,cn.useCallback)(()=>c(M=>!M),[]),P=(0,cn.useCallback)(()=>h(M=>!M),[]),b=(0,cn.useCallback)(M=>{w.current&&(g.current={x:M.clientX,y:M.clientY})},[]),y=(0,cn.useCallback)(M=>{if(!w.current)return;let C=g.current;if(g.current=null,C&&Math.hypot(M.clientX-C.x,M.clientY-C.y)>6||M.target.closest("button, input, textarea, .ri-measureTools"))return;let L=e.current,V=t.current?.camera,U=n.current;if(!L||!V||!U)return;let D=L.getBoundingClientRect(),Y=(M.clientX-D.left)/D.width*2-1,A=-((M.clientY-D.top)/D.height)*2+1,k=new Or.Raycaster;k.setFromCamera(new Or.Vector2(Y,A),V);let X=k.intersectObject(U,!0)[0];X&&(p.current+=1,u($=>[...$,{id:p.current,position:[X.point.x,X.point.y,X.point.z]}]))},[e,t,n]);return(0,cn.useEffect)(()=>{u([]),f(null),E(null)},[i]),(0,cn.useEffect)(()=>{u([])},[r,a]),(0,cn.useEffect)(()=>{let M=n.current;!o||!M||_(M)},[a,o,_,n]),{measureMode:s,measureModeRef:w,measurePoints:l,showDimensions:d,measureBox:m,modelBounds:x,refreshBounds:_,clearMeasurements:S,toggleMeasureMode:T,toggleDimensions:P,handleMeasurePointerDown:b,handleMeasureClick:y}}var rm=require("react-dom"),im=require("@react-three/xr"),am=require("lucide-react"),Ct=require("react");function Hd(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function Gd(){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 em(){return Hd()||Gd()}function Nx(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=o=>typeof window.matchMedia=="function"&&window.matchMedia(o).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),n=e("(hover: none)")||e("(any-hover: none)"),i=navigator.maxTouchPoints>0,r=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,a=Hd();return t||a||i&&n||i&&r}function Wd(){if(!Nx())return!1;if(Hd())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function tm(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return Wd()}}var ir=require("react/jsx-runtime"),nm={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function om({enableXR:e,usdzUrl:t,mobileHandoffUrl:n}){let i=(0,Ct.useRef)(null),r=(0,Ct.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let Y=navigator.xr;if(!Y||typeof Y.isSessionSupported!="function"||typeof Y.addEventListener!="function")return null;try{return(0,im.createXRStore)({emulate:!1})}catch{return null}},[e]),[a,o]=(0,Ct.useState)(!1),[s,c]=(0,Ct.useState)(!1),[l,u]=(0,Ct.useState)(!0),[d,h]=(0,Ct.useState)(null),[m,f]=(0,Ct.useState)(!1),[x,E]=(0,Ct.useState)(!1),[w,p]=(0,Ct.useState)(nm),[g,_]=(0,Ct.useState)(!1),S=(0,Ct.useMemo)(()=>e&&!!t?.trim()&&Gd(),[e,t]);(0,Ct.useEffect)(()=>{u(em())},[]);let T=(0,Ct.useCallback)(()=>{if(typeof window>"u")return null;try{let Y=new URL(n?.trim()||window.location.href,window.location.href);return Y.protocol==="http:"||Y.protocol==="https:"?Y.toString():null}catch{return null}},[n]);(0,Ct.useEffect)(()=>{if(!e||l){h(null),f(!1);return}h(T())},[e,l,T]),(0,Ct.useEffect)(()=>{if(r)return r.subscribe(Y=>E(Y.session!=null&&Y.mode==="immersive-ar"))},[r]),(0,Ct.useEffect)(()=>{_(!1),p(nm)},[x]),(0,Ct.useEffect)(()=>{if(!e||typeof navigator>"u")return;let Y=navigator.xr;if(!Y?.isSessionSupported)return;let A=!1;return Y.isSessionSupported("immersive-ar").then(k=>!A&&o(k)).catch(()=>{}),Y.isSessionSupported("immersive-vr").then(k=>!A&&c(k)).catch(()=>{}),()=>{A=!0}},[e]);let P=(0,Ct.useCallback)(()=>{let Y=T();Y&&(h(Y),f(!0))},[T]),b=(0,Ct.useCallback)(()=>f(!1),[]),y=(0,Ct.useCallback)(()=>{let Y=t?.trim();if(!Y)return;let A=document.createElement("a");A.setAttribute("rel","ar"),A.href=Y,A.style.display="none";let k=document.createElement("img");k.alt="",k.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",A.appendChild(k),document.body.appendChild(A),A.click(),A.remove()},[t]),M=(0,Ct.useCallback)(Y=>{p(Y),Y.isPlacementMode||_(!1)},[]),C=(0,Ct.useCallback)(Y=>{_(!1),Y?i.current?.finishPlacementMode():i.current?.cancelPlacementMode()},[]),N=(0,Ct.useCallback)(Y=>{Y.preventDefault(),_(!0),i.current?.startPlacementMode()},[]);(0,Ct.useEffect)(()=>{if(!g)return;let Y=()=>C(!0),A=()=>C(!1);return window.addEventListener("pointerup",Y),window.addEventListener("pointercancel",A),()=>{window.removeEventListener("pointerup",Y),window.removeEventListener("pointercancel",A)}},[C,g]);let L=w.isModelPlaced?w.isPlacementMode?w.canPlace?"Release to place":"Move your device over a flat surface":null:w.canPlace?null:"Move your device over a flat surface",V=w.isModelPlaced&&!w.isPlacementMode?"Pinch to resize \xB7 Twist to rotate":null,U=r?.getState().domOverlayRoot??null,D=x&&U?(0,rm.createPortal)((0,ir.jsxs)(ir.Fragment,{children:[V&&(0,ir.jsx)("div",{className:"ri-arHintOverlay",children:(0,ir.jsx)("div",{className:"ri-arHint",children:V})}),(0,ir.jsx)("div",{className:"ri-arOverlay",children:(0,ir.jsxs)("div",{className:"ri-arControls",children:[L&&(0,ir.jsx)("div",{className:"ri-arStatus",children:L}),w.isModelPlaced&&(0,ir.jsxs)("button",{type:"button",className:`ri-arActionButton ${g?"ri-arActionButton--active":""}`,onPointerDown:Y=>N(Y.nativeEvent),"aria-pressed":g,children:[(0,ir.jsx)(am.MapPin,{size:14}),"Relocate"]}),!w.isModelPlaced&&w.canPlace&&(0,ir.jsx)("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>i.current?.placeCurrent(),children:"Tap to place"})]})})]}),U):null;return{xrStore:r,presenterRef:i,arSupported:a,vrSupported:s,quickLookSupported:S,resolvedMobileHandoffUrl:d,isMobileHandoffOpen:m,arOverlay:D,openMobileHandoff:P,closeMobileHandoff:b,openQuickLook:y,handleARStateChange:M}}var Bl=require("@react-three/fiber"),Nl=require("@react-three/drei"),Um=require("@react-three/xr"),Vm=require("three"),zr=require("react");function Tl(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var sm=["none","directional","point","spot","hemisphere"],lm=["pbr","matcap","uv-checker"],cm=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];var dm=["sporadic","constantMild","constantWild"],um=["linear","radial","mirroredLinear"],Qo=["verySmall","small","medium","large","veryLarge","huge"],Ox={clips:[],autoplayClip:null},Ix={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}},Di={model:{rotation:[0,0,0],showAdvancedRotation:!1,renderer:"pbr",shading:"lit",autoRotate:!1,autoRotateSpeed:1},camera:{fieldOfView:50,showAdvancedSettings:!1},lighting:{ambient:{intensity:.25,color:"#ffffff"},lights:[{id:"light-hemi",type:"hemisphere",color:"#ffffff",intensity:.3,position:[0,1,0],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0},{id:"light-key",type:"directional",color:"#ffffff",intensity:2.5,position:[6,12,6],attachedToCamera:!1,castShadow:!0,shadowBias:-5e-4,visible:!0},{id:"light-fill",type:"directional",color:"#ffffff",intensity:0,position:[-6,8,-6],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}]},shadows:{enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3},environment:{source:"preset",preset:"apartment",customEnvironmentUrl:"",intensity:.25,rotation:0,shadowLight:{enabled:!1,intensity:2.5,bias:-5e-4}},wireframe:{enabled:!1,color:"#000000",opacity:1},background:{enabled:!1,type:"color",color:"#1c1c1d",imageUrl:""},groundShadows:{enabled:!1,mode:"shadowCatcher",intensity:.7,borderFade:1,height:0,size:10},postProcessing:Ix,animations:Ox,annotations:[]};var mr=require("@react-three/fiber"),Xd=require("@react-three/xr"),Pl=require("three"),ar=require("react");function pm({renderMode:e}){let{scene:t}=(0,mr.useThree)(),n=(0,mr.useThree)(o=>o.setFrameloop),i=(0,Xd.useXR)(o=>o.session!=null),r=(0,Xd.useXR)(o=>o.mode==="immersive-ar"),a=(0,ar.useRef)(void 0);return(0,ar.useEffect)(()=>{n(i?"always":e)},[i,e,n]),(0,ar.useEffect)(()=>{r?(a.current=t.background,t.background=null):a.current!==void 0&&(t.background=a.current,a.current=void 0)},[r,t]),(0,mr.useFrame)(()=>{r&&t.background!==null&&(t.background=null)}),null}function hm({onPresentingChange:e}){let t=(0,mr.useThree)(r=>r.gl),n=(0,ar.useRef)(null);(0,ar.useEffect)(()=>{let r=t.xr;if(!r)return;let a=c=>{c?(n.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):n.current!==null&&(t.shadowMap.enabled=n.current,n.current=null),e(c)},o=()=>a(!0),s=()=>a(!1);return r.addEventListener("sessionstart",o),r.addEventListener("sessionend",s),a(r.isPresenting),()=>{r.removeEventListener("sessionstart",o),r.removeEventListener("sessionend",s)}},[t,e]);let i=(0,ar.useRef)(0);return(0,mr.useFrame)(()=>{if(!t.xr.isPresenting)return;let r=performance.now();if(r-i.current<1e3)return;i.current=r;let a=t.xr}),null}function mm({active:e}){let t=(0,mr.useThree)(n=>n.invalidate);return(0,ar.useEffect)(()=>{e&&t()},[e,t]),(0,mr.useFrame)(()=>{e&&t()}),null}function fm({color:e}){let{scene:t}=(0,mr.useThree)();return(0,ar.useEffect)(()=>{let n=t.background;return t.background=e?new Pl.Color(e):null,()=>{t.background=n}},[t,e]),null}function gm({rotation:e}){let{scene:t}=(0,mr.useThree)();return(0,ar.useLayoutEffect)(()=>{let n=e*Math.PI/180;t.environmentRotation.set(0,n,0),t.backgroundRotation.set(0,n,0)}),null}function bm({cameraConfig:e}){let{camera:t}=(0,mr.useThree)();return(0,ar.useEffect)(()=>{if(!(t instanceof Pl.PerspectiveCamera))return;let n=e?.fov;typeof n=="number"&&t.fov!==n&&(t.fov=n,t.updateProjectionMatrix())},[t,e]),null}var ns=require("@react-three/fiber"),Ne=require("@react-three/postprocessing"),Bi=require("postprocessing"),Ir=require("three"),_n=require("react");var on=require("three"),Za=new Map,vi={color:"#93c5fd",intensity:.07},ts=new on.Color(vi.color).multiplyScalar(vi.intensity),vm=new on.Color(vi.color),xm=.28,Ja=new Map,$d=new Map;function zx(e){return`${e.name}|${e.size}|${e.lastModified}`}function ym(e){let t=zx(e),n=e.name.lastIndexOf("."),i=n>0?e.name.slice(0,n):e.name,r=n>0?e.name.slice(n):"",a=`materials/${e.name}`,o=2;for(;;){let s=$d.get(a);if(s===void 0||s===t)return $d.set(a,t),a;a=`materials/${i}-${o}${r}`,o+=1}}function wm(e){return Ja.get(e)}function _m(e,t){let n=++e.loadGeneration;e.loaded=!1;let i=()=>{if(e.loadGeneration!==n)return;e.loaded=!0;let r=e.pending;e.pending=[];for(let a of r)a()};new on.ImageLoader().load(t,r=>{e.loadGeneration===n&&(e.texture.image=r,e.texture.needsUpdate=!0,i())},void 0,()=>{e.loadGeneration===n&&(console.warn(`Failed to load texture: ${t}`),i())})}function Sm(e,t){for(let n of[on.SRGBColorSpace,on.NoColorSpace]){let i=Za.get(es(e,n));i&&_m(i,t)}}function Mm(e,t){let n=Ja.get(e);n&&n!==t&&n.startsWith("blob:")&&URL.revokeObjectURL(n),Ja.set(e,t),Sm(e,t)}function Kd(e){let t=Ja.get(e);t&&(t.startsWith("blob:")&&URL.revokeObjectURL(t),Ja.delete(e),$d.delete(e),Sm(e,e))}function es(e,t){return`${t}|${e}`}function dn(e,t=on.NoColorSpace,n){let i=es(e,t),r=Za.get(i);if(r)return n&&!r.loaded&&r.pending.push(n),r.texture;let a=Ja.get(e)??e,o={texture:new on.Texture,refCount:0,loaded:!1,pending:n?[n]:[],loadGeneration:0};return o.texture.flipY=!1,o.texture.colorSpace=t,Za.set(i,o),_m(o,a),o.texture}function Al(e,t=on.NoColorSpace,n){let i=dn(e,t,n);return Za.get(es(e,t)).refCount+=1,i}function va(e,t=on.NoColorSpace){let n=Za.get(es(e,t));n&&(n.refCount-=1,n.refCount<=0&&(n.loadGeneration+=1,n.pending=[],n.texture.dispose(),Za.delete(es(e,t))))}var qd=null;function El(){if(qd)return qd;let e=256,t=document.createElement("canvas");t.width=e,t.height=e;let n=t.getContext("2d"),i=n.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);i.addColorStop(0,"#ffffff"),i.addColorStop(.4,"#b5b5b5"),i.addColorStop(1,"#3a3a3a"),n.fillStyle=i,n.fillRect(0,0,e,e);let r=new on.CanvasTexture(t);return r.colorSpace=on.SRGBColorSpace,qd=r,r}var Yd=null;function Cm(){if(Yd)return Yd;let e=1024,t=8,n=e/t,i=["#ef4444","#f59e0b","#22c55e","#6366f1"],r=document.createElement("canvas");r.width=e,r.height=e;let a=r.getContext("2d");a.textAlign="center",a.textBaseline="middle";for(let s=0;s<t;s+=1)for(let c=0;c<t;c+=1){let l=c*n,u=s*n,d=(Math.floor(c/2)+Math.floor(s/2))%4;a.fillStyle=i[d],a.fillRect(l,u,n,n),a.strokeStyle="rgba(0, 0, 0, 0.28)",a.lineWidth=2;for(let p=1;p<4;p+=1){let g=p*n/4;a.beginPath(),a.moveTo(l+g,u),a.lineTo(l+g,u+n),a.moveTo(l,u+g),a.lineTo(l+n,u+g),a.stroke()}a.strokeStyle="#09090b",a.lineWidth=7,a.strokeRect(l,u,n,n);let h=l+n*.23,m=u+n*.72,f=l+n*.72,x=u+n*.23;a.lineCap="round",a.lineJoin="round",a.beginPath(),a.moveTo(h,m),a.lineTo(f,x),a.lineTo(f-n*.2,x),a.moveTo(f,x),a.lineTo(f,x+n*.2),a.stroke();let E=s*t+c+1;a.font=`700 ${Math.round(n*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,a.fillStyle="#ffffff",a.strokeStyle="rgba(0, 0, 0, 0.85)",a.lineWidth=6;let w=String(E).padStart(2,"0");a.strokeText(w,l+n/2,u+n*.82),a.fillText(w,l+n/2,u+n*.82)}let o=new on.CanvasTexture(r);return o.colorSpace=on.SRGBColorSpace,o.wrapS=on.RepeatWrapping,o.wrapT=on.RepeatWrapping,o.flipY=!1,o.anisotropy=8,o.needsUpdate=!0,Yd=o,o}var Qa=require("react"),Rl=require("postprocessing"),Tm=require("three"),Am=require("react/jsx-runtime"),Ux=`
|
|
3666
|
+
`);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${ds}" height="${ds}" viewBox="0 0 ${ds} ${ds}">`,` <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 Jx(e,t="model"){let n=$x(e),i=sm(t);return n.map((r,a)=>{let o=Jd(r.name,`material-${a+1}`);return{filename:n.length===1?`${i}-uv-layout.svg`:`${i}-uv-${o}-${a+1}.svg`,materialName:r.name,meshCount:[...r.layers.values()].filter(c=>c.edges.size>0).length,svg:Zx(r)}})}async function lm(e,t="model"){let n=Jx(e,t);if(n.length===0)return n;if(n.length===1)return fi(new Blob([n[0].svg],{type:"image/svg+xml;charset=utf-8"}),n[0].filename),n;let i=Object.fromEntries(n.map(a=>[a.filename,(0,om.strToU8)(a.svg)])),r=await Il(i);return fi(new Blob([r],{type:"application/zip"}),`${sm(t)}-uv-layouts.zip`),n}function cm({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:i,downloadFilename:r}){let[a,o]=(0,Br.useState)(!1),[s,c]=(0,Br.useState)(!1),[l,u]=(0,Br.useState)(null);(0,Br.useEffect)(()=>{if(!s)return;let x=()=>c(!1);return window.addEventListener("pointerdown",x),()=>window.removeEventListener("pointerdown",x)},[s]);let d=(0,Br.useCallback)(()=>{u(null),c(x=>!x)},[]),h=(0,Br.useCallback)(()=>{let x=e.current;x&&(c(!1),o(!0),tm({scene:x,objectBindings:i,matRefs:t.current,downloadFilename:r,onComplete:()=>o(!1)}))},[r,t,i,e]),f=(0,Br.useCallback)(()=>{c(!1),Ol(n.current).then(x=>{let E=document.createElement("a");E.href=x,E.download=`${r}.png`,document.body.appendChild(E),E.click(),document.body.removeChild(E)}).catch(x=>{console.error("Screenshot failed:",x)})},[r,n]),m=(0,Br.useCallback)(async()=>{let x=e.current;if(x)try{if((await lm(x,r)).length===0){u("This model does not contain UV coordinates.");return}u(null),c(!1)}catch(E){console.error("UV layout export failed:",E),u("Could not create the UV layout archive.")}},[r,e]);return{isDownloading:a,downloadMenuOpen:s,uvExportError:l,toggleDownloadMenu:d,handleDownloadMesh:h,handleDownloadScreenshot:f,handleDownloadUvLayout:m}}var un=require("react"),Nr=require("three");function Qx(e){let t=new Nr.Box3().setFromObject(e),n=new Nr.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 ey(e){let t=new Nr.Box3().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new Nr.Vector3),i=t.getSize(new Nr.Vector3).length()/2;return!Number.isFinite(i)||i<=0?null:{center:[n.x,n.y,n.z],radius:i}}function dm({canvasAreaRef:e,controlsRef:t,sceneRef:n,modelUrl:i,modelRotation:r,bindingTransformSignature:a,modelLoaded:o}){let[s,c]=(0,un.useState)(!1),[l,u]=(0,un.useState)([]),[d,h]=(0,un.useState)(!1),[f,m]=(0,un.useState)(null),[x,E]=(0,un.useState)(null),w=(0,un.useRef)(!1),p=(0,un.useRef)(0),g=(0,un.useRef)(null);w.current=s;let _=(0,un.useCallback)(M=>{M.updateMatrixWorld(!0),m(Qx(M)),E(ey(M))},[]),S=(0,un.useCallback)(()=>u([]),[]),T=(0,un.useCallback)(()=>c(M=>!M),[]),A=(0,un.useCallback)(()=>h(M=>!M),[]),b=(0,un.useCallback)(M=>{w.current&&(g.current={x:M.clientX,y:M.clientY})},[]),y=(0,un.useCallback)(M=>{if(!w.current)return;let C=g.current;if(g.current=null,C&&Math.hypot(M.clientX-C.x,M.clientY-C.y)>6||M.target.closest("button, input, textarea, .ri-measureTools"))return;let L=e.current,F=t.current?.camera,V=n.current;if(!L||!F||!V)return;let D=L.getBoundingClientRect(),q=(M.clientX-D.left)/D.width*2-1,P=-((M.clientY-D.top)/D.height)*2+1,B=new Nr.Raycaster;B.setFromCamera(new Nr.Vector2(q,P),F);let W=B.intersectObject(V,!0)[0];W&&(p.current+=1,u($=>[...$,{id:p.current,position:[W.point.x,W.point.y,W.point.z]}]))},[e,t,n]);return(0,un.useEffect)(()=>{u([]),m(null),E(null)},[i]),(0,un.useEffect)(()=>{u([])},[r,a]),(0,un.useEffect)(()=>{let M=n.current;!o||!M||_(M)},[a,o,_,n]),{measureMode:s,measureModeRef:w,measurePoints:l,showDimensions:d,measureBox:f,modelBounds:x,refreshBounds:_,clearMeasurements:S,toggleMeasureMode:T,toggleDimensions:A,handleMeasurePointerDown:b,handleMeasureClick:y}}var mm=require("react-dom"),fm=require("@react-three/xr"),gm=require("lucide-react"),Tt=require("react");function Qd(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function eu(){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 um(){return Qd()||eu()}function ty(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=o=>typeof window.matchMedia=="function"&&window.matchMedia(o).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),n=e("(hover: none)")||e("(any-hover: none)"),i=navigator.maxTouchPoints>0,r=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,a=Qd();return t||a||i&&n||i&&r}function tu(){if(!ty())return!1;if(Qd())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function pm(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return tu()}}var ar=require("react/jsx-runtime"),hm={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function bm({enableXR:e,usdzUrl:t,mobileHandoffUrl:n}){let i=(0,Tt.useRef)(null),r=(0,Tt.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let q=navigator.xr;if(!q||typeof q.isSessionSupported!="function"||typeof q.addEventListener!="function")return null;try{return(0,fm.createXRStore)({emulate:!1})}catch{return null}},[e]),[a,o]=(0,Tt.useState)(!1),[s,c]=(0,Tt.useState)(!1),[l,u]=(0,Tt.useState)(!0),[d,h]=(0,Tt.useState)(null),[f,m]=(0,Tt.useState)(!1),[x,E]=(0,Tt.useState)(!1),[w,p]=(0,Tt.useState)(hm),[g,_]=(0,Tt.useState)(!1),S=(0,Tt.useMemo)(()=>e&&!!t?.trim()&&eu(),[e,t]);(0,Tt.useEffect)(()=>{u(um())},[]);let T=(0,Tt.useCallback)(()=>{if(typeof window>"u")return null;try{let q=new URL(n?.trim()||window.location.href,window.location.href);return q.protocol==="http:"||q.protocol==="https:"?q.toString():null}catch{return null}},[n]);(0,Tt.useEffect)(()=>{if(!e||l){h(null),m(!1);return}h(T())},[e,l,T]),(0,Tt.useEffect)(()=>{if(r)return r.subscribe(q=>E(q.session!=null&&q.mode==="immersive-ar"))},[r]),(0,Tt.useEffect)(()=>{_(!1),p(hm)},[x]),(0,Tt.useEffect)(()=>{if(!e||typeof navigator>"u")return;let q=navigator.xr;if(!q?.isSessionSupported)return;let P=!1;return q.isSessionSupported("immersive-ar").then(B=>!P&&o(B)).catch(()=>{}),q.isSessionSupported("immersive-vr").then(B=>!P&&c(B)).catch(()=>{}),()=>{P=!0}},[e]);let A=(0,Tt.useCallback)(()=>{let q=T();q&&(h(q),m(!0))},[T]),b=(0,Tt.useCallback)(()=>m(!1),[]),y=(0,Tt.useCallback)(()=>{let q=t?.trim();if(!q)return;let P=document.createElement("a");P.setAttribute("rel","ar"),P.href=q,P.style.display="none";let B=document.createElement("img");B.alt="",B.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",P.appendChild(B),document.body.appendChild(P),P.click(),P.remove()},[t]),M=(0,Tt.useCallback)(q=>{p(q),q.isPlacementMode||_(!1)},[]),C=(0,Tt.useCallback)(q=>{_(!1),q?i.current?.finishPlacementMode():i.current?.cancelPlacementMode()},[]),N=(0,Tt.useCallback)(q=>{q.preventDefault(),_(!0),i.current?.startPlacementMode()},[]);(0,Tt.useEffect)(()=>{if(!g)return;let q=()=>C(!0),P=()=>C(!1);return window.addEventListener("pointerup",q),window.addEventListener("pointercancel",P),()=>{window.removeEventListener("pointerup",q),window.removeEventListener("pointercancel",P)}},[C,g]);let L=w.isModelPlaced?w.isPlacementMode?w.canPlace?"Release to place":"Move your device over a flat surface":null:w.canPlace?null:"Move your device over a flat surface",F=w.isModelPlaced&&!w.isPlacementMode?"Pinch to resize \xB7 Twist to rotate":null,V=r?.getState().domOverlayRoot??null,D=x&&V?(0,mm.createPortal)((0,ar.jsxs)(ar.Fragment,{children:[F&&(0,ar.jsx)("div",{className:"ri-arHintOverlay",children:(0,ar.jsx)("div",{className:"ri-arHint",children:F})}),(0,ar.jsx)("div",{className:"ri-arOverlay",children:(0,ar.jsxs)("div",{className:"ri-arControls",children:[L&&(0,ar.jsx)("div",{className:"ri-arStatus",children:L}),w.isModelPlaced&&(0,ar.jsxs)("button",{type:"button",className:`ri-arActionButton ${g?"ri-arActionButton--active":""}`,onPointerDown:q=>N(q.nativeEvent),"aria-pressed":g,children:[(0,ar.jsx)(gm.MapPin,{size:14}),"Relocate"]}),!w.isModelPlaced&&w.canPlace&&(0,ar.jsx)("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>i.current?.placeCurrent(),children:"Tap to place"})]})})]}),V):null;return{xrStore:r,presenterRef:i,arSupported:a,vrSupported:s,quickLookSupported:S,resolvedMobileHandoffUrl:d,isMobileHandoffOpen:f,arOverlay:D,openMobileHandoff:A,closeMobileHandoff:b,openQuickLook:y,handleARStateChange:M}}var ql=require("@react-three/fiber"),Yl=require("@react-three/drei"),Km=require("@react-three/xr"),Zm=require("three"),Ir=require("react");function Ul(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var vm=["none","directional","point","spot","hemisphere"],xm=["pbr","matcap","uv-checker"],ym=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];var wm=["sporadic","constantMild","constantWild"],_m=["linear","radial","mirroredLinear"],us=["verySmall","small","medium","large","veryLarge","huge"],ny={clips:[],autoplayClip:null},ry={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}},gi={model:{rotation:[0,0,0],showAdvancedRotation:!1,renderer:"pbr",shading:"lit",autoRotate:!1,autoRotateSpeed:1},camera:{fieldOfView:50,showAdvancedSettings:!1},lighting:{ambient:{intensity:.25,color:"#ffffff"},lights:[{id:"light-hemi",type:"hemisphere",color:"#ffffff",intensity:.3,position:[0,1,0],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0},{id:"light-key",type:"directional",color:"#ffffff",intensity:2.5,position:[6,12,6],attachedToCamera:!1,castShadow:!0,shadowBias:-5e-4,visible:!0},{id:"light-fill",type:"directional",color:"#ffffff",intensity:0,position:[-6,8,-6],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}]},shadows:{enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3},environment:{source:"preset",preset:"apartment",customEnvironmentUrl:"",intensity:.25,rotation:0,shadowLight:{enabled:!1,intensity:2.5,bias:-5e-4}},wireframe:{enabled:!1,color:"#000000",opacity:1},background:{enabled:!1,type:"color",color:"#1c1c1d",imageUrl:""},groundShadows:{enabled:!1,mode:"shadowCatcher",intensity:.7,borderFade:1,height:0,size:10},postProcessing:ry,animations:ny,annotations:[]};var hr=require("@react-three/fiber"),nu=require("@react-three/xr"),Vl=require("three"),or=require("react");function Sm({renderMode:e}){let{scene:t}=(0,hr.useThree)(),n=(0,hr.useThree)(o=>o.setFrameloop),i=(0,nu.useXR)(o=>o.session!=null),r=(0,nu.useXR)(o=>o.mode==="immersive-ar"),a=(0,or.useRef)(void 0);return(0,or.useEffect)(()=>{n(i?"always":e)},[i,e,n]),(0,or.useEffect)(()=>{r?(a.current=t.background,t.background=null):a.current!==void 0&&(t.background=a.current,a.current=void 0)},[r,t]),(0,hr.useFrame)(()=>{r&&t.background!==null&&(t.background=null)}),null}function Mm({onPresentingChange:e}){let t=(0,hr.useThree)(r=>r.gl),n=(0,or.useRef)(null);(0,or.useEffect)(()=>{let r=t.xr;if(!r)return;let a=c=>{c?(n.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):n.current!==null&&(t.shadowMap.enabled=n.current,n.current=null),e(c)},o=()=>a(!0),s=()=>a(!1);return r.addEventListener("sessionstart",o),r.addEventListener("sessionend",s),a(r.isPresenting),()=>{r.removeEventListener("sessionstart",o),r.removeEventListener("sessionend",s)}},[t,e]);let i=(0,or.useRef)(0);return(0,hr.useFrame)(()=>{if(!t.xr.isPresenting)return;let r=performance.now();if(r-i.current<1e3)return;i.current=r;let a=t.xr}),null}function Cm({active:e}){let t=(0,hr.useThree)(n=>n.invalidate);return(0,or.useEffect)(()=>{e&&t()},[e,t]),(0,hr.useFrame)(()=>{e&&t()}),null}function Tm({color:e}){let{scene:t}=(0,hr.useThree)();return(0,or.useEffect)(()=>{let n=t.background;return t.background=e?new Vl.Color(e):null,()=>{t.background=n}},[t,e]),null}function Pm({rotation:e}){let{scene:t}=(0,hr.useThree)();return(0,or.useLayoutEffect)(()=>{let n=e*Math.PI/180;t.environmentRotation.set(0,n,0),t.backgroundRotation.set(0,n,0)}),null}function Am({cameraConfig:e}){let{camera:t}=(0,hr.useThree)();return(0,or.useEffect)(()=>{if(!(t instanceof Vl.PerspectiveCamera))return;let n=e?.fov;typeof n=="number"&&t.fov!==n&&(t.fov=n,t.updateProjectionMatrix())},[t,e]),null}var ms=require("@react-three/fiber"),Oe=require("@react-three/postprocessing"),Di=require("postprocessing"),Or=require("three"),Tn=require("react");var ln=require("three"),oo=new Map,bi={color:"#93c5fd",intensity:.07},hs=new ln.Color(bi.color).multiplyScalar(bi.intensity),Em=new ln.Color(bi.color),Rm=.28,so=new Map,au=new Map;function iy(e){return`${e.name}|${e.size}|${e.lastModified}`}function km(e){let t=iy(e),n=e.name.lastIndexOf("."),i=n>0?e.name.slice(0,n):e.name,r=n>0?e.name.slice(n):"",a=`materials/${e.name}`,o=2;for(;;){let s=au.get(a);if(s===void 0||s===t)return au.set(a,t),a;a=`materials/${i}-${o}${r}`,o+=1}}function Lm(e){return so.get(e)}function Dm(e,t){let n=++e.loadGeneration;e.loaded=!1;let i=()=>{if(e.loadGeneration!==n)return;e.loaded=!0;let r=e.pending;e.pending=[];for(let a of r)a()};new ln.ImageLoader().load(t,r=>{e.loadGeneration===n&&(e.texture.image=r,e.texture.needsUpdate=!0,i())},void 0,()=>{e.loadGeneration===n&&(console.warn(`Failed to load texture: ${t}`),i())})}function Bm(e,t){for(let n of[ln.SRGBColorSpace,ln.NoColorSpace]){let i=oo.get(ps(e,n));i&&Dm(i,t)}}function Nm(e,t){let n=so.get(e);n&&n!==t&&n.startsWith("blob:")&&URL.revokeObjectURL(n),so.set(e,t),Bm(e,t)}function ou(e){let t=so.get(e);t&&(t.startsWith("blob:")&&URL.revokeObjectURL(t),so.delete(e),au.delete(e),Bm(e,e))}function ps(e,t){return`${t}|${e}`}function pn(e,t=ln.NoColorSpace,n){let i=ps(e,t),r=oo.get(i);if(r)return n&&!r.loaded&&r.pending.push(n),r.texture;let a=so.get(e)??e,o={texture:new ln.Texture,refCount:0,loaded:!1,pending:n?[n]:[],loadGeneration:0};return o.texture.flipY=!1,o.texture.colorSpace=t,oo.set(i,o),Dm(o,a),o.texture}function Fl(e,t=ln.NoColorSpace,n){let i=pn(e,t,n);return oo.get(ps(e,t)).refCount+=1,i}function _a(e,t=ln.NoColorSpace){let n=oo.get(ps(e,t));n&&(n.refCount-=1,n.refCount<=0&&(n.loadGeneration+=1,n.pending=[],n.texture.dispose(),oo.delete(ps(e,t))))}var ru=null;function jl(){if(ru)return ru;let e=256,t=document.createElement("canvas");t.width=e,t.height=e;let n=t.getContext("2d"),i=n.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);i.addColorStop(0,"#ffffff"),i.addColorStop(.4,"#b5b5b5"),i.addColorStop(1,"#3a3a3a"),n.fillStyle=i,n.fillRect(0,0,e,e);let r=new ln.CanvasTexture(t);return r.colorSpace=ln.SRGBColorSpace,ru=r,r}var iu=null;function Om(){if(iu)return iu;let e=1024,t=8,n=e/t,i=["#ef4444","#f59e0b","#22c55e","#6366f1"],r=document.createElement("canvas");r.width=e,r.height=e;let a=r.getContext("2d");a.textAlign="center",a.textBaseline="middle";for(let s=0;s<t;s+=1)for(let c=0;c<t;c+=1){let l=c*n,u=s*n,d=(Math.floor(c/2)+Math.floor(s/2))%4;a.fillStyle=i[d],a.fillRect(l,u,n,n),a.strokeStyle="rgba(0, 0, 0, 0.28)",a.lineWidth=2;for(let p=1;p<4;p+=1){let g=p*n/4;a.beginPath(),a.moveTo(l+g,u),a.lineTo(l+g,u+n),a.moveTo(l,u+g),a.lineTo(l+n,u+g),a.stroke()}a.strokeStyle="#09090b",a.lineWidth=7,a.strokeRect(l,u,n,n);let h=l+n*.23,f=u+n*.72,m=l+n*.72,x=u+n*.23;a.lineCap="round",a.lineJoin="round",a.beginPath(),a.moveTo(h,f),a.lineTo(m,x),a.lineTo(m-n*.2,x),a.moveTo(m,x),a.lineTo(m,x+n*.2),a.stroke();let E=s*t+c+1;a.font=`700 ${Math.round(n*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,a.fillStyle="#ffffff",a.strokeStyle="rgba(0, 0, 0, 0.85)",a.lineWidth=6;let w=String(E).padStart(2,"0");a.strokeText(w,l+n/2,u+n*.82),a.fillText(w,l+n/2,u+n*.82)}let o=new ln.CanvasTexture(r);return o.colorSpace=ln.SRGBColorSpace,o.wrapS=ln.RepeatWrapping,o.wrapT=ln.RepeatWrapping,o.flipY=!1,o.anisotropy=8,o.needsUpdate=!0,iu=o,o}var lo=require("react"),Hl=require("postprocessing"),Im=require("three"),Um=require("react/jsx-runtime"),ay=`
|
|
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
|
-
`,Zd=class extends Rl.Effect{constructor(t=1){super("ExposureEffect",Ux,{blendFunction:Rl.BlendFunction.NORMAL,uniforms:new Map([["exposure",new Tm.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},Pm=(0,Qa.forwardRef)(function({exposure:t},n){let i=(0,Qa.useMemo)(()=>new Zd(t),[]);return i.exposure=t,(0,Qa.useImperativeHandle)(n,()=>i,[i]),(0,Am.jsx)("primitive",{object:i,dispose:null})});var xa=require("@react-three/fiber"),Em=Dh(require("@react-three/postprocessing")),Rm=require("postprocessing"),gr=require("three"),fr=require("react"),km=require("react/jsx-runtime"),Vx=Em.LensFlareEffect;function Lm({config:e}){let t=(0,xa.useThree)(h=>h.camera),n=(0,xa.useThree)(h=>h.raycaster),i=(0,xa.useThree)(h=>h.scene),r=(0,xa.useThree)(h=>h.viewport),a=(0,fr.useRef)(null),o=(0,fr.useRef)(new gr.Vector3),s=(0,fr.useRef)(new gr.Vector2),c=(0,fr.useMemo)(()=>new gr.Vector3(...e.lensPosition),[e.lensPosition]),l=(0,fr.useMemo)(()=>new gr.Color(e.colorGain??"#141414"),[e.colorGain]),u=(0,fr.useMemo)(()=>new gr.Vector2(0,0),[]),d=(0,fr.useMemo)(()=>new Vx({blendFunction:Rm.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:c,screenRes:u,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:l,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[l,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,c,u]);return(0,fr.useEffect)(()=>(a.current=d,()=>{d.dispose(),a.current=null}),[d]),(0,fr.useEffect)(()=>{let h=d.uniforms.get("screenRes");h&&(h.value.x=r.width,h.value.y=r.height)},[d,r]),(0,xa.useFrame)((h,m)=>{let f=a.current;if(!f)return;let x=f.uniforms.get("lensPosition"),E=f.uniforms.get("opacity");if(!x||!E)return;let w=1;if(o.current.copy(c).project(t),o.current.z>1)return;x.value.x=o.current.x,x.value.y=o.current.y,s.current.x=o.current.x,s.current.y=o.current.y,n.setFromCamera(s.current,t);let p=n.intersectObjects(i.children,!0),{object:g}=p[0]||{};g&&(g.userData?.lensflare==="no-occlusion"?w=0:g instanceof gr.Mesh&&(g.material.uniforms?._transmission?.value>.2||g.material._transmission&&g.material._transmission>.2?w=.2:g.material.transparent&&(w=g.material.opacity))),E.value=gr.MathUtils.damp(E.value,w,12,m)}),(0,km.jsx)("primitive",{object:d,dispose:null})}var Ll=require("@react-three/postprocessing"),Wn=require("postprocessing"),Dm=require("three");function Bm(e){return e==="linear"?Wn.ToneMappingMode.LINEAR:e==="reinhard"?Wn.ToneMappingMode.REINHARD:Wn.ToneMappingMode.ACES_FILMIC}function kl(e){switch(e){case"verySmall":return Wn.KernelSize.VERY_SMALL;case"small":return Wn.KernelSize.SMALL;case"medium":return Wn.KernelSize.MEDIUM;case"large":return Wn.KernelSize.LARGE;case"veryLarge":return Wn.KernelSize.VERY_LARGE;case"huge":return Wn.KernelSize.HUGE}}function Nm(e){switch(e){case"constantMild":return Wn.GlitchMode.CONSTANT_MILD;case"constantWild":return Wn.GlitchMode.CONSTANT_WILD;default:return Wn.GlitchMode.SPORADIC}}function Jd(e){let t=new Dm.Color(e);return[t.r,t.g,t.b,1]}function Om(e){return e==="radial"?Ll.RampType.Radial:e==="mirroredLinear"?Ll.RampType.MirroredLinear:Ll.RampType.Linear}var tt=require("react/jsx-runtime"),ya={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new Ir.Color(vi.color).getHex(),hiddenEdgeColor:new Ir.Color(vi.color).multiplyScalar(.35).getHex(),kernelSize:Bi.KernelSize.VERY_SMALL,blur:!1,xRay:!1};function Fx(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var Qd=[],jx=(0,_n.memo)(function({sceneConfig:t,selectedObjectRef:n,highlightOnHover:i=!1,disabled:r=!1,onOutlineEffect:a}){let o=(0,ns.useThree)(S=>S.scene),s=(0,ns.useThree)(S=>S.gl),c=(0,_n.useRef)(null),l=t?.postProcessing,u=n??null,d=l?.outline.enabled===!0,h=d||i,[m,f]=(0,_n.useState)(()=>s.xr?.isPresenting??!1);(0,_n.useEffect)(()=>{let S=s.xr;if(!S)return;let T=()=>f(!0),P=()=>f(!1);return S.addEventListener("sessionstart",T),S.addEventListener("sessionend",P),f(S.isPresenting),()=>{S.removeEventListener("sessionstart",T),S.removeEventListener("sessionend",P)}},[s]);let x=o.children.filter(S=>S.isLight),E=(0,_n.useMemo)(()=>new Ir.Vector2(l?.chromaticAberration.offsetX??.002,l?.chromaticAberration.offsetY??.002),[l?.chromaticAberration.offsetX,l?.chromaticAberration.offsetY]),w=(0,_n.useMemo)(()=>new Ir.Color(l?.outline.visibleEdgeColor??"#ffffff").getHex(),[l?.outline.visibleEdgeColor]),p=(0,_n.useMemo)(()=>new Ir.Color(l?.outline.hiddenEdgeColor??"#22090a").getHex(),[l?.outline.hiddenEdgeColor]),g=(0,_n.useMemo)(()=>Jd(l?.ramp.startColor??"#000000"),[l?.ramp.startColor]),_=(0,_n.useMemo)(()=>Jd(l?.ramp.endColor??"#ffffff"),[l?.ramp.endColor]);return!l||m||r?null:(0,tt.jsxs)(tt.Fragment,{children:[l.godRays.enabled===!0&&(0,tt.jsxs)("mesh",{ref:c,position:l.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,tt.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,tt.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,tt.jsxs)(Ne.EffectComposer,{multisampling:0,enableNormalPass:l.ssao.enabled===!0,autoClear:!1,children:[l.smaa.enabled===!0&&(0,tt.jsx)(Ne.SMAA,{}),l.ssao.enabled===!0&&(0,tt.jsx)(Ne.SSAO,{samples:l.ssao.samples,rings:l.ssao.rings,intensity:l.ssao.intensity,radius:l.ssao.radius,bias:l.ssao.bias,luminanceInfluence:l.ssao.luminanceInfluence,fade:l.ssao.fade,minRadiusScale:l.ssao.minRadiusScale,worldDistanceThreshold:l.ssao.worldDistanceThreshold,worldDistanceFalloff:l.ssao.worldDistanceFalloff,worldProximityThreshold:l.ssao.worldProximityThreshold,worldProximityFalloff:l.ssao.worldProximityFalloff}),l.autofocus.enabled===!0&&(0,tt.jsx)(Ne.Autofocus,{focusDistance:l.autofocus.focusDistance,focusRange:l.autofocus.focusRange,focalLength:l.autofocus.focalLength,bokehScale:l.autofocus.bokehScale,target:l.autofocus.target,mouse:l.autofocus.mouse,debug:l.autofocus.debug||void 0,manual:l.autofocus.manual,smoothTime:l.autofocus.smoothTime}),l.autofocus.enabled!==!0&&l.depthOfField.enabled===!0&&(0,tt.jsx)(Ne.DepthOfField,{focusDistance:l.depthOfField.focusDistance,focusRange:l.depthOfField.focusRange,focalLength:l.depthOfField.focalLength,bokehScale:l.depthOfField.bokehScale}),l.bloom.enabled===!0&&(0,tt.jsx)(Ne.Bloom,{intensity:l.bloom.intensity,luminanceThreshold:l.bloom.luminanceThreshold,luminanceSmoothing:l.bloom.luminanceSmoothing,mipmapBlur:l.bloom.mipmapBlur,radius:l.bloom.radius,levels:l.bloom.levels}),l.selectiveBloom.enabled===!0&&(0,tt.jsx)(Ne.SelectiveBloom,{selection:u??void 0,lights:x,selectionLayer:l.selectiveBloom.selectionLayer,intensity:l.selectiveBloom.intensity,luminanceThreshold:l.selectiveBloom.luminanceThreshold,luminanceSmoothing:l.selectiveBloom.luminanceSmoothing,kernelSize:kl(l.selectiveBloom.kernelSize),mipmapBlur:l.selectiveBloom.mipmapBlur,inverted:l.selectiveBloom.inverted,ignoreBackground:l.selectiveBloom.ignoreBackground}),h&&(0,tt.jsx)(Ne.Outline,{ref:a,selection:Qd,selectionLayer:l.outline.selectionLayer,blendFunction:Bi.BlendFunction.SCREEN,edgeStrength:d?l.outline.edgeStrength:ya.edgeStrength,pulseSpeed:d?l.outline.pulseSpeed:ya.pulseSpeed,visibleEdgeColor:d?w:ya.visibleEdgeColor,hiddenEdgeColor:d?p:ya.hiddenEdgeColor,kernelSize:d?kl(l.outline.kernelSize):ya.kernelSize,blur:d?l.outline.blur:ya.blur,xRay:d?l.outline.xRay:ya.xRay}),l.chromaticAberration.enabled===!0&&(0,tt.jsx)(Ne.ChromaticAberration,{offset:E,radialModulation:l.chromaticAberration.radialModulation,modulationOffset:l.chromaticAberration.modulationOffset}),l.colorAverage.enabled===!0&&(0,tt.jsx)(Ne.ColorAverage,{}),l.dotScreen.enabled===!0&&(0,tt.jsx)(Ne.DotScreen,{angle:l.dotScreen.angle,scale:l.dotScreen.scale}),l.glitch.enabled===!0&&(0,tt.jsx)(Ne.Glitch,{mode:Nm(l.glitch.mode),delay:new Ir.Vector2(l.glitch.delay[0],l.glitch.delay[1]),duration:new Ir.Vector2(l.glitch.duration[0],l.glitch.duration[1]),strength:new Ir.Vector2(l.glitch.strength[0],l.glitch.strength[1]),chromaticAberrationOffset:new Ir.Vector2(l.glitch.chromaticAberrationOffset[0],l.glitch.chromaticAberrationOffset[1]),columns:l.glitch.columns,ratio:l.glitch.ratio,active:!0}),l.grid.enabled===!0&&(0,tt.jsx)(Ne.Grid,{scale:l.grid.scale,lineWidth:l.grid.lineWidth}),l.lensflare.enabled===!0&&(0,tt.jsx)(Lm,{config:l.lensflare}),l.godRays.enabled===!0&&(0,tt.jsx)(Ne.GodRays,{sun:c,samples:l.godRays.samples,density:l.godRays.density,decay:l.godRays.decay,weight:l.godRays.weight,exposure:l.godRays.exposure,clampMax:l.godRays.clampMax,blur:l.godRays.blur,kernelSize:kl(l.godRays.kernelSize)}),l.noise.enabled===!0&&(0,tt.jsx)(Ne.Noise,{premultiply:l.noise.premultiply,opacity:l.noise.opacity,blendFunction:Bi.BlendFunction.ADD}),l.brightnessContrast.enabled===!0&&(0,tt.jsx)(Ne.BrightnessContrast,{brightness:l.brightnessContrast.brightness,contrast:l.brightnessContrast.contrast}),l.hueSaturation.enabled===!0&&(0,tt.jsx)(Ne.HueSaturation,{hue:l.hueSaturation.hue,saturation:l.hueSaturation.saturation}),l.toneMapping.enabled===!0&&(0,tt.jsx)(Pm,{exposure:l.toneMapping.exposure}),l.vignette.enabled===!0&&(0,tt.jsx)(Ne.Vignette,{eskil:l.vignette.eskil,offset:l.vignette.offset,darkness:l.vignette.darkness,blendFunction:Bi.BlendFunction.NORMAL}),l.toneMapping.enabled===!0&&(0,tt.jsx)(Ne.ToneMapping,{mode:Bm(l.toneMapping.mode),resolution:l.toneMapping.resolution,whitePoint:l.toneMapping.whitePoint,middleGrey:l.toneMapping.middleGrey,minLuminance:l.toneMapping.minLuminance,averageLuminance:l.toneMapping.averageLuminance,adaptationRate:l.toneMapping.adaptationRate}),l.sepia.enabled===!0&&(0,tt.jsx)(Ne.Sepia,{intensity:l.sepia.intensity,blendFunction:Bi.BlendFunction.NORMAL}),l.scanline.enabled===!0&&(0,tt.jsx)(Ne.Scanline,{density:l.scanline.density,blendFunction:Bi.BlendFunction.OVERLAY}),l.pixelation.enabled===!0&&(0,tt.jsx)(Ne.Pixelation,{granularity:l.pixelation.granularity}),l.ramp.enabled===!0&&(0,tt.jsx)(Ne.Ramp,{rampType:Om(l.ramp.rampType),rampStart:l.ramp.rampStart,rampEnd:l.ramp.rampEnd,startColor:g,endColor:_,opacity:l.ramp.rampMask?1:l.ramp.opacity??.5,rampBias:l.ramp.rampBias,rampGain:l.ramp.rampGain,rampMask:l.ramp.rampMask,rampInvert:l.ramp.rampInvert})]})]})});function Hx(e){let t=[e];for(;t.length>0;){let n=t.pop();if(n.visible){if(n.isMesh)return!0;t.push(...n.children)}}return!1}function Gx(e,t){return e.length===t.length&&e.every((n,i)=>n===t[i])}function Im({hoveredObjectRef:e,...t}){let n=(0,ns.useThree)(c=>c.scene),i=(0,ns.useThree)(c=>c.invalidate),[r,a]=(0,_n.useState)(null),o=(0,_n.useCallback)(c=>a(c),[]),s=(0,_n.useRef)({effect:null,objects:Qd});return(0,_n.useEffect)(()=>{if(!r)return;let l=t.sceneConfig?.postProcessing?.outline.enabled===!0?Fx(n):e&&Hx(e)?[e]:Qd;s.current.effect===r&&Gx(s.current.objects,l)||(s.current={effect:r,objects:l},r.selection.set(l),i())}),(0,tt.jsx)(jx,{...t,onOutlineEffect:o})}var zm=require("react"),Dl=class extends zm.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,i){this.props.onError?.(n)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};var Sn=require("react/jsx-runtime"),Wx=1.5;function Xx({captureRef:e}){let{gl:t,scene:n,camera:i,invalidate:r}=(0,Bl.useThree)();return(0,zr.useEffect)(()=>{if(e)return e.current={gl:t,scene:n,camera:i,invalidate:r},()=>{e.current=null}},[e,t,n,i,r]),null}function eu({children:e,camera:t,backgroundColor:n,shadows:i=!0,sceneConfig:r,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,renderMode:c="demand",maxDpr:l=2,xrStore:u,rendererCaptureRef:d,preserveDrawingBuffer:h=!1,reduceGpuLoad:m}){let f=m??Wd(),x=f?Math.min(l,Wx):l,E=i&&!f,w=(0,zr.useMemo)(()=>n?{background:n}:r?.background.enabled?r.background.type==="color"?{background:r.background.color}:r.background.type==="image"&&r.background.imageUrl.trim()?{backgroundImage:`url("${r.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[n,r]),p=(0,zr.useMemo)(()=>{if(n)return n;let M=r?.background;if(M?.enabled){if(M.type==="color")return M.color;if(M.type==="image"&&M.imageUrl.trim()||M.type==="environment")return null}return"#1c1c1d"},[n,r]),g=(0,zr.useMemo)(()=>{let M=r?.postProcessing;return M?!!(M.glitch.enabled||M.noise.enabled||M.lensflare.enabled&&M.lensflare.animated):!1},[r?.postProcessing]),[_,S]=(0,zr.useState)(!1),T=r?.environment,P=r?.groundShadows,b=(0,zr.useMemo)(()=>{if(!T)return null;if(T.source==="custom"){let M=T.customEnvironmentUrl.trim();return Tl(M)?{files:M}:null}return{preset:T.preset}},[T]),y=(0,Sn.jsxs)(Sn.Fragment,{children:[(0,Sn.jsx)(Xx,{captureRef:d}),(0,Sn.jsx)(bm,{cameraConfig:t}),(0,Sn.jsx)(mm,{active:g}),(0,Sn.jsx)(fm,{color:p}),b?(0,Sn.jsx)(Dl,{onError:M=>console.warn("Failed to load environment map:",M),children:(0,Sn.jsx)(zr.Suspense,{fallback:null,children:(0,Sn.jsx)(Nl.Environment,{...b,environmentIntensity:T?.intensity??.25,backgroundIntensity:T?.intensity??.25,background:r?.background.enabled===!0&&r.background.type==="environment"})})}):null,(0,Sn.jsx)(gm,{rotation:T?.rotation??0}),u&&(0,Sn.jsx)(hm,{onPresentingChange:S}),P?.enabled&&P.mode==="shadowCatcher"&&!_&&(0,Sn.jsx)(Nl.ContactShadows,{position:[0,P.height,0],scale:P.size,opacity:P.intensity,blur:P.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,Sn.jsx)(Im,{sceneConfig:r,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,disabled:f})]});return(0,Sn.jsx)(Bl.Canvas,{frameloop:c,dpr:[1,x],shadows:E?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:w,camera:t??{fov:50},gl:{preserveDrawingBuffer:h,toneMapping:Vm.NoToneMapping,toneMappingExposure:1},children:u?(0,Sn.jsxs)(Um.XR,{store:u,children:[(0,Sn.jsx)(pm,{renderMode:c}),y]}):y})}var Ol=require("@react-three/drei"),rs=require("three"),Oi=require("react"),tu=require("react/jsx-runtime"),Ni={minDistance:0,maxDistance:1/0,minPolarAngle:0,maxPolarAngle:Math.PI,minAzimuthAngle:-1/0,maxAzimuthAngle:1/0,boundaryEnclosesCamera:!1,boundaryFriction:0};function nu({controlsRef:e,onCameraChange:t,cameraLimits:n,controllerType:i="orbit",onPointerLockExit:r}){let a=i==="orbit",o=(0,Oi.useRef)(null);return(0,Oi.useEffect)(()=>{if(!a)return o.current?.lock(),()=>{o.current?.unlock()}},[a]),(0,Oi.useEffect)(()=>{a&&document.pointerLockElement&&document.exitPointerLock()},[a]),(0,Oi.useEffect)(()=>{if(a)return;let s=()=>{document.pointerLockElement||r?.()};return document.addEventListener("pointerlockchange",s),()=>{document.removeEventListener("pointerlockchange",s)}},[a,r]),(0,Oi.useEffect)(()=>{if(!a||!t||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let c=()=>{t(s.camera,s)};return s.addEventListener("update",c),()=>{s.removeEventListener("update",c)}},[a,e,t]),(0,Oi.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let s=e.current;s&&(s.minDistance=n?.minDistance??Ni.minDistance,s.maxDistance=n?.maxDistance??Ni.maxDistance,s.minPolarAngle=n?.minPolarAngle??Ni.minPolarAngle,s.maxPolarAngle=n?.maxPolarAngle??Ni.maxPolarAngle,s.minAzimuthAngle=n?.minAzimuthAngle??Ni.minAzimuthAngle,s.maxAzimuthAngle=n?.maxAzimuthAngle??Ni.maxAzimuthAngle,s.boundaryEnclosesCamera=n?.boundaryEnclosesCamera??Ni.boundaryEnclosesCamera,s.boundaryFriction=n?.boundaryFriction??Ni.boundaryFriction,s.setBoundary(n?.panBoundary?new rs.Box3(new rs.Vector3(...n.panBoundary[0]),new rs.Vector3(...n.panBoundary[1])):void 0))},[a,e,n?.minDistance,n?.maxDistance,n?.minPolarAngle,n?.maxPolarAngle,n?.minAzimuthAngle,n?.maxAzimuthAngle,n?.boundaryEnclosesCamera,n?.boundaryFriction,n?.panBoundary]),a?(0,tu.jsx)(Ol.CameraControls,{ref:e,makeDefault:!0,smoothTime:.3,dollyToCursor:!0}):(0,tu.jsx)(Ol.PointerLockControls,{ref:o,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}var Vr=require("react"),as=require("@react-three/fiber"),jm=require("three");function Rn(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 ru=Symbol("react-immersive.model-node-id");function qx(e,t){Object.defineProperty(e,ru,{value:t,configurable:!0})}function eo(e){let t=new Map;e.traverse(c=>{if(!c.name)return;let l=t.get(c.name);l?l.push(c):t.set(c.name,[c])});let n=Object.create(null),i=new WeakMap,r=new Map,a=new Set(Array.from(t,([c,l])=>l.length===1?c:null).filter(c=>c!==null)),o=new Set,s=(c,l)=>{qx(c,l),n[l]=c,i.set(c,l),o.add(l)};for(let[c,l]of t)l.length===1&&s(l[0],c);for(let[c,l]of t){if(l.length<2)continue;let u=[];l.forEach((d,h)=>{let m=`${c} [${h+1}]`,f=m,x=2;for(;a.has(f)||o.has(f);)f=`${m}.${x++}`;s(d,f),u.push(f)}),r.set(c,u)}return{nodesById:n,idByNode:i,duplicateNames:r}}function is(e){return e[ru]??e.name??null}function Ur(e,t){let n=null,i=[];return e.traverse(r=>{r[ru]===t&&(n=r),r.name===t&&i.push(r)}),n??(i.length===1?i[0]:null)}var br=require("react/jsx-runtime");function Hm(e,t){if(!t)return e;let n=t*Math.PI/180,i=Math.cos(n),r=Math.sin(n);return[e[0]*i+e[2]*r,e[1],-e[0]*r+e[2]*i]}function Yx(e,t){let[n,i,r]=e.center,a=e.radius,o=Math.hypot(t[0],t[1],t[2]),s=o>1e-6?[t[0]/o,t[1]/o,t[2]/o]:[0,1,0],c=a*2;return{position:[n+s[0]*c,i+s[1]*c,r+s[2]*c],target:e.center,extent:a,near:Math.max(a/100,.001),far:c+a*2}}function $x(e,t){let n=t[0]-e.center[0],i=t[1]-e.center[1],r=t[2]-e.center[2],a=Math.hypot(n,i,r);return{near:Math.max(a-e.radius,a*.01,.001),far:a+e.radius*2}}function Kx(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var Zx={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}]},Jx={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function Fm({light:e,shadows:t,shadowsEnabled:n,environmentRotation:i,modelBounds:r,objectBindings:a,nodeRefs:o}){let s=(0,Vr.useRef)(null),c=(0,Vr.useRef)(null),l=(0,Vr.useRef)(null),u=(0,as.useThree)(w=>w.camera),d=(0,as.useThree)(w=>w.scene),h=(0,Vr.useMemo)(()=>new jm.Vector3,[]),m=(0,Vr.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:Hm(e.position,i),[e.position,e.attachedToCamera,e.attachment,i]);(0,as.useFrame)(()=>{let w=s.current??c.current??l.current;if(!w)return;if(e.attachedToCamera){w.position.copy(u.position);return}let p=e.attachment;if(!p)return;let g=a?Rn(a,p.objectId):null,S=(g?a?.[g]:void 0)?.modelObjectId??p.objectId,T=(g?o?.current[g]:void 0)??Ur(d,S);T&&(h.fromArray(p.offset),T.localToWorld(h),w.position.copy(h))});let f=n&&t.enabled&&e.castShadow,x=(0,Vr.useMemo)(()=>e.type==="directional"&&f&&r&&!e.attachedToCamera?Yx(r,m):null,[e.type,e.attachedToCamera,f,r,m]),E=(0,Vr.useMemo)(()=>e.type==="spot"&&f&&r&&!e.attachedToCamera?$x(r,m):null,[e.type,e.attachedToCamera,f,r,m]);return(0,Vr.useEffect)(()=>{let w=s.current??l.current;if(!w)return;let[p,g,_]=Kx(e,f,r);w.target.position.set(p,g,_),w.target.updateMatrixWorld()},[e,f,r]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,br.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:x?.position??m,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":x?.near??.5,"shadow-camera-far":x?.far??40,"shadow-camera-left":-(x?.extent??8),"shadow-camera-right":x?.extent??8,"shadow-camera-top":x?.extent??8,"shadow-camera-bottom":-(x?.extent??8)}):e.type==="point"?(0,br.jsx)("pointLight",{ref:c,color:e.color,intensity:e.intensity,position:m,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,br.jsx)("spotLight",{ref:l,color:e.color,intensity:e.intensity,position:m,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":E?.near??.5,"shadow-camera-far":E?.far??40}):e.type==="hemisphere"?(0,br.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function iu({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:i=0,environmentConfig:r,modelBounds:a,objectBindings:o,nodeRefs:s}){let c=e??Zx,l=t??Jx,u=r?.shadowLight,d=Hm([5,10,5],i);return(0,br.jsxs)(br.Fragment,{children:[(0,br.jsx)("ambientLight",{intensity:c.ambient.intensity,color:c.ambient.color}),c.lights.map(h=>(0,br.jsx)(Fm,{light:h,shadows:l,shadowsEnabled:n,environmentRotation:i,modelBounds:a,objectBindings:o,nodeRefs:s},h.id)),u?.enabled&&(0,br.jsx)(Fm,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:u.intensity,position:d,attachedToCamera:!1,castShadow:!0,shadowBias:u.bias,visible:!0},shadows:l,shadowsEnabled:n,environmentRotation:0,modelBounds:a,objectBindings:o,nodeRefs:s})]})}var be=require("react"),lo=require("@react-three/fiber");var ls=require("@react-three/fiber"),ro=require("three"),Ii=require("three-stdlib"),cf=require("three/examples/jsm/loaders/USDLoader.js");var to=require("fflate");var Gm;function Wm(e){Gm=e}function os(e){Gm?.(e)}var Qx=[".glb",".gltf",".obj",".fbx",".usdz",".zip"],ey=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],ss=1024*1024,Xm=128*ss,qm=1024,Ym=128*ss,$m=256*ss,Km=200,ty=ss,xi=new Map,Il=".glb,.gltf,.obj,.fbx,.usdz,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function ou(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 ef(e){return xi.get(e)??{format:ou(e)}}function ny(e){let t=e.name.toLowerCase();return Qx.some(n=>t.endsWith(n))||ey.includes(e.type)}async function zl(e){if(!ny(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 Zm(e,"usdz");if(t.endsWith(".zip")||ry(e.type))return iy(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return Jm(e);let n=ou(e.name);return n==="gltf"?Jm(e):Zm(e,n)}function Zm(e,t){let n=URL.createObjectURL(e);return xi.set(n,{format:t,entryPath:e.name}),{url:n,name:e.name,format:t,cleanup:()=>{os(n),xi.delete(n),URL.revokeObjectURL(n)}}}function ry(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function Jm(e){let t=await e.text(),n=tf(t,e.name);for(let r of nf(n))if(!su(r))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let i=URL.createObjectURL(e);return xi.set(i,{format:"gltf",entryPath:e.name}),{url:i,name:e.name,format:"gltf",cleanup:()=>{os(i),xi.delete(i),URL.revokeObjectURL(i)}}}async function iy(e){if(e.size>Xm)throw new Error(`Model zip is too large. The compressed archive must be ${au(Xm)} or smaller.`);let t=await ay(new Uint8Array(await e.arrayBuffer())),n=new Map;for(let[o,s]of Object.entries(t)){let c=lu(o);!c||rf(c)||n.set(c,s)}let i=[...n.keys()].filter(o=>/\.(gltf|obj|fbx)$/i.test(o));if(i.length===0)throw new Error("Invalid model zip: no .gltf, .obj, or .fbx file found.");if(i.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let r=i[0],a=ou(r);if(a==="gltf")return sy(e,r,n);if(a==="obj"||a==="fbx")return oy(e,r,a,n);throw new Error(`Unsupported model entry ${r}.`)}function ay(e){return new Promise((t,n)=>{let i=0,r=0,a=null,o=c=>(a??(a=new Error(`Invalid model zip: ${c}`)),!1);(0,to.unzip)(e,{filter:c=>{if(a)return!1;if(i+=1,i>qm)return o(`archive contains more than ${qm.toLocaleString()} entries.`);if(c.originalSize>Ym)return o(`${c.name} expands beyond the ${au(Ym)} per-file limit.`);if(r+=c.originalSize,r>$m)return o(`expanded contents exceed ${au($m)}.`);if(c.originalSize>=ty&&(c.size===0||c.originalSize/c.size>Km))return o(`${c.name} exceeds the ${Km}:1 compression-ratio limit.`);let l=lu(c.name);return!!l&&!rf(l)}},(c,l)=>{a?n(a):c?n(new Error(`Invalid model zip: ${c.message}`)):t(l)})})}function au(e){return`${e/ss} MiB`}function oy(e,t,n,i){let r=[],a={};for(let[s,c]of i){let l=URL.createObjectURL(new Blob([c],{type:af(s)}));r.push(l),a[s]=l}let o=a[t];if(!o)throw r.forEach(s=>URL.revokeObjectURL(s)),new Error(`Invalid model zip: could not read ${t}.`);return xi.set(o,{format:n,entryPath:t,resourceUrls:a}),{url:o,name:e.name,format:n,cleanup:()=>{os(o),xi.delete(o),r.forEach(s=>URL.revokeObjectURL(s))}}}function sy(e,t,n){let i=n.get(t);if(!i)throw new Error("Invalid GLTF zip: no .gltf found.");let r=tf((0,to.strFromU8)(i),t);ly(r,t);let a=cy(t),o=[];try{Qm(r.buffers,a,n,o),Qm(r.images,a,n,o);let s=new Blob([(0,to.strToU8)(JSON.stringify(r))],{type:"model/gltf+json"}),c=URL.createObjectURL(s);return o.push(c),xi.set(c,{format:"gltf",entryPath:t}),{url:c,name:e.name,format:"gltf",cleanup:()=>{os(c),xi.delete(c),o.forEach(l=>URL.revokeObjectURL(l))}}}catch(s){throw o.forEach(c=>URL.revokeObjectURL(c)),s}}function Qm(e,t,n,i){for(let r of e??[]){if(typeof r.uri!="string"||su(r.uri))continue;let a=dy(t,r.uri),o=n.get(a);if(!o)throw new Error(`Invalid GLTF zip: missing referenced asset ${r.uri}.`);let s=URL.createObjectURL(new Blob([o],{type:af(a)}));i.push(s),r.uri=s}}function tf(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function nf(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function ly(e,t){for(let n of nf(e)){if(su(n))continue;let i=/^[a-z][a-z0-9+.-]*:/i.test(n),r=n.startsWith("/")||n.startsWith("\\");if(i||r)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function su(e){return e.startsWith("data:")}function lu(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!==".")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function rf(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(n=>n===".DS_Store"||n.startsWith("._"))}function cy(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function dy(e,t){let n=t.split(/[?#]/)[0],i=uy(n);return lu(e?`${e}/${i}`:i)}function uy(e){try{return decodeURI(e)}catch{return e}}function af(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 py=require("@react-three/drei"),hy=require("@react-three/fiber"),my=require("react"),of=require("three"),no=require("three-stdlib");function fy(e){return{name:"RI_unlit_emissive_texture",async afterRoot(t){let n=e.json.materials??[],i=new Map;if(n.forEach(a=>{let o=!!a?.extensions?.KHR_materials_unlit,s=!!a?.pbrMetallicRoughness?.baseColorTexture;o&&!s&&a?.emissiveTexture&&a.name&&i.set(a.name,a.emissiveTexture.index)}),i.size===0||!t.scene)return;let r=new Map;await Promise.all([...i].map(async([a,o])=>{let s=await e.getDependency("texture",o);s&&(s.colorSpace=of.SRGBColorSpace,r.set(a,s))})),t.scene.traverse(a=>{let o=Array.isArray(a.material)?a.material:a.material?[a.material]:[];for(let s of o){let c=s.name?r.get(s.name):void 0;c&&!s.map&&(s.map=c,s.needsUpdate=!0)}})}}}var cu="https://assets.react-immersive.liveroom.dev/three-r184/draco/",du="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function sf(e,t={},n){let{dracoDecoderPath:i=cu,ktx2TranscoderPath:r=du,meshopt:a=!0}=t;if(i){let o=new no.DRACOLoader;o.setDecoderPath(i),e.setDRACOLoader(o)}if(a&&e.setMeshoptDecoder(no.MeshoptDecoder),r&&n){let o=new no.KTX2Loader().setTranscoderPath(r).detectSupport(n);e.setKTX2Loader(o)}e.register((o=>fy(o)))}var Ul=class extends ro.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,i,r,a){this.loadAsset(n,r).then(i).catch(a)}async loadAsset(n,i){let r=by(this.options.source),{format:a}=this.options.source;if(a==="obj")return gy(n,r,this.options.source,i);if(a==="fbx"){let c=uu(this,new Ii.FBXLoader(r)),l=yy(n,this.options.source);l&&c.setResourcePath(l);let u=await c.loadAsync(n,i);return pu(u,"FBXMesh",!1),{scene:u,animations:u.animations??[]}}if(a==="usdz"){let l=await uu(this,new cf.USDLoader(r)).loadAsync(n,i);return pu(l,"USDZMesh",!1),{scene:l,animations:l.animations??[]}}let o=uu(this,new Ii.GLTFLoader(r));sf(o,this.options.decoderConfig,this.options.renderer);let s=await o.loadAsync(n,i);return{scene:s.scene,animations:s.animations??[]}}};Wm(e=>{ls.useLoader.clear(Ul,e)});function jl(e,t={},n,i){let r=(0,ls.useThree)(s=>s.gl),a=ef(e),o=n?{...a,format:n}:a;return(0,ls.useLoader)(Ul,e,s=>{s.configure({source:o,decoderConfig:t,renderer:r})},i)}async function gy(e,t,n,i){let r=await lf(e,t,i),a=new Ii.OBJLoader(t),o=vy(r);if(o){let c=xy(o,e,n);if(c)try{let l=await lf(c.url,t),d=new Ii.MTLLoader(t).parse(l,c.basePath);d.preload(),a.setMaterials(d)}catch(l){console.warn(`[react-immersive] Could not load OBJ material ${o}; rendering geometry with fallback materials.`,l)}}let s=a.parse(r);return pu(s,"OBJMesh",!0),{scene:s,animations:[]}}function pu(e,t,n){let i=new Set,r=0;e.traverse(a=>{if(!("isMesh"in a&&a.isMesh===!0)){a.name&&i.add(a.name);return}let s=a.name||`${t}_${++r}`;if(!n&&a.name){i.add(a.name);return}let c=s,l=2;for(;i.has(c);)c=`${s}_${l++}`;a.name=c,i.add(c)})}function lf(e,t,n){let i=new ro.FileLoader(t);return i.setResponseType("text"),i.loadAsync(e,n)}function uu(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function by(e){let t=new ro.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(i=>{if(/^(?:blob:|data:)/i.test(i))return i;let r=Fl(uf(i).split(/[?#]/)[0]),a=n[r];if(a)return a;let o=Vl(e.entryPath??""),s=Fl(o?`${o}/${r}`:r);return n[s]??i}),t}function vy(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function xy(e,t,n){if(n.resourceUrls&&n.entryPath){let i=Fl(`${Vl(n.entryPath)}/${uf(e)}`),r=n.resourceUrls[i];if(!r)return null;let a=Vl(i);return{url:r,basePath:a?`${a}/`:""}}try{let i=new URL(e,t).href;return{url:i,basePath:df(i)}}catch{return null}}function yy(e,t){if(t.resourceUrls&&t.entryPath){let n=Vl(t.entryPath);return n?`${n}/`:""}return df(e)}function df(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function Vl(e){let t=Fl(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function Fl(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!=="."))n===".."?t.pop():t.push(n);return t.join("/")}function uf(e){try{return decodeURI(e)}catch{return e}}var Xe=require("three"),wf=require("three-stdlib");function pf(e){let t=new Map;return e.map((n,i)=>{let a=n.name.trim()||`Animation ${i+1}`,o=t.get(a)??0;return t.set(a,o+1),{clip:n,sourceName:o===0?a:`${a} (${o+1})`,duration:n.duration}})}var On=require("three");function hf(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function mf(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function vr(e){return!!(e&&"isMesh"in e&&e.isMesh)}var cs=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],wy=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function wa(e){return wy.has(e)?On.SRGBColorSpace:On.NoColorSpace}function qt(e,t){return e?.[t]?.path}function ff(e){return e==="back"?On.BackSide:e==="double"?On.DoubleSide:On.FrontSide}function gf(e){return e==="additive"?On.AdditiveBlending:On.NormalBlending}function yi(e,t=1,n=t){if(e&&typeof e=="object"){let i=e;if(typeof i.x=="number"&&Number.isFinite(i.x)&&typeof i.y=="number"&&Number.isFinite(i.y))return new On.Vector2(i.x,i.y)}return new On.Vector2(t,n)}function hu(e){return Number.isFinite(e)&&e>0?e:1}function Hl(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function bf(e){return e?.loopMode??"repeat"}var xr=require("three");function io(e){if(hf(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new xr.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 xr.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof xr.Color&&n.emissive.copy(t.color)):(t.color instanceof xr.Color&&n.color.copy(t.color),t.map instanceof xr.Texture&&(n.map=t.map),t.emissive instanceof xr.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof xr.Texture&&(n.emissiveMap=t.emissiveMap));let r=["aoMap","aoMapIntensity","lightMap","lightMapIntensity","alphaMap","opacity","transparent","alphaTest","side","vertexColors","wireframe","depthTest","depthWrite","visible","toneMapped","fog"];for(let a of r)t[a]!==void 0&&(n[a]=t[a]);return n.needsUpdate=!0,n}function Gl(e){if(mf(e))return e.clone();let t=new xr.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(yi(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 Wl(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=yi(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=yi(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 Xn=require("three");function Xl(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 Xn.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??Xn.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??Xn.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(yi(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(yi(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new Xn.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 Xn.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 Xn.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let i=qt(t,"texture"),r=qt(t,"metalnessMap"),a=qt(t,"roughnessMap"),o=qt(t,"emissiveMap"),s=qt(t,"alphaMap"),c=qt(t,"normalMap"),l=qt(t,"bumpMap"),u=qt(t,"aoMap"),d=qt(t,"displacementMap"),h=qt(t,"clearcoatMap"),m=qt(t,"clearcoatRoughnessMap"),f=qt(t,"clearcoatNormalMap"),x=qt(t,"anisotropyMap"),E=qt(t,"transmissionMap"),w=qt(t,"thicknessMap"),p=qt(t,"sheenColorMap"),g=qt(t,"sheenRoughnessMap"),_=qt(t,"specularIntensityMap"),S=qt(t,"specularColorMap");if(i?(e.map=dn(i,Xn.SRGBColorSpace),e.color.set(n??"#ffffff")):n&&(e.map=null,e.color.set(n)),r&&(e.metalnessMap=dn(r)),t?.metalness!==void 0&&(e.metalness=t.metalness),a&&(e.roughnessMap=dn(a)),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):o&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),o&&(e.emissiveMap=dn(o,Xn.SRGBColorSpace)),t?.opacity!==void 0&&(e.opacity=t.opacity),s&&(e.alphaMap=dn(s)),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=gf(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=ff(t.side)),c&&(e.normalMap=dn(c)),c||t?.normalScale!==void 0){let T=t?.normalScale??Math.abs(yi(e.userData.baseNormalScale).x);e.normalScale.set(T,t?.flipNormalY?-T:T)}if(l&&(e.bumpMap=dn(l)),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),u&&(e.aoMap=dn(u)),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),d&&(e.displacementMap=dn(d)),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),h&&(e.clearcoatMap=dn(h)),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),m&&(e.clearcoatRoughnessMap=dn(m)),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),f&&(e.clearcoatNormalMap=dn(f)),f||t?.clearcoatNormalScale!==void 0){let T=t?.clearcoatNormalScale??Math.abs(yi(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(T,t?.flipClearcoatNormalY?-T:T)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),p&&(e.sheenColorMap=dn(p,Xn.SRGBColorSpace)),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),g&&(e.sheenRoughnessMap=dn(g)),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),x&&(e.anisotropyMap=dn(x)),t?.transmission!==void 0&&(e.transmission=t.transmission),E&&(e.transmissionMap=dn(E)),t?.thickness!==void 0&&(e.thickness=t.thickness),w&&(e.thicknessMap=dn(w)),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=dn(_)),t?.specularColor&&e.specularColor.set(t.specularColor),S&&(e.specularColorMap=dn(S,Xn.SRGBColorSpace)),e.transparent=e.opacity<1||e.transmission>0||e.blending!==Xn.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function ds(e){return e.material}function Qr(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function yr(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function ql(e,t){return Array.isArray(e)?e[t]:e}function us(e){e.updateMatrixWorld(!0),e.traverse(t=>{let n=t;n.isSkinnedMesh&&(n.skeleton?.update(),n.computeBoundingBox?.(),n.computeBoundingSphere?.())})}var vf=require("three");function _y(e){return e.isSkinnedMesh===!0}function ao(e){let t=[];return e.traverse(n=>{_y(n)&&t.push(n)}),t}var ps="reactImmersiveSkinFreeze";function xf(e){return!!e.userData[ps]}function Yl(e,t){let n=e.userData,i=new vf.Matrix4().copy(t).invert(),r=n[ps];if(r){r.frozenInverse.copy(i),e.bindMatrixInverse.copy(i);return}let a={frozenInverse:i,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(i),e.onBeforeRender=function(o,s,c,l,u,d){a.previousOnBeforeRender.call(this,o,s,c,l,u,d),e.bindMatrixInverse.copy(a.frozenInverse)},n[ps]=a}function oo(e){let t=e.userData,n=t[ps];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[ps],e.updateMatrixWorld(!0))}var _a=require("react"),yf=require("@react-three/fiber");function $l(){let e=(0,yf.useThree)(r=>r.gl.domElement),t=(0,_a.useRef)(void 0),n=(0,_a.useCallback)(r=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=r},[e]),i=(0,_a.useCallback)(()=>{let r=t.current;r!==void 0&&(e.style.cursor=r,t.current=void 0)},[e]);return(0,_a.useEffect)(()=>()=>{i()},[i]),{setCanvasCursor:n,restoreCanvasCursor:i}}var mu=require("react/jsx-runtime");function Kl(e,t,n){let i=n.get(e);i&&(t?.position?e.position.fromArray(t.position):e.position.copy(i.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],i.rotation.order):e.rotation.copy(i.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(i.scale),e.updateMatrix())}function gn(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 so(e){let t=e,n=Number(t.clearcoat)>0,i=Number(t.sheen)>0,r=Number(t.anisotropy)>0,a=Number(t.transmission)>0,o=t.transparent===!1&&t.blending===Xe.NormalBlending&&t.alphaToCoverage!==!0;return[gn(t.map),gn(t.aoMap),gn(t.lightMap),gn(t.bumpMap),gn(t.normalMap,!0),t.normalMap?t.normalMapType:"",gn(t.displacementMap),gn(t.emissiveMap),gn(t.metalnessMap),gn(t.roughnessMap),r,gn(r?t.anisotropyMap:null),n,gn(n?t.clearcoatMap:null),gn(n?t.clearcoatNormalMap:null,!0),gn(n?t.clearcoatRoughnessMap:null),i,gn(i?t.sheenColorMap:null),gn(i?t.sheenRoughnessMap:null),gn(t.specularColorMap),gn(t.specularIntensityMap),a,gn(a?t.transmissionMap:null),gn(a?t.thicknessMap:null),gn(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,t.side,o].join("|")}function fu({url:e,objectBindings:t,selectedItem:n,itemMaterials:i,onItemClick:r,onItemHover:a,onModelLoaded:o,onAnimationsReady:s,nodeRefsOut:c,onNodeRefsChange:l,materialRefsOut:u,panelHoveredItem:d,sceneConfig:h,zoomOnSelected:m=!0,highlightOnHover:f=!0,decoderConfig:x,modelFormat:E,onLoadProgress:w,explodeFactor:p=0,suspendBindingTransforms:g=!1}){let _=jl(e,x,E,w),S=(0,lo.useThree)(F=>F.invalidate),[T,P]=(0,be.useState)(null),b=(0,be.useRef)(null),{setCanvasCursor:y,restoreCanvasCursor:M}=$l();(0,be.useEffect)(()=>{f||(P(null),a?.(null),M())},[f,a,M]);let C=(0,be.useMemo)(()=>wf.SkeletonUtils.clone(_.scene),[_.scene]),N=(0,be.useMemo)(()=>eo(C),[C]),L=N.nodesById;(0,be.useEffect)(()=>{N.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(N.duplicateNames))},[N]);let V=(0,be.useMemo)(()=>{let F=new WeakMap;return C.traverse(R=>{F.set(R,{position:R.position.clone(),rotation:R.rotation.clone(),scale:R.scale.clone()})}),F},[C]);(0,be.useEffect)(()=>{let F=!1,R=null,H=null,Q=window,ne=Object.entries(L).filter(([,Ut])=>vr(Ut)),oe=new Xe.Box3,he=[],je=0;C.traverse(Ut=>{vr(Ut)&&(Ut.castShadow=!1,Ut.receiveShadow=!0)});let lt=()=>{if(F)return;let Ut=new Set,we=oe.getSize(new Xe.Vector3),Vt=new Xe.Vector3;for(let{name:Be,box:rn}of he)rn.getSize(Vt),Vt.x>we.x*.7&&Vt.z>we.z*.7&&Vt.y>we.y*.4&&Ut.add(Be);C.traverse(Be=>{if(!vr(Be))return;let rn=is(Be);Be.castShadow=!rn||!Ut.has(rn),Be.receiveShadow=!0}),S()},Mt=()=>{F||(Q.requestIdleCallback?R=Q.requestIdleCallback(pt,{timeout:100}):H=window.setTimeout(()=>pt(),0))},pt=Ut=>{if(R=null,H=null,F)return;let we=performance.now(),Vt=0;for(;je<ne.length&&!(Vt>0&&!(Ut?Ut.didTimeout?Vt<16:Ut.timeRemaining()>1:performance.now()-we<8));){let[Be,rn]=ne[je];je+=1,Vt+=1;let Un=new Xe.Box3().setFromObject(rn);Un.isEmpty()||(he.push({name:Be,box:Un}),oe.union(Un))}je<ne.length?Mt():lt()};return Mt(),()=>{F=!0,R!==null&&Q.cancelIdleCallback?.(R),H!==null&&window.clearTimeout(H)}},[S,L,C]),(0,be.useEffect)(()=>{us(C)},[C]),(0,be.useEffect)(()=>{let F=new AbortController;return $a(C,F.signal),()=>{F.abort(),ga(C)}},[C]);let U=(0,be.useMemo)(()=>{let F={};for(let[R,H]of Object.entries(t))F[H.modelObjectId??R]=R;return F},[t]),D=(0,be.useMemo)(()=>Object.entries(t).map(([F,R])=>`${F}${R.modelObjectId??F}`).sort().join(""),[t]),Y=(0,be.useMemo)(()=>Object.entries(t).map(([F,R])=>JSON.stringify([F,R.modelObjectId??F,R.transform??null])).sort().join(""),[t]),A=(0,be.useRef)(new Map);(0,be.useEffect)(()=>{let F=new Map,R=new Map;for(let[ne,oe]of Object.entries(t)){if(!oe.transform)continue;let he=L[oe.modelObjectId??ne];he&&(F.set(he,oe.transform),R.set(he,ao(he)))}let H=new Set([...A.current.keys(),...F.keys()]);for(let ne of H){Kl(ne,void 0,V);for(let oe of ao(ne))oo(oe)}C.updateMatrixWorld(!0);let Q=new Map;for(let ne of R.values())for(let oe of ne)Q.has(oe)||Q.set(oe,oe.matrixWorld.clone());for(let[ne,oe]of F)Kl(ne,oe,V);A.current=F,C.updateMatrixWorld(!0);for(let[ne,oe]of Q)Yl(ne,oe);S()},[C,L,V,Y,S]),(0,be.useEffect)(()=>()=>{for(let F of ao(C))oo(F)},[C]);let k=(0,be.useMemo)(()=>{let F={};for(let[R,H]of Object.entries(t)){let Q=H.modelObjectId??R,ne=L[Q];if(!vr(ne))continue;let oe=ds(ne);oe&&(F[R]=Qr(oe,he=>{let je=io(he),lt=Gl(je??new Xe.MeshStandardMaterial);return Wl(lt),lt}))}return F},[L,D]);(0,be.useEffect)(()=>{u&&(u.current=k)},[k,u]),(0,be.useEffect)(()=>()=>{for(let F of Object.values(k))yr(F,R=>R.dispose())},[k]);let X=h?.model.shading??"lit",$=h?.model.renderer??"pbr",ue=h?.wireframe.enabled??!1,De=h?.wireframe.color??"#93c5fd",xe=h?.wireframe.opacity??1,Oe=(0,be.useMemo)(()=>{let F={};if(X!=="unlit")return F;for(let[R,H]of Object.entries(k))F[R]=Qr(H,Q=>{let ne=new Xe.MeshBasicMaterial;return ne.color.copy(Q.color),ne.map=Q.map,ne.alphaMap=Q.alphaMap,ne.alphaTest=Q.alphaTest,ne.transparent=Q.transparent,ne.opacity=Q.opacity,ne.side=Q.side,ne});return F},[k,X]),Pe=(0,be.useMemo)(()=>{let F={};if(X!=="normals")return F;for(let[R,H]of Object.entries(k))F[R]=Qr(H,()=>new Xe.MeshNormalMaterial);return F},[k,X]),Ie=(0,be.useMemo)(()=>{let F={};if(X!=="lit"||$!=="matcap")return F;let R=El();for(let[H,Q]of Object.entries(k))F[H]=Qr(Q,ne=>{let oe=new Xe.MeshMatcapMaterial;return oe.matcap=R,oe.color.copy(ne.color),oe.alphaMap=ne.alphaMap,oe.alphaTest=ne.alphaTest,oe.side=ne.side,oe});return F},[k,X,$]);(0,be.useEffect)(()=>()=>{for(let F of Object.values(Oe))yr(F,R=>R.dispose());for(let F of Object.values(Pe))yr(F,R=>R.dispose());for(let F of Object.values(Ie))yr(F,R=>R.dispose())},[Oe,Pe,Ie]);let Et=F=>X==="normals"?Pe[F]:X==="unlit"?Oe[F]:$==="matcap"?Ie[F]:k[F],Wt=(0,be.useRef)(o);Wt.current=o,(0,be.useEffect)(()=>{Wt.current?.(C)},[C]);let Qe=(0,be.useMemo)(()=>{let F={};for(let[R,H]of Object.entries(t)){let Q=H.modelObjectId??R,ne=L[Q];ne&&(F[R]=ne)}return F},[L,D]);(0,be.useEffect)(()=>(c.current=Qe,l?.(),()=>{c.current===Qe&&(c.current={})}),[Qe,c,l]);let _e=(0,be.useRef)({});(0,be.useEffect)(()=>()=>{for(let F of Object.values(_e.current))for(let[R,H]of Object.entries(F))H&&va(H,wa(R));_e.current={}},[]);let ae=(0,be.useMemo)(()=>{let F=new Map;for(let[R,H]of Object.entries(t)){let Q=d===H||d?.id===H.id||d?.modelObjectId===H.modelObjectId,ne=f&&(T===R||Q),oe=ne||n===R;(ne||oe)&&F.set(R,{emissive:ne,matcap:oe})}return F},[t,f,T,n,d]),zt=(0,be.useRef)(ae);zt.current=ae,(0,be.useEffect)(()=>{let F=new Set;for(let[R,H]of Object.entries(t)){F.add(R);let Q=H.modelObjectId??R,ne=L[Q];if(!vr(ne))continue;ne.visible=H.visible!==!1;let oe=k[R];if(!oe)continue;if($!=="uv-checker"){let we=Et(R);we&&(ne.material=we)}if(H.visible===!1)continue;let he=Oe[R],je=Ie[R],lt=i[R]??i[H.modelObjectId??R],Mt=H.style?.material,pt=_e.current[R]??{};for(let we of cs){let Vt=qt(Mt,we),Be=pt[we];if(Be===Vt)continue;let rn=wa(we);Be&&va(Be,rn),Vt?(Al(Vt,rn,S),pt[we]=Vt):delete pt[we]}Object.keys(pt).length>0?_e.current[R]=pt:delete _e.current[R];let Ut=lt?.hex??Mt?.baseColor;yr(oe,(we,Vt)=>{let Be=so(we);Xl(we,Mt,Ut);let rn=we.userData.reactImmersiveConfiguredEmissive;rn?.isColor?rn.copy(we.emissive):we.userData.reactImmersiveConfiguredEmissive=we.emissive.clone();let Un=zt.current.get(R);Un?.emissive&&we.emissive.add(ts),Be!==so(we)&&(we.needsUpdate=!0);let xn=ql(he,Vt);if(xn){let ta=so(xn);xn.color.copy(we.color),xn.map=we.map,xn.alphaMap=we.alphaMap,xn.alphaTest=we.alphaTest,xn.transparent=we.transparent,xn.opacity=we.opacity,xn.side=we.side,ta!==so(xn)&&(xn.needsUpdate=!0)}let An=ql(je,Vt);if(An){let ta=so(An);Un?.matcap?An.color.set(vi.color):An.color.copy(we.color),An.map=we.map,An.alphaMap=we.alphaMap,An.alphaTest=we.alphaTest,An.transparent=we.transparent,An.opacity=we.opacity,An.side=we.side,ta!==so(An)&&(An.needsUpdate=!0)}})}for(let R of Object.keys(_e.current))if(!F.has(R)){for(let[H,Q]of Object.entries(_e.current[R]))Q&&va(Q,wa(H));delete _e.current[R]}S()},[t,L,k,Oe,Pe,Ie,i,X,$,S]);let Rt=(0,be.useRef)(new Map);(0,be.useEffect)(()=>{let F=Rt.current,R=new Set([...F.keys(),...ae.keys()]),H=!1;for(let Q of R){let ne=F.get(Q),oe=ae.get(Q),he=!!ne?.emissive!=!!oe?.emissive,je=!!ne?.matcap!=!!oe?.matcap;if(!he&&!je)continue;H=!0;let lt=k[Q],Mt=Ie[Q];lt&&yr(lt,(pt,Ut)=>{let we=pt.userData.reactImmersiveConfiguredEmissive;he&&we?.isColor&&(pt.emissive.copy(we),oe?.emissive&&pt.emissive.add(ts));let Vt=ql(Mt,Ut);je&&Vt&&(oe?.matcap?Vt.color.set(vi.color):Vt.color.copy(pt.color))})}Rt.current=ae,H&&S()},[ae,k,Ie,S]),(0,be.useEffect)(()=>{if($!=="uv-checker")return;let F=Cm(),R=[];return C.traverse(H=>{if(!vr(H))return;let Q=H.material,ne=Array.isArray(Q)?Q:[Q],oe=!!H.geometry.getAttribute("uv"),he=ne.map((lt,Mt)=>{let pt=new Xe.MeshBasicMaterial({color:oe?"#ffffff":"#ff00ff",map:oe?F:null,side:lt.side});return pt.name=`${H.name||"mesh"}-uv-checker-${Mt}`,pt.toneMapped=!1,pt}),je=Array.isArray(Q)?he:he[0];H.material=je,R.push({node:H,original:Q,diagnostic:je})}),S(),()=>{for(let{node:H,original:Q,diagnostic:ne}of R){H.material=Q;let oe=Array.isArray(ne)?ne:[ne];for(let he of oe)he.dispose()}S()}},[C,$,S]),(0,be.useEffect)(()=>{if(!ue)return;let F=[];for(let[R,H]of Object.entries(t)){let Q=H.modelObjectId??R,ne=L[Q];if(!vr(ne))continue;let oe=new Xe.MeshBasicMaterial({color:De,wireframe:!0,transparent:!0,opacity:xe,depthTest:!1,depthWrite:!1,side:Xe.DoubleSide,toneMapped:!1}),he=ne.clone(!1);he.name="",he.position.set(0,0,0),he.quaternion.identity(),he.scale.set(1,1,1),he.matrix.identity(),he.matrixAutoUpdate=!0,he.material=oe,he.castShadow=!1,he.receiveShadow=!1,he.frustumCulled=!1,he.renderOrder=1,he.userData={isWireframeOverlay:!0},he.raycast=()=>{},ne.morphTargetInfluences&&(he.morphTargetInfluences=ne.morphTargetInfluences),ne.add(he),F.push({node:ne,overlay:he})}return S(),()=>{for(let{node:R,overlay:H}of F)R.remove(H),H.material.dispose()}},[ue,De,xe,L,t,S]);let et=(0,be.useMemo)(()=>pf(_.animations),[_.animations]),wt=(0,be.useRef)(s);wt.current=s;let He=(0,be.useRef)(h);He.current=h;let Jt=(0,be.useRef)(null),_t=(0,be.useRef)({}),Ve=(0,be.useRef)(null),Lt=(0,be.useRef)(null),Qt=(0,be.useRef)(1),Ae=(0,be.useRef)(new Set),J=(0,be.useRef)(0),Se=()=>({currentClip:Lt.current,isPlaying:Ve.current?.paused===!1,speed:Qt.current,time:Ve.current?.time??0,duration:Ve.current?.getClip().duration??0}),le=()=>{let F=Se();Ae.current.forEach(R=>R(F))},ze=(F,R)=>{let H=bf(R);F.setLoop(H==="once"?Xe.LoopOnce:Xe.LoopRepeat,H==="once"?1:1/0),F.clampWhenFinished=H==="once";let Q=hu(R?.speed??Qt.current);Qt.current=Q,F.setEffectiveTimeScale(Q)},Ue=()=>{Ve.current?.stop(),Ve.current=null,Lt.current=null,le(),S()},Fe=()=>{Ve.current&&(Ve.current.paused=!0,le(),S())},Ye=F=>{let R=hu(F);Qt.current=R,Ve.current?.setEffectiveTimeScale(R),le()},ye=F=>{let R=Ve.current;if(!R)return;let H=R.getClip().duration;R.time=Math.min(Math.max(F,0),H),Jt.current?.update(0),le(),S()},ut=F=>{let R=_t.current[F];if(!R)return;let H=Hl(He.current,F);if(!H?.hidden){if(Ve.current===R&&R.paused){ze(R,H),R.paused=!1,Lt.current=F,le(),S();return}Ve.current&&Ve.current!==R&&Ve.current.stop(),ze(R,H),R.paused=!1,R.enabled=!0,R.reset().play(),Ve.current=R,Lt.current=F,le(),S()}};(0,be.useEffect)(()=>{let F=new Xe.AnimationMixer(C);Jt.current=F;let R={};for(let{clip:he,sourceName:je}of et)R[je]=F.clipAction(he);_t.current=R;let H=he=>{he.action&&he.action===Ve.current&&Ue()};F.addEventListener("finished",H);let Q=()=>{};wt.current?.({clips:et.map(({sourceName:he})=>he),clipDetails:et.map(({sourceName:he,duration:je})=>({sourceName:he,duration:je})),play:et.length?ut:Q,pause:et.length?Fe:Q,stop:et.length?Ue:Q,setSpeed:et.length?Ye:Q,seek:et.length?ye:Q,getState:Se,subscribe:he=>(Ae.current.add(he),he(Se()),()=>{Ae.current.delete(he)})}),Qt.current=1,le();let ne=He.current?.animations.autoplayClip,oe=ne?Hl(He.current,ne):void 0;return ne&&!oe?.hidden&&ut(ne),()=>{F.removeEventListener("finished",H),F.stopAllAction(),F.uncacheRoot(C),Jt.current=null,_t.current={},Ve.current=null,Lt.current=null,Qt.current=1,le()}},[C,et]),(0,be.useEffect)(()=>{let F=Lt.current,R=Ve.current;if(!F||!R||!h?.animations)return;let H=Hl(h,F);if(H?.hidden){Ue();return}H&&(ze(R,H),le())},[h?.animations]),(0,lo.useFrame)((F,R)=>{if(Jt.current&&Ve.current?.paused===!1){if(Jt.current.update(R),!g)for(let[H,Q]of A.current)Kl(H,Q,V);S(),J.current+=R,J.current>=.066&&(J.current=0,le(),us(C))}});let St=(0,be.useMemo)(()=>(h?.model.rotation??[0,0,0]).map(F=>F*Math.PI/180),[h?.model.rotation]);(0,lo.useFrame)((F,R)=>{if(!b.current)return;let H=b.current.rotation;H.x=Xe.MathUtils.lerp(H.x,St[0],1-Math.exp(-5*R)),H.y=Xe.MathUtils.lerp(H.y,St[1],1-Math.exp(-5*R)),H.z=Xe.MathUtils.lerp(H.z,St[2],1-Math.exp(-5*R)),Math.abs(H.x-St[0])<1e-4&&Math.abs(H.y-St[1])<1e-4&&Math.abs(H.z-St[2])<1e-4||S()});let en=(0,be.useRef)([]),tn=(0,be.useRef)(0),rt=(0,be.useRef)(0),st=(0,be.useMemo)(()=>new Xe.Vector3,[]);(0,be.useEffect)(()=>{let F=new Map;for(let[lt,Mt]of Object.entries(t)){let pt=L[Mt.modelObjectId??lt];pt&&F.set(pt,Mt)}for(let lt of en.current)Kl(lt.node,F.get(lt.node)?.transform,V);rt.current=0,C.updateWorldMatrix(!0,!0);let R=new Xe.Box3().setFromObject(C),H=R.getCenter(new Xe.Vector3),Q=R.getSize(new Xe.Vector3).length()*.5;tn.current=Number.isFinite(Q)?Q:0;let ne=[...F.keys()],oe=new Set(ne),he=[],je=new Xe.Vector3;for(let lt of ne){if(!lt.parent)continue;let Mt=lt.parent,pt=!1;for(;Mt;){if(oe.has(Mt)){pt=!0;break}Mt=Mt.parent}if(pt)continue;let Ut=new Xe.Box3().setFromObject(lt);if(Ut.isEmpty())continue;Ut.getCenter(je);let we=je.clone().sub(H);we.lengthSq()<1e-8||(we.normalize(),he.push({node:lt,restLocalPos:lt.position.clone(),restWorldPos:lt.getWorldPosition(new Xe.Vector3),worldDir:we,parentInverse:new Xe.Matrix4().copy(lt.parent.matrixWorld).invert()}))}en.current=he,S()},[C,L,D,Y,V,S]),(0,be.useEffect)(()=>{S()},[p,S]),(0,lo.useFrame)((F,R)=>{let H=en.current;if(H.length===0)return;let Q=Math.min(Math.max(p,0),1),ne=rt.current;if(Math.abs(ne-Q)<1e-4){if(ne===Q)return;rt.current=Q}else rt.current=Xe.MathUtils.lerp(ne,Q,1-Math.exp(-6*R)),S();let oe=rt.current*tn.current;for(let he of H)st.copy(he.worldDir).multiplyScalar(oe).add(he.restWorldPos).applyMatrix4(he.parentInverse),he.node.position.copy(st)});let hn=F=>{let R=F;for(;R;){let H=is(R),Q=H?U[H]:void 0;if(Q&&t[Q])return[Q,t[Q]];R=R.parent}return null},Xt=F=>{let R=hn(F.object);if(!R)return;let[,H]=R;H.selectable!==!1&&(F.stopPropagation(),r(H))},Bn=F=>{if(!f)return;let R=hn(F.object);if(!R)return;let[H,Q]=R;Q.hoverable!==!1&&(F.stopPropagation(),y("pointer"),P(H),a?.(Q))},zn=F=>{f&&(F.stopPropagation(),M(),P(null),a?.(null))},nn=(0,be.useMemo)(()=>!wl(C),[C]);return(0,mu.jsx)("group",{ref:b,children:(0,mu.jsx)("primitive",{object:C,...nn?{onClick:Xt,...f?{onPointerOver:Bn,onPointerOut:zn}:{}}:{}})})}var qe=require("react"),Tc=require("@react-three/fiber");var jt=require("three");var Ot=require("three");function Mf(e){let t={};for(let[n,i]of Object.entries(e))t[i.modelObjectId??n]=n;return t}function bu(e){let t=e,n=null;for(;t;){let i=t.userData?.ri_name;if(typeof i=="string"&&i)return i;!n&&t.name&&(n=t.name),t=t.parent}return n}function Cf(e,t){return e||(t?t.modelObjectId??t.id:null)}function Ql(e,t){let n=bu(e);if(!n)return null;let i=t.keyByModelObject[n]??n,r=t.objectBindings[i];return r?{key:i,binding:r}:null}var co=new Ot.Vector3,gu=new Ot.Vector3,Sy=new Ot.Matrix4,_f=new Ot.Matrix4,Zl=new Ot.Matrix4,My=new Ot.Matrix4,Jl=new Ot.Matrix4,Cy=new Ot.Matrix4,Ty=new Ot.Matrix4,Py=new Ot.Vector3,Ay=new Ot.Vector3,zi=new Ot.Vector3,Sf=new Ot.Quaternion,Ey=new Ot.Euler;function Ry(e,t,n,i,r){let a=!!(n?.position||n?.rotation||n?.scale),o=!!(r&&r.factor>0&&r.radius>0);if(!a&&!o){e.matrixAutoUpdate=!0,e.position.copy(t.position),e.rotation.copy(t.rotation),e.scale.copy(t.scale),e.updateMatrix(),e.updateWorldMatrix(!0,!1);return}_f.compose(t.position,Sf.setFromEuler(t.rotation),t.scale);let s=n?.rotation;Zl.compose(Py.fromArray(n?.position??[0,0,0]),Sf.setFromEuler(Ey.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),Ay.fromArray(n?.scale??[1,1,1])),Zl.premultiply(i).multiply(My.copy(i).invert()),e.parent?.updateWorldMatrix(!0,!1);let c=e.parent?.matrixWorld??Sy;if(Jl.multiplyMatrices(c,_f).premultiply(Zl),o&&r){let l=e;for(;l.parent&&!l.userData.ri_name;)l=l.parent;let u=l.userData.ri_center;Array.isArray(u)&&u.length===3?zi.fromArray(u).applyMatrix4(i).applyMatrix4(Zl):zi.setFromMatrixPosition(Jl),zi.sub(r.centre),zi.lengthSq()>1e-8&&(zi.normalize().multiplyScalar(r.factor*r.radius),Jl.premultiply(Ty.makeTranslation(zi.x,zi.y,zi.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(Cy.copy(c).invert(),Jl),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function ec(e,t){if(!vr(e)&&!e.userData.riLogicalObject)return;let n=Ql(e,t);if(!n)return;let i=Tf(e);if(i.rest??(i.rest={position:e.position.clone(),rotation:e.rotation.clone(),scale:e.scale.clone()}),t.suspendTransforms)return;if(t.placementFrame&&!e.userData.riLogicalObject){Ry(e,i.rest,n.binding.transform,t.placementFrame,t.explode);return}let r=i.rest,a=n.binding.transform;a?.position?e.position.fromArray(a.position):e.position.copy(r.position),a?.rotation?e.rotation.set(a.rotation[0],a.rotation[1],a.rotation[2],r.rotation.order):e.rotation.copy(r.rotation),a?.scale?e.scale.fromArray(a.scale):e.scale.copy(r.scale);let o=t.explode;if(o&&o.factor>0&&o.radius>0){e.updateWorldMatrix(!0,!1),gu.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let c=s.userData.ri_center;Array.isArray(c)&&c.length===3?co.fromArray(c).applyMatrix4(e.matrixWorld).sub(o.centre):co.copy(gu).sub(o.centre),co.lengthSq()>1e-8&&(co.normalize().multiplyScalar(o.factor*o.radius).add(gu),e.parent&&e.parent.worldToLocal(co),e.position.copy(co))}e.updateMatrix(),e.updateWorldMatrix(!0,!1)}function uo(e,t){e.traverse(n=>ec(n,t))}function Tf(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function Ly(e,t,n,i){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,i])}function ky(e){if(e.textures){for(let t of cs){let n=e.textures[t];n&&va(n,wa(t))}e.textures=void 0}}function Dy(e,t,n){let i=e.textures??{};for(let r of cs){let a=qt(t,r),o=i[r];if(o===a)continue;let s=wa(r);o&&va(o,s),a?(Al(a,s,n),i[r]=a):delete i[r]}e.textures=Object.keys(i).length>0?i:void 0}function By(e,t){if(t.shadingMode==="normals")return Qr(e,()=>new Ot.MeshNormalMaterial);if(t.shadingMode==="unlit")return Qr(e,n=>{let i=new Ot.MeshBasicMaterial;return i.color.copy(n.color),i.map=n.map,i.alphaMap=n.alphaMap,i.alphaTest=n.alphaTest,i.transparent=n.transparent,i.opacity=n.opacity,i.side=n.side,i});if(t.rendererMode==="matcap"){let n=El();return Qr(e,i=>{let r=new Ot.MeshMatcapMaterial;return r.matcap=n,r.color.copy(i.color),r.alphaMap=i.alphaMap,r.alphaTest=i.alphaTest,r.side=i.side,r})}return e}function Ny(e,t){if(!vr(e))return;let i=Tf(e);i.original??(i.original=ds(e));let r=Ql(e,t);if(!r){i.original&&(e.material=i.original),e.visible=!0;return}let{key:a,binding:o}=r;e.visible=o.visible!==!1,ec(e,t);let s=t.itemMaterials?.[a]?.hex??t.itemMaterials?.[o.modelObjectId??a]?.hex,c=t.highlightOnHover!==!1&&a===t.hoveredKey,l=Ly(o,s,t,c);if(i.signature===l&&i.display){e.material=i.display;return}let u=o.style?.material;if(Dy(i,u,t.invalidate),!i.physical){let d=i.original??ds(e);if(!d)return;i.physical=Qr(d,h=>{let m=io(h),f=Gl(m??new Ot.MeshStandardMaterial);return Wl(f),f})}yr(i.physical,d=>{Xl(d,u,s??u?.baseColor),c&&(d.emissive.add(ts),d.color.lerp(vm,xm)),d.needsUpdate=!0}),i.display&&i.display!==i.physical&&yr(i.display,d=>d.dispose()),i.display=By(i.physical,t),i.signature=l,e.material=i.display}function Pf(e,t){e.traverse(n=>Ny(n,t))}function vu(e){e.traverse(t=>{if(!vr(t))return;let n=t.userData.riVisuals;n&&(n.rest&&(t.matrixAutoUpdate=!0,t.position.copy(n.rest.position),t.rotation.copy(n.rest.rotation),t.scale.copy(n.rest.scale),t.updateMatrix()),n.original&&(t.material=n.original),n.display&&n.display!==n.physical&&yr(n.display,i=>i.dispose()),n.physical&&yr(n.physical,i=>i.dispose()),ky(n),delete t.userData.riVisuals)})}var Ef=new jt.Matrix4().makeRotationX(Math.PI/2),Af=Ef.clone().invert();function Oy(e){let t=new jt.Vector3(e[0],e[1],e[2]),n=new jt.Vector3(Math.abs(e[3])+Math.abs(e[6])+Math.abs(e[9]),Math.abs(e[4])+Math.abs(e[7])+Math.abs(e[10]),Math.abs(e[5])+Math.abs(e[8])+Math.abs(e[11]));return new jt.Box3(t.clone().sub(n),t.clone().add(n))}function Iy(e){let t=e.getCenter(new jt.Vector3),n=e.getSize(new jt.Vector3).multiplyScalar(.5);return[t.x,t.y,t.z,n.x,0,0,0,n.y,0,0,0,n.z]}var tc=class{constructor(){this.group=new jt.Group;this.objects=new Map;this.geometry=new jt.BoxGeometry(1,1,1);this.material=new jt.MeshBasicMaterial;this.originalBounds=new WeakMap;this.signature="";this.lastContext=null;this.lastEffective=null;this.lastDragging=!1;this.version=0;this.tileVersions=new WeakMap;this.transforms=new Map}setCatalog(t){this.group.clear(),this.objects.clear();for(let n of t){let i=new jt.Box3(new jt.Vector3(...n.minimum),new jt.Vector3(...n.maximum)).applyMatrix4(Af),r=new jt.Group;r.name=n.name,r.userData.ri_name=n.name,r.userData.riLogicalObject=!0,r.userData.ri_center=i.getCenter(new jt.Vector3).toArray();let a=new jt.Mesh(this.geometry,this.material);a.visible=!1,a.raycast=()=>{},a.position.copy(i.getCenter(new jt.Vector3)),a.scale.copy(i.getSize(new jt.Vector3)),r.add(a),this.group.add(r),this.objects.set(n.name,r)}this.signature="",this.lastContext=null}nodesByBinding(t){let n={};for(let[i,r]of this.objects){let a=t.keyByModelObject[i]??i;t.objectBindings[a]&&(n[a]=r)}return n}sync(t,n,i=!1){if(!i&&!this.lastDragging&&t===this.lastContext&&this.lastEffective)return this.lastEffective;this.lastContext=t,this.lastDragging=i;let r={...t,suspendTransforms:!1},a=n?t.objectBindings[n]:void 0,o=a?this.objects.get(a.modelObjectId??n):void 0;i&&o&&a&&(r={...r,objectBindings:{...t.objectBindings,[n]:{...a,transform:{position:o.position.toArray(),rotation:[o.rotation.x,o.rotation.y,o.rotation.z],scale:o.scale.toArray()}}}});for(let c of this.objects.values())i&&c===o||ec(c,r);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([c,l])=>`${c}:${l.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[c,l]of this.objects)l.matrix.equals(new jt.Matrix4)||this.transforms.set(c,Ef.clone().multiply(l.matrix).multiply(Af))}return this.lastEffective=r,r}updateBounds(t){if(!t)return;let n=i=>{if(this.tileVersions.get(i)!==this.version){if(i.boundingVolume.box&&this.tileVersions.get(i)!==this.version){let r=this.originalBounds.get(i);r||(r={box:[...i.boundingVolume.box],error:i.geometricError},this.originalBounds.set(i,r));let a=Oy(r.box),o=a.clone(),s=1;for(let l of i.extras?.featureIds??[]){let u=this.transforms.get(l);u&&(o.union(a.clone().applyMatrix4(u)),s=Math.max(s,u.getMaxScaleOnAxis()))}let c=Iy(o);i.boundingVolume.box=c,i.geometricError=r.error*s,i.engineData?.boundingVolume?.setObbData(c,i.engineData.transform),this.tileVersions.set(i,this.version)}i.children?.forEach(n)}};n(t)}dispose(){this.group.clear(),this.objects.clear(),this.geometry.dispose(),this.material.dispose()}};var xu=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),hs=16,yu=1.25,zy=1.5,Uy=1.25,Vy=500,Fy=3e3,Rf=5e3,Lf=2e3,jy=.9;function kf(e){return e.full&&(e.wanting||e.usage>1)}function Df(e){return e.loosened?Fy:Vy}function Bf(e){let t=e.factor/Uy;return t<=1+1e-6?1:t}function Nf(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<jy&&Bf(e)>e.tooFine}function Of(e,t){let{now:n}=t,i=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(kf(t)){if(n-i.changedAt<Df(i))return i;let r=Math.max(i.tooFine,i.factor);return i.factor>=hs?i.loosened&&i.tooFine===r?i:{...i,loosened:!0,tooFine:r,changedAt:n}:{factor:Math.min(hs,i.factor*zy),loosened:!0,tooFine:r,raisedAt:n,changedAt:n}}return i.loosened&&!t.wanting?{...i,loosened:!1,changedAt:n}:Nf(i,t)&&n-i.raisedAt>=Rf&&n-i.changedAt>=Lf?{...i,factor:Bf(i),changedAt:n}:i}function If(e,t){let{now:n}=t;return kf(t)?e.factor>=hs&&e.loosened?null:Math.max(0,Df(e)-(n-e.changedAt)):e.loosened&&!t.wanting?0:Nf(e,t)?Math.max(0,Rf-(n-e.raisedAt),Lf-(n-e.changedAt)):null}function Ff(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function wu(e){if(!e)return null;let t=e.length,n=e.indexOf("?"),i=e.indexOf("#");n!==-1&&(t=Math.min(t,n)),i!==-1&&(t=Math.min(t,i));let r=e.lastIndexOf(".",t),a=e.lastIndexOf("/",t),o=e.indexOf("://");return o!==-1&&o+2===a||r===-1||r<a?null:e.substring(r+1,t)||null}var rc,ms=(rc=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:n}=this,i,r=()=>{n.delete(i),e()};return i=t?t.requestAnimationFrame(r):requestAnimationFrame(r),n.set(i,e),i}static cancelAnimationFrame(e){let{pending:t,session:n}=this;t.delete(e),n?n.cancelAnimationFrame(e):cancelAnimationFrame(e)}static flushPending(){this.pending.forEach((e,t)=>{e(),this.cancelAnimationFrame(t)})}},Ud(rc,"pending",new Map),Ud(rc,"session",null),rc),zf=2**30,bs=class{get unloadPriorityCallback(){return this._unloadPriorityCallback}set unloadPriorityCallback(e){e.length===1?(console.warn('LRUCache: "unloadPriorityCallback" function has been changed to take two arguments.'),this._unloadPriorityCallback=(t,n)=>{let i=e(t),r=e(n);return i<r?-1:+(i>r)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*zf,this.maxBytesSize=.4*zf,this.unloadPercent=.05,this.autoMarkUnused=!0,this.cachedBytes=0,this.itemSet=new Map,this.itemList=[],this.usedSet=new Set,this.callbacks=new Map,this.unloadingHandle=-1,this.bytesMap=new Map,this.loadedSet=new Set,this._unloadPriorityCallback=null;let e=this.itemSet;this.defaultPriorityCallback=t=>e.get(t)}isFull(){return this.itemSet.size>=this.maxSize||this.cachedBytes>=this.maxBytesSize}getMemoryUsage(e){return this.bytesMap.get(e)||0}setMemoryUsage(e,t){let{bytesMap:n,itemSet:i}=this;i.has(e)&&(this.cachedBytes-=n.get(e)||0,n.set(e,t),this.cachedBytes+=t)}add(e,t){let n=this.itemSet;if(n.has(e)||this.isFull())return!1;let i=this.usedSet,r=this.itemList,a=this.callbacks;return r.push(e),i.add(e),n.set(e,Date.now()),a.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,n=this.itemSet,i=this.itemList,r=this.bytesMap,a=this.callbacks,o=this.loadedSet;if(n.has(e)){this.cachedBytes-=r.get(e)||0,r.delete(e),a.get(e)(e);let s=i.indexOf(e);return i.splice(s,1),t.delete(e),n.delete(e),a.delete(e),o.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:n,loadedSet:i}=this;n.has(e)&&(t===!0?i.add(e):i.delete(e))}markUsed(e){let t=this.itemSet,n=this.usedSet;t.has(e)&&!n.has(e)&&(t.set(e,Date.now()),n.add(e))}markUnused(e){this.usedSet.delete(e)}markAllUnused(){this.usedSet.clear()}isUsed(e){return this.usedSet.has(e)}unloadUnusedContent(){let{unloadPercent:e,minSize:t,maxSize:n,itemList:i,itemSet:r,usedSet:a,loadedSet:o,callbacks:s,bytesMap:c,minBytesSize:l,maxBytesSize:u}=this,d=i.length-a.size,h=i.length-o.size,m=Math.max(Math.min(i.length-t,d),0),f=this.cachedBytes-l,x=this.unloadPriorityCallback||this.defaultPriorityCallback,E=!1,w=m>0&&d>0||h&&i.length>n;if(d&&this.cachedBytes>l||h&&this.cachedBytes>u||w){i.sort((b,y)=>{let M=a.has(b);if(M===a.has(y)){let C=o.has(b);return C===o.has(y)?-x(b,y):C?1:-1}else return M?1:-1});let p=Math.max(t*e,m*e),g=Math.ceil(Math.min(p,d,m)),_=Math.max(e*f,e*l),S=Math.min(_,f),T=0,P=0;for(;this.cachedBytes-P>u||i.length-T>n;){let b=i[T],y=c.get(b)||0;if(a.has(b)&&o.has(b)||this.cachedBytes-P-y<u&&i.length-T<=n)break;P+=y,T++}for(;P<S||T<g;){let b=i[T],y=c.get(b)||0;if(a.has(b)||this.cachedBytes-P-y<l&&T>=g)break;P+=y,T++}i.splice(0,T).forEach(b=>{this.cachedBytes-=c.get(b)||0,s.get(b)(b),c.delete(b),r.delete(b),s.delete(b),o.delete(b),a.delete(b)}),E=T<m||P<f&&T<d,E&&(E=T>0)}E&&(this.unloadingHandle=ms.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){ms.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},Hy=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},ei=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=>{ms.requestAnimationFrame(e)},this._runjobs=()=>{this.scheduled=!1,this.tryRunJobs()}}sort(){let e=this.priorityCallback,t=this.items;e!==null&&t.sort(e)}has(e){return this.callbacks.has(e)}add(e,t){let n={callback:t,reject:null,resolve:null,promise:null};return n.promise=new Promise((i,r)=>{let a=this.items,o=this.callbacks;n.resolve=i,n.reject=r,a.unshift(e),o.set(e,n),this.autoUpdate&&this.scheduleJobRun()}),n.promise}remove(e){let t=this.items,n=this.callbacks,i=t.indexOf(e);if(i!==-1){let r=n.get(e);r.promise.catch(a=>{if(a.name!=="AbortError")throw a}),r.reject(new Hy),t.splice(i,1),n.delete(e)}}removeByFilter(e){let{items:t}=this;for(let n=0;n<t.length;n++){let i=t[n];e(i)&&(this.remove(i),n--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,n=this.maxJobs,i=0,r=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;n>this.currJobs&&e.length>0&&i<n;){this.currJobs++,i++;let a=e.pop(),{callback:o,resolve:s,reject:c}=t.get(a);t.delete(a);let l;try{l=o(a)}catch(u){c(u),r();continue}l instanceof Promise?l.then(s).catch(c).finally(r):(s(l),r())}}flush(e){let{items:t,callbacks:n}=this,i=t.indexOf(e);if(!n.has(e))return;let{callback:r,resolve:a,reject:o}=n.get(e);n.delete(e),t.splice(i,1);let s;try{s=r(e)}catch(c){o(c);return}return s instanceof Promise?s.then(a).catch(o):a(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},sc=class{get running(){for(let e of this.originQueues.values())if(e.running)return!0;return!1}get maxJobsPerOrigin(){return this._maxJobsPerOrigin}set maxJobsPerOrigin(e){this._maxJobsPerOrigin=e,this.originQueues.forEach(t=>t.maxJobs=e)}get maxJobs(){return this.maxJobsPerOrigin}set maxJobs(e){console.warn('DownloadPriorityQueue: "maxJobs" is no longer valid and limits jobs per server origin. Use "maxJobsPerOrigin", instead.'),this.maxJobsPerOrigin=e}get priorityCallback(){return this._priorityCallback}set priorityCallback(e){this._priorityCallback=e,this.originQueues.forEach(t=>t.priorityCallback=e)}constructor(){this.originQueues=new Map,this._itemQueues=new WeakMap,this._maxJobsPerOrigin=6,this._priorityCallback=null}add(e,t,n,i=null){this.originQueues.forEach((c,l)=>{c.running||this.originQueues.delete(l)});let r=e===null?null:Ff(e),a=this.originQueues.get(r);a||(a=new ei,a.maxJobs=this._maxJobsPerOrigin,a.priorityCallback=this._priorityCallback,this.originQueues.set(r,a));let o=this._itemQueues.get(t);if(o&&o!==a&&o.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,a);let s=a.add(t,n);return i!==null&&(i.aborted?this.remove(t):i.addEventListener("abort",()=>this.remove(t),{once:!0})),s}remove(e){let t=this._itemQueues.get(e);t&&(t.remove(e),this._itemQueues.delete(e))}has(e){let t=this._itemQueues.get(e);return!!(t&&t.has(e))}};var Ca=6378137,Gy=1/298.257223563,Su=6356752314245179e-9,nc={inView:!1,error:1/0,distanceFromCamera:1/0};function lc(e){return e===4||e===-1}function wi(e,t){return cc(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function cc(e){return!!e.traversal}function vs(e){let{children:t}=e,n=t.length===0||cc(t[t.length-1]),i=!e.internal.hasUnrenderableContent||lc(e.internal.loadingState);return n&&i}function Sa(e){return e.traversal.unconditionallyRefine}function fs(e,t){if(cc(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,nc),e.traversal.inFrustum=nc.inView,e.traversal.error=nc.error,e.traversal.distanceFromCamera=nc.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 _u(e,t,n=!1){if(fs(e,t),n?t.markTileUsed(e):ic(e),Sa(e)&&vs(e)){let i=e.children;for(let r=0,a=i.length;r<a;r++)_u(i[r],t,n)}}function jf(e,t){if(fs(e,t),e.traversal.usedLastFrame&&(ic(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||Sa(e))&&vs(e))){let n=e.children;for(let i=0,r=n.length;i<r;i++)jf(n[i],t)}}function ic(e){e.traversal.used=!0}function Wy(e,t){return!(e.traversal.error<=t.errorTarget&&!Sa(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!vs(e))}function Hf(e,t){let{frameCount:n}=t,{children:i}=e;for(let r=0,a=i.length;r<a;r++){let o=i[r];wi(o,n)&&(o.traversal.active&&(o.traversal.kicked=!0,o.traversal.active=!1),Hf(o,t))}}function Uf(e){return!Sa(e)&&(!e.internal.hasContent||lc(e.internal.loadingState))}function Gf(e,t){if(fs(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(!Wy(e,t)){ic(e);return}let i=!1,r=!1,a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];Gf(c,t),i||(i=wi(c,t.frameCount)),r||(r=c.traversal.inFrustum)}if(e.refine==="REPLACE"&&!r&&a.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let o=0,s=a.length;o<s;o++)_u(a[o],t,!0);return}if(ic(e),e.refine==="REPLACE"&&i&&(t.loadSiblings||t.loadAncestors))for(let o=0,s=a.length;o<s;o++)_u(a[o],t)}function Wf(e,t){let n=t.frameCount;if(!wi(e,n))return;let i=e.children,r=!1;for(let o=0,s=i.length;o<s;o++){let c=i[o];r||(r=wi(c,n))}if(!r)e.traversal.isLeaf=!0;else{for(let s=0,c=i.length;s<c;s++)Wf(i[s],t);let o=!0;for(let s=0,c=i.length;s<c;s++){let l=i[s];if(wi(l,n)){let u=!Sa(l),d=!l.internal.hasContent||lc(l.internal.loadingState);u&&d||l.traversal.allChildrenLoaded||(o=!1)}}e.traversal.allChildrenLoaded=o}let a=!0;for(let o=0,s=i.length;o<s;o++){let c=i[o];wi(c,t.frameCount)&&!c.traversal.allUsedChildrenProcessed&&(a=!1)}e.traversal.allUsedChildrenProcessed=a&&vs(e)}function Xf(e,t){if(!wi(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!Sa(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!Sa(e)&&(e.traversal.active=!0,vs(e)&&e.internal.hasContent&&!lc(e.internal.loadingState)))for(let r=0,a=n.length;r<a;r++)jf(n[r],t);return}let i=n.length>0;for(let r=0,a=n.length;r<a;r++){let o=n[r];Xf(o,t),wi(o,t.frameCount)&&!(o.traversal.active&&Uf(o))&&!o.traversal.allChildrenReady&&(i=!1)}e.traversal.allChildrenReady=i,e.refine==="REPLACE"&&!i&&e.traversal.wasSetActive&&Uf(e)&&(e.traversal.active=!0,Hf(e,t))}function qf(e,t){fs(e,t);let n=wi(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||cc(e)&&e.traversal.usedLastFrame){let i=!1,r=!1;n?(i=e.traversal.active,r=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):fs(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(i&&t.stats.active++,r&&t.stats.visible++,e.traversal.wasSetActive!==i&&t.invokeOnePlugin(o=>o.setTileActive&&o.setTileActive(e,i)),e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(o=>o.setTileVisible&&o.setTileVisible(e,r))):e.internal.hasRenderableContent||(r=e.traversal.isLeaf,e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(o=>o.setEmptyTileVisible&&o.setEmptyTileVisible(e,r))),e.traversal.visible=r,e.traversal.active=i;let a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];qf(c,t)}}}function Xy(e,t){Gf(e,t),Wf(e,t),Xf(e,t),qf(e,t)}function qy(e){let t=null;return()=>{t===null&&(t=ms.requestAnimationFrame(()=>{t=null,e()}))}}function Yy(e,t=null,n=null){let i=[];for(i.push(e),i.push(null),i.push(0);i.length>0;){let r=i.pop(),a=i.pop(),o=i.pop();if(t&&t(o,a,r)){n&&n(o,a,r);return}let s=o.children;if(s)for(let c=s.length-1;c>=0;c--)i.push(s[c]),i.push(o),i.push(r+1);n&&n(o,a,r)}}var Vf=Symbol("PLUGIN_REGISTERED"),Ui={inView:!0,error:0,distance:1/0},$y=(e,t)=>{let n=e.priority||0,i=t.priority||0;return n===i?!e.traversal||!t.traversal?0:e.traversal.used===t.traversal.used?e.traversal.error===t.traversal.error?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.traversal.error>t.traversal.error?1:-1:e.traversal.used?1:-1:n>i?1:-1},Ky=(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,Zy=(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,po=(e,t)=>{let n=e.priority??1/0,i=t.priority??1/0;if(n!==i)return n>i?1:-1;if(!e.internal||!t.internal)return 0;let r=e.internal.renderer,a=t.internal.renderer,o=!r.loadAncestors,s=!a.loadAncestors;return o&&s?Ky(e,t):$y(e,t)},Mu=new bs;Mu.unloadPriorityCallback=Zy;var gs=new sc;gs.maxJobsPerOrigin=25,gs.priorityCallback=po;var ac=new ei;ac.maxJobs=5,ac.priorityCallback=po;var oc=new ei;oc.maxJobs=25,oc.priorityCallback=(e,t)=>{let n=e.parent,i=t.parent;return n===i?0:n?i?po(n,i):-1:1};var Cu=class{get root(){let e=this.rootTileset;return e?e.root:null}get loadProgress(){let{stats:e,isLoading:t}=this,n=e.queued+e.downloading+e.parsing,i=e.inCacheSinceLoad+ +!!t;return i===0?1:1-n/i}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof ei){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=Mu,this.downloadQueue=gs,this.parseQueue=ac,this.processNodeQueue=oc,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=qy(()=>{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[Vf]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,n=e.priority||0,i=t.length;for(let r=0;r<t.length;r++)if((t[r].priority||0)>n){i=r;break}t.splice(i,0,e),e[Vf]=!0,e.init&&e.init(this)}unregisterPlugin(e){let t=this.plugins;if(typeof e=="string"&&(e=this.getPluginByName(e)),t.includes(e)){let n=t.indexOf(e);return t.splice(n,1),e.dispose&&e.dispose(),!0}return!1}getPluginByName(e){return this.plugins.find(t=>t.name===e)||null}invokeOnePlugin(e){let t=[...this.plugins,this];for(let n=0;n<t.length;n++){let i=e(t[n]);if(i)return i}return null}invokeAllPlugins(e){let t=[...this.plugins,this],n=[];for(let i=0;i<t.length;i++){let r=e(t[i]);r&&n.push(r)}return n.length===0?null:Promise.all(n)}traverse(e,t,n=!0){this.root&&Yy(this.root,(i,...r)=>(n&&this.ensureChildrenArePreprocessed(i,!0),e?e(i,...r):!1),t)}getAttributions(e=[]){return this.invokeAllPlugins(t=>t!==this&&t.getAttributions&&t.getAttributions(e)),e}update(){let{lruCache:e,usedSet:t,stats:n,root:i,downloadQueue:r,parseQueue:a,processNodeQueue:o}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(l=>l.loadRootTileset&&l.loadRootTileset()).then(l=>{let u=this.rootURL;u!==null&&this.invokeAllPlugins(d=>u=d.preprocessURL?d.preprocessURL(u,null):u),this.rootLoadingState=4,this.rootTileset=l,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:l,url:u}),this.dispatchEvent({type:"load-root-tileset",tileset:l,url:u})}).catch(l=>{this.rootLoadingState=-1,console.error(l),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:l,url:this.rootURL})})),!i)return;let s=null;if(this.invokeAllPlugins(l=>{if(l.doTilesNeedUpdate){let u=l.doTilesNeedUpdate();s=s===null?u:!!(s||u)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),n.inFrustum=0,n.used=0,n.active=0,n.visible=0,n.tilesProcessed=0,this.frameCount++,t.forEach(l=>e.markUnused(l)),t.clear(),this.prepareForTraversal(),Xy(i,this),this.removeUnusedPendingTiles();let c=this.queuedTiles;c.sort(e.unloadPriorityCallback);for(let l=0,u=c.length;l<u&&!e.isFull();l++)this.requestTileContents(c[l]);c.length=0,e.scheduleUnload(),(r.running||a.running||o.running)===!1&&this.isLoading===!0&&(this.cachedSinceLoadComplete.clear(),n.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1),this.dispatchEvent({type:"update-after"})}resetFailedTiles(){this.rootLoadingState===-1&&(this.rootLoadingState=0);let e=this.stats;e.failed!==0&&(this.traverse(t=>{t.internal.loadingState===-1&&(t.internal.loadingState=0)},null,!1),e.failed=0)}calculateTileViewErrorWithPlugin(e,t){this.calculateTileViewError(e,t);let{errorFalloff:n,errorFalloffDensity:i}=this;if(n>0&&Number.isFinite(t.distanceFromCamera)){let s=t.distanceFromCamera*i;t.error-=n*(1-Math.exp(-s*s))}let r=null,a=0,o=1/0;this.invokeAllPlugins(s=>{s!==this&&s.calculateTileViewError&&(Ui.inView=!0,Ui.error=0,Ui.distance=1/0,s.calculateTileViewError(e,Ui)&&(r===null&&(r=!0),r&&(r=Ui.inView),Ui.inView&&(o=Math.min(o,Ui.distance),a=Math.max(a,Ui.error))))}),t.inView&&r!==!1?(t.error=Math.max(t.error,a),t.distanceFromCamera=Math.min(t.distanceFromCamera,o)):r?(t.inView=!0,t.error=a,t.distanceFromCamera=o):t.inView=!1}dispose(){[...this.plugins].forEach(n=>{this.unregisterPlugin(n)});let e=this.lruCache,t=[];this.traverse(n=>(t.push(n),!1),null,!1);for(let n=0,i=t.length;n<i;n++)e.remove(t[n]);this.stats={queued:0,parsing:0,downloading:0,failed:0,inFrustum:0,traversed:0,used:0,active:0,visible:0},this.frameCount=0,this.loadingTiles.clear()}calculateBytesUsed(e,t){return 0}dispatchEvent(e){}addEventListener(e,t){}removeEventListener(e,t){}parseTile(e,t,n){return null}prepareForTraversal(){}disposeTile(e){e.traversal.visible&&(e.internal.hasRenderableContent?this.invokeOnePlugin(n=>n.setTileVisible&&n.setTileVisible(e,!1)):this.invokeOnePlugin(n=>n.setEmptyTileVisible&&n.setEmptyTileVisible(e,!1)),e.traversal.visible=!1),e.traversal.active&&e.internal.hasRenderableContent&&this.invokeOnePlugin(n=>n.setTileActive&&n.setTileActive(e,!1)),e.traversal.active=!1;let{scene:t}=e.engineData;t&&this.dispatchEvent({type:"dispose-model",scene:t,tile:e})}preprocessNode(e,t,n=null){if(this.processedTiles.add(e),this.stats.tilesProcessed++,e.content&&(!("uri"in e.content)&&"url"in e.content&&(e.content.uri=e.content.url,delete e.content.url),e.content.boundingVolume&&!("box"in e.content.boundingVolume||"sphere"in e.content.boundingVolume||"region"in e.content.boundingVolume)&&delete e.content.boundingVolume),e.parent=n,e.children=e.children||[],e.internal={hasContent:!1,hasRenderableContent:!1,hasUnrenderableContent:!1,loadingState:0,basePath:t,depth:-1,depthFromRenderedParent:-1,isVirtual:!1,virtualChildCount:0,renderer:this,...e.internal},e.content?.uri){let i=wu(e.content.uri),r=!!(i&&/json$/.test(i));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=r,e.internal.hasRenderableContent=!r}else e.internal.hasContent=!1,e.internal.hasUnrenderableContent=!1,e.internal.hasRenderableContent=!1;n?(e.internal.depth=n.internal.depth+1,e.internal.depthFromRenderedParent=n.internal.depthFromRenderedParent+ +!!e.internal.hasRenderableContent):(e.internal.depth=0,e.internal.depthFromRenderedParent=+!!e.internal.hasRenderableContent),e.traversal={distanceFromCamera:1/0,error:1/0,inFrustum:!1,wasInFrustum:!1,isLeaf:!1,used:!1,usedLastFrame:!1,visible:!1,wasSetVisible:!1,active:!1,wasSetActive:!1,allChildrenReady:!1,allChildrenLoaded:!1,kicked:!1,allUsedChildrenProcessed:!1,lastFrameVisited:-1},n===null?e.refine=e.refine||"REPLACE":e.refine=e.refine||n.refine,e.engineData={scene:null,metadata:null,boundingVolume:null},Object.defineProperty(e,"cached",{get(){return console.warn('TilesRenderer: "tile.cached" field has been renamed to "tile.engineData".'),this.engineData},enumerable:!1,configurable:!0}),this.invokeAllPlugins(i=>{i!==this&&i.preprocessNode&&i.preprocessNode(e,t,n)})}setTileActive(e,t){t?this.activeTiles.add(e):this.activeTiles.delete(e)}setTileVisible(e,t){t?this.visibleTiles.add(e):this.visibleTiles.delete(e),this.dispatchEvent({type:"tile-visibility-change",scene:e.engineData.scene,tile:e,visible:t})}calculateTileViewError(e,t){}removeUnusedPendingTiles(){let{lruCache:e,loadingTiles:t}=this,n=[];for(let i of t)!e.isUsed(i)&&i.internal.loadingState===1&&n.push(i);for(let i=0;i<n.length;i++)e.remove(n[i])}queueTileForDownload(e){e.internal.loadingState!==0||this.lruCache.isFull()||this.queuedTiles.push(e)}markTileUsed(e){this.usedSet.add(e),this.lruCache.markUsed(e)}fetchData(e,t){return fetch(e,t)}ensureChildrenArePreprocessed(e,t=this.stats.tilesProcessed<this.maxTilesProcessed){let n=e.children;if(n.length===0||n[n.length-1].traversal)return;let i=r=>{for(let a=0,o=r.length;a<o;a++){let s=r[a];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),i(n)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,r=>{i(r.children),this._dispatchNeedsUpdateEvent()})}getBytesUsed(e){let t=0;return this.invokeAllPlugins(n=>{n.calculateBytesUsed&&(t+=n.calculateBytesUsed(e,e.engineData.scene)||0)}),t}recalculateBytesUsed(e=null){let{lruCache:t,processedTiles:n}=this;e===null?t.itemSet.forEach(i=>{n.has(i)&&t.setMemoryUsage(i,this.getBytesUsed(i))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,n=null){let[i,r]=e.asset.version.split(".").map(o=>parseInt(o));console.assert(i<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),i===1&&r>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let a=t.replace(/\/[^/]*$/,"");a=new URL(a,window.location.href).toString(),this.preprocessNode(e.root,a,n)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,n=null,i=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(h=>i=h.preprocessURL?h.preprocessURL(i,e):i);let r=this.stats,a=this.lruCache,o=this.downloadQueue,s=this.parseQueue,c=this.loadingTiles,l=wu(i),u=new AbortController,d=u.signal;if(a.add(e,h=>{u.abort(),t?h.children.length=0:this.invokeAllPlugins(m=>{m.disposeTile&&m.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,s.remove(h),o.remove(h),c.delete(h)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),a.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),r.inCacheSinceLoad++,r.inCache++,r.queued++,e.internal.loadingState=1,c.add(e),o.add(i,e,h=>{if(d.aborted)return Promise.resolve();e.internal.loadingState=2,r.downloading++,r.queued--;let m=this.invokeOnePlugin(f=>f.fetchData&&f.fetchData(i,{...this.fetchOptions,signal:d}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:i,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),m}).then(h=>{if(!d.aborted){if(!(h instanceof Response))return h;if(h.ok)return l==="json"?h.json():h.arrayBuffer();throw Error(`Failed to load model with error code ${h.status}`)}}).then(h=>{if(!d.aborted)return r.downloading--,r.parsing++,e.internal.loadingState=3,s.add(e,m=>d.aborted?Promise.resolve():l==="json"&&h.root?(this.preprocessTileset(h,i,e),e.children.push(h.root),n=h,t=!0,Promise.resolve()):this.invokeOnePlugin(f=>f.parseTile&&f.parseTile(h,m,l,i,d)))}).then(()=>{if(d.aborted)return;r.parsing--,r.loaded++,e.internal.loadingState=4,c.delete(e),a.setLoaded(e,!0);let h=this.getBytesUsed(e);if(a.getMemoryUsage(e)===0&&h>0&&a.isFull()){a.remove(e);return}a.setMemoryUsage(e,h),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:n,url:i}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:i})}).catch(h=>{d.aborted||(h.name==="AbortError"?a.remove(e):(s.remove(e),o.remove(e),e.internal.loadingState===1?r.queued--:e.internal.loadingState===2?r.downloading--:e.internal.loadingState===3?r.parsing--:e.internal.loadingState===4&&r.loaded--,r.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(h),e.internal.loadingState=-1,c.delete(e),a.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:h,url:i})))})}};function Ma(e){if(e===null||e.byteLength<4)return"";let t;if(t=e instanceof DataView?e:new DataView(e),String.fromCharCode(t.getUint8(0))==="{")return null;let n="";for(let i=0;i<4;i++)n+=String.fromCharCode(t.getUint8(i));return n}var Jy=new TextDecoder;function Yf(e){return Jy.decode(e)}function dc(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var ho=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=dc(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function Tu(e,t,n,i,r,a){let o;switch(i){case"SCALAR":o=1;break;case"VEC2":o=2;break;case"VEC3":o=3;break;case"VEC4":o=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${a}".`)}let s,c=n*o;switch(r){case"BYTE":s=new Int8Array(e,t,c);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,c);break;case"SHORT":s=new Int16Array(e,t,c);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,c);break;case"INT":s=new Int32Array(e,t,c);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,c);break;case"FLOAT":s=new Float32Array(e,t,c);break;case"DOUBLE":s=new Float64Array(e,t,c);break;default:throw Error(`FeatureTable : Feature component type not provided for "${a}".`)}return s}var xs=class{constructor(e,t,n,i){this.buffer=e,this.binOffset=t+n,this.binLength=i;let r=null;if(n!==0){let a=new Uint8Array(e,t,n);r=JSON.parse(Yf(a))}else r={};this.header=r}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,n=null,i=null){let r=this.header;if(!(e in r))return null;let a=r[e];if(!(a instanceof Object)||Array.isArray(a))return a;{let{buffer:o,binOffset:s,binLength:c}=this,l=a.byteOffset||0,u=a.type||i,d=a.componentType||n;if("type"in a&&i&&a.type!==i)throw Error("FeatureTable: Specified type does not match expected type.");let h=s+l,m=Tu(o,h,t,u,d,e);if(h+m.byteLength>s+c)throw Error("FeatureTable: Feature data read outside binary body length.");return m}}getBuffer(e,t){let{buffer:n,binOffset:i}=this;return n.slice(i+e,i+e+t)}},Qy=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let i of this.classes){let r=i.instances;for(let a in r)i.instances[a]=this._parseProperty(r[a],i.length,a)}if(this.instancesLength=t.instancesLength,this.classIds=this._parseProperty(t.classIds,this.instancesLength,"classIds"),t.parentCounts?this.parentCounts=this._parseProperty(t.parentCounts,this.instancesLength,"parentCounts"):this.parentCounts=Array(this.instancesLength).fill(1),t.parentIds){let i=this.parentCounts.reduce((r,a)=>r+a,0);this.parentIds=this._parseProperty(t.parentIds,i,"parentIds")}else this.parentIds=null;this.instancesIds=[];let n={};for(let i of this.classIds)n[i]=n[i]??0,this.instancesIds.push(n[i]),n[i]++}_parseProperty(e,t,n){if(Array.isArray(e))return e;{let{buffer:i,binOffset:r}=this.batchTable,a=e.byteOffset,o=e.componentType||"UNSIGNED_SHORT";return Tu(i,r+a,t,"SCALAR",o,n)}}getDataFromId(e,t={}){let n=this.parentCounts[e];if(this.parentIds&&n>0){let s=0;for(let c=0;c<e;c++)s+=this.parentCounts[c];for(let c=0;c<n;c++){let l=this.parentIds[s+c];l!==e&&this.getDataFromId(l,t)}}let i=this.classIds[e],r=this.classes[i].instances,a=this.classes[i].name,o=this.instancesIds[e];for(let s in r)t[a]=t[a]||{},t[a][s]=r[s][o];return t}},uc=class extends xs{constructor(e,t,n,i,r){super(e,n,i,r),this.count=t,this.extensions={};let a=this.header.extensions;a&&a["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new Qy(this))}getDataFromId(e,t={}){if(e<0||e>=this.count)throw Error(`BatchTable: id value "${e}" out of bounds for "${this.count}" features number.`);for(let n of this.getKeys())t[n]=super.getData(n,this.count)[e];for(let n in this.extensions){let i=this.extensions[n];i.getDataFromId instanceof Function&&(t[n]=t[n]||{},i.getDataFromId(e,t[n]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},Pu=class extends ho{parse(e){let t=new DataView(e),n=Ma(t);console.assert(n==="b3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new xs(e.slice(28,28+a+o),0,a,o),u=28+a+o,d=new uc(e.slice(u,u+s+c),l.getData("BATCH_LENGTH"),0,s,c),h=u+s+c;return{version:i,featureTable:l,batchTable:d,glbBytes:new Uint8Array(e,h,r-h)}}},Au=class extends ho{parse(e){let t=new DataView(e),n=Ma(t);console.assert(n==="i3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=t.getUint32(28,!0),u=new xs(e.slice(32,32+a+o),0,a,o),d=32+a+o,h=new uc(e.slice(d,d+s+c),u.getData("INSTANCES_LENGTH"),0,s,c),m=d+s+c,f=new Uint8Array(e,m,r-m),x=null,E=null,w=null;if(l)x=f,E=Promise.resolve();else{let p=this.resolveExternalURL(Yf(f));w=dc(p),E=fetch(p,this.fetchOptions).then(g=>{if(!g.ok)throw Error(`I3DMLoaderBase : Failed to load file "${p}" with status ${g.status} : ${g.statusText}`);return g.arrayBuffer()}).then(g=>{x=new Uint8Array(g)})}return E.then(()=>({version:i,featureTable:u,batchTable:h,glbBytes:x,gltfWorkingPath:w}))}},Eu=class extends ho{parse(e){let t=new DataView(e),n=Ma(t);console.assert(n==="pnts");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new xs(e.slice(28,28+a+o),0,a,o),u=28+a+o,d=new uc(e.slice(u,u+s+c),l.getData("BATCH_LENGTH")||l.getData("POINTS_LENGTH"),0,s,c);return Promise.resolve({version:i,featureTable:l,batchTable:d})}},Ru=class extends ho{parse(e){let t=new DataView(e),n=Ma(t);console.assert(n==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let i=t.getUint32(4,!0);console.assert(i===1,'CMPTLoader: The version listed in the header is "1".');let r=t.getUint32(8,!0);console.assert(r===e.byteLength,"CMPTLoader: The contents buffer length listed in the header matches the file.");let a=t.getUint32(12,!0),o=[],s=16;for(let c=0;c<a;c++){let l=new DataView(e,s,12),u=Ma(l),d=l.getUint32(4,!0),h=l.getUint32(8,!0),m=new Uint8Array(e,s,h);o.push({type:u,buffer:m,version:d}),s+=h}return{version:i,tiles:o}}};var j=require("three"),yc=require("three/addons/loaders/GLTFLoader.js"),dg=require("three/addons/utils/BufferGeometryUtils.js"),Vu=class extends Pu{constructor(e=j.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new j.Matrix4}parse(e){let t=super.parse(e),n=t.glbBytes.slice().buffer;return new Promise((i,r)=>{let a=this.manager,o=this.fetchOptions,s=a.getHandler("path.gltf")||new yc.GLTFLoader(a);o.credentials==="include"&&o.mode==="cors"&&s.setCrossOrigin("use-credentials"),"credentials"in o&&s.setWithCredentials(o.credentials==="include"),o.headers&&s.setRequestHeader(o.headers);let c=this.workingPath;!/[\\/]$/.test(c)&&c.length&&(c+="/");let l=this.adjustmentTransform;s.parse(n,c,u=>{let{batchTable:d,featureTable:h}=t,{scene:m}=u,f=h.getData("RTC_CENTER",1,"FLOAT","VEC3");f&&(m.position.x+=f[0],m.position.y+=f[1],m.position.z+=f[2]),u.scene.updateMatrix(),u.scene.matrix.multiply(l),u.scene.matrix.decompose(u.scene.position,u.scene.quaternion,u.scene.scale),u.batchTable=d,u.featureTable=h,m.batchTable=d,m.featureTable=h,i(u)},r)})}};function e1(e){let t=e>>11,n=e>>5&63,i=e&31;return[Math.round(t/31*255),Math.round(n/63*255),Math.round(i/31*255)]}var ys=new j.Vector2;function t1(e,t,n=new j.Vector3){ys.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(ys.x,ys.y,1-Math.abs(ys.x)-Math.abs(ys.y));let i=j.MathUtils.clamp(-n.z,0,1);return n.x>=0?n.setX(n.x-i):n.setX(n.x+i),n.y>=0?n.setY(n.y-i):n.setY(n.y+i),n.normalize(),n}var $f={RGB:"color",POSITION:"position"},Fu=class extends Eu{constructor(e=j.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:i}=t,r=new j.PointsMaterial,a=n.header.extensions,o=new j.Vector3,s;if(a&&a["3DTILES_draco_point_compression"]){let{byteOffset:u,byteLength:d,properties:h}=a["3DTILES_draco_point_compression"],m=this.manager.getHandler("draco.drc");if(m==null)throw Error("PNTSLoader: dracoLoader not available.");let f={};for(let w in h)if(w in $f&&w in h){let p=$f[w];f[p]=h[w]}let x={attributeIDs:f,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},E=n.getBuffer(u,d);s=await m.decodeGeometry(E,x),s.attributes.color&&(r.vertexColors=!0)}else{let u=n.getData("POINTS_LENGTH"),d=n.getData("POSITION",u,"FLOAT","VEC3"),h=n.getData("NORMAL",u,"FLOAT","VEC3"),m=n.getData("NORMAL",u,"UNSIGNED_BYTE","VEC2"),f=n.getData("RGB",u,"UNSIGNED_BYTE","VEC3"),x=n.getData("RGBA",u,"UNSIGNED_BYTE","VEC4"),E=n.getData("RGB565",u,"UNSIGNED_SHORT","SCALAR"),w=n.getData("CONSTANT_RGBA",u,"UNSIGNED_BYTE","VEC4"),p=n.getData("POSITION_QUANTIZED",u,"UNSIGNED_SHORT","VEC3"),g=n.getData("QUANTIZED_VOLUME_SCALE",u,"FLOAT","VEC3"),_=n.getData("QUANTIZED_VOLUME_OFFSET",u,"FLOAT","VEC3");if(s=new j.BufferGeometry,p){let S=new Float32Array(u*3);for(let T=0;T<u;T++)for(let P=0;P<3;P++){let b=3*T+P;S[b]=p[b]/65535*g[P]}o.x=_[0],o.y=_[1],o.z=_[2],s.setAttribute("position",new j.BufferAttribute(S,3,!1))}else s.setAttribute("position",new j.BufferAttribute(d,3,!1));if(h!==null)s.setAttribute("normal",new j.BufferAttribute(h,3,!1));else if(m!==null){let S=new Float32Array(u*3),T=new j.Vector3;for(let P=0;P<u;P++){let b=m[P*2],y=m[P*2+1],M=t1(b,y,T);S[P*3]=M.x,S[P*3+1]=M.y,S[P*3+2]=M.z}s.setAttribute("normal",new j.BufferAttribute(S,3,!1))}if(x!==null)s.setAttribute("color",new j.BufferAttribute(x,4,!0)),r.vertexColors=!0,r.transparent=!0,r.depthWrite=!1;else if(f!==null)s.setAttribute("color",new j.BufferAttribute(f,3,!0)),r.vertexColors=!0;else if(E!==null){let S=new Uint8Array(u*3);for(let T=0;T<u;T++){let P=e1(E[T]);for(let b=0;b<3;b++){let y=3*T+b;S[y]=P[b]}}s.setAttribute("color",new j.BufferAttribute(S,3,!0)),r.vertexColors=!0}else if(w!==null){r.color=new j.Color(w[0],w[1],w[2]);let S=w[3]/255;S<1&&(r.opacity=S,r.transparent=!0,r.depthWrite=!1)}}let c=new j.Points(s,r);c.position.copy(o),t.scene=c,t.scene.featureTable=n,t.scene.batchTable=i;let l=n.getData("RTC_CENTER",1,"FLOAT","VEC3");return l&&(t.scene.position.x+=l[0],t.scene.position.y+=l[1],t.scene.position.z+=l[2]),t})}};function n1(e){let{x:t,y:n,z:i}=e;e.x=i,e.y=t,e.z=n}function r1(e){return-e+Math.PI/2}var Kf=new j.Spherical,Vi=new j.Vector3,qn=new j.Vector3,Lu=new j.Vector3,wr=new j.Matrix4,ti=new j.Matrix4,ku=new j.Sphere,Zn=new j.Euler,Zf=new j.Vector3,Jf=new j.Vector3,Qf=new j.Vector3,ws=new j.Vector3,pc=new j.Ray,i1=1e-12,a1=.1;var ju=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new j.Vector3(e,t,n)}intersectRay(e,t){return wr.makeScale(...this.radius).invert(),ku.center.set(0,0,0),ku.radius=1,pc.copy(e).applyMatrix4(wr),pc.intersectSphere(ku,t)?(wr.makeScale(...this.radius),t.applyMatrix4(wr),t):null}getEastNorthUpFrame(e,t,n,i){return n.isMatrix4&&(i=n,n=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,Zf,Jf,Qf),this.getCartographicToPosition(e,t,n,ws),i.makeBasis(Zf,Jf,Qf).setPosition(ws)}getOrientedEastNorthUpFrame(e,t,n,i,r,a,o){return this.getObjectFrame(e,t,n,i,r,a,o,0)}getObjectFrame(e,t,n,i,r,a,o,s=2){return this.getEastNorthUpFrame(e,t,n,wr),Zn.set(r,a,-i,"ZXY"),o.makeRotationFromEuler(Zn).premultiply(wr),s===1?(Zn.set(Math.PI/2,0,0,"XYZ"),ti.makeRotationFromEuler(Zn),o.multiply(ti)):s===2&&(Zn.set(-Math.PI/2,0,Math.PI,"XYZ"),ti.makeRotationFromEuler(Zn),o.multiply(ti)),o}getCartographicFromObjectFrame(e,t,n=2){return n===1?(Zn.set(-Math.PI/2,0,0,"XYZ"),ti.makeRotationFromEuler(Zn).premultiply(e)):n===2?(Zn.set(-Math.PI/2,0,Math.PI,"XYZ"),ti.makeRotationFromEuler(Zn).premultiply(e)):ti.copy(e),ws.setFromMatrixPosition(ti),this.getPositionToCartographic(ws,t),this.getEastNorthUpFrame(t.lat,t.lon,0,wr).invert(),ti.premultiply(wr),Zn.setFromRotationMatrix(ti,"ZXY"),t.azimuth=-Zn.z,t.elevation=Zn.x,t.roll=Zn.y,t}getEastNorthUpAxes(e,t,n,i,r,a=ws){this.getCartographicToPosition(e,t,0,a),this.getCartographicToNormal(e,t,r),n.set(-a.y,a.x,0).normalize(),i.crossVectors(r,n).normalize()}getCartographicToPosition(e,t,n,i){this.getCartographicToNormal(e,t,Vi);let r=this.radius;qn.copy(Vi),qn.x*=r.x**2,qn.y*=r.y**2,qn.z*=r.z**2;let a=Math.sqrt(Vi.dot(qn));return qn.divideScalar(a),i.copy(qn).addScaledVector(Vi,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,qn),this.getPositionToNormal(qn,Vi);let n=Lu.subVectors(e,qn);return t.lon=Math.atan2(Vi.y,Vi.x),t.lat=Math.asin(Vi.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return Kf.set(1,r1(e),t),n.setFromSpherical(Kf).normalize(),n1(n),n}getPositionToNormal(e,t){let n=this.radius;return t.copy(e),t.x/=n.x**2,t.y/=n.y**2,t.z/=n.z**2,t.normalize(),t}getPositionToSurfacePoint(e,t){let n=this.radius,i=1/n.x**2,r=1/n.y**2,a=1/n.z**2,o=e.x*e.x*i,s=e.y*e.y*r,c=e.z*e.z*a,l=o+s+c,u=Math.sqrt(1/l),d=qn.copy(e).multiplyScalar(u);if(l<a1)return isFinite(u)?t.copy(d):null;let h=Lu.set(d.x*i*2,d.y*r*2,d.z*a*2),m=(1-u)*e.length()/(.5*h.length()),f=0,x,E,w,p,g,_,S,T,P,b,y;do{m-=f,w=1/(1+m*i),p=1/(1+m*r),g=1/(1+m*a),_=w*w,S=p*p,T=g*g,P=_*w,b=S*p,y=T*g,x=o*_+s*S+c*T-1,E=o*P*i+s*b*r+c*y*a;let M=-2*E;f=x/M}while(Math.abs(x)>i1);return t.set(e.x*w,e.y*p,e.z*g)}calculateHorizonDistance(e,t){let n=this.calculateEffectiveRadius(e);return Math.sqrt(2*n*t+t**2)}calculateEffectiveRadius(e){let t=this.radius.x,n=1-this.radius.z**2/t**2,i=e*j.MathUtils.DEG2RAD,r=Math.sin(i)**2;return t/Math.sqrt(1-n*r)}getPositionElevation(e){this.getPositionToSurfacePoint(e,qn);let t=Lu.subVectors(e,qn);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(wr.makeScale(...this.radius).invert(),pc.copy(e).applyMatrix4(wr),qn.set(0,0,0),pc.closestPointToPoint(qn,t).normalize(),wr.makeScale(...this.radius),t.applyMatrix4(wr))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},Ts=new ju(Ca,Ca,Su);Ts.name="WGS84 Earth";var hc=new j.Vector3,mo=new j.Vector3,fo=new j.Vector3,Du=new j.Vector3,mc=new j.Quaternion,fc=new j.Vector3,go=new j.Matrix4,eg=new j.Matrix4,tg=new j.Vector3,ng=new j.Matrix4,Bu=new j.Quaternion,Nu={};function rg(e,t,n,i){if(e=e/n*2-1,t=t/n*2-1,i.x=e,i.y=t,i.z=1-Math.abs(e)-Math.abs(t),i.z<0){let r=i.x;i.x=(1-Math.abs(i.y))*(r>=0?1:-1),i.y=(1-Math.abs(r))*(i.y>=0?1:-1)}return i.normalize(),i}var Hu=class extends Au{constructor(e=j.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new j.Matrix4,this.ellipsoid=Ts.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:n,batchTable:i}=t,r=t.glbBytes.slice().buffer;return new Promise((a,o)=>{let s=this.fetchOptions,c=this.manager,l=c.getHandler("path.gltf")||new yc.GLTFLoader(c);s.credentials==="include"&&s.mode==="cors"&&l.setCrossOrigin("use-credentials"),"credentials"in s&&l.setWithCredentials(s.credentials==="include"),s.headers&&l.setRequestHeader(s.headers);let u=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(u)||(u+="/");let d=this.adjustmentTransform;l.parse(r,u,h=>{let m=n.getData("INSTANCES_LENGTH"),f=n.getData("POSITION",m,"FLOAT","VEC3"),x=n.getData("POSITION_QUANTIZED",m,"UNSIGNED_SHORT","VEC3"),E=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),w=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),p=n.getData("NORMAL_UP",m,"FLOAT","VEC3"),g=n.getData("NORMAL_RIGHT",m,"FLOAT","VEC3"),_=n.getData("NORMAL_UP_OCT32P",m,"UNSIGNED_SHORT","VEC2"),S=n.getData("NORMAL_RIGHT_OCT32P",m,"UNSIGNED_SHORT","VEC2"),T=n.getData("SCALE_NON_UNIFORM",m,"FLOAT","VEC3"),P=n.getData("SCALE",m,"FLOAT","SCALAR"),b=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),y=n.getData("EAST_NORTH_UP");if(!f&&x){f=new Float32Array(m*3);for(let L=0;L<m;L++)f[L*3+0]=E[0]+x[L*3+0]/65535*w[0],f[L*3+1]=E[1]+x[L*3+1]/65535*w[1],f[L*3+2]=E[2]+x[L*3+2]/65535*w[2]}let M=new j.Vector3;for(let L=0;L<m;L++)M.x+=f[L*3+0]/m,M.y+=f[L*3+1]/m,M.z+=f[L*3+2]/m;let C=[],N=[];h.scene.updateMatrixWorld(),h.scene.traverse(L=>{if(L.isMesh){N.push(L);let{geometry:V,material:U}=L,D=new j.InstancedMesh(V,U,m);D.position.copy(M),b&&(D.position.x+=b[0],D.position.y+=b[1],D.position.z+=b[2]),C.push(D)}});for(let L=0;L<m;L++){Du.set(f[L*3+0]-M.x,f[L*3+1]-M.y,f[L*3+2]-M.z),mc.identity(),p&&g?(mo.set(p[L*3+0],p[L*3+1],p[L*3+2]),fo.set(g[L*3+0],g[L*3+1],g[L*3+2]),hc.crossVectors(fo,mo).normalize(),go.makeBasis(fo,mo,hc),mc.setFromRotationMatrix(go)):_&&S&&(rg(_[L*2+0],_[L*2+1],65535,mo),rg(S[L*2+0],S[L*2+1],65535,fo),hc.crossVectors(fo,mo).normalize(),go.makeBasis(fo,mo,hc),mc.setFromRotationMatrix(go)),fc.set(1,1,1),T&&fc.set(T[L*3+0],T[L*3+1],T[L*3+2]),P&&fc.multiplyScalar(P[L]);for(let V=0,U=C.length;V<U;V++){let D=C[V];Bu.copy(mc),y&&(D.updateMatrixWorld(),tg.copy(Du).applyMatrix4(D.matrixWorld),this.ellipsoid.getPositionToCartographic(tg,Nu),this.ellipsoid.getEastNorthUpFrame(Nu.lat,Nu.lon,ng),Bu.setFromRotationMatrix(ng)),go.compose(Du,Bu,fc).multiply(d);let Y=N[V];eg.multiplyMatrices(go,Y.matrixWorld),D.setMatrixAt(L,eg)}}h.scene.clear(),h.scene.add(...C),h.batchTable=i,h.featureTable=n,h.scene.batchTable=i,h.scene.featureTable=n,a(h)},o)})})}},ug=class extends Ru{constructor(e=j.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new j.Matrix4,this.ellipsoid=Ts.clone()}parse(e){let t=super.parse(e),{manager:n,ellipsoid:i,adjustmentTransform:r}=this,a=[];for(let o in t.tiles){let{type:s,buffer:c}=t.tiles[o];switch(s){case"b3dm":{let l=c.slice(),u=new Vu(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.adjustmentTransform.copy(r);let d=u.parse(l.buffer);a.push(d);break}case"pnts":{let l=c.slice(),u=new Fu(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions;let d=u.parse(l.buffer);a.push(d);break}case"i3dm":{let l=c.slice(),u=new Hu(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.ellipsoid.copy(i),u.adjustmentTransform.copy(r);let d=u.parse(l.buffer);a.push(d);break}}}return Promise.all(a).then(o=>{let s=new j.Group;return o.forEach(c=>{s.add(c.scene)}),{tiles:o,scene:s}})}},_s=new j.Matrix4,o1=class extends j.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new j.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?_s.copy(this.matrix):_s.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=_s.elements,n=this.matrixWorld.elements,i=!1;for(let r=0;r<16;r++){let a=t[r],o=n[r];if(Math.abs(a-o)>2**-52){i=!0;break}}if(i){this.matrixWorld.copy(_s),this.matrixWorldInverse.copy(_s).invert();let r=this.children;for(let c=0,l=r.length;c<l;c++)r[c].updateMatrixWorld();let{tilesRenderer:a}=this,{activeTiles:o,visibleTiles:s}=a;o.forEach(c=>{s.has(c)||c.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},s1=new j.Ray;function l1(e,t,n,i){let{scene:r}=e.engineData;n.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(e,r,t,i))||t.intersectObject(r,!0,i)}function c1(e){return"traversal"in e}function pg(e,t,n,i,r=null){if(!c1(t))return;let{group:a,activeTiles:o}=e,{boundingVolume:s}=t.engineData;if(r===null&&(r=s1,r.copy(n.ray).applyMatrix4(a.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(r))return;o.has(t)&&l1(t,n,e,i);let c=t.children;for(let l=0,u=c.length;l<u;l++)pg(e,c[l],n,i,r)}var gc=new j.Vector3,bc=new j.Vector3,Jn=new j.Vector3,vc=new j.Ray,zu=class{constructor(e=new j.Box3,t=new j.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new j.Matrix4,this.points=Array(8).fill().map(()=>new j.Vector3),this.planes=[,,,,,,].fill().map(()=>new j.Plane)}copy(e){return this.box.copy(e.box),this.transform.copy(e.transform),this.update(),this}clone(){return new this.constructor().copy(this)}clampPoint(e,t){return t.copy(e).applyMatrix4(this.inverseTransform).clamp(this.box.min,this.box.max).applyMatrix4(this.transform)}distanceToPoint(e){return this.clampPoint(e,Jn).distanceTo(e)}containsPoint(e){return Jn.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(Jn)}intersectsRay(e){return vc.copy(e).applyMatrix4(this.inverseTransform),vc.intersectsBox(this.box)}intersectRay(e,t){return vc.copy(e).applyMatrix4(this.inverseTransform),vc.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:n,box:i}=this;t.copy(n).invert();let{min:r,max:a}=i,o=0;for(let s=-1;s<=1;s+=2)for(let c=-1;c<=1;c+=2)for(let l=-1;l<=1;l+=2)e[o].set(s<0?r.x:a.x,c<0?r.y:a.y,l<0?r.z:a.z).applyMatrix4(n),o++;this.updatePlanes()}updatePlanes(){gc.copy(this.box.min).applyMatrix4(this.transform),bc.copy(this.box.max).applyMatrix4(this.transform),Jn.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(Jn,gc),this.planes[1].setFromNormalAndCoplanarPoint(Jn,bc).negate(),Jn.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(Jn,gc),this.planes[3].setFromNormalAndCoplanarPoint(Jn,bc).negate(),Jn.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(Jn,gc),this.planes[5].setFromNormalAndCoplanarPoint(Jn,bc).negate()}intersectsSphere(e){return this.clampPoint(e.center,Jn),Jn.distanceToSquared(e.center)<=e.radius*e.radius}intersectsFrustum(e){return this._intersectsPlaneShape(e.planes,e.points)}intersectsOBB(e){return this._intersectsPlaneShape(e.planes,e.points)}_intersectsPlaneShape(e,t){let n=this.points,i=this.planes;for(let r=0;r<6;r++){let a=e[r],o=-1/0;for(let s=0;s<8;s++){let c=n[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}for(let r=0;r<6;r++){let a=i[r],o=-1/0;for(let s=0;s<8;s++){let c=t[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}return!0}},Cs=Math.PI,Ou=Cs/2,Ss=new j.Vector3,Ta=new j.Vector3,Fr=new j.Vector3,Re=new j.Vector3,Yn=new j.Matrix4,d1=new j.Box3,ig=new j.Matrix4;function Fi(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function ag(e){return e.x!==e.y}var hg=class extends ju{constructor(e=1,t=1,n=1,i=-Ou,r=Ou,a=0,o=2*Cs,s=0,c=0){super(e,t,n),this.latStart=i,this.latEnd=r,this.lonStart=a,this.lonEnd=o,this.heightStart=s,this.heightEnd=c}getBoundingBox(e,t){ag(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:n,latEnd:i,lonStart:r,lonEnd:a,heightStart:o,heightEnd:s}=this,c=(n+i)*.5,l=(r+a)*.5,u=n>0,d=i<0,h;h=u?n:d?i:0;let{min:m,max:f}=e;m.setScalar(1/0),f.setScalar(-1/0),a-r<=Cs?(this.getCartographicToNormal(c,l,Fr),Ta.set(0,0,1),Ss.crossVectors(Ta,Fr).normalize(),Ta.crossVectors(Fr,Ss).normalize(),t.makeBasis(Ss,Ta,Fr),Yn.copy(t).invert(),this.getCartographicToPosition(h,r,s,Re).applyMatrix4(Yn),f.x=Math.abs(Re.x),m.x=-f.x,this.getCartographicToPosition(i,r,s,Re).applyMatrix4(Yn),f.y=Re.y,this.getCartographicToPosition(i,l,s,Re).applyMatrix4(Yn),f.y=Math.max(Re.y,f.y),this.getCartographicToPosition(n,r,s,Re).applyMatrix4(Yn),m.y=Re.y,this.getCartographicToPosition(n,l,s,Re).applyMatrix4(Yn),m.y=Math.min(Re.y,m.y),this.getCartographicToPosition(c,l,s,Re).applyMatrix4(Yn),f.z=Re.z,this.getCartographicToPosition(n,r,o,Re).applyMatrix4(Yn),m.z=Re.z,this.getCartographicToPosition(i,r,o,Re).applyMatrix4(Yn),m.z=Math.min(Re.z,m.z)):(this.getCartographicToPosition(h,l,s,Fr),Fr.z=0,Fr.length()<1e-10?Fr.set(1,0,0):Fr.normalize(),Ta.set(0,0,1),Ss.crossVectors(Fr,Ta).normalize(),t.makeBasis(Ss,Ta,Fr),Yn.copy(t).invert(),this.getCartographicToPosition(h,l+Ou,s,Re).applyMatrix4(Yn),f.x=Math.abs(Re.x),m.x=-f.x,this.getCartographicToPosition(i,0,d?o:s,Re).applyMatrix4(Yn),f.y=Re.y,this.getCartographicToPosition(n,0,u?o:s,Re).applyMatrix4(Yn),m.y=Re.y,this.getCartographicToPosition(h,l,s,Re).applyMatrix4(Yn),f.z=Re.z,this.getCartographicToPosition(h,a,s,Re).applyMatrix4(Yn),m.z=Re.z),e.getCenter(Re),e.min.sub(Re).multiplyScalar(1.0000000000001),e.max.sub(Re).multiplyScalar(1.0000000000001),Re.applyMatrix4(t),t.setPosition(Re)}getBoundingSphere(e){ag(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(d1,ig),e.center.setFromMatrixPosition(ig),e.radius=0;let{latStart:t,latEnd:n,lonStart:i,lonEnd:r,heightStart:a,heightEnd:o}=this,s=(t+n)*.5,c=(i+r)*.5,l=t>0,u=n<0,d;d=l?t:u?n:0,this.getCartographicToPosition(d,i,o,Re),Fi(Re,e),this.getCartographicToPosition(n,i,o,Re),Fi(Re,e),this.getCartographicToPosition(n,c,o,Re),Fi(Re,e),this.getCartographicToPosition(t,i,o,Re),Fi(Re,e),this.getCartographicToPosition(t,c,o,Re),Fi(Re,e),this.getCartographicToPosition(s,c,o,Re),Fi(Re,e),this.getCartographicToPosition(t,i,a,Re),Fi(Re,e),r-i>Cs&&(this.getCartographicToPosition(d,c+Cs,o,Re),Fi(Re,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},_i=new j.Vector3,Si=new j.Vector3,Mi=new j.Vector3,og=new j.Vector3,sg=new j.Vector3,u1=class{constructor(){this.sphere=null,this.obb=null,this.region=null,this.regionObb=null}intersectsRay(e){let t=this.sphere,n=this.obb||this.regionObb;return!(t&&!e.intersectsSphere(t)||n&&!n.intersectsRay(e))}intersectRay(e,t=null){let n=this.sphere,i=this.obb||this.regionObb,r=-1/0,a=-1/0;n&&e.intersectSphere(n,og)&&(r=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(og)),i&&i.intersectRay(e,sg)&&(a=i.containsPoint(e.origin)?0:e.origin.distanceToSquared(sg));let o=Math.max(r,a);return o===-1/0?null:(e.at(Math.sqrt(o),t),t)}distanceToPoint(e){let t=this.sphere,n=this.obb||this.regionObb,i=-1/0,r=-1/0;return t&&(i=Math.max(t.distanceToPoint(e),0)),n&&(r=n.distanceToPoint(e)),i>r?i:r}intersectsFrustum(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsFrustum(e)?!1:!!(n||t)}intersectsSphere(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!n.intersectsSphere(e)||t&&!t.intersectsSphere(e)?!1:!!(n||t)}intersectsOBB(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsOBB(e)?!1:!!(n||t)}getOBB(e,t){let n=this.obb||this.regionObb;n?(e.copy(n.box),t.copy(n.transform)):(this.getAABB(e),t.identity())}getAABB(e){if(this.sphere)this.sphere.getBoundingBox(e);else{let t=this.obb||this.regionObb;e.copy(t.box).applyMatrix4(t.transform)}}getSphere(e){if(this.sphere)e.copy(this.sphere);else if(this.region)this.region.getBoundingSphere(e);else{let t=this.obb||this.regionObb;t.box.getBoundingSphere(e),e.applyMatrix4(t.transform)}}setObbData(e,t){let n=new zu;_i.set(e[3],e[4],e[5]),Si.set(e[6],e[7],e[8]),Mi.set(e[9],e[10],e[11]);let i=_i.length(),r=Si.length(),a=Mi.length();_i.normalize(),Si.normalize(),Mi.normalize(),i===0&&_i.crossVectors(Si,Mi),r===0&&Si.crossVectors(_i,Mi),a===0&&Mi.crossVectors(_i,Si),n.transform.set(_i.x,Si.x,Mi.x,e[0],_i.y,Si.y,Mi.y,e[1],_i.z,Si.z,Mi.z,e[2],0,0,0,1).premultiply(t),n.box.min.set(-i,-r,-a),n.box.max.set(i,r,a),n.update(),this.obb=n}setSphereData(e,t,n,i,r){let a=new j.Sphere;a.center.set(e,t,n),a.radius=i,a.applyMatrix4(r),this.sphere=a}setRegionData(e,t,n,i,r,a,o){let s=new hg(...e.radius,n,r,t,i,a,o),c=new zu;s.getBoundingBox(c.box,c.transform),c.update(),this.region=s,this.regionObb=c}},p1=new j.Matrix3;function h1(e,t,n,i){let r=p1.set(e.normal.x,e.normal.y,e.normal.z,t.normal.x,t.normal.y,t.normal.z,n.normal.x,n.normal.y,n.normal.z);return i.set(-e.constant,-t.constant,-n.constant),i.applyMatrix3(r.invert()),i}var m1=class extends j.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new j.Vector3)}setFromProjectionMatrix(...e){return super.setFromProjectionMatrix(...e),this.calculateFrustumPoints(),this}calculateFrustumPoints(){let{planes:e,points:t}=this;[[e[0],e[3],e[4]],[e[1],e[3],e[4]],[e[0],e[2],e[4]],[e[1],e[2],e[4]],[e[0],e[3],e[5]],[e[1],e[3],e[5]],[e[0],e[2],e[5]],[e[1],e[2],e[5]]].forEach((n,i)=>{h1(n[0],n[1],n[2],t[i])})}};var Uu=0;function lg(e,t,n,i){try{return j.TextureUtils.getByteLength(e,t,n,i)}catch{return Uu}}function f1(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??Uu;let{format:t,type:n,image:i,mipmaps:r}=e;if(e.isCompressedTexture&&Array.isArray(r)&&r.length>0){let o=0;for(let s of r)s?.data?.byteLength?o+=s.data.byteLength:o+=lg(s.width,s.height,t,n);return o}if(!i)return Uu;let a=lg(i.width,i.height,t,n);return a*=e.generateMipmaps?4/3:1,a}function g1(e){let t=new Set,n=0;return e.traverse(i=>{if(i.geometry&&!t.has(i.geometry)&&(n+=(0,dg.estimateBytesUsed)(i.geometry),t.add(i.geometry)),i.material){let r=i.material;for(let a in r){let o=r[a];o&&o.isTexture&&!t.has(o)&&(n+=f1(o),t.add(o))}}}),n}var mg=Symbol("INITIAL_FRUSTUM_CULLED"),xc=new j.Matrix4,Ms=new j.Vector3,Iu=new j.Vector2,b1=new j.Vector3(1,0,0),v1=new j.Vector3(0,1,0),x1=()=>null;function cg(e,t){e.traverse(n=>{n.frustumCulled=n[mg]&&t})}var Gu=class extends Cu{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{cg(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new o1(this),this.ellipsoid=Ts.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new j.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new j.LoadingManager,this._listeners={}}addEventListener(e,t){j.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return j.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){j.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){j.EventDispatcher.prototype.dispatchEvent.call(this,e)}getBoundingBox(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getAABB(e),!0):!1}getOrientedBoundingBox(e,t){if(!this.root)return!1;let n=this.root.engineData.boundingVolume;return n?(n.getOBB(e,t),!0):!1}getBoundingSphere(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getSphere(e),!0):!1}forEachLoadedModel(e){this.traverse(t=>{let n=t.engineData&&t.engineData.scene;n&&e(n,t)},null,!1)}raycast(e,t){if(this.root)if(this.accelerateRaycast)pg(this,this.root,e,t);else{let n=e.firstHitOnly?[]:t;for(let i of this.activeTiles){let{scene:r}=i.engineData;this.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(i,r,e,n))||e.intersectObject(r,!0,n)}e.firstHitOnly&&n.length>0&&(n.sort((i,r)=>i.distance-r.distance),t.push(n[0]))}}hasCamera(e){return this.cameraMap.has(e)}setCamera(e){let t=this.cameras,n=this.cameraMap;return n.has(e)?!1:(n.set(e,new j.Vector2),t.push(e),this.dispatchEvent({type:"add-camera",camera:e}),!0)}setResolution(e,t,n){let i=this.cameraMap;if(!i.has(e))return!1;let r=t.isVector2?t.x:t,a=t.isVector2?t.y:n,o=i.get(e);return(o.width!==r||o.height!==a)&&(o.set(r,a),this.dispatchEvent({type:"camera-resolution-change"})),!0}getResolution(e,t){let n=this.cameraMap.get(e);return n?t.copy(n):null}setResolutionFromRenderer(e,t){return t.getSize(Iu),this.setResolution(e,Iu.x,Iu.y)}deleteCamera(e){let t=this.cameras,n=this.cameraMap;if(n.has(e)){let i=t.indexOf(e);return t.splice(i,1),n.delete(e),this.dispatchEvent({type:"delete-camera",camera:e}),!0}return!1}loadRootTileset(...e){return super.loadRootTileset(...e).then(t=>{let{asset:n,extensions:i={}}=t;switch((n&&n.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(v1,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(b1,Math.PI/2);break}if("3DTILES_ellipsoid"in i){let r=i["3DTILES_ellipsoid"],{ellipsoid:a}=this;a.name=r.body,r.radii?a.radius.set(...r.radii):a.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,n=this.cameraMap,i=this.cameraInfo;for(;i.length>t.length;)i.pop();for(;i.length<t.length;)i.push({frustum:new m1,isOrthographic:!1,sseDenominator:-1,position:new j.Vector3,invScale:-1,pixelSize:0});Ms.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(Ms.x-Ms.y,Ms.x-Ms.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let r=0,a=i.length;r<a;r++){let o=t[r],s=i[r],c=s.frustum,l=s.position,u=n.get(o);(u.width===0||u.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let d=o.projectionMatrix.elements;if(s.isOrthographic=d[15]===1,s.isOrthographic){let h=2/d[0],m=2/d[5];s.pixelSize=Math.max(m/u.height,h/u.width)}else s.sseDenominator=2/d[5]/u.height;xc.copy(e.matrixWorld),xc.premultiply(o.matrixWorldInverse),xc.premultiply(o.projectionMatrix),c.setFromProjectionMatrix(xc,o.coordinateSystem,o.reversedDepth),l.set(0,0,0),l.applyMatrix4(o.matrixWorld),l.applyMatrix4(e.matrixWorldInverse)}}update(){if(super.update(),this.cameras.length===0&&this.root){let e=!1;this.invokeAllPlugins(t=>e||(e=!!(t!==this&&t.calculateTileViewError))),e===!1&&console.warn("TilesRenderer: no cameras defined. Cannot update 3d tiles.")}}preprocessNode(e,t,n=null){super.preprocessNode(e,t,n);let i=new j.Matrix4;if(e.transform){let o=e.transform;for(let s=0;s<16;s++)i.elements[s]=o[s]}n&&i.premultiply(n.engineData.transform);let r=new j.Matrix4().copy(i).invert(),a=new u1;"sphere"in e.boundingVolume&&a.setSphereData(...e.boundingVolume.sphere,i),"box"in e.boundingVolume&&a.setObbData(e.boundingVolume.box,i),"region"in e.boundingVolume&&a.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=i,e.engineData.transformInverse=r,e.engineData.boundingVolume=a,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=x1}async parseTile(e,t,n,i,r){let a=t.engineData,o=dc(i),s=this.fetchOptions,c=this.manager,l=null,u=a.transform,d=this._upRotationMatrix,h=(Ma(e)||n).toLowerCase();switch(h){case"b3dm":{let g=new Vu(c);g.workingPath=o,g.fetchOptions=s,g.adjustmentTransform.copy(d),l=g.parse(e);break}case"pnts":{let g=new Fu(c);g.workingPath=o,g.fetchOptions=s,l=g.parse(e);break}case"i3dm":{let g=new Hu(c);g.workingPath=o,g.fetchOptions=s,g.adjustmentTransform.copy(d),g.ellipsoid.copy(this.ellipsoid),l=g.parse(e);break}case"cmpt":{let g=new ug(c);g.workingPath=o,g.fetchOptions=s,g.adjustmentTransform.copy(d),g.ellipsoid.copy(this.ellipsoid),l=g.parse(e).then(_=>_.scene);break}case"gltf":case"glb":{let g=c.getHandler("path.gltf")||c.getHandler("path.glb")||new yc.GLTFLoader(c);g.setWithCredentials(s.credentials==="include"),g.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&g.setCrossOrigin("use-credentials");let _=g.resourcePath||g.path||o;!/[\\/]$/.test(_)&&_.length&&(_+="/"),l=g.parseAsync(e,_).then(S=>{S.scene=S.scene||new j.Group;let{scene:T}=S;return T.updateMatrix(),T.matrix.multiply(d).decompose(T.position,T.quaternion,T.scale),S});break}default:l=this.invokeOnePlugin(g=>g.parseToMesh&&g.parseToMesh(e,t,n,i,r));break}let m=await l;if(m===null)throw Error(`TilesRenderer: Content type "${h}" not supported.`);let f,x;m.isObject3D?(f=m,x=null):(f=m.scene,x=m),f.updateMatrix(),f.matrix.premultiply(u),f.matrix.decompose(f.position,f.quaternion,f.scale),await this.invokeAllPlugins(g=>g.processTileModel&&g.processTileModel(f,t)),f.traverse(g=>{g[mg]=g.frustumCulled,g.userData.tile=t}),cg(f,!this.autoDisableRendererCulling);let E=[],w=[],p=[];if(f.traverse(g=>{if(g.geometry&&w.push(g.geometry),g.material){let _=g.material;E.push(g.material);for(let S in _){let T=_[S];T&&T.isTexture&&p.push(T)}}}),r.aborted){for(let g=0,_=p.length;g<_;g++){let S=p[g];S.image instanceof ImageBitmap&&S.image.close(),S.dispose()}return}a.materials=E,a.geometry=w,a.textures=p,a.scene=f,a.metadata=x}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let n=t.materials,i=t.geometry,r=t.textures,a=t.scene.parent;t.scene.traverse(o=>{o.userData.meshFeatures&&o.userData.meshFeatures.dispose(),o.userData.structuralMetadata&&o.userData.structuralMetadata.dispose()});for(let o=0,s=i.length;o<s;o++)i[o].dispose();for(let o=0,s=n.length;o<s;o++)n[o].dispose();for(let o=0,s=r.length;o<s;o++){let c=r[o];c.image instanceof ImageBitmap&&c.image.close(),c.dispose()}a&&a.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let n=e.engineData.scene;n&&(t?(n.parent=this.group,n.updateMatrixWorld(!0)):n.parent=null)}setTileVisible(e,t){let n=e.engineData.scene,{activeTiles:i,group:r}=this;n&&(t?r.add(n):(r.remove(n),i.has(e)&&(n.parent=r))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let n=this._bytesUsed;return!n.has(e)&&t&&n.set(e,g1(t)),n.get(e)??null}calculateTileViewError(e,t){let n=e.engineData,i=this.cameras,r=this.cameraInfo,a=n.boundingVolume,o=!1,s=0,c=1/0,l=0,u=1/0;for(let d=0,h=i.length;d<h;d++){let m=r[d],f,x;if(m.isOrthographic){let w=m.pixelSize;f=e.geometricError/w,x=1/0}else{let w=m.sseDenominator;x=a.distanceToPoint(m.position),f=x===0?1/0:e.geometricError/(x*w)}let E=r[d].frustum;a.intersectsFrustum(E)&&(o=!0,s=Math.max(s,f),c=Math.min(c,x)),l=Math.max(l,f),u=Math.min(u,x)}o?(t.inView=!0,t.error=s,t.distanceFromCamera=c):(t.inView=!1,t.error=l,t.distanceFromCamera=u)}dispose(){super.dispose(),this.group.removeFromParent()}};var ee=require("three"),Eg=require("three/addons/loaders/GLTFLoader.js"),qu=require("three/addons/postprocessing/Pass.js");var mT=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var fg=new ei;fg.maxJobs=10,fg.priorityCallback=(e,t)=>{let n=e.tile,i=t.tile,r=n.internal.renderer,a=i.internal.renderer,o=r.visibleTiles.has(n);return o===a.visibleTiles.has(i)?po(n,i):o?1:-1};var gg=new ee.Vector3;function Ps(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,i=new ee.BufferAttribute(new t(e.count*e.itemSize),e.itemSize,!0),r=e.itemSize,a=e.count;for(let o=0;o<a;o++)for(let s=0;s<r;s++){let c=ee.MathUtils.clamp(e.getComponent(o,s),n,1);i.setComponent(o,s,c)}return i}function y1(e,t=Int16Array){let n=e.geometry,i=n.attributes,r=i.position;if(r.isInterleavedBufferAttribute||r.array instanceof t)return r;let a=new ee.BufferAttribute(new t(r.count*r.itemSize),r.itemSize,!1),o=r.itemSize,s=r.count;n.computeBoundingBox();let c=n.boundingBox,{min:l,max:u}=c,d=2**(8*t.BYTES_PER_ELEMENT-1)-1,h=-d;for(let m=0;m<s;m++)for(let f=0;f<o;f++){let x=f===0?"x":f===1?"y":"z",E=l[x],w=u[x],p=ee.MathUtils.mapLinear(r.getComponent(m,f),E,w,h,d);a.setComponent(m,f,p)}c.getCenter(gg).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(gg),e.scale.x*=.5*(u.x-l.x)/d,e.scale.y*=.5*(u.y-l.y)/d,e.scale.z*=.5*(u.z-l.z)/d,i.position=a,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var Yu=class{constructor(e){this._options={generateNormals:!1,disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!1,uvType:Int8Array,normalType:Int8Array,positionType:Int16Array,...e},this.name="TILES_COMPRESSION_PLUGIN",this.priority=-100}processTileModel(e,t){let{generateNormals:n,disableMipmaps:i,compressIndex:r,compressUvs:a,compressNormals:o,compressPosition:s,uvType:c,normalType:l,positionType:u}=this._options;e.traverse(d=>{if(d.material&&i){let h=d.material;for(let m in h){let f=h[m];f&&f.isTexture&&f.generateMipmaps&&(f.generateMipmaps=!1,f.minFilter=ee.LinearFilter)}}if(d.geometry){let h=d.geometry,m=h.attributes;if(a){let{uv:f,uv1:x,uv2:E,uv3:w}=m;f&&(m.uv=Ps(f,c)),x&&(m.uv1=Ps(x,c)),E&&(m.uv2=Ps(E,c)),w&&(m.uv3=Ps(w,c))}if(n&&!m.normals&&h.computeVertexNormals(),o&&m.normals&&(m.normals=Ps(m.normals,l)),s&&y1(d,u),r&&h.index){let f=m.position.count,x=h.index,E=f>65535?Uint32Array:f>255?Uint16Array:Uint8Array;if(!(x.array instanceof E)){let w=new E(h.index.count);w.set(x.array);let p=new ee.BufferAttribute(w,1);h.setIndex(p)}}}})}};function Ln(e,t,n){return e&&t in e?e[t]:n}function Rg(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function w1(e){return/^FLOAT/.test(e)}function Ls(e){return/^VEC/.test(e)}function ks(e){return/^MAT/.test(e)}function Lg(e,t,n,i=null){return ks(n)||Ls(n)?i.fromArray(e,t):e[t]}function Wu(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new ee.Vector2;case"VEC3":return new ee.Vector3;case"VEC4":return new ee.Vector4;case"MAT2":return new ee.Matrix2;case"MAT3":return new ee.Matrix3;case"MAT4":return new ee.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function bg(e,t){if(t==null)return!1;switch(e){case"SCALAR":return typeof t=="number"||typeof t=="bigint";case"VEC2":return t.isVector2;case"VEC3":return t.isVector3;case"VEC4":return t.isVector4;case"MAT2":return t.isMatrix2;case"MAT3":return t.isMatrix3;case"MAT4":return t.isMatrix4;case"BOOLEAN":return typeof t=="boolean";case"STRING":return typeof t=="string";case"ENUM":return typeof t=="number"||typeof t=="bigint"}throw Error("ClassProperty: invalid type.")}function Rs(e,t=null){switch(e){case"INT8":return Int8Array;case"INT16":return Int16Array;case"INT32":return Int32Array;case"INT64":return BigInt64Array;case"UINT8":return Uint8Array;case"UINT16":return Uint16Array;case"UINT32":return Uint32Array;case"UINT64":return BigUint64Array;case"FLOAT32":return Float32Array;case"FLOAT64":return Float64Array}switch(t){case"BOOLEAN":return Uint8Array;case"STRING":return Uint8Array}throw Error("ClassProperty: invalid type.")}function _1(e,t=null){if(e.array){t=t&&Array.isArray(t)?t:[],t.length=e.count;for(let n=0,i=t.length;n<i;n++)t[n]=wc(e,t[n])}else t=wc(e,t);return t}function wc(e,t=null){let n=e.default,i=e.type;if(t||(t=Wu(e)),n===null){switch(i){case"SCALAR":return 0;case"VEC2":return t.set(0,0);case"VEC3":return t.set(0,0,0);case"VEC4":return t.set(0,0,0,0);case"MAT2":return t.identity();case"MAT3":return t.identity();case"MAT4":return t.identity();case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return""}throw Error("ClassProperty: invalid type.")}else if(ks(i))t.fromArray(n);else if(Ls(i))t.fromArray(n);else return n}function S1(e,t){if(e.noData===null)return t;let n=e.noData,i=e.type;if(Array.isArray(t))for(let o=0,s=t.length;o<s;o++)t[o]=r(t[o]);else t=r(t);return t;function r(o){return a(o)&&(o=wc(e,o)),o}function a(o){if(ks(i)){let s=o.elements;for(let c=0,l=n.length;c<l;c++)if(n[c]!==s[c])return!1;return!0}else if(Ls(i)){for(let s=0,c=n.length;s<c;s++)if(n[s]!==o.getComponent(s))return!1;return!0}else return n===o}}function M1(e,t){switch(e){case"INT8":return Math.max(t/127,-1);case"INT16":return Math.max(t,32767,-1);case"INT32":return Math.max(t/2147483647,-1);case"INT64":return Math.max(Number(t)/9223372036854776e3,-1);case"UINT8":return t/255;case"UINT16":return t/65535;case"UINT32":return t/4294967295;case"UINT64":return Number(t)/18446744073709552e3}}function C1(e,t){let{type:n,componentType:i,scale:r,offset:a,normalized:o}=e;if(Array.isArray(t))for(let d=0,h=t.length;d<h;d++)t[d]=s(t[d]);else t=s(t);return t;function s(d){return d=ks(n)?l(d):Ls(n)?c(d):u(d),d}function c(d){return d.x=u(d.x),d.y=u(d.y),"z"in d&&(d.z=u(d.z)),"w"in d&&(d.w=u(d.w)),d}function l(d){let h=d.elements;for(let m=0,f=h.length;m<f;m++)h[m]=u(h[m]);return d}function u(d){return o&&(d=M1(i,d)),(o||w1(i))&&(d=d*r+a),d}}function $u(e,t,n=null){if(e.array){Array.isArray(t)||(t=Array(e.count||0)),t.length=n===null?e.count:n;for(let i=0,r=t.length;i<r;i++)bg(e.type,t[i])||(t[i]=Wu(e))}else bg(e.type,t)||(t=Wu(e));return t}function _c(e,t){for(let n in t)n in e||delete t[n];for(let n in e){let i=e[n];t[n]=$u(i,t[n])}}function T1(e){switch(e){case"ENUM":return 1;case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16;case"BOOLEAN":return-1;case"STRING":return-1;default:return-1}}var Mc=class{constructor(e,t,n=null){this.name=t.name||null,this.description=t.description||null,this.type=t.type,this.componentType=t.componentType||null,this.enumType=t.enumType||null,this.array=t.array||!1,this.count=t.count||0,this.normalized=t.normalized||!1,this.offset=t.offset||0,this.scale=Ln(t,"scale",1),this.max=Ln(t,"max",1/0),this.min=Ln(t,"min",-1/0),this.required=t.required||!1,this.noData=Ln(t,"noData",null),this.default=Ln(t,"default",null),this.semantic=Ln(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=Ln(n,"offset",this.offset),this.scale=Ln(n,"scale",this.scale),this.max=Ln(n,"max",this.max),this.min=Ln(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=Ln(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return $u(this,e,t)}resolveDefaultElement(e){return wc(this,e)}resolveDefault(e){return _1(this,e)}resolveNoData(e){return S1(this,e)}resolveEnumsToStrings(e){let t=this.enumSet;if(this.type==="ENUM")if(Array.isArray(e))for(let i=0,r=e.length;i<r;i++)e[i]=n(e[i]);else e=n(e);return e;function n(i){let r=t.values.find(a=>a.value===i);return r===null?"":r.name}}adjustValueScaleOffset(e){return Rg(this.type)?C1(this,e):e}},Ku=class{constructor(e,t={},n={},i=null){this.definition=e,this.class=t[e.class],this.className=e.class,this.enums=n,this.data=i,this.name="name"in e?e.name:null,this.properties=null}getPropertyNames(){return Object.keys(this.class.properties)}includesData(e){return!!this.definition.properties[e]}dispose(){}_initProperties(e=Mc){let t={};for(let n in this.class.properties)t[n]=new e(this.enums,this.class.properties[n],this.definition.properties[n]);this.properties=t}},P1=class extends Mc{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},A1=class extends Ku{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(P1)}getData(e,t,n={}){let i=this.properties;_c(i,n);for(let r in i)n[r]=this.getPropertyValue(r,e,t,n[r]);return n}getPropertyValue(e,t,n,i=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let r=this.properties[e],a=r.type;if(!r)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return r.resolveDefault(i);i=r.shapeToProperty(i);let o=n.getAttribute(r.attribute.toLowerCase());if(ks(a)){let s=i.elements;for(let c=s.length;0<c;)s[0]=o.getComponent(t,0)}else if(Ls(a))i.fromBufferAttribute(o,t);else if(a==="SCALAR"||a==="ENUM")i=o.getX(t);else throw Error("StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.");return i=r.adjustValueScaleOffset(i),i=r.resolveEnumsToStrings(i),i=r.resolveNoData(i),i}},E1=class extends Mc{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=T1(this.type),this.arrayOffsets=Ln(n,"arrayOffsets",null),this.stringOffsets=Ln(n,"stringOffsets",null),this.arrayOffsetType=Ln(n,"arrayOffsetType","UINT32"),this.stringOffsetType=Ln(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:i,arrayOffsetType:r}=this,a=new(Rs(r))(e[i]);n=a[t+1]-a[t]}return n}getIndexOffsetFromId(e,t){let n=t;if(this.arrayOffsets){let{arrayOffsets:i,arrayOffsetType:r}=this;n=new(Rs(r))(e[i])[n]}else this.array&&(n*=this.count);return n}},R1=class extends Ku{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(E1)}getData(e,t={}){let n=this.properties;_c(n,t);for(let i in n)t[i]=this.getPropertyValue(i,e,t[i]);return t}_readValueAtIndex(e,t,n,i=null){let r=this.properties[e],{componentType:a,type:o}=r,s=this.data,c=s[r.values],l=new(Rs(a,o))(c),u=r.getIndexOffsetFromId(s,t);if(Rg(o)||o==="ENUM")return Lg(l,(u+n)*r.valueLength,o,i);if(o==="STRING"){let d=u+n,h=0;if(r.stringOffsets!==null){let{stringOffsets:f,stringOffsetType:x}=r,E=new(Rs(x))(s[f]);h=E[d+1]-E[d],d=E[d]}let m=new Uint8Array(l.buffer,d,h);i=new TextDecoder().decode(m)}else if(o==="BOOLEAN"){let d=u+n,h=Math.floor(d/8),m=d%8;i=(l[h]>>m&1)==1}return i}getPropertyValue(e,t,n=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let i=this.properties[e];if(!i)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(n);let r=i.array,a=this.data,o=i.getArrayLengthFromId(a,t);if(n=i.shapeToProperty(n,o),r)for(let s=0,c=n.length;s<c;s++)n[s]=this._readValueAtIndex(e,t,s,n[s]);else n=this._readValueAtIndex(e,t,0,n);return n=i.adjustValueScaleOffset(n),n=i.resolveEnumsToStrings(n),n=i.resolveNoData(n),n}},As=new ee.Box2,vg=class{constructor(){this._renderer=new ee.WebGLRenderer,this._target=new ee.WebGLRenderTarget(1,1),this._texTarget=new ee.WebGLRenderTarget,this._quad=new qu.FullScreenQuad(new ee.ShaderMaterial({blending:ee.CustomBlending,blendDst:ee.ZeroFactor,blendSrc:ee.OneFactor,uniforms:{map:{value:null},pixel:{value:new ee.Vector2}},vertexShader:`
|
|
3672
|
+
`,su=class extends Hl.Effect{constructor(t=1){super("ExposureEffect",ay,{blendFunction:Hl.BlendFunction.NORMAL,uniforms:new Map([["exposure",new Im.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},zm=(0,lo.forwardRef)(function({exposure:t},n){let i=(0,lo.useMemo)(()=>new su(t),[]);return i.exposure=t,(0,lo.useImperativeHandle)(n,()=>i,[i]),(0,Um.jsx)("primitive",{object:i,dispose:null})});var Sa=require("@react-three/fiber"),Vm=Gh(require("@react-three/postprocessing")),Fm=require("postprocessing"),fr=require("three"),mr=require("react"),Hm=require("react/jsx-runtime"),oy=Vm.LensFlareEffect;function jm({config:e}){let t=(0,Sa.useThree)(h=>h.camera),n=(0,Sa.useThree)(h=>h.raycaster),i=(0,Sa.useThree)(h=>h.scene),r=(0,Sa.useThree)(h=>h.viewport),a=(0,mr.useRef)(null),o=(0,mr.useRef)(new fr.Vector3),s=(0,mr.useRef)(new fr.Vector2),c=(0,mr.useMemo)(()=>new fr.Vector3(...e.lensPosition),[e.lensPosition]),l=(0,mr.useMemo)(()=>new fr.Color(e.colorGain??"#141414"),[e.colorGain]),u=(0,mr.useMemo)(()=>new fr.Vector2(0,0),[]),d=(0,mr.useMemo)(()=>new oy({blendFunction:Fm.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:c,screenRes:u,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:l,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[l,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,c,u]);return(0,mr.useEffect)(()=>(a.current=d,()=>{d.dispose(),a.current=null}),[d]),(0,mr.useEffect)(()=>{let h=d.uniforms.get("screenRes");h&&(h.value.x=r.width,h.value.y=r.height)},[d,r]),(0,Sa.useFrame)((h,f)=>{let m=a.current;if(!m)return;let x=m.uniforms.get("lensPosition"),E=m.uniforms.get("opacity");if(!x||!E)return;let w=1;if(o.current.copy(c).project(t),o.current.z>1)return;x.value.x=o.current.x,x.value.y=o.current.y,s.current.x=o.current.x,s.current.y=o.current.y,n.setFromCamera(s.current,t);let p=n.intersectObjects(i.children,!0),{object:g}=p[0]||{};g&&(g.userData?.lensflare==="no-occlusion"?w=0:g instanceof fr.Mesh&&(g.material.uniforms?._transmission?.value>.2||g.material._transmission&&g.material._transmission>.2?w=.2:g.material.transparent&&(w=g.material.opacity))),E.value=fr.MathUtils.damp(E.value,w,12,f)}),(0,Hm.jsx)("primitive",{object:d,dispose:null})}var Gl=require("@react-three/postprocessing"),Yn=require("postprocessing"),Gm=require("three");function Wm(e){return e==="linear"?Yn.ToneMappingMode.LINEAR:e==="reinhard"?Yn.ToneMappingMode.REINHARD:Yn.ToneMappingMode.ACES_FILMIC}function Wl(e){switch(e){case"verySmall":return Yn.KernelSize.VERY_SMALL;case"small":return Yn.KernelSize.SMALL;case"medium":return Yn.KernelSize.MEDIUM;case"large":return Yn.KernelSize.LARGE;case"veryLarge":return Yn.KernelSize.VERY_LARGE;case"huge":return Yn.KernelSize.HUGE}}function Xm(e){switch(e){case"constantMild":return Yn.GlitchMode.CONSTANT_MILD;case"constantWild":return Yn.GlitchMode.CONSTANT_WILD;default:return Yn.GlitchMode.SPORADIC}}function lu(e){let t=new Gm.Color(e);return[t.r,t.g,t.b,1]}function qm(e){return e==="radial"?Gl.RampType.Radial:e==="mirroredLinear"?Gl.RampType.MirroredLinear:Gl.RampType.Linear}var rt=require("react/jsx-runtime"),Ma={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new Or.Color(bi.color).getHex(),hiddenEdgeColor:new Or.Color(bi.color).multiplyScalar(.35).getHex(),kernelSize:Di.KernelSize.VERY_SMALL,blur:!1,xRay:!1};function sy(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var cu=[],ly=(0,Tn.memo)(function({sceneConfig:t,selectedObjectRef:n,highlightOnHover:i=!1,disabled:r=!1,onOutlineEffect:a}){let o=(0,ms.useThree)(S=>S.scene),s=(0,ms.useThree)(S=>S.gl),c=(0,Tn.useRef)(null),l=t?.postProcessing,u=n??null,d=l?.outline.enabled===!0,h=d||i,[f,m]=(0,Tn.useState)(()=>s.xr?.isPresenting??!1);(0,Tn.useEffect)(()=>{let S=s.xr;if(!S)return;let T=()=>m(!0),A=()=>m(!1);return S.addEventListener("sessionstart",T),S.addEventListener("sessionend",A),m(S.isPresenting),()=>{S.removeEventListener("sessionstart",T),S.removeEventListener("sessionend",A)}},[s]);let x=o.children.filter(S=>S.isLight),E=(0,Tn.useMemo)(()=>new Or.Vector2(l?.chromaticAberration.offsetX??.002,l?.chromaticAberration.offsetY??.002),[l?.chromaticAberration.offsetX,l?.chromaticAberration.offsetY]),w=(0,Tn.useMemo)(()=>new Or.Color(l?.outline.visibleEdgeColor??"#ffffff").getHex(),[l?.outline.visibleEdgeColor]),p=(0,Tn.useMemo)(()=>new Or.Color(l?.outline.hiddenEdgeColor??"#22090a").getHex(),[l?.outline.hiddenEdgeColor]),g=(0,Tn.useMemo)(()=>lu(l?.ramp.startColor??"#000000"),[l?.ramp.startColor]),_=(0,Tn.useMemo)(()=>lu(l?.ramp.endColor??"#ffffff"),[l?.ramp.endColor]);return!l||f||r?null:(0,rt.jsxs)(rt.Fragment,{children:[l.godRays.enabled===!0&&(0,rt.jsxs)("mesh",{ref:c,position:l.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,rt.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,rt.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,rt.jsxs)(Oe.EffectComposer,{multisampling:0,enableNormalPass:l.ssao.enabled===!0,autoClear:!1,children:[l.smaa.enabled===!0&&(0,rt.jsx)(Oe.SMAA,{}),l.ssao.enabled===!0&&(0,rt.jsx)(Oe.SSAO,{samples:l.ssao.samples,rings:l.ssao.rings,intensity:l.ssao.intensity,radius:l.ssao.radius,bias:l.ssao.bias,luminanceInfluence:l.ssao.luminanceInfluence,fade:l.ssao.fade,minRadiusScale:l.ssao.minRadiusScale,worldDistanceThreshold:l.ssao.worldDistanceThreshold,worldDistanceFalloff:l.ssao.worldDistanceFalloff,worldProximityThreshold:l.ssao.worldProximityThreshold,worldProximityFalloff:l.ssao.worldProximityFalloff}),l.autofocus.enabled===!0&&(0,rt.jsx)(Oe.Autofocus,{focusDistance:l.autofocus.focusDistance,focusRange:l.autofocus.focusRange,focalLength:l.autofocus.focalLength,bokehScale:l.autofocus.bokehScale,target:l.autofocus.target,mouse:l.autofocus.mouse,debug:l.autofocus.debug||void 0,manual:l.autofocus.manual,smoothTime:l.autofocus.smoothTime}),l.autofocus.enabled!==!0&&l.depthOfField.enabled===!0&&(0,rt.jsx)(Oe.DepthOfField,{focusDistance:l.depthOfField.focusDistance,focusRange:l.depthOfField.focusRange,focalLength:l.depthOfField.focalLength,bokehScale:l.depthOfField.bokehScale}),l.bloom.enabled===!0&&(0,rt.jsx)(Oe.Bloom,{intensity:l.bloom.intensity,luminanceThreshold:l.bloom.luminanceThreshold,luminanceSmoothing:l.bloom.luminanceSmoothing,mipmapBlur:l.bloom.mipmapBlur,radius:l.bloom.radius,levels:l.bloom.levels}),l.selectiveBloom.enabled===!0&&(0,rt.jsx)(Oe.SelectiveBloom,{selection:u??void 0,lights:x,selectionLayer:l.selectiveBloom.selectionLayer,intensity:l.selectiveBloom.intensity,luminanceThreshold:l.selectiveBloom.luminanceThreshold,luminanceSmoothing:l.selectiveBloom.luminanceSmoothing,kernelSize:Wl(l.selectiveBloom.kernelSize),mipmapBlur:l.selectiveBloom.mipmapBlur,inverted:l.selectiveBloom.inverted,ignoreBackground:l.selectiveBloom.ignoreBackground}),h&&(0,rt.jsx)(Oe.Outline,{ref:a,selection:cu,selectionLayer:l.outline.selectionLayer,blendFunction:Di.BlendFunction.SCREEN,edgeStrength:d?l.outline.edgeStrength:Ma.edgeStrength,pulseSpeed:d?l.outline.pulseSpeed:Ma.pulseSpeed,visibleEdgeColor:d?w:Ma.visibleEdgeColor,hiddenEdgeColor:d?p:Ma.hiddenEdgeColor,kernelSize:d?Wl(l.outline.kernelSize):Ma.kernelSize,blur:d?l.outline.blur:Ma.blur,xRay:d?l.outline.xRay:Ma.xRay}),l.chromaticAberration.enabled===!0&&(0,rt.jsx)(Oe.ChromaticAberration,{offset:E,radialModulation:l.chromaticAberration.radialModulation,modulationOffset:l.chromaticAberration.modulationOffset}),l.colorAverage.enabled===!0&&(0,rt.jsx)(Oe.ColorAverage,{}),l.dotScreen.enabled===!0&&(0,rt.jsx)(Oe.DotScreen,{angle:l.dotScreen.angle,scale:l.dotScreen.scale}),l.glitch.enabled===!0&&(0,rt.jsx)(Oe.Glitch,{mode:Xm(l.glitch.mode),delay:new Or.Vector2(l.glitch.delay[0],l.glitch.delay[1]),duration:new Or.Vector2(l.glitch.duration[0],l.glitch.duration[1]),strength:new Or.Vector2(l.glitch.strength[0],l.glitch.strength[1]),chromaticAberrationOffset:new Or.Vector2(l.glitch.chromaticAberrationOffset[0],l.glitch.chromaticAberrationOffset[1]),columns:l.glitch.columns,ratio:l.glitch.ratio,active:!0}),l.grid.enabled===!0&&(0,rt.jsx)(Oe.Grid,{scale:l.grid.scale,lineWidth:l.grid.lineWidth}),l.lensflare.enabled===!0&&(0,rt.jsx)(jm,{config:l.lensflare}),l.godRays.enabled===!0&&(0,rt.jsx)(Oe.GodRays,{sun:c,samples:l.godRays.samples,density:l.godRays.density,decay:l.godRays.decay,weight:l.godRays.weight,exposure:l.godRays.exposure,clampMax:l.godRays.clampMax,blur:l.godRays.blur,kernelSize:Wl(l.godRays.kernelSize)}),l.noise.enabled===!0&&(0,rt.jsx)(Oe.Noise,{premultiply:l.noise.premultiply,opacity:l.noise.opacity,blendFunction:Di.BlendFunction.ADD}),l.brightnessContrast.enabled===!0&&(0,rt.jsx)(Oe.BrightnessContrast,{brightness:l.brightnessContrast.brightness,contrast:l.brightnessContrast.contrast}),l.hueSaturation.enabled===!0&&(0,rt.jsx)(Oe.HueSaturation,{hue:l.hueSaturation.hue,saturation:l.hueSaturation.saturation}),l.toneMapping.enabled===!0&&(0,rt.jsx)(zm,{exposure:l.toneMapping.exposure}),l.vignette.enabled===!0&&(0,rt.jsx)(Oe.Vignette,{eskil:l.vignette.eskil,offset:l.vignette.offset,darkness:l.vignette.darkness,blendFunction:Di.BlendFunction.NORMAL}),l.toneMapping.enabled===!0&&(0,rt.jsx)(Oe.ToneMapping,{mode:Wm(l.toneMapping.mode),resolution:l.toneMapping.resolution,whitePoint:l.toneMapping.whitePoint,middleGrey:l.toneMapping.middleGrey,minLuminance:l.toneMapping.minLuminance,averageLuminance:l.toneMapping.averageLuminance,adaptationRate:l.toneMapping.adaptationRate}),l.sepia.enabled===!0&&(0,rt.jsx)(Oe.Sepia,{intensity:l.sepia.intensity,blendFunction:Di.BlendFunction.NORMAL}),l.scanline.enabled===!0&&(0,rt.jsx)(Oe.Scanline,{density:l.scanline.density,blendFunction:Di.BlendFunction.OVERLAY}),l.pixelation.enabled===!0&&(0,rt.jsx)(Oe.Pixelation,{granularity:l.pixelation.granularity}),l.ramp.enabled===!0&&(0,rt.jsx)(Oe.Ramp,{rampType:qm(l.ramp.rampType),rampStart:l.ramp.rampStart,rampEnd:l.ramp.rampEnd,startColor:g,endColor:_,opacity:l.ramp.rampMask?1:l.ramp.opacity??.5,rampBias:l.ramp.rampBias,rampGain:l.ramp.rampGain,rampMask:l.ramp.rampMask,rampInvert:l.ramp.rampInvert})]})]})});function cy(e){let t=[e];for(;t.length>0;){let n=t.pop();if(n.visible){if(n.isMesh)return!0;t.push(...n.children)}}return!1}function dy(e,t){return e.length===t.length&&e.every((n,i)=>n===t[i])}function Ym({hoveredObjectRef:e,...t}){let n=(0,ms.useThree)(c=>c.scene),i=(0,ms.useThree)(c=>c.invalidate),[r,a]=(0,Tn.useState)(null),o=(0,Tn.useCallback)(c=>a(c),[]),s=(0,Tn.useRef)({effect:null,objects:cu});return(0,Tn.useEffect)(()=>{if(!r)return;let l=t.sceneConfig?.postProcessing?.outline.enabled===!0?sy(n):e&&cy(e)?[e]:cu;s.current.effect===r&&dy(s.current.objects,l)||(s.current={effect:r,objects:l},r.selection.set(l),i())}),(0,rt.jsx)(ly,{...t,onOutlineEffect:o})}var $m=require("react"),Xl=class extends $m.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,i){this.props.onError?.(n)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};var Pn=require("react/jsx-runtime"),uy=1.5;function py({captureRef:e}){let{gl:t,scene:n,camera:i,invalidate:r}=(0,ql.useThree)();return(0,Ir.useEffect)(()=>{if(e)return e.current={gl:t,scene:n,camera:i,invalidate:r},()=>{e.current=null}},[e,t,n,i,r]),null}function du({children:e,camera:t,backgroundColor:n,shadows:i=!0,sceneConfig:r,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,renderMode:c="demand",maxDpr:l=2,xrStore:u,rendererCaptureRef:d,preserveDrawingBuffer:h=!1,reduceGpuLoad:f}){let m=f??tu(),x=m?Math.min(l,uy):l,E=i&&!m,w=(0,Ir.useMemo)(()=>n?{background:n}:r?.background.enabled?r.background.type==="color"?{background:r.background.color}:r.background.type==="image"&&r.background.imageUrl.trim()?{backgroundImage:`url("${r.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[n,r]),p=(0,Ir.useMemo)(()=>{if(n)return n;let M=r?.background;if(M?.enabled){if(M.type==="color")return M.color;if(M.type==="image"&&M.imageUrl.trim()||M.type==="environment")return null}return"#1c1c1d"},[n,r]),g=(0,Ir.useMemo)(()=>{let M=r?.postProcessing;return M?!!(M.glitch.enabled||M.noise.enabled||M.lensflare.enabled&&M.lensflare.animated):!1},[r?.postProcessing]),[_,S]=(0,Ir.useState)(!1),T=r?.environment,A=r?.groundShadows,b=(0,Ir.useMemo)(()=>{if(!T)return null;if(T.source==="custom"){let M=T.customEnvironmentUrl.trim();return Ul(M)?{files:M}:null}return{preset:T.preset}},[T]),y=(0,Pn.jsxs)(Pn.Fragment,{children:[(0,Pn.jsx)(py,{captureRef:d}),(0,Pn.jsx)(Am,{cameraConfig:t}),(0,Pn.jsx)(Cm,{active:g}),(0,Pn.jsx)(Tm,{color:p}),b?(0,Pn.jsx)(Xl,{onError:M=>console.warn("Failed to load environment map:",M),children:(0,Pn.jsx)(Ir.Suspense,{fallback:null,children:(0,Pn.jsx)(Yl.Environment,{...b,environmentIntensity:T?.intensity??.25,backgroundIntensity:T?.intensity??.25,background:r?.background.enabled===!0&&r.background.type==="environment"})})}):null,(0,Pn.jsx)(Pm,{rotation:T?.rotation??0}),u&&(0,Pn.jsx)(Mm,{onPresentingChange:S}),A?.enabled&&A.mode==="shadowCatcher"&&!_&&(0,Pn.jsx)(Yl.ContactShadows,{position:[0,A.height,0],scale:A.size,opacity:A.intensity,blur:A.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,Pn.jsx)(Ym,{sceneConfig:r,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,disabled:m})]});return(0,Pn.jsx)(ql.Canvas,{frameloop:c,dpr:[1,x],shadows:E?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:w,camera:t??{fov:50},gl:{preserveDrawingBuffer:h,toneMapping:Zm.NoToneMapping,toneMappingExposure:1},children:u?(0,Pn.jsxs)(Km.XR,{store:u,children:[(0,Pn.jsx)(Sm,{renderMode:c}),y]}):y})}var $l=require("@react-three/drei"),fs=require("three"),Ni=require("react"),uu=require("react/jsx-runtime"),Bi={minDistance:0,maxDistance:1/0,minPolarAngle:0,maxPolarAngle:Math.PI,minAzimuthAngle:-1/0,maxAzimuthAngle:1/0,boundaryEnclosesCamera:!1,boundaryFriction:0};function pu({controlsRef:e,onCameraChange:t,cameraLimits:n,controllerType:i="orbit",onPointerLockExit:r}){let a=i==="orbit",o=(0,Ni.useRef)(null);return(0,Ni.useEffect)(()=>{if(!a)return o.current?.lock(),()=>{o.current?.unlock()}},[a]),(0,Ni.useEffect)(()=>{a&&document.pointerLockElement&&document.exitPointerLock()},[a]),(0,Ni.useEffect)(()=>{if(a)return;let s=()=>{document.pointerLockElement||r?.()};return document.addEventListener("pointerlockchange",s),()=>{document.removeEventListener("pointerlockchange",s)}},[a,r]),(0,Ni.useEffect)(()=>{if(!a||!t||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let c=()=>{t(s.camera,s)};return s.addEventListener("update",c),()=>{s.removeEventListener("update",c)}},[a,e,t]),(0,Ni.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let s=e.current;s&&(s.minDistance=n?.minDistance??Bi.minDistance,s.maxDistance=n?.maxDistance??Bi.maxDistance,s.minPolarAngle=n?.minPolarAngle??Bi.minPolarAngle,s.maxPolarAngle=n?.maxPolarAngle??Bi.maxPolarAngle,s.minAzimuthAngle=n?.minAzimuthAngle??Bi.minAzimuthAngle,s.maxAzimuthAngle=n?.maxAzimuthAngle??Bi.maxAzimuthAngle,s.boundaryEnclosesCamera=n?.boundaryEnclosesCamera??Bi.boundaryEnclosesCamera,s.boundaryFriction=n?.boundaryFriction??Bi.boundaryFriction,s.setBoundary(n?.panBoundary?new fs.Box3(new fs.Vector3(...n.panBoundary[0]),new fs.Vector3(...n.panBoundary[1])):void 0))},[a,e,n?.minDistance,n?.maxDistance,n?.minPolarAngle,n?.maxPolarAngle,n?.minAzimuthAngle,n?.maxAzimuthAngle,n?.boundaryEnclosesCamera,n?.boundaryFriction,n?.panBoundary]),a?(0,uu.jsx)($l.CameraControls,{ref:e,makeDefault:!0,smoothTime:.3,dollyToCursor:!0}):(0,uu.jsx)($l.PointerLockControls,{ref:o,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}var Ur=require("react"),bs=require("@react-three/fiber"),Qm=require("three");function Nn(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 hu=Symbol("react-immersive.model-node-id");function hy(e,t){Object.defineProperty(e,hu,{value:t,configurable:!0})}function co(e){let t=new Map;e.traverse(c=>{if(!c.name)return;let l=t.get(c.name);l?l.push(c):t.set(c.name,[c])});let n=Object.create(null),i=new WeakMap,r=new Map,a=new Set(Array.from(t,([c,l])=>l.length===1?c:null).filter(c=>c!==null)),o=new Set,s=(c,l)=>{hy(c,l),n[l]=c,i.set(c,l),o.add(l)};for(let[c,l]of t)l.length===1&&s(l[0],c);for(let[c,l]of t){if(l.length<2)continue;let u=[];l.forEach((d,h)=>{let f=`${c} [${h+1}]`,m=f,x=2;for(;a.has(m)||o.has(m);)m=`${f}.${x++}`;s(d,m),u.push(m)}),r.set(c,u)}return{nodesById:n,idByNode:i,duplicateNames:r}}function gs(e){return e[hu]??e.name??null}function zr(e,t){let n=null,i=[];return e.traverse(r=>{r[hu]===t&&(n=r),r.name===t&&i.push(r)}),n??(i.length===1?i[0]:null)}var gr=require("react/jsx-runtime");function ef(e,t){if(!t)return e;let n=t*Math.PI/180,i=Math.cos(n),r=Math.sin(n);return[e[0]*i+e[2]*r,e[1],-e[0]*r+e[2]*i]}function my(e,t){let[n,i,r]=e.center,a=e.radius,o=Math.hypot(t[0],t[1],t[2]),s=o>1e-6?[t[0]/o,t[1]/o,t[2]/o]:[0,1,0],c=a*2;return{position:[n+s[0]*c,i+s[1]*c,r+s[2]*c],target:e.center,extent:a,near:Math.max(a/100,.001),far:c+a*2}}function fy(e,t){let n=t[0]-e.center[0],i=t[1]-e.center[1],r=t[2]-e.center[2],a=Math.hypot(n,i,r);return{near:Math.max(a-e.radius,a*.01,.001),far:a+e.radius*2}}function gy(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var by={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}]},vy={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function Jm({light:e,shadows:t,shadowsEnabled:n,environmentRotation:i,modelBounds:r,objectBindings:a,nodeRefs:o}){let s=(0,Ur.useRef)(null),c=(0,Ur.useRef)(null),l=(0,Ur.useRef)(null),u=(0,bs.useThree)(w=>w.camera),d=(0,bs.useThree)(w=>w.scene),h=(0,Ur.useMemo)(()=>new Qm.Vector3,[]),f=(0,Ur.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:ef(e.position,i),[e.position,e.attachedToCamera,e.attachment,i]);(0,bs.useFrame)(()=>{let w=s.current??c.current??l.current;if(!w)return;if(e.attachedToCamera){w.position.copy(u.position);return}let p=e.attachment;if(!p)return;let g=a?Nn(a,p.objectId):null,S=(g?a?.[g]:void 0)?.modelObjectId??p.objectId,T=(g?o?.current[g]:void 0)??zr(d,S);T&&(h.fromArray(p.offset),T.localToWorld(h),w.position.copy(h))});let m=n&&t.enabled&&e.castShadow,x=(0,Ur.useMemo)(()=>e.type==="directional"&&m&&r&&!e.attachedToCamera?my(r,f):null,[e.type,e.attachedToCamera,m,r,f]),E=(0,Ur.useMemo)(()=>e.type==="spot"&&m&&r&&!e.attachedToCamera?fy(r,f):null,[e.type,e.attachedToCamera,m,r,f]);return(0,Ur.useEffect)(()=>{let w=s.current??l.current;if(!w)return;let[p,g,_]=gy(e,m,r);w.target.position.set(p,g,_),w.target.updateMatrixWorld()},[e,m,r]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,gr.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:x?.position??f,castShadow:m,"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":x?.near??.5,"shadow-camera-far":x?.far??40,"shadow-camera-left":-(x?.extent??8),"shadow-camera-right":x?.extent??8,"shadow-camera-top":x?.extent??8,"shadow-camera-bottom":-(x?.extent??8)}):e.type==="point"?(0,gr.jsx)("pointLight",{ref:c,color:e.color,intensity:e.intensity,position:f,distance:e.distance,decay:e.decay,castShadow:m,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,gr.jsx)("spotLight",{ref:l,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:m,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":E?.near??.5,"shadow-camera-far":E?.far??40}):e.type==="hemisphere"?(0,gr.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function mu({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:i=0,environmentConfig:r,modelBounds:a,objectBindings:o,nodeRefs:s}){let c=e??by,l=t??vy,u=r?.shadowLight,d=ef([5,10,5],i);return(0,gr.jsxs)(gr.Fragment,{children:[(0,gr.jsx)("ambientLight",{intensity:c.ambient.intensity,color:c.ambient.color}),c.lights.map(h=>(0,gr.jsx)(Jm,{light:h,shadows:l,shadowsEnabled:n,environmentRotation:i,modelBounds:a,objectBindings:o,nodeRefs:s},h.id)),u?.enabled&&(0,gr.jsx)(Jm,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:u.intensity,position:d,attachedToCamera:!1,castShadow:!0,shadowBias:u.bias,visible:!0},shadows:l,shadowsEnabled:n,environmentRotation:0,modelBounds:a,objectBindings:o,nodeRefs:s})]})}var be=require("react"),vo=require("@react-three/fiber");var ws=require("@react-three/fiber"),ho=require("three"),Oi=require("three-stdlib"),yf=require("three/examples/jsm/loaders/USDLoader.js");var uo=require("fflate");var tf;function nf(e){tf=e}function vs(e){tf?.(e)}var xy=[".glb",".gltf",".obj",".fbx",".usdz",".zip"],yy=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],xs=1024*1024,rf=128*xs,af=1024,of=128*xs,sf=256*xs,lf=200,wy=xs,vi=new Map,Kl=".glb,.gltf,.obj,.fbx,.usdz,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function gu(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 pf(e){return vi.get(e)??{format:gu(e)}}function _y(e){let t=e.name.toLowerCase();return xy.some(n=>t.endsWith(n))||yy.includes(e.type)}async function ys(e){if(!_y(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 cf(e,"usdz");if(t.endsWith(".zip")||Sy(e.type))return My(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return df(e);let n=gu(e.name);return n==="gltf"?df(e):cf(e,n)}function cf(e,t){let n=URL.createObjectURL(e);return vi.set(n,{format:t,entryPath:e.name}),{url:n,name:e.name,format:t,cleanup:()=>{vs(n),vi.delete(n),URL.revokeObjectURL(n)}}}function Sy(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function df(e){let t=await e.text(),n=hf(t,e.name);for(let r of mf(n))if(!bu(r))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let i=URL.createObjectURL(e);return vi.set(i,{format:"gltf",entryPath:e.name}),{url:i,name:e.name,format:"gltf",cleanup:()=>{vs(i),vi.delete(i),URL.revokeObjectURL(i)}}}async function My(e){if(e.size>rf)throw new Error(`Model zip is too large. The compressed archive must be ${fu(rf)} or smaller.`);let t=await Cy(new Uint8Array(await e.arrayBuffer())),n=new Map;for(let[o,s]of Object.entries(t)){let c=vu(o);!c||ff(c)||n.set(c,s)}let i=[...n.keys()].filter(o=>/\.(gltf|obj|fbx)$/i.test(o));if(i.length===0)throw new Error("Invalid model zip: no .gltf, .obj, or .fbx file found.");if(i.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let r=i[0],a=gu(r);if(a==="gltf")return Py(e,r,n);if(a==="obj"||a==="fbx")return Ty(e,r,a,n);throw new Error(`Unsupported model entry ${r}.`)}function Cy(e){return new Promise((t,n)=>{let i=0,r=0,a=null,o=c=>(a??(a=new Error(`Invalid model zip: ${c}`)),!1);(0,uo.unzip)(e,{filter:c=>{if(a)return!1;if(i+=1,i>af)return o(`archive contains more than ${af.toLocaleString()} entries.`);if(c.originalSize>of)return o(`${c.name} expands beyond the ${fu(of)} per-file limit.`);if(r+=c.originalSize,r>sf)return o(`expanded contents exceed ${fu(sf)}.`);if(c.originalSize>=wy&&(c.size===0||c.originalSize/c.size>lf))return o(`${c.name} exceeds the ${lf}:1 compression-ratio limit.`);let l=vu(c.name);return!!l&&!ff(l)}},(c,l)=>{a?n(a):c?n(new Error(`Invalid model zip: ${c.message}`)):t(l)})})}function fu(e){return`${e/xs} MiB`}function Ty(e,t,n,i){let r=[],a={};for(let[s,c]of i){let l=URL.createObjectURL(new Blob([c],{type:gf(s)}));r.push(l),a[s]=l}let o=a[t];if(!o)throw r.forEach(s=>URL.revokeObjectURL(s)),new Error(`Invalid model zip: could not read ${t}.`);return vi.set(o,{format:n,entryPath:t,resourceUrls:a}),{url:o,name:e.name,format:n,cleanup:()=>{vs(o),vi.delete(o),r.forEach(s=>URL.revokeObjectURL(s))}}}function Py(e,t,n){let i=n.get(t);if(!i)throw new Error("Invalid GLTF zip: no .gltf found.");let r=hf((0,uo.strFromU8)(i),t);Ay(r,t);let a=Ey(t),o=[];try{uf(r.buffers,a,n,o),uf(r.images,a,n,o);let s=new Blob([(0,uo.strToU8)(JSON.stringify(r))],{type:"model/gltf+json"}),c=URL.createObjectURL(s);return o.push(c),vi.set(c,{format:"gltf",entryPath:t}),{url:c,name:e.name,format:"gltf",cleanup:()=>{vs(c),vi.delete(c),o.forEach(l=>URL.revokeObjectURL(l))}}}catch(s){throw o.forEach(c=>URL.revokeObjectURL(c)),s}}function uf(e,t,n,i){for(let r of e??[]){if(typeof r.uri!="string"||bu(r.uri))continue;let a=Ry(t,r.uri),o=n.get(a);if(!o)throw new Error(`Invalid GLTF zip: missing referenced asset ${r.uri}.`);let s=URL.createObjectURL(new Blob([o],{type:gf(a)}));i.push(s),r.uri=s}}function hf(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function mf(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function Ay(e,t){for(let n of mf(e)){if(bu(n))continue;let i=/^[a-z][a-z0-9+.-]*:/i.test(n),r=n.startsWith("/")||n.startsWith("\\");if(i||r)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function bu(e){return e.startsWith("data:")}function vu(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!==".")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function ff(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(n=>n===".DS_Store"||n.startsWith("._"))}function Ey(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function Ry(e,t){let n=t.split(/[?#]/)[0],i=ky(n);return vu(e?`${e}/${i}`:i)}function ky(e){try{return decodeURI(e)}catch{return e}}function gf(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 Ly=require("@react-three/drei"),Dy=require("@react-three/fiber"),By=require("react"),bf=require("three"),po=require("three-stdlib");function Ny(e){return{name:"RI_unlit_emissive_texture",async afterRoot(t){let n=e.json.materials??[],i=new Map;if(n.forEach(a=>{let o=!!a?.extensions?.KHR_materials_unlit,s=!!a?.pbrMetallicRoughness?.baseColorTexture;o&&!s&&a?.emissiveTexture&&a.name&&i.set(a.name,a.emissiveTexture.index)}),i.size===0||!t.scene)return;let r=new Map;await Promise.all([...i].map(async([a,o])=>{let s=await e.getDependency("texture",o);s&&(s.colorSpace=bf.SRGBColorSpace,r.set(a,s))})),t.scene.traverse(a=>{let o=Array.isArray(a.material)?a.material:a.material?[a.material]:[];for(let s of o){let c=s.name?r.get(s.name):void 0;c&&!s.map&&(s.map=c,s.needsUpdate=!0)}})}}}var xu="https://assets.react-immersive.liveroom.dev/three-r184/draco/",yu="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function vf(e,t={},n){let{dracoDecoderPath:i=xu,ktx2TranscoderPath:r=yu,meshopt:a=!0}=t;if(i){let o=new po.DRACOLoader;o.setDecoderPath(i),e.setDRACOLoader(o)}if(a&&e.setMeshoptDecoder(po.MeshoptDecoder),r&&n){let o=new po.KTX2Loader().setTranscoderPath(r).detectSupport(n);e.setKTX2Loader(o)}e.register((o=>Ny(o)))}var Zl=class extends ho.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,i,r,a){this.loadAsset(n,r).then(i).catch(a)}async loadAsset(n,i){let r=Iy(this.options.source),{format:a}=this.options.source;if(a==="obj")return Oy(n,r,this.options.source,i);if(a==="fbx"){let c=wu(this,new Oi.FBXLoader(r)),l=Vy(n,this.options.source);l&&c.setResourcePath(l);let u=await c.loadAsync(n,i);return _u(u,"FBXMesh",!1),{scene:u,animations:u.animations??[]}}if(a==="usdz"){let l=await wu(this,new yf.USDLoader(r)).loadAsync(n,i);return _u(l,"USDZMesh",!1),{scene:l,animations:l.animations??[]}}let o=wu(this,new Oi.GLTFLoader(r));vf(o,this.options.decoderConfig,this.options.renderer);let s=await o.loadAsync(n,i);return{scene:s.scene,animations:s.animations??[]}}};nf(e=>{ws.useLoader.clear(Zl,e)});function ec(e,t={},n,i){let r=(0,ws.useThree)(s=>s.gl),a=pf(e),o=n?{...a,format:n}:a;return(0,ws.useLoader)(Zl,e,s=>{s.configure({source:o,decoderConfig:t,renderer:r})},i)}async function Oy(e,t,n,i){let r=await xf(e,t,i),a=new Oi.OBJLoader(t),o=zy(r);if(o){let c=Uy(o,e,n);if(c)try{let l=await xf(c.url,t),d=new Oi.MTLLoader(t).parse(l,c.basePath);d.preload(),a.setMaterials(d)}catch(l){console.warn(`[react-immersive] Could not load OBJ material ${o}; rendering geometry with fallback materials.`,l)}}let s=a.parse(r);return _u(s,"OBJMesh",!0),{scene:s,animations:[]}}function _u(e,t,n){let i=new Set,r=0;e.traverse(a=>{if(!("isMesh"in a&&a.isMesh===!0)){a.name&&i.add(a.name);return}let s=a.name||`${t}_${++r}`;if(!n&&a.name){i.add(a.name);return}let c=s,l=2;for(;i.has(c);)c=`${s}_${l++}`;a.name=c,i.add(c)})}function xf(e,t,n){let i=new ho.FileLoader(t);return i.setResponseType("text"),i.loadAsync(e,n)}function wu(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function Iy(e){let t=new ho.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(i=>{if(/^(?:blob:|data:)/i.test(i))return i;let r=Ql(_f(i).split(/[?#]/)[0]),a=n[r];if(a)return a;let o=Jl(e.entryPath??""),s=Ql(o?`${o}/${r}`:r);return n[s]??i}),t}function zy(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function Uy(e,t,n){if(n.resourceUrls&&n.entryPath){let i=Ql(`${Jl(n.entryPath)}/${_f(e)}`),r=n.resourceUrls[i];if(!r)return null;let a=Jl(i);return{url:r,basePath:a?`${a}/`:""}}try{let i=new URL(e,t).href;return{url:i,basePath:wf(i)}}catch{return null}}function Vy(e,t){if(t.resourceUrls&&t.entryPath){let n=Jl(t.entryPath);return n?`${n}/`:""}return wf(e)}function wf(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function Jl(e){let t=Ql(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function Ql(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!=="."))n===".."?t.pop():t.push(n);return t.join("/")}function _f(e){try{return decodeURI(e)}catch{return e}}var qe=require("three"),Lf=require("three-stdlib");function Sf(e){let t=new Map;return e.map((n,i)=>{let a=n.name.trim()||`Animation ${i+1}`,o=t.get(a)??0;return t.set(a,o+1),{clip:n,sourceName:o===0?a:`${a} (${o+1})`,duration:n.duration}})}var jn=require("three");function Mf(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function Cf(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function br(e){return!!(e&&"isMesh"in e&&e.isMesh)}var _s=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],Fy=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function Ca(e){return Fy.has(e)?jn.SRGBColorSpace:jn.NoColorSpace}function $t(e,t){return e?.[t]?.path}function Tf(e){return e==="back"?jn.BackSide:e==="double"?jn.DoubleSide:jn.FrontSide}function Pf(e){return e==="additive"?jn.AdditiveBlending:jn.NormalBlending}function xi(e,t=1,n=t){if(e&&typeof e=="object"){let i=e;if(typeof i.x=="number"&&Number.isFinite(i.x)&&typeof i.y=="number"&&Number.isFinite(i.y))return new jn.Vector2(i.x,i.y)}return new jn.Vector2(t,n)}function Su(e){return Number.isFinite(e)&&e>0?e:1}function tc(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function Af(e){return e?.loopMode??"repeat"}var vr=require("three");function mo(e){if(Mf(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new vr.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 vr.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof vr.Color&&n.emissive.copy(t.color)):(t.color instanceof vr.Color&&n.color.copy(t.color),t.map instanceof vr.Texture&&(n.map=t.map),t.emissive instanceof vr.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof vr.Texture&&(n.emissiveMap=t.emissiveMap));let r=["aoMap","aoMapIntensity","lightMap","lightMapIntensity","alphaMap","opacity","transparent","alphaTest","side","vertexColors","wireframe","depthTest","depthWrite","visible","toneMapped","fog"];for(let a of r)t[a]!==void 0&&(n[a]=t[a]);return n.needsUpdate=!0,n}function nc(e){if(Cf(e))return e.clone();let t=new vr.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(xi(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 rc(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=xi(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=xi(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 $n=require("three");function ic(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 $n.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??$n.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??$n.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(xi(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(xi(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new $n.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 $n.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 $n.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let i=$t(t,"texture"),r=$t(t,"metalnessMap"),a=$t(t,"roughnessMap"),o=$t(t,"emissiveMap"),s=$t(t,"alphaMap"),c=$t(t,"normalMap"),l=$t(t,"bumpMap"),u=$t(t,"aoMap"),d=$t(t,"displacementMap"),h=$t(t,"clearcoatMap"),f=$t(t,"clearcoatRoughnessMap"),m=$t(t,"clearcoatNormalMap"),x=$t(t,"anisotropyMap"),E=$t(t,"transmissionMap"),w=$t(t,"thicknessMap"),p=$t(t,"sheenColorMap"),g=$t(t,"sheenRoughnessMap"),_=$t(t,"specularIntensityMap"),S=$t(t,"specularColorMap");if(i?(e.map=pn(i,$n.SRGBColorSpace),e.color.set(n??"#ffffff")):n&&(e.map=null,e.color.set(n)),r&&(e.metalnessMap=pn(r)),t?.metalness!==void 0&&(e.metalness=t.metalness),a&&(e.roughnessMap=pn(a)),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):o&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),o&&(e.emissiveMap=pn(o,$n.SRGBColorSpace)),t?.opacity!==void 0&&(e.opacity=t.opacity),s&&(e.alphaMap=pn(s)),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=Pf(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=Tf(t.side)),c&&(e.normalMap=pn(c)),c||t?.normalScale!==void 0){let T=t?.normalScale??Math.abs(xi(e.userData.baseNormalScale).x);e.normalScale.set(T,t?.flipNormalY?-T:T)}if(l&&(e.bumpMap=pn(l)),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),u&&(e.aoMap=pn(u)),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),d&&(e.displacementMap=pn(d)),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),h&&(e.clearcoatMap=pn(h)),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),f&&(e.clearcoatRoughnessMap=pn(f)),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),m&&(e.clearcoatNormalMap=pn(m)),m||t?.clearcoatNormalScale!==void 0){let T=t?.clearcoatNormalScale??Math.abs(xi(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(T,t?.flipClearcoatNormalY?-T:T)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),p&&(e.sheenColorMap=pn(p,$n.SRGBColorSpace)),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),g&&(e.sheenRoughnessMap=pn(g)),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),x&&(e.anisotropyMap=pn(x)),t?.transmission!==void 0&&(e.transmission=t.transmission),E&&(e.transmissionMap=pn(E)),t?.thickness!==void 0&&(e.thickness=t.thickness),w&&(e.thicknessMap=pn(w)),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=pn(_)),t?.specularColor&&e.specularColor.set(t.specularColor),S&&(e.specularColorMap=pn(S,$n.SRGBColorSpace)),e.transparent=e.opacity<1||e.transmission>0||e.blending!==$n.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function Ss(e){return e.material}function Jr(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function xr(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function ac(e,t){return Array.isArray(e)?e[t]:e}function Ms(e){e.updateMatrixWorld(!0),e.traverse(t=>{let n=t;n.isSkinnedMesh&&(n.skeleton?.update(),n.computeBoundingBox?.(),n.computeBoundingSphere?.())})}var Ef=require("three");function jy(e){return e.isSkinnedMesh===!0}function fo(e){let t=[];return e.traverse(n=>{jy(n)&&t.push(n)}),t}var Cs="reactImmersiveSkinFreeze";function Rf(e){return!!e.userData[Cs]}function oc(e,t){let n=e.userData,i=new Ef.Matrix4().copy(t).invert(),r=n[Cs];if(r){r.frozenInverse.copy(i),e.bindMatrixInverse.copy(i);return}let a={frozenInverse:i,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(i),e.onBeforeRender=function(o,s,c,l,u,d){a.previousOnBeforeRender.call(this,o,s,c,l,u,d),e.bindMatrixInverse.copy(a.frozenInverse)},n[Cs]=a}function go(e){let t=e.userData,n=t[Cs];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[Cs],e.updateMatrixWorld(!0))}var Ta=require("react"),kf=require("@react-three/fiber");function sc(){let e=(0,kf.useThree)(r=>r.gl.domElement),t=(0,Ta.useRef)(void 0),n=(0,Ta.useCallback)(r=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=r},[e]),i=(0,Ta.useCallback)(()=>{let r=t.current;r!==void 0&&(e.style.cursor=r,t.current=void 0)},[e]);return(0,Ta.useEffect)(()=>()=>{i()},[i]),{setCanvasCursor:n,restoreCanvasCursor:i}}var Mu=require("react/jsx-runtime");function lc(e,t,n){let i=n.get(e);i&&(t?.position?e.position.fromArray(t.position):e.position.copy(i.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],i.rotation.order):e.rotation.copy(i.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(i.scale),e.updateMatrix())}function xn(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 bo(e){let t=e,n=Number(t.clearcoat)>0,i=Number(t.sheen)>0,r=Number(t.anisotropy)>0,a=Number(t.transmission)>0,o=t.transparent===!1&&t.blending===qe.NormalBlending&&t.alphaToCoverage!==!0;return[xn(t.map),xn(t.aoMap),xn(t.lightMap),xn(t.bumpMap),xn(t.normalMap,!0),t.normalMap?t.normalMapType:"",xn(t.displacementMap),xn(t.emissiveMap),xn(t.metalnessMap),xn(t.roughnessMap),r,xn(r?t.anisotropyMap:null),n,xn(n?t.clearcoatMap:null),xn(n?t.clearcoatNormalMap:null,!0),xn(n?t.clearcoatRoughnessMap:null),i,xn(i?t.sheenColorMap:null),xn(i?t.sheenRoughnessMap:null),xn(t.specularColorMap),xn(t.specularIntensityMap),a,xn(a?t.transmissionMap:null),xn(a?t.thicknessMap:null),xn(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,t.side,o].join("|")}function Cu({url:e,objectBindings:t,selectedItem:n,itemMaterials:i,onItemClick:r,onItemHover:a,onModelLoaded:o,onAnimationsReady:s,nodeRefsOut:c,onNodeRefsChange:l,materialRefsOut:u,panelHoveredItem:d,sceneConfig:h,zoomOnSelected:f=!0,highlightOnHover:m=!0,decoderConfig:x,modelFormat:E,onLoadProgress:w,explodeFactor:p=0,suspendBindingTransforms:g=!1}){let _=ec(e,x,E,w),S=(0,vo.useThree)(H=>H.invalidate),[T,A]=(0,be.useState)(null),b=(0,be.useRef)(null),{setCanvasCursor:y,restoreCanvasCursor:M}=sc();(0,be.useEffect)(()=>{m||(A(null),a?.(null),M())},[m,a,M]);let C=(0,be.useMemo)(()=>Lf.SkeletonUtils.clone(_.scene),[_.scene]),N=(0,be.useMemo)(()=>co(C),[C]),L=N.nodesById;(0,be.useEffect)(()=>{N.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(N.duplicateNames))},[N]);let F=(0,be.useMemo)(()=>{let H=new WeakMap;return C.traverse(k=>{H.set(k,{position:k.position.clone(),rotation:k.rotation.clone(),scale:k.scale.clone()})}),H},[C]);(0,be.useEffect)(()=>{let H=!1,k=null,Y=null,oe=window,ee=Object.entries(L).filter(([,en])=>br(en)),te=new qe.Box3,he=[],gt=0;C.traverse(en=>{br(en)&&(en.castShadow=!1,en.receiveShadow=!0)});let ot=()=>{if(H)return;let en=new Set,_e=te.getSize(new qe.Vector3),Yt=new qe.Vector3;for(let{name:ke,box:gn}of he)gn.getSize(Yt),Yt.x>_e.x*.7&&Yt.z>_e.z*.7&&Yt.y>_e.y*.4&&en.add(ke);C.traverse(ke=>{if(!br(ke))return;let gn=gs(ke);ke.castShadow=!gn||!en.has(gn),ke.receiveShadow=!0}),S()},Mt=()=>{H||(oe.requestIdleCallback?k=oe.requestIdleCallback(Re,{timeout:100}):Y=window.setTimeout(()=>Re(),0))},Re=en=>{if(k=null,Y=null,H)return;let _e=performance.now(),Yt=0;for(;gt<ee.length&&!(Yt>0&&!(en?en.didTimeout?Yt<16:en.timeRemaining()>1:performance.now()-_e<8));){let[ke,gn]=ee[gt];gt+=1,Yt+=1;let dr=new qe.Box3().setFromObject(gn);dr.isEmpty()||(he.push({name:ke,box:dr}),te.union(dr))}gt<ee.length?Mt():ot()};return Mt(),()=>{H=!0,k!==null&&oe.cancelIdleCallback?.(k),Y!==null&&window.clearTimeout(Y)}},[S,L,C]),(0,be.useEffect)(()=>{Ms(C)},[C]),(0,be.useEffect)(()=>{let H=new AbortController;return io(C,H.signal),()=>{H.abort(),ya(C)}},[C]);let V=(0,be.useMemo)(()=>{let H={};for(let[k,Y]of Object.entries(t))H[Y.modelObjectId??k]=k;return H},[t]),D=(0,be.useMemo)(()=>Object.entries(t).map(([H,k])=>`${H}${k.modelObjectId??H}`).sort().join(""),[t]),q=(0,be.useMemo)(()=>Object.entries(t).map(([H,k])=>JSON.stringify([H,k.modelObjectId??H,k.transform??null])).sort().join(""),[t]),P=(0,be.useRef)(new Map);(0,be.useEffect)(()=>{let H=new Map,k=new Map;for(let[ee,te]of Object.entries(t)){if(!te.transform)continue;let he=L[te.modelObjectId??ee];he&&(H.set(he,te.transform),k.set(he,fo(he)))}let Y=new Set([...P.current.keys(),...H.keys()]);for(let ee of Y){lc(ee,void 0,F);for(let te of fo(ee))go(te)}C.updateMatrixWorld(!0);let oe=new Map;for(let ee of k.values())for(let te of ee)oe.has(te)||oe.set(te,te.matrixWorld.clone());for(let[ee,te]of H)lc(ee,te,F);P.current=H,C.updateMatrixWorld(!0);for(let[ee,te]of oe)oc(ee,te);S()},[C,L,F,q,S]),(0,be.useEffect)(()=>()=>{for(let H of fo(C))go(H)},[C]);let B=(0,be.useMemo)(()=>{let H={};for(let[k,Y]of Object.entries(t)){let oe=Y.modelObjectId??k,ee=L[oe];if(!br(ee))continue;let te=Ss(ee);te&&(H[k]=Jr(te,he=>{let gt=mo(he),ot=nc(gt??new qe.MeshStandardMaterial);return rc(ot),ot}))}return H},[L,D]);(0,be.useEffect)(()=>{u&&(u.current=B)},[B,u]),(0,be.useEffect)(()=>()=>{for(let H of Object.values(B))xr(H,k=>k.dispose())},[B]);let W=h?.model.shading??"lit",$=h?.model.renderer??"pbr",pe=h?.wireframe.enabled??!1,Ne=h?.wireframe.color??"#93c5fd",xe=h?.wireframe.opacity??1,Ie=(0,be.useMemo)(()=>{let H={};if(W!=="unlit")return H;for(let[k,Y]of Object.entries(B))H[k]=Jr(Y,oe=>{let ee=new qe.MeshBasicMaterial;return ee.color.copy(oe.color),ee.map=oe.map,ee.alphaMap=oe.alphaMap,ee.alphaTest=oe.alphaTest,ee.transparent=oe.transparent,ee.opacity=oe.opacity,ee.side=oe.side,ee});return H},[B,W]),Ae=(0,be.useMemo)(()=>{let H={};if(W!=="normals")return H;for(let[k,Y]of Object.entries(B))H[k]=Jr(Y,()=>new qe.MeshNormalMaterial);return H},[B,W]),ze=(0,be.useMemo)(()=>{let H={};if(W!=="lit"||$!=="matcap")return H;let k=jl();for(let[Y,oe]of Object.entries(B))H[Y]=Jr(oe,ee=>{let te=new qe.MeshMatcapMaterial;return te.matcap=k,te.color.copy(ee.color),te.alphaMap=ee.alphaMap,te.alphaTest=ee.alphaTest,te.side=ee.side,te});return H},[B,W,$]);(0,be.useEffect)(()=>()=>{for(let H of Object.values(Ie))xr(H,k=>k.dispose());for(let H of Object.values(Ae))xr(H,k=>k.dispose());for(let H of Object.values(ze))xr(H,k=>k.dispose())},[Ie,Ae,ze]);let Rt=H=>W==="normals"?Ae[H]:W==="unlit"?Ie[H]:$==="matcap"?ze[H]:B[H],Xt=(0,be.useRef)(o);Xt.current=o,(0,be.useEffect)(()=>{Xt.current?.(C)},[C]);let tt=(0,be.useMemo)(()=>{let H={};for(let[k,Y]of Object.entries(t)){let oe=Y.modelObjectId??k,ee=L[oe];ee&&(H[k]=ee)}return H},[L,D]);(0,be.useEffect)(()=>(c.current=tt,l?.(),()=>{c.current===tt&&(c.current={})}),[tt,c,l]);let we=(0,be.useRef)({});(0,be.useEffect)(()=>()=>{for(let H of Object.values(we.current))for(let[k,Y]of Object.entries(H))Y&&_a(Y,Ca(k));we.current={}},[]);let se=(0,be.useMemo)(()=>{let H=new Map;for(let[k,Y]of Object.entries(t)){let oe=d===Y||d?.id===Y.id||d?.modelObjectId===Y.modelObjectId,ee=m&&(T===k||oe),te=ee||n===k;(ee||te)&&H.set(k,{emissive:ee,matcap:te})}return H},[t,m,T,n,d]),Ft=(0,be.useRef)(se);Ft.current=se,(0,be.useEffect)(()=>{let H=new Set;for(let[k,Y]of Object.entries(t)){H.add(k);let oe=Y.modelObjectId??k,ee=L[oe];if(!br(ee))continue;ee.visible=Y.visible!==!1;let te=B[k];if(!te)continue;if($!=="uv-checker"){let _e=Rt(k);_e&&(ee.material=_e)}if(Y.visible===!1)continue;let he=Ie[k],gt=ze[k],ot=i[k]??i[Y.modelObjectId??k],Mt=Y.style?.material,Re=we.current[k]??{};for(let _e of _s){let Yt=$t(Mt,_e),ke=Re[_e];if(ke===Yt)continue;let gn=Ca(_e);ke&&_a(ke,gn),Yt?(Fl(Yt,gn,S),Re[_e]=Yt):delete Re[_e]}Object.keys(Re).length>0?we.current[k]=Re:delete we.current[k];let en=ot?.hex??Mt?.baseColor;xr(te,(_e,Yt)=>{let ke=bo(_e);ic(_e,Mt,en);let gn=_e.userData.reactImmersiveConfiguredEmissive;gn?.isColor?gn.copy(_e.emissive):_e.userData.reactImmersiveConfiguredEmissive=_e.emissive.clone();let dr=Ft.current.get(k);dr?.emissive&&_e.emissive.add(hs),ke!==bo(_e)&&(_e.needsUpdate=!0);let Gn=ac(he,Yt);if(Gn){let Ar=bo(Gn);Gn.color.copy(_e.color),Gn.map=_e.map,Gn.alphaMap=_e.alphaMap,Gn.alphaTest=_e.alphaTest,Gn.transparent=_e.transparent,Gn.opacity=_e.opacity,Gn.side=_e.side,Ar!==bo(Gn)&&(Gn.needsUpdate=!0)}let Dt=ac(gt,Yt);if(Dt){let Ar=bo(Dt);dr?.matcap?Dt.color.set(bi.color):Dt.color.copy(_e.color),Dt.map=_e.map,Dt.alphaMap=_e.alphaMap,Dt.alphaTest=_e.alphaTest,Dt.transparent=_e.transparent,Dt.opacity=_e.opacity,Dt.side=_e.side,Ar!==bo(Dt)&&(Dt.needsUpdate=!0)}})}for(let k of Object.keys(we.current))if(!H.has(k)){for(let[Y,oe]of Object.entries(we.current[k]))oe&&_a(oe,Ca(Y));delete we.current[k]}S()},[t,L,B,Ie,Ae,ze,i,W,$,S]);let kt=(0,be.useRef)(new Map);(0,be.useEffect)(()=>{let H=kt.current,k=new Set([...H.keys(),...se.keys()]),Y=!1;for(let oe of k){let ee=H.get(oe),te=se.get(oe),he=!!ee?.emissive!=!!te?.emissive,gt=!!ee?.matcap!=!!te?.matcap;if(!he&&!gt)continue;Y=!0;let ot=B[oe],Mt=ze[oe];ot&&xr(ot,(Re,en)=>{let _e=Re.userData.reactImmersiveConfiguredEmissive;he&&_e?.isColor&&(Re.emissive.copy(_e),te?.emissive&&Re.emissive.add(hs));let Yt=ac(Mt,en);gt&&Yt&&(te?.matcap?Yt.color.set(bi.color):Yt.color.copy(Re.color))})}kt.current=se,Y&&S()},[se,B,ze,S]),(0,be.useEffect)(()=>{if($!=="uv-checker")return;let H=Om(),k=[];return C.traverse(Y=>{if(!br(Y))return;let oe=Y.material,ee=Array.isArray(oe)?oe:[oe],te=!!Y.geometry.getAttribute("uv"),he=ee.map((ot,Mt)=>{let Re=new qe.MeshBasicMaterial({color:te?"#ffffff":"#ff00ff",map:te?H:null,side:ot.side});return Re.name=`${Y.name||"mesh"}-uv-checker-${Mt}`,Re.toneMapped=!1,Re}),gt=Array.isArray(oe)?he:he[0];Y.material=gt,k.push({node:Y,original:oe,diagnostic:gt})}),S(),()=>{for(let{node:Y,original:oe,diagnostic:ee}of k){Y.material=oe;let te=Array.isArray(ee)?ee:[ee];for(let he of te)he.dispose()}S()}},[C,$,S]),(0,be.useEffect)(()=>{if(!pe)return;let H=[];for(let[k,Y]of Object.entries(t)){let oe=Y.modelObjectId??k,ee=L[oe];if(!br(ee))continue;let te=new qe.MeshBasicMaterial({color:Ne,wireframe:!0,transparent:!0,opacity:xe,depthTest:!1,depthWrite:!1,side:qe.DoubleSide,toneMapped:!1}),he=ee.clone(!1);he.name="",he.position.set(0,0,0),he.quaternion.identity(),he.scale.set(1,1,1),he.matrix.identity(),he.matrixAutoUpdate=!0,he.material=te,he.castShadow=!1,he.receiveShadow=!1,he.frustumCulled=!1,he.renderOrder=1,he.userData={isWireframeOverlay:!0},he.raycast=()=>{},ee.morphTargetInfluences&&(he.morphTargetInfluences=ee.morphTargetInfluences),ee.add(he),H.push({node:ee,overlay:he})}return S(),()=>{for(let{node:k,overlay:Y}of H)k.remove(Y),Y.material.dispose()}},[pe,Ne,xe,L,t,S]);let nt=(0,be.useMemo)(()=>Sf(_.animations),[_.animations]),wt=(0,be.useRef)(s);wt.current=s;let Ge=(0,be.useRef)(h);Ge.current=h;let nn=(0,be.useRef)(null),_t=(0,be.useRef)({}),Fe=(0,be.useRef)(null),Lt=(0,be.useRef)(null),rn=(0,be.useRef)(1),Ee=(0,be.useRef)(new Set),J=(0,be.useRef)(0),Se=()=>({currentClip:Lt.current,isPlaying:Fe.current?.paused===!1,speed:rn.current,time:Fe.current?.time??0,duration:Fe.current?.getClip().duration??0}),ce=()=>{let H=Se();Ee.current.forEach(k=>k(H))},Ue=(H,k)=>{let Y=Af(k);H.setLoop(Y==="once"?qe.LoopOnce:qe.LoopRepeat,Y==="once"?1:1/0),H.clampWhenFinished=Y==="once";let oe=Su(k?.speed??rn.current);rn.current=oe,H.setEffectiveTimeScale(oe)},Ve=()=>{Fe.current?.stop(),Fe.current=null,Lt.current=null,ce(),S()},je=()=>{Fe.current&&(Fe.current.paused=!0,ce(),S())},$e=H=>{let k=Su(H);rn.current=k,Fe.current?.setEffectiveTimeScale(k),ce()},ye=H=>{let k=Fe.current;if(!k)return;let Y=k.getClip().duration;k.time=Math.min(Math.max(H,0),Y),nn.current?.update(0),ce(),S()},pt=H=>{let k=_t.current[H];if(!k)return;let Y=tc(Ge.current,H);if(!Y?.hidden){if(Fe.current===k&&k.paused){Ue(k,Y),k.paused=!1,Lt.current=H,ce(),S();return}Fe.current&&Fe.current!==k&&Fe.current.stop(),Ue(k,Y),k.paused=!1,k.enabled=!0,k.reset().play(),Fe.current=k,Lt.current=H,ce(),S()}};(0,be.useEffect)(()=>{let H=new qe.AnimationMixer(C);nn.current=H;let k={};for(let{clip:he,sourceName:gt}of nt)k[gt]=H.clipAction(he);_t.current=k;let Y=he=>{he.action&&he.action===Fe.current&&Ve()};H.addEventListener("finished",Y);let oe=()=>{};wt.current?.({clips:nt.map(({sourceName:he})=>he),clipDetails:nt.map(({sourceName:he,duration:gt})=>({sourceName:he,duration:gt})),play:nt.length?pt:oe,pause:nt.length?je:oe,stop:nt.length?Ve:oe,setSpeed:nt.length?$e:oe,seek:nt.length?ye:oe,getState:Se,subscribe:he=>(Ee.current.add(he),he(Se()),()=>{Ee.current.delete(he)})}),rn.current=1,ce();let ee=Ge.current?.animations.autoplayClip,te=ee?tc(Ge.current,ee):void 0;return ee&&!te?.hidden&&pt(ee),()=>{H.removeEventListener("finished",Y),H.stopAllAction(),H.uncacheRoot(C),nn.current=null,_t.current={},Fe.current=null,Lt.current=null,rn.current=1,ce()}},[C,nt]),(0,be.useEffect)(()=>{let H=Lt.current,k=Fe.current;if(!H||!k||!h?.animations)return;let Y=tc(h,H);if(Y?.hidden){Ve();return}Y&&(Ue(k,Y),ce())},[h?.animations]),(0,vo.useFrame)((H,k)=>{if(nn.current&&Fe.current?.paused===!1){if(nn.current.update(k),!g)for(let[Y,oe]of P.current)lc(Y,oe,F);S(),J.current+=k,J.current>=.066&&(J.current=0,ce(),Ms(C))}});let St=(0,be.useMemo)(()=>(h?.model.rotation??[0,0,0]).map(H=>H*Math.PI/180),[h?.model.rotation]);(0,vo.useFrame)((H,k)=>{if(!b.current)return;let Y=b.current.rotation;Y.x=qe.MathUtils.lerp(Y.x,St[0],1-Math.exp(-5*k)),Y.y=qe.MathUtils.lerp(Y.y,St[1],1-Math.exp(-5*k)),Y.z=qe.MathUtils.lerp(Y.z,St[2],1-Math.exp(-5*k)),Math.abs(Y.x-St[0])<1e-4&&Math.abs(Y.y-St[1])<1e-4&&Math.abs(Y.z-St[2])<1e-4||S()});let an=(0,be.useRef)([]),on=(0,be.useRef)(0),at=(0,be.useRef)(0),ct=(0,be.useMemo)(()=>new qe.Vector3,[]);(0,be.useEffect)(()=>{let H=new Map;for(let[ot,Mt]of Object.entries(t)){let Re=L[Mt.modelObjectId??ot];Re&&H.set(Re,Mt)}for(let ot of an.current)lc(ot.node,H.get(ot.node)?.transform,F);at.current=0,C.updateWorldMatrix(!0,!0);let k=new qe.Box3().setFromObject(C),Y=k.getCenter(new qe.Vector3),oe=k.getSize(new qe.Vector3).length()*.5;on.current=Number.isFinite(oe)?oe:0;let ee=[...H.keys()],te=new Set(ee),he=[],gt=new qe.Vector3;for(let ot of ee){if(!ot.parent)continue;let Mt=ot.parent,Re=!1;for(;Mt;){if(te.has(Mt)){Re=!0;break}Mt=Mt.parent}if(Re)continue;let en=new qe.Box3().setFromObject(ot);if(en.isEmpty())continue;en.getCenter(gt);let _e=gt.clone().sub(Y);_e.lengthSq()<1e-8||(_e.normalize(),he.push({node:ot,restLocalPos:ot.position.clone(),restWorldPos:ot.getWorldPosition(new qe.Vector3),worldDir:_e,parentInverse:new qe.Matrix4().copy(ot.parent.matrixWorld).invert()}))}an.current=he,S()},[C,L,D,q,F,S]),(0,be.useEffect)(()=>{S()},[p,S]),(0,vo.useFrame)((H,k)=>{let Y=an.current;if(Y.length===0)return;let oe=Math.min(Math.max(p,0),1),ee=at.current;if(Math.abs(ee-oe)<1e-4){if(ee===oe)return;at.current=oe}else at.current=qe.MathUtils.lerp(ee,oe,1-Math.exp(-6*k)),S();let te=at.current*on.current;for(let he of Y)ct.copy(he.worldDir).multiplyScalar(te).add(he.restWorldPos).applyMatrix4(he.parentInverse),he.node.position.copy(ct)});let fn=H=>{let k=H;for(;k;){let Y=gs(k),oe=Y?V[Y]:void 0;if(oe&&t[oe])return[oe,t[oe]];k=k.parent}return null},qt=H=>{let k=fn(H.object);if(!k)return;let[,Y]=k;Y.selectable!==!1&&(H.stopPropagation(),r(Y))},Ln=H=>{if(!m)return;let k=fn(H.object);if(!k)return;let[Y,oe]=k;oe.hoverable!==!1&&(H.stopPropagation(),y("pointer"),A(Y),a?.(oe))},Un=H=>{m&&(H.stopPropagation(),M(),A(null),a?.(null))},Qt=(0,be.useMemo)(()=>!Bl(C),[C]);return(0,Mu.jsx)("group",{ref:b,children:(0,Mu.jsx)("primitive",{object:C,...Qt?{onClick:qt,...m?{onPointerOver:Ln,onPointerOut:Un}:{}}:{}})})}var Ye=require("react"),zc=require("@react-three/fiber");var Ht=require("three");var Ut=require("three");function Nf(e){let t={};for(let[n,i]of Object.entries(e))t[i.modelObjectId??n]=n;return t}function Pu(e){let t=e,n=null;for(;t;){let i=t.userData?.ri_name;if(typeof i=="string"&&i)return i;!n&&t.name&&(n=t.name),t=t.parent}return n}function Of(e,t){return e||(t?t.modelObjectId??t.id:null)}function uc(e,t){let n=Pu(e);if(!n)return null;let i=t.keyByModelObject[n]??n,r=t.objectBindings[i];return r?{key:i,binding:r}:null}var xo=new Ut.Vector3,Tu=new Ut.Vector3,Hy=new Ut.Matrix4,Df=new Ut.Matrix4,cc=new Ut.Matrix4,Gy=new Ut.Matrix4,dc=new Ut.Matrix4,Wy=new Ut.Matrix4,Xy=new Ut.Matrix4,qy=new Ut.Vector3,Yy=new Ut.Vector3,Ii=new Ut.Vector3,Bf=new Ut.Quaternion,$y=new Ut.Euler;function Ky(e,t,n,i,r){let a=!!(n?.position||n?.rotation||n?.scale),o=!!(r&&r.factor>0&&r.radius>0);if(!a&&!o){e.matrixAutoUpdate=!0,e.position.copy(t.position),e.rotation.copy(t.rotation),e.scale.copy(t.scale),e.updateMatrix(),e.updateWorldMatrix(!0,!1);return}Df.compose(t.position,Bf.setFromEuler(t.rotation),t.scale);let s=n?.rotation;cc.compose(qy.fromArray(n?.position??[0,0,0]),Bf.setFromEuler($y.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),Yy.fromArray(n?.scale??[1,1,1])),cc.premultiply(i).multiply(Gy.copy(i).invert()),e.parent?.updateWorldMatrix(!0,!1);let c=e.parent?.matrixWorld??Hy;if(dc.multiplyMatrices(c,Df).premultiply(cc),o&&r){let l=e;for(;l.parent&&!l.userData.ri_name;)l=l.parent;let u=l.userData.ri_center;Array.isArray(u)&&u.length===3?Ii.fromArray(u).applyMatrix4(i).applyMatrix4(cc):Ii.setFromMatrixPosition(dc),Ii.sub(r.centre),Ii.lengthSq()>1e-8&&(Ii.normalize().multiplyScalar(r.factor*r.radius),dc.premultiply(Xy.makeTranslation(Ii.x,Ii.y,Ii.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(Wy.copy(c).invert(),dc),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function pc(e,t){if(!br(e)&&!e.userData.riLogicalObject)return;let n=uc(e,t);if(!n)return;let i=If(e);if(i.rest??(i.rest={position:e.position.clone(),rotation:e.rotation.clone(),scale:e.scale.clone()}),t.suspendTransforms)return;if(t.placementFrame&&!e.userData.riLogicalObject){Ky(e,i.rest,n.binding.transform,t.placementFrame,t.explode);return}let r=i.rest,a=n.binding.transform;a?.position?e.position.fromArray(a.position):e.position.copy(r.position),a?.rotation?e.rotation.set(a.rotation[0],a.rotation[1],a.rotation[2],r.rotation.order):e.rotation.copy(r.rotation),a?.scale?e.scale.fromArray(a.scale):e.scale.copy(r.scale);let o=t.explode;if(o&&o.factor>0&&o.radius>0){e.updateWorldMatrix(!0,!1),Tu.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let c=s.userData.ri_center;Array.isArray(c)&&c.length===3?xo.fromArray(c).applyMatrix4(e.matrixWorld).sub(o.centre):xo.copy(Tu).sub(o.centre),xo.lengthSq()>1e-8&&(xo.normalize().multiplyScalar(o.factor*o.radius).add(Tu),e.parent&&e.parent.worldToLocal(xo),e.position.copy(xo))}e.updateMatrix(),e.updateWorldMatrix(!0,!1)}function yo(e,t){e.traverse(n=>pc(n,t))}function If(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function Zy(e,t,n,i){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,i])}function Jy(e){if(e.textures){for(let t of _s){let n=e.textures[t];n&&_a(n,Ca(t))}e.textures=void 0}}function Qy(e,t,n){let i=e.textures??{};for(let r of _s){let a=$t(t,r),o=i[r];if(o===a)continue;let s=Ca(r);o&&_a(o,s),a?(Fl(a,s,n),i[r]=a):delete i[r]}e.textures=Object.keys(i).length>0?i:void 0}function e1(e,t){if(t.shadingMode==="normals")return Jr(e,()=>new Ut.MeshNormalMaterial);if(t.shadingMode==="unlit")return Jr(e,n=>{let i=new Ut.MeshBasicMaterial;return i.color.copy(n.color),i.map=n.map,i.alphaMap=n.alphaMap,i.alphaTest=n.alphaTest,i.transparent=n.transparent,i.opacity=n.opacity,i.side=n.side,i});if(t.rendererMode==="matcap"){let n=jl();return Jr(e,i=>{let r=new Ut.MeshMatcapMaterial;return r.matcap=n,r.color.copy(i.color),r.alphaMap=i.alphaMap,r.alphaTest=i.alphaTest,r.side=i.side,r})}return e}function t1(e,t){if(!br(e))return;let i=If(e);i.original??(i.original=Ss(e));let r=uc(e,t);if(!r){i.original&&(e.material=i.original),e.visible=!0;return}let{key:a,binding:o}=r;e.visible=o.visible!==!1,pc(e,t);let s=t.itemMaterials?.[a]?.hex??t.itemMaterials?.[o.modelObjectId??a]?.hex,c=t.highlightOnHover!==!1&&a===t.hoveredKey,l=Zy(o,s,t,c);if(i.signature===l&&i.display){e.material=i.display;return}let u=o.style?.material;if(Qy(i,u,t.invalidate),!i.physical){let d=i.original??Ss(e);if(!d)return;i.physical=Jr(d,h=>{let f=mo(h),m=nc(f??new Ut.MeshStandardMaterial);return rc(m),m})}xr(i.physical,d=>{ic(d,u,s??u?.baseColor),c&&(d.emissive.add(hs),d.color.lerp(Em,Rm)),d.needsUpdate=!0}),i.display&&i.display!==i.physical&&xr(i.display,d=>d.dispose()),i.display=e1(i.physical,t),i.signature=l,e.material=i.display}function zf(e,t){e.traverse(n=>t1(n,t))}function Au(e){e.traverse(t=>{if(!br(t))return;let n=t.userData.riVisuals;n&&(n.rest&&(t.matrixAutoUpdate=!0,t.position.copy(n.rest.position),t.rotation.copy(n.rest.rotation),t.scale.copy(n.rest.scale),t.updateMatrix()),n.original&&(t.material=n.original),n.display&&n.display!==n.physical&&xr(n.display,i=>i.dispose()),n.physical&&xr(n.physical,i=>i.dispose()),Jy(n),delete t.userData.riVisuals)})}var Vf=new Ht.Matrix4().makeRotationX(Math.PI/2),Uf=Vf.clone().invert();function n1(e){let t=new Ht.Vector3(e[0],e[1],e[2]),n=new Ht.Vector3(Math.abs(e[3])+Math.abs(e[6])+Math.abs(e[9]),Math.abs(e[4])+Math.abs(e[7])+Math.abs(e[10]),Math.abs(e[5])+Math.abs(e[8])+Math.abs(e[11]));return new Ht.Box3(t.clone().sub(n),t.clone().add(n))}function r1(e){let t=e.getCenter(new Ht.Vector3),n=e.getSize(new Ht.Vector3).multiplyScalar(.5);return[t.x,t.y,t.z,n.x,0,0,0,n.y,0,0,0,n.z]}var hc=class{constructor(){this.group=new Ht.Group;this.objects=new Map;this.geometry=new Ht.BoxGeometry(1,1,1);this.material=new Ht.MeshBasicMaterial;this.originalBounds=new WeakMap;this.signature="";this.lastContext=null;this.lastEffective=null;this.lastDragging=!1;this.version=0;this.tileVersions=new WeakMap;this.transforms=new Map}setCatalog(t){this.group.clear(),this.objects.clear();for(let n of t){let i=new Ht.Box3(new Ht.Vector3(...n.minimum),new Ht.Vector3(...n.maximum)).applyMatrix4(Uf),r=new Ht.Group;r.name=n.name,r.userData.ri_name=n.name,r.userData.riLogicalObject=!0,r.userData.ri_center=i.getCenter(new Ht.Vector3).toArray();let a=new Ht.Mesh(this.geometry,this.material);a.visible=!1,a.raycast=()=>{},a.position.copy(i.getCenter(new Ht.Vector3)),a.scale.copy(i.getSize(new Ht.Vector3)),r.add(a),this.group.add(r),this.objects.set(n.name,r)}this.signature="",this.lastContext=null}nodesByBinding(t){let n={};for(let[i,r]of this.objects){let a=t.keyByModelObject[i]??i;t.objectBindings[a]&&(n[a]=r)}return n}sync(t,n,i=!1){if(!i&&!this.lastDragging&&t===this.lastContext&&this.lastEffective)return this.lastEffective;this.lastContext=t,this.lastDragging=i;let r={...t,suspendTransforms:!1},a=n?t.objectBindings[n]:void 0,o=a?this.objects.get(a.modelObjectId??n):void 0;i&&o&&a&&(r={...r,objectBindings:{...t.objectBindings,[n]:{...a,transform:{position:o.position.toArray(),rotation:[o.rotation.x,o.rotation.y,o.rotation.z],scale:o.scale.toArray()}}}});for(let c of this.objects.values())i&&c===o||pc(c,r);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([c,l])=>`${c}:${l.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[c,l]of this.objects)l.matrix.equals(new Ht.Matrix4)||this.transforms.set(c,Vf.clone().multiply(l.matrix).multiply(Uf))}return this.lastEffective=r,r}updateBounds(t){if(!t)return;let n=i=>{if(this.tileVersions.get(i)!==this.version){if(i.boundingVolume.box&&this.tileVersions.get(i)!==this.version){let r=this.originalBounds.get(i);r||(r={box:[...i.boundingVolume.box],error:i.geometricError},this.originalBounds.set(i,r));let a=n1(r.box),o=a.clone(),s=1;for(let l of i.extras?.featureIds??[]){let u=this.transforms.get(l);u&&(o.union(a.clone().applyMatrix4(u)),s=Math.max(s,u.getMaxScaleOnAxis()))}let c=r1(o);i.boundingVolume.box=c,i.geometricError=r.error*s,i.engineData?.boundingVolume?.setObbData(c,i.engineData.transform),this.tileVersions.set(i,this.version)}i.children?.forEach(n)}};n(t)}dispose(){this.group.clear(),this.objects.clear(),this.geometry.dispose(),this.material.dispose()}};var Eu=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),Ts=16,Ru=1.25,i1=1.5,a1=1.25,o1=500,s1=3e3,Ff=5e3,jf=2e3,l1=.9;function Hf(e){return e.full&&(e.wanting||e.usage>1)}function Gf(e){return e.loosened?s1:o1}function Wf(e){let t=e.factor/a1;return t<=1+1e-6?1:t}function Xf(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<l1&&Wf(e)>e.tooFine}function qf(e,t){let{now:n}=t,i=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(Hf(t)){if(n-i.changedAt<Gf(i))return i;let r=Math.max(i.tooFine,i.factor);return i.factor>=Ts?i.loosened&&i.tooFine===r?i:{...i,loosened:!0,tooFine:r,changedAt:n}:{factor:Math.min(Ts,i.factor*i1),loosened:!0,tooFine:r,raisedAt:n,changedAt:n}}return i.loosened&&!t.wanting?{...i,loosened:!1,changedAt:n}:Xf(i,t)&&n-i.raisedAt>=Ff&&n-i.changedAt>=jf?{...i,factor:Wf(i),changedAt:n}:i}function Yf(e,t){let{now:n}=t;return Hf(t)?e.factor>=Ts&&e.loosened?null:Math.max(0,Gf(e)-(n-e.changedAt)):e.loosened&&!t.wanting?0:Xf(e,t)?Math.max(0,Ff-(n-e.raisedAt),jf-(n-e.changedAt)):null}function Jf(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function ku(e){if(!e)return null;let t=e.length,n=e.indexOf("?"),i=e.indexOf("#");n!==-1&&(t=Math.min(t,n)),i!==-1&&(t=Math.min(t,i));let r=e.lastIndexOf(".",t),a=e.lastIndexOf("/",t),o=e.indexOf("://");return o!==-1&&o+2===a||r===-1||r<a?null:e.substring(r+1,t)||null}var fc,Ps=(fc=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:n}=this,i,r=()=>{n.delete(i),e()};return i=t?t.requestAnimationFrame(r):requestAnimationFrame(r),n.set(i,e),i}static cancelAnimationFrame(e){let{pending:t,session:n}=this;t.delete(e),n?n.cancelAnimationFrame(e):cancelAnimationFrame(e)}static flushPending(){this.pending.forEach((e,t)=>{e(),this.cancelAnimationFrame(t)})}},$d(fc,"pending",new Map),$d(fc,"session",null),fc),$f=2**30,Rs=class{get unloadPriorityCallback(){return this._unloadPriorityCallback}set unloadPriorityCallback(e){e.length===1?(console.warn('LRUCache: "unloadPriorityCallback" function has been changed to take two arguments.'),this._unloadPriorityCallback=(t,n)=>{let i=e(t),r=e(n);return i<r?-1:+(i>r)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*$f,this.maxBytesSize=.4*$f,this.unloadPercent=.05,this.autoMarkUnused=!0,this.cachedBytes=0,this.itemSet=new Map,this.itemList=[],this.usedSet=new Set,this.callbacks=new Map,this.unloadingHandle=-1,this.bytesMap=new Map,this.loadedSet=new Set,this._unloadPriorityCallback=null;let e=this.itemSet;this.defaultPriorityCallback=t=>e.get(t)}isFull(){return this.itemSet.size>=this.maxSize||this.cachedBytes>=this.maxBytesSize}getMemoryUsage(e){return this.bytesMap.get(e)||0}setMemoryUsage(e,t){let{bytesMap:n,itemSet:i}=this;i.has(e)&&(this.cachedBytes-=n.get(e)||0,n.set(e,t),this.cachedBytes+=t)}add(e,t){let n=this.itemSet;if(n.has(e)||this.isFull())return!1;let i=this.usedSet,r=this.itemList,a=this.callbacks;return r.push(e),i.add(e),n.set(e,Date.now()),a.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,n=this.itemSet,i=this.itemList,r=this.bytesMap,a=this.callbacks,o=this.loadedSet;if(n.has(e)){this.cachedBytes-=r.get(e)||0,r.delete(e),a.get(e)(e);let s=i.indexOf(e);return i.splice(s,1),t.delete(e),n.delete(e),a.delete(e),o.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:n,loadedSet:i}=this;n.has(e)&&(t===!0?i.add(e):i.delete(e))}markUsed(e){let t=this.itemSet,n=this.usedSet;t.has(e)&&!n.has(e)&&(t.set(e,Date.now()),n.add(e))}markUnused(e){this.usedSet.delete(e)}markAllUnused(){this.usedSet.clear()}isUsed(e){return this.usedSet.has(e)}unloadUnusedContent(){let{unloadPercent:e,minSize:t,maxSize:n,itemList:i,itemSet:r,usedSet:a,loadedSet:o,callbacks:s,bytesMap:c,minBytesSize:l,maxBytesSize:u}=this,d=i.length-a.size,h=i.length-o.size,f=Math.max(Math.min(i.length-t,d),0),m=this.cachedBytes-l,x=this.unloadPriorityCallback||this.defaultPriorityCallback,E=!1,w=f>0&&d>0||h&&i.length>n;if(d&&this.cachedBytes>l||h&&this.cachedBytes>u||w){i.sort((b,y)=>{let M=a.has(b);if(M===a.has(y)){let C=o.has(b);return C===o.has(y)?-x(b,y):C?1:-1}else return M?1:-1});let p=Math.max(t*e,f*e),g=Math.ceil(Math.min(p,d,f)),_=Math.max(e*m,e*l),S=Math.min(_,m),T=0,A=0;for(;this.cachedBytes-A>u||i.length-T>n;){let b=i[T],y=c.get(b)||0;if(a.has(b)&&o.has(b)||this.cachedBytes-A-y<u&&i.length-T<=n)break;A+=y,T++}for(;A<S||T<g;){let b=i[T],y=c.get(b)||0;if(a.has(b)||this.cachedBytes-A-y<l&&T>=g)break;A+=y,T++}i.splice(0,T).forEach(b=>{this.cachedBytes-=c.get(b)||0,s.get(b)(b),c.delete(b),r.delete(b),s.delete(b),o.delete(b),a.delete(b)}),E=T<f||A<m&&T<d,E&&(E=T>0)}E&&(this.unloadingHandle=Ps.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){Ps.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},c1=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Qr=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=>{Ps.requestAnimationFrame(e)},this._runjobs=()=>{this.scheduled=!1,this.tryRunJobs()}}sort(){let e=this.priorityCallback,t=this.items;e!==null&&t.sort(e)}has(e){return this.callbacks.has(e)}add(e,t){let n={callback:t,reject:null,resolve:null,promise:null};return n.promise=new Promise((i,r)=>{let a=this.items,o=this.callbacks;n.resolve=i,n.reject=r,a.unshift(e),o.set(e,n),this.autoUpdate&&this.scheduleJobRun()}),n.promise}remove(e){let t=this.items,n=this.callbacks,i=t.indexOf(e);if(i!==-1){let r=n.get(e);r.promise.catch(a=>{if(a.name!=="AbortError")throw a}),r.reject(new c1),t.splice(i,1),n.delete(e)}}removeByFilter(e){let{items:t}=this;for(let n=0;n<t.length;n++){let i=t[n];e(i)&&(this.remove(i),n--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,n=this.maxJobs,i=0,r=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;n>this.currJobs&&e.length>0&&i<n;){this.currJobs++,i++;let a=e.pop(),{callback:o,resolve:s,reject:c}=t.get(a);t.delete(a);let l;try{l=o(a)}catch(u){c(u),r();continue}l instanceof Promise?l.then(s).catch(c).finally(r):(s(l),r())}}flush(e){let{items:t,callbacks:n}=this,i=t.indexOf(e);if(!n.has(e))return;let{callback:r,resolve:a,reject:o}=n.get(e);n.delete(e),t.splice(i,1);let s;try{s=r(e)}catch(c){o(c);return}return s instanceof Promise?s.then(a).catch(o):a(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},xc=class{get running(){for(let e of this.originQueues.values())if(e.running)return!0;return!1}get maxJobsPerOrigin(){return this._maxJobsPerOrigin}set maxJobsPerOrigin(e){this._maxJobsPerOrigin=e,this.originQueues.forEach(t=>t.maxJobs=e)}get maxJobs(){return this.maxJobsPerOrigin}set maxJobs(e){console.warn('DownloadPriorityQueue: "maxJobs" is no longer valid and limits jobs per server origin. Use "maxJobsPerOrigin", instead.'),this.maxJobsPerOrigin=e}get priorityCallback(){return this._priorityCallback}set priorityCallback(e){this._priorityCallback=e,this.originQueues.forEach(t=>t.priorityCallback=e)}constructor(){this.originQueues=new Map,this._itemQueues=new WeakMap,this._maxJobsPerOrigin=6,this._priorityCallback=null}add(e,t,n,i=null){this.originQueues.forEach((c,l)=>{c.running||this.originQueues.delete(l)});let r=e===null?null:Jf(e),a=this.originQueues.get(r);a||(a=new Qr,a.maxJobs=this._maxJobsPerOrigin,a.priorityCallback=this._priorityCallback,this.originQueues.set(r,a));let o=this._itemQueues.get(t);if(o&&o!==a&&o.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,a);let s=a.add(t,n);return i!==null&&(i.aborted?this.remove(t):i.addEventListener("abort",()=>this.remove(t),{once:!0})),s}remove(e){let t=this._itemQueues.get(e);t&&(t.remove(e),this._itemQueues.delete(e))}has(e){let t=this._itemQueues.get(e);return!!(t&&t.has(e))}};var Ea=6378137,d1=1/298.257223563,Du=6356752314245179e-9,mc={inView:!1,error:1/0,distanceFromCamera:1/0};function yc(e){return e===4||e===-1}function yi(e,t){return wc(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function wc(e){return!!e.traversal}function ks(e){let{children:t}=e,n=t.length===0||wc(t[t.length-1]),i=!e.internal.hasUnrenderableContent||yc(e.internal.loadingState);return n&&i}function Pa(e){return e.traversal.unconditionallyRefine}function As(e,t){if(wc(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,mc),e.traversal.inFrustum=mc.inView,e.traversal.error=mc.error,e.traversal.distanceFromCamera=mc.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 Lu(e,t,n=!1){if(As(e,t),n?t.markTileUsed(e):gc(e),Pa(e)&&ks(e)){let i=e.children;for(let r=0,a=i.length;r<a;r++)Lu(i[r],t,n)}}function Qf(e,t){if(As(e,t),e.traversal.usedLastFrame&&(gc(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||Pa(e))&&ks(e))){let n=e.children;for(let i=0,r=n.length;i<r;i++)Qf(n[i],t)}}function gc(e){e.traversal.used=!0}function u1(e,t){return!(e.traversal.error<=t.errorTarget&&!Pa(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!ks(e))}function eg(e,t){let{frameCount:n}=t,{children:i}=e;for(let r=0,a=i.length;r<a;r++){let o=i[r];yi(o,n)&&(o.traversal.active&&(o.traversal.kicked=!0,o.traversal.active=!1),eg(o,t))}}function Kf(e){return!Pa(e)&&(!e.internal.hasContent||yc(e.internal.loadingState))}function tg(e,t){if(As(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(!u1(e,t)){gc(e);return}let i=!1,r=!1,a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];tg(c,t),i||(i=yi(c,t.frameCount)),r||(r=c.traversal.inFrustum)}if(e.refine==="REPLACE"&&!r&&a.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let o=0,s=a.length;o<s;o++)Lu(a[o],t,!0);return}if(gc(e),e.refine==="REPLACE"&&i&&(t.loadSiblings||t.loadAncestors))for(let o=0,s=a.length;o<s;o++)Lu(a[o],t)}function ng(e,t){let n=t.frameCount;if(!yi(e,n))return;let i=e.children,r=!1;for(let o=0,s=i.length;o<s;o++){let c=i[o];r||(r=yi(c,n))}if(!r)e.traversal.isLeaf=!0;else{for(let s=0,c=i.length;s<c;s++)ng(i[s],t);let o=!0;for(let s=0,c=i.length;s<c;s++){let l=i[s];if(yi(l,n)){let u=!Pa(l),d=!l.internal.hasContent||yc(l.internal.loadingState);u&&d||l.traversal.allChildrenLoaded||(o=!1)}}e.traversal.allChildrenLoaded=o}let a=!0;for(let o=0,s=i.length;o<s;o++){let c=i[o];yi(c,t.frameCount)&&!c.traversal.allUsedChildrenProcessed&&(a=!1)}e.traversal.allUsedChildrenProcessed=a&&ks(e)}function rg(e,t){if(!yi(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!Pa(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!Pa(e)&&(e.traversal.active=!0,ks(e)&&e.internal.hasContent&&!yc(e.internal.loadingState)))for(let r=0,a=n.length;r<a;r++)Qf(n[r],t);return}let i=n.length>0;for(let r=0,a=n.length;r<a;r++){let o=n[r];rg(o,t),yi(o,t.frameCount)&&!(o.traversal.active&&Kf(o))&&!o.traversal.allChildrenReady&&(i=!1)}e.traversal.allChildrenReady=i,e.refine==="REPLACE"&&!i&&e.traversal.wasSetActive&&Kf(e)&&(e.traversal.active=!0,eg(e,t))}function ig(e,t){As(e,t);let n=yi(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||wc(e)&&e.traversal.usedLastFrame){let i=!1,r=!1;n?(i=e.traversal.active,r=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):As(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(i&&t.stats.active++,r&&t.stats.visible++,e.traversal.wasSetActive!==i&&t.invokeOnePlugin(o=>o.setTileActive&&o.setTileActive(e,i)),e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(o=>o.setTileVisible&&o.setTileVisible(e,r))):e.internal.hasRenderableContent||(r=e.traversal.isLeaf,e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(o=>o.setEmptyTileVisible&&o.setEmptyTileVisible(e,r))),e.traversal.visible=r,e.traversal.active=i;let a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];ig(c,t)}}}function p1(e,t){tg(e,t),ng(e,t),rg(e,t),ig(e,t)}function h1(e){let t=null;return()=>{t===null&&(t=Ps.requestAnimationFrame(()=>{t=null,e()}))}}function m1(e,t=null,n=null){let i=[];for(i.push(e),i.push(null),i.push(0);i.length>0;){let r=i.pop(),a=i.pop(),o=i.pop();if(t&&t(o,a,r)){n&&n(o,a,r);return}let s=o.children;if(s)for(let c=s.length-1;c>=0;c--)i.push(s[c]),i.push(o),i.push(r+1);n&&n(o,a,r)}}var Zf=Symbol("PLUGIN_REGISTERED"),zi={inView:!0,error:0,distance:1/0},f1=(e,t)=>{let n=e.priority||0,i=t.priority||0;return n===i?!e.traversal||!t.traversal?0:e.traversal.used===t.traversal.used?e.traversal.error===t.traversal.error?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.traversal.error>t.traversal.error?1:-1:e.traversal.used?1:-1:n>i?1:-1},g1=(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,b1=(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,wo=(e,t)=>{let n=e.priority??1/0,i=t.priority??1/0;if(n!==i)return n>i?1:-1;if(!e.internal||!t.internal)return 0;let r=e.internal.renderer,a=t.internal.renderer,o=!r.loadAncestors,s=!a.loadAncestors;return o&&s?g1(e,t):f1(e,t)},Bu=new Rs;Bu.unloadPriorityCallback=b1;var Es=new xc;Es.maxJobsPerOrigin=25,Es.priorityCallback=wo;var bc=new Qr;bc.maxJobs=5,bc.priorityCallback=wo;var vc=new Qr;vc.maxJobs=25,vc.priorityCallback=(e,t)=>{let n=e.parent,i=t.parent;return n===i?0:n?i?wo(n,i):-1:1};var Nu=class{get root(){let e=this.rootTileset;return e?e.root:null}get loadProgress(){let{stats:e,isLoading:t}=this,n=e.queued+e.downloading+e.parsing,i=e.inCacheSinceLoad+ +!!t;return i===0?1:1-n/i}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof Qr){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=Bu,this.downloadQueue=Es,this.parseQueue=bc,this.processNodeQueue=vc,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=h1(()=>{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[Zf]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,n=e.priority||0,i=t.length;for(let r=0;r<t.length;r++)if((t[r].priority||0)>n){i=r;break}t.splice(i,0,e),e[Zf]=!0,e.init&&e.init(this)}unregisterPlugin(e){let t=this.plugins;if(typeof e=="string"&&(e=this.getPluginByName(e)),t.includes(e)){let n=t.indexOf(e);return t.splice(n,1),e.dispose&&e.dispose(),!0}return!1}getPluginByName(e){return this.plugins.find(t=>t.name===e)||null}invokeOnePlugin(e){let t=[...this.plugins,this];for(let n=0;n<t.length;n++){let i=e(t[n]);if(i)return i}return null}invokeAllPlugins(e){let t=[...this.plugins,this],n=[];for(let i=0;i<t.length;i++){let r=e(t[i]);r&&n.push(r)}return n.length===0?null:Promise.all(n)}traverse(e,t,n=!0){this.root&&m1(this.root,(i,...r)=>(n&&this.ensureChildrenArePreprocessed(i,!0),e?e(i,...r):!1),t)}getAttributions(e=[]){return this.invokeAllPlugins(t=>t!==this&&t.getAttributions&&t.getAttributions(e)),e}update(){let{lruCache:e,usedSet:t,stats:n,root:i,downloadQueue:r,parseQueue:a,processNodeQueue:o}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(l=>l.loadRootTileset&&l.loadRootTileset()).then(l=>{let u=this.rootURL;u!==null&&this.invokeAllPlugins(d=>u=d.preprocessURL?d.preprocessURL(u,null):u),this.rootLoadingState=4,this.rootTileset=l,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:l,url:u}),this.dispatchEvent({type:"load-root-tileset",tileset:l,url:u})}).catch(l=>{this.rootLoadingState=-1,console.error(l),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:l,url:this.rootURL})})),!i)return;let s=null;if(this.invokeAllPlugins(l=>{if(l.doTilesNeedUpdate){let u=l.doTilesNeedUpdate();s=s===null?u:!!(s||u)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),n.inFrustum=0,n.used=0,n.active=0,n.visible=0,n.tilesProcessed=0,this.frameCount++,t.forEach(l=>e.markUnused(l)),t.clear(),this.prepareForTraversal(),p1(i,this),this.removeUnusedPendingTiles();let c=this.queuedTiles;c.sort(e.unloadPriorityCallback);for(let l=0,u=c.length;l<u&&!e.isFull();l++)this.requestTileContents(c[l]);c.length=0,e.scheduleUnload(),(r.running||a.running||o.running)===!1&&this.isLoading===!0&&(this.cachedSinceLoadComplete.clear(),n.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1),this.dispatchEvent({type:"update-after"})}resetFailedTiles(){this.rootLoadingState===-1&&(this.rootLoadingState=0);let e=this.stats;e.failed!==0&&(this.traverse(t=>{t.internal.loadingState===-1&&(t.internal.loadingState=0)},null,!1),e.failed=0)}calculateTileViewErrorWithPlugin(e,t){this.calculateTileViewError(e,t);let{errorFalloff:n,errorFalloffDensity:i}=this;if(n>0&&Number.isFinite(t.distanceFromCamera)){let s=t.distanceFromCamera*i;t.error-=n*(1-Math.exp(-s*s))}let r=null,a=0,o=1/0;this.invokeAllPlugins(s=>{s!==this&&s.calculateTileViewError&&(zi.inView=!0,zi.error=0,zi.distance=1/0,s.calculateTileViewError(e,zi)&&(r===null&&(r=!0),r&&(r=zi.inView),zi.inView&&(o=Math.min(o,zi.distance),a=Math.max(a,zi.error))))}),t.inView&&r!==!1?(t.error=Math.max(t.error,a),t.distanceFromCamera=Math.min(t.distanceFromCamera,o)):r?(t.inView=!0,t.error=a,t.distanceFromCamera=o):t.inView=!1}dispose(){[...this.plugins].forEach(n=>{this.unregisterPlugin(n)});let e=this.lruCache,t=[];this.traverse(n=>(t.push(n),!1),null,!1);for(let n=0,i=t.length;n<i;n++)e.remove(t[n]);this.stats={queued:0,parsing:0,downloading:0,failed:0,inFrustum:0,traversed:0,used:0,active:0,visible:0},this.frameCount=0,this.loadingTiles.clear()}calculateBytesUsed(e,t){return 0}dispatchEvent(e){}addEventListener(e,t){}removeEventListener(e,t){}parseTile(e,t,n){return null}prepareForTraversal(){}disposeTile(e){e.traversal.visible&&(e.internal.hasRenderableContent?this.invokeOnePlugin(n=>n.setTileVisible&&n.setTileVisible(e,!1)):this.invokeOnePlugin(n=>n.setEmptyTileVisible&&n.setEmptyTileVisible(e,!1)),e.traversal.visible=!1),e.traversal.active&&e.internal.hasRenderableContent&&this.invokeOnePlugin(n=>n.setTileActive&&n.setTileActive(e,!1)),e.traversal.active=!1;let{scene:t}=e.engineData;t&&this.dispatchEvent({type:"dispose-model",scene:t,tile:e})}preprocessNode(e,t,n=null){if(this.processedTiles.add(e),this.stats.tilesProcessed++,e.content&&(!("uri"in e.content)&&"url"in e.content&&(e.content.uri=e.content.url,delete e.content.url),e.content.boundingVolume&&!("box"in e.content.boundingVolume||"sphere"in e.content.boundingVolume||"region"in e.content.boundingVolume)&&delete e.content.boundingVolume),e.parent=n,e.children=e.children||[],e.internal={hasContent:!1,hasRenderableContent:!1,hasUnrenderableContent:!1,loadingState:0,basePath:t,depth:-1,depthFromRenderedParent:-1,isVirtual:!1,virtualChildCount:0,renderer:this,...e.internal},e.content?.uri){let i=ku(e.content.uri),r=!!(i&&/json$/.test(i));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=r,e.internal.hasRenderableContent=!r}else e.internal.hasContent=!1,e.internal.hasUnrenderableContent=!1,e.internal.hasRenderableContent=!1;n?(e.internal.depth=n.internal.depth+1,e.internal.depthFromRenderedParent=n.internal.depthFromRenderedParent+ +!!e.internal.hasRenderableContent):(e.internal.depth=0,e.internal.depthFromRenderedParent=+!!e.internal.hasRenderableContent),e.traversal={distanceFromCamera:1/0,error:1/0,inFrustum:!1,wasInFrustum:!1,isLeaf:!1,used:!1,usedLastFrame:!1,visible:!1,wasSetVisible:!1,active:!1,wasSetActive:!1,allChildrenReady:!1,allChildrenLoaded:!1,kicked:!1,allUsedChildrenProcessed:!1,lastFrameVisited:-1},n===null?e.refine=e.refine||"REPLACE":e.refine=e.refine||n.refine,e.engineData={scene:null,metadata:null,boundingVolume:null},Object.defineProperty(e,"cached",{get(){return console.warn('TilesRenderer: "tile.cached" field has been renamed to "tile.engineData".'),this.engineData},enumerable:!1,configurable:!0}),this.invokeAllPlugins(i=>{i!==this&&i.preprocessNode&&i.preprocessNode(e,t,n)})}setTileActive(e,t){t?this.activeTiles.add(e):this.activeTiles.delete(e)}setTileVisible(e,t){t?this.visibleTiles.add(e):this.visibleTiles.delete(e),this.dispatchEvent({type:"tile-visibility-change",scene:e.engineData.scene,tile:e,visible:t})}calculateTileViewError(e,t){}removeUnusedPendingTiles(){let{lruCache:e,loadingTiles:t}=this,n=[];for(let i of t)!e.isUsed(i)&&i.internal.loadingState===1&&n.push(i);for(let i=0;i<n.length;i++)e.remove(n[i])}queueTileForDownload(e){e.internal.loadingState!==0||this.lruCache.isFull()||this.queuedTiles.push(e)}markTileUsed(e){this.usedSet.add(e),this.lruCache.markUsed(e)}fetchData(e,t){return fetch(e,t)}ensureChildrenArePreprocessed(e,t=this.stats.tilesProcessed<this.maxTilesProcessed){let n=e.children;if(n.length===0||n[n.length-1].traversal)return;let i=r=>{for(let a=0,o=r.length;a<o;a++){let s=r[a];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),i(n)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,r=>{i(r.children),this._dispatchNeedsUpdateEvent()})}getBytesUsed(e){let t=0;return this.invokeAllPlugins(n=>{n.calculateBytesUsed&&(t+=n.calculateBytesUsed(e,e.engineData.scene)||0)}),t}recalculateBytesUsed(e=null){let{lruCache:t,processedTiles:n}=this;e===null?t.itemSet.forEach(i=>{n.has(i)&&t.setMemoryUsage(i,this.getBytesUsed(i))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,n=null){let[i,r]=e.asset.version.split(".").map(o=>parseInt(o));console.assert(i<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),i===1&&r>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let a=t.replace(/\/[^/]*$/,"");a=new URL(a,window.location.href).toString(),this.preprocessNode(e.root,a,n)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,n=null,i=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(h=>i=h.preprocessURL?h.preprocessURL(i,e):i);let r=this.stats,a=this.lruCache,o=this.downloadQueue,s=this.parseQueue,c=this.loadingTiles,l=ku(i),u=new AbortController,d=u.signal;if(a.add(e,h=>{u.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,s.remove(h),o.remove(h),c.delete(h)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),a.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),r.inCacheSinceLoad++,r.inCache++,r.queued++,e.internal.loadingState=1,c.add(e),o.add(i,e,h=>{if(d.aborted)return Promise.resolve();e.internal.loadingState=2,r.downloading++,r.queued--;let f=this.invokeOnePlugin(m=>m.fetchData&&m.fetchData(i,{...this.fetchOptions,signal:d}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:i,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),f}).then(h=>{if(!d.aborted){if(!(h instanceof Response))return h;if(h.ok)return l==="json"?h.json():h.arrayBuffer();throw Error(`Failed to load model with error code ${h.status}`)}}).then(h=>{if(!d.aborted)return r.downloading--,r.parsing++,e.internal.loadingState=3,s.add(e,f=>d.aborted?Promise.resolve():l==="json"&&h.root?(this.preprocessTileset(h,i,e),e.children.push(h.root),n=h,t=!0,Promise.resolve()):this.invokeOnePlugin(m=>m.parseTile&&m.parseTile(h,f,l,i,d)))}).then(()=>{if(d.aborted)return;r.parsing--,r.loaded++,e.internal.loadingState=4,c.delete(e),a.setLoaded(e,!0);let h=this.getBytesUsed(e);if(a.getMemoryUsage(e)===0&&h>0&&a.isFull()){a.remove(e);return}a.setMemoryUsage(e,h),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:n,url:i}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:i})}).catch(h=>{d.aborted||(h.name==="AbortError"?a.remove(e):(s.remove(e),o.remove(e),e.internal.loadingState===1?r.queued--:e.internal.loadingState===2?r.downloading--:e.internal.loadingState===3?r.parsing--:e.internal.loadingState===4&&r.loaded--,r.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(h),e.internal.loadingState=-1,c.delete(e),a.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:h,url:i})))})}};function Aa(e){if(e===null||e.byteLength<4)return"";let t;if(t=e instanceof DataView?e:new DataView(e),String.fromCharCode(t.getUint8(0))==="{")return null;let n="";for(let i=0;i<4;i++)n+=String.fromCharCode(t.getUint8(i));return n}var v1=new TextDecoder;function ag(e){return v1.decode(e)}function _c(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var _o=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=_c(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function Ou(e,t,n,i,r,a){let o;switch(i){case"SCALAR":o=1;break;case"VEC2":o=2;break;case"VEC3":o=3;break;case"VEC4":o=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${a}".`)}let s,c=n*o;switch(r){case"BYTE":s=new Int8Array(e,t,c);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,c);break;case"SHORT":s=new Int16Array(e,t,c);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,c);break;case"INT":s=new Int32Array(e,t,c);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,c);break;case"FLOAT":s=new Float32Array(e,t,c);break;case"DOUBLE":s=new Float64Array(e,t,c);break;default:throw Error(`FeatureTable : Feature component type not provided for "${a}".`)}return s}var Ls=class{constructor(e,t,n,i){this.buffer=e,this.binOffset=t+n,this.binLength=i;let r=null;if(n!==0){let a=new Uint8Array(e,t,n);r=JSON.parse(ag(a))}else r={};this.header=r}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,n=null,i=null){let r=this.header;if(!(e in r))return null;let a=r[e];if(!(a instanceof Object)||Array.isArray(a))return a;{let{buffer:o,binOffset:s,binLength:c}=this,l=a.byteOffset||0,u=a.type||i,d=a.componentType||n;if("type"in a&&i&&a.type!==i)throw Error("FeatureTable: Specified type does not match expected type.");let h=s+l,f=Ou(o,h,t,u,d,e);if(h+f.byteLength>s+c)throw Error("FeatureTable: Feature data read outside binary body length.");return f}}getBuffer(e,t){let{buffer:n,binOffset:i}=this;return n.slice(i+e,i+e+t)}},x1=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let i of this.classes){let r=i.instances;for(let a in r)i.instances[a]=this._parseProperty(r[a],i.length,a)}if(this.instancesLength=t.instancesLength,this.classIds=this._parseProperty(t.classIds,this.instancesLength,"classIds"),t.parentCounts?this.parentCounts=this._parseProperty(t.parentCounts,this.instancesLength,"parentCounts"):this.parentCounts=Array(this.instancesLength).fill(1),t.parentIds){let i=this.parentCounts.reduce((r,a)=>r+a,0);this.parentIds=this._parseProperty(t.parentIds,i,"parentIds")}else this.parentIds=null;this.instancesIds=[];let n={};for(let i of this.classIds)n[i]=n[i]??0,this.instancesIds.push(n[i]),n[i]++}_parseProperty(e,t,n){if(Array.isArray(e))return e;{let{buffer:i,binOffset:r}=this.batchTable,a=e.byteOffset,o=e.componentType||"UNSIGNED_SHORT";return Ou(i,r+a,t,"SCALAR",o,n)}}getDataFromId(e,t={}){let n=this.parentCounts[e];if(this.parentIds&&n>0){let s=0;for(let c=0;c<e;c++)s+=this.parentCounts[c];for(let c=0;c<n;c++){let l=this.parentIds[s+c];l!==e&&this.getDataFromId(l,t)}}let i=this.classIds[e],r=this.classes[i].instances,a=this.classes[i].name,o=this.instancesIds[e];for(let s in r)t[a]=t[a]||{},t[a][s]=r[s][o];return t}},Sc=class extends Ls{constructor(e,t,n,i,r){super(e,n,i,r),this.count=t,this.extensions={};let a=this.header.extensions;a&&a["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new x1(this))}getDataFromId(e,t={}){if(e<0||e>=this.count)throw Error(`BatchTable: id value "${e}" out of bounds for "${this.count}" features number.`);for(let n of this.getKeys())t[n]=super.getData(n,this.count)[e];for(let n in this.extensions){let i=this.extensions[n];i.getDataFromId instanceof Function&&(t[n]=t[n]||{},i.getDataFromId(e,t[n]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},Iu=class extends _o{parse(e){let t=new DataView(e),n=Aa(t);console.assert(n==="b3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new Ls(e.slice(28,28+a+o),0,a,o),u=28+a+o,d=new Sc(e.slice(u,u+s+c),l.getData("BATCH_LENGTH"),0,s,c),h=u+s+c;return{version:i,featureTable:l,batchTable:d,glbBytes:new Uint8Array(e,h,r-h)}}},zu=class extends _o{parse(e){let t=new DataView(e),n=Aa(t);console.assert(n==="i3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=t.getUint32(28,!0),u=new Ls(e.slice(32,32+a+o),0,a,o),d=32+a+o,h=new Sc(e.slice(d,d+s+c),u.getData("INSTANCES_LENGTH"),0,s,c),f=d+s+c,m=new Uint8Array(e,f,r-f),x=null,E=null,w=null;if(l)x=m,E=Promise.resolve();else{let p=this.resolveExternalURL(ag(m));w=_c(p),E=fetch(p,this.fetchOptions).then(g=>{if(!g.ok)throw Error(`I3DMLoaderBase : Failed to load file "${p}" with status ${g.status} : ${g.statusText}`);return g.arrayBuffer()}).then(g=>{x=new Uint8Array(g)})}return E.then(()=>({version:i,featureTable:u,batchTable:h,glbBytes:x,gltfWorkingPath:w}))}},Uu=class extends _o{parse(e){let t=new DataView(e),n=Aa(t);console.assert(n==="pnts");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new Ls(e.slice(28,28+a+o),0,a,o),u=28+a+o,d=new Sc(e.slice(u,u+s+c),l.getData("BATCH_LENGTH")||l.getData("POINTS_LENGTH"),0,s,c);return Promise.resolve({version:i,featureTable:l,batchTable:d})}},Vu=class extends _o{parse(e){let t=new DataView(e),n=Aa(t);console.assert(n==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let i=t.getUint32(4,!0);console.assert(i===1,'CMPTLoader: The version listed in the header is "1".');let r=t.getUint32(8,!0);console.assert(r===e.byteLength,"CMPTLoader: The contents buffer length listed in the header matches the file.");let a=t.getUint32(12,!0),o=[],s=16;for(let c=0;c<a;c++){let l=new DataView(e,s,12),u=Aa(l),d=l.getUint32(4,!0),h=l.getUint32(8,!0),f=new Uint8Array(e,s,h);o.push({type:u,buffer:f,version:d}),s+=h}return{version:i,tiles:o}}};var G=require("three"),Lc=require("three/addons/loaders/GLTFLoader.js"),wg=require("three/addons/utils/BufferGeometryUtils.js"),Ku=class extends Iu{constructor(e=G.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new G.Matrix4}parse(e){let t=super.parse(e),n=t.glbBytes.slice().buffer;return new Promise((i,r)=>{let a=this.manager,o=this.fetchOptions,s=a.getHandler("path.gltf")||new Lc.GLTFLoader(a);o.credentials==="include"&&o.mode==="cors"&&s.setCrossOrigin("use-credentials"),"credentials"in o&&s.setWithCredentials(o.credentials==="include"),o.headers&&s.setRequestHeader(o.headers);let c=this.workingPath;!/[\\/]$/.test(c)&&c.length&&(c+="/");let l=this.adjustmentTransform;s.parse(n,c,u=>{let{batchTable:d,featureTable:h}=t,{scene:f}=u,m=h.getData("RTC_CENTER",1,"FLOAT","VEC3");m&&(f.position.x+=m[0],f.position.y+=m[1],f.position.z+=m[2]),u.scene.updateMatrix(),u.scene.matrix.multiply(l),u.scene.matrix.decompose(u.scene.position,u.scene.quaternion,u.scene.scale),u.batchTable=d,u.featureTable=h,f.batchTable=d,f.featureTable=h,i(u)},r)})}};function y1(e){let t=e>>11,n=e>>5&63,i=e&31;return[Math.round(t/31*255),Math.round(n/63*255),Math.round(i/31*255)]}var Ds=new G.Vector2;function w1(e,t,n=new G.Vector3){Ds.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(Ds.x,Ds.y,1-Math.abs(Ds.x)-Math.abs(Ds.y));let i=G.MathUtils.clamp(-n.z,0,1);return n.x>=0?n.setX(n.x-i):n.setX(n.x+i),n.y>=0?n.setY(n.y-i):n.setY(n.y+i),n.normalize(),n}var og={RGB:"color",POSITION:"position"},Zu=class extends Uu{constructor(e=G.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:i}=t,r=new G.PointsMaterial,a=n.header.extensions,o=new G.Vector3,s;if(a&&a["3DTILES_draco_point_compression"]){let{byteOffset:u,byteLength:d,properties:h}=a["3DTILES_draco_point_compression"],f=this.manager.getHandler("draco.drc");if(f==null)throw Error("PNTSLoader: dracoLoader not available.");let m={};for(let w in h)if(w in og&&w in h){let p=og[w];m[p]=h[w]}let x={attributeIDs:m,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},E=n.getBuffer(u,d);s=await f.decodeGeometry(E,x),s.attributes.color&&(r.vertexColors=!0)}else{let u=n.getData("POINTS_LENGTH"),d=n.getData("POSITION",u,"FLOAT","VEC3"),h=n.getData("NORMAL",u,"FLOAT","VEC3"),f=n.getData("NORMAL",u,"UNSIGNED_BYTE","VEC2"),m=n.getData("RGB",u,"UNSIGNED_BYTE","VEC3"),x=n.getData("RGBA",u,"UNSIGNED_BYTE","VEC4"),E=n.getData("RGB565",u,"UNSIGNED_SHORT","SCALAR"),w=n.getData("CONSTANT_RGBA",u,"UNSIGNED_BYTE","VEC4"),p=n.getData("POSITION_QUANTIZED",u,"UNSIGNED_SHORT","VEC3"),g=n.getData("QUANTIZED_VOLUME_SCALE",u,"FLOAT","VEC3"),_=n.getData("QUANTIZED_VOLUME_OFFSET",u,"FLOAT","VEC3");if(s=new G.BufferGeometry,p){let S=new Float32Array(u*3);for(let T=0;T<u;T++)for(let A=0;A<3;A++){let b=3*T+A;S[b]=p[b]/65535*g[A]}o.x=_[0],o.y=_[1],o.z=_[2],s.setAttribute("position",new G.BufferAttribute(S,3,!1))}else s.setAttribute("position",new G.BufferAttribute(d,3,!1));if(h!==null)s.setAttribute("normal",new G.BufferAttribute(h,3,!1));else if(f!==null){let S=new Float32Array(u*3),T=new G.Vector3;for(let A=0;A<u;A++){let b=f[A*2],y=f[A*2+1],M=w1(b,y,T);S[A*3]=M.x,S[A*3+1]=M.y,S[A*3+2]=M.z}s.setAttribute("normal",new G.BufferAttribute(S,3,!1))}if(x!==null)s.setAttribute("color",new G.BufferAttribute(x,4,!0)),r.vertexColors=!0,r.transparent=!0,r.depthWrite=!1;else if(m!==null)s.setAttribute("color",new G.BufferAttribute(m,3,!0)),r.vertexColors=!0;else if(E!==null){let S=new Uint8Array(u*3);for(let T=0;T<u;T++){let A=y1(E[T]);for(let b=0;b<3;b++){let y=3*T+b;S[y]=A[b]}}s.setAttribute("color",new G.BufferAttribute(S,3,!0)),r.vertexColors=!0}else if(w!==null){r.color=new G.Color(w[0],w[1],w[2]);let S=w[3]/255;S<1&&(r.opacity=S,r.transparent=!0,r.depthWrite=!1)}}let c=new G.Points(s,r);c.position.copy(o),t.scene=c,t.scene.featureTable=n,t.scene.batchTable=i;let l=n.getData("RTC_CENTER",1,"FLOAT","VEC3");return l&&(t.scene.position.x+=l[0],t.scene.position.y+=l[1],t.scene.position.z+=l[2]),t})}};function _1(e){let{x:t,y:n,z:i}=e;e.x=i,e.y=t,e.z=n}function S1(e){return-e+Math.PI/2}var sg=new G.Spherical,Ui=new G.Vector3,Kn=new G.Vector3,Fu=new G.Vector3,yr=new G.Matrix4,ei=new G.Matrix4,ju=new G.Sphere,tr=new G.Euler,lg=new G.Vector3,cg=new G.Vector3,dg=new G.Vector3,Bs=new G.Vector3,Mc=new G.Ray,M1=1e-12,C1=.1;var Ju=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new G.Vector3(e,t,n)}intersectRay(e,t){return yr.makeScale(...this.radius).invert(),ju.center.set(0,0,0),ju.radius=1,Mc.copy(e).applyMatrix4(yr),Mc.intersectSphere(ju,t)?(yr.makeScale(...this.radius),t.applyMatrix4(yr),t):null}getEastNorthUpFrame(e,t,n,i){return n.isMatrix4&&(i=n,n=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,lg,cg,dg),this.getCartographicToPosition(e,t,n,Bs),i.makeBasis(lg,cg,dg).setPosition(Bs)}getOrientedEastNorthUpFrame(e,t,n,i,r,a,o){return this.getObjectFrame(e,t,n,i,r,a,o,0)}getObjectFrame(e,t,n,i,r,a,o,s=2){return this.getEastNorthUpFrame(e,t,n,yr),tr.set(r,a,-i,"ZXY"),o.makeRotationFromEuler(tr).premultiply(yr),s===1?(tr.set(Math.PI/2,0,0,"XYZ"),ei.makeRotationFromEuler(tr),o.multiply(ei)):s===2&&(tr.set(-Math.PI/2,0,Math.PI,"XYZ"),ei.makeRotationFromEuler(tr),o.multiply(ei)),o}getCartographicFromObjectFrame(e,t,n=2){return n===1?(tr.set(-Math.PI/2,0,0,"XYZ"),ei.makeRotationFromEuler(tr).premultiply(e)):n===2?(tr.set(-Math.PI/2,0,Math.PI,"XYZ"),ei.makeRotationFromEuler(tr).premultiply(e)):ei.copy(e),Bs.setFromMatrixPosition(ei),this.getPositionToCartographic(Bs,t),this.getEastNorthUpFrame(t.lat,t.lon,0,yr).invert(),ei.premultiply(yr),tr.setFromRotationMatrix(ei,"ZXY"),t.azimuth=-tr.z,t.elevation=tr.x,t.roll=tr.y,t}getEastNorthUpAxes(e,t,n,i,r,a=Bs){this.getCartographicToPosition(e,t,0,a),this.getCartographicToNormal(e,t,r),n.set(-a.y,a.x,0).normalize(),i.crossVectors(r,n).normalize()}getCartographicToPosition(e,t,n,i){this.getCartographicToNormal(e,t,Ui);let r=this.radius;Kn.copy(Ui),Kn.x*=r.x**2,Kn.y*=r.y**2,Kn.z*=r.z**2;let a=Math.sqrt(Ui.dot(Kn));return Kn.divideScalar(a),i.copy(Kn).addScaledVector(Ui,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,Kn),this.getPositionToNormal(Kn,Ui);let n=Fu.subVectors(e,Kn);return t.lon=Math.atan2(Ui.y,Ui.x),t.lat=Math.asin(Ui.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return sg.set(1,S1(e),t),n.setFromSpherical(sg).normalize(),_1(n),n}getPositionToNormal(e,t){let n=this.radius;return t.copy(e),t.x/=n.x**2,t.y/=n.y**2,t.z/=n.z**2,t.normalize(),t}getPositionToSurfacePoint(e,t){let n=this.radius,i=1/n.x**2,r=1/n.y**2,a=1/n.z**2,o=e.x*e.x*i,s=e.y*e.y*r,c=e.z*e.z*a,l=o+s+c,u=Math.sqrt(1/l),d=Kn.copy(e).multiplyScalar(u);if(l<C1)return isFinite(u)?t.copy(d):null;let h=Fu.set(d.x*i*2,d.y*r*2,d.z*a*2),f=(1-u)*e.length()/(.5*h.length()),m=0,x,E,w,p,g,_,S,T,A,b,y;do{f-=m,w=1/(1+f*i),p=1/(1+f*r),g=1/(1+f*a),_=w*w,S=p*p,T=g*g,A=_*w,b=S*p,y=T*g,x=o*_+s*S+c*T-1,E=o*A*i+s*b*r+c*y*a;let M=-2*E;m=x/M}while(Math.abs(x)>M1);return t.set(e.x*w,e.y*p,e.z*g)}calculateHorizonDistance(e,t){let n=this.calculateEffectiveRadius(e);return Math.sqrt(2*n*t+t**2)}calculateEffectiveRadius(e){let t=this.radius.x,n=1-this.radius.z**2/t**2,i=e*G.MathUtils.DEG2RAD,r=Math.sin(i)**2;return t/Math.sqrt(1-n*r)}getPositionElevation(e){this.getPositionToSurfacePoint(e,Kn);let t=Fu.subVectors(e,Kn);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(yr.makeScale(...this.radius).invert(),Mc.copy(e).applyMatrix4(yr),Kn.set(0,0,0),Mc.closestPointToPoint(Kn,t).normalize(),yr.makeScale(...this.radius),t.applyMatrix4(yr))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},Us=new Ju(Ea,Ea,Du);Us.name="WGS84 Earth";var Cc=new G.Vector3,So=new G.Vector3,Mo=new G.Vector3,Hu=new G.Vector3,Tc=new G.Quaternion,Pc=new G.Vector3,Co=new G.Matrix4,ug=new G.Matrix4,pg=new G.Vector3,hg=new G.Matrix4,Gu=new G.Quaternion,Wu={};function mg(e,t,n,i){if(e=e/n*2-1,t=t/n*2-1,i.x=e,i.y=t,i.z=1-Math.abs(e)-Math.abs(t),i.z<0){let r=i.x;i.x=(1-Math.abs(i.y))*(r>=0?1:-1),i.y=(1-Math.abs(r))*(i.y>=0?1:-1)}return i.normalize(),i}var Qu=class extends zu{constructor(e=G.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new G.Matrix4,this.ellipsoid=Us.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:n,batchTable:i}=t,r=t.glbBytes.slice().buffer;return new Promise((a,o)=>{let s=this.fetchOptions,c=this.manager,l=c.getHandler("path.gltf")||new Lc.GLTFLoader(c);s.credentials==="include"&&s.mode==="cors"&&l.setCrossOrigin("use-credentials"),"credentials"in s&&l.setWithCredentials(s.credentials==="include"),s.headers&&l.setRequestHeader(s.headers);let u=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(u)||(u+="/");let d=this.adjustmentTransform;l.parse(r,u,h=>{let f=n.getData("INSTANCES_LENGTH"),m=n.getData("POSITION",f,"FLOAT","VEC3"),x=n.getData("POSITION_QUANTIZED",f,"UNSIGNED_SHORT","VEC3"),E=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),w=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),p=n.getData("NORMAL_UP",f,"FLOAT","VEC3"),g=n.getData("NORMAL_RIGHT",f,"FLOAT","VEC3"),_=n.getData("NORMAL_UP_OCT32P",f,"UNSIGNED_SHORT","VEC2"),S=n.getData("NORMAL_RIGHT_OCT32P",f,"UNSIGNED_SHORT","VEC2"),T=n.getData("SCALE_NON_UNIFORM",f,"FLOAT","VEC3"),A=n.getData("SCALE",f,"FLOAT","SCALAR"),b=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),y=n.getData("EAST_NORTH_UP");if(!m&&x){m=new Float32Array(f*3);for(let L=0;L<f;L++)m[L*3+0]=E[0]+x[L*3+0]/65535*w[0],m[L*3+1]=E[1]+x[L*3+1]/65535*w[1],m[L*3+2]=E[2]+x[L*3+2]/65535*w[2]}let M=new G.Vector3;for(let L=0;L<f;L++)M.x+=m[L*3+0]/f,M.y+=m[L*3+1]/f,M.z+=m[L*3+2]/f;let C=[],N=[];h.scene.updateMatrixWorld(),h.scene.traverse(L=>{if(L.isMesh){N.push(L);let{geometry:F,material:V}=L,D=new G.InstancedMesh(F,V,f);D.position.copy(M),b&&(D.position.x+=b[0],D.position.y+=b[1],D.position.z+=b[2]),C.push(D)}});for(let L=0;L<f;L++){Hu.set(m[L*3+0]-M.x,m[L*3+1]-M.y,m[L*3+2]-M.z),Tc.identity(),p&&g?(So.set(p[L*3+0],p[L*3+1],p[L*3+2]),Mo.set(g[L*3+0],g[L*3+1],g[L*3+2]),Cc.crossVectors(Mo,So).normalize(),Co.makeBasis(Mo,So,Cc),Tc.setFromRotationMatrix(Co)):_&&S&&(mg(_[L*2+0],_[L*2+1],65535,So),mg(S[L*2+0],S[L*2+1],65535,Mo),Cc.crossVectors(Mo,So).normalize(),Co.makeBasis(Mo,So,Cc),Tc.setFromRotationMatrix(Co)),Pc.set(1,1,1),T&&Pc.set(T[L*3+0],T[L*3+1],T[L*3+2]),A&&Pc.multiplyScalar(A[L]);for(let F=0,V=C.length;F<V;F++){let D=C[F];Gu.copy(Tc),y&&(D.updateMatrixWorld(),pg.copy(Hu).applyMatrix4(D.matrixWorld),this.ellipsoid.getPositionToCartographic(pg,Wu),this.ellipsoid.getEastNorthUpFrame(Wu.lat,Wu.lon,hg),Gu.setFromRotationMatrix(hg)),Co.compose(Hu,Gu,Pc).multiply(d);let q=N[F];ug.multiplyMatrices(Co,q.matrixWorld),D.setMatrixAt(L,ug)}}h.scene.clear(),h.scene.add(...C),h.batchTable=i,h.featureTable=n,h.scene.batchTable=i,h.scene.featureTable=n,a(h)},o)})})}},_g=class extends Vu{constructor(e=G.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new G.Matrix4,this.ellipsoid=Us.clone()}parse(e){let t=super.parse(e),{manager:n,ellipsoid:i,adjustmentTransform:r}=this,a=[];for(let o in t.tiles){let{type:s,buffer:c}=t.tiles[o];switch(s){case"b3dm":{let l=c.slice(),u=new Ku(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.adjustmentTransform.copy(r);let d=u.parse(l.buffer);a.push(d);break}case"pnts":{let l=c.slice(),u=new Zu(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions;let d=u.parse(l.buffer);a.push(d);break}case"i3dm":{let l=c.slice(),u=new Qu(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.ellipsoid.copy(i),u.adjustmentTransform.copy(r);let d=u.parse(l.buffer);a.push(d);break}}}return Promise.all(a).then(o=>{let s=new G.Group;return o.forEach(c=>{s.add(c.scene)}),{tiles:o,scene:s}})}},Ns=new G.Matrix4,T1=class extends G.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new G.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?Ns.copy(this.matrix):Ns.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=Ns.elements,n=this.matrixWorld.elements,i=!1;for(let r=0;r<16;r++){let a=t[r],o=n[r];if(Math.abs(a-o)>2**-52){i=!0;break}}if(i){this.matrixWorld.copy(Ns),this.matrixWorldInverse.copy(Ns).invert();let r=this.children;for(let c=0,l=r.length;c<l;c++)r[c].updateMatrixWorld();let{tilesRenderer:a}=this,{activeTiles:o,visibleTiles:s}=a;o.forEach(c=>{s.has(c)||c.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},P1=new G.Ray;function A1(e,t,n,i){let{scene:r}=e.engineData;n.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(e,r,t,i))||t.intersectObject(r,!0,i)}function E1(e){return"traversal"in e}function Sg(e,t,n,i,r=null){if(!E1(t))return;let{group:a,activeTiles:o}=e,{boundingVolume:s}=t.engineData;if(r===null&&(r=P1,r.copy(n.ray).applyMatrix4(a.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(r))return;o.has(t)&&A1(t,n,e,i);let c=t.children;for(let l=0,u=c.length;l<u;l++)Sg(e,c[l],n,i,r)}var Ac=new G.Vector3,Ec=new G.Vector3,nr=new G.Vector3,Rc=new G.Ray,Yu=class{constructor(e=new G.Box3,t=new G.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new G.Matrix4,this.points=Array(8).fill().map(()=>new G.Vector3),this.planes=[,,,,,,].fill().map(()=>new G.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,nr).distanceTo(e)}containsPoint(e){return nr.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(nr)}intersectsRay(e){return Rc.copy(e).applyMatrix4(this.inverseTransform),Rc.intersectsBox(this.box)}intersectRay(e,t){return Rc.copy(e).applyMatrix4(this.inverseTransform),Rc.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:n,box:i}=this;t.copy(n).invert();let{min:r,max:a}=i,o=0;for(let s=-1;s<=1;s+=2)for(let c=-1;c<=1;c+=2)for(let l=-1;l<=1;l+=2)e[o].set(s<0?r.x:a.x,c<0?r.y:a.y,l<0?r.z:a.z).applyMatrix4(n),o++;this.updatePlanes()}updatePlanes(){Ac.copy(this.box.min).applyMatrix4(this.transform),Ec.copy(this.box.max).applyMatrix4(this.transform),nr.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(nr,Ac),this.planes[1].setFromNormalAndCoplanarPoint(nr,Ec).negate(),nr.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(nr,Ac),this.planes[3].setFromNormalAndCoplanarPoint(nr,Ec).negate(),nr.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(nr,Ac),this.planes[5].setFromNormalAndCoplanarPoint(nr,Ec).negate()}intersectsSphere(e){return this.clampPoint(e.center,nr),nr.distanceToSquared(e.center)<=e.radius*e.radius}intersectsFrustum(e){return this._intersectsPlaneShape(e.planes,e.points)}intersectsOBB(e){return this._intersectsPlaneShape(e.planes,e.points)}_intersectsPlaneShape(e,t){let n=this.points,i=this.planes;for(let r=0;r<6;r++){let a=e[r],o=-1/0;for(let s=0;s<8;s++){let c=n[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}for(let r=0;r<6;r++){let a=i[r],o=-1/0;for(let s=0;s<8;s++){let c=t[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}return!0}},zs=Math.PI,Xu=zs/2,Os=new G.Vector3,Ra=new G.Vector3,Vr=new G.Vector3,Le=new G.Vector3,Zn=new G.Matrix4,R1=new G.Box3,fg=new G.Matrix4;function Vi(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function gg(e){return e.x!==e.y}var Mg=class extends Ju{constructor(e=1,t=1,n=1,i=-Xu,r=Xu,a=0,o=2*zs,s=0,c=0){super(e,t,n),this.latStart=i,this.latEnd=r,this.lonStart=a,this.lonEnd=o,this.heightStart=s,this.heightEnd=c}getBoundingBox(e,t){gg(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:n,latEnd:i,lonStart:r,lonEnd:a,heightStart:o,heightEnd:s}=this,c=(n+i)*.5,l=(r+a)*.5,u=n>0,d=i<0,h;h=u?n:d?i:0;let{min:f,max:m}=e;f.setScalar(1/0),m.setScalar(-1/0),a-r<=zs?(this.getCartographicToNormal(c,l,Vr),Ra.set(0,0,1),Os.crossVectors(Ra,Vr).normalize(),Ra.crossVectors(Vr,Os).normalize(),t.makeBasis(Os,Ra,Vr),Zn.copy(t).invert(),this.getCartographicToPosition(h,r,s,Le).applyMatrix4(Zn),m.x=Math.abs(Le.x),f.x=-m.x,this.getCartographicToPosition(i,r,s,Le).applyMatrix4(Zn),m.y=Le.y,this.getCartographicToPosition(i,l,s,Le).applyMatrix4(Zn),m.y=Math.max(Le.y,m.y),this.getCartographicToPosition(n,r,s,Le).applyMatrix4(Zn),f.y=Le.y,this.getCartographicToPosition(n,l,s,Le).applyMatrix4(Zn),f.y=Math.min(Le.y,f.y),this.getCartographicToPosition(c,l,s,Le).applyMatrix4(Zn),m.z=Le.z,this.getCartographicToPosition(n,r,o,Le).applyMatrix4(Zn),f.z=Le.z,this.getCartographicToPosition(i,r,o,Le).applyMatrix4(Zn),f.z=Math.min(Le.z,f.z)):(this.getCartographicToPosition(h,l,s,Vr),Vr.z=0,Vr.length()<1e-10?Vr.set(1,0,0):Vr.normalize(),Ra.set(0,0,1),Os.crossVectors(Vr,Ra).normalize(),t.makeBasis(Os,Ra,Vr),Zn.copy(t).invert(),this.getCartographicToPosition(h,l+Xu,s,Le).applyMatrix4(Zn),m.x=Math.abs(Le.x),f.x=-m.x,this.getCartographicToPosition(i,0,d?o:s,Le).applyMatrix4(Zn),m.y=Le.y,this.getCartographicToPosition(n,0,u?o:s,Le).applyMatrix4(Zn),f.y=Le.y,this.getCartographicToPosition(h,l,s,Le).applyMatrix4(Zn),m.z=Le.z,this.getCartographicToPosition(h,a,s,Le).applyMatrix4(Zn),f.z=Le.z),e.getCenter(Le),e.min.sub(Le).multiplyScalar(1.0000000000001),e.max.sub(Le).multiplyScalar(1.0000000000001),Le.applyMatrix4(t),t.setPosition(Le)}getBoundingSphere(e){gg(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(R1,fg),e.center.setFromMatrixPosition(fg),e.radius=0;let{latStart:t,latEnd:n,lonStart:i,lonEnd:r,heightStart:a,heightEnd:o}=this,s=(t+n)*.5,c=(i+r)*.5,l=t>0,u=n<0,d;d=l?t:u?n:0,this.getCartographicToPosition(d,i,o,Le),Vi(Le,e),this.getCartographicToPosition(n,i,o,Le),Vi(Le,e),this.getCartographicToPosition(n,c,o,Le),Vi(Le,e),this.getCartographicToPosition(t,i,o,Le),Vi(Le,e),this.getCartographicToPosition(t,c,o,Le),Vi(Le,e),this.getCartographicToPosition(s,c,o,Le),Vi(Le,e),this.getCartographicToPosition(t,i,a,Le),Vi(Le,e),r-i>zs&&(this.getCartographicToPosition(d,c+zs,o,Le),Vi(Le,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},wi=new G.Vector3,_i=new G.Vector3,Si=new G.Vector3,bg=new G.Vector3,vg=new G.Vector3,k1=class{constructor(){this.sphere=null,this.obb=null,this.region=null,this.regionObb=null}intersectsRay(e){let t=this.sphere,n=this.obb||this.regionObb;return!(t&&!e.intersectsSphere(t)||n&&!n.intersectsRay(e))}intersectRay(e,t=null){let n=this.sphere,i=this.obb||this.regionObb,r=-1/0,a=-1/0;n&&e.intersectSphere(n,bg)&&(r=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(bg)),i&&i.intersectRay(e,vg)&&(a=i.containsPoint(e.origin)?0:e.origin.distanceToSquared(vg));let o=Math.max(r,a);return o===-1/0?null:(e.at(Math.sqrt(o),t),t)}distanceToPoint(e){let t=this.sphere,n=this.obb||this.regionObb,i=-1/0,r=-1/0;return t&&(i=Math.max(t.distanceToPoint(e),0)),n&&(r=n.distanceToPoint(e)),i>r?i:r}intersectsFrustum(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsFrustum(e)?!1:!!(n||t)}intersectsSphere(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!n.intersectsSphere(e)||t&&!t.intersectsSphere(e)?!1:!!(n||t)}intersectsOBB(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsOBB(e)?!1:!!(n||t)}getOBB(e,t){let n=this.obb||this.regionObb;n?(e.copy(n.box),t.copy(n.transform)):(this.getAABB(e),t.identity())}getAABB(e){if(this.sphere)this.sphere.getBoundingBox(e);else{let t=this.obb||this.regionObb;e.copy(t.box).applyMatrix4(t.transform)}}getSphere(e){if(this.sphere)e.copy(this.sphere);else if(this.region)this.region.getBoundingSphere(e);else{let t=this.obb||this.regionObb;t.box.getBoundingSphere(e),e.applyMatrix4(t.transform)}}setObbData(e,t){let n=new Yu;wi.set(e[3],e[4],e[5]),_i.set(e[6],e[7],e[8]),Si.set(e[9],e[10],e[11]);let i=wi.length(),r=_i.length(),a=Si.length();wi.normalize(),_i.normalize(),Si.normalize(),i===0&&wi.crossVectors(_i,Si),r===0&&_i.crossVectors(wi,Si),a===0&&Si.crossVectors(wi,_i),n.transform.set(wi.x,_i.x,Si.x,e[0],wi.y,_i.y,Si.y,e[1],wi.z,_i.z,Si.z,e[2],0,0,0,1).premultiply(t),n.box.min.set(-i,-r,-a),n.box.max.set(i,r,a),n.update(),this.obb=n}setSphereData(e,t,n,i,r){let a=new G.Sphere;a.center.set(e,t,n),a.radius=i,a.applyMatrix4(r),this.sphere=a}setRegionData(e,t,n,i,r,a,o){let s=new Mg(...e.radius,n,r,t,i,a,o),c=new Yu;s.getBoundingBox(c.box,c.transform),c.update(),this.region=s,this.regionObb=c}},L1=new G.Matrix3;function D1(e,t,n,i){let r=L1.set(e.normal.x,e.normal.y,e.normal.z,t.normal.x,t.normal.y,t.normal.z,n.normal.x,n.normal.y,n.normal.z);return i.set(-e.constant,-t.constant,-n.constant),i.applyMatrix3(r.invert()),i}var B1=class extends G.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new G.Vector3)}setFromProjectionMatrix(...e){return super.setFromProjectionMatrix(...e),this.calculateFrustumPoints(),this}calculateFrustumPoints(){let{planes:e,points:t}=this;[[e[0],e[3],e[4]],[e[1],e[3],e[4]],[e[0],e[2],e[4]],[e[1],e[2],e[4]],[e[0],e[3],e[5]],[e[1],e[3],e[5]],[e[0],e[2],e[5]],[e[1],e[2],e[5]]].forEach((n,i)=>{D1(n[0],n[1],n[2],t[i])})}};var $u=0;function xg(e,t,n,i){try{return G.TextureUtils.getByteLength(e,t,n,i)}catch{return $u}}function N1(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??$u;let{format:t,type:n,image:i,mipmaps:r}=e;if(e.isCompressedTexture&&Array.isArray(r)&&r.length>0){let o=0;for(let s of r)s?.data?.byteLength?o+=s.data.byteLength:o+=xg(s.width,s.height,t,n);return o}if(!i)return $u;let a=xg(i.width,i.height,t,n);return a*=e.generateMipmaps?4/3:1,a}function O1(e){let t=new Set,n=0;return e.traverse(i=>{if(i.geometry&&!t.has(i.geometry)&&(n+=(0,wg.estimateBytesUsed)(i.geometry),t.add(i.geometry)),i.material){let r=i.material;for(let a in r){let o=r[a];o&&o.isTexture&&!t.has(o)&&(n+=N1(o),t.add(o))}}}),n}var Cg=Symbol("INITIAL_FRUSTUM_CULLED"),kc=new G.Matrix4,Is=new G.Vector3,qu=new G.Vector2,I1=new G.Vector3(1,0,0),z1=new G.Vector3(0,1,0),U1=()=>null;function yg(e,t){e.traverse(n=>{n.frustumCulled=n[Cg]&&t})}var ep=class extends Nu{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{yg(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new T1(this),this.ellipsoid=Us.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new G.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new G.LoadingManager,this._listeners={}}addEventListener(e,t){G.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return G.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){G.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){G.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)Sg(this,this.root,e,t);else{let n=e.firstHitOnly?[]:t;for(let i of this.activeTiles){let{scene:r}=i.engineData;this.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(i,r,e,n))||e.intersectObject(r,!0,n)}e.firstHitOnly&&n.length>0&&(n.sort((i,r)=>i.distance-r.distance),t.push(n[0]))}}hasCamera(e){return this.cameraMap.has(e)}setCamera(e){let t=this.cameras,n=this.cameraMap;return n.has(e)?!1:(n.set(e,new G.Vector2),t.push(e),this.dispatchEvent({type:"add-camera",camera:e}),!0)}setResolution(e,t,n){let i=this.cameraMap;if(!i.has(e))return!1;let r=t.isVector2?t.x:t,a=t.isVector2?t.y:n,o=i.get(e);return(o.width!==r||o.height!==a)&&(o.set(r,a),this.dispatchEvent({type:"camera-resolution-change"})),!0}getResolution(e,t){let n=this.cameraMap.get(e);return n?t.copy(n):null}setResolutionFromRenderer(e,t){return t.getSize(qu),this.setResolution(e,qu.x,qu.y)}deleteCamera(e){let t=this.cameras,n=this.cameraMap;if(n.has(e)){let i=t.indexOf(e);return t.splice(i,1),n.delete(e),this.dispatchEvent({type:"delete-camera",camera:e}),!0}return!1}loadRootTileset(...e){return super.loadRootTileset(...e).then(t=>{let{asset:n,extensions:i={}}=t;switch((n&&n.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(z1,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(I1,Math.PI/2);break}if("3DTILES_ellipsoid"in i){let r=i["3DTILES_ellipsoid"],{ellipsoid:a}=this;a.name=r.body,r.radii?a.radius.set(...r.radii):a.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,n=this.cameraMap,i=this.cameraInfo;for(;i.length>t.length;)i.pop();for(;i.length<t.length;)i.push({frustum:new B1,isOrthographic:!1,sseDenominator:-1,position:new G.Vector3,invScale:-1,pixelSize:0});Is.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(Is.x-Is.y,Is.x-Is.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let r=0,a=i.length;r<a;r++){let o=t[r],s=i[r],c=s.frustum,l=s.position,u=n.get(o);(u.width===0||u.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let d=o.projectionMatrix.elements;if(s.isOrthographic=d[15]===1,s.isOrthographic){let h=2/d[0],f=2/d[5];s.pixelSize=Math.max(f/u.height,h/u.width)}else s.sseDenominator=2/d[5]/u.height;kc.copy(e.matrixWorld),kc.premultiply(o.matrixWorldInverse),kc.premultiply(o.projectionMatrix),c.setFromProjectionMatrix(kc,o.coordinateSystem,o.reversedDepth),l.set(0,0,0),l.applyMatrix4(o.matrixWorld),l.applyMatrix4(e.matrixWorldInverse)}}update(){if(super.update(),this.cameras.length===0&&this.root){let e=!1;this.invokeAllPlugins(t=>e||(e=!!(t!==this&&t.calculateTileViewError))),e===!1&&console.warn("TilesRenderer: no cameras defined. Cannot update 3d tiles.")}}preprocessNode(e,t,n=null){super.preprocessNode(e,t,n);let i=new G.Matrix4;if(e.transform){let o=e.transform;for(let s=0;s<16;s++)i.elements[s]=o[s]}n&&i.premultiply(n.engineData.transform);let r=new G.Matrix4().copy(i).invert(),a=new k1;"sphere"in e.boundingVolume&&a.setSphereData(...e.boundingVolume.sphere,i),"box"in e.boundingVolume&&a.setObbData(e.boundingVolume.box,i),"region"in e.boundingVolume&&a.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=i,e.engineData.transformInverse=r,e.engineData.boundingVolume=a,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=U1}async parseTile(e,t,n,i,r){let a=t.engineData,o=_c(i),s=this.fetchOptions,c=this.manager,l=null,u=a.transform,d=this._upRotationMatrix,h=(Aa(e)||n).toLowerCase();switch(h){case"b3dm":{let g=new Ku(c);g.workingPath=o,g.fetchOptions=s,g.adjustmentTransform.copy(d),l=g.parse(e);break}case"pnts":{let g=new Zu(c);g.workingPath=o,g.fetchOptions=s,l=g.parse(e);break}case"i3dm":{let g=new Qu(c);g.workingPath=o,g.fetchOptions=s,g.adjustmentTransform.copy(d),g.ellipsoid.copy(this.ellipsoid),l=g.parse(e);break}case"cmpt":{let g=new _g(c);g.workingPath=o,g.fetchOptions=s,g.adjustmentTransform.copy(d),g.ellipsoid.copy(this.ellipsoid),l=g.parse(e).then(_=>_.scene);break}case"gltf":case"glb":{let g=c.getHandler("path.gltf")||c.getHandler("path.glb")||new Lc.GLTFLoader(c);g.setWithCredentials(s.credentials==="include"),g.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&g.setCrossOrigin("use-credentials");let _=g.resourcePath||g.path||o;!/[\\/]$/.test(_)&&_.length&&(_+="/"),l=g.parseAsync(e,_).then(S=>{S.scene=S.scene||new G.Group;let{scene:T}=S;return T.updateMatrix(),T.matrix.multiply(d).decompose(T.position,T.quaternion,T.scale),S});break}default:l=this.invokeOnePlugin(g=>g.parseToMesh&&g.parseToMesh(e,t,n,i,r));break}let f=await l;if(f===null)throw Error(`TilesRenderer: Content type "${h}" not supported.`);let m,x;f.isObject3D?(m=f,x=null):(m=f.scene,x=f),m.updateMatrix(),m.matrix.premultiply(u),m.matrix.decompose(m.position,m.quaternion,m.scale),await this.invokeAllPlugins(g=>g.processTileModel&&g.processTileModel(m,t)),m.traverse(g=>{g[Cg]=g.frustumCulled,g.userData.tile=t}),yg(m,!this.autoDisableRendererCulling);let E=[],w=[],p=[];if(m.traverse(g=>{if(g.geometry&&w.push(g.geometry),g.material){let _=g.material;E.push(g.material);for(let S in _){let T=_[S];T&&T.isTexture&&p.push(T)}}}),r.aborted){for(let g=0,_=p.length;g<_;g++){let S=p[g];S.image instanceof ImageBitmap&&S.image.close(),S.dispose()}return}a.materials=E,a.geometry=w,a.textures=p,a.scene=m,a.metadata=x}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let n=t.materials,i=t.geometry,r=t.textures,a=t.scene.parent;t.scene.traverse(o=>{o.userData.meshFeatures&&o.userData.meshFeatures.dispose(),o.userData.structuralMetadata&&o.userData.structuralMetadata.dispose()});for(let o=0,s=i.length;o<s;o++)i[o].dispose();for(let o=0,s=n.length;o<s;o++)n[o].dispose();for(let o=0,s=r.length;o<s;o++){let c=r[o];c.image instanceof ImageBitmap&&c.image.close(),c.dispose()}a&&a.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let n=e.engineData.scene;n&&(t?(n.parent=this.group,n.updateMatrixWorld(!0)):n.parent=null)}setTileVisible(e,t){let n=e.engineData.scene,{activeTiles:i,group:r}=this;n&&(t?r.add(n):(r.remove(n),i.has(e)&&(n.parent=r))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let n=this._bytesUsed;return!n.has(e)&&t&&n.set(e,O1(t)),n.get(e)??null}calculateTileViewError(e,t){let n=e.engineData,i=this.cameras,r=this.cameraInfo,a=n.boundingVolume,o=!1,s=0,c=1/0,l=0,u=1/0;for(let d=0,h=i.length;d<h;d++){let f=r[d],m,x;if(f.isOrthographic){let w=f.pixelSize;m=e.geometricError/w,x=1/0}else{let w=f.sseDenominator;x=a.distanceToPoint(f.position),m=x===0?1/0:e.geometricError/(x*w)}let E=r[d].frustum;a.intersectsFrustum(E)&&(o=!0,s=Math.max(s,m),c=Math.min(c,x)),l=Math.max(l,m),u=Math.min(u,x)}o?(t.inView=!0,t.error=s,t.distanceFromCamera=c):(t.inView=!1,t.error=l,t.distanceFromCamera=u)}dispose(){super.dispose(),this.group.removeFromParent()}};var ne=require("three"),Vg=require("three/addons/loaders/GLTFLoader.js"),rp=require("three/addons/postprocessing/Pass.js");var zT=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var Tg=new Qr;Tg.maxJobs=10,Tg.priorityCallback=(e,t)=>{let n=e.tile,i=t.tile,r=n.internal.renderer,a=i.internal.renderer,o=r.visibleTiles.has(n);return o===a.visibleTiles.has(i)?wo(n,i):o?1:-1};var Pg=new ne.Vector3;function Vs(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,i=new ne.BufferAttribute(new t(e.count*e.itemSize),e.itemSize,!0),r=e.itemSize,a=e.count;for(let o=0;o<a;o++)for(let s=0;s<r;s++){let c=ne.MathUtils.clamp(e.getComponent(o,s),n,1);i.setComponent(o,s,c)}return i}function V1(e,t=Int16Array){let n=e.geometry,i=n.attributes,r=i.position;if(r.isInterleavedBufferAttribute||r.array instanceof t)return r;let a=new ne.BufferAttribute(new t(r.count*r.itemSize),r.itemSize,!1),o=r.itemSize,s=r.count;n.computeBoundingBox();let c=n.boundingBox,{min:l,max:u}=c,d=2**(8*t.BYTES_PER_ELEMENT-1)-1,h=-d;for(let f=0;f<s;f++)for(let m=0;m<o;m++){let x=m===0?"x":m===1?"y":"z",E=l[x],w=u[x],p=ne.MathUtils.mapLinear(r.getComponent(f,m),E,w,h,d);a.setComponent(f,m,p)}c.getCenter(Pg).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(Pg),e.scale.x*=.5*(u.x-l.x)/d,e.scale.y*=.5*(u.y-l.y)/d,e.scale.z*=.5*(u.z-l.z)/d,i.position=a,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var ip=class{constructor(e){this._options={generateNormals:!1,disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!1,uvType:Int8Array,normalType:Int8Array,positionType:Int16Array,...e},this.name="TILES_COMPRESSION_PLUGIN",this.priority=-100}processTileModel(e,t){let{generateNormals:n,disableMipmaps:i,compressIndex:r,compressUvs:a,compressNormals:o,compressPosition:s,uvType:c,normalType:l,positionType:u}=this._options;e.traverse(d=>{if(d.material&&i){let h=d.material;for(let f in h){let m=h[f];m&&m.isTexture&&m.generateMipmaps&&(m.generateMipmaps=!1,m.minFilter=ne.LinearFilter)}}if(d.geometry){let h=d.geometry,f=h.attributes;if(a){let{uv:m,uv1:x,uv2:E,uv3:w}=f;m&&(f.uv=Vs(m,c)),x&&(f.uv1=Vs(x,c)),E&&(f.uv2=Vs(E,c)),w&&(f.uv3=Vs(w,c))}if(n&&!f.normals&&h.computeVertexNormals(),o&&f.normals&&(f.normals=Vs(f.normals,l)),s&&V1(d,u),r&&h.index){let m=f.position.count,x=h.index,E=m>65535?Uint32Array:m>255?Uint16Array:Uint8Array;if(!(x.array instanceof E)){let w=new E(h.index.count);w.set(x.array);let p=new ne.BufferAttribute(w,1);h.setIndex(p)}}}})}};function On(e,t,n){return e&&t in e?e[t]:n}function Fg(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function F1(e){return/^FLOAT/.test(e)}function Gs(e){return/^VEC/.test(e)}function Ws(e){return/^MAT/.test(e)}function jg(e,t,n,i=null){return Ws(n)||Gs(n)?i.fromArray(e,t):e[t]}function tp(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new ne.Vector2;case"VEC3":return new ne.Vector3;case"VEC4":return new ne.Vector4;case"MAT2":return new ne.Matrix2;case"MAT3":return new ne.Matrix3;case"MAT4":return new ne.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function Ag(e,t){if(t==null)return!1;switch(e){case"SCALAR":return typeof t=="number"||typeof t=="bigint";case"VEC2":return t.isVector2;case"VEC3":return t.isVector3;case"VEC4":return t.isVector4;case"MAT2":return t.isMatrix2;case"MAT3":return t.isMatrix3;case"MAT4":return t.isMatrix4;case"BOOLEAN":return typeof t=="boolean";case"STRING":return typeof t=="string";case"ENUM":return typeof t=="number"||typeof t=="bigint"}throw Error("ClassProperty: invalid type.")}function Hs(e,t=null){switch(e){case"INT8":return Int8Array;case"INT16":return Int16Array;case"INT32":return Int32Array;case"INT64":return BigInt64Array;case"UINT8":return Uint8Array;case"UINT16":return Uint16Array;case"UINT32":return Uint32Array;case"UINT64":return BigUint64Array;case"FLOAT32":return Float32Array;case"FLOAT64":return Float64Array}switch(t){case"BOOLEAN":return Uint8Array;case"STRING":return Uint8Array}throw Error("ClassProperty: invalid type.")}function j1(e,t=null){if(e.array){t=t&&Array.isArray(t)?t:[],t.length=e.count;for(let n=0,i=t.length;n<i;n++)t[n]=Dc(e,t[n])}else t=Dc(e,t);return t}function Dc(e,t=null){let n=e.default,i=e.type;if(t||(t=tp(e)),n===null){switch(i){case"SCALAR":return 0;case"VEC2":return t.set(0,0);case"VEC3":return t.set(0,0,0);case"VEC4":return t.set(0,0,0,0);case"MAT2":return t.identity();case"MAT3":return t.identity();case"MAT4":return t.identity();case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return""}throw Error("ClassProperty: invalid type.")}else if(Ws(i))t.fromArray(n);else if(Gs(i))t.fromArray(n);else return n}function H1(e,t){if(e.noData===null)return t;let n=e.noData,i=e.type;if(Array.isArray(t))for(let o=0,s=t.length;o<s;o++)t[o]=r(t[o]);else t=r(t);return t;function r(o){return a(o)&&(o=Dc(e,o)),o}function a(o){if(Ws(i)){let s=o.elements;for(let c=0,l=n.length;c<l;c++)if(n[c]!==s[c])return!1;return!0}else if(Gs(i)){for(let s=0,c=n.length;s<c;s++)if(n[s]!==o.getComponent(s))return!1;return!0}else return n===o}}function G1(e,t){switch(e){case"INT8":return Math.max(t/127,-1);case"INT16":return Math.max(t,32767,-1);case"INT32":return Math.max(t/2147483647,-1);case"INT64":return Math.max(Number(t)/9223372036854776e3,-1);case"UINT8":return t/255;case"UINT16":return t/65535;case"UINT32":return t/4294967295;case"UINT64":return Number(t)/18446744073709552e3}}function W1(e,t){let{type:n,componentType:i,scale:r,offset:a,normalized:o}=e;if(Array.isArray(t))for(let d=0,h=t.length;d<h;d++)t[d]=s(t[d]);else t=s(t);return t;function s(d){return d=Ws(n)?l(d):Gs(n)?c(d):u(d),d}function c(d){return d.x=u(d.x),d.y=u(d.y),"z"in d&&(d.z=u(d.z)),"w"in d&&(d.w=u(d.w)),d}function l(d){let h=d.elements;for(let f=0,m=h.length;f<m;f++)h[f]=u(h[f]);return d}function u(d){return o&&(d=G1(i,d)),(o||F1(i))&&(d=d*r+a),d}}function ap(e,t,n=null){if(e.array){Array.isArray(t)||(t=Array(e.count||0)),t.length=n===null?e.count:n;for(let i=0,r=t.length;i<r;i++)Ag(e.type,t[i])||(t[i]=tp(e))}else Ag(e.type,t)||(t=tp(e));return t}function Bc(e,t){for(let n in t)n in e||delete t[n];for(let n in e){let i=e[n];t[n]=ap(i,t[n])}}function X1(e){switch(e){case"ENUM":return 1;case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":return 4;case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16;case"BOOLEAN":return-1;case"STRING":return-1;default:return-1}}var Oc=class{constructor(e,t,n=null){this.name=t.name||null,this.description=t.description||null,this.type=t.type,this.componentType=t.componentType||null,this.enumType=t.enumType||null,this.array=t.array||!1,this.count=t.count||0,this.normalized=t.normalized||!1,this.offset=t.offset||0,this.scale=On(t,"scale",1),this.max=On(t,"max",1/0),this.min=On(t,"min",-1/0),this.required=t.required||!1,this.noData=On(t,"noData",null),this.default=On(t,"default",null),this.semantic=On(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=On(n,"offset",this.offset),this.scale=On(n,"scale",this.scale),this.max=On(n,"max",this.max),this.min=On(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=On(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return ap(this,e,t)}resolveDefaultElement(e){return Dc(this,e)}resolveDefault(e){return j1(this,e)}resolveNoData(e){return H1(this,e)}resolveEnumsToStrings(e){let t=this.enumSet;if(this.type==="ENUM")if(Array.isArray(e))for(let i=0,r=e.length;i<r;i++)e[i]=n(e[i]);else e=n(e);return e;function n(i){let r=t.values.find(a=>a.value===i);return r===null?"":r.name}}adjustValueScaleOffset(e){return Fg(this.type)?W1(this,e):e}},op=class{constructor(e,t={},n={},i=null){this.definition=e,this.class=t[e.class],this.className=e.class,this.enums=n,this.data=i,this.name="name"in e?e.name:null,this.properties=null}getPropertyNames(){return Object.keys(this.class.properties)}includesData(e){return!!this.definition.properties[e]}dispose(){}_initProperties(e=Oc){let t={};for(let n in this.class.properties)t[n]=new e(this.enums,this.class.properties[n],this.definition.properties[n]);this.properties=t}},q1=class extends Oc{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},Y1=class extends op{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(q1)}getData(e,t,n={}){let i=this.properties;Bc(i,n);for(let r in i)n[r]=this.getPropertyValue(r,e,t,n[r]);return n}getPropertyValue(e,t,n,i=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let r=this.properties[e],a=r.type;if(!r)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return r.resolveDefault(i);i=r.shapeToProperty(i);let o=n.getAttribute(r.attribute.toLowerCase());if(Ws(a)){let s=i.elements;for(let c=s.length;0<c;)s[0]=o.getComponent(t,0)}else if(Gs(a))i.fromBufferAttribute(o,t);else if(a==="SCALAR"||a==="ENUM")i=o.getX(t);else throw Error("StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.");return i=r.adjustValueScaleOffset(i),i=r.resolveEnumsToStrings(i),i=r.resolveNoData(i),i}},$1=class extends Oc{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=X1(this.type),this.arrayOffsets=On(n,"arrayOffsets",null),this.stringOffsets=On(n,"stringOffsets",null),this.arrayOffsetType=On(n,"arrayOffsetType","UINT32"),this.stringOffsetType=On(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:i,arrayOffsetType:r}=this,a=new(Hs(r))(e[i]);n=a[t+1]-a[t]}return n}getIndexOffsetFromId(e,t){let n=t;if(this.arrayOffsets){let{arrayOffsets:i,arrayOffsetType:r}=this;n=new(Hs(r))(e[i])[n]}else this.array&&(n*=this.count);return n}},K1=class extends op{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties($1)}getData(e,t={}){let n=this.properties;Bc(n,t);for(let i in n)t[i]=this.getPropertyValue(i,e,t[i]);return t}_readValueAtIndex(e,t,n,i=null){let r=this.properties[e],{componentType:a,type:o}=r,s=this.data,c=s[r.values],l=new(Hs(a,o))(c),u=r.getIndexOffsetFromId(s,t);if(Fg(o)||o==="ENUM")return jg(l,(u+n)*r.valueLength,o,i);if(o==="STRING"){let d=u+n,h=0;if(r.stringOffsets!==null){let{stringOffsets:m,stringOffsetType:x}=r,E=new(Hs(x))(s[m]);h=E[d+1]-E[d],d=E[d]}let f=new Uint8Array(l.buffer,d,h);i=new TextDecoder().decode(f)}else if(o==="BOOLEAN"){let d=u+n,h=Math.floor(d/8),f=d%8;i=(l[h]>>f&1)==1}return i}getPropertyValue(e,t,n=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let i=this.properties[e];if(!i)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(n);let r=i.array,a=this.data,o=i.getArrayLengthFromId(a,t);if(n=i.shapeToProperty(n,o),r)for(let s=0,c=n.length;s<c;s++)n[s]=this._readValueAtIndex(e,t,s,n[s]);else n=this._readValueAtIndex(e,t,0,n);return n=i.adjustValueScaleOffset(n),n=i.resolveEnumsToStrings(n),n=i.resolveNoData(n),n}},Fs=new ne.Box2,Eg=class{constructor(){this._renderer=new ne.WebGLRenderer,this._target=new ne.WebGLRenderTarget(1,1),this._texTarget=new ne.WebGLRenderTarget,this._quad=new rp.FullScreenQuad(new ne.ShaderMaterial({blending:ne.CustomBlending,blendDst:ne.ZeroFactor,blendSrc:ne.OneFactor,uniforms:{map:{value:null},pixel:{value:new ne.Vector2}},vertexShader:`
|
|
3673
3673
|
void main() {
|
|
3674
3674
|
|
|
3675
3675
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
@@ -3684,6 +3684,6 @@ void main() {
|
|
|
3684
3684
|
gl_FragColor = texelFetch( map, pixel, 0 );
|
|
3685
3685
|
|
|
3686
3686
|
}
|
|
3687
|
-
`}))}increaseSizeTo(e){this._target.setSize(Math.max(this._target.width,e),1)}readDataAsync(e){let{_renderer:t,_target:n}=this;return t.readRenderTargetPixelsAsync(n,0,0,e.length/4,1,e)}readData(e){let{_renderer:t,_target:n}=this;t.readRenderTargetPixels(n,0,0,e.length/4,1,e)}renderPixelToTarget(e,t,n){let{_renderer:i,_target:r}=this;As.min.copy(t),As.max.copy(t),As.max.x+=1,As.max.y+=1,i.initRenderTarget(r),i.copyTextureToTexture(e,r.texture,As,n,0)}},Hi=new class{constructor(){let e=null;Object.getOwnPropertyNames(vg.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new vg),e[t](...n)))})}},xg=new ee.Vector2,yg=new ee.Vector2,wg=new ee.Vector2;function L1(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function kg(e,t,n=[,,,]){let i=3*t,r=3*t+1,a=3*t+2;return e.index&&(i=e.index.getX(i),r=e.index.getX(r),a=e.index.getX(a)),n[0]=i,n[1]=r,n[2]=a,n}function Dg(e,t,n,i,r){let[a,o,s]=i,c=L1(e,t);xg.fromBufferAttribute(c,a),yg.fromBufferAttribute(c,o),wg.fromBufferAttribute(c,s),r.set(0,0,0).addScaledVector(xg,n.x).addScaledVector(yg,n.y).addScaledVector(wg,n.z)}function Bg(e,t,n,i){let r=e.x-Math.floor(e.x),a=e.y-Math.floor(e.y),o=Math.floor(r*t%t),s=Math.floor(a*n%n);return i.set(o,s),i}var _g=new ee.Vector2,Sg=new ee.Vector2,Mg=new ee.Vector2,k1=class extends Mc{constructor(e,t,n=null){super(e,t,n),this.channels=Ln(n,"channels",[0]),this.index=Ln(n,"index",null),this.texCoord=Ln(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let i=this.type;if(i==="BOOLEAN"||i==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return Lg(e,t*this.valueLength,i,n)}},D1=class extends Ku{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(k1)}getData(e,t,n,i={}){let r=this.properties;_c(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return this.getPropertyValuesAtTexel(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}async getDataAsync(e,t,n,i={}){let r=this.properties;_c(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return await this.getPropertyValuesAtTexelAsync(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,i,r=[]){for(;r.length<e.length;)r.push(null);r.length=e.length,Hi.increaseSizeTo(r.length);let a=this.data,o=this.definition.properties,s=this.properties,c=kg(i,t);for(let d=0,h=e.length;d<h;d++){let m=e[d];if(!o[m])continue;let f=s[m],x=a[f.index];Dg(i,f.texCoord,n,c,_g),Bg(_g,x.image.width,x.image.height,Sg),Mg.set(d,0),Hi.renderPixelToTarget(x,Sg,Mg)}let l=new Uint8Array(e.length*4);if(this._asyncRead)return Hi.readDataAsync(l).then(()=>(u.call(this),r));return Hi.readData(l),u.call(this),r;function u(){for(let d=0,h=e.length;d<h;d++){let m=e[d],f=s[m],x=f.type;if(r[d]=$u(f,r[d]),!f)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!o[m]){r[d]=f.resolveDefault(r);continue}let E=f.valueLength*(f.count||1),w=f.channels.map(_=>l[4*d+_]),p=f.componentType,g=new(Rs(p,x))(E);if(new Uint8Array(g.buffer).set(w),f.array){let _=r[d];for(let S=0,T=_.length;S<T;S++)_[S]=f.readDataFromBuffer(g,S,_[S])}else r[d]=f.readDataFromBuffer(g,0,r[d]);r[d]=f.adjustValueScaleOffset(r[d]),r[d]=f.resolveEnumsToStrings(r[d]),r[d]=f.resolveNoData(r[d])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Xu=class{constructor(e,t,n,i=null,r=null){let{schema:a,propertyTables:o=[],propertyTextures:s=[],propertyAttributes:c=[]}=e,{enums:l,classes:u}=a,d=o.map(f=>new R1(f,u,l,n)),h=[],m=[];i&&(i.propertyTextures&&(h=i.propertyTextures.map(f=>new D1(s[f],u,l,t))),i.propertyAttributes&&(m=i.propertyAttributes.map(f=>new A1(c[f],u,l)))),this.schema=a,this.tableAccessors=d,this.textureAccessors=h,this.attributeAccessors=m,this.object=r,this.textures=t,this.nodeMetadata=i}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let i=Math.min(e.length,t.length);n.length=i;for(let r=0;r<i;r++){let a=this.tableAccessors[e[r]];n[r]=a.getData(t[r],n[r])}}if(Array.isArray(e)!==Array.isArray(n)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return n}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,n)=>n)),Array.isArray(e))return e.map(t=>{let n=this.tableAccessors[t];return{name:n.name,className:n.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;for(let r=0;r<i.length;r++)n[r]=i[r].getData(e,t,this.object.geometry,n[r]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;let r=[];for(let a=0;a<i.length;a++){let o=i[a].getDataAsync(e,t,this.object.geometry,n[a]).then(s=>{n[a]=s});r.push(o)}return await Promise.all(r),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let i=0;i<n.length;i++)t[i]=n[i].getData(e,this.object.geometry,t[i]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},Es="EXT_structural_metadata";function B1(e,t=[]){let n=e.json.textures?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{index:o}=r[a];i[o]===null&&(i[o]=e.loadTexture(o))}}),Promise.all(i)}function N1(e,t=[]){let n=e.json.bufferViews?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{values:o,arrayOffsets:s,stringOffsets:c}=r[a];i[o]===null&&(i[o]=e.getDependency("bufferView",o)),i[s]===null&&(i[s]=e.getDependency("bufferView",s)),i[c]===null&&(i[c]=e.getDependency("bufferView",c))}}),Promise.all(i)}var Ng=class{constructor(e){this.parser=e,this.name=Es}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Es))return;let i=null,r=t.json.extensions[Es];if(r.schemaUri){let{manager:c,path:l,requestHeader:u,crossOrigin:d}=t.options,h=new URL(r.schemaUri,l).toString(),m=new ee.FileLoader(c);m.setCrossOrigin(d),m.setResponseType("json"),m.setRequestHeader(u),i=m.loadAsync(h).then(f=>{r={...r,schema:f}})}let[a,o]=await Promise.all([B1(t,r.propertyTextures),N1(t,r.propertyTables),i]),s=new Xu(r,a,o);e.userData.structuralMetadata=s,e.traverse(c=>{if(t.associations.has(c)){let{meshes:l,primitives:u}=t.associations.get(c),d=t.json.meshes[l]?.primitives[u];if(d&&d.extensions&&d.extensions[Es]){let h=d.extensions[Es];c.userData.structuralMetadata=new Xu(r,a,o,h,c)}else c.userData.structuralMetadata=s}})}},Cg=new ee.Vector2,Tg=new ee.Vector2,Pg=new ee.Vector2;function O1(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var Og=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(i=>{let{texture:r,...a}=i,o={label:null,propertyTable:null,nullFeatureId:null,...a};return r&&(o.texture={texCoord:0,channels:[0],...r}),o})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:n,textures:i,featureIds:r}=this,a=Array(r.length).fill(null),o=r.length;Hi.increaseSizeTo(o);let s=kg(n,e),c=s[O1(t)];for(let d=0,h=r.length;d<h;d++){let m=r[d],f="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let x=i[m.texture.index];Dg(n,m.texture.texCoord,t,s,Cg),Bg(Cg,x.image.width,x.image.height,Tg),Pg.set(d,0),Hi.renderPixelToTarget(i[m.texture.index],Tg,Pg)}else if("attribute"in m){let x=n.getAttribute(`_feature_id_${m.attribute}`).getX(c);x!==f&&(a[d]=x)}else{let x=c;x!==f&&(a[d]=x)}}let l=new Uint8Array(o*4);if(this._asyncRead)return Hi.readDataAsync(l).then(()=>(u(),a));return Hi.readData(l),u(),a;function u(){let d=new Uint32Array(1);for(let h=0,m=r.length;h<m;h++){let f=r[h],x="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let{channels:E}=f.texture,w=E.map(g=>l[4*h+g]);new Uint8Array(d.buffer).set(w);let p=d[0];p!==x&&(a[h]=p)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Sc="EXT_mesh_features";function Ag(e,t,n){e.traverse(i=>{if(t.associations.has(i)){let{meshes:r,primitives:a}=t.associations.get(i),o=t.json.meshes[r]?.primitives[a];o&&o.extensions&&o.extensions[Sc]&&n(i,o.extensions[Sc])}})}var Ig=class{constructor(e){this.parser=e,this.name=Sc}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Sc))return;let i=t.json.textures?.length||0,r=Array(i).fill(null);Ag(e,t,(o,{featureIds:s})=>{s.forEach(c=>{if(c.texture&&r[c.texture.index]===null){let l=c.texture.index;r[l]=t.loadTexture(l)}})});let a=await Promise.all(r);Ag(e,t,(o,s)=>{o.userData.meshFeatures=new Og(o.geometry,a,s)})}},zg=class{constructor(){this.name="CESIUM_RTC"}afterRoot(e){if(e.parser.json.extensions&&e.parser.json.extensions.CESIUM_RTC){let{center:t}=e.parser.json.extensions.CESIUM_RTC;t&&(e.scene.position.x+=t[0],e.scene.position.y+=t[1],e.scene.position.z+=t[2])}}},Zu=class{constructor(e){e={metadata:!0,rtc:!0,plugins:[],dracoLoader:null,ktxLoader:null,meshoptDecoder:null,autoDispose:!0,...e},this.tiles=null,this.metadata=e.metadata,this.rtc=e.rtc,this.plugins=e.plugins,this.dracoLoader=e.dracoLoader,this.ktxLoader=e.ktxLoader,this.meshoptDecoder=e.meshoptDecoder,this._gltfRegex=/\.(gltf|glb)$/g,this._dracoRegex=/\.drc$/g,this._loader=null}init(e){let t=new Eg.GLTFLoader(e.manager);this.dracoLoader&&(t.setDRACOLoader(this.dracoLoader),e.manager.addHandler(this._dracoRegex,this.dracoLoader)),this.ktxLoader&&t.setKTX2Loader(this.ktxLoader),this.meshoptDecoder&&t.setMeshoptDecoder(this.meshoptDecoder),this.rtc&&t.register(()=>new zg),this.metadata&&(t.register(()=>new Ng),t.register(()=>new Ig)),this.plugins.forEach(n=>t.register(n)),e.manager.addHandler(this._gltfRegex,t),this.tiles=e,this._loader=t}dispose(){this.tiles.manager.removeHandler(this._gltfRegex),this.tiles.manager.removeHandler(this._dracoRegex),this.autoDispose&&(this.ktxLoader.dispose(),this.dracoLoader.dispose())}};var{clamp:fT}=ee.MathUtils;var gT=new qu.FullScreenQuad(new ee.MeshBasicMaterial),I1=new ee.DataTexture(new Uint8Array([255,255,255,255]),1,1);I1.needsUpdate=!0;var z1=0,U1=1,V1=2,F1=3,j1=4,H1=5,G1=6,W1=7,X1=8,q1=9,Y1=10,$1=11,bT=Object.freeze({NONE:z1,SCREEN_ERROR:U1,GEOMETRIC_ERROR:V1,DISTANCE:F1,DEPTH:j1,RELATIVE_DEPTH:H1,IS_LEAF:G1,RANDOM_COLOR:W1,RANDOM_NODE_COLOR:X1,CUSTOM_COLOR:q1,LOAD_ORDER:Y1,INDEXED_COLOR:$1});var vT=Math.PI/4,xT=3/5;var ji={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var yT=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:i}=this;return n in i||(t.setHSL(Math.random(),1,.5),i[n]=t.getHex()),t.set(i[n])}};var wT={[ji.NONE]:16777215,[ji.NOT_READY]:7829367,[ji.NO_FIT]:2250239,[ji.DEPTH]:4473924,[ji.OCCUPANCY]:65535,[ji.SPACING]:16776960,[ji.ANGLE]:16711680,[ji.FACING]:16711935};var _T=Math.PI/180;var ST=Ca*Math.PI*2;var MT=Ca*Math.PI*2;var jg=require("three/examples/jsm/loaders/DRACOLoader.js"),Hg=require("three/examples/jsm/loaders/KTX2Loader.js"),Gg=require("three/examples/jsm/libs/meshopt_decoder.module.js"),or=require("three");var Ds=require("three");function Ug(e){return!!e&&!e.isInterleavedBufferAttribute}function Vg(e,t,n,i){for(let r=0;r<e.count;r+=1)for(let a=0;a<e.itemSize;a+=1)t.setComponent(r,a,Ds.MathUtils.clamp(e.getComponent(r,a),n,i));return t}function K1(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let i=e.getComponent(t,n);if(!Number.isFinite(i)||i<0||i>1)return!1}return!0}var Cc=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let i=n.geometry;if(!i)return;let r=i.attributes.normal;Ug(r)&&!(r.array instanceof Int16Array)&&(i.attributes.normal=Vg(r,new Ds.BufferAttribute(new Int16Array(r.count*r.itemSize),r.itemSize,!0),-1,1));for(let a of["uv","uv1","uv2","uv3"]){let o=i.attributes[a];!Ug(o)||o.array instanceof Uint16Array||!K1(o)||(i.attributes[a]=Vg(o,new Ds.BufferAttribute(new Uint16Array(o.count*o.itemSize),o.itemSize,!0),0,1))}})}};var Bs=require("react/jsx-runtime"),Z1=0,Fg=4,J1=6,Q1=12,ew=4;function tw(e){try{let t=typeof window>"u"?new URL(e):new URL(e,window.location.href);return new URL("objects.json",t).toString()}catch{return null}}function Ju({url:e,rotation:t=[0,0,0],errorTarget:n=64,cacheSize:i=800,memoryBudgetMB:r=800,decoderConfig:a,objectBindings:o,itemMaterials:s,sceneConfig:c,selectedItem:l,panelHoveredItem:u,highlightOnHover:d=!0,onItemClick:h,onItemHover:m,onObjectCatalog:f,onTilesetBounds:x,onModelLoaded:E,onLoadError:w,nodeRefsOut:p,onNodeRefsChange:g,materialRefsOut:_,explodeFactor:S=0,suspendBindingTransforms:T=!1}){let{camera:P,gl:b,invalidate:y}=(0,Tc.useThree)(),M=(0,qe.useRef)(null),[C,N]=(0,qe.useState)(null),L=(0,qe.useRef)({onItemClick:h,onItemHover:m,onObjectCatalog:f,onTilesetBounds:x,onModelLoaded:E,onLoadError:w,onNodeRefsChange:g});L.current={onItemClick:h,onItemHover:m,onObjectCatalog:f,onTilesetBounds:x,onModelLoaded:E,onLoadError:w,onNodeRefsChange:g};let V=(0,qe.useRef)(!0),[U,D]=(0,qe.useState)(null),Y=(0,qe.useRef)(null);Y.current=U;let A=(0,qe.useRef)([]),k=(0,qe.useRef)(!1);(0,qe.useEffect)(()=>{let J=new tc;return D(J),()=>J.dispose()},[e]);let X=(0,qe.useRef)(null),$=(0,qe.useRef)(0),ue=(0,qe.useRef)(!1),De=r*1024*1024,xe=(0,qe.useRef)(!1),Oe=(0,qe.useRef)(xu),Pe=(0,qe.useRef)(null),Ie=(0,qe.useRef)(null),Et=(0,qe.useRef)(null);(0,qe.useEffect)(()=>()=>{Et.current!==null&&clearTimeout(Et.current)},[]);let Wt=a?.dracoDecoderPath??cu,Qe=a?.ktx2TranscoderPath??du,_e=a?.meshopt??!0,[ae,zt]=(0,qe.useState)(null);(0,qe.useEffect)(()=>{ue.current=!1,xe.current=!1;let J=new Gu(e);J.loadAncestors=!0;let Se=new sc;Se.priorityCallback=J.downloadQueue.priorityCallback,Se.maxJobsPerOrigin=Q1;let le=new ei;le.priorityCallback=J.parseQueue.priorityCallback,le.maxJobs=J1;let ze=new ei;ze.priorityCallback=J.processNodeQueue.priorityCallback,ze.maxJobs=J.processNodeQueue.maxJobs;let Ue=new bs;Ue.unloadPriorityCallback=J.lruCache.unloadPriorityCallback,J.downloadQueue=Se,J.parseQueue=le,J.processNodeQueue=ze,J.lruCache=Ue;let Fe=Wt?new jg.DRACOLoader().setDecoderPath(Wt).setWorkerLimit(ew):null,Ye=Qe?new Hg.KTX2Loader().setTranscoderPath(Qe).detectSupport(b):null;return J.registerPlugin(new Zu({dracoLoader:Fe,ktxLoader:Ye,meshoptDecoder:_e?Gg.MeshoptDecoder:null,autoDispose:!1})),J.registerPlugin(new Yu({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),J.registerPlugin(new Cc),zt(J),window.__riTiles=J,()=>{J.forEachLoadedModel(ye=>ga(ye)),J.dispose(),Fe?.dispose(),Ye?.dispose(),zt(ye=>ye===J?null:ye)}},[Wt,b,Qe,_e,e]),(0,qe.useEffect)(()=>{ae&&(Oe.current=xu,Pe.current=null,ae.errorTarget=n,ae.lruCache.maxSize=i,ae.lruCache.minSize=Math.max(1,Math.floor(i*.75)),ae.lruCache.maxBytesSize=De,ae.lruCache.minBytesSize=De*.75,y())},[i,n,y,De,ae]);let Rt=(0,qe.useMemo)(()=>{let J=o??{};return{objectBindings:J,keyByModelObject:Mf(J),itemMaterials:s,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:l??null,hoveredKey:Cf(C,u),highlightOnHover:d,suspendTransforms:T,placementFrame:ae?.group.matrixWorld,invalidate:y}},[C,d,y,s,o,u,c,l,T,ae]),et=(0,qe.useCallback)(()=>{if(!ae)return;let J=_t.current,Se=k.current?Y.current?.nodesByBinding(J)??{}:{},le={};ae.group.traverse(Ye=>{if(!Ye.isMesh)return;let ye=bu(Ye);if(!ye)return;let ut=J.keyByModelObject[ye]??ye;if(!J.objectBindings[ut])return;Se[ut]||(Se[ut]=Ye);let St=Ye.material;St&&(le[ut]=St)});let ze=p?.current??{},Ue=Object.keys(ze),Fe=Ue.length!==Object.keys(Se).length||Ue.some(Ye=>ze[Ye]!==Se[Ye]);p&&(p.current=Se),_&&(_.current=le),(Fe||!p)&&L.current.onNodeRefsChange?.()},[_,p,ae]),wt=(0,qe.useCallback)(J=>Ql(J,Rt),[Rt]),He=(0,qe.useCallback)(J=>Pf(J,Rt),[Rt]),Jt=(0,qe.useRef)(He);Jt.current=He;let _t=(0,qe.useRef)(Rt);_t.current=Rt;let Ve=(0,qe.useCallback)(()=>{let J=X.current,Se=$.current;return!J||Se<=0?_t.current:{..._t.current,explode:{factor:Se,centre:J.centre,radius:J.radius}}},[]);(0,qe.useEffect)(()=>{ae&&(He(ae.group),V.current=!0,ae.forEachLoadedModel(J=>{He(J),uo(J,Ve())}),y())},[He,y,Ve,ae]),(0,qe.useEffect)(()=>{let J=tw(e);if(!J)return;let Se=!1;return fetch(J).then(le=>le.ok?le.json():null).then(le=>{Se||!le?.objects||(A.current=le.objects,k.current=le.bindingFrame==="gltf-identity-v2",k.current&&Y.current?.setCatalog(le.objects),V.current=!0,L.current.onObjectCatalog?.(le.objects),y())}).catch(()=>{}),()=>{Se=!0}},[e,y,U]),(0,qe.useEffect)(()=>{if(!ae)return;let J=!1,Se=()=>y(),le=ye=>{ye.scene&&(ye.scene.traverse(ut=>{let St=ut.material;for(let en of Array.isArray(St)?St:St?[St]:[])en.transparent&&en.side===or.DoubleSide&&(en.forceSinglePass=!0)}),Jt.current(ye.scene),uo(ye.scene,Ve()),$a(ye.scene)),V.current=!0,J||(J=!0,L.current.onModelLoaded?.(ae.group)),y()},ze=ye=>{L.current.onLoadError?.(ye.error)},Ue=ye=>{ye.scene&&(vu(ye.scene),ga(ye.scene)),V.current=!0};ae.setCamera(P),ae.setResolutionFromRenderer(P,b),ae.addEventListener("needs-update",Se),ae.addEventListener("load-model",le),ae.addEventListener("load-error",ze),ae.addEventListener("dispose-model",Ue);let Fe=()=>{V.current=!0,y()};ae.addEventListener("tile-visibility-change",Fe);let Ye=()=>{let ye=ae.root;ye&&!ye.content?.uri&&ye.refine==="REPLACE"&&(ye.refine="ADD",y())};return ae.addEventListener("load-root-tileset",Ye),y(),()=>{ae.removeEventListener("needs-update",Se),ae.removeEventListener("load-model",le),ae.removeEventListener("load-error",ze),ae.removeEventListener("dispose-model",Ue),ae.removeEventListener("tile-visibility-change",Fe),ae.removeEventListener("load-root-tileset",Ye),vu(ae.group),ae.deleteCamera(P),p&&(p.current={}),_&&(_.current={})}},[P,b,y,_,p,Ve,ae]);let Lt=(0,qe.useCallback)(J=>{let Se=wt(J.object);Se&&(J.stopPropagation(),L.current.onItemClick?.(Se.binding))},[wt,h]),Qt=(0,qe.useCallback)(J=>{let Se=wt(J.object),le=Se?.key??null;le!==M.current&&(M.current=le,N(le),L.current.onItemHover?.(Se?.binding??null))},[wt]),Ae=(0,qe.useCallback)(()=>{M.current!==null&&(M.current=null,N(null),L.current.onItemHover?.(null))},[]);return(0,qe.useEffect)(()=>{y()},[y,ae]),(0,Tc.useFrame)((J,Se)=>{if(!ae)return;if(ae.setResolutionFromRenderer(P,b),k.current&&U){let nn=U.sync(Ve(),l,T);U.updateBounds(ae.root),T&&ae.forEachLoadedModel(F=>uo(F,nn))}if(ae.update(),!ue.current){let nn=new or.Box3;if(ae.getBoundingBox(nn)){ue.current=!0,ae.group.updateMatrixWorld(),nn.applyMatrix4(ae.group.matrixWorld);let F=nn.getBoundingSphere(new or.Sphere);X.current={centre:F.center.clone(),radius:nn.getSize(new or.Vector3).length()*.5},L.current.onTilesetBounds?.(nn),y()}}V.current&&(V.current=!1,et());let le=Math.min(Math.max(S,0),1),ze=$.current;Math.abs(ze-le)>1e-4?($.current=or.MathUtils.lerp(ze,le,1-Math.exp(-6*Se)),uo(ae.group,Ve()),y()):ze!==le&&($.current=le,uo(ae.group,Ve()),y());let Ue=ae,Fe=ae.lruCache,Ye=Fe.isFull(),ye=Oe.current,ut=ye.loosened&&Pe.current?Pe.current:{bytes:Fe.maxBytesSize,items:Fe.maxSize},St=0;for(let nn of Fe.usedSet??[])St+=Fe.bytesMap?.get(nn)??0;let en=!1,tn=ae;for(let nn of tn.usedSet??[]){let F=nn.internal?.loadingState??Fg;if(nn.traversal?.used&&nn.internal?.hasContent&&F>=Z1&&F<Fg){en=!0;break}}let rt=Ie.current??(Ie.current={world:new or.Matrix4,projection:new or.Matrix4}),st=!rt.world.equals(P.matrixWorld)||!rt.projection.equals(P.projectionMatrix);st&&(rt.world.copy(P.matrixWorld),rt.projection.copy(P.projectionMatrix));let hn={full:Ye,wanting:en,moved:st,usage:Math.max(St/Math.max(1,ut.bytes),(Fe.usedSet?.size??0)/Math.max(1,ut.items)),now:performance.now()},Xt=Of(ye,hn);Xt!==ye&&(Xt.loosened&&(!ye.loosened||Xt.raisedAt!==ye.raisedAt)?(ye.loosened||(Pe.current=ut),Fe.maxBytesSize=Math.max(ut.bytes,Fe.cachedBytes??0)*yu,Fe.maxSize=Math.ceil(Math.max(ut.items,Fe.itemSet?.size??0)*yu)):!Xt.loosened&&ye.loosened&&Pe.current&&(Fe.maxBytesSize=Pe.current.bytes,Fe.maxSize=Pe.current.items,Pe.current=null),Oe.current=Xt,ae.errorTarget=n*Xt.factor,y()),!xe.current&&Ye&&hn.wanting&&Xt.factor>=hs&&(xe.current=!0,console.warn("[react-immersive] The tile memory budget is full even at the coarsest level of detail, so the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB."));let Bn=If(Xt,hn);Bn===0?y():Bn!==null&&Et.current===null&&(Et.current=setTimeout(()=>{Et.current=null,y()},Bn)),((Ue.stats?.downloading??0)>0||(Ue.stats?.parsing??0)>0||Ue.loadProgress!==void 0&&Ue.loadProgress<1&&!Ye)&&y()}),ae?(0,Bs.jsxs)("group",{rotation:t,children:[U?(0,Bs.jsx)("primitive",{object:U.group}):null,(0,Bs.jsx)("primitive",{object:ae.group,onClick:Lt,onPointerMove:Qt,onPointerOut:Ae})]}):null}var $e=require("react"),Qu=require("@react-three/drei"),Pa=require("@react-three/fiber"),ni=require("three");var Fn=require("react/jsx-runtime"),nw=.02;function Wg(e,t){let n=(0,$e.useRef)(null),i=(0,Pa.useThree)(l=>l.scene),r=(0,$e.useRef)(null),a=(0,$e.useMemo)(()=>new ni.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),o=(0,$e.useMemo)(()=>new ni.Vector3,[]),s=(0,$e.useMemo)(()=>new ni.Vector3,[]),c=(0,$e.useMemo)(()=>new ni.Vector3,[]);return(0,$e.useEffect)(()=>{r.current=null},[e.anchorNodeName]),(0,Pa.useFrame)(({camera:l})=>{let u=n.current,d=u?.parent;if(!u||!d)return;let h=r.current;if(e.anchorNodeName&&(!h||!h.parent)&&(h=Ur(i,e.anchorNodeName),r.current=h),h?(h.updateWorldMatrix(!0,!1),o.copy(a).applyMatrix4(h.matrixWorld)):(o.copy(a),d.localToWorld(o)),t){let m=t.current.get(e.id);m||(m=new ni.Vector3,t.current.set(e.id,m)),m.copy(o)}c.copy(l.position).sub(o),c.lengthSq()>0?(c.normalize(),s.copy(o).addScaledVector(c,nw)):s.copy(o),d.worldToLocal(s),u.position.copy(s)}),n}function rw({annotation:e,occluders:t,worldPositionsRef:n,onClick:i,onHover:r,showAnnotationOnHover:a}){let[o,s]=(0,$e.useState)(!1),c=Wg(e,n),[l,u]=(0,$e.useState)(!1),[d,h]=(0,$e.useState)(1),m=(0,$e.useRef)(null),f=(0,$e.useRef)(null),x=(0,$e.useRef)(null);(0,$e.useEffect)(()=>()=>{m.current&&(clearTimeout(m.current),m.current=null),x.current&&(clearTimeout(x.current),x.current=null)},[]);let E=S=>{S.stopPropagation(),S.preventDefault(),m.current&&(clearTimeout(m.current),m.current=null),m.current=window.setTimeout(()=>{i?.(e),m.current=null},10)},w=S=>{S.stopPropagation(),u(!0),h(100),x.current&&(clearTimeout(x.current),x.current=null),r?.(e),a&&i?.(e)},p=S=>{S.stopPropagation(),u(!1),h(1),x.current&&clearTimeout(x.current),x.current=window.setTimeout(()=>{r?.(null),a&&r?.(null),x.current=null},50)},g=S=>{S.stopPropagation();let T=S.currentTarget;T.dataset.pointerX=String(S.clientX),T.dataset.pointerY=String(S.clientY)},_=S=>{S.stopPropagation();let T=S.currentTarget,P=parseFloat(T.dataset.pointerX||"0"),b=parseFloat(T.dataset.pointerY||"0"),y=S.clientX-P,M=S.clientY-b;Math.sqrt(y*y+M*M)<10&&E(S)};return(0,Fn.jsx)("group",{ref:c,children:(0,Fn.jsx)(Qu.Html,{center:!0,occlude:t,onOcclude:s,pointerEvents:o?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:o?"none":"auto",zIndex:d},className:"annotation-html-wrapper",transparent:!0,children:(0,Fn.jsx)("div",{ref:f,className:`ri-annotationMarker ${l?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:o?"none":"flex"},onPointerDown:g,onPointerUp:_,onPointerEnter:w,onPointerLeave:p,onDoubleClick:S=>{S.stopPropagation(),i?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:(0,Fn.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function iw({annotation:e,occluders:t,popupRef:n,onClose:i,hideCloseButton:r=!1}){let[a,o]=(0,$e.useState)(!1),s=Wg(e),c=(0,Fn.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:a?"none":"block"},onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[(0,Fn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,Fn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!r&&(0,Fn.jsx)("button",{onClick:l=>{l.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&(0,Fn.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return(0,Fn.jsx)("group",{ref:s,children:(0,Fn.jsx)(Qu.Html,{occlude:t,onOcclude:o,pointerEvents:a?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:a?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function ep({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:i,canvasRootRef:r,worldPositionsRef:a,modelLoaded:o,onAnnotationClick:s,onAnnotationHover:c,onCloseAnnotation:l,hideCloseButton:u=!1,showAnnotationOnHover:d=!1}){let h=(0,Pa.useThree)(U=>U.invalidate),m=(0,Pa.useThree)(U=>U.scene),[f,x]=(0,$e.useState)(null),[E,w]=(0,$e.useState)(!1),p=(0,$e.useRef)(null),g=(0,$e.useRef)(null),_=(0,$e.useRef)(null),S=(0,$e.useMemo)(()=>{let U=[];return m.traverse(D=>{let Y=D;Y.isMesh&&!Y.isSkinnedMesh&&U.push({current:D})}),U},[m,e,o]),T=(0,$e.useCallback)(()=>{h();let U=()=>{h(),g.current=window.requestAnimationFrame(()=>{h(),g.current=null})};g.current=window.requestAnimationFrame(U)},[h]);(0,$e.useEffect)(()=>{T()},[e,T]),(0,$e.useEffect)(()=>{T()},[n,T]),(0,$e.useEffect)(()=>()=>{g.current!==null&&window.cancelAnimationFrame(g.current),_.current&&clearTimeout(_.current)},[]);let P=E?f:n||f,b=(0,$e.useMemo)(()=>P?e.find(U=>U.id===P.id)??P:null,[P,e]),y=(0,$e.useCallback)(U=>{if(E&&f?.id===U.id){w(!1),x(null),l?.();return}w(!0),x(U),s?.(U)},[E,f,s,l]),M=(0,$e.useCallback)(U=>{c?.(U),d&&!E&&(_.current&&(clearTimeout(_.current),_.current=null),U?x(U):_.current=window.setTimeout(()=>{x(null),l?.(),_.current=null},100))},[E,c,d,l]),C=(0,$e.useCallback)(()=>{w(!1),x(null),l?.()},[l]),N=(0,$e.useCallback)(U=>{let D=U.target;if(D.closest?.(".ri-annotationMarker")||D.closest?.(".ri-viewAnnotationPopup")||D.closest?.(".annotation-html-wrapper"))return;let Y=r.current;Y&&Y.contains(D)&&(w(!1),x(null),l?.())},[r,l]),L=(0,$e.useCallback)(U=>{U.key==="Escape"&&E&&(w(!1),x(null),l?.())},[E,l]);(0,$e.useEffect)(()=>{let U=r.current;return U&&(U.addEventListener("click",N),U.addEventListener("pointerdown",N)),document.addEventListener("keydown",L),()=>{U&&(U.removeEventListener("click",N),U.removeEventListener("pointerdown",N)),document.removeEventListener("keydown",L)}},[r,N,L]);let V=(0,$e.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(U=>U*Math.PI/180),[t?.model.rotation]);return(0,$e.useEffect)(()=>{h()},[h,V]),(0,Pa.useFrame)((U,D)=>{if(!p.current)return;p.current.rotation.x=ni.MathUtils.lerp(p.current.rotation.x,V[0],1-Math.exp(-5*D)),p.current.rotation.y=ni.MathUtils.lerp(p.current.rotation.y,V[1],1-Math.exp(-5*D)),p.current.rotation.z=ni.MathUtils.lerp(p.current.rotation.z,V[2],1-Math.exp(-5*D));let{rotation:Y}=p.current;Math.abs(Y.x-V[0])+Math.abs(Y.y-V[1])+Math.abs(Y.z-V[2])>1e-4&&h()}),(0,Fn.jsxs)("group",{ref:p,children:[e.map(U=>{let D=`${U.worldPosition.join(",")}-${U.title}-${U.id}`;return(0,Fn.jsx)(rw,{annotation:U,occluders:S,worldPositionsRef:a,onClick:y,onHover:M,showAnnotationOnHover:d},D)}),b?(0,Fn.jsx)(iw,{annotation:b,occluders:S,popupRef:i,onClose:C,hideCloseButton:u},`popup-${b.id}`):null]})}var Ns=require("react"),Os=require("@react-three/drei"),Aa=require("three"),In=require("react/jsx-runtime"),aw="#22d3ee",ow="#facc15";function Pc(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function sw(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function Ac({position:e,children:t}){return(0,In.jsx)(Os.Html,{center:!0,position:e,zIndexRange:[20,0],children:(0,In.jsx)("div",{className:"ri-measureLabel",children:t})})}function lw({box:e,unit:t}){let n=(0,Ns.useMemo)(()=>[(e.min[0]+e.max[0])/2,(e.min[1]+e.max[1])/2,(e.min[2]+e.max[2])/2],[e.min,e.max]),i=(0,Ns.useMemo)(()=>{let[s,c,l]=e.size;return new Aa.EdgesGeometry(new Aa.BoxGeometry(s||1e-4,c||1e-4,l||1e-4))},[e.size]);(0,Ns.useEffect)(()=>()=>{i.dispose()},[i]);let[r,a,o]=e.size;return(0,In.jsxs)("group",{position:n,children:[(0,In.jsx)("lineSegments",{geometry:i,children:(0,In.jsx)("lineBasicMaterial",{color:ow})}),(0,In.jsxs)(Ac,{position:[0,-a/2,o/2],children:["W ",Pc(r,t)]}),(0,In.jsxs)(Ac,{position:[-r/2,0,o/2],children:["H ",Pc(a,t)]}),(0,In.jsxs)(Ac,{position:[r/2,-a/2,0],children:["D ",Pc(o,t)]})]})}function tp({points:e,unit:t,box:n,showDimensions:i}){return(0,In.jsxs)("group",{children:[e.map(r=>(0,In.jsx)(Os.Html,{center:!0,position:r.position,zIndexRange:[15,0],children:(0,In.jsx)("div",{className:"ri-measureDot"})},r.id)),e.slice(1).map((r,a)=>{let o=e[a].position,s=r.position,c=new Aa.Vector3(...o).distanceTo(new Aa.Vector3(...s));return(0,In.jsxs)("group",{children:[(0,In.jsx)(Os.Line,{points:[o,s],color:aw,lineWidth:2}),(0,In.jsx)(Ac,{position:sw(o,s),children:Pc(c,t)})]},`${e[a].id}-${r.id}`)}),i&&n?(0,In.jsx)(lw,{box:n,unit:t}):null]})}var at=require("react"),Ea=require("@react-three/xr"),$g=require("@react-three/fiber"),Is=require("three"),jr=require("react/jsx-runtime"),cw=1,Xg=1,dw=.1,uw=10;function pw(e,t){let[n,i,r]=e.size,a=(e.min[0]+e.max[0])/2,o=(e.min[2]+e.max[2])/2,s=Math.max(n,i,r)||1;return{scale:t==="real-world"?1:cw/s,offset:[-a,-e.min[1],-o]}}function qg(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function Yg(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var hw=(0,at.forwardRef)(function({box:t,scaleMode:n,children:i,onARStateChange:r},a){let o=(0,at.useRef)(null),s=(0,at.useRef)(null),c=(0,at.useRef)(null),l=(0,Ea.useXR)(D=>D.session!=null),u=(0,Ea.useXR)(D=>D.mode==="immersive-ar"),d=(0,at.useMemo)(()=>t?pw(t,n):null,[t,n]),h=(0,at.useRef)(new Is.Vector3(0,0,-Xg)),m=(0,at.useRef)(1),f=(0,at.useRef)(0),x=(0,at.useRef)(!0),E=(0,at.useRef)(!1),w=(0,at.useMemo)(()=>new Is.Matrix4,[]),p=(0,at.useRef)(new Is.Vector3),g=(0,at.useRef)(!1),_=(0,at.useRef)(null),S=(0,at.useRef)(!1),T=(0,at.useRef)(0),P=(0,at.useRef)(0),b=(0,at.useRef)(1),y=(0,at.useRef)(0),M=(0,at.useCallback)(()=>{if(!r||!u)return;let D={canPlace:g.current,isPlacementMode:x.current,isModelPlaced:E.current},Y=_.current;Y&&Y.canPlace===D.canPlace&&Y.isPlacementMode===D.isPlacementMode&&Y.isModelPlaced===D.isModelPlaced||(_.current=D,r(D))},[u,r]),C=(0,at.useCallback)(()=>!u||!g.current?!1:(h.current.copy(p.current),E.current=!0,x.current=!1,M(),!0),[M,u]),N=(0,at.useCallback)(()=>{u&&(x.current=!0,M())},[M,u]),L=(0,at.useCallback)(()=>{let D=C();return!D&&u&&(x.current=!1,M()),D},[M,u,C]),V=(0,at.useCallback)(()=>{u&&(x.current=!1,M())},[M,u]);(0,at.useImperativeHandle)(a,()=>({placeCurrent:C,startPlacementMode:N,finishPlacementMode:L,cancelPlacementMode:V}),[V,L,C,N]),(0,at.useEffect)(()=>{if(!l){h.current.set(0,0,-Xg),m.current=1,f.current=0,g.current=!1,S.current=!1,x.current=!0,E.current=!1,_.current=null;return}u&&(g.current=!1,S.current=!1,x.current=!0,E.current=!1,_.current=null,M())},[M,l,u]),(0,Ea.useXRHitTest)((D,Y)=>{if(!u||D.length===0){g.current&&(g.current=!1,M());return}Y(w,D[0])&&(p.current.setFromMatrixPosition(w),g.current||(g.current=!0,M()))},"viewer"),(0,Ea.useXRInputSourceEvent)("all","select",()=>{!u||S.current||!x.current||C()},[u,C]),(0,at.useEffect)(()=>{if(!u)return;let D=k=>{k.touches.length===2&&(S.current=!0,T.current=qg(k.touches),P.current=Yg(k.touches),b.current=m.current,y.current=f.current)},Y=k=>{if(!S.current||k.touches.length!==2)return;k.preventDefault();let X=qg(k.touches);if(T.current>0){let ue=X/T.current;m.current=Math.min(uw,Math.max(dw,b.current*ue))}let $=Yg(k.touches);f.current=y.current-($-P.current)},A=k=>{k.touches.length===0&&requestAnimationFrame(()=>{S.current=!1})};return window.addEventListener("touchstart",D),window.addEventListener("touchmove",Y,{passive:!1}),window.addEventListener("touchend",A),window.addEventListener("touchcancel",A),()=>{window.removeEventListener("touchstart",D),window.removeEventListener("touchmove",Y),window.removeEventListener("touchend",A),window.removeEventListener("touchcancel",A)}},[u]),(0,$g.useFrame)(()=>{let D=o.current,Y=s.current;if(!D||!Y)return;!l||!d?(D.visible=!0,D.position.set(0,0,0),D.rotation.set(0,0,0),Y.scale.setScalar(1)):(D.visible=!u||E.current,D.position.copy(h.current),D.rotation.set(0,f.current,0),Y.scale.setScalar(d.scale*m.current));let A=c.current;if(A){let k=u&&x.current&&g.current;A.visible=k,k&&A.position.copy(p.current)}});let U=l&&d?d.offset:[0,0,0];return(0,jr.jsxs)(jr.Fragment,{children:[(0,jr.jsxs)("mesh",{ref:c,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,jr.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,jr.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,jr.jsx)("group",{ref:o,children:(0,jr.jsx)("group",{ref:s,children:(0,jr.jsx)("group",{position:U,children:i})})})]})}),Kg=hw;var Ht=require("react"),Ec=require("@react-three/fiber"),kn=require("three"),mw=1.2;function np({controlsRef:e,sceneRef:t,config:n,playing:i,resetOnPlay:r=!1,onFinished:a,onUserInteract:o,onStop:s}){let c=(0,Ec.useThree)(V=>V.invalidate),l=(0,Ht.useMemo)(()=>n.waypoints??[],[n.waypoints]),u=l.length>=2,d=n.loop??!0,h=(0,Ht.useMemo)(()=>{if(l.length<2)return 24;let V=0;for(let U=0;U<l.length-1;U++)V+=l[U].segmentDuration??3.5;return d&&l.length>1&&(V+=l[l.length-1].segmentDuration??3.5),Math.max(V,4)},[l,d]),m=n.duration??h,f=(0,Ht.useMemo)(()=>l.map(V=>[...V.position,...V.target,V.azimuthAngle??"",V.polarAngle??"",V.segmentDuration??""].join(",")).join(";"),[l]),x=(0,Ht.useMemo)(()=>{let V=[];if(l.length<2)return V;let U=0;for(let D=0;D<l.length-1;D++)U+=l[D].segmentDuration??3.5,V.push(U);return d&&l.length>1&&(U+=l[l.length-1].segmentDuration??3.5,V.push(U)),V},[l,d]),E=(0,Ht.useMemo)(()=>V=>{if(l.length<2||x.length===0)return V/m;let U=x[x.length-1],D=d?V%m:Math.min(V,m),Y=m>0?D/m*U:0;for(let A=0;A<x.length;A++)if(Y<=x[A]){let k=A===0?0:x[A-1],X=x[A]-k,$=X>0?(Y-k)/X:0,ue=d?l.length:l.length-1,De=A/ue,xe=1/ue;return De+$*xe}return 1},[l.length,x,m,d]),w=(0,Ht.useMemo)(()=>u?{position:new kn.CatmullRomCurve3(l.map(V=>new kn.Vector3(...V.position)),d,"catmullrom",.5),target:new kn.CatmullRomCurve3(l.map(V=>new kn.Vector3(...V.target)),d,"catmullrom",.5)}:null,[f,u,d]),p=(0,Ht.useMemo)(()=>{if(!u||!l.every(U=>Number.isFinite(U.azimuthAngle)&&Number.isFinite(U.polarAngle)))return null;let V=l.map(U=>({azimuth:U.azimuthAngle,polar:U.polarAngle,distance:new kn.Vector3(...U.position).distanceTo(new kn.Vector3(...U.target))}));for(let U=1;U<V.length;U+=1){let D=V[U-1].azimuth,Y=V[U].azimuth;V[U].azimuth=Y+Math.round((D-Y)/(Math.PI*2))*Math.PI*2}return V},[f,u]),g=(0,Ht.useRef)(0),_=(0,Ht.useRef)(0),S=(0,Ht.useRef)(new kn.Vector3),T=(0,Ht.useRef)(new kn.Vector3),P=(0,Ht.useRef)(!1),b=(0,Ht.useRef)(0),y=(0,Ht.useRef)(!1),M=(0,Ht.useRef)(null),C=(0,Ht.useMemo)(()=>new kn.Vector3,[]),N=(0,Ht.useMemo)(()=>new kn.Vector3,[]),L=(0,Ht.useMemo)(()=>new kn.Spherical,[]);return(0,Ht.useEffect)(()=>{g.current=0,b.current=0,_.current=0,y.current=!1},[f,d,m]),(0,Ht.useEffect)(()=>{r&&(b.current=0,g.current=0,y.current=!1)},[r]),(0,Ht.useEffect)(()=>{if(!i){P.current=!1,g.current>0&&!r?b.current=g.current:r&&(b.current=0),(g.current>0||y.current)&&s?.();return}g.current>=m&&!d&&(g.current=0,b.current=0,y.current=!1);let V=e.current;if(V&&(V.getPosition(S.current),V.getTarget(T.current)),r||y.current||b.current===0?(g.current=0,b.current=0,y.current=!1):b.current>0&&b.current<m?g.current=b.current:(g.current=0,b.current=0),_.current=0,!u){let U=t.current;if(U){let D=new kn.Box3().setFromObject(U).getBoundingSphere(new kn.Sphere);M.current={center:D.center.clone(),radius:D.radius>0?D.radius:1}}}P.current=!0,c()},[i,u,e,t,c,m,d,f,r,s]),(0,Ht.useEffect)(()=>{if(!i||!o)return;let V=e.current;if(!V)return;let U=()=>{y.current||o()};return V.addEventListener("controlstart",U),()=>V.removeEventListener("controlstart",U)},[i,e,o]),(0,Ec.useFrame)((V,U)=>{if(!i||!P.current)return;let D=e.current;if(!D)return;g.current+=U,_.current+=U;let Y=E(g.current),A=!d&&g.current>=m;if(Y=d?Y%1:Math.min(Y,1),w)if(w.target.getPoint(Y,N),p){let X=d?p.length:p.length-1,$=Math.min(Y,1)*X,ue=Math.min(Math.floor($),X-1),De=(ue+1)%p.length,xe=Y>=1?1:$-ue,Oe=xe*xe*(3-2*xe),Pe=p[ue],Ie=p[De],Et=Ie.azimuth+Math.round((Pe.azimuth-Ie.azimuth)/(Math.PI*2))*Math.PI*2,Wt=Pe.azimuth+(Et-Pe.azimuth)*Oe,Qe=Pe.polar+(Ie.polar-Pe.polar)*Oe,_e=Pe.distance+(Ie.distance-Pe.distance)*Oe;L.set(Math.max(_e,1e-6),Math.min(Math.max(Qe,1e-6),Math.PI-1e-6),Wt),C.setFromSpherical(L).add(N)}else w.position.getPoint(Y,C);else{let X=M.current;if(!X)return;let $=Y*Math.PI*2,ue=X.radius*2.2;C.set(X.center.x+Math.cos($)*ue,X.center.y+X.radius*.6,X.center.z+Math.sin($)*ue),N.copy(X.center)}let k=Math.min(_.current/mw,1);if(k<1){let X=k*k*(3-2*k);C.lerpVectors(S.current,C,X),N.lerpVectors(T.current,N,X)}if(D.setLookAt(C.x,C.y,C.z,N.x,N.y,N.z,!1),A){P.current=!1,y.current=!0,g.current=0,b.current=0,a?.();return}c()}),null}var Lc=require("react");var fw="ri:license-grant:v1",gw={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},Zg=new Map;function Qg(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function Jg(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return Qg(t.padEnd(Math.ceil(t.length/4)*4,"="))}function bw(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 Rc(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 rp(e,t){return`${fw}:${t}:${e}`}function vw(e,t){let n=Zg.get(e);if(n)return n;let i=crypto.subtle.importKey("spki",Qg(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return Zg.set(e,i),i}async function ip(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[i,r,a,o,...s]=e.split("."),c=gw[r];if(i!=="ri1"||!c||!a||!o||s.length>0)return null;let l=JSON.parse(new TextDecoder().decode(Jg(a)));if(!bw(l)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await vw(r,c),Jg(o),new TextEncoder().encode(`${i}.${r}.${a}`)))return null;let d=Math.floor(Date.now()/1e3),h=l.expiresAt-l.issuedAt;return l.licenseKeyHash!==t||l.domain!==n||l.expiresAt<=d||l.issuedAt>d+300||h<=0||h>43200?null:{environment:l.environment,tier:l.tier,expiresAt:l.expiresAt}}catch{return null}}async function eb(e,t,n){try{return await ip(e,await Rc(t),n)}catch{return null}}async function tb(e,t,n){try{let i=await Rc(t);return await ip(e,i,n)?(localStorage.setItem(rp(i,n),e),!0):!1}catch{return!1}}async function nb(e,t){try{let n=await Rc(e),i=rp(n,t),r=localStorage.getItem(i);if(!r)return null;let a=await ip(r,n,t);return a||localStorage.removeItem(i),a}catch{return null}}async function ap(e,t){try{let n=await Rc(e);localStorage.removeItem(rp(n,t))}catch{}}var xw=["localhost","127.0.0.1","0.0.0.0"],yw=e=>xw.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),ib="https://react-immersive.liveroom.dev/api/validate-license",ww=()=>typeof window<"u",_w=300*1e3,Sw=5e3,Mw=400,sp=new Map,op=new Map,Gi=class extends Error{},ab=async(e,t,n)=>{let i=await nb(e,t);return i?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:i.environment,tier:i.tier,isLocalDomain:n}):null},rb=async(e,t,n)=>{let i=await ab(e,t,n);return i||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:n})},Cw=e=>e instanceof Gi||e instanceof TypeError,Tw=()=>new Promise(e=>setTimeout(e,Mw)),Pw=e=>e==="development"||e==="production",Aw=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&&!Pw(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},Ew=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},Rw=(e,t,n)=>`${n}::${e}::${t}`,Lw=e=>{let t=sp.get(e);return t?Date.now()-t.timestamp>_w?(sp.delete(e),null):t.result:null},kw=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),Dw=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function Bw(e,t,n,i){let r=Rw(e,t,i),a=Lw(r);if(a)return a;let o=op.get(r);if(o)return o;let s=(async()=>{for(let c=0;c<2;c+=1)try{return await Nw(e,t,n,r,i)}catch(l){if(!Cw(l))throw l;if(c===0){let u=await ab(e,t,n);if(u)return u;await Tw();continue}return rb(e,t,n)}return rb(e,t,n)})().finally(()=>{op.delete(r)});return op.set(r,s),s}async function Nw(e,t,n,i,r){let a=new AbortController,o=setTimeout(()=>a.abort(),Sw),s;try{s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:a.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(u){throw a.signal.aborted?new Gi("License validation timed out"):u}finally{clearTimeout(o)}let c;try{c=await s.json()}catch{throw new Gi(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new Gi(`License server error (${s.status})`);let u=Ew(c)??`License validation failed${s.status?` (${s.status})`:""}`;return await ap(e,t),Dw(u,n)}if(!Aw(c))throw new Gi("License server returned an unexpected payload");let l=kw(c,n);if(l.status==="valid"&&r!==ib){let u=c.offlineGrant?await eb(c.offlineGrant,e,t):null;if(!u)throw new Gi("License validation endpoint did not return a verifiable signed grant");l={...l,environment:u.environment,tier:u.tier}}return l.status==="valid"?(sp.set(i,{result:l,timestamp:Date.now()}),c.offlineGrant&&(await tb(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await ap(e,t),l}var kc=(e,t=ib)=>{let[n,i]=(0,Lc.useState)({status:"checking",isLocalDomain:!1});return(0,Lc.useEffect)(()=>{if(!ww())return;let r=!1,a=u=>{r||i(u)},o=e.trim(),s=window.location.hostname.toLowerCase(),c=yw(s);return a({status:"checking",isLocalDomain:c}),o?((async()=>{try{a(await Bw(o,s,c,t))}catch(u){let d=u instanceof TypeError?"Could not reach license server":u instanceof Error?u.message:"License validation failed";a({status:"invalid",reason:d,isLocalDomain:c})}})(),()=>{r=!0}):(a({status:"invalid",reason:"No license key provided",isLocalDomain:c}),()=>{r=!0})},[e,t]),n};var Zt=require("react");var Dn=require("react/jsx-runtime"),Ow={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},Iw={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"},Dc=({direction:e})=>{let t=Ow[e],n=Iw[e];return(0,Dn.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,Dn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,Dn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Ci=16,zw={"bottom-left":{bottom:Ci,left:Ci,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Ci,right:Ci,top:"auto",left:"auto",transform:"none"},"top-left":{top:Ci,left:Ci,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Ci,right:Ci,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:Ci,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},Uw=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:i=.001,rotateSensitivity:r=.01,position:a="center-bottom"})=>{let o=(0,Zt.useRef)(null),[s,c]=(0,Zt.useState)({x:0,y:0}),l=(0,Zt.useRef)(!1),u=(0,Zt.useRef)({x:0,y:0}),d=(0,Zt.useRef)(),h=(0,Zt.useRef)(),m=(0,Zt.useRef)(null),f=(0,Zt.useRef)(0),x=()=>e.current,E=(L,V,U)=>{let D=Math.hypot(L,V);if(D>U){let Y=U/D;return{x:L*Y,y:V*Y}}return{x:L,y:V}},w=L=>{let U=Math.abs(L);return U<.12?0:Math.sign(L)*((U-.12)/(1-.12))},p=(0,Zt.useCallback)(()=>{let L=()=>{let{x:V,y:U}=u.current,D=w(V),Y=w(U);if(t&&(D!==0||Y!==0)){let A=x();A&&A.rotate(-D*r,-Y*r,!0)}d.current=requestAnimationFrame(L)};d.current=requestAnimationFrame(L)},[t,r]),g=(0,Zt.useCallback)(()=>{d.current&&cancelAnimationFrame(d.current)},[]),_=(0,Zt.useCallback)((L,V)=>{if(!o.current||!l.current)return;let U=o.current.getBoundingClientRect(),D=U.left+U.width/2,Y=U.top+U.height/2,A=U.width/2-18,k=L-D,X=V-Y,$=E(k,X,A);c($),u.current={x:$.x/A,y:$.y/A}},[]),S=(0,Zt.useCallback)(L=>{if(!t)return;L.preventDefault(),L.stopPropagation(),l.current=!0,p();let V="touches"in L?L.touches[0]:L;_(V.clientX,V.clientY)},[t,p,_]),T=(0,Zt.useCallback)(L=>{if(!l.current)return;L.preventDefault();let V="touches"in L?L.touches[0]:L;_(V.clientX,V.clientY)},[_]),P=(0,Zt.useCallback)(()=>{l.current=!1,c({x:0,y:0}),u.current={x:0,y:0},g()},[g]),b=i*10,y=(0,Zt.useCallback)(L=>{t&&x()?.forward(L*b,!0)},[t,b]),M=(0,Zt.useCallback)(L=>{t&&x()?.truck(L*b,0,!0)},[t,b]),C=(0,Zt.useCallback)((L,V,U)=>{if(!t)return;h.current&&cancelAnimationFrame(h.current),m.current={control:L,amount:V,action:U},f.current=0,U(V);let D=Y=>{if(!m.current)return;if(f.current===0){f.current=Y,h.current=requestAnimationFrame(D);return}if(Y-f.current>200){let{amount:k,action:X}=m.current;X(k),f.current=Y}h.current=requestAnimationFrame(D)};h.current=requestAnimationFrame(D)},[t]),N=(0,Zt.useCallback)(L=>{m.current?.control===L&&(h.current&&(cancelAnimationFrame(h.current),h.current=void 0),m.current=null,f.current=0)},[]);return(0,Zt.useEffect)(()=>(window.addEventListener("mousemove",T),window.addEventListener("mouseup",P),window.addEventListener("touchmove",T,{passive:!1}),window.addEventListener("touchend",P),window.addEventListener("touchcancel",P),()=>{window.removeEventListener("mousemove",T),window.removeEventListener("mouseup",P),window.removeEventListener("touchmove",T),window.removeEventListener("touchend",P),window.removeEventListener("touchcancel",P),g(),h.current&&cancelAnimationFrame(h.current)}),[T,P,g]),t?(0,Dn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...zw[a]},children:(0,Dn.jsxs)("div",{className:"mc__dpad",children:[(0,Dn.jsx)("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>C("up",1,y),onMouseUp:()=>N("up"),onMouseLeave:()=>N("up"),onTouchStart:L=>{L.preventDefault(),C("up",1,y)},onTouchEnd:()=>N("up"),onTouchCancel:()=>N("up"),children:(0,Dn.jsx)(Dc,{direction:"up"})}),(0,Dn.jsxs)("div",{className:"mc__middle-row",children:[(0,Dn.jsx)("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>C("left",-1,M),onMouseUp:()=>N("left"),onMouseLeave:()=>N("left"),onTouchStart:L=>{L.preventDefault(),C("left",-1,M)},onTouchEnd:()=>N("left"),onTouchCancel:()=>N("left"),children:(0,Dn.jsx)(Dc,{direction:"left"})}),(0,Dn.jsx)("div",{ref:o,className:"mc__joystick",onMouseDown:S,onTouchStart:S,children:(0,Dn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${s.x}px, ${s.y}px)`}})}),(0,Dn.jsx)("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>C("right",1,M),onMouseUp:()=>N("right"),onMouseLeave:()=>N("right"),onTouchStart:L=>{L.preventDefault(),C("right",1,M)},onTouchEnd:()=>N("right"),onTouchCancel:()=>N("right"),children:(0,Dn.jsx)(Dc,{direction:"right"})})]}),(0,Dn.jsx)("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>C("down",-1,y),onMouseUp:()=>N("down"),onMouseLeave:()=>N("down"),onTouchStart:L=>{L.preventDefault(),C("down",-1,y)},onTouchEnd:()=>N("down"),onTouchCancel:()=>N("down"),children:(0,Dn.jsx)(Dc,{direction:"down"})})]})}):null},ob=Uw;var sb=require("react-colorful"),Wi=require("react/jsx-runtime"),lp=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:i,inline:r=!1})=>(0,Wi.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:a=>a.stopPropagation(),children:[(0,Wi.jsx)("p",{className:"ri-popoverLabel",children:"Color"}),(0,Wi.jsx)(sb.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>i(o=>({...o,[e.objectId]:{...o[e.objectId],hex:a}}))}),(0,Wi.jsxs)("div",{className:"ri-inlineRow",children:[(0,Wi.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,Wi.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});var $n=require("react/jsx-runtime"),cp=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:i,inline:r=!1})=>(0,$n.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:a=>a.stopPropagation(),children:[(0,$n.jsx)("div",{className:"ri-popoverHeader",children:(0,$n.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),(0,$n.jsxs)("div",{className:"ri-materialBody",children:[t?(0,$n.jsx)("div",{className:"ri-previewFrame",children:(0,$n.jsx)("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):(0,$n.jsxs)("div",{className:"ri-emptyState",children:[(0,$n.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,$n.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,$n.jsx)("span",{style:{fontSize:12},children:"No texture applied"})]}),(0,$n.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&(0,$n.jsx)("button",{onClick:()=>i(e.objectId),className:"ri-removeButton",children:"Remove texture"}),(0,$n.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"})]})]});var _r=require("react");var vt=require("react/jsx-runtime");function lb({entries:e}){return(0,vt.jsx)(vt.Fragment,{children:e.map(([t,n])=>{let i=n!==null&&typeof n=="object",r=i?Object.entries(n):[];return i&&r.length>0?(0,vt.jsxs)("div",{className:"left-panel__data-group",children:[(0,vt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,vt.jsx)("div",{className:"left-panel__data-children",children:(0,vt.jsx)(lb,{entries:r})})]},t):(0,vt.jsxs)("div",{className:"left-panel__data-row",children:[(0,vt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,vt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:i?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function Vw({content:e}){let t=e!=null,[n,i]=(0,_r.useState)(t),[r,a]=(0,_r.useState)(t),o=(0,_r.useRef)(e);return t&&(o.current=e),(0,_r.useEffect)(()=>{if(t){i(!0);return}if(n){a(!1);let s=setTimeout(()=>i(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,_r.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>a(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,vt.jsx)("div",{className:`left-panel__action-extra${r?" left-panel__action-extra--open":""}`,children:(0,vt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??o.current})}):null}function dp({isOpen:e,selectedObject:t,currentAction:n,onClose:i,onAction:r,renderActionExtra:a}){let[o,s]=(0,_r.useState)(t);(0,_r.useEffect)(()=>{t&&s(t)},[t]);let c=t??o,l=c?Object.entries(c).filter(([u])=>u!=="actions"):[];return(0,vt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:c&&(0,vt.jsxs)(vt.Fragment,{children:[(0,vt.jsxs)("div",{className:"left-panel__header",children:[(0,vt.jsx)("p",{className:"left-panel__title",children:c.label}),(0,vt.jsx)("button",{onClick:i,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),l.length>0&&(0,vt.jsx)("div",{className:"left-panel__data",children:(0,vt.jsx)(lb,{entries:l})}),(0,vt.jsx)("hr",{className:"left-panel__divider"}),c.actions&&c.actions.length>0&&(0,vt.jsxs)(vt.Fragment,{children:[(0,vt.jsx)("div",{className:"left-panel__actions-label",children:"Actions"}),(0,vt.jsx)("div",{className:"left-panel__actions-list",children:c.actions.map((u,d)=>{let h=n?.action.id===u.id&&(n.binding===c||n.binding?.id===c.id||n.binding?.modelObjectId===c.modelObjectId||n.objectId===c.id||n.objectId===c.modelObjectId),m=a?.(u.id);return(0,vt.jsxs)(_r.Fragment,{children:[(0,vt.jsx)("button",{onClick:f=>r({objectId:c.modelObjectId||c.id||"",action:u,binding:c,screenX:f.clientX,screenY:f.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${u.id}`,h?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":u.id,"data-label":u.label,children:u.label}),(0,vt.jsx)(Vw,{content:m})]},d)})})]})]})})}var zs=require("react"),ub=require("lucide-react");var cb=require("react");var jn=require("react/jsx-runtime");function db({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:i,searchValue:r,onSearchChange:a,searchPlaceholder:o,children:s,isOpen:c,onToggle:l,openButtonIcon:u,closeButtonIcon:d,closeButtonAriaLabel:h}){let[m,f]=(0,cb.useState)(!1),x=c!==void 0?c:m,E=w=>{c===void 0&&f(w),l?.(w)};return(0,jn.jsxs)("div",{className:`ri-sidepanel-wrap ${x?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!x&&(0,jn.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>E(!0),"aria-label":t,title:"Open panel",children:[u,e?(0,jn.jsx)("span",{children:e}):null]}),(0,jn.jsxs)("div",{className:`ri-sidepanel ${x?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!x,children:[(0,jn.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,jn.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,jn.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,jn.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>E(!1),"aria-label":h,title:"Close",children:d??(0,jn.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,jn.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,jn.jsx)("p",{className:"ri-sidepanel__title",children:i})]}),(0,jn.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,jn.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:o,value:r,onChange:w=>a(w.target.value)})}),(0,jn.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var ri=require("react/jsx-runtime");function up({objectBindings:e,onAction:t,onFocus:n,onHover:i,isOpen:r,onToggle:a}){let[o,s]=(0,zs.useState)(null),[c,l]=(0,zs.useState)(""),u=(0,zs.useMemo)(()=>Object.entries(e).filter(([d,h])=>{let m=c.toLowerCase();return d.toLowerCase().includes(m)||(h.label??"").toLowerCase().includes(m)}),[e,c]);return(0,ri.jsx)(db,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:(0,ri.jsx)(ub.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${u.length} visible entries`,searchValue:c,onSearchChange:l,searchPlaceholder:"Search nodes, labels",isOpen:r,onToggle:a,closeButtonAriaLabel:"Close scene objects panel",children:u.map(([d,h])=>{let m=h.visible!==!1,f=o===d;return(0,ri.jsxs)("div",{onClick:()=>n(h),onMouseEnter:()=>{s(d),i?.(h)},onMouseLeave:()=>{s(null),i?.(null)},className:`ri-sidepanel__row${f?" ri-sidepanel__row--hovered":""}`,children:[(0,ri.jsx)("span",{className:`ri-sidepanel__label${f?" ri-sidepanel__label--hovered":""}`,children:h.label??d}),(0,ri.jsx)("button",{type:"button",onClick:x=>{x.stopPropagation(),t?.({objectId:d,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:h})},className:"ri-sidepanel__vis-btn",title:m?"Hide":"Show",children:(0,ri.jsx)("span",{className:`ri-sidepanel__checkbox${m?" ri-sidepanel__checkbox--checked":""}`,children:m&&(0,ri.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,ri.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},d)})})}var Te=require("lucide-react");var Bc=require("react"),pp=(0,Bc.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Sr=()=>(0,Bc.useContext)(pp);var Xi=require("react/jsx-runtime");function bo({visible:e,message:t,tone:n="default",progress:i}){if(!e)return null;let r=typeof i=="number"&&Number.isFinite(i),a=r?Math.min(Math.max(i,0),100):0,o=Math.round(a);return(0,Xi.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[r&&(0,Xi.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,Xi.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":o,children:(0,Xi.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${o}%`}})}),(0,Xi.jsxs)("span",{className:"bb-loadingProgress__label",children:[o,"%"]})]}),(0,Xi.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}var hp=new WeakSet;function vo(e){hp.add(e)}function pb(e){let t=hp.has(e);return t&&hp.delete(e),t}var Le=require("react"),zc=require("@react-three/fiber"),Uc=require("@react-three/drei"),nt=require("three");var hb="data:image/png;base64,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";var mb="data:image/png;base64,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";var fb="data:image/png;base64,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";var We=require("react/jsx-runtime"),mp=-100,fp=100,Sb=.03,Gw=.03,Ww=.03,gb=.5,Xw=hb,qw=mb,Yw=fb,$w=Math.PI/4,bb=.4,xo=64,vb=Sb*3,gp="#4d7dff",xb="#ffcc00",yb=.02,Kw=new nt.Vector3(0,1,0),Nc=32,wb="#ff9d3d",Oc=4;function bp(e){let t=new Float32Array((xo+1)*3);for(let n=0;n<=xo;n++){let i=n/xo*Math.PI*2,r=Math.cos(i)*bb,a=Math.sin(i)*bb,o=0,s=0,c=0;e==="x"?(s=r,c=a):e==="y"?(o=r,c=a):(o=r,s=a),t[n*3]=o,t[n*3+1]=s,t[n*3+2]=c}return t}function Zw(e){let t=Math.abs(e.y)<.99?new nt.Vector3(0,1,0):new nt.Vector3(1,0,0),n=new nt.Vector3().crossVectors(e,t).normalize(),i=new nt.Vector3().crossVectors(e,n).normalize();return[n,i]}function _b(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}var yo=null,vp=new Set;function Us(e){yo!==e&&(yo=e,vp.forEach(t=>t()))}function xp(e){return vp.add(e),()=>vp.delete(e)}function Ic(){return yo}function Mb({light:e,position:t,rotation:n=[0,0,0],color:i,intensity:r,visible:a,onPositionChange:o,onRotationChange:s,onDraggingChange:c}){let{activeTab:l,activeSubTab:u,setActiveTab:d,setActiveSubTab:h}=Sr(),{camera:m,gl:f,raycaster:x,invalidate:E}=(0,zc.useThree)(),w=(0,Le.useRef)(null),p=(0,Le.useRef)(null),g=(0,Le.useRef)(null),_=(0,Le.useRef)(null),S=(0,Le.useRef)(null),T=(0,Le.useRef)(null),P=(0,Le.useRef)(null),b=(0,Le.useRef)(null),y=(0,Le.useRef)(null),M=(0,Le.useRef)(null),C=(0,Le.useRef)(null),N=(0,Le.useMemo)(()=>new nt.Matrix4,[]),L=(0,Le.useMemo)(()=>new nt.Quaternion,[]),V=(0,Le.useMemo)(()=>new nt.Vector3(1,1,1),[]),U=(0,Le.useRef)([0,0,0]),D=(0,Le.useRef)([0,0,0]),Y=(0,Le.useRef)(!1),A=(0,Le.useRef)(null),k=(0,Le.useRef)(null),X=(0,Le.useRef)(null),$=(0,Le.useRef)(c);(0,Le.useEffect)(()=>{$.current=c},[c]);let ue=(0,Le.useMemo)(()=>new nt.Vector3(t[0],t[1],t[2]),[t]),De=(0,Le.useMemo)(()=>new nt.Euler(n[0],n[1],n[2]),[n]),xe=(0,Le.useMemo)(()=>new Float32Array(6),[]),Oe=(0,Le.useMemo)(()=>bp("x"),[]),Pe=(0,Le.useMemo)(()=>bp("y"),[]),Ie=(0,Le.useMemo)(()=>bp("z"),[]),Et=(0,Le.useMemo)(()=>new Float32Array((Nc+1)*3),[]),Wt=(0,Le.useMemo)(()=>new Float32Array(Oc*2*3),[]),Qe=e?.type==="point",_e=e?.type==="spot",ae=Qe?qw:_e?Yw:Xw,zt=Qe?Gw:_e?Ww:Sb,Rt=(0,Le.useMemo)(()=>new nt.TextureLoader().load(ae),[ae]),et=(0,Le.useSyncExternalStore)(xp,Ic,Ic),wt=!!e&&et===e.id,He=(0,Le.useRef)(new nt.Vector3),Jt=(0,Le.useRef)(new nt.Euler);(0,Le.useEffect)(()=>{Y.current||(He.current.copy(ue),Jt.current.copy(De),E())},[ue,De,E]),(0,Le.useEffect)(()=>{e&&yo===e.id&&!a&&Us(null)},[e?.id,a]),(0,Le.useEffect)(()=>()=>{e&&yo===e.id&&Us(null),X.current!==null&&(cancelAnimationFrame(X.current),X.current=null)},[e?.id]);let _t=(0,Le.useCallback)(()=>{if(Y.current||!wt)return;let Ae=He.current,J=new nt.Quaternion().setFromEuler(Jt.current);N.compose(Ae,J,V)},[N,V,wt]);(0,zc.useFrame)(()=>{if(w.current&&w.current.position.copy(He.current),_t(),g.current){g.current.lookAt(m.position);let Ae=m,J;Ae.isOrthographicCamera?J=zt/Ae.zoom:J=m.position.distanceTo(He.current)*zt,g.current.scale.setScalar(J)}if(P.current){let Ae=m,J;Ae.isOrthographicCamera?J=vb/Ae.zoom:J=m.position.distanceTo(He.current)*vb,P.current.scale.setScalar(J)}if(S.current){let Ae=S.current.getAttribute("position"),J=Ae.array;J[0]=0,J[1]=0,J[2]=0,J[3]=He.current.x,J[4]=He.current.y,J[5]=He.current.z,Ae.needsUpdate=!0,S.current.computeBoundingSphere()}if(T.current){let Ae=He.current,J=Ae.length();T.current.visible=J>gb,J>1e-6&&(T.current.position.copy(Ae).multiplyScalar(.5),T.current.scale.set(1,J,1),T.current.quaternion.setFromUnitVectors(Kw,Ae.clone().normalize()))}if(_.current&&(_.current.visible=He.current.length()>gb),_e&&b.current&&y.current&&M.current){let Ae=He.current,J=Ae.length();if(J>1e-6){b.current.visible=!0;let Se=Ae.clone().negate().normalize(),le=J,ze=e?.angle??Math.PI/6,Ue=le*Math.tan(ze),Fe=Ae.clone().add(Se.clone().multiplyScalar(le)),[Ye,ye]=Zw(Se),ut=y.current.getAttribute("position"),St=ut.array;for(let rt=0;rt<=Nc;rt++){let st=rt/Nc*Math.PI*2,hn=Fe.x+(Ye.x*Math.cos(st)+ye.x*Math.sin(st))*Ue,Xt=Fe.y+(Ye.y*Math.cos(st)+ye.y*Math.sin(st))*Ue,Bn=Fe.z+(Ye.z*Math.cos(st)+ye.z*Math.sin(st))*Ue;St[rt*3]=hn,St[rt*3+1]=Xt,St[rt*3+2]=Bn}ut.needsUpdate=!0,y.current.computeBoundingSphere();let en=M.current.getAttribute("position"),tn=en.array;for(let rt=0;rt<Oc;rt++){let st=rt/Oc*Math.PI*2,hn=Fe.x+(Ye.x*Math.cos(st)+ye.x*Math.sin(st))*Ue,Xt=Fe.y+(Ye.y*Math.cos(st)+ye.y*Math.sin(st))*Ue,Bn=Fe.z+(Ye.z*Math.cos(st)+ye.z*Math.sin(st))*Ue,zn=rt*6;tn[zn]=Ae.x,tn[zn+1]=Ae.y,tn[zn+2]=Ae.z,tn[zn+3]=hn,tn[zn+4]=Xt,tn[zn+5]=Bn}en.needsUpdate=!0,M.current.computeBoundingSphere()}else b.current.visible=!1}});let Ve=(0,Le.useCallback)(()=>{X.current!==null&&(cancelAnimationFrame(X.current),X.current=null),U.current=t,D.current=[n[0],n[1],n[2]],Y.current=!0,A.current=null,k.current=null,$.current?.(!0)},[t,n]),Lt=(0,Le.useCallback)((Ae,J,Se,le)=>{let ze=new nt.Vector3(U.current[0],U.current[1],U.current[2]),Ue=new nt.Vector3,Fe=new nt.Quaternion,Ye=new nt.Vector3;le.decompose(Ue,Fe,Ye);let ye=ze.clone().applyMatrix4(le),ut=[Math.min(Math.max(ye.x,mp),fp),Math.min(Math.max(ye.y,mp),fp),Math.min(Math.max(ye.z,mp),fp)],St=new nt.Quaternion().setFromEuler(new nt.Euler(D.current[0],D.current[1],D.current[2],"XYZ")),en=new nt.Quaternion().copy(Fe).multiply(St),tn=new nt.Euler().setFromQuaternion(en,"XYZ"),rt=[tn.x,tn.y,tn.z];He.current.set(ut[0],ut[1],ut[2]),Jt.current.set(rt[0],rt[1],rt[2]),A.current=ut,k.current=rt;let st=new nt.Quaternion().setFromEuler(Jt.current);N.compose(He.current,st,V),E()},[N,V,E]),Qt=(0,Le.useCallback)(()=>{Y.current=!1;let Ae=A.current,J=k.current;A.current=null,k.current=null;let Se=Ae&&!_b(Ae,U.current),le=J&&!_b(J,D.current);Se&&o&&o(Ae),le&&s&&s(J),Se||le?X.current=requestAnimationFrame(()=>{X.current=null,$.current?.(!1)}):$.current?.(!1)},[o,s]);return(0,Le.useEffect)(()=>{let Ae=le=>{let ze=f.domElement.getBoundingClientRect();return new nt.Vector2((le.clientX-ze.left)/ze.width*2-1,-((le.clientY-ze.top)/ze.height)*2+1)},J=le=>!!le.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Se=le=>{if(J(le))return;let ze=Ae(le);x.setFromCamera(ze,m);let Ue=[];if(p.current&&Ue.push(p.current),g.current&&Ue.push(g.current),Ue.length===0)return;if(x.intersectObjects(Ue,!1).length>0){let Ye=e?.id??null;yo!==Ye&&(Us(Ye),d?.("scene"),h?.("Lighting")),le.preventDefault(),le.stopPropagation()}};return f.domElement.addEventListener("pointerdown",Se),()=>{f.domElement.removeEventListener("pointerdown",Se)}},[m,x,f,e,d,h]),l!=="scene"||u!=="Lighting"||!e||!a||e.type==="none"||e.type==="hemisphere"?null:(0,We.jsxs)("group",{ref:Ae=>{Ae&&Fh(Ae)},children:[(0,We.jsxs)("group",{ref:w,children:[(0,We.jsx)("sprite",{ref:g,children:(0,We.jsx)("spriteMaterial",{map:Rt,transparent:!0,opacity:.9,blending:nt.AdditiveBlending,depthWrite:!1,rotation:_e?$w:0},ae)}),(0,We.jsx)(Uc.Sphere,{ref:p,args:[.25,16,16],children:(0,We.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),Qe&&(0,We.jsxs)("group",{ref:P,children:[(0,We.jsxs)("lineLoop",{renderOrder:999,children:[(0,We.jsx)("bufferGeometry",{children:(0,We.jsx)("bufferAttribute",{attach:"attributes-position",args:[Oe,3],count:xo+1})}),(0,We.jsx)("lineBasicMaterial",{color:gp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,We.jsxs)("lineLoop",{renderOrder:999,children:[(0,We.jsx)("bufferGeometry",{children:(0,We.jsx)("bufferAttribute",{attach:"attributes-position",args:[Pe,3],count:xo+1})}),(0,We.jsx)("lineBasicMaterial",{color:gp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,We.jsxs)("lineLoop",{renderOrder:999,children:[(0,We.jsx)("bufferGeometry",{children:(0,We.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ie,3],count:xo+1})}),(0,We.jsx)("lineBasicMaterial",{color:gp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!Qe&&!_e&&(0,We.jsxs)(We.Fragment,{children:[(0,We.jsxs)("mesh",{ref:T,children:[(0,We.jsx)("cylinderGeometry",{args:[yb,yb,1,8,1,!0]}),(0,We.jsx)("meshBasicMaterial",{color:xb,transparent:!0,opacity:.05,blending:nt.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,We.jsxs)("line",{ref:_,children:[(0,We.jsx)("bufferGeometry",{ref:S,children:(0,We.jsx)("bufferAttribute",{attach:"attributes-position",args:[xe,3],count:2})}),(0,We.jsx)("lineBasicMaterial",{color:xb,transparent:!0,opacity:.7,blending:nt.AdditiveBlending})]})]}),_e&&(0,We.jsxs)("group",{ref:b,children:[(0,We.jsxs)("lineLoop",{renderOrder:999,children:[(0,We.jsx)("bufferGeometry",{ref:y,children:(0,We.jsx)("bufferAttribute",{attach:"attributes-position",args:[Et,3],count:Nc+1})}),(0,We.jsx)("lineBasicMaterial",{color:wb,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,We.jsxs)("lineSegments",{renderOrder:999,children:[(0,We.jsx)("bufferGeometry",{ref:M,children:(0,We.jsx)("bufferAttribute",{attach:"attributes-position",args:[Wt,3],count:Oc*2})}),(0,We.jsx)("lineBasicMaterial",{color:wb,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),wt&&o&&(0,We.jsx)(Uc.PivotControls,{ref:C,matrix:N,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Ve,onDrag:Lt,onDragEnd:Qt})]})}var kt=require("react"),Pb=require("@react-three/drei"),Fc=require("@react-three/fiber"),Cn=require("three");var Mn=require("three");function Vc(e){e.updateWorldMatrix(!0,!0);let t=new Mn.Matrix4().copy(e.matrixWorld).invert(),n=new Mn.Box3,i=new Mn.Box3,r=!1;return e.traverse(a=>{let o=a;if(!o.isMesh||!o.geometry||(o.geometry.boundingBox||o.geometry.computeBoundingBox(),!o.geometry.boundingBox))return;let s=new Mn.Matrix4().multiplyMatrices(t,a.matrixWorld);i.copy(o.geometry.boundingBox).applyMatrix4(s),n.union(i),r=!0}),r?n.getCenter(new Mn.Vector3):new Mn.Vector3}function Cb(e,t="XYZ"){return new Mn.Quaternion().setFromEuler(new Mn.Euler(e[0],e[1],e[2],t))}function Jw(e,t,n,i,r="XYZ"){let o=new Mn.Vector3(...i).multiply(new Mn.Vector3(...n)).applyQuaternion(Cb(t,r)).add(new Mn.Vector3(...e));return[o.x,o.y,o.z]}function Tb(e,t,n,i,r,a="XYZ"){let o=new Mn.Vector3(...Jw(e,t,i,r,a)),s=new Mn.Vector3(...r).multiply(new Mn.Vector3(...i)).applyQuaternion(Cb(n,a)),c=o.sub(s);return[c.x,c.y,c.z]}var yp=require("react/jsx-runtime");function wp({node:e,space:t,onTransformChange:n,onDraggingChange:i}){let r=(0,Fc.useThree)(C=>C.invalidate),a=(0,kt.useMemo)(()=>Vc(e),[e]),o=(0,kt.useMemo)(()=>new Cn.Matrix4,[]),s=(0,kt.useRef)(!1),c=(0,kt.useRef)(new Cn.Matrix4),l=(0,kt.useRef)(new Cn.Matrix4),u=(0,kt.useRef)(null),d=(0,kt.useRef)(0),h=(0,kt.useRef)([]),m=(0,kt.useRef)(null),f=(0,kt.useRef)(i);f.current=i;let x=(0,kt.useMemo)(()=>new Cn.Vector3,[]),E=(0,kt.useMemo)(()=>new Cn.Quaternion,[]),w=(0,kt.useMemo)(()=>new Cn.Vector3,[]),p=(0,kt.useMemo)(()=>new Cn.Quaternion,[]),g=(0,kt.useMemo)(()=>new Cn.Vector3(1,1,1),[]),_=(0,kt.useMemo)(()=>new Cn.Quaternion,[]),S=(0,kt.useMemo)(()=>new Cn.Vector3,[]),T=(0,kt.useMemo)(()=>new Cn.Vector3,[]),P=(0,kt.useRef)([0,0,0]),b=(0,kt.useCallback)(()=>{s.current||(e.updateWorldMatrix(!0,!1),x.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(E),p.copy(E),t==="world"&&p.identity(),o.compose(x,p,g))},[x,o,p,g,e,a,t,E]);(0,kt.useLayoutEffect)(()=>(b(),()=>{let C=m.current!==null;C&&(cancelAnimationFrame(m.current),m.current=null),(s.current||C)&&(s.current=!1,f.current(!1));for(let N of h.current)oo(N);h.current=[]}),[b]),(0,Fc.useFrame)(()=>b());let y=(0,kt.useCallback)(()=>{m.current!==null&&(cancelAnimationFrame(m.current),m.current=null),e.updateWorldMatrix(!0,!0),h.current=[];for(let C of ao(e))xf(C)||(Yl(C,C.matrixWorld),h.current.push(C));e.updateWorldMatrix(!0,!1),x.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(E),e.getWorldScale(w),c.current.compose(x,E,w),l.current.copy(o),P.current=[e.rotation.x,e.rotation.y,e.rotation.z],u.current=null,s.current=!0,i(!0)},[x,o,e,i,a,E,w]),M=(0,kt.useCallback)((C,N)=>{let L=c.current.clone().premultiply(N),V=l.current.clone().premultiply(N);L.decompose(S,E,T);let U=S.clone();V.decompose(x,p,g),t==="world"&&p.identity(),o.compose(x,p,g),C.decompose(S,_,T);let D=new Cn.Euler().setFromQuaternion(_,e.rotation.order),[Y,A,k]=P.current,X=[Y+D.x,A+D.y,k+D.z],$=new Cn.Quaternion().setFromEuler(new Cn.Euler(X[0],X[1],X[2],e.rotation.order)),De=(e.parent?.matrixWorld||new Cn.Matrix4).clone().invert(),xe=U.clone().applyMatrix4(De),Oe=a.clone().multiply(e.scale).applyQuaternion($),Pe=xe.clone().sub(Oe),Ie=[Pe.x,Pe.y,Pe.z];e.position.set(Ie[0],Ie[1],Ie[2]),e.rotation.set(X[0],X[1],X[2],e.rotation.order),e.updateMatrixWorld(!0),r(),u.current={position:Ie,rotation:X}},[x,_,o,p,g,r,e,a,S,T,t,E]);return(0,yp.jsx)("group",{children:(0,yp.jsx)(Pb.PivotControls,{matrix:o,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:y,onDrag:(C,N,L,V)=>M(N,V),onDragEnd:()=>{s.current=!1;let C=u.current;if(u.current=null,C)n(C),m.current=requestAnimationFrame(()=>{m.current=null,i(!1)});else if(h.current.length>0){for(let N of h.current)oo(N);e.updateMatrixWorld(!0),r(),i(!1)}else i(!1);h.current=[]}})})}var z=require("react/jsx-runtime");function Qw(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,i=n.getAttribute("skinIndex"),r=n.getAttribute("skinWeight"),a=n.getAttribute("position");if(!i||!r||!a)return null;let o=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],c=new ft.Vector3,l=s[0],u=1/0;for(let m of s){c.fromBufferAttribute(a,m);let f=c.distanceToSquared(o);f<u&&(u=f,l=m)}let d=i.getComponent(l,0),h=r.getComponent(l,0);for(let m=1;m<4;m++){let f=r.getComponent(l,m);f>h&&(h=f,d=i.getComponent(l,m))}return t.skeleton.bones[d]??null}function e_(e){let t=Qw(e)??e.object,n=is(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let i=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[i.x,i.y,i.z]}}function t_(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let i=Ur(t,e.anchorNodeName);return i?(i.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(i.matrixWorld),!0):!1}function n_({annotation:e,enabled:t,controlsRef:n,offsetRef:i}){let r=(0,wo.useThree)(h=>h.scene),a=(0,I.useRef)(null),o=(0,I.useRef)(!1),s=(0,I.useMemo)(()=>new ft.Vector3,[]),c=(0,I.useMemo)(()=>new ft.Vector3,[]),l=(0,I.useMemo)(()=>new ft.Vector3,[]),u=e?.anchorNodeName,d=e?.anchorLocalPosition;return(0,I.useEffect)(()=>{a.current=null,o.current=!1},[u,e?.id]),(0,wo.useFrame)(()=>{let h=n.current,m=i.current;if(!t||!h||!m||!u||!d){o.current=!1;return}let f=a.current;if((!f||!f.parent)&&(f=Ur(r,u),a.current=f),!f){o.current=!1;return}f.updateWorldMatrix(!0,!1),s.set(d[0],d[1],d[2]).applyMatrix4(f.matrixWorld),!(o.current&&s.distanceToSquared(c)<1e-8)&&(c.copy(s),o.current=!0,l.copy(s).add(m),h.setLookAt(l.x,l.y,l.z,s.x,s.y,s.z,!0))}),null}function r_(e){let t={total:0,missing:0};return e.traverse(n=>{let i=n;!i.isMesh||!i.geometry||(t.total+=1,i.geometry.getAttribute("uv")||(t.missing+=1))}),t}var i_=.2;function a_({enabled:e,speed:t,controlsRef:n}){let i=(0,wo.useThree)(r=>r.invalidate);return(0,wo.useFrame)((r,a)=>{!e||!n.current||(n.current.rotate(a*i_*t,0,!1),i())}),null}function o_(e,t,n){let i=t?.camera;if(!(i instanceof ft.PerspectiveCamera))return null;let a=(e instanceof ft.Box3?e:new ft.Box3().setFromObject(e)).getSize(new ft.Vector3).length();return!Number.isFinite(a)||a<=0?null:(i.near=a/100,i.far=a*100,i.updateProjectionMatrix(),t&&n===void 0&&(t.maxDistance=a*10),a)}function s_(e,t){let n=e.camera;if(!(n instanceof ft.PerspectiveCamera)||!(t>0))return;let i=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(i-n.near)<=n.near*.01||(n.near=i,n.updateProjectionMatrix())}async function Ab(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function Vs({modelUrl:e,tilesetUrl:t,tilesErrorTarget:n=8,tilesCacheSize:i=800,onObjectCatalog:r,modelFormat:a,licenseKey:o,licenseValidationUrl:s,objectBindings:c,selectedObject:l,panelHoveredObject:u,onObjectBindingsChange:d,onObjectSelect:h,onObjectHover:m,onObjectEditLeaseChange:f,onModelLoaded:x,onLoadError:E,onProgress:w,onCameraControllerChange:p,cameraControllerType:g,onAction:_,onHiddenObjectsChange:S,onCameraChange:T,onViewerReady:P,onTextureUpload:b,onAnimationsReady:y,onAnnotationsChange:M,activeAnnotation:C,onActiveAnnotationChange:N,lights:L,camera:V,cameraLimits:U,backgroundColor:D,shadows:Y=!0,showObjectBindingDataPanel:A=!0,customObjectBindingDataPanel:k,customSceneObjectsPanel:X,showSceneObjectsPanel:$=!0,showDownloadButton:ue=!0,downloadFilename:De="model",showResetButton:xe=!0,showLoadingOverlay:Oe=!0,showMouseController:Pe=!1,mouseControllerPosition:Ie="center-bottom",mouseControllerOpacity:Et=1,moveSensitivity:Wt=.08,zoomSensitivity:Qe=1,sceneConfig:_e,onSceneConfigChange:ae,disableZoom:zt=!1,zoomOnSelected:Rt=!0,highlightOnHover:et=!0,enableCameraControls:wt=!0,onAutoFit:He,refitOnResize:Jt=!0,renderMode:_t="demand",maxDpr:Ve=2,preserveDrawingBuffer:Lt=!1,performanceProfile:Qt="auto",dracoDecoderPath:Ae,ktx2TranscoderPath:J,meshopt:Se=!0,showMeasureTools:le=!1,showUvCheckerButton:ze=!1,showExplodeControls:Ue=!1,cinematic:Fe,measurementUnit:Ye="m",enableXR:ye=!1,usdzUrl:ut,arScaleMode:St="normalized",mobileHandoffUrl:en,showAnnotationNavigation:tn=!0,showAnnotationOnHover:rt=!1,moveModeEnabled:st=!1,objectTransformSpace:hn="world",enableKeyboardNavigation:Xt=!1,showViewGizmo:Bn=!1,autoRotate:zn=!1,autoRotateSpeed:nn=1}){let{isInsideEditor:F,activeTab:R,activeSubTab:H}=Sr(),Q=F&&R==="scene"&&H==="Lighting",ne=kc(o,s),oe=(0,I.useMemo)(()=>_e??Di,[_e]),[he,je]=(0,I.useState)(null),lt=oe.model.renderer==="uv-checker",Mt=ze?he??lt:lt,pt=(0,I.useMemo)(()=>{let v=Mt?"uv-checker":lt?"pbr":oe.model.renderer;return v===oe.model.renderer?oe:{...oe,model:{...oe.model,renderer:v}}},[lt,oe,Mt]);(0,I.useEffect)(()=>{je(null)},[e,oe.model.renderer,ze,t]);let Ut=(0,I.useMemo)(()=>{if(D)return D;let v=oe.background;return v.enabled&&v.type==="color"?v.color:"#1c1c1d"},[D,oe]),we=(0,I.useMemo)(()=>({dracoDecoderPath:Ae,ktx2TranscoderPath:J,meshopt:Se}),[Ae,J,Se]),Vt=(0,I.useMemo)(()=>tm(Qt),[Qt]),Be=(0,I.useRef)(null),[rn,Un]=(0,I.useState)("orbit"),[xn,An]=(0,I.useState)(!1),Er=g!==void 0?g:rn,cr=(0,I.useCallback)(v=>{An(!1),v!==Er&&(Un(v),p?.(v))},[Er,p]),[li,Ia]=(0,I.useState)(!1);(0,I.useEffect)(()=>{Be.current&&(Be.current.dollySpeed=Math.max(Qe,0))},[Qe]),(0,I.useEffect)(()=>{Be.current&&(Be.current.enabled=wt&&!li)},[wt,li]);let Xr=(0,I.useRef)(null),En=(0,I.useRef)(new Map),dr=(0,I.useRef)(null),na=(0,I.useRef)(null),ct=(0,I.useRef)(null),ci=(0,I.useRef)({});(0,I.useEffect)(()=>()=>{for(let v of Object.values(ci.current))URL.revokeObjectURL(v)},[]);let ur=(0,I.useRef)({}),[,el]=(0,I.useState)(0),ra=(0,I.useCallback)(()=>{el(v=>v+1)},[]),Eo=(0,I.useRef)({}),tl=(0,I.useRef)(null),Rr=(0,I.useRef)(null),[di,an]=(0,I.useState)(null),Ro=(0,I.useCallback)(v=>{Rr.current=v,an(v)},[]),tr=(0,I.useRef)(new Set),ui=(0,I.useRef)(null);(0,I.useEffect)(()=>{let v=di;if(!v||!Xt||!wt||st)return;let O=new Set(["w","a","s","d"," ","c"]),se=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),de=0,me=mt=>mt.code==="Space"?" ":mt.key.toLowerCase(),Ft=()=>{tr.current.clear(),de=0,ui.current!==null&&(cancelAnimationFrame(ui.current),ui.current=null)},Nt=mt=>{let wn=Be.current,bt=tr.current;if(!wn||bt.size===0){ui.current=null,de=0;return}let Nn=de?Math.min((mt-de)/1e3,.05):1/60;de=mt;let fn=Math.max(wn.distance*.75,.01)*Nn;bt.has("w")&&wn.forward(fn,!1),bt.has("s")&&wn.forward(-fn,!1),bt.has("a")&&wn.truck(-fn,0,!1),bt.has("d")&&wn.truck(fn,0,!1),bt.has(" ")&&wn.truck(0,fn,!1),bt.has("c")&&wn.truck(0,-fn,!1),ui.current=requestAnimationFrame(Nt)},yn=mt=>{if(mt.target!==v){Ft();return}if(se.has(mt.key)){let bt=Be.current;if(!bt)return;mt.preventDefault();let Nn=Math.PI/90,fn=Math.max(bt.distance*.05,.01);mt.key==="ArrowUp"?mt.shiftKey?bt.forward(fn,!0):bt.rotate(0,-Nn,!0):mt.key==="ArrowDown"?mt.shiftKey?bt.forward(-fn,!0):bt.rotate(0,Nn,!0):mt.key==="ArrowLeft"?bt.rotate(-Nn,0,!0):bt.rotate(Nn,0,!0);return}let wn=me(mt);O.has(wn)&&(mt.preventDefault(),tr.current.add(wn),ui.current===null&&(ui.current=requestAnimationFrame(Nt)))},mn=mt=>{tr.current.delete(me(mt))};return v.addEventListener("keydown",yn),v.addEventListener("keyup",mn),v.addEventListener("blur",Ft),()=>{v.removeEventListener("keydown",yn),v.removeEventListener("keyup",mn),v.removeEventListener("blur",Ft),Ft()}},[di,wt,Xt,st]);let Lo=(0,I.useRef)(null),[vd,ia]=(0,I.useState)(c),[qr,Gn]=(0,I.useState)({}),[nl,nr]=(0,I.useState)(null),[aa,rl]=(0,I.useState)(null),[xd,ko]=(0,I.useState)(null),[Do,yd]=(0,I.useState)(null),[rr,il]=(0,I.useState)(null),[Yr,oa]=(0,I.useState)(null),Vn=(0,I.useRef)(null),sa=(0,I.useRef)(null),Bo=(0,I.useRef)(0),al=(0,I.useRef)(null),[wd,_d]=(0,I.useState)(0),Lr=(0,I.useRef)(!1),la=(0,I.useRef)(!1),No=(0,I.useRef)(!!V);No.current=!!V;let kr=(0,I.useRef)(null),[ol,ca]=(0,I.useState)(!!e),[Oo,da]=(0,I.useState)(!e||!!He||!!V),[pi,sl]=(0,I.useState)(!1),[ll,Io]=(0,I.useState)(!1),[cl,ua]=(0,I.useState)(!1),[dl,ul]=(0,I.useState)(!1),[pl,Sd]=(0,I.useState)(null),[Md,hl]=(0,I.useState)(!1),[Ai,hi]=(0,I.useState)({total:0,missing:0}),[Cd,B]=(0,I.useState)("Loading model..."),[G,ie]=(0,I.useState)(null),pe=(0,I.useRef)({}),Ee=(0,I.useCallback)(()=>{let v=Be.current;if(!v||kr.current)return;let O=v.getPosition(new ft.Vector3),se=v.getTarget(new ft.Vector3);kr.current={position:[O.x,O.y,O.z],target:[se.x,se.y,se.z]}},[]),[ht,At]=(0,I.useState)(!1),[it,mi]=(0,I.useState)(0),[Td,th]=(0,I.useState)(!1);(0,I.useEffect)(()=>{mi(0),th(!1)},[e,t]);let zo=(0,I.useMemo)(()=>{let v=oe.cinematic,O=v?.enabled?{waypoints:v.waypoints,duration:v.duration,loop:v.loop,autoPlay:v.autoPlay}:null;return Fe===void 0?O&&(O.waypoints?.length??0)>=2?O:null:Fe===!1?null:Fe===!0?O??{}:{...O??{},...Fe}},[Fe,oe]),[pa,$r]=(0,I.useState)(!1),[_0,za]=(0,I.useState)(!1),Pd=(0,I.useRef)(!1);(0,I.useEffect)(()=>{$r(!1),za(!1),Pd.current=!1},[e,t]),(0,I.useEffect)(()=>{!zo?.autoPlay||Pd.current||pi&&Oo&&!ol&&(Pd.current=!0,$r(!0),za(!1))},[zo,pi,Oo,ol]);let{xrStore:ha,presenterRef:S0,arSupported:Ad,vrSupported:nh,quickLookSupported:rh,resolvedMobileHandoffUrl:ml,isMobileHandoffOpen:ih,arOverlay:M0,openMobileHandoff:C0,closeMobileHandoff:ah,openQuickLook:T0,handleARStateChange:P0}=om({enableXR:ye,usdzUrl:ut,mobileHandoffUrl:en}),[Kr,oh]=(0,I.useState)(()=>_e?.annotations??[]);(0,I.useEffect)(()=>{if(Kr.length>0){let v=Kr.reduce((O,se)=>Math.max(O,se.id),0);bl.current=v}else bl.current=0},[Kr]);let[Kn,fl]=(0,I.useState)(null),[Ei,gl]=(0,I.useState)({title:"",description:""}),bl=(0,I.useRef)(0),[A0,sh]=(0,I.useState)(null),[pr,Ua]=(0,I.useState)(-1),[lh,vl]=(0,I.useState)(!1),Va=(0,I.useRef)(null),ln=(0,I.useMemo)(()=>[...Kr].sort((v,O)=>v.id-O.id),[Kr]),xl=(0,I.useMemo)(()=>pr<0||pr>=ln.length?null:ln[pr],[pr,ln]),Zr=(0,I.useCallback)(v=>{if(C!==void 0){N?.(v);return}sh(v?{annotation:v}:null)},[C,N]),Fa=(0,I.useCallback)(v=>{let O=Be.current,se=Vn.current;if(!O)return;let de=new ft.Vector3,me=En.current.get(v.id);me?de.copy(me):se&&t_(v,se,de)||de.set(v.worldPosition[0],v.worldPosition[1],v.worldPosition[2]),Xr.current=null;let Ft=O.smoothTime;O.smoothTime=.6;let Nt=v.worldNormal;if(se){let yn=new ft.Box3().setFromObject(se),mn=new ft.Vector3;yn.getCenter(mn);let mt=new ft.Vector3;yn.getSize(mt);let wn=mt.length()*.2,bt;Nt?bt=new ft.Vector3(Nt[0],Nt[1],Nt[2]):bt=de.clone().sub(mn),bt.lengthSq()<1e-6&&bt.set(0,0,1),bt.normalize();let Nn=Math.max(wn*.6,.3),fn=de.clone().add(bt.multiplyScalar(Nn));O.setPosition(fn.x,fn.y,fn.z,!0),v.anchorNodeName&&v.anchorLocalPosition&&(Xr.current=fn.clone().sub(de))}O.setTarget(de.x,de.y,de.z,!0),Va.current&&clearTimeout(Va.current),Va.current=setTimeout(()=>{O.smoothTime=Ft,Va.current=null},800),Zr(v)},[Zr]),E0=(0,I.useCallback)(()=>{ln.length!==0&&(At(!0),Ua(0),Fa(ln[0]))},[ln,Fa]),R0=(0,I.useCallback)(()=>{if(ln.length===0||pr<0)return;vl(!0);let v=(pr-1+ln.length)%ln.length;Ua(v),Fa(ln[v]),setTimeout(()=>vl(!1),500)},[pr,ln,Fa]),L0=(0,I.useCallback)(()=>{if(ln.length===0||pr<0)return;if(pr===ln.length-1){if(At(!1),Ua(-1),Zr(null),Be.current&&kr.current){let O=kr.current;Be.current.setLookAt(O.position[0],O.position[1],O.position[2],O.target[0],O.target[1],O.target[2],!0)}return}vl(!0);let v=pr+1;Ua(v),Fa(ln[v]),setTimeout(()=>vl(!1),500)},[pr,ln,Fa,Zr]),k0=(0,I.useCallback)(()=>{if(At(!1),Ua(-1),Zr(null),Be.current&&kr.current){let v=kr.current;Be.current.setLookAt(v.position[0],v.position[1],v.position[2],v.target[0],v.target[1],v.target[2],!0)}},[Zr]);(0,I.useEffect)(()=>{Ua(-1),At(!1)},[ln.length]),(0,I.useEffect)(()=>()=>{Va.current&&clearTimeout(Va.current)},[]),(0,I.useEffect)(()=>{xl&&ht&&Zr(xl)},[xl,Zr,ht]),(0,I.useEffect)(()=>{if(_e?.annotations===void 0)return;let v=_e.annotations.map(O=>({...O,localPosition:O.localPosition??O.worldPosition}));oh(v)},[_e?.annotations]);let Uo=(0,I.useCallback)(()=>{if(C!==void 0){N?.(null);return}sh(null)},[C,N]),Vo=C!==void 0?C:A0?.annotation??null,Fo=(0,I.useMemo)(()=>Vo?Kr.find(O=>O.id===Vo.id)??null:null,[Vo,Kr]);(0,I.useEffect)(()=>{Vo&&!Fo&&Uo()},[Vo,Fo,Uo]);let jo=d!==void 0,Bt=jo?c:vd;pe.current=Bt;let D0=(0,I.useMemo)(()=>Object.entries(Bt).map(([v,O])=>JSON.stringify([v,O.modelObjectId,O.transform??null])).sort().join(""),[Bt]),{measureMode:Ho,measureModeRef:B0,measurePoints:ch,showDimensions:Ed,measureBox:dh,modelBounds:N0,refreshBounds:uh,clearMeasurements:O0,toggleMeasureMode:I0,toggleDimensions:z0,handleMeasurePointerDown:U0,handleMeasureClick:V0}=Qh({canvasAreaRef:Rr,controlsRef:Be,sceneRef:Vn,modelUrl:e,modelRotation:oe.model.rotation,bindingTransformSignature:D0,modelLoaded:pi}),{isDownloading:Rd,downloadMenuOpen:F0,uvExportError:ph,toggleDownloadMenu:j0,handleDownloadMesh:H0,handleDownloadScreenshot:G0,handleDownloadUvLayout:W0}=Jh({sceneRef:Vn,materialRefs:Eo,rendererCaptureRef:ct,objectBindings:Bt,downloadFilename:De}),hh=(0,I.useMemo)(()=>Object.fromEntries(Object.entries(Bt).filter(([,v])=>v.visible===!1).map(([v])=>[v,!0])),[Bt]),fi=(0,I.useMemo)(()=>{let v=new WeakMap,O=new Map,se=new Map;for(let[de,me]of Object.entries(Bt))v.set(me,de),O.has(me.id)||O.set(me.id,de),se.has(me.modelObjectId)||se.set(me.modelObjectId,de);return{byReference:v,byId:O,byModelObjectId:se}},[Bt]),Ri=(0,I.useCallback)(v=>v?fi.byReference.get(v)??fi.byModelObjectId.get(v.modelObjectId)??fi.byId.get(v.id)??null:null,[fi]),Ld=l!==void 0,Go=Ld?l??null:Do,Dr=Ri(Go),kd=Dr?ur.current[Dr]??null:null,mh=Ri(et?u??aa??xd:null),X0=mh?ur.current[mh]??null:null,fh=(0,I.useCallback)(v=>{ko(v),m?.(v)},[m]),gh=A&&Go!==null&&Dr!==null,bh=(Dr?Bt[Dr]:null)??Go;(0,I.useEffect)(()=>{jo||ia(c)},[jo,c]),(0,I.useEffect)(()=>{S?.(hh)},[hh,S]);let ja=(0,I.useCallback)(v=>{if(Er==="pointerLock"){cr("orbit");return}Ld||yd(v),h?.(v)},[Er,cr,Ld,h]),Ha=(0,I.useCallback)(v=>{jo||ia(v),d?.(v)},[jo,d]),q0=(0,I.useCallback)(v=>{let O=Dr;if(!O||!v)return;let se=pe.current[O];se&&Ha({...pe.current,[O]:{...se,transform:{...se.transform,...v}}})},[Ha,Dr]),gi=(0,I.useCallback)((v,O)=>Bt[v]?v:O?Ri(O):fi.byId.get(v)??fi.byModelObjectId.get(v)??null,[Bt,Ri,fi]),Wo=(0,I.useCallback)((v,O)=>{let se=gi(v),de=se?Bt[se]:void 0;!se||!de||Ha({...Bt,[se]:{...de,style:O(de.style)}})},[gi,Bt,Ha]),hr=(0,I.useCallback)(()=>{if(rr){let v=qr[rr.objectId]?.hex;v!==void 0&&(Wo(rr.objectId,O=>({...O,material:{...O?.material,baseColor:v}})),Gn(O=>({...O,[rr.objectId]:{}})))}il(null)},[rr,qr,Wo]),vh=(0,I.useCallback)(()=>{ja(null),nr(null),hr(),oa(null)},[ja,hr]),Dd=(0,I.useCallback)((v,O,se,de,me)=>{let Ft=tl.current,Nt=Rr.current,yn=Be.current?.camera;if(!Ft)return{objectId:v,x:24,y:24};let mn=Ft.getBoundingClientRect(),mt=12,wn=mn.width-O-mt,bt=mn.height-se-mt,Nn=Math.max(mt,(mn.width-O)/2),fn=Math.max(mt,(mn.height-se)/2),Wa=gi(v,de),Yo=Wa?ur.current[Wa]:null,Jr=(Xa,ma)=>ma<=mt?mt:Math.min(Math.max(Xa,mt),ma);if(Nt&&yn&&Yo){let Xa=Nt.getBoundingClientRect(),ma=new ft.Vector3;new ft.Box3().setFromObject(Yo).getCenter(ma),ma.project(yn);let cx=(ma.x+1)/2*Xa.width+(Xa.left-mn.left),dx=(1-ma.y)/2*Xa.height+(Xa.top-mn.top);return{objectId:v,x:Jr(cx+24,wn),y:Jr(dx-se/2,bt)}}let Id=typeof me?.screenX=="number"?me.screenX-mn.left:Nn,zd=typeof me?.screenY=="number"?me.screenY-mn.top:fn;return{objectId:v,x:Jr(Id,wn),y:Jr(zd,bt)}},[gi]),yl=(0,I.useCallback)(v=>{let{objectId:O,action:se,binding:de}=v;switch(nr(v),se.id){case"toggle-visibility":{let me=O;de?.modelObjectId&&(me=fi.byModelObjectId.get(de.modelObjectId)??me);let Ft=Bt[me],Nt=Ft?.visible===!1;Ft&&Ha({...Bt,[me]:{...Ft,visible:Nt}});break}case"change-color":hr(),oa(null),Gn(me=>{let Ft=gi(O,de)??O,Nt=me[O]?.hex,yn=Bt[Ft]?.style?.material?.baseColor;return{...me,[O]:{...me[O],hex:Nt??yn??"#ffffff"}}}),il(Dd(O,225,250,de,v));break;case"change-material":hr(),oa(Dd(O,300,320,de,v));break;default:break}_?.(v)},[Ha,Bt,Dd,_,hr,gi,fi]);(0,I.useEffect)(()=>{if(rr)return window.addEventListener("pointerdown",hr),()=>window.removeEventListener("pointerdown",hr)},[rr,hr]),(0,I.useEffect)(()=>{if(!Yr)return;let v=()=>oa(null);return window.addEventListener("pointerdown",v),()=>window.removeEventListener("pointerdown",v)},[Yr]),(0,I.useEffect)(()=>{if(!Fo)return;let v=O=>{if(Lo.current&&!Lo.current.contains(O.target)){if(O.target.closest?.(".ri-annotationMarker"))return;Uo()}};return document.addEventListener("mousedown",v),document.addEventListener("touchstart",v),()=>{document.removeEventListener("mousedown",v),document.removeEventListener("touchstart",v)}},[Fo,Uo]),(0,I.useEffect)(()=>{if(!Kn)return;let v=O=>{let se=O.target;if(se.closest?.(".ri-annotationPopup")||se.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let de=Rr.current;!de||!de.contains(se)||(fl(null),gl({title:"",description:""}))};return document.addEventListener("mousedown",v,!0),document.addEventListener("touchstart",v,!0),()=>{document.removeEventListener("mousedown",v,!0),document.removeEventListener("touchstart",v,!0)}},[Kn]);let xh=(0,I.useCallback)((v,O)=>{let se=ci.current[v];se&&URL.revokeObjectURL(se),O.startsWith("blob:")?ci.current[v]=O:delete ci.current[v],Wo(v,de=>({...de,material:{...de?.material,texture:{path:O}}}))},[Wo]),Y0=v=>{let O=v.target.files?.[0],se=na.current;if(!O||!se)return;let de=gi(se);de&&(b?b(O,de).then(me=>xh(de,me),me=>console.error("onTextureUpload failed:",me)):xh(de,URL.createObjectURL(O)),v.target.value="")},yh=v=>{na.current=v,dr.current?.click()},wh=v=>{let O=gi(v);if(!O)return;Wo(O,de=>de?.material?.texture?{...de,material:{...de.material,texture:void 0}}:de);let se=ci.current[O];se&&(URL.revokeObjectURL(se),delete ci.current[O])},Bd=(0,I.useRef)(P);Bd.current=P;let Br=(0,I.useCallback)(()=>{let v=Be.current;!v||!Bd.current||Bd.current({controls:v,scene:Vn.current,objectBindings:pe.current,nodeRefs:ur.current,homeCameraState:kr.current,captureImage:O=>Sl(ct.current,O),invalidate:()=>ct.current?.invalidate()})},[]),Ga=(0,I.useCallback)(async(v=!1)=>{let O=Be.current,se=sa.current??Vn.current;if(!O||!se)return!1;try{if(v){let de=(se instanceof ft.Box3?se:new ft.Box3().setFromObject(se)).getBoundingSphere(new ft.Sphere),me=de.center.clone(),Nt=O.getPosition(new ft.Vector3).clone().sub(O.getTarget(new ft.Vector3));Nt.lengthSq()<1e-6&&Nt.set(0,0,1),Nt.normalize();let yn=Math.max(de.radius*10,20),mn=me.clone().add(Nt.multiplyScalar(yn));await O.setLookAt(mn.x,mn.y,mn.z,me.x,me.y,me.z,!1)}return da(!0),await Ab(O,()=>O.fitToBox(se,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(de=>{let me=performance.now(),Ft=()=>{O.active===!1||performance.now()-me>8e3?(O.dispatchEvent({type:"update"}),ct.current?.invalidate(),de()):(ct.current?.invalidate(),setTimeout(Ft,100))};setTimeout(Ft,100)}),Lr.current=!0,Ee(),Br(),!0}catch(de){return console.error("Fit scene error:",de),!1}},[Ee,Br]);(0,I.useEffect)(()=>{if(Lr.current=!1,la.current=!1,kr.current=null,Vn.current=null,sa.current=null,sl(!1),Io(!1),ua(!1),hi({total:0,missing:0}),B("Loading model..."),ie(null),!e){ca(!1),da(!0);return}ca(!0),da(!!He||No.current);let v=!1,O=null,se=me=>{O=setTimeout(de,me)},de=()=>{if(v||Lr.current||la.current)return;let me=sa.current??Vn.current;if(!Be.current||!me){se(100);return}if(Bo.current=o_(me,Be.current,U?.maxDistance)??Bo.current,pb(Be.current)){Lr.current=!0,Ee(),Br(),ca(!1),da(!0),ct.current?.invalidate();return}la.current=!0,(He?He():No.current?Promise.resolve(!0):Ga(!0)).then(Nt=>{Lr.current=Nt!==!1,Lr.current?(Ee(),Br(),ca(!1)):v||se(100)}).catch(()=>{Lr.current=!1,v||se(100)}).finally(()=>{la.current=!1})};return se(50),()=>{v=!0,O&&clearTimeout(O)}},[Ee,U?.maxDistance,Ga,e,Br,He,t]),(0,I.useEffect)(()=>{if(!Jt)return;let v=di;if(!v)return;let O=null,se=new ResizeObserver(()=>{!Lr.current||la.current||(O&&clearTimeout(O),O=setTimeout(()=>{Ga()},150))});return se.observe(v),()=>{se.disconnect(),O&&clearTimeout(O)}},[di,Ga,Jt]);let _h=(0,I.useCallback)(v=>{if(B0.current||($r(!1),hr(),oa(null),nr(null),ja(v),zt||!Rt))return;let O=Be.current,se=Ri(v),de=se?ur.current[se]:null;O&&v.cameraState?.position&&v.cameraState?.target?(O.setPosition(v.cameraState.position[0],v.cameraState.position[1],v.cameraState.position[2],!0),O.setTarget(v.cameraState.target[0],v.cameraState.target[1],v.cameraState.target[2],!0)):O&&de&&O.fitToBox(de,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[ja,hr,Ri,zt,Rt]),Sh=(0,I.useCallback)(v=>{if(ja(v),zt)return;let O=Be.current,se=Ri(v),de=se?ur.current[se]:null;if(!O||!de)return;let me=v.cameraState;me?.position&&me?.target?(O.setPosition(me.position[0],me.position[1],me.position[2],!0),O.setTarget(me.target[0],me.target[1],me.target[2],!0)):O.fitToBox(de,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[ja,Ri,zt]);(0,I.useEffect)(()=>{Br()},[Br]);let Mh=(0,I.useCallback)((v,O)=>{s_(O,Bo.current),T?.(v,O),Br()},[Br,T]),$0=(0,I.useCallback)(v=>{al.current=new Set(v.map(O=>O.name)),_d(O=>O+1),r?.(v)},[r]),K0=(0,I.useCallback)(v=>{sa.current=v,ct.current?.invalidate()},[]),Ch=(0,I.useCallback)(v=>{Vn.current=v,uh(v),hi(r_(v));let O=Zo(v);Sd(O>fa?O:null),hl(!1),ie(null),O>fa&&B(`Preparing large model (${Math.round(O/1e6)}M triangles) \u2014 the first display can take a while on this device...`),sl(!0),Io(!1),ul(!1),x?.(v),Br()},[Br,x,uh]),Th=(0,I.useCallback)(v=>{ca(!1),da(!0),Io(!0),E?.(v)},[E]),Z0=(0,I.useCallback)(v=>{v.lengthComputable&&v.total>0&&ie(v.loaded/v.total*100),w?.(v)},[w]),Ph=(0,I.useCallback)((v,O,se)=>{if(!ae)return;let de={...oe,lighting:{...oe.lighting,lights:oe.lighting.lights.map(me=>me.id===v?{...me,position:O,...se?{rotation:se}:{}}:me)}};ae(de)},[oe,ae]);(0,I.useEffect)(()=>{let v=Vn.current;if(!pi||!v){ua(!1);return}let O=Object.entries(Bt);if(O.length===0){ua(!1);return}let se=t?al.current:new Set(Object.keys(eo(v).nodesById));if(!se||se.size===0){ua(!1);return}let de=O.some(([me,Ft])=>!se.has(Ft.modelObjectId??me));ua(de)},[pi,Bt,wd,t]);let Nd=(0,I.useCallback)(async()=>{if(He){await He();return}let v=Be.current;if(!v)return;let O=kr.current;try{O?await Ab(v,()=>v.setLookAt(O.position[0],O.position[1],O.position[2],O.target[0],O.target[1],O.target[2],!0)):await Ga()}catch(se){console.error("Reset camera error:",se)}},[He,Ga]),iS=(0,I.useCallback)(()=>{za(!1),$r(!0)},[]),aS=(0,I.useCallback)(()=>{$r(!1)},[]),J0=(0,I.useCallback)(()=>{$r(!1),za(!0),setTimeout(()=>{Nd()},100)},[Nd]),Q0=(0,I.useCallback)((v,O)=>{Mh(v,O)},[Mh]),ex=(0,I.useCallback)(v=>{let O=R==="scene"&&H==="Annotations";if(v.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let de=Rr.current,me=Be.current,Ft=me?.camera,Nt=Vn.current;if(!de||!me||!Ft||!Nt||!O&&!me.enabled)return;let yn=de.getBoundingClientRect(),mn=(v.clientX-yn.left)/yn.width*2-1,mt=-((v.clientY-yn.top)/yn.height)*2+1,wn=new ft.Raycaster;wn.setFromCamera(new ft.Vector2(mn,mt),Ft);let bt=wn.intersectObject(Nt,!0);if(bt.length===0)return;if(!O){let{x:Jr,y:Id,z:zd}=bt[0].point;me.setOrbitPoint(Jr,Id,zd);return}let Nn=bt[0],fn=Nn.point,Wa=Nt.worldToLocal(Nn.point.clone()),Yo=[0,0,1];if(Nn.face){let Jr=Nn.face.normal.clone().transformDirection(Nn.object.matrixWorld).normalize();Yo=[Jr.x,Jr.y,Jr.z]}fl({worldPosition:[fn.x,fn.y,fn.z],localPosition:[Wa.x,Wa.y,Wa.z],worldNormal:Yo,anchor:e_(Nn),screenX:v.clientX-yn.left,screenY:v.clientY-yn.top}),gl({title:"",description:""})},[R,H]),Ah=(0,I.useCallback)(()=>{if(!Kn||!Ei.title.trim())return;bl.current+=1;let O={id:bl.current,worldPosition:Kn.worldPosition,localPosition:Kn.localPosition,worldNormal:Kn.worldNormal,anchorNodeName:Kn.anchor?.anchorNodeName,anchorLocalPosition:Kn.anchor?.anchorLocalPosition,title:Ei.title.trim(),description:Ei.description},se=[...Kr,O];oh(se),M?.(se),fl(null)},[Kn,Ei,Kr,M]),Od=(0,I.useCallback)(()=>fl(null),[]),tx=(0,I.useCallback)(v=>{Zr(v)},[Zr]);if(ne.status==="checking")return(0,z.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,z.jsx)(ba,{title:"Verifying License",message:"Checking your license key..."})});if(ne.status==="invalid")return(0,z.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,z.jsx)(ba,{tone:"error",title:"Invalid License",message:ne.isLocalDomain?ne.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let Eh=Yr?gi(Yr.objectId):null,Rh=Eh?Bt[Eh]?.style?.material?.texture?.path:void 0,nx=Rr.current?.offsetWidth??600,rx=Rr.current?.offsetHeight??400,ix=350,ax=290,ox=Kn?Math.min(Kn.screenX+12,nx-ix-8):0,sx=Kn?Math.min(Kn.screenY,rx-ax-8):0,lx=Oe&&!!e&&!ll&&!pi,Xo=ye&&(ha&&(Ad||nh)||rh||!!ml),qo=v=>16+v*42;return(0,z.jsxs)("div",{className:"ri-viewer",style:{background:Ut},children:[(0,z.jsxs)("div",{className:"ri-viewerLeft",ref:tl,children:[k?k({isOpen:gh,selectedObject:bh,currentAction:nl,onClose:vh,onAction:yl}):(0,z.jsx)(dp,{isOpen:gh,selectedObject:bh,currentAction:nl,onClose:vh,onAction:yl,renderActionExtra:v=>v==="change-color"&&rr?(0,z.jsx)(lp,{inline:!0,colorPicker:rr,onClose:hr,itemMaterials:qr,setItemMaterials:Gn}):v==="change-material"&&Yr?(0,z.jsx)(cp,{inline:!0,triggerFileUpload:yh,materialPopup:Yr,textureUrl:Rh,clearTexture:wh}):null}),(0,z.jsxs)("div",{className:`ri-canvasArea ${Ho?"ri-canvasArea--measuring":""} ${Oo?"":"ri-canvasArea--positioning"} ${st?"ri-canvasArea--moveMode":""}`,ref:Ro,tabIndex:Xt?0:void 0,onDoubleClick:ex,onPointerDown:v=>{Xt&&Rr.current?.focus({preventScroll:!0}),U0(v)},onClick:V0,children:[cl&&!dl&&(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:v=>{v.stopPropagation(),ul(!0)},"aria-label":"Dismiss",children:(0,z.jsx)(Te.X,{size:12})})]}),pl!==null&&!Md&&(0,z.jsxs)("div",{className:`ri-largeModelBanner ${cl&&!dl?"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(pl/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:v=>{v.stopPropagation(),hl(!0)},"aria-label":"Dismiss",children:(0,z.jsx)(Te.X,{size:12})})]}),pt.model.renderer==="uv-checker"&&Ai.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:[Ai.missing===Ai.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${Ai.missing} of ${Ai.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),(0,z.jsx)("input",{ref:dr,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:Y0}),(0,z.jsxs)(eu,{camera:V,backgroundColor:D,shadows:Y&&oe.shadows.enabled,sceneConfig:pt,selectedObjectRef:kd,hoveredObjectRef:X0,highlightOnHover:et,renderMode:_t,maxDpr:Ve,reduceGpuLoad:Vt,xrStore:ha,rendererCaptureRef:ct,preserveDrawingBuffer:Lt,children:[L??(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(iu,{lightingConfig:oe.lighting,shadowConfig:oe.shadows,shadowsEnabled:Y,environmentRotation:oe.environment.rotation,environmentConfig:oe.environment,modelBounds:N0,objectBindings:Bt,nodeRefs:ur}),Q&&oe.lighting.lights.map(v=>!v.visible||v.type==="none"||v.type==="hemisphere"||v.attachment?null:(0,z.jsx)(Mb,{light:v,position:v.position,rotation:v.rotation,color:v.color,intensity:v.intensity,visible:v.visible,onPositionChange:O=>Ph(v.id,O,v.rotation),onRotationChange:O=>Ph(v.id,v.position,O),onDraggingChange:Ia},v.id))]}),(0,z.jsx)(nu,{controlsRef:Be,onCameraChange:Q0,cameraLimits:U,controllerType:Er,onPointerLockExit:()=>cr("orbit")}),(0,z.jsx)(a_,{enabled:Er==="pointerLock"?!1:oe.model.autoRotate??zn??!1,speed:oe.model.autoRotateSpeed??nn??1,controlsRef:Be}),Bn&&(0,z.jsx)(jc.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{Be.current?.update(0),ct.current?.invalidate()},children:(0,z.jsx)(jc.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),st&&kd&&Dr&&(0,z.jsx)(wp,{node:kd,space:hn,onTransformChange:q0,onDraggingChange:v=>{Ia(v),Go&&f?.(Go,v)}},Dr),(0,z.jsx)(_l,{onLoadError:Th,children:(0,z.jsx)(I.Suspense,{fallback:null,children:(()=>{let v=(0,z.jsxs)(z.Fragment,{children:[t?(0,z.jsx)(Ju,{url:t,rotation:pt.model.rotation,errorTarget:n,cacheSize:i,decoderConfig:we,objectBindings:Bt,itemMaterials:qr,sceneConfig:pt,selectedItem:Dr,panelHoveredItem:u??aa,highlightOnHover:et,onItemClick:_h,onItemHover:fh,onObjectCatalog:$0,onTilesetBounds:K0,onModelLoaded:Ch,onLoadError:Th,nodeRefsOut:ur,onNodeRefsChange:ra,materialRefsOut:Eo,explodeFactor:it,suspendBindingTransforms:li}):(0,z.jsx)(fu,{url:e,modelFormat:a,objectBindings:Bt,selectedItem:Dr,itemMaterials:qr,onItemClick:_h,onItemHover:fh,onModelLoaded:Ch,onAnimationsReady:y,nodeRefsOut:ur,onNodeRefsChange:ra,materialRefsOut:Eo,panelHoveredItem:u??aa,sceneConfig:pt,zoomOnSelected:Rt,highlightOnHover:et,decoderConfig:we,onLoadProgress:Z0,explodeFactor:it,suspendBindingTransforms:li}),(0,z.jsx)(ep,{annotations:Kr,sceneConfig:oe,activeAnnotation:Fo,popupRef:Lo,canvasRootRef:Rr,worldPositionsRef:En,modelLoaded:pi,onAnnotationClick:tx,onCloseAnnotation:Uo,hideCloseButton:ht,showAnnotationOnHover:rt}),(0,z.jsx)(n_,{annotation:xl,enabled:ht,controlsRef:Be,offsetRef:Xr}),zo&&(0,z.jsx)(np,{controlsRef:Be,sceneRef:Vn,config:zo,playing:pa,resetOnPlay:_0,onFinished:()=>{$r(!1),za(!1)},onUserInteract:()=>{$r(!1)}}),le&&(0,z.jsx)(tp,{points:ch,unit:Ye,box:dh,showDimensions:Ed})]});return ha?(0,z.jsx)(Kg,{ref:S0,box:dh,scaleMode:St,onARStateChange:P0,children:v}):v})()})},t??e)]}),(0,z.jsx)(bo,{visible:lx,message:Cd,progress:G??void 0}),Xo&&(0,z.jsxs)("div",{className:"ri-xrTools",style:{top:`${qo(0)}px`},children:[!Ad&&rh&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:T0,title:"View this model in AR with Apple Quick Look",children:[(0,z.jsx)(Te.Box,{size:16}),"View in AR"]}),ml&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:C0,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":ih,children:[(0,z.jsx)(Te.QrCode,{size:16}),(0,z.jsx)("span",{children:"Open on phone"})]}),ha&&Ad&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>ha.enterAR().catch(v=>{console.error("Failed to enter AR session:",v)}),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"})]}),ha&&nh&&(0,z.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>ha.enterVR().catch(v=>{console.error("Failed to enter VR session:",v)}),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"})]})]}),M0,ih&&ml&&(0,z.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:v=>{v.target===v.currentTarget&&ah()},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:ah,"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)(Eb.QRCodeSVG,{value:ml,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),ze&&(0,z.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${qo(Xo?1:0)}px`},children:(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Mt?"ri-measureButton--active":""}`,onClick:()=>je(v=>!(v??lt)),title:Mt?"Disable UV checker":"Enable UV checker","aria-label":Mt?"Disable UV checker":"Enable UV checker","aria-pressed":Mt,children:(0,z.jsx)(Te.Grid3X3,{size:16})})}),le&&(0,z.jsxs)("div",{className:"ri-measureTools",style:{top:`${qo((Xo?1:0)+(ze?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Ho?"ri-measureButton--active":""}`,onClick:I0,title:Ho?"Stop measuring":"Measure distance","aria-pressed":Ho,children:(0,z.jsx)(Te.PencilRuler,{size:16})}),(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Ed?"ri-measureButton--active":""}`,onClick:z0,title:"Toggle bounding dimensions","aria-pressed":Ed,children:(0,z.jsx)(Te.RulerDimensionLine,{size:16})}),ch.length>0&&(0,z.jsx)("button",{type:"button",className:"ri-measureButton",onClick:O0,title:"Clear measurements",children:(0,z.jsx)(Te.Eraser,{size:16})}),Ho&&(0,z.jsx)("span",{className:"ri-measureHint",children:"Click points on the model to measure"})]}),Ue&&(0,z.jsxs)("div",{className:"ri-explodeTools",style:{top:`${qo((Xo?1:0)+(ze?1:0)+(le?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${Td||it>0?"ri-measureButton--active":""}`,onClick:()=>th(v=>!v),title:"Exploded view","aria-pressed":Td,children:(0,z.jsx)(Te.Expand,{size:16})}),Td&&(0,z.jsx)("div",{className:"ri-explodeSlider",onPointerDown:v=>v.stopPropagation(),children:(0,z.jsx)("input",{type:"range",min:0,max:100,value:Math.round(it*100),onChange:v=>mi(Number(v.target.value)/100),"aria-label":"Explode amount"})})]}),zo&&(0,z.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${qo((Xo?1:0)+(ze?1:0)+(le?1:0)+(Ue?1:0))}px`},children:[(0,z.jsx)("button",{type:"button",className:`ri-measureButton ${pa?"ri-measureButton--active":""}`,onClick:()=>{pa?$r(!1):(za(!1),$r(!0))},title:pa?"Pause cinematic":"Play cinematic","aria-pressed":pa,children:pa?(0,z.jsx)(Te.Pause,{size:16}):(0,z.jsx)(Te.Play,{size:16})}),pa&&(0,z.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:J0,title:"Stop cinematic and reset camera",children:(0,z.jsx)(Te.Square,{size:16})})]}),(xe||ue||tn&&ln.length>0)&&(0,z.jsxs)("div",{className:"ri-buttonContainer",children:[(0,z.jsx)("div",{className:"ri-tourControls",children:tn&&ln.length>0&&(0,z.jsx)(z.Fragment,{children:ht?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)("button",{className:"ri-tourButton",onClick:R0,disabled:lh||ln.length===0||pr<=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:k0,title:"Stop guided tour",children:(0,z.jsx)(Te.Square,{size:16})}),(0,z.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:L0,disabled:lh||ln.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:E0,disabled:ln.length===0,title:"Start guided tour",children:"Guided Tour"})})}),(0,z.jsxs)("div",{className:"mv-rightControls",children:[xe&&(0,z.jsx)("button",{className:"mv-resetButton",onClick:Nd,title:"Reset camera view",children:(0,z.jsx)(Te.RotateCcw,{})}),(0,z.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:v=>v.stopPropagation(),children:[xn&&(0,z.jsxs)("div",{className:"mv-controllersMenu",children:[(0,z.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${Er==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>cr("orbit"),children:"Orbit Control"}),(0,z.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${Er==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>cr("pointerLock"),children:"Point Lock"})]}),(0,z.jsx)("button",{className:"mv-controllersButton",onClick:()=>An(v=>!v),title:"Camera controller","aria-label":"Camera controller settings",children:(0,z.jsx)(Te.Orbit,{size:15})})]}),ue&&(0,z.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:v=>v.stopPropagation(),children:[F0&&(0,z.jsxs)("div",{className:"mv-downloadMenu",children:[(0,z.jsxs)("button",{className:"mv-downloadMenuItem",onClick:H0,disabled:Rd||!Vn.current,children:[(0,z.jsx)(Te.Box,{size:14}),"Download GLB"]}),(0,z.jsx)("div",{className:"mv-downloadMenuDivider"}),Lt&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)("button",{className:"mv-downloadMenuItem",onClick:G0,disabled:!Vn.current,children:[(0,z.jsx)(Te.Camera,{size:14}),"Download PNG"]}),(0,z.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,z.jsxs)("button",{className:"mv-downloadMenuItem",onClick:W0,disabled:!Vn.current,children:[(0,z.jsx)(Te.FileImage,{size:14}),"Download UV Layout"]}),ph&&(0,z.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:ph})]}),(0,z.jsx)("button",{className:"mv-downloadButton",onClick:j0,disabled:Rd||!Vn.current,title:"Download options",children:Rd?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)("span",{className:"mv-downloadButton__spinner"}),"Exporting\u2026"]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Te.Download,{size:15}),"Download"]})})]})]})]}),Kn&&(0,z.jsxs)("div",{className:"ri-annotationPopup",style:{left:ox,top:sx},onPointerDown:v=>v.stopPropagation(),onClick:v=>v.stopPropagation(),children:[(0,z.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:Ei.title,onChange:v=>gl(O=>({...O,title:v.target.value})),onKeyDown:v=>{v.key==="Enter"&&Ah(),v.key==="Escape"&&Od()}}),(0,z.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:Ei.description,onChange:v=>gl(O=>({...O,description:v.target.value})),onKeyDown:v=>{v.key==="Escape"&&Od()},rows:5}),(0,z.jsxs)("div",{className:"ri-annotationActions",children:[(0,z.jsx)("button",{onClick:Ah,className:`ri-annotationOkBtn ${Ei.title.trim()?"":"disabled"}`,disabled:!Ei.title.trim(),children:"OK"}),(0,z.jsx)("button",{onClick:Od,className:"ri-annotationCancelBtn",children:"Cancel"}),(0,z.jsx)("div",{className:"ri-annotationIcons"})]})]})]}),k&&rr&&(0,z.jsx)(lp,{colorPicker:rr,onClose:hr,itemMaterials:qr,setItemMaterials:Gn}),k&&Yr&&(0,z.jsx)(cp,{triggerFileUpload:yh,materialPopup:Yr,textureUrl:Rh,clearTexture:wh})]}),$&&(0,z.jsx)("div",{className:"ri-viewerRight",children:X?X({objectBindings:Bt,onAction:yl,onFocus:Sh,onHover:rl}):(0,z.jsx)(up,{objectBindings:Bt,onAction:yl,onFocus:Sh,onHover:rl})}),Pe&&(0,z.jsx)(ob,{controlsRef:Be,enabled:!0,opacity:Et,moveSensitivity:Wt,position:Ie})]})}var te=require("react"),Hn=require("lucide-react");var Gt=require("react"),_p=require("three");function Rb(e){return[e.x,e.y,e.z]}function qi(e,t){let n=new _p.Vector3,i=new _p.Vector3;return t.getPosition(n),t.getTarget(i),{position:Rb(n),target:Rb(i),fov:"fov"in e&&typeof e.fov=="number"?e.fov:null,zoom:"zoom"in e&&typeof e.zoom=="number"?e.zoom:1,azimuthAngle:t.azimuthAngle,polarAngle:t.polarAngle}}function l_(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 Fs(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function Hc(e={}){let t=(0,Gt.useRef)(e);t.current=e;let n=(0,Gt.useRef)(null),[i,r]=(0,Gt.useState)(null),[a,o]=(0,Gt.useState)(()=>({...e.presets})),s=(0,Gt.useRef)(a);s.current=a;let c=(0,Gt.useCallback)(y=>{r(M=>l_(M,y)?M:y)},[]),l=(0,Gt.useCallback)((y,M)=>{c(qi(y,M))},[c]),u=(0,Gt.useRef)(null),d=(0,Gt.useRef)(null),h=(0,Gt.useRef)(null),m=(0,Gt.useCallback)(y=>{n.current=y;let M=qi(y.controls.camera,y.controls);c(M),y.scene!==d.current&&(d.current=y.scene,u.current=null,h.current=null),y.homeCameraState&&!u.current&&(u.current=y.homeCameraState);let{initialPosition:C,initialTarget:N,initialTransition:L=!1}=t.current;if((C||N)&&y.scene&&(C||y.homeCameraState)&&h.current!==y.controls){h.current=y.controls,y.homeCameraState||vo(y.controls);let V=C??M.position,U=N??M.target;y.controls.setLookAt(V[0],V[1],V[2],U[0],U[1],U[2],L).then(()=>{if(n.current?.controls!==y.controls)return;let D=qi(y.controls.camera,y.controls);u.current={position:D.position,target:D.target},c(D)}).catch(()=>{})}},[c]),f=(0,Gt.useCallback)(async()=>{let y=n.current,M=y?.controls;if(!M)return!1;try{let C=u.current;return C?await Fs(M,()=>M.setLookAt(C.position[0],C.position[1],C.position[2],C.target[0],C.target[1],C.target[2],!0)):y?.scene?await Fs(M,()=>M.fitToBox(y.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Fs(M,()=>M.reset(!0)),!0}catch{return!1}},[]),x=(0,Gt.useCallback)(async()=>{let y=n.current;if(!y?.controls||!y.scene)return!1;try{return await Fs(y.controls,()=>y.controls.fitToBox(y.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),E=(0,Gt.useCallback)(async y=>{let M=n.current;if(!M?.controls)return!1;let C=Rn(M.objectBindings,y);if(!C)return!1;let N=M.nodeRefs[C];if(!N)return!1;try{return await Fs(M.controls,()=>M.controls.fitToBox(N,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),w=(0,Gt.useCallback)(async(y,M=!0)=>{let C=n.current?.controls;if(!C)return!1;try{return n.current?.homeCameraState||vo(C),await C.setTarget(y[0],y[1],y[2],M),c(qi(C.camera,C)),!0}catch{return!1}},[c]),p=(0,Gt.useCallback)(async(y,M=!0)=>{let C=n.current?.controls;if(!C)return!1;try{n.current?.homeCameraState||vo(C);let N=[C.setLookAt(y.position[0],y.position[1],y.position[2],y.target[0],y.target[1],y.target[2],M)];y.azimuthAngle!=null&&y.polarAngle!=null&&N.push(C.rotateTo(y.azimuthAngle,y.polarAngle,M)),await Promise.all(N);let L=C.camera,V=!1;return y.fov!=null&&"fov"in L&&typeof L.fov=="number"&&(L.fov=y.fov,V=!0),y.zoom!=null&&"zoom"in L&&typeof L.zoom=="number"&&(L.zoom=y.zoom,V=!0),V&&"updateProjectionMatrix"in L&&L.updateProjectionMatrix(),c(qi(L,C)),!0}catch{return!1}},[c]),g=(0,Gt.useCallback)((y,M=!0)=>p(y,M),[p]),_=(0,Gt.useCallback)((y,M,C=!0)=>p({position:y,target:M},C),[p]),S=(0,Gt.useCallback)(async(y,M,C=!0)=>{let N=n.current?.controls;if(!N)return!1;try{return n.current?.homeCameraState||vo(N),await N.rotateTo(y,M,C),c(qi(N.camera,N)),!0}catch{return!1}},[c]),T=(0,Gt.useCallback)(async(y,M=!0)=>{let C=n.current?.controls;if(!C)return!1;try{return n.current?.homeCameraState||vo(C),await C.dollyTo(y,M),c(qi(C.camera,C)),!0}catch{return!1}},[c]),P=(0,Gt.useCallback)(y=>{let M=n.current?.controls,C=y.trim();if(!M||!C)return null;let N=qi(M.camera,M);return s.current={...s.current,[C]:N},o(L=>({...L,[C]:N})),c(N),N},[c]),b=(0,Gt.useCallback)((y,M=!0)=>{let C=s.current[y];return C?p(C,M):Promise.resolve(!1)},[p]);return{cameraState:i,cameraPresets:a,resetView:f,focusObject:E,fitScene:x,setCameraTarget:w,setCameraState:g,lookAt:_,orbitTo:S,dollyTo:T,savePreset:P,goToPreset:b,handleCameraChange:l,handleViewerReady:m}}var bn=require("react");function Gc(){let e=(0,bn.useRef)(null),[t,n]=(0,bn.useState)([]),i=(0,bn.useRef)(null),[r,a]=(0,bn.useState)([]),[o,s]=(0,bn.useState)(null),[c,l]=(0,bn.useState)(!1),[u,d]=(0,bn.useState)(1),[h,m]=(0,bn.useState)(0),[f,x]=(0,bn.useState)(0);(0,bn.useEffect)(()=>()=>{i.current?.()},[]);let E=(0,bn.useCallback)(T=>{i.current?.(),e.current=T,n(T.clips),a(T.clipDetails??T.clips.map(b=>({sourceName:b,duration:0})));let P=T.getState?.()??{currentClip:null,isPlaying:!1,speed:1,time:0,duration:0};s(P.currentClip),l(P.isPlaying),d(P.speed),m(P.time),x(P.duration),T.subscribe?i.current=T.subscribe(b=>{s(b.currentClip),l(b.isPlaying),d(b.speed),m(b.time),x(b.duration)}):i.current=null},[]),w=(0,bn.useCallback)(T=>{e.current?.play(T),s(T),l(!0)},[]),p=(0,bn.useCallback)(()=>{e.current?.pause(),l(!1)},[]),g=(0,bn.useCallback)(()=>{e.current?.stop(),s(null),l(!1),m(0)},[]),_=(0,bn.useCallback)(T=>{e.current?.setSpeed(T),d(T)},[]),S=(0,bn.useCallback)(T=>{e.current?.seek?.(T),m(T)},[]);return{clips:t,clipDetails:r,currentClip:o,isPlaying:c,speed:u,time:h,duration:f,play:w,pause:p,stop:g,setSpeed:_,seek:S,handleAnimationsReady:E}}var Kc=require("react");var Vb=require("react"),$i=require("lucide-react"),qc=require("react-colorful");var Hr=require("react"),Db=require("react-dom"),Wc=require("lucide-react"),Xc=require("react-colorful");function _o(e){let t=e.replace("#","").match(/.{2}/g).map(i=>parseInt(i,16)/255).map(i=>i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var Lb=require("react");function kb(e,t,n){(0,Lb.useEffect)(()=>{if(!n)return;let i=Array.isArray(e)?e:[e],r=a=>{let o=a.target;i.some(c=>c.current?.contains(o))||t()};return document.addEventListener("pointerdown",r,!0),()=>{document.removeEventListener("pointerdown",r,!0)}},[e,t,n])}var Me=require("react/jsx-runtime");function Sp({anchorRef:e,onClose:t,children:n}){let i=(0,Hr.useRef)(null),[r,a]=(0,Hr.useState)(null);return kb([i,e],t,!0),(0,Hr.useLayoutEffect)(()=>{let o=e.current;if(!o)return;let s=o.getBoundingClientRect(),c=222,l=8,u=Math.min(Math.max(s.right-c,l),window.innerWidth-c-l),d=Math.min(s.bottom+6,window.innerHeight-200);a({top:d,left:u})},[e]),r?(0,Db.createPortal)((0,Me.jsx)("div",{ref:i,className:"se-colorPickerPopover",style:{position:"fixed",top:r.top,left:r.left},children:n}),document.body):null}function c_(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 Ra({title:e,children:t}){return(0,Me.jsxs)("section",{className:"se-section",children:[(0,Me.jsx)("h3",{className:"se-sectionTitle",children:e}),(0,Me.jsx)("div",{className:"se-sectionBody",children:t})]})}function ot({title:e,open:t,onToggle:n,trailing:i,children:r,disabled:a,tooltip:o}){let s=o?`${o}`:e;return(0,Me.jsxs)("section",{className:"se-panel",children:[(0,Me.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,title:s,children:[(0,Me.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Me.jsx)(Wc.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Me.jsx)("span",{className:"se-panelTitle",children:e}),o?(0,Me.jsx)("span",{className:"se-panelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Me.jsx)(Wc.Info,{size:13})}):null]}),i?(0,Me.jsx)("span",{className:"se-panelTrailing",onClick:c=>c.stopPropagation(),children:i}):null]}),t?(0,Me.jsx)("div",{className:"se-panelBody",style:a?{opacity:.45,pointerEvents:"none"}:void 0,children:r}):null]})}function gt({checked:e,onChange:t,label:n}){return(0,Me.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Me.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Me.jsx)("span",{className:"se-switchTrack",children:(0,Me.jsx)("span",{className:"se-switchThumb"})})]})}function K({label:e,value:t,min:n,max:i,step:r,formatValue:a,onChange:o,disabled:s=!1}){return(0,Me.jsxs)("label",{className:`se-field ${s?"se-field--disabled":""}`,children:[(0,Me.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,Me.jsx)("span",{className:"se-fieldValue",children:a?a(t):t})]}),(0,Me.jsx)("input",{className:"se-slider",type:"range",min:n,max:i,step:r,value:t,onChange:c=>o(Number(c.target.value)),disabled:s})]})}function xt({label:e,checked:t,onChange:n}){return(0,Me.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Me.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Me.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:i=>n(i.target.checked)})]})}function sr({label:e,value:t,options:n,onChange:i}){return(0,Me.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Me.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Me.jsx)("select",{className:"se-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,Me.jsx)("option",{value:r,children:c_(r)},r))})]})}function Mr({label:e,value:t,onChange:n}){let[i,r]=(0,Hr.useState)(!1),a=(0,Hr.useRef)(null);return(0,Me.jsxs)("div",{className:"se-field",children:[(0,Me.jsxs)("div",{className:"se-fieldInline",children:[(0,Me.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Me.jsx)("span",{ref:a,style:{display:"inline-flex"},children:(0,Me.jsx)(Xc.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>r(o=>!o),style:{background:t,color:_o(t)},color:t,onChange:n})})]}),i?(0,Me.jsx)(Sp,{anchorRef:a,onClose:()=>r(!1),children:(0,Me.jsx)(Xc.HexColorPicker,{color:t,onChange:n})}):null]})}function Bb({value:e,min:t,max:n,step:i,onChange:r}){let[a,o]=(0,Hr.useState)(String(e)),s=(0,Hr.useRef)(!1);return(0,Hr.useLayoutEffect)(()=>{s.current||o(String(e))},[e]),(0,Me.jsx)("input",{type:"number",className:"se-numberInput",min:t,max:n,step:i,value:a,onFocus:()=>{s.current=!0},onChange:c=>{let l=c.target.value;o(l),l!==""&&l!=="-"&&!Number.isNaN(Number(l))&&r(Number(l))},onBlur:()=>{s.current=!1,o(String(e))}})}function Yi({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Me.jsxs)("div",{className:"se-field",children:[(0,Me.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Me.jsx)("div",{className:"se-vectorRow",children:["X","Y","Z"].map((s,c)=>(0,Me.jsxs)("label",{className:"se-vectorAxis",children:[(0,Me.jsx)("span",{children:s}),(0,Me.jsx)(Bb,{value:t[c],min:n,max:i,step:r,onChange:l=>{let u=[...t];u[c]=l,a(u)}})]},s))})]})}function La({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Me.jsxs)("div",{className:"se-field",children:[(0,Me.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Me.jsx)("div",{className:"se-vectorRow",children:["X","Y"].map((s,c)=>(0,Me.jsxs)("label",{className:"se-vectorAxis",children:[(0,Me.jsx)("span",{children:s}),(0,Me.jsx)(Bb,{value:t[c],min:n,max:i,step:r,onChange:l=>{let u=[...t];u[c]=l,a(u)}})]},s))})]})}var Nb={free:0,starter:1,growth:2};function Ob(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function Ti(e,t){return Nb[e]>=Nb[t]}var Ib={free:"Free",starter:"Starter",growth:"Growth"};var zb=require("lucide-react");var js=require("react/jsx-runtime");function Qn({requiredTier:e,feature:t}){return(0,js.jsxs)("div",{className:"bb-tierLock",children:[(0,js.jsx)(zb.Lock,{size:16}),(0,js.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",Ib[e]," plan or higher."]})]})}var re=require("react/jsx-runtime"),d_=["lit","unlit","normals"],u_=["color","image","environment"];function Ub(e){let t=e%360;return t<0?t+360:t}function Hs({title:e,open:t,onToggle:n,children:i,trailing:r}){return(0,re.jsxs)("section",{className:"se-panel",children:[(0,re.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:[(0,re.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,re.jsx)($i.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,re.jsx)("span",{className:"se-panelTitle",children:e})]}),r?(0,re.jsx)("span",{className:"se-panelTrailing",onClick:a=>a.stopPropagation(),children:r}):null]}),t?(0,re.jsx)("div",{className:"se-panelBody",children:i}):null]})}function Mp({config:e,onChange:t}){let{model:n,camera:i,wireframe:r,background:a,environment:o}=e,{tier:s}=Sr(),c=Ti(s,"starter"),[l,u]=(0,Vb.useState)({general:!0,camera:!0,autoRotate:!1,wireframe:!1,background:!1}),d=p=>u(g=>({...g,[p]:!g[p]})),h=p=>t({...e,model:p}),m=p=>t({...e,camera:p}),f=p=>t({...e,wireframe:p}),x=p=>t({...e,background:p}),E=p=>t({...e,environment:p}),w=p=>{E({...o,source:"preset",preset:p})};return(0,re.jsxs)("div",{className:"se-generalContent",children:[(0,re.jsxs)(Hs,{title:"General",open:l.general,onToggle:()=>d("general"),children:[(0,re.jsxs)("div",{className:"se-field",children:[(0,re.jsxs)("div",{className:"se-fieldLabel",children:[(0,re.jsx)("span",{children:"Straighten model"}),(0,re.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>h({...n,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,re.jsx)($i.RotateCcw,{size:16})})]}),(0,re.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((p,g)=>(0,re.jsxs)("div",{className:"se-axisStepper",children:[(0,re.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let _=[...n.rotation];_[g]=Ub(_[g]-90),h({...n,rotation:_})},"aria-label":`Rotate ${p} axis backward`,children:(0,re.jsx)($i.ChevronLeft,{size:16})}),(0,re.jsx)("span",{className:"se-axisStepperLabel",children:p}),(0,re.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let _=[...n.rotation];_[g]=Ub(_[g]+90),h({...n,rotation:_})},"aria-label":`Rotate ${p} axis forward`,children:(0,re.jsx)($i.ChevronRight,{size:16})})]},p))})]}),(0,re.jsx)(Yi,{label:"Rotation",value:n.rotation,min:0,max:360,step:1,onChange:p=>h({...n,rotation:p})}),(0,re.jsxs)("div",{className:"se-field",children:[(0,re.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,re.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:lm.map(p=>(0,re.jsx)("button",{type:"button",className:`se-segmentedOption ${n.renderer===p?"se-segmentedOption--active":""}`,onClick:()=>h({...n,renderer:p}),children:p==="uv-checker"?"UV CHECKER":p.toUpperCase()},p))})]}),(0,re.jsx)(sr,{label:"Shading",value:n.shading,options:d_,onChange:p=>h({...n,shading:p})})]}),(0,re.jsx)(Hs,{title:"Camera",open:l.camera,onToggle:()=>d("camera"),children:(0,re.jsx)(K,{label:"Field Of View",value:i.fieldOfView,min:20,max:100,step:.1,formatValue:p=>`${p.toFixed(3)}\xB0`,onChange:p=>m({...i,fieldOfView:p})})}),(0,re.jsx)(Hs,{title:"Auto Rotate",open:l.autoRotate,onToggle:()=>d("autoRotate"),trailing:(0,re.jsxs)("label",{className:"se-switch","aria-label":"Toggle auto rotate",children:[(0,re.jsx)("input",{type:"checkbox",checked:n.autoRotate??!1,onChange:p=>h({...n,autoRotate:p.target.checked})}),(0,re.jsx)("span",{className:"se-switchTrack",children:(0,re.jsx)("span",{className:"se-switchThumb"})})]}),children:n.autoRotate?(0,re.jsx)(K,{label:"Rotation Speed",value:n.autoRotateSpeed??1,min:.1,max:3,step:.1,formatValue:p=>`${p.toFixed(1)}x`,onChange:p=>h({...n,autoRotateSpeed:p})}):(0,re.jsx)("div",{className:"se-placeholder",children:"Enable auto rotate to adjust its speed."})}),(0,re.jsx)(Hs,{title:"Wireframe",open:l.wireframe,onToggle:()=>d("wireframe"),trailing:(0,re.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,re.jsx)("input",{type:"checkbox",checked:c&&r.enabled,disabled:!c,onChange:p=>f({...r,enabled:p.target.checked})}),(0,re.jsx)("span",{className:"se-switchTrack",children:(0,re.jsx)("span",{className:"se-switchThumb"})})]}),children:c?(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(K,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:p=>f({...r,opacity:p})}),(0,re.jsx)(Mr,{label:"Wire color",value:r.color,onChange:p=>f({...r,color:p})})]}):(0,re.jsx)(Qn,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,re.jsx)(Hs,{title:"Background",open:l.background,onToggle:()=>d("background"),trailing:(0,re.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,re.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:p=>x({...a,enabled:p.target.checked})}),(0,re.jsx)("span",{className:"se-switchTrack",children:(0,re.jsx)("span",{className:"se-switchThumb"})})]}),children:a.enabled?(0,re.jsxs)(re.Fragment,{children:[(0,re.jsxs)("div",{className:"se-field",children:[(0,re.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,re.jsx)("div",{className:"se-segmentedControl",children:u_.map(p=>(0,re.jsx)("button",{type:"button",className:`se-segmentedOption ${a.type===p?"se-segmentedOption--active":""}`,onClick:()=>x({...a,type:p}),children:p},p))})]}),a.type==="environment"?c?(0,re.jsxs)(re.Fragment,{children:[(0,re.jsxs)("div",{className:"se-field",children:[(0,re.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,re.jsxs)("div",{className:"se-segmentedControl",children:[(0,re.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>E({...o,source:"preset"}),children:"PRESET"}),(0,re.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>E({...o,source:"custom"}),children:"CUSTOM"})]})]}),o.source==="preset"?(0,re.jsx)(sr,{label:"Environment preset",value:o.preset,options:cm,onChange:w}):(0,re.jsxs)("label",{className:"se-field",children:[(0,re.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,re.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:o.customEnvironmentUrl,onChange:p=>E({...o,customEnvironmentUrl:p.target.value})}),(0,re.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),o.customEnvironmentUrl.trim()&&!Tl(o.customEnvironmentUrl)?(0,re.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,re.jsx)(K,{label:"Environment intensity",value:o.intensity,min:0,max:3,step:.05,onChange:p=>E({...o,intensity:p})})]}):(0,re.jsx)(Qn,{requiredTier:"starter",feature:"Environment backgrounds"}):null,a.type==="image"?(0,re.jsxs)("label",{className:"se-field",children:[(0,re.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,re.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:a.imageUrl,onChange:p=>x({...a,imageUrl:p.target.value})})]}):null,a.type==="color"?(0,re.jsxs)("div",{className:"se-field",children:[(0,re.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,re.jsx)("div",{className:"se-inlineColorPicker",children:(0,re.jsx)(qc.HexColorPicker,{color:a.color,onChange:p=>x({...a,color:p})})}),(0,re.jsx)("div",{className:"se-fieldInline",children:(0,re.jsx)(qc.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:a.color,color:_o(a.color)},color:a.color,onChange:p=>x({...a,color:p})})})]}):null]}):(0,re.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var dv=require("react");var fe=require("react/jsx-runtime");function Fb({pp:e,set:t,open:n,toggle:i}){let{ssao:r}=e;return(0,fe.jsxs)(ot,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:n.ssao,onToggle:()=>i("ssao"),disabled:!r.enabled,trailing:(0,fe.jsx)(gt,{checked:r.enabled,onChange:a=>t("ssao",{...r,enabled:a}),label:"Toggle SSAO"}),children:[(0,fe.jsx)(K,{label:"Samples",value:r.samples,min:1,max:64,step:1,onChange:a=>t("ssao",{...r,samples:a})}),(0,fe.jsx)(K,{label:"Rings",value:r.rings,min:1,max:12,step:1,onChange:a=>t("ssao",{...r,rings:a})}),(0,fe.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:20,step:.5,onChange:a=>t("ssao",{...r,intensity:a})}),(0,fe.jsx)(K,{label:"Radius",value:r.radius,min:.01,max:1,step:.01,onChange:a=>t("ssao",{...r,radius:a})}),(0,fe.jsx)(K,{label:"Bias",value:r.bias,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,bias:a})}),(0,fe.jsx)(K,{label:"Luminance Influence",value:r.luminanceInfluence,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,luminanceInfluence:a})}),(0,fe.jsx)(K,{label:"Fade",value:r.fade,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,fade:a})}),(0,fe.jsx)(K,{label:"Min Radius Scale",value:r.minRadiusScale,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,minRadiusScale:a})}),(0,fe.jsx)(K,{label:"World Distance Threshold",value:r.worldDistanceThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldDistanceThreshold:a})}),(0,fe.jsx)(K,{label:"World Distance Falloff",value:r.worldDistanceFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldDistanceFalloff:a})}),(0,fe.jsx)(K,{label:"World Proximity Threshold",value:r.worldProximityThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldProximityThreshold:a})}),(0,fe.jsx)(K,{label:"World Proximity Falloff",value:r.worldProximityFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldProximityFalloff:a})})]})}function jb({pp:e,set:t,open:n,toggle:i}){let{autofocus:r}=e;return(0,fe.jsxs)(ot,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:n.autofocus,onToggle:()=>i("autofocus"),disabled:!r.enabled,trailing:(0,fe.jsx)(gt,{checked:r.enabled,onChange:a=>t("autofocus",{...r,enabled:a}),label:"Toggle Autofocus"}),children:[(0,fe.jsx)(K,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusDistance:a})}),(0,fe.jsx)(K,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusRange:a})}),(0,fe.jsx)(K,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,focalLength:a})}),(0,fe.jsx)(K,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("autofocus",{...r,bokehScale:a})}),(0,fe.jsx)(Yi,{label:"Target",value:r.target,min:-100,max:100,step:.1,onChange:a=>t("autofocus",{...r,target:a})}),(0,fe.jsx)(xt,{label:"Mouse Follow",checked:r.mouse,onChange:a=>t("autofocus",{...r,mouse:a})}),(0,fe.jsx)(xt,{label:"Manual Update",checked:r.manual,onChange:a=>t("autofocus",{...r,manual:a})}),(0,fe.jsx)(K,{label:"Debug",value:r.debug,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,debug:a})}),(0,fe.jsx)(K,{label:"Smooth Time",value:r.smoothTime,min:0,max:2,step:.01,onChange:a=>t("autofocus",{...r,smoothTime:a})})]})}function Hb({pp:e,set:t,open:n,toggle:i}){let{godRays:r}=e;return(0,fe.jsxs)(ot,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:n.godRays,onToggle:()=>i("godRays"),disabled:!r.enabled,trailing:(0,fe.jsx)(gt,{checked:r.enabled,onChange:a=>t("godRays",{...r,enabled:a}),label:"Toggle GodRays"}),children:[(0,fe.jsx)(Yi,{label:"Sun Position",value:r.sunPosition,min:-100,max:100,step:.1,onChange:a=>t("godRays",{...r,sunPosition:a})}),(0,fe.jsx)(K,{label:"Samples",value:r.samples,min:1,max:128,step:1,onChange:a=>t("godRays",{...r,samples:a})}),(0,fe.jsx)(K,{label:"Density",value:r.density,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,density:a})}),(0,fe.jsx)(K,{label:"Decay",value:r.decay,min:0,max:1,step:.01,onChange:a=>t("godRays",{...r,decay:a})}),(0,fe.jsx)(K,{label:"Weight",value:r.weight,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,weight:a})}),(0,fe.jsx)(K,{label:"Exposure",value:r.exposure,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,exposure:a})}),(0,fe.jsx)(K,{label:"Clamp Max",value:r.clampMax,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,clampMax:a})}),(0,fe.jsx)(xt,{label:"Blur",checked:r.blur,onChange:a=>t("godRays",{...r,blur:a})}),(0,fe.jsx)(sr,{label:"Kernel Size",value:r.kernelSize,options:Qo,onChange:a=>t("godRays",{...r,kernelSize:a})})]})}function Gb({pp:e,set:t,open:n,toggle:i}){let{lensflare:r}=e;return(0,fe.jsxs)(ot,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:n.lensflare,onToggle:()=>i("lensflare"),disabled:!r.enabled,trailing:(0,fe.jsx)(gt,{checked:r.enabled,onChange:a=>t("lensflare",{...r,enabled:a}),label:"Toggle Lensflare"}),children:[(0,fe.jsx)(Yi,{label:"Lens Position",value:r.lensPosition,min:-100,max:100,step:.1,onChange:a=>t("lensflare",{...r,lensPosition:a})}),(0,fe.jsx)(K,{label:"Smooth Time",value:r.smoothTime,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,smoothTime:a})}),(0,fe.jsx)(K,{label:"Glare Size",value:r.glareSize,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,glareSize:a})}),(0,fe.jsx)(K,{label:"Flare Size",value:r.flareSize,min:0,max:.1,step:.001,onChange:a=>t("lensflare",{...r,flareSize:a})}),(0,fe.jsx)(K,{label:"Flare Speed",value:r.flareSpeed,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareSpeed:a})}),(0,fe.jsx)(K,{label:"Flare Shape",value:r.flareShape,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareShape:a})}),(0,fe.jsx)(xt,{label:"Animated",checked:r.animated,onChange:a=>t("lensflare",{...r,animated:a})}),(0,fe.jsx)(xt,{label:"Anamorphic",checked:r.anamorphic,onChange:a=>t("lensflare",{...r,anamorphic:a})}),(0,fe.jsx)(Mr,{label:"Color Gain",value:r.colorGain,onChange:a=>t("lensflare",{...r,colorGain:a})}),(0,fe.jsx)(K,{label:"Halo Scale",value:r.haloScale,min:0,max:2,step:.01,onChange:a=>t("lensflare",{...r,haloScale:a})}),(0,fe.jsx)(xt,{label:"Secondary Ghosts",checked:r.secondaryGhosts,onChange:a=>t("lensflare",{...r,secondaryGhosts:a})}),(0,fe.jsx)(xt,{label:"Additional Streaks",checked:r.aditionalStreaks,onChange:a=>t("lensflare",{...r,aditionalStreaks:a})}),(0,fe.jsx)(K,{label:"Ghost Scale",value:r.ghostScale,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,ghostScale:a})}),(0,fe.jsx)(K,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,opacity:a})}),(0,fe.jsx)(xt,{label:"Star Burst",checked:r.starBurst,onChange:a=>t("lensflare",{...r,starBurst:a})})]})}function Wb({pp:e,set:t,open:n,toggle:i}){let{depthOfField:r}=e;return(0,fe.jsxs)(ot,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:n.depthOfField,onToggle:()=>i("depthOfField"),disabled:!r.enabled,trailing:(0,fe.jsx)(gt,{checked:r.enabled,onChange:a=>t("depthOfField",{...r,enabled:a}),label:"Toggle DepthOfField"}),children:[(0,fe.jsx)(K,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusDistance:a})}),(0,fe.jsx)(K,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusRange:a})}),(0,fe.jsx)(K,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("depthOfField",{...r,focalLength:a})}),(0,fe.jsx)(K,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("depthOfField",{...r,bokehScale:a})})]})}var Ge=require("react/jsx-runtime"),p_=["linear","reinhard","aces"];function Xb({pp:e,set:t,open:n,toggle:i}){let{colorAverage:r}=e;return(0,Ge.jsx)(ot,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:n.colorAverage,onToggle:()=>i("colorAverage"),disabled:!r.enabled,trailing:(0,Ge.jsx)(gt,{checked:r.enabled,onChange:a=>t("colorAverage",{...r,enabled:a}),label:"Toggle ColorAverage"}),children:(0,Ge.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function qb({pp:e,set:t,open:n,toggle:i}){let{brightnessContrast:r}=e;return(0,Ge.jsxs)(ot,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:n.brightnessContrast,onToggle:()=>i("brightnessContrast"),disabled:!r.enabled,trailing:(0,Ge.jsx)(gt,{checked:r.enabled,onChange:a=>t("brightnessContrast",{...r,enabled:a}),label:"Toggle BrightnessContrast"}),children:[(0,Ge.jsx)(K,{label:"Brightness",value:r.brightness,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,brightness:a})}),(0,Ge.jsx)(K,{label:"Contrast",value:r.contrast,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,contrast:a})})]})}function Yb({pp:e,set:t,open:n,toggle:i}){let{hueSaturation:r}=e;return(0,Ge.jsxs)(ot,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:n.hueSaturation,onToggle:()=>i("hueSaturation"),disabled:!r.enabled,trailing:(0,Ge.jsx)(gt,{checked:r.enabled,onChange:a=>t("hueSaturation",{...r,enabled:a}),label:"Toggle HueSaturation"}),children:[(0,Ge.jsx)(K,{label:"Hue",value:r.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("hueSaturation",{...r,hue:a})}),(0,Ge.jsx)(K,{label:"Saturation",value:r.saturation,min:-1,max:1,step:.01,onChange:a=>t("hueSaturation",{...r,saturation:a})})]})}function $b({pp:e,set:t,open:n,toggle:i}){let{vignette:r}=e;return(0,Ge.jsxs)(ot,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:n.vignette,onToggle:()=>i("vignette"),disabled:!r.enabled,trailing:(0,Ge.jsx)(gt,{checked:r.enabled,onChange:a=>t("vignette",{...r,enabled:a}),label:"Toggle Vignette"}),children:[(0,Ge.jsx)(K,{label:"Offset",value:r.offset,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,offset:a})}),(0,Ge.jsx)(K,{label:"Darkness",value:r.darkness,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,darkness:a})}),(0,Ge.jsx)(xt,{label:"Eskil",checked:r.eskil,onChange:a=>t("vignette",{...r,eskil:a})})]})}function Kb({pp:e,set:t,open:n,toggle:i}){let{bloom:r}=e;return(0,Ge.jsxs)(ot,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:n.bloom,onToggle:()=>i("bloom"),disabled:!r.enabled,trailing:(0,Ge.jsx)(gt,{checked:r.enabled,onChange:a=>t("bloom",{...r,enabled:a}),label:"Toggle Bloom"}),children:[(0,Ge.jsx)(K,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceThreshold:a})}),(0,Ge.jsx)(K,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceSmoothing:a})}),(0,Ge.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:3,step:.05,onChange:a=>t("bloom",{...r,intensity:a})}),(0,Ge.jsx)(xt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("bloom",{...r,mipmapBlur:a})}),(0,Ge.jsx)(K,{label:"Radius",value:r.radius,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,radius:a})}),(0,Ge.jsx)(K,{label:"Levels",value:r.levels,min:1,max:16,step:1,onChange:a=>t("bloom",{...r,levels:a})})]})}function Zb({pp:e,set:t,open:n,toggle:i}){let{toneMapping:r}=e;return(0,Ge.jsxs)(ot,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:n.toneMapping,onToggle:()=>i("toneMapping"),disabled:!r.enabled,trailing:(0,Ge.jsx)(gt,{checked:r.enabled,onChange:a=>t("toneMapping",{...r,enabled:a}),label:"Toggle ToneMapping"}),children:[(0,Ge.jsxs)("div",{className:"se-field",children:[(0,Ge.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,Ge.jsx)("div",{className:"se-segmentedControl",children:p_.map(a=>(0,Ge.jsx)("button",{type:"button",className:`se-segmentedOption ${r.mode===a?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...r,mode:a}),children:a==="aces"?"Filmic":a.charAt(0).toUpperCase()+a.slice(1)},a))})]}),(0,Ge.jsx)(K,{label:"Resolution",value:r.resolution,min:64,max:4096,step:64,onChange:a=>t("toneMapping",{...r,resolution:a})}),(0,Ge.jsx)(K,{label:"White Point",value:r.whitePoint,min:0,max:16,step:.01,onChange:a=>t("toneMapping",{...r,whitePoint:a})}),(0,Ge.jsx)(K,{label:"Middle Grey",value:r.middleGrey,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,middleGrey:a})}),(0,Ge.jsx)(K,{label:"Min Luminance",value:r.minLuminance,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,minLuminance:a})}),(0,Ge.jsx)(K,{label:"Average Luminance",value:r.averageLuminance,min:0,max:4,step:.01,onChange:a=>t("toneMapping",{...r,averageLuminance:a})}),(0,Ge.jsx)(K,{label:"Adaptation Rate",value:r.adaptationRate,min:0,max:10,step:.01,onChange:a=>t("toneMapping",{...r,adaptationRate:a})}),(0,Ge.jsx)(K,{label:"Exposure",value:r.exposure,min:0,max:3,step:.01,onChange:a=>t("toneMapping",{...r,exposure:a})})]})}function Jb({pp:e,set:t,open:n,toggle:i}){let{sepia:r}=e;return(0,Ge.jsx)(ot,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:n.sepia,onToggle:()=>i("sepia"),disabled:!r.enabled,trailing:(0,Ge.jsx)(gt,{checked:r.enabled,onChange:a=>t("sepia",{...r,enabled:a}),label:"Toggle Sepia"}),children:(0,Ge.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:1,step:.01,onChange:a=>t("sepia",{...r,intensity:a})})})}var ke=require("react/jsx-runtime");function Qb({pp:e,set:t,open:n,toggle:i}){let{dotScreen:r}=e;return(0,ke.jsxs)(ot,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:n.dotScreen,onToggle:()=>i("dotScreen"),disabled:!r.enabled,trailing:(0,ke.jsx)(gt,{checked:r.enabled,onChange:a=>t("dotScreen",{...r,enabled:a}),label:"Toggle DotScreen"}),children:[(0,ke.jsx)(K,{label:"Angle",value:r.angle,min:0,max:Math.PI*2,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("dotScreen",{...r,angle:a})}),(0,ke.jsx)(K,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("dotScreen",{...r,scale:a})})]})}function ev({pp:e,set:t,open:n,toggle:i}){let{glitch:r}=e;return(0,ke.jsxs)(ot,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:n.glitch,onToggle:()=>i("glitch"),disabled:!r.enabled,trailing:(0,ke.jsx)(gt,{checked:r.enabled,onChange:a=>t("glitch",{...r,enabled:a}),label:"Toggle Glitch"}),children:[(0,ke.jsx)(sr,{label:"Mode",value:r.mode,options:dm,onChange:a=>t("glitch",{...r,mode:a})}),(0,ke.jsx)(La,{label:"Delay",value:r.delay,min:0,max:10,step:.01,onChange:a=>t("glitch",{...r,delay:a})}),(0,ke.jsx)(La,{label:"Duration",value:r.duration,min:0,max:5,step:.01,onChange:a=>t("glitch",{...r,duration:a})}),(0,ke.jsx)(La,{label:"Strength",value:r.strength,min:0,max:2,step:.01,onChange:a=>t("glitch",{...r,strength:a})}),(0,ke.jsx)(La,{label:"Chromatic Aberration Offset",value:r.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:a=>t("glitch",{...r,chromaticAberrationOffset:a})}),(0,ke.jsx)(K,{label:"Columns",value:r.columns,min:0,max:.5,step:.001,onChange:a=>t("glitch",{...r,columns:a})}),(0,ke.jsx)(K,{label:"Ratio",value:r.ratio,min:0,max:1,step:.01,onChange:a=>t("glitch",{...r,ratio:a})})]})}function tv({pp:e,set:t,open:n,toggle:i}){let{grid:r}=e;return(0,ke.jsxs)(ot,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:n.grid,onToggle:()=>i("grid"),disabled:!r.enabled,trailing:(0,ke.jsx)(gt,{checked:r.enabled,onChange:a=>t("grid",{...r,enabled:a}),label:"Toggle Grid"}),children:[(0,ke.jsx)(K,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("grid",{...r,scale:a})}),(0,ke.jsx)(K,{label:"Line Width",value:r.lineWidth,min:0,max:1,step:.01,onChange:a=>t("grid",{...r,lineWidth:a})})]})}function nv({pp:e,set:t,open:n,toggle:i}){let{chromaticAberration:r}=e;return(0,ke.jsxs)(ot,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:n.chromaticAberration,onToggle:()=>i("chromaticAberration"),disabled:!r.enabled,trailing:(0,ke.jsx)(gt,{checked:r.enabled,onChange:a=>t("chromaticAberration",{...r,enabled:a}),label:"Toggle ChromaticAberration"}),children:[(0,ke.jsx)(K,{label:"Offset X",value:r.offsetX,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetX:a})}),(0,ke.jsx)(K,{label:"Offset Y",value:r.offsetY,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetY:a})}),(0,ke.jsx)(xt,{label:"Radial Modulation",checked:r.radialModulation,onChange:a=>t("chromaticAberration",{...r,radialModulation:a})}),(0,ke.jsx)(K,{label:"Modulation Offset",value:r.modulationOffset,min:0,max:1,step:.01,onChange:a=>t("chromaticAberration",{...r,modulationOffset:a})})]})}function rv({pp:e,set:t,open:n,toggle:i}){let{noise:r}=e;return(0,ke.jsxs)(ot,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:n.noise,onToggle:()=>i("noise"),disabled:!r.enabled,trailing:(0,ke.jsx)(gt,{checked:r.enabled,onChange:a=>t("noise",{...r,enabled:a}),label:"Toggle Noise"}),children:[(0,ke.jsx)(K,{label:"Amount",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("noise",{...r,opacity:a})}),(0,ke.jsx)(xt,{label:"Premultiply",checked:r.premultiply,onChange:a=>t("noise",{...r,premultiply:a})})]})}function iv({pp:e,set:t,open:n,toggle:i}){let{scanline:r}=e;return(0,ke.jsx)(ot,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:n.scanline,onToggle:()=>i("scanline"),disabled:!r.enabled,trailing:(0,ke.jsx)(gt,{checked:r.enabled,onChange:a=>t("scanline",{...r,enabled:a}),label:"Toggle Scanline"}),children:(0,ke.jsx)(K,{label:"Density",value:r.density,min:0,max:10,step:.25,onChange:a=>t("scanline",{...r,density:a})})})}function av({pp:e,set:t,open:n,toggle:i}){let{pixelation:r}=e;return(0,ke.jsx)(ot,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:n.pixelation,onToggle:()=>i("pixelation"),disabled:!r.enabled,trailing:(0,ke.jsx)(gt,{checked:r.enabled,onChange:a=>t("pixelation",{...r,enabled:a}),label:"Toggle Pixelation"}),children:(0,ke.jsx)(K,{label:"Granularity",value:r.granularity,min:0,max:20,step:1,onChange:a=>t("pixelation",{...r,granularity:a})})})}function ov({pp:e,set:t,open:n,toggle:i}){let{ramp:r}=e;return(0,ke.jsxs)(ot,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:n.ramp,onToggle:()=>i("ramp"),disabled:!r.enabled,trailing:(0,ke.jsx)(gt,{checked:r.enabled,onChange:a=>t("ramp",{...r,enabled:a}),label:"Toggle Ramp"}),children:[(0,ke.jsx)(sr,{label:"Ramp Type",value:r.rampType,options:um,onChange:a=>t("ramp",{...r,rampType:a})}),(0,ke.jsx)(La,{label:"Ramp Start",value:r.rampStart,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampStart:a})}),(0,ke.jsx)(La,{label:"Ramp End",value:r.rampEnd,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampEnd:a})}),(0,ke.jsx)(Mr,{label:"Start Color",value:r.startColor,onChange:a=>t("ramp",{...r,startColor:a})}),(0,ke.jsx)(Mr,{label:"End Color",value:r.endColor,onChange:a=>t("ramp",{...r,endColor:a})}),!r.rampMask&&(0,ke.jsx)(K,{label:"Gradient Opacity",value:r.opacity??.5,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,opacity:a})}),(0,ke.jsx)(K,{label:"Bias",value:r.rampBias,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampBias:a})}),(0,ke.jsx)(K,{label:"Gain",value:r.rampGain,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampGain:a})}),(0,ke.jsx)(xt,{label:"Mask Earlier Effects",checked:r.rampMask,onChange:a=>t("ramp",{...r,rampMask:a})}),(0,ke.jsx)(xt,{label:"Invert",checked:r.rampInvert,onChange:a=>t("ramp",{...r,rampInvert:a})})]})}var Dt=require("react/jsx-runtime");function sv({pp:e,set:t,open:n,toggle:i}){let{outline:r}=e;return(0,Dt.jsxs)(ot,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:n.outline,onToggle:()=>i("outline"),disabled:!r.enabled,trailing:(0,Dt.jsx)(gt,{checked:r.enabled,onChange:a=>t("outline",{...r,enabled:a}),label:"Toggle Outline"}),children:[(0,Dt.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,Dt.jsx)(K,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("outline",{...r,selectionLayer:a})}),(0,Dt.jsx)(K,{label:"Edge Strength",value:r.edgeStrength,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,edgeStrength:a})}),(0,Dt.jsx)(K,{label:"Pulse Speed",value:r.pulseSpeed,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,pulseSpeed:a})}),(0,Dt.jsx)(Mr,{label:"Visible Edge Color",value:r.visibleEdgeColor,onChange:a=>t("outline",{...r,visibleEdgeColor:a})}),(0,Dt.jsx)(Mr,{label:"Hidden Edge Color",value:r.hiddenEdgeColor,onChange:a=>t("outline",{...r,hiddenEdgeColor:a})}),(0,Dt.jsx)(sr,{label:"Kernel Size",value:r.kernelSize,options:Qo,onChange:a=>t("outline",{...r,kernelSize:a})}),(0,Dt.jsx)(xt,{label:"Blur",checked:r.blur,onChange:a=>t("outline",{...r,blur:a})}),(0,Dt.jsx)(xt,{label:"X-Ray",checked:r.xRay,onChange:a=>t("outline",{...r,xRay:a})})]})}function lv({pp:e,set:t,open:n,toggle:i}){let{selectiveBloom:r}=e;return(0,Dt.jsxs)(ot,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:n.selectiveBloom,onToggle:()=>i("selectiveBloom"),disabled:!r.enabled,trailing:(0,Dt.jsx)(gt,{checked:r.enabled,onChange:a=>t("selectiveBloom",{...r,enabled:a}),label:"Toggle SelectiveBloom"}),children:[(0,Dt.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,Dt.jsx)(K,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("selectiveBloom",{...r,selectionLayer:a})}),(0,Dt.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:5,step:.05,onChange:a=>t("selectiveBloom",{...r,intensity:a})}),(0,Dt.jsx)(K,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceThreshold:a})}),(0,Dt.jsx)(K,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceSmoothing:a})}),(0,Dt.jsx)(sr,{label:"Kernel Size",value:r.kernelSize,options:Qo,onChange:a=>t("selectiveBloom",{...r,kernelSize:a})}),(0,Dt.jsx)(xt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("selectiveBloom",{...r,mipmapBlur:a})}),(0,Dt.jsx)(xt,{label:"Inverted",checked:r.inverted,onChange:a=>t("selectiveBloom",{...r,inverted:a})}),(0,Dt.jsx)(xt,{label:"Ignore Background",checked:r.ignoreBackground,onChange:a=>t("selectiveBloom",{...r,ignoreBackground:a})})]})}function cv({pp:e,set:t,open:n,toggle:i}){let{smaa:r}=e;return(0,Dt.jsx)(ot,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:n.smaa,onToggle:()=>i("smaa"),trailing:(0,Dt.jsx)(gt,{checked:r.enabled,onChange:a=>t("smaa",{...r,enabled:a}),label:"Toggle SMAA"}),children:(0,Dt.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var It=require("react/jsx-runtime");function Cp({config:e,onChange:t}){let[n,i]=(0,dv.useState)({autofocus:!1,colorAverage:!1,dotScreen:!1,glitch:!1,godRays:!1,grid:!1,lensflare:!1,outline:!1,selectiveBloom:!1,ramp:!1,ssao:!1,brightnessContrast:!1,hueSaturation:!1,depthOfField:!1,chromaticAberration:!1,vignette:!1,bloom:!1,toneMapping:!1,noise:!1,sepia:!1,scanline:!1,pixelation:!1,smaa:!1}),r=c=>i(l=>({...l,[c]:!l[c]})),a=e.postProcessing,s={pp:a,set:(c,l)=>t({...e,postProcessing:{...a,[c]:l}}),open:n,toggle:r};return(0,It.jsxs)("div",{className:"se-generalContent",children:[(0,It.jsx)(Fb,{...s}),(0,It.jsx)(jb,{...s}),(0,It.jsx)(Xb,{...s}),(0,It.jsx)(Qb,{...s}),(0,It.jsx)(ev,{...s}),(0,It.jsx)(Hb,{...s}),(0,It.jsx)(tv,{...s}),(0,It.jsx)(Gb,{...s}),(0,It.jsx)(sv,{...s}),(0,It.jsx)(lv,{...s}),(0,It.jsx)(qb,{...s}),(0,It.jsx)(Yb,{...s}),(0,It.jsx)(Wb,{...s}),(0,It.jsx)(nv,{...s}),(0,It.jsx)($b,{...s}),(0,It.jsx)(Kb,{...s}),(0,It.jsx)(Zb,{...s}),(0,It.jsx)(rv,{...s}),(0,It.jsx)(Jb,{...s}),(0,It.jsx)(iv,{...s}),(0,It.jsx)(av,{...s}),(0,It.jsx)(ov,{...s}),(0,It.jsx)(cv,{...s})]})}var Gs=require("react"),Ki=require("lucide-react");var ge=require("react/jsx-runtime"),h_=["512","1024","2048","4096"],uv={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function m_({index:e,light:t,selected:n,onSelect:i,onToggleVisible:r}){return(0,ge.jsxs)("div",{className:`se-lightRow ${n?"se-lightRow--active":""}`,onClick:i,children:[(0,ge.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",uv[t.type]]}),(0,ge.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:a=>{a.stopPropagation(),r()},children:t.visible?(0,ge.jsx)(Ki.Eye,{size:14}):(0,ge.jsx)(Ki.EyeOff,{size:14})})]})}function f_(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function Tp({config:e,onChange:t}){let[n,i]=(0,Gs.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),r=(0,Gs.useSyncExternalStore)(xp,Ic),[a,o]=(0,Gs.useState)(e.lighting.lights[0]?.id??null),s=r??a,c=b=>{o(b),Us(b)},l=b=>i(y=>({...y,[b]:!y[b]})),{tier:u}=Sr(),d=Ti(u,"starter"),{lighting:h,shadows:m,groundShadows:f,environment:x}=e,E=b=>t({...e,lighting:b}),w=b=>t({...e,shadows:b}),p=b=>t({...e,groundShadows:b}),g=b=>t({...e,environment:b}),_=(b,y)=>{E({...h,lights:h.lights.map(M=>M.id===b?{...M,...y}:M)})},S=h.lights.find(b=>b.id===s)??null,T=()=>{let b=f_();E({...h,lights:[...h.lights,b]}),c(b.id)},P=()=>{if(!S)return;let b=h.lights.filter(y=>y.id!==S.id);E({...h,lights:b}),c(b[0]?.id??null)};return(0,ge.jsxs)("div",{className:"se-generalContent",children:[(0,ge.jsxs)(ot,{title:"Lights",open:n.lights,onToggle:()=>l("lights"),children:[(0,ge.jsx)("div",{className:"se-lightList",children:h.lights.map((b,y)=>(0,ge.jsx)(m_,{index:y,light:b,selected:b.id===s,onSelect:()=>c(b.id),onToggleVisible:()=>_(b.id,{visible:!b.visible})},b.id))}),(0,ge.jsxs)("div",{className:"se-lightActions",children:[(0,ge.jsx)("button",{type:"button",className:"se-iconButton",onClick:T,title:"Add light",children:(0,ge.jsx)(Ki.Plus,{size:14})}),S&&h.lights.length>1&&(0,ge.jsx)("button",{type:"button",className:"se-iconButton",onClick:P,title:"Remove selected light",children:(0,ge.jsx)(Ki.Trash2,{size:14})})]}),S?(0,ge.jsxs)("div",{className:"se-lightProps",children:[(0,ge.jsxs)("div",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,ge.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:sm.map(b=>(0,ge.jsx)("button",{type:"button",className:`se-segmentedOption ${S.type===b?"se-segmentedOption--active":""}`,onClick:()=>_(S.id,{type:b}),children:uv[b]},b))})]}),(0,ge.jsx)(Mr,{label:"Color",value:S.color,onChange:b=>_(S.id,{color:b})}),(0,ge.jsx)(K,{label:"Intensity",value:S.intensity,min:0,max:10,step:.1,onChange:b=>_(S.id,{intensity:b})}),S.type!=="hemisphere"&&S.type!=="none"&&(0,ge.jsx)(Yi,{label:"Position",value:S.position,min:-100,max:100,step:.05,onChange:b=>_(S.id,{position:b})}),S.type==="spot"&&(0,ge.jsxs)(ge.Fragment,{children:[(0,ge.jsx)(K,{label:"Angle",value:S.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:b=>`${Math.round(b*180/Math.PI)}\xB0`,onChange:b=>_(S.id,{angle:b})}),(0,ge.jsx)(K,{label:"Penumbra",value:S.penumbra??.2,min:0,max:1,step:.01,onChange:b=>_(S.id,{penumbra:b})}),(0,ge.jsx)(K,{label:"Distance",value:S.distance??0,min:0,max:100,step:.5,onChange:b=>_(S.id,{distance:b})}),(0,ge.jsx)(K,{label:"Decay",value:S.decay??2,min:0,max:4,step:.1,onChange:b=>_(S.id,{decay:b})})]}),(0,ge.jsx)(xt,{label:"Attached to camera",checked:S.attachedToCamera,onChange:b=>_(S.id,{attachedToCamera:b})}),(0,ge.jsx)(xt,{label:"Cast shadows",checked:S.castShadow,onChange:b=>_(S.id,{castShadow:b})}),(0,ge.jsx)(K,{label:"Shadow bias",value:S.shadowBias,min:-.01,max:.01,step:1e-4,onChange:b=>_(S.id,{shadowBias:b})})]}):null]}),(0,ge.jsxs)(ot,{title:"Shadows",open:n.shadows,onToggle:()=>l("shadows"),disabled:!m.enabled,trailing:(0,ge.jsx)(gt,{checked:m.enabled,onChange:b=>w({...m,enabled:b}),label:"Toggle shadows"}),children:[(0,ge.jsx)(sr,{label:"Map size",value:String(m.mapSize),options:h_,onChange:b=>w({...m,mapSize:Number(b)})}),(0,ge.jsx)(K,{label:"Bias",value:m.bias,min:-.01,max:.01,step:1e-4,onChange:b=>w({...m,bias:b})}),(0,ge.jsx)(K,{label:"Normal bias",value:m.normalBias,min:0,max:.2,step:.01,onChange:b=>w({...m,normalBias:b})}),(0,ge.jsx)(K,{label:"Radius (softness)",value:m.radius,min:0,max:20,step:.5,onChange:b=>w({...m,radius:b})})]}),(0,ge.jsxs)(ot,{title:"Ground Shadows",open:n.groundShadows,onToggle:()=>l("groundShadows"),disabled:!f.enabled,trailing:(0,ge.jsx)(gt,{checked:f.enabled,onChange:b=>p({...f,enabled:b}),label:"Toggle ground shadows"}),children:[(0,ge.jsxs)("div",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,ge.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(b=>(0,ge.jsx)("button",{type:"button",className:`se-segmentedOption ${f.mode===b?"se-segmentedOption--active":""}`,onClick:()=>p({...f,mode:b}),children:b==="shadowCatcher"?"Shadow Catcher":"Baked AO"},b))})]}),f.mode==="bakedAO"&&(0,ge.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,ge.jsx)(K,{label:"Intensity",value:f.intensity,min:0,max:1,step:.01,onChange:b=>p({...f,intensity:b})}),(0,ge.jsx)(K,{label:"Border fade",value:f.borderFade,min:0,max:10,step:.1,onChange:b=>p({...f,borderFade:b})}),(0,ge.jsx)(K,{label:"Height",value:f.height,min:-5,max:5,step:.1,onChange:b=>p({...f,height:b})}),(0,ge.jsx)(K,{label:"Size",value:f.size,min:1,max:50,step:.5,onChange:b=>p({...f,size:b})})]}),(0,ge.jsx)(ot,{title:"Environment",open:n.environment,onToggle:()=>l("environment"),children:d?(0,ge.jsxs)(ge.Fragment,{children:[(0,ge.jsx)(K,{label:"Orientation",value:x.rotation,min:0,max:360,step:1,formatValue:b=>`${b}\xB0`,onChange:b=>g({...x,rotation:b})}),(0,ge.jsx)(K,{label:"Brightness",value:x.intensity,min:0,max:3,step:.05,onChange:b=>g({...x,intensity:b})}),(0,ge.jsxs)(ot,{title:"Shadow",open:n.envShadow,onToggle:()=>l("envShadow"),trailing:(0,ge.jsx)(gt,{checked:x.shadowLight.enabled,onChange:b=>g({...x,shadowLight:{...x.shadowLight,enabled:b}}),label:"Toggle environment shadow light"}),disabled:!x.shadowLight.enabled,children:[(0,ge.jsx)(K,{label:"Light intensity",value:x.shadowLight.intensity,min:0,max:20,step:.1,onChange:b=>g({...x,shadowLight:{...x.shadowLight,intensity:b}})}),(0,ge.jsx)(K,{label:"Shadow bias",value:x.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:b=>g({...x,shadowLight:{...x.shadowLight,bias:b}})})]})]}):(0,ge.jsx)(Qn,{requiredTier:"starter",feature:"Environment lighting"})})]})}var Yc=require("react"),ii=require("lucide-react");var ve=require("react/jsx-runtime");function g_(e){if(!Number.isFinite(e)||e<=0)return"Unknown duration";let t=Math.round(e*10)/10;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function pv(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function b_(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function Pp({config:e,onChange:t,clipDetails:n,currentClip:i,isPlaying:r,time:a,play:o,pause:s,stop:c,setSpeed:l,seek:u}){let[d,h]=(0,Yc.useState)(!1),m=(0,Yc.useMemo)(()=>new Map(n.map(b=>[b.sourceName,b.duration])),[n]),f=e.animations.clips.filter(b=>!b.hidden),x=e.animations.clips.filter(b=>b.hidden),E=(b,y=e.animations.autoplayClip)=>{t({...e,animations:{clips:b(e.animations.clips),autoplayClip:y}})},w=(b,y)=>{E(M=>M.map(C=>C.sourceName===b?y(C):C))},p=(b,y)=>{w(b,M=>({...M,loopMode:y}))},g=(b,y)=>{let M=b_(y);w(b,C=>({...C,speed:M})),i===b&&l(M)},_=(b,y)=>{w(b,M=>({...M,displayName:y}))},S=b=>{let y=e.animations.autoplayClip===b?null:b;t({...e,animations:{...e.animations,autoplayClip:y}})},T=b=>{E(y=>y.map(M=>M.sourceName===b?{...M,hidden:!0}:M),e.animations.autoplayClip===b?null:e.animations.autoplayClip),i===b&&c()},P=b=>{E(y=>y.map(M=>M.sourceName===b?{...M,hidden:!1}:M))};return e.animations.clips.length===0?(0,ve.jsx)(Ra,{title:"Animations",children:(0,ve.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,ve.jsxs)(Ra,{title:"Animations",children:[f.length===0&&(0,ve.jsx)("div",{className:"se-helperCard",children:(0,ve.jsx)("span",{children:"Preview clips directly in the viewer, choose one optional autoplay animation, and use soft delete to hide clips without modifying the GLB."})}),f.length===0?(0,ve.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,ve.jsx)("div",{className:"se-animationList",children:f.map(b=>{let y=i===b.sourceName,M=m.get(b.sourceName)??0;return(0,ve.jsxs)("article",{className:`se-animationCard ${y?"se-animationCard--active":""}`,children:[(0,ve.jsxs)("div",{className:"se-animationHeader",children:[(0,ve.jsxs)("div",{className:"se-animationHeading",children:[(0,ve.jsxs)("div",{className:"se-animationTitleRow",children:[(0,ve.jsx)("span",{className:"se-animationStatus",children:y?r?"Playing":"Paused":"Ready"}),e.animations.autoplayClip===b.sourceName?(0,ve.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>T(b.sourceName),title:"Remove animation",children:(0,ve.jsx)(ii.Trash2,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,ve.jsx)("input",{className:"se-textInput",value:b.displayName,onChange:N=>_(b.sourceName,N.target.value),placeholder:"Animation name"})]}),(0,ve.jsxs)("div",{className:"se-animationMeta",children:[(0,ve.jsx)("span",{children:g_(M)}),(0,ve.jsx)("span",{children:b.loopMode==="once"?"Play once":"Looping"}),(0,ve.jsxs)("span",{children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationButtonRow",children:[(()=>{let N=y&&r;return(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>N?s():o(b.sourceName),"aria-label":N?"Pause":"Play",title:N?"Pause":"Play",children:N?(0,ve.jsx)(ii.Pause,{size:16}):(0,ve.jsx)(ii.Play,{size:16})})})(),(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:c,disabled:!y,"aria-label":"Stop",title:"Stop",children:(0,ve.jsx)(ii.Square,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-animationSeekRow",children:[(0,ve.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(M,.001),step:.01,value:y?Math.min(a,M):0,disabled:!y||M<=0,onChange:N=>u(Number(N.target.value)),"aria-label":"Seek"}),(0,ve.jsxs)("span",{className:"se-animationSeekTime",children:[pv(y?Math.min(a,M):0)," / ",pv(M)]})]}),(0,ve.jsxs)("div",{className:"se-animationGrid",children:[(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,ve.jsxs)("select",{className:"se-select",value:b.loopMode,onChange:N=>p(b.sourceName,N.target.value),children:[(0,ve.jsx)("option",{value:"repeat",children:"Loop"}),(0,ve.jsx)("option",{value:"once",children:"Play Once"})]})]}),(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,ve.jsxs)("span",{className:"se-fieldValue",children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,ve.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:b.speed,onChange:N=>g(b.sourceName,Number(N.target.value))}),(0,ve.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:b.speed,onChange:N=>g(b.sourceName,Number(N.target.value))})]})]})]}),(0,ve.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===b.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>S(b.sourceName),children:e.animations.autoplayClip===b.sourceName?"Disable autoplay":"Set as autoplay"})]},b.sourceName)})}),x.length>0?(0,ve.jsxs)("section",{className:"se-removedAnimations",children:[(0,ve.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>h(b=>!b),children:(0,ve.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ve.jsx)(ii.ChevronDown,{size:16,className:`se-panelChevron ${d?"se-panelChevron--open":""}`}),(0,ve.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",x.length,")"]})]})}),d?(0,ve.jsx)("div",{className:"se-removedAnimationList",children:x.map(b=>(0,ve.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,ve.jsxs)("div",{children:[(0,ve.jsx)("div",{className:"se-removedAnimationName",children:b.displayName||b.sourceName}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>P(b.sourceName),children:"Restore"})]},b.sourceName))}):null]}):null]})}var Ap=require("react"),$c=require("lucide-react");var dt=require("react/jsx-runtime");function Ep({config:e,onChange:t}){let[n,i]=(0,Ap.useState)(null),[r,a]=(0,Ap.useState)({title:"",description:""}),o=e.annotations,s=d=>{i(d),a({title:d.title,description:d.description||""})},c=()=>{if(!n||!r.title.trim())return;let d=o.map(h=>h.id===n.id?{...h,title:r.title.trim(),description:r.description||""}:h);t({...e,annotations:d}),i(null),a({title:"",description:""})},l=d=>{if(window.confirm("Delete this annotation?")){let m=o.filter(f=>f.id!==d).map((f,x)=>({...f,id:x+1}));t({...e,annotations:m}),i(null),a({title:"",description:""})}},u=()=>{i(null),a({title:"",description:""})};return(0,dt.jsxs)(Ra,{title:"Annotations",children:[e.annotations.length===0?(0,dt.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,dt.jsx)("div",{className:"bb-annotationsList",children:e.annotations.map(d=>(0,dt.jsxs)("div",{className:"bb-annotationCard",children:[(0,dt.jsxs)("div",{className:"bb-annotationHeader",children:[(0,dt.jsxs)("div",{className:"bb-annotationBadge",children:["#",d.id]}),(0,dt.jsxs)("div",{className:"bb-annotationActions",children:[(0,dt.jsx)("button",{className:"bb-annotationAction bb-annotationAction--edit",onClick:()=>s(d),title:"Edit annotation",children:(0,dt.jsx)($c.Pencil,{size:16})}),(0,dt.jsx)("button",{className:"bb-annotationAction bb-annotationAction--delete",onClick:()=>l(d.id),title:"Delete annotation",children:(0,dt.jsx)($c.Trash2,{size:16})})]})]}),(0,dt.jsx)("div",{className:"bb-annotationTitle",children:d.title}),d.description&&(0,dt.jsx)("div",{className:"bb-annotationDescription",children:d.description}),(0,dt.jsxs)("div",{className:"bb-annotationPosition",children:["Position: [",d.worldPosition[0].toFixed(2),","," ",d.worldPosition[1].toFixed(2),","," ",d.worldPosition[2].toFixed(2),"]"]})]},d.id))}),n&&(0,dt.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:u,children:(0,dt.jsxs)("div",{className:"bb-editAnnotationPopup",onClick:d=>d.stopPropagation(),children:[(0,dt.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,dt.jsx)("h3",{className:"bb-editAnnotationTitle",children:"Edit Annotation"}),(0,dt.jsx)("button",{className:"bb-editAnnotationClose",onClick:u,children:"\xD7"})]}),(0,dt.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,dt.jsxs)("div",{className:"bb-field",children:[(0,dt.jsx)("label",{className:"bb-label",children:"Title"}),(0,dt.jsx)("input",{className:"bb-input",value:r.title,onChange:d=>a({...r,title:d.target.value}),placeholder:"Enter annotation title"})]}),(0,dt.jsxs)("div",{className:"bb-field",children:[(0,dt.jsx)("label",{className:"bb-label",children:"Description"}),(0,dt.jsx)("textarea",{className:"bb-textarea",value:r.description,onChange:d=>a({...r,description:d.target.value}),placeholder:"Enter annotation description",rows:3})]}),(0,dt.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,dt.jsx)("button",{className:"bb-button",onClick:u,children:"Cancel"}),(0,dt.jsx)("button",{className:"bb-button bb-button--primary",onClick:c,disabled:!r.title.trim(),children:"Save"}),(0,dt.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>l(n.id),children:"Delete"})]})]})]})})]})}var ai=require("react"),Cr=require("lucide-react");var Ce=require("react/jsx-runtime"),v_={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},ka=3.5;function Rp({config:e,onChange:t,cameraState:n,onPreviewWaypoint:i}){let r=e.cinematic??v_,{waypoints:a}=r,o=(0,ai.useCallback)((w,p)=>{if(w.length<2)return 0;let g=0;for(let _=0;_<w.length-1;_++){let S=w[_].segmentDuration??ka;g+=S}return p&&w.length>1&&(g+=w[w.length-1].segmentDuration??ka),Math.max(g,0)},[]),s=(0,ai.useCallback)(w=>{t({...e,cinematic:{...r,...w}})},[e,r,t]),c=(0,ai.useCallback)(()=>{if(!n)return;let w={position:[...n.position],target:[...n.target],...n.azimuthAngle!=null?{azimuthAngle:n.azimuthAngle}:{},...n.polarAngle!=null?{polarAngle:n.polarAngle}:{},segmentDuration:ka},p=[...a,w],g=o(p,r.loop);s({waypoints:p,duration:g})},[n,a,r.loop,o,s]),l=(0,ai.useCallback)(w=>{let p=a.filter((_,S)=>S!==w),g=o(p,r.loop);s({waypoints:p,duration:g})},[a,r.loop,o,s]),u=(0,ai.useCallback)((w,p)=>{let g=w+p;if(g<0||g>=a.length)return;let _=[...a];[_[w],_[g]]=[_[g],_[w]];let S=o(_,r.loop);s({waypoints:_,duration:S})},[a,r.loop,o,s]),d=(0,ai.useCallback)((w,p)=>{let g=a.map((S,T)=>T===w?{...S,...p}:S),_=o(g,r.loop);s({waypoints:g,duration:_})},[a,r.loop,o,s]),[h,m]=(0,ai.useState)(!1),f=a.some(w=>w.segmentDuration!==void 0),x=(0,ai.useCallback)(w=>w>=a.length-1?ka:a[w]?.segmentDuration??ka,[a]),E=a.length>=2;return(0,Ce.jsxs)(Ra,{title:"Cinematic Camera",children:[(0,Ce.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,Ce.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:c,disabled:!n,title:"Capture the current camera view as a waypoint",children:[(0,Ce.jsx)(Cr.Plus,{size:15}),"Add waypoint from current view"]}),(0,Ce.jsxs)("div",{className:"se-customizeToggle",children:[(0,Ce.jsxs)("label",{className:"se-toggleLabel",children:[(0,Ce.jsx)("input",{type:"checkbox",checked:h,onChange:w=>m(w.target.checked)}),(0,Ce.jsx)(Cr.Settings,{size:14}),(0,Ce.jsx)("span",{children:"Customize durations between waypoints"})]}),h&&(0,Ce.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",ka,"s"]})]}),a.length===0?(0,Ce.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,Ce.jsxs)(Ce.Fragment,{children:[(0,Ce.jsx)("div",{className:"se-waypointList",children:a.map((w,p)=>{let g=x(p),_=p===a.length-1,S=w.segmentDuration!==void 0&&w.segmentDuration!==ka;return(0,Ce.jsxs)("div",{children:[(0,Ce.jsxs)("div",{className:"se-waypointCard",children:[(0,Ce.jsx)("div",{className:"se-waypointBadge",children:p+1}),(0,Ce.jsxs)("div",{className:"se-waypointBody",children:[(0,Ce.jsxs)("div",{className:"se-waypointCoords",children:["pos [",w.position.map(T=>T.toFixed(1)).join(", "),"]"]}),(0,Ce.jsxs)("div",{className:"se-waypointCoords",children:["look [",w.target.map(T=>T.toFixed(1)).join(", "),"]"]}),h&&!_&&(0,Ce.jsxs)("div",{className:`se-customBadge ${S?"se-customBadge--custom":"se-customBadge--default"}`,children:[g.toFixed(1),"s",!S&&" (default)"]})]}),(0,Ce.jsxs)("div",{className:"se-waypointActions",children:[(0,Ce.jsx)("button",{className:"se-waypointAction",onClick:()=>i?.(w),title:"Fly camera to this waypoint",disabled:!i,children:(0,Ce.jsx)(Cr.MapPin,{size:15})}),(0,Ce.jsx)("button",{className:"se-waypointAction",onClick:()=>u(p,-1),title:"Move up",disabled:p===0,children:(0,Ce.jsx)(Cr.ArrowUp,{size:15})}),(0,Ce.jsx)("button",{className:"se-waypointAction",onClick:()=>u(p,1),title:"Move down",disabled:_,children:(0,Ce.jsx)(Cr.ArrowDown,{size:15})}),(0,Ce.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>l(p),title:"Delete waypoint",children:(0,Ce.jsx)(Cr.Trash2,{size:15})})]})]}),h&&!_&&(0,Ce.jsxs)("div",{className:"se-segmentBetween",children:[(0,Ce.jsxs)("div",{className:"se-segmentLabel",children:[p+1," \u2192 ",p+2,!w.segmentDuration&&" (default)"]}),(0,Ce.jsxs)("div",{className:"se-segmentControls",children:[(0,Ce.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,Ce.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:g,onChange:T=>{let P=parseFloat(T.target.value);d(p,{segmentDuration:P})}}),(0,Ce.jsxs)("span",{className:"se-segmentValue",children:[g.toFixed(1),"s"]}),(0,Ce.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(T=>(0,Ce.jsxs)("button",{className:"se-presetButton",onClick:()=>d(p,{segmentDuration:T}),children:[T,"s"]},`preset-${p}-${T}`)),(0,Ce.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let T=a.map((b,y)=>{if(y===p){let{segmentDuration:M,...C}=b;return C}return b}),P=o(T,r.loop);s({waypoints:T,duration:P})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${p}`)})}),(0,Ce.jsxs)("div",{className:"se-totalDuration",children:[(0,Ce.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,Ce.jsx)("span",{className:"se-totalValue",children:E?(r.duration??o(a,r.loop)).toFixed(1)+"s":"-"}),!E&&(0,Ce.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,Ce.jsx)(xt,{label:"Enable cinematic camera",checked:r.enabled,onChange:w=>s({enabled:w})}),(0,Ce.jsx)(xt,{label:"Loop",checked:r.loop,onChange:w=>{let p=w,g=o(a,p);s({loop:p,duration:g})}}),(0,Ce.jsx)(xt,{label:"Auto-play on load",checked:r.autoPlay,onChange:w=>s({autoPlay:w})}),!h&&E&&(0,Ce.jsx)(K,{label:"Duration",value:r.duration??o(a,r.loop),min:4,max:120,step:1,formatValue:w=>`${w}s`,onChange:w=>s({duration:w})})]})}var Tr=require("lucide-react");var un=require("react/jsx-runtime"),x_=[{label:"General",icon:(0,un.jsx)(Tr.Box,{})},{label:"Lighting",icon:(0,un.jsx)(Tr.Spotlight,{})},{label:"Animations",icon:(0,un.jsx)(Tr.Clapperboard,{})},{label:"Post Processing",icon:(0,un.jsx)(Tr.Sparkles,{})},{label:"Annotations",icon:(0,un.jsx)(Tr.MessageSquareText,{})},{label:"Cinematic",icon:(0,un.jsx)(Tr.Video,{})}],hv={currentClip:null,isPlaying:!1,time:0,duration:0,play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}};function Lp({config:e,onChange:t,activeSubTab:n,onActiveSubTabChange:i,cameraState:r=null,onPreviewWaypoint:a,animationClipDetails:o=[],animationPlayback:s=hv}){let[c,l]=(0,Kc.useState)("General"),u=n??c,d=s??hv,{tier:h}=Sr(),m=Ti(h,"starter"),f=Ti(h,"growth");(0,Kc.useEffect)(()=>{n!==void 0&&l(n)},[n]);let x=E=>{n===void 0&&l(E),i?.(E)};return(0,un.jsxs)("div",{className:"se-tabContent",children:[(0,un.jsx)("div",{className:"se-subTabRow",children:x_.map(E=>(0,un.jsx)("button",{type:"button",title:E.label,className:`se-subTab ${u===E.label?"se-subTab--active":""}`,onClick:()=>x(E.label),children:E.icon},E.label))}),u==="General"&&(0,un.jsx)(Mp,{config:e,onChange:t}),u==="Lighting"&&(0,un.jsx)(Tp,{config:e,onChange:t}),u==="Animations"&&(m?(0,un.jsx)(Pp,{config:e,onChange:t,clipDetails:o,currentClip:d.currentClip,isPlaying:d.isPlaying,time:d.time,duration:d.duration,play:d.play,pause:d.pause,stop:d.stop,setSpeed:d.setSpeed,seek:d.seek}):(0,un.jsx)(Qn,{requiredTier:"starter",feature:"Animation configuration"})),u==="Post Processing"&&(f?(0,un.jsx)(Cp,{config:e,onChange:t}):(0,un.jsx)(Qn,{requiredTier:"growth",feature:"Post-processing effects"})),u==="Annotations"&&(m?(0,un.jsx)(Ep,{config:e,onChange:t}):(0,un.jsx)(Qn,{requiredTier:"starter",feature:"Annotations"})),u==="Cinematic"&&(m?(0,un.jsx)(Rp,{config:e,onChange:t,cameraState:r,onPreviewWaypoint:a}):(0,un.jsx)(Qn,{requiredTier:"starter",feature:"Cinematic camera"}))]})}var So=require("lucide-react"),Yt=require("react/jsx-runtime");function mv({title:e,trailing:t,children:n,disabled:i,open:r,onToggle:a,tooltip:o}){let s=o?`${o}`:e;return(0,Yt.jsxs)("div",{className:"bb-materialPanel",children:[(0,Yt.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:a,"aria-expanded":r,title:s,children:[(0,Yt.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,Yt.jsx)(So.ChevronDown,{size:14,className:`bb-materialPanelChevron ${r?"bb-materialPanelChevron--open":""}`}),(0,Yt.jsx)("span",{className:"bb-materialPanelTitle",children:e}),o?(0,Yt.jsx)("span",{className:"bb-materialPanelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Yt.jsx)(So.Info,{size:12})}):null]}),t?(0,Yt.jsx)("div",{onClick:c=>c.stopPropagation(),children:t}):null]}),r?(0,Yt.jsx)("div",{className:"bb-materialPanelBody",style:i?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function er({title:e,open:t,onToggle:n,trailing:i,children:r,tooltip:a}){let o=a?`${e}: ${a}`:e;return(0,Yt.jsxs)("div",{className:"bb-section",children:[(0,Yt.jsxs)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:n,"aria-expanded":t,title:o,children:[(0,Yt.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,Yt.jsx)(So.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,Yt.jsx)("h2",{className:"bb-sectionTitle",children:e}),a?(0,Yt.jsx)("span",{className:"bb-sectionHelp",title:o,"aria-label":o,role:"img",onClick:s=>s.stopPropagation(),children:(0,Yt.jsx)(So.Info,{size:13})}):null]}),i?(0,Yt.jsx)("span",{onClick:s=>s.stopPropagation(),children:i}):null]}),t?(0,Yt.jsx)("div",{className:"bb-sectionBody",children:r}):null]})}function fv({checked:e,onChange:t,label:n}){return(0,Yt.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Yt.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Yt.jsx)("span",{className:"se-switchTrack",children:(0,Yt.jsx)("span",{className:"se-switchThumb"})})]})}var kp=require("react");var Zc=["front","back","double"],Jc=["normal","additive"];var Qc=require("react/jsx-runtime");function lr({panelKey:e,title:t,tooltip:n,toggleLabel:i,controls:r,children:a,requiredTier:o}){let{openMaterialPanels:s,materialPanelEnabled:c,onToggleMaterialPanel:l,onSetMaterialPanelState:u}=r,d=o?.locked??!1;return(0,Qc.jsx)(mv,{title:t,tooltip:n,disabled:d||!c[e],open:s[e],onToggle:()=>l(e),trailing:(0,Qc.jsx)(fv,{checked:!d&&c[e],onChange:d?()=>{}:h=>u(e,h),label:i??`Toggle ${t}`}),children:d&&o?(0,Qc.jsx)(Qn,{requiredTier:o.tier,feature:t}):a})}var Ws=require("react"),ed=require("react-colorful"),gv=require("lucide-react");var yt=require("react/jsx-runtime");function vn({label:e,value:t,placeholder:n,onChange:i}){let r=(0,Ws.useRef)(null);return(0,yt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,yt.jsx)("label",{className:"bb-label",children:e}),(0,yt.jsxs)("div",{className:"bb-fileField",children:[(0,yt.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:n,value:t,onChange:a=>{let o=a.target.value;!o&&t&&Kd(t),i(o)}}),(0,yt.jsx)("button",{type:"button",className:"bb-fileFieldButton",onClick:()=>r.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,yt.jsx)(gv.FileUp,{size:20})}),(0,yt.jsx)("input",{ref:r,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:a=>{let o=a.target.files?.[0];if(!o)return;let s=ym(o);t&&t!==s&&Kd(t),Mm(s,URL.createObjectURL(o)),i(s),a.target.value=""}})]})]})}function Da({label:e,value:t,fallback:n="#ffffff",onChange:i}){let[r,a]=(0,Ws.useState)(!1),o=t||n,s=(0,Ws.useRef)(null);return(0,yt.jsxs)("div",{className:"bb-field",children:[(0,yt.jsx)("span",{className:"bb-label",children:e}),(0,yt.jsx)("div",{className:"se-fieldInline",children:(0,yt.jsx)("span",{ref:s,style:{display:"inline-flex"},children:(0,yt.jsx)(ed.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>a(c=>!c),style:{background:o,color:_o(o)},color:o,onChange:i})})}),r?(0,yt.jsx)(Sp,{anchorRef:s,onClose:()=>a(!1),children:(0,yt.jsx)(ed.HexColorPicker,{color:o,onChange:i})}):null]})}function Xs({label:e,checked:t,onChange:n}){return(0,yt.jsxs)("label",{className:"bb-checkbox",children:[(0,yt.jsx)("input",{type:"checkbox",checked:t,onChange:i=>n(i.target.checked)}),e]})}function bv({label:e,value:t,min:n,max:i,step:r,placeholder:a,onChange:o}){return(0,yt.jsxs)("div",{className:"bb-field",children:[(0,yt.jsx)("label",{className:"bb-label",children:e}),(0,yt.jsx)("input",{className:"bb-input",type:"number",min:n,max:i,step:r,placeholder:a,value:t??"",onChange:s=>o(s.target.value===""?void 0:Number(s.target.value))})]})}function Mo({label:e,value:t,options:n,onChange:i}){return(0,yt.jsxs)("div",{className:"bb-field",children:[(0,yt.jsx)("label",{className:"bb-label",children:e}),(0,yt.jsx)("select",{className:"bb-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,yt.jsx)("option",{value:r,children:r},r))})]})}function $t({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,yt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,yt.jsx)("label",{className:"bb-label",children:e}),(0,yt.jsxs)("div",{className:"bb-sliderField",children:[(0,yt.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:n,max:i,step:r,value:t??n,onChange:s=>a(Number(s.target.value))}),(0,yt.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:n,max:i,step:r,value:t??"",onChange:s=>a(s.target.value===""?void 0:Number(s.target.value))})]})]})}var Z=require("react/jsx-runtime");function vv({selectedItem:e,selectedMaterial:t,pbrWorkflow:n,onPbrWorkflowChange:i,openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s,updateSelectedMaterial:c,setSelectedTexturePath:l}){let u={openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s},{tier:d}=Sr(),h=Ti(d,"starter"),m={tier:"starter",locked:!h},[f,x]=(0,kp.useState)("roughness"),[E,w]=(0,kp.useState)("factor");return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(lr,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:u,children:h?(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Mo,{label:"Workflow",value:n,options:["metalness","specular"],onChange:i}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.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,Z.jsx)(vn,{label:n==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:p=>l(e,"texture",p)}),(0,Z.jsx)(Da,{label:n==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:p=>c(e,g=>({...g,baseColor:p}))}),n==="metalness"?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)($t,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,metalness:p}))}),(0,Z.jsx)(vn,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:p=>l(e,"metalnessMap",p)})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)($t,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,specularIntensity:p}))}),(0,Z.jsx)(Da,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:p=>c(e,g=>({...g,specularColor:p}))}),(0,Z.jsx)(vn,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:p=>l(e,"specularIntensityMap",p)}),(0,Z.jsx)(vn,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:p=>l(e,"specularColorMap",p)})]}),(0,Z.jsx)($t,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,reflectivity:p}))})]}):(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Da,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:p=>c(e,g=>({...g,baseColor:p}))}),(0,Z.jsx)($t,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,metalness:p}))}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.jsx)(Qn,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,Z.jsx)(lr,{panelKey:"roughness",requiredTier:m,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Mo,{label:"Mode",value:f,options:["roughness","glossiness"],onChange:x}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.jsx)("p",{className:"bb-note",style:{margin:0},children:f==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),f==="roughness"?(0,Z.jsx)($t,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,roughness:p}))}):(0,Z.jsx)($t,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,roughness:p===void 0?void 0:1-p}))}),(0,Z.jsx)(vn,{label:f==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:p=>l(e,"roughnessMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"emission",requiredTier:m,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Da,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:p=>c(e,g=>({...g,emissive:p}))}),(0,Z.jsx)($t,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:p=>c(e,g=>({...g,emissiveIntensity:p}))}),(0,Z.jsx)(vn,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:p=>l(e,"emissiveMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"opacity",requiredTier:m,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,opacity:p}))}),(0,Z.jsx)($t,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,alphaTest:p}))}),(0,Z.jsx)(vn,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:p=>l(e,"alphaMap",p)}),(0,Z.jsx)(Mo,{label:"Blending mode",value:t?.blendingMode??"normal",options:Jc,onChange:p=>c(e,g=>({...g,blendingMode:p}))}),(0,Z.jsxs)("div",{className:"bb-field",children:[(0,Z.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,Z.jsx)("div",{className:"bb-checkboxRow",children:(0,Z.jsx)(Xs,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:p=>c(e,g=>({...g,alphaHash:p}))})})]}),(0,Z.jsxs)("div",{className:"bb-field",children:[(0,Z.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,Z.jsx)("div",{className:"bb-checkboxRow",children:(0,Z.jsx)(Xs,{label:"Use dithering",checked:t?.dithering??!1,onChange:p=>c(e,g=>({...g,dithering:p}))})})]})]})}),(0,Z.jsxs)(lr,{panelKey:"normalBump",requiredTier:m,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:u,children:[(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(vn,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:p=>l(e,"normalMap",p)}),(0,Z.jsx)($t,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:p=>c(e,g=>({...g,normalScale:p}))}),(0,Z.jsx)(vn,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:p=>l(e,"bumpMap",p)}),(0,Z.jsx)($t,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:p=>c(e,g=>({...g,bumpScale:p}))})]}),(0,Z.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Z.jsx)(Xs,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:p=>c(e,g=>({...g,flipNormalY:p}))})})]}),(0,Z.jsx)(lr,{panelKey:"displacement",requiredTier:m,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(vn,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:p=>l(e,"displacementMap",p)}),(0,Z.jsx)($t,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:p=>c(e,g=>({...g,displacementScale:p}))}),(0,Z.jsx)($t,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:p=>c(e,g=>({...g,displacementBias:p}))})]})}),(0,Z.jsx)(lr,{panelKey:"ao",requiredTier:m,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(vn,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:p=>l(e,"aoMap",p)}),(0,Z.jsx)($t,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:p=>c(e,g=>({...g,aoMapIntensity:p}))})]})}),(0,Z.jsxs)(lr,{panelKey:"clearcoat",requiredTier:m,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:u,children:[(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(vn,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:p=>l(e,"clearcoatMap",p)}),(0,Z.jsx)($t,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,clearcoat:p}))}),(0,Z.jsx)(vn,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:p=>l(e,"clearcoatRoughnessMap",p)}),(0,Z.jsx)($t,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,clearcoatRoughness:p}))}),(0,Z.jsx)(vn,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:p=>l(e,"clearcoatNormalMap",p)}),(0,Z.jsx)($t,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:p=>c(e,g=>({...g,clearcoatNormalScale:p}))})]}),(0,Z.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Z.jsx)(Xs,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:p=>c(e,g=>({...g,flipClearcoatNormalY:p}))})})]}),(0,Z.jsx)(lr,{panelKey:"sheen",requiredTier:m,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,sheen:p}))}),(0,Z.jsx)(Da,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:p=>c(e,g=>({...g,sheenColor:p}))}),(0,Z.jsx)(vn,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:p=>l(e,"sheenColorMap",p)}),(0,Z.jsx)($t,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,sheenRoughness:p}))}),(0,Z.jsx)(vn,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:p=>l(e,"sheenRoughnessMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"anisotropy",requiredTier:m,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,anisotropy:p}))}),(0,Z.jsx)(Mo,{label:"Tilt direction",value:E,options:["factor","texture"],onChange:w}),E==="factor"?(0,Z.jsx)($t,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:p=>c(e,g=>({...g,anisotropyRotation:p}))}):(0,Z.jsx)(vn,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:p=>l(e,"anisotropyMap",p)})]})}),(0,Z.jsx)(lr,{panelKey:"transmission",requiredTier:m,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)($t,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,transmission:p}))}),(0,Z.jsx)(vn,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:p=>l(e,"transmissionMap",p)}),(0,Z.jsx)($t,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:p=>c(e,g=>({...g,thickness:p}))}),(0,Z.jsx)(vn,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:p=>l(e,"thicknessMap",p)}),(0,Z.jsx)(Da,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:p=>c(e,g=>({...g,attenuationColor:p}))}),(0,Z.jsx)(bv,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:p=>c(e,g=>({...g,attenuationDistance:p}))})]})}),(0,Z.jsx)(lr,{panelKey:"faces",requiredTier:m,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:u,children:(0,Z.jsx)("div",{className:"bb-grid",children:(0,Z.jsx)(Mo,{label:"Side",value:t?.side??"front",options:Zc,onChange:p=>c(e,g=>({...g,side:p}))})})})]})}var xv=[{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 Co=require("react/jsx-runtime");function yv({disabled:e,onApply:t}){return(0,Co.jsx)("div",{className:"bb-presetGallery",children:xv.map(n=>(0,Co.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${n.label} preset`,onClick:()=>t(n.material),children:[(0,Co.jsx)("span",{className:"bb-presetSwatchColor",style:{background:n.swatch}}),(0,Co.jsx)("span",{className:"bb-presetSwatchLabel",children:n.label})]},n.id))})}var To=require("react"),Zi=require("lucide-react"),Gr=require("react/jsx-runtime");function Dp({disabled:e,exporting:t,onExportJson:n,onExportTs:i}){let[r,a]=(0,To.useState)(!1),o=(0,To.useRef)(null);return(0,To.useEffect)(()=>{if(!r)return;let s=c=>{o.current?.contains(c.target)||a(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[r]),(0,Gr.jsxs)("div",{className:"bb-exportMenuWrapper",ref:o,children:[(0,Gr.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>a(s=>!s),title:"Export",children:[(0,Gr.jsx)(Zi.Download,{size:14}),t?"Exporting\u2026":"Export",(0,Gr.jsx)(Zi.ChevronDown,{size:12})]}),r&&(0,Gr.jsxs)("div",{className:"bb-exportMenu",children:[(0,Gr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),n()},children:[(0,Gr.jsx)(Zi.FileJson,{size:14}),"JSON"]}),(0,Gr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),i()},children:[(0,Gr.jsx)(Zi.FileCode2,{size:14}),"TypeScript"]})]})]})}var Pr=require("react/jsx-runtime");function wv({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,idError:a}){return(0,Pr.jsx)(er,{title:"Identity",open:n,onToggle:i,children:(0,Pr.jsxs)("div",{className:"bb-grid",children:[(0,Pr.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Pr.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,Pr.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,Pr.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,Pr.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Pr.jsx)("label",{className:"bb-label",children:"ID"}),(0,Pr.jsx)("input",{className:`bb-input ${a?"bb-input--error":""}`,value:t.id,onChange:o=>r(e,s=>({...s,id:o.target.value}))}),a?(0,Pr.jsx)("span",{className:"bb-status bb-status--error",children:a}):null]})]})})}var qs=require("react");var _v=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],Sv=["normal","hidden","selected","disabled"];var Tt=require("react/jsx-runtime");function Mv({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,qs.useState)(t.group??""),[s,c]=(0,qs.useState)(t.tags?.join(", ")??"");(0,qs.useEffect)(()=>{o(t.group??""),c(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let l=()=>{r(e,d=>({...d,group:a.trim()||void 0}))},u=()=>{let d=[...new Set(s.split(",").map(h=>h.trim()).filter(Boolean))];r(e,h=>({...h,tags:d.length>0?d:void 0}))};return(0,Tt.jsxs)(er,{title:"Basics",open:n,onToggle:i,children:[(0,Tt.jsxs)("div",{className:"bb-grid",children:[(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Label"}),(0,Tt.jsx)("input",{className:"bb-input",value:t.label??"",onChange:d=>r(e,h=>({...h,label:d.target.value}))})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Type"}),(0,Tt.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type,onChange:d=>r(e,h=>({...h,type:d.target.value}))}),(0,Tt.jsx)("datalist",{id:"binding-type-suggestions",children:_v.map(d=>(0,Tt.jsx)("option",{value:d},d))})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Status"}),(0,Tt.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:d=>r(e,h=>({...h,status:d.target.value})),children:Sv.map(d=>(0,Tt.jsx)("option",{value:d,children:d},d))})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Group"}),(0,Tt.jsx)("input",{className:"bb-input",placeholder:"paint",value:a,onChange:d=>o(d.target.value),onBlur:l,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Tags"}),(0,Tt.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:s,onChange:d=>c(d.target.value),onBlur:u,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]})]}),(0,Tt.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,Tt.jsxs)("label",{className:"bb-checkbox",children:[(0,Tt.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:d=>r(e,h=>({...h,selectable:d.target.checked}))}),"selectable"]}),(0,Tt.jsxs)("label",{className:"bb-checkbox",children:[(0,Tt.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:d=>r(e,h=>({...h,hoverable:d.target.checked}))}),"hoverable"]}),(0,Tt.jsxs)("label",{className:"bb-checkbox",children:[(0,Tt.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:d=>r(e,h=>({...h,visible:d.target.checked}))}),"visible"]})]})]})}var nd=require("react");var Ba=[{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."}],td="__custom__";function Ys(e){return Ba.find(t=>t.id===e)}var vR=Ba.filter(e=>e.handling==="viewer").map(e=>e.id),y_=new Set(["","New Action",...Ba.map(e=>e.label)]);function Bp(e){return y_.has(e.trim())}function Cv(e,t){let n=Array.from({length:t.length+1},(i,r)=>r);for(let i=1;i<=e.length;i+=1){let r=[i];for(let a=1;a<=t.length;a+=1){let o=n[a-1]+(e[i-1]===t[a-1]?0:1);r[a]=Math.min(r[a-1]+1,n[a]+1,o)}n=r}return n[t.length]}function Tv(e){if(Ys(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let n=t.replace(/[^a-z0-9]/g,""),i=null;for(let r of Ba){let a=Math.min(Cv(t,r.id),Cv(n,r.id.replace(/[^a-z0-9]/g,"")));(!i||a<i.distance)&&(i={id:r.id,distance:a})}return i&&i.distance<=2?i.id:null}var Je=require("react/jsx-runtime"),Pv=Ba.filter(e=>e.handling==="viewer"),w_=Ba.filter(e=>e.handling==="host");function Av({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,nd.useState)(new Set);(0,nd.useEffect)(()=>{o(new Set)},[e]);let s=t.actions??[],c=(d,h)=>r(e,m=>({...m,actions:(m.actions??[]).map((f,x)=>x===d?h(f):f)})),l=d=>{r(e,h=>({...h,actions:(h.actions??[]).filter((m,f)=>f!==d)})),o(h=>{let m=new Set;return h.forEach(f=>{f<d?m.add(f):f>d&&m.add(f-1)}),m})},u=(d,h)=>o(m=>{let f=new Set(m);return h?f.add(d):f.delete(d),f});return(0,Je.jsxs)(er,{title:"Actions",open:n,onToggle:i,children:[(0,Je.jsx)("div",{className:"bb-actionList",children:s.map((d,h)=>{let m=Ys(d.id),f=a.has(h)||!m,x=d.id.trim(),E=m?null:Tv(d.id),w=x.length>0&&s.some((p,g)=>g!==h&&p.id.trim()===x);return(0,Je.jsxs)("div",{className:"bb-actionCard",children:[(0,Je.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,Je.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",h+1]}),(0,Je.jsx)("div",{className:"bb-actionCardMeta",children:d.type})]}),(0,Je.jsxs)("div",{className:"bb-actionGrid",children:[(0,Je.jsxs)("div",{className:"bb-field",children:[(0,Je.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,Je.jsxs)("select",{className:"bb-select",value:f?td:d.id,onChange:p=>{let g=p.target.value;if(g===td){u(h,!0);return}u(h,!1);let _=Ys(g);c(h,S=>({...S,id:g,label:_&&Bp(S.label)?_.label:S.label}))},children:[(0,Je.jsx)("optgroup",{label:"Handled by the viewer",children:Pv.map(p=>(0,Je.jsx)("option",{value:p.id,children:p.id},p.id))}),(0,Je.jsx)("optgroup",{label:"Handled by your app",children:w_.map(p=>(0,Je.jsx)("option",{value:p.id,children:p.id},p.id))}),(0,Je.jsx)("option",{value:td,children:"Custom\u2026"})]})]}),f?(0,Je.jsxs)("div",{className:"bb-field",children:[(0,Je.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,Je.jsx)("input",{className:"bb-input",value:d.id,placeholder:"open-datasheet",onChange:p=>{u(h,!0),c(h,g=>({...g,id:p.target.value}))}})]}):null,(0,Je.jsxs)("div",{className:"bb-field",children:[(0,Je.jsx)("label",{className:"bb-label",children:"Label"}),(0,Je.jsx)("input",{className:"bb-input",value:d.label,onChange:p=>c(h,g=>({...g,label:p.target.value}))})]}),m?(0,Je.jsx)("span",{className:"bb-note",children:m.description}):x.length===0?(0,Je.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,Je.jsxs)("span",{className:"bb-note",style:{color:"#fcd34d"},children:["Unrecognised ID, the viewer has no built-in behavior for it. Add declarative effects and execute them with useViewerActions, or handle it in onAction.",E?(0,Je.jsxs)(Je.Fragment,{children:[" Did you mean ",(0,Je.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{u(h,!1);let p=Ys(E);c(h,g=>({...g,id:E,label:p&&Bp(g.label)?p.label:g.label}))},children:E}),"?"]}):null]}),d.effects?.length?(0,Je.jsxs)("span",{className:"bb-note",children:[d.effects.length," declarative effect",d.effects.length===1?"":"s",", execute with useViewerActions."]}):null,w?(0,Je.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,Je.jsx)("div",{className:"bb-actionFooter",children:(0,Je.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>l(h),children:"Remove Action"})})]},h)})}),(0,Je.jsx)("div",{style:{marginTop:10},children:(0,Je.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let d=Pv.find(h=>!s.some(m=>m.id===h.id));r(e,h=>({...h,actions:[...h.actions??[],{id:d?.id??"",label:d?.label??"New Action",type:"command"}]})),d||u(s.length,!0)},children:"Add Action"})})]})}var rd=require("lucide-react");var Pt=require("react/jsx-runtime");function Ev({selectedBinding:e,open:t,onToggle:n,cameraState:i,formattedCameraState:r,savedCameraPosition:a,onSaveCameraPosition:o,onGoToSavedCamera:s,onClearSavedCamera:c,onResetView:l,onFitScene:u}){return(0,Pt.jsxs)(er,{title:"Camera Position",open:t,onToggle:n,children:[(0,Pt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Pt.jsx)("span",{className:"bb-cameraLiveBadge",children:"LIVE"}),(0,Pt.jsxs)("div",{className:"se-waypointBody",children:[(0,Pt.jsx)("div",{className:"bb-cameraWaypointLabel",children:"Current view"}),i?(0,Pt.jsxs)(Pt.Fragment,{children:[(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["pos ",r?.position]}),(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["look ",r?.target]})]}):(0,Pt.jsx)("div",{className:"se-waypointCoords",children:"Move the camera to see live position"})]})]}),(0,Pt.jsxs)("div",{className:"bb-cameraControls bb-cameraControls--centered",children:[(0,Pt.jsx)("button",{type:"button",className:"bb-button bb-button--primary",onClick:o,disabled:!i,children:"Save"}),(0,Pt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:l,children:"Reset View"}),(0,Pt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:u,children:"Fit Scene"})]}),a?.position&&a?.target&&(0,Pt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Pt.jsx)("span",{className:"bb-cameraSavedBadge",children:"SAVED"}),(0,Pt.jsxs)("div",{className:"se-waypointBody",children:[(0,Pt.jsxs)("div",{className:"bb-cameraWaypointLabel",children:["For ",e.label]}),(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["pos [",a.position.map(d=>d.toFixed(1)).join(", "),"]"]}),(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["look [",a.target.map(d=>d.toFixed(1)).join(", "),"]"]})]}),(0,Pt.jsxs)("div",{className:"se-waypointActions",children:[(0,Pt.jsx)("button",{className:"se-waypointAction",onClick:s,title:"Fly camera to the saved position",children:(0,Pt.jsx)(rd.MapPin,{size:15})}),(0,Pt.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:c,title:"Delete saved position",children:(0,Pt.jsx)(rd.Trash2,{size:15})})]})]}),(0,Pt.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 Po=require("react"),id=require("lucide-react");var Ke=require("react/jsx-runtime"),Rv=["X","Y","Z"];var __=.1;function Np(e){let t=e%360;return t<0?t+360:t}function Lv(e){return Np(e*180/Math.PI)}function kv(e){return e*Math.PI/180}function S_(e,t,n){let i=[...e],r=Lv(e[t]);return i[t]=kv(Np(r+n)),i}function Dv({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=l=>Number(l.toFixed(3)),ariaLabel:s,className:c}){let l=o(e),[u,d]=(0,Po.useState)(String(l)),h=(0,Po.useRef)(!1);return(0,Po.useLayoutEffect)(()=>{h.current||d(String(l))},[l]),(0,Ke.jsx)("input",{type:"number",className:c,step:i,min:t===-1/0?void 0:t,max:n===1/0?void 0:n,value:u,disabled:r,"aria-label":s,onFocus:()=>{h.current=!0},onChange:m=>{let f=m.target.value;if(d(f),f===""||f==="-")return;let x=Number(f);if(Number.isFinite(x)){let E=Math.max(t,Math.min(n,x));a(E)}},onBlur:()=>{h.current=!1,d(String(o(e)))}})}function M_({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=c=>Number(c.toFixed(3)),label:s}){return(0,Ke.jsx)("div",{className:"bb-transformAxesGrid",children:Rv.map((c,l)=>(0,Ke.jsxs)("div",{className:"bb-transformAxis",children:[(0,Ke.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:c}),(0,Ke.jsx)("div",{className:"bb-transformAxisControl",children:(0,Ke.jsx)(Dv,{className:"se-numberInput bb-transformNumberInput",step:i,min:t,max:n,value:e[l],disabled:r,formatValue:o,ariaLabel:`${c} ${s?.toLowerCase()||""}`,onChange:u=>{let d=[...e];d[l]=u,a(d)}})})]},c))})}function Bv({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,moveModeEnabled:a,onToggleMoveMode:o,transformSpace:s,onTransformSpaceChange:c,originalTransform:l}){let u=t.transform?.rotation??l?.rotation??[0,0,0],d=t.transform?.position??l?.position??[0,0,0],h=(p,g)=>{let _=p.transform?.rotation??l?.rotation??[0,0,0],S=p.transform?.position??l?.position??[0,0,0],T=p.transform?.scale??l?.scale??[1,1,1],P=l?.pivotLocal??[0,0,0],b=Tb(S,_,g,T,P,l?.rotationOrder??"XYZ");return{...p,transform:{...p.transform,position:b,rotation:g}}},m=(p,g)=>{e&&r(e,_=>{let S=_.transform?.rotation??l?.rotation??[0,0,0],T=S_(S,p,g);return h(_,T)})},f=(p,g)=>{e&&r(e,_=>{let T=[..._.transform?.rotation??l?.rotation??[0,0,0]];return T[p]=kv(Np(g)),h(_,T)})},x=(p,g)=>{e&&r(e,_=>{let T=[..._.transform?.position??l?.position??[0,0,0]];return T[p]=g,{..._,transform:{..._.transform,position:T}}})},E=(p,g)=>{e&&x(p,d[p]+g)},w=()=>{!e||!l||r(e,p=>{let g={...p.transform};return delete g.position,delete g.rotation,{...p,transform:Object.keys(g).length>0?g:void 0}})};return(0,Ke.jsxs)(er,{title:"Move & Rotate",open:n,onToggle:i,tooltip:"Enable the transform gizmo to move or rotate the selected mesh on any axis. Rotation uses the object's visible center while exported position and rotation remain local GLTF transforms.",children:[(0,Ke.jsxs)("div",{className:"se-field",children:[(0,Ke.jsxs)("div",{className:"se-fieldLabel",children:[(0,Ke.jsxs)("span",{children:[(0,Ke.jsx)(id.Move3d,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Transform gizmo"]}),(0,Ke.jsxs)("label",{className:"se-switch","aria-label":"Toggle move mode",children:[(0,Ke.jsx)("input",{type:"checkbox",checked:a,onChange:p=>o(p.target.checked)}),(0,Ke.jsx)("span",{className:"se-switchTrack",children:(0,Ke.jsx)("span",{className:"se-switchThumb"})})]})]}),(0,Ke.jsx)("span",{className:"bb-note",children:"Select a mesh \xB7 drag the colored arrows or planes to move"})]}),(0,Ke.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,Ke.jsx)("div",{className:"se-fieldLabel",children:(0,Ke.jsx)("span",{children:"Axis space"})}),(0,Ke.jsx)("div",{className:"se-segmentedControl",children:["world","local"].map(p=>(0,Ke.jsx)("button",{type:"button",className:`se-segmentedOption ${s===p?"se-segmentedOption--active":""}`,onClick:()=>c(p),children:p},p))})]}),(0,Ke.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,Ke.jsx)("div",{className:"se-fieldLabel",children:(0,Ke.jsx)("span",{children:"Rotation (degrees)"})}),(0,Ke.jsx)("div",{className:"bb-transformAxesGrid",children:Rv.map((p,g)=>{let _=Math.round(Lv(u[g]));return(0,Ke.jsxs)("div",{className:"bb-transformAxis",children:[(0,Ke.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:p}),(0,Ke.jsx)("div",{className:"bb-transformAxisControl",children:(0,Ke.jsx)(Dv,{className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:_,disabled:!e,formatValue:S=>Math.round(S),ariaLabel:`${p} rotation in degrees`,onChange:S=>f(g,S)})})]},p)})})]}),(0,Ke.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,Ke.jsx)("div",{className:"se-fieldLabel",children:(0,Ke.jsx)("span",{children:"Position"})}),(0,Ke.jsx)(M_,{value:d,min:-1/0,max:1/0,step:__,disabled:!e,label:"position",onChange:p=>{e&&r(e,g=>({...g,transform:{...g.transform,position:p}}))}})]}),(0,Ke.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!l,onClick:w,title:"Restore this node's position and rotation to what they were in the original model",children:[(0,Ke.jsx)(id.RotateCcw,{size:14}),"Restore original position & rotation"]})]})}var Na=require("react");function C_(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 Op(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 T_(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 P_(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 A_(e){let t=T_(e);return{id:C_(e),modelObjectId:e,type:t,label:Op(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:P_(t),metrics:{},metadata:{}}}function ad(e){return Object.fromEntries(e.map(t=>[t,A_(t)]))}function Nv(e){let{nodesById:t}=eo(e),n=[];for(let[i,r]of Object.entries(t)){let a=r;a.isMesh&&a.geometry&&r.name&&n.push(i)}return n.sort((i,r)=>i.localeCompare(r))}var Tn=require("react/jsx-runtime"),Ov=(0,Na.memo)(E_);function E_({bindings:e,selectedItem:t,onSelect:n,onHover:i,isOpen:r=!0,onToggle:a}){let[o,s]=(0,Na.useState)(""),c=(0,Na.useMemo)(()=>Object.keys(e),[e]),l=(0,Na.useMemo)(()=>{let u=o.trim().toLowerCase();return u?c.filter(d=>{let h=e[d];return d.toLowerCase().includes(u)||h.label?.toLowerCase().includes(u)||h.type.toLowerCase().includes(u)}):c},[e,c,o]);return(0,Tn.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${r?"":"bb-sidebar--collapsed"}`,children:[(0,Tn.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!r&&(0,Tn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),r&&(0,Tn.jsxs)(Tn.Fragment,{children:[(0,Tn.jsxs)("div",{children:[(0,Tn.jsx)("div",{className:"bb-sectionKicker",children:"Scene Nodes"}),(0,Tn.jsxs)("div",{className:"bb-sectionHeading",children:[l.length," visible entries"]})]}),(0,Tn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]}),r&&(0,Tn.jsxs)("section",{className:"bb-nodeList",children:[(0,Tn.jsx)("div",{className:"bb-search",children:(0,Tn.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:o,onChange:u=>s(u.target.value)})}),(0,Tn.jsx)("div",{className:"bb-nodeItems",children:l.map(u=>{let d=e[u];return(0,Tn.jsxs)("button",{type:"button",className:`bb-nodeButton ${u===t?"bb-nodeButton--active":""}`,onClick:()=>n(u),onMouseEnter:()=>i?.(u),onMouseLeave:()=>i?.(null),children:[(0,Tn.jsx)("span",{className:"bb-nodeName",children:u}),(0,Tn.jsxs)("span",{className:"bb-nodeMeta",children:[d.type,d.label===Op(u)?"":d.label||"\xB7 Untitled"]})]},u)})})]})]})}var Ji=require("react/jsx-runtime");function Ip({title:e,label:t,open:n,onToggle:i,draft:r,error:a,example:o,onDraftChange:s,onCommit:c}){return(0,Ji.jsx)(er,{title:e,open:n,onToggle:i,children:(0,Ji.jsxs)("div",{className:"bb-field",children:[(0,Ji.jsx)("label",{className:"bb-label",children:t}),(0,Ji.jsx)("textarea",{className:"bb-textarea",value:r,onChange:l=>s(l.target.value),onBlur:c}),a?(0,Ji.jsx)("span",{className:"bb-status bb-status--error",children:a}):(0,Ji.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",o,"."]})]})})}function Iv(e,t){let n=new Map(e.animations.clips.map(a=>[a.sourceName,a])),i=t.map(({sourceName:a})=>n.get(a)??{sourceName:a,displayName:a,hidden:!1,loopMode:"repeat",speed:1}),r=e.animations.autoplayClip&&i.some(a=>a.sourceName===e.animations.autoplayClip&&!a.hidden)?e.animations.autoplayClip:null;return{clips:i,autoplayClip:r}}var Pi=require("react"),R_=100;function L_(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(-R_),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,...i]=e.future;return{past:[...e.past,e.present],present:n,future:i}}case"reset":return{past:[],present:t.value,future:[]}}}function zp(e,t=600){let[n,i]=(0,Pi.useReducer)(L_,{past:[],present:e,future:[]}),r=(0,Pi.useRef)(0),a=(0,Pi.useCallback)(l=>{let u=Date.now(),d=u-r.current<t;r.current=u,i({type:"set",updater:l,coalesce:d})},[t]),o=(0,Pi.useCallback)(()=>{r.current=0,i({type:"undo"})},[]),s=(0,Pi.useCallback)(()=>{r.current=0,i({type:"redo"})},[]),c=(0,Pi.useCallback)(l=>{r.current=0,i({type:"reset",value:l})},[]);return{value:n.present,setValue:a,undo:o,redo:s,reset:c,canUndo:n.past.length>0,canRedo:n.future.length>0}}var jv=require("fflate");function zv(e){return JSON.stringify(e,null,2)}function Uv(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
|
|
3688
|
-
`)}function
|
|
3689
|
-
`)}function $s(e,t,n){bi(new Blob([t],{type:n}),e)}function Up(e){return JSON.stringify(e??{},null,2)}function Vp(e){return`[${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}]`}function k_(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 Hv(e){let t=new Set;for(let r of Object.values(e))for(let a of k_(r))t.add(a);let n=[],i=[];return await Promise.all(Array.from(t).map(async r=>{let a=wm(r);if(a)try{let o=await fetch(a);if(!o.ok)throw new Error(String(o.status));n.push({path:r,blob:await o.blob()})}catch{i.push(r)}})),{assets:n,failedPaths:i}}async function Fp(e,t,n,i,r){if(r.length===0){$s(e,t,n);return}let a={[e]:(0,jv.strToU8)(t)};for(let s of r)a[s.path]=new Uint8Array(await s.blob.arrayBuffer());let o=await Ml(a);bi(new Blob([o],{type:"application/zip"}),i)}var jp={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"]},Gv=Object.keys(jp);function Wv(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 Hp(e){if(e)return Object.values(e).some(Wv)?e:void 0}function Ar(e,t){return e?jp[t].some(n=>Wv(e[n])):!1}function Gp(e){return{pbr:Ar(e,"pbr"),roughness:Ar(e,"roughness"),emission:Ar(e,"emission"),opacity:Ar(e,"opacity"),normalBump:Ar(e,"normalBump"),displacement:Ar(e,"displacement"),ao:Ar(e,"ao"),clearcoat:Ar(e,"clearcoat"),sheen:Ar(e,"sheen"),anisotropy:Ar(e,"anisotropy"),transmission:Ar(e,"transmission"),faces:Ar(e,"faces")}}function Wp(e,t){if(t)return{...e,style:{...e.style,material:t}};if(!e.style)return e;let{material:n,...i}=e.style;return{...e,style:Object.keys(i).length>0?i:void 0}}function Xv(e,t){if(!e)return;let n={...e};for(let i of jp[t])delete n[i];return n}var W=require("react/jsx-runtime"),D_="/room.glb";function od(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function qv(e,t){if(!od(e)||!od(t))return t??e;let n={...e};for(let[i,r]of Object.entries(t)){let a=n[i];n[i]=od(a)&&od(r)?qv(a,r):r}return n}function Xp({licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,project:a,onProjectChange:o,projectChangeDebounceMs:s=350,onModelUpload:c,onEditLeaseChange:l,allowModelChange:u=!0}){let d=(0,te.useRef)(null),h=(0,te.useRef)(null),m=(0,te.useRef)(null),[f,x]=(0,te.useState)(a?.model.url??null),[E,w]=(0,te.useState)(a?.model.name??""),[p,g]=(0,te.useState)(a?.model??null),[_,S]=(0,te.useState)(null),T=zp(a?.objectBindings??{}),P=T.value,b=T.setValue,[y,M]=(0,te.useState)(!1),[C,N]=(0,te.useState)(null),[L,V]=(0,te.useState)(!1),[U,D]=(0,te.useState)("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),[Y,A]=(0,te.useState)("default"),[k,X]=(0,te.useState)(!1),[$,ue]=(0,te.useState)("{}"),[De,xe]=(0,te.useState)("{}"),[Oe,Pe]=(0,te.useState)(null),[Ie,Et]=(0,te.useState)(null),[Wt,Qe]=(0,te.useState)(!1),[_e,ae]=(0,te.useState)(!1),[zt,Rt]=(0,te.useState)(!1),[et,wt]=(0,te.useState)({identity:!0,basics:!0,material:!1,actions:!1,camera:!1,transform:!1,metrics:!1,metadata:!1}),[He,Jt]=(0,te.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}),_t=B=>wt(G=>({...G,[B]:!G[B]})),Ve=B=>Jt(G=>({...G,[B]:!G[B]})),[Lt,Qt]=(0,te.useState)("object"),[Ae,J]=(0,te.useState)("General"),[Se,le]=(0,te.useState)("metalness"),[ze,Ue]=(0,te.useState)(Gp()),Fe=(0,te.useRef)(null),[Ye,ye]=(0,te.useState)(!1),[ut,St]=(0,te.useState)(!0),[en,tn]=(0,te.useState)(!0),[rt,st]=(0,te.useState)(!1),[hn,Xt]=(0,te.useState)(null),[Bn,zn]=(0,te.useState)(!1),[nn,F]=(0,te.useState)("world"),R=(0,te.useRef)({}),H=zp(a?.sceneConfig??Di),Q=H.value,ne=H.setValue,[oe,he]=(0,te.useState)("orbit"),je=oe==="pointerLock",[lt,Mt]=(0,te.useState)(null),[pt,Ut]=(0,te.useState)(null),we=kc(e,t),Vt=Ob(we.tier),Be=(0,te.useMemo)(()=>({isInsideEditor:!0,activeTab:Lt,activeSubTab:Ae,tier:Vt,setActiveTab:Qt,setActiveSubTab:J}),[Lt,Ae,Vt]),rn=(0,te.useRef)(null),Un=(0,te.useRef)(0),xn=(0,te.useRef)(0),An=(0,te.useRef)(a?`${a.id}:${a.revision}`:null),ta=(0,te.useRef)(null),Er=(0,te.useRef)(!1),cr=(0,te.useRef)(!1),li=(0,te.useRef)(a?{modelUrl:a.model.url,bindings:a.objectBindings,sceneConfig:a.sceneConfig}:null),Ia=(0,te.useRef)(void 0),Xr=(0,te.useRef)(0),En=(0,te.useRef)(null),dr=(0,te.useRef)(a?{requestId:0,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl}:null),na=(0,te.useRef)(null),{cameraState:ct,resetView:ci,focusObject:ur,fitScene:el,setCameraState:ra,handleCameraChange:Eo,handleViewerReady:tl}=Hc(),Rr=(0,te.useCallback)(B=>{je||ra({position:B.position,target:B.target,fov:ct?.fov??null,zoom:ct?.zoom??1,azimuthAngle:B.azimuthAngle,polarAngle:B.polarAngle},!0)},[je,ra,ct]),di=Gc(),an=_?P[_]??null:null,Ro=an?.style?.material,tr=an?.cameraState,ui=ct?{position:Vp(ct.position),target:Vp(ct.target)}:null,Lo=(0,te.useCallback)(B=>{ne(G=>{let ie=G.annotations.map(Ee=>Ee.id).join(","),pe=B.map(Ee=>Ee.id).join(",");return ie===pe?G:{...G,annotations:B}})},[]),vd=(0,te.useCallback)(B=>{Mt(B?{annotation:B}:null)},[]);(0,te.useEffect)(()=>{if(!an){ue("{}"),xe("{}"),Pe(null),Et(null);return}ue(Up(an.metrics)),xe(Up(an.metadata)),Pe(null),Et(null)},[an]),(0,te.useEffect)(()=>{let B=Gp(Ro);if(Fe.current!==_){Fe.current=_,Ue(B);return}Ue(G=>{let ie=!1,pe={...G};for(let Ee of Gv)B[Ee]&&!G[Ee]&&(pe[Ee]=!0,ie=!0);return ie?pe:G})},[_,Ro]),(0,te.useEffect)(()=>()=>{rn.current?.cleanup(),En.current&&clearTimeout(En.current)},[]);let ia=(0,te.useCallback)((B,G)=>{let ie=ad(B);if(G){let pe=new Map(Object.values(G).map(Ee=>[Ee.modelObjectId,Ee]));for(let Ee of B){let ht=pe.get(Ee);ht&&(ie[Ee]=ht)}}return ie},[]);(0,te.useEffect)(()=>{if(!a)return;let B=`${a.id}:${a.revision}`;if(An.current===B)return;An.current=B;let G=f!==a.model.url||p?.tilesetUrl!==a.model.tilesetUrl||p?.assetVersion!==a.model.assetVersion,ie=P!==a.objectBindings,pe=Q!==a.sceneConfig;(G||ie||pe)&&(cr.current=!0),g(a.model),w(a.model.name??"model");let Ee=a.objectBindings;if(ie){let ht=ta.current;Ee=ht?ia(ht,a.objectBindings):a.objectBindings,T.reset(Ee)}if(pe&&H.reset(a.sceneConfig),G){let ht=++xn.current;dr.current={requestId:ht,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl},na.current=null,S(null),M(!0),x(a.model.url)}li.current={modelUrl:a.model.url,bindings:Ee,sceneConfig:a.sceneConfig}},[P,ia,a,f,Q,p,T,H]);let qr=(0,te.useRef)(o);qr.current=o,(0,te.useEffect)(()=>{if(!a||!qr.current||!f)return;if(!Er.current){Er.current=!0;return}let B=li.current;if(f===a.model.url&&P===a.objectBindings&&Q===a.sceneConfig||B!==null&&f===B.modelUrl&&P===B.bindings&&Q===B.sceneConfig){cr.current=!1;return}if(dr.current)return;if(cr.current){cr.current=!1;return}let G=window.setTimeout(()=>{qr.current?.({projectId:a.id,baseRevision:a.revision,model:{...p??a.model,url:f,name:E||a.model.name},objectBindings:P,sceneConfig:Q},"local")},s);return()=>window.clearTimeout(G)},[P,E,f,a,s,p,Q]),(0,te.useEffect)(()=>{let B=G=>{if(G.key.toLowerCase()!=="z"||!(G.metaKey||G.ctrlKey))return;let ie=G.target,pe=ie?.tagName;if(pe==="INPUT"||pe==="TEXTAREA"||ie?.isContentEditable)return;G.preventDefault();let Ee=Lt==="scene"?H:T;G.shiftKey?Ee.redo():Ee.undo()};return window.addEventListener("keydown",B),()=>window.removeEventListener("keydown",B)},[Lt,T,H]),(0,te.useEffect)(()=>{if(y||Y==="default"||Y==="success")return;X(!0);let B=window.setTimeout(()=>X(!1),4e3);return()=>window.clearTimeout(B)},[U,Y,y]);let Gn=(0,te.useMemo)(()=>Object.keys(P),[P]),nl=(0,te.useMemo)(()=>!_||!an?null:an.id.trim()?Object.entries(P).some(([ie,pe])=>ie!==_&&pe.id===an.id)?"Another binding already uses this ID.":null:"ID is required.",[P,_,an]),nr=(B,G)=>{b(ie=>({...ie,[B]:G(ie[B])}))},aa=(B,G)=>{nr(B,ie=>{let pe=Hp(G(ie.style?.material));return Wp(ie,pe)})},rl=(B,G,ie)=>{aa(B,pe=>({...pe,[G]:ie?{path:ie}:void 0}))},xd=(B,G)=>{Ue(ie=>({...ie,[B]:G})),!G&&_&&nr(_,ie=>{let pe=Hp(Xv(ie.style?.material,B));return Wp(ie,pe)})},ko=(0,te.useCallback)((B,G,ie)=>{let pe=Nv(B),Ee=ad(pe);if(ie){let At=new Map(Object.values(ie).map(it=>[it.modelObjectId,it]));for(let it of pe){let mi=At.get(it);mi&&(Ee[it]=mi)}}B.updateMatrixWorld(!0);let ht={};for(let At of pe){let it=Ur(B,At);if(!it){ht[At]={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivotLocal:[0,0,0],rotationOrder:"XYZ"};continue}let mi=Vc(it);ht[At]={position:[it.position.x,it.position.y,it.position.z],rotation:[it.rotation.x,it.rotation.y,it.rotation.z],scale:[it.scale.x,it.scale.y,it.scale.z],pivotLocal:[mi.x,mi.y,mi.z],rotationOrder:it.rotation.order}}R.current=ht,T.reset(Ee),S(pe[0]??null),ie||ne(At=>({...At,annotations:[]})),D(`Generated ${pe.length} bindings from ${G}.`),A("success"),Xr.current=100,N(100),En.current&&clearTimeout(En.current),En.current=setTimeout(()=>{En.current=null,M(!1),N(null)},400)},[T,ne]),Do=(B,G,ie,pe)=>{let Ee=++xn.current;M(!0),N(null),Xr.current=0,En.current&&(clearTimeout(En.current),En.current=null),Ia.current=ie;let ht=ie?ie/1048576:0;D(ht>=100?`Reading ${G} (${Math.round(ht)}MB \u2014 large file, this can take a while)...`:`Reading ${G} and generating starter bindings...`),A("default"),w(G),g(pe??{url:B,name:G}),Mt(null);let At=na.current;if(B===f&&At?.url===B){dr.current=null,ko(At.scene,G);return}dr.current={requestId:Ee,modelName:G,modelUrl:B,streaming:!!pe?.tilesetUrl},x(B),T.reset({}),S(null)},yd=(0,te.useCallback)(B=>{let G=dr.current;if(!(!G||G.requestId!==xn.current)){if(dr.current=null,na.current={url:G.modelUrl,scene:B},G.streaming){D(`Streaming ${G.modelName}.`),A("success"),M(!1);return}G.storedBindings&&(cr.current=!0),ko(B,G.modelName,G.storedBindings)}},[ko,T]),rr=(0,te.useCallback)(B=>{let G=B.map(pe=>pe.name);if(G.length===0)return;ta.current=G,cr.current=!0;let ie=ia(G,a?.objectBindings);if(T.reset(ie),a){let pe=li.current;li.current={modelUrl:pe?.modelUrl??a.model.url,bindings:ie,sceneConfig:pe?.sceneConfig??a.sceneConfig}}S(pe=>pe??G[0]??null),D(`Streaming ${G.length} bindable objects.`),A("success"),M(!1)},[ia,T,a]),il=(0,te.useCallback)(B=>{let G=dr.current;!G||G.requestId!==xn.current||(dr.current=null,console.error(B),D(`Could not read ${G.modelName}. Make sure the file is a valid GLB, GLTF, OBJ, FBX, or USDZ asset.`),A("error"),En.current&&(clearTimeout(En.current),En.current=null),Xr.current=0,M(!1),N(null))},[]),Yr=(0,te.useCallback)(B=>{let G=null;if(B.lengthComputable&&B.total>0)G=B.loaded/B.total*100;else{let pe=Ia.current;pe&&pe>0&&(G=B.loaded/pe*100)}if(G===null)return;let ie=Math.min(90,Math.floor(G/10)*10);ie>Xr.current&&(Xr.current=ie,N(ie)),G>=99.5&&D(pe=>pe.startsWith("Finalizing")?pe:"Finalizing model \u2014 parsing geometry and textures (large files can take a moment here)...")},[]),oa=(0,te.useCallback)(B=>{di.handleAnimationsReady(B);let G=B.clipDetails??B.clips.map(ie=>({sourceName:ie,duration:0}));ne(ie=>({...ie,animations:Iv(ie,G)}))},[di,ne]),Vn=async()=>{rn.current?.cleanup(),rn.current=null,await Do(D_,"room.glb")},sa=async B=>{if(!u)return;if(c){try{M(!0),D(`Uploading ${B.name}...`),A("default");let ie=await c(B);await Do(ie.url,ie.name??B.name,B.size,ie)}catch(ie){M(!1),D(ie instanceof Error?ie.message:`Could not upload ${B.name}.`),A("error")}return}let G;try{G=await zl(B)}catch(ie){D(ie instanceof Error?ie.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset."),A("error");return}rn.current?.cleanup(),rn.current=G,await Do(G.url,G.name,B.size,{url:G.url,name:G.name})},Bo=async B=>{let G=B.target.files?.[0];G&&(await sa(G),B.target.value="")},al=()=>{rn.current?.cleanup(),rn.current=null,na.current=null,dr.current=null,R.current={},Un.current=0,Qe(!1),En.current&&(clearTimeout(En.current),En.current=null),Xr.current=0,N(null),Ia.current=void 0,x(null),w(""),g(null),S(null),Mt(null),T.reset({}),ue("{}"),xe("{}"),Pe(null),Et(null),Ut(null),zn(!1),ne(B=>({...B,animations:Di.animations,annotations:[]})),D("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),A("default")},wd=()=>{d.current?.click()},_d=()=>{h.current?.click()},Lr=async B=>{V(!0);try{let{assets:G,failedPaths:ie}=await Hv(P);B==="json"?await Fp("objectBindings.json",zv(P),"application/json","objectBindings.zip",G):await Fp("objectBindings.ts",Uv(P),"text/typescript","objectBindings-ts.zip",G),ie.length>0?(D(`Exported, but ${ie.length} uploaded image${ie.length===1?"":"s"} couldn't be bundled: ${ie.join(", ")}.`),A("error")):G.length>0&&(D(`Exported with ${G.length} uploaded image${G.length===1?"":"s"} bundled into the zip.`),A("success"))}catch(G){let ie=G instanceof Error?G.message:"Unknown export error.";D(`Failed to export bindings: ${ie}`),A("error")}finally{V(!1)}},la=async B=>{if(!Gn.length){D("Load a model before importing bindings."),A("error");return}let G;try{G=JSON.parse(await B.text())}catch{D(`${B.name} is not valid JSON.`),A("error");return}if(G===null||typeof G!="object"||Array.isArray(G)){D("Expected a JSON object mapping object IDs to bindings."),A("error");return}let ie=new Map;for(let At of Object.values(G))if(At!==null&&typeof At=="object"&&typeof At.id=="string"&&typeof At.type=="string"&&typeof At.modelObjectId=="string"){let it=At;ie.set(it.modelObjectId,it)}if(ie.size===0){D(`${B.name} doesn't look like an exported bindings file.`),A("error");return}let pe={...P},Ee=0;for(let At of Object.keys(pe)){let it=ie.get(At);it&&(pe[At]=it,Ee++)}if(Ee===0){D(`None of the object IDs in ${B.name} match this model \u2014 nothing imported.`),A("error");return}b(pe);let ht=ie.size-Ee;D(ht>0?`Imported ${Ee} binding${Ee===1?"":"s"} from ${B.name} (${ht} skipped \u2014 not in this model).`:`Imported ${Ee} binding${Ee===1?"":"s"} from ${B.name}.`),A("success")},No=async B=>{let G=B.target.files?.[0];G&&(await la(G),B.target.value="")},kr=()=>{m.current?.click()},ol=async B=>{let G;try{G=JSON.parse(await B.text())}catch{D(`${B.name} is not valid JSON.`),A("error");return}if(G===null||typeof G!="object"||Array.isArray(G)){D("Expected a JSON object with scene config sections."),A("error");return}let ie=["model","camera","lighting","wireframe","shadows","environment","background","groundShadows","postProcessing","animations","annotations","cinematic"],pe=G,Ee=ie.filter(ht=>pe[ht]!==void 0);if(Ee.length===0){D(`${B.name} doesn't look like an exported scene config file.`),A("error");return}ne(ht=>{let At={...ht};for(let it of Ee)At[it]=qv(ht[it],pe[it]);return At}),D(`Imported ${Ee.length} section${Ee.length===1?"":"s"} from ${B.name}.`),A("success")},ca=async B=>{let G=B.target.files?.[0];G&&(await ol(G),B.target.value="")},Oo=B=>{B.preventDefault(),B.stopPropagation(),!(y||f)&&(Un.current+=1,Qe(!0))},da=B=>{B.preventDefault(),B.stopPropagation(),!(y||f)&&(B.dataTransfer.dropEffect="copy",Qe(!0))},pi=B=>{B.preventDefault(),B.stopPropagation(),!(y||f)&&(Un.current=Math.max(0,Un.current-1),Un.current===0&&Qe(!1))},sl=async B=>{if(B.preventDefault(),B.stopPropagation(),Un.current=0,Qe(!1),y||f)return;let G=B.dataTransfer.files?.[0];G&&await sa(G)},ll=(B,G,ie)=>{if(!_)return;let pe;try{pe=JSON.parse(G)}catch{ie("Invalid JSON");return}if(pe===null||typeof pe!="object"||Array.isArray(pe)){ie("Expected a JSON object");return}if(B==="metrics"&&Object.values(pe).some(ht=>typeof ht!="number"||!Number.isFinite(ht))){ie("Metrics values must be numbers");return}nr(_,Ee=>({...Ee,[B]:pe})),ie(null)},Io=(0,te.useCallback)(B=>{if(je){he("orbit");return}if(!B){S(null);return}let G=Object.entries(P).find(([ie,pe])=>pe===B||ie===B.modelObjectId||pe.modelObjectId===B.modelObjectId)?.[0]??null;S(G)},[je,P]),cl=(0,te.useCallback)(async B=>{if(je){he("orbit");return}S(B),Ut(null),await ur(B)},[je,ur]),ua=(0,te.useCallback)(B=>{Ut(B?P[B]??null:null)},[P]),dl=(0,te.useCallback)(B=>Rt(!B),[]),ul=(0,te.useCallback)(()=>{if(je){D("Camera positions aren't available while Pointer Lock is the active camera controller."),A("error");return}if(!_||!ct)return;let B={position:ct.position,target:ct.target,...ct.fov!=null?{fov:ct.fov}:{},zoom:ct.zoom};nr(_,G=>({...G,cameraState:B}))},[je,_,ct]),pl=(0,te.useCallback)(()=>{if(je){D("Camera positions aren't available while Pointer Lock is the active camera controller."),A("error");return}!tr?.position||!tr?.target||ra({position:tr.position,target:tr.target,fov:tr.fov??ct?.fov??null,zoom:tr.zoom??ct?.zoom??1},!0)},[je,tr,ra,ct]),Sd=(0,te.useCallback)(()=>{je||_&&nr(_,B=>({...B,cameraState:void 0}))},[je,_]),Md=(0,te.useCallback)(async()=>{if(je){D("Reset View isn't available while Pointer Lock is the active camera controller."),A("error");return}await ci()},[je,ci]),hl=(0,te.useCallback)(async()=>{if(je){D("Fit Scene isn't available while Pointer Lock is the active camera controller."),A("error");return}await el()},[je,el]),Ai=(0,te.useCallback)(B=>{Xt(B),st(!0)},[]),hi=(0,te.useCallback)(()=>{st(!1),Xt(null)},[]),Cd=(0,te.useCallback)(()=>{if(hn==="bindings"){if(!Gn.length){hi();return}let B=ad(Gn);T.reset(B),S(Gn[0]??null),D("Object bindings reset to default values."),A("success")}else hn==="scene"&&(H.reset(Di),D("Scene config reset to default values."),A("success"));hi()},[hn,Gn,T,H,hi]);return we.status==="checking"?(0,W.jsx)("div",{className:"bb-root bb-root--licenseChecking",children:(0,W.jsx)(ba,{title:"Verifying License",message:"Checking your license key..."})}):we.status==="invalid"?(0,W.jsx)("div",{className:"bb-root bb-root--licenseInvalid",children:(0,W.jsx)(ba,{tone:"error",title:"Invalid License",message:we.isLocalDomain?we.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})}):(0,W.jsxs)(pp.Provider,{value:Be,children:[(0,W.jsxs)("div",{className:"bb-root",children:[(0,W.jsx)("input",{ref:d,type:"file",accept:Il,className:"bb-hiddenInput",onChange:Bo,disabled:y}),(0,W.jsx)("input",{ref:h,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:No,disabled:y}),(0,W.jsx)("input",{ref:m,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:ca,disabled:y}),(0,W.jsxs)("aside",{className:`bb-sidebar bb-sidebar--left ${_e?"bb-sidebar--collapsed":""}`,children:[(0,W.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!_e&&(0,W.jsx)("h1",{className:"bb-title",children:"Binding Builder"}),(0,W.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>ae(B=>!B),"aria-label":_e?"Open editor sidebar":"Collapse editor sidebar",title:_e?"Open editor":"Collapse editor",children:_e?"\u2192":"\u2190"})]}),!_e&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsxs)("div",{className:"bb-tabRow",children:[(0,W.jsx)("button",{type:"button",className:`bb-tab ${Lt==="object"?"bb-tab--active":""}`,onClick:()=>Qt("object"),children:"Object"}),(0,W.jsx)("button",{type:"button",className:`bb-tab ${Lt==="scene"?"bb-tab--active":""}`,onClick:()=>Qt("scene"),children:"Scene"})]}),(0,W.jsx)("section",{className:"bb-editor",children:Lt==="scene"?(0,W.jsx)(W.Fragment,{children:f?(0,W.jsx)(Lp,{config:Q,onChange:ne,activeSubTab:Ae,onActiveSubTabChange:J,cameraState:Ae==="Cinematic"&&ct?{position:ct.position,target:ct.target,azimuthAngle:ct.azimuthAngle,polarAngle:ct.polarAngle}:null,onPreviewWaypoint:Rr,animationClipDetails:di.clipDetails,animationPlayback:di}):(0,W.jsx)("div",{className:"bb-emptyEditor",children:"Upload a model to edit its scene settings."})}):!an||!_?(0,W.jsx)("div",{className:"bb-emptyEditor",children:"Select a generated node binding to edit its values."}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)("div",{className:"bb-editorHeader",children:(0,W.jsxs)("div",{children:[(0,W.jsx)("div",{className:"bb-sectionKicker",children:"Editing Binding"}),(0,W.jsx)("h2",{className:"bb-editorTitle",children:an.label||_}),(0,W.jsxs)("div",{className:"bb-editorMeta",children:[(0,W.jsx)("span",{children:an.type}),(0,W.jsx)("span",{children:an.modelObjectId})]})]})}),(0,W.jsx)(wv,{selectedItem:_,selectedBinding:an,open:et.identity,onToggle:()=>_t("identity"),updateBinding:nr,idError:nl}),(0,W.jsx)(Mv,{selectedItem:_,selectedBinding:an,open:et.basics,onToggle:()=>_t("basics"),updateBinding:nr}),(0,W.jsxs)(er,{title:"Material",open:et.material,onToggle:()=>_t("material"),tooltip:"Edit the selected object's base material, textures, and surface properties.",children:[(0,W.jsx)(yv,{disabled:!_,onApply:B=>_&&aa(_,G=>({...G,...B}))}),(0,W.jsx)(vv,{selectedItem:_,selectedMaterial:Ro,pbrWorkflow:Se,onPbrWorkflowChange:le,openMaterialPanels:He,materialPanelEnabled:ze,onToggleMaterialPanel:Ve,onSetMaterialPanelState:xd,updateSelectedMaterial:aa,setSelectedTexturePath:rl})]}),(0,W.jsx)(Av,{selectedItem:_,selectedBinding:an,open:et.actions,onToggle:()=>_t("actions"),updateBinding:nr}),(0,W.jsx)(Ev,{selectedBinding:an,open:et.camera,onToggle:()=>_t("camera"),cameraState:ct,formattedCameraState:ui,savedCameraPosition:tr,onSaveCameraPosition:ul,onGoToSavedCamera:pl,onClearSavedCamera:Sd,onResetView:Md,onFitScene:hl}),(0,W.jsx)(Bv,{selectedItem:_,selectedBinding:an,open:et.transform,onToggle:()=>_t("transform"),updateBinding:nr,moveModeEnabled:Bn,onToggleMoveMode:zn,transformSpace:nn,onTransformSpaceChange:F,originalTransform:R.current[_]??null}),(0,W.jsx)(Ip,{title:"Metrics",label:"Metrics JSON",open:et.metrics,onToggle:()=>_t("metrics"),draft:$,error:Oe,example:'{"area": 42}',onDraftChange:ue,onCommit:()=>ll("metrics",$,Pe)}),(0,W.jsx)(Ip,{title:"Metadata",label:"Metadata JSON",open:et.metadata,onToggle:()=>_t("metadata"),draft:De,error:Ie,example:'{"room": "kitchen"}',onDraftChange:xe,onCommit:()=>ll("metadata",De,Et)})]})}),Lt==="object"&&(0,W.jsxs)("div",{className:"bb-toolbar",children:[(0,W.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,W.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!T.canUndo,onClick:T.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,W.jsx)(Hn.Undo2,{size:16})}),(0,W.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!Gn.length,onClick:()=>Ai("bindings"),title:"Reset object bindings to default",children:(0,W.jsx)(Hn.ListRestart,{size:16})}),(0,W.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!T.canRedo,onClick:T.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,W.jsx)(Hn.Redo2,{size:16})})]}),(0,W.jsx)("div",{className:"bb-toolbarDivider"}),(0,W.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!Gn.length||y,onClick:_d,title:"Re-apply a previously exported objectBindings.json onto this model",children:[(0,W.jsx)(Hn.Upload,{size:14}),"Import"]}),(0,W.jsx)("div",{className:"bb-toolbarDivider"}),(0,W.jsx)(Dp,{disabled:!Gn.length||L,exporting:L,onExportJson:()=>Lr("json"),onExportTs:()=>Lr("ts")})]}),Lt==="scene"&&(0,W.jsxs)("div",{className:"bb-toolbar",children:[(0,W.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,W.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!H.canUndo,onClick:H.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,W.jsx)(Hn.Undo2,{size:16})}),(0,W.jsx)("button",{type:"button",className:"bb-iconButton",onClick:()=>Ai("scene"),title:"Reset scene config to default",children:(0,W.jsx)(Hn.ListRestart,{size:16})}),(0,W.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!H.canRedo,onClick:H.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,W.jsx)(Hn.Redo2,{size:16})})]}),(0,W.jsx)("div",{className:"bb-toolbarDivider"}),(0,W.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!Gn.length||y,onClick:kr,title:"Re-apply a previously exported sceneConfig.json",children:[(0,W.jsx)(Hn.Upload,{size:14}),"Import"]}),(0,W.jsx)("div",{className:"bb-toolbarDivider"}),(0,W.jsx)(Dp,{disabled:!Gn.length||y,onExportJson:()=>$s("sceneConfig.json",Vv(Q),"application/json"),onExportTs:()=>$s("sceneConfig.ts",Fv(Q),"text/typescript")})]})]})]}),(0,W.jsxs)("main",{className:"bb-previewShell",children:[(0,W.jsxs)("div",{className:"bb-previewHeader",children:[(0,W.jsxs)("div",{className:"bb-previewToggles",children:[(0,W.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,W.jsx)("input",{type:"checkbox",checked:Ye,onChange:B=>ye(B.target.checked)}),"Zoom on selected"]}),(0,W.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,W.jsx)("input",{type:"checkbox",checked:ut,onChange:B=>St(B.target.checked)}),"Highlight on hover"]}),(0,W.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,W.jsx)("input",{type:"checkbox",checked:en,onChange:B=>tn(B.target.checked)}),"Camera controller"]})]}),(0,W.jsxs)("div",{className:"bb-previewControlsColumn",children:[(0,W.jsxs)("div",{className:"bb-previewControls",children:[(0,W.jsx)("div",{className:"bb-previewMeta",children:(0,W.jsx)("span",{children:_?`Focused: ${_}`:"Select a node to inspect it"})}),f&&u&&(0,W.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-removeModelButton",onClick:al,children:"Remove model"})]}),f&&(0,W.jsx)("div",{className:"bb-moveHint",children:je?(0,W.jsx)(W.Fragment,{children:"Click the preview to look around \xB7 Esc to release"}):Bn?(0,W.jsx)(W.Fragment,{children:"Select a mesh \xB7 drag the colored arrows, planes, or rings"}):(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)("kbd",{children:"W"}),(0,W.jsx)("kbd",{children:"A"}),(0,W.jsx)("kbd",{children:"S"}),(0,W.jsx)("kbd",{children:"D"})," move \xB7 ",(0,W.jsx)("kbd",{children:"Space"}),"/",(0,W.jsx)("kbd",{children:"C"})," up \xB7 down \xB7 drag to look"]})})]})]}),(0,W.jsxs)("div",{className:"bb-preview",children:[(0,W.jsx)(bo,{visible:y||k,message:U,tone:Y,progress:C??void 0}),f?(0,W.jsx)(Vs,{modelUrl:f,tilesetUrl:p?.tilesetUrl,objectBindings:P,selectedObject:an,onObjectSelect:Io,onObjectBindingsChange:b,onObjectEditLeaseChange:(B,G)=>l?.(B.modelObjectId||B.id,G),showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,onCameraChange:Eo,onViewerReady:tl,onAnnotationsChange:Lo,activeAnnotation:lt?.annotation??null,onActiveAnnotationChange:vd,onAnimationsReady:oa,onModelLoaded:yd,onLoadError:il,onObjectCatalog:rr,onProgress:Yr,onCameraControllerChange:he,cameraControllerType:oe,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,sceneConfig:Q,onSceneConfigChange:ne,preserveDrawingBuffer:!0,disableZoom:!1,zoomOnSelected:Ye,highlightOnHover:ut,enableCameraControls:en,moveModeEnabled:Bn,objectTransformSpace:nn,enableKeyboardNavigation:!0,showViewGizmo:!0,panelHoveredObject:ut?pt:null,showLoadingOverlay:!1,autoRotate:je?!1:Q.model.autoRotate??!1,autoRotateSpeed:Q.model.autoRotateSpeed??1}):(0,W.jsx)("div",{className:`bb-previewPlaceholder ${Wt?"bb-previewPlaceholder--dragActive":""}`,onDragEnter:Oo,onDragOver:da,onDragLeave:pi,onDrop:sl,children:(0,W.jsxs)("div",{children:[(0,W.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."}),u?(0,W.jsx)("button",{type:"button",className:"bb-previewPlaceholderButton",onClick:wd,disabled:y,children:"Upload"}):null]})})]})]}),(0,W.jsx)(Ov,{bindings:P,selectedItem:_,onSelect:cl,onHover:ua,isOpen:!zt,onToggle:dl})]}),rt&&(0,W.jsx)("div",{className:"bb-reset-overlay",onClick:hi,children:(0,W.jsxs)("div",{className:"bb-reset-dialog",onClick:B=>B.stopPropagation(),children:[(0,W.jsxs)("div",{className:"bb-reset-header",children:[(0,W.jsxs)("h3",{className:"bb-reset-title",children:[(0,W.jsx)(Hn.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Confirm Reset"]}),(0,W.jsx)("button",{className:"bb-reset-close",onClick:hi,children:(0,W.jsx)(Hn.X,{size:20})})]}),(0,W.jsxs)("div",{className:"bb-reset-body",children:[(0,W.jsxs)("p",{className:"bb-reset-message",children:["Are you sure you want to reset"," ",(0,W.jsx)("strong",{children:hn==="bindings"?"Object Bindings":"Scene Config"}),"?"]}),(0,W.jsx)("p",{className:"bb-reset-details",children:hn==="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,W.jsx)("p",{className:"bb-reset-warning",children:"This action cannot be undone!"})]}),(0,W.jsxs)("div",{className:"bb-reset-footer",children:[(0,W.jsx)("button",{className:"bb-reset-btn",onClick:hi,children:"Cancel"}),(0,W.jsx)("button",{className:"bb-reset-btn-danger",onClick:Cd,children:"Yes, Reset"})]})]})})]})}var ce=require("react"),ld=require("@react-three/drei"),oi=require("@react-three/fiber"),Jv=require("@react-three/fiber");var Qi=require("three"),Qv=require("three-stdlib");var pn=require("lucide-react");var q=require("react/jsx-runtime"),Yv={color:"#93c5fd",intensity:.05},B_=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];function N_(e){return!!(e&&"isMesh"in e&&e.isMesh)}function $v(e,t){Array.isArray(e)?e.forEach(t):t(e)}function O_(e,t){if(!t)return;let n=t.camera;if(!(n instanceof Qi.PerspectiveCamera))return;let i=new Qi.Box3().setFromObject(e).getSize(new Qi.Vector3).length();!Number.isFinite(i)||i<=0||(n.near=i/100,n.far=i*100,n.updateProjectionMatrix(),t.maxDistance=i*10)}var $p=class extends ce.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 I_({url:e,format:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,hiddenKeys:a,selectedKey:o,panelHoveredKey:s,nodeRefsOut:c,onMeshesReady:l,onModelLoaded:u,onLoadProgress:d,onMeshClick:h,highlightOnHover:m}){let{scene:f}=jl(e,{dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r},t,d),x=(0,oi.useThree)(C=>C.invalidate),{setCanvasCursor:E,restoreCanvasCursor:w}=$l(),[p,g]=(0,ce.useState)(null),_=(0,ce.useMemo)(()=>Qv.SkeletonUtils.clone(f),[f]),S=(0,ce.useMemo)(()=>{let C={};return _.traverse(N=>{if(!N_(N))return;let L=N.name||N.uuid;C[L]={key:L,label:N.name||N.type,ref:N}}),C},[_]),T=(0,ce.useMemo)(()=>{let C={};for(let[N,{ref:L}]of Object.entries(S)){let U=(Array.isArray(L.material)?L.material:[L.material]).map(D=>{let A=(io(D)??new Qi.MeshStandardMaterial).clone();return A.userData.baseColor=A.color.clone(),A.userData.baseMap=A.map,A.userData.baseEmissive=A.emissive.clone(),A.userData.baseEmissiveMap=A.emissiveMap,A.userData.baseEmissiveIntensity=A.emissiveIntensity,A});C[N]=Array.isArray(L.material)?U:U[0]}return C},[S]);(0,ce.useEffect)(()=>()=>{Object.values(T).forEach(C=>$v(C,N=>N.dispose()))},[T]);let P=(0,ce.useRef)(null);(0,ce.useEffect)(()=>{P.current!==e&&(P.current=e,_.updateWorldMatrix(!0,!0),us(_),l(S),u(_))},[e,_,S,l,u]),(0,ce.useEffect)(()=>{let C=new AbortController;return $a(_,C.signal),()=>{C.abort(),ga(_)}},[_]);let b=(0,ce.useMemo)(()=>!wl(_),[_]);(0,ce.useEffect)(()=>{for(let[C,{ref:N}]of Object.entries(S))c.current[C]=N},[S,c]),(0,ce.useEffect)(()=>{!m&&p!==null&&(g(null),w())},[m,p,w]),(0,ce.useEffect)(()=>{for(let[C,{ref:N}]of Object.entries(S)){N.visible=!a.has(C);let L=T[C];if(!L)continue;N.material=L;let V=m&&p===C,U=m&&s===C;$v(L,D=>{if(D.color.copy(D.userData.baseColor),D.map=D.userData.baseMap??null,D.emissive.copy(D.userData.baseEmissive),D.emissiveMap=D.userData.baseEmissiveMap??null,D.emissiveIntensity=D.userData.baseEmissiveIntensity,U||V){let Y=!!D.userData.baseEmissiveMap;D.emissive.set(Yv.color),D.emissiveIntensity=Y?D.userData.baseEmissiveIntensity:Yv.intensity}D.needsUpdate=!0})}x()},[S,T,p,o,s,m,a,x]);let y=C=>{let N=C;for(;N;){let L=N.name||N.uuid;if(S[L])return L;N=N.parent}return null},M=b?{onClick:C=>{let N=y(C.object);N&&(C.stopPropagation(),h(N))},...m?{onPointerOver:C=>{let N=y(C.object);N&&(C.stopPropagation(),E("pointer"),g(N))},onPointerOut:C=>{C.stopPropagation(),w(),g(null)}}:{}}:{};return(0,q.jsx)("primitive",{object:_,...M})}function z_({scene:e,controlsRef:t,refitOnResize:n,onInitialFitComplete:i}){let r=(0,ce.useRef)(!1),a=(0,oi.useThree)(c=>c.invalidate),o=(0,oi.useThree)(c=>c.size),s=(0,ce.useRef)(null);return(0,ce.useEffect)(()=>{r.current=!1,a()},[a,e]),(0,oi.useFrame)(()=>{if(!r.current){if(!e||!t.current){a();return}r.current=!0,O_(e,t.current),t.current.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}).finally(i)}}),(0,ce.useEffect)(()=>{if(!(!n||!r.current||!e||!t.current))return s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{t.current?.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}),a()},150),()=>{s.current&&clearTimeout(s.current)}},[o.width,o.height,n]),null}function U_({exposure:e}){let t=(0,oi.useThree)(i=>i.gl),n=(0,oi.useThree)(i=>i.invalidate);return(0,ce.useEffect)(()=>{t.toneMappingExposure=e,n()},[t,e,n]),null}function V_({enabled:e,controlsRef:t}){let n=(0,oi.useThree)(i=>i.invalidate);return(0,oi.useFrame)((i,r)=>{!e||!t.current||(t.current.rotate(r*.2,0,!1),n())}),null}function sd(e){return Array.from(e.types).includes("Files")}function Kv({label:e,checked:t,onChange:n}){return(0,q.jsxs)("div",{className:"env-row",children:[(0,q.jsx)("span",{className:"env-row__label",children:e}),(0,q.jsx)("div",{className:"env-row__value",children:(0,q.jsx)("button",{className:"env-checkbox-btn",onClick:()=>n(!t),children:(0,q.jsx)("span",{className:`env-checkbox${t?" env-checkbox--checked":""}`,children:t&&(0,q.jsx)(pn.Check,{size:9,strokeWidth:2,color:"white"})})})})]})}function qp({label:e,value:t,onChange:n}){return(0,q.jsxs)("div",{className:"env-row",children:[(0,q.jsx)("span",{className:"env-row__label",children:e}),(0,q.jsx)("div",{className:"env-row__value",children:(0,q.jsxs)("div",{className:"env-color-swatch",style:{background:t},children:[(0,q.jsx)("span",{className:"env-color-swatch__hex",children:t}),(0,q.jsx)("input",{type:"color",className:"env-color-swatch__input",value:t,onChange:i=>n(i.target.value)})]})})]})}function Yp({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,q.jsxs)("div",{className:"env-row",children:[(0,q.jsx)("span",{className:"env-row__label",children:e}),(0,q.jsxs)("div",{className:"env-row__value env-row__value--slider",children:[(0,q.jsx)("input",{type:"range",className:"env-slider",min:n,max:i,step:r,value:t,onChange:o=>a(Number(o.target.value))}),(0,q.jsx)("span",{className:"env-slider__value",children:t.toFixed(2)})]})]})}function F_({label:e,value:t,options:n,onChange:i}){return(0,q.jsxs)("div",{className:"env-row",children:[(0,q.jsx)("span",{className:"env-row__label",children:e}),(0,q.jsx)("div",{className:"env-row__value",children:(0,q.jsx)("select",{className:"env-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,q.jsx)("option",{value:r,children:r},r))})})]})}function Zv({title:e,children:t}){let[n,i]=(0,ce.useState)(!1);return(0,q.jsxs)("div",{className:"env-section",children:[(0,q.jsxs)("button",{className:"env-section__header",onClick:()=>i(r=>!r),children:[(0,q.jsx)(pn.ChevronDown,{size:12,strokeWidth:2,className:`env-section__chevron${n?" env-section__chevron--collapsed":""}`}),(0,q.jsx)("span",{children:e})]}),!n&&(0,q.jsx)("div",{className:"env-section__body",children:t})]})}function j_({isOpen:e,onToggle:t,settings:n,onChange:i}){return(0,q.jsxs)("div",{className:`left-panel-wrapper ${e?"left-panel-wrapper--open":"left-panel-wrapper--closed"}`,children:[!e&&(0,q.jsx)("button",{className:"side-panel__open-btn side-panel__open-btn--left",onClick:()=>t(!0),children:(0,q.jsx)(pn.Settings,{size:20,strokeWidth:1.8})}),(0,q.jsxs)("div",{className:`side-panel side-panel--left ${e?"side-panel--open-left":"side-panel--closed-left"}`,"aria-hidden":!e,children:[(0,q.jsx)("div",{className:"side-panel__header",children:(0,q.jsxs)("div",{className:"side-panel__header-top",children:[(0,q.jsx)("span",{className:"side-panel__eyebrow",children:"Scene Settings"}),(0,q.jsx)("button",{className:"side-panel__close-btn",onClick:()=>t(!1),title:"Close",children:(0,q.jsx)(pn.X,{size:12,strokeWidth:1.6})})]})}),(0,q.jsxs)("div",{className:"env-controls",children:[(0,q.jsxs)(Zv,{title:"Background",children:[(0,q.jsx)(Kv,{label:"Background",checked:n.backgroundEnabled,onChange:r=>i("backgroundEnabled",r)}),(0,q.jsx)(qp,{label:"Background Color",value:n.backgroundColor,onChange:r=>i("backgroundColor",r)}),(0,q.jsx)(F_,{label:"Environment",value:n.envPreset,options:B_,onChange:r=>i("envPreset",r)}),(0,q.jsx)(Kv,{label:"Auto Rotate",checked:n.autoRotate,onChange:r=>i("autoRotate",r)})]}),(0,q.jsxs)(Zv,{title:"Lighting",children:[(0,q.jsx)(Yp,{label:"Exposure",value:n.exposure,min:0,max:2,step:.05,onChange:r=>i("exposure",r)}),(0,q.jsx)(Yp,{label:"Ambient Light Intensity",value:n.ambientIntensity,min:0,max:3,step:.05,onChange:r=>i("ambientIntensity",r)}),(0,q.jsx)(qp,{label:"Ambient Light Color",value:n.ambientColor,onChange:r=>i("ambientColor",r)}),(0,q.jsx)(Yp,{label:"Direct Light Intensity",value:n.directionalIntensity,min:0,max:5,step:.05,onChange:r=>i("directionalIntensity",r)}),(0,q.jsx)(qp,{label:"Direct Light Color",value:n.directionalColor,onChange:r=>i("directionalColor",r)})]})]})]})]})}function H_({meshKeys:e,hiddenKeys:t,selectedKey:n,isOpen:i,onToggle:r,onFocus:a,onHover:o,onToggleVisibility:s}){let[c,l]=(0,ce.useState)(""),[u,d]=(0,ce.useState)(null),h=Object.values(e).filter(m=>m.label.toLowerCase().includes(c.toLowerCase()));return(0,q.jsxs)("div",{className:`right-panel-wrapper ${i?"right-panel-wrapper--open":"right-panel-wrapper--closed"}`,children:[!i&&(0,q.jsx)("button",{className:"side-panel__open-btn",onClick:()=>r(!0),children:(0,q.jsx)(pn.Boxes,{size:20,strokeWidth:1.8})}),(0,q.jsxs)("div",{className:`side-panel ${i?"side-panel--open":"side-panel--closed"}`,"aria-hidden":!i,children:[(0,q.jsxs)("div",{className:"side-panel__header",children:[(0,q.jsxs)("div",{className:"side-panel__header-top",children:[(0,q.jsx)("span",{className:"side-panel__eyebrow",children:"SCENE OBJECTS"}),(0,q.jsx)("button",{className:"side-panel__close-btn",onClick:()=>r(!1),title:"Close",children:(0,q.jsx)(pn.X,{size:12,strokeWidth:1.6})})]}),(0,q.jsxs)("p",{className:"side-panel__title",children:[h.length," objects"]})]}),(0,q.jsx)("div",{className:"side-panel__search-wrap",children:(0,q.jsx)("input",{className:"side-panel__search",type:"text",placeholder:"Search objects",value:c,onChange:m=>l(m.target.value)})}),(0,q.jsx)("div",{className:"side-panel__list",children:h.map(({key:m,label:f})=>{let x=!t.has(m),E=n===m,w=u===m;return(0,q.jsxs)("div",{onClick:()=>a(m),onMouseEnter:()=>{d(m),o(m)},onMouseLeave:()=>{d(null),o(null)},className:["side-panel__row",w?"side-panel__row--hovered":"",E?"side-panel__row--selected":""].filter(Boolean).join(" "),children:[(0,q.jsx)("span",{className:`side-panel__label${w||E?" side-panel__label--hovered":""}`,children:f}),(0,q.jsx)("button",{className:"side-panel__vis-btn",title:x?"Hide":"Show",onClick:p=>{p.stopPropagation(),s(m)},children:(0,q.jsx)("span",{className:`side-panel__checkbox${x?" side-panel__checkbox--checked":""}`,children:x&&(0,q.jsx)(pn.Check,{size:9,strokeWidth:5,color:"white"})})})]},m)})})]})]})}function Kp({modelUrl:e,modelFormat:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r=!0,backgroundColor:a="#1a1a1a",showSceneObjectsPanel:o=!0,showSceneSettingsPanel:s=!0,enableModelUpload:c=!1,zoomOnSelected:l=!1,highlightOnHover:u=!1,showLoadingOverlay:d=!0,refitOnResize:h=!0,backgroundEnabled:m=!1,autoRotate:f=!1,envPreset:x="city",exposure:E=1,ambientIntensity:w=.6,ambientColor:p="#ffffff",directionalIntensity:g=1.2,directionalColor:_="#ffffff",onModelLoaded:S,onLoadError:T}){let P=(0,ce.useRef)(null),b=(0,ce.useRef)({}),y=(0,ce.useRef)(null),M=(0,ce.useRef)(null),C=(0,ce.useRef)(0),[N,L]=(0,ce.useState)(null),[V,U]=(0,ce.useState)(null),[D,Y]=(0,ce.useState)(!1),[A,k]=(0,ce.useState)({}),[X,$]=(0,ce.useState)(new Set),[ue,De]=(0,ce.useState)(null),[xe,Oe]=(0,ce.useState)(null),[Pe,Ie]=(0,ce.useState)(null),[Et,Wt]=(0,ce.useState)(null),[Qe,_e]=(0,ce.useState)(!1),[ae,zt]=(0,ce.useState)(!1),[Rt,et]=(0,ce.useState)(!1),[wt,He]=(0,ce.useState)(null),[Jt,_t]=(0,ce.useState)(!1),[Ve,Lt]=(0,ce.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[Qt,Ae]=(0,ce.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[J,Se]=(0,ce.useState)({backgroundEnabled:m,backgroundColor:a,autoRotate:f,envPreset:x,exposure:E,ambientIntensity:w,ambientColor:p,directionalIntensity:g,directionalColor:_}),le=c?Pe:e,ze=(0,ce.useCallback)(()=>{L(null),U(null),Y(!1),k({}),$(new Set),De(null),Oe(null),_e(!1),et(!1),He(null)},[]),Ue=(0,ce.useCallback)(()=>{M.current?.cleanup(),M.current=null},[]),Fe=(0,ce.useCallback)(()=>{Ue(),Ie(null),Wt(null),ze(),Se({backgroundEnabled:m,backgroundColor:a,autoRotate:f,envPreset:x,exposure:E,ambientIntensity:w,ambientColor:p,directionalIntensity:g,directionalColor:_})},[p,w,f,a,m,_,g,x,E,ze,Ue]),Ye=(0,ce.useCallback)(async R=>{zt(!0);try{let H=await zl(R);Ue(),M.current=H,Ie(H.url),Wt(H.name),ze()}catch(H){_e(!0),T?.(H)}finally{zt(!1)}},[T,ze,Ue]),ye=(0,ce.useCallback)(R=>{let H=R?.[0];H&&Ye(H)},[Ye]);(0,ce.useEffect)(()=>()=>{Ue()},[Ue]);let ut=(0,ce.useCallback)((R,H)=>{Se(Q=>({...Q,[R]:H}))},[]);(0,ce.useEffect)(()=>{Se(R=>({...R,backgroundColor:a}))},[a]),(0,ce.useEffect)(()=>{ze()},[le,ze]);let St=(0,ce.useCallback)(R=>{k(R),$(new Set),De(null)},[]),en=(0,ce.useCallback)(R=>{L(R),_e(!1);let H=Zo(R);U(H>fa?H:null),Y(!1),He(null),S?.(R)},[S]),tn=(0,ce.useCallback)(R=>{_e(!0),He(null),T?.(R)},[T]),rt=(0,ce.useCallback)(R=>{R.lengthComputable&&R.total>0&&He(R.loaded/R.total*100)},[]),st=(0,ce.useCallback)(R=>{if(De(R),!l)return;let H=b.current[R];!H||!P.current||P.current.fitToBox(H,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[l]),hn=(0,ce.useCallback)(R=>{$(H=>{let Q=new Set(H);return Q.has(R)?Q.delete(R):Q.add(R),Q})},[]),Xt=(0,ce.useCallback)(R=>{!c||!sd(R.dataTransfer)||(R.preventDefault(),R.stopPropagation(),C.current+=1,_t(!0))},[c]),Bn=(0,ce.useCallback)(R=>{!c||!sd(R.dataTransfer)||(R.preventDefault(),R.stopPropagation(),R.dataTransfer.dropEffect="copy",_t(!0))},[c]),zn=(0,ce.useCallback)(R=>{!c||!sd(R.dataTransfer)||(R.preventDefault(),R.stopPropagation(),C.current=Math.max(0,C.current-1),C.current===0&&_t(!1))},[c]),nn=(0,ce.useCallback)(R=>{!c||!sd(R.dataTransfer)||(R.preventDefault(),R.stopPropagation(),C.current=0,_t(!1),ye(R.dataTransfer.files))},[c,ye]),F=d&&(ae||!!(le&&!Qe&&(!N||!Rt)));return(0,q.jsxs)("div",{className:"smv-root",style:{background:J.backgroundColor},onDragEnter:Xt,onDragOver:Bn,onDragLeave:zn,onDrop:nn,children:[s&&le&&(0,q.jsx)(j_,{isOpen:Qt,onToggle:Ae,settings:J,onChange:ut}),(0,q.jsxs)("div",{className:"smv-canvasArea",children:[V!==null&&!D&&(0,q.jsxs)("div",{className:"smv-largeModelBanner",children:[(0,q.jsx)(pn.AlertTriangle,{size:14,className:"smv-largeModelBanner__icon"}),(0,q.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,q.jsx)("button",{type:"button",className:"smv-largeModelBanner__dismiss",onClick:()=>Y(!0),"aria-label":"Dismiss",children:(0,q.jsx)(pn.X,{size:12})})]}),c?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)("input",{ref:y,type:"file",accept:Il,className:"smv-upload-input",onChange:R=>{ye(R.target.files),R.currentTarget.value=""}}),le?(0,q.jsx)("div",{className:"smv-upload-toolbar",children:(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)("span",{className:"smv-upload-toolbar__name",children:Et??"Uploaded model"}),(0,q.jsxs)("button",{type:"button",className:"smv-upload-toolbar__button smv-upload-toolbar__button--ghost",onClick:Fe,children:[(0,q.jsx)(pn.Trash2,{size:14}),"Clear"]})]})}):null]}):null,le?(0,q.jsx)(Jv.Canvas,{dpr:[1,2],frameloop:"demand",resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:{background:J.backgroundColor},camera:{position:[0,0,5],fov:45,near:.1,far:1e3},children:(0,q.jsxs)(ce.Suspense,{fallback:null,children:[(0,q.jsx)("ambientLight",{intensity:J.ambientIntensity,color:J.ambientColor}),(0,q.jsx)("directionalLight",{position:[-4,5,7],intensity:J.directionalIntensity,color:J.directionalColor,castShadow:!0}),(0,q.jsx)("directionalLight",{position:[-5,5,5],intensity:.5}),(0,q.jsx)(ce.Suspense,{fallback:null,children:(0,q.jsx)(ld.Environment,{preset:J.envPreset,background:J.backgroundEnabled})}),(0,q.jsx)(U_,{exposure:J.exposure}),(0,q.jsx)(V_,{enabled:J.autoRotate,controlsRef:P}),(0,q.jsx)($p,{onLoadError:tn,children:(0,q.jsx)(ce.Suspense,{fallback:null,children:(0,q.jsx)(I_,{url:le,format:Pe?void 0:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,hiddenKeys:X,selectedKey:ue,panelHoveredKey:xe,nodeRefsOut:b,onMeshesReady:St,onModelLoaded:en,onLoadProgress:rt,onMeshClick:st,highlightOnHover:u})})},le),(0,q.jsx)(z_,{scene:N,controlsRef:P,refitOnResize:h,onInitialFitComplete:()=>et(!0)}),(0,q.jsx)(ld.CameraControls,{ref:P,makeDefault:!0,smoothTime:.3})]})}):(0,q.jsx)("div",{className:"smv-upload-empty-state",style:{background:J.backgroundColor},children:(0,q.jsxs)("div",{className:"smv-upload-empty-state__card",children:[(0,q.jsx)("div",{className:"smv-upload-empty-state__icon",children:(0,q.jsx)(pn.Upload,{size:24})}),(0,q.jsxs)("p",{className:"smv-upload-empty-state__body",children:["Drag and drop ",(0,q.jsx)("code",{children:".glb"}),", ",(0,q.jsx)("code",{children:".gltf"}),","," ",(0,q.jsx)("code",{children:".obj"}),", ",(0,q.jsx)("code",{children:".fbx"}),", ",(0,q.jsx)("code",{children:".usdz"}),", or"," ",(0,q.jsx)("code",{children:".zip"})," here"]}),(0,q.jsxs)("button",{type:"button",className:"smv-upload-empty-state__button",onClick:()=>y.current?.click(),children:[(0,q.jsx)(pn.Upload,{size:15}),"Choose model"]})]})}),(0,q.jsx)(bo,{visible:F,message:"Loading model...",progress:ae?void 0:wt??void 0}),c&&Jt?(0,q.jsx)("div",{className:"smv-upload-drop-overlay",children:(0,q.jsxs)("div",{className:"smv-upload-drop-overlay__card",children:[(0,q.jsx)(pn.Upload,{size:20}),(0,q.jsx)("span",{children:"Release to load your model"})]})}):null]}),o&&le&&(0,q.jsx)(H_,{meshKeys:A,hiddenKeys:X,selectedKey:ue,isOpen:Ve,onToggle:Lt,onFocus:st,onHover:Oe,onToggleVisibility:hn})]})}var Ks=require("react");function e0(e=null){let[t,n]=(0,Ks.useState)(e),i=(0,Ks.useCallback)(a=>{n(a)},[n]),r=(0,Ks.useCallback)(()=>{n(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:n,handleObjectSelect:i,clearSelection:r}}var t0=require("react");function n0(e,t){return(0,t0.useMemo)(()=>{if(!t)return null;let n=e[t];return n||(Object.values(e).find(i=>i.id===t||i.modelObjectId===t)??null)},[e,t])}var r0=require("react");function i0(e){return(0,r0.useMemo)(()=>Object.values(e).map(t=>t.modelObjectId),[e])}var Kt=require("react");function Zp(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Zs(e,t){if(!Zp(t))return t;let n=Zp(e)?{...e}:{};for(let i of Object.keys(t)){let r=t[i];n[i]=Zp(r)?Zs(n[i],r):r}return n}function G_(e){return typeof e=="object"&&!Array.isArray(e)}function W_(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:e.type===t.type}function Wr(e,t){if(G_(t))return Object.entries(e).filter(([,r])=>W_(r,t)).map(([r])=>r);let i=(typeof t=="string"?[t]:t).map(r=>Rn(e,r)).filter(r=>r!==null);return[...new Set(i)]}function cd(e,t){return Wr(e,t).map(n=>e[n]).filter(n=>n!==void 0)}function X_(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!="string"}function Oa(e,t,n){let i=X_(t)?t:[{ids:t,patch:n??{}}],r=e;for(let a of i)for(let o of Wr(r,a.ids)){let s=r[o];if(!s)continue;let c=Zs(s,a.patch);r===e&&(r={...e}),r[o]=c}return r}function dd(e){return{style:{material:e}}}var a0={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 o0(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n&&typeof n=="object"?{...n}:n]))}function q_(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function s0(e){let[t,n]=(0,Kt.useState)(e),i=(0,Kt.useCallback)((P,b)=>{n(y=>b===void 0?Oa(y,P):Oa(y,P,b))},[]),r=(0,Kt.useCallback)((P,b)=>i(P,dd(b)),[i]),a=(0,Kt.useCallback)((P,b)=>r(P,{baseColor:b}),[r]),o=(0,Kt.useCallback)((P,b,y="baseColor")=>{let M=a0[y],C=typeof b=="string"?{path:b}:b;i(P,{style:{material:{[M]:C}}})},[i]),s=(0,Kt.useCallback)((P,b="baseColor")=>{let y=a0[b];i(P,{style:{material:{[y]:void 0}}})},[i]),c=(0,Kt.useCallback)((P,b)=>{n(y=>{let M=Rn(y,P);if(!M)return y;let C=o0(y[M]?.style?.material),N=Wr(y,b);if(N.length===0)return y;let L=y;for(let V of N){let U=y[V];U&&(L===y&&(L={...y}),L[V]={...U,style:{...U.style,material:o0(C)}})}return L})},[]),l=(0,Kt.useCallback)(P=>i(P,{style:{material:void 0}}),[i]),u=(0,Kt.useCallback)((P,b)=>i(P,{transform:b}),[i]),d=(0,Kt.useCallback)(P=>i(P,{transform:void 0}),[i]),h=(0,Kt.useCallback)((P,b)=>i(P,{metadata:b}),[i]),m=(0,Kt.useCallback)(P=>cd(t,P),[t]),f=(0,Kt.useCallback)(P=>Wr(t,P).map(b=>t[b]?.id??b),[t]),x=(0,Kt.useCallback)(P=>{let b=Rn(t,P);return b?t[b]?.style?.material??null:null},[t]),E=(0,Kt.useCallback)(P=>i(P,{visible:!1}),[i]),w=(0,Kt.useCallback)(P=>i(P,{visible:!0}),[i]),p=(0,Kt.useCallback)(P=>{n(b=>{let y=Wr(b,P).reduce((M,C)=>{let N=b[C];return N&&M.push({ids:C,patch:{visible:N.visible===!1}}),M},[]);return Oa(b,y)})},[n]),g=(0,Kt.useCallback)(()=>{n(P=>Oa(P,Object.keys(P),{visible:!0}))},[n]),_=(0,Kt.useMemo)(()=>q_(t),[t]),S=(0,Kt.useMemo)(()=>Object.keys(_).map(P=>t[P]?.id??P),[_,t]),T=(0,Kt.useCallback)(P=>{let b=Rn(t,P);return b?t[b]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:n,updateObjectBindings:i,setMaterial:r,setBaseColor:a,setTexture:o,clearTexture:s,copyMaterial:c,resetMaterial:l,getMaterial:x,setTransform:u,resetTransform:d,updateMetadata:h,selectObjectBindings:m,selectObjectBindingIds:f,hiddenObjects:_,hiddenObjectIds:S,hideObject:E,showObject:w,toggleObjectVisibility:p,isObjectHidden:T,clearHiddenObjects:g}}function l0(e){return e}var Pn=require("react");function ud(e,t){return Zs(e,t)}var Y_={type:"point",color:"#ffffff",intensity:1,position:[0,0,0],distance:0,decay:2,attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0};function c0(e){let t=(0,Pn.useRef)(null),[n,i]=(0,Pn.useState)(()=>{let w=typeof e=="function"?e():e;return t.current=w,w}),r=(0,Pn.useCallback)(w=>{i(p=>{let g=typeof w=="function"?w(p):w;return ud(p,g)})},[]),a=(0,Pn.useCallback)(()=>{let w=t.current;w&&i(w)},[]),o=(0,Pn.useCallback)((w,p)=>{r(g=>({lighting:{lights:g.lighting.lights.map(_=>_.id===w?{..._,...p}:_)}}))},[r]),s=(0,Pn.useCallback)(w=>{r(p=>p.lighting.lights.some(g=>g.id===w.id)?{}:{lighting:{lights:[...p.lighting.lights,{...Y_,...w}]}})},[r]),c=(0,Pn.useCallback)(w=>{r(p=>({lighting:{lights:p.lighting.lights.filter(g=>g.id!==w)}}))},[r]),l=(0,Pn.useCallback)((w,p)=>o(w,{intensity:p}),[o]),u=(0,Pn.useCallback)((w,p)=>o(w,{color:p}),[o]),d=(0,Pn.useCallback)(w=>o(w,{visible:!0}),[o]),h=(0,Pn.useCallback)(w=>o(w,{visible:!1}),[o]),m=(0,Pn.useCallback)(w=>{r(p=>({lighting:{lights:p.lighting.lights.map(g=>g.id===w?{...g,visible:!g.visible}:g)}}))},[r]),f=(0,Pn.useCallback)((w,p)=>o(w,{attachment:p,attachedToCamera:!1}),[o]),x=(0,Pn.useCallback)(w=>o(w,{attachment:void 0}),[o]),E=(0,Pn.useMemo)(()=>({items:n.lighting.lights,get:w=>n.lighting.lights.find(p=>p.id===w),add:s,update:o,remove:c,setIntensity:l,setColor:u,show:d,hide:h,toggle:m,attach:f,detach:x}),[n.lighting.lights,s,o,c,l,u,d,h,m,f,x]);return{sceneConfig:n,setSceneConfig:i,updateSceneConfig:r,resetSceneConfig:a,lights:E}}var pd=require("react");function d0(){let[e,t]=(0,pd.useState)(null),n=(0,pd.useCallback)(i=>{t(i)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:n}}var si=require("react"),Js=require("three");function hd(e){return[e.x,e.y,e.z]}function u0(){let[e,t]=(0,si.useState)(!0),[n,i]=(0,si.useState)(!1),[r,a]=(0,si.useState)(null),[o,s]=(0,si.useState)(null),[c,l]=(0,si.useState)(0),u=(0,si.useCallback)(m=>{let f=new Js.Box3().setFromObject(m),x=f.min.clone(),E=f.max.clone(),w=new Js.Vector3,p=new Js.Vector3,g=0;m.traverse(_=>{"isMesh"in _&&_.isMesh&&(g+=1)}),f.getCenter(w),f.getSize(p),s({min:hd(x),max:hd(E),center:hd(w),size:hd(p)}),l(g),a(null),t(!1),i(!0)},[]),d=(0,si.useCallback)(m=>{a(m),s(null),l(0),t(!1),i(!1)},[]),h=(0,si.useCallback)(()=>{t(!0),i(!1),a(null),s(null),l(0)},[]);return{isLoading:e,isReady:n,error:r,bounds:o,objectCount:c,handleModelLoaded:u,handleLoadError:d,resetModelState:h}}var md=require("react");function p0({bindings:e,scene:t,camera:n,animations:i,onAction:r}){let{objectBindings:a,updateObjectBindings:o,showObject:s,hideObject:c,toggleObjectVisibility:l}=e,u=t?.updateSceneConfig,d=n?.focusObject,h=n?.fitScene,m=n?.resetView,f=n?.setCameraTarget,x=n?.setCameraState,E=i?.play,w=i?.pause,p=i?.stop,g=i?.setSpeed,_=i?.seek,S=(0,md.useCallback)(b=>{let y=Rn(a,b);return y?a[y]?.actions??[]:[]},[a]),T=(0,md.useCallback)(async b=>{for(let y of b.action.effects??[]){if("objectBindings"in y){o(y.target,y.objectBindings);continue}if("sceneConfig"in y){u?.(y.sceneConfig);continue}if("visibility"in y){y.visibility==="show"?s(y.target):y.visibility==="hide"?c(y.target):l(y.target);continue}if("camera"in y){let C=y.camera;C.type==="focus-object"?await d?.(C.objectId??b.objectId):C.type==="fit-scene"?await h?.():C.type==="reset"?await m?.():C.type==="set-target"?await f?.(C.target,C.transition??!0):await x?.(C.state,C.transition??!0);continue}let M=y.animation;M.type==="play"?E?.(M.clip):M.type==="pause"?w?.():M.type==="stop"?p?.():M.type==="set-speed"?g?.(M.speed):_?.(M.time)}await r?.(b)},[h,d,c,r,w,E,m,_,g,x,f,s,p,l,o,u]),P=(0,md.useCallback)(async(b,y)=>{let M=Rn(a,b);if(!M)return null;let C=a[M],N=C?.actions?.find(V=>V.id===y);if(!C||!N)return null;let L={objectId:M,action:N,binding:C};return await T(L),L},[T,a]);return{getActionsForObject:S,handleAction:T,runAction:P}}var ea=require("react");function $_(e){return typeof e=="function"?e:e?.handleViewerReady??null}function h0(...e){let t=(0,ea.useRef)(null),n=(0,ea.useRef)(e);n.current=e;let i=(0,ea.useCallback)(s=>{t.current=s;let c=new Set;for(let l of n.current){let u=$_(l);u&&!c.has(u)&&(c.add(u),u(s))}},[]),r=(0,ea.useCallback)(()=>t.current,[]),a=(0,ea.useCallback)(s=>{let c=t.current;return c?c.captureImage(s):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),o=(0,ea.useCallback)(()=>{let s=t.current;return s?(s.invalidate(),!0):!1},[]);return{handleViewerReady:i,getViewer:r,captureImage:a,invalidate:o}}var Ze=require("react"),Ao=require("three");var eh=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],fd=1;function gd(e){return typeof e=="string"?[e]:e}function bd(e,t=0,n=1){return Math.min(n,Math.max(t,e))}function Jp(e,t){return e+Math.random()*(t-e)}function m0([e,t],n){return e+(t-e)*n}function Qp([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 f0(e,t){let n=bd(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 K_(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(n=>n instanceof Ao.Material):[]}function Z_(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 eh){let i=e[n];typeof i=="number"&&(t[n]=i)}return t}function g0(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 eh){let i=t[n];i!==void 0&&typeof e[n]=="number"&&(e[n]=i)}t.transparent!==void 0&&(e.transparent=t.transparent),e.needsUpdate=!0}function J_(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 Q_(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 b0(e={}){let t=(0,Ze.useRef)(e);t.current=e;let n=(0,Ze.useRef)(null),i=(0,Ze.useRef)(null),r=(0,Ze.useRef)(null),a=(0,Ze.useRef)(new Map),o=(0,Ze.useRef)(new Map),s=(0,Ze.useRef)(new Map),c=(0,Ze.useRef)(new Map),l=(0,Ze.useCallback)(A=>{let k=n.current;if(!k)return null;let X=Rn(k.objectBindings,A);return k.nodeRefs[A]??(X?k.nodeRefs[X]:null)??(k.scene?Ur(k.scene,A):null)??null},[]),u=(0,Ze.useCallback)(A=>{let k=n.current;return k?typeof A=="object"&&!Array.isArray(A)?Wr(k.objectBindings,A):gd(A).map(X=>Rn(k.objectBindings,X)??X):typeof A=="string"?[A]:Array.isArray(A)?A:[]},[]),d=(0,Ze.useCallback)(()=>{n.current?.invalidate()},[]),h=(0,Ze.useCallback)((A,k)=>{let X=!1;for(let $ of u(A)){let ue=l($);if(ue)for(let De of K_(ue))s.current.has(De)||s.current.set(De,Z_(De)),g0(De,k),X=!0}return X},[l,u]),m=(0,Ze.useCallback)((A,k)=>{let X=h(A,k);return X&&d(),X},[d,h]),f=(0,Ze.useCallback)((A,k)=>{let X=!1;for(let $ of u(A)){let ue=l($);ue&&(c.current.has(ue)||c.current.set(ue,J_(ue)),Q_(ue,k),X=!0)}return X},[l,u]),x=(0,Ze.useCallback)((A,k)=>{let X=f(A,k);return X&&d(),X},[d,f]),E=(0,Ze.useCallback)(A=>{let k=l(A);if(!k)return null;k.updateWorldMatrix(!0,!1);let X=k.getWorldPosition(new Ao.Vector3);return[X.x,X.y,X.z]},[l]),w=(0,Ze.useCallback)(A=>{let k=o.current.get(A);return k?(k.light.removeFromParent(),k.light.dispose(),o.current.delete(A),d(),!0):!1},[d]),p=(0,Ze.useCallback)(A=>{let k=l(A.target);if(!k)return!1;let X=o.current.get(A.id),$=X?.light??new Ao.PointLight;return X&&X.target!==A.target&&$.removeFromParent(),$.name=`react-immersive-runtime-light:${A.id}`,$.color.set(A.color??"#ffffff"),$.intensity=A.intensity??1,$.distance=A.distance??0,$.decay=A.decay??2,$.castShadow=A.castShadow??!1,$.position.set(...A.offset??[0,0,0]),$.parent!==k&&k.add($),o.current.set(A.id,{light:$,target:A.target}),d(),!0},[d,l]),g=(0,Ze.useCallback)((A,k)=>{let X=o.current.get(A);if(!X)return!1;if(k.target&&k.target!==X.target){let $=l(k.target);if(!$)return!1;X.light.removeFromParent(),$.add(X.light),X.target=k.target}return k.color!==void 0&&X.light.color.set(k.color),k.intensity!==void 0&&(X.light.intensity=k.intensity),k.distance!==void 0&&(X.light.distance=k.distance),k.decay!==void 0&&(X.light.decay=k.decay),k.offset!==void 0&&X.light.position.set(...k.offset),k.castShadow!==void 0&&(X.light.castShadow=k.castShadow),d(),!0},[d,l]),_=(0,Ze.useCallback)((A,k)=>{let X=$=>k[$%k.length]??0;for(let $ of A.materials??[])u($.targets).forEach((ue,De)=>{let xe=X(De),Oe={};for(let Pe of eh){let Ie=$.values[Pe];Ie&&(Oe[Pe]=m0(Ie,xe))}h(ue,Oe)});for(let $ of A.transforms??[])u($.targets).forEach((ue,De)=>{let xe=X(De),Oe={};$.values.position&&(Oe.position=Qp($.values.position,xe)),$.values.rotation&&(Oe.rotation=Qp($.values.rotation,xe)),$.values.scale&&(Oe.scale=Qp($.values.scale,xe)),f(ue,Oe)});for(let $ of A.lights??[])gd($.lights).forEach((ue,De)=>{let xe=o.current.get(ue);xe&&(xe.light.intensity=m0($.intensity,X(De)))})},[u,h,f]),S=(0,Ze.useRef)(()=>{}),T=(0,Ze.useRef)(()=>{});T.current=A=>{r.current=null;let k=!1;for(let[X,$]of a.current){$.startedAt===null&&($.startedAt=A);let ue=$.lastFrameAt??A;$.lastFrameAt=A;let De=$.override&&$.override.until>A?$.override.level:null;$.override&&De===null&&($.override=null);let xe=$.update(A,A-$.startedAt,Math.min(100,A-ue),De);k=!0,xe||(a.current.delete(X),$.onComplete?.())}k&&d(),a.current.size>0&&S.current()},S.current=()=>{r.current!==null||typeof requestAnimationFrame>"u"||(r.current=requestAnimationFrame(A=>T.current(A)))};let P=(0,Ze.useCallback)(A=>(a.current.set(A.id,A),S.current(),A.id),[]),b=(0,Ze.useCallback)((A,k={})=>{let X=k.id??`transition-${fd++}`,$=Math.max(1,k.duration??400),ue=k.easing??"ease-in-out";return P({id:X,startedAt:null,lastFrameAt:null,override:null,onComplete:k.onComplete,update:(De,xe,Oe,Pe)=>{let Ie=Pe??f0(xe/$,ue);return _(A,[Ie]),xe<$}})},[_,P]),y=(0,Ze.useCallback)((A,k={})=>{let X=k.id??`pulse-${fd++}`,$=Math.max(1,k.duration??1e3),ue=k.minLevel??0,De=k.maxLevel??1,xe=k.repeat??1/0,Oe=k.synchronized??!0,Pe=Math.max(1,...[...A.materials??[],...A.transforms??[]].map(Ie=>u(Ie.targets).length),...(A.lights??[]).map(Ie=>gd(Ie.lights).length));return P({id:X,startedAt:null,lastFrameAt:null,override:null,onComplete:k.onComplete,update:(Ie,Et,Wt,Qe)=>{let _e=Et/$,ae=Array.from({length:Oe?1:Pe},(zt,Rt)=>{if(Qe!==null)return Qe;let et=_e+(Oe?0:Rt/Pe),wt=.5-Math.cos(et%1*Math.PI*2)/2;return ue+(De-ue)*wt});return _(A,ae),xe===1/0||_e<xe}})},[_,P,u]),M=(0,Ze.useCallback)((A,k={})=>{let X=k.id??`timeline-${fd++}`,$=k.repeat??1,ue=A.map(xe=>({...xe,duration:Math.max(1,xe.duration),hold:Math.max(0,xe.hold??0)})),De=Math.max(1,ue.reduce((xe,Oe)=>xe+Oe.duration+Oe.hold,0));return P({id:X,startedAt:null,lastFrameAt:null,override:null,onComplete:k.onComplete,update:(xe,Oe,Pe,Ie)=>{if(ue.length===0||$<=0)return!1;let Et=Oe/De;if($!==1/0&&Et>=$){for(let _e of ue)_(_e.channels,[1]);return!1}let Wt=Oe%De,Qe=0;for(let _e of ue){let ae=Qe+_e.duration,zt=ae+_e.hold;if(Wt>=ae){_(_e.channels,[Ie??1]),Qe=zt;continue}if(Wt>=Qe){let Rt=Ie??f0((Wt-Qe)/_e.duration,_e.easing??"ease-in-out");_(_e.channels,[Rt]);break}}return!0}})},[_,P]),C=(0,Ze.useCallback)((A,k={})=>{let X=k.id??`flicker-${fd++}`,$=k.synchronized??!0,ue=k.minLevel??.15,De=k.maxLevel??1,xe=k.interval??[45,160],Oe=typeof xe=="number"?[xe,xe]:xe,Pe=[Math.max(1,Math.min(...Oe)),Math.max(1,Math.max(...Oe))],Ie=bd(k.response??.7,.01,1),Et=bd(k.blackoutChance??.08),Wt=bd(k.flashChance??.12),Qe=k.flashLevel??1.15,_e=Math.max(1,...[...A.materials??[],...A.transforms??[]].map(wt=>u(wt.targets).length),...(A.lights??[]).map(wt=>gd(wt.lights).length)),ae=$?1:_e,zt=Array.from({length:ae},()=>ue),Rt=Array.from({length:ae},()=>ue),et=Array.from({length:ae},()=>0);return P({id:X,startedAt:null,lastFrameAt:null,override:null,onComplete:k.onComplete,update:(wt,He,Jt,_t)=>{for(let Ve=0;Ve<ae;Ve+=1){if(_t!==null)Rt[Ve]=_t;else if(wt>=et[Ve]){let Qt=Math.random();Rt[Ve]=Qt<Et?Jp(0,Math.min(.04,ue)):Qt<Et+Wt?Qe:Jp(ue,De),et[Ve]=wt+Jp(...Pe)}let Lt=1-Math.pow(1-Ie,Math.max(1,Jt)/16.67);zt[Ve]+=(Rt[Ve]-zt[Ve])*Lt}return _(A,zt),k.duration===void 0||He<k.duration}})},[_,P,u]),N=(0,Ze.useCallback)((A,k,X)=>{let $=a.current.get(A);if(!$)return!1;let ue=typeof performance>"u"?Date.now():performance.now();return $.override={level:k,until:ue+Math.max(0,X)},S.current(),!0},[]),L=(0,Ze.useCallback)(A=>a.current.delete(A),[]),V=(0,Ze.useCallback)(()=>{a.current.clear(),r.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(r.current),r.current=null)},[]),U=(0,Ze.useCallback)(()=>{for(let[A,k]of s.current)g0(A,k);s.current.clear();for(let[A,k]of c.current)A.position.set(...k.position),A.rotation.set(...k.rotation),A.scale.set(...k.scale),A.visible=k.visible,A.updateMatrix(),A.updateMatrixWorld(!0);c.current.clear();for(let A of o.current.values())A.light.removeFromParent(),A.light.dispose();o.current.clear(),d()},[d]),D=(0,Ze.useCallback)(()=>{V(),U()},[U,V]),Y=(0,Ze.useCallback)(A=>{i.current&&i.current!==A.scene&&U(),n.current=A,i.current=A.scene,t.current.onViewerReady?.(A)},[U]);return(0,Ze.useEffect)(()=>()=>{D(),n.current=null,i.current=null},[D]),{handleViewerReady:Y,setMaterial:m,setTransform:x,getWorldPosition:E,addPointLight:p,updatePointLight:g,removePointLight:w,transition:b,timeline:M,pulse:y,flicker:C,overrideEffect:N,stopEffect:L,stopAllEffects:V,resetRuntime:D}}var sn=require("react");function y0(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Qs(e){return typeof e=="number"&&Number.isFinite(e)}function v0(e){return Array.isArray(e)&&e.length===3&&e.every(Qs)}function eS(e){return!y0(e)||!v0(e.position)||!v0(e.target)||e.fov!==null&&!Qs(e.fov)||!Qs(e.zoom)||e.zoom<=0||e.azimuthAngle!==void 0&&!Qs(e.azimuthAngle)||e.polarAngle!==void 0&&!Qs(e.polarAngle)?null:{position:e.position,target:e.target,fov:e.fov,zoom:e.zoom,azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle}}function tS(e){if(!y0(e))return null;let t;if(e.camera!==void 0){let r=eS(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 i;if(e.selected===null||typeof e.selected=="string")i=e.selected;else if(e.selected!==void 0)return null;return{camera:t,hidden:n,selected:i}}function x0(e,t,n){let i=Object.values(t).filter(r=>r.visible===!1).map(r=>r.id);return{camera:e??void 0,hidden:i,selected:n?.id??null}}function w0({cameraState:e,setCameraState:t,objectBindings:n,onObjectBindingsChange:i,selectedObjectBinding:r,setSelectedObjectBinding:a,paramKey:o="view",debounceMs:s=400,autoSync:c=!0}){let l=(0,sn.useRef)(null),u=(0,sn.useRef)(null),d=(0,sn.useRef)(null),h=(0,sn.useRef)(null),m=(0,sn.useRef)(null),f=(0,sn.useCallback)(()=>{m.current!==null&&(window.clearTimeout(m.current),m.current=null),d.current=null,h.current=null},[]),x=(0,sn.useCallback)(()=>{let y=x0(e,n,r);return`${o}=${encodeURIComponent(JSON.stringify(y))}`},[e,n,r,o]),E=(0,sn.useCallback)(()=>{let y=new URL(window.location.href);return y.hash=x(),y.toString()},[x]),w=(0,sn.useCallback)(y=>{let M=new URL(window.location.href);M.hash=y,window.history.replaceState(null,"",M.toString()),u.current=y,l.current=new URLSearchParams(M.hash.slice(1)).get(o)},[o]),p=(0,sn.useCallback)(()=>{f(),w(x())},[x,f,w]),g=(0,sn.useRef)({cameraState:e,objectBindings:n,selectedObjectBinding:r});g.current={cameraState:e,objectBindings:n,selectedObjectBinding:r};let[_,S]=(0,sn.useState)(!1);(0,sn.useEffect)(()=>{if(!c||!_){f();return}let y=g.current,M=x0(y.cameraState,y.objectBindings,y.selectedObjectBinding),C=`${o}=${encodeURIComponent(JSON.stringify(M))}`;if(C===u.current){f();return}C===d.current&&s===h.current||(f(),d.current=C,h.current=s,m.current=window.setTimeout(()=>{m.current=null,d.current=null,h.current=null,w(C)},Math.max(0,s)))},[c,e,f,s,n,o,_,r,w]),(0,sn.useEffect)(()=>f,[f]);let T=(0,sn.useRef)(null),P=(0,sn.useRef)(null),b=(0,sn.useCallback)(async()=>{S(!0);let y=window.location.hash.startsWith("#")?window.location.hash.slice(1):window.location.hash,M=new URLSearchParams(y).get(o);if(!M)return T.current=null,!1;if(M===l.current||M===T.current||M===P.current)return!1;let C;try{C=JSON.parse(M)}catch{return!1}let N=tS(C);if(!N)return!1;P.current=M;try{if(N.camera&&await t(N.camera,!1),N.hidden){let L=new Set(N.hidden);i(Object.fromEntries(Object.entries(n).map(([V,U])=>[V,{...U,visible:!L.has(U.id)}])))}if(N.selected!==void 0){let L=N.selected?Rn(n,N.selected):null;a(L?n[L]:null)}return T.current=M,!0}finally{P.current===M&&(P.current=null)}},[n,i,o,t,a]);return(0,sn.useEffect)(()=>{let y=()=>{b().catch(()=>{})};return window.addEventListener("hashchange",y),()=>{window.removeEventListener("hashchange",y)}},[b]),{getShareUrl:E,syncUrl:p,restoreFromUrl:b}}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});
|
|
3687
|
+
`}))}increaseSizeTo(e){this._target.setSize(Math.max(this._target.width,e),1)}readDataAsync(e){let{_renderer:t,_target:n}=this;return t.readRenderTargetPixelsAsync(n,0,0,e.length/4,1,e)}readData(e){let{_renderer:t,_target:n}=this;t.readRenderTargetPixels(n,0,0,e.length/4,1,e)}renderPixelToTarget(e,t,n){let{_renderer:i,_target:r}=this;Fs.min.copy(t),Fs.max.copy(t),Fs.max.x+=1,Fs.max.y+=1,i.initRenderTarget(r),i.copyTextureToTexture(e,r.texture,Fs,n,0)}},ji=new class{constructor(){let e=null;Object.getOwnPropertyNames(Eg.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new Eg),e[t](...n)))})}},Rg=new ne.Vector2,kg=new ne.Vector2,Lg=new ne.Vector2;function Z1(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function Hg(e,t,n=[,,,]){let i=3*t,r=3*t+1,a=3*t+2;return e.index&&(i=e.index.getX(i),r=e.index.getX(r),a=e.index.getX(a)),n[0]=i,n[1]=r,n[2]=a,n}function Gg(e,t,n,i,r){let[a,o,s]=i,c=Z1(e,t);Rg.fromBufferAttribute(c,a),kg.fromBufferAttribute(c,o),Lg.fromBufferAttribute(c,s),r.set(0,0,0).addScaledVector(Rg,n.x).addScaledVector(kg,n.y).addScaledVector(Lg,n.z)}function Wg(e,t,n,i){let r=e.x-Math.floor(e.x),a=e.y-Math.floor(e.y),o=Math.floor(r*t%t),s=Math.floor(a*n%n);return i.set(o,s),i}var Dg=new ne.Vector2,Bg=new ne.Vector2,Ng=new ne.Vector2,J1=class extends Oc{constructor(e,t,n=null){super(e,t,n),this.channels=On(n,"channels",[0]),this.index=On(n,"index",null),this.texCoord=On(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let i=this.type;if(i==="BOOLEAN"||i==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return jg(e,t*this.valueLength,i,n)}},Q1=class extends op{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(J1)}getData(e,t,n,i={}){let r=this.properties;Bc(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return this.getPropertyValuesAtTexel(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}async getDataAsync(e,t,n,i={}){let r=this.properties;Bc(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return await this.getPropertyValuesAtTexelAsync(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,i,r=[]){for(;r.length<e.length;)r.push(null);r.length=e.length,ji.increaseSizeTo(r.length);let a=this.data,o=this.definition.properties,s=this.properties,c=Hg(i,t);for(let d=0,h=e.length;d<h;d++){let f=e[d];if(!o[f])continue;let m=s[f],x=a[m.index];Gg(i,m.texCoord,n,c,Dg),Wg(Dg,x.image.width,x.image.height,Bg),Ng.set(d,0),ji.renderPixelToTarget(x,Bg,Ng)}let l=new Uint8Array(e.length*4);if(this._asyncRead)return ji.readDataAsync(l).then(()=>(u.call(this),r));return ji.readData(l),u.call(this),r;function u(){for(let d=0,h=e.length;d<h;d++){let f=e[d],m=s[f],x=m.type;if(r[d]=ap(m,r[d]),!m)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!o[f]){r[d]=m.resolveDefault(r);continue}let E=m.valueLength*(m.count||1),w=m.channels.map(_=>l[4*d+_]),p=m.componentType,g=new(Hs(p,x))(E);if(new Uint8Array(g.buffer).set(w),m.array){let _=r[d];for(let S=0,T=_.length;S<T;S++)_[S]=m.readDataFromBuffer(g,S,_[S])}else r[d]=m.readDataFromBuffer(g,0,r[d]);r[d]=m.adjustValueScaleOffset(r[d]),r[d]=m.resolveEnumsToStrings(r[d]),r[d]=m.resolveNoData(r[d])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},np=class{constructor(e,t,n,i=null,r=null){let{schema:a,propertyTables:o=[],propertyTextures:s=[],propertyAttributes:c=[]}=e,{enums:l,classes:u}=a,d=o.map(m=>new K1(m,u,l,n)),h=[],f=[];i&&(i.propertyTextures&&(h=i.propertyTextures.map(m=>new Q1(s[m],u,l,t))),i.propertyAttributes&&(f=i.propertyAttributes.map(m=>new Y1(c[m],u,l)))),this.schema=a,this.tableAccessors=d,this.textureAccessors=h,this.attributeAccessors=f,this.object=r,this.textures=t,this.nodeMetadata=i}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let i=Math.min(e.length,t.length);n.length=i;for(let r=0;r<i;r++){let a=this.tableAccessors[e[r]];n[r]=a.getData(t[r],n[r])}}if(Array.isArray(e)!==Array.isArray(n)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return n}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,n)=>n)),Array.isArray(e))return e.map(t=>{let n=this.tableAccessors[t];return{name:n.name,className:n.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;for(let r=0;r<i.length;r++)n[r]=i[r].getData(e,t,this.object.geometry,n[r]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;let r=[];for(let a=0;a<i.length;a++){let o=i[a].getDataAsync(e,t,this.object.geometry,n[a]).then(s=>{n[a]=s});r.push(o)}return await Promise.all(r),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let i=0;i<n.length;i++)t[i]=n[i].getData(e,this.object.geometry,t[i]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},js="EXT_structural_metadata";function ew(e,t=[]){let n=e.json.textures?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{index:o}=r[a];i[o]===null&&(i[o]=e.loadTexture(o))}}),Promise.all(i)}function tw(e,t=[]){let n=e.json.bufferViews?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{values:o,arrayOffsets:s,stringOffsets:c}=r[a];i[o]===null&&(i[o]=e.getDependency("bufferView",o)),i[s]===null&&(i[s]=e.getDependency("bufferView",s)),i[c]===null&&(i[c]=e.getDependency("bufferView",c))}}),Promise.all(i)}var Xg=class{constructor(e){this.parser=e,this.name=js}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(js))return;let i=null,r=t.json.extensions[js];if(r.schemaUri){let{manager:c,path:l,requestHeader:u,crossOrigin:d}=t.options,h=new URL(r.schemaUri,l).toString(),f=new ne.FileLoader(c);f.setCrossOrigin(d),f.setResponseType("json"),f.setRequestHeader(u),i=f.loadAsync(h).then(m=>{r={...r,schema:m}})}let[a,o]=await Promise.all([ew(t,r.propertyTextures),tw(t,r.propertyTables),i]),s=new np(r,a,o);e.userData.structuralMetadata=s,e.traverse(c=>{if(t.associations.has(c)){let{meshes:l,primitives:u}=t.associations.get(c),d=t.json.meshes[l]?.primitives[u];if(d&&d.extensions&&d.extensions[js]){let h=d.extensions[js];c.userData.structuralMetadata=new np(r,a,o,h,c)}else c.userData.structuralMetadata=s}})}},Og=new ne.Vector2,Ig=new ne.Vector2,zg=new ne.Vector2;function nw(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var qg=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(i=>{let{texture:r,...a}=i,o={label:null,propertyTable:null,nullFeatureId:null,...a};return r&&(o.texture={texCoord:0,channels:[0],...r}),o})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:n,textures:i,featureIds:r}=this,a=Array(r.length).fill(null),o=r.length;ji.increaseSizeTo(o);let s=Hg(n,e),c=s[nw(t)];for(let d=0,h=r.length;d<h;d++){let f=r[d],m="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let x=i[f.texture.index];Gg(n,f.texture.texCoord,t,s,Og),Wg(Og,x.image.width,x.image.height,Ig),zg.set(d,0),ji.renderPixelToTarget(i[f.texture.index],Ig,zg)}else if("attribute"in f){let x=n.getAttribute(`_feature_id_${f.attribute}`).getX(c);x!==m&&(a[d]=x)}else{let x=c;x!==m&&(a[d]=x)}}let l=new Uint8Array(o*4);if(this._asyncRead)return ji.readDataAsync(l).then(()=>(u(),a));return ji.readData(l),u(),a;function u(){let d=new Uint32Array(1);for(let h=0,f=r.length;h<f;h++){let m=r[h],x="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let{channels:E}=m.texture,w=E.map(g=>l[4*h+g]);new Uint8Array(d.buffer).set(w);let p=d[0];p!==x&&(a[h]=p)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Nc="EXT_mesh_features";function Ug(e,t,n){e.traverse(i=>{if(t.associations.has(i)){let{meshes:r,primitives:a}=t.associations.get(i),o=t.json.meshes[r]?.primitives[a];o&&o.extensions&&o.extensions[Nc]&&n(i,o.extensions[Nc])}})}var Yg=class{constructor(e){this.parser=e,this.name=Nc}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Nc))return;let i=t.json.textures?.length||0,r=Array(i).fill(null);Ug(e,t,(o,{featureIds:s})=>{s.forEach(c=>{if(c.texture&&r[c.texture.index]===null){let l=c.texture.index;r[l]=t.loadTexture(l)}})});let a=await Promise.all(r);Ug(e,t,(o,s)=>{o.userData.meshFeatures=new qg(o.geometry,a,s)})}},$g=class{constructor(){this.name="CESIUM_RTC"}afterRoot(e){if(e.parser.json.extensions&&e.parser.json.extensions.CESIUM_RTC){let{center:t}=e.parser.json.extensions.CESIUM_RTC;t&&(e.scene.position.x+=t[0],e.scene.position.y+=t[1],e.scene.position.z+=t[2])}}},sp=class{constructor(e){e={metadata:!0,rtc:!0,plugins:[],dracoLoader:null,ktxLoader:null,meshoptDecoder:null,autoDispose:!0,...e},this.tiles=null,this.metadata=e.metadata,this.rtc=e.rtc,this.plugins=e.plugins,this.dracoLoader=e.dracoLoader,this.ktxLoader=e.ktxLoader,this.meshoptDecoder=e.meshoptDecoder,this._gltfRegex=/\.(gltf|glb)$/g,this._dracoRegex=/\.drc$/g,this._loader=null}init(e){let t=new Vg.GLTFLoader(e.manager);this.dracoLoader&&(t.setDRACOLoader(this.dracoLoader),e.manager.addHandler(this._dracoRegex,this.dracoLoader)),this.ktxLoader&&t.setKTX2Loader(this.ktxLoader),this.meshoptDecoder&&t.setMeshoptDecoder(this.meshoptDecoder),this.rtc&&t.register(()=>new $g),this.metadata&&(t.register(()=>new Xg),t.register(()=>new Yg)),this.plugins.forEach(n=>t.register(n)),e.manager.addHandler(this._gltfRegex,t),this.tiles=e,this._loader=t}dispose(){this.tiles.manager.removeHandler(this._gltfRegex),this.tiles.manager.removeHandler(this._dracoRegex),this.autoDispose&&(this.ktxLoader.dispose(),this.dracoLoader.dispose())}};var{clamp:UT}=ne.MathUtils;var VT=new rp.FullScreenQuad(new ne.MeshBasicMaterial),rw=new ne.DataTexture(new Uint8Array([255,255,255,255]),1,1);rw.needsUpdate=!0;var iw=0,aw=1,ow=2,sw=3,lw=4,cw=5,dw=6,uw=7,pw=8,hw=9,mw=10,fw=11,FT=Object.freeze({NONE:iw,SCREEN_ERROR:aw,GEOMETRIC_ERROR:ow,DISTANCE:sw,DEPTH:lw,RELATIVE_DEPTH:cw,IS_LEAF:dw,RANDOM_COLOR:uw,RANDOM_NODE_COLOR:pw,CUSTOM_COLOR:hw,LOAD_ORDER:mw,INDEXED_COLOR:fw});var jT=Math.PI/4,HT=3/5;var Fi={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var GT=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:i}=this;return n in i||(t.setHSL(Math.random(),1,.5),i[n]=t.getHex()),t.set(i[n])}};var WT={[Fi.NONE]:16777215,[Fi.NOT_READY]:7829367,[Fi.NO_FIT]:2250239,[Fi.DEPTH]:4473924,[Fi.OCCUPANCY]:65535,[Fi.SPACING]:16776960,[Fi.ANGLE]:16711680,[Fi.FACING]:16711935};var XT=Math.PI/180;var qT=Ea*Math.PI*2;var YT=Ea*Math.PI*2;var Qg=require("three/examples/jsm/loaders/DRACOLoader.js"),eb=require("three/examples/jsm/loaders/KTX2Loader.js"),tb=require("three/examples/jsm/libs/meshopt_decoder.module.js"),sr=require("three");var Xs=require("three");function Kg(e){return!!e&&!e.isInterleavedBufferAttribute}function Zg(e,t,n,i){for(let r=0;r<e.count;r+=1)for(let a=0;a<e.itemSize;a+=1)t.setComponent(r,a,Xs.MathUtils.clamp(e.getComponent(r,a),n,i));return t}function gw(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let i=e.getComponent(t,n);if(!Number.isFinite(i)||i<0||i>1)return!1}return!0}var Ic=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let i=n.geometry;if(!i)return;let r=i.attributes.normal;Kg(r)&&!(r.array instanceof Int16Array)&&(i.attributes.normal=Zg(r,new Xs.BufferAttribute(new Int16Array(r.count*r.itemSize),r.itemSize,!0),-1,1));for(let a of["uv","uv1","uv2","uv3"]){let o=i.attributes[a];!Kg(o)||o.array instanceof Uint16Array||!gw(o)||(i.attributes[a]=Zg(o,new Xs.BufferAttribute(new Uint16Array(o.count*o.itemSize),o.itemSize,!0),0,1))}})}};var qs=require("react/jsx-runtime"),bw=0,Jg=4,vw=6,xw=12,yw=4;function ww(e){try{let t=typeof window>"u"?new URL(e):new URL(e,window.location.href);return new URL("objects.json",t).toString()}catch{return null}}function lp({url:e,rotation:t=[0,0,0],errorTarget:n=64,cacheSize:i=800,memoryBudgetMB:r=800,decoderConfig:a,objectBindings:o,itemMaterials:s,sceneConfig:c,selectedItem:l,panelHoveredItem:u,highlightOnHover:d=!0,onItemClick:h,onItemHover:f,onObjectCatalog:m,onTilesetBounds:x,onModelLoaded:E,onLoadError:w,nodeRefsOut:p,onNodeRefsChange:g,materialRefsOut:_,explodeFactor:S=0,suspendBindingTransforms:T=!1}){let{camera:A,gl:b,invalidate:y}=(0,zc.useThree)(),M=(0,Ye.useRef)(null),[C,N]=(0,Ye.useState)(null),L=(0,Ye.useRef)({onItemClick:h,onItemHover:f,onObjectCatalog:m,onTilesetBounds:x,onModelLoaded:E,onLoadError:w,onNodeRefsChange:g});L.current={onItemClick:h,onItemHover:f,onObjectCatalog:m,onTilesetBounds:x,onModelLoaded:E,onLoadError:w,onNodeRefsChange:g};let F=(0,Ye.useRef)(!0),[V,D]=(0,Ye.useState)(null),q=(0,Ye.useRef)(null);q.current=V;let P=(0,Ye.useRef)([]),B=(0,Ye.useRef)(!1);(0,Ye.useEffect)(()=>{let J=new hc;return D(J),()=>J.dispose()},[e]);let W=(0,Ye.useRef)(null),$=(0,Ye.useRef)(0),pe=(0,Ye.useRef)(!1),Ne=r*1024*1024,xe=(0,Ye.useRef)(!1),Ie=(0,Ye.useRef)(Eu),Ae=(0,Ye.useRef)(null),ze=(0,Ye.useRef)(null),Rt=(0,Ye.useRef)(null);(0,Ye.useEffect)(()=>()=>{Rt.current!==null&&clearTimeout(Rt.current)},[]);let Xt=a?.dracoDecoderPath??xu,tt=a?.ktx2TranscoderPath??yu,we=a?.meshopt??!0,[se,Ft]=(0,Ye.useState)(null);(0,Ye.useEffect)(()=>{pe.current=!1,xe.current=!1;let J=new ep(e);J.loadAncestors=!0;let Se=new xc;Se.priorityCallback=J.downloadQueue.priorityCallback,Se.maxJobsPerOrigin=xw;let ce=new Qr;ce.priorityCallback=J.parseQueue.priorityCallback,ce.maxJobs=vw;let Ue=new Qr;Ue.priorityCallback=J.processNodeQueue.priorityCallback,Ue.maxJobs=J.processNodeQueue.maxJobs;let Ve=new Rs;Ve.unloadPriorityCallback=J.lruCache.unloadPriorityCallback,J.downloadQueue=Se,J.parseQueue=ce,J.processNodeQueue=Ue,J.lruCache=Ve;let je=Xt?new Qg.DRACOLoader().setDecoderPath(Xt).setWorkerLimit(yw):null,$e=tt?new eb.KTX2Loader().setTranscoderPath(tt).detectSupport(b):null;return J.registerPlugin(new sp({dracoLoader:je,ktxLoader:$e,meshoptDecoder:we?tb.MeshoptDecoder:null,autoDispose:!1})),J.registerPlugin(new ip({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),J.registerPlugin(new Ic),Ft(J),window.__riTiles=J,()=>{J.forEachLoadedModel(ye=>ya(ye)),J.dispose(),je?.dispose(),$e?.dispose(),Ft(ye=>ye===J?null:ye)}},[Xt,b,tt,we,e]),(0,Ye.useEffect)(()=>{se&&(Ie.current=Eu,Ae.current=null,se.errorTarget=n,se.lruCache.maxSize=i,se.lruCache.minSize=Math.max(1,Math.floor(i*.75)),se.lruCache.maxBytesSize=Ne,se.lruCache.minBytesSize=Ne*.75,y())},[i,n,y,Ne,se]);let kt=(0,Ye.useMemo)(()=>{let J=o??{};return{objectBindings:J,keyByModelObject:Nf(J),itemMaterials:s,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:l??null,hoveredKey:Of(C,u),highlightOnHover:d,suspendTransforms:T,placementFrame:se?.group.matrixWorld,invalidate:y}},[C,d,y,s,o,u,c,l,T,se]),nt=(0,Ye.useCallback)(()=>{if(!se)return;let J=_t.current,Se=B.current?q.current?.nodesByBinding(J)??{}:{},ce={};se.group.traverse($e=>{if(!$e.isMesh)return;let ye=Pu($e);if(!ye)return;let pt=J.keyByModelObject[ye]??ye;if(!J.objectBindings[pt])return;Se[pt]||(Se[pt]=$e);let St=$e.material;St&&(ce[pt]=St)});let Ue=p?.current??{},Ve=Object.keys(Ue),je=Ve.length!==Object.keys(Se).length||Ve.some($e=>Ue[$e]!==Se[$e]);p&&(p.current=Se),_&&(_.current=ce),(je||!p)&&L.current.onNodeRefsChange?.()},[_,p,se]),wt=(0,Ye.useCallback)(J=>uc(J,kt),[kt]),Ge=(0,Ye.useCallback)(J=>zf(J,kt),[kt]),nn=(0,Ye.useRef)(Ge);nn.current=Ge;let _t=(0,Ye.useRef)(kt);_t.current=kt;let Fe=(0,Ye.useCallback)(()=>{let J=W.current,Se=$.current;return!J||Se<=0?_t.current:{..._t.current,explode:{factor:Se,centre:J.centre,radius:J.radius}}},[]);(0,Ye.useEffect)(()=>{se&&(Ge(se.group),F.current=!0,se.forEachLoadedModel(J=>{Ge(J),yo(J,Fe())}),y())},[Ge,y,Fe,se]),(0,Ye.useEffect)(()=>{let J=ww(e);if(!J)return;let Se=!1;return fetch(J).then(ce=>ce.ok?ce.json():null).then(ce=>{Se||!ce?.objects||(P.current=ce.objects,B.current=ce.bindingFrame==="gltf-identity-v2",B.current&&q.current?.setCatalog(ce.objects),F.current=!0,L.current.onObjectCatalog?.(ce.objects),y())}).catch(()=>{}),()=>{Se=!0}},[e,y,V]),(0,Ye.useEffect)(()=>{if(!se)return;let J=!1,Se=()=>y(),ce=ye=>{ye.scene&&(ye.scene.traverse(pt=>{let St=pt.material;for(let an of Array.isArray(St)?St:St?[St]:[])an.transparent&&an.side===sr.DoubleSide&&(an.forceSinglePass=!0)}),nn.current(ye.scene),yo(ye.scene,Fe()),io(ye.scene)),F.current=!0,J||(J=!0,L.current.onModelLoaded?.(se.group)),y()},Ue=ye=>{L.current.onLoadError?.(ye.error)},Ve=ye=>{ye.scene&&(Au(ye.scene),ya(ye.scene)),F.current=!0};se.setCamera(A),se.setResolutionFromRenderer(A,b),se.addEventListener("needs-update",Se),se.addEventListener("load-model",ce),se.addEventListener("load-error",Ue),se.addEventListener("dispose-model",Ve);let je=()=>{F.current=!0,y()};se.addEventListener("tile-visibility-change",je);let $e=()=>{let ye=se.root;ye&&!ye.content?.uri&&ye.refine==="REPLACE"&&(ye.refine="ADD",y())};return se.addEventListener("load-root-tileset",$e),y(),()=>{se.removeEventListener("needs-update",Se),se.removeEventListener("load-model",ce),se.removeEventListener("load-error",Ue),se.removeEventListener("dispose-model",Ve),se.removeEventListener("tile-visibility-change",je),se.removeEventListener("load-root-tileset",$e),Au(se.group),se.deleteCamera(A),p&&(p.current={}),_&&(_.current={})}},[A,b,y,_,p,Fe,se]);let Lt=(0,Ye.useCallback)(J=>{let Se=wt(J.object);Se&&(J.stopPropagation(),L.current.onItemClick?.(Se.binding))},[wt,h]),rn=(0,Ye.useCallback)(J=>{let Se=wt(J.object),ce=Se?.key??null;ce!==M.current&&(M.current=ce,N(ce),L.current.onItemHover?.(Se?.binding??null))},[wt]),Ee=(0,Ye.useCallback)(()=>{M.current!==null&&(M.current=null,N(null),L.current.onItemHover?.(null))},[]);return(0,Ye.useEffect)(()=>{y()},[y,se]),(0,zc.useFrame)((J,Se)=>{if(!se)return;if(se.setResolutionFromRenderer(A,b),B.current&&V){let Qt=V.sync(Fe(),l,T);V.updateBounds(se.root),T&&se.forEachLoadedModel(H=>yo(H,Qt))}if(se.update(),!pe.current){let Qt=new sr.Box3;if(se.getBoundingBox(Qt)){pe.current=!0,se.group.updateMatrixWorld(),Qt.applyMatrix4(se.group.matrixWorld);let H=Qt.getBoundingSphere(new sr.Sphere);W.current={centre:H.center.clone(),radius:Qt.getSize(new sr.Vector3).length()*.5},L.current.onTilesetBounds?.(Qt),y()}}F.current&&(F.current=!1,nt());let ce=Math.min(Math.max(S,0),1),Ue=$.current;Math.abs(Ue-ce)>1e-4?($.current=sr.MathUtils.lerp(Ue,ce,1-Math.exp(-6*Se)),yo(se.group,Fe()),y()):Ue!==ce&&($.current=ce,yo(se.group,Fe()),y());let Ve=se,je=se.lruCache,$e=je.isFull(),ye=Ie.current,pt=ye.loosened&&Ae.current?Ae.current:{bytes:je.maxBytesSize,items:je.maxSize},St=0;for(let Qt of je.usedSet??[])St+=je.bytesMap?.get(Qt)??0;let an=!1,on=se;for(let Qt of on.usedSet??[]){let H=Qt.internal?.loadingState??Jg;if(Qt.traversal?.used&&Qt.internal?.hasContent&&H>=bw&&H<Jg){an=!0;break}}let at=ze.current??(ze.current={world:new sr.Matrix4,projection:new sr.Matrix4}),ct=!at.world.equals(A.matrixWorld)||!at.projection.equals(A.projectionMatrix);ct&&(at.world.copy(A.matrixWorld),at.projection.copy(A.projectionMatrix));let fn={full:$e,wanting:an,moved:ct,usage:Math.max(St/Math.max(1,pt.bytes),(je.usedSet?.size??0)/Math.max(1,pt.items)),now:performance.now()},qt=qf(ye,fn);qt!==ye&&(qt.loosened&&(!ye.loosened||qt.raisedAt!==ye.raisedAt)?(ye.loosened||(Ae.current=pt),je.maxBytesSize=Math.max(pt.bytes,je.cachedBytes??0)*Ru,je.maxSize=Math.ceil(Math.max(pt.items,je.itemSet?.size??0)*Ru)):!qt.loosened&&ye.loosened&&Ae.current&&(je.maxBytesSize=Ae.current.bytes,je.maxSize=Ae.current.items,Ae.current=null),Ie.current=qt,se.errorTarget=n*qt.factor,y()),!xe.current&&$e&&fn.wanting&&qt.factor>=Ts&&(xe.current=!0,console.warn("[react-immersive] The tile memory budget is full even at the coarsest level of detail, so the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB."));let Ln=Yf(qt,fn);Ln===0?y():Ln!==null&&Rt.current===null&&(Rt.current=setTimeout(()=>{Rt.current=null,y()},Ln)),((Ve.stats?.downloading??0)>0||(Ve.stats?.parsing??0)>0||Ve.loadProgress!==void 0&&Ve.loadProgress<1&&!$e)&&y()}),se?(0,qs.jsxs)("group",{rotation:t,children:[V?(0,qs.jsx)("primitive",{object:V.group}):null,(0,qs.jsx)("primitive",{object:se.group,onClick:Lt,onPointerMove:rn,onPointerOut:Ee})]}):null}var Ke=require("react"),cp=require("@react-three/drei"),ka=require("@react-three/fiber"),ti=require("three");var Xn=require("react/jsx-runtime"),_w=.02;function nb(e,t){let n=(0,Ke.useRef)(null),i=(0,ka.useThree)(l=>l.scene),r=(0,Ke.useRef)(null),a=(0,Ke.useMemo)(()=>new ti.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),o=(0,Ke.useMemo)(()=>new ti.Vector3,[]),s=(0,Ke.useMemo)(()=>new ti.Vector3,[]),c=(0,Ke.useMemo)(()=>new ti.Vector3,[]);return(0,Ke.useEffect)(()=>{r.current=null},[e.anchorNodeName]),(0,ka.useFrame)(({camera:l})=>{let u=n.current,d=u?.parent;if(!u||!d)return;let h=r.current;if(e.anchorNodeName&&(!h||!h.parent)&&(h=zr(i,e.anchorNodeName),r.current=h),h?(h.updateWorldMatrix(!0,!1),o.copy(a).applyMatrix4(h.matrixWorld)):(o.copy(a),d.localToWorld(o)),t){let f=t.current.get(e.id);f||(f=new ti.Vector3,t.current.set(e.id,f)),f.copy(o)}c.copy(l.position).sub(o),c.lengthSq()>0?(c.normalize(),s.copy(o).addScaledVector(c,_w)):s.copy(o),d.worldToLocal(s),u.position.copy(s)}),n}function Sw({annotation:e,occluders:t,worldPositionsRef:n,onClick:i,onHover:r,showAnnotationOnHover:a}){let[o,s]=(0,Ke.useState)(!1),c=nb(e,n),[l,u]=(0,Ke.useState)(!1),[d,h]=(0,Ke.useState)(1),f=(0,Ke.useRef)(null),m=(0,Ke.useRef)(null),x=(0,Ke.useRef)(null);(0,Ke.useEffect)(()=>()=>{f.current&&(clearTimeout(f.current),f.current=null),x.current&&(clearTimeout(x.current),x.current=null)},[]);let E=S=>{S.stopPropagation(),S.preventDefault(),f.current&&(clearTimeout(f.current),f.current=null),f.current=window.setTimeout(()=>{i?.(e),f.current=null},10)},w=S=>{S.stopPropagation(),u(!0),h(100),x.current&&(clearTimeout(x.current),x.current=null),r?.(e),a&&i?.(e)},p=S=>{S.stopPropagation(),u(!1),h(1),x.current&&clearTimeout(x.current),x.current=window.setTimeout(()=>{r?.(null),a&&r?.(null),x.current=null},50)},g=S=>{S.stopPropagation();let T=S.currentTarget;T.dataset.pointerX=String(S.clientX),T.dataset.pointerY=String(S.clientY)},_=S=>{S.stopPropagation();let T=S.currentTarget,A=parseFloat(T.dataset.pointerX||"0"),b=parseFloat(T.dataset.pointerY||"0"),y=S.clientX-A,M=S.clientY-b;Math.sqrt(y*y+M*M)<10&&E(S)};return(0,Xn.jsx)("group",{ref:c,children:(0,Xn.jsx)(cp.Html,{center:!0,occlude:t,onOcclude:s,pointerEvents:o?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:o?"none":"auto",zIndex:d},className:"annotation-html-wrapper",transparent:!0,children:(0,Xn.jsx)("div",{ref:m,className:`ri-annotationMarker ${l?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:o?"none":"flex"},onPointerDown:g,onPointerUp:_,onPointerEnter:w,onPointerLeave:p,onDoubleClick:S=>{S.stopPropagation(),i?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:(0,Xn.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function Mw({annotation:e,occluders:t,popupRef:n,onClose:i,hideCloseButton:r=!1}){let[a,o]=(0,Ke.useState)(!1),s=nb(e),c=(0,Xn.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:a?"none":"block"},onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[(0,Xn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,Xn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!r&&(0,Xn.jsx)("button",{onClick:l=>{l.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&(0,Xn.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return(0,Xn.jsx)("group",{ref:s,children:(0,Xn.jsx)(cp.Html,{occlude:t,onOcclude:o,pointerEvents:a?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:a?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function dp({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:i,canvasRootRef:r,worldPositionsRef:a,modelLoaded:o,onAnnotationClick:s,onAnnotationHover:c,onCloseAnnotation:l,hideCloseButton:u=!1,showAnnotationOnHover:d=!1}){let h=(0,ka.useThree)(V=>V.invalidate),f=(0,ka.useThree)(V=>V.scene),[m,x]=(0,Ke.useState)(null),[E,w]=(0,Ke.useState)(!1),p=(0,Ke.useRef)(null),g=(0,Ke.useRef)(null),_=(0,Ke.useRef)(null),S=(0,Ke.useMemo)(()=>{let V=[];return f.traverse(D=>{let q=D;q.isMesh&&!q.isSkinnedMesh&&V.push({current:D})}),V},[f,e,o]),T=(0,Ke.useCallback)(()=>{h();let V=()=>{h(),g.current=window.requestAnimationFrame(()=>{h(),g.current=null})};g.current=window.requestAnimationFrame(V)},[h]);(0,Ke.useEffect)(()=>{T()},[e,T]),(0,Ke.useEffect)(()=>{T()},[n,T]),(0,Ke.useEffect)(()=>()=>{g.current!==null&&window.cancelAnimationFrame(g.current),_.current&&clearTimeout(_.current)},[]);let A=E?m:n||m,b=(0,Ke.useMemo)(()=>A?e.find(V=>V.id===A.id)??A:null,[A,e]),y=(0,Ke.useCallback)(V=>{if(E&&m?.id===V.id){w(!1),x(null),l?.();return}w(!0),x(V),s?.(V)},[E,m,s,l]),M=(0,Ke.useCallback)(V=>{c?.(V),d&&!E&&(_.current&&(clearTimeout(_.current),_.current=null),V?x(V):_.current=window.setTimeout(()=>{x(null),l?.(),_.current=null},100))},[E,c,d,l]),C=(0,Ke.useCallback)(()=>{w(!1),x(null),l?.()},[l]),N=(0,Ke.useCallback)(V=>{let D=V.target;if(D.closest?.(".ri-annotationMarker")||D.closest?.(".ri-viewAnnotationPopup")||D.closest?.(".annotation-html-wrapper"))return;let q=r.current;q&&q.contains(D)&&(w(!1),x(null),l?.())},[r,l]),L=(0,Ke.useCallback)(V=>{V.key==="Escape"&&E&&(w(!1),x(null),l?.())},[E,l]);(0,Ke.useEffect)(()=>{let V=r.current;return V&&(V.addEventListener("click",N),V.addEventListener("pointerdown",N)),document.addEventListener("keydown",L),()=>{V&&(V.removeEventListener("click",N),V.removeEventListener("pointerdown",N)),document.removeEventListener("keydown",L)}},[r,N,L]);let F=(0,Ke.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(V=>V*Math.PI/180),[t?.model.rotation]);return(0,Ke.useEffect)(()=>{h()},[h,F]),(0,ka.useFrame)((V,D)=>{if(!p.current)return;p.current.rotation.x=ti.MathUtils.lerp(p.current.rotation.x,F[0],1-Math.exp(-5*D)),p.current.rotation.y=ti.MathUtils.lerp(p.current.rotation.y,F[1],1-Math.exp(-5*D)),p.current.rotation.z=ti.MathUtils.lerp(p.current.rotation.z,F[2],1-Math.exp(-5*D));let{rotation:q}=p.current;Math.abs(q.x-F[0])+Math.abs(q.y-F[1])+Math.abs(q.z-F[2])>1e-4&&h()}),(0,Xn.jsxs)("group",{ref:p,children:[e.map(V=>{let D=`${V.worldPosition.join(",")}-${V.title}-${V.id}`;return(0,Xn.jsx)(Sw,{annotation:V,occluders:S,worldPositionsRef:a,onClick:y,onHover:M,showAnnotationOnHover:d},D)}),b?(0,Xn.jsx)(Mw,{annotation:b,occluders:S,popupRef:i,onClose:C,hideCloseButton:u},`popup-${b.id}`):null]})}var Ys=require("react"),$s=require("@react-three/drei"),La=require("three"),Hn=require("react/jsx-runtime"),Cw="#22d3ee",Tw="#facc15";function Uc(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function Pw(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function Vc({position:e,children:t}){return(0,Hn.jsx)($s.Html,{center:!0,position:e,zIndexRange:[20,0],children:(0,Hn.jsx)("div",{className:"ri-measureLabel",children:t})})}function Aw({box:e,unit:t}){let n=(0,Ys.useMemo)(()=>[(e.min[0]+e.max[0])/2,(e.min[1]+e.max[1])/2,(e.min[2]+e.max[2])/2],[e.min,e.max]),i=(0,Ys.useMemo)(()=>{let[s,c,l]=e.size;return new La.EdgesGeometry(new La.BoxGeometry(s||1e-4,c||1e-4,l||1e-4))},[e.size]);(0,Ys.useEffect)(()=>()=>{i.dispose()},[i]);let[r,a,o]=e.size;return(0,Hn.jsxs)("group",{position:n,children:[(0,Hn.jsx)("lineSegments",{geometry:i,children:(0,Hn.jsx)("lineBasicMaterial",{color:Tw})}),(0,Hn.jsxs)(Vc,{position:[0,-a/2,o/2],children:["W ",Uc(r,t)]}),(0,Hn.jsxs)(Vc,{position:[-r/2,0,o/2],children:["H ",Uc(a,t)]}),(0,Hn.jsxs)(Vc,{position:[r/2,-a/2,0],children:["D ",Uc(o,t)]})]})}function up({points:e,unit:t,box:n,showDimensions:i}){return(0,Hn.jsxs)("group",{children:[e.map(r=>(0,Hn.jsx)($s.Html,{center:!0,position:r.position,zIndexRange:[15,0],children:(0,Hn.jsx)("div",{className:"ri-measureDot"})},r.id)),e.slice(1).map((r,a)=>{let o=e[a].position,s=r.position,c=new La.Vector3(...o).distanceTo(new La.Vector3(...s));return(0,Hn.jsxs)("group",{children:[(0,Hn.jsx)($s.Line,{points:[o,s],color:Cw,lineWidth:2}),(0,Hn.jsx)(Vc,{position:Pw(o,s),children:Uc(c,t)})]},`${e[a].id}-${r.id}`)}),i&&n?(0,Hn.jsx)(Aw,{box:n,unit:t}):null]})}var st=require("react"),Da=require("@react-three/xr"),ob=require("@react-three/fiber"),Ks=require("three"),Fr=require("react/jsx-runtime"),Ew=1,rb=1,Rw=.1,kw=10;function Lw(e,t){let[n,i,r]=e.size,a=(e.min[0]+e.max[0])/2,o=(e.min[2]+e.max[2])/2,s=Math.max(n,i,r)||1;return{scale:t==="real-world"?1:Ew/s,offset:[-a,-e.min[1],-o]}}function ib(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function ab(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var Dw=(0,st.forwardRef)(function({box:t,scaleMode:n,children:i,onARStateChange:r},a){let o=(0,st.useRef)(null),s=(0,st.useRef)(null),c=(0,st.useRef)(null),l=(0,Da.useXR)(D=>D.session!=null),u=(0,Da.useXR)(D=>D.mode==="immersive-ar"),d=(0,st.useMemo)(()=>t?Lw(t,n):null,[t,n]),h=(0,st.useRef)(new Ks.Vector3(0,0,-rb)),f=(0,st.useRef)(1),m=(0,st.useRef)(0),x=(0,st.useRef)(!0),E=(0,st.useRef)(!1),w=(0,st.useMemo)(()=>new Ks.Matrix4,[]),p=(0,st.useRef)(new Ks.Vector3),g=(0,st.useRef)(!1),_=(0,st.useRef)(null),S=(0,st.useRef)(!1),T=(0,st.useRef)(0),A=(0,st.useRef)(0),b=(0,st.useRef)(1),y=(0,st.useRef)(0),M=(0,st.useCallback)(()=>{if(!r||!u)return;let D={canPlace:g.current,isPlacementMode:x.current,isModelPlaced:E.current},q=_.current;q&&q.canPlace===D.canPlace&&q.isPlacementMode===D.isPlacementMode&&q.isModelPlaced===D.isModelPlaced||(_.current=D,r(D))},[u,r]),C=(0,st.useCallback)(()=>!u||!g.current?!1:(h.current.copy(p.current),E.current=!0,x.current=!1,M(),!0),[M,u]),N=(0,st.useCallback)(()=>{u&&(x.current=!0,M())},[M,u]),L=(0,st.useCallback)(()=>{let D=C();return!D&&u&&(x.current=!1,M()),D},[M,u,C]),F=(0,st.useCallback)(()=>{u&&(x.current=!1,M())},[M,u]);(0,st.useImperativeHandle)(a,()=>({placeCurrent:C,startPlacementMode:N,finishPlacementMode:L,cancelPlacementMode:F}),[F,L,C,N]),(0,st.useEffect)(()=>{if(!l){h.current.set(0,0,-rb),f.current=1,m.current=0,g.current=!1,S.current=!1,x.current=!0,E.current=!1,_.current=null;return}u&&(g.current=!1,S.current=!1,x.current=!0,E.current=!1,_.current=null,M())},[M,l,u]),(0,Da.useXRHitTest)((D,q)=>{if(!u||D.length===0){g.current&&(g.current=!1,M());return}q(w,D[0])&&(p.current.setFromMatrixPosition(w),g.current||(g.current=!0,M()))},"viewer"),(0,Da.useXRInputSourceEvent)("all","select",()=>{!u||S.current||!x.current||C()},[u,C]),(0,st.useEffect)(()=>{if(!u)return;let D=B=>{B.touches.length===2&&(S.current=!0,T.current=ib(B.touches),A.current=ab(B.touches),b.current=f.current,y.current=m.current)},q=B=>{if(!S.current||B.touches.length!==2)return;B.preventDefault();let W=ib(B.touches);if(T.current>0){let pe=W/T.current;f.current=Math.min(kw,Math.max(Rw,b.current*pe))}let $=ab(B.touches);m.current=y.current-($-A.current)},P=B=>{B.touches.length===0&&requestAnimationFrame(()=>{S.current=!1})};return window.addEventListener("touchstart",D),window.addEventListener("touchmove",q,{passive:!1}),window.addEventListener("touchend",P),window.addEventListener("touchcancel",P),()=>{window.removeEventListener("touchstart",D),window.removeEventListener("touchmove",q),window.removeEventListener("touchend",P),window.removeEventListener("touchcancel",P)}},[u]),(0,ob.useFrame)(()=>{let D=o.current,q=s.current;if(!D||!q)return;!l||!d?(D.visible=!0,D.position.set(0,0,0),D.rotation.set(0,0,0),q.scale.setScalar(1)):(D.visible=!u||E.current,D.position.copy(h.current),D.rotation.set(0,m.current,0),q.scale.setScalar(d.scale*f.current));let P=c.current;if(P){let B=u&&x.current&&g.current;P.visible=B,B&&P.position.copy(p.current)}});let V=l&&d?d.offset:[0,0,0];return(0,Fr.jsxs)(Fr.Fragment,{children:[(0,Fr.jsxs)("mesh",{ref:c,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:o,children:(0,Fr.jsx)("group",{ref:s,children:(0,Fr.jsx)("group",{position:V,children:i})})})]})}),sb=Dw;var Gt=require("react"),Fc=require("@react-three/fiber"),In=require("three"),Bw=1.2;function pp({controlsRef:e,sceneRef:t,config:n,playing:i,resetOnPlay:r=!1,onFinished:a,onUserInteract:o,onStop:s}){let c=(0,Fc.useThree)(F=>F.invalidate),l=(0,Gt.useMemo)(()=>n.waypoints??[],[n.waypoints]),u=l.length>=2,d=n.loop??!0,h=(0,Gt.useMemo)(()=>{if(l.length<2)return 24;let F=0;for(let V=0;V<l.length-1;V++)F+=l[V].segmentDuration??3.5;return d&&l.length>1&&(F+=l[l.length-1].segmentDuration??3.5),Math.max(F,4)},[l,d]),f=n.duration??h,m=(0,Gt.useMemo)(()=>l.map(F=>[...F.position,...F.target,F.azimuthAngle??"",F.polarAngle??"",F.segmentDuration??""].join(",")).join(";"),[l]),x=(0,Gt.useMemo)(()=>{let F=[];if(l.length<2)return F;let V=0;for(let D=0;D<l.length-1;D++)V+=l[D].segmentDuration??3.5,F.push(V);return d&&l.length>1&&(V+=l[l.length-1].segmentDuration??3.5,F.push(V)),F},[l,d]),E=(0,Gt.useMemo)(()=>F=>{if(l.length<2||x.length===0)return F/f;let V=x[x.length-1],D=d?F%f:Math.min(F,f),q=f>0?D/f*V:0;for(let P=0;P<x.length;P++)if(q<=x[P]){let B=P===0?0:x[P-1],W=x[P]-B,$=W>0?(q-B)/W:0,pe=d?l.length:l.length-1,Ne=P/pe,xe=1/pe;return Ne+$*xe}return 1},[l.length,x,f,d]),w=(0,Gt.useMemo)(()=>u?{position:new In.CatmullRomCurve3(l.map(F=>new In.Vector3(...F.position)),d,"catmullrom",.5),target:new In.CatmullRomCurve3(l.map(F=>new In.Vector3(...F.target)),d,"catmullrom",.5)}:null,[m,u,d]),p=(0,Gt.useMemo)(()=>{if(!u||!l.every(V=>Number.isFinite(V.azimuthAngle)&&Number.isFinite(V.polarAngle)))return null;let F=l.map(V=>({azimuth:V.azimuthAngle,polar:V.polarAngle,distance:new In.Vector3(...V.position).distanceTo(new In.Vector3(...V.target))}));for(let V=1;V<F.length;V+=1){let D=F[V-1].azimuth,q=F[V].azimuth;F[V].azimuth=q+Math.round((D-q)/(Math.PI*2))*Math.PI*2}return F},[m,u]),g=(0,Gt.useRef)(0),_=(0,Gt.useRef)(0),S=(0,Gt.useRef)(new In.Vector3),T=(0,Gt.useRef)(new In.Vector3),A=(0,Gt.useRef)(!1),b=(0,Gt.useRef)(0),y=(0,Gt.useRef)(!1),M=(0,Gt.useRef)(null),C=(0,Gt.useMemo)(()=>new In.Vector3,[]),N=(0,Gt.useMemo)(()=>new In.Vector3,[]),L=(0,Gt.useMemo)(()=>new In.Spherical,[]);return(0,Gt.useEffect)(()=>{g.current=0,b.current=0,_.current=0,y.current=!1},[m,d,f]),(0,Gt.useEffect)(()=>{r&&(b.current=0,g.current=0,y.current=!1)},[r]),(0,Gt.useEffect)(()=>{if(!i){A.current=!1,g.current>0&&!r?b.current=g.current:r&&(b.current=0),(g.current>0||y.current)&&s?.();return}g.current>=f&&!d&&(g.current=0,b.current=0,y.current=!1);let F=e.current;if(F&&(F.getPosition(S.current),F.getTarget(T.current)),r||y.current||b.current===0?(g.current=0,b.current=0,y.current=!1):b.current>0&&b.current<f?g.current=b.current:(g.current=0,b.current=0),_.current=0,!u){let V=t.current;if(V){let D=new In.Box3().setFromObject(V).getBoundingSphere(new In.Sphere);M.current={center:D.center.clone(),radius:D.radius>0?D.radius:1}}}A.current=!0,c()},[i,u,e,t,c,f,d,m,r,s]),(0,Gt.useEffect)(()=>{if(!i||!o)return;let F=e.current;if(!F)return;let V=()=>{y.current||o()};return F.addEventListener("controlstart",V),()=>F.removeEventListener("controlstart",V)},[i,e,o]),(0,Fc.useFrame)((F,V)=>{if(!i||!A.current)return;let D=e.current;if(!D)return;g.current+=V,_.current+=V;let q=E(g.current),P=!d&&g.current>=f;if(q=d?q%1:Math.min(q,1),w)if(w.target.getPoint(q,N),p){let W=d?p.length:p.length-1,$=Math.min(q,1)*W,pe=Math.min(Math.floor($),W-1),Ne=(pe+1)%p.length,xe=q>=1?1:$-pe,Ie=xe*xe*(3-2*xe),Ae=p[pe],ze=p[Ne],Rt=ze.azimuth+Math.round((Ae.azimuth-ze.azimuth)/(Math.PI*2))*Math.PI*2,Xt=Ae.azimuth+(Rt-Ae.azimuth)*Ie,tt=Ae.polar+(ze.polar-Ae.polar)*Ie,we=Ae.distance+(ze.distance-Ae.distance)*Ie;L.set(Math.max(we,1e-6),Math.min(Math.max(tt,1e-6),Math.PI-1e-6),Xt),C.setFromSpherical(L).add(N)}else w.position.getPoint(q,C);else{let W=M.current;if(!W)return;let $=q*Math.PI*2,pe=W.radius*2.2;C.set(W.center.x+Math.cos($)*pe,W.center.y+W.radius*.6,W.center.z+Math.sin($)*pe),N.copy(W.center)}let B=Math.min(_.current/Bw,1);if(B<1){let W=B*B*(3-2*B);C.lerpVectors(S.current,C,W),N.lerpVectors(T.current,N,W)}if(D.setLookAt(C.x,C.y,C.z,N.x,N.y,N.z,!1),P){A.current=!1,y.current=!0,g.current=0,b.current=0,a?.();return}c()}),null}var Hc=require("react");var Nw="ri:license-grant:v1",Ow={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},lb=new Map;function db(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function cb(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return db(t.padEnd(Math.ceil(t.length/4)*4,"="))}function Iw(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 jc(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 hp(e,t){return`${Nw}:${t}:${e}`}function zw(e,t){let n=lb.get(e);if(n)return n;let i=crypto.subtle.importKey("spki",db(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return lb.set(e,i),i}async function mp(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[i,r,a,o,...s]=e.split("."),c=Ow[r];if(i!=="ri1"||!c||!a||!o||s.length>0)return null;let l=JSON.parse(new TextDecoder().decode(cb(a)));if(!Iw(l)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await zw(r,c),cb(o),new TextEncoder().encode(`${i}.${r}.${a}`)))return null;let d=Math.floor(Date.now()/1e3),h=l.expiresAt-l.issuedAt;return l.licenseKeyHash!==t||l.domain!==n||l.expiresAt<=d||l.issuedAt>d+300||h<=0||h>43200?null:{environment:l.environment,tier:l.tier,expiresAt:l.expiresAt}}catch{return null}}async function ub(e,t,n){try{return await mp(e,await jc(t),n)}catch{return null}}async function pb(e,t,n){try{let i=await jc(t);return await mp(e,i,n)?(localStorage.setItem(hp(i,n),e),!0):!1}catch{return!1}}async function hb(e,t){try{let n=await jc(e),i=hp(n,t),r=localStorage.getItem(i);if(!r)return null;let a=await mp(r,n,t);return a||localStorage.removeItem(i),a}catch{return null}}async function fp(e,t){try{let n=await jc(e);localStorage.removeItem(hp(n,t))}catch{}}var Uw=["localhost","127.0.0.1","0.0.0.0"],Vw=e=>Uw.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),fb="https://react-immersive.liveroom.dev/api/validate-license",Fw=()=>typeof window<"u",jw=300*1e3,Hw=5e3,Gw=400,bp=new Map,gp=new Map,Hi=class extends Error{},gb=async(e,t,n)=>{let i=await hb(e,t);return i?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:i.environment,tier:i.tier,isLocalDomain:n}):null},mb=async(e,t,n)=>{let i=await gb(e,t,n);return i||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:n})},Ww=e=>e instanceof Hi||e instanceof TypeError,Xw=()=>new Promise(e=>setTimeout(e,Gw)),qw=e=>e==="development"||e==="production",Yw=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&&!qw(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},$w=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},Kw=(e,t,n)=>`${n}::${e}::${t}`,Zw=e=>{let t=bp.get(e);return t?Date.now()-t.timestamp>jw?(bp.delete(e),null):t.result:null},Jw=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),Qw=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function e_(e,t,n,i){let r=Kw(e,t,i),a=Zw(r);if(a)return a;let o=gp.get(r);if(o)return o;let s=(async()=>{for(let c=0;c<2;c+=1)try{return await t_(e,t,n,r,i)}catch(l){if(!Ww(l))throw l;if(c===0){let u=await gb(e,t,n);if(u)return u;await Xw();continue}return mb(e,t,n)}return mb(e,t,n)})().finally(()=>{gp.delete(r)});return gp.set(r,s),s}async function t_(e,t,n,i,r){let a=new AbortController,o=setTimeout(()=>a.abort(),Hw),s;try{s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:a.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(u){throw a.signal.aborted?new Hi("License validation timed out"):u}finally{clearTimeout(o)}let c;try{c=await s.json()}catch{throw new Hi(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new Hi(`License server error (${s.status})`);let u=$w(c)??`License validation failed${s.status?` (${s.status})`:""}`;return await fp(e,t),Qw(u,n)}if(!Yw(c))throw new Hi("License server returned an unexpected payload");let l=Jw(c,n);if(l.status==="valid"&&r!==fb){let u=c.offlineGrant?await ub(c.offlineGrant,e,t):null;if(!u)throw new Hi("License validation endpoint did not return a verifiable signed grant");l={...l,environment:u.environment,tier:u.tier}}return l.status==="valid"?(bp.set(i,{result:l,timestamp:Date.now()}),c.offlineGrant&&(await pb(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await fp(e,t),l}var Gc=(e,t=fb)=>{let[n,i]=(0,Hc.useState)({status:"checking",isLocalDomain:!1});return(0,Hc.useEffect)(()=>{if(!Fw())return;let r=!1,a=u=>{r||i(u)},o=e.trim(),s=window.location.hostname.toLowerCase(),c=Vw(s);return a({status:"checking",isLocalDomain:c}),o?((async()=>{try{a(await e_(o,s,c,t))}catch(u){let d=u instanceof TypeError?"Could not reach license server":u instanceof Error?u.message:"License validation failed";a({status:"invalid",reason:d,isLocalDomain:c})}})(),()=>{r=!0}):(a({status:"invalid",reason:"No license key provided",isLocalDomain:c}),()=>{r=!0})},[e,t]),n};var tn=require("react");var zn=require("react/jsx-runtime"),n_={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},r_={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"},Wc=({direction:e})=>{let t=n_[e],n=r_[e];return(0,zn.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,zn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,zn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Mi=16,i_={"bottom-left":{bottom:Mi,left:Mi,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Mi,right:Mi,top:"auto",left:"auto",transform:"none"},"top-left":{top:Mi,left:Mi,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Mi,right:Mi,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:Mi,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},a_=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:i=.001,rotateSensitivity:r=.01,position:a="center-bottom"})=>{let o=(0,tn.useRef)(null),[s,c]=(0,tn.useState)({x:0,y:0}),l=(0,tn.useRef)(!1),u=(0,tn.useRef)({x:0,y:0}),d=(0,tn.useRef)(),h=(0,tn.useRef)(),f=(0,tn.useRef)(null),m=(0,tn.useRef)(0),x=()=>e.current,E=(L,F,V)=>{let D=Math.hypot(L,F);if(D>V){let q=V/D;return{x:L*q,y:F*q}}return{x:L,y:F}},w=L=>{let V=Math.abs(L);return V<.12?0:Math.sign(L)*((V-.12)/(1-.12))},p=(0,tn.useCallback)(()=>{let L=()=>{let{x:F,y:V}=u.current,D=w(F),q=w(V);if(t&&(D!==0||q!==0)){let P=x();P&&P.rotate(-D*r,-q*r,!0)}d.current=requestAnimationFrame(L)};d.current=requestAnimationFrame(L)},[t,r]),g=(0,tn.useCallback)(()=>{d.current&&cancelAnimationFrame(d.current)},[]),_=(0,tn.useCallback)((L,F)=>{if(!o.current||!l.current)return;let V=o.current.getBoundingClientRect(),D=V.left+V.width/2,q=V.top+V.height/2,P=V.width/2-18,B=L-D,W=F-q,$=E(B,W,P);c($),u.current={x:$.x/P,y:$.y/P}},[]),S=(0,tn.useCallback)(L=>{if(!t)return;L.preventDefault(),L.stopPropagation(),l.current=!0,p();let F="touches"in L?L.touches[0]:L;_(F.clientX,F.clientY)},[t,p,_]),T=(0,tn.useCallback)(L=>{if(!l.current)return;L.preventDefault();let F="touches"in L?L.touches[0]:L;_(F.clientX,F.clientY)},[_]),A=(0,tn.useCallback)(()=>{l.current=!1,c({x:0,y:0}),u.current={x:0,y:0},g()},[g]),b=i*10,y=(0,tn.useCallback)(L=>{t&&x()?.forward(L*b,!0)},[t,b]),M=(0,tn.useCallback)(L=>{t&&x()?.truck(L*b,0,!0)},[t,b]),C=(0,tn.useCallback)((L,F,V)=>{if(!t)return;h.current&&cancelAnimationFrame(h.current),f.current={control:L,amount:F,action:V},m.current=0,V(F);let D=q=>{if(!f.current)return;if(m.current===0){m.current=q,h.current=requestAnimationFrame(D);return}if(q-m.current>200){let{amount:B,action:W}=f.current;W(B),m.current=q}h.current=requestAnimationFrame(D)};h.current=requestAnimationFrame(D)},[t]),N=(0,tn.useCallback)(L=>{f.current?.control===L&&(h.current&&(cancelAnimationFrame(h.current),h.current=void 0),f.current=null,m.current=0)},[]);return(0,tn.useEffect)(()=>(window.addEventListener("mousemove",T),window.addEventListener("mouseup",A),window.addEventListener("touchmove",T,{passive:!1}),window.addEventListener("touchend",A),window.addEventListener("touchcancel",A),()=>{window.removeEventListener("mousemove",T),window.removeEventListener("mouseup",A),window.removeEventListener("touchmove",T),window.removeEventListener("touchend",A),window.removeEventListener("touchcancel",A),g(),h.current&&cancelAnimationFrame(h.current)}),[T,A,g]),t?(0,zn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...i_[a]},children:(0,zn.jsxs)("div",{className:"mc__dpad",children:[(0,zn.jsx)("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>C("up",1,y),onMouseUp:()=>N("up"),onMouseLeave:()=>N("up"),onTouchStart:L=>{L.preventDefault(),C("up",1,y)},onTouchEnd:()=>N("up"),onTouchCancel:()=>N("up"),children:(0,zn.jsx)(Wc,{direction:"up"})}),(0,zn.jsxs)("div",{className:"mc__middle-row",children:[(0,zn.jsx)("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>C("left",-1,M),onMouseUp:()=>N("left"),onMouseLeave:()=>N("left"),onTouchStart:L=>{L.preventDefault(),C("left",-1,M)},onTouchEnd:()=>N("left"),onTouchCancel:()=>N("left"),children:(0,zn.jsx)(Wc,{direction:"left"})}),(0,zn.jsx)("div",{ref:o,className:"mc__joystick",onMouseDown:S,onTouchStart:S,children:(0,zn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${s.x}px, ${s.y}px)`}})}),(0,zn.jsx)("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>C("right",1,M),onMouseUp:()=>N("right"),onMouseLeave:()=>N("right"),onTouchStart:L=>{L.preventDefault(),C("right",1,M)},onTouchEnd:()=>N("right"),onTouchCancel:()=>N("right"),children:(0,zn.jsx)(Wc,{direction:"right"})})]}),(0,zn.jsx)("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>C("down",-1,y),onMouseUp:()=>N("down"),onMouseLeave:()=>N("down"),onTouchStart:L=>{L.preventDefault(),C("down",-1,y)},onTouchEnd:()=>N("down"),onTouchCancel:()=>N("down"),children:(0,zn.jsx)(Wc,{direction:"down"})})]})}):null},bb=a_;var vb=require("react-colorful"),Gi=require("react/jsx-runtime"),vp=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:i,inline:r=!1})=>(0,Gi.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:a=>a.stopPropagation(),children:[(0,Gi.jsx)("p",{className:"ri-popoverLabel",children:"Color"}),(0,Gi.jsx)(vb.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>i(o=>({...o,[e.objectId]:{...o[e.objectId],hex:a}}))}),(0,Gi.jsxs)("div",{className:"ri-inlineRow",children:[(0,Gi.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,Gi.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});var Jn=require("react/jsx-runtime"),xp=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:i,inline:r=!1})=>(0,Jn.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:a=>a.stopPropagation(),children:[(0,Jn.jsx)("div",{className:"ri-popoverHeader",children:(0,Jn.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),(0,Jn.jsxs)("div",{className:"ri-materialBody",children:[t?(0,Jn.jsx)("div",{className:"ri-previewFrame",children:(0,Jn.jsx)("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):(0,Jn.jsxs)("div",{className:"ri-emptyState",children:[(0,Jn.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,Jn.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,Jn.jsx)("span",{style:{fontSize:12},children:"No texture applied"})]}),(0,Jn.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&(0,Jn.jsx)("button",{onClick:()=>i(e.objectId),className:"ri-removeButton",children:"Remove texture"}),(0,Jn.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"})]})]});var wr=require("react");var vt=require("react/jsx-runtime");function xb({entries:e}){return(0,vt.jsx)(vt.Fragment,{children:e.map(([t,n])=>{let i=n!==null&&typeof n=="object",r=i?Object.entries(n):[];return i&&r.length>0?(0,vt.jsxs)("div",{className:"left-panel__data-group",children:[(0,vt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,vt.jsx)("div",{className:"left-panel__data-children",children:(0,vt.jsx)(xb,{entries:r})})]},t):(0,vt.jsxs)("div",{className:"left-panel__data-row",children:[(0,vt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,vt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:i?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function o_({content:e}){let t=e!=null,[n,i]=(0,wr.useState)(t),[r,a]=(0,wr.useState)(t),o=(0,wr.useRef)(e);return t&&(o.current=e),(0,wr.useEffect)(()=>{if(t){i(!0);return}if(n){a(!1);let s=setTimeout(()=>i(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,wr.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>a(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,vt.jsx)("div",{className:`left-panel__action-extra${r?" left-panel__action-extra--open":""}`,children:(0,vt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??o.current})}):null}function yp({isOpen:e,selectedObject:t,currentAction:n,onClose:i,onAction:r,renderActionExtra:a}){let[o,s]=(0,wr.useState)(t);(0,wr.useEffect)(()=>{t&&s(t)},[t]);let c=t??o,l=c?Object.entries(c).filter(([u])=>u!=="actions"):[];return(0,vt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:c&&(0,vt.jsxs)(vt.Fragment,{children:[(0,vt.jsxs)("div",{className:"left-panel__header",children:[(0,vt.jsx)("p",{className:"left-panel__title",children:c.label}),(0,vt.jsx)("button",{onClick:i,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),l.length>0&&(0,vt.jsx)("div",{className:"left-panel__data",children:(0,vt.jsx)(xb,{entries:l})}),(0,vt.jsx)("hr",{className:"left-panel__divider"}),c.actions&&c.actions.length>0&&(0,vt.jsxs)(vt.Fragment,{children:[(0,vt.jsx)("div",{className:"left-panel__actions-label",children:"Actions"}),(0,vt.jsx)("div",{className:"left-panel__actions-list",children:c.actions.map((u,d)=>{let h=n?.action.id===u.id&&(n.binding===c||n.binding?.id===c.id||n.binding?.modelObjectId===c.modelObjectId||n.objectId===c.id||n.objectId===c.modelObjectId),f=a?.(u.id);return(0,vt.jsxs)(wr.Fragment,{children:[(0,vt.jsx)("button",{onClick:m=>r({objectId:c.modelObjectId||c.id||"",action:u,binding:c,screenX:m.clientX,screenY:m.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${u.id}`,h?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":u.id,"data-label":u.label,children:u.label}),(0,vt.jsx)(o_,{content:f})]},d)})})]})]})})}var Zs=require("react"),_b=require("lucide-react");var yb=require("react");var qn=require("react/jsx-runtime");function wb({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:i,searchValue:r,onSearchChange:a,searchPlaceholder:o,children:s,isOpen:c,onToggle:l,openButtonIcon:u,closeButtonIcon:d,closeButtonAriaLabel:h}){let[f,m]=(0,yb.useState)(!1),x=c!==void 0?c:f,E=w=>{c===void 0&&m(w),l?.(w)};return(0,qn.jsxs)("div",{className:`ri-sidepanel-wrap ${x?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!x&&(0,qn.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>E(!0),"aria-label":t,title:"Open panel",children:[u,e?(0,qn.jsx)("span",{children:e}):null]}),(0,qn.jsxs)("div",{className:`ri-sidepanel ${x?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!x,children:[(0,qn.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,qn.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,qn.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,qn.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>E(!1),"aria-label":h,title:"Close",children:d??(0,qn.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,qn.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,qn.jsx)("p",{className:"ri-sidepanel__title",children:i})]}),(0,qn.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,qn.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:o,value:r,onChange:w=>a(w.target.value)})}),(0,qn.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var ni=require("react/jsx-runtime");function wp({objectBindings:e,onAction:t,onFocus:n,onHover:i,isOpen:r,onToggle:a}){let[o,s]=(0,Zs.useState)(null),[c,l]=(0,Zs.useState)(""),u=(0,Zs.useMemo)(()=>Object.entries(e).filter(([d,h])=>{let f=c.toLowerCase();return d.toLowerCase().includes(f)||(h.label??"").toLowerCase().includes(f)}),[e,c]);return(0,ni.jsx)(wb,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:(0,ni.jsx)(_b.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${u.length} visible entries`,searchValue:c,onSearchChange:l,searchPlaceholder:"Search nodes, labels",isOpen:r,onToggle:a,closeButtonAriaLabel:"Close scene objects panel",children:u.map(([d,h])=>{let f=h.visible!==!1,m=o===d;return(0,ni.jsxs)("div",{onClick:()=>n(h),onMouseEnter:()=>{s(d),i?.(h)},onMouseLeave:()=>{s(null),i?.(null)},className:`ri-sidepanel__row${m?" ri-sidepanel__row--hovered":""}`,children:[(0,ni.jsx)("span",{className:`ri-sidepanel__label${m?" ri-sidepanel__label--hovered":""}`,children:h.label??d}),(0,ni.jsx)("button",{type:"button",onClick:x=>{x.stopPropagation(),t?.({objectId:d,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:h})},className:"ri-sidepanel__vis-btn",title:f?"Hide":"Show",children:(0,ni.jsx)("span",{className:`ri-sidepanel__checkbox${f?" ri-sidepanel__checkbox--checked":""}`,children:f&&(0,ni.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,ni.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},d)})})}var Pe=require("lucide-react");var Xc=require("react"),_p=(0,Xc.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var _r=()=>(0,Xc.useContext)(_p);var Wi=require("react/jsx-runtime");function To({visible:e,message:t,tone:n="default",progress:i}){if(!e)return null;let r=typeof i=="number"&&Number.isFinite(i),a=r?Math.min(Math.max(i,0),100):0,o=Math.round(a);return(0,Wi.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[r&&(0,Wi.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,Wi.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":o,children:(0,Wi.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${o}%`}})}),(0,Wi.jsxs)("span",{className:"bb-loadingProgress__label",children:[o,"%"]})]}),(0,Wi.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}var Sp=new WeakSet;function Po(e){Sp.add(e)}function Sb(e){let t=Sp.has(e);return t&&Sp.delete(e),t}var De=require("react"),Kc=require("@react-three/fiber"),Zc=require("@react-three/drei"),it=require("three");var Mb="data:image/png;base64,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";var Cb="data:image/png;base64,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";var Tb="data:image/png;base64,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";var Xe=require("react/jsx-runtime"),Mp=-100,Cp=100,Bb=.03,d_=.03,u_=.03,Pb=.5,p_=Mb,h_=Cb,m_=Tb,f_=Math.PI/4,Ab=.4,Ao=64,Eb=Bb*3,Tp="#4d7dff",Rb="#ffcc00",kb=.02,g_=new it.Vector3(0,1,0),qc=32,Lb="#ff9d3d",Yc=4;function Pp(e){let t=new Float32Array((Ao+1)*3);for(let n=0;n<=Ao;n++){let i=n/Ao*Math.PI*2,r=Math.cos(i)*Ab,a=Math.sin(i)*Ab,o=0,s=0,c=0;e==="x"?(s=r,c=a):e==="y"?(o=r,c=a):(o=r,s=a),t[n*3]=o,t[n*3+1]=s,t[n*3+2]=c}return t}function b_(e){let t=Math.abs(e.y)<.99?new it.Vector3(0,1,0):new it.Vector3(1,0,0),n=new it.Vector3().crossVectors(e,t).normalize(),i=new it.Vector3().crossVectors(e,n).normalize();return[n,i]}function Db(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}var Eo=null,Ap=new Set;function Js(e){Eo!==e&&(Eo=e,Ap.forEach(t=>t()))}function Ep(e){return Ap.add(e),()=>Ap.delete(e)}function $c(){return Eo}function Nb({light:e,position:t,rotation:n=[0,0,0],color:i,intensity:r,visible:a,onPositionChange:o,onRotationChange:s,onDraggingChange:c}){let{activeTab:l,activeSubTab:u,setActiveTab:d,setActiveSubTab:h}=_r(),{camera:f,gl:m,raycaster:x,invalidate:E}=(0,Kc.useThree)(),w=(0,De.useRef)(null),p=(0,De.useRef)(null),g=(0,De.useRef)(null),_=(0,De.useRef)(null),S=(0,De.useRef)(null),T=(0,De.useRef)(null),A=(0,De.useRef)(null),b=(0,De.useRef)(null),y=(0,De.useRef)(null),M=(0,De.useRef)(null),C=(0,De.useRef)(null),N=(0,De.useMemo)(()=>new it.Matrix4,[]),L=(0,De.useMemo)(()=>new it.Quaternion,[]),F=(0,De.useMemo)(()=>new it.Vector3(1,1,1),[]),V=(0,De.useRef)([0,0,0]),D=(0,De.useRef)([0,0,0]),q=(0,De.useRef)(!1),P=(0,De.useRef)(null),B=(0,De.useRef)(null),W=(0,De.useRef)(null),$=(0,De.useRef)(c);(0,De.useEffect)(()=>{$.current=c},[c]);let pe=(0,De.useMemo)(()=>new it.Vector3(t[0],t[1],t[2]),[t]),Ne=(0,De.useMemo)(()=>new it.Euler(n[0],n[1],n[2]),[n]),xe=(0,De.useMemo)(()=>new Float32Array(6),[]),Ie=(0,De.useMemo)(()=>Pp("x"),[]),Ae=(0,De.useMemo)(()=>Pp("y"),[]),ze=(0,De.useMemo)(()=>Pp("z"),[]),Rt=(0,De.useMemo)(()=>new Float32Array((qc+1)*3),[]),Xt=(0,De.useMemo)(()=>new Float32Array(Yc*2*3),[]),tt=e?.type==="point",we=e?.type==="spot",se=tt?h_:we?m_:p_,Ft=tt?d_:we?u_:Bb,kt=(0,De.useMemo)(()=>new it.TextureLoader().load(se),[se]),nt=(0,De.useSyncExternalStore)(Ep,$c,$c),wt=!!e&&nt===e.id,Ge=(0,De.useRef)(new it.Vector3),nn=(0,De.useRef)(new it.Euler);(0,De.useEffect)(()=>{q.current||(Ge.current.copy(pe),nn.current.copy(Ne),E())},[pe,Ne,E]),(0,De.useEffect)(()=>{e&&Eo===e.id&&!a&&Js(null)},[e?.id,a]),(0,De.useEffect)(()=>()=>{e&&Eo===e.id&&Js(null),W.current!==null&&(cancelAnimationFrame(W.current),W.current=null)},[e?.id]);let _t=(0,De.useCallback)(()=>{if(q.current||!wt)return;let Ee=Ge.current,J=new it.Quaternion().setFromEuler(nn.current);N.compose(Ee,J,F)},[N,F,wt]);(0,Kc.useFrame)(()=>{if(w.current&&w.current.position.copy(Ge.current),_t(),g.current){g.current.lookAt(f.position);let Ee=f,J;Ee.isOrthographicCamera?J=Ft/Ee.zoom:J=f.position.distanceTo(Ge.current)*Ft,g.current.scale.setScalar(J)}if(A.current){let Ee=f,J;Ee.isOrthographicCamera?J=Eb/Ee.zoom:J=f.position.distanceTo(Ge.current)*Eb,A.current.scale.setScalar(J)}if(S.current){let Ee=S.current.getAttribute("position"),J=Ee.array;J[0]=0,J[1]=0,J[2]=0,J[3]=Ge.current.x,J[4]=Ge.current.y,J[5]=Ge.current.z,Ee.needsUpdate=!0,S.current.computeBoundingSphere()}if(T.current){let Ee=Ge.current,J=Ee.length();T.current.visible=J>Pb,J>1e-6&&(T.current.position.copy(Ee).multiplyScalar(.5),T.current.scale.set(1,J,1),T.current.quaternion.setFromUnitVectors(g_,Ee.clone().normalize()))}if(_.current&&(_.current.visible=Ge.current.length()>Pb),we&&b.current&&y.current&&M.current){let Ee=Ge.current,J=Ee.length();if(J>1e-6){b.current.visible=!0;let Se=Ee.clone().negate().normalize(),ce=J,Ue=e?.angle??Math.PI/6,Ve=ce*Math.tan(Ue),je=Ee.clone().add(Se.clone().multiplyScalar(ce)),[$e,ye]=b_(Se),pt=y.current.getAttribute("position"),St=pt.array;for(let at=0;at<=qc;at++){let ct=at/qc*Math.PI*2,fn=je.x+($e.x*Math.cos(ct)+ye.x*Math.sin(ct))*Ve,qt=je.y+($e.y*Math.cos(ct)+ye.y*Math.sin(ct))*Ve,Ln=je.z+($e.z*Math.cos(ct)+ye.z*Math.sin(ct))*Ve;St[at*3]=fn,St[at*3+1]=qt,St[at*3+2]=Ln}pt.needsUpdate=!0,y.current.computeBoundingSphere();let an=M.current.getAttribute("position"),on=an.array;for(let at=0;at<Yc;at++){let ct=at/Yc*Math.PI*2,fn=je.x+($e.x*Math.cos(ct)+ye.x*Math.sin(ct))*Ve,qt=je.y+($e.y*Math.cos(ct)+ye.y*Math.sin(ct))*Ve,Ln=je.z+($e.z*Math.cos(ct)+ye.z*Math.sin(ct))*Ve,Un=at*6;on[Un]=Ee.x,on[Un+1]=Ee.y,on[Un+2]=Ee.z,on[Un+3]=fn,on[Un+4]=qt,on[Un+5]=Ln}an.needsUpdate=!0,M.current.computeBoundingSphere()}else b.current.visible=!1}});let Fe=(0,De.useCallback)(()=>{W.current!==null&&(cancelAnimationFrame(W.current),W.current=null),V.current=t,D.current=[n[0],n[1],n[2]],q.current=!0,P.current=null,B.current=null,$.current?.(!0)},[t,n]),Lt=(0,De.useCallback)((Ee,J,Se,ce)=>{let Ue=new it.Vector3(V.current[0],V.current[1],V.current[2]),Ve=new it.Vector3,je=new it.Quaternion,$e=new it.Vector3;ce.decompose(Ve,je,$e);let ye=Ue.clone().applyMatrix4(ce),pt=[Math.min(Math.max(ye.x,Mp),Cp),Math.min(Math.max(ye.y,Mp),Cp),Math.min(Math.max(ye.z,Mp),Cp)],St=new it.Quaternion().setFromEuler(new it.Euler(D.current[0],D.current[1],D.current[2],"XYZ")),an=new it.Quaternion().copy(je).multiply(St),on=new it.Euler().setFromQuaternion(an,"XYZ"),at=[on.x,on.y,on.z];Ge.current.set(pt[0],pt[1],pt[2]),nn.current.set(at[0],at[1],at[2]),P.current=pt,B.current=at;let ct=new it.Quaternion().setFromEuler(nn.current);N.compose(Ge.current,ct,F),E()},[N,F,E]),rn=(0,De.useCallback)(()=>{q.current=!1;let Ee=P.current,J=B.current;P.current=null,B.current=null;let Se=Ee&&!Db(Ee,V.current),ce=J&&!Db(J,D.current);Se&&o&&o(Ee),ce&&s&&s(J),Se||ce?W.current=requestAnimationFrame(()=>{W.current=null,$.current?.(!1)}):$.current?.(!1)},[o,s]);return(0,De.useEffect)(()=>{let Ee=ce=>{let Ue=m.domElement.getBoundingClientRect();return new it.Vector2((ce.clientX-Ue.left)/Ue.width*2-1,-((ce.clientY-Ue.top)/Ue.height)*2+1)},J=ce=>!!ce.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Se=ce=>{if(J(ce))return;let Ue=Ee(ce);x.setFromCamera(Ue,f);let Ve=[];if(p.current&&Ve.push(p.current),g.current&&Ve.push(g.current),Ve.length===0)return;if(x.intersectObjects(Ve,!1).length>0){let $e=e?.id??null;Eo!==$e&&(Js($e),d?.("scene"),h?.("Lighting")),ce.preventDefault(),ce.stopPropagation()}};return m.domElement.addEventListener("pointerdown",Se),()=>{m.domElement.removeEventListener("pointerdown",Se)}},[f,x,m,e,d,h]),l!=="scene"||u!=="Lighting"||!e||!a||e.type==="none"||e.type==="hemisphere"?null:(0,Xe.jsxs)("group",{ref:Ee=>{Ee&&Jh(Ee)},children:[(0,Xe.jsxs)("group",{ref:w,children:[(0,Xe.jsx)("sprite",{ref:g,children:(0,Xe.jsx)("spriteMaterial",{map:kt,transparent:!0,opacity:.9,blending:it.AdditiveBlending,depthWrite:!1,rotation:we?f_:0},se)}),(0,Xe.jsx)(Zc.Sphere,{ref:p,args:[.25,16,16],children:(0,Xe.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),tt&&(0,Xe.jsxs)("group",{ref:A,children:[(0,Xe.jsxs)("lineLoop",{renderOrder:999,children:[(0,Xe.jsx)("bufferGeometry",{children:(0,Xe.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ie,3],count:Ao+1})}),(0,Xe.jsx)("lineBasicMaterial",{color:Tp,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:[Ae,3],count:Ao+1})}),(0,Xe.jsx)("lineBasicMaterial",{color:Tp,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:[ze,3],count:Ao+1})}),(0,Xe.jsx)("lineBasicMaterial",{color:Tp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!tt&&!we&&(0,Xe.jsxs)(Xe.Fragment,{children:[(0,Xe.jsxs)("mesh",{ref:T,children:[(0,Xe.jsx)("cylinderGeometry",{args:[kb,kb,1,8,1,!0]}),(0,Xe.jsx)("meshBasicMaterial",{color:Rb,transparent:!0,opacity:.05,blending:it.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Xe.jsxs)("line",{ref:_,children:[(0,Xe.jsx)("bufferGeometry",{ref:S,children:(0,Xe.jsx)("bufferAttribute",{attach:"attributes-position",args:[xe,3],count:2})}),(0,Xe.jsx)("lineBasicMaterial",{color:Rb,transparent:!0,opacity:.7,blending:it.AdditiveBlending})]})]}),we&&(0,Xe.jsxs)("group",{ref:b,children:[(0,Xe.jsxs)("lineLoop",{renderOrder:999,children:[(0,Xe.jsx)("bufferGeometry",{ref:y,children:(0,Xe.jsx)("bufferAttribute",{attach:"attributes-position",args:[Rt,3],count:qc+1})}),(0,Xe.jsx)("lineBasicMaterial",{color:Lb,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Xe.jsxs)("lineSegments",{renderOrder:999,children:[(0,Xe.jsx)("bufferGeometry",{ref:M,children:(0,Xe.jsx)("bufferAttribute",{attach:"attributes-position",args:[Xt,3],count:Yc*2})}),(0,Xe.jsx)("lineBasicMaterial",{color:Lb,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),wt&&o&&(0,Xe.jsx)(Zc.PivotControls,{ref:C,matrix:N,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Fe,onDrag:Lt,onDragEnd:rn})]})}var Nt=require("react"),zb=require("@react-three/drei"),Qc=require("@react-three/fiber"),En=require("three");var An=require("three");function Jc(e){e.updateWorldMatrix(!0,!0);let t=new An.Matrix4().copy(e.matrixWorld).invert(),n=new An.Box3,i=new An.Box3,r=!1;return e.traverse(a=>{let o=a;if(!o.isMesh||!o.geometry||(o.geometry.boundingBox||o.geometry.computeBoundingBox(),!o.geometry.boundingBox))return;let s=new An.Matrix4().multiplyMatrices(t,a.matrixWorld);i.copy(o.geometry.boundingBox).applyMatrix4(s),n.union(i),r=!0}),r?n.getCenter(new An.Vector3):new An.Vector3}function Ob(e,t="XYZ"){return new An.Quaternion().setFromEuler(new An.Euler(e[0],e[1],e[2],t))}function v_(e,t,n,i,r="XYZ"){let o=new An.Vector3(...i).multiply(new An.Vector3(...n)).applyQuaternion(Ob(t,r)).add(new An.Vector3(...e));return[o.x,o.y,o.z]}function Ib(e,t,n,i,r,a="XYZ"){let o=new An.Vector3(...v_(e,t,i,r,a)),s=new An.Vector3(...r).multiply(new An.Vector3(...i)).applyQuaternion(Ob(n,a)),c=o.sub(s);return[c.x,c.y,c.z]}var Rp=require("react/jsx-runtime");function kp({node:e,space:t,onTransformChange:n,onDraggingChange:i}){let r=(0,Qc.useThree)(C=>C.invalidate),a=(0,Nt.useMemo)(()=>Jc(e),[e]),o=(0,Nt.useMemo)(()=>new En.Matrix4,[]),s=(0,Nt.useRef)(!1),c=(0,Nt.useRef)(new En.Matrix4),l=(0,Nt.useRef)(new En.Matrix4),u=(0,Nt.useRef)(null),d=(0,Nt.useRef)(0),h=(0,Nt.useRef)([]),f=(0,Nt.useRef)(null),m=(0,Nt.useRef)(i);m.current=i;let x=(0,Nt.useMemo)(()=>new En.Vector3,[]),E=(0,Nt.useMemo)(()=>new En.Quaternion,[]),w=(0,Nt.useMemo)(()=>new En.Vector3,[]),p=(0,Nt.useMemo)(()=>new En.Quaternion,[]),g=(0,Nt.useMemo)(()=>new En.Vector3(1,1,1),[]),_=(0,Nt.useMemo)(()=>new En.Quaternion,[]),S=(0,Nt.useMemo)(()=>new En.Vector3,[]),T=(0,Nt.useMemo)(()=>new En.Vector3,[]),A=(0,Nt.useRef)([0,0,0]),b=(0,Nt.useCallback)(()=>{s.current||(e.updateWorldMatrix(!0,!1),x.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(E),p.copy(E),t==="world"&&p.identity(),o.compose(x,p,g))},[x,o,p,g,e,a,t,E]);(0,Nt.useLayoutEffect)(()=>(b(),()=>{let C=f.current!==null;C&&(cancelAnimationFrame(f.current),f.current=null),(s.current||C)&&(s.current=!1,m.current(!1));for(let N of h.current)go(N);h.current=[]}),[b]),(0,Qc.useFrame)(()=>b());let y=(0,Nt.useCallback)(()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),e.updateWorldMatrix(!0,!0),h.current=[];for(let C of fo(e))Rf(C)||(oc(C,C.matrixWorld),h.current.push(C));e.updateWorldMatrix(!0,!1),x.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(E),e.getWorldScale(w),c.current.compose(x,E,w),l.current.copy(o),A.current=[e.rotation.x,e.rotation.y,e.rotation.z],u.current=null,s.current=!0,i(!0)},[x,o,e,i,a,E,w]),M=(0,Nt.useCallback)((C,N)=>{let L=c.current.clone().premultiply(N),F=l.current.clone().premultiply(N);L.decompose(S,E,T);let V=S.clone();F.decompose(x,p,g),t==="world"&&p.identity(),o.compose(x,p,g),C.decompose(S,_,T);let D=new En.Euler().setFromQuaternion(_,e.rotation.order),[q,P,B]=A.current,W=[q+D.x,P+D.y,B+D.z],$=new En.Quaternion().setFromEuler(new En.Euler(W[0],W[1],W[2],e.rotation.order)),Ne=(e.parent?.matrixWorld||new En.Matrix4).clone().invert(),xe=V.clone().applyMatrix4(Ne),Ie=a.clone().multiply(e.scale).applyQuaternion($),Ae=xe.clone().sub(Ie),ze=[Ae.x,Ae.y,Ae.z];e.position.set(ze[0],ze[1],ze[2]),e.rotation.set(W[0],W[1],W[2],e.rotation.order),e.updateMatrixWorld(!0),r(),u.current={position:ze,rotation:W}},[x,_,o,p,g,r,e,a,S,T,t,E]);return(0,Rp.jsx)("group",{children:(0,Rp.jsx)(zb.PivotControls,{matrix:o,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:y,onDrag:(C,N,L,F)=>M(N,F),onDragEnd:()=>{s.current=!1;let C=u.current;if(u.current=null,C)n(C),f.current=requestAnimationFrame(()=>{f.current=null,i(!1)});else if(h.current.length>0){for(let N of h.current)go(N);e.updateMatrixWorld(!0),r(),i(!1)}else i(!1);h.current=[]}})})}var U=require("react/jsx-runtime");function x_(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,i=n.getAttribute("skinIndex"),r=n.getAttribute("skinWeight"),a=n.getAttribute("position");if(!i||!r||!a)return null;let o=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],c=new mt.Vector3,l=s[0],u=1/0;for(let f of s){c.fromBufferAttribute(a,f);let m=c.distanceToSquared(o);m<u&&(u=m,l=f)}let d=i.getComponent(l,0),h=r.getComponent(l,0);for(let f=1;f<4;f++){let m=r.getComponent(l,f);m>h&&(h=m,d=i.getComponent(l,f))}return t.skeleton.bones[d]??null}function y_(e){let t=x_(e)??e.object,n=gs(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let i=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[i.x,i.y,i.z]}}function w_(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let i=zr(t,e.anchorNodeName);return i?(i.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(i.matrixWorld),!0):!1}function __({annotation:e,enabled:t,controlsRef:n,offsetRef:i}){let r=(0,Ro.useThree)(h=>h.scene),a=(0,z.useRef)(null),o=(0,z.useRef)(!1),s=(0,z.useMemo)(()=>new mt.Vector3,[]),c=(0,z.useMemo)(()=>new mt.Vector3,[]),l=(0,z.useMemo)(()=>new mt.Vector3,[]),u=e?.anchorNodeName,d=e?.anchorLocalPosition;return(0,z.useEffect)(()=>{a.current=null,o.current=!1},[u,e?.id]),(0,Ro.useFrame)(()=>{let h=n.current,f=i.current;if(!t||!h||!f||!u||!d){o.current=!1;return}let m=a.current;if((!m||!m.parent)&&(m=zr(r,u),a.current=m),!m){o.current=!1;return}m.updateWorldMatrix(!0,!1),s.set(d[0],d[1],d[2]).applyMatrix4(m.matrixWorld),!(o.current&&s.distanceToSquared(c)<1e-8)&&(c.copy(s),o.current=!0,l.copy(s).add(f),h.setLookAt(l.x,l.y,l.z,s.x,s.y,s.z,!0))}),null}function S_(e){let t={total:0,missing:0};return e.traverse(n=>{let i=n;!i.isMesh||!i.geometry||(t.total+=1,i.geometry.getAttribute("uv")||(t.missing+=1))}),t}var M_=.2;function C_({enabled:e,speed:t,controlsRef:n}){let i=(0,Ro.useThree)(r=>r.invalidate);return(0,Ro.useFrame)((r,a)=>{!e||!n.current||(n.current.rotate(a*M_*t,0,!1),i())}),null}function T_(e,t,n){let i=t?.camera;if(!(i instanceof mt.PerspectiveCamera))return null;let a=(e instanceof mt.Box3?e:new mt.Box3().setFromObject(e)).getSize(new mt.Vector3).length();return!Number.isFinite(a)||a<=0?null:(i.near=a/100,i.far=a*100,i.updateProjectionMatrix(),t&&n===void 0&&(t.maxDistance=a*10),a)}function P_(e,t){let n=e.camera;if(!(n instanceof mt.PerspectiveCamera)||!(t>0))return;let i=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(i-n.near)<=n.near*.01||(n.near=i,n.updateProjectionMatrix())}async function Ub(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function Qs({modelUrl:e,tilesetUrl:t,tilesErrorTarget:n=8,tilesCacheSize:i=800,onObjectCatalog:r,modelFormat:a,licenseKey:o,licenseValidationUrl:s,objectBindings:c,selectedObject:l,panelHoveredObject:u,onObjectBindingsChange:d,onObjectSelect:h,onObjectHover:f,onObjectEditLeaseChange:m,onModelLoaded:x,onLoadError:E,onProgress:w,onCameraControllerChange:p,cameraControllerType:g,onAction:_,onHiddenObjectsChange:S,onCameraChange:T,onViewerReady:A,onTextureUpload:b,onAnimationsReady:y,onAnnotationsChange:M,activeAnnotation:C,onActiveAnnotationChange:N,lights:L,camera:F,cameraLimits:V,backgroundColor:D,shadows:q=!0,showObjectBindingDataPanel:P=!0,customObjectBindingDataPanel:B,customSceneObjectsPanel:W,showSceneObjectsPanel:$=!0,showDownloadButton:pe=!0,downloadFilename:Ne="model",showResetButton:xe=!0,showLoadingOverlay:Ie=!0,showMouseController:Ae=!1,mouseControllerPosition:ze="center-bottom",mouseControllerOpacity:Rt=1,moveSensitivity:Xt=.08,zoomSensitivity:tt=1,sceneConfig:we,onSceneConfigChange:se,disableZoom:Ft=!1,zoomOnSelected:kt=!0,highlightOnHover:nt=!0,enableCameraControls:wt=!0,onAutoFit:Ge,refitOnResize:nn=!0,renderMode:_t="demand",maxDpr:Fe=2,preserveDrawingBuffer:Lt=!1,performanceProfile:rn="auto",dracoDecoderPath:Ee,ktx2TranscoderPath:J,meshopt:Se=!0,showMeasureTools:ce=!1,showUvCheckerButton:Ue=!1,showExplodeControls:Ve=!1,cinematic:je,measurementUnit:$e="m",enableXR:ye=!1,usdzUrl:pt,arScaleMode:St="normalized",mobileHandoffUrl:an,showAnnotationNavigation:on=!0,showAnnotationOnHover:at=!1,moveModeEnabled:ct=!1,objectTransformSpace:fn="world",enableKeyboardNavigation:qt=!1,showViewGizmo:Ln=!1,autoRotate:Un=!1,autoRotateSpeed:Qt=1}){let{isInsideEditor:H,activeTab:k,activeSubTab:Y}=_r(),oe=H&&k==="scene"&&Y==="Lighting",ee=Gc(o,s),te=(0,z.useMemo)(()=>we??gi,[we]),[he,gt]=(0,z.useState)(null),ot=te.model.renderer==="uv-checker",Mt=Ue?he??ot:ot,Re=(0,z.useMemo)(()=>{let v=Mt?"uv-checker":ot?"pbr":te.model.renderer;return v===te.model.renderer?te:{...te,model:{...te.model,renderer:v}}},[ot,te,Mt]);(0,z.useEffect)(()=>{gt(null)},[e,te.model.renderer,Ue,t]);let en=(0,z.useMemo)(()=>{if(D)return D;let v=te.background;return v.enabled&&v.type==="color"?v.color:"#1c1c1d"},[D,te]),_e=(0,z.useMemo)(()=>({dracoDecoderPath:Ee,ktx2TranscoderPath:J,meshopt:Se}),[Ee,J,Se]),Yt=(0,z.useMemo)(()=>pm(rn),[rn]),ke=(0,z.useRef)(null),[gn,dr]=(0,z.useState)("orbit"),[Gn,Dt]=(0,z.useState)(!1),Wn=g!==void 0?g:gn,Ti=(0,z.useCallback)(v=>{Dt(!1),v!==Wn&&(dr(v),p?.(v))},[Wn,p]),[ea,Uo]=(0,z.useState)(!1);(0,z.useEffect)(()=>{ke.current&&(ke.current.dollySpeed=Math.max(tt,0))},[tt]),(0,z.useEffect)(()=>{ke.current&&(ke.current.enabled=wt&&!ea)},[wt,ea]);let Wr=(0,z.useRef)(null),ta=(0,z.useRef)(new Map),na=(0,z.useRef)(null),Xr=(0,z.useRef)(null),Et=(0,z.useRef)(null),Sn=(0,z.useRef)({});(0,z.useEffect)(()=>()=>{for(let v of Object.values(Sn.current))URL.revokeObjectURL(v)},[]);let Dn=(0,z.useRef)({}),[,Ha]=(0,z.useState)(0),Er=(0,z.useCallback)(()=>{Ha(v=>v+1)},[]),ra=(0,z.useRef)({}),li=(0,z.useRef)(null),dt=(0,z.useRef)(null),[ia,ml]=(0,z.useState)(null),fl=(0,z.useCallback)(v=>{dt.current=v,ml(v)},[]),ci=(0,z.useRef)(new Set),di=(0,z.useRef)(null);(0,z.useEffect)(()=>{let v=ia;if(!v||!qt||!wt||ct)return;let O=new Set(["w","a","s","d"," ","c"]),le=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),ue=0,me=ht=>ht.code==="Space"?" ":ht.key.toLowerCase(),jt=()=>{ci.current.clear(),ue=0,di.current!==null&&(cancelAnimationFrame(di.current),di.current=null)},zt=ht=>{let Cn=ke.current,bt=ci.current;if(!Cn||bt.size===0){di.current=null,ue=0;return}let Fn=ue?Math.min((ht-ue)/1e3,.05):1/60;ue=ht;let vn=Math.max(Cn.distance*.75,.01)*Fn;bt.has("w")&&Cn.forward(vn,!1),bt.has("s")&&Cn.forward(-vn,!1),bt.has("a")&&Cn.truck(-vn,0,!1),bt.has("d")&&Cn.truck(vn,0,!1),bt.has(" ")&&Cn.truck(0,vn,!1),bt.has("c")&&Cn.truck(0,-vn,!1),di.current=requestAnimationFrame(zt)},Mn=ht=>{if(ht.target!==v){jt();return}if(le.has(ht.key)){let bt=ke.current;if(!bt)return;ht.preventDefault();let Fn=Math.PI/90,vn=Math.max(bt.distance*.05,.01);ht.key==="ArrowUp"?ht.shiftKey?bt.forward(vn,!0):bt.rotate(0,-Fn,!0):ht.key==="ArrowDown"?ht.shiftKey?bt.forward(-vn,!0):bt.rotate(0,Fn,!0):ht.key==="ArrowLeft"?bt.rotate(-Fn,0,!0):bt.rotate(Fn,0,!0);return}let Cn=me(ht);O.has(Cn)&&(ht.preventDefault(),ci.current.add(Cn),di.current===null&&(di.current=requestAnimationFrame(zt)))},bn=ht=>{ci.current.delete(me(ht))};return v.addEventListener("keydown",Mn),v.addEventListener("keyup",bn),v.addEventListener("blur",jt),()=>{v.removeEventListener("keydown",Mn),v.removeEventListener("keyup",bn),v.removeEventListener("blur",jt),jt()}},[ia,wt,qt,ct]);let Vo=(0,z.useRef)(null),[kd,aa]=(0,z.useState)(c),[Bt,Pi]=(0,z.useState)({}),[Rr,Fo]=(0,z.useState)(null),[jo,gl]=(0,z.useState)(null),[oa,Ho]=(0,z.useState)(null),[Ai,Ga]=(0,z.useState)(null),[sn,bl]=(0,z.useState)(null),[Bn,ui]=(0,z.useState)(null),Vn=(0,z.useRef)(null),Wa=(0,z.useRef)(null),sa=(0,z.useRef)(0),Xa=(0,z.useRef)(null),[Ld,Dd]=(0,z.useState)(0),qr=(0,z.useRef)(!1),la=(0,z.useRef)(!1),Go=(0,z.useRef)(!!F);Go.current=!!F;let Yr=(0,z.useRef)(null),[Wo,ca]=(0,z.useState)(!!e),[Xo,da]=(0,z.useState)(!e||!!Ge||!!F),[pi,qo]=(0,z.useState)(!1),[Bd,Yo]=(0,z.useState)(!1),[vl,ua]=(0,z.useState)(!1),[xl,yl]=(0,z.useState)(!1),[wl,Nd]=(0,z.useState)(null),[Od,$o]=(0,z.useState)(!1),[pa,_l]=(0,z.useState)({total:0,missing:0}),[Id,Sl]=(0,z.useState)("Loading model..."),[zd,Ko]=(0,z.useState)(null),qa=(0,z.useRef)({}),ha=(0,z.useCallback)(()=>{let v=ke.current;if(!v||Yr.current)return;let O=v.getPosition(new mt.Vector3),le=v.getTarget(new mt.Vector3);Yr.current={position:[O.x,O.y,O.z],target:[le.x,le.y,le.z]}},[]),[ma,fa]=(0,z.useState)(!1),[kr,Ml]=(0,z.useState)(0),[ga,Cl]=(0,z.useState)(!1);(0,z.useEffect)(()=>{Ml(0),Cl(!1)},[e,t]);let ba=(0,z.useMemo)(()=>{let v=te.cinematic,O=v?.enabled?{waypoints:v.waypoints,duration:v.duration,loop:v.loop,autoPlay:v.autoPlay}:null;return je===void 0?O&&(O.waypoints?.length??0)>=2?O:null:je===!1?null:je===!0?O??{}:{...O??{},...je}},[je,te]),[R,I]=(0,z.useState)(!1),[re,ie]=(0,z.useState)(!1),Me=(0,z.useRef)(!1);(0,z.useEffect)(()=>{I(!1),ie(!1),Me.current=!1},[e,t]),(0,z.useEffect)(()=>{!ba?.autoPlay||Me.current||pi&&Xo&&!Wo&&(Me.current=!0,I(!0),ie(!1))},[ba,pi,Xo,Wo]);let{xrStore:He,presenterRef:Ct,arSupported:Ze,vrSupported:Qn,quickLookSupported:Tl,resolvedMobileHandoffUrl:Pl,isMobileHandoffOpen:fh,arOverlay:G0,openMobileHandoff:W0,closeMobileHandoff:gh,openQuickLook:X0,handleARStateChange:q0}=bm({enableXR:ye,usdzUrl:pt,mobileHandoffUrl:an}),[$r,bh]=(0,z.useState)(()=>we?.annotations??[]);(0,z.useEffect)(()=>{if($r.length>0){let v=$r.reduce((O,le)=>Math.max(O,le.id),0);Rl.current=v}else Rl.current=0},[$r]);let[er,Al]=(0,z.useState)(null),[Ei,El]=(0,z.useState)({title:"",description:""}),Rl=(0,z.useRef)(0),[Y0,vh]=(0,z.useState)(null),[ur,Ya]=(0,z.useState)(-1),[xh,kl]=(0,z.useState)(!1),$a=(0,z.useRef)(null),dn=(0,z.useMemo)(()=>[...$r].sort((v,O)=>v.id-O.id),[$r]),Ll=(0,z.useMemo)(()=>ur<0||ur>=dn.length?null:dn[ur],[ur,dn]),Kr=(0,z.useCallback)(v=>{if(C!==void 0){N?.(v);return}vh(v?{annotation:v}:null)},[C,N]),Ka=(0,z.useCallback)(v=>{let O=ke.current,le=Vn.current;if(!O)return;let ue=new mt.Vector3,me=ta.current.get(v.id);me?ue.copy(me):le&&w_(v,le,ue)||ue.set(v.worldPosition[0],v.worldPosition[1],v.worldPosition[2]),Wr.current=null;let jt=O.smoothTime;O.smoothTime=.6;let zt=v.worldNormal;if(le){let Mn=new mt.Box3().setFromObject(le),bn=new mt.Vector3;Mn.getCenter(bn);let ht=new mt.Vector3;Mn.getSize(ht);let Cn=ht.length()*.2,bt;zt?bt=new mt.Vector3(zt[0],zt[1],zt[2]):bt=ue.clone().sub(bn),bt.lengthSq()<1e-6&&bt.set(0,0,1),bt.normalize();let Fn=Math.max(Cn*.6,.3),vn=ue.clone().add(bt.multiplyScalar(Fn));O.setPosition(vn.x,vn.y,vn.z,!0),v.anchorNodeName&&v.anchorLocalPosition&&(Wr.current=vn.clone().sub(ue))}O.setTarget(ue.x,ue.y,ue.z,!0),$a.current&&clearTimeout($a.current),$a.current=setTimeout(()=>{O.smoothTime=jt,$a.current=null},800),Kr(v)},[Kr]),$0=(0,z.useCallback)(()=>{dn.length!==0&&(fa(!0),Ya(0),Ka(dn[0]))},[dn,Ka]),K0=(0,z.useCallback)(()=>{if(dn.length===0||ur<0)return;kl(!0);let v=(ur-1+dn.length)%dn.length;Ya(v),Ka(dn[v]),setTimeout(()=>kl(!1),500)},[ur,dn,Ka]),Z0=(0,z.useCallback)(()=>{if(dn.length===0||ur<0)return;if(ur===dn.length-1){if(fa(!1),Ya(-1),Kr(null),ke.current&&Yr.current){let O=Yr.current;ke.current.setLookAt(O.position[0],O.position[1],O.position[2],O.target[0],O.target[1],O.target[2],!0)}return}kl(!0);let v=ur+1;Ya(v),Ka(dn[v]),setTimeout(()=>kl(!1),500)},[ur,dn,Ka,Kr]),J0=(0,z.useCallback)(()=>{if(fa(!1),Ya(-1),Kr(null),ke.current&&Yr.current){let v=Yr.current;ke.current.setLookAt(v.position[0],v.position[1],v.position[2],v.target[0],v.target[1],v.target[2],!0)}},[Kr]);(0,z.useEffect)(()=>{Ya(-1),fa(!1)},[dn.length]),(0,z.useEffect)(()=>()=>{$a.current&&clearTimeout($a.current)},[]),(0,z.useEffect)(()=>{Ll&&ma&&Kr(Ll)},[Ll,Kr,ma]),(0,z.useEffect)(()=>{if(we?.annotations===void 0)return;let v=we.annotations.map(O=>({...O,localPosition:O.localPosition??O.worldPosition}));bh(v)},[we?.annotations]);let Zo=(0,z.useCallback)(()=>{if(C!==void 0){N?.(null);return}vh(null)},[C,N]),Jo=C!==void 0?C:Y0?.annotation??null,Qo=(0,z.useMemo)(()=>Jo?$r.find(O=>O.id===Jo.id)??null:null,[Jo,$r]);(0,z.useEffect)(()=>{Jo&&!Qo&&Zo()},[Jo,Qo,Zo]);let es=d!==void 0,It=es?c:kd;qa.current=It;let Q0=(0,z.useMemo)(()=>Object.entries(It).map(([v,O])=>JSON.stringify([v,O.modelObjectId,O.transform??null])).sort().join(""),[It]),{measureMode:ts,measureModeRef:ex,measurePoints:yh,showDimensions:Ud,measureBox:wh,modelBounds:tx,refreshBounds:_h,clearMeasurements:nx,toggleMeasureMode:rx,toggleDimensions:ix,handleMeasurePointerDown:ax,handleMeasureClick:ox}=dm({canvasAreaRef:dt,controlsRef:ke,sceneRef:Vn,modelUrl:e,modelRotation:te.model.rotation,bindingTransformSignature:Q0,modelLoaded:pi}),{isDownloading:Vd,downloadMenuOpen:sx,uvExportError:Sh,toggleDownloadMenu:lx,handleDownloadMesh:cx,handleDownloadScreenshot:dx,handleDownloadUvLayout:ux}=cm({sceneRef:Vn,materialRefs:ra,rendererCaptureRef:Et,objectBindings:It,downloadFilename:Ne}),Mh=(0,z.useMemo)(()=>Object.fromEntries(Object.entries(It).filter(([,v])=>v.visible===!1).map(([v])=>[v,!0])),[It]),hi=(0,z.useMemo)(()=>{let v=new WeakMap,O=new Map,le=new Map;for(let[ue,me]of Object.entries(It))v.set(me,ue),O.has(me.id)||O.set(me.id,ue),le.has(me.modelObjectId)||le.set(me.modelObjectId,ue);return{byReference:v,byId:O,byModelObjectId:le}},[It]),Ri=(0,z.useCallback)(v=>v?hi.byReference.get(v)??hi.byModelObjectId.get(v.modelObjectId)??hi.byId.get(v.id)??null:null,[hi]),Fd=l!==void 0,ns=Fd?l??null:Ai,Lr=Ri(ns),jd=Lr?Dn.current[Lr]??null:null,Ch=Ri(nt?u??jo??oa:null),px=Ch?Dn.current[Ch]??null:null,Th=(0,z.useCallback)(v=>{Ho(v),f?.(v)},[f]),Ph=P&&ns!==null&&Lr!==null,Ah=(Lr?It[Lr]:null)??ns;(0,z.useEffect)(()=>{es||aa(c)},[es,c]),(0,z.useEffect)(()=>{S?.(Mh)},[Mh,S]);let Za=(0,z.useCallback)(v=>{if(Wn==="pointerLock"){Ti("orbit");return}Fd||Ga(v),h?.(v)},[Wn,Ti,Fd,h]),Ja=(0,z.useCallback)(v=>{es||aa(v),d?.(v)},[es,d]),hx=(0,z.useCallback)(v=>{let O=Lr;if(!O||!v)return;let le=qa.current[O];le&&Ja({...qa.current,[O]:{...le,transform:{...le.transform,...v}}})},[Ja,Lr]),mi=(0,z.useCallback)((v,O)=>It[v]?v:O?Ri(O):hi.byId.get(v)??hi.byModelObjectId.get(v)??null,[It,Ri,hi]),rs=(0,z.useCallback)((v,O)=>{let le=mi(v),ue=le?It[le]:void 0;!le||!ue||Ja({...It,[le]:{...ue,style:O(ue.style)}})},[mi,It,Ja]),pr=(0,z.useCallback)(()=>{if(sn){let v=Bt[sn.objectId]?.hex;v!==void 0&&(rs(sn.objectId,O=>({...O,material:{...O?.material,baseColor:v}})),Pi(O=>({...O,[sn.objectId]:{}})))}bl(null)},[sn,Bt,rs]),Eh=(0,z.useCallback)(()=>{Za(null),Fo(null),pr(),ui(null)},[Za,pr]),Hd=(0,z.useCallback)((v,O,le,ue,me)=>{let jt=li.current,zt=dt.current,Mn=ke.current?.camera;if(!jt)return{objectId:v,x:24,y:24};let bn=jt.getBoundingClientRect(),ht=12,Cn=bn.width-O-ht,bt=bn.height-le-ht,Fn=Math.max(ht,(bn.width-O)/2),vn=Math.max(ht,(bn.height-le)/2),eo=mi(v,ue),os=eo?Dn.current[eo]:null,Zr=(to,va)=>va<=ht?ht:Math.min(Math.max(to,ht),va);if(zt&&Mn&&os){let to=zt.getBoundingClientRect(),va=new mt.Vector3;new mt.Box3().setFromObject(os).getCenter(va),va.project(Mn);let Ex=(va.x+1)/2*to.width+(to.left-bn.left),Rx=(1-va.y)/2*to.height+(to.top-bn.top);return{objectId:v,x:Zr(Ex+24,Cn),y:Zr(Rx-le/2,bt)}}let qd=typeof me?.screenX=="number"?me.screenX-bn.left:Fn,Yd=typeof me?.screenY=="number"?me.screenY-bn.top:vn;return{objectId:v,x:Zr(qd,Cn),y:Zr(Yd,bt)}},[mi]),Dl=(0,z.useCallback)(v=>{let{objectId:O,action:le,binding:ue}=v;switch(Fo(v),le.id){case"toggle-visibility":{let me=O;ue?.modelObjectId&&(me=hi.byModelObjectId.get(ue.modelObjectId)??me);let jt=It[me],zt=jt?.visible===!1;jt&&Ja({...It,[me]:{...jt,visible:zt}});break}case"change-color":pr(),ui(null),Pi(me=>{let jt=mi(O,ue)??O,zt=me[O]?.hex,Mn=It[jt]?.style?.material?.baseColor;return{...me,[O]:{...me[O],hex:zt??Mn??"#ffffff"}}}),bl(Hd(O,225,250,ue,v));break;case"change-material":pr(),ui(Hd(O,300,320,ue,v));break;default:break}_?.(v)},[Ja,It,Hd,_,pr,mi,hi]);(0,z.useEffect)(()=>{if(sn)return window.addEventListener("pointerdown",pr),()=>window.removeEventListener("pointerdown",pr)},[sn,pr]),(0,z.useEffect)(()=>{if(!Bn)return;let v=()=>ui(null);return window.addEventListener("pointerdown",v),()=>window.removeEventListener("pointerdown",v)},[Bn]),(0,z.useEffect)(()=>{if(!Qo)return;let v=O=>{if(Vo.current&&!Vo.current.contains(O.target)){if(O.target.closest?.(".ri-annotationMarker"))return;Zo()}};return document.addEventListener("mousedown",v),document.addEventListener("touchstart",v),()=>{document.removeEventListener("mousedown",v),document.removeEventListener("touchstart",v)}},[Qo,Zo]),(0,z.useEffect)(()=>{if(!er)return;let v=O=>{let le=O.target;if(le.closest?.(".ri-annotationPopup")||le.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let ue=dt.current;!ue||!ue.contains(le)||(Al(null),El({title:"",description:""}))};return document.addEventListener("mousedown",v,!0),document.addEventListener("touchstart",v,!0),()=>{document.removeEventListener("mousedown",v,!0),document.removeEventListener("touchstart",v,!0)}},[er]);let Rh=(0,z.useCallback)((v,O)=>{let le=Sn.current[v];le&&URL.revokeObjectURL(le),O.startsWith("blob:")?Sn.current[v]=O:delete Sn.current[v],rs(v,ue=>({...ue,material:{...ue?.material,texture:{path:O}}}))},[rs]),mx=v=>{let O=v.target.files?.[0],le=Xr.current;if(!O||!le)return;let ue=mi(le);ue&&(b?b(O,ue).then(me=>Rh(ue,me),me=>console.error("onTextureUpload failed:",me)):Rh(ue,URL.createObjectURL(O)),v.target.value="")},kh=v=>{Xr.current=v,na.current?.click()},Lh=v=>{let O=mi(v);if(!O)return;rs(O,ue=>ue?.material?.texture?{...ue,material:{...ue.material,texture:void 0}}:ue);let le=Sn.current[O];le&&(URL.revokeObjectURL(le),delete Sn.current[O])},Gd=(0,z.useRef)(A);Gd.current=A;let Dr=(0,z.useCallback)(()=>{let v=ke.current;!v||!Gd.current||Gd.current({controls:v,scene:Vn.current,objectBindings:qa.current,nodeRefs:Dn.current,homeCameraState:Yr.current,captureImage:O=>Ol(Et.current,O),invalidate:()=>Et.current?.invalidate()})},[]),Qa=(0,z.useCallback)(async(v=!1)=>{let O=ke.current,le=Wa.current??Vn.current;if(!O||!le)return!1;try{if(v){let ue=(le instanceof mt.Box3?le:new mt.Box3().setFromObject(le)).getBoundingSphere(new mt.Sphere),me=ue.center.clone(),zt=O.getPosition(new mt.Vector3).clone().sub(O.getTarget(new mt.Vector3));zt.lengthSq()<1e-6&&zt.set(0,0,1),zt.normalize();let Mn=Math.max(ue.radius*10,20),bn=me.clone().add(zt.multiplyScalar(Mn));await O.setLookAt(bn.x,bn.y,bn.z,me.x,me.y,me.z,!1)}return da(!0),await Ub(O,()=>O.fitToBox(le,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(ue=>{let me=performance.now(),jt=()=>{O.active===!1||performance.now()-me>8e3?(O.dispatchEvent({type:"update"}),Et.current?.invalidate(),ue()):(Et.current?.invalidate(),setTimeout(jt,100))};setTimeout(jt,100)}),qr.current=!0,ha(),Dr(),!0}catch(ue){return console.error("Fit scene error:",ue),!1}},[ha,Dr]);(0,z.useEffect)(()=>{if(qr.current=!1,la.current=!1,Yr.current=null,Vn.current=null,Wa.current=null,qo(!1),Yo(!1),ua(!1),_l({total:0,missing:0}),Sl("Loading model..."),Ko(null),!e){ca(!1),da(!0);return}ca(!0),da(!!Ge||Go.current);let v=!1,O=null,le=me=>{O=setTimeout(ue,me)},ue=()=>{if(v||qr.current||la.current)return;let me=Wa.current??Vn.current;if(!ke.current||!me){le(100);return}if(sa.current=T_(me,ke.current,V?.maxDistance)??sa.current,Sb(ke.current)){qr.current=!0,ha(),Dr(),ca(!1),da(!0),Et.current?.invalidate();return}la.current=!0,(Ge?Ge():Go.current?Promise.resolve(!0):Qa(!0)).then(zt=>{qr.current=zt!==!1,qr.current?(ha(),Dr(),ca(!1)):v||le(100)}).catch(()=>{qr.current=!1,v||le(100)}).finally(()=>{la.current=!1})};return le(50),()=>{v=!0,O&&clearTimeout(O)}},[ha,V?.maxDistance,Qa,e,Dr,Ge,t]),(0,z.useEffect)(()=>{if(!nn)return;let v=ia;if(!v)return;let O=null,le=new ResizeObserver(()=>{!qr.current||la.current||(O&&clearTimeout(O),O=setTimeout(()=>{Qa()},150))});return le.observe(v),()=>{le.disconnect(),O&&clearTimeout(O)}},[ia,Qa,nn]);let Dh=(0,z.useCallback)(v=>{if(ex.current||(I(!1),pr(),ui(null),Fo(null),Za(v),Ft||!kt))return;let O=ke.current,le=Ri(v),ue=le?Dn.current[le]:null;O&&v.cameraState?.position&&v.cameraState?.target?(O.setPosition(v.cameraState.position[0],v.cameraState.position[1],v.cameraState.position[2],!0),O.setTarget(v.cameraState.target[0],v.cameraState.target[1],v.cameraState.target[2],!0)):O&&ue&&O.fitToBox(ue,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Za,pr,Ri,Ft,kt]),Bh=(0,z.useCallback)(v=>{if(Za(v),Ft)return;let O=ke.current,le=Ri(v),ue=le?Dn.current[le]:null;if(!O||!ue)return;let me=v.cameraState;me?.position&&me?.target?(O.setPosition(me.position[0],me.position[1],me.position[2],!0),O.setTarget(me.target[0],me.target[1],me.target[2],!0)):O.fitToBox(ue,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Za,Ri,Ft]);(0,z.useEffect)(()=>{Dr()},[Dr]);let Nh=(0,z.useCallback)((v,O)=>{P_(O,sa.current),T?.(v,O),Dr()},[Dr,T]),fx=(0,z.useCallback)(v=>{Xa.current=new Set(v.map(O=>O.name)),Dd(O=>O+1),r?.(v)},[r]),gx=(0,z.useCallback)(v=>{Wa.current=v,Et.current?.invalidate()},[]),Oh=(0,z.useCallback)(v=>{Vn.current=v,_h(v),_l(S_(v));let O=cs(v);Nd(O>xa?O:null),$o(!1),Ko(null),O>xa&&Sl(`Preparing large model (${Math.round(O/1e6)}M triangles) \u2014 the first display can take a while on this device...`),qo(!0),Yo(!1),yl(!1),x?.(v),Dr()},[Dr,x,_h]),Ih=(0,z.useCallback)(v=>{ca(!1),da(!0),Yo(!0),E?.(v)},[E]),bx=(0,z.useCallback)(v=>{v.lengthComputable&&v.total>0&&Ko(v.loaded/v.total*100),w?.(v)},[w]),zh=(0,z.useCallback)((v,O,le)=>{if(!se)return;let ue={...te,lighting:{...te.lighting,lights:te.lighting.lights.map(me=>me.id===v?{...me,position:O,...le?{rotation:le}:{}}:me)}};se(ue)},[te,se]);(0,z.useEffect)(()=>{let v=Vn.current;if(!pi||!v){ua(!1);return}let O=Object.entries(It);if(O.length===0){ua(!1);return}let le=t?Xa.current:new Set(Object.keys(co(v).nodesById));if(!le||le.size===0){ua(!1);return}let ue=O.some(([me,jt])=>!le.has(jt.modelObjectId??me));ua(ue)},[pi,It,Ld,t]);let Wd=(0,z.useCallback)(async()=>{if(Ge){await Ge();return}let v=ke.current;if(!v)return;let O=Yr.current;try{O?await Ub(v,()=>v.setLookAt(O.position[0],O.position[1],O.position[2],O.target[0],O.target[1],O.target[2],!0)):await Qa()}catch(le){console.error("Reset camera error:",le)}},[Ge,Qa]),AS=(0,z.useCallback)(()=>{ie(!1),I(!0)},[]),ES=(0,z.useCallback)(()=>{I(!1)},[]),vx=(0,z.useCallback)(()=>{I(!1),ie(!0),setTimeout(()=>{Wd()},100)},[Wd]),xx=(0,z.useCallback)((v,O)=>{Nh(v,O)},[Nh]),yx=(0,z.useCallback)(v=>{let O=k==="scene"&&Y==="Annotations";if(v.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let ue=dt.current,me=ke.current,jt=me?.camera,zt=Vn.current;if(!ue||!me||!jt||!zt||!O&&!me.enabled)return;let Mn=ue.getBoundingClientRect(),bn=(v.clientX-Mn.left)/Mn.width*2-1,ht=-((v.clientY-Mn.top)/Mn.height)*2+1,Cn=new mt.Raycaster;Cn.setFromCamera(new mt.Vector2(bn,ht),jt);let bt=Cn.intersectObject(zt,!0);if(bt.length===0)return;if(!O){let{x:Zr,y:qd,z:Yd}=bt[0].point;me.setOrbitPoint(Zr,qd,Yd);return}let Fn=bt[0],vn=Fn.point,eo=zt.worldToLocal(Fn.point.clone()),os=[0,0,1];if(Fn.face){let Zr=Fn.face.normal.clone().transformDirection(Fn.object.matrixWorld).normalize();os=[Zr.x,Zr.y,Zr.z]}Al({worldPosition:[vn.x,vn.y,vn.z],localPosition:[eo.x,eo.y,eo.z],worldNormal:os,anchor:y_(Fn),screenX:v.clientX-Mn.left,screenY:v.clientY-Mn.top}),El({title:"",description:""})},[k,Y]),Uh=(0,z.useCallback)(()=>{if(!er||!Ei.title.trim())return;Rl.current+=1;let O={id:Rl.current,worldPosition:er.worldPosition,localPosition:er.localPosition,worldNormal:er.worldNormal,anchorNodeName:er.anchor?.anchorNodeName,anchorLocalPosition:er.anchor?.anchorLocalPosition,title:Ei.title.trim(),description:Ei.description},le=[...$r,O];bh(le),M?.(le),Al(null)},[er,Ei,$r,M]),Xd=(0,z.useCallback)(()=>Al(null),[]),wx=(0,z.useCallback)(v=>{Kr(v)},[Kr]);if(ee.status==="checking")return(0,U.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,U.jsx)(wa,{title:"Verifying License",message:"Checking your license key..."})});if(ee.status==="invalid")return(0,U.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,U.jsx)(wa,{tone:"error",title:"Invalid License",message:ee.isLocalDomain?ee.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let Vh=Bn?mi(Bn.objectId):null,Fh=Vh?It[Vh]?.style?.material?.texture?.path:void 0,_x=dt.current?.offsetWidth??600,Sx=dt.current?.offsetHeight??400,Mx=350,Cx=290,Tx=er?Math.min(er.screenX+12,_x-Mx-8):0,Px=er?Math.min(er.screenY,Sx-Cx-8):0,Ax=Ie&&!!e&&!Bd&&!pi,is=ye&&(He&&(Ze||Qn)||Tl||!!Pl),as=v=>16+v*42;return(0,U.jsxs)("div",{className:"ri-viewer",style:{background:en},children:[(0,U.jsxs)("div",{className:"ri-viewerLeft",ref:li,children:[B?B({isOpen:Ph,selectedObject:Ah,currentAction:Rr,onClose:Eh,onAction:Dl}):(0,U.jsx)(yp,{isOpen:Ph,selectedObject:Ah,currentAction:Rr,onClose:Eh,onAction:Dl,renderActionExtra:v=>v==="change-color"&&sn?(0,U.jsx)(vp,{inline:!0,colorPicker:sn,onClose:pr,itemMaterials:Bt,setItemMaterials:Pi}):v==="change-material"&&Bn?(0,U.jsx)(xp,{inline:!0,triggerFileUpload:kh,materialPopup:Bn,textureUrl:Fh,clearTexture:Lh}):null}),(0,U.jsxs)("div",{className:`ri-canvasArea ${ts?"ri-canvasArea--measuring":""} ${Xo?"":"ri-canvasArea--positioning"} ${ct?"ri-canvasArea--moveMode":""}`,ref:fl,tabIndex:qt?0:void 0,onDoubleClick:yx,onPointerDown:v=>{qt&&dt.current?.focus({preventScroll:!0}),ax(v)},onClick:ox,children:[vl&&!xl&&(0,U.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,U.jsx)(Pe.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,U.jsx)("span",{children:"Object bindings data don't match this model"}),(0,U.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:v=>{v.stopPropagation(),yl(!0)},"aria-label":"Dismiss",children:(0,U.jsx)(Pe.X,{size:12})})]}),wl!==null&&!Od&&(0,U.jsxs)("div",{className:`ri-largeModelBanner ${vl&&!xl?"ri-largeModelBanner--offset":""}`,children:[(0,U.jsx)(Pe.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,U.jsxs)("span",{children:["Very large model (",Math.round(wl/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,U.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:v=>{v.stopPropagation(),$o(!0)},"aria-label":"Dismiss",children:(0,U.jsx)(Pe.X,{size:12})})]}),Re.model.renderer==="uv-checker"&&pa.missing>0&&(0,U.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,U.jsx)(Pe.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,U.jsxs)("span",{children:[pa.missing===pa.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${pa.missing} of ${pa.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),(0,U.jsx)("input",{ref:na,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:mx}),(0,U.jsxs)(du,{camera:F,backgroundColor:D,shadows:q&&te.shadows.enabled,sceneConfig:Re,selectedObjectRef:jd,hoveredObjectRef:px,highlightOnHover:nt,renderMode:_t,maxDpr:Fe,reduceGpuLoad:Yt,xrStore:He,rendererCaptureRef:Et,preserveDrawingBuffer:Lt,children:[L??(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(mu,{lightingConfig:te.lighting,shadowConfig:te.shadows,shadowsEnabled:q,environmentRotation:te.environment.rotation,environmentConfig:te.environment,modelBounds:tx,objectBindings:It,nodeRefs:Dn}),oe&&te.lighting.lights.map(v=>!v.visible||v.type==="none"||v.type==="hemisphere"||v.attachment?null:(0,U.jsx)(Nb,{light:v,position:v.position,rotation:v.rotation,color:v.color,intensity:v.intensity,visible:v.visible,onPositionChange:O=>zh(v.id,O,v.rotation),onRotationChange:O=>zh(v.id,v.position,O),onDraggingChange:Uo},v.id))]}),(0,U.jsx)(pu,{controlsRef:ke,onCameraChange:xx,cameraLimits:V,controllerType:Wn,onPointerLockExit:()=>Ti("orbit")}),(0,U.jsx)(C_,{enabled:Wn==="pointerLock"?!1:te.model.autoRotate??Un??!1,speed:te.model.autoRotateSpeed??Qt??1,controlsRef:ke}),Ln&&(0,U.jsx)(ed.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{ke.current?.update(0),Et.current?.invalidate()},children:(0,U.jsx)(ed.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),ct&&jd&&Lr&&(0,U.jsx)(kp,{node:jd,space:fn,onTransformChange:hx,onDraggingChange:v=>{Uo(v),ns&&m?.(ns,v)}},Lr),(0,U.jsx)(Nl,{onLoadError:Ih,children:(0,U.jsx)(z.Suspense,{fallback:null,children:(()=>{let v=(0,U.jsxs)(U.Fragment,{children:[t?(0,U.jsx)(lp,{url:t,rotation:Re.model.rotation,errorTarget:n,cacheSize:i,decoderConfig:_e,objectBindings:It,itemMaterials:Bt,sceneConfig:Re,selectedItem:Lr,panelHoveredItem:u??jo,highlightOnHover:nt,onItemClick:Dh,onItemHover:Th,onObjectCatalog:fx,onTilesetBounds:gx,onModelLoaded:Oh,onLoadError:Ih,nodeRefsOut:Dn,onNodeRefsChange:Er,materialRefsOut:ra,explodeFactor:kr,suspendBindingTransforms:ea}):(0,U.jsx)(Cu,{url:e,modelFormat:a,objectBindings:It,selectedItem:Lr,itemMaterials:Bt,onItemClick:Dh,onItemHover:Th,onModelLoaded:Oh,onAnimationsReady:y,nodeRefsOut:Dn,onNodeRefsChange:Er,materialRefsOut:ra,panelHoveredItem:u??jo,sceneConfig:Re,zoomOnSelected:kt,highlightOnHover:nt,decoderConfig:_e,onLoadProgress:bx,explodeFactor:kr,suspendBindingTransforms:ea}),(0,U.jsx)(dp,{annotations:$r,sceneConfig:te,activeAnnotation:Qo,popupRef:Vo,canvasRootRef:dt,worldPositionsRef:ta,modelLoaded:pi,onAnnotationClick:wx,onCloseAnnotation:Zo,hideCloseButton:ma,showAnnotationOnHover:at}),(0,U.jsx)(__,{annotation:Ll,enabled:ma,controlsRef:ke,offsetRef:Wr}),ba&&(0,U.jsx)(pp,{controlsRef:ke,sceneRef:Vn,config:ba,playing:R,resetOnPlay:re,onFinished:()=>{I(!1),ie(!1)},onUserInteract:()=>{I(!1)}}),ce&&(0,U.jsx)(up,{points:yh,unit:$e,box:wh,showDimensions:Ud})]});return He?(0,U.jsx)(sb,{ref:Ct,box:wh,scaleMode:St,onARStateChange:q0,children:v}):v})()})},t??e)]}),(0,U.jsx)(To,{visible:Ax,message:Id,progress:zd??void 0}),is&&(0,U.jsxs)("div",{className:"ri-xrTools",style:{top:`${as(0)}px`},children:[!Ze&&Tl&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:X0,title:"View this model in AR with Apple Quick Look",children:[(0,U.jsx)(Pe.Box,{size:16}),"View in AR"]}),Pl&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:W0,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":fh,children:[(0,U.jsx)(Pe.QrCode,{size:16}),(0,U.jsx)("span",{children:"Open on phone"})]}),He&&Ze&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>He.enterAR().catch(v=>{console.error("Failed to enter AR session:",v)}),title:"View this model in your space",children:[(0,U.jsx)(Pe.Smartphone,{size:16}),(0,U.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,U.jsx)("span",{children:"AR"})]}),He&&Qn&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>He.enterVR().catch(v=>{console.error("Failed to enter VR session:",v)}),title:"View this model in VR",children:[(0,U.jsx)(Pe.RectangleGoggles,{size:16}),(0,U.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,U.jsx)("span",{children:"VR"})]})]}),G0,fh&&Pl&&(0,U.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:v=>{v.target===v.currentTarget&&gh()},children:(0,U.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,U.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:gh,"aria-label":"Close phone handoff",children:(0,U.jsx)(Pe.X,{size:18})}),(0,U.jsx)(Pe.Smartphone,{size:22,"aria-hidden":"true"}),(0,U.jsx)("h2",{id:"ri-mobileHandoffTitle",children:"View in AR"}),(0,U.jsx)("p",{children:"Scan the code and choose AR."}),(0,U.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,U.jsx)(Vb.QRCodeSVG,{value:Pl,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),Ue&&(0,U.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${as(is?1:0)}px`},children:(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${Mt?"ri-measureButton--active":""}`,onClick:()=>gt(v=>!(v??ot)),title:Mt?"Disable UV checker":"Enable UV checker","aria-label":Mt?"Disable UV checker":"Enable UV checker","aria-pressed":Mt,children:(0,U.jsx)(Pe.Grid3X3,{size:16})})}),ce&&(0,U.jsxs)("div",{className:"ri-measureTools",style:{top:`${as((is?1:0)+(Ue?1:0))}px`},children:[(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${ts?"ri-measureButton--active":""}`,onClick:rx,title:ts?"Stop measuring":"Measure distance","aria-pressed":ts,children:(0,U.jsx)(Pe.PencilRuler,{size:16})}),(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${Ud?"ri-measureButton--active":""}`,onClick:ix,title:"Toggle bounding dimensions","aria-pressed":Ud,children:(0,U.jsx)(Pe.RulerDimensionLine,{size:16})}),yh.length>0&&(0,U.jsx)("button",{type:"button",className:"ri-measureButton",onClick:nx,title:"Clear measurements",children:(0,U.jsx)(Pe.Eraser,{size:16})}),ts&&(0,U.jsx)("span",{className:"ri-measureHint",children:"Click points on the model to measure"})]}),Ve&&(0,U.jsxs)("div",{className:"ri-explodeTools",style:{top:`${as((is?1:0)+(Ue?1:0)+(ce?1:0))}px`},children:[(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${ga||kr>0?"ri-measureButton--active":""}`,onClick:()=>Cl(v=>!v),title:"Exploded view","aria-pressed":ga,children:(0,U.jsx)(Pe.Expand,{size:16})}),ga&&(0,U.jsx)("div",{className:"ri-explodeSlider",onPointerDown:v=>v.stopPropagation(),children:(0,U.jsx)("input",{type:"range",min:0,max:100,value:Math.round(kr*100),onChange:v=>Ml(Number(v.target.value)/100),"aria-label":"Explode amount"})})]}),ba&&(0,U.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${as((is?1:0)+(Ue?1:0)+(ce?1:0)+(Ve?1:0))}px`},children:[(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${R?"ri-measureButton--active":""}`,onClick:()=>{R?I(!1):(ie(!1),I(!0))},title:R?"Pause cinematic":"Play cinematic","aria-pressed":R,children:R?(0,U.jsx)(Pe.Pause,{size:16}):(0,U.jsx)(Pe.Play,{size:16})}),R&&(0,U.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:vx,title:"Stop cinematic and reset camera",children:(0,U.jsx)(Pe.Square,{size:16})})]}),(xe||pe||on&&dn.length>0)&&(0,U.jsxs)("div",{className:"ri-buttonContainer",children:[(0,U.jsx)("div",{className:"ri-tourControls",children:on&&dn.length>0&&(0,U.jsx)(U.Fragment,{children:ma?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)("button",{className:"ri-tourButton",onClick:K0,disabled:xh||dn.length===0||ur<=0,title:"Previous annotation",children:[(0,U.jsx)(Pe.ChevronLeft,{size:16}),(0,U.jsx)("span",{children:"Prev"})]}),(0,U.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:J0,title:"Stop guided tour",children:(0,U.jsx)(Pe.Square,{size:16})}),(0,U.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:Z0,disabled:xh||dn.length===0,title:"Next annotation",children:[(0,U.jsx)("span",{children:"Next"}),(0,U.jsx)(Pe.ChevronRight,{size:16})]})]}):(0,U.jsx)("button",{className:"ri-navButtonSingle",onClick:$0,disabled:dn.length===0,title:"Start guided tour",children:"Guided Tour"})})}),(0,U.jsxs)("div",{className:"mv-rightControls",children:[xe&&(0,U.jsx)("button",{className:"mv-resetButton",onClick:Wd,title:"Reset camera view",children:(0,U.jsx)(Pe.RotateCcw,{})}),(0,U.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:v=>v.stopPropagation(),children:[Gn&&(0,U.jsxs)("div",{className:"mv-controllersMenu",children:[(0,U.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${Wn==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>Ti("orbit"),children:"Orbit Control"}),(0,U.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${Wn==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>Ti("pointerLock"),children:"Point Lock"})]}),(0,U.jsx)("button",{className:"mv-controllersButton",onClick:()=>Dt(v=>!v),title:"Camera controller","aria-label":"Camera controller settings",children:(0,U.jsx)(Pe.Orbit,{size:15})})]}),pe&&(0,U.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:v=>v.stopPropagation(),children:[sx&&(0,U.jsxs)("div",{className:"mv-downloadMenu",children:[(0,U.jsxs)("button",{className:"mv-downloadMenuItem",onClick:cx,disabled:Vd||!Vn.current,children:[(0,U.jsx)(Pe.Box,{size:14}),"Download GLB"]}),(0,U.jsx)("div",{className:"mv-downloadMenuDivider"}),Lt&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)("button",{className:"mv-downloadMenuItem",onClick:dx,disabled:!Vn.current,children:[(0,U.jsx)(Pe.Camera,{size:14}),"Download PNG"]}),(0,U.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,U.jsxs)("button",{className:"mv-downloadMenuItem",onClick:ux,disabled:!Vn.current,children:[(0,U.jsx)(Pe.FileImage,{size:14}),"Download UV Layout"]}),Sh&&(0,U.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:Sh})]}),(0,U.jsx)("button",{className:"mv-downloadButton",onClick:lx,disabled:Vd||!Vn.current,title:"Download options",children:Vd?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)("span",{className:"mv-downloadButton__spinner"}),"Exporting\u2026"]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Pe.Download,{size:15}),"Download"]})})]})]})]}),er&&(0,U.jsxs)("div",{className:"ri-annotationPopup",style:{left:Tx,top:Px},onPointerDown:v=>v.stopPropagation(),onClick:v=>v.stopPropagation(),children:[(0,U.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:Ei.title,onChange:v=>El(O=>({...O,title:v.target.value})),onKeyDown:v=>{v.key==="Enter"&&Uh(),v.key==="Escape"&&Xd()}}),(0,U.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:Ei.description,onChange:v=>El(O=>({...O,description:v.target.value})),onKeyDown:v=>{v.key==="Escape"&&Xd()},rows:5}),(0,U.jsxs)("div",{className:"ri-annotationActions",children:[(0,U.jsx)("button",{onClick:Uh,className:`ri-annotationOkBtn ${Ei.title.trim()?"":"disabled"}`,disabled:!Ei.title.trim(),children:"OK"}),(0,U.jsx)("button",{onClick:Xd,className:"ri-annotationCancelBtn",children:"Cancel"}),(0,U.jsx)("div",{className:"ri-annotationIcons"})]})]})]}),B&&sn&&(0,U.jsx)(vp,{colorPicker:sn,onClose:pr,itemMaterials:Bt,setItemMaterials:Pi}),B&&Bn&&(0,U.jsx)(xp,{triggerFileUpload:kh,materialPopup:Bn,textureUrl:Fh,clearTexture:Lh})]}),$&&(0,U.jsx)("div",{className:"ri-viewerRight",children:W?W({objectBindings:It,onAction:Dl,onFocus:Bh,onHover:gl}):(0,U.jsx)(wp,{objectBindings:It,onAction:Dl,onFocus:Bh,onHover:gl})}),Ae&&(0,U.jsx)(bb,{controlsRef:ke,enabled:!0,opacity:Rt,moveSensitivity:Xt,position:ze})]})}var Fb={licenseKey:!0,dracoDecoderPath:!0,ktx2TranscoderPath:!0,meshopt:!0},jb={licenseValidationUrl:!0,onObjectEditLeaseChange:!0};function Hb(e,t){let n={};for(let i of Object.keys(t))i in e&&(n[i]=e[i]);return n}function Gb(e,t){let n={...e};for(let i of Object.keys(t))delete n[i];return n}var Wb=require("react/jsx-runtime");function Lp(e){return(0,Wb.jsx)(Qs,{...Gb(e,jb)})}var Q=require("react"),_n=require("lucide-react");var Wt=require("react"),Dp=require("three");function Xb(e){return[e.x,e.y,e.z]}function Xi(e,t){let n=new Dp.Vector3,i=new Dp.Vector3;return t.getPosition(n),t.getTarget(i),{position:Xb(n),target:Xb(i),fov:"fov"in e&&typeof e.fov=="number"?e.fov:null,zoom:"zoom"in e&&typeof e.zoom=="number"?e.zoom:1,azimuthAngle:t.azimuthAngle,polarAngle:t.polarAngle}}function A_(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 el(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function td(e={}){let t=(0,Wt.useRef)(e);t.current=e;let n=(0,Wt.useRef)(null),[i,r]=(0,Wt.useState)(null),[a,o]=(0,Wt.useState)(()=>({...e.presets})),s=(0,Wt.useRef)(a);s.current=a;let c=(0,Wt.useCallback)(y=>{r(M=>A_(M,y)?M:y)},[]),l=(0,Wt.useCallback)((y,M)=>{c(Xi(y,M))},[c]),u=(0,Wt.useRef)(null),d=(0,Wt.useRef)(null),h=(0,Wt.useRef)(null),f=(0,Wt.useCallback)(y=>{n.current=y;let M=Xi(y.controls.camera,y.controls);c(M),y.scene!==d.current&&(d.current=y.scene,u.current=null,h.current=null),y.homeCameraState&&!u.current&&(u.current=y.homeCameraState);let{initialPosition:C,initialTarget:N,initialTransition:L=!1}=t.current;if((C||N)&&y.scene&&(C||y.homeCameraState)&&h.current!==y.controls){h.current=y.controls,y.homeCameraState||Po(y.controls);let F=C??M.position,V=N??M.target;y.controls.setLookAt(F[0],F[1],F[2],V[0],V[1],V[2],L).then(()=>{if(n.current?.controls!==y.controls)return;let D=Xi(y.controls.camera,y.controls);u.current={position:D.position,target:D.target},c(D)}).catch(()=>{})}},[c]),m=(0,Wt.useCallback)(async()=>{let y=n.current,M=y?.controls;if(!M)return!1;try{let C=u.current;return C?await el(M,()=>M.setLookAt(C.position[0],C.position[1],C.position[2],C.target[0],C.target[1],C.target[2],!0)):y?.scene?await el(M,()=>M.fitToBox(y.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await el(M,()=>M.reset(!0)),!0}catch{return!1}},[]),x=(0,Wt.useCallback)(async()=>{let y=n.current;if(!y?.controls||!y.scene)return!1;try{return await el(y.controls,()=>y.controls.fitToBox(y.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),E=(0,Wt.useCallback)(async y=>{let M=n.current;if(!M?.controls)return!1;let C=Nn(M.objectBindings,y);if(!C)return!1;let N=M.nodeRefs[C];if(!N)return!1;try{return await el(M.controls,()=>M.controls.fitToBox(N,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),w=(0,Wt.useCallback)(async(y,M=!0)=>{let C=n.current?.controls;if(!C)return!1;try{return n.current?.homeCameraState||Po(C),await C.setTarget(y[0],y[1],y[2],M),c(Xi(C.camera,C)),!0}catch{return!1}},[c]),p=(0,Wt.useCallback)(async(y,M=!0)=>{let C=n.current?.controls;if(!C)return!1;try{n.current?.homeCameraState||Po(C);let N=[C.setLookAt(y.position[0],y.position[1],y.position[2],y.target[0],y.target[1],y.target[2],M)];y.azimuthAngle!=null&&y.polarAngle!=null&&N.push(C.rotateTo(y.azimuthAngle,y.polarAngle,M)),await Promise.all(N);let L=C.camera,F=!1;return y.fov!=null&&"fov"in L&&typeof L.fov=="number"&&(L.fov=y.fov,F=!0),y.zoom!=null&&"zoom"in L&&typeof L.zoom=="number"&&(L.zoom=y.zoom,F=!0),F&&"updateProjectionMatrix"in L&&L.updateProjectionMatrix(),c(Xi(L,C)),!0}catch{return!1}},[c]),g=(0,Wt.useCallback)((y,M=!0)=>p(y,M),[p]),_=(0,Wt.useCallback)((y,M,C=!0)=>p({position:y,target:M},C),[p]),S=(0,Wt.useCallback)(async(y,M,C=!0)=>{let N=n.current?.controls;if(!N)return!1;try{return n.current?.homeCameraState||Po(N),await N.rotateTo(y,M,C),c(Xi(N.camera,N)),!0}catch{return!1}},[c]),T=(0,Wt.useCallback)(async(y,M=!0)=>{let C=n.current?.controls;if(!C)return!1;try{return n.current?.homeCameraState||Po(C),await C.dollyTo(y,M),c(Xi(C.camera,C)),!0}catch{return!1}},[c]),A=(0,Wt.useCallback)(y=>{let M=n.current?.controls,C=y.trim();if(!M||!C)return null;let N=Xi(M.camera,M);return s.current={...s.current,[C]:N},o(L=>({...L,[C]:N})),c(N),N},[c]),b=(0,Wt.useCallback)((y,M=!0)=>{let C=s.current[y];return C?p(C,M):Promise.resolve(!1)},[p]);return{cameraState:i,cameraPresets:a,resetView:m,focusObject:E,fitScene:x,setCameraTarget:w,setCameraState:g,lookAt:_,orbitTo:S,dollyTo:T,savePreset:A,goToPreset:b,handleCameraChange:l,handleViewerReady:f}}var yn=require("react");function nd(){let e=(0,yn.useRef)(null),[t,n]=(0,yn.useState)([]),i=(0,yn.useRef)(null),[r,a]=(0,yn.useState)([]),[o,s]=(0,yn.useState)(null),[c,l]=(0,yn.useState)(!1),[u,d]=(0,yn.useState)(1),[h,f]=(0,yn.useState)(0),[m,x]=(0,yn.useState)(0);(0,yn.useEffect)(()=>()=>{i.current?.()},[]);let E=(0,yn.useCallback)(T=>{i.current?.(),e.current=T,n(T.clips),a(T.clipDetails??T.clips.map(b=>({sourceName:b,duration:0})));let A=T.getState?.()??{currentClip:null,isPlaying:!1,speed:1,time:0,duration:0};s(A.currentClip),l(A.isPlaying),d(A.speed),f(A.time),x(A.duration),T.subscribe?i.current=T.subscribe(b=>{s(b.currentClip),l(b.isPlaying),d(b.speed),f(b.time),x(b.duration)}):i.current=null},[]),w=(0,yn.useCallback)(T=>{e.current?.play(T),s(T),l(!0)},[]),p=(0,yn.useCallback)(()=>{e.current?.pause(),l(!1)},[]),g=(0,yn.useCallback)(()=>{e.current?.stop(),s(null),l(!1),f(0)},[]),_=(0,yn.useCallback)(T=>{e.current?.setSpeed(T),d(T)},[]),S=(0,yn.useCallback)(T=>{e.current?.seek?.(T),f(T)},[]);return{clips:t,clipDetails:r,currentClip:o,isPlaying:c,speed:u,time:h,duration:m,play:w,pause:p,stop:g,setSpeed:_,seek:S,handleAnimationsReady:E}}var E_="react-immersive:binding-builder";var ko="session",Na="model",tl="current";var Ba=null;function Yb(){return Ba||(Ba=new Promise((e,t)=>{if(typeof indexedDB>"u"){t(new Error("IndexedDB is not available in this environment."));return}let n=indexedDB.open(E_,1);n.onupgradeneeded=()=>{let i=n.result;i.objectStoreNames.contains(ko)||i.createObjectStore(ko),i.objectStoreNames.contains(Na)||i.createObjectStore(Na)},n.onsuccess=()=>{let i=n.result;i.onversionchange=()=>{i.close(),Ba=null},e(i)},n.onerror=()=>t(n.error??new Error("Failed to open IndexedDB."))}),Ba.catch(()=>{Ba=null}),Ba)}function $b(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error??new Error("IndexedDB transaction failed.")),e.onabort=()=>n(e.error??new Error("IndexedDB transaction aborted."))})}function qb(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error??new Error("IndexedDB request failed."))})}function rd(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function R_(e){if(!rd(e)||e.version!==1)return!1;let t=e.model;return typeof e.savedAt=="number"&&rd(e.bindings)&&rd(e.sceneConfig)&&rd(t)&&typeof t.name=="string"&&(t.kind==="file"&&typeof t.key=="string"||t.kind==="url"&&typeof t.url=="string")}async function Kb(e,t){let n=await Yb(),i={...e,version:1,savedAt:Date.now()},r=n.transaction([ko,Na],"readwrite"),a=$b(r);if(r.objectStore(ko).put(i,tl),i.model.kind==="file"&&t){let o={key:i.model.key,blob:t,name:t.name,type:t.type,lastModified:t.lastModified};r.objectStore(Na).put(o,tl)}else i.model.kind==="url"&&r.objectStore(Na).delete(tl);return await a,i}async function Zb(){let t=(await Yb()).transaction([ko,Na],"readonly"),n=$b(t),[i,r]=await Promise.all([qb(t.objectStore(ko).get(tl)),qb(t.objectStore(Na).get(tl))]);return await n,R_(i)?i.model.kind==="url"?{session:i,file:null}:!r||r.key!==i.model.key?null:{session:i,file:new File([r.blob],r.name,{type:r.type,lastModified:r.lastModified})}:null}var cd=require("react");var sv=require("react"),Yi=require("lucide-react"),od=require("react-colorful");var jr=require("react"),ev=require("react-dom"),id=require("lucide-react"),ad=require("react-colorful");function Lo(e){let t=e.replace("#","").match(/.{2}/g).map(i=>parseInt(i,16)/255).map(i=>i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var Jb=require("react");function Qb(e,t,n){(0,Jb.useEffect)(()=>{if(!n)return;let i=Array.isArray(e)?e:[e],r=a=>{let o=a.target;i.some(c=>c.current?.contains(o))||t()};return document.addEventListener("pointerdown",r,!0),()=>{document.removeEventListener("pointerdown",r,!0)}},[e,t,n])}var Ce=require("react/jsx-runtime");function Bp({anchorRef:e,onClose:t,children:n}){let i=(0,jr.useRef)(null),[r,a]=(0,jr.useState)(null);return Qb([i,e],t,!0),(0,jr.useLayoutEffect)(()=>{let o=e.current;if(!o)return;let s=o.getBoundingClientRect(),c=222,l=8,u=Math.min(Math.max(s.right-c,l),window.innerWidth-c-l),d=Math.min(s.bottom+6,window.innerHeight-200);a({top:d,left:u})},[e]),r?(0,ev.createPortal)((0,Ce.jsx)("div",{ref:i,className:"se-colorPickerPopover",style:{position:"fixed",top:r.top,left:r.left},children:n}),document.body):null}function k_(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 Oa({title:e,children:t}){return(0,Ce.jsxs)("section",{className:"se-section",children:[(0,Ce.jsx)("h3",{className:"se-sectionTitle",children:e}),(0,Ce.jsx)("div",{className:"se-sectionBody",children:t})]})}function lt({title:e,open:t,onToggle:n,trailing:i,children:r,disabled:a,tooltip:o}){let s=o?`${o}`:e;return(0,Ce.jsxs)("section",{className:"se-panel",children:[(0,Ce.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,title:s,children:[(0,Ce.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Ce.jsx)(id.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Ce.jsx)("span",{className:"se-panelTitle",children:e}),o?(0,Ce.jsx)("span",{className:"se-panelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Ce.jsx)(id.Info,{size:13})}):null]}),i?(0,Ce.jsx)("span",{className:"se-panelTrailing",onClick:c=>c.stopPropagation(),children:i}):null]}),t?(0,Ce.jsx)("div",{className:"se-panelBody",style:a?{opacity:.45,pointerEvents:"none"}:void 0,children:r}):null]})}function ft({checked:e,onChange:t,label:n}){return(0,Ce.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Ce.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Ce.jsx)("span",{className:"se-switchTrack",children:(0,Ce.jsx)("span",{className:"se-switchThumb"})})]})}function K({label:e,value:t,min:n,max:i,step:r,formatValue:a,onChange:o,disabled:s=!1}){return(0,Ce.jsxs)("label",{className:`se-field ${s?"se-field--disabled":""}`,children:[(0,Ce.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,Ce.jsx)("span",{className:"se-fieldValue",children:a?a(t):t})]}),(0,Ce.jsx)("input",{className:"se-slider",type:"range",min:n,max:i,step:r,value:t,onChange:c=>o(Number(c.target.value)),disabled:s})]})}function xt({label:e,checked:t,onChange:n}){return(0,Ce.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:i=>n(i.target.checked)})]})}function lr({label:e,value:t,options:n,onChange:i}){return(0,Ce.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("select",{className:"se-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,Ce.jsx)("option",{value:r,children:k_(r)},r))})]})}function Sr({label:e,value:t,onChange:n}){let[i,r]=(0,jr.useState)(!1),a=(0,jr.useRef)(null);return(0,Ce.jsxs)("div",{className:"se-field",children:[(0,Ce.jsxs)("div",{className:"se-fieldInline",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("span",{ref:a,style:{display:"inline-flex"},children:(0,Ce.jsx)(ad.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>r(o=>!o),style:{background:t,color:Lo(t)},color:t,onChange:n})})]}),i?(0,Ce.jsx)(Bp,{anchorRef:a,onClose:()=>r(!1),children:(0,Ce.jsx)(ad.HexColorPicker,{color:t,onChange:n})}):null]})}function tv({value:e,min:t,max:n,step:i,onChange:r}){let[a,o]=(0,jr.useState)(String(e)),s=(0,jr.useRef)(!1);return(0,jr.useLayoutEffect)(()=>{s.current||o(String(e))},[e]),(0,Ce.jsx)("input",{type:"number",className:"se-numberInput",min:t,max:n,step:i,value:a,onFocus:()=>{s.current=!0},onChange:c=>{let l=c.target.value;o(l),l!==""&&l!=="-"&&!Number.isNaN(Number(l))&&r(Number(l))},onBlur:()=>{s.current=!1,o(String(e))}})}function qi({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Ce.jsxs)("div",{className:"se-field",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("div",{className:"se-vectorRow",children:["X","Y","Z"].map((s,c)=>(0,Ce.jsxs)("label",{className:"se-vectorAxis",children:[(0,Ce.jsx)("span",{children:s}),(0,Ce.jsx)(tv,{value:t[c],min:n,max:i,step:r,onChange:l=>{let u=[...t];u[c]=l,a(u)}})]},s))})]})}function Ia({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Ce.jsxs)("div",{className:"se-field",children:[(0,Ce.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ce.jsx)("div",{className:"se-vectorRow",children:["X","Y"].map((s,c)=>(0,Ce.jsxs)("label",{className:"se-vectorAxis",children:[(0,Ce.jsx)("span",{children:s}),(0,Ce.jsx)(tv,{value:t[c],min:n,max:i,step:r,onChange:l=>{let u=[...t];u[c]=l,a(u)}})]},s))})]})}var nv={free:0,starter:1,growth:2};function rv(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function Ci(e,t){return nv[e]>=nv[t]}var iv={free:"Free",starter:"Starter",growth:"Growth"};var av=require("lucide-react");var nl=require("react/jsx-runtime");function rr({requiredTier:e,feature:t}){return(0,nl.jsxs)("div",{className:"bb-tierLock",children:[(0,nl.jsx)(av.Lock,{size:16}),(0,nl.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",iv[e]," plan or higher."]})]})}var ae=require("react/jsx-runtime"),L_=["lit","unlit","normals"],D_=["color","image","environment"];function ov(e){let t=e%360;return t<0?t+360:t}function rl({title:e,open:t,onToggle:n,children:i,trailing:r}){return(0,ae.jsxs)("section",{className:"se-panel",children:[(0,ae.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:[(0,ae.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ae.jsx)(Yi.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,ae.jsx)("span",{className:"se-panelTitle",children:e})]}),r?(0,ae.jsx)("span",{className:"se-panelTrailing",onClick:a=>a.stopPropagation(),children:r}):null]}),t?(0,ae.jsx)("div",{className:"se-panelBody",children:i}):null]})}function Np({config:e,onChange:t}){let{model:n,camera:i,wireframe:r,background:a,environment:o}=e,{tier:s}=_r(),c=Ci(s,"starter"),[l,u]=(0,sv.useState)({general:!0,camera:!0,autoRotate:!1,wireframe:!1,background:!1}),d=p=>u(g=>({...g,[p]:!g[p]})),h=p=>t({...e,model:p}),f=p=>t({...e,camera:p}),m=p=>t({...e,wireframe:p}),x=p=>t({...e,background:p}),E=p=>t({...e,environment:p}),w=p=>{E({...o,source:"preset",preset:p})};return(0,ae.jsxs)("div",{className:"se-generalContent",children:[(0,ae.jsxs)(rl,{title:"General",open:l.general,onToggle:()=>d("general"),children:[(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsxs)("div",{className:"se-fieldLabel",children:[(0,ae.jsx)("span",{children:"Straighten model"}),(0,ae.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>h({...n,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,ae.jsx)(Yi.RotateCcw,{size:16})})]}),(0,ae.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((p,g)=>(0,ae.jsxs)("div",{className:"se-axisStepper",children:[(0,ae.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let _=[...n.rotation];_[g]=ov(_[g]-90),h({...n,rotation:_})},"aria-label":`Rotate ${p} axis backward`,children:(0,ae.jsx)(Yi.ChevronLeft,{size:16})}),(0,ae.jsx)("span",{className:"se-axisStepperLabel",children:p}),(0,ae.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let _=[...n.rotation];_[g]=ov(_[g]+90),h({...n,rotation:_})},"aria-label":`Rotate ${p} axis forward`,children:(0,ae.jsx)(Yi.ChevronRight,{size:16})})]},p))})]}),(0,ae.jsx)(qi,{label:"Rotation",value:n.rotation,min:0,max:360,step:1,onChange:p=>h({...n,rotation:p})}),(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,ae.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:xm.map(p=>(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${n.renderer===p?"se-segmentedOption--active":""}`,onClick:()=>h({...n,renderer:p}),children:p==="uv-checker"?"UV CHECKER":p.toUpperCase()},p))})]}),(0,ae.jsx)(lr,{label:"Shading",value:n.shading,options:L_,onChange:p=>h({...n,shading:p})})]}),(0,ae.jsx)(rl,{title:"Camera",open:l.camera,onToggle:()=>d("camera"),children:(0,ae.jsx)(K,{label:"Field Of View",value:i.fieldOfView,min:20,max:100,step:.1,formatValue:p=>`${p.toFixed(3)}\xB0`,onChange:p=>f({...i,fieldOfView:p})})}),(0,ae.jsx)(rl,{title:"Auto Rotate",open:l.autoRotate,onToggle:()=>d("autoRotate"),trailing:(0,ae.jsxs)("label",{className:"se-switch","aria-label":"Toggle auto rotate",children:[(0,ae.jsx)("input",{type:"checkbox",checked:n.autoRotate??!1,onChange:p=>h({...n,autoRotate:p.target.checked})}),(0,ae.jsx)("span",{className:"se-switchTrack",children:(0,ae.jsx)("span",{className:"se-switchThumb"})})]}),children:n.autoRotate?(0,ae.jsx)(K,{label:"Rotation Speed",value:n.autoRotateSpeed??1,min:.1,max:3,step:.1,formatValue:p=>`${p.toFixed(1)}x`,onChange:p=>h({...n,autoRotateSpeed:p})}):(0,ae.jsx)("div",{className:"se-placeholder",children:"Enable auto rotate to adjust its speed."})}),(0,ae.jsx)(rl,{title:"Wireframe",open:l.wireframe,onToggle:()=>d("wireframe"),trailing:(0,ae.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,ae.jsx)("input",{type:"checkbox",checked:c&&r.enabled,disabled:!c,onChange:p=>m({...r,enabled:p.target.checked})}),(0,ae.jsx)("span",{className:"se-switchTrack",children:(0,ae.jsx)("span",{className:"se-switchThumb"})})]}),children:c?(0,ae.jsxs)(ae.Fragment,{children:[(0,ae.jsx)(K,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:p=>m({...r,opacity:p})}),(0,ae.jsx)(Sr,{label:"Wire color",value:r.color,onChange:p=>m({...r,color:p})})]}):(0,ae.jsx)(rr,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,ae.jsx)(rl,{title:"Background",open:l.background,onToggle:()=>d("background"),trailing:(0,ae.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,ae.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:p=>x({...a,enabled:p.target.checked})}),(0,ae.jsx)("span",{className:"se-switchTrack",children:(0,ae.jsx)("span",{className:"se-switchThumb"})})]}),children:a.enabled?(0,ae.jsxs)(ae.Fragment,{children:[(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,ae.jsx)("div",{className:"se-segmentedControl",children:D_.map(p=>(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${a.type===p?"se-segmentedOption--active":""}`,onClick:()=>x({...a,type:p}),children:p},p))})]}),a.type==="environment"?c?(0,ae.jsxs)(ae.Fragment,{children:[(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,ae.jsxs)("div",{className:"se-segmentedControl",children:[(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>E({...o,source:"preset"}),children:"PRESET"}),(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>E({...o,source:"custom"}),children:"CUSTOM"})]})]}),o.source==="preset"?(0,ae.jsx)(lr,{label:"Environment preset",value:o.preset,options:ym,onChange:w}):(0,ae.jsxs)("label",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,ae.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:o.customEnvironmentUrl,onChange:p=>E({...o,customEnvironmentUrl:p.target.value})}),(0,ae.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),o.customEnvironmentUrl.trim()&&!Ul(o.customEnvironmentUrl)?(0,ae.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,ae.jsx)(K,{label:"Environment intensity",value:o.intensity,min:0,max:3,step:.05,onChange:p=>E({...o,intensity:p})})]}):(0,ae.jsx)(rr,{requiredTier:"starter",feature:"Environment backgrounds"}):null,a.type==="image"?(0,ae.jsxs)("label",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,ae.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:a.imageUrl,onChange:p=>x({...a,imageUrl:p.target.value})})]}):null,a.type==="color"?(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,ae.jsx)("div",{className:"se-inlineColorPicker",children:(0,ae.jsx)(od.HexColorPicker,{color:a.color,onChange:p=>x({...a,color:p})})}),(0,ae.jsx)("div",{className:"se-fieldInline",children:(0,ae.jsx)(od.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:a.color,color:Lo(a.color)},color:a.color,onChange:p=>x({...a,color:p})})})]}):null]}):(0,ae.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var kv=require("react");var fe=require("react/jsx-runtime");function lv({pp:e,set:t,open:n,toggle:i}){let{ssao:r}=e;return(0,fe.jsxs)(lt,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:n.ssao,onToggle:()=>i("ssao"),disabled:!r.enabled,trailing:(0,fe.jsx)(ft,{checked:r.enabled,onChange:a=>t("ssao",{...r,enabled:a}),label:"Toggle SSAO"}),children:[(0,fe.jsx)(K,{label:"Samples",value:r.samples,min:1,max:64,step:1,onChange:a=>t("ssao",{...r,samples:a})}),(0,fe.jsx)(K,{label:"Rings",value:r.rings,min:1,max:12,step:1,onChange:a=>t("ssao",{...r,rings:a})}),(0,fe.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:20,step:.5,onChange:a=>t("ssao",{...r,intensity:a})}),(0,fe.jsx)(K,{label:"Radius",value:r.radius,min:.01,max:1,step:.01,onChange:a=>t("ssao",{...r,radius:a})}),(0,fe.jsx)(K,{label:"Bias",value:r.bias,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,bias:a})}),(0,fe.jsx)(K,{label:"Luminance Influence",value:r.luminanceInfluence,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,luminanceInfluence:a})}),(0,fe.jsx)(K,{label:"Fade",value:r.fade,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,fade:a})}),(0,fe.jsx)(K,{label:"Min Radius Scale",value:r.minRadiusScale,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,minRadiusScale:a})}),(0,fe.jsx)(K,{label:"World Distance Threshold",value:r.worldDistanceThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldDistanceThreshold:a})}),(0,fe.jsx)(K,{label:"World Distance Falloff",value:r.worldDistanceFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldDistanceFalloff:a})}),(0,fe.jsx)(K,{label:"World Proximity Threshold",value:r.worldProximityThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldProximityThreshold:a})}),(0,fe.jsx)(K,{label:"World Proximity Falloff",value:r.worldProximityFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldProximityFalloff:a})})]})}function cv({pp:e,set:t,open:n,toggle:i}){let{autofocus:r}=e;return(0,fe.jsxs)(lt,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:n.autofocus,onToggle:()=>i("autofocus"),disabled:!r.enabled,trailing:(0,fe.jsx)(ft,{checked:r.enabled,onChange:a=>t("autofocus",{...r,enabled:a}),label:"Toggle Autofocus"}),children:[(0,fe.jsx)(K,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusDistance:a})}),(0,fe.jsx)(K,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusRange:a})}),(0,fe.jsx)(K,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,focalLength:a})}),(0,fe.jsx)(K,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("autofocus",{...r,bokehScale:a})}),(0,fe.jsx)(qi,{label:"Target",value:r.target,min:-100,max:100,step:.1,onChange:a=>t("autofocus",{...r,target:a})}),(0,fe.jsx)(xt,{label:"Mouse Follow",checked:r.mouse,onChange:a=>t("autofocus",{...r,mouse:a})}),(0,fe.jsx)(xt,{label:"Manual Update",checked:r.manual,onChange:a=>t("autofocus",{...r,manual:a})}),(0,fe.jsx)(K,{label:"Debug",value:r.debug,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,debug:a})}),(0,fe.jsx)(K,{label:"Smooth Time",value:r.smoothTime,min:0,max:2,step:.01,onChange:a=>t("autofocus",{...r,smoothTime:a})})]})}function dv({pp:e,set:t,open:n,toggle:i}){let{godRays:r}=e;return(0,fe.jsxs)(lt,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:n.godRays,onToggle:()=>i("godRays"),disabled:!r.enabled,trailing:(0,fe.jsx)(ft,{checked:r.enabled,onChange:a=>t("godRays",{...r,enabled:a}),label:"Toggle GodRays"}),children:[(0,fe.jsx)(qi,{label:"Sun Position",value:r.sunPosition,min:-100,max:100,step:.1,onChange:a=>t("godRays",{...r,sunPosition:a})}),(0,fe.jsx)(K,{label:"Samples",value:r.samples,min:1,max:128,step:1,onChange:a=>t("godRays",{...r,samples:a})}),(0,fe.jsx)(K,{label:"Density",value:r.density,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,density:a})}),(0,fe.jsx)(K,{label:"Decay",value:r.decay,min:0,max:1,step:.01,onChange:a=>t("godRays",{...r,decay:a})}),(0,fe.jsx)(K,{label:"Weight",value:r.weight,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,weight:a})}),(0,fe.jsx)(K,{label:"Exposure",value:r.exposure,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,exposure:a})}),(0,fe.jsx)(K,{label:"Clamp Max",value:r.clampMax,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,clampMax:a})}),(0,fe.jsx)(xt,{label:"Blur",checked:r.blur,onChange:a=>t("godRays",{...r,blur:a})}),(0,fe.jsx)(lr,{label:"Kernel Size",value:r.kernelSize,options:us,onChange:a=>t("godRays",{...r,kernelSize:a})})]})}function uv({pp:e,set:t,open:n,toggle:i}){let{lensflare:r}=e;return(0,fe.jsxs)(lt,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:n.lensflare,onToggle:()=>i("lensflare"),disabled:!r.enabled,trailing:(0,fe.jsx)(ft,{checked:r.enabled,onChange:a=>t("lensflare",{...r,enabled:a}),label:"Toggle Lensflare"}),children:[(0,fe.jsx)(qi,{label:"Lens Position",value:r.lensPosition,min:-100,max:100,step:.1,onChange:a=>t("lensflare",{...r,lensPosition:a})}),(0,fe.jsx)(K,{label:"Smooth Time",value:r.smoothTime,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,smoothTime:a})}),(0,fe.jsx)(K,{label:"Glare Size",value:r.glareSize,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,glareSize:a})}),(0,fe.jsx)(K,{label:"Flare Size",value:r.flareSize,min:0,max:.1,step:.001,onChange:a=>t("lensflare",{...r,flareSize:a})}),(0,fe.jsx)(K,{label:"Flare Speed",value:r.flareSpeed,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareSpeed:a})}),(0,fe.jsx)(K,{label:"Flare Shape",value:r.flareShape,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareShape:a})}),(0,fe.jsx)(xt,{label:"Animated",checked:r.animated,onChange:a=>t("lensflare",{...r,animated:a})}),(0,fe.jsx)(xt,{label:"Anamorphic",checked:r.anamorphic,onChange:a=>t("lensflare",{...r,anamorphic:a})}),(0,fe.jsx)(Sr,{label:"Color Gain",value:r.colorGain,onChange:a=>t("lensflare",{...r,colorGain:a})}),(0,fe.jsx)(K,{label:"Halo Scale",value:r.haloScale,min:0,max:2,step:.01,onChange:a=>t("lensflare",{...r,haloScale:a})}),(0,fe.jsx)(xt,{label:"Secondary Ghosts",checked:r.secondaryGhosts,onChange:a=>t("lensflare",{...r,secondaryGhosts:a})}),(0,fe.jsx)(xt,{label:"Additional Streaks",checked:r.aditionalStreaks,onChange:a=>t("lensflare",{...r,aditionalStreaks:a})}),(0,fe.jsx)(K,{label:"Ghost Scale",value:r.ghostScale,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,ghostScale:a})}),(0,fe.jsx)(K,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,opacity:a})}),(0,fe.jsx)(xt,{label:"Star Burst",checked:r.starBurst,onChange:a=>t("lensflare",{...r,starBurst:a})})]})}function pv({pp:e,set:t,open:n,toggle:i}){let{depthOfField:r}=e;return(0,fe.jsxs)(lt,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:n.depthOfField,onToggle:()=>i("depthOfField"),disabled:!r.enabled,trailing:(0,fe.jsx)(ft,{checked:r.enabled,onChange:a=>t("depthOfField",{...r,enabled:a}),label:"Toggle DepthOfField"}),children:[(0,fe.jsx)(K,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusDistance:a})}),(0,fe.jsx)(K,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusRange:a})}),(0,fe.jsx)(K,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("depthOfField",{...r,focalLength:a})}),(0,fe.jsx)(K,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("depthOfField",{...r,bokehScale:a})})]})}var We=require("react/jsx-runtime"),B_=["linear","reinhard","aces"];function hv({pp:e,set:t,open:n,toggle:i}){let{colorAverage:r}=e;return(0,We.jsx)(lt,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:n.colorAverage,onToggle:()=>i("colorAverage"),disabled:!r.enabled,trailing:(0,We.jsx)(ft,{checked:r.enabled,onChange:a=>t("colorAverage",{...r,enabled:a}),label:"Toggle ColorAverage"}),children:(0,We.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function mv({pp:e,set:t,open:n,toggle:i}){let{brightnessContrast:r}=e;return(0,We.jsxs)(lt,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:n.brightnessContrast,onToggle:()=>i("brightnessContrast"),disabled:!r.enabled,trailing:(0,We.jsx)(ft,{checked:r.enabled,onChange:a=>t("brightnessContrast",{...r,enabled:a}),label:"Toggle BrightnessContrast"}),children:[(0,We.jsx)(K,{label:"Brightness",value:r.brightness,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,brightness:a})}),(0,We.jsx)(K,{label:"Contrast",value:r.contrast,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,contrast:a})})]})}function fv({pp:e,set:t,open:n,toggle:i}){let{hueSaturation:r}=e;return(0,We.jsxs)(lt,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:n.hueSaturation,onToggle:()=>i("hueSaturation"),disabled:!r.enabled,trailing:(0,We.jsx)(ft,{checked:r.enabled,onChange:a=>t("hueSaturation",{...r,enabled:a}),label:"Toggle HueSaturation"}),children:[(0,We.jsx)(K,{label:"Hue",value:r.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("hueSaturation",{...r,hue:a})}),(0,We.jsx)(K,{label:"Saturation",value:r.saturation,min:-1,max:1,step:.01,onChange:a=>t("hueSaturation",{...r,saturation:a})})]})}function gv({pp:e,set:t,open:n,toggle:i}){let{vignette:r}=e;return(0,We.jsxs)(lt,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:n.vignette,onToggle:()=>i("vignette"),disabled:!r.enabled,trailing:(0,We.jsx)(ft,{checked:r.enabled,onChange:a=>t("vignette",{...r,enabled:a}),label:"Toggle Vignette"}),children:[(0,We.jsx)(K,{label:"Offset",value:r.offset,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,offset:a})}),(0,We.jsx)(K,{label:"Darkness",value:r.darkness,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,darkness:a})}),(0,We.jsx)(xt,{label:"Eskil",checked:r.eskil,onChange:a=>t("vignette",{...r,eskil:a})})]})}function bv({pp:e,set:t,open:n,toggle:i}){let{bloom:r}=e;return(0,We.jsxs)(lt,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:n.bloom,onToggle:()=>i("bloom"),disabled:!r.enabled,trailing:(0,We.jsx)(ft,{checked:r.enabled,onChange:a=>t("bloom",{...r,enabled:a}),label:"Toggle Bloom"}),children:[(0,We.jsx)(K,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceThreshold:a})}),(0,We.jsx)(K,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceSmoothing:a})}),(0,We.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:3,step:.05,onChange:a=>t("bloom",{...r,intensity:a})}),(0,We.jsx)(xt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("bloom",{...r,mipmapBlur:a})}),(0,We.jsx)(K,{label:"Radius",value:r.radius,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,radius:a})}),(0,We.jsx)(K,{label:"Levels",value:r.levels,min:1,max:16,step:1,onChange:a=>t("bloom",{...r,levels:a})})]})}function vv({pp:e,set:t,open:n,toggle:i}){let{toneMapping:r}=e;return(0,We.jsxs)(lt,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:n.toneMapping,onToggle:()=>i("toneMapping"),disabled:!r.enabled,trailing:(0,We.jsx)(ft,{checked:r.enabled,onChange:a=>t("toneMapping",{...r,enabled:a}),label:"Toggle ToneMapping"}),children:[(0,We.jsxs)("div",{className:"se-field",children:[(0,We.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,We.jsx)("div",{className:"se-segmentedControl",children:B_.map(a=>(0,We.jsx)("button",{type:"button",className:`se-segmentedOption ${r.mode===a?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...r,mode:a}),children:a==="aces"?"Filmic":a.charAt(0).toUpperCase()+a.slice(1)},a))})]}),(0,We.jsx)(K,{label:"Resolution",value:r.resolution,min:64,max:4096,step:64,onChange:a=>t("toneMapping",{...r,resolution:a})}),(0,We.jsx)(K,{label:"White Point",value:r.whitePoint,min:0,max:16,step:.01,onChange:a=>t("toneMapping",{...r,whitePoint:a})}),(0,We.jsx)(K,{label:"Middle Grey",value:r.middleGrey,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,middleGrey:a})}),(0,We.jsx)(K,{label:"Min Luminance",value:r.minLuminance,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,minLuminance:a})}),(0,We.jsx)(K,{label:"Average Luminance",value:r.averageLuminance,min:0,max:4,step:.01,onChange:a=>t("toneMapping",{...r,averageLuminance:a})}),(0,We.jsx)(K,{label:"Adaptation Rate",value:r.adaptationRate,min:0,max:10,step:.01,onChange:a=>t("toneMapping",{...r,adaptationRate:a})}),(0,We.jsx)(K,{label:"Exposure",value:r.exposure,min:0,max:3,step:.01,onChange:a=>t("toneMapping",{...r,exposure:a})})]})}function xv({pp:e,set:t,open:n,toggle:i}){let{sepia:r}=e;return(0,We.jsx)(lt,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:n.sepia,onToggle:()=>i("sepia"),disabled:!r.enabled,trailing:(0,We.jsx)(ft,{checked:r.enabled,onChange:a=>t("sepia",{...r,enabled:a}),label:"Toggle Sepia"}),children:(0,We.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:1,step:.01,onChange:a=>t("sepia",{...r,intensity:a})})})}var Be=require("react/jsx-runtime");function yv({pp:e,set:t,open:n,toggle:i}){let{dotScreen:r}=e;return(0,Be.jsxs)(lt,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:n.dotScreen,onToggle:()=>i("dotScreen"),disabled:!r.enabled,trailing:(0,Be.jsx)(ft,{checked:r.enabled,onChange:a=>t("dotScreen",{...r,enabled:a}),label:"Toggle DotScreen"}),children:[(0,Be.jsx)(K,{label:"Angle",value:r.angle,min:0,max:Math.PI*2,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("dotScreen",{...r,angle:a})}),(0,Be.jsx)(K,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("dotScreen",{...r,scale:a})})]})}function wv({pp:e,set:t,open:n,toggle:i}){let{glitch:r}=e;return(0,Be.jsxs)(lt,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:n.glitch,onToggle:()=>i("glitch"),disabled:!r.enabled,trailing:(0,Be.jsx)(ft,{checked:r.enabled,onChange:a=>t("glitch",{...r,enabled:a}),label:"Toggle Glitch"}),children:[(0,Be.jsx)(lr,{label:"Mode",value:r.mode,options:wm,onChange:a=>t("glitch",{...r,mode:a})}),(0,Be.jsx)(Ia,{label:"Delay",value:r.delay,min:0,max:10,step:.01,onChange:a=>t("glitch",{...r,delay:a})}),(0,Be.jsx)(Ia,{label:"Duration",value:r.duration,min:0,max:5,step:.01,onChange:a=>t("glitch",{...r,duration:a})}),(0,Be.jsx)(Ia,{label:"Strength",value:r.strength,min:0,max:2,step:.01,onChange:a=>t("glitch",{...r,strength:a})}),(0,Be.jsx)(Ia,{label:"Chromatic Aberration Offset",value:r.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:a=>t("glitch",{...r,chromaticAberrationOffset:a})}),(0,Be.jsx)(K,{label:"Columns",value:r.columns,min:0,max:.5,step:.001,onChange:a=>t("glitch",{...r,columns:a})}),(0,Be.jsx)(K,{label:"Ratio",value:r.ratio,min:0,max:1,step:.01,onChange:a=>t("glitch",{...r,ratio:a})})]})}function _v({pp:e,set:t,open:n,toggle:i}){let{grid:r}=e;return(0,Be.jsxs)(lt,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:n.grid,onToggle:()=>i("grid"),disabled:!r.enabled,trailing:(0,Be.jsx)(ft,{checked:r.enabled,onChange:a=>t("grid",{...r,enabled:a}),label:"Toggle Grid"}),children:[(0,Be.jsx)(K,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("grid",{...r,scale:a})}),(0,Be.jsx)(K,{label:"Line Width",value:r.lineWidth,min:0,max:1,step:.01,onChange:a=>t("grid",{...r,lineWidth:a})})]})}function Sv({pp:e,set:t,open:n,toggle:i}){let{chromaticAberration:r}=e;return(0,Be.jsxs)(lt,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:n.chromaticAberration,onToggle:()=>i("chromaticAberration"),disabled:!r.enabled,trailing:(0,Be.jsx)(ft,{checked:r.enabled,onChange:a=>t("chromaticAberration",{...r,enabled:a}),label:"Toggle ChromaticAberration"}),children:[(0,Be.jsx)(K,{label:"Offset X",value:r.offsetX,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetX:a})}),(0,Be.jsx)(K,{label:"Offset Y",value:r.offsetY,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetY:a})}),(0,Be.jsx)(xt,{label:"Radial Modulation",checked:r.radialModulation,onChange:a=>t("chromaticAberration",{...r,radialModulation:a})}),(0,Be.jsx)(K,{label:"Modulation Offset",value:r.modulationOffset,min:0,max:1,step:.01,onChange:a=>t("chromaticAberration",{...r,modulationOffset:a})})]})}function Mv({pp:e,set:t,open:n,toggle:i}){let{noise:r}=e;return(0,Be.jsxs)(lt,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:n.noise,onToggle:()=>i("noise"),disabled:!r.enabled,trailing:(0,Be.jsx)(ft,{checked:r.enabled,onChange:a=>t("noise",{...r,enabled:a}),label:"Toggle Noise"}),children:[(0,Be.jsx)(K,{label:"Amount",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("noise",{...r,opacity:a})}),(0,Be.jsx)(xt,{label:"Premultiply",checked:r.premultiply,onChange:a=>t("noise",{...r,premultiply:a})})]})}function Cv({pp:e,set:t,open:n,toggle:i}){let{scanline:r}=e;return(0,Be.jsx)(lt,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:n.scanline,onToggle:()=>i("scanline"),disabled:!r.enabled,trailing:(0,Be.jsx)(ft,{checked:r.enabled,onChange:a=>t("scanline",{...r,enabled:a}),label:"Toggle Scanline"}),children:(0,Be.jsx)(K,{label:"Density",value:r.density,min:0,max:10,step:.25,onChange:a=>t("scanline",{...r,density:a})})})}function Tv({pp:e,set:t,open:n,toggle:i}){let{pixelation:r}=e;return(0,Be.jsx)(lt,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:n.pixelation,onToggle:()=>i("pixelation"),disabled:!r.enabled,trailing:(0,Be.jsx)(ft,{checked:r.enabled,onChange:a=>t("pixelation",{...r,enabled:a}),label:"Toggle Pixelation"}),children:(0,Be.jsx)(K,{label:"Granularity",value:r.granularity,min:0,max:20,step:1,onChange:a=>t("pixelation",{...r,granularity:a})})})}function Pv({pp:e,set:t,open:n,toggle:i}){let{ramp:r}=e;return(0,Be.jsxs)(lt,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:n.ramp,onToggle:()=>i("ramp"),disabled:!r.enabled,trailing:(0,Be.jsx)(ft,{checked:r.enabled,onChange:a=>t("ramp",{...r,enabled:a}),label:"Toggle Ramp"}),children:[(0,Be.jsx)(lr,{label:"Ramp Type",value:r.rampType,options:_m,onChange:a=>t("ramp",{...r,rampType:a})}),(0,Be.jsx)(Ia,{label:"Ramp Start",value:r.rampStart,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampStart:a})}),(0,Be.jsx)(Ia,{label:"Ramp End",value:r.rampEnd,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampEnd:a})}),(0,Be.jsx)(Sr,{label:"Start Color",value:r.startColor,onChange:a=>t("ramp",{...r,startColor:a})}),(0,Be.jsx)(Sr,{label:"End Color",value:r.endColor,onChange:a=>t("ramp",{...r,endColor:a})}),!r.rampMask&&(0,Be.jsx)(K,{label:"Gradient Opacity",value:r.opacity??.5,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,opacity:a})}),(0,Be.jsx)(K,{label:"Bias",value:r.rampBias,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampBias:a})}),(0,Be.jsx)(K,{label:"Gain",value:r.rampGain,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampGain:a})}),(0,Be.jsx)(xt,{label:"Mask Earlier Effects",checked:r.rampMask,onChange:a=>t("ramp",{...r,rampMask:a})}),(0,Be.jsx)(xt,{label:"Invert",checked:r.rampInvert,onChange:a=>t("ramp",{...r,rampInvert:a})})]})}var Ot=require("react/jsx-runtime");function Av({pp:e,set:t,open:n,toggle:i}){let{outline:r}=e;return(0,Ot.jsxs)(lt,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:n.outline,onToggle:()=>i("outline"),disabled:!r.enabled,trailing:(0,Ot.jsx)(ft,{checked:r.enabled,onChange:a=>t("outline",{...r,enabled:a}),label:"Toggle Outline"}),children:[(0,Ot.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,Ot.jsx)(K,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("outline",{...r,selectionLayer:a})}),(0,Ot.jsx)(K,{label:"Edge Strength",value:r.edgeStrength,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,edgeStrength:a})}),(0,Ot.jsx)(K,{label:"Pulse Speed",value:r.pulseSpeed,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,pulseSpeed:a})}),(0,Ot.jsx)(Sr,{label:"Visible Edge Color",value:r.visibleEdgeColor,onChange:a=>t("outline",{...r,visibleEdgeColor:a})}),(0,Ot.jsx)(Sr,{label:"Hidden Edge Color",value:r.hiddenEdgeColor,onChange:a=>t("outline",{...r,hiddenEdgeColor:a})}),(0,Ot.jsx)(lr,{label:"Kernel Size",value:r.kernelSize,options:us,onChange:a=>t("outline",{...r,kernelSize:a})}),(0,Ot.jsx)(xt,{label:"Blur",checked:r.blur,onChange:a=>t("outline",{...r,blur:a})}),(0,Ot.jsx)(xt,{label:"X-Ray",checked:r.xRay,onChange:a=>t("outline",{...r,xRay:a})})]})}function Ev({pp:e,set:t,open:n,toggle:i}){let{selectiveBloom:r}=e;return(0,Ot.jsxs)(lt,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:n.selectiveBloom,onToggle:()=>i("selectiveBloom"),disabled:!r.enabled,trailing:(0,Ot.jsx)(ft,{checked:r.enabled,onChange:a=>t("selectiveBloom",{...r,enabled:a}),label:"Toggle SelectiveBloom"}),children:[(0,Ot.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,Ot.jsx)(K,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("selectiveBloom",{...r,selectionLayer:a})}),(0,Ot.jsx)(K,{label:"Intensity",value:r.intensity,min:0,max:5,step:.05,onChange:a=>t("selectiveBloom",{...r,intensity:a})}),(0,Ot.jsx)(K,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceThreshold:a})}),(0,Ot.jsx)(K,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceSmoothing:a})}),(0,Ot.jsx)(lr,{label:"Kernel Size",value:r.kernelSize,options:us,onChange:a=>t("selectiveBloom",{...r,kernelSize:a})}),(0,Ot.jsx)(xt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("selectiveBloom",{...r,mipmapBlur:a})}),(0,Ot.jsx)(xt,{label:"Inverted",checked:r.inverted,onChange:a=>t("selectiveBloom",{...r,inverted:a})}),(0,Ot.jsx)(xt,{label:"Ignore Background",checked:r.ignoreBackground,onChange:a=>t("selectiveBloom",{...r,ignoreBackground:a})})]})}function Rv({pp:e,set:t,open:n,toggle:i}){let{smaa:r}=e;return(0,Ot.jsx)(lt,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:n.smaa,onToggle:()=>i("smaa"),trailing:(0,Ot.jsx)(ft,{checked:r.enabled,onChange:a=>t("smaa",{...r,enabled:a}),label:"Toggle SMAA"}),children:(0,Ot.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var Vt=require("react/jsx-runtime");function Op({config:e,onChange:t}){let[n,i]=(0,kv.useState)({autofocus:!1,colorAverage:!1,dotScreen:!1,glitch:!1,godRays:!1,grid:!1,lensflare:!1,outline:!1,selectiveBloom:!1,ramp:!1,ssao:!1,brightnessContrast:!1,hueSaturation:!1,depthOfField:!1,chromaticAberration:!1,vignette:!1,bloom:!1,toneMapping:!1,noise:!1,sepia:!1,scanline:!1,pixelation:!1,smaa:!1}),r=c=>i(l=>({...l,[c]:!l[c]})),a=e.postProcessing,s={pp:a,set:(c,l)=>t({...e,postProcessing:{...a,[c]:l}}),open:n,toggle:r};return(0,Vt.jsxs)("div",{className:"se-generalContent",children:[(0,Vt.jsx)(lv,{...s}),(0,Vt.jsx)(cv,{...s}),(0,Vt.jsx)(hv,{...s}),(0,Vt.jsx)(yv,{...s}),(0,Vt.jsx)(wv,{...s}),(0,Vt.jsx)(dv,{...s}),(0,Vt.jsx)(_v,{...s}),(0,Vt.jsx)(uv,{...s}),(0,Vt.jsx)(Av,{...s}),(0,Vt.jsx)(Ev,{...s}),(0,Vt.jsx)(mv,{...s}),(0,Vt.jsx)(fv,{...s}),(0,Vt.jsx)(pv,{...s}),(0,Vt.jsx)(Sv,{...s}),(0,Vt.jsx)(gv,{...s}),(0,Vt.jsx)(bv,{...s}),(0,Vt.jsx)(vv,{...s}),(0,Vt.jsx)(Mv,{...s}),(0,Vt.jsx)(xv,{...s}),(0,Vt.jsx)(Cv,{...s}),(0,Vt.jsx)(Tv,{...s}),(0,Vt.jsx)(Pv,{...s}),(0,Vt.jsx)(Rv,{...s})]})}var il=require("react"),$i=require("lucide-react");var ge=require("react/jsx-runtime"),N_=["512","1024","2048","4096"],Lv={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function O_({index:e,light:t,selected:n,onSelect:i,onToggleVisible:r}){return(0,ge.jsxs)("div",{className:`se-lightRow ${n?"se-lightRow--active":""}`,onClick:i,children:[(0,ge.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",Lv[t.type]]}),(0,ge.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:a=>{a.stopPropagation(),r()},children:t.visible?(0,ge.jsx)($i.Eye,{size:14}):(0,ge.jsx)($i.EyeOff,{size:14})})]})}function I_(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function Ip({config:e,onChange:t}){let[n,i]=(0,il.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),r=(0,il.useSyncExternalStore)(Ep,$c),[a,o]=(0,il.useState)(e.lighting.lights[0]?.id??null),s=r??a,c=b=>{o(b),Js(b)},l=b=>i(y=>({...y,[b]:!y[b]})),{tier:u}=_r(),d=Ci(u,"starter"),{lighting:h,shadows:f,groundShadows:m,environment:x}=e,E=b=>t({...e,lighting:b}),w=b=>t({...e,shadows:b}),p=b=>t({...e,groundShadows:b}),g=b=>t({...e,environment:b}),_=(b,y)=>{E({...h,lights:h.lights.map(M=>M.id===b?{...M,...y}:M)})},S=h.lights.find(b=>b.id===s)??null,T=()=>{let b=I_();E({...h,lights:[...h.lights,b]}),c(b.id)},A=()=>{if(!S)return;let b=h.lights.filter(y=>y.id!==S.id);E({...h,lights:b}),c(b[0]?.id??null)};return(0,ge.jsxs)("div",{className:"se-generalContent",children:[(0,ge.jsxs)(lt,{title:"Lights",open:n.lights,onToggle:()=>l("lights"),children:[(0,ge.jsx)("div",{className:"se-lightList",children:h.lights.map((b,y)=>(0,ge.jsx)(O_,{index:y,light:b,selected:b.id===s,onSelect:()=>c(b.id),onToggleVisible:()=>_(b.id,{visible:!b.visible})},b.id))}),(0,ge.jsxs)("div",{className:"se-lightActions",children:[(0,ge.jsx)("button",{type:"button",className:"se-iconButton",onClick:T,title:"Add light",children:(0,ge.jsx)($i.Plus,{size:14})}),S&&h.lights.length>1&&(0,ge.jsx)("button",{type:"button",className:"se-iconButton",onClick:A,title:"Remove selected light",children:(0,ge.jsx)($i.Trash2,{size:14})})]}),S?(0,ge.jsxs)("div",{className:"se-lightProps",children:[(0,ge.jsxs)("div",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,ge.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:vm.map(b=>(0,ge.jsx)("button",{type:"button",className:`se-segmentedOption ${S.type===b?"se-segmentedOption--active":""}`,onClick:()=>_(S.id,{type:b}),children:Lv[b]},b))})]}),(0,ge.jsx)(Sr,{label:"Color",value:S.color,onChange:b=>_(S.id,{color:b})}),(0,ge.jsx)(K,{label:"Intensity",value:S.intensity,min:0,max:10,step:.1,onChange:b=>_(S.id,{intensity:b})}),S.type!=="hemisphere"&&S.type!=="none"&&(0,ge.jsx)(qi,{label:"Position",value:S.position,min:-100,max:100,step:.05,onChange:b=>_(S.id,{position:b})}),S.type==="spot"&&(0,ge.jsxs)(ge.Fragment,{children:[(0,ge.jsx)(K,{label:"Angle",value:S.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:b=>`${Math.round(b*180/Math.PI)}\xB0`,onChange:b=>_(S.id,{angle:b})}),(0,ge.jsx)(K,{label:"Penumbra",value:S.penumbra??.2,min:0,max:1,step:.01,onChange:b=>_(S.id,{penumbra:b})}),(0,ge.jsx)(K,{label:"Distance",value:S.distance??0,min:0,max:100,step:.5,onChange:b=>_(S.id,{distance:b})}),(0,ge.jsx)(K,{label:"Decay",value:S.decay??2,min:0,max:4,step:.1,onChange:b=>_(S.id,{decay:b})})]}),(0,ge.jsx)(xt,{label:"Attached to camera",checked:S.attachedToCamera,onChange:b=>_(S.id,{attachedToCamera:b})}),(0,ge.jsx)(xt,{label:"Cast shadows",checked:S.castShadow,onChange:b=>_(S.id,{castShadow:b})}),(0,ge.jsx)(K,{label:"Shadow bias",value:S.shadowBias,min:-.01,max:.01,step:1e-4,onChange:b=>_(S.id,{shadowBias:b})})]}):null]}),(0,ge.jsxs)(lt,{title:"Shadows",open:n.shadows,onToggle:()=>l("shadows"),disabled:!f.enabled,trailing:(0,ge.jsx)(ft,{checked:f.enabled,onChange:b=>w({...f,enabled:b}),label:"Toggle shadows"}),children:[(0,ge.jsx)(lr,{label:"Map size",value:String(f.mapSize),options:N_,onChange:b=>w({...f,mapSize:Number(b)})}),(0,ge.jsx)(K,{label:"Bias",value:f.bias,min:-.01,max:.01,step:1e-4,onChange:b=>w({...f,bias:b})}),(0,ge.jsx)(K,{label:"Normal bias",value:f.normalBias,min:0,max:.2,step:.01,onChange:b=>w({...f,normalBias:b})}),(0,ge.jsx)(K,{label:"Radius (softness)",value:f.radius,min:0,max:20,step:.5,onChange:b=>w({...f,radius:b})})]}),(0,ge.jsxs)(lt,{title:"Ground Shadows",open:n.groundShadows,onToggle:()=>l("groundShadows"),disabled:!m.enabled,trailing:(0,ge.jsx)(ft,{checked:m.enabled,onChange:b=>p({...m,enabled:b}),label:"Toggle ground shadows"}),children:[(0,ge.jsxs)("div",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,ge.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(b=>(0,ge.jsx)("button",{type:"button",className:`se-segmentedOption ${m.mode===b?"se-segmentedOption--active":""}`,onClick:()=>p({...m,mode:b}),children:b==="shadowCatcher"?"Shadow Catcher":"Baked AO"},b))})]}),m.mode==="bakedAO"&&(0,ge.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,ge.jsx)(K,{label:"Intensity",value:m.intensity,min:0,max:1,step:.01,onChange:b=>p({...m,intensity:b})}),(0,ge.jsx)(K,{label:"Border fade",value:m.borderFade,min:0,max:10,step:.1,onChange:b=>p({...m,borderFade:b})}),(0,ge.jsx)(K,{label:"Height",value:m.height,min:-5,max:5,step:.1,onChange:b=>p({...m,height:b})}),(0,ge.jsx)(K,{label:"Size",value:m.size,min:1,max:50,step:.5,onChange:b=>p({...m,size:b})})]}),(0,ge.jsx)(lt,{title:"Environment",open:n.environment,onToggle:()=>l("environment"),children:d?(0,ge.jsxs)(ge.Fragment,{children:[(0,ge.jsx)(K,{label:"Orientation",value:x.rotation,min:0,max:360,step:1,formatValue:b=>`${b}\xB0`,onChange:b=>g({...x,rotation:b})}),(0,ge.jsx)(K,{label:"Brightness",value:x.intensity,min:0,max:3,step:.05,onChange:b=>g({...x,intensity:b})}),(0,ge.jsxs)(lt,{title:"Shadow",open:n.envShadow,onToggle:()=>l("envShadow"),trailing:(0,ge.jsx)(ft,{checked:x.shadowLight.enabled,onChange:b=>g({...x,shadowLight:{...x.shadowLight,enabled:b}}),label:"Toggle environment shadow light"}),disabled:!x.shadowLight.enabled,children:[(0,ge.jsx)(K,{label:"Light intensity",value:x.shadowLight.intensity,min:0,max:20,step:.1,onChange:b=>g({...x,shadowLight:{...x.shadowLight,intensity:b}})}),(0,ge.jsx)(K,{label:"Shadow bias",value:x.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:b=>g({...x,shadowLight:{...x.shadowLight,bias:b}})})]})]}):(0,ge.jsx)(rr,{requiredTier:"starter",feature:"Environment lighting"})})]})}var sd=require("react"),ri=require("lucide-react");var ve=require("react/jsx-runtime");function z_(e){if(!Number.isFinite(e)||e<=0)return"Unknown duration";let t=Math.round(e*10)/10;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function Dv(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function U_(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function zp({config:e,onChange:t,clipDetails:n,currentClip:i,isPlaying:r,time:a,play:o,pause:s,stop:c,setSpeed:l,seek:u}){let[d,h]=(0,sd.useState)(!1),f=(0,sd.useMemo)(()=>new Map(n.map(b=>[b.sourceName,b.duration])),[n]),m=e.animations.clips.filter(b=>!b.hidden),x=e.animations.clips.filter(b=>b.hidden),E=(b,y=e.animations.autoplayClip)=>{t({...e,animations:{clips:b(e.animations.clips),autoplayClip:y}})},w=(b,y)=>{E(M=>M.map(C=>C.sourceName===b?y(C):C))},p=(b,y)=>{w(b,M=>({...M,loopMode:y}))},g=(b,y)=>{let M=U_(y);w(b,C=>({...C,speed:M})),i===b&&l(M)},_=(b,y)=>{w(b,M=>({...M,displayName:y}))},S=b=>{let y=e.animations.autoplayClip===b?null:b;t({...e,animations:{...e.animations,autoplayClip:y}})},T=b=>{E(y=>y.map(M=>M.sourceName===b?{...M,hidden:!0}:M),e.animations.autoplayClip===b?null:e.animations.autoplayClip),i===b&&c()},A=b=>{E(y=>y.map(M=>M.sourceName===b?{...M,hidden:!1}:M))};return e.animations.clips.length===0?(0,ve.jsx)(Oa,{title:"Animations",children:(0,ve.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,ve.jsxs)(Oa,{title:"Animations",children:[m.length===0&&(0,ve.jsx)("div",{className:"se-helperCard",children:(0,ve.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."})}),m.length===0?(0,ve.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,ve.jsx)("div",{className:"se-animationList",children:m.map(b=>{let y=i===b.sourceName,M=f.get(b.sourceName)??0;return(0,ve.jsxs)("article",{className:`se-animationCard ${y?"se-animationCard--active":""}`,children:[(0,ve.jsxs)("div",{className:"se-animationHeader",children:[(0,ve.jsxs)("div",{className:"se-animationHeading",children:[(0,ve.jsxs)("div",{className:"se-animationTitleRow",children:[(0,ve.jsx)("span",{className:"se-animationStatus",children:y?r?"Playing":"Paused":"Ready"}),e.animations.autoplayClip===b.sourceName?(0,ve.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>T(b.sourceName),title:"Remove animation",children:(0,ve.jsx)(ri.Trash2,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,ve.jsx)("input",{className:"se-textInput",value:b.displayName,onChange:N=>_(b.sourceName,N.target.value),placeholder:"Animation name"})]}),(0,ve.jsxs)("div",{className:"se-animationMeta",children:[(0,ve.jsx)("span",{children:z_(M)}),(0,ve.jsx)("span",{children:b.loopMode==="once"?"Play once":"Looping"}),(0,ve.jsxs)("span",{children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationButtonRow",children:[(()=>{let N=y&&r;return(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>N?s():o(b.sourceName),"aria-label":N?"Pause":"Play",title:N?"Pause":"Play",children:N?(0,ve.jsx)(ri.Pause,{size:16}):(0,ve.jsx)(ri.Play,{size:16})})})(),(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:c,disabled:!y,"aria-label":"Stop",title:"Stop",children:(0,ve.jsx)(ri.Square,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-animationSeekRow",children:[(0,ve.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(M,.001),step:.01,value:y?Math.min(a,M):0,disabled:!y||M<=0,onChange:N=>u(Number(N.target.value)),"aria-label":"Seek"}),(0,ve.jsxs)("span",{className:"se-animationSeekTime",children:[Dv(y?Math.min(a,M):0)," / ",Dv(M)]})]}),(0,ve.jsxs)("div",{className:"se-animationGrid",children:[(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,ve.jsxs)("select",{className:"se-select",value:b.loopMode,onChange:N=>p(b.sourceName,N.target.value),children:[(0,ve.jsx)("option",{value:"repeat",children:"Loop"}),(0,ve.jsx)("option",{value:"once",children:"Play Once"})]})]}),(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,ve.jsxs)("span",{className:"se-fieldValue",children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,ve.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:b.speed,onChange:N=>g(b.sourceName,Number(N.target.value))}),(0,ve.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:b.speed,onChange:N=>g(b.sourceName,Number(N.target.value))})]})]})]}),(0,ve.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===b.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>S(b.sourceName),children:e.animations.autoplayClip===b.sourceName?"Disable autoplay":"Set as autoplay"})]},b.sourceName)})}),x.length>0?(0,ve.jsxs)("section",{className:"se-removedAnimations",children:[(0,ve.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>h(b=>!b),children:(0,ve.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ve.jsx)(ri.ChevronDown,{size:16,className:`se-panelChevron ${d?"se-panelChevron--open":""}`}),(0,ve.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",x.length,")"]})]})}),d?(0,ve.jsx)("div",{className:"se-removedAnimationList",children:x.map(b=>(0,ve.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,ve.jsxs)("div",{children:[(0,ve.jsx)("div",{className:"se-removedAnimationName",children:b.displayName||b.sourceName}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>A(b.sourceName),children:"Restore"})]},b.sourceName))}):null]}):null]})}var Up=require("react"),ld=require("lucide-react");var ut=require("react/jsx-runtime");function Vp({config:e,onChange:t}){let[n,i]=(0,Up.useState)(null),[r,a]=(0,Up.useState)({title:"",description:""}),o=e.annotations,s=d=>{i(d),a({title:d.title,description:d.description||""})},c=()=>{if(!n||!r.title.trim())return;let d=o.map(h=>h.id===n.id?{...h,title:r.title.trim(),description:r.description||""}:h);t({...e,annotations:d}),i(null),a({title:"",description:""})},l=d=>{if(window.confirm("Delete this annotation?")){let f=o.filter(m=>m.id!==d).map((m,x)=>({...m,id:x+1}));t({...e,annotations:f}),i(null),a({title:"",description:""})}},u=()=>{i(null),a({title:"",description:""})};return(0,ut.jsxs)(Oa,{title:"Annotations",children:[e.annotations.length===0?(0,ut.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,ut.jsx)("div",{className:"bb-annotationsList",children:e.annotations.map(d=>(0,ut.jsxs)("div",{className:"bb-annotationCard",children:[(0,ut.jsxs)("div",{className:"bb-annotationHeader",children:[(0,ut.jsxs)("div",{className:"bb-annotationBadge",children:["#",d.id]}),(0,ut.jsxs)("div",{className:"bb-annotationActions",children:[(0,ut.jsx)("button",{className:"bb-annotationAction bb-annotationAction--edit",onClick:()=>s(d),title:"Edit annotation",children:(0,ut.jsx)(ld.Pencil,{size:16})}),(0,ut.jsx)("button",{className:"bb-annotationAction bb-annotationAction--delete",onClick:()=>l(d.id),title:"Delete annotation",children:(0,ut.jsx)(ld.Trash2,{size:16})})]})]}),(0,ut.jsx)("div",{className:"bb-annotationTitle",children:d.title}),d.description&&(0,ut.jsx)("div",{className:"bb-annotationDescription",children:d.description}),(0,ut.jsxs)("div",{className:"bb-annotationPosition",children:["Position: [",d.worldPosition[0].toFixed(2),","," ",d.worldPosition[1].toFixed(2),","," ",d.worldPosition[2].toFixed(2),"]"]})]},d.id))}),n&&(0,ut.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:u,children:(0,ut.jsxs)("div",{className:"bb-editAnnotationPopup",onClick:d=>d.stopPropagation(),children:[(0,ut.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,ut.jsx)("h3",{className:"bb-editAnnotationTitle",children:"Edit Annotation"}),(0,ut.jsx)("button",{className:"bb-editAnnotationClose",onClick:u,children:"\xD7"})]}),(0,ut.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,ut.jsxs)("div",{className:"bb-field",children:[(0,ut.jsx)("label",{className:"bb-label",children:"Title"}),(0,ut.jsx)("input",{className:"bb-input",value:r.title,onChange:d=>a({...r,title:d.target.value}),placeholder:"Enter annotation title"})]}),(0,ut.jsxs)("div",{className:"bb-field",children:[(0,ut.jsx)("label",{className:"bb-label",children:"Description"}),(0,ut.jsx)("textarea",{className:"bb-textarea",value:r.description,onChange:d=>a({...r,description:d.target.value}),placeholder:"Enter annotation description",rows:3})]}),(0,ut.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,ut.jsx)("button",{className:"bb-button",onClick:u,children:"Cancel"}),(0,ut.jsx)("button",{className:"bb-button bb-button--primary",onClick:c,disabled:!r.title.trim(),children:"Save"}),(0,ut.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>l(n.id),children:"Delete"})]})]})]})})]})}var ii=require("react"),Mr=require("lucide-react");var Te=require("react/jsx-runtime"),V_={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},za=3.5;function Fp({config:e,onChange:t,cameraState:n,onPreviewWaypoint:i}){let r=e.cinematic??V_,{waypoints:a}=r,o=(0,ii.useCallback)((w,p)=>{if(w.length<2)return 0;let g=0;for(let _=0;_<w.length-1;_++){let S=w[_].segmentDuration??za;g+=S}return p&&w.length>1&&(g+=w[w.length-1].segmentDuration??za),Math.max(g,0)},[]),s=(0,ii.useCallback)(w=>{t({...e,cinematic:{...r,...w}})},[e,r,t]),c=(0,ii.useCallback)(()=>{if(!n)return;let w={position:[...n.position],target:[...n.target],...n.azimuthAngle!=null?{azimuthAngle:n.azimuthAngle}:{},...n.polarAngle!=null?{polarAngle:n.polarAngle}:{},segmentDuration:za},p=[...a,w],g=o(p,r.loop);s({waypoints:p,duration:g})},[n,a,r.loop,o,s]),l=(0,ii.useCallback)(w=>{let p=a.filter((_,S)=>S!==w),g=o(p,r.loop);s({waypoints:p,duration:g})},[a,r.loop,o,s]),u=(0,ii.useCallback)((w,p)=>{let g=w+p;if(g<0||g>=a.length)return;let _=[...a];[_[w],_[g]]=[_[g],_[w]];let S=o(_,r.loop);s({waypoints:_,duration:S})},[a,r.loop,o,s]),d=(0,ii.useCallback)((w,p)=>{let g=a.map((S,T)=>T===w?{...S,...p}:S),_=o(g,r.loop);s({waypoints:g,duration:_})},[a,r.loop,o,s]),[h,f]=(0,ii.useState)(!1),m=a.some(w=>w.segmentDuration!==void 0),x=(0,ii.useCallback)(w=>w>=a.length-1?za:a[w]?.segmentDuration??za,[a]),E=a.length>=2;return(0,Te.jsxs)(Oa,{title:"Cinematic Camera",children:[(0,Te.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,Te.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:c,disabled:!n,title:"Capture the current camera view as a waypoint",children:[(0,Te.jsx)(Mr.Plus,{size:15}),"Add waypoint from current view"]}),(0,Te.jsxs)("div",{className:"se-customizeToggle",children:[(0,Te.jsxs)("label",{className:"se-toggleLabel",children:[(0,Te.jsx)("input",{type:"checkbox",checked:h,onChange:w=>f(w.target.checked)}),(0,Te.jsx)(Mr.Settings,{size:14}),(0,Te.jsx)("span",{children:"Customize durations between waypoints"})]}),h&&(0,Te.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",za,"s"]})]}),a.length===0?(0,Te.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,Te.jsxs)(Te.Fragment,{children:[(0,Te.jsx)("div",{className:"se-waypointList",children:a.map((w,p)=>{let g=x(p),_=p===a.length-1,S=w.segmentDuration!==void 0&&w.segmentDuration!==za;return(0,Te.jsxs)("div",{children:[(0,Te.jsxs)("div",{className:"se-waypointCard",children:[(0,Te.jsx)("div",{className:"se-waypointBadge",children:p+1}),(0,Te.jsxs)("div",{className:"se-waypointBody",children:[(0,Te.jsxs)("div",{className:"se-waypointCoords",children:["pos [",w.position.map(T=>T.toFixed(1)).join(", "),"]"]}),(0,Te.jsxs)("div",{className:"se-waypointCoords",children:["look [",w.target.map(T=>T.toFixed(1)).join(", "),"]"]}),h&&!_&&(0,Te.jsxs)("div",{className:`se-customBadge ${S?"se-customBadge--custom":"se-customBadge--default"}`,children:[g.toFixed(1),"s",!S&&" (default)"]})]}),(0,Te.jsxs)("div",{className:"se-waypointActions",children:[(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>i?.(w),title:"Fly camera to this waypoint",disabled:!i,children:(0,Te.jsx)(Mr.MapPin,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>u(p,-1),title:"Move up",disabled:p===0,children:(0,Te.jsx)(Mr.ArrowUp,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>u(p,1),title:"Move down",disabled:_,children:(0,Te.jsx)(Mr.ArrowDown,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>l(p),title:"Delete waypoint",children:(0,Te.jsx)(Mr.Trash2,{size:15})})]})]}),h&&!_&&(0,Te.jsxs)("div",{className:"se-segmentBetween",children:[(0,Te.jsxs)("div",{className:"se-segmentLabel",children:[p+1," \u2192 ",p+2,!w.segmentDuration&&" (default)"]}),(0,Te.jsxs)("div",{className:"se-segmentControls",children:[(0,Te.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,Te.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:g,onChange:T=>{let A=parseFloat(T.target.value);d(p,{segmentDuration:A})}}),(0,Te.jsxs)("span",{className:"se-segmentValue",children:[g.toFixed(1),"s"]}),(0,Te.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(T=>(0,Te.jsxs)("button",{className:"se-presetButton",onClick:()=>d(p,{segmentDuration:T}),children:[T,"s"]},`preset-${p}-${T}`)),(0,Te.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let T=a.map((b,y)=>{if(y===p){let{segmentDuration:M,...C}=b;return C}return b}),A=o(T,r.loop);s({waypoints:T,duration:A})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${p}`)})}),(0,Te.jsxs)("div",{className:"se-totalDuration",children:[(0,Te.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,Te.jsx)("span",{className:"se-totalValue",children:E?(r.duration??o(a,r.loop)).toFixed(1)+"s":"-"}),!E&&(0,Te.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,Te.jsx)(xt,{label:"Enable cinematic camera",checked:r.enabled,onChange:w=>s({enabled:w})}),(0,Te.jsx)(xt,{label:"Loop",checked:r.loop,onChange:w=>{let p=w,g=o(a,p);s({loop:p,duration:g})}}),(0,Te.jsx)(xt,{label:"Auto-play on load",checked:r.autoPlay,onChange:w=>s({autoPlay:w})}),!h&&E&&(0,Te.jsx)(K,{label:"Duration",value:r.duration??o(a,r.loop),min:4,max:120,step:1,formatValue:w=>`${w}s`,onChange:w=>s({duration:w})})]})}var Cr=require("lucide-react");var hn=require("react/jsx-runtime"),F_=[{label:"General",icon:(0,hn.jsx)(Cr.Box,{})},{label:"Lighting",icon:(0,hn.jsx)(Cr.Spotlight,{})},{label:"Animations",icon:(0,hn.jsx)(Cr.Clapperboard,{})},{label:"Post Processing",icon:(0,hn.jsx)(Cr.Sparkles,{})},{label:"Annotations",icon:(0,hn.jsx)(Cr.MessageSquareText,{})},{label:"Cinematic",icon:(0,hn.jsx)(Cr.Video,{})}],Bv={currentClip:null,isPlaying:!1,time:0,duration:0,play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}};function jp({config:e,onChange:t,activeSubTab:n,onActiveSubTabChange:i,cameraState:r=null,onPreviewWaypoint:a,animationClipDetails:o=[],animationPlayback:s=Bv}){let[c,l]=(0,cd.useState)("General"),u=n??c,d=s??Bv,{tier:h}=_r(),f=Ci(h,"starter"),m=Ci(h,"growth");(0,cd.useEffect)(()=>{n!==void 0&&l(n)},[n]);let x=E=>{n===void 0&&l(E),i?.(E)};return(0,hn.jsxs)("div",{className:"se-tabContent",children:[(0,hn.jsx)("div",{className:"se-subTabRow",children:F_.map(E=>(0,hn.jsx)("button",{type:"button",title:E.label,className:`se-subTab ${u===E.label?"se-subTab--active":""}`,onClick:()=>x(E.label),children:E.icon},E.label))}),u==="General"&&(0,hn.jsx)(Np,{config:e,onChange:t}),u==="Lighting"&&(0,hn.jsx)(Ip,{config:e,onChange:t}),u==="Animations"&&(f?(0,hn.jsx)(zp,{config:e,onChange:t,clipDetails:o,currentClip:d.currentClip,isPlaying:d.isPlaying,time:d.time,duration:d.duration,play:d.play,pause:d.pause,stop:d.stop,setSpeed:d.setSpeed,seek:d.seek}):(0,hn.jsx)(rr,{requiredTier:"starter",feature:"Animation configuration"})),u==="Post Processing"&&(m?(0,hn.jsx)(Op,{config:e,onChange:t}):(0,hn.jsx)(rr,{requiredTier:"growth",feature:"Post-processing effects"})),u==="Annotations"&&(f?(0,hn.jsx)(Vp,{config:e,onChange:t}):(0,hn.jsx)(rr,{requiredTier:"starter",feature:"Annotations"})),u==="Cinematic"&&(f?(0,hn.jsx)(Fp,{config:e,onChange:t,cameraState:r,onPreviewWaypoint:a}):(0,hn.jsx)(rr,{requiredTier:"starter",feature:"Cinematic camera"}))]})}var Do=require("lucide-react"),Kt=require("react/jsx-runtime");function Nv({title:e,trailing:t,children:n,disabled:i,open:r,onToggle:a,tooltip:o}){let s=o?`${o}`:e;return(0,Kt.jsxs)("div",{className:"bb-materialPanel",children:[(0,Kt.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:a,"aria-expanded":r,title:s,children:[(0,Kt.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,Kt.jsx)(Do.ChevronDown,{size:14,className:`bb-materialPanelChevron ${r?"bb-materialPanelChevron--open":""}`}),(0,Kt.jsx)("span",{className:"bb-materialPanelTitle",children:e}),o?(0,Kt.jsx)("span",{className:"bb-materialPanelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Kt.jsx)(Do.Info,{size:12})}):null]}),t?(0,Kt.jsx)("div",{onClick:c=>c.stopPropagation(),children:t}):null]}),r?(0,Kt.jsx)("div",{className:"bb-materialPanelBody",style:i?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function ir({title:e,open:t,onToggle:n,trailing:i,children:r,tooltip:a}){let o=a?`${e}: ${a}`:e;return(0,Kt.jsxs)("div",{className:"bb-section",children:[(0,Kt.jsxs)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:n,"aria-expanded":t,title:o,children:[(0,Kt.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,Kt.jsx)(Do.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,Kt.jsx)("h2",{className:"bb-sectionTitle",children:e}),a?(0,Kt.jsx)("span",{className:"bb-sectionHelp",title:o,"aria-label":o,role:"img",onClick:s=>s.stopPropagation(),children:(0,Kt.jsx)(Do.Info,{size:13})}):null]}),i?(0,Kt.jsx)("span",{onClick:s=>s.stopPropagation(),children:i}):null]}),t?(0,Kt.jsx)("div",{className:"bb-sectionBody",children:r}):null]})}function Ov({checked:e,onChange:t,label:n}){return(0,Kt.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Kt.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Kt.jsx)("span",{className:"se-switchTrack",children:(0,Kt.jsx)("span",{className:"se-switchThumb"})})]})}var Hp=require("react");var dd=["front","back","double"],ud=["normal","additive"];var pd=require("react/jsx-runtime");function cr({panelKey:e,title:t,tooltip:n,toggleLabel:i,controls:r,children:a,requiredTier:o}){let{openMaterialPanels:s,materialPanelEnabled:c,onToggleMaterialPanel:l,onSetMaterialPanelState:u}=r,d=o?.locked??!1;return(0,pd.jsx)(Nv,{title:t,tooltip:n,disabled:d||!c[e],open:s[e],onToggle:()=>l(e),trailing:(0,pd.jsx)(Ov,{checked:!d&&c[e],onChange:d?()=>{}:h=>u(e,h),label:i??`Toggle ${t}`}),children:d&&o?(0,pd.jsx)(rr,{requiredTier:o.tier,feature:t}):a})}var al=require("react"),hd=require("react-colorful"),Iv=require("lucide-react");var yt=require("react/jsx-runtime");function wn({label:e,value:t,placeholder:n,onChange:i}){let r=(0,al.useRef)(null);return(0,yt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,yt.jsx)("label",{className:"bb-label",children:e}),(0,yt.jsxs)("div",{className:"bb-fileField",children:[(0,yt.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:n,value:t,onChange:a=>{let o=a.target.value;!o&&t&&ou(t),i(o)}}),(0,yt.jsx)("button",{type:"button",className:"bb-fileFieldButton",onClick:()=>r.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,yt.jsx)(Iv.FileUp,{size:20})}),(0,yt.jsx)("input",{ref:r,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:a=>{let o=a.target.files?.[0];if(!o)return;let s=km(o);t&&t!==s&&ou(t),Nm(s,URL.createObjectURL(o)),i(s),a.target.value=""}})]})]})}function Ua({label:e,value:t,fallback:n="#ffffff",onChange:i}){let[r,a]=(0,al.useState)(!1),o=t||n,s=(0,al.useRef)(null);return(0,yt.jsxs)("div",{className:"bb-field",children:[(0,yt.jsx)("span",{className:"bb-label",children:e}),(0,yt.jsx)("div",{className:"se-fieldInline",children:(0,yt.jsx)("span",{ref:s,style:{display:"inline-flex"},children:(0,yt.jsx)(hd.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>a(c=>!c),style:{background:o,color:Lo(o)},color:o,onChange:i})})}),r?(0,yt.jsx)(Bp,{anchorRef:s,onClose:()=>a(!1),children:(0,yt.jsx)(hd.HexColorPicker,{color:o,onChange:i})}):null]})}function ol({label:e,checked:t,onChange:n}){return(0,yt.jsxs)("label",{className:"bb-checkbox",children:[(0,yt.jsx)("input",{type:"checkbox",checked:t,onChange:i=>n(i.target.checked)}),e]})}function zv({label:e,value:t,min:n,max:i,step:r,placeholder:a,onChange:o}){return(0,yt.jsxs)("div",{className:"bb-field",children:[(0,yt.jsx)("label",{className:"bb-label",children:e}),(0,yt.jsx)("input",{className:"bb-input",type:"number",min:n,max:i,step:r,placeholder:a,value:t??"",onChange:s=>o(s.target.value===""?void 0:Number(s.target.value))})]})}function Bo({label:e,value:t,options:n,onChange:i}){return(0,yt.jsxs)("div",{className:"bb-field",children:[(0,yt.jsx)("label",{className:"bb-label",children:e}),(0,yt.jsx)("select",{className:"bb-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,yt.jsx)("option",{value:r,children:r},r))})]})}function Zt({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,yt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,yt.jsx)("label",{className:"bb-label",children:e}),(0,yt.jsxs)("div",{className:"bb-sliderField",children:[(0,yt.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:n,max:i,step:r,value:t??n,onChange:s=>a(Number(s.target.value))}),(0,yt.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:n,max:i,step:r,value:t??"",onChange:s=>a(s.target.value===""?void 0:Number(s.target.value))})]})]})}var Z=require("react/jsx-runtime");function Uv({selectedItem:e,selectedMaterial:t,pbrWorkflow:n,onPbrWorkflowChange:i,openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s,updateSelectedMaterial:c,setSelectedTexturePath:l}){let u={openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s},{tier:d}=_r(),h=Ci(d,"starter"),f={tier:"starter",locked:!h},[m,x]=(0,Hp.useState)("roughness"),[E,w]=(0,Hp.useState)("factor");return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(cr,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:u,children:h?(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Bo,{label:"Workflow",value:n,options:["metalness","specular"],onChange:i}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.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,Z.jsx)(wn,{label:n==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:p=>l(e,"texture",p)}),(0,Z.jsx)(Ua,{label:n==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:p=>c(e,g=>({...g,baseColor:p}))}),n==="metalness"?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(Zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,metalness:p}))}),(0,Z.jsx)(wn,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:p=>l(e,"metalnessMap",p)})]}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(Zt,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,specularIntensity:p}))}),(0,Z.jsx)(Ua,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:p=>c(e,g=>({...g,specularColor:p}))}),(0,Z.jsx)(wn,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:p=>l(e,"specularIntensityMap",p)}),(0,Z.jsx)(wn,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:p=>l(e,"specularColorMap",p)})]}),(0,Z.jsx)(Zt,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,reflectivity:p}))})]}):(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Ua,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:p=>c(e,g=>({...g,baseColor:p}))}),(0,Z.jsx)(Zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,metalness:p}))}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.jsx)(rr,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,Z.jsx)(cr,{panelKey:"roughness",requiredTier:f,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Bo,{label:"Mode",value:m,options:["roughness","glossiness"],onChange:x}),(0,Z.jsx)("div",{className:"bb-field bb-field--full",children:(0,Z.jsx)("p",{className:"bb-note",style:{margin:0},children:m==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),m==="roughness"?(0,Z.jsx)(Zt,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,roughness:p}))}):(0,Z.jsx)(Zt,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,roughness:p===void 0?void 0:1-p}))}),(0,Z.jsx)(wn,{label:m==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:p=>l(e,"roughnessMap",p)})]})}),(0,Z.jsx)(cr,{panelKey:"emission",requiredTier:f,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Ua,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:p=>c(e,g=>({...g,emissive:p}))}),(0,Z.jsx)(Zt,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:p=>c(e,g=>({...g,emissiveIntensity:p}))}),(0,Z.jsx)(wn,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:p=>l(e,"emissiveMap",p)})]})}),(0,Z.jsx)(cr,{panelKey:"opacity",requiredTier:f,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Zt,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,opacity:p}))}),(0,Z.jsx)(Zt,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,alphaTest:p}))}),(0,Z.jsx)(wn,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:p=>l(e,"alphaMap",p)}),(0,Z.jsx)(Bo,{label:"Blending mode",value:t?.blendingMode??"normal",options:ud,onChange:p=>c(e,g=>({...g,blendingMode:p}))}),(0,Z.jsxs)("div",{className:"bb-field",children:[(0,Z.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,Z.jsx)("div",{className:"bb-checkboxRow",children:(0,Z.jsx)(ol,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:p=>c(e,g=>({...g,alphaHash:p}))})})]}),(0,Z.jsxs)("div",{className:"bb-field",children:[(0,Z.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,Z.jsx)("div",{className:"bb-checkboxRow",children:(0,Z.jsx)(ol,{label:"Use dithering",checked:t?.dithering??!1,onChange:p=>c(e,g=>({...g,dithering:p}))})})]})]})}),(0,Z.jsxs)(cr,{panelKey:"normalBump",requiredTier:f,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:u,children:[(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(wn,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:p=>l(e,"normalMap",p)}),(0,Z.jsx)(Zt,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:p=>c(e,g=>({...g,normalScale:p}))}),(0,Z.jsx)(wn,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:p=>l(e,"bumpMap",p)}),(0,Z.jsx)(Zt,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:p=>c(e,g=>({...g,bumpScale:p}))})]}),(0,Z.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Z.jsx)(ol,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:p=>c(e,g=>({...g,flipNormalY:p}))})})]}),(0,Z.jsx)(cr,{panelKey:"displacement",requiredTier:f,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(wn,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:p=>l(e,"displacementMap",p)}),(0,Z.jsx)(Zt,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:p=>c(e,g=>({...g,displacementScale:p}))}),(0,Z.jsx)(Zt,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:p=>c(e,g=>({...g,displacementBias:p}))})]})}),(0,Z.jsx)(cr,{panelKey:"ao",requiredTier:f,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(wn,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:p=>l(e,"aoMap",p)}),(0,Z.jsx)(Zt,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:p=>c(e,g=>({...g,aoMapIntensity:p}))})]})}),(0,Z.jsxs)(cr,{panelKey:"clearcoat",requiredTier:f,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:u,children:[(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(wn,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:p=>l(e,"clearcoatMap",p)}),(0,Z.jsx)(Zt,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,clearcoat:p}))}),(0,Z.jsx)(wn,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:p=>l(e,"clearcoatRoughnessMap",p)}),(0,Z.jsx)(Zt,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,clearcoatRoughness:p}))}),(0,Z.jsx)(wn,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:p=>l(e,"clearcoatNormalMap",p)}),(0,Z.jsx)(Zt,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:p=>c(e,g=>({...g,clearcoatNormalScale:p}))})]}),(0,Z.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Z.jsx)(ol,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:p=>c(e,g=>({...g,flipClearcoatNormalY:p}))})})]}),(0,Z.jsx)(cr,{panelKey:"sheen",requiredTier:f,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Zt,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,sheen:p}))}),(0,Z.jsx)(Ua,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:p=>c(e,g=>({...g,sheenColor:p}))}),(0,Z.jsx)(wn,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:p=>l(e,"sheenColorMap",p)}),(0,Z.jsx)(Zt,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,sheenRoughness:p}))}),(0,Z.jsx)(wn,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:p=>l(e,"sheenRoughnessMap",p)})]})}),(0,Z.jsx)(cr,{panelKey:"anisotropy",requiredTier:f,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Zt,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,anisotropy:p}))}),(0,Z.jsx)(Bo,{label:"Tilt direction",value:E,options:["factor","texture"],onChange:w}),E==="factor"?(0,Z.jsx)(Zt,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:p=>c(e,g=>({...g,anisotropyRotation:p}))}):(0,Z.jsx)(wn,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:p=>l(e,"anisotropyMap",p)})]})}),(0,Z.jsx)(cr,{panelKey:"transmission",requiredTier:f,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:u,children:(0,Z.jsxs)("div",{className:"bb-grid",children:[(0,Z.jsx)(Zt,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:p=>c(e,g=>({...g,transmission:p}))}),(0,Z.jsx)(wn,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:p=>l(e,"transmissionMap",p)}),(0,Z.jsx)(Zt,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:p=>c(e,g=>({...g,thickness:p}))}),(0,Z.jsx)(wn,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:p=>l(e,"thicknessMap",p)}),(0,Z.jsx)(Ua,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:p=>c(e,g=>({...g,attenuationColor:p}))}),(0,Z.jsx)(zv,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:p=>c(e,g=>({...g,attenuationDistance:p}))})]})}),(0,Z.jsx)(cr,{panelKey:"faces",requiredTier:f,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:u,children:(0,Z.jsx)("div",{className:"bb-grid",children:(0,Z.jsx)(Bo,{label:"Side",value:t?.side??"front",options:dd,onChange:p=>c(e,g=>({...g,side:p}))})})})]})}var Vv=[{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 No=require("react/jsx-runtime");function Fv({disabled:e,onApply:t}){return(0,No.jsx)("div",{className:"bb-presetGallery",children:Vv.map(n=>(0,No.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${n.label} preset`,onClick:()=>t(n.material),children:[(0,No.jsx)("span",{className:"bb-presetSwatchColor",style:{background:n.swatch}}),(0,No.jsx)("span",{className:"bb-presetSwatchLabel",children:n.label})]},n.id))})}var Oo=require("react"),Ki=require("lucide-react"),Hr=require("react/jsx-runtime");function Gp({disabled:e,exporting:t,onExportJson:n,onExportTs:i}){let[r,a]=(0,Oo.useState)(!1),o=(0,Oo.useRef)(null);return(0,Oo.useEffect)(()=>{if(!r)return;let s=c=>{o.current?.contains(c.target)||a(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[r]),(0,Hr.jsxs)("div",{className:"bb-exportMenuWrapper",ref:o,children:[(0,Hr.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>a(s=>!s),title:"Export",children:[(0,Hr.jsx)(Ki.Download,{size:14}),t?"Exporting\u2026":"Export",(0,Hr.jsx)(Ki.ChevronDown,{size:12})]}),r&&(0,Hr.jsxs)("div",{className:"bb-exportMenu",children:[(0,Hr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),n()},children:[(0,Hr.jsx)(Ki.FileJson,{size:14}),"JSON"]}),(0,Hr.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),i()},children:[(0,Hr.jsx)(Ki.FileCode2,{size:14}),"TypeScript"]})]})]})}var Tr=require("react/jsx-runtime");function jv({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,idError:a}){return(0,Tr.jsx)(ir,{title:"Identity",open:n,onToggle:i,children:(0,Tr.jsxs)("div",{className:"bb-grid",children:[(0,Tr.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Tr.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,Tr.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,Tr.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,Tr.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Tr.jsx)("label",{className:"bb-label",children:"ID"}),(0,Tr.jsx)("input",{className:`bb-input ${a?"bb-input--error":""}`,value:t.id,onChange:o=>r(e,s=>({...s,id:o.target.value}))}),a?(0,Tr.jsx)("span",{className:"bb-status bb-status--error",children:a}):null]})]})})}var sl=require("react");var Hv=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],Gv=["normal","hidden","selected","disabled"];var Pt=require("react/jsx-runtime");function Wv({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,sl.useState)(t.group??""),[s,c]=(0,sl.useState)(t.tags?.join(", ")??"");(0,sl.useEffect)(()=>{o(t.group??""),c(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let l=()=>{r(e,d=>({...d,group:a.trim()||void 0}))},u=()=>{let d=[...new Set(s.split(",").map(h=>h.trim()).filter(Boolean))];r(e,h=>({...h,tags:d.length>0?d:void 0}))};return(0,Pt.jsxs)(ir,{title:"Basics",open:n,onToggle:i,children:[(0,Pt.jsxs)("div",{className:"bb-grid",children:[(0,Pt.jsxs)("div",{className:"bb-field",children:[(0,Pt.jsx)("label",{className:"bb-label",children:"Label"}),(0,Pt.jsx)("input",{className:"bb-input",value:t.label??"",onChange:d=>r(e,h=>({...h,label:d.target.value}))})]}),(0,Pt.jsxs)("div",{className:"bb-field",children:[(0,Pt.jsx)("label",{className:"bb-label",children:"Type"}),(0,Pt.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type,onChange:d=>r(e,h=>({...h,type:d.target.value}))}),(0,Pt.jsx)("datalist",{id:"binding-type-suggestions",children:Hv.map(d=>(0,Pt.jsx)("option",{value:d},d))})]}),(0,Pt.jsxs)("div",{className:"bb-field",children:[(0,Pt.jsx)("label",{className:"bb-label",children:"Status"}),(0,Pt.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:d=>r(e,h=>({...h,status:d.target.value})),children:Gv.map(d=>(0,Pt.jsx)("option",{value:d,children:d},d))})]}),(0,Pt.jsxs)("div",{className:"bb-field",children:[(0,Pt.jsx)("label",{className:"bb-label",children:"Group"}),(0,Pt.jsx)("input",{className:"bb-input",placeholder:"paint",value:a,onChange:d=>o(d.target.value),onBlur:l,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]}),(0,Pt.jsxs)("div",{className:"bb-field",children:[(0,Pt.jsx)("label",{className:"bb-label",children:"Tags"}),(0,Pt.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:s,onChange:d=>c(d.target.value),onBlur:u,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]})]}),(0,Pt.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,Pt.jsxs)("label",{className:"bb-checkbox",children:[(0,Pt.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:d=>r(e,h=>({...h,selectable:d.target.checked}))}),"selectable"]}),(0,Pt.jsxs)("label",{className:"bb-checkbox",children:[(0,Pt.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:d=>r(e,h=>({...h,hoverable:d.target.checked}))}),"hoverable"]}),(0,Pt.jsxs)("label",{className:"bb-checkbox",children:[(0,Pt.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:d=>r(e,h=>({...h,visible:d.target.checked}))}),"visible"]})]})]})}var fd=require("react");var Va=[{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."}],md="__custom__";function ll(e){return Va.find(t=>t.id===e)}var qR=Va.filter(e=>e.handling==="viewer").map(e=>e.id),j_=new Set(["","New Action",...Va.map(e=>e.label)]);function Wp(e){return j_.has(e.trim())}function Xv(e,t){let n=Array.from({length:t.length+1},(i,r)=>r);for(let i=1;i<=e.length;i+=1){let r=[i];for(let a=1;a<=t.length;a+=1){let o=n[a-1]+(e[i-1]===t[a-1]?0:1);r[a]=Math.min(r[a-1]+1,n[a]+1,o)}n=r}return n[t.length]}function qv(e){if(ll(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let n=t.replace(/[^a-z0-9]/g,""),i=null;for(let r of Va){let a=Math.min(Xv(t,r.id),Xv(n,r.id.replace(/[^a-z0-9]/g,"")));(!i||a<i.distance)&&(i={id:r.id,distance:a})}return i&&i.distance<=2?i.id:null}var et=require("react/jsx-runtime"),Yv=Va.filter(e=>e.handling==="viewer"),H_=Va.filter(e=>e.handling==="host");function $v({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,fd.useState)(new Set);(0,fd.useEffect)(()=>{o(new Set)},[e]);let s=t.actions??[],c=(d,h)=>r(e,f=>({...f,actions:(f.actions??[]).map((m,x)=>x===d?h(m):m)})),l=d=>{r(e,h=>({...h,actions:(h.actions??[]).filter((f,m)=>m!==d)})),o(h=>{let f=new Set;return h.forEach(m=>{m<d?f.add(m):m>d&&f.add(m-1)}),f})},u=(d,h)=>o(f=>{let m=new Set(f);return h?m.add(d):m.delete(d),m});return(0,et.jsxs)(ir,{title:"Actions",open:n,onToggle:i,children:[(0,et.jsx)("div",{className:"bb-actionList",children:s.map((d,h)=>{let f=ll(d.id),m=a.has(h)||!f,x=d.id.trim(),E=f?null:qv(d.id),w=x.length>0&&s.some((p,g)=>g!==h&&p.id.trim()===x);return(0,et.jsxs)("div",{className:"bb-actionCard",children:[(0,et.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,et.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",h+1]}),(0,et.jsx)("div",{className:"bb-actionCardMeta",children:d.type})]}),(0,et.jsxs)("div",{className:"bb-actionGrid",children:[(0,et.jsxs)("div",{className:"bb-field",children:[(0,et.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,et.jsxs)("select",{className:"bb-select",value:m?md:d.id,onChange:p=>{let g=p.target.value;if(g===md){u(h,!0);return}u(h,!1);let _=ll(g);c(h,S=>({...S,id:g,label:_&&Wp(S.label)?_.label:S.label}))},children:[(0,et.jsx)("optgroup",{label:"Handled by the viewer",children:Yv.map(p=>(0,et.jsx)("option",{value:p.id,children:p.id},p.id))}),(0,et.jsx)("optgroup",{label:"Handled by your app",children:H_.map(p=>(0,et.jsx)("option",{value:p.id,children:p.id},p.id))}),(0,et.jsx)("option",{value:md,children:"Custom\u2026"})]})]}),m?(0,et.jsxs)("div",{className:"bb-field",children:[(0,et.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,et.jsx)("input",{className:"bb-input",value:d.id,placeholder:"open-datasheet",onChange:p=>{u(h,!0),c(h,g=>({...g,id:p.target.value}))}})]}):null,(0,et.jsxs)("div",{className:"bb-field",children:[(0,et.jsx)("label",{className:"bb-label",children:"Label"}),(0,et.jsx)("input",{className:"bb-input",value:d.label,onChange:p=>c(h,g=>({...g,label:p.target.value}))})]}),f?(0,et.jsx)("span",{className:"bb-note",children:f.description}):x.length===0?(0,et.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,et.jsxs)("span",{className:"bb-note",style:{color:"#fcd34d"},children:["Unrecognised ID, the viewer has no built-in behavior for it. Add declarative effects and execute them with useViewerActions, or handle it in onAction.",E?(0,et.jsxs)(et.Fragment,{children:[" Did you mean ",(0,et.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{u(h,!1);let p=ll(E);c(h,g=>({...g,id:E,label:p&&Wp(g.label)?p.label:g.label}))},children:E}),"?"]}):null]}),d.effects?.length?(0,et.jsxs)("span",{className:"bb-note",children:[d.effects.length," declarative effect",d.effects.length===1?"":"s",", execute with useViewerActions."]}):null,w?(0,et.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,et.jsx)("div",{className:"bb-actionFooter",children:(0,et.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>l(h),children:"Remove Action"})})]},h)})}),(0,et.jsx)("div",{style:{marginTop:10},children:(0,et.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let d=Yv.find(h=>!s.some(f=>f.id===h.id));r(e,h=>({...h,actions:[...h.actions??[],{id:d?.id??"",label:d?.label??"New Action",type:"command"}]})),d||u(s.length,!0)},children:"Add Action"})})]})}var gd=require("lucide-react");var At=require("react/jsx-runtime");function Kv({selectedBinding:e,open:t,onToggle:n,cameraState:i,formattedCameraState:r,savedCameraPosition:a,onSaveCameraPosition:o,onGoToSavedCamera:s,onClearSavedCamera:c,onResetView:l,onFitScene:u}){return(0,At.jsxs)(ir,{title:"Camera Position",open:t,onToggle:n,children:[(0,At.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,At.jsx)("span",{className:"bb-cameraLiveBadge",children:"LIVE"}),(0,At.jsxs)("div",{className:"se-waypointBody",children:[(0,At.jsx)("div",{className:"bb-cameraWaypointLabel",children:"Current view"}),i?(0,At.jsxs)(At.Fragment,{children:[(0,At.jsxs)("div",{className:"se-waypointCoords",children:["pos ",r?.position]}),(0,At.jsxs)("div",{className:"se-waypointCoords",children:["look ",r?.target]})]}):(0,At.jsx)("div",{className:"se-waypointCoords",children:"Move the camera to see live position"})]})]}),(0,At.jsxs)("div",{className:"bb-cameraControls bb-cameraControls--centered",children:[(0,At.jsx)("button",{type:"button",className:"bb-button bb-button--primary",onClick:o,disabled:!i,children:"Save"}),(0,At.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:l,children:"Reset View"}),(0,At.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:u,children:"Fit Scene"})]}),a?.position&&a?.target&&(0,At.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,At.jsx)("span",{className:"bb-cameraSavedBadge",children:"SAVED"}),(0,At.jsxs)("div",{className:"se-waypointBody",children:[(0,At.jsxs)("div",{className:"bb-cameraWaypointLabel",children:["For ",e.label]}),(0,At.jsxs)("div",{className:"se-waypointCoords",children:["pos [",a.position.map(d=>d.toFixed(1)).join(", "),"]"]}),(0,At.jsxs)("div",{className:"se-waypointCoords",children:["look [",a.target.map(d=>d.toFixed(1)).join(", "),"]"]})]}),(0,At.jsxs)("div",{className:"se-waypointActions",children:[(0,At.jsx)("button",{className:"se-waypointAction",onClick:s,title:"Fly camera to the saved position",children:(0,At.jsx)(gd.MapPin,{size:15})}),(0,At.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:c,title:"Delete saved position",children:(0,At.jsx)(gd.Trash2,{size:15})})]})]}),(0,At.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 Io=require("react"),bd=require("lucide-react");var Je=require("react/jsx-runtime"),Zv=["X","Y","Z"];var G_=.1;function Xp(e){let t=e%360;return t<0?t+360:t}function Jv(e){return Xp(e*180/Math.PI)}function Qv(e){return e*Math.PI/180}function W_(e,t,n){let i=[...e],r=Jv(e[t]);return i[t]=Qv(Xp(r+n)),i}function e0({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=l=>Number(l.toFixed(3)),ariaLabel:s,className:c}){let l=o(e),[u,d]=(0,Io.useState)(String(l)),h=(0,Io.useRef)(!1);return(0,Io.useLayoutEffect)(()=>{h.current||d(String(l))},[l]),(0,Je.jsx)("input",{type:"number",className:c,step:i,min:t===-1/0?void 0:t,max:n===1/0?void 0:n,value:u,disabled:r,"aria-label":s,onFocus:()=>{h.current=!0},onChange:f=>{let m=f.target.value;if(d(m),m===""||m==="-")return;let x=Number(m);if(Number.isFinite(x)){let E=Math.max(t,Math.min(n,x));a(E)}},onBlur:()=>{h.current=!1,d(String(o(e)))}})}function X_({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=c=>Number(c.toFixed(3)),label:s}){return(0,Je.jsx)("div",{className:"bb-transformAxesGrid",children:Zv.map((c,l)=>(0,Je.jsxs)("div",{className:"bb-transformAxis",children:[(0,Je.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:c}),(0,Je.jsx)("div",{className:"bb-transformAxisControl",children:(0,Je.jsx)(e0,{className:"se-numberInput bb-transformNumberInput",step:i,min:t,max:n,value:e[l],disabled:r,formatValue:o,ariaLabel:`${c} ${s?.toLowerCase()||""}`,onChange:u=>{let d=[...e];d[l]=u,a(d)}})})]},c))})}function t0({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,moveModeEnabled:a,onToggleMoveMode:o,transformSpace:s,onTransformSpaceChange:c,originalTransform:l}){let u=t.transform?.rotation??l?.rotation??[0,0,0],d=t.transform?.position??l?.position??[0,0,0],h=(p,g)=>{let _=p.transform?.rotation??l?.rotation??[0,0,0],S=p.transform?.position??l?.position??[0,0,0],T=p.transform?.scale??l?.scale??[1,1,1],A=l?.pivotLocal??[0,0,0],b=Ib(S,_,g,T,A,l?.rotationOrder??"XYZ");return{...p,transform:{...p.transform,position:b,rotation:g}}},f=(p,g)=>{e&&r(e,_=>{let S=_.transform?.rotation??l?.rotation??[0,0,0],T=W_(S,p,g);return h(_,T)})},m=(p,g)=>{e&&r(e,_=>{let T=[..._.transform?.rotation??l?.rotation??[0,0,0]];return T[p]=Qv(Xp(g)),h(_,T)})},x=(p,g)=>{e&&r(e,_=>{let T=[..._.transform?.position??l?.position??[0,0,0]];return T[p]=g,{..._,transform:{..._.transform,position:T}}})},E=(p,g)=>{e&&x(p,d[p]+g)},w=()=>{!e||!l||r(e,p=>{let g={...p.transform};return delete g.position,delete g.rotation,{...p,transform:Object.keys(g).length>0?g:void 0}})};return(0,Je.jsxs)(ir,{title:"Move & Rotate",open:n,onToggle:i,tooltip:"Enable the transform gizmo to move or rotate the selected mesh on any axis. Rotation uses the object's visible center while exported position and rotation remain local GLTF transforms.",children:[(0,Je.jsxs)("div",{className:"se-field",children:[(0,Je.jsxs)("div",{className:"se-fieldLabel",children:[(0,Je.jsxs)("span",{children:[(0,Je.jsx)(bd.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:a,onChange:p=>o(p.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(p=>(0,Je.jsx)("button",{type:"button",className:`se-segmentedOption ${s===p?"se-segmentedOption--active":""}`,onClick:()=>c(p),children:p},p))})]}),(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:Zv.map((p,g)=>{let _=Math.round(Jv(u[g]));return(0,Je.jsxs)("div",{className:"bb-transformAxis",children:[(0,Je.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:p}),(0,Je.jsx)("div",{className:"bb-transformAxisControl",children:(0,Je.jsx)(e0,{className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:_,disabled:!e,formatValue:S=>Math.round(S),ariaLabel:`${p} rotation in degrees`,onChange:S=>m(g,S)})})]},p)})})]}),(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)(X_,{value:d,min:-1/0,max:1/0,step:G_,disabled:!e,label:"position",onChange:p=>{e&&r(e,g=>({...g,transform:{...g.transform,position:p}}))}})]}),(0,Je.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!l,onClick:w,title:"Restore this node's position and rotation to what they were in the original model",children:[(0,Je.jsx)(bd.RotateCcw,{size:14}),"Restore original position & rotation"]})]})}var Fa=require("react");function q_(e){return e.trim().replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[_\s]+/g,"-").replace(/[^a-zA-Z0-9-]/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"").toLowerCase()}function qp(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_-]+/g," ").replace(/\s+/g," ").trim().replace(/\b\w/g,t=>t.toUpperCase())}function Y_(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 $_(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 K_(e){let t=Y_(e);return{id:q_(e),modelObjectId:e,type:t,label:qp(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:$_(t),metrics:{},metadata:{}}}function vd(e){return Object.fromEntries(e.map(t=>[t,K_(t)]))}function Yp(e){let{nodesById:t}=co(e),n=[];for(let[i,r]of Object.entries(t)){let a=r;a.isMesh&&a.geometry&&r.name&&n.push(i)}return n.sort((i,r)=>i.localeCompare(r))}var Rn=require("react/jsx-runtime"),n0=(0,Fa.memo)(Z_);function Z_({bindings:e,selectedItem:t,onSelect:n,onHover:i,isOpen:r=!0,onToggle:a}){let[o,s]=(0,Fa.useState)(""),c=(0,Fa.useMemo)(()=>Object.keys(e),[e]),l=(0,Fa.useMemo)(()=>{let u=o.trim().toLowerCase();return u?c.filter(d=>{let h=e[d];return d.toLowerCase().includes(u)||h.label?.toLowerCase().includes(u)||h.type.toLowerCase().includes(u)}):c},[e,c,o]);return(0,Rn.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${r?"":"bb-sidebar--collapsed"}`,children:[(0,Rn.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!r&&(0,Rn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),r&&(0,Rn.jsxs)(Rn.Fragment,{children:[(0,Rn.jsxs)("div",{children:[(0,Rn.jsx)("div",{className:"bb-sectionKicker",children:"Scene Nodes"}),(0,Rn.jsxs)("div",{className:"bb-sectionHeading",children:[l.length," visible entries"]})]}),(0,Rn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]}),r&&(0,Rn.jsxs)("section",{className:"bb-nodeList",children:[(0,Rn.jsx)("div",{className:"bb-search",children:(0,Rn.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:o,onChange:u=>s(u.target.value)})}),(0,Rn.jsx)("div",{className:"bb-nodeItems",children:l.map(u=>{let d=e[u];return(0,Rn.jsxs)("button",{type:"button",className:`bb-nodeButton ${u===t?"bb-nodeButton--active":""}`,onClick:()=>n(u),onMouseEnter:()=>i?.(u),onMouseLeave:()=>i?.(null),children:[(0,Rn.jsx)("span",{className:"bb-nodeName",children:u}),(0,Rn.jsxs)("span",{className:"bb-nodeMeta",children:[d.type,d.label===qp(u)?"":d.label||"\xB7 Untitled"]})]},u)})})]})]})}var Zi=require("react/jsx-runtime");function $p({title:e,label:t,open:n,onToggle:i,draft:r,error:a,example:o,onDraftChange:s,onCommit:c}){return(0,Zi.jsx)(ir,{title:e,open:n,onToggle:i,children:(0,Zi.jsxs)("div",{className:"bb-field",children:[(0,Zi.jsx)("label",{className:"bb-label",children:t}),(0,Zi.jsx)("textarea",{className:"bb-textarea",value:r,onChange:l=>s(l.target.value),onBlur:c}),a?(0,Zi.jsx)("span",{className:"bb-status bb-status--error",children:a}):(0,Zi.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",o,"."]})]})})}function r0(e,t){let n=new Map(e.animations.clips.map(a=>[a.sourceName,a])),i=t.map(({sourceName:a})=>n.get(a)??{sourceName:a,displayName:a,hidden:!1,loopMode:"repeat",speed:1}),r=e.animations.autoplayClip&&i.some(a=>a.sourceName===e.animations.autoplayClip&&!a.hidden)?e.animations.autoplayClip:null;return{clips:i,autoplayClip:r}}var ai=require("react"),J_=100;function Q_(e,t){switch(t.type){case"set":{let n=typeof t.updater=="function"?t.updater(e.present):t.updater;if(n===e.present)return e;let i=t.track?e.edits+1:e.edits;return t.coalesce?{...e,present:n,future:[],edits:i}:{past:[...e.past,e.present].slice(-J_),present:n,future:[],edits:i}}case"undo":{if(e.past.length===0)return e;let n=e.past[e.past.length-1];return{past:e.past.slice(0,-1),present:n,future:[e.present,...e.future],edits:e.edits+1}}case"redo":{if(e.future.length===0)return e;let[n,...i]=e.future;return{past:[...e.past,e.present],present:n,future:i,edits:e.edits+1}}case"reset":return{past:[],present:t.value,future:[],edits:t.track?e.edits+1:0}}}function Kp(e,t=600){let[n,i]=(0,ai.useReducer)(Q_,{past:[],present:e,future:[],edits:0}),r=(0,ai.useRef)(0),a=(0,ai.useCallback)(u=>{let d=Date.now(),h=d-r.current<t;r.current=d,i({type:"set",updater:u,coalesce:h,track:!0})},[t]),o=(0,ai.useCallback)(u=>{let d=Date.now()-r.current<t;i({type:"set",updater:u,coalesce:d,track:!1})},[t]),s=(0,ai.useCallback)(()=>{r.current=0,i({type:"undo"})},[]),c=(0,ai.useCallback)(()=>{r.current=0,i({type:"redo"})},[]),l=(0,ai.useCallback)((u,d)=>{r.current=0,i({type:"reset",value:u,track:d?.asEdit??!1})},[]);return{value:n.present,setValue:a,setValueUntracked:o,undo:s,redo:c,reset:l,canUndo:n.past.length>0,canRedo:n.future.length>0,edits:n.edits}}var l0=require("fflate");function i0(e){return JSON.stringify(e,null,2)}function a0(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
|
|
3688
|
+
`)}function o0(e){return JSON.stringify(e,null,2)}function s0(e){return['import type { SceneConfig } from "@liveroom-tech/react-immersive/utils";',"",`export const sceneConfig: SceneConfig = ${JSON.stringify(e,null,2)};`,""].join(`
|
|
3689
|
+
`)}function cl(e,t,n){fi(new Blob([t],{type:n}),e)}function Zp(e){return JSON.stringify(e??{},null,2)}function Jp(e){return`[${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}]`}function eS(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 c0(e){let t=new Set;for(let r of Object.values(e))for(let a of eS(r))t.add(a);let n=[],i=[];return await Promise.all(Array.from(t).map(async r=>{let a=Lm(r);if(a)try{let o=await fetch(a);if(!o.ok)throw new Error(String(o.status));n.push({path:r,blob:await o.blob()})}catch{i.push(r)}})),{assets:n,failedPaths:i}}async function Qp(e,t,n,i,r){if(r.length===0){cl(e,t,n);return}let a={[e]:(0,l0.strToU8)(t)};for(let s of r)a[s.path]=new Uint8Array(await s.blob.arrayBuffer());let o=await Il(a);fi(new Blob([o],{type:"application/zip"}),i)}var eh={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"]},d0=Object.keys(eh);function u0(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 th(e){if(e)return Object.values(e).some(u0)?e:void 0}function Pr(e,t){return e?eh[t].some(n=>u0(e[n])):!1}function nh(e){return{pbr:Pr(e,"pbr"),roughness:Pr(e,"roughness"),emission:Pr(e,"emission"),opacity:Pr(e,"opacity"),normalBump:Pr(e,"normalBump"),displacement:Pr(e,"displacement"),ao:Pr(e,"ao"),clearcoat:Pr(e,"clearcoat"),sheen:Pr(e,"sheen"),anisotropy:Pr(e,"anisotropy"),transmission:Pr(e,"transmission"),faces:Pr(e,"faces")}}function rh(e,t){if(t)return{...e,style:{...e.style,material:t}};if(!e.style)return e;let{material:n,...i}=e.style;return{...e,style:Object.keys(i).length>0?i:void 0}}function p0(e,t){if(!e)return;let n={...e};for(let i of eh[t])delete n[i];return n}var j=require("react/jsx-runtime"),h0="/room.glb",tS=500;function nS(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function m0(e){return`Couldn't reload ${e} from your last session. It's still saved in this browser.`}function rS(e){let t=new Date(e);return t.toDateString()===new Date().toDateString()?`today at ${t.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}`:t.toLocaleString([],{dateStyle:"medium",timeStyle:"short"})}function xd(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function ih(e,t){if(!xd(e)||!xd(t))return t??e;let n={...e};for(let[i,r]of Object.entries(t)){let a=n[i];n[i]=xd(a)&&xd(r)?ih(a,r):r}return n}function ah({licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,project:a,onProjectChange:o,projectChangeDebounceMs:s=350,onModelUpload:c,onEditLeaseChange:l,allowModelChange:u=!0}){let d=(0,Q.useRef)(null),h=(0,Q.useRef)(null),f=(0,Q.useRef)(null),[m,x]=(0,Q.useState)(a?.model.url??null),[E,w]=(0,Q.useState)(a?.model.name??""),[p,g]=(0,Q.useState)(a?.model??null),[_,S]=(0,Q.useState)(null),T=Kp(a?.objectBindings??{}),A=T.value,b=T.setValue,[y,M]=(0,Q.useState)(!1),[C,N]=(0,Q.useState)(null),[L,F]=(0,Q.useState)(!1),[V,D]=(0,Q.useState)("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),[q,P]=(0,Q.useState)("default"),[B,W]=(0,Q.useState)(!1),[$,pe]=(0,Q.useState)("{}"),[Ne,xe]=(0,Q.useState)("{}"),[Ie,Ae]=(0,Q.useState)(null),[ze,Rt]=(0,Q.useState)(null),[Xt,tt]=(0,Q.useState)(!1),[we,se]=(0,Q.useState)(!1),[Ft,kt]=(0,Q.useState)(!1),[nt,wt]=(0,Q.useState)({identity:!0,basics:!0,material:!1,actions:!1,camera:!1,transform:!1,metrics:!1,metadata:!1}),[Ge,nn]=(0,Q.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}),_t=R=>wt(I=>({...I,[R]:!I[R]})),Fe=R=>nn(I=>({...I,[R]:!I[R]})),[Lt,rn]=(0,Q.useState)("object"),[Ee,J]=(0,Q.useState)("General"),[Se,ce]=(0,Q.useState)("metalness"),[Ue,Ve]=(0,Q.useState)(nh()),je=(0,Q.useRef)(null),[$e,ye]=(0,Q.useState)(!1),[pt,St]=(0,Q.useState)(!0),[an,on]=(0,Q.useState)(!0),[at,ct]=(0,Q.useState)(!1),[fn,qt]=(0,Q.useState)(null),[Ln,Un]=(0,Q.useState)(null),[Qt,H]=(0,Q.useState)(!1),[k,Y]=(0,Q.useState)("world"),oe=(0,Q.useRef)({}),ee=Kp(a?.sceneConfig??gi),te=ee.value,he=ee.setValue,gt=ee.setValueUntracked,[ot,Mt]=(0,Q.useState)("orbit"),Re=ot==="pointerLock",[en,_e]=(0,Q.useState)(null),[Yt,ke]=(0,Q.useState)(null),gn=Gc(e,t),dr=rv(gn.tier),Gn=(0,Q.useMemo)(()=>({isInsideEditor:!0,activeTab:Lt,activeSubTab:Ee,tier:dr,setActiveTab:rn,setActiveSubTab:J}),[Lt,Ee,dr]),Dt=(0,Q.useRef)(null),Ar=(0,Q.useRef)(0),Wn=(0,Q.useRef)(0),Ti=(0,Q.useRef)(a?`${a.id}:${a.revision}`:null),ea=(0,Q.useRef)(null),Uo=(0,Q.useRef)(!1),Wr=(0,Q.useRef)(!1),ta=(0,Q.useRef)(a?{modelUrl:a.model.url,bindings:a.objectBindings,sceneConfig:a.sceneConfig}:null),na=(0,Q.useRef)(void 0),Xr=(0,Q.useRef)(0),Et=(0,Q.useRef)(null),Sn=(0,Q.useRef)(a?{requestId:0,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl}:null),Dn=(0,Q.useRef)(null),Ha=(0,Q.useRef)(null),Er=(0,Q.useRef)(null),ra=(0,Q.useRef)(!1),li=(0,Q.useRef)(null),{cameraState:dt,resetView:ia,focusObject:ml,fitScene:fl,setCameraState:ci,handleCameraChange:di,handleViewerReady:Vo}=td(),kd=(0,Q.useCallback)(R=>{Re||ci({position:R.position,target:R.target,fov:dt?.fov??null,zoom:dt?.zoom??1,azimuthAngle:R.azimuthAngle,polarAngle:R.polarAngle},!0)},[Re,ci,dt]),aa=nd(),Bt=_?A[_]??null:null,Pi=Bt?.style?.material,Rr=Bt?.cameraState,Fo=dt?{position:Jp(dt.position),target:Jp(dt.target)}:null,jo=(0,Q.useCallback)(R=>{he(I=>{let re=I.annotations.map(Me=>Me.id).join(","),ie=R.map(Me=>Me.id).join(",");return re===ie?I:{...I,annotations:R}})},[]),gl=(0,Q.useCallback)(R=>{_e(R?{annotation:R}:null)},[]);(0,Q.useEffect)(()=>{if(!Bt){pe("{}"),xe("{}"),Ae(null),Rt(null);return}pe(Zp(Bt.metrics)),xe(Zp(Bt.metadata)),Ae(null),Rt(null)},[Bt]),(0,Q.useEffect)(()=>{let R=nh(Pi);if(je.current!==_){je.current=_,Ve(R);return}Ve(I=>{let re=!1,ie={...I};for(let Me of d0)R[Me]&&!I[Me]&&(ie[Me]=!0,re=!0);return re?ie:I})},[_,Pi]),(0,Q.useEffect)(()=>()=>{Dt.current?.cleanup(),Et.current&&clearTimeout(Et.current)},[]);let oa=(0,Q.useCallback)((R,I)=>{let re=vd(R);if(I){let ie=new Map(Object.values(I).map(Me=>[Me.modelObjectId,Me]));for(let Me of R){let He=ie.get(Me);He&&(re[Me]=He)}}return re},[]);(0,Q.useEffect)(()=>{if(!a)return;let R=`${a.id}:${a.revision}`;if(Ti.current===R)return;Ti.current=R;let I=m!==a.model.url||p?.tilesetUrl!==a.model.tilesetUrl||p?.assetVersion!==a.model.assetVersion,re=A!==a.objectBindings,ie=te!==a.sceneConfig;(I||re||ie)&&(Wr.current=!0),g(a.model),w(a.model.name??"model");let Me=a.objectBindings;if(re){let He=ea.current;Me=He?oa(He,a.objectBindings):a.objectBindings,T.reset(Me)}if(ie&&ee.reset(a.sceneConfig),I){let He=++Wn.current;Sn.current={requestId:He,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl},li.current=null,S(null),M(!0),x(a.model.url)}ta.current={modelUrl:a.model.url,bindings:Me,sceneConfig:a.sceneConfig}},[A,oa,a,m,te,p,T,ee]);let Ho=(0,Q.useRef)(o);Ho.current=o,(0,Q.useEffect)(()=>{if(!a||!Ho.current||!m)return;if(!Uo.current){Uo.current=!0;return}let R=ta.current;if(m===a.model.url&&A===a.objectBindings&&te===a.sceneConfig||R!==null&&m===R.modelUrl&&A===R.bindings&&te===R.sceneConfig){Wr.current=!1;return}if(Sn.current)return;if(Wr.current){Wr.current=!1;return}let I=window.setTimeout(()=>{Ho.current?.({projectId:a.id,baseRevision:a.revision,model:{...p??a.model,url:m,name:E||a.model.name},objectBindings:A,sceneConfig:te},"local")},s);return()=>window.clearTimeout(I)},[A,E,m,a,s,p,te]),(0,Q.useEffect)(()=>{let R=I=>{if(I.key.toLowerCase()!=="z"||!(I.metaKey||I.ctrlKey))return;let re=I.target,ie=re?.tagName;if(ie==="INPUT"||ie==="TEXTAREA"||re?.isContentEditable)return;I.preventDefault();let Me=Lt==="scene"?ee:T;I.shiftKey?Me.redo():Me.undo()};return window.addEventListener("keydown",R),()=>window.removeEventListener("keydown",R)},[Lt,T,ee]);let Ai=!a&&u,Ga=T.edits>0||ee.edits>0;(0,Q.useEffect)(()=>{if(!Ai||!Ga||!m)return;let R=Dn.current;if(!R)return;let I=()=>{if(Er.current===I&&(Er.current=null),Sn.current)return;let{model:ie,file:Me}=R,He=ie.kind==="file"&&Ha.current!==ie.key?Me:void 0;Kb({model:ie,bindings:A,sceneConfig:te},He).then(()=>{Ha.current=ie.kind==="file"?ie.key:null,ra.current=!1}).catch(Ct=>{console.warn("[BindingBuilder] Autosave failed:",Ct),!ra.current&&(ra.current=!0,D("Couldn't autosave this session \u2014 the browser refused to store it, possibly for lack of space. Export your work to keep it."),P("error"))})};Er.current=I;let re=window.setTimeout(I,tS);return()=>window.clearTimeout(re)},[Ai,Ga,m,A,te]),(0,Q.useEffect)(()=>{if(!Ai)return;let R=()=>Er.current?.(),I=()=>{document.visibilityState==="hidden"&&R()};return window.addEventListener("pagehide",R),document.addEventListener("visibilitychange",I),()=>{window.removeEventListener("pagehide",R),document.removeEventListener("visibilitychange",I),R()}},[Ai]),(0,Q.useEffect)(()=>{if(!Ai||!m||!Ga)return;let R=I=>{Er.current?.(),I.preventDefault(),I.returnValue=""};return window.addEventListener("beforeunload",R),()=>window.removeEventListener("beforeunload",R)},[Ai,m,Ga]),(0,Q.useEffect)(()=>{if(y||q==="default"||q==="success")return;W(!0);let R=window.setTimeout(()=>W(!1),4e3);return()=>window.clearTimeout(R)},[V,q,y]);let sn=(0,Q.useMemo)(()=>Object.keys(A),[A]),bl=(0,Q.useMemo)(()=>!_||!Bt?null:Bt.id.trim()?Object.entries(A).some(([re,ie])=>re!==_&&ie.id===Bt.id)?"Another binding already uses this ID.":null:"ID is required.",[A,_,Bt]),Bn=(R,I)=>{b(re=>({...re,[R]:I(re[R])}))},ui=(R,I)=>{Bn(R,re=>{let ie=th(I(re.style?.material));return rh(re,ie)})},Vn=(R,I,re)=>{ui(R,ie=>({...ie,[I]:re?{path:re}:void 0}))},Wa=(R,I)=>{Ve(re=>({...re,[R]:I})),!I&&_&&Bn(_,re=>{let ie=th(p0(re.style?.material,R));return rh(re,ie)})},sa=(0,Q.useCallback)((R,I,re)=>{let ie=Yp(R),Me=vd(ie);if(re){let Ct=new Map(Object.values(re).map(Ze=>[Ze.modelObjectId,Ze]));for(let Ze of ie){let Qn=Ct.get(Ze);Qn&&(Me[Ze]=Qn)}}R.updateMatrixWorld(!0);let He={};for(let Ct of ie){let Ze=zr(R,Ct);if(!Ze){He[Ct]={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivotLocal:[0,0,0],rotationOrder:"XYZ"};continue}let Qn=Jc(Ze);He[Ct]={position:[Ze.position.x,Ze.position.y,Ze.position.z],rotation:[Ze.rotation.x,Ze.rotation.y,Ze.rotation.z],scale:[Ze.scale.x,Ze.scale.y,Ze.scale.z],pivotLocal:[Qn.x,Qn.y,Qn.z],rotationOrder:Ze.rotation.order}}oe.current=He,T.reset(Me),S(ie[0]??null),re||gt(Ct=>({...Ct,annotations:[]})),D(`Generated ${ie.length} bindings from ${I}.`),P("success"),Xr.current=100,N(100),Et.current&&clearTimeout(Et.current),Et.current=setTimeout(()=>{Et.current=null,M(!1),N(null)},400)},[T,gt]),Xa=(R,I,re,ie)=>{Er.current?.();let Me=++Wn.current;M(!0),N(null),Xr.current=0,Et.current&&(clearTimeout(Et.current),Et.current=null),na.current=re;let He=re?re/1048576:0;D(He>=100?`Reading ${I} (${Math.round(He)}MB \u2014 large file, this can take a while)...`:`Reading ${I} and generating starter bindings...`),P("default"),w(I),g(ie??{url:R,name:I}),_e(null);let Ct=li.current;if(R===m&&Ct?.url===R){Sn.current=null,sa(Ct.scene,I);return}Sn.current={requestId:Me,modelName:I,modelUrl:R,streaming:!!ie?.tilesetUrl},x(R),T.reset({}),S(null)},Ld=(0,Q.useCallback)(R=>{let I=Sn.current;if(!(!I||I.requestId!==Wn.current)){if(Sn.current=null,li.current={url:I.modelUrl,scene:R},I.streaming){D(`Streaming ${I.modelName}.`),P("success"),M(!1);return}I.storedBindings&&(Wr.current=!0),sa(R,I.modelName,I.storedBindings),I.restoring&&D(`Restored your last session with ${I.modelName}.`)}},[sa]),Dd=(0,Q.useCallback)(R=>{let I=R.map(ie=>ie.name);if(I.length===0)return;ea.current=I,Wr.current=!0;let re=oa(I,a?.objectBindings);if(T.reset(re),a){let ie=ta.current;ta.current={modelUrl:ie?.modelUrl??a.model.url,bindings:re,sceneConfig:ie?.sceneConfig??a.sceneConfig}}S(ie=>ie??I[0]??null),D(`Streaming ${I.length} bindable objects.`),P("success"),M(!1)},[oa,T,a]),qr=(0,Q.useCallback)(R=>{let I=Sn.current;!I||I.requestId!==Wn.current||(Sn.current=null,console.error(R),I.restoring?(Dn.current=null,x(null),D(m0(I.modelName))):D(`Could not read ${I.modelName}. Make sure the file is a valid GLB, GLTF, OBJ, FBX, or USDZ asset.`),P("error"),Et.current&&(clearTimeout(Et.current),Et.current=null),Xr.current=0,M(!1),N(null))},[]),la=(0,Q.useCallback)(R=>{let I=null;if(R.lengthComputable&&R.total>0)I=R.loaded/R.total*100;else{let ie=na.current;ie&&ie>0&&(I=R.loaded/ie*100)}if(I===null)return;let re=Math.min(90,Math.floor(I/10)*10);re>Xr.current&&(Xr.current=re,N(re)),I>=99.5&&D(ie=>ie.startsWith("Finalizing")?ie:"Finalizing model \u2014 parsing geometry and textures (large files can take a moment here)...")},[]),Go=(0,Q.useCallback)(R=>{aa.handleAnimationsReady(R);let I=R.clipDetails??R.clips.map(re=>({sourceName:re,duration:0}));gt(re=>({...re,animations:r0(re,I)}))},[aa,gt]),Yr=async()=>{Dt.current?.cleanup(),Dt.current=null,Dn.current={model:{kind:"url",url:h0,name:"room.glb"}},await Xa(h0,"room.glb")},Wo=async R=>{if(!u)return;if(c){try{M(!0),D(`Uploading ${R.name}...`),P("default");let re=await c(R);Dn.current={model:{kind:"url",url:re.url,name:re.name??R.name}},await Xa(re.url,re.name??R.name,R.size,re)}catch(re){M(!1),D(re instanceof Error?re.message:`Could not upload ${R.name}.`),P("error")}return}let I;try{I=await ys(R)}catch(re){D(re instanceof Error?re.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset."),P("error");return}Dt.current?.cleanup(),Dt.current=I,Dn.current={model:{kind:"file",key:nS(),name:I.name},file:R},await Xa(I.url,I.name,R.size,{url:I.url,name:I.name})},ca=async R=>{let I=R.target.files?.[0];I&&(await Wo(I),R.target.value="")},Xo=()=>{Er.current?.(),Dt.current?.cleanup(),Dt.current=null,li.current=null,Sn.current=null,Dn.current=null,oe.current={},Ar.current=0,tt(!1),Et.current&&(clearTimeout(Et.current),Et.current=null),Xr.current=0,N(null),na.current=void 0,x(null),w(""),g(null),S(null),_e(null),T.reset({}),pe("{}"),xe("{}"),Ae(null),Rt(null),ke(null),H(!1),gt(R=>({...R,animations:gi.animations,annotations:[]})),D("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),P("default")},da=()=>{d.current?.click()},pi=()=>{h.current?.click()},qo=async R=>{F(!0);try{let{assets:I,failedPaths:re}=await c0(A);R==="json"?await Qp("objectBindings.json",i0(A),"application/json","objectBindings.zip",I):await Qp("objectBindings.ts",a0(A),"text/typescript","objectBindings-ts.zip",I),re.length>0?(D(`Exported, but ${re.length} uploaded image${re.length===1?"":"s"} couldn't be bundled: ${re.join(", ")}.`),P("error")):I.length>0&&(D(`Exported with ${I.length} uploaded image${I.length===1?"":"s"} bundled into the zip.`),P("success"))}catch(I){let re=I instanceof Error?I.message:"Unknown export error.";D(`Failed to export bindings: ${re}`),P("error")}finally{F(!1)}},Bd=async R=>{if(!sn.length){D("Load a model before importing bindings."),P("error");return}let I;try{I=JSON.parse(await R.text())}catch{D(`${R.name} is not valid JSON.`),P("error");return}if(I===null||typeof I!="object"||Array.isArray(I)){D("Expected a JSON object mapping object IDs to bindings."),P("error");return}let re=new Map;for(let Ct of Object.values(I))if(Ct!==null&&typeof Ct=="object"&&typeof Ct.id=="string"&&typeof Ct.type=="string"&&typeof Ct.modelObjectId=="string"){let Ze=Ct;re.set(Ze.modelObjectId,Ze)}if(re.size===0){D(`${R.name} doesn't look like an exported bindings file.`),P("error");return}let ie={...A},Me=0;for(let Ct of Object.keys(ie)){let Ze=re.get(Ct);Ze&&(ie[Ct]=Ze,Me++)}if(Me===0){D(`None of the object IDs in ${R.name} match this model \u2014 nothing imported.`),P("error");return}b(ie);let He=re.size-Me;D(He>0?`Imported ${Me} binding${Me===1?"":"s"} from ${R.name} (${He} skipped \u2014 not in this model).`:`Imported ${Me} binding${Me===1?"":"s"} from ${R.name}.`),P("success")},Yo=async R=>{let I=R.target.files?.[0];I&&(await Bd(I),R.target.value="")},vl=()=>{f.current?.click()},ua=async R=>{let I;try{I=JSON.parse(await R.text())}catch{D(`${R.name} is not valid JSON.`),P("error");return}if(I===null||typeof I!="object"||Array.isArray(I)){D("Expected a JSON object with scene config sections."),P("error");return}let re=["model","camera","lighting","wireframe","shadows","environment","background","groundShadows","postProcessing","animations","annotations","cinematic"],ie=I,Me=re.filter(He=>ie[He]!==void 0);if(Me.length===0){D(`${R.name} doesn't look like an exported scene config file.`),P("error");return}he(He=>{let Ct={...He};for(let Ze of Me)Ct[Ze]=ih(He[Ze],ie[Ze]);return Ct}),D(`Imported ${Me.length} section${Me.length===1?"":"s"} from ${R.name}.`),P("success")},xl=async R=>{let I=R.target.files?.[0];I&&(await ua(I),R.target.value="")},yl=R=>{R.preventDefault(),R.stopPropagation(),!(y||m)&&(Ar.current+=1,tt(!0))},wl=R=>{R.preventDefault(),R.stopPropagation(),!(y||m)&&(R.dataTransfer.dropEffect="copy",tt(!0))},Nd=R=>{R.preventDefault(),R.stopPropagation(),!(y||m)&&(Ar.current=Math.max(0,Ar.current-1),Ar.current===0&&tt(!1))},Od=async R=>{if(R.preventDefault(),R.stopPropagation(),Ar.current=0,tt(!1),y||m)return;let I=R.dataTransfer.files?.[0];I&&await Wo(I)},$o=(R,I,re)=>{if(!_)return;let ie;try{ie=JSON.parse(I)}catch{re("Invalid JSON");return}if(ie===null||typeof ie!="object"||Array.isArray(ie)){re("Expected a JSON object");return}if(R==="metrics"&&Object.values(ie).some(He=>typeof He!="number"||!Number.isFinite(He))){re("Metrics values must be numbers");return}Bn(_,Me=>({...Me,[R]:ie})),re(null)},pa=(0,Q.useCallback)(R=>{if(Re){Mt("orbit");return}if(!R){S(null);return}let I=Object.entries(A).find(([re,ie])=>ie===R||re===R.modelObjectId||ie.modelObjectId===R.modelObjectId)?.[0]??null;S(I)},[Re,A]),_l=(0,Q.useCallback)(async R=>{if(Re){Mt("orbit");return}S(R),ke(null),await ml(R)},[Re,ml]),Id=(0,Q.useCallback)(R=>{ke(R?A[R]??null:null)},[A]),Sl=(0,Q.useCallback)(R=>kt(!R),[]),zd=(0,Q.useCallback)(()=>{if(Re){D("Camera positions aren't available while Pointer Lock is the active camera controller."),P("error");return}if(!_||!dt)return;let R={position:dt.position,target:dt.target,...dt.fov!=null?{fov:dt.fov}:{},zoom:dt.zoom};Bn(_,I=>({...I,cameraState:R}))},[Re,_,dt]),Ko=(0,Q.useCallback)(()=>{if(Re){D("Camera positions aren't available while Pointer Lock is the active camera controller."),P("error");return}!Rr?.position||!Rr?.target||ci({position:Rr.position,target:Rr.target,fov:Rr.fov??dt?.fov??null,zoom:Rr.zoom??dt?.zoom??1},!0)},[Re,Rr,ci,dt]),qa=(0,Q.useCallback)(()=>{Re||_&&Bn(_,R=>({...R,cameraState:void 0}))},[Re,_]),ha=(0,Q.useCallback)(async()=>{if(Re){D("Reset View isn't available while Pointer Lock is the active camera controller."),P("error");return}await ia()},[Re,ia]),ma=(0,Q.useCallback)(async()=>{if(Re){D("Fit Scene isn't available while Pointer Lock is the active camera controller."),P("error");return}await fl()},[Re,fl]),fa=(0,Q.useCallback)(R=>{qt(R),ct(!0)},[]),kr=(0,Q.useCallback)(()=>{ct(!1),qt(null)},[]),Ml=(0,Q.useCallback)(()=>{if(fn==="bindings"){if(!sn.length){kr();return}let R=vd(sn);T.reset(R,{asEdit:!0}),S(sn[0]??null),D("Object bindings reset to default values."),P("success")}else fn==="scene"&&(ee.reset(gi,{asEdit:!0}),D("Scene config reset to default values."),P("success"));kr()},[fn,sn,T,ee,kr]),ga=(0,Q.useCallback)(()=>{Un(null)},[]),Cl=async()=>{let R;try{R=await Zb()}catch(I){console.warn("[BindingBuilder] Could not read the saved session:",I),D("Couldn't read the saved session from this browser."),P("error");return}if(!R){D("No saved session in this browser yet \u2014 one is saved as soon as you edit a model."),P("error");return}Un(R)},ba=async()=>{let R=Ln;if(Un(null),!R)return;let{session:I,file:re}=R,{model:ie}=I;Er.current=null;let Me=ih(gi,I.sceneConfig),He;if(ie.kind==="file"){if(!re)return;let Ze=Wn.current,Qn;try{Qn=await ys(re)}catch(Tl){console.warn("[BindingBuilder] Could not read the saved model:",Tl),D(m0(ie.name)),P("error");return}if(Wn.current!==Ze){Qn.cleanup();return}Dt.current?.cleanup(),Dt.current=Qn,He=Qn.url}else{He=ie.url;let Ze=li.current;if(He===m&&Ze?.url===He&&!Sn.current){Dn.current={model:ie},Ha.current=null,T.reset(oa(Yp(Ze.scene),I.bindings)),ee.reset(Me),D(`Restored your last session with ${ie.name}.`),P("success");return}Dt.current?.cleanup(),Dt.current=null}Dn.current={model:ie,file:re??void 0},Ha.current=ie.kind==="file"?ie.key:null;let Ct=++Wn.current;M(!0),N(null),Xr.current=0,Et.current&&(clearTimeout(Et.current),Et.current=null),na.current=re?.size,D(`Restoring your last session with ${ie.name}...`),P("default"),w(ie.name),g({url:He,name:ie.name}),_e(null),S(null),li.current=null,T.reset({}),ee.reset(Me),Sn.current={requestId:Ct,modelName:ie.name,modelUrl:He,storedBindings:I.bindings,restoring:!0},x(He)};return gn.status==="checking"?(0,j.jsx)("div",{className:"bb-root bb-root--licenseChecking",children:(0,j.jsx)(wa,{title:"Verifying License",message:"Checking your license key..."})}):gn.status==="invalid"?(0,j.jsx)("div",{className:"bb-root bb-root--licenseInvalid",children:(0,j.jsx)(wa,{tone:"error",title:"Invalid License",message:gn.isLocalDomain?gn.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})}):(0,j.jsxs)(_p.Provider,{value:Gn,children:[(0,j.jsxs)("div",{className:"bb-root",children:[(0,j.jsx)("input",{ref:d,type:"file",accept:Kl,className:"bb-hiddenInput",onChange:ca,disabled:y}),(0,j.jsx)("input",{ref:h,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:Yo,disabled:y}),(0,j.jsx)("input",{ref:f,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:xl,disabled:y}),(0,j.jsxs)("aside",{className:`bb-sidebar bb-sidebar--left ${we?"bb-sidebar--collapsed":""}`,children:[(0,j.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!we&&(0,j.jsx)("h1",{className:"bb-title",children:"Binding Builder"}),(0,j.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>se(R=>!R),"aria-label":we?"Open editor sidebar":"Collapse editor sidebar",title:we?"Open editor":"Collapse editor",children:we?"\u2192":"\u2190"})]}),!we&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)("div",{className:"bb-tabRow",children:[(0,j.jsx)("button",{type:"button",className:`bb-tab ${Lt==="object"?"bb-tab--active":""}`,onClick:()=>rn("object"),children:"Object"}),(0,j.jsx)("button",{type:"button",className:`bb-tab ${Lt==="scene"?"bb-tab--active":""}`,onClick:()=>rn("scene"),children:"Scene"})]}),(0,j.jsx)("section",{className:"bb-editor",children:Lt==="scene"?(0,j.jsx)(j.Fragment,{children:m?(0,j.jsx)(jp,{config:te,onChange:he,activeSubTab:Ee,onActiveSubTabChange:J,cameraState:Ee==="Cinematic"&&dt?{position:dt.position,target:dt.target,azimuthAngle:dt.azimuthAngle,polarAngle:dt.polarAngle}:null,onPreviewWaypoint:kd,animationClipDetails:aa.clipDetails,animationPlayback:aa}):(0,j.jsx)("div",{className:"bb-emptyEditor",children:"Upload a model to edit its scene settings."})}):!Bt||!_?(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:Bt.label||_}),(0,j.jsxs)("div",{className:"bb-editorMeta",children:[(0,j.jsx)("span",{children:Bt.type}),(0,j.jsx)("span",{children:Bt.modelObjectId})]})]})}),(0,j.jsx)(jv,{selectedItem:_,selectedBinding:Bt,open:nt.identity,onToggle:()=>_t("identity"),updateBinding:Bn,idError:bl}),(0,j.jsx)(Wv,{selectedItem:_,selectedBinding:Bt,open:nt.basics,onToggle:()=>_t("basics"),updateBinding:Bn}),(0,j.jsxs)(ir,{title:"Material",open:nt.material,onToggle:()=>_t("material"),tooltip:"Edit the selected object's base material, textures, and surface properties.",children:[(0,j.jsx)(Fv,{disabled:!_,onApply:R=>_&&ui(_,I=>({...I,...R}))}),(0,j.jsx)(Uv,{selectedItem:_,selectedMaterial:Pi,pbrWorkflow:Se,onPbrWorkflowChange:ce,openMaterialPanels:Ge,materialPanelEnabled:Ue,onToggleMaterialPanel:Fe,onSetMaterialPanelState:Wa,updateSelectedMaterial:ui,setSelectedTexturePath:Vn})]}),(0,j.jsx)($v,{selectedItem:_,selectedBinding:Bt,open:nt.actions,onToggle:()=>_t("actions"),updateBinding:Bn}),(0,j.jsx)(Kv,{selectedBinding:Bt,open:nt.camera,onToggle:()=>_t("camera"),cameraState:dt,formattedCameraState:Fo,savedCameraPosition:Rr,onSaveCameraPosition:zd,onGoToSavedCamera:Ko,onClearSavedCamera:qa,onResetView:ha,onFitScene:ma}),(0,j.jsx)(t0,{selectedItem:_,selectedBinding:Bt,open:nt.transform,onToggle:()=>_t("transform"),updateBinding:Bn,moveModeEnabled:Qt,onToggleMoveMode:H,transformSpace:k,onTransformSpaceChange:Y,originalTransform:oe.current[_]??null}),(0,j.jsx)($p,{title:"Metrics",label:"Metrics JSON",open:nt.metrics,onToggle:()=>_t("metrics"),draft:$,error:Ie,example:'{"area": 42}',onDraftChange:pe,onCommit:()=>$o("metrics",$,Ae)}),(0,j.jsx)($p,{title:"Metadata",label:"Metadata JSON",open:nt.metadata,onToggle:()=>_t("metadata"),draft:Ne,error:ze,example:'{"room": "kitchen"}',onDraftChange:xe,onCommit:()=>$o("metadata",Ne,Rt)})]})}),Lt==="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:!T.canUndo,onClick:T.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,j.jsx)(_n.Undo2,{size:16})}),(0,j.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!sn.length,onClick:()=>fa("bindings"),title:"Reset object bindings to default",children:(0,j.jsx)(_n.ListRestart,{size:16})}),(0,j.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!T.canRedo,onClick:T.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,j.jsx)(_n.Redo2,{size:16})})]}),(0,j.jsx)("div",{className:"bb-toolbarDivider"}),(0,j.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!sn.length||y,onClick:pi,title:"Re-apply a previously exported objectBindings.json onto this model",children:[(0,j.jsx)(_n.Upload,{size:14}),"Import"]}),(0,j.jsx)("div",{className:"bb-toolbarDivider"}),(0,j.jsx)(Gp,{disabled:!sn.length||L,exporting:L,onExportJson:()=>qo("json"),onExportTs:()=>qo("ts")})]}),Lt==="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:!ee.canUndo,onClick:ee.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,j.jsx)(_n.Undo2,{size:16})}),(0,j.jsx)("button",{type:"button",className:"bb-iconButton",onClick:()=>fa("scene"),title:"Reset scene config to default",children:(0,j.jsx)(_n.ListRestart,{size:16})}),(0,j.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!ee.canRedo,onClick:ee.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,j.jsx)(_n.Redo2,{size:16})})]}),(0,j.jsx)("div",{className:"bb-toolbarDivider"}),(0,j.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!sn.length||y,onClick:vl,title:"Re-apply a previously exported sceneConfig.json",children:[(0,j.jsx)(_n.Upload,{size:14}),"Import"]}),(0,j.jsx)("div",{className:"bb-toolbarDivider"}),(0,j.jsx)(Gp,{disabled:!sn.length||y,onExportJson:()=>cl("sceneConfig.json",o0(te),"application/json"),onExportTs:()=>cl("sceneConfig.ts",s0(te),"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:$e,onChange:R=>ye(R.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:pt,onChange:R=>St(R.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:an,onChange:R=>on(R.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:_?`Focused: ${_}`:"Select a node to inspect it"})}),u&&!a&&(0,j.jsx)("button",{type:"button",className:"bb-restoreSessionButton",disabled:y,onClick:Cl,title:"Restore your last session \u2014 the model, its object bindings, and scene settings saved in this browser","aria-label":"Restore last session",children:(0,j.jsx)(_n.History,{size:14})}),m&&u&&!a&&(0,j.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-removeModelButton",onClick:Xo,children:"Remove model"})]}),m&&(0,j.jsx)("div",{className:"bb-moveHint",children:Re?(0,j.jsx)(j.Fragment,{children:"Click the preview to look around \xB7 Esc to release"}):Qt?(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)(To,{visible:y||B,message:V,tone:q,progress:C??void 0}),m?(0,j.jsx)(Qs,{modelUrl:m,tilesetUrl:p?.tilesetUrl,objectBindings:A,selectedObject:Bt,onObjectSelect:pa,onObjectBindingsChange:b,onObjectEditLeaseChange:(R,I)=>l?.(R.modelObjectId||R.id,I),showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,onCameraChange:di,onViewerReady:Vo,onAnnotationsChange:jo,activeAnnotation:en?.annotation??null,onActiveAnnotationChange:gl,onAnimationsReady:Go,onModelLoaded:Ld,onLoadError:qr,onObjectCatalog:Dd,onProgress:la,onCameraControllerChange:Mt,cameraControllerType:ot,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,sceneConfig:te,onSceneConfigChange:he,preserveDrawingBuffer:!0,disableZoom:!1,zoomOnSelected:$e,highlightOnHover:pt,enableCameraControls:an,moveModeEnabled:Qt,objectTransformSpace:k,enableKeyboardNavigation:!0,showViewGizmo:!0,panelHoveredObject:pt?Yt:null,showLoadingOverlay:!1,autoRotate:Re?!1:te.model.autoRotate??!1,autoRotateSpeed:te.model.autoRotateSpeed??1}):(0,j.jsx)("div",{className:`bb-previewPlaceholder ${Xt?"bb-previewPlaceholder--dragActive":""}`,onDragEnter:yl,onDragOver:wl,onDragLeave:Nd,onDrop:Od,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."}),u?(0,j.jsx)("button",{type:"button",className:"bb-previewPlaceholderButton",onClick:da,disabled:y,children:"Upload"}):null]})})]})]}),(0,j.jsx)(n0,{bindings:A,selectedItem:_,onSelect:_l,onHover:Id,isOpen:!Ft,onToggle:Sl})]}),at&&(0,j.jsx)("div",{className:"bb-reset-overlay",onClick:kr,children:(0,j.jsxs)("div",{className:"bb-reset-dialog",onClick:R=>R.stopPropagation(),children:[(0,j.jsxs)("div",{className:"bb-reset-header",children:[(0,j.jsxs)("h3",{className:"bb-reset-title",children:[(0,j.jsx)(_n.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Confirm Reset"]}),(0,j.jsx)("button",{className:"bb-reset-close",onClick:kr,children:(0,j.jsx)(_n.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:fn==="bindings"?"Object Bindings":"Scene Config"}),"?"]}),(0,j.jsx)("p",{className:"bb-reset-details",children:fn==="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:kr,children:"Cancel"}),(0,j.jsx)("button",{className:"bb-reset-btn-danger",onClick:Ml,children:"Reset"})]})]})}),Ln&&(0,j.jsx)("div",{className:"bb-reset-overlay",onClick:ga,children:(0,j.jsxs)("div",{className:"bb-reset-dialog",onClick:R=>R.stopPropagation(),children:[(0,j.jsxs)("div",{className:"bb-reset-header",children:[(0,j.jsxs)("h3",{className:"bb-reset-title",children:[(0,j.jsx)(_n.History,{size:20,className:"bb-icon-restore"}),"Restore Last Session"]}),(0,j.jsx)("button",{className:"bb-reset-close",onClick:ga,children:(0,j.jsx)(_n.X,{size:20})})]}),(0,j.jsxs)("div",{className:"bb-reset-body",children:[(0,j.jsxs)("p",{className:"bb-reset-message",children:["Restore ",(0,j.jsx)("strong",{children:Ln.session.model.name}),", saved ",rS(Ln.session.savedAt),"?"]}),(0,j.jsx)("p",{className:"bb-reset-details",children:"This reloads that model with its object bindings and scene settings, replacing what's in the editor now."})]}),(0,j.jsxs)("div",{className:"bb-reset-footer",children:[(0,j.jsx)("button",{className:"bb-reset-btn",onClick:ga,children:"Cancel"}),(0,j.jsx)("button",{className:"bb-reset-btn-restore",onClick:ba,children:"Restore"})]})]})})]})}var f0=require("react/jsx-runtime");function oh(e){return(0,f0.jsx)(ah,{...Hb(e,Fb)})}var de=require("react"),wd=require("@react-three/drei"),oi=require("@react-three/fiber"),y0=require("@react-three/fiber");var Ji=require("three"),w0=require("three-stdlib");var mn=require("lucide-react");var X=require("react/jsx-runtime"),g0={color:"#93c5fd",intensity:.05},iS=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];function aS(e){return!!(e&&"isMesh"in e&&e.isMesh)}function b0(e,t){Array.isArray(e)?e.forEach(t):t(e)}function oS(e,t){if(!t)return;let n=t.camera;if(!(n instanceof Ji.PerspectiveCamera))return;let i=new Ji.Box3().setFromObject(e).getSize(new Ji.Vector3).length();!Number.isFinite(i)||i<=0||(n.near=i/100,n.far=i*100,n.updateProjectionMatrix(),t.maxDistance=i*10)}var ch=class extends de.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 sS({url:e,format:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,hiddenKeys:a,selectedKey:o,panelHoveredKey:s,nodeRefsOut:c,onMeshesReady:l,onModelLoaded:u,onLoadProgress:d,onMeshClick:h,highlightOnHover:f}){let{scene:m}=ec(e,{dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r},t,d),x=(0,oi.useThree)(C=>C.invalidate),{setCanvasCursor:E,restoreCanvasCursor:w}=sc(),[p,g]=(0,de.useState)(null),_=(0,de.useMemo)(()=>w0.SkeletonUtils.clone(m),[m]),S=(0,de.useMemo)(()=>{let C={};return _.traverse(N=>{if(!aS(N))return;let L=N.name||N.uuid;C[L]={key:L,label:N.name||N.type,ref:N}}),C},[_]),T=(0,de.useMemo)(()=>{let C={};for(let[N,{ref:L}]of Object.entries(S)){let V=(Array.isArray(L.material)?L.material:[L.material]).map(D=>{let P=(mo(D)??new Ji.MeshStandardMaterial).clone();return P.userData.baseColor=P.color.clone(),P.userData.baseMap=P.map,P.userData.baseEmissive=P.emissive.clone(),P.userData.baseEmissiveMap=P.emissiveMap,P.userData.baseEmissiveIntensity=P.emissiveIntensity,P});C[N]=Array.isArray(L.material)?V:V[0]}return C},[S]);(0,de.useEffect)(()=>()=>{Object.values(T).forEach(C=>b0(C,N=>N.dispose()))},[T]);let A=(0,de.useRef)(null);(0,de.useEffect)(()=>{A.current!==e&&(A.current=e,_.updateWorldMatrix(!0,!0),Ms(_),l(S),u(_))},[e,_,S,l,u]),(0,de.useEffect)(()=>{let C=new AbortController;return io(_,C.signal),()=>{C.abort(),ya(_)}},[_]);let b=(0,de.useMemo)(()=>!Bl(_),[_]);(0,de.useEffect)(()=>{for(let[C,{ref:N}]of Object.entries(S))c.current[C]=N},[S,c]),(0,de.useEffect)(()=>{!f&&p!==null&&(g(null),w())},[f,p,w]),(0,de.useEffect)(()=>{for(let[C,{ref:N}]of Object.entries(S)){N.visible=!a.has(C);let L=T[C];if(!L)continue;N.material=L;let F=f&&p===C,V=f&&s===C;b0(L,D=>{if(D.color.copy(D.userData.baseColor),D.map=D.userData.baseMap??null,D.emissive.copy(D.userData.baseEmissive),D.emissiveMap=D.userData.baseEmissiveMap??null,D.emissiveIntensity=D.userData.baseEmissiveIntensity,V||F){let q=!!D.userData.baseEmissiveMap;D.emissive.set(g0.color),D.emissiveIntensity=q?D.userData.baseEmissiveIntensity:g0.intensity}D.needsUpdate=!0})}x()},[S,T,p,o,s,f,a,x]);let y=C=>{let N=C;for(;N;){let L=N.name||N.uuid;if(S[L])return L;N=N.parent}return null},M=b?{onClick:C=>{let N=y(C.object);N&&(C.stopPropagation(),h(N))},...f?{onPointerOver:C=>{let N=y(C.object);N&&(C.stopPropagation(),E("pointer"),g(N))},onPointerOut:C=>{C.stopPropagation(),w(),g(null)}}:{}}:{};return(0,X.jsx)("primitive",{object:_,...M})}function lS({scene:e,controlsRef:t,refitOnResize:n,onInitialFitComplete:i}){let r=(0,de.useRef)(!1),a=(0,oi.useThree)(c=>c.invalidate),o=(0,oi.useThree)(c=>c.size),s=(0,de.useRef)(null);return(0,de.useEffect)(()=>{r.current=!1,a()},[a,e]),(0,oi.useFrame)(()=>{if(!r.current){if(!e||!t.current){a();return}r.current=!0,oS(e,t.current),t.current.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}).finally(i)}}),(0,de.useEffect)(()=>{if(!(!n||!r.current||!e||!t.current))return s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{t.current?.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}),a()},150),()=>{s.current&&clearTimeout(s.current)}},[o.width,o.height,n]),null}function cS({exposure:e}){let t=(0,oi.useThree)(i=>i.gl),n=(0,oi.useThree)(i=>i.invalidate);return(0,de.useEffect)(()=>{t.toneMappingExposure=e,n()},[t,e,n]),null}function dS({enabled:e,controlsRef:t}){let n=(0,oi.useThree)(i=>i.invalidate);return(0,oi.useFrame)((i,r)=>{!e||!t.current||(t.current.rotate(r*.2,0,!1),n())}),null}function yd(e){return Array.from(e.types).includes("Files")}function v0({label:e,checked:t,onChange:n}){return(0,X.jsxs)("div",{className:"env-row",children:[(0,X.jsx)("span",{className:"env-row__label",children:e}),(0,X.jsx)("div",{className:"env-row__value",children:(0,X.jsx)("button",{className:"env-checkbox-btn",onClick:()=>n(!t),children:(0,X.jsx)("span",{className:`env-checkbox${t?" env-checkbox--checked":""}`,children:t&&(0,X.jsx)(mn.Check,{size:9,strokeWidth:2,color:"white"})})})})]})}function sh({label:e,value:t,onChange:n}){return(0,X.jsxs)("div",{className:"env-row",children:[(0,X.jsx)("span",{className:"env-row__label",children:e}),(0,X.jsx)("div",{className:"env-row__value",children:(0,X.jsxs)("div",{className:"env-color-swatch",style:{background:t},children:[(0,X.jsx)("span",{className:"env-color-swatch__hex",children:t}),(0,X.jsx)("input",{type:"color",className:"env-color-swatch__input",value:t,onChange:i=>n(i.target.value)})]})})]})}function lh({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,X.jsxs)("div",{className:"env-row",children:[(0,X.jsx)("span",{className:"env-row__label",children:e}),(0,X.jsxs)("div",{className:"env-row__value env-row__value--slider",children:[(0,X.jsx)("input",{type:"range",className:"env-slider",min:n,max:i,step:r,value:t,onChange:o=>a(Number(o.target.value))}),(0,X.jsx)("span",{className:"env-slider__value",children:t.toFixed(2)})]})]})}function uS({label:e,value:t,options:n,onChange:i}){return(0,X.jsxs)("div",{className:"env-row",children:[(0,X.jsx)("span",{className:"env-row__label",children:e}),(0,X.jsx)("div",{className:"env-row__value",children:(0,X.jsx)("select",{className:"env-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,X.jsx)("option",{value:r,children:r},r))})})]})}function x0({title:e,children:t}){let[n,i]=(0,de.useState)(!1);return(0,X.jsxs)("div",{className:"env-section",children:[(0,X.jsxs)("button",{className:"env-section__header",onClick:()=>i(r=>!r),children:[(0,X.jsx)(mn.ChevronDown,{size:12,strokeWidth:2,className:`env-section__chevron${n?" env-section__chevron--collapsed":""}`}),(0,X.jsx)("span",{children:e})]}),!n&&(0,X.jsx)("div",{className:"env-section__body",children:t})]})}function pS({isOpen:e,onToggle:t,settings:n,onChange:i}){return(0,X.jsxs)("div",{className:`left-panel-wrapper ${e?"left-panel-wrapper--open":"left-panel-wrapper--closed"}`,children:[!e&&(0,X.jsx)("button",{className:"side-panel__open-btn side-panel__open-btn--left",onClick:()=>t(!0),children:(0,X.jsx)(mn.Settings,{size:20,strokeWidth:1.8})}),(0,X.jsxs)("div",{className:`side-panel side-panel--left ${e?"side-panel--open-left":"side-panel--closed-left"}`,"aria-hidden":!e,children:[(0,X.jsx)("div",{className:"side-panel__header",children:(0,X.jsxs)("div",{className:"side-panel__header-top",children:[(0,X.jsx)("span",{className:"side-panel__eyebrow",children:"Scene Settings"}),(0,X.jsx)("button",{className:"side-panel__close-btn",onClick:()=>t(!1),title:"Close",children:(0,X.jsx)(mn.X,{size:12,strokeWidth:1.6})})]})}),(0,X.jsxs)("div",{className:"env-controls",children:[(0,X.jsxs)(x0,{title:"Background",children:[(0,X.jsx)(v0,{label:"Background",checked:n.backgroundEnabled,onChange:r=>i("backgroundEnabled",r)}),(0,X.jsx)(sh,{label:"Background Color",value:n.backgroundColor,onChange:r=>i("backgroundColor",r)}),(0,X.jsx)(uS,{label:"Environment",value:n.envPreset,options:iS,onChange:r=>i("envPreset",r)}),(0,X.jsx)(v0,{label:"Auto Rotate",checked:n.autoRotate,onChange:r=>i("autoRotate",r)})]}),(0,X.jsxs)(x0,{title:"Lighting",children:[(0,X.jsx)(lh,{label:"Exposure",value:n.exposure,min:0,max:2,step:.05,onChange:r=>i("exposure",r)}),(0,X.jsx)(lh,{label:"Ambient Light Intensity",value:n.ambientIntensity,min:0,max:3,step:.05,onChange:r=>i("ambientIntensity",r)}),(0,X.jsx)(sh,{label:"Ambient Light Color",value:n.ambientColor,onChange:r=>i("ambientColor",r)}),(0,X.jsx)(lh,{label:"Direct Light Intensity",value:n.directionalIntensity,min:0,max:5,step:.05,onChange:r=>i("directionalIntensity",r)}),(0,X.jsx)(sh,{label:"Direct Light Color",value:n.directionalColor,onChange:r=>i("directionalColor",r)})]})]})]})]})}function hS({meshKeys:e,hiddenKeys:t,selectedKey:n,isOpen:i,onToggle:r,onFocus:a,onHover:o,onToggleVisibility:s}){let[c,l]=(0,de.useState)(""),[u,d]=(0,de.useState)(null),h=Object.values(e).filter(f=>f.label.toLowerCase().includes(c.toLowerCase()));return(0,X.jsxs)("div",{className:`right-panel-wrapper ${i?"right-panel-wrapper--open":"right-panel-wrapper--closed"}`,children:[!i&&(0,X.jsx)("button",{className:"side-panel__open-btn",onClick:()=>r(!0),children:(0,X.jsx)(mn.Boxes,{size:20,strokeWidth:1.8})}),(0,X.jsxs)("div",{className:`side-panel ${i?"side-panel--open":"side-panel--closed"}`,"aria-hidden":!i,children:[(0,X.jsxs)("div",{className:"side-panel__header",children:[(0,X.jsxs)("div",{className:"side-panel__header-top",children:[(0,X.jsx)("span",{className:"side-panel__eyebrow",children:"SCENE OBJECTS"}),(0,X.jsx)("button",{className:"side-panel__close-btn",onClick:()=>r(!1),title:"Close",children:(0,X.jsx)(mn.X,{size:12,strokeWidth:1.6})})]}),(0,X.jsxs)("p",{className:"side-panel__title",children:[h.length," objects"]})]}),(0,X.jsx)("div",{className:"side-panel__search-wrap",children:(0,X.jsx)("input",{className:"side-panel__search",type:"text",placeholder:"Search objects",value:c,onChange:f=>l(f.target.value)})}),(0,X.jsx)("div",{className:"side-panel__list",children:h.map(({key:f,label:m})=>{let x=!t.has(f),E=n===f,w=u===f;return(0,X.jsxs)("div",{onClick:()=>a(f),onMouseEnter:()=>{d(f),o(f)},onMouseLeave:()=>{d(null),o(null)},className:["side-panel__row",w?"side-panel__row--hovered":"",E?"side-panel__row--selected":""].filter(Boolean).join(" "),children:[(0,X.jsx)("span",{className:`side-panel__label${w||E?" side-panel__label--hovered":""}`,children:m}),(0,X.jsx)("button",{className:"side-panel__vis-btn",title:x?"Hide":"Show",onClick:p=>{p.stopPropagation(),s(f)},children:(0,X.jsx)("span",{className:`side-panel__checkbox${x?" side-panel__checkbox--checked":""}`,children:x&&(0,X.jsx)(mn.Check,{size:9,strokeWidth:5,color:"white"})})})]},f)})})]})]})}function dh({modelUrl:e,modelFormat:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r=!0,backgroundColor:a="#1a1a1a",showSceneObjectsPanel:o=!0,showSceneSettingsPanel:s=!0,enableModelUpload:c=!1,zoomOnSelected:l=!1,highlightOnHover:u=!1,showLoadingOverlay:d=!0,refitOnResize:h=!0,backgroundEnabled:f=!1,autoRotate:m=!1,envPreset:x="city",exposure:E=1,ambientIntensity:w=.6,ambientColor:p="#ffffff",directionalIntensity:g=1.2,directionalColor:_="#ffffff",onModelLoaded:S,onLoadError:T}){let A=(0,de.useRef)(null),b=(0,de.useRef)({}),y=(0,de.useRef)(null),M=(0,de.useRef)(null),C=(0,de.useRef)(0),[N,L]=(0,de.useState)(null),[F,V]=(0,de.useState)(null),[D,q]=(0,de.useState)(!1),[P,B]=(0,de.useState)({}),[W,$]=(0,de.useState)(new Set),[pe,Ne]=(0,de.useState)(null),[xe,Ie]=(0,de.useState)(null),[Ae,ze]=(0,de.useState)(null),[Rt,Xt]=(0,de.useState)(null),[tt,we]=(0,de.useState)(!1),[se,Ft]=(0,de.useState)(!1),[kt,nt]=(0,de.useState)(!1),[wt,Ge]=(0,de.useState)(null),[nn,_t]=(0,de.useState)(!1),[Fe,Lt]=(0,de.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[rn,Ee]=(0,de.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[J,Se]=(0,de.useState)({backgroundEnabled:f,backgroundColor:a,autoRotate:m,envPreset:x,exposure:E,ambientIntensity:w,ambientColor:p,directionalIntensity:g,directionalColor:_}),ce=c?Ae:e,Ue=(0,de.useCallback)(()=>{L(null),V(null),q(!1),B({}),$(new Set),Ne(null),Ie(null),we(!1),nt(!1),Ge(null)},[]),Ve=(0,de.useCallback)(()=>{M.current?.cleanup(),M.current=null},[]),je=(0,de.useCallback)(()=>{Ve(),ze(null),Xt(null),Ue(),Se({backgroundEnabled:f,backgroundColor:a,autoRotate:m,envPreset:x,exposure:E,ambientIntensity:w,ambientColor:p,directionalIntensity:g,directionalColor:_})},[p,w,m,a,f,_,g,x,E,Ue,Ve]),$e=(0,de.useCallback)(async k=>{Ft(!0);try{let Y=await ys(k);Ve(),M.current=Y,ze(Y.url),Xt(Y.name),Ue()}catch(Y){we(!0),T?.(Y)}finally{Ft(!1)}},[T,Ue,Ve]),ye=(0,de.useCallback)(k=>{let Y=k?.[0];Y&&$e(Y)},[$e]);(0,de.useEffect)(()=>()=>{Ve()},[Ve]);let pt=(0,de.useCallback)((k,Y)=>{Se(oe=>({...oe,[k]:Y}))},[]);(0,de.useEffect)(()=>{Se(k=>({...k,backgroundColor:a}))},[a]),(0,de.useEffect)(()=>{Ue()},[ce,Ue]);let St=(0,de.useCallback)(k=>{B(k),$(new Set),Ne(null)},[]),an=(0,de.useCallback)(k=>{L(k),we(!1);let Y=cs(k);V(Y>xa?Y:null),q(!1),Ge(null),S?.(k)},[S]),on=(0,de.useCallback)(k=>{we(!0),Ge(null),T?.(k)},[T]),at=(0,de.useCallback)(k=>{k.lengthComputable&&k.total>0&&Ge(k.loaded/k.total*100)},[]),ct=(0,de.useCallback)(k=>{if(Ne(k),!l)return;let Y=b.current[k];!Y||!A.current||A.current.fitToBox(Y,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[l]),fn=(0,de.useCallback)(k=>{$(Y=>{let oe=new Set(Y);return oe.has(k)?oe.delete(k):oe.add(k),oe})},[]),qt=(0,de.useCallback)(k=>{!c||!yd(k.dataTransfer)||(k.preventDefault(),k.stopPropagation(),C.current+=1,_t(!0))},[c]),Ln=(0,de.useCallback)(k=>{!c||!yd(k.dataTransfer)||(k.preventDefault(),k.stopPropagation(),k.dataTransfer.dropEffect="copy",_t(!0))},[c]),Un=(0,de.useCallback)(k=>{!c||!yd(k.dataTransfer)||(k.preventDefault(),k.stopPropagation(),C.current=Math.max(0,C.current-1),C.current===0&&_t(!1))},[c]),Qt=(0,de.useCallback)(k=>{!c||!yd(k.dataTransfer)||(k.preventDefault(),k.stopPropagation(),C.current=0,_t(!1),ye(k.dataTransfer.files))},[c,ye]),H=d&&(se||!!(ce&&!tt&&(!N||!kt)));return(0,X.jsxs)("div",{className:"smv-root",style:{background:J.backgroundColor},onDragEnter:qt,onDragOver:Ln,onDragLeave:Un,onDrop:Qt,children:[s&&ce&&(0,X.jsx)(pS,{isOpen:rn,onToggle:Ee,settings:J,onChange:pt}),(0,X.jsxs)("div",{className:"smv-canvasArea",children:[F!==null&&!D&&(0,X.jsxs)("div",{className:"smv-largeModelBanner",children:[(0,X.jsx)(mn.AlertTriangle,{size:14,className:"smv-largeModelBanner__icon"}),(0,X.jsxs)("span",{children:["Very large model detected (",Math.round(F/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,X.jsx)("button",{type:"button",className:"smv-largeModelBanner__dismiss",onClick:()=>q(!0),"aria-label":"Dismiss",children:(0,X.jsx)(mn.X,{size:12})})]}),c?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)("input",{ref:y,type:"file",accept:Kl,className:"smv-upload-input",onChange:k=>{ye(k.target.files),k.currentTarget.value=""}}),ce?(0,X.jsx)("div",{className:"smv-upload-toolbar",children:(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)("span",{className:"smv-upload-toolbar__name",children:Rt??"Uploaded model"}),(0,X.jsxs)("button",{type:"button",className:"smv-upload-toolbar__button smv-upload-toolbar__button--ghost",onClick:je,children:[(0,X.jsx)(mn.Trash2,{size:14}),"Clear"]})]})}):null]}):null,ce?(0,X.jsx)(y0.Canvas,{dpr:[1,2],frameloop:"demand",resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:{background:J.backgroundColor},camera:{position:[0,0,5],fov:45,near:.1,far:1e3},children:(0,X.jsxs)(de.Suspense,{fallback:null,children:[(0,X.jsx)("ambientLight",{intensity:J.ambientIntensity,color:J.ambientColor}),(0,X.jsx)("directionalLight",{position:[-4,5,7],intensity:J.directionalIntensity,color:J.directionalColor,castShadow:!0}),(0,X.jsx)("directionalLight",{position:[-5,5,5],intensity:.5}),(0,X.jsx)(de.Suspense,{fallback:null,children:(0,X.jsx)(wd.Environment,{preset:J.envPreset,background:J.backgroundEnabled})}),(0,X.jsx)(cS,{exposure:J.exposure}),(0,X.jsx)(dS,{enabled:J.autoRotate,controlsRef:A}),(0,X.jsx)(ch,{onLoadError:on,children:(0,X.jsx)(de.Suspense,{fallback:null,children:(0,X.jsx)(sS,{url:ce,format:Ae?void 0:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,hiddenKeys:W,selectedKey:pe,panelHoveredKey:xe,nodeRefsOut:b,onMeshesReady:St,onModelLoaded:an,onLoadProgress:at,onMeshClick:ct,highlightOnHover:u})})},ce),(0,X.jsx)(lS,{scene:N,controlsRef:A,refitOnResize:h,onInitialFitComplete:()=>nt(!0)}),(0,X.jsx)(wd.CameraControls,{ref:A,makeDefault:!0,smoothTime:.3})]})}):(0,X.jsx)("div",{className:"smv-upload-empty-state",style:{background:J.backgroundColor},children:(0,X.jsxs)("div",{className:"smv-upload-empty-state__card",children:[(0,X.jsx)("div",{className:"smv-upload-empty-state__icon",children:(0,X.jsx)(mn.Upload,{size:24})}),(0,X.jsxs)("p",{className:"smv-upload-empty-state__body",children:["Drag and drop ",(0,X.jsx)("code",{children:".glb"}),", ",(0,X.jsx)("code",{children:".gltf"}),","," ",(0,X.jsx)("code",{children:".obj"}),", ",(0,X.jsx)("code",{children:".fbx"}),", ",(0,X.jsx)("code",{children:".usdz"}),", or"," ",(0,X.jsx)("code",{children:".zip"})," here"]}),(0,X.jsxs)("button",{type:"button",className:"smv-upload-empty-state__button",onClick:()=>y.current?.click(),children:[(0,X.jsx)(mn.Upload,{size:15}),"Choose model"]})]})}),(0,X.jsx)(To,{visible:H,message:"Loading model...",progress:se?void 0:wt??void 0}),c&&nn?(0,X.jsx)("div",{className:"smv-upload-drop-overlay",children:(0,X.jsxs)("div",{className:"smv-upload-drop-overlay__card",children:[(0,X.jsx)(mn.Upload,{size:20}),(0,X.jsx)("span",{children:"Release to load your model"})]})}):null]}),o&&ce&&(0,X.jsx)(hS,{meshKeys:P,hiddenKeys:W,selectedKey:pe,isOpen:Fe,onToggle:Lt,onFocus:ct,onHover:Ie,onToggleVisibility:fn})]})}var dl=require("react");function _0(e=null){let[t,n]=(0,dl.useState)(e),i=(0,dl.useCallback)(a=>{n(a)},[n]),r=(0,dl.useCallback)(()=>{n(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:n,handleObjectSelect:i,clearSelection:r}}var S0=require("react");function M0(e,t){return(0,S0.useMemo)(()=>{if(!t)return null;let n=e[t];return n||(Object.values(e).find(i=>i.id===t||i.modelObjectId===t)??null)},[e,t])}var C0=require("react");function T0(e){return(0,C0.useMemo)(()=>Object.values(e).map(t=>t.modelObjectId),[e])}var Jt=require("react");function uh(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ul(e,t){if(!uh(t))return t;let n=uh(e)?{...e}:{};for(let i of Object.keys(t)){let r=t[i];n[i]=uh(r)?ul(n[i],r):r}return n}function mS(e){return typeof e=="object"&&!Array.isArray(e)}function fS(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(mS(t))return Object.entries(e).filter(([,r])=>fS(r,t)).map(([r])=>r);let i=(typeof t=="string"?[t]:t).map(r=>Nn(e,r)).filter(r=>r!==null);return[...new Set(i)]}function _d(e,t){return Gr(e,t).map(n=>e[n]).filter(n=>n!==void 0)}function gS(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!="string"}function ja(e,t,n){let i=gS(t)?t:[{ids:t,patch:n??{}}],r=e;for(let a of i)for(let o of Gr(r,a.ids)){let s=r[o];if(!s)continue;let c=ul(s,a.patch);r===e&&(r={...e}),r[o]=c}return r}function Sd(e){return{style:{material:e}}}var P0={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 A0(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n&&typeof n=="object"?{...n}:n]))}function bS(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function E0(e){let[t,n]=(0,Jt.useState)(e),i=(0,Jt.useCallback)((A,b)=>{n(y=>b===void 0?ja(y,A):ja(y,A,b))},[]),r=(0,Jt.useCallback)((A,b)=>i(A,Sd(b)),[i]),a=(0,Jt.useCallback)((A,b)=>r(A,{baseColor:b}),[r]),o=(0,Jt.useCallback)((A,b,y="baseColor")=>{let M=P0[y],C=typeof b=="string"?{path:b}:b;i(A,{style:{material:{[M]:C}}})},[i]),s=(0,Jt.useCallback)((A,b="baseColor")=>{let y=P0[b];i(A,{style:{material:{[y]:void 0}}})},[i]),c=(0,Jt.useCallback)((A,b)=>{n(y=>{let M=Nn(y,A);if(!M)return y;let C=A0(y[M]?.style?.material),N=Gr(y,b);if(N.length===0)return y;let L=y;for(let F of N){let V=y[F];V&&(L===y&&(L={...y}),L[F]={...V,style:{...V.style,material:A0(C)}})}return L})},[]),l=(0,Jt.useCallback)(A=>i(A,{style:{material:void 0}}),[i]),u=(0,Jt.useCallback)((A,b)=>i(A,{transform:b}),[i]),d=(0,Jt.useCallback)(A=>i(A,{transform:void 0}),[i]),h=(0,Jt.useCallback)((A,b)=>i(A,{metadata:b}),[i]),f=(0,Jt.useCallback)(A=>_d(t,A),[t]),m=(0,Jt.useCallback)(A=>Gr(t,A).map(b=>t[b]?.id??b),[t]),x=(0,Jt.useCallback)(A=>{let b=Nn(t,A);return b?t[b]?.style?.material??null:null},[t]),E=(0,Jt.useCallback)(A=>i(A,{visible:!1}),[i]),w=(0,Jt.useCallback)(A=>i(A,{visible:!0}),[i]),p=(0,Jt.useCallback)(A=>{n(b=>{let y=Gr(b,A).reduce((M,C)=>{let N=b[C];return N&&M.push({ids:C,patch:{visible:N.visible===!1}}),M},[]);return ja(b,y)})},[n]),g=(0,Jt.useCallback)(()=>{n(A=>ja(A,Object.keys(A),{visible:!0}))},[n]),_=(0,Jt.useMemo)(()=>bS(t),[t]),S=(0,Jt.useMemo)(()=>Object.keys(_).map(A=>t[A]?.id??A),[_,t]),T=(0,Jt.useCallback)(A=>{let b=Nn(t,A);return b?t[b]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:n,updateObjectBindings:i,setMaterial:r,setBaseColor:a,setTexture:o,clearTexture:s,copyMaterial:c,resetMaterial:l,getMaterial:x,setTransform:u,resetTransform:d,updateMetadata:h,selectObjectBindings:f,selectObjectBindingIds:m,hiddenObjects:_,hiddenObjectIds:S,hideObject:E,showObject:w,toggleObjectVisibility:p,isObjectHidden:T,clearHiddenObjects:g}}function R0(e){return e}var kn=require("react");function Md(e,t){return ul(e,t)}var vS={type:"point",color:"#ffffff",intensity:1,position:[0,0,0],distance:0,decay:2,attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0};function k0(e){let t=(0,kn.useRef)(null),[n,i]=(0,kn.useState)(()=>{let w=typeof e=="function"?e():e;return t.current=w,w}),r=(0,kn.useCallback)(w=>{i(p=>{let g=typeof w=="function"?w(p):w;return Md(p,g)})},[]),a=(0,kn.useCallback)(()=>{let w=t.current;w&&i(w)},[]),o=(0,kn.useCallback)((w,p)=>{r(g=>({lighting:{lights:g.lighting.lights.map(_=>_.id===w?{..._,...p}:_)}}))},[r]),s=(0,kn.useCallback)(w=>{r(p=>p.lighting.lights.some(g=>g.id===w.id)?{}:{lighting:{lights:[...p.lighting.lights,{...vS,...w}]}})},[r]),c=(0,kn.useCallback)(w=>{r(p=>({lighting:{lights:p.lighting.lights.filter(g=>g.id!==w)}}))},[r]),l=(0,kn.useCallback)((w,p)=>o(w,{intensity:p}),[o]),u=(0,kn.useCallback)((w,p)=>o(w,{color:p}),[o]),d=(0,kn.useCallback)(w=>o(w,{visible:!0}),[o]),h=(0,kn.useCallback)(w=>o(w,{visible:!1}),[o]),f=(0,kn.useCallback)(w=>{r(p=>({lighting:{lights:p.lighting.lights.map(g=>g.id===w?{...g,visible:!g.visible}:g)}}))},[r]),m=(0,kn.useCallback)((w,p)=>o(w,{attachment:p,attachedToCamera:!1}),[o]),x=(0,kn.useCallback)(w=>o(w,{attachment:void 0}),[o]),E=(0,kn.useMemo)(()=>({items:n.lighting.lights,get:w=>n.lighting.lights.find(p=>p.id===w),add:s,update:o,remove:c,setIntensity:l,setColor:u,show:d,hide:h,toggle:f,attach:m,detach:x}),[n.lighting.lights,s,o,c,l,u,d,h,f,m,x]);return{sceneConfig:n,setSceneConfig:i,updateSceneConfig:r,resetSceneConfig:a,lights:E}}var Cd=require("react");function L0(){let[e,t]=(0,Cd.useState)(null),n=(0,Cd.useCallback)(i=>{t(i)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:n}}var si=require("react"),pl=require("three");function Td(e){return[e.x,e.y,e.z]}function D0(){let[e,t]=(0,si.useState)(!0),[n,i]=(0,si.useState)(!1),[r,a]=(0,si.useState)(null),[o,s]=(0,si.useState)(null),[c,l]=(0,si.useState)(0),u=(0,si.useCallback)(f=>{let m=new pl.Box3().setFromObject(f),x=m.min.clone(),E=m.max.clone(),w=new pl.Vector3,p=new pl.Vector3,g=0;f.traverse(_=>{"isMesh"in _&&_.isMesh&&(g+=1)}),m.getCenter(w),m.getSize(p),s({min:Td(x),max:Td(E),center:Td(w),size:Td(p)}),l(g),a(null),t(!1),i(!0)},[]),d=(0,si.useCallback)(f=>{a(f),s(null),l(0),t(!1),i(!1)},[]),h=(0,si.useCallback)(()=>{t(!0),i(!1),a(null),s(null),l(0)},[]);return{isLoading:e,isReady:n,error:r,bounds:o,objectCount:c,handleModelLoaded:u,handleLoadError:d,resetModelState:h}}var Pd=require("react");function B0({bindings:e,scene:t,camera:n,animations:i,onAction:r}){let{objectBindings:a,updateObjectBindings:o,showObject:s,hideObject:c,toggleObjectVisibility:l}=e,u=t?.updateSceneConfig,d=n?.focusObject,h=n?.fitScene,f=n?.resetView,m=n?.setCameraTarget,x=n?.setCameraState,E=i?.play,w=i?.pause,p=i?.stop,g=i?.setSpeed,_=i?.seek,S=(0,Pd.useCallback)(b=>{let y=Nn(a,b);return y?a[y]?.actions??[]:[]},[a]),T=(0,Pd.useCallback)(async b=>{for(let y of b.action.effects??[]){if("objectBindings"in y){o(y.target,y.objectBindings);continue}if("sceneConfig"in y){u?.(y.sceneConfig);continue}if("visibility"in y){y.visibility==="show"?s(y.target):y.visibility==="hide"?c(y.target):l(y.target);continue}if("camera"in y){let C=y.camera;C.type==="focus-object"?await d?.(C.objectId??b.objectId):C.type==="fit-scene"?await h?.():C.type==="reset"?await f?.():C.type==="set-target"?await m?.(C.target,C.transition??!0):await x?.(C.state,C.transition??!0);continue}let M=y.animation;M.type==="play"?E?.(M.clip):M.type==="pause"?w?.():M.type==="stop"?p?.():M.type==="set-speed"?g?.(M.speed):_?.(M.time)}await r?.(b)},[h,d,c,r,w,E,f,_,g,x,m,s,p,l,o,u]),A=(0,Pd.useCallback)(async(b,y)=>{let M=Nn(a,b);if(!M)return null;let C=a[M],N=C?.actions?.find(F=>F.id===y);if(!C||!N)return null;let L={objectId:M,action:N,binding:C};return await T(L),L},[T,a]);return{getActionsForObject:S,handleAction:T,runAction:A}}var Qi=require("react");function xS(e){return typeof e=="function"?e:e?.handleViewerReady??null}function N0(...e){let t=(0,Qi.useRef)(null),n=(0,Qi.useRef)(e);n.current=e;let i=(0,Qi.useCallback)(s=>{t.current=s;let c=new Set;for(let l of n.current){let u=xS(l);u&&!c.has(u)&&(c.add(u),u(s))}},[]),r=(0,Qi.useCallback)(()=>t.current,[]),a=(0,Qi.useCallback)(s=>{let c=t.current;return c?c.captureImage(s):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),o=(0,Qi.useCallback)(()=>{let s=t.current;return s?(s.invalidate(),!0):!1},[]);return{handleViewerReady:i,getViewer:r,captureImage:a,invalidate:o}}var Qe=require("react"),zo=require("three");var mh=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],Ad=1;function Ed(e){return typeof e=="string"?[e]:e}function Rd(e,t=0,n=1){return Math.min(n,Math.max(t,e))}function ph(e,t){return e+Math.random()*(t-e)}function O0([e,t],n){return e+(t-e)*n}function hh([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 I0(e,t){let n=Rd(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 yS(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(n=>n instanceof zo.Material):[]}function wS(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 mh){let i=e[n];typeof i=="number"&&(t[n]=i)}return t}function z0(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 mh){let i=t[n];i!==void 0&&typeof e[n]=="number"&&(e[n]=i)}t.transparent!==void 0&&(e.transparent=t.transparent),e.needsUpdate=!0}function _S(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 SS(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 U0(e={}){let t=(0,Qe.useRef)(e);t.current=e;let n=(0,Qe.useRef)(null),i=(0,Qe.useRef)(null),r=(0,Qe.useRef)(null),a=(0,Qe.useRef)(new Map),o=(0,Qe.useRef)(new Map),s=(0,Qe.useRef)(new Map),c=(0,Qe.useRef)(new Map),l=(0,Qe.useCallback)(P=>{let B=n.current;if(!B)return null;let W=Nn(B.objectBindings,P);return B.nodeRefs[P]??(W?B.nodeRefs[W]:null)??(B.scene?zr(B.scene,P):null)??null},[]),u=(0,Qe.useCallback)(P=>{let B=n.current;return B?typeof P=="object"&&!Array.isArray(P)?Gr(B.objectBindings,P):Ed(P).map(W=>Nn(B.objectBindings,W)??W):typeof P=="string"?[P]:Array.isArray(P)?P:[]},[]),d=(0,Qe.useCallback)(()=>{n.current?.invalidate()},[]),h=(0,Qe.useCallback)((P,B)=>{let W=!1;for(let $ of u(P)){let pe=l($);if(pe)for(let Ne of yS(pe))s.current.has(Ne)||s.current.set(Ne,wS(Ne)),z0(Ne,B),W=!0}return W},[l,u]),f=(0,Qe.useCallback)((P,B)=>{let W=h(P,B);return W&&d(),W},[d,h]),m=(0,Qe.useCallback)((P,B)=>{let W=!1;for(let $ of u(P)){let pe=l($);pe&&(c.current.has(pe)||c.current.set(pe,_S(pe)),SS(pe,B),W=!0)}return W},[l,u]),x=(0,Qe.useCallback)((P,B)=>{let W=m(P,B);return W&&d(),W},[d,m]),E=(0,Qe.useCallback)(P=>{let B=l(P);if(!B)return null;B.updateWorldMatrix(!0,!1);let W=B.getWorldPosition(new zo.Vector3);return[W.x,W.y,W.z]},[l]),w=(0,Qe.useCallback)(P=>{let B=o.current.get(P);return B?(B.light.removeFromParent(),B.light.dispose(),o.current.delete(P),d(),!0):!1},[d]),p=(0,Qe.useCallback)(P=>{let B=l(P.target);if(!B)return!1;let W=o.current.get(P.id),$=W?.light??new zo.PointLight;return W&&W.target!==P.target&&$.removeFromParent(),$.name=`react-immersive-runtime-light:${P.id}`,$.color.set(P.color??"#ffffff"),$.intensity=P.intensity??1,$.distance=P.distance??0,$.decay=P.decay??2,$.castShadow=P.castShadow??!1,$.position.set(...P.offset??[0,0,0]),$.parent!==B&&B.add($),o.current.set(P.id,{light:$,target:P.target}),d(),!0},[d,l]),g=(0,Qe.useCallback)((P,B)=>{let W=o.current.get(P);if(!W)return!1;if(B.target&&B.target!==W.target){let $=l(B.target);if(!$)return!1;W.light.removeFromParent(),$.add(W.light),W.target=B.target}return B.color!==void 0&&W.light.color.set(B.color),B.intensity!==void 0&&(W.light.intensity=B.intensity),B.distance!==void 0&&(W.light.distance=B.distance),B.decay!==void 0&&(W.light.decay=B.decay),B.offset!==void 0&&W.light.position.set(...B.offset),B.castShadow!==void 0&&(W.light.castShadow=B.castShadow),d(),!0},[d,l]),_=(0,Qe.useCallback)((P,B)=>{let W=$=>B[$%B.length]??0;for(let $ of P.materials??[])u($.targets).forEach((pe,Ne)=>{let xe=W(Ne),Ie={};for(let Ae of mh){let ze=$.values[Ae];ze&&(Ie[Ae]=O0(ze,xe))}h(pe,Ie)});for(let $ of P.transforms??[])u($.targets).forEach((pe,Ne)=>{let xe=W(Ne),Ie={};$.values.position&&(Ie.position=hh($.values.position,xe)),$.values.rotation&&(Ie.rotation=hh($.values.rotation,xe)),$.values.scale&&(Ie.scale=hh($.values.scale,xe)),m(pe,Ie)});for(let $ of P.lights??[])Ed($.lights).forEach((pe,Ne)=>{let xe=o.current.get(pe);xe&&(xe.light.intensity=O0($.intensity,W(Ne)))})},[u,h,m]),S=(0,Qe.useRef)(()=>{}),T=(0,Qe.useRef)(()=>{});T.current=P=>{r.current=null;let B=!1;for(let[W,$]of a.current){$.startedAt===null&&($.startedAt=P);let pe=$.lastFrameAt??P;$.lastFrameAt=P;let Ne=$.override&&$.override.until>P?$.override.level:null;$.override&&Ne===null&&($.override=null);let xe=$.update(P,P-$.startedAt,Math.min(100,P-pe),Ne);B=!0,xe||(a.current.delete(W),$.onComplete?.())}B&&d(),a.current.size>0&&S.current()},S.current=()=>{r.current!==null||typeof requestAnimationFrame>"u"||(r.current=requestAnimationFrame(P=>T.current(P)))};let A=(0,Qe.useCallback)(P=>(a.current.set(P.id,P),S.current(),P.id),[]),b=(0,Qe.useCallback)((P,B={})=>{let W=B.id??`transition-${Ad++}`,$=Math.max(1,B.duration??400),pe=B.easing??"ease-in-out";return A({id:W,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(Ne,xe,Ie,Ae)=>{let ze=Ae??I0(xe/$,pe);return _(P,[ze]),xe<$}})},[_,A]),y=(0,Qe.useCallback)((P,B={})=>{let W=B.id??`pulse-${Ad++}`,$=Math.max(1,B.duration??1e3),pe=B.minLevel??0,Ne=B.maxLevel??1,xe=B.repeat??1/0,Ie=B.synchronized??!0,Ae=Math.max(1,...[...P.materials??[],...P.transforms??[]].map(ze=>u(ze.targets).length),...(P.lights??[]).map(ze=>Ed(ze.lights).length));return A({id:W,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(ze,Rt,Xt,tt)=>{let we=Rt/$,se=Array.from({length:Ie?1:Ae},(Ft,kt)=>{if(tt!==null)return tt;let nt=we+(Ie?0:kt/Ae),wt=.5-Math.cos(nt%1*Math.PI*2)/2;return pe+(Ne-pe)*wt});return _(P,se),xe===1/0||we<xe}})},[_,A,u]),M=(0,Qe.useCallback)((P,B={})=>{let W=B.id??`timeline-${Ad++}`,$=B.repeat??1,pe=P.map(xe=>({...xe,duration:Math.max(1,xe.duration),hold:Math.max(0,xe.hold??0)})),Ne=Math.max(1,pe.reduce((xe,Ie)=>xe+Ie.duration+Ie.hold,0));return A({id:W,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(xe,Ie,Ae,ze)=>{if(pe.length===0||$<=0)return!1;let Rt=Ie/Ne;if($!==1/0&&Rt>=$){for(let we of pe)_(we.channels,[1]);return!1}let Xt=Ie%Ne,tt=0;for(let we of pe){let se=tt+we.duration,Ft=se+we.hold;if(Xt>=se){_(we.channels,[ze??1]),tt=Ft;continue}if(Xt>=tt){let kt=ze??I0((Xt-tt)/we.duration,we.easing??"ease-in-out");_(we.channels,[kt]);break}}return!0}})},[_,A]),C=(0,Qe.useCallback)((P,B={})=>{let W=B.id??`flicker-${Ad++}`,$=B.synchronized??!0,pe=B.minLevel??.15,Ne=B.maxLevel??1,xe=B.interval??[45,160],Ie=typeof xe=="number"?[xe,xe]:xe,Ae=[Math.max(1,Math.min(...Ie)),Math.max(1,Math.max(...Ie))],ze=Rd(B.response??.7,.01,1),Rt=Rd(B.blackoutChance??.08),Xt=Rd(B.flashChance??.12),tt=B.flashLevel??1.15,we=Math.max(1,...[...P.materials??[],...P.transforms??[]].map(wt=>u(wt.targets).length),...(P.lights??[]).map(wt=>Ed(wt.lights).length)),se=$?1:we,Ft=Array.from({length:se},()=>pe),kt=Array.from({length:se},()=>pe),nt=Array.from({length:se},()=>0);return A({id:W,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(wt,Ge,nn,_t)=>{for(let Fe=0;Fe<se;Fe+=1){if(_t!==null)kt[Fe]=_t;else if(wt>=nt[Fe]){let rn=Math.random();kt[Fe]=rn<Rt?ph(0,Math.min(.04,pe)):rn<Rt+Xt?tt:ph(pe,Ne),nt[Fe]=wt+ph(...Ae)}let Lt=1-Math.pow(1-ze,Math.max(1,nn)/16.67);Ft[Fe]+=(kt[Fe]-Ft[Fe])*Lt}return _(P,Ft),B.duration===void 0||Ge<B.duration}})},[_,A,u]),N=(0,Qe.useCallback)((P,B,W)=>{let $=a.current.get(P);if(!$)return!1;let pe=typeof performance>"u"?Date.now():performance.now();return $.override={level:B,until:pe+Math.max(0,W)},S.current(),!0},[]),L=(0,Qe.useCallback)(P=>a.current.delete(P),[]),F=(0,Qe.useCallback)(()=>{a.current.clear(),r.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(r.current),r.current=null)},[]),V=(0,Qe.useCallback)(()=>{for(let[P,B]of s.current)z0(P,B);s.current.clear();for(let[P,B]of c.current)P.position.set(...B.position),P.rotation.set(...B.rotation),P.scale.set(...B.scale),P.visible=B.visible,P.updateMatrix(),P.updateMatrixWorld(!0);c.current.clear();for(let P of o.current.values())P.light.removeFromParent(),P.light.dispose();o.current.clear(),d()},[d]),D=(0,Qe.useCallback)(()=>{F(),V()},[V,F]),q=(0,Qe.useCallback)(P=>{i.current&&i.current!==P.scene&&V(),n.current=P,i.current=P.scene,t.current.onViewerReady?.(P)},[V]);return(0,Qe.useEffect)(()=>()=>{D(),n.current=null,i.current=null},[D]),{handleViewerReady:q,setMaterial:f,setTransform:x,getWorldPosition:E,addPointLight:p,updatePointLight:g,removePointLight:w,transition:b,timeline:M,pulse:y,flicker:C,overrideEffect:N,stopEffect:L,stopAllEffects:F,resetRuntime:D}}var cn=require("react");function j0(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function hl(e){return typeof e=="number"&&Number.isFinite(e)}function V0(e){return Array.isArray(e)&&e.length===3&&e.every(hl)}function MS(e){return!j0(e)||!V0(e.position)||!V0(e.target)||e.fov!==null&&!hl(e.fov)||!hl(e.zoom)||e.zoom<=0||e.azimuthAngle!==void 0&&!hl(e.azimuthAngle)||e.polarAngle!==void 0&&!hl(e.polarAngle)?null:{position:e.position,target:e.target,fov:e.fov,zoom:e.zoom,azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle}}function CS(e){if(!j0(e))return null;let t;if(e.camera!==void 0){let r=MS(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 i;if(e.selected===null||typeof e.selected=="string")i=e.selected;else if(e.selected!==void 0)return null;return{camera:t,hidden:n,selected:i}}function F0(e,t,n){let i=Object.values(t).filter(r=>r.visible===!1).map(r=>r.id);return{camera:e??void 0,hidden:i,selected:n?.id??null}}function H0({cameraState:e,setCameraState:t,objectBindings:n,onObjectBindingsChange:i,selectedObjectBinding:r,setSelectedObjectBinding:a,paramKey:o="view",debounceMs:s=400,autoSync:c=!0}){let l=(0,cn.useRef)(null),u=(0,cn.useRef)(null),d=(0,cn.useRef)(null),h=(0,cn.useRef)(null),f=(0,cn.useRef)(null),m=(0,cn.useCallback)(()=>{f.current!==null&&(window.clearTimeout(f.current),f.current=null),d.current=null,h.current=null},[]),x=(0,cn.useCallback)(()=>{let y=F0(e,n,r);return`${o}=${encodeURIComponent(JSON.stringify(y))}`},[e,n,r,o]),E=(0,cn.useCallback)(()=>{let y=new URL(window.location.href);return y.hash=x(),y.toString()},[x]),w=(0,cn.useCallback)(y=>{let M=new URL(window.location.href);M.hash=y,window.history.replaceState(null,"",M.toString()),u.current=y,l.current=new URLSearchParams(M.hash.slice(1)).get(o)},[o]),p=(0,cn.useCallback)(()=>{m(),w(x())},[x,m,w]),g=(0,cn.useRef)({cameraState:e,objectBindings:n,selectedObjectBinding:r});g.current={cameraState:e,objectBindings:n,selectedObjectBinding:r};let[_,S]=(0,cn.useState)(!1);(0,cn.useEffect)(()=>{if(!c||!_){m();return}let y=g.current,M=F0(y.cameraState,y.objectBindings,y.selectedObjectBinding),C=`${o}=${encodeURIComponent(JSON.stringify(M))}`;if(C===u.current){m();return}C===d.current&&s===h.current||(m(),d.current=C,h.current=s,f.current=window.setTimeout(()=>{f.current=null,d.current=null,h.current=null,w(C)},Math.max(0,s)))},[c,e,m,s,n,o,_,r,w]),(0,cn.useEffect)(()=>m,[m]);let T=(0,cn.useRef)(null),A=(0,cn.useRef)(null),b=(0,cn.useCallback)(async()=>{S(!0);let y=window.location.hash.startsWith("#")?window.location.hash.slice(1):window.location.hash,M=new URLSearchParams(y).get(o);if(!M)return T.current=null,!1;if(M===l.current||M===T.current||M===A.current)return!1;let C;try{C=JSON.parse(M)}catch{return!1}let N=CS(C);if(!N)return!1;A.current=M;try{if(N.camera&&await t(N.camera,!1),N.hidden){let L=new Set(N.hidden);i(Object.fromEntries(Object.entries(n).map(([F,V])=>[F,{...V,visible:!L.has(V.id)}])))}if(N.selected!==void 0){let L=N.selected?Nn(n,N.selected):null;a(L?n[L]:null)}return T.current=M,!0}finally{A.current===M&&(A.current=null)}},[n,i,o,t,a]);return(0,cn.useEffect)(()=>{let y=()=>{b().catch(()=>{})};return window.addEventListener("hashchange",y),()=>{window.removeEventListener("hashchange",y)}},[b]),{getShareUrl:E,syncUrl:p,restoreFromUrl:b}}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});
|