@liveroom-tech/react-immersive 5.1.0 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +10 -6
- package/README.md +106 -3427
- package/dist/binding-builder.css +1 -1
- package/dist/binding-builder.js +64 -13
- package/dist/binding-builder.mjs +1 -1
- package/dist/chunk-4FDMYUGT.mjs +3 -0
- package/dist/chunk-CV4E7DOO.mjs +79 -0
- package/dist/chunk-F4WT3HEK.mjs +1 -0
- package/dist/chunk-FPJZDEON.mjs +1 -0
- package/dist/chunk-JHKMRMJH.mjs +1 -0
- package/dist/chunk-TW2M4UXT.mjs +1 -0
- package/dist/chunk-W24UP6NM.mjs +1 -0
- package/dist/hosted.css +1 -1
- package/dist/hosted.d.mts +8 -5
- package/dist/hosted.d.ts +8 -5
- package/dist/hosted.js +63 -12
- package/dist/hosted.mjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.d.mts +48 -9
- package/dist/index.d.ts +48 -9
- package/dist/index.js +62 -11
- package/dist/index.mjs +1 -1
- package/dist/materialVariants-DjTuiWmN.d.mts +314 -0
- package/dist/materialVariants-DjTuiWmN.d.ts +314 -0
- package/dist/modelInfo-BQ5UZu95.d.ts +43 -0
- package/dist/modelInfo-CcYpydB7.d.mts +43 -0
- package/dist/{ModelViewer-Bj-KjiDL.d.mts → modelViewerProps-BalkRDni.d.ts} +133 -12
- package/dist/{ModelViewer-BkQ73y6N.d.ts → modelViewerProps-DdsJDRB7.d.mts} +133 -12
- package/dist/{objectCatalog-BIeXURoq.d.ts → rendererBackend-C_Jb4_Jy.d.mts} +47 -5
- package/dist/{objectCatalog-BIeXURoq.d.mts → rendererBackend-C_Jb4_Jy.d.ts} +47 -5
- package/dist/simple-model-viewer.css +1 -1
- package/dist/simple-model-viewer.d.mts +32 -4
- package/dist/simple-model-viewer.d.ts +32 -4
- package/dist/simple-model-viewer.js +3 -3
- package/dist/simple-model-viewer.mjs +1 -1
- package/dist/utils.d.mts +5 -4
- package/dist/utils.d.ts +5 -4
- package/dist/utils.js +1 -1
- package/dist/utils.mjs +1 -1
- package/package.json +3 -1
- package/dist/chunk-32WCLPTZ.mjs +0 -1
- package/dist/chunk-CSGNL4XU.mjs +0 -3
- package/dist/chunk-F2ILTIPG.mjs +0 -28
- package/dist/chunk-SEESCGUS.mjs +0 -1
- package/dist/chunk-V6GALFL5.mjs +0 -1
- package/dist/chunk-WN6GMMHF.mjs +0 -1
- package/dist/modelInfo-DnkmTGMd.d.mts +0 -23
- package/dist/modelInfo-DnkmTGMd.d.ts +0 -23
package/dist/binding-builder.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";"use client";var m_=Object.create;var kl=Object.defineProperty;var f_=Object.getOwnPropertyDescriptor;var g_=Object.getOwnPropertyNames;var b_=Object.getPrototypeOf,v_=Object.prototype.hasOwnProperty;var x_=(e,t,n)=>t in e?kl(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var y_=(e,t)=>()=>(e&&(t=e(e=0)),t);var Jg=(e,t)=>{for(var n in t)kl(e,n,{get:t[n],enumerable:!0})},Qg=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of g_(t))!v_.call(e,i)&&i!==n&&kl(e,i,{get:()=>t[i],enumerable:!(r=f_(t,i))||r.enumerable});return e};var eb=(e,t,n)=>(n=e!=null?m_(b_(e)):{},Qg(t||!e||!e.__esModule?kl(n,"default",{value:e,enumerable:!0}):n,e)),w_=e=>Qg(kl({},"__esModule",{value:!0}),e);var lh=(e,t,n)=>x_(e,typeof t!="symbol"?t+"":t,n);var tb={};Jg(tb,{bvhWorkerCode:()=>S_});var S_,nb=y_(()=>{"use strict";S_=`(()=>{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 NA=Object.create;var qd=Object.defineProperty;var BA=Object.getOwnPropertyDescriptor;var IA=Object.getOwnPropertyNames;var zA=Object.getPrototypeOf,VA=Object.prototype.hasOwnProperty;var UA=(e,t,n)=>t in e?qd(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var FA=(e,t)=>()=>(e&&(t=e(e=0)),t);var Ux=(e,t)=>{for(var n in t)qd(e,n,{get:t[n],enumerable:!0})},Fx=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of IA(t))!VA.call(e,i)&&i!==n&&qd(e,i,{get:()=>t[i],enumerable:!(r=BA(t,i))||r.enumerable});return e};var lm=(e,t,n)=>(n=e!=null?NA(zA(e)):{},Fx(t||!e||!e.__esModule?qd(n,"default",{value:e,enumerable:!0}):n,e)),jA=e=>Fx(qd({},"__esModule",{value:!0}),e);var Ug=(e,t,n)=>UA(e,typeof t!="symbol"?t+"":t,n);var qx={};Ux(qx,{bvhWorkerCode:()=>GA});var GA,Yx=FA(()=>{"use strict";GA=`(()=>{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,16 +3661,65 @@ 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 AP={};Jg(AP,{BindingBuilder:()=>Vf});module.exports=w_(AP);var K=require("react"),Vw=require("three"),Cn=require("lucide-react");var E=require("react");var _s=require("three"),No=require("three-mesh-bvh"),rb=!1,Ss=new WeakMap,Ll=new WeakMap;function __(){rb||(_s.Mesh.prototype.raycast=No.acceleratedRaycast,rb=!0)}function M_(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;!r||!r.attributes?.position||t.add(r)}),[...t]}function ib(e){let t=0;for(let n of e){let r=n.index?n.index.count:n.attributes.position.count;t+=r/3}return t}var Dl=12e6;function ob(e){return ch(e)>Dl}function ch(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;r?.attributes?.position&&t.add(r)}),ib([...t])}function C_(e,t){return new Promise((n,r)=>{let i=c=>{let p=c.data;if(!p||!p.error&&!p.serialized)return;if(e.removeEventListener("message",i),e.removeEventListener("error",o),p.error){r(new Error(String(p.error)));return}let{serialized:u}=p,d=No.MeshBVH.deserialize(u,t,{setIndex:!1});u.index&&(t.index?t.index.array=u.index:t.setIndex(new _s.BufferAttribute(u.index,1,!1))),t.boundingBox=d.getBoundingBox(new _s.Box3),n(d)},o=c=>{e.removeEventListener("message",i),e.removeEventListener("error",o),r(new Error(c.message||"BVH worker error"))};e.addEventListener("message",i),e.addEventListener("error",o);let a=t.index?t.index.array.slice():null,s=t.attributes.position.array.slice(),l=[s,...a?[a]:[]].map(c=>c.buffer);e.postMessage({index:a,position:s,options:{groups:[...t.groups]}},l)})}async function T_(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await Promise.resolve().then(()=>(nb(),tb)),t=new Blob([e],{type:"text/javascript"}),n=URL.createObjectURL(t),r=new Worker(n);return{worker:r,dispose:()=>{r.terminate(),URL.revokeObjectURL(n)}}}catch{return null}}async function P_(e,t){if(t)try{return await C_(t,e)}catch{}let n=No.computeBoundsTree.call(e);return e.boundsTree=void 0,await new Promise(r=>setTimeout(r,0)),n}async function A_(e,t,n){if(e.boundsTree)return;if(t.buildPromise)return t.buildPromise;let r=(async()=>{let i=await n();t.references>0&&!e.boundsTree&&(e.boundsTree=i,t.ownedTree=i)})();return t.buildPromise=r.finally(()=>{t.buildPromise=void 0,t.references===0&&Ss.delete(e)}),t.buildPromise}async function gd(e,t){if(t?.aborted)return;let n=Ll.get(e);if(!n){if(n=M_(e),ib(n)>Dl){Ll.set(e,[]);return}Ll.set(e,n);for(let i of n){let o=Ss.get(i)??{references:0};o.references+=1,Ss.set(i,o)}}if(n.length===0)return;__();let r=await T_();if(t?.aborted){r?.dispose();return}try{for(let i of n){if(t?.aborted)return;let o=Ss.get(i);o&&await A_(i,o,()=>P_(i,r?.worker))}}finally{r?.dispose()}}function Nl(e){let t=Ll.get(e);if(t){Ll.delete(e);for(let n of t){let r=Ss.get(n);r&&(r.references=Math.max(0,r.references-1),!(r.references>0)&&(r.ownedTree&&n.boundsTree===r.ownedTree&&(No.disposeBoundsTree.call(n),n.boundsTree=void 0),r.ownedTree=void 0,r.buildPromise||Ss.delete(n)))}}}var op=require("@react-three/drei"),Qs=require("@react-three/fiber"),u1=require("qrcode.react"),Tt=require("three");var ab=require("lucide-react");var Bo=require("react/jsx-runtime");function ya({title:e,message:t,tone:n="default"}){return(0,Bo.jsxs)("div",{className:`ri-license-overlay${n==="error"?" ri-license-overlay--error":""}`,children:[(0,Bo.jsxs)("div",{className:"ri-license-overlay__header",children:[n==="error"?(0,Bo.jsx)(ab.AlertTriangle,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):(0,Bo.jsx)("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),(0,Bo.jsx)("span",{className:"ri-license-overlay__title",children:e})]}),(0,Bo.jsx)("p",{className:"ri-license-overlay__message",children:t})]})}var sb=require("react"),bd=class extends sb.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,r){this.props.onLoadError?.(n)}render(){return this.state.hasError?null:this.props.children}};var Ms=require("three");var lb="riEditorGizmo";function vd(e){return e.userData[lb]=!0,e}function xd(e){let t=[];return e.traverse(n=>{n.visible&&n.userData[lb]&&(n.visible=!1,t.push(n))}),()=>{for(let n of t)n.visible=!0}}function yd(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:n,scene:r,camera:i,invalidate:o}=e;if(!n.getContextAttributes().preserveDrawingBuffer)return Promise.reject(new Error("Screenshot capture is disabled. Set preserveDrawingBuffer on ModelViewer to enable it."));let{transparent:a=!1}=t,s=n.getSize(new Ms.Vector2),l=n.getPixelRatio(),c=i instanceof Ms.PerspectiveCamera?i.aspect:null,p=r.background,u=t.width??s.x,d=t.height??s.y,m=u!==s.x||d!==s.y,g=xd(r);return a&&(r.background=null),m&&(n.setPixelRatio(1),n.setSize(u,d,!1),i instanceof Ms.PerspectiveCamera&&(i.aspect=u/d,i.updateProjectionMatrix())),o(),new Promise((v,M)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let w,x;try{w=n.domElement.toDataURL("image/png")}catch(S){x=S}g(),a&&(r.background=p),m&&(n.setPixelRatio(l),n.setSize(s.x,s.y,!1),i instanceof Ms.PerspectiveCamera&&c!==null&&(i.aspect=c,i.updateProjectionMatrix())),o(),x?M(x):v(w)})})})}var dh={webm:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"],mp4:["video/mp4;codecs=avc1.42E01E","video/mp4"]};function wa(e="auto"){return typeof MediaRecorder>"u"?null:(e==="auto"?[...dh.webm,...dh.mp4]:dh[e]).find(n=>MediaRecorder.isTypeSupported(n))??null}function cb(e,t={}){let{fps:n=30,videoBitsPerSecond:r=8e6,signal:i}=t;if(!Number.isFinite(n)||n<1||n>60)throw new Error("Video frame rate must be between 1 and 60.");if(!Number.isFinite(r)||r<=0)throw new Error("Video bitrate must be a positive number.");if(i?.aborted)throw new DOMException("Video export cancelled.","AbortError");let o=wa(t.format);if(!o||typeof e.captureStream!="function"){let _=t.format&&t.format!=="auto"?` as ${t.format.toUpperCase()}`:"";throw new Error(`Video recording${_} is not supported in this browser.`)}let a,s,l=!1,c=!1,p,u,d,m=[],g,v,M=new Promise((_,y)=>{g=_,v=y}),w=()=>{clearTimeout(p),u!==void 0&&cancelAnimationFrame(u),d!==void 0&&cancelAnimationFrame(d),i?.removeEventListener("abort",S),e.removeEventListener("webglcontextlost",k),s&&(s.ondataavailable=null,s.onstop=null,s.onerror=null),a?.getTracks().forEach(_=>_.stop())},x=(_=new DOMException("Video export cancelled.","AbortError"))=>{if(!l){if(l=!0,w(),s&&s.state!=="inactive")try{s.stop()}catch{}v(_)}},S=()=>x(),k=()=>x(new Error("Video export stopped because the WebGL context was lost.")),b=()=>x(new Error("Video export timed out. Keep the viewer tab visible while recording."));return i?.addEventListener("abort",S,{once:!0}),e.addEventListener("webglcontextlost",k),p=setTimeout(b,3e4),{result:M,cancel:x,start(_){l||u!==void 0||(u=requestAnimationFrame(()=>{if(!l)try{a=e.captureStream(n);let y=new MediaRecorder(a,{mimeType:o,videoBitsPerSecond:r});s=y,y.ondataavailable=({data:h})=>{h.size>0&&m.push(h)},y.onerror=()=>x(new Error("The browser could not encode the video.")),y.onstop=()=>{if(l)return;l=!0,w();let h=new Blob(m,{type:y.mimeType||o});h.size===0?v(new Error("The browser produced an empty video.")):g(h)},y.start(1e3),clearTimeout(p),p=setTimeout(b,(_+30)*1e3)}catch(y){x(y)}}))},finish(){l||c||(c=!0,d=requestAnimationFrame(()=>{if(!l)try{if(!s)throw new Error("Video recording did not start.");s.stop()}catch(_){x(_)}}))}}}var zr=require("react"),ph=require("three");var Zt=require("react"),wd=require("@react-three/fiber"),zn=require("three");function uh(e){if(e.duration!==void 0)return e.duration;let t=e.waypoints??[];if(t.length<2)return 24;let n=e.loop===!1?t.slice(0,-1):t;return Math.max(n.reduce((r,i)=>r+(i.segmentDuration??3.5),0),4)}var E_=1.2;function Sd({controlsRef:e,sceneRef:t,config:n,playing:r,resetOnPlay:i=!1,onFinished:o,onUserInteract:a,onStop:s,playOnce:l=!1,startAtPath:c=!1,onStarted:p,onProgress:u}){let d=(0,wd.useThree)(O=>O.invalidate),m=(0,Zt.useMemo)(()=>n.waypoints??[],[n.waypoints]),g=m.length>=2,v=n.loop??!0,M=uh(n),w=(0,Zt.useMemo)(()=>m.map(O=>[...O.position,...O.target,O.azimuthAngle??"",O.polarAngle??"",O.segmentDuration??""].join(",")).join(";"),[m]),x=(0,Zt.useMemo)(()=>{let O=[];if(m.length<2)return O;let $=0;for(let le=0;le<m.length-1;le++)$+=m[le].segmentDuration??3.5,O.push($);return v&&m.length>1&&($+=m[m.length-1].segmentDuration??3.5,O.push($)),O},[m,v]),S=(0,Zt.useMemo)(()=>O=>{if(m.length<2||x.length===0)return O/M;let $=x[x.length-1],le=v?O%M:Math.min(O,M),tt=M>0?le/M*$:0;for(let xe=0;xe<x.length;xe++)if(tt<=x[xe]){let nt=xe===0?0:x[xe-1],ce=x[xe]-nt,Le=ce>0?(tt-nt)/ce:0,he=v?m.length:m.length-1,pt=xe/he,Bt=1/he;return pt+Le*Bt}return 1},[m.length,x,M,v]),k=(0,Zt.useMemo)(()=>g?{position:new zn.CatmullRomCurve3(m.map(O=>new zn.Vector3(...O.position)),v,"catmullrom",.5),target:new zn.CatmullRomCurve3(m.map(O=>new zn.Vector3(...O.target)),v,"catmullrom",.5)}:null,[w,g,v]),b=(0,Zt.useMemo)(()=>{if(!g||!m.every($=>Number.isFinite($.azimuthAngle)&&Number.isFinite($.polarAngle)))return null;let O=m.map($=>({azimuth:$.azimuthAngle,polar:$.polarAngle,distance:new zn.Vector3(...$.position).distanceTo(new zn.Vector3(...$.target))}));for(let $=1;$<O.length;$+=1){let le=O[$-1].azimuth,tt=O[$].azimuth;O[$].azimuth=tt+Math.round((le-tt)/(Math.PI*2))*Math.PI*2}return O},[w,g]),_=(0,Zt.useRef)(0),y=(0,Zt.useRef)(0),h=(0,Zt.useRef)(new zn.Vector3),P=(0,Zt.useRef)(new zn.Vector3),A=(0,Zt.useRef)(!1),C=(0,Zt.useRef)(!0),D=(0,Zt.useRef)(0),B=(0,Zt.useRef)(!1),j=(0,Zt.useRef)(null),W=(0,Zt.useMemo)(()=>new zn.Vector3,[]),U=(0,Zt.useMemo)(()=>new zn.Vector3,[]),te=(0,Zt.useMemo)(()=>new zn.Spherical,[]);return(0,Zt.useEffect)(()=>{_.current=0,D.current=0,y.current=0,B.current=!1},[w,v,M]),(0,Zt.useEffect)(()=>{i&&(D.current=0,_.current=0,B.current=!1)},[i]),(0,Zt.useEffect)(()=>{if(!r){A.current=!1,_.current>0&&!i?D.current=_.current:i&&(D.current=0),(_.current>0||B.current)&&s?.();return}_.current>=M&&!v&&(_.current=0,D.current=0,B.current=!1);let O=e.current;if(O&&(O.getPosition(h.current),O.getTarget(P.current)),i||B.current||D.current===0?(_.current=0,D.current=0,B.current=!1):D.current>0&&D.current<M?_.current=D.current:(_.current=0,D.current=0),y.current=0,!g){let $=t.current;if($){let le=new zn.Box3().setFromObject($).getBoundingSphere(new zn.Sphere);j.current={center:le.center.clone(),radius:le.radius>0?le.radius:1}}}A.current=!0,C.current=!0,d()},[r,g,e,t,d,M,v,w,i,s]),(0,Zt.useEffect)(()=>{if(!r||!a)return;let O=e.current;if(!O)return;let $=()=>{B.current||a()};return O.addEventListener("controlstart",$),()=>O.removeEventListener("controlstart",$)},[r,e,a]),(0,wd.useFrame)((O,$)=>{if(!r||!A.current)return;let le=e.current;if(!le)return;let tt=C.current;C.current=!1,(!tt||!c)&&(_.current+=$,y.current+=$);let xe=(!v||l)&&_.current>=M,nt=xe&&v?0:S(_.current);if(nt=v?nt%1:Math.min(nt,1),k)if(k.target.getPoint(nt,U),b){let Le=v?b.length:b.length-1,he=Math.min(nt,1)*Le,pt=Math.min(Math.floor(he),Le-1),Bt=(pt+1)%b.length,un=nt>=1?1:he-pt,Ie=un*un*(3-2*un),bt=b[pt],Ot=b[Bt],dr=Ot.azimuth+Math.round((bt.azimuth-Ot.azimuth)/(Math.PI*2))*Math.PI*2,de=bt.azimuth+(dr-bt.azimuth)*Ie,Cr=bt.polar+(Ot.polar-bt.polar)*Ie,Xt=bt.distance+(Ot.distance-bt.distance)*Ie;te.set(Math.max(Xt,1e-6),Math.min(Math.max(Cr,1e-6),Math.PI-1e-6),de),W.setFromSpherical(te).add(U)}else k.position.getPoint(nt,W);else{let Le=j.current;if(!Le)return;let he=nt*Math.PI*2,pt=Le.radius*2.2;W.set(Le.center.x+Math.cos(he)*pt,Le.center.y+Le.radius*.6,Le.center.z+Math.sin(he)*pt),U.copy(Le.center)}let ce=c?1:Math.min(y.current/E_,1);if(ce<1){let Le=ce*ce*(3-2*ce);W.lerpVectors(h.current,W,Le),U.lerpVectors(P.current,U,Le)}if(le.setLookAt(W.x,W.y,W.z,U.x,U.y,U.z,!1),tt&&p?.(),u?.(Math.min(_.current/M,1)),xe){A.current=!1,B.current=!0,_.current=0,D.current=0,o?.();return}d()}),null}function db(e){let t=(0,zr.useRef)(e);t.current=e;let n=(0,zr.useRef)(null),[r,i]=(0,zr.useState)(null),[o,a]=(0,zr.useState)(0),s=(0,zr.useCallback)(()=>n.current?.cancel(),[]),l=(0,zr.useCallback)(()=>n.current!==null,[]);(0,zr.useEffect)(()=>s,[e.modelUrl,s]);let c=(0,zr.useCallback)(async(u={})=>{let{rendererCaptureRef:d,controlsRef:m,cinematicConfig:g,ready:v,onCaptureStart:M}=t.current,w=d.current,x=m.current;if(!v||!w||!x)throw new Error("Viewer not ready for video export.");if(w.gl.xr.isPresenting)throw new Error("Exit the XR session before recording a video.");if(n.current)throw new Error("A video export is already in progress.");let S=u.mode??(g?"cinematic":"turntable");if(S==="cinematic"&&!g)throw new Error("Enable a cinematic camera path before recording it.");let k=S==="cinematic"?g:{loop:!0},b=u.duration??uh(k);if(!Number.isFinite(b)||b<=0||b>300)throw new Error("Video duration must be greater than 0 and at most 300 seconds.");let _=cb(w.gl.domElement,u);n.current=_;let y=x.getPosition(new ph.Vector3),h=x.getTarget(new ph.Vector3),P=x.enabled,A=xd(w.scene);x.stop(),x.enabled=!1,a(0),M(),i({config:{...k,duration:b,autoPlay:!1},onStarted:()=>_.start(b),onFinished:_.finish});try{return await _.result}finally{A(),x.enabled=P,x.setLookAt(y.x,y.y,y.z,h.x,h.y,h.z,!1),w.invalidate(),n.current=null,i(null)}},[]),p=(0,zr.useCallback)(u=>{let d=Math.floor(u*100);a(m=>m===d?m:d)},[]);return{captureVideo:c,cancelVideo:s,isRecording:l,recording:r,progress:o,onProgress:p}}var ei=require("react");function ub(e){let[t,n]=(0,ei.useState)(null),[r,i]=(0,ei.useState)(!1),[o,a]=(0,ei.useState)(!1),[s,l]=(0,ei.useState)(!1),[c,p]=(0,ei.useState)(null),u=(0,ei.useRef)(!1);(0,ei.useEffect)(()=>{if(!t||!e){i(!1),a(!1),p(null);return}let m=t.ownerDocument;i(m.fullscreenEnabled===!0&&typeof t.requestFullscreen=="function"&&typeof m.exitFullscreen=="function");let g=()=>{a(m.fullscreenElement===t),p(null)};return g(),m.addEventListener("fullscreenchange",g),()=>m.removeEventListener("fullscreenchange",g)},[t,e]);let d=(0,ei.useCallback)(async()=>{if(!t||!e||!r||u.current)return;let m=t.ownerDocument,g=m.fullscreenElement===t;u.current=!0,l(!0),p(null);try{g?await m.exitFullscreen():await t.requestFullscreen(),a(m.fullscreenElement===t)}catch{p(g?"Could not exit fullscreen. Press Escape to exit.":"Could not enter fullscreen. Check your browser or iframe fullscreen permissions and try again.")}finally{u.current=!1,l(!1)}},[t,e,r]);return{rootRef:n,supported:r,active:o,pending:s,error:c,toggle:d}}var Jn=require("react");function pb(e,{onLost:t,onRestored:n,initiallyLost:r=!1}){let i=r,o=s=>{s.preventDefault(),!i&&(i=!0,t())},a=()=>{i&&(i=!1,n())};return e.addEventListener("webglcontextlost",o),e.addEventListener("webglcontextrestored",a),r&&t(),()=>{e.removeEventListener("webglcontextlost",o),e.removeEventListener("webglcontextrestored",a)}}function hb(){let[e,t]=(0,Jn.useState)(null),[n,r]=(0,Jn.useState)(0),[i,o]=(0,Jn.useState)("ready"),a=(0,Jn.useRef)(null),s=(0,Jn.useRef)(!1),l=(0,Jn.useRef)(null),c=(0,Jn.useRef)(null),p=(0,Jn.useCallback)(m=>{c.current?.dispose(),c.current=null,l.current=m,t(m)},[]),u=(0,Jn.useCallback)(()=>{s.current||(s.current=!0,a.current?.(),a.current=null,l.current&&(c.current=l.current),l.current=null,t(null),o("rebuilding"),r(m=>m+1))},[]),d=(0,Jn.useCallback)(()=>{s.current=!1,o("lost")},[]);return(0,Jn.useEffect)(()=>()=>{c.current?.dispose(),c.current=null},[]),(0,Jn.useEffect)(()=>{if(!e)return;s.current=!1,o("ready");let m=pb(e.domElement,{initiallyLost:e.getContext().isContextLost(),onLost:d,onRestored:u});return a.current=m,()=>{m(),a.current===m&&(a.current=null)}},[e,d,u]),{generation:n,status:i,reload:u,fail:d,onRendererCreated:p}}var mb=require("react"),Cs=class extends mb.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,r){this.props.onError?.(n)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};var Ts=require("react");function fb({modelUrl:e,tilesetUrl:t=null,getOptions:n,now:r=()=>performance.now(),timestamp:i=()=>new Date().toISOString(),sessionId:o=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`viewer-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,log:a=l=>console.info("[react-immersive engagement]",l),warn:s=l=>console.warn("[react-immersive] onEngagement callback failed:",l)}){let l=r(),c=()=>{let C=n();return!!(C.onEngagement||C.debugEngagement)},p=C=>Math.max(0,Math.round(r()-C)),u=C=>{let{onEngagement:D,debugEngagement:B}=n();if(!D&&!B)return;let j={...C,sessionId:o,timestamp:i(),elapsedMs:p(l),modelUrl:e,tilesetUrl:t};B&&a(j);try{Promise.resolve(D?.(j)).catch(s)}catch(W){s(W)}},d=null,m=null,g=null,v=null,M=null,w=C=>{d=C},x=C=>{!c()||d===C.objectKey||(d=C.objectKey,u({type:"part-viewed",...C}))},S=(C,D)=>{let B=JSON.stringify([D,C]);!c()||C===D||B===m||(m=B,u({type:"variant-chosen",variant:C,previousVariant:D}))},k=C=>{C!==g&&(g=C,m=null)},b=()=>{!c()||v!==null||(v=r(),u({type:"ar-started"}))},_=(C="session-ended")=>{if(v===null)return;let D=p(v);v=null,u({type:"ar-ended",durationMs:D,reason:C})},y=(C="stopped")=>{if(!M)return;let{startedAt:D,annotationCount:B}=M;M=null,u({type:"tour-stopped",annotationCount:B,durationMs:p(D),reason:C})};return{setSelectedPart:w,viewPart:x,setMaterialVariant:k,chooseVariant:S,startAR:b,endAR:_,startTour:C=>{!c()||C<=0||(y("restarted"),M={startedAt:r(),annotationCount:C},u({type:"tour-started",annotationCount:C}))},stopTour:y,completeTour:()=>{if(!M)return;let{startedAt:C,annotationCount:D}=M;M=null,u({type:"tour-completed",annotationCount:D,durationMs:p(C)})},interrupt:()=>{_("interrupted"),y("interrupted")},requestARLaunch:C=>u({type:"ar-launch-requested",channel:C})}}function gb(e){let t=(0,Ts.useRef)(e);t.current=e;let n=!!(e.onEngagement||e.debugEngagement),r=(0,Ts.useMemo)(()=>fb({modelUrl:e.modelUrl,tilesetUrl:e.tilesetUrl,getOptions:()=>t.current}),[e.modelUrl,e.tilesetUrl,n]);return(0,Ts.useEffect)(()=>()=>r.interrupt(),[r]),r}var Ps=require("fflate");var bb;function vb(e){bb=e}function Bl(e){bb?.(e)}var R_=[".glb",".gltf",".obj",".fbx",".usdz",".zip"],k_=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],Ol=1024*1024,xb=128*Ol,yb=1024,wb=128*Ol,Sb=256*Ol,_b=200,L_=Ol,so=new Map,Pb=".glb,.gltf,.obj,.fbx,.usdz,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function Il(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 Ab(e){return so.get(e)??{format:Il(e)}}function D_(e){let t=e.name.toLowerCase();return R_.some(n=>t.endsWith(n))||k_.includes(e.type)}async function mh(e){if(!D_(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 Mb(e,"usdz");if(t.endsWith(".zip")||N_(e.type))return B_(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return Cb(e);let n=Il(e.name);return n==="gltf"?Cb(e):Mb(e,n)}function Mb(e,t){let n=URL.createObjectURL(e);return so.set(n,{format:t,entryPath:e.name}),{url:n,name:e.name,format:t,cleanup:()=>{Bl(n),so.delete(n),URL.revokeObjectURL(n)}}}function N_(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function Cb(e){let t=await e.text(),n=Eb(t,e.name);for(let i of Rb(n))if(!fh(i))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let r=URL.createObjectURL(e);return so.set(r,{format:"gltf",entryPath:e.name}),{url:r,name:e.name,format:"gltf",cleanup:()=>{Bl(r),so.delete(r),URL.revokeObjectURL(r)}}}async function B_(e){if(e.size>xb)throw new Error(`Model zip is too large. The compressed archive must be ${hh(xb)} or smaller.`);let t=await O_(new Uint8Array(await e.arrayBuffer())),n=new Map;for(let[a,s]of Object.entries(t)){let l=gh(a);!l||kb(l)||n.set(l,s)}let r=[...n.keys()].filter(a=>/\.(gltf|obj|fbx)$/i.test(a));if(r.length===0)throw new Error("Invalid model zip: no .gltf, .obj, or .fbx file found.");if(r.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let i=r[0],o=Il(i);if(o==="gltf")return z_(e,i,n);if(o==="obj"||o==="fbx")return I_(e,i,o,n);throw new Error(`Unsupported model entry ${i}.`)}function O_(e){return new Promise((t,n)=>{let r=0,i=0,o=null,a=l=>(o??(o=new Error(`Invalid model zip: ${l}`)),!1);(0,Ps.unzip)(e,{filter:l=>{if(o)return!1;if(r+=1,r>yb)return a(`archive contains more than ${yb.toLocaleString()} entries.`);if(l.originalSize>wb)return a(`${l.name} expands beyond the ${hh(wb)} per-file limit.`);if(i+=l.originalSize,i>Sb)return a(`expanded contents exceed ${hh(Sb)}.`);if(l.originalSize>=L_&&(l.size===0||l.originalSize/l.size>_b))return a(`${l.name} exceeds the ${_b}:1 compression-ratio limit.`);let c=gh(l.name);return!!c&&!kb(c)}},(l,c)=>{o?n(o):l?n(new Error(`Invalid model zip: ${l.message}`)):t(c)})})}function hh(e){return`${e/Ol} MiB`}function I_(e,t,n,r){let i=[],o={};for(let[s,l]of r){let c=URL.createObjectURL(new Blob([l],{type:Lb(s)}));i.push(c),o[s]=c}let a=o[t];if(!a)throw i.forEach(s=>URL.revokeObjectURL(s)),new Error(`Invalid model zip: could not read ${t}.`);return so.set(a,{format:n,entryPath:t,resourceUrls:o}),{url:a,name:e.name,format:n,cleanup:()=>{Bl(a),so.delete(a),i.forEach(s=>URL.revokeObjectURL(s))}}}function z_(e,t,n){let r=n.get(t);if(!r)throw new Error("Invalid GLTF zip: no .gltf found.");let i=Eb((0,Ps.strFromU8)(r),t);U_(i,t);let o=F_(t),a=[];try{Tb(i.buffers,o,n,a),Tb(i.images,o,n,a);let s=new Blob([(0,Ps.strToU8)(JSON.stringify(i))],{type:"model/gltf+json"}),l=URL.createObjectURL(s);return a.push(l),so.set(l,{format:"gltf",entryPath:t}),{url:l,name:e.name,format:"gltf",cleanup:()=>{Bl(l),so.delete(l),a.forEach(c=>URL.revokeObjectURL(c))}}}catch(s){throw a.forEach(l=>URL.revokeObjectURL(l)),s}}function Tb(e,t,n,r){for(let i of e??[]){if(typeof i.uri!="string"||fh(i.uri))continue;let o=V_(t,i.uri),a=n.get(o);if(!a)throw new Error(`Invalid GLTF zip: missing referenced asset ${i.uri}.`);let s=URL.createObjectURL(new Blob([a],{type:Lb(o)}));r.push(s),i.uri=s}}function Eb(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function Rb(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function U_(e,t){for(let n of Rb(e)){if(fh(n))continue;let r=/^[a-z][a-z0-9+.-]*:/i.test(n),i=n.startsWith("/")||n.startsWith("\\");if(r||i)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function fh(e){return e.startsWith("data:")}function gh(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(r=>r&&r!==".")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function kb(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(n=>n===".DS_Store"||n.startsWith("._"))}function F_(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function V_(e,t){let n=t.split(/[?#]/)[0],r=j_(n);return gh(e?`${e}/${r}`:r)}function j_(e){try{return decodeURI(e)}catch{return e}}function Lb(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 H_={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ"},G_=/\.(glb|gltf|obj|fbx|usdz|zip)$/i;function W_(e,t){let n=e?.response?.status;if(typeof n=="number")return n;let r=/responded with (\d{3})/.exec(t);return r?Number(r[1]):null}function Db(e,t,n){let r=e instanceof Error?e.message:e==null?"":String(e),i="This model couldn't be loaded",o=r||null,a=W_(e,r);if(a===404||a===410)return{title:i,detail:`Nothing was found at this address (${a}). Check that modelUrl points to the file.`,technical:o};if(a===401||a===403)return{title:i,detail:`The server refused access to the file (${a}). Check that the file is public, or that a signed URL hasn't expired.`,technical:o};if(a!==null)return{title:i,detail:`The server responded with ${a} when the file was requested.`,technical:o};if(/failed to fetch|networkerror|load failed|network error/i.test(r))return{title:i,detail:"The download was blocked or failed. Check that the URL is correct and, if the file is on another domain, that its server allows cross-origin requests (CORS) from this site.",technical:o};if(/<!doctype|<html/i.test(r))return{title:i,detail:"The server sent back a web page instead of a model. There's probably no file at this path: many servers answer a missing file with their index.html.",technical:o};let s=t.split(/[?#]/,1)[0],l=H_[n??Il(t)],c=G_.test(s);return{title:i,detail:c||n?`The file couldn't be read as ${l}. Check that it's a valid ${l} file${n?" and that modelFormat matches it":""}.`:`The file couldn't be read as ${l}. The URL has no file extension, so set modelFormat to the file's format.`,technical:o}}var Nb={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1,showMaterialVariants:!1},X_=Object.freeze({minimal:Object.freeze({...Nb}),showcase:Object.freeze({...Nb,autoRotate:!0}),configurator:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!0,showMaterialVariants:!0}),inspector:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!0,showDownloadButton:!0,showResetButton:!0,showViewGizmo:!0,showMeasureTools:!0,showUvCheckerButton:!0,showExplodeControls:!0,showSectionTools:!0,showIsolateControls:!0,enableKeyboardNavigation:!0})}),q_=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function Bb(e){let t={};for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t}function $_({ui:e,tools:t,controls:n,perf:r,tiles:i,xr:o,decoders:a}){let s=e?.download,l=e?.mouseController,c=t?.measure,p=n?.autoRotate;return{showObjectBindingDataPanel:e?.objectPanel,showSceneObjectsPanel:e?.sceneObjects,showDownloadButton:s===void 0?void 0:s!==!1,downloadFilename:typeof s=="string"?s:void 0,showResetButton:e?.reset,showFullscreenButton:e?.fullscreen,showLoadingOverlay:e?.loadingOverlay,showViewGizmo:e?.viewGizmo,showMouseController:l===void 0?void 0:l!==!1,mouseControllerPosition:typeof l=="object"?l.position:void 0,mouseControllerOpacity:typeof l=="object"?l.opacity:void 0,showAnnotationNavigation:e?.annotationNavigation,showAnnotationOnHover:e?.annotationOnHover,highlightOnHover:e?.highlightOnHover,showMaterialVariants:e?.materialVariants,showMeasureTools:c===void 0?void 0:c!==!1,measurementUnit:typeof c=="object"?c.unit:void 0,showUvCheckerButton:t?.uvChecker,showExplodeControls:t?.explode,showSectionTools:t?.section,showIsolateControls:t?.isolate,texturePositioning:t?.texturePositioning,enableCameraControls:n?.enabled,enableKeyboardNavigation:n?.keyboard,disableZoom:n?.zoom===void 0?void 0:!n.zoom,zoomOnSelected:n?.zoomOnSelect,autoRotate:p===void 0?void 0:p!==!1,autoRotateSpeed:typeof p=="number"?p:void 0,refitOnResize:n?.refitOnResize,cameraLimits:n?.limits,moveSensitivity:n?.moveSensitivity,zoomSensitivity:n?.zoomSensitivity,renderMode:r?.renderMode,maxDpr:r?.maxDpr,performanceProfile:r?.profile,preserveDrawingBuffer:r?.preserveDrawingBuffer,tilesetUrl:i?.url,tilesErrorTarget:i?.errorTarget,tilesCacheSize:i?.cacheSize,enableXR:o?.enabled,usdzUrl:o?.usdzUrl,arScaleMode:o?.scaleMode,mobileHandoffUrl:o?.mobileHandoffUrl,dracoDecoderPath:a?.draco,ktx2TranscoderPath:a?.ktx2,meshopt:a?.meshopt}}function Ob(e){let t={...e};for(let n of q_)delete t[n];return{...e.preset?X_[e.preset]:void 0,...Bb(t),...Bb($_(e))}}var Sa=Object.freeze([{id:"change-color",label:"Change Color",handling:"viewer",description:"Opens a color picker docked under the action and commits the result to style.material.baseColor."},{id:"change-material",label:"Change Material",handling:"viewer",description:"Opens the material picker so the viewer can swap the object's texture."},{id:"add-text",label:"Add Text",handling:"viewer",description:"Opens a text box docked under the action; the viewer's user types, clicks the object to place it, and can resize, turn, move, or remove it. Saved to the binding's decals."},{id:"add-image",label:"Add Image",handling:"viewer",description:"Lets the viewer's user choose an image, click the object to place it, and resize, turn, move, or remove it. Saved to the binding's decals."},{id:"toggle-visibility",label:"Toggle Visibility",handling:"viewer",description:"Flips the binding's visible flag."},{id:"toggle-light",label:"Toggle Light",handling:"viewer",description:"Turns the scene lights attached to this object on or off, or the object's own glow when none is attached."},{id:"change-light-color",label:"Change Light Color",handling:"viewer",description:"Opens a color picker docked under the action for the scene lights attached to this object, or the object's own glow."},{id:"set-brightness",label:"Set Brightness",handling:"viewer",description:"Opens a brightness slider docked under the action for the scene lights attached to this object, or the object's own glow."}]),_d="__custom__";function zl(e){return Sa.find(t=>t.id===e)}var Ul=Sa.filter(e=>e.handling==="viewer").map(e=>e.id),Y_=new Set(["","New Action",...Sa.map(e=>e.label)]);function bh(e){return Y_.has(e.trim())}function Ib(e,t){let n=Array.from({length:t.length+1},(r,i)=>i);for(let r=1;r<=e.length;r+=1){let i=[r];for(let o=1;o<=t.length;o+=1){let a=n[o-1]+(e[r-1]===t[o-1]?0:1);i[o]=Math.min(i[o-1]+1,n[o]+1,a)}n=i}return n[t.length]}function zb(e){if(zl(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let n=t.replace(/[^a-z0-9]/g,""),r=null;for(let i of Sa){let o=Math.min(Ib(t,i.id),Ib(n,i.id.replace(/[^a-z0-9]/g,"")));(!r||o<r.distance)&&(r={id:i.id,distance:o})}return r&&r.distance<=2?r.id:null}var Ub=require("three");function Oo(e,t){if(e[t])return t;let n=Object.entries(e).find(([,i])=>i.id===t)?.[0];return n||(Object.entries(e).find(([,i])=>i.modelObjectId===t)?.[0]??null)}function Fb(e,t,n){let r=t[n]?.modelObjectId;return e.lighting.lights.filter(i=>{let o=i.attachment?.objectId;return o?Oo(t,o)===n||o===r:!1})}function vh(e,t){return e.lighting.lights.some(n=>t[n.id])?{...e,lighting:{...e.lighting,lights:e.lighting.lights.map(n=>t[n.id]?{...n,...t[n.id]}:n)}}:e}function Vb(e){let t=null;if(e?.traverse(i=>{if(t)return;let o=i.material;for(let a of Array.isArray(o)?o:o?[o]:[])if(a.emissive instanceof Ub.Color){t=a;return}}),!t)return{color:"#000000",intensity:0,on:!1};let n=`#${t.emissive.getHexString()}`,r=t.emissiveIntensity??1;return{color:n,intensity:r,on:n!=="#000000"&&r>0}}var jb=require("react-colorful"),Un=require("react/jsx-runtime");function Hb({kind:e,color:t,brightness:n,onColorChange:r,onBrightnessChange:i,onClose:o}){return(0,Un.jsx)("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:a=>a.stopPropagation(),children:e==="change-light-color"?(0,Un.jsxs)(Un.Fragment,{children:[(0,Un.jsx)("p",{className:"ri-popoverLabel",children:"Light color"}),(0,Un.jsx)(jb.HexColorPicker,{color:t,onChange:r}),(0,Un.jsxs)("div",{className:"ri-inlineRow",children:[(0,Un.jsx)("span",{className:"ri-colorCode",children:t}),(0,Un.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]}):(0,Un.jsxs)(Un.Fragment,{children:[(0,Un.jsx)("p",{className:"ri-popoverLabel",children:"Brightness"}),(0,Un.jsx)("input",{type:"range",min:0,max:200,step:1,value:n,"aria-label":"Brightness",style:{width:"100%"},onChange:a=>i(Number(a.target.value))}),(0,Un.jsxs)("div",{className:"ri-inlineRow",children:[(0,Un.jsxs)("span",{className:"ri-colorCode",children:[n,"%"]}),(0,Un.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]})})}var Fl=require("react");var Io=require("lucide-react"),As=require("react");function Gb(e){let t=!1,n,r=()=>{t||(e(),t||(n=setTimeout(r,70)))};return e(),n=setTimeout(r,300),()=>{t=!0,clearTimeout(n)}}var lo=require("react/jsx-runtime");function Md({onNudge:e}){let t=(0,As.useRef)(e);t.current=e;let n=(0,As.useRef)(null),r=(0,As.useRef)(null),i=()=>{n.current?.(),n.current=null,r.current=null};return(0,As.useEffect)(()=>{let o=s=>{s.pointerId===r.current&&i()},a=s=>{s.key==="Escape"&&i()};return window.addEventListener("pointerup",o,!0),window.addEventListener("pointercancel",o,!0),window.addEventListener("blur",i),window.addEventListener("keydown",a),()=>{i(),window.removeEventListener("pointerup",o,!0),window.removeEventListener("pointercancel",o,!0),window.removeEventListener("blur",i),window.removeEventListener("keydown",a)}},[]),(0,lo.jsxs)("div",{className:"ri-decalPosition",children:[(0,lo.jsxs)("div",{children:[(0,lo.jsx)("div",{className:"ri-decalPosition__label",children:"Position"}),(0,lo.jsx)("div",{className:"ri-decalPosition__hint",children:"Click to fine-tune \xB7 Hold to move"})]}),(0,lo.jsx)("div",{className:"ri-decalPosition__pad",role:"group","aria-label":"Move decal in small steps",children:[["up",Io.ArrowUp],["left",Io.ArrowLeft],["right",Io.ArrowRight],["down",Io.ArrowDown]].map(([o,a])=>(0,lo.jsx)("button",{type:"button",className:`ri-decalPosition__button ri-decalPosition__button--${o}`,"aria-label":`Move decal ${o}`,title:`Move ${o} on the visible surface`,onPointerDown:s=>{s.button===0&&(s.preventDefault(),s.currentTarget.focus({preventScroll:!0}),i(),r.current=s.pointerId,n.current=Gb(()=>t.current(o)))},onClick:s=>{s.detail===0&&t.current(o)},children:(0,lo.jsx)(a,{size:16})},o))})]})}var mt=require("react/jsx-runtime"),K_=e=>Math.round(e*180/Math.PI);function Wb({kind:e,decals:t,activeId:n,error:r,moving:i,defaultSize:o,onSelect:a,onAddText:s,onAddImage:l,onChange:c,onMove:p,onNudge:u,onRemove:d,onClose:m}){let[g,v]=(0,Fl.useState)(""),[M,w]=(0,Fl.useState)("#ffffff"),x=(0,Fl.useRef)(null),S=t.find(b=>b.id===n)??null;return(0,mt.jsxs)("div",{className:"ri-popover ri-popover--inline ri-decalControl",onPointerDown:b=>b.stopPropagation(),children:[e==="add-text"?(0,mt.jsxs)(mt.Fragment,{children:[(0,mt.jsx)("p",{className:"ri-popoverLabel",children:"Text"}),(0,mt.jsxs)("div",{className:"ri-decalControl__row",children:[(0,mt.jsx)("input",{className:"ri-decalControl__input",value:g,placeholder:"Your text","aria-label":"Text to add",onChange:b=>v(b.target.value)}),(0,mt.jsx)("input",{type:"color",className:"ri-decalControl__color",value:M,"aria-label":"Text colour",onChange:b=>w(b.target.value)})]}),(0,mt.jsx)("button",{type:"button",className:"ri-uploadButton",disabled:!g.trim(),onClick:()=>{s(g.trim(),M)&&v("")},children:"Add text"})]}):(0,mt.jsxs)(mt.Fragment,{children:[(0,mt.jsx)("p",{className:"ri-popoverLabel",children:"Image"}),(0,mt.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:()=>x.current?.click(),children:"Choose image"}),(0,mt.jsx)("input",{ref:x,type:"file",accept:"image/png,image/jpeg,image/webp,image/svg+xml",className:"ri-hiddenInput","aria-label":"Image to add",onChange:b=>{let _=b.target.files?.[0];b.target.value="",_&&l(_)}})]}),r?(0,mt.jsx)("div",{className:"ri-decalControl__hint",role:"alert",children:r}):null,t.length>0?(0,mt.jsx)("div",{className:"ri-decalControl__list",role:"group","aria-label":"Added",children:t.map((b,_)=>(0,mt.jsx)("button",{type:"button",className:`ri-decalControl__chip ${b.id===n?"ri-decalControl__chip--active":""}`,"aria-pressed":b.id===n,onClick:()=>a(b.id),children:b.image?`Image ${_+1}`:b.text||`Text ${_+1}`},b.id))}):null,S?(0,mt.jsxs)("div",{className:"ri-decalControl__editor",children:[(0,mt.jsx)(Md,{onNudge:b=>u(S.id,b)}),S.image?null:(0,mt.jsxs)("div",{className:"ri-decalControl__row",children:[(0,mt.jsx)("input",{className:"ri-decalControl__input",value:S.text??"","aria-label":"Text",onChange:b=>c(S.id,{text:b.target.value})}),(0,mt.jsx)("input",{type:"color",className:"ri-decalControl__color",value:S.color??"#ffffff","aria-label":"Colour",onChange:b=>c(S.id,{color:b.target.value})})]}),(0,mt.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,mt.jsx)("span",{children:"Size"}),(0,mt.jsx)("input",{type:"range",min:o/10,max:o*4,step:o/50,value:S.size,"aria-label":"Size",onChange:b=>c(S.id,{size:Number(b.target.value)})})]}),(0,mt.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,mt.jsx)("span",{children:"Turn"}),(0,mt.jsx)("input",{type:"range",min:-180,max:180,step:1,value:K_(S.rotation??0),"aria-label":"Rotation",onChange:b=>c(S.id,{rotation:Number(b.target.value)*Math.PI/180})})]}),(0,mt.jsxs)("div",{className:"ri-inlineRow",children:[(0,mt.jsx)("button",{type:"button",className:"ri-secondaryButton","aria-pressed":i,title:"Drag the decal across the object's surface",onClick:()=>p(S.id),children:"Move"}),(0,mt.jsx)("button",{type:"button",className:"ri-removeButton",onClick:()=>d(S.id),children:"Remove"})]})]}):null,(0,mt.jsxs)("div",{className:"ri-inlineRow",children:[(0,mt.jsx)("span",{className:"ri-colorCode",children:t.length===0?"None added yet":`${t.length} added`}),(0,mt.jsx)("button",{type:"button",className:"ri-secondaryButton",onClick:m,children:"Done"})]})]})}var Od=require("react"),bv=require("@react-three/fiber"),Pi=require("three");var Ht=require("three"),Z_=.5,Vl=4;function J_(e,t=0){let n=new Ht.Vector3(...e);n.lengthSq()<1e-12&&n.set(0,0,1),n.normalize();let r=new Ht.Object3D;return Math.abs(n.y)>.999&&r.up.set(0,0,-Math.sign(n.y)),r.lookAt(n),r.rotateZ(t),r.rotation.clone()}function Q_(e,t,n){let r=null;if(e.bones&&t.bones){r=new Map;for(let[i,o]of e.bones)r.set(i,o*(1-n));for(let[i,o]of t.bones)r.set(i,(r.get(i)??0)+o*n)}return{position:e.position.clone().lerp(t.position,n),normal:e.normal.clone().lerp(t.normal,n),bones:r}}function Xb(e,t,n,r){let i=a=>r?a.position[t]<=n:a.position[t]>=n,o=[];for(let a=0;a<e.length;a++){let s=e[a],l=e[(a+1)%e.length],c=i(s);if(c&&o.push(s),c!==i(l)){let p=l.position[t]-s.position[t];o.push(Q_(s,l,(n-s.position[t])/p))}}return o}function Cd(e,t,n){let r=e.geometry,i=r.getAttribute("position");if(!i)return null;let o=r.getAttribute("normal"),a=r.getAttribute("skinIndex"),s=r.getAttribute("skinWeight"),l=!!(a&&s),c=r.getIndex(),p=Math.max(t.size,1e-6),u=p/(n>0&&Number.isFinite(n)?n:1),d=Math.max(p,u)*Z_,m={x:p/2,y:u/2,z:d/2},g=new Ht.Matrix4().makeRotationFromEuler(J_(t.normal,t.rotation)).setPosition(...t.position),v=g.clone().invert(),M=(W,U)=>{let te=null;if(l){te=new Map;for(let O=0;O<Vl;O++){let $=s.getComponent(W,O);if($<=0)continue;let le=a.getComponent(W,O);te.set(le,(te.get(le)??0)+$)}}return{position:U.clone(),normal:o?new Ht.Vector3().fromBufferAttribute(o,W):new Ht.Vector3,bones:te}},w=[],x=[],S=[],k=[],b=[],_=new Ht.Vector3,y=new Ht.Vector3,h=new Ht.Vector3,P=W=>{if(S.push(.5+W.position.x/p,.5-W.position.y/u),_.copy(W.position).applyMatrix4(g),w.push(_.x,_.y,_.z),x.push(W.normal.x,W.normal.y,W.normal.z),!W.bones)return;let U=[...W.bones].sort((O,$)=>$[1]-O[1]).slice(0,Vl),te=U.reduce((O,[,$])=>O+$,0)||1;for(let O=0;O<Vl;O++)k.push(U[O]?.[0]??0),b.push((U[O]?.[1]??0)/te)},A=["x","y","z"],C=[new Ht.Vector3,new Ht.Vector3,new Ht.Vector3],D=[0,0,0],B=(c?c.count:i.count)/3;for(let W=0;W<B;W++){for(let O=0;O<3;O++){let $=W*3+O;D[O]=c?c.getX($):$,C[O].fromBufferAttribute(i,D[O]).applyMatrix4(v)}if(A.some(O=>C[0][O]>m[O]&&C[1][O]>m[O]&&C[2][O]>m[O]||C[0][O]<-m[O]&&C[1][O]<-m[O]&&C[2][O]<-m[O]))continue;let U=C.map((O,$)=>M(D[$],O));if(!o){y.copy(U[1].position).sub(U[0].position),h.copy(U[2].position).sub(U[0].position);let O=y.cross(h).transformDirection(g);for(let $ of U)$.normal.copy(O)}let te=U;for(let O of A)if(te=Xb(te,O,m[O],!0),te=Xb(te,O,-m[O],!1),te.length<3)break;for(let O=1;O+1<te.length;O++)P(te[0]),P(te[O]),P(te[O+1])}if(w.length===0)return null;let j=new Ht.BufferGeometry;return j.setAttribute("position",new Ht.Float32BufferAttribute(w,3)),j.setAttribute("normal",new Ht.Float32BufferAttribute(x,3)),j.setAttribute("uv",new Ht.Float32BufferAttribute(S,2)),l&&(j.setAttribute("skinIndex",new Ht.Uint16BufferAttribute(k,Vl)),j.setAttribute("skinWeight",new Ht.Float32BufferAttribute(b,Vl))),j}function $b(e){return JSON.stringify([e.image??null,e.image?null:[e.text??"",e.color,e.fontFamily,e.fontWeight],e.position,e.normal,e.size,e.rotation??0])}var qb=256,xh=24;function Yb(e){let t=`${e.fontWeight??"bold"} ${qb-xh*2}px ${e.fontFamily||"sans-serif"}`,n=document.createElement("canvas"),r=n.getContext("2d");r.font=t;let i=e.text||" ";n.width=Math.min(Math.max(Math.ceil(r.measureText(i).width)+xh*2,8),4096),n.height=qb,r.font=t,r.textAlign="center",r.textBaseline="middle",r.fillStyle=e.color??"#ffffff",r.fillText(i,n.width/2,n.height/2,n.width-xh);let o=new Ht.CanvasTexture(n);return o.flipY=!1,o.colorSpace=Ht.SRGBColorSpace,{texture:o,aspect:n.width/n.height}}var Wl=require("react"),Ur=require("three");var Gn=require("three");function Kb(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function Zb(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function Wn(e){return!!(e&&"isMesh"in e&&e.isMesh)}var Wi=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],Td={texture:"map",metalnessMap:"metalnessMap",roughnessMap:"roughnessMap",emissiveMap:"emissiveMap",alphaMap:"alphaMap",normalMap:"normalMap",bumpMap:"bumpMap",aoMap:"aoMap",displacementMap:"displacementMap",clearcoatMap:"clearcoatMap",clearcoatRoughnessMap:"clearcoatRoughnessMap",clearcoatNormalMap:"clearcoatNormalMap",anisotropyMap:"anisotropyMap",transmissionMap:"transmissionMap",thicknessMap:"thicknessMap",sheenColorMap:"sheenColorMap",sheenRoughnessMap:"sheenRoughnessMap",specularIntensityMap:"specularIntensityMap",specularColorMap:"specularColorMap"},eM=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function Mi(e){return eM.has(e)?Gn.SRGBColorSpace:Gn.NoColorSpace}function rn(e,t){return e?.[t]?.path}function Jb(e,t){let n=e?.[t]?.offset;if(!n)return;let[r,i]=n;if(!(!Number.isFinite(r)||!Number.isFinite(i)))return r===0&&i===0?void 0:[r,i]}function Qb(e,t){let n=e?.[t]?.scale;if(!(!Number.isFinite(n)||!n))return n===1?void 0:n}function ev(e,t){let n=e?.[t]?.rotation;if(!(!Number.isFinite(n)||!n))return n}function tv(e){return e==="back"?Gn.BackSide:e==="double"?Gn.DoubleSide:Gn.FrontSide}function nv(e){return e==="additive"?Gn.AdditiveBlending:Gn.NormalBlending}function co(e,t=1,n=t){if(e&&typeof e=="object"){let r=e;if(typeof r.x=="number"&&Number.isFinite(r.x)&&typeof r.y=="number"&&Number.isFinite(r.y))return new Gn.Vector2(r.x,r.y)}return new Gn.Vector2(t,n)}function Pd(e){return Number.isFinite(e)&&e>0?e:1}function rv(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function iv(e){return e?.loopMode??"repeat"}var ov=require("three");function Ci(e){return e.isSkinnedMesh===!0}function Rs(e){let t=[];return e.traverse(n=>{Ci(n)&&t.push(n)}),t}var Es="reactImmersiveSkinFreeze";function av(e){return!!e.userData[Es]}function Ad(e,t){let n=e.userData,r=new ov.Matrix4().copy(t).invert(),i=n[Es];if(i){i.frozenInverse.copy(r),e.bindMatrixInverse.copy(r);return}let o={frozenInverse:r,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(r),e.onBeforeRender=function(a,s,l,c,p,u){o.previousOnBeforeRender.call(this,a,s,l,c,p,u),e.bindMatrixInverse.copy(o.frozenInverse)},n[Es]=o}function sv(e){return e.userData[Es]?.frozenInverse??null}function ks(e){let t=e.userData,n=t[Es];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[Es],e.updateMatrixWorld(!0))}var on=require("three"),Ls=new Map,uo={color:"#93c5fd",intensity:.07},_a=new on.Color(uo.color).multiplyScalar(uo.intensity),lv=new on.Color(uo.color),cv=.28,Ds=new Map,Sh=new Map;function tM(e){return`${e.name}|${e.size}|${e.lastModified}`}function Ed(e){let t=tM(e),n=e.name.lastIndexOf("."),r=n>0?e.name.slice(0,n):e.name,i=n>0?e.name.slice(n):"",o=`materials/${e.name}`,a=2;for(;;){let s=Sh.get(o);if(s===void 0||s===t)return Sh.set(o,t),o;o=`materials/${r}-${a}${i}`,a+=1}}function Rd(e){return Ds.get(e)}function dv(e,t){let n=++e.loadGeneration;e.loaded=!1;let r=()=>{if(e.loadGeneration!==n)return;e.loaded=!0;let i=e.pending;e.pending=[];for(let o of i)o()};new on.ImageLoader().load(t,i=>{e.loadGeneration===n&&(e.texture.image=i,e.texture.needsUpdate=!0,r())},void 0,()=>{e.loadGeneration===n&&(console.warn(`Failed to load texture: ${t}`),r())})}function uv(e,t){for(let n of[on.SRGBColorSpace,on.NoColorSpace]){let r=Ls.get(jl(e,n));r&&dv(r,t)}}function Ma(e,t){let n=Ds.get(e);n&&n!==t&&n.startsWith("blob:")&&URL.revokeObjectURL(n),Ds.set(e,t),uv(e,t)}function Hl(e){let t=Ds.get(e);t&&(t.startsWith("blob:")&&URL.revokeObjectURL(t),Ds.delete(e),Sh.delete(e),uv(e,e))}function jl(e,t){return`${t}|${e}`}function Gl(e,t=on.NoColorSpace,n){let r=jl(e,t),i=Ls.get(r);if(i)return n&&!i.loaded&&i.pending.push(n),i.texture;let o=Ds.get(e)??e,a={texture:new on.Texture,refCount:0,loaded:!1,pending:n?[n]:[],loadGeneration:0};return a.texture.flipY=!1,a.texture.colorSpace=t,Ls.set(r,a),dv(a,o),a.texture}function Ns(e,t=on.NoColorSpace,n){let r=Gl(e,t,n);return Ls.get(jl(e,t)).refCount+=1,r}function po(e,t=on.NoColorSpace){let n=Ls.get(jl(e,t));n&&(n.refCount-=1,n.refCount<=0&&(n.loadGeneration+=1,n.pending=[],n.texture.dispose(),Ls.delete(jl(e,t))))}function kd(e,t,n,r,i,o=1,a=0){let s=e.offsetTextures??(e.offsetTextures={}),l=s[t],c=l;if(!c||c.sourcePath!==r||c.base!==n){l?.texture.dispose();let u=n.clone();u.wrapS=on.RepeatWrapping,u.wrapT=on.RepeatWrapping,u.center.set(.5,.5),u.needsUpdate=!0,c={texture:u,sourcePath:r,base:n},s[t]=c}let p=o>0?o:1;return c.texture.offset.set(i[0],i[1]),c.texture.repeat.set(1/p,1/p),c.texture.rotation=a,c.texture}function Ld(e,t){let n=e.offsetTextures,r=n?.[t];r&&(r.texture.dispose(),delete n[t])}function pv(e){let t=e.offsetTextures;if(t){for(let n of Object.values(t))n.texture.dispose();delete e.offsetTextures}}var yh=null;function Dd(){if(yh)return yh;let e=256,t=document.createElement("canvas");t.width=e,t.height=e;let n=t.getContext("2d"),r=n.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);r.addColorStop(0,"#ffffff"),r.addColorStop(.4,"#b5b5b5"),r.addColorStop(1,"#3a3a3a"),n.fillStyle=r,n.fillRect(0,0,e,e);let i=new on.CanvasTexture(t);return i.colorSpace=on.SRGBColorSpace,yh=i,i}var wh=null;function hv(){if(wh)return wh;let e=1024,t=8,n=e/t,r=["#ef4444","#f59e0b","#22c55e","#6366f1"],i=document.createElement("canvas");i.width=e,i.height=e;let o=i.getContext("2d");o.textAlign="center",o.textBaseline="middle";for(let s=0;s<t;s+=1)for(let l=0;l<t;l+=1){let c=l*n,p=s*n,u=(Math.floor(l/2)+Math.floor(s/2))%4;o.fillStyle=r[u],o.fillRect(c,p,n,n),o.strokeStyle="rgba(0, 0, 0, 0.28)",o.lineWidth=2;for(let x=1;x<4;x+=1){let S=x*n/4;o.beginPath(),o.moveTo(c+S,p),o.lineTo(c+S,p+n),o.moveTo(c,p+S),o.lineTo(c+n,p+S),o.stroke()}o.strokeStyle="#09090b",o.lineWidth=7,o.strokeRect(c,p,n,n);let d=c+n*.23,m=p+n*.72,g=c+n*.72,v=p+n*.23;o.lineCap="round",o.lineJoin="round",o.beginPath(),o.moveTo(d,m),o.lineTo(g,v),o.lineTo(g-n*.2,v),o.moveTo(g,v),o.lineTo(g,v+n*.2),o.stroke();let M=s*t+l+1;o.font=`700 ${Math.round(n*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,o.fillStyle="#ffffff",o.strokeStyle="rgba(0, 0, 0, 0.85)",o.lineWidth=6;let w=String(M).padStart(2,"0");o.strokeText(w,c+n/2,p+n*.82),o.fillText(w,c+n/2,p+n*.82)}let a=new on.CanvasTexture(i);return a.colorSpace=on.SRGBColorSpace,a.wrapS=on.RepeatWrapping,a.wrapT=on.RepeatWrapping,a.flipY=!1,a.anisotropy=8,a.needsUpdate=!0,wh=a,a}var Ca="riDecal",Ch="riDecalId";function _h(){return new Ur.BufferGeometry().setAttribute("position",new Ur.Float32BufferAttribute([],3))}function mv(e){let t=e.image;return t?.width&&t.height?t.width/t.height:1}function Mh(e){e.disposed=!0,e.node.remove(e.mesh),e.mesh.geometry.dispose(),e.mesh.material.dispose(),e.imagePath&&po(e.imagePath,Ur.SRGBColorSpace),e.ownTexture?.dispose()}function nM(e,t,n,r){let i=new Ur.MeshStandardMaterial({transparent:!0,polygonOffset:!0,polygonOffsetFactor:-4,depthWrite:!1,metalness:0,roughness:.7}),o=Ci(e)&&e.skeleton?e:null,a=o?new Ur.SkinnedMesh(_h(),i):new Ur.Mesh(_h(),i);if(o){let c=a;c.bind(o.skeleton,o.bindMatrix),c.frustumCulled=!1,c.onBeforeRender=()=>{let p=sv(o);p&&c.bindMatrixInverse.copy(p)}}a.userData[Ca]=!0,a.userData[Ch]=t.id,a.raycast=()=>{},a.castShadow=!1,a.receiveShadow=!0,a.renderOrder=1;let s={node:e,mesh:a,signature:n,disposed:!1},l=c=>{let p=Cd(e,t,c);a.geometry.dispose(),a.geometry=p??_h(),a.visible=p!==null};if(t.image){s.imagePath=t.image;let c=Ns(t.image,Ur.SRGBColorSpace,()=>{s.disposed||(l(mv(c)),i.needsUpdate=!0,r())});i.map=c,l(mv(c))}else{let{texture:c,aspect:p}=Yb(t);s.ownTexture=c,i.map=c,l(p)}return e.add(a),s}function fv({objectBindings:e,nodeMap:t,invalidate:n}){let r=(0,Wl.useRef)(new Map);(0,Wl.useEffect)(()=>{let i=r.current,o=new Set;for(let[a,s]of Object.entries(e)){if(!s.decals?.length)continue;let l=t[s.modelObjectId??a];if(Wn(l))for(let c of s.decals){if(!c.image&&!c.text)continue;let p=`${a}
|
|
3665
|
-
${c.id}`,u=$b(c),d=i.get(p);d&&(d.node!==l||d.signature!==u)&&(Mh(d),d=void 0),d||(d=nM(l,c,u,n),i.set(p,d)),d.mesh.material.opacity=(c.opacity??1)*(s.style?.material?.opacity??1),o.add(p)}}for(let[a,s]of i)o.has(a)||(Mh(s),i.delete(a));n()},[e,t,n]),(0,Wl.useEffect)(()=>{let i=r.current;return()=>{for(let o of i.values())Mh(o);i.clear()}},[])}var ti=require("react"),Ti=require("three"),rM=500,iM=10,oM=5;function Nd(e,t,n){let r=(0,ti.useRef)({resolve:e,onContextMenu:t,anchorOf:n});r.current={resolve:e,onContextMenu:t,anchorOf:n};let i=(0,ti.useRef)(null),o=(0,ti.useRef)(!1),a=(0,ti.useRef)(null),s=(0,ti.useCallback)(()=>{let u=i.current;u?.timer&&clearTimeout(u.timer),i.current=null,a.current?.(),a.current=null},[]),l=(0,ti.useCallback)(()=>{let u=i.current;u&&(s(),u.kind==="touch"&&(o.current=!0,setTimeout(()=>o.current=!1,800)),r.current.onContextMenu?.(u.target,u.pointer))},[s]),c=(0,ti.useCallback)(u=>{let d=u.nativeEvent,m=d.pointerType!=="touch"&&d.button===2,g=d.pointerType==="touch"&&d.button===0;if(!r.current.onContextMenu||!m&&!g)return;let v=r.current.resolve(u.object);if(v===null)return;s();let M={target:v,kind:m?"right":"touch",pointerId:d.pointerId,pointer:Bs(u,r.current.anchorOf?.(u.object)),timer:g?setTimeout(l,rM):null};i.current=M;let w=m?oM:iM,x=_=>Math.hypot(_.clientX-M.pointer.clientX,_.clientY-M.pointer.clientY)>w,S=_=>{_.pointerId===M.pointerId&&x(_)&&s()},k=_=>{_.pointerId===M.pointerId&&(M.kind==="right"&&!x(_)?l():s())},b=_=>{_.pointerId!==M.pointerId&&s()};window.addEventListener("pointermove",S),window.addEventListener("pointerup",k),window.addEventListener("pointercancel",s),window.addEventListener("pointerdown",b),a.current=()=>{window.removeEventListener("pointermove",S),window.removeEventListener("pointerup",k),window.removeEventListener("pointercancel",s),window.removeEventListener("pointerdown",b)}},[s,l]);(0,ti.useEffect)(()=>s,[s]);let p=(0,ti.useCallback)(()=>o.current?(o.current=!1,!0):!1,[]);return{onPointerDown:c,consumeClick:p}}function aM(e,t){let n=e.face,r=t.geometry.getAttribute("position");if(!n||!r)return null;let i=e.barycoord??null;if(!i){let[u,d,m]=[n.a,n.b,n.c].map(g=>t.getVertexPosition(g,new Ti.Vector3));if(i=Ti.Triangle.getBarycoord(t.worldToLocal(e.point.clone()),u,d,m,new Ti.Vector3),!i)return null}let[o,a,s]=[n.a,n.b,n.c].map(u=>new Ti.Vector3().fromBufferAttribute(r,u)),l=new Ti.Vector3().addScaledVector(o,i.x).addScaledVector(a,i.y).addScaledVector(s,i.z),c=new Ti.Triangle(o,a,s).getNormal(new Ti.Vector3);return n.normal.clone().transformDirection(t.matrixWorld).dot(e.ray.direction)>0&&c.negate(),{position:[l.x,l.y,l.z],normal:[c.x,c.y,c.z]}}function Ta(e,t){if(t.updateWorldMatrix(!0,!1),e.object===t&&t.isSkinnedMesh===!0){let i=aM(e,t);if(i)return i}let n=t.worldToLocal(e.point.clone()),r=e.face?e.face.normal.clone().transformDirection(e.object.matrixWorld):e.ray.direction.clone().negate();return r.dot(e.ray.direction)>0&&r.negate(),r.transformDirection(new Ti.Matrix4().copy(t.matrixWorld).invert()),{position:[n.x,n.y,n.z],normal:[r.x,r.y,r.z]}}function Bs(e,t){let n=e.nativeEvent;return{clientX:n.clientX,clientY:n.clientY,pointerType:"pointerType"in n?n.pointerType:"mouse",...t?{surface:Ta(e,t)}:{}}}var Bd=require("three");function gv(e,t){let n=[];if(Ci(e)){let r=e;r.computeBoundingSphere(),r.computeBoundingBox(),Bd.SkinnedMesh.prototype.raycast.call(r,t,n)}else Bd.Mesh.prototype.raycast.call(e,t,n);return n.sort((r,i)=>r.distance-i.distance)[0]}function vv({target:e,nodes:t,controls:n}){let{camera:r,gl:i,invalidate:o}=(0,bv.useThree)(),a=(0,Od.useRef)(e);return a.current=e,(0,Od.useEffect)(()=>{let s=i.domElement,l=new Pi.Raycaster,c=new Pi.Vector2,p=s.style.cursor,u=s.style.touchAction;s.style.cursor="grab",s.style.touchAction="none";let d=0,m=null,g=null,v=(y,h=new Pi.Vector2)=>{let P=s.getBoundingClientRect();c.set((y.clientX-P.left-h.x)/P.width*2-1,-((y.clientY-P.top-h.y)/P.height)*2+1),l.setFromCamera(c,r)},M=y=>{if(!g)return;v(y,g.offset),g.node.updateWorldMatrix(!0,!1);let h=l.intersectObject(g.node,!1)[0];if(!h)return;let P=Ta({...h,ray:l.ray},g.node),A=Cd(g.node,{...g.decal,...P},g.aspect);A&&(g.mesh.geometry!==g.geometry&&g.mesh.geometry.dispose(),g.mesh.geometry=A,g.surface=P,o())},w=y=>{if(!g)return;cancelAnimationFrame(d),d=0,m=null;let h=g;g=null,h.mesh.geometry!==h.geometry&&(y&&h.surface?h.geometry.dispose():(h.mesh.geometry.dispose(),h.mesh.geometry=h.geometry)),h.controller&&(h.controller.enabled=h.controlsEnabled),s.hasPointerCapture(h.pointerId)&&s.releasePointerCapture(h.pointerId),s.style.cursor="grab",o();let P=()=>{window.removeEventListener("click",A,!0),window.removeEventListener("pointerdown",P,!0),clearTimeout(C)},A=D=>{D.target===s&&(D.preventDefault(),D.stopImmediatePropagation()),P()},C=setTimeout(P,300);window.addEventListener("click",A,!0),window.addEventListener("pointerdown",P,!0),y&&h.surface&&a.current.onCommit(h.surface)},x=y=>{if(y.button!==0||g)return;let h=a.current,P=t.current[h.objectId];if(!(P instanceof Pi.Mesh)||!P.visible)return;let A=P.children.find(O=>O.userData[Ca]&&O.userData[Ch]===h.decal.id);if(!A?.visible)return;P.updateWorldMatrix(!0,!0),v(y);let C=gv(A,l),D=l.intersectObject(P,!1)[0];if(!C||!D||C.distance>D.distance+1e-4)return;let B=new Pi.Vector3;if(Ci(A)){let O=new Pi.Vector3,$=A.geometry.getAttribute("position").count;if(!$)return;for(let le=0;le<$;le++)B.add(A.getVertexPosition(le,O));B.divideScalar($).applyMatrix4(A.matrixWorld)}else B.fromArray(h.decal.position).applyMatrix4(P.matrixWorld);B.project(r);let j=s.getBoundingClientRect(),W=new Pi.Vector2(y.clientX-(j.left+(B.x+1)/2*j.width),y.clientY-(j.top+(1-B.y)/2*j.height)),U=A.material.map?.image,te=n.current;g={pointerId:y.pointerId,node:P,mesh:A,geometry:A.geometry,decal:h.decal,surface:null,offset:W,aspect:U?.width&&U.height?U.width/U.height:1,controller:te,controlsEnabled:te?.enabled??!1},te&&(te.enabled=!1),y.preventDefault(),y.stopImmediatePropagation(),s.setPointerCapture(y.pointerId),s.style.cursor="grabbing"},S=y=>{!g||y.pointerId!==g.pointerId||(y.preventDefault(),y.stopImmediatePropagation(),m=y,d||(d=requestAnimationFrame(()=>{d=0,m&&M(m)})))},k=y=>{!g||y.pointerId!==g.pointerId||(y.preventDefault(),y.stopImmediatePropagation(),m&&M(m),w(!0))},b=()=>w(!1),_=y=>{y.key==="Escape"&&(w(!1),a.current.onCancel())};return s.addEventListener("pointerdown",x,!0),window.addEventListener("pointermove",S,{capture:!0,passive:!1}),window.addEventListener("pointerup",k,!0),window.addEventListener("pointercancel",b),window.addEventListener("blur",b),window.addEventListener("keydown",_),s.addEventListener("lostpointercapture",b),()=>{w(!1),s.style.cursor=p,s.style.touchAction=u,s.removeEventListener("pointerdown",x,!0),window.removeEventListener("pointermove",S,!0),window.removeEventListener("pointerup",k,!0),window.removeEventListener("pointercancel",b),window.removeEventListener("blur",b),window.removeEventListener("keydown",_),s.removeEventListener("lostpointercapture",b)}},[r,i,o,t,n,e.objectId,e.decal]),null}var Rn=require("three");function Id(e,t){if(!(e instanceof Rn.Mesh)||!t)return null;let n=e.geometry.getAttribute("position");if(!n?.count)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let r=new Rn.Box3,i=new Rn.Vector3;if(Ci(e)){let _=e;_.computeBoundingBox(),_.computeBoundingSphere();for(let y=0;y<n.count;y++)r.expandByPoint(e.getVertexPosition(y,i))}else e.geometry.boundingBox||e.geometry.computeBoundingBox(),r.copy(e.geometry.boundingBox);if(r.applyMatrix4(e.matrixWorld),r.isEmpty())return null;let o=r.getCenter(new Rn.Vector3),a=t.getWorldPosition(new Rn.Vector3),s=t.getWorldDirection(new Rn.Vector3),l=t.isOrthographicCamera,c=new Rn.Raycaster,p=_=>{if(l){let h=a.distanceTo(o)+r.getSize(i).length()+1;c.set(_.clone().addScaledVector(s,-h),s)}else c.set(a,_.clone().sub(a).normalize());let y=c.intersectObject(e,!1)[0];return y?Ta({...y,ray:c.ray},e):null},u=p(o);if(u)return u;let d=e.geometry.index,m=d?.count??n.count,g=new Rn.Vector3,v=new Rn.Vector3,M=new Rn.Vector3,w=new Rn.Vector3,x=new Rn.Vector3,S=new Rn.Vector3,k=null,b=1/0;for(let _=0;_+2<m;_+=3){if(e.getVertexPosition(d?d.getX(_):_,g).applyMatrix4(e.matrixWorld),e.getVertexPosition(d?d.getX(_+1):_+1,v).applyMatrix4(e.matrixWorld),e.getVertexPosition(d?d.getX(_+2):_+2,M).applyMatrix4(e.matrixWorld),w.copy(g).add(v).add(M).multiplyScalar(1/3),Rn.Triangle.getNormal(g,v,M,x),l?S.copy(s).negate():S.copy(a).sub(w),x.dot(S)<=0)continue;let y=w.distanceToSquared(o);y<b&&(b=y,k=w.clone())}return k?p(k):null}var kn=require("three");function zd(e,t,n,r){if(!(e instanceof kn.Mesh)||!t)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let i=new kn.Vector3().fromArray(n.position);if(Ci(e)){let c=e;c.computeBoundingBox(),c.computeBoundingSphere();let p=c.geometry.getAttribute("position");if(!p)return null;let u=c.geometry.index,d=u?.count??p.count,m=new kn.Triangle,g=new kn.Vector3,v=new kn.Vector3,M=1/0,w=null;for(let x=0;x+2<d;x+=3){let S=[0,1,2].map(b=>u?u.getX(x+b):x+b);m.a.fromBufferAttribute(p,S[0]),m.b.fromBufferAttribute(p,S[1]),m.c.fromBufferAttribute(p,S[2]),m.closestPointToPoint(i,g);let k=g.distanceToSquared(i);if(!(k>=M||!m.getBarycoord(g,v))&&(M=k,w=new kn.Vector3().addScaledVector(c.getVertexPosition(S[0],new kn.Vector3),v.x).addScaledVector(c.getVertexPosition(S[1],new kn.Vector3),v.y).addScaledVector(c.getVertexPosition(S[2],new kn.Vector3),v.z),M<1e-12))break}if(!w)return null;i.copy(w)}if(i.applyMatrix4(e.matrixWorld).project(t),!Number.isFinite(i.x)||i.z<-1||i.z>1)return null;let o=new kn.Vector2(r==="left"?-.0035:r==="right"?.0035:0,r==="down"?-.0035:r==="up"?.0035:0),a=new kn.Raycaster,s=n.size*.01,l=new kn.Vector3().fromArray(n.position);for(let c=1;c>=1/1024;c/=2){a.setFromCamera(new kn.Vector2(i.x,i.y).addScaledVector(o,c),t);let p=a.intersectObject(e,!1)[0];if(p){let u=Ta({...p,ray:a.ray},e);if(new kn.Vector3().fromArray(u.position).distanceTo(l)<=s)return u}}return null}var br=require("react");var xv=require("three-stdlib");function ho(e,t){let n=URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=t,r.style.display="none";try{document.body.appendChild(r),r.click()}finally{r.remove(),window.setTimeout(()=>{URL.revokeObjectURL(n)},1e3)}}function yv({scene:e,objectBindings:t,matRefs:n,downloadFilename:r,onComplete:i}){import("three").then(({Group:o,Mesh:a})=>{let s=new o,l=new Map;for(let[u,d]of Object.entries(t))l.set(d.modelObjectId??u,u);let c=u=>{let d=u;for(;d;){let m=d.name||d.uuid,g=l.get(m)??m,v=t[g];if(v?v.visible===!1:d.visible===!1)return!1;d=d.parent}return!0};e.traverse(u=>{let d=u;if(!d.isMesh||!d.geometry||!c(d))return;let m=d.name||d.uuid,g=l.get(m)??m,v=n[g]??d.material;if(!v)return;let M=new a(d.geometry,v);M.name=m,M.applyMatrix4(d.matrixWorld),s.add(M)}),new xv.GLTFExporter().parse(s,u=>{let d=u instanceof ArrayBuffer?new Blob([u],{type:"model/gltf-binary"}):new Blob([JSON.stringify(u)],{type:"model/gltf+json"}),m=u instanceof ArrayBuffer?".glb":".gltf";ho(d,`${r}${m}`),i()},u=>{console.error("GLTFExporter error:",u),i()},{binary:!0})})}var Cv=require("fflate");var wv=require("fflate");function Ud(e,t=6){return new Promise((n,r)=>{(0,wv.zip)(e,{level:t},(i,o)=>{i?r(i):n(o)})})}var Xl=2048,Sv=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function _v(e){return e.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}function Ah(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function Tv(e){return Ah(e,"model")}function Th(e,t){return e.index?Math.round(e.index.getX(t)):t}function sM(e,t,n){let r=Th(e,n),i=Th(e,n+1),o=Th(e,n+2);if(r>=t.count||i>=t.count||o>=t.count)return null;let a=[{index:r,u:t.getX(r),v:t.getY(r)},{index:i,u:t.getX(i),v:t.getY(i)},{index:o,u:t.getX(o),v:t.getY(o)}];return a.every(s=>Number.isFinite(s.u)&&Number.isFinite(s.v))?a:null}function Mv(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function Ph(e,t,n,r){let i,o;r?(i=t.index,o=n.index):(i=Mv(t),o=Mv(n));let a=i<o?`${i}|${o}`:`${o}|${i}`,s=e.get(a);s?s.count+=1:e.set(a,{count:1,start:t,end:n})}function lM(e,t,n){Ph(e,t[0],t[1],n),Ph(e,t[1],t[2],n),Ph(e,t[2],t[0],n)}function cM(e,t){return Array.isArray(e)?e[t]??null:e}function dM(e){let t=new Map,n=0,r=0,i=0;return e.traverse(o=>{let a=o;if(!a.isMesh||!a.geometry||!a.material)return;let s=a.geometry,l=s.getAttribute("uv");if(!l||l.itemSize<2||l.count<3)return;n+=1;let c=a.name||`Mesh ${n}`,p=s.index?.count??l.count,u=s.groups.length>0?s.groups:[{start:0,count:p,materialIndex:0}];for(let d of u){let m=d.materialIndex??0,g=cM(a.material,m);if(!g)continue;let v=t.get(g.uuid);v||(r+=1,v={name:g.name||`Material ${r}`,layers:new Map},t.set(g.uuid,v));let M=v.layers.get(a.uuid);M||(M={name:c,color:Sv[i%Sv.length],edges:new Map},i+=1,v.layers.set(a.uuid,M));let w=Math.max(0,d.start),x=Math.min(p,w+d.count);for(let S=w;S+2<x;S+=3){let k=sM(s,l,S);k&&lM(M.edges,k,!!s.index)}}}),[...t.values()].filter(o=>[...o.layers.values()].some(a=>a.edges.size>0))}function Fd(e){return(e*Xl).toFixed(2)}function uM(e){return`M${Fd(e.start.u)} ${Fd(1-e.start.v)}L${Fd(e.end.u)} ${Fd(1-e.end.v)}`}function pM(e){let t=_v(e.name),n=[...e.layers.values()].filter(r=>r.edges.size>0).map((r,i)=>{let o=_v(r.name),a=`${Ah(r.name,"mesh")}-${i+1}`,s=[...r.edges.values()],l=s.filter(u=>u.count===1),p=(l.length>0?l:s).map(uM).join("");return[` <g id="${a}" data-mesh="${o}" fill="none" stroke="${r.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${o}</title>`,` <path d="${p}"/>`," </g>"].join(`
|
|
3664
|
+
`});var FO={};Ux(FO,{BindingBuilder:()=>jy});module.exports=jA(FO);var j=require("react"),c2=require("three"),Wi=require("lucide-react");var _o=require("react"),Ya=require("lucide-react"),Vn=require("react/jsx-runtime");function Fg({label:e,icon:t,title:n,align:r="left",children:i}){let[o,a]=(0,_o.useState)(!1),s=(0,_o.useRef)(null),l=(0,_o.useRef)(null),d=(0,_o.useId)();return(0,_o.useEffect)(()=>{if(!o)return;let u=c=>{s.current?.contains(c.target)||a(!1)},m=c=>{c.key==="Escape"&&(a(!1),l.current?.focus())};return window.addEventListener("pointerdown",u),window.addEventListener("keydown",m),()=>{window.removeEventListener("pointerdown",u),window.removeEventListener("keydown",m)}},[o]),(0,Vn.jsxs)("div",{className:"bb-headerMenuWrapper",ref:s,children:[(0,Vn.jsxs)("button",{ref:l,type:"button",className:`bb-headerButton ${e?"":"bb-headerButton--icon"} ${o?"bb-headerButton--open":""}`,onClick:()=>a(u=>!u),title:n,"aria-label":e?void 0:n,"aria-expanded":o,"aria-controls":o?d:void 0,children:[t,e?(0,Vn.jsxs)(Vn.Fragment,{children:[e,(0,Vn.jsx)(Ya.ChevronDown,{size:12,"aria-hidden":"true"})]}):null]}),o?(0,Vn.jsx)("div",{id:d,className:`bb-headerMenu bb-headerMenu--${r}`,role:"group","aria-label":n,children:i(()=>a(!1))}):null]})}function jx({onRestore:e,onRemove:t,onAddModel:n,restoreDisabled:r,addModelDisabled:i,confirmRemove:o=!0,close:a}){let[s,l]=(0,_o.useState)(!1);return s&&t?(0,Vn.jsxs)("div",{className:"bb-headerMenuConfirm",role:"alertdialog","aria-label":"Remove model",children:[(0,Vn.jsx)("p",{children:"Remove the model and its bindings from the editor? This also clears the saved session. Export your work first if you want to keep it."}),(0,Vn.jsxs)("div",{className:"bb-headerMenuConfirmActions",children:[(0,Vn.jsx)("button",{type:"button",className:"bb-headerMenuItem",onClick:()=>l(!1),children:"Cancel"}),(0,Vn.jsx)("button",{type:"button",className:"bb-headerMenuItem bb-headerMenuItem--danger",onClick:()=>{a(),t()},autoFocus:!0,children:"Remove"})]})]}):(0,Vn.jsxs)(Vn.Fragment,{children:[n?(0,Vn.jsxs)("button",{type:"button",className:"bb-headerMenuItem",disabled:i,onClick:()=>{a(),n()},title:"Add another model, as a separate model or merged into this one",children:[(0,Vn.jsx)(Ya.Plus,{size:14,"aria-hidden":"true"}),"Add model\u2026"]}):null,e?(0,Vn.jsxs)("button",{type:"button",className:"bb-headerMenuItem",disabled:r,onClick:()=>{a(),e()},title:"Restore your last session: the model, its object bindings, and scene settings saved in this browser",children:[(0,Vn.jsx)(Ya.History,{size:14,"aria-hidden":"true"}),"Restore last session"]}):null,t?(0,Vn.jsxs)("button",{type:"button",className:"bb-headerMenuItem bb-headerMenuItem--danger",onClick:()=>{if(o){l(!0);return}a(),t()},children:[(0,Vn.jsx)(Ya.Trash2,{size:14,"aria-hidden":"true"}),"Remove model\u2026"]}):null]})}var mc=require("react");var Hx={verifyingLicense:"Verifying License",checkingYourLicenseKey:"Checking your license key...",invalidLicense:"Invalid License",licenseHasBeenRevokedOrHasExpired:"License has been revoked or has expired",failedToLoadPleaseContactTheSiteAdministrator:"Failed to load. Please contact the site administrator.",contextRestoringTitle:"Reloading viewer\u2026",contextLostTitle:"3D view interrupted",contextRestoringMessage:"Rebuilding the 3D view. Please wait\u2026",contextLostMessage:"The graphics connection was interrupted. The viewer will rebuild when it returns, or you can reload it now.",reloadViewer:"Reload viewer",texturePositioningHint:"Drag to move \xB7 Scroll to zoom \xB7 Click elsewhere to finish",texturePositioningStartHint:"Double-click to move or zoom",dismiss:"Dismiss",missingUVsAreShownInMagenta:"Missing UVs are shown in magenta.",viewThisModelInARWithAppleQuickLook:"View this model in AR with Apple Quick Look",viewInAR:"View in AR",openThisExperienceOnAPhoneForAR:"Open this experience on a phone for AR",openOnPhone:"Open on phone",viewThisModelInYourSpace:"View this model in your space",viewThisModelInVR:"View this model in VR",closePhoneHandoff:"Close phone handoff",arScanCode:"Scan the code and choose AR.",qrCodeToOpenThisModelOnAPhone:"QR code to open this model on a phone",disableUVChecker:"Disable UV checker",enableUVChecker:"Enable UV checker",explodedView:"Exploded view",explodeAmount:"Explode amount",removeSectionCut:"Remove section cut",sectionCut:"Section cut",sectionAxis:"Section axis",sectionPosition:"Section position",keepTheOtherSide:"Keep the other side",pauseCinematic:"Pause cinematic",playCinematic:"Play cinematic",stopCinematicAndResetCamera:"Stop cinematic and reset camera",cancel:"Cancel",annotationCategories:"Annotation categories",annotations:"Annotations",all:"All",uncategorized:"Uncategorized",decalDragHint:"Drag the decal on the object. Release to save; Escape to cancel.",showAll:"Show all",materialVariants:"Material variants",startGuidedTour:"Start guided tour",guidedTour:"Guided Tour",previousAnnotation:"Previous annotation",previous:"Prev",stopGuidedTour:"Stop guided tour",nextAnnotation:"Next annotation",next:"Next",exitFullscreen:"Exit fullscreen",enterFullscreen:"Enter fullscreen",resetCameraView:"Reset camera view",orbitControl:"Orbit Control",pointLock:"Point Lock",cameraController:"Camera controller",cameraControllerSettings:"Camera controller settings",downloadGLB:"Download static GLB",downloadGLBDescription:"All visible models and material edits in one static file. No animations, annotations or separate editor model slots. Duplicate mesh names may change on reimport.",downloadPNG:"Download PNG",downloadUVLayout:"Download UV Layout",videoFormat:"Video format",auto:"Auto",recordTurntableVideo:"Record turntable video",recordCinematicVideo:"Record cinematic video",videoUnsupported:"Video recording is not supported in this browser.",downloadOptions:"Download options",exporting:"Exporting\u2026",download:"Download",annotationTitlePlaceholder:"Title *",description:"Description",ok:"OK",arRelocate:"Relocate",tapToPlace:"Tap to place",closeAnnotation:"Close annotation",learnMore:"Learn more",stopMeasuring:"Stop measuring",startMeasuring:"Start measuring",toggleBoundingDimensions:"Toggle bounding dimensions",measurementTool:"Measurement tool",distance:"Distance",angle:"Angle",area:"Area",pointToPlane:"Point to plane",wrap:"Circumference (Edge)",wrapHorizontal:"Circumference (Horizontal)",measurementSnapping:"Measurement snapping",noSnapping:"No snapping",snapAuto:"Snap: auto",snapVertex:"Snap: vertex",snapEdge:"Snap: edge",undoMeasurementPoint:"Undo measurement point",clearMeasurements:"Clear measurements",finishArea:"Finish area",openSceneObjectsPanel:"Open scene objects panel",sceneObjects:"SCENE OBJECTS",searchNodesLabels:"Search nodes, labels",closeSceneObjectsPanel:"Close scene objects panel",objectNavigator:"Objects in the 3D view",compareBefore:"Before",compareAfter:"After",compareDivider:"Comparison divider",viewIn3D:"View in 3D",objectNavigatorHint:"Arrow keys browse \xB7 Enter selects \xB7 Esc clears",selectionCleared:"Selection cleared",cameraKeyboardHelp:"3D view. Arrow keys orbit, Shift with Up or Down zooms, and W, A, S, D, Space and C move the camera.",isolate:"Isolate",hide:"Hide",show:"Show",closePanel:"Close panel",actions:"Actions",openPanel:"Open panel",close:"Close",position:"Position",decalNudgeHint:"Click to fine-tune \xB7 Hold to move",decalNudgeControls:"Move decal in small steps",text:"Text",yourText:"Your text",textToAdd:"Text to add",textColour:"Text colour",addText:"Add text",image:"Image",chooseImage:"Choose image",imageToAdd:"Image to add",added:"Added",colour:"Colour",size:"Size",turn:"Turn",rotation:"Rotation",dragTheDecalAcrossTheObjectsSurface:"Drag the decal across the object's surface",move:"Move",remove:"Remove",noneAddedYet:"None added yet",done:"Done",moveForward:"Move forward",moveLeft:"Move left",moveRight:"Move right",moveBackward:"Move backward",sceneSettings:"Scene Settings",background:"Background",backgroundColor:"Background Color",environment:"Environment",autoRotate:"Auto Rotate",lighting:"Lighting",exposure:"Exposure",ambientLightIntensity:"Ambient Light Intensity",ambientLightColor:"Ambient Light Color",directLightIntensity:"Direct Light Intensity",directLightColor:"Direct Light Color",searchObjects:"Search objects",uploadedModel:"Uploaded model",clear:"Clear",chooseModel:"Choose model",loadingModel:"Loading model...",releaseToLoadYourModel:"Release to load your model",arFindSurface:"Move your device over a flat surface",arReleaseToPlace:"Release to place",arGestureHint:"Pinch to resize \xB7 Twist to rotate",angleFirstArmHint:"Pick the first arm",angleVertexHint:"Pick the angle's vertex",angleSecondArmHint:"Pick the second arm",angleNewHint:"Pick a point to start a new angle",areaNewHint:"Pick a point to start a new area",areaCornersHint:"Pick polygon corners in order, then Finish area",pointToPlaneFaceHint:"Pick the reference face",pointToPlanePointHint:"Pick a point to measure its perpendicular distance",pointToPlaneNewHint:"Pick a face to start a new measurement",distanceHint:"Pick points on the model to measure distances",wrapHint:"Click a point on the surface to measure its circumference, following the surface (best for limbs)",wrapHorizontalHint:"Click a point to measure a level circumference around it (best for the torso/waist)",visibleEntries:"{count} visible entries",objectCount:"{count} objects",annotationMarker:"Annotation {id}: {title}",recordingVideo:"Recording video \xB7 {progress}%",isolatedObjects:"Isolated: {count} objects",largeModelWarning:"Very large model ({millions}M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the objects panel to select parts.",preparingLargeModel:"Preparing large model ({millions}M triangles) \u2014 the first display can take a while on this device...",enterAR:"Enter AR",enterVR:"Enter VR",decalImage:"Image {index}",decalText:"Text {index}",decalAdded:"{count} added",up:"up",down:"down",left:"left",right:"right",moveDecal:"Move decal {direction}",moveDecalOnSurface:"Move {direction} on the visible surface",showAllObject:"Show all {name}",isolateObject:"Isolate {name}",isolatedObject:"Isolated: {name}",hideObject:"Hide {name}",showObject:"Show {name}",objectSelected:"{name} selected",objectNavigatorPosition:"{position} of {count}",compareDividerValue:"{before} {percent}%, {after} {rest}%",bindingMismatchOne:"1 object binding doesn't match this model",bindingMismatchMany:"{count} object bindings don't match this model",simpleLargeModelWarning:"Very large model detected ({millions}M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the scene objects panel to select parts.",dropModelHint:"Drag and drop {formats} here",loadErrorTitle:"This model couldn't be loaded",loadErrorNotFound:"Nothing was found at this address ({status}). Check that modelUrl points to the file.",loadErrorDenied:"The server refused access to the file ({status}). Check that the file is public, or that a signed URL hasn't expired.",loadErrorStatus:"The server responded with {status} when the file was requested.",loadErrorNetwork:"The download was blocked or failed. Check that the URL is correct and, if the file is on another domain, that its server allows cross-origin requests (CORS) from this site.",loadErrorHtml:"The server sent back a web page instead of a model. There's probably no file at this path: many servers answer a missing file with their index.html.",loadErrorInvalidFile:"The file couldn't be read as {format}. Check that it's a valid {format} file.",loadErrorInvalidExplicitFormat:"The file couldn't be read as {format}. Check that it's a valid {format} file and that modelFormat matches it.",loadErrorMissingFormat:"The file couldn't be read as {format}. The URL has no file extension, so set modelFormat to the file's format.",loadErrorPointCloud:"This PLY file is a point cloud: it has points but no faces, and the viewer shows meshes. Turn it into a mesh first, for example with MeshLab or Blender.",measurementReferenceFaceRequired:"Pick a triangle face to define the reference plane.",measurementTooManyPoints:"Finish or clear this measurement before adding more points.",measurementAngleDistinct:"Pick a point away from the angle's vertex.",areaMinimumPoints:"Pick at least three points to finish the area.",areaDistinctPoints:"Area points must be distinct.",areaStraightLine:"Area points must not lie on one straight line.",areaNotPlanar:"Area points must lie on one plane.",areaEdgesCross:"Area edges must not cross or touch each other.",areaZero:"The polygon has no measurable area.",decalSurfaceMissing:"Could not find a surface on this object for the decal.",decalDirectionMissing:"No visible surface in that direction. Try another arrow or rotate the view.",fullscreenExitFailed:"Could not exit fullscreen. Press Escape to exit.",fullscreenEnterFailed:"Could not enter fullscreen. Check your browser or iframe fullscreen permissions and try again.",uvCoordinatesMissing:"This model does not contain UV coordinates.",uvExportFailed:"Could not create the UV layout archive.",videoExportFailed:"Could not export the video.",videoNotReady:"Viewer not ready for video export.",videoExitXR:"Exit the XR session before recording a video.",videoAlreadyRecording:"A video export is already in progress.",videoPathRequired:"Enable a cinematic camera path before recording it.",videoDurationInvalid:"Video duration must be greater than 0 and at most 300 seconds.",videoFrameRateInvalid:"Video frame rate must be between 1 and 60.",videoBitrateInvalid:"Video bitrate must be a positive number.",videoContextLost:"Video export stopped because the WebGL context was lost.",videoTimedOut:"Video export timed out. Keep the viewer tab visible while recording.",videoEncodingFailed:"The browser could not encode the video.",videoEmpty:"The browser produced an empty video.",videoDidNotStart:"Video recording did not start.",videoWebMUnsupported:"Video recording as WEBM is not supported in this browser.",videoMP4Unsupported:"Video recording as MP4 is not supported in this browser.",videoGIFUnsupported:"Video recording as GIF is not supported in this browser.",videoGifWidthInvalid:"GIF width must be a whole number of pixels from 16 to 4096.",environmentApartment:"apartment",environmentCity:"city",environmentDawn:"dawn",environmentForest:"forest",environmentLobby:"lobby",environmentNight:"night",environmentPark:"park",environmentStudio:"studio",environmentSunset:"sunset",environmentWarehouse:"warehouse",color:"Color",material:"Material",texturePreview:"texture preview",noTextureApplied:"No texture applied",noTextureCoordinates:"This part has no texture coordinates, so an image can't be placed on it.",replaceImage:"Replace image",uploadImage:"Upload image",removeTexture:"Remove texture",texturePosition:"Texture position",offsetX:"Offset X",offsetY:"Offset Y",confirmTexturePosition:"Confirm this texture position and exit positioning mode",donePositioning:"Done positioning",textureOffsetHint:"Double-click the object in the preview to drag its texture directly (scroll to zoom), or edit its offset numerically.",actionToggleLight:"Toggle Light",actionChangeLightColor:"Change Light Color",actionSetBrightness:"Set Brightness",actionChangeColor:"Change Color",actionChangeMaterial:"Change Material",actionToggleVisibility:"Toggle Visibility"};function Yd(e,t,n={}){return(e?.[t]??Hx[t]).replace(/\{(\w+)\}/g,(i,o)=>Object.prototype.hasOwnProperty.call(n,o)?String(n[o]):i)}var HA=new Map(Object.entries(Hx).map(([e,t])=>[t,e]));function Gx(e,t){let n=HA.get(t);return n?Yd(e,n):t}var $x=require("react/jsx-runtime"),Wx=(0,mc.createContext)(void 0);function Xx({labels:e,children:t}){return(0,$x.jsx)(Wx.Provider,{value:e,children:t})}function Fe(){let e=(0,mc.useContext)(Wx);return(0,mc.useMemo)(()=>Object.assign((t,n)=>Yd(e,t,n),{message:t=>Gx(e,t)}),[e])}var N=require("react");var fc=require("three"),Ka=require("three-mesh-bvh"),Kx=!1,hc=new WeakMap,Kd=new WeakMap;function WA(){Kx||(fc.Mesh.prototype.raycast=Ka.acceleratedRaycast,Kx=!0)}function XA(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;!r||!r.attributes?.position||t.add(r)}),[...t]}function Zx(e){let t=0;for(let n of e){let r=n.index?n.index.count:n.attributes.position.count;t+=r/3}return t}var Zd=12e6;function Jx(e){return jg(e)>Zd}function jg(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;r?.attributes?.position&&t.add(r)}),Zx([...t])}function $A(e,t){return new Promise((n,r)=>{let i=d=>{let u=d.data;if(!u||!u.error&&!u.serialized)return;if(e.removeEventListener("message",i),e.removeEventListener("error",o),u.error){r(new Error(String(u.error)));return}let{serialized:m}=u,c=Ka.MeshBVH.deserialize(m,t,{setIndex:!1});m.index&&(t.index?t.index.array=m.index:t.setIndex(new fc.BufferAttribute(m.index,1,!1))),t.boundingBox=c.getBoundingBox(new fc.Box3),n(c)},o=d=>{e.removeEventListener("message",i),e.removeEventListener("error",o),r(new Error(d.message||"BVH worker error"))};e.addEventListener("message",i),e.addEventListener("error",o);let a=t.index?t.index.array.slice():null,s=t.attributes.position.array.slice(),l=[s,...a?[a]:[]].map(d=>d.buffer);e.postMessage({index:a,position:s,options:{groups:[...t.groups]}},l)})}async function qA(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await Promise.resolve().then(()=>(Yx(),qx)),t=new Blob([e],{type:"text/javascript"}),n=URL.createObjectURL(t),r=new Worker(n);return{worker:r,dispose:()=>{r.terminate(),URL.revokeObjectURL(n)}}}catch{return null}}async function YA(e,t){if(t)try{return await $A(t,e)}catch{}let n=Ka.computeBoundsTree.call(e);return e.boundsTree=void 0,await new Promise(r=>setTimeout(r,0)),n}async function KA(e,t,n){if(e.boundsTree)return;if(t.buildPromise)return t.buildPromise;let r=(async()=>{let i=await n();t.references>0&&!e.boundsTree&&(e.boundsTree=i,t.ownedTree=i)})();return t.buildPromise=r.finally(()=>{t.buildPromise=void 0,t.references===0&&hc.delete(e)}),t.buildPromise}async function cm(e,t){if(t?.aborted)return;let n=Kd.get(e);if(!n){if(n=XA(e),Zx(n)>Zd){Kd.set(e,[]);return}Kd.set(e,n);for(let i of n){let o=hc.get(i)??{references:0};o.references+=1,hc.set(i,o)}}if(n.length===0)return;WA();let r=await qA();if(t?.aborted){r?.dispose();return}try{for(let i of n){if(t?.aborted)return;let o=hc.get(i);o&&await KA(i,o,()=>YA(i,r?.worker))}}finally{r?.dispose()}}function Jd(e){let t=Kd.get(e);if(t){Kd.delete(e);for(let n of t){let r=hc.get(n);r&&(r.references=Math.max(0,r.references-1),!(r.references>0)&&(r.ownedTree&&n.boundsTree===r.ownedTree&&(Ka.disposeBoundsTree.call(n),n.boundsTree=void 0),r.ownedTree=void 0,r.buildPromise||hc.delete(n)))}}}var _f=require("@react-three/drei"),Oo=require("three");var Qx=require("lucide-react");var Za=require("react/jsx-runtime");function sl({title:e,message:t,tone:n="default"}){return(0,Za.jsxs)("div",{className:`ri-license-overlay${n==="error"?" ri-license-overlay--error":""}`,children:[(0,Za.jsxs)("div",{className:"ri-license-overlay__header",children:[n==="error"?(0,Za.jsx)(Qx.AlertTriangle,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):(0,Za.jsx)("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),(0,Za.jsx)("span",{className:"ri-license-overlay__title",children:e})]}),(0,Za.jsx)("p",{className:"ri-license-overlay__message",children:t})]})}var e0=require("react"),Co=class extends e0.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,r){this.props.onLoadError?.(n)}render(){return this.state.hasError?null:this.props.children}};var Ja=require("react");function t0({enabled:e,activeUrl:t,models:n,errorsRef:r,activeFailed:i,activeError:o,onActiveError:a,onExtraError:s}){let[l,d]=(0,Ja.useState)(0),u=(0,Ja.useCallback)((c,p)=>{r.current.set(c,p),d(f=>f+1),c!==t&&s?.(c,p)},[t,r,s]),m=(0,Ja.useCallback)(c=>{r.current.delete(c)&&d(p=>p+1)},[r]);return(0,Ja.useEffect)(()=>{let c=new Set(e?n?.map(p=>p.url):[]);for(let p of r.current.keys())c.has(p)||r.current.delete(p)},[e,n,r]),(0,Ja.useEffect)(()=>{if(!e||!r.current.has(t))return;let c=r.current.get(t);i&&Object.is(o,c)||a(c)},[e,t,n,r,l,i,o,a]),{reportError:u,clearError:m}}var To=require("react");function n0(e,t){let n=(0,To.useRef)({}),r=(0,To.useRef)({}),i=(0,To.useRef)({}),o=(0,To.useRef)(0),a=(0,To.useCallback)(s=>{var l;return(l=i.current)[s]??(l[s]={current:{}})},[]);return(0,To.useEffect)(()=>{let s=new Set(e?t?.map(l=>l.url):[]);for(let l of Object.keys(n.current))s.has(l)||delete n.current[l];for(let l of Object.keys(r.current))s.has(l)||delete r.current[l];for(let l of Object.keys(i.current))s.has(l)||(i.current[l].current={},delete i.current[l])},[e,t]),(0,To.useEffect)(()=>{let s=++o.current;return()=>{queueMicrotask(()=>{o.current===s&&(n.current={},r.current={},Object.values(i.current).forEach(l=>{l.current={}}),i.current={})})}},[]),{scenesByUrlRef:n,cameraHomesByUrlRef:r,materialRefsByUrlRef:i,getMaterialRefsForUrl:a}}var Qa=require("react");var dm=require("react");function na(e,t){let n=(0,dm.useRef)(t);(0,dm.useEffect)(()=>{let r=n.current;n.current=t,t.some((i,o)=>!Object.is(i,r[o]))&&e()},t)}var ZA={};function r0({modelUrl:e,tilesetUrl:t,models:n,objectBindings:r="auto",onChange:i,initialBindings:o,initialModelEdits:a}){let s=!!(n?.length&&!t),l=r==="auto"&&!s,d=!l&&i!==void 0,u=r==="auto"?ZA:r,[m,c]=(0,Qa.useState)(()=>o??u),[p,f]=(0,Qa.useState)(()=>{let x=new Map(a),M=s?n?.find(P=>P.url===e):void 0;return M&&o&&a===void 0&&x.set(e,{source:M.objectBindings,bindings:o}),x});na(()=>{d||c(u)},[d,u]),(0,Qa.useEffect)(()=>{let x=new Map(s?n?.map(M=>[M.url,M.objectBindings]):[]);f(M=>{let P=[...M].filter(([S,T])=>!d&&x.get(S)===T.source);return P.length===M.size?M:new Map(P)})},[s,n,d]);let v=(0,Qa.useCallback)(x=>{let M=d?void 0:p.get(x.url);return M?.source===x.objectBindings?M.bindings:x.objectBindings},[d,p]),b=s?n?.find(x=>x.url===e):void 0,g=b?v(b):d?u:m,y=(0,Qa.useCallback)(x=>{d||(b?f(M=>new Map(M).set(b.url,{source:b.objectBindings,bindings:x})):c(x)),i?.(x)},[d,b,i]);return{autoBindings:l,controlled:d,currentBindings:g,applyBindings:y,bindingsForModel:v,modelEdits:p}}var gc=require("three");var i0="riEditorGizmo";function um(e){return e.userData[i0]=!0,e}function pm(e){let t=[];return e.traverse(n=>{n.visible&&n.userData[i0]&&(n.visible=!1,t.push(n))}),()=>{for(let n of t)n.visible=!0}}var mm=require("react");function Po(e){return!!e?.isWebGPURenderer}var o0;function JA(){return o0??(o0=(async()=>{let e=typeof navigator>"u"?void 0:navigator.gpu;if(!e)return!1;try{return!!await e.requestAdapter()}catch{return!1}})()),o0}var a0=!1;function s0(e){let[t,n]=(0,mm.useState)(null);return(0,mm.useEffect)(()=>{if(!e)return;let r=!1;return JA().then(i=>{r||(!i&&!a0&&(a0=!0,console.info("[react-immersive] WebGPU isn't available in this browser; using WebGL.")),n(i))}),()=>{r=!0}},[e]),e?t===null?null:t?"webgpu":"webgl":"webgl"}async function l0(e){let{WebGPURenderer:t}=await import("three/webgpu"),n=new t({canvas:e.canvas,antialias:e.antialias??!0,alpha:e.alpha??!0});return await n.init(),n}function hm(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:n,scene:r,camera:i,invalidate:o}=e,a=Po(n);if(!a&&!n.getContextAttributes().preserveDrawingBuffer)return Promise.reject(new Error("Screenshot capture is disabled. Set preserveDrawingBuffer on ModelViewer to enable it."));let{transparent:s=!1}=t,l=n.getSize(new gc.Vector2),d=n.getPixelRatio(),u=i instanceof gc.PerspectiveCamera?i.aspect:null,m=r.background,c=t.width??l.x,p=t.height??l.y,f=c!==l.x||p!==l.y,v=pm(r);s&&(r.background=null),f&&(n.setPixelRatio(1),n.setSize(c,p,!1),i instanceof gc.PerspectiveCamera&&(i.aspect=c/p,i.updateProjectionMatrix()));let b=()=>{v(),s&&(r.background=m),f&&(n.setPixelRatio(d),n.setSize(l.x,l.y,!1),i instanceof gc.PerspectiveCamera&&u!==null&&(i.aspect=u,i.updateProjectionMatrix())),o()};if(a)try{return n.render(r,i),Promise.resolve(n.domElement.toDataURL("image/png"))}catch(g){return Promise.reject(g)}finally{b()}return o(),new Promise((g,y)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let x,M;try{x=n.domElement.toDataURL("image/png")}catch(P){M=P}b(),M?y(M):g(x)})})})}var ii=require("react"),Wg=require("three");var xn=require("react"),fm=require("@react-three/fiber"),rr=require("three");function Hg(e){if(e.duration!==void 0)return e.duration;let t=e.waypoints??[];if(t.length<2)return 24;let n=e.loop===!1?t.slice(0,-1):t;return Math.max(n.reduce((r,i)=>r+(i.segmentDuration??3.5),0),4)}var QA=1.2;function bc({controlsRef:e,sceneRef:t,config:n,playing:r,resetOnPlay:i=!1,onFinished:o,onUserInteract:a,onStop:s,playOnce:l=!1,startAtPath:d=!1,onStarted:u,onProgress:m}){let c=(0,fm.useThree)(D=>D.invalidate),p=(0,xn.useMemo)(()=>n.waypoints??[],[n.waypoints]),f=p.length>=2,v=n.loop??!0,b=Hg(n),g=(0,xn.useMemo)(()=>p.map(D=>[...D.position,...D.target,D.azimuthAngle??"",D.polarAngle??"",D.segmentDuration??""].join(",")).join(";"),[p]),y=(0,xn.useMemo)(()=>{let D=[];if(p.length<2)return D;let L=0;for(let re=0;re<p.length-1;re++)L+=p[re].segmentDuration??3.5,D.push(L);return v&&p.length>1&&(L+=p[p.length-1].segmentDuration??3.5,D.push(L)),D},[p,v]),x=(0,xn.useMemo)(()=>D=>{if(p.length<2||y.length===0)return D/b;let L=y[y.length-1],re=v?D%b:Math.min(D,b),Me=b>0?re/b*L:0;for(let Pe=0;Pe<y.length;Pe++)if(Me<=y[Pe]){let pe=Pe===0?0:y[Pe-1],Ve=y[Pe]-pe,Q=Ve>0?(Me-pe)/Ve:0,J=v?p.length:p.length-1,ye=Pe/J,Re=1/J;return ye+Q*Re}return 1},[p.length,y,b,v]),M=(0,xn.useMemo)(()=>f?{position:new rr.CatmullRomCurve3(p.map(D=>new rr.Vector3(...D.position)),v,"catmullrom",.5),target:new rr.CatmullRomCurve3(p.map(D=>new rr.Vector3(...D.target)),v,"catmullrom",.5)}:null,[g,f,v]),P=(0,xn.useMemo)(()=>{if(!f||!p.every(L=>Number.isFinite(L.azimuthAngle)&&Number.isFinite(L.polarAngle)))return null;let D=p.map(L=>({azimuth:L.azimuthAngle,polar:L.polarAngle,distance:new rr.Vector3(...L.position).distanceTo(new rr.Vector3(...L.target))}));for(let L=1;L<D.length;L+=1){let re=D[L-1].azimuth,Me=D[L].azimuth;D[L].azimuth=Me+Math.round((re-Me)/(Math.PI*2))*Math.PI*2}return D},[g,f]),S=(0,xn.useRef)(0),T=(0,xn.useRef)(0),h=(0,xn.useRef)(new rr.Vector3),w=(0,xn.useRef)(new rr.Vector3),C=(0,xn.useRef)(!1),_=(0,xn.useRef)(!0),k=(0,xn.useRef)(0),R=(0,xn.useRef)(!1),U=(0,xn.useRef)(null),H=(0,xn.useMemo)(()=>new rr.Vector3,[]),B=(0,xn.useMemo)(()=>new rr.Vector3,[]),X=(0,xn.useMemo)(()=>new rr.Spherical,[]);return(0,xn.useEffect)(()=>{S.current=0,k.current=0,T.current=0,R.current=!1},[g,v,b]),(0,xn.useEffect)(()=>{i&&(k.current=0,S.current=0,R.current=!1)},[i]),(0,xn.useEffect)(()=>{if(!r){C.current=!1,S.current>0&&!i?k.current=S.current:i&&(k.current=0),(S.current>0||R.current)&&s?.();return}S.current>=b&&!v&&(S.current=0,k.current=0,R.current=!1);let D=e.current;if(D&&(D.getPosition(h.current),D.getTarget(w.current)),i||R.current||k.current===0?(S.current=0,k.current=0,R.current=!1):k.current>0&&k.current<b?S.current=k.current:(S.current=0,k.current=0),T.current=0,!f){let L=t.current;if(L){let re=new rr.Box3().setFromObject(L).getBoundingSphere(new rr.Sphere);U.current={center:re.center.clone(),radius:re.radius>0?re.radius:1}}}C.current=!0,_.current=!0,c()},[r,f,e,t,c,b,v,g,i,s]),(0,xn.useEffect)(()=>{if(!r||!a)return;let D=e.current;if(!D)return;let L=()=>{R.current||a()};return D.addEventListener("controlstart",L),()=>D.removeEventListener("controlstart",L)},[r,e,a]),(0,fm.useFrame)((D,L)=>{if(!r||!C.current)return;let re=e.current;if(!re)return;let Me=_.current;_.current=!1,(!Me||!d)&&(S.current+=L,T.current+=L);let Pe=(!v||l)&&S.current>=b,pe=Pe&&v?0:x(S.current);if(pe=v?pe%1:Math.min(pe,1),M)if(M.target.getPoint(pe,B),P){let Q=v?P.length:P.length-1,J=Math.min(pe,1)*Q,ye=Math.min(Math.floor(J),Q-1),Re=(ye+1)%P.length,nt=pe>=1?1:J-ye,le=nt*nt*(3-2*nt),_e=P[ye],it=P[Re],Gt=it.azimuth+Math.round((_e.azimuth-it.azimuth)/(Math.PI*2))*Math.PI*2,be=_e.azimuth+(Gt-_e.azimuth)*le,Ce=_e.polar+(it.polar-_e.polar)*le,en=_e.distance+(it.distance-_e.distance)*le;X.set(Math.max(en,1e-6),Math.min(Math.max(Ce,1e-6),Math.PI-1e-6),be),H.setFromSpherical(X).add(B)}else M.position.getPoint(pe,H);else{let Q=U.current;if(!Q)return;let J=pe*Math.PI*2,ye=Q.radius*2.2;H.set(Q.center.x+Math.cos(J)*ye,Q.center.y+Q.radius*.6,Q.center.z+Math.sin(J)*ye),B.copy(Q.center)}let Ve=d?1:Math.min(T.current/QA,1);if(Ve<1){let Q=Ve*Ve*(3-2*Ve);H.lerpVectors(h.current,H,Q),B.lerpVectors(w.current,B,Q)}if(re.setLookAt(H.x,H.y,H.z,B.x,B.y,B.z,!1),Me&&u?.(),m?.(Math.min(S.current/b,1)),Pe){C.current=!1,R.current=!0,S.current=0,k.current=0,o?.();return}c()}),null}function c0(){return typeof document<"u"&&typeof HTMLCanvasElement<"u"&&typeof HTMLCanvasElement.prototype.captureStream=="function"}function d0(e,t={}){let{fps:n=15,gifWidth:r=480,signal:i}=t;if(!Number.isFinite(n)||n<1||n>60)throw new Error("Video frame rate must be between 1 and 60.");if(!Number.isInteger(r)||r<16||r>4096)throw new Error("GIF width must be a whole number of pixels from 16 to 4096.");if(i?.aborted)throw new DOMException("Video export cancelled.","AbortError");if(typeof e.captureStream!="function"||typeof document>"u")throw new Error("Video recording as GIF is not supported in this browser.");let o=1e3/n,a,s,l,d=null,u,m=0,c=0,p=0,f=null,v=0,b=0,g=0,y=!1,x=!1,M,P,S,T,h,w,C=new Promise((L,re)=>{h=L,w=re}),_=()=>{clearTimeout(M),clearInterval(P),S!==void 0&&cancelAnimationFrame(S),T!==void 0&&cancelAnimationFrame(T),i?.removeEventListener("abort",R),e.removeEventListener("webglcontextlost",U),l&&(l.pause(),l.srcObject=null),s?.getTracks().forEach(L=>L.stop())},k=(L=new DOMException("Video export cancelled.","AbortError"))=>{y||(y=!0,_(),w(L))},R=()=>k(),U=()=>k(new Error("Video export stopped because the WebGL context was lost.")),H=()=>k(new Error("Video export timed out. Keep the viewer tab visible while recording."));i?.addEventListener("abort",R,{once:!0}),e.addEventListener("webglcontextlost",U),M=setTimeout(H,3e4);let B=(async()=>{if(a=await import("gifenc"),!y&&(s=e.captureStream(n),l=document.createElement("video"),l.muted=!0,l.playsInline=!0,l.srcObject=s,await l.play(),!y)){if(d=document.createElement("canvas").getContext("2d",{willReadFrequently:!0}),!d)throw new Error("Video recording as GIF is not supported in this browser.");u=a.GIFEncoder()}})().catch(L=>k(L)),X=L=>{if(!f||!u)return;let re=Math.max(2,Math.round((L-v)/10)-g);g+=re,u.writeFrame(f.index,m,c,{palette:f.palette,delay:re*10}),f=null},D=()=>{if(y||!a||!l||!d||!u||l.readyState<2||!l.videoWidth)return;let L=performance.now();if(!(p>0&&L-b<o/2)){m||(m=Math.min(r,l.videoWidth),c=Math.max(1,Math.round(m*l.videoHeight/l.videoWidth)),d.canvas.width=m,d.canvas.height=c);try{d.drawImage(l,0,0,m,c);let{data:re}=d.getImageData(0,0,m,c),Me=a.quantize(re,256),Pe=a.applyPalette(re,Me);p===0&&(v=L),X(L),f={index:Pe,palette:Me},b=L,p+=1}catch(re){k(re)}}};return{result:C,cancel:k,start(L){y||S!==void 0||(S=requestAnimationFrame(()=>{B.then(()=>{y||(D(),P=setInterval(D,o),clearTimeout(M),M=setTimeout(H,(L+30)*1e3))})}))},finish(){y||x||(x=!0,T=requestAnimationFrame(()=>{B.then(()=>{if(y||(D(),y))return;if(!u||p===0){k(new Error("The browser produced an empty video."));return}X(b+o),u.finish();let L=new Blob([u.bytes()],{type:"image/gif"});y=!0,_(),h(L)})}))}}}var Gg={webm:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"],mp4:["video/mp4;codecs=avc1.42E01E","video/mp4"]};function ra(e="auto"){return e==="gif"?c0()?"image/gif":null:typeof MediaRecorder>"u"?null:(e==="auto"?[...Gg.webm,...Gg.mp4]:Gg[e]).find(n=>MediaRecorder.isTypeSupported(n))??null}function u0(e,t={}){if(t.format==="gif")return d0(e,t);let{fps:n=30,videoBitsPerSecond:r=8e6,signal:i}=t;if(!Number.isFinite(n)||n<1||n>60)throw new Error("Video frame rate must be between 1 and 60.");if(!Number.isFinite(r)||r<=0)throw new Error("Video bitrate must be a positive number.");if(i?.aborted)throw new DOMException("Video export cancelled.","AbortError");let o=ra(t.format);if(!o||typeof e.captureStream!="function"){let S=t.format&&t.format!=="auto"?` as ${t.format.toUpperCase()}`:"";throw new Error(`Video recording${S} is not supported in this browser.`)}let a,s,l=!1,d=!1,u,m,c,p=[],f,v,b=new Promise((S,T)=>{f=S,v=T}),g=()=>{clearTimeout(u),m!==void 0&&cancelAnimationFrame(m),c!==void 0&&cancelAnimationFrame(c),i?.removeEventListener("abort",x),e.removeEventListener("webglcontextlost",M),s&&(s.ondataavailable=null,s.onstop=null,s.onerror=null),a?.getTracks().forEach(S=>S.stop())},y=(S=new DOMException("Video export cancelled.","AbortError"))=>{if(!l){if(l=!0,g(),s&&s.state!=="inactive")try{s.stop()}catch{}v(S)}},x=()=>y(),M=()=>y(new Error("Video export stopped because the WebGL context was lost.")),P=()=>y(new Error("Video export timed out. Keep the viewer tab visible while recording."));return i?.addEventListener("abort",x,{once:!0}),e.addEventListener("webglcontextlost",M),u=setTimeout(P,3e4),{result:b,cancel:y,start(S){l||m!==void 0||(m=requestAnimationFrame(()=>{if(!l)try{a=e.captureStream(n);let T=new MediaRecorder(a,{mimeType:o,videoBitsPerSecond:r});s=T,T.ondataavailable=({data:h})=>{h.size>0&&p.push(h)},T.onerror=()=>y(new Error("The browser could not encode the video.")),T.onstop=()=>{if(l)return;l=!0,g();let h=new Blob(p,{type:T.mimeType||o});h.size===0?v(new Error("The browser produced an empty video.")):f(h)},T.start(1e3),clearTimeout(u),u=setTimeout(P,(S+30)*1e3)}catch(T){y(T)}}))},finish(){l||d||(d=!0,c=requestAnimationFrame(()=>{if(!l)try{if(!s)throw new Error("Video recording did not start.");s.stop()}catch(S){y(S)}}))}}}function p0(e){let t=(0,ii.useRef)(e);t.current=e;let n=(0,ii.useRef)(null),[r,i]=(0,ii.useState)(null),[o,a]=(0,ii.useState)(0),s=(0,ii.useCallback)(()=>n.current?.cancel(),[]),l=(0,ii.useCallback)(()=>n.current!==null,[]);(0,ii.useEffect)(()=>s,[e.modelUrl,s]);let d=(0,ii.useCallback)(async(m={})=>{let{rendererCaptureRef:c,controlsRef:p,cinematicConfig:f,ready:v,onCaptureStart:b}=t.current,g=c.current,y=p.current;if(!v||!g||!y)throw new Error("Viewer not ready for video export.");if(g.gl.xr.isPresenting)throw new Error("Exit the XR session before recording a video.");if(n.current)throw new Error("A video export is already in progress.");let x=m.mode??(f?"cinematic":"turntable");if(x==="cinematic"&&!f)throw new Error("Enable a cinematic camera path before recording it.");let M=x==="cinematic"?f:{loop:!0},P=m.duration??(x==="turntable"&&m.format==="gif"?8:Hg(M));if(!Number.isFinite(P)||P<=0||P>300)throw new Error("Video duration must be greater than 0 and at most 300 seconds.");let S=u0(g.gl.domElement,m);n.current=S;let T=y.getPosition(new Wg.Vector3),h=y.getTarget(new Wg.Vector3),w=y.enabled,C=pm(g.scene);y.stop(),y.enabled=!1,a(0),b(),i({config:{...M,duration:P,autoPlay:!1},onStarted:()=>S.start(P),onFinished:S.finish});try{return await S.result}finally{C(),y.enabled=w,y.setLookAt(T.x,T.y,T.z,h.x,h.y,h.z,!1),g.invalidate(),n.current=null,i(null)}},[]),u=(0,ii.useCallback)(m=>{let c=Math.floor(m*100);a(p=>p===c?p:c)},[]);return{captureVideo:d,cancelVideo:s,isRecording:l,recording:r,progress:o,onProgress:u}}var Ai=require("react");function m0(e){let[t,n]=(0,Ai.useState)(null),[r,i]=(0,Ai.useState)(!1),[o,a]=(0,Ai.useState)(!1),[s,l]=(0,Ai.useState)(!1),[d,u]=(0,Ai.useState)(null),m=(0,Ai.useRef)(!1);(0,Ai.useEffect)(()=>{if(!t||!e){i(!1),a(!1),u(null);return}let p=t.ownerDocument;i(p.fullscreenEnabled===!0&&typeof t.requestFullscreen=="function"&&typeof p.exitFullscreen=="function");let f=()=>{a(p.fullscreenElement===t),u(null)};return f(),p.addEventListener("fullscreenchange",f),()=>p.removeEventListener("fullscreenchange",f)},[t,e]);let c=(0,Ai.useCallback)(async()=>{if(!t||!e||!r||m.current)return;let p=t.ownerDocument,f=p.fullscreenElement===t;m.current=!0,l(!0),u(null);try{f?await p.exitFullscreen():await t.requestFullscreen(),a(p.fullscreenElement===t)}catch{u(f?"Could not exit fullscreen. Press Escape to exit.":"Could not enter fullscreen. Check your browser or iframe fullscreen permissions and try again.")}finally{m.current=!1,l(!1)}},[t,e,r]);return{rootRef:n,supported:r,active:o,pending:s,error:d,toggle:c}}var ir=require("react");function h0(e,{onLost:t,onRestored:n,initiallyLost:r=!1}){let i=r,o=s=>{s.preventDefault(),!i&&(i=!0,t())},a=()=>{i&&(i=!1,n())};return e.addEventListener("webglcontextlost",o),e.addEventListener("webglcontextrestored",a),r&&t(),()=>{e.removeEventListener("webglcontextlost",o),e.removeEventListener("webglcontextrestored",a)}}var gm=require("@react-three/fiber"),Xg=require("react");function f0({captureRef:e}){let{gl:t,scene:n,camera:r,invalidate:i,get:o}=(0,gm.useThree)();return(0,Xg.useEffect)(()=>{if(!e)return;let a=()=>{let s=o();s.advance(s.frameloop==="never"?s.clock.elapsedTime:performance.now())};return e.current={gl:t,scene:n,camera:r,invalidate:i,drawNow:a},()=>{e.current=null}},[e,t,n,r,i,o]),null}function g0(){let e=(0,gm.useThree)(n=>n.frameloop),t=(0,gm.useThree)(n=>n.invalidate);return(0,Xg.useEffect)(()=>{e!=="never"&&t()},[e,t]),null}function b0(e){e.dispose(),"forceContextLoss"in e&&!Po(e)&&(e.forceContextLoss(),e.forceContextLoss=()=>{})}function v0(e){if(!e)return Promise.resolve(null);try{e.drawNow();let t=e.gl.domElement;return new Promise(n=>{t.toBlob(r=>n(r?URL.createObjectURL(r):null),"image/webp",.85)})}catch{return Promise.resolve(null)}}function y0(e){let t=(0,ir.useRef)(e);t.current=e;let[n,r]=(0,ir.useState)(null),[i,o]=(0,ir.useState)(0),[a,s]=(0,ir.useState)("ready"),l=(0,ir.useRef)(null),d=(0,ir.useRef)(!1),u=(0,ir.useRef)(null),m=(0,ir.useRef)(null),c=(0,ir.useCallback)(b=>{m.current?.dispose(),m.current=null,u.current=b,r(b)},[]),p=(0,ir.useCallback)(()=>{d.current||(d.current=!0,t.current?.(),l.current?.(),l.current=null,u.current&&(m.current=u.current),u.current=null,r(null),s("rebuilding"),o(b=>b+1))},[]),f=(0,ir.useCallback)(()=>{l.current?.(),l.current=null;let b=u.current;u.current=null,r(null),b&&b0(b)},[]),v=(0,ir.useCallback)(()=>{d.current=!1,s("lost")},[]);return(0,ir.useEffect)(()=>()=>{m.current?.dispose(),m.current=null},[]),(0,ir.useEffect)(()=>{if(!n)return;if(d.current=!1,s("ready"),Po(n)){let g=n,y=g.onDeviceLost;return g.onDeviceLost=x=>{console.warn("[react-immersive] The WebGPU device was lost.",x),v()},()=>{g.onDeviceLost=y}}let b=h0(n.domElement,{initiallyLost:n.getContext().isContextLost(),onLost:v,onRestored:p});return l.current=b,()=>{b(),l.current===b&&(l.current=null)}},[n,v,p]),{generation:i,status:a,reload:p,fail:v,release:f,onRendererCreated:c}}var vm=require("react");var Qd=require("react"),eE="200px",x0=new Map;function w0(e,t,n){let r=x0.get(t);if(!r){let a=new Map;r={observer:new IntersectionObserver(l=>{for(let d of l)a.get(d.target)?.(d.isIntersecting)},{rootMargin:t}),watchers:a},x0.set(t,r)}let{observer:i,watchers:o}=r;return o.set(e,n),i.observe(e),()=>{o.delete(e),i.unobserve(e)}}function S0(e){let t=typeof IntersectionObserver<"u",[n,r]=(0,Qd.useState)(!t),[i,o]=(0,Qd.useState)(!t);return(0,Qd.useEffect)(()=>{let a=e.current;if(!a||!t)return;let s=w0(a,eE,r),l=w0(a,"0px",o);return()=>{s(),l()}},[e,t]),{near:n,visible:i}}var es=require("react");function $g(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function qg(){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 M0(){return $g()||qg()}function tE(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=a=>typeof window.matchMedia=="function"&&window.matchMedia(a).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),n=e("(hover: none)")||e("(any-hover: none)"),r=navigator.maxTouchPoints>0,i=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,o=$g();return t||o||r&&n||r&&i}function eu(){if(!tE())return!1;if($g())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function _0(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return eu()}}function nE(e,t){let n=new Set,r=i=>{for(let o of i){if(n.size>=t)return;n.add(o.id)}};return r(e.filter(i=>i.wanted).sort((i,o)=>Number(o.visible)-Number(i.visible)||Number(o.live)-Number(i.live)||i.since-o.since)),r(e.filter(i=>!i.wanted&&i.live).sort((i,o)=>o.since-i.since)),n}var rE=12,iE=6,bm=new Map,oE=1,Yg=!1,C0;function T0(){Yg||(Yg=!0,queueMicrotask(()=>{Yg=!1,C0??(C0=eu()?iE:rE);let e=nE([...bm.values()],C0);for(let t of bm.values()){let n=e.has(t.id);n!==t.live&&(t.live=n,t.onLiveChange(n))}}))}function P0({managed:e,wanted:t,visible:n,onPark:r}){let[i,o]=(0,es.useState)(!1),a=(0,es.useRef)(r);a.current=r;let s=(0,es.useRef)(null);return(0,es.useEffect)(()=>{if(!e)return;let l={id:oE++,wanted:!1,visible:!1,live:!1,since:performance.now(),onLiveChange:d=>{d||a.current?.(),o(d)}};return bm.set(l.id,l),s.current=l,()=>{bm.delete(l.id),s.current=null,o(!1),T0()}},[e]),(0,es.useEffect)(()=>{let l=s.current;!l||l.wanted===t&&l.visible===n||(l.wanted!==t&&(l.since=performance.now()),l.wanted=t,l.visible=n,T0())},[e,t,n]),e?i:t}function A0({loading:e="lazy",reveal:t="auto",rootRef:n,onPark:r}){let{near:i,visible:o}=S0(n),[a,s]=(0,vm.useState)(t==="auto");return(0,vm.useEffect)(()=>{t==="auto"&&s(!0)},[t]),{live:P0({managed:e==="lazy",wanted:a&&(e==="eager"||i),visible:o,onPark:r}),visible:o,awaitingReveal:!a,reveal:()=>s(!0)}}var E0=require("lucide-react");var ll=require("react/jsx-runtime");function ym({src:e,hidden:t=!1}){return e?(0,ll.jsx)("img",{className:`ri-poster${t?" ri-poster--hidden":""}`,src:e,alt:"","aria-hidden":"true",draggable:!1,decoding:"async"}):null}function k0({className:e,background:t,poster:n,onReveal:r}){let i=Fe();return(0,ll.jsxs)("div",{className:`${e} ri-viewerPlaceholder`,style:{background:t},children:[(0,ll.jsx)(ym,{src:n}),r?(0,ll.jsxs)("button",{type:"button",className:"ri-revealButton",onClick:r,children:[(0,ll.jsx)(E0.Box,{size:16,"aria-hidden":"true"}),i("viewIn3D")]}):null]})}function Kg(e,t){if(e)return e;let n=t?.background;return n?.enabled&&n.type==="color"?n.color:"#1c1c1d"}function xm(e,t){return t||e}async function R0(e,t){await e.setLookAt(...t.position,...t.target,!1);let n=e.camera;t.fov!=null&&Number.isFinite(t.fov)&&t.fov>0&&t.fov<180&&"fov"in n&&(n.fov=t.fov,n.updateProjectionMatrix()),t.zoom!=null&&Number.isFinite(t.zoom)&&t.zoom>0&&await e.zoomTo(t.zoom,!1)}var L0=require("react"),vc=class extends L0.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,r){this.props.onError?.(n)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};var yc=require("react");function D0({modelUrl:e,tilesetUrl:t=null,getOptions:n,now:r=()=>performance.now(),timestamp:i=()=>new Date().toISOString(),sessionId:o=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`viewer-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,log:a=l=>console.info("[react-immersive engagement]",l),warn:s=l=>console.warn("[react-immersive] onEngagement callback failed:",l)}){let l=r(),d=()=>{let _=n();return!!(_.onEngagement||_.debugEngagement)},u=_=>Math.max(0,Math.round(r()-_)),m=_=>{let{onEngagement:k,debugEngagement:R}=n();if(!k&&!R)return;let U={..._,sessionId:o,timestamp:i(),elapsedMs:u(l),modelUrl:e,tilesetUrl:t};R&&a(U);try{Promise.resolve(k?.(U)).catch(s)}catch(H){s(H)}},c=null,p=null,f="[]",v=null,b=null,g=_=>{c=_},y=_=>{!d()||c===_.objectKey||(c=_.objectKey,m({type:"part-viewed",..._}))},x=(_,k,R=null)=>{let U=JSON.stringify([R,k,_]);!d()||_===k||U===p||(p=U,m({type:"variant-chosen",variant:_,previousVariant:k,group:R}))},M=_=>{let k=JSON.stringify(_);k!==f&&(f=k,p=null)},P=()=>{!d()||v!==null||(v=r(),m({type:"ar-started"}))},S=(_="session-ended")=>{if(v===null)return;let k=u(v);v=null,m({type:"ar-ended",durationMs:k,reason:_})},T=(_="stopped")=>{if(!b)return;let{startedAt:k,annotationCount:R}=b;b=null,m({type:"tour-stopped",annotationCount:R,durationMs:u(k),reason:_})};return{setSelectedPart:g,viewPart:y,setActiveVariants:M,chooseVariant:x,startAR:P,endAR:S,startTour:_=>{!d()||_<=0||(T("restarted"),b={startedAt:r(),annotationCount:_},m({type:"tour-started",annotationCount:_}))},stopTour:T,completeTour:()=>{if(!b)return;let{startedAt:_,annotationCount:k}=b;b=null,m({type:"tour-completed",annotationCount:k,durationMs:u(_)})},interrupt:()=>{S("interrupted"),T("interrupted")},requestARLaunch:_=>m({type:"ar-launch-requested",channel:_})}}function O0(e){let t=(0,yc.useRef)(e);t.current=e;let n=!!(e.onEngagement||e.debugEngagement),r=(0,yc.useMemo)(()=>D0({modelUrl:e.modelUrl,tilesetUrl:e.tilesetUrl,getOptions:()=>t.current}),[e.modelUrl,e.tilesetUrl,n]);return(0,yc.useEffect)(()=>()=>r.interrupt(),[r]),r}var xc=require("fflate");var N0;function B0(e){N0=e}function tu(e){N0?.(e)}var aE=[".glb",".gltf",".obj",".fbx",".usdz",".stl",".ply",".zip"],sE=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],nu=1024*1024,I0=128*nu,z0=1024,V0=128*nu,U0=256*nu,F0=200,lE=nu,ia=new Map,Jg=".glb,.gltf,.obj,.fbx,.usdz,.stl,.ply,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function ru(e){let t=e.split(/[?#]/,1)[0].toLowerCase();return t.endsWith(".obj")?"obj":t.endsWith(".fbx")?"fbx":t.endsWith(".usdz")?"usdz":t.endsWith(".stl")?"stl":t.endsWith(".ply")?"ply":t.endsWith(".gltf")?"gltf":"glb"}function W0(e){return ia.get(e)??{format:ru(e)}}function cE(e){let t=e.name.toLowerCase();return aE.some(n=>t.endsWith(n))||sE.includes(e.type)}async function cl(e){if(!cE(e))throw new Error("Unsupported model file. Please upload a .glb, .gltf, .obj, .fbx, .usdz, .stl, .ply, or .zip asset.");let t=e.name.toLowerCase();if(t.endsWith(".usdz")||e.type==="model/vnd.usdz+zip"||e.type==="application/vnd.usdz+zip")return j0(e,"usdz");if(t.endsWith(".zip")||dE(e.type))return uE(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return H0(e);let n=ru(e.name);return n==="gltf"?H0(e):j0(e,n)}function j0(e,t){let n=URL.createObjectURL(e);return ia.set(n,{format:t,entryPath:e.name}),{url:n,name:e.name,format:t,cleanup:()=>{tu(n),ia.delete(n),URL.revokeObjectURL(n)}}}function dE(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function H0(e){let t=await e.text(),n=X0(t,e.name);for(let i of $0(n))if(!Qg(i))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let r=URL.createObjectURL(e);return ia.set(r,{format:"gltf",entryPath:e.name}),{url:r,name:e.name,format:"gltf",cleanup:()=>{tu(r),ia.delete(r),URL.revokeObjectURL(r)}}}async function uE(e){if(e.size>I0)throw new Error(`Model zip is too large. The compressed archive must be ${Zg(I0)} or smaller.`);let t=await pE(new Uint8Array(await e.arrayBuffer())),n=new Map;for(let[a,s]of Object.entries(t)){let l=eb(a);!l||q0(l)||n.set(l,s)}let r=[...n.keys()].filter(a=>/\.(gltf|obj|fbx|stl|ply)$/i.test(a));if(r.length===0)throw new Error("Invalid model zip: no .gltf, .obj, .fbx, .stl, or .ply file found.");if(r.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let i=r[0],o=ru(i);if(o==="gltf")return hE(e,i,n);if(o==="obj"||o==="fbx"||o==="stl"||o==="ply")return mE(e,i,o,n);throw new Error(`Unsupported model entry ${i}.`)}function pE(e){return new Promise((t,n)=>{let r=0,i=0,o=null,a=l=>(o??(o=new Error(`Invalid model zip: ${l}`)),!1);(0,xc.unzip)(e,{filter:l=>{if(o)return!1;if(r+=1,r>z0)return a(`archive contains more than ${z0.toLocaleString()} entries.`);if(l.originalSize>V0)return a(`${l.name} expands beyond the ${Zg(V0)} per-file limit.`);if(i+=l.originalSize,i>U0)return a(`expanded contents exceed ${Zg(U0)}.`);if(l.originalSize>=lE&&(l.size===0||l.originalSize/l.size>F0))return a(`${l.name} exceeds the ${F0}:1 compression-ratio limit.`);let d=eb(l.name);return!!d&&!q0(d)}},(l,d)=>{o?n(o):l?n(new Error(`Invalid model zip: ${l.message}`)):t(d)})})}function Zg(e){return`${e/nu} MiB`}function mE(e,t,n,r){let i=[],o={};for(let[s,l]of r){let d=URL.createObjectURL(new Blob([l],{type:Y0(s)}));i.push(d),o[s]=d}let a=o[t];if(!a)throw i.forEach(s=>URL.revokeObjectURL(s)),new Error(`Invalid model zip: could not read ${t}.`);return ia.set(a,{format:n,entryPath:t,resourceUrls:o}),{url:a,name:e.name,format:n,cleanup:()=>{tu(a),ia.delete(a),i.forEach(s=>URL.revokeObjectURL(s))}}}function hE(e,t,n){let r=n.get(t);if(!r)throw new Error("Invalid GLTF zip: no .gltf found.");let i=X0((0,xc.strFromU8)(r),t);fE(i,t);let o=gE(t),a=[];try{G0(i.buffers,o,n,a),G0(i.images,o,n,a);let s=new Blob([(0,xc.strToU8)(JSON.stringify(i))],{type:"model/gltf+json"}),l=URL.createObjectURL(s);return a.push(l),ia.set(l,{format:"gltf",entryPath:t}),{url:l,name:e.name,format:"gltf",cleanup:()=>{tu(l),ia.delete(l),a.forEach(d=>URL.revokeObjectURL(d))}}}catch(s){throw a.forEach(l=>URL.revokeObjectURL(l)),s}}function G0(e,t,n,r){for(let i of e??[]){if(typeof i.uri!="string"||Qg(i.uri))continue;let o=bE(t,i.uri),a=n.get(o);if(!a)throw new Error(`Invalid GLTF zip: missing referenced asset ${i.uri}.`);let s=URL.createObjectURL(new Blob([a],{type:Y0(o)}));r.push(s),i.uri=s}}function X0(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function $0(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function fE(e,t){for(let n of $0(e)){if(Qg(n))continue;let r=/^[a-z][a-z0-9+.-]*:/i.test(n),i=n.startsWith("/")||n.startsWith("\\");if(r||i)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function Qg(e){return e.startsWith("data:")}function eb(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(r=>r&&r!==".")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function q0(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(n=>n===".DS_Store"||n.startsWith("._"))}function gE(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function bE(e,t){let n=t.split(/[?#]/)[0],r=vE(n);return eb(e?`${e}/${r}`:r)}function vE(e){try{return decodeURI(e)}catch{return e}}function Y0(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 oi=require("three"),Z0=require("three/examples/jsm/loaders/STLLoader.js"),J0=require("three/examples/jsm/loaders/PLYLoader.js"),yE=12106948,Q0="This PLY file is a point cloud: it has vertices but no faces.",wm=class extends Error{constructor(){super(Q0),this.name="PointCloudError"}};function Sm(e){return e instanceof wm||e instanceof Error&&e.message.includes(Q0)}function e1(e,t){let n=e.split(/[?#]/,1)[0],r=n.slice(n.lastIndexOf("/")+1);try{r=decodeURIComponent(r)}catch{}return r.replace(/\.[^.]*$/,"").trim()||t}function tb(e){return new oi.MeshStandardMaterial({color:e?16777215:yE,vertexColors:e,metalness:0,roughness:.6})}function K0(e,t,n){let r=e.itemSize;return new oi.Float32BufferAttribute(e.array.slice(t*r,(t+n)*r),r)}function t1(e,t){let n=new Z0.STLLoader().parse(e),r=!!n.hasColors,i=new oi.Group;if(n.groups.length>1){let s=n.userData.groupNames??[],l=n.getAttribute("position"),d=n.getAttribute("normal");return n.groups.forEach((u,m)=>{let c=new oi.BufferGeometry;c.setAttribute("position",K0(l,u.start,u.count)),d&&c.setAttribute("normal",K0(d,u.start,u.count));let p=new oi.Mesh(c,tb(!1));p.name=s[m]?.trim()||`${t} ${m+1}`,i.add(p)}),n.dispose(),i}n.clearGroups();let o=tb(r);r&&n.alpha!==void 0&&n.alpha<1&&(o.opacity=n.alpha,o.transparent=!0);let a=new oi.Mesh(n,o);return a.name=t,i.add(a),i}function xE(e){let n=new TextDecoder().decode(new Uint8Array(e,0,Math.min(e.byteLength,65536))).split("end_header",1)[0],r=/^\s*element\s+face\s+(\d+)/m.exec(n);return!!(r&&Number(r[1])>0)}function n1(e,t){if(!xE(e))throw new wm;let n=new J0.PLYLoader().parse(e);n.getAttribute("normal")||n.computeVertexNormals();let r=new oi.Mesh(n,tb(!!n.getAttribute("color")));r.name=t;let i=new oi.Group;return i.add(r),i}var wE={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ",stl:"STL",ply:"PLY"},SE=/\.(glb|gltf|obj|fbx|usdz|stl|ply|zip)$/i;function ME(e,t){let n=e?.response?.status;if(typeof n=="number")return n;let r=/responded with (\d{3})/.exec(t);return r?Number(r[1]):null}function wc(e,t,n,r){let i=e instanceof Error?e.message:e==null?"":String(e),o=(c,p)=>Yd(r,c,p),a=o("loadErrorTitle"),s=i||null;if(Sm(e))return{title:a,detail:o("loadErrorPointCloud"),technical:s};let l=ME(e,i);if(l===404||l===410)return{title:a,detail:o("loadErrorNotFound",{status:l}),technical:s};if(l===401||l===403)return{title:a,detail:o("loadErrorDenied",{status:l}),technical:s};if(l!==null)return{title:a,detail:o("loadErrorStatus",{status:l}),technical:s};if(/failed to fetch|networkerror|load failed|network error/i.test(i))return{title:a,detail:o("loadErrorNetwork"),technical:s};if(/<!doctype|<html/i.test(i))return{title:a,detail:o("loadErrorHtml"),technical:s};let d=t.split(/[?#]/,1)[0],u=wE[n??ru(t)],m=SE.test(d);return{title:a,detail:m||n?o(n?"loadErrorInvalidExplicitFormat":"loadErrorInvalidFile",{format:u}):o("loadErrorMissingFormat",{format:u}),technical:s}}var r1={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1,showMaterialVariants:!1},_E=Object.freeze({minimal:Object.freeze({...r1}),showcase:Object.freeze({...r1,autoRotate:!0}),configurator:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!0,showMaterialVariants:!0}),inspector:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!0,showDownloadButton:!0,showResetButton:!0,showViewGizmo:!0,showMeasureTools:!0,showUvCheckerButton:!0,showExplodeControls:!0,showSectionTools:!0,showIsolateControls:!0,enableKeyboardNavigation:!0})}),CE=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function i1(e){let t={};for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t}function TE({ui:e,tools:t,controls:n,perf:r,tiles:i,xr:o,decoders:a}){let s=e?.download,l=e?.mouseController,d=t?.measure,u=n?.autoRotate;return{showObjectBindingDataPanel:e?.objectPanel,showSceneObjectsPanel:e?.sceneObjects,showDownloadButton:s===void 0?void 0:s!==!1,downloadFilename:typeof s=="string"?s:void 0,showResetButton:e?.reset,showFullscreenButton:e?.fullscreen,showLoadingOverlay:e?.loadingOverlay,showViewGizmo:e?.viewGizmo,showMouseController:l===void 0?void 0:l!==!1,mouseControllerPosition:typeof l=="object"?l.position:void 0,mouseControllerOpacity:typeof l=="object"?l.opacity:void 0,showAnnotationNavigation:e?.annotationNavigation,showAnnotationOnHover:e?.annotationOnHover,showAnnotationFilters:e?.annotationFilters,highlightOnHover:e?.highlightOnHover,showMaterialVariants:e?.materialVariants,showObjectNavigator:e?.objectNavigator,showMeasureTools:d===void 0?void 0:d!==!1,measurementUnit:typeof d=="object"?d.unit:void 0,showUvCheckerButton:t?.uvChecker,showExplodeControls:t?.explode,showSectionTools:t?.section,showIsolateControls:t?.isolate,texturePositioning:t?.texturePositioning,enableCameraControls:n?.enabled,enableKeyboardNavigation:n?.keyboard,reducedMotion:n?.reducedMotion,disableZoom:n?.zoom===void 0?void 0:!n.zoom,zoomOnSelected:n?.zoomOnSelect,autoRotate:u===void 0?void 0:u!==!1,autoRotateSpeed:typeof u=="number"?u:void 0,refitOnResize:n?.refitOnResize,cameraLimits:n?.limits,moveSensitivity:n?.moveSensitivity,zoomSensitivity:n?.zoomSensitivity,renderMode:r?.renderMode,maxDpr:r?.maxDpr,performanceProfile:r?.profile,preserveDrawingBuffer:r?.preserveDrawingBuffer,webgpu:r?.webgpu,tilesetUrl:i?.url,tilesErrorTarget:i?.errorTarget,tilesCacheSize:i?.cacheSize,enableXR:o?.enabled,usdzUrl:o?.usdzUrl,arScaleMode:o?.scaleMode,mobileHandoffUrl:o?.mobileHandoffUrl,dracoDecoderPath:a?.draco,ktx2TranscoderPath:a?.ktx2,meshopt:a?.meshopt}}function o1(e){let t={...e};for(let n of CE)delete t[n];return{...e.preset?_E[e.preset]:void 0,...i1(t),...i1(TE(e))}}var dl=Object.freeze([{id:"change-color",label:"Change Color",handling:"viewer",description:"Opens a color picker docked under the action and commits the result to style.material.baseColor."},{id:"change-material",label:"Change Material",handling:"viewer",description:"Opens the material picker so the viewer can swap the object's texture."},{id:"add-text",label:"Add Text",handling:"viewer",description:"Opens a text box docked under the action; the viewer's user types, clicks the object to place it, and can resize, turn, move, or remove it. Saved to the binding's decals."},{id:"add-image",label:"Add Image",handling:"viewer",description:"Lets the viewer's user choose an image, click the object to place it, and resize, turn, move, or remove it. Saved to the binding's decals."},{id:"toggle-visibility",label:"Toggle Visibility",handling:"viewer",description:"Flips the binding's visible flag."},{id:"toggle-light",label:"Toggle Light",handling:"viewer",description:"Turns the scene lights attached to this object on or off, or the object's own glow when none is attached."},{id:"change-light-color",label:"Change Light Color",handling:"viewer",description:"Opens a color picker docked under the action for the scene lights attached to this object, or the object's own glow."},{id:"set-brightness",label:"Set Brightness",handling:"viewer",description:"Opens a brightness slider docked under the action for the scene lights attached to this object, or the object's own glow."}]),Mm="__custom__";function iu(e){return dl.find(t=>t.id===e)}var ou=dl.filter(e=>e.handling==="viewer").map(e=>e.id),PE=new Set(["","New Action",...dl.map(e=>e.label)]);function nb(e){return PE.has(e.trim())}function a1(e,t){let n=Array.from({length:t.length+1},(r,i)=>i);for(let r=1;r<=e.length;r+=1){let i=[r];for(let o=1;o<=t.length;o+=1){let a=n[o-1]+(e[r-1]===t[o-1]?0:1);i[o]=Math.min(i[o-1]+1,n[o]+1,a)}n=i}return n[t.length]}function s1(e){if(iu(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let n=t.replace(/[^a-z0-9]/g,""),r=null;for(let i of dl){let o=Math.min(a1(t,i.id),a1(n,i.id.replace(/[^a-z0-9]/g,"")));(!r||o<r.distance)&&(r={id:i.id,distance:o})}return r&&r.distance<=2?r.id:null}var l1=require("three");function ts(e,t){if(e[t])return t;let n=Object.entries(e).find(([,i])=>i.id===t)?.[0];return n||(Object.entries(e).find(([,i])=>i.modelObjectId===t)?.[0]??null)}function c1(e,t,n){let r=t[n]?.modelObjectId;return e.lighting.lights.filter(i=>{let o=i.attachment?.objectId;return o?ts(t,o)===n||o===r:!1})}function rb(e,t){return e.lighting.lights.some(n=>t[n.id])?{...e,lighting:{...e.lighting,lights:e.lighting.lights.map(n=>t[n.id]?{...n,...t[n.id]}:n)}}:e}function d1(e){let t=null;if(e?.traverse(i=>{if(t)return;let o=i.material;for(let a of Array.isArray(o)?o:o?[o]:[])if(a.emissive instanceof l1.Color){t=a;return}}),!t)return{color:"#000000",intensity:0,on:!1};let n=`#${t.emissive.getHexString()}`,r=t.emissiveIntensity??1;return{color:n,intensity:r,on:n!=="#000000"&&r>0}}var u1=require("react-colorful"),or=require("react/jsx-runtime");function p1({kind:e,color:t,brightness:n,onColorChange:r,onBrightnessChange:i,onClose:o}){return(0,or.jsx)("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:a=>a.stopPropagation(),children:e==="change-light-color"?(0,or.jsxs)(or.Fragment,{children:[(0,or.jsx)("p",{className:"ri-popoverLabel",children:"Light color"}),(0,or.jsx)(u1.HexColorPicker,{color:t,onChange:r}),(0,or.jsxs)("div",{className:"ri-inlineRow",children:[(0,or.jsx)("span",{className:"ri-colorCode",children:t}),(0,or.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]}):(0,or.jsxs)(or.Fragment,{children:[(0,or.jsx)("p",{className:"ri-popoverLabel",children:"Brightness"}),(0,or.jsx)("input",{type:"range",min:0,max:200,step:1,value:n,"aria-label":"Brightness",style:{width:"100%"},onChange:a=>i(Number(a.target.value))}),(0,or.jsxs)("div",{className:"ri-inlineRow",children:[(0,or.jsxs)("span",{className:"ri-colorCode",children:[n,"%"]}),(0,or.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]})})}var au=require("react");var ns=require("lucide-react"),Sc=require("react");function m1(e){let t=!1,n,r=()=>{t||(e(),t||(n=setTimeout(r,70)))};return e(),n=setTimeout(r,300),()=>{t=!0,clearTimeout(n)}}var oa=require("react/jsx-runtime");function _m({onNudge:e}){let t=Fe(),n=(0,Sc.useRef)(e);n.current=e;let r=(0,Sc.useRef)(null),i=(0,Sc.useRef)(null),o=()=>{r.current?.(),r.current=null,i.current=null};return(0,Sc.useEffect)(()=>{let a=l=>{l.pointerId===i.current&&o()},s=l=>{l.key==="Escape"&&o()};return window.addEventListener("pointerup",a,!0),window.addEventListener("pointercancel",a,!0),window.addEventListener("blur",o),window.addEventListener("keydown",s),()=>{o(),window.removeEventListener("pointerup",a,!0),window.removeEventListener("pointercancel",a,!0),window.removeEventListener("blur",o),window.removeEventListener("keydown",s)}},[]),(0,oa.jsxs)("div",{className:"ri-decalPosition",children:[(0,oa.jsxs)("div",{children:[(0,oa.jsx)("div",{className:"ri-decalPosition__label",children:t("position")}),(0,oa.jsx)("div",{className:"ri-decalPosition__hint",children:t("decalNudgeHint")})]}),(0,oa.jsx)("div",{className:"ri-decalPosition__pad",role:"group","aria-label":t("decalNudgeControls"),children:[["up",ns.ArrowUp],["left",ns.ArrowLeft],["right",ns.ArrowRight],["down",ns.ArrowDown]].map(([a,s])=>(0,oa.jsx)("button",{type:"button",className:`ri-decalPosition__button ri-decalPosition__button--${a}`,"aria-label":t("moveDecal",{direction:t(a)}),title:t("moveDecalOnSurface",{direction:t(a)}),onPointerDown:l=>{l.button===0&&(l.preventDefault(),l.currentTarget.focus({preventScroll:!0}),o(),i.current=l.pointerId,r.current=m1(()=>n.current(a)))},onClick:l=>{l.detail===0&&n.current(a)},children:(0,oa.jsx)(s,{size:16})},a))})]})}var Mt=require("react/jsx-runtime"),AE=e=>Math.round(e*180/Math.PI);function h1({kind:e,decals:t,activeId:n,error:r,moving:i,defaultSize:o,onSelect:a,onAddText:s,onAddImage:l,onChange:d,onMove:u,onNudge:m,onRemove:c,onClose:p}){let f=Fe(),[v,b]=(0,au.useState)(""),[g,y]=(0,au.useState)("#ffffff"),x=(0,au.useRef)(null),M=t.find(S=>S.id===n)??null;return(0,Mt.jsxs)("div",{className:"ri-popover ri-popover--inline ri-decalControl",onPointerDown:S=>S.stopPropagation(),children:[e==="add-text"?(0,Mt.jsxs)(Mt.Fragment,{children:[(0,Mt.jsx)("p",{className:"ri-popoverLabel",children:f("text")}),(0,Mt.jsxs)("div",{className:"ri-decalControl__row",children:[(0,Mt.jsx)("input",{className:"ri-decalControl__input",value:v,placeholder:f("yourText"),"aria-label":f("textToAdd"),onChange:S=>b(S.target.value)}),(0,Mt.jsx)("input",{type:"color",className:"ri-decalControl__color",value:g,"aria-label":f("textColour"),onChange:S=>y(S.target.value)})]}),(0,Mt.jsx)("button",{type:"button",className:"ri-uploadButton",disabled:!v.trim(),onClick:()=>{s(v.trim(),g)&&b("")},children:f("addText")})]}):(0,Mt.jsxs)(Mt.Fragment,{children:[(0,Mt.jsx)("p",{className:"ri-popoverLabel",children:f("image")}),(0,Mt.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:()=>x.current?.click(),children:f("chooseImage")}),(0,Mt.jsx)("input",{ref:x,type:"file",accept:"image/png,image/jpeg,image/webp,image/svg+xml",className:"ri-hiddenInput","aria-label":f("imageToAdd"),onChange:S=>{let T=S.target.files?.[0];S.target.value="",T&&l(T)}})]}),r?(0,Mt.jsx)("div",{className:"ri-decalControl__hint",role:"alert",children:r}):null,t.length>0?(0,Mt.jsx)("div",{className:"ri-decalControl__list",role:"group","aria-label":f("added"),children:t.map((S,T)=>(0,Mt.jsx)("button",{type:"button",className:`ri-decalControl__chip ${S.id===n?"ri-decalControl__chip--active":""}`,"aria-pressed":S.id===n,onClick:()=>a(S.id),children:S.image?f("decalImage",{index:T+1}):S.text||f("decalText",{index:T+1})},S.id))}):null,M?(0,Mt.jsxs)("div",{className:"ri-decalControl__editor",children:[(0,Mt.jsx)(_m,{onNudge:S=>m(M.id,S)}),M.image?null:(0,Mt.jsxs)("div",{className:"ri-decalControl__row",children:[(0,Mt.jsx)("input",{className:"ri-decalControl__input",value:M.text??"","aria-label":f("text"),onChange:S=>d(M.id,{text:S.target.value})}),(0,Mt.jsx)("input",{type:"color",className:"ri-decalControl__color",value:M.color??"#ffffff","aria-label":f("colour"),onChange:S=>d(M.id,{color:S.target.value})})]}),(0,Mt.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,Mt.jsx)("span",{children:f("size")}),(0,Mt.jsx)("input",{type:"range",min:o/10,max:o*4,step:o/50,value:M.size,"aria-label":f("size"),onChange:S=>d(M.id,{size:Number(S.target.value)})})]}),(0,Mt.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,Mt.jsx)("span",{children:f("turn")}),(0,Mt.jsx)("input",{type:"range",min:-180,max:180,step:1,value:AE(M.rotation??0),"aria-label":f("rotation"),onChange:S=>d(M.id,{rotation:Number(S.target.value)*Math.PI/180})})]}),(0,Mt.jsxs)("div",{className:"ri-inlineRow",children:[(0,Mt.jsx)("button",{type:"button",className:"ri-secondaryButton","aria-pressed":i,title:f("dragTheDecalAcrossTheObjectsSurface"),onClick:()=>u(M.id),children:f("move")}),(0,Mt.jsx)("button",{type:"button",className:"ri-removeButton",onClick:()=>c(M.id),children:f("remove")})]})]}):null,(0,Mt.jsxs)("div",{className:"ri-inlineRow",children:[(0,Mt.jsx)("span",{className:"ri-colorCode",children:t.length===0?f("noneAddedYet"):f("decalAdded",{count:t.length})}),(0,Mt.jsx)("button",{type:"button",className:"ri-secondaryButton",onClick:p,children:f("done")})]})]})}var zm=require("react"),V1=require("@react-three/fiber"),ro=require("three");var sn=require("three"),EE=.5,su=4;function kE(e,t=0){let n=new sn.Vector3(...e);n.lengthSq()<1e-12&&n.set(0,0,1),n.normalize();let r=new sn.Object3D;return Math.abs(n.y)>.999&&r.up.set(0,0,-Math.sign(n.y)),r.lookAt(n),r.rotateZ(t),r.rotation.clone()}function RE(e,t,n){let r=null;if(e.bones&&t.bones){r=new Map;for(let[i,o]of e.bones)r.set(i,o*(1-n));for(let[i,o]of t.bones)r.set(i,(r.get(i)??0)+o*n)}return{position:e.position.clone().lerp(t.position,n),normal:e.normal.clone().lerp(t.normal,n),bones:r}}function f1(e,t,n,r){let i=a=>r?a.position[t]<=n:a.position[t]>=n,o=[];for(let a=0;a<e.length;a++){let s=e[a],l=e[(a+1)%e.length],d=i(s);if(d&&o.push(s),d!==i(l)){let u=l.position[t]-s.position[t];o.push(RE(s,l,(n-s.position[t])/u))}}return o}function Cm(e,t,n){let r=e.geometry,i=r.getAttribute("position");if(!i)return null;let o=r.getAttribute("normal"),a=r.getAttribute("skinIndex"),s=r.getAttribute("skinWeight"),l=!!(a&&s),d=r.getIndex(),u=Math.max(t.size,1e-6),m=u/(n>0&&Number.isFinite(n)?n:1),c=Math.max(u,m)*EE,p={x:u/2,y:m/2,z:c/2},f=new sn.Matrix4().makeRotationFromEuler(kE(t.normal,t.rotation)).setPosition(...t.position),v=f.clone().invert(),b=(H,B)=>{let X=null;if(l){X=new Map;for(let D=0;D<su;D++){let L=s.getComponent(H,D);if(L<=0)continue;let re=a.getComponent(H,D);X.set(re,(X.get(re)??0)+L)}}return{position:B.clone(),normal:o?new sn.Vector3().fromBufferAttribute(o,H):new sn.Vector3,bones:X}},g=[],y=[],x=[],M=[],P=[],S=new sn.Vector3,T=new sn.Vector3,h=new sn.Vector3,w=H=>{if(x.push(.5+H.position.x/u,.5-H.position.y/m),S.copy(H.position).applyMatrix4(f),g.push(S.x,S.y,S.z),y.push(H.normal.x,H.normal.y,H.normal.z),!H.bones)return;let B=[...H.bones].sort((D,L)=>L[1]-D[1]).slice(0,su),X=B.reduce((D,[,L])=>D+L,0)||1;for(let D=0;D<su;D++)M.push(B[D]?.[0]??0),P.push((B[D]?.[1]??0)/X)},C=["x","y","z"],_=[new sn.Vector3,new sn.Vector3,new sn.Vector3],k=[0,0,0],R=(d?d.count:i.count)/3;for(let H=0;H<R;H++){for(let D=0;D<3;D++){let L=H*3+D;k[D]=d?d.getX(L):L,_[D].fromBufferAttribute(i,k[D]).applyMatrix4(v)}if(C.some(D=>_[0][D]>p[D]&&_[1][D]>p[D]&&_[2][D]>p[D]||_[0][D]<-p[D]&&_[1][D]<-p[D]&&_[2][D]<-p[D]))continue;let B=_.map((D,L)=>b(k[L],D));if(!o){T.copy(B[1].position).sub(B[0].position),h.copy(B[2].position).sub(B[0].position);let D=T.cross(h).transformDirection(f);for(let L of B)L.normal.copy(D)}let X=B;for(let D of C)if(X=f1(X,D,p[D],!0),X=f1(X,D,-p[D],!1),X.length<3)break;for(let D=1;D+1<X.length;D++)w(X[0]),w(X[D]),w(X[D+1])}if(g.length===0)return null;let U=new sn.BufferGeometry;return U.setAttribute("position",new sn.Float32BufferAttribute(g,3)),U.setAttribute("normal",new sn.Float32BufferAttribute(y,3)),U.setAttribute("uv",new sn.Float32BufferAttribute(x,2)),l&&(U.setAttribute("skinIndex",new sn.Uint16BufferAttribute(M,su)),U.setAttribute("skinWeight",new sn.Float32BufferAttribute(P,su))),U}function b1(e){return JSON.stringify([e.image??null,e.image?null:[e.text??"",e.color,e.fontFamily,e.fontWeight],e.position,e.normal,e.size,e.rotation??0])}var g1=256,ib=24;function v1(e){let t=`${e.fontWeight??"bold"} ${g1-ib*2}px ${e.fontFamily||"sans-serif"}`,n=document.createElement("canvas"),r=n.getContext("2d");r.font=t;let i=e.text||" ";n.width=Math.min(Math.max(Math.ceil(r.measureText(i).width)+ib*2,8),4096),n.height=g1,r.font=t,r.textAlign="center",r.textBaseline="middle",r.fillStyle=e.color??"#ffffff",r.fillText(i,n.width/2,n.height/2,n.width-ib);let o=new sn.CanvasTexture(n);return o.flipY=!1,o.colorSpace=sn.SRGBColorSpace,{texture:o,aspect:n.width/n.height}}var pu=require("react"),ai=require("three");var gr=require("three");function Tm(e){let t=!0;return e?.traverse(n=>{let r=n.isMesh?n.geometry:null;r&&!r.getAttribute("uv")&&(t=!1)}),t}function y1(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function x1(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function ar(e){return!!(e&&"isMesh"in e&&e.isMesh)}var Ao=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],Pm={texture:"map",metalnessMap:"metalnessMap",roughnessMap:"roughnessMap",emissiveMap:"emissiveMap",alphaMap:"alphaMap",normalMap:"normalMap",bumpMap:"bumpMap",aoMap:"aoMap",displacementMap:"displacementMap",clearcoatMap:"clearcoatMap",clearcoatRoughnessMap:"clearcoatRoughnessMap",clearcoatNormalMap:"clearcoatNormalMap",anisotropyMap:"anisotropyMap",transmissionMap:"transmissionMap",thicknessMap:"thicknessMap",sheenColorMap:"sheenColorMap",sheenRoughnessMap:"sheenRoughnessMap",specularIntensityMap:"specularIntensityMap",specularColorMap:"specularColorMap"},LE=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function to(e){return LE.has(e)?gr.SRGBColorSpace:gr.NoColorSpace}function An(e,t){return e?.[t]?.path}function w1(e,t){let n=e?.[t]?.offset;if(!n)return;let[r,i]=n;if(!(!Number.isFinite(r)||!Number.isFinite(i)))return r===0&&i===0?void 0:[r,i]}function S1(e,t){let n=e?.[t]?.scale;if(!(!Number.isFinite(n)||!n))return n===1?void 0:n}function M1(e,t){let n=e?.[t]?.rotation;if(!(!Number.isFinite(n)||!n))return n}function _1(e){return e==="back"?gr.BackSide:e==="double"?gr.DoubleSide:gr.FrontSide}function C1(e){return e==="additive"?gr.AdditiveBlending:gr.NormalBlending}function aa(e,t=1,n=t){if(e&&typeof e=="object"){let r=e;if(typeof r.x=="number"&&Number.isFinite(r.x)&&typeof r.y=="number"&&Number.isFinite(r.y))return new gr.Vector2(r.x,r.y)}return new gr.Vector2(t,n)}function Am(e){return Number.isFinite(e)&&e>0?e:1}function T1(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function P1(e){return e?.loopMode??"repeat"}var Em=require("three");function Pr(e){return e.isSkinnedMesh===!0}function rs(e){let t=[];return e.traverse(n=>{Pr(n)&&t.push(n)}),t}var Mc="reactImmersiveSkinFreeze";function km(e){return!!e.userData[Mc]}function _c(e,t){let n=e.userData,r=new Em.Matrix4().copy(t).invert(),i=n[Mc];if(i){i.frozenInverse.copy(r),e.bindMatrixInverse.copy(r);return}let o={frozenInverse:r,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(r),e.onBeforeRender=function(a,s,l,d,u,m){o.previousOnBeforeRender.call(this,a,s,l,d,u,m),e.bindMatrixInverse.copy(o.frozenInverse)},n[Mc]=o}function lu(e){return e.userData[Mc]?.frozenInverse??null}function sa(e){let t=e.userData,n=t[Mc];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[Mc],e.updateMatrixWorld(!0))}function A1(e){let t=e,n=lu(e);n&&t.bindMatrixInverse.copy(n),t.skeleton?.update?.();let r=t.geometry.clone(),i=r.getAttribute("position");if(i){let o=new Em.Vector3;for(let a=0;a<i.count;a++)t.getVertexPosition(a,o),i.setXYZ(a,o.x,o.y,o.z);i.needsUpdate=!0}return r.deleteAttribute("skinIndex"),r.deleteAttribute("skinWeight"),r.morphAttributes={},r.morphTargetsRelative=!1,r.computeVertexNormals(),r.computeBoundingBox(),r.computeBoundingSphere(),r}function E1(e){return e.matrixWorld.clone()}var En=require("three"),Cc=new Map,la={color:"#93c5fd",intensity:.07},ul=new En.Color(la.color).multiplyScalar(la.intensity),k1=new En.Color(la.color),R1=.28,Tc=new Map,sb=new Map;function DE(e){return`${e.name}|${e.size}|${e.lastModified}`}function Rm(e){let t=DE(e),n=e.name.lastIndexOf("."),r=n>0?e.name.slice(0,n):e.name,i=n>0?e.name.slice(n):"",o=`materials/${e.name}`,a=2;for(;;){let s=sb.get(o);if(s===void 0||s===t)return sb.set(o,t),o;o=`materials/${r}-${a}${i}`,a+=1}}function Lm(e){return Tc.get(e)}function L1(e,t){let n=++e.loadGeneration;e.loaded=!1;let r=()=>{if(e.loadGeneration!==n)return;e.loaded=!0;let i=e.pending;e.pending=[];for(let o of i)o()};new En.ImageLoader().load(t,i=>{e.loadGeneration===n&&(e.texture.image=i,e.texture.needsUpdate=!0,r())},void 0,()=>{e.loadGeneration===n&&(console.warn(`Failed to load texture: ${t}`),r())})}function D1(e,t){for(let n of[En.SRGBColorSpace,En.NoColorSpace]){let r=Cc.get(cu(e,n));r&&L1(r,t)}}function pl(e,t){let n=Tc.get(e);n&&n!==t&&n.startsWith("blob:")&&URL.revokeObjectURL(n),Tc.set(e,t),D1(e,t)}function du(e){let t=Tc.get(e);t&&(t.startsWith("blob:")&&URL.revokeObjectURL(t),Tc.delete(e),sb.delete(e),D1(e,e))}function cu(e,t){return`${t}|${e}`}function uu(e,t=En.NoColorSpace,n){let r=cu(e,t),i=Cc.get(r);if(i)return n&&!i.loaded&&i.pending.push(n),i.texture;let o=Tc.get(e)??e,a={texture:new En.Texture,refCount:0,loaded:!1,pending:n?[n]:[],loadGeneration:0};return a.texture.flipY=!1,a.texture.colorSpace=t,Cc.set(r,a),L1(a,o),a.texture}function Pc(e,t=En.NoColorSpace,n){let r=uu(e,t,n);return Cc.get(cu(e,t)).refCount+=1,r}function ca(e,t=En.NoColorSpace){let n=Cc.get(cu(e,t));n&&(n.refCount-=1,n.refCount<=0&&(n.loadGeneration+=1,n.pending=[],n.texture.dispose(),Cc.delete(cu(e,t))))}function Dm(e,t,n,r,i,o=1,a=0){let s=e.offsetTextures??(e.offsetTextures={}),l=s[t],d=l;if(!d||d.sourcePath!==r||d.base!==n){l?.texture.dispose();let m=n.clone();m.wrapS=En.RepeatWrapping,m.wrapT=En.RepeatWrapping,m.center.set(.5,.5),m.needsUpdate=!0,d={texture:m,sourcePath:r,base:n},s[t]=d}let u=o>0?o:1;return d.texture.offset.set(i[0],i[1]),d.texture.repeat.set(1/u,1/u),d.texture.rotation=a,d.texture}function Om(e,t){let n=e.offsetTextures,r=n?.[t];r&&(r.texture.dispose(),delete n[t])}function O1(e){let t=e.offsetTextures;if(t){for(let n of Object.values(t))n.texture.dispose();delete e.offsetTextures}}var ob=null;function Nm(){if(ob)return ob;let e=256,t=document.createElement("canvas");t.width=e,t.height=e;let n=t.getContext("2d"),r=n.createRadialGradient(e*.35,e*.35,e*.02,e*.5,e*.5,e*.55);r.addColorStop(0,"#ffffff"),r.addColorStop(.4,"#b5b5b5"),r.addColorStop(1,"#3a3a3a"),n.fillStyle=r,n.fillRect(0,0,e,e);let i=new En.CanvasTexture(t);return i.colorSpace=En.SRGBColorSpace,ob=i,i}var ab=null;function N1(){if(ab)return ab;let e=1024,t=8,n=e/t,r=["#ef4444","#f59e0b","#22c55e","#6366f1"],i=document.createElement("canvas");i.width=e,i.height=e;let o=i.getContext("2d");o.textAlign="center",o.textBaseline="middle";for(let s=0;s<t;s+=1)for(let l=0;l<t;l+=1){let d=l*n,u=s*n,m=(Math.floor(l/2)+Math.floor(s/2))%4;o.fillStyle=r[m],o.fillRect(d,u,n,n),o.strokeStyle="rgba(0, 0, 0, 0.28)",o.lineWidth=2;for(let y=1;y<4;y+=1){let x=y*n/4;o.beginPath(),o.moveTo(d+x,u),o.lineTo(d+x,u+n),o.moveTo(d,u+x),o.lineTo(d+n,u+x),o.stroke()}o.strokeStyle="#09090b",o.lineWidth=7,o.strokeRect(d,u,n,n);let c=d+n*.23,p=u+n*.72,f=d+n*.72,v=u+n*.23;o.lineCap="round",o.lineJoin="round",o.beginPath(),o.moveTo(c,p),o.lineTo(f,v),o.lineTo(f-n*.2,v),o.moveTo(f,v),o.lineTo(f,v+n*.2),o.stroke();let b=s*t+l+1;o.font=`700 ${Math.round(n*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,o.fillStyle="#ffffff",o.strokeStyle="rgba(0, 0, 0, 0.85)",o.lineWidth=6;let g=String(b).padStart(2,"0");o.strokeText(g,d+n/2,u+n*.82),o.fillText(g,d+n/2,u+n*.82)}let a=new En.CanvasTexture(i);return a.colorSpace=En.SRGBColorSpace,a.wrapS=En.RepeatWrapping,a.wrapT=En.RepeatWrapping,a.flipY=!1,a.anisotropy=8,a.needsUpdate=!0,ab=a,a}var ml="riDecal",db="riDecalId";function lb(){return new ai.BufferGeometry().setAttribute("position",new ai.Float32BufferAttribute([],3))}function B1(e){let t=e.image;return t?.width&&t.height?t.width/t.height:1}function cb(e){e.disposed=!0,e.node.remove(e.mesh),e.mesh.geometry.dispose(),e.mesh.material.dispose(),e.imagePath&&ca(e.imagePath,ai.SRGBColorSpace),e.ownTexture?.dispose()}function OE(e,t,n,r){let i=new ai.MeshStandardMaterial({transparent:!0,polygonOffset:!0,polygonOffsetFactor:-4,depthWrite:!1,metalness:0,roughness:.7}),o=Pr(e)&&e.skeleton?e:null,a=o?new ai.SkinnedMesh(lb(),i):new ai.Mesh(lb(),i);if(o){let d=a;d.bind(o.skeleton,o.bindMatrix),d.frustumCulled=!1,d.onBeforeRender=()=>{let u=lu(o);u&&d.bindMatrixInverse.copy(u)}}a.userData[ml]=!0,a.userData[db]=t.id,a.raycast=()=>{},a.castShadow=!1,a.receiveShadow=!0,a.renderOrder=1;let s={node:e,mesh:a,signature:n,disposed:!1},l=d=>{let u=Cm(e,t,d);a.geometry.dispose(),a.geometry=u??lb(),a.visible=u!==null};if(t.image){s.imagePath=t.image;let d=Pc(t.image,ai.SRGBColorSpace,()=>{s.disposed||(l(B1(d)),i.needsUpdate=!0,r())});i.map=d,l(B1(d))}else{let{texture:d,aspect:u}=v1(t);s.ownTexture=d,i.map=d,l(u)}return e.add(a),s}function I1({objectBindings:e,nodeMap:t,invalidate:n}){let r=(0,pu.useRef)(new Map);(0,pu.useEffect)(()=>{let i=r.current,o=new Set;for(let[a,s]of Object.entries(e)){if(!s.decals?.length)continue;let l=t[s.modelObjectId??a];if(ar(l))for(let d of s.decals){if(!d.image&&!d.text)continue;let u=`${a}
|
|
3665
|
+
${d.id}`,m=b1(d),c=i.get(u);c&&(c.node!==l||c.signature!==m)&&(cb(c),c=void 0),c||(c=OE(l,d,m,n),i.set(u,c)),c.mesh.material.opacity=(d.opacity??1)*(s.style?.material?.opacity??1),o.add(u)}}for(let[a,s]of i)o.has(a)||(cb(s),i.delete(a));n()},[e,t,n]),(0,pu.useEffect)(()=>{let i=r.current;return()=>{for(let o of i.values())cb(o);i.clear()}},[])}var Ei=require("react"),no=require("three"),NE=500,BE=10,IE=5;function Bm(e,t,n){let r=(0,Ei.useRef)({resolve:e,onContextMenu:t,anchorOf:n});r.current={resolve:e,onContextMenu:t,anchorOf:n};let i=(0,Ei.useRef)(null),o=(0,Ei.useRef)(!1),a=(0,Ei.useRef)(null),s=(0,Ei.useCallback)(()=>{let m=i.current;m?.timer&&clearTimeout(m.timer),i.current=null,a.current?.(),a.current=null},[]),l=(0,Ei.useCallback)(()=>{let m=i.current;m&&(s(),m.kind==="touch"&&(o.current=!0,setTimeout(()=>o.current=!1,800)),r.current.onContextMenu?.(m.target,m.pointer))},[s]),d=(0,Ei.useCallback)(m=>{let c=m.nativeEvent,p=c.pointerType!=="touch"&&c.button===2,f=c.pointerType==="touch"&&c.button===0;if(!r.current.onContextMenu||!p&&!f)return;let v=r.current.resolve(m.object);if(v===null)return;s();let b={target:v,kind:p?"right":"touch",pointerId:c.pointerId,pointer:Ac(m,r.current.anchorOf?.(m.object)),timer:f?setTimeout(l,NE):null};i.current=b;let g=p?IE:BE,y=S=>Math.hypot(S.clientX-b.pointer.clientX,S.clientY-b.pointer.clientY)>g,x=S=>{S.pointerId===b.pointerId&&y(S)&&s()},M=S=>{S.pointerId===b.pointerId&&(b.kind==="right"&&!y(S)?l():s())},P=S=>{S.pointerId!==b.pointerId&&s()};window.addEventListener("pointermove",x),window.addEventListener("pointerup",M),window.addEventListener("pointercancel",s),window.addEventListener("pointerdown",P),a.current=()=>{window.removeEventListener("pointermove",x),window.removeEventListener("pointerup",M),window.removeEventListener("pointercancel",s),window.removeEventListener("pointerdown",P)}},[s,l]);(0,Ei.useEffect)(()=>s,[s]);let u=(0,Ei.useCallback)(()=>o.current?(o.current=!1,!0):!1,[]);return{onPointerDown:d,consumeClick:u}}function zE(e,t){let n=e.face,r=t.geometry.getAttribute("position");if(!n||!r)return null;let i=e.barycoord??null;if(!i){let[m,c,p]=[n.a,n.b,n.c].map(f=>t.getVertexPosition(f,new no.Vector3));if(i=no.Triangle.getBarycoord(t.worldToLocal(e.point.clone()),m,c,p,new no.Vector3),!i)return null}let[o,a,s]=[n.a,n.b,n.c].map(m=>new no.Vector3().fromBufferAttribute(r,m)),l=new no.Vector3().addScaledVector(o,i.x).addScaledVector(a,i.y).addScaledVector(s,i.z),d=new no.Triangle(o,a,s).getNormal(new no.Vector3);return n.normal.clone().transformDirection(t.matrixWorld).dot(e.ray.direction)>0&&d.negate(),{position:[l.x,l.y,l.z],normal:[d.x,d.y,d.z]}}function hl(e,t){if(t.updateWorldMatrix(!0,!1),e.object===t&&t.isSkinnedMesh===!0){let i=zE(e,t);if(i)return i}let n=t.worldToLocal(e.point.clone()),r=e.face?e.face.normal.clone().transformDirection(e.object.matrixWorld):e.ray.direction.clone().negate();return r.dot(e.ray.direction)>0&&r.negate(),r.transformDirection(new no.Matrix4().copy(t.matrixWorld).invert()),{position:[n.x,n.y,n.z],normal:[r.x,r.y,r.z]}}function Ac(e,t){let n=e.nativeEvent;return{clientX:n.clientX,clientY:n.clientY,pointerType:"pointerType"in n?n.pointerType:"mouse",...t?{surface:hl(e,t)}:{}}}var Im=require("three");function z1(e,t){let n=[];if(Pr(e)){let r=e;r.computeBoundingSphere(),r.computeBoundingBox(),Im.SkinnedMesh.prototype.raycast.call(r,t,n)}else Im.Mesh.prototype.raycast.call(e,t,n);return n.sort((r,i)=>r.distance-i.distance)[0]}function U1({target:e,nodes:t,controls:n}){let{camera:r,gl:i,invalidate:o}=(0,V1.useThree)(),a=(0,zm.useRef)(e);return a.current=e,(0,zm.useEffect)(()=>{let s=i.domElement,l=new ro.Raycaster,d=new ro.Vector2,u=s.style.cursor,m=s.style.touchAction;s.style.cursor="grab",s.style.touchAction="none";let c=0,p=null,f=null,v=(T,h=new ro.Vector2)=>{let w=s.getBoundingClientRect();d.set((T.clientX-w.left-h.x)/w.width*2-1,-((T.clientY-w.top-h.y)/w.height)*2+1),l.setFromCamera(d,r)},b=T=>{if(!f)return;v(T,f.offset),f.node.updateWorldMatrix(!0,!1);let h=l.intersectObject(f.node,!1)[0];if(!h)return;let w=hl({...h,ray:l.ray},f.node),C=Cm(f.node,{...f.decal,...w},f.aspect);C&&(f.mesh.geometry!==f.geometry&&f.mesh.geometry.dispose(),f.mesh.geometry=C,f.surface=w,o())},g=T=>{if(!f)return;cancelAnimationFrame(c),c=0,p=null;let h=f;f=null,h.mesh.geometry!==h.geometry&&(T&&h.surface?h.geometry.dispose():(h.mesh.geometry.dispose(),h.mesh.geometry=h.geometry)),h.controller&&(h.controller.enabled=h.controlsEnabled),s.hasPointerCapture(h.pointerId)&&s.releasePointerCapture(h.pointerId),s.style.cursor="grab",o();let w=()=>{window.removeEventListener("click",C,!0),window.removeEventListener("pointerdown",w,!0),clearTimeout(_)},C=k=>{k.target===s&&(k.preventDefault(),k.stopImmediatePropagation()),w()},_=setTimeout(w,300);window.addEventListener("click",C,!0),window.addEventListener("pointerdown",w,!0),T&&h.surface&&a.current.onCommit(h.surface)},y=T=>{if(T.button!==0||f)return;let h=a.current,w=t.current[h.objectId];if(!(w instanceof ro.Mesh)||!w.visible)return;let C=w.children.find(D=>D.userData[ml]&&D.userData[db]===h.decal.id);if(!C?.visible)return;w.updateWorldMatrix(!0,!0),v(T);let _=z1(C,l),k=l.intersectObject(w,!1)[0];if(!_||!k||_.distance>k.distance+1e-4)return;let R=new ro.Vector3;if(Pr(C)){let D=new ro.Vector3,L=C.geometry.getAttribute("position").count;if(!L)return;for(let re=0;re<L;re++)R.add(C.getVertexPosition(re,D));R.divideScalar(L).applyMatrix4(C.matrixWorld)}else R.fromArray(h.decal.position).applyMatrix4(w.matrixWorld);R.project(r);let U=s.getBoundingClientRect(),H=new ro.Vector2(T.clientX-(U.left+(R.x+1)/2*U.width),T.clientY-(U.top+(1-R.y)/2*U.height)),B=C.material.map?.image,X=n.current;f={pointerId:T.pointerId,node:w,mesh:C,geometry:C.geometry,decal:h.decal,surface:null,offset:H,aspect:B?.width&&B.height?B.width/B.height:1,controller:X,controlsEnabled:X?.enabled??!1},X&&(X.enabled=!1),T.preventDefault(),T.stopImmediatePropagation(),s.setPointerCapture(T.pointerId),s.style.cursor="grabbing"},x=T=>{!f||T.pointerId!==f.pointerId||(T.preventDefault(),T.stopImmediatePropagation(),p=T,c||(c=requestAnimationFrame(()=>{c=0,p&&b(p)})))},M=T=>{!f||T.pointerId!==f.pointerId||(T.preventDefault(),T.stopImmediatePropagation(),p&&b(p),g(!0))},P=()=>g(!1),S=T=>{T.key==="Escape"&&(g(!1),a.current.onCancel())};return s.addEventListener("pointerdown",y,!0),window.addEventListener("pointermove",x,{capture:!0,passive:!1}),window.addEventListener("pointerup",M,!0),window.addEventListener("pointercancel",P),window.addEventListener("blur",P),window.addEventListener("keydown",S),s.addEventListener("lostpointercapture",P),()=>{g(!1),s.style.cursor=u,s.style.touchAction=m,s.removeEventListener("pointerdown",y,!0),window.removeEventListener("pointermove",x,!0),window.removeEventListener("pointerup",M,!0),window.removeEventListener("pointercancel",P),window.removeEventListener("blur",P),window.removeEventListener("keydown",S),s.removeEventListener("lostpointercapture",P)}},[r,i,o,t,n,e.objectId,e.decal]),null}var Fr=require("react");var F1=require("three-stdlib");function da(e,t){let n=URL.createObjectURL(e),r=document.createElement("a");r.href=n,r.download=t,r.style.display="none";try{document.body.appendChild(r),r.click()}finally{r.remove(),window.setTimeout(()=>{URL.revokeObjectURL(n)},1e3)}}function ub({sources:e,downloadFilename:t,onComplete:n}){import("three").then(({Group:r,Mesh:i})=>{let o=new r;for(let{scene:s,objectBindings:l,matRefs:d}of e){s.updateMatrixWorld(!0);let u=new Map;for(let[c,p]of Object.entries(l))u.set(p.modelObjectId??c,c);let m=c=>{let p=c;for(;p;){let f=p.name||p.uuid,v=u.get(f)??f,b=l[v];if(b?b.visible===!1:p.visible===!1)return!1;p=p.parent}return!0};s.traverse(c=>{let p=c;if(!p.isMesh||!p.geometry)return;let f=p.name||p.uuid,v=u.get(f)??f,b=d[v]??p.material;if(!b)return;let g=Pr(p),y=g?A1(p):p.geometry,x=g?E1(p):p.matrixWorld,M=new i(y,b);M.name=f,M.matrix.copy(x),M.matrixAutoUpdate=!1,M.visible=m(p),o.add(M)})}new F1.GLTFExporter().parse(o,s=>{let l=s instanceof ArrayBuffer?new Blob([s],{type:"model/gltf-binary"}):new Blob([JSON.stringify(s)],{type:"model/gltf+json"}),d=s instanceof ArrayBuffer?".glb":".gltf";da(l,`${t}${d}`),n()},s=>{console.error("GLTFExporter error:",s),n()},{binary:!0,onlyVisible:!0})})}var X1=require("fflate");var j1=require("fflate");function Vm(e,t=6){return new Promise((n,r)=>{(0,j1.zip)(e,{level:t},(i,o)=>{i?r(i):n(o)})})}var mu=2048,H1=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function G1(e){return e.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}function hb(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function $1(e){return hb(e,"model")}function pb(e,t){return e.index?Math.round(e.index.getX(t)):t}function VE(e,t,n){let r=pb(e,n),i=pb(e,n+1),o=pb(e,n+2);if(r>=t.count||i>=t.count||o>=t.count)return null;let a=[{index:r,u:t.getX(r),v:t.getY(r)},{index:i,u:t.getX(i),v:t.getY(i)},{index:o,u:t.getX(o),v:t.getY(o)}];return a.every(s=>Number.isFinite(s.u)&&Number.isFinite(s.v))?a:null}function W1(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function mb(e,t,n,r){let i,o;r?(i=t.index,o=n.index):(i=W1(t),o=W1(n));let a=i<o?`${i}|${o}`:`${o}|${i}`,s=e.get(a);s?s.count+=1:e.set(a,{count:1,start:t,end:n})}function UE(e,t,n){mb(e,t[0],t[1],n),mb(e,t[1],t[2],n),mb(e,t[2],t[0],n)}function FE(e,t){return Array.isArray(e)?e[t]??null:e}function jE(e){let t=new Map,n=0,r=0,i=0;return e.traverse(o=>{let a=o;if(!a.isMesh||!a.geometry||!a.material)return;let s=a.geometry,l=s.getAttribute("uv");if(!l||l.itemSize<2||l.count<3)return;n+=1;let d=a.name||`Mesh ${n}`,u=s.index?.count??l.count,m=s.groups.length>0?s.groups:[{start:0,count:u,materialIndex:0}];for(let c of m){let p=c.materialIndex??0,f=FE(a.material,p);if(!f)continue;let v=t.get(f.uuid);v||(r+=1,v={name:f.name||`Material ${r}`,layers:new Map},t.set(f.uuid,v));let b=v.layers.get(a.uuid);b||(b={name:d,color:H1[i%H1.length],edges:new Map},i+=1,v.layers.set(a.uuid,b));let g=Math.max(0,c.start),y=Math.min(u,g+c.count);for(let x=g;x+2<y;x+=3){let M=VE(s,l,x);M&&UE(b.edges,M,!!s.index)}}}),[...t.values()].filter(o=>[...o.layers.values()].some(a=>a.edges.size>0))}function Um(e){return(e*mu).toFixed(2)}function HE(e){return`M${Um(e.start.u)} ${Um(1-e.start.v)}L${Um(e.end.u)} ${Um(1-e.end.v)}`}function GE(e){let t=G1(e.name),n=[...e.layers.values()].filter(r=>r.edges.size>0).map((r,i)=>{let o=G1(r.name),a=`${hb(r.name,"mesh")}-${i+1}`,s=[...r.edges.values()],l=s.filter(m=>m.count===1),u=(l.length>0?l:s).map(HE).join("");return[` <g id="${a}" data-mesh="${o}" fill="none" stroke="${r.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${o}</title>`,` <path d="${u}"/>`," </g>"].join(`
|
|
3666
3666
|
`)}).join(`
|
|
3667
|
-
`);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${
|
|
3668
|
-
`)}function hM(e,t="model"){let n=dM(e),r=Tv(t);return n.map((i,o)=>{let a=Ah(i.name,`material-${o+1}`);return{filename:n.length===1?`${r}-uv-layout.svg`:`${r}-uv-${a}-${o+1}.svg`,materialName:i.name,meshCount:[...i.layers.values()].filter(l=>l.edges.size>0).length,svg:pM(i)}})}async function Pv(e,t="model"){let n=hM(e,t);if(n.length===0)return n;if(n.length===1)return ho(new Blob([n[0].svg],{type:"image/svg+xml;charset=utf-8"}),n[0].filename),n;let r=Object.fromEntries(n.map(o=>[o.filename,(0,Cv.strToU8)(o.svg)])),i=await Ud(r);return ho(new Blob([i],{type:"application/zip"}),`${Tv(t)}-uv-layouts.zip`),n}function Av({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:r,downloadFilename:i,captureVideo:o}){let[a,s]=(0,br.useState)(!1),[l,c]=(0,br.useState)(!1),[p,u]=(0,br.useState)(null),[d,m]=(0,br.useState)(null),[g,v]=(0,br.useState)("auto");(0,br.useEffect)(()=>{if(!l)return;let b=()=>c(!1);return window.addEventListener("pointerdown",b),()=>window.removeEventListener("pointerdown",b)},[l]);let M=(0,br.useCallback)(()=>{u(null),m(null),c(b=>!b)},[]),w=(0,br.useCallback)(()=>{let b=e.current;b&&(c(!1),s(!0),yv({scene:b,objectBindings:r,matRefs:t.current,downloadFilename:i,onComplete:()=>s(!1)}))},[i,t,r,e]),x=(0,br.useCallback)(()=>{c(!1),yd(n.current).then(b=>{let _=document.createElement("a");_.href=b,_.download=`${i}.png`,document.body.appendChild(_),_.click(),document.body.removeChild(_)}).catch(b=>{console.error("Screenshot failed:",b)})},[i,n]),S=(0,br.useCallback)(async()=>{let b=e.current;if(b)try{if((await Pv(b,i)).length===0){u("This model does not contain UV coordinates.");return}u(null),c(!1)}catch(_){console.error("UV layout export failed:",_),u("Could not create the UV layout archive.")}},[i,e]),k=(0,br.useCallback)(async b=>{c(!1),m(null);try{let _=await o({mode:b,format:g}),y=_.type.startsWith("video/mp4")?"mp4":"webm",h=URL.createObjectURL(_),P=document.createElement("a");P.href=h,P.download=`${i}-${b}.${y}`,document.body.appendChild(P);try{P.click()}finally{P.remove(),setTimeout(()=>URL.revokeObjectURL(h),1e3)}}catch(_){if(_ instanceof DOMException&&_.name==="AbortError")return;m(_ instanceof Error?_.message:"Could not export the video."),c(!0)}},[o,i,g]);return{isDownloading:a,downloadMenuOpen:l,uvExportError:p,toggleDownloadMenu:M,handleDownloadMesh:w,handleDownloadScreenshot:x,handleDownloadUvLayout:S,handleDownloadVideo:k,videoFormat:g,setVideoFormat:v,videoExportError:d}}var _t=require("react"),ni=require("three");var an=require("three");function Vd(e){if(e.length!==3)return null;let t=new an.Vector3(...e[0]).sub(new an.Vector3(...e[1])),n=new an.Vector3(...e[2]).sub(new an.Vector3(...e[1]));return t.lengthSq()===0||n.lengthSq()===0?null:Math.acos(Math.max(-1,Math.min(1,t.normalize().dot(n.normalize()))))*180/Math.PI}function Ev(e,t){if(!e.normal)return null;let n=new an.Vector3(...e.normal);if(n.lengthSq()===0)return null;n.normalize();let r=new an.Vector3(...t),i=r.clone().sub(new an.Vector3(...e.position)).dot(n);return{distance:Math.abs(i),projection:r.addScaledVector(n,-i).toArray()}}function jd(e){if(e.length<3)return{error:"Pick at least three points to finish the area."};let t=new an.Vector3(...e[0]),n=e.map(M=>new an.Vector3(...M).sub(t)),r=Math.max(...n.map(M=>M.length()));if(r===0)return{error:"Area points must be distinct."};let i=new an.Vector3;for(let M=1;M<n.length-1;M+=1){let w=n[M].clone().cross(n[M+1]);w.lengthSq()>i.lengthSq()&&i.copy(w)}if(i.length()<=r*r*1e-10)return{error:"Area points must not lie on one straight line."};i.normalize();let o=Math.max(r*1e-5,Number.EPSILON*Math.max(...e.flat().map(Math.abs))*32);if(n.some(M=>Math.abs(M.dot(i))>o))return{error:"Area points must lie on one plane."};let a=n.find(M=>M.length()>r*1e-10).clone().normalize(),s=i.clone().cross(a).normalize(),l=n.map(M=>new an.Vector2(M.dot(a),M.dot(s))),c=(M,w,x)=>(w.x-M.x)*(x.y-M.y)-(w.y-M.y)*(x.x-M.x),p=r*r*1e-10,u=(M,w,x)=>Math.abs(c(M,w,x))<=p&&x.x>=Math.min(M.x,w.x)-r*1e-10&&x.x<=Math.max(M.x,w.x)+r*1e-10&&x.y>=Math.min(M.y,w.y)-r*1e-10&&x.y<=Math.max(M.y,w.y)+r*1e-10;for(let M=0;M<l.length;M+=1){let w=l[M],x=l[(M+1)%l.length];if(w.distanceTo(x)<=r*1e-10)return{error:"Area points must be distinct."};for(let S=M+1;S<l.length;S+=1){if(S===M+1||M===0&&S===l.length-1)continue;let k=l[S],b=l[(S+1)%l.length],_=c(w,x,k),y=c(w,x,b),h=c(k,b,w),P=c(k,b,x);if(_*y<0&&h*P<0||u(w,x,k)||u(w,x,b)||u(k,b,w)||u(k,b,x))return{error:"Area edges must not cross or touch each other."}}}let d=0,m=0,g=0;for(let M=0;M<l.length;M+=1){let w=l[M],x=l[(M+1)%l.length],S=w.x*x.y-x.x*w.y;d+=S,m+=(w.x+x.x)*S,g+=(w.y+x.y)*S}if(Math.abs(d)<=p)return{error:"The polygon has no measurable area."};let v=t.clone().addScaledVector(a,m/(3*d)).addScaledVector(s,g/(3*d));return{area:Math.abs(d)/2,center:v.toArray(),triangles:an.ShapeUtils.triangulateShape(l,[])}}function mM(e){if(!(e.object instanceof an.Mesh)||!e.face)return null;let t=e.object,n=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let r=new an.Matrix4;t.getMatrixAt(e.instanceId,r),n.multiply(r)}return[e.face.a,e.face.b,e.face.c].map(r=>t.getVertexPosition(r,new an.Vector3).applyMatrix4(n))}function Rv(e){if(!(e.object instanceof an.Mesh))return!1;for(let n=e.object;n;n=n.parent)if(!n.visible||n.userData.riEditorGizmo||n.userData.riDecal)return!1;return(Array.isArray(e.object.material)?e.object.material:[e.object.material])[e.face?.materialIndex??0]?.visible!==!1}function kv(e,t,n,r,i,o=12){let a=mM(e),s=a?a[1].clone().sub(a[0]).cross(a[2].clone().sub(a[0])).normalize():null,l={position:e.point.toArray(),...s&&s.lengthSq()>0?{normal:s.toArray()}:{},...a?{faceVertices:a.map(d=>d.toArray())}:{}};if(!a||i==="none")return l;let c=d=>{let m=new an.Vector4(d.x,d.y,d.z,1).applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix);return m.w<=0||m.z/m.w<-1||m.z/m.w>1?null:{screen:new an.Vector2((m.x/m.w+1)*r.width/2,(1-m.y/m.w)*r.height/2),w:m.w}},p=a.map(c),u=o;if((i==="vertex"||i==="auto")&&(p.forEach((d,m)=>{let g=d?.screen.distanceTo(n)??1/0;g<=u&&(u=g,l.position=a[m].toArray(),l.snapped="vertex")}),l.snapped))return l;if(i==="edge"||i==="auto")for(let d=0;d<3;d+=1){let m=(d+1)%3,g=p[d],v=p[m];if(!g||!v)continue;let M=v.screen.clone().sub(g.screen);if(M.lengthSq()===0)continue;let w=Math.max(0,Math.min(1,n.clone().sub(g.screen).dot(M)/M.lengthSq())),x=g.screen.clone().addScaledVector(M,w).distanceTo(n);if(x<=u){u=x;let S=w*g.w/((1-w)*v.w+w*g.w);l.position=a[d].clone().lerp(a[m],S).toArray(),l.snapped="edge"}}return l}var Hd={tool:"distance",points:[],areaClosed:!1,error:null};function Lv(e,t){if(t.type==="tool")return{...Hd,tool:t.tool};if(t.type==="clear")return{...Hd,tool:e.tool};if(t.type==="undo")return{...e,points:e.points.slice(0,-1),areaClosed:!1,error:null};if(t.type==="finishArea"){if(e.tool!=="area")return e;let o=jd(e.points.map(a=>a.position));return"error"in o?{...e,error:o.error}:{...e,areaClosed:!0,error:null}}if(t.type!=="place")return e;let r=e.areaClosed||e.tool==="angle"&&e.points.length===3||e.tool==="pointToPlane"&&e.points.length===2?[]:e.points;if(e.tool==="pointToPlane"&&r.length===0&&!t.point.normal)return{...e,error:"Pick a triangle face to define the reference plane."};if(r.length>=256)return{...e,error:"Finish or clear this measurement before adding more points."};let i=[...r,t.point];return e.tool==="angle"&&i.length===3&&Vd(i.map(o=>o.position))===null?{...e,error:"Pick a point away from the angle's vertex."}:{...e,points:i,areaClosed:!1,error:null}}function fM(e){let t=new ni.Box3().setFromObject(e),n=new ni.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 gM(e){let t=new ni.Box3().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new ni.Vector3),r=t.getSize(new ni.Vector3).length()/2;return!Number.isFinite(r)||r<=0?null:{center:[n.x,n.y,n.z],radius:r}}function Dv({canvasAreaRef:e,controlsRef:t,sceneRef:n,modelUrl:r,modelRotation:i,bindingTransformSignature:o,modelLoaded:a,enabled:s}){let[l,c]=(0,_t.useState)(!1),[p,u]=(0,_t.useReducer)(Lv,Hd),[d,m]=(0,_t.useState)("none"),[g,v]=(0,_t.useState)(null),[M,w]=(0,_t.useState)(!1),[x,S]=(0,_t.useState)(null),[k,b]=(0,_t.useState)(null),_=(0,_t.useRef)(!1),y=(0,_t.useRef)(0),h=(0,_t.useRef)(null),P=(0,_t.useRef)(null);_.current=l&&s;let A=(0,_t.useCallback)(xe=>{xe.updateMatrixWorld(!0),S(fM(xe)),b(gM(xe))},[]),C=(0,_t.useCallback)(()=>{u({type:"clear"}),v(null)},[]),D=(0,_t.useCallback)(xe=>{u({type:"tool",tool:xe}),v(null)},[]),B=(0,_t.useCallback)(()=>u({type:"undo"}),[]),j=(0,_t.useCallback)(()=>u({type:"finishArea"}),[]),W=(0,_t.useCallback)(()=>c(xe=>!xe),[]),U=(0,_t.useCallback)(()=>w(xe=>!xe),[]),te=(0,_t.useCallback)(xe=>{!_.current||xe.button!==0||(h.current={x:xe.clientX,y:xe.clientY})},[]),O=(0,_t.useCallback)((xe,nt)=>{let ce=e.current,Le=t.current?.camera,he=n.current;if(!ce||!Le||!he)return null;let pt=ce.getBoundingClientRect();if(!pt.width||!pt.height)return null;he.updateMatrixWorld(!0),Le.updateMatrixWorld(!0);let Bt=new ni.Vector2(xe-pt.left,nt-pt.top),un=new ni.Raycaster;un.setFromCamera(new ni.Vector2(Bt.x/pt.width*2-1,1-Bt.y/pt.height*2),Le);let Ie=un.intersectObject(he,!0).find(Rv);return Ie?kv(Ie,Le,Bt,pt,d):null},[e,t,n,d]),$=(0,_t.useCallback)(()=>{P.current!==null&&cancelAnimationFrame(P.current),P.current=null,v(null)},[]),le=(0,_t.useCallback)(xe=>{if(!_.current||d==="none"||xe.buttons!==0||xe.target.closest("button, input, select, label, textarea, .ri-measureTools")){$();return}P.current!==null&&cancelAnimationFrame(P.current);let{clientX:nt,clientY:ce}=xe;P.current=requestAnimationFrame(()=>{P.current=null;let Le=O(nt,ce);v(Le?.snapped?Le:null)})},[$,O,d]),tt=(0,_t.useCallback)(xe=>{if(!_.current)return;let nt=h.current;if(h.current=null,nt&&Math.hypot(xe.clientX-nt.x,xe.clientY-nt.y)>6||xe.target.closest("button, input, select, label, textarea, .ri-measureTools"))return;let Le=O(xe.clientX,xe.clientY);Le&&(y.current+=1,u({type:"place",point:{...Le,id:y.current}}))},[O]);return(0,_t.useEffect)(()=>{C(),S(null),b(null)},[r,C]),(0,_t.useEffect)(()=>{C()},[i,o,C]),(0,_t.useEffect)(()=>($(),$),[$,l,d]),(0,_t.useEffect)(()=>{s||(c(!1),$())},[s,$]),(0,_t.useEffect)(()=>{let xe=n.current;!a||!xe||A(xe)},[o,a,A,n]),{measureMode:l,measureModeRef:_,measurePoints:p.points,measurementTool:p.tool,areaClosed:p.areaClosed,measurementError:p.error,selectMeasurementTool:D,undoMeasurementPoint:B,finishMeasureArea:j,snapMode:d,setSnapMode:m,snapPreview:g,handleMeasurePointerMove:le,clearSnapPreview:$,showDimensions:M,measureBox:x,modelBounds:k,refreshBounds:A,clearMeasurements:C,toggleMeasureMode:W,toggleDimensions:U,handleMeasurePointerDown:te,handleMeasureClick:tt}}var zv=require("react-dom"),Uv=require("@react-three/xr"),Fv=require("lucide-react"),Dt=require("react");function Nv(e,t){let n=null,r=o=>{let a=o.mode==="immersive-ar"?o.session??null:null;a!==n&&(n&&t.endAR(),n=a,n&&t.startAR())},i=e.subscribe(r);return r(e.getState()),()=>{i(),n&&t.endAR("interrupted"),n=null}}function Eh(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function Rh(){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 Bv(){return Eh()||Rh()}function bM(){if(typeof window>"u"||typeof navigator>"u")return!1;let e=a=>typeof window.matchMedia=="function"&&window.matchMedia(a).matches,t=e("(pointer: coarse)")||e("(any-pointer: coarse)"),n=e("(hover: none)")||e("(any-hover: none)"),r=navigator.maxTouchPoints>0,i=typeof window.screen<"u"&&Math.min(window.screen.width,window.screen.height)<=1024,o=Eh();return t||o||r&&n||r&&i}function kh(){if(!bM())return!1;if(Eh())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function Ov(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return kh()}}var Fr=require("react/jsx-runtime"),Iv={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function Vv({enableXR:e,usdzUrl:t,mobileHandoffUrl:n,engagement:r}){let i=(0,Dt.useRef)(null),o=(0,Dt.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let O=navigator.xr;if(!O||typeof O.isSessionSupported!="function"||typeof O.addEventListener!="function")return null;try{return(0,Uv.createXRStore)({emulate:!1})}catch{return null}},[e]),[a,s]=(0,Dt.useState)(!1),[l,c]=(0,Dt.useState)(!1),[p,u]=(0,Dt.useState)(!0),[d,m]=(0,Dt.useState)(null),[g,v]=(0,Dt.useState)(!1),[M,w]=(0,Dt.useState)(!1),[x,S]=(0,Dt.useState)(Iv),[k,b]=(0,Dt.useState)(!1),_=(0,Dt.useMemo)(()=>e&&!!t?.trim()&&Rh(),[e,t]);(0,Dt.useEffect)(()=>{u(Bv())},[]);let y=(0,Dt.useCallback)(()=>{if(typeof window>"u")return null;try{let O=new URL(n?.trim()||window.location.href,window.location.href);return O.protocol==="http:"||O.protocol==="https:"?O.toString():null}catch{return null}},[n]);(0,Dt.useEffect)(()=>{if(!e||p){m(null),v(!1);return}m(y())},[e,p,y]),(0,Dt.useEffect)(()=>{if(o)return o.subscribe(O=>w(O.session!=null&&O.mode==="immersive-ar"))},[o]),(0,Dt.useEffect)(()=>{if(o)return Nv(o,r)},[o,r]),(0,Dt.useEffect)(()=>{b(!1),S(Iv)},[M]),(0,Dt.useEffect)(()=>{if(!e||typeof navigator>"u")return;let O=navigator.xr;if(!O?.isSessionSupported)return;let $=!1;return O.isSessionSupported("immersive-ar").then(le=>!$&&s(le)).catch(()=>{}),O.isSessionSupported("immersive-vr").then(le=>!$&&c(le)).catch(()=>{}),()=>{$=!0}},[e]);let h=(0,Dt.useCallback)(()=>{let O=y();O&&(r.requestARLaunch("mobile-handoff"),m(O),v(!0))},[y,r]),P=(0,Dt.useCallback)(()=>v(!1),[]),A=(0,Dt.useCallback)(()=>{let O=t?.trim();if(!O)return;r.requestARLaunch("quick-look");let $=document.createElement("a");$.setAttribute("rel","ar"),$.href=O,$.style.display="none";let le=document.createElement("img");le.alt="",le.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",$.appendChild(le),document.body.appendChild($),$.click(),$.remove()},[t,r]),C=(0,Dt.useCallback)(O=>{S(O),O.isPlacementMode||b(!1)},[]),D=(0,Dt.useCallback)(O=>{b(!1),O?i.current?.finishPlacementMode():i.current?.cancelPlacementMode()},[]),B=(0,Dt.useCallback)(O=>{O.preventDefault(),b(!0),i.current?.startPlacementMode()},[]);(0,Dt.useEffect)(()=>{if(!k)return;let O=()=>D(!0),$=()=>D(!1);return window.addEventListener("pointerup",O),window.addEventListener("pointercancel",$),()=>{window.removeEventListener("pointerup",O),window.removeEventListener("pointercancel",$)}},[D,k]);let j=x.isModelPlaced?x.isPlacementMode?x.canPlace?"Release to place":"Move your device over a flat surface":null:x.canPlace?null:"Move your device over a flat surface",W=x.isModelPlaced&&!x.isPlacementMode?"Pinch to resize \xB7 Twist to rotate":null,U=o?.getState().domOverlayRoot??null,te=M&&U?(0,zv.createPortal)((0,Fr.jsxs)(Fr.Fragment,{children:[W&&(0,Fr.jsx)("div",{className:"ri-arHintOverlay",children:(0,Fr.jsx)("div",{className:"ri-arHint",children:W})}),(0,Fr.jsx)("div",{className:"ri-arOverlay",children:(0,Fr.jsxs)("div",{className:"ri-arControls",children:[j&&(0,Fr.jsx)("div",{className:"ri-arStatus",children:j}),x.isModelPlaced&&(0,Fr.jsxs)("button",{type:"button",className:`ri-arActionButton ${k?"ri-arActionButton--active":""}`,onPointerDown:O=>B(O.nativeEvent),"aria-pressed":k,children:[(0,Fr.jsx)(Fv.MapPin,{size:14}),"Relocate"]}),!x.isModelPlaced&&x.canPlace&&(0,Fr.jsx)("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>i.current?.placeCurrent(),children:"Tap to place"})]})})]}),U):null;return{xrStore:o,presenterRef:i,arSupported:a,vrSupported:l,quickLookSupported:_,resolvedMobileHandoffUrl:d,isMobileHandoffOpen:g,arOverlay:te,openMobileHandoff:h,closeMobileHandoff:P,openQuickLook:A,handleARStateChange:C}}var Kd=require("@react-three/fiber"),Zd=require("@react-three/drei"),ux=require("@react-three/xr"),px=require("three"),Ei=require("react");function Gd(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var jv=["none","directional","point","spot","hemisphere"],Hv=["pbr","matcap","uv-checker"],Gv=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];var Wv=["sporadic","constantMild","constantWild"],Xv=["linear","radial","mirroredLinear"],ql=["verySmall","small","medium","large","veryLarge","huge"],Wd=["x","y","z"],Pa={enabled:!1,axis:"y",position:.5,flip:!1},vM={clips:[],autoplayClip:null},xM={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}},Aa={model:{rotation:[0,0,0],showAdvancedRotation:!1,renderer:"pbr",shading:"lit",autoRotate:!1,autoRotateSpeed:1,materialVariant:null},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:xM,animations:vM,annotations:[]};var ri=require("@react-three/fiber"),Lh=require("@react-three/xr"),Xd=require("three"),Vr=require("react");function qv({renderMode:e,suspended:t=!1}){let{scene:n}=(0,ri.useThree)(),r=(0,ri.useThree)(s=>s.setFrameloop),i=(0,Lh.useXR)(s=>s.session!=null),o=(0,Lh.useXR)(s=>s.mode==="immersive-ar"),a=(0,Vr.useRef)(void 0);return(0,Vr.useEffect)(()=>{r(t?"never":i?"always":e)},[i,e,t,r]),(0,Vr.useEffect)(()=>{o?(a.current=n.background,n.background=null):a.current!==void 0&&(n.background=a.current,a.current=void 0)},[o,n]),(0,ri.useFrame)(()=>{o&&n.background!==null&&(n.background=null)}),null}function $v({onPresentingChange:e}){let t=(0,ri.useThree)(i=>i.gl),n=(0,Vr.useRef)(null);(0,Vr.useEffect)(()=>{let i=t.xr;if(!i)return;let o=l=>{l?(n.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):n.current!==null&&(t.shadowMap.enabled=n.current,n.current=null),e(l)},a=()=>o(!0),s=()=>o(!1);return i.addEventListener("sessionstart",a),i.addEventListener("sessionend",s),o(i.isPresenting),()=>{i.removeEventListener("sessionstart",a),i.removeEventListener("sessionend",s)}},[t,e]);let r=(0,Vr.useRef)(0);return(0,ri.useFrame)(()=>{if(!t.xr.isPresenting)return;let i=performance.now();if(i-r.current<1e3)return;r.current=i;let o=t.xr}),null}function Yv({active:e}){let t=(0,ri.useThree)(n=>n.invalidate);return(0,Vr.useEffect)(()=>{e&&t()},[e,t]),(0,ri.useFrame)(()=>{e&&t()}),null}function Kv({color:e}){let{scene:t}=(0,ri.useThree)();return(0,Vr.useEffect)(()=>{let n=t.background;return t.background=e?new Xd.Color(e):null,()=>{t.background=n}},[t,e]),null}function Zv({rotation:e}){let{scene:t}=(0,ri.useThree)();return(0,Vr.useLayoutEffect)(()=>{let n=e*Math.PI/180;t.environmentRotation.set(0,n,0),t.backgroundRotation.set(0,n,0)}),null}function Jv({cameraConfig:e}){let{camera:t}=(0,ri.useThree)();return(0,Vr.useEffect)(()=>{if(!(t instanceof Xd.PerspectiveCamera))return;let n=e?.fov;typeof n=="number"&&t.fov!==n&&(t.fov=n,t.updateProjectionMatrix())},[t,e]),null}var $l=require("@react-three/fiber"),Ue=require("@react-three/postprocessing"),zo=require("postprocessing"),Ai=require("three"),Ln=require("react");var Os=require("react"),qd=require("postprocessing"),Qv=require("three"),tx=require("react/jsx-runtime"),yM=`
|
|
3667
|
+
`);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${mu}" height="${mu}" viewBox="0 0 ${mu} ${mu}">`,` <title>${t} UV layout</title>`," <desc>UV0 island-outline template exported by React Immersive. The SVG canvas maps to the complete 0\u20131 texture area.</desc>",' <rect width="2048" height="2048" fill="none" stroke="#94a3b8" stroke-width="2"/>',n,"</svg>"].join(`
|
|
3668
|
+
`)}function WE(e){let t=[],n=new Set;return e.forEach((r,i)=>{let o=jE(r.scene);if(o.length===0)return;let a=$1(r.label||`model-${i+1}`);o.forEach((s,l)=>{let d=hb(s.name,`material-${l+1}`),u=o.length===1?`${a}-uv-layout.svg`:`${a}-uv-${d}-${l+1}.svg`;if(n.has(u)){let m=u.replace(/\.svg$/,""),c=2;for(;n.has(`${m}-${c}.svg`);)c+=1;u=`${m}-${c}.svg`}n.add(u),t.push({filename:u,materialName:s.name,meshCount:[...s.layers.values()].filter(m=>m.edges.size>0).length,svg:GE(s)})})}),t}async function fb(e,t="model"){let n=WE(e);if(n.length===0)return n;if(n.length===1)return da(new Blob([n[0].svg],{type:"image/svg+xml;charset=utf-8"}),n[0].filename),n;let r=Object.fromEntries(n.map(o=>[o.filename,(0,X1.strToU8)(o.svg)])),i=await Vm(r);return da(new Blob([i],{type:"application/zip"}),`${$1(t)}-uv-layouts.zip`),n}async function q1(e,t="model"){return fb([{scene:e,label:t}],t)}function Y1({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:r,downloadFilename:i,getAllLoadedModels:o,getAllLoadedModelUvSources:a,captureVideo:s}){let[l,d]=(0,Fr.useState)(!1),[u,m]=(0,Fr.useState)(!1),[c,p]=(0,Fr.useState)(null),[f,v]=(0,Fr.useState)(null),[b,g]=(0,Fr.useState)("auto");(0,Fr.useEffect)(()=>{if(!u)return;let T=()=>m(!1);return window.addEventListener("pointerdown",T),()=>window.removeEventListener("pointerdown",T)},[u]);let y=(0,Fr.useCallback)(()=>{p(null),v(null),m(T=>!T)},[]),x=(0,Fr.useCallback)(()=>{let T=o?.()??null;if(T&&T.length>0){m(!1),d(!0),ub({sources:T,downloadFilename:i,onComplete:()=>d(!1)});return}let h=e.current;h&&(m(!1),d(!0),ub({sources:[{scene:h,objectBindings:r,matRefs:t.current??{}}],downloadFilename:i,onComplete:()=>d(!1)}))},[i,t,r,e,o]),M=(0,Fr.useCallback)(()=>{m(!1),hm(n.current).then(T=>{let h=document.createElement("a");h.href=T,h.download=`${i}.png`,document.body.appendChild(h),h.click(),document.body.removeChild(h)}).catch(T=>{console.error("Screenshot failed:",T)})},[i,n]),P=(0,Fr.useCallback)(async()=>{let T=a?.()??null;try{let h;if(T&&T.length>0)h=await fb(T,i);else{let w=e.current;if(!w)return;h=await q1(w,i)}if(h.length===0){p("This model does not contain UV coordinates.");return}p(null),m(!1)}catch(h){console.error("UV layout export failed:",h),p("Could not create the UV layout archive.")}},[i,e,a]),S=(0,Fr.useCallback)(async T=>{m(!1),v(null);try{let h=await s({mode:T,format:b}),w=h.type==="image/gif"?"gif":h.type.startsWith("video/mp4")?"mp4":"webm",C=URL.createObjectURL(h),_=document.createElement("a");_.href=C,_.download=`${i}-${T}.${w}`,document.body.appendChild(_);try{_.click()}finally{_.remove(),setTimeout(()=>URL.revokeObjectURL(C),1e3)}}catch(h){if(h instanceof DOMException&&h.name==="AbortError")return;v(h instanceof Error?h.message:"Could not export the video."),m(!0)}},[s,i,b]);return{isDownloading:l,downloadMenuOpen:u,uvExportError:c,toggleDownloadMenu:y,handleDownloadMesh:x,handleDownloadScreenshot:M,handleDownloadUvLayout:P,handleDownloadVideo:S,videoFormat:b,setVideoFormat:g,videoExportError:f}}var kt=require("react"),si=require("three");var ut=require("three");function Fm(e){if(e.length!==3)return null;let t=new ut.Vector3(...e[0]).sub(new ut.Vector3(...e[1])),n=new ut.Vector3(...e[2]).sub(new ut.Vector3(...e[1]));return t.lengthSq()===0||n.lengthSq()===0?null:Math.acos(Math.max(-1,Math.min(1,t.normalize().dot(n.normalize()))))*180/Math.PI}function Z1(e,t){if(!e.normal)return null;let n=new ut.Vector3(...e.normal);if(n.lengthSq()===0)return null;n.normalize();let r=new ut.Vector3(...t),i=r.clone().sub(new ut.Vector3(...e.position)).dot(n);return{distance:Math.abs(i),projection:r.addScaledVector(n,-i).toArray()}}function jm(e){if(e.length<3)return{error:"Pick at least three points to finish the area."};let t=new ut.Vector3(...e[0]),n=e.map(b=>new ut.Vector3(...b).sub(t)),r=Math.max(...n.map(b=>b.length()));if(r===0)return{error:"Area points must be distinct."};let i=new ut.Vector3;for(let b=1;b<n.length-1;b+=1){let g=n[b].clone().cross(n[b+1]);g.lengthSq()>i.lengthSq()&&i.copy(g)}if(i.length()<=r*r*1e-10)return{error:"Area points must not lie on one straight line."};i.normalize();let o=Math.max(r*1e-5,Number.EPSILON*Math.max(...e.flat().map(Math.abs))*32);if(n.some(b=>Math.abs(b.dot(i))>o))return{error:"Area points must lie on one plane."};let a=n.find(b=>b.length()>r*1e-10).clone().normalize(),s=i.clone().cross(a).normalize(),l=n.map(b=>new ut.Vector2(b.dot(a),b.dot(s))),d=(b,g,y)=>(g.x-b.x)*(y.y-b.y)-(g.y-b.y)*(y.x-b.x),u=r*r*1e-10,m=(b,g,y)=>Math.abs(d(b,g,y))<=u&&y.x>=Math.min(b.x,g.x)-r*1e-10&&y.x<=Math.max(b.x,g.x)+r*1e-10&&y.y>=Math.min(b.y,g.y)-r*1e-10&&y.y<=Math.max(b.y,g.y)+r*1e-10;for(let b=0;b<l.length;b+=1){let g=l[b],y=l[(b+1)%l.length];if(g.distanceTo(y)<=r*1e-10)return{error:"Area points must be distinct."};for(let x=b+1;x<l.length;x+=1){if(x===b+1||b===0&&x===l.length-1)continue;let M=l[x],P=l[(x+1)%l.length],S=d(g,y,M),T=d(g,y,P),h=d(M,P,g),w=d(M,P,y);if(S*T<0&&h*w<0||m(g,y,M)||m(g,y,P)||m(M,P,g)||m(M,P,y))return{error:"Area edges must not cross or touch each other."}}}let c=0,p=0,f=0;for(let b=0;b<l.length;b+=1){let g=l[b],y=l[(b+1)%l.length],x=g.x*y.y-y.x*g.y;c+=x,p+=(g.x+y.x)*x,f+=(g.y+y.y)*x}if(Math.abs(c)<=u)return{error:"The polygon has no measurable area."};let v=t.clone().addScaledVector(a,p/(3*c)).addScaledVector(s,f/(3*c));return{area:Math.abs(c)/2,center:v.toArray(),triangles:ut.ShapeUtils.triangulateShape(l,[])}}function gb(e,t){if(e.length<2)return 0;let n=0;for(let r=1;r<e.length;r+=1)n+=new ut.Vector3(...e[r]).distanceTo(new ut.Vector3(...e[r-1]));return t&&(n+=new ut.Vector3(...e[e.length-1]).distanceTo(new ut.Vector3(...e[0]))),n}var XE=1e-5;function $E(e,t){let n=e.getAttribute("position"),r=e.getIndex(),i=n.count,o=Math.max(t,1e-9),a=(f,v,b)=>`${Math.round(f/o)}_${Math.round(v/o)}_${Math.round(b/o)}`,s=new Int32Array(i),l=[],d=new Map;for(let f=0;f<i;f+=1){let v=n.getX(f),b=n.getY(f),g=n.getZ(f),y=a(v,b,g),x=d.get(y);x===void 0&&(x=l.length,l.push(new ut.Vector3(v,b,g)),d.set(y,x)),s[f]=x}let u=l.map(()=>new Map),m=(f,v)=>{if(f===v)return;let b=l[f].distanceTo(l[v]);u[f].has(v)||u[f].set(v,b),u[v].has(f)||u[v].set(f,b)},c=(r?r.count:i)/3,p=f=>r?r.getX(f):f;for(let f=0;f<c;f+=1)m(s[p(f*3)],s[p(f*3+1)]),m(s[p(f*3+1)],s[p(f*3+2)]),m(s[p(f*3+2)],s[p(f*3)]);return{weldedId:s,weldedPosition:l,neighbors:u}}function qE(e,t,n){let r=new Map([[t,0]]),i=[t];for(let o=0;o<n&&i.length>0;o+=1){let a=[];for(let s of i){let l=r.get(s)??0;for(let[d,u]of e[s]??[])r.has(d)||(r.set(d,l+u),a.push(d))}i=a}return r}function YE(e){let n=(Math.abs(e.y)<.9?new ut.Vector3(0,1,0):new ut.Vector3(1,0,0)).clone().cross(e).normalize(),r=e.clone().cross(n).normalize();return[n,r]}function KE(e,t,n){let[r,i]=YE(t),o=0,a=0,s=0;for(let v of n){let b=v.clone().sub(e),g=b.dot(r),y=b.dot(i);o+=g*g,a+=g*y,s+=y*y}let l=o+s,d=o*s-a*a,u=Math.sqrt(Math.max(0,l*l/4-d)),m=l/2+u,c=1,p=0;Math.abs(a)>1e-12?(c=m-s,p=a):s>o&&(c=0,p=1);let f=Math.hypot(c,p)||1;return r.clone().multiplyScalar(c/f).add(i.clone().multiplyScalar(p/f)).normalize()}function ZE(e,t,n,r){let i=e.getAttribute("position"),o=e.getIndex(),a=i.count,s=(o?o.count:a)/3,l=c=>o?o.getX(c):c,d=c=>new ut.Vector3(i.getX(c),i.getY(c),i.getZ(c)).applyMatrix4(t),u=c=>c.clone().sub(n).dot(r),m=[];for(let c=0;c<s;c+=1){let p=d(l(c*3)),f=d(l(c*3+1)),v=d(l(c*3+2)),b=u(p),g=u(f),y=u(v),x=[],M=(P,S,T,h)=>{S>0!=h>0&&x.push(P.clone().lerp(T,S/(S-h)))};M(p,b,f,g),M(f,g,v,y),M(v,y,p,b),x.length===2&&m.push([x[0],x[1]])}return m}function JE(e,t){let n=Math.max(t,1e-9),r=c=>`${Math.round(c.x/n)}_${Math.round(c.y/n)}_${Math.round(c.z/n)}`,i=new Map,o=[],a=c=>{let p=r(c),f=i.get(p);return f===void 0&&(f=o.length,o.push(c),i.set(p,f)),f},s=[],l=c=>{for(;s.length<=c;)s.push(new Map)};for(let[c,p]of e){let f=a(c),v=a(p);f!==v&&(l(f),l(v),s[f].set(v,(s[f].get(v)??0)+1),s[v].set(f,(s[v].get(f)??0)+1))}let d=(c,p)=>c<p?`${c}_${p}`:`${p}_${c}`,u=new Set,m=[];for(let c=0;c<s.length;c+=1)for(let p of s[c]?.keys()??[]){if(u.has(d(c,p)))continue;let f=[c],v=c,b=p;u.add(d(v,b));let g=0;for(;b!==c&&b>=0&&g<s.length+4;){f.push(b);let y=[...s[b].keys()].filter(M=>M!==v),x;if(y.length<=1)x=y[0];else{let M=o[b].clone().sub(o[v]).normalize(),P=-1/0;for(let S of y){let T=o[S].clone().sub(o[b]).normalize(),h=M.dot(T);h>P&&(P=h,x=S)}}if(x===void 0){b=-1;break}u.add(d(b,x)),v=b,b=x,g+=1}b===c&&f.length>=3&&m.push(f.map(y=>o[y]))}return m}function K1(e,t){let n=1/0;for(let r of e)n=Math.min(n,r.distanceTo(t));return n}function QE(e,t){let n=0,r=1/0;return e.forEach((i,o)=>{let a=i.distanceTo(t);a<r&&(r=a,n=o)}),[...e.slice(n),...e.slice(0,n)]}function J1(e,t,n,r,i){let o=ZE(e,t,r,i);if(o.length===0)return{error:"Couldn't trace a loop around this point."};let a=JE(o,n*t.getMaxScaleOnAxis());if(a.length===0)return{error:"The surface here doesn't form a closed loop around this point (it may be near an open edge)."};let s=a[0],l=K1(s,r);for(let u of a.slice(1)){let m=K1(u,r);m<l&&(l=m,s=u)}let d=QE(s,r).map(u=>u.toArray());return{points:d,length:gb(d,!0)}}function Q1(e){if(!(e.object instanceof ut.Mesh)||!e.face)return null;let t=e.object,n=t.geometry;if(t.isSkinnedMesh||t.morphTargetInfluences?.some(o=>o!==0)){let o=n.getAttribute("position"),a=new ut.Float32BufferAttribute(new Float32Array(o.count*3),3),s=new ut.Vector3;for(let l=0;l<o.count;l++)t.getVertexPosition(l,s),a.setXYZ(l,s.x,s.y,s.z);n=new ut.BufferGeometry().setAttribute("position",a).setIndex(n.getIndex())}let r=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let o=new ut.Matrix4;t.getMatrixAt(e.instanceId,o),r.multiply(o)}n.computeBoundingSphere();let i=n.boundingSphere&&n.boundingSphere.radius>0?n.boundingSphere.radius:1;return{face:e.face,geometry:n,matrix:r,weldTolerance:i*XE}}function ew(e,t=6){let n=Q1(e);if(!n)return{error:"Pick a point on the mesh surface to trace a loop around it."};let{face:r,geometry:i,matrix:o,weldTolerance:a}=n,s=nw(e);if(!s)return{error:"Pick a point on the mesh surface to trace a loop around it."};let l=s[1].clone().sub(s[0]).cross(s[2].clone().sub(s[0]));if(l.lengthSq()===0)return{error:"Couldn't determine the surface direction at this point."};l.normalize();let{weldedId:d,weldedPosition:u,neighbors:m}=$E(i,a),c=i.getAttribute("position"),p=e.point.clone().applyMatrix4(o.clone().invert()),f=[r.a,r.b,r.c],v=f[0],b=1/0;for(let S of f){let h=new ut.Vector3(c.getX(S),c.getY(S),c.getZ(S)).distanceTo(p);h<b&&(b=h,v=S)}let g=d[v],y=u[g].clone().applyMatrix4(o),x=qE(m,g,t),M=[];for(let S of x.keys())M.push(u[S].clone().applyMatrix4(o));if(M.length<6)return{error:"Not enough surface detail near this point to trace a loop. Try a different spot."};let P=KE(y,l,M);return J1(i,o,a,e.point.clone(),P)}function tw(e,t=new ut.Vector3(0,1,0)){let n=Q1(e);if(!n)return{error:"Pick a point on the mesh surface to trace a loop around it."};let{geometry:r,matrix:i,weldTolerance:o}=n,a=t.clone().normalize();return a.lengthSq()===0?{error:"Couldn't determine a horizontal direction."}:J1(r,i,o,e.point.clone(),a)}function nw(e){if(!(e.object instanceof ut.Mesh)||!e.face)return null;let t=e.object,n=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let r=new ut.Matrix4;t.getMatrixAt(e.instanceId,r),n.multiply(r)}return[e.face.a,e.face.b,e.face.c].map(r=>t.getVertexPosition(r,new ut.Vector3).applyMatrix4(n))}function rw(e){if(!(e.object instanceof ut.Mesh))return!1;for(let n=e.object;n;n=n.parent)if(!n.visible||n.userData.riEditorGizmo||n.userData.riDecal)return!1;return(Array.isArray(e.object.material)?e.object.material:[e.object.material])[e.face?.materialIndex??0]?.visible!==!1}function iw(e,t,n,r,i,o=12){let a=nw(e),s=a?a[1].clone().sub(a[0]).cross(a[2].clone().sub(a[0])).normalize():null,l={position:e.point.toArray(),...s&&s.lengthSq()>0?{normal:s.toArray()}:{},...a?{faceVertices:a.map(c=>c.toArray())}:{}};if(!a||i==="none")return l;let d=c=>{let p=new ut.Vector4(c.x,c.y,c.z,1).applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix);return p.w<=0||p.z/p.w<-1||p.z/p.w>1?null:{screen:new ut.Vector2((p.x/p.w+1)*r.width/2,(1-p.y/p.w)*r.height/2),w:p.w}},u=a.map(d),m=o;if((i==="vertex"||i==="auto")&&(u.forEach((c,p)=>{let f=c?.screen.distanceTo(n)??1/0;f<=m&&(m=f,l.position=a[p].toArray(),l.snapped="vertex")}),l.snapped))return l;if(i==="edge"||i==="auto")for(let c=0;c<3;c+=1){let p=(c+1)%3,f=u[c],v=u[p];if(!f||!v)continue;let b=v.screen.clone().sub(f.screen);if(b.lengthSq()===0)continue;let g=Math.max(0,Math.min(1,n.clone().sub(f.screen).dot(b)/b.lengthSq())),y=f.screen.clone().addScaledVector(b,g).distanceTo(n);if(y<=m){m=y;let x=g*f.w/((1-g)*v.w+g*f.w);l.position=a[c].clone().lerp(a[p],x).toArray(),l.snapped="edge"}}return l}var Hm={tool:"distance",points:[],areaClosed:!1,error:null};function ow(e,t){if(t.type==="tool")return{...Hm,tool:t.tool};if(t.type==="clear")return{...Hm,tool:e.tool};if(t.type==="fail")return{...e,error:t.error};if(t.type==="wrapResult")return{...e,points:t.points,areaClosed:!1,error:null};if(t.type==="undo")return{...e,points:e.points.slice(0,-1),areaClosed:!1,error:null};if(t.type==="finishArea"){if(e.tool!=="area")return e;let o=jm(e.points.map(a=>a.position));return"error"in o?{...e,error:o.error}:{...e,areaClosed:!0,error:null}}if(t.type!=="place")return e;let r=e.areaClosed||e.tool==="angle"&&e.points.length===3||e.tool==="pointToPlane"&&e.points.length===2?[]:e.points;if(e.tool==="pointToPlane"&&r.length===0&&!t.point.normal)return{...e,error:"Pick a triangle face to define the reference plane."};if(r.length>=256)return{...e,error:"Finish or clear this measurement before adding more points."};let i=[...r,t.point];return e.tool==="angle"&&i.length===3&&Fm(i.map(o=>o.position))===null?{...e,error:"Pick a point away from the angle's vertex."}:{...e,points:i,areaClosed:!1,error:null}}function ek(e){let t=new si.Box3().setFromObject(e),n=new si.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 tk(e){let t=new si.Box3().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new si.Vector3),r=t.getSize(new si.Vector3).length()/2;return!Number.isFinite(r)||r<=0?null:{center:[n.x,n.y,n.z],radius:r}}function aw({canvasAreaRef:e,controlsRef:t,sceneRef:n,modelUrl:r,modelRotation:i,bindingTransformSignature:o,modelLoaded:a,enabled:s}){let[l,d]=(0,kt.useState)(!1),[u,m]=(0,kt.useReducer)(ow,Hm),[c,p]=(0,kt.useState)("none"),[f,v]=(0,kt.useState)(null),[b,g]=(0,kt.useState)(!1),[y,x]=(0,kt.useState)(null),[M,P]=(0,kt.useState)(null),S=(0,kt.useRef)(!1),T=(0,kt.useRef)(0),h=(0,kt.useRef)(null),w=(0,kt.useRef)(null);S.current=l&&s;let C=(0,kt.useCallback)(pe=>{pe.updateMatrixWorld(!0),x(ek(pe)),P(tk(pe))},[]),_=(0,kt.useCallback)(()=>{m({type:"clear"}),v(null)},[]),k=(0,kt.useCallback)(pe=>{m({type:"tool",tool:pe}),v(null)},[]),R=(0,kt.useCallback)(()=>m({type:"undo"}),[]),U=(0,kt.useCallback)(()=>m({type:"finishArea"}),[]),H=(0,kt.useCallback)(()=>d(pe=>!pe),[]),B=(0,kt.useCallback)(()=>g(pe=>!pe),[]),X=(0,kt.useCallback)(pe=>{!S.current||pe.button!==0||(h.current={x:pe.clientX,y:pe.clientY})},[]),D=(0,kt.useCallback)((pe,Ve)=>{let Q=e.current,J=t.current?.camera,ye=n.current;if(!Q||!J||!ye)return null;let Re=Q.getBoundingClientRect();if(!Re.width||!Re.height)return null;ye.updateMatrixWorld(!0),J.updateMatrixWorld(!0);let nt=new si.Vector2(pe-Re.left,Ve-Re.top),le=new si.Raycaster;return le.setFromCamera(new si.Vector2(nt.x/Re.width*2-1,1-nt.y/Re.height*2),J),le.intersectObject(ye,!0).find(rw)??null},[e,t,n]),L=(0,kt.useCallback)((pe,Ve)=>{let Q=e.current,J=t.current?.camera,ye=D(pe,Ve);if(!ye||!Q||!J)return null;let Re=Q.getBoundingClientRect(),nt=new si.Vector2(pe-Re.left,Ve-Re.top);return iw(ye,J,nt,Re,c)},[e,t,D,c]),re=(0,kt.useCallback)(()=>{w.current!==null&&cancelAnimationFrame(w.current),w.current=null,v(null)},[]),Me=(0,kt.useCallback)(pe=>{if(!S.current||c==="none"||pe.buttons!==0||pe.target.closest("button, input, select, label, textarea, .ri-measureTools")){re();return}w.current!==null&&cancelAnimationFrame(w.current);let{clientX:Ve,clientY:Q}=pe;w.current=requestAnimationFrame(()=>{w.current=null;let J=L(Ve,Q);v(J?.snapped?J:null)})},[re,L,c]),Pe=(0,kt.useCallback)(pe=>{if(!S.current)return;let Ve=h.current;if(h.current=null,Ve&&Math.hypot(pe.clientX-Ve.x,pe.clientY-Ve.y)>6||pe.target.closest("button, input, select, label, textarea, .ri-measureTools"))return;if(u.tool==="wrap"||u.tool==="wrapHorizontal"){let ye=D(pe.clientX,pe.clientY);if(!ye)return;let Re=u.tool==="wrapHorizontal"?tw(ye):ew(ye);if("error"in Re){m({type:"fail",error:Re.error});return}let nt=Re.points.map((le,_e)=>({id:T.current+_e+1,position:le}));T.current+=nt.length,m({type:"wrapResult",points:nt});return}let J=L(pe.clientX,pe.clientY);J&&(T.current+=1,m({type:"place",point:{...J,id:T.current}}))},[u.tool,L,D]);return(0,kt.useEffect)(()=>{_(),x(null),P(null)},[r,_]),(0,kt.useEffect)(()=>{_()},[i,o,_]),(0,kt.useEffect)(()=>(re(),re),[re,l,c]),(0,kt.useEffect)(()=>{s||(d(!1),re())},[s,re]),(0,kt.useEffect)(()=>{let pe=n.current;!a||!pe||C(pe)},[o,a,C,n]),{measureMode:l,measureModeRef:S,measurePoints:u.points,measurementTool:u.tool,areaClosed:u.areaClosed,measurementError:u.error,selectMeasurementTool:k,undoMeasurementPoint:R,finishMeasureArea:U,snapMode:c,setSnapMode:p,snapPreview:f,handleMeasurePointerMove:Me,clearSnapPreview:re,showDimensions:b,measureBox:y,modelBounds:M,refreshBounds:C,clearMeasurements:_,toggleMeasureMode:H,toggleDimensions:B,handleMeasurePointerDown:X,handleMeasureClick:Pe}}var cw=require("react-dom"),dw=require("@react-three/xr"),uw=require("lucide-react"),Xt=require("react");function sw(e,t){let n=null,r=o=>{let a=o.mode==="immersive-ar"?o.session??null:null;a!==n&&(n&&t.endAR(),n=a,n&&t.startAR())},i=e.subscribe(r);return r(e.getState()),()=>{i(),n&&t.endAR("interrupted"),n=null}}var li=require("react/jsx-runtime"),lw={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function pw({enableXR:e,usdzUrl:t,mobileHandoffUrl:n,engagement:r}){let i=Fe(),o=(0,Xt.useRef)(null),a=(0,Xt.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let L=navigator.xr;if(!L||typeof L.isSessionSupported!="function"||typeof L.addEventListener!="function")return null;try{return(0,dw.createXRStore)({emulate:!1})}catch{return null}},[e]),[s,l]=(0,Xt.useState)(!1),[d,u]=(0,Xt.useState)(!1),[m,c]=(0,Xt.useState)(!0),[p,f]=(0,Xt.useState)(null),[v,b]=(0,Xt.useState)(!1),[g,y]=(0,Xt.useState)(!1),[x,M]=(0,Xt.useState)(lw),[P,S]=(0,Xt.useState)(!1),T=(0,Xt.useMemo)(()=>e&&!!t?.trim()&&qg(),[e,t]);(0,Xt.useEffect)(()=>{c(M0())},[]);let h=(0,Xt.useCallback)(()=>{if(typeof window>"u")return null;try{let L=new URL(n?.trim()||window.location.href,window.location.href);return L.protocol==="http:"||L.protocol==="https:"?L.toString():null}catch{return null}},[n]);(0,Xt.useEffect)(()=>{if(!e||m){f(null),b(!1);return}f(h())},[e,m,h]),(0,Xt.useEffect)(()=>{if(a)return a.subscribe(L=>y(L.session!=null&&L.mode==="immersive-ar"))},[a]),(0,Xt.useEffect)(()=>{if(a)return sw(a,r)},[a,r]),(0,Xt.useEffect)(()=>{S(!1),M(lw)},[g]),(0,Xt.useEffect)(()=>{if(!e||typeof navigator>"u")return;let L=navigator.xr;if(!L?.isSessionSupported)return;let re=!1;return L.isSessionSupported("immersive-ar").then(Me=>!re&&l(Me)).catch(()=>{}),L.isSessionSupported("immersive-vr").then(Me=>!re&&u(Me)).catch(()=>{}),()=>{re=!0}},[e]);let w=(0,Xt.useCallback)(()=>{let L=h();L&&(r.requestARLaunch("mobile-handoff"),f(L),b(!0))},[h,r]),C=(0,Xt.useCallback)(()=>b(!1),[]),_=(0,Xt.useCallback)(()=>{let L=t?.trim();if(!L)return;r.requestARLaunch("quick-look");let re=document.createElement("a");re.setAttribute("rel","ar"),re.href=L,re.style.display="none";let Me=document.createElement("img");Me.alt="",Me.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",re.appendChild(Me),document.body.appendChild(re),re.click(),re.remove()},[t,r]),k=(0,Xt.useCallback)(L=>{M(L),L.isPlacementMode||S(!1)},[]),R=(0,Xt.useCallback)(L=>{S(!1),L?o.current?.finishPlacementMode():o.current?.cancelPlacementMode()},[]),U=(0,Xt.useCallback)(L=>{L.preventDefault(),S(!0),o.current?.startPlacementMode()},[]);(0,Xt.useEffect)(()=>{if(!P)return;let L=()=>R(!0),re=()=>R(!1);return window.addEventListener("pointerup",L),window.addEventListener("pointercancel",re),()=>{window.removeEventListener("pointerup",L),window.removeEventListener("pointercancel",re)}},[R,P]);let H=x.isModelPlaced?x.isPlacementMode?x.canPlace?i("arReleaseToPlace"):i("arFindSurface"):null:x.canPlace?null:i("arFindSurface"),B=x.isModelPlaced&&!x.isPlacementMode?i("arGestureHint"):null,X=a?.getState().domOverlayRoot??null,D=g&&X?(0,cw.createPortal)((0,li.jsxs)(li.Fragment,{children:[B&&(0,li.jsx)("div",{className:"ri-arHintOverlay",children:(0,li.jsx)("div",{className:"ri-arHint",children:B})}),(0,li.jsx)("div",{className:"ri-arOverlay",children:(0,li.jsxs)("div",{className:"ri-arControls",children:[H&&(0,li.jsx)("div",{className:"ri-arStatus",children:H}),x.isModelPlaced&&(0,li.jsxs)("button",{type:"button",className:`ri-arActionButton ${P?"ri-arActionButton--active":""}`,onPointerDown:L=>U(L.nativeEvent),"aria-pressed":P,children:[(0,li.jsx)(uw.MapPin,{size:14}),i("arRelocate")]}),!x.isModelPlaced&&x.canPlace&&(0,li.jsx)("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>o.current?.placeCurrent(),children:i("tapToPlace")})]})})]}),X):null;return{xrStore:a,presenterRef:o,arSupported:s,vrSupported:d,quickLookSupported:T,resolvedMobileHandoffUrl:p,isMobileHandoffOpen:v,arOverlay:D,openMobileHandoff:w,closeMobileHandoff:C,openQuickLook:_,handleARStateChange:k}}var gu=require("@react-three/fiber"),Hw=require("@react-three/drei"),Gw=require("@react-three/xr"),pa=require("three"),io=require("react");function Gm(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var mw=["none","directional","point","spot","hemisphere"],hw=["pbr","matcap","uv-checker"],fw=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];var gw=["sporadic","constantMild","constantWild"],bw=["linear","radial","mirroredLinear"],hu=["verySmall","small","medium","large","veryLarge","huge"],Wm=["x","y","z"],fl={enabled:!1,axis:"y",position:.5,flip:!1},nk={clips:[],autoplayClip:null},rk={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}},is={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:rk,animations:nk,annotations:[]};var wr=require("@react-three/fiber"),vw=require("@react-three/drei"),bb=require("@react-three/xr"),Xm=require("three"),Ar=require("react"),gl=require("react/jsx-runtime");function yw({renderMode:e,suspended:t=!1}){let{scene:n}=(0,wr.useThree)(),r=(0,wr.useThree)(s=>s.setFrameloop),i=(0,bb.useXR)(s=>s.session!=null),o=(0,bb.useXR)(s=>s.mode==="immersive-ar"),a=(0,Ar.useRef)(void 0);return(0,Ar.useEffect)(()=>{r(t?"never":i?"always":e)},[i,e,t,r]),(0,Ar.useEffect)(()=>{o?(a.current=n.background,n.background=null):a.current!==void 0&&(n.background=a.current,a.current=void 0)},[o,n]),(0,wr.useFrame)(()=>{o&&n.background!==null&&(n.background=null)}),null}function xw({onPresentingChange:e}){let t=(0,wr.useThree)(i=>i.gl),n=(0,Ar.useRef)(null);(0,Ar.useEffect)(()=>{let i=t.xr;if(!i)return;let o=l=>{l?(n.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):n.current!==null&&(t.shadowMap.enabled=n.current,n.current=null),e(l)},a=()=>o(!0),s=()=>o(!1);return i.addEventListener("sessionstart",a),i.addEventListener("sessionend",s),o(i.isPresenting),()=>{i.removeEventListener("sessionstart",a),i.removeEventListener("sessionend",s)}},[t,e]);let r=(0,Ar.useRef)(0);return(0,wr.useFrame)(()=>{if(!t.xr.isPresenting)return;let i=performance.now();if(i-r.current<1e3)return;r.current=i;let o=t.xr}),null}function ww({active:e}){let t=(0,wr.useThree)(n=>n.invalidate);return(0,Ar.useEffect)(()=>{e&&t()},[e,t]),(0,wr.useFrame)(()=>{e&&t()}),null}function Sw(e){let t=(0,wr.useThree)(r=>r.gl),n=(0,Ar.useRef)(t.autoClear);return(0,wr.useFrame)(()=>{n.current=t.autoClear,t.autoClear=!0},-1),(0,gl.jsxs)(gl.Fragment,{children:[(0,gl.jsx)(vw.ContactShadows,{...e}),(0,gl.jsx)(ik,{saved:n})]})}function ik({saved:e}){let t=(0,wr.useThree)(n=>n.gl);return(0,wr.useFrame)(()=>{t.autoClear=e.current}),null}function Mw({color:e}){let{scene:t,invalidate:n}=(0,wr.useThree)();return(0,Ar.useEffect)(()=>{let r=t.background;return t.background=e?new Xm.Color(e):null,n(),()=>{t.background=r}},[t,e,n]),null}function _w({rotation:e}){let{scene:t,invalidate:n}=(0,wr.useThree)();return(0,Ar.useLayoutEffect)(()=>{let r=e*Math.PI/180;t.environmentRotation.set(0,r,0),t.backgroundRotation.set(0,r,0)}),(0,Ar.useEffect)(()=>{n()},[e,n]),null}function Cw({cameraConfig:e}){let{camera:t,invalidate:n}=(0,wr.useThree)();return(0,Ar.useEffect)(()=>{if(!(t instanceof Xm.PerspectiveCamera))return;let r=e?.fov;typeof r=="number"&&t.fov!==r&&(t.fov=r,t.updateProjectionMatrix(),n())},[t,e,n]),null}var Rc=require("@react-three/fiber"),tt=require("@react-three/postprocessing"),ua=require("postprocessing"),Li=require("three"),wn=require("react");var Ec=require("react"),$m=require("postprocessing"),Tw=require("three"),Aw=require("react/jsx-runtime"),ok=`
|
|
3669
3669
|
uniform float exposure;
|
|
3670
3670
|
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
3671
3671
|
outputColor = vec4(inputColor.rgb * exposure, inputColor.a);
|
|
3672
3672
|
}
|
|
3673
|
-
`,Dh=class extends qd.Effect{constructor(t=1){super("ExposureEffect",yM,{blendFunction:qd.BlendFunction.NORMAL,uniforms:new Map([["exposure",new Qv.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},ex=(0,Os.forwardRef)(function({exposure:t},n){let r=(0,Os.useMemo)(()=>new Dh(t),[]);return r.exposure=t,(0,Os.useImperativeHandle)(n,()=>r,[r]),(0,tx.jsx)("primitive",{object:r,dispose:null})});var Ea=require("@react-three/fiber"),nx=eb(require("@react-three/postprocessing")),rx=require("postprocessing"),oi=require("three"),ii=require("react"),ox=require("react/jsx-runtime"),wM=nx.LensFlareEffect;function ix({config:e}){let t=(0,Ea.useThree)(d=>d.camera),n=(0,Ea.useThree)(d=>d.raycaster),r=(0,Ea.useThree)(d=>d.scene),i=(0,Ea.useThree)(d=>d.viewport),o=(0,ii.useRef)(null),a=(0,ii.useRef)(new oi.Vector3),s=(0,ii.useRef)(new oi.Vector2),l=(0,ii.useMemo)(()=>new oi.Vector3(...e.lensPosition),[e.lensPosition]),c=(0,ii.useMemo)(()=>new oi.Color(e.colorGain??"#141414"),[e.colorGain]),p=(0,ii.useMemo)(()=>new oi.Vector2(0,0),[]),u=(0,ii.useMemo)(()=>new wM({blendFunction:rx.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:l,screenRes:p,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:c,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[c,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,l,p]);return(0,ii.useEffect)(()=>(o.current=u,()=>{u.dispose(),o.current=null}),[u]),(0,ii.useEffect)(()=>{let d=u.uniforms.get("screenRes");d&&(d.value.x=i.width,d.value.y=i.height)},[u,i]),(0,Ea.useFrame)((d,m)=>{let g=o.current;if(!g)return;let v=g.uniforms.get("lensPosition"),M=g.uniforms.get("opacity");if(!v||!M)return;let w=1;if(a.current.copy(l).project(t),a.current.z>1)return;v.value.x=a.current.x,v.value.y=a.current.y,s.current.x=a.current.x,s.current.y=a.current.y,n.setFromCamera(s.current,t);let x=n.intersectObjects(r.children,!0),{object:S}=x[0]||{};S&&(S.userData?.lensflare==="no-occlusion"?w=0:S instanceof oi.Mesh&&(S.material.uniforms?._transmission?.value>.2||S.material._transmission&&S.material._transmission>.2?w=.2:S.material.transparent&&(w=S.material.opacity))),M.value=oi.MathUtils.damp(M.value,w,12,m)}),(0,ox.jsx)("primitive",{object:u,dispose:null})}var $d=require("@react-three/postprocessing"),ar=require("postprocessing"),ax=require("three");function sx(e){return e==="linear"?ar.ToneMappingMode.LINEAR:e==="reinhard"?ar.ToneMappingMode.REINHARD:ar.ToneMappingMode.ACES_FILMIC}function Yd(e){switch(e){case"verySmall":return ar.KernelSize.VERY_SMALL;case"small":return ar.KernelSize.SMALL;case"medium":return ar.KernelSize.MEDIUM;case"large":return ar.KernelSize.LARGE;case"veryLarge":return ar.KernelSize.VERY_LARGE;case"huge":return ar.KernelSize.HUGE}}function lx(e){switch(e){case"constantMild":return ar.GlitchMode.CONSTANT_MILD;case"constantWild":return ar.GlitchMode.CONSTANT_WILD;default:return ar.GlitchMode.SPORADIC}}function Nh(e){let t=new ax.Color(e);return[t.r,t.g,t.b,1]}function cx(e){return e==="radial"?$d.RampType.Radial:e==="mirroredLinear"?$d.RampType.MirroredLinear:$d.RampType.Linear}var xt=require("react/jsx-runtime"),Ra={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new Ai.Color(uo.color).getHex(),hiddenEdgeColor:new Ai.Color(uo.color).multiplyScalar(.35).getHex(),kernelSize:zo.KernelSize.VERY_SMALL,blur:!1,xRay:!1};function SM(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var Bh=[],_M=(0,Ln.memo)(function({sceneConfig:t,selectedObjectRef:n,highlightOnHover:r=!1,disabled:i=!1,onOutlineEffect:o}){let a=(0,$l.useThree)(b=>b.scene),s=(0,$l.useThree)(b=>b.gl),l=(0,Ln.useRef)(null),c=t?.postProcessing,p=n??null,u=c?.outline.enabled===!0,d=u||r,[m,g]=(0,Ln.useState)(()=>s.xr?.isPresenting??!1);(0,Ln.useEffect)(()=>{let b=s.xr;if(!b)return;let _=()=>g(!0),y=()=>g(!1);return b.addEventListener("sessionstart",_),b.addEventListener("sessionend",y),g(b.isPresenting),()=>{b.removeEventListener("sessionstart",_),b.removeEventListener("sessionend",y)}},[s]);let v=a.children.filter(b=>b.isLight),M=(0,Ln.useMemo)(()=>new Ai.Vector2(c?.chromaticAberration.offsetX??.002,c?.chromaticAberration.offsetY??.002),[c?.chromaticAberration.offsetX,c?.chromaticAberration.offsetY]),w=(0,Ln.useMemo)(()=>new Ai.Color(c?.outline.visibleEdgeColor??"#ffffff").getHex(),[c?.outline.visibleEdgeColor]),x=(0,Ln.useMemo)(()=>new Ai.Color(c?.outline.hiddenEdgeColor??"#22090a").getHex(),[c?.outline.hiddenEdgeColor]),S=(0,Ln.useMemo)(()=>Nh(c?.ramp.startColor??"#000000"),[c?.ramp.startColor]),k=(0,Ln.useMemo)(()=>Nh(c?.ramp.endColor??"#ffffff"),[c?.ramp.endColor]);return!c||m||i?null:(0,xt.jsxs)(xt.Fragment,{children:[c.godRays.enabled===!0&&(0,xt.jsxs)("mesh",{ref:l,position:c.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,xt.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,xt.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,xt.jsxs)(Ue.EffectComposer,{multisampling:0,enableNormalPass:c.ssao.enabled===!0,autoClear:!1,children:[c.smaa.enabled===!0&&(0,xt.jsx)(Ue.SMAA,{}),c.ssao.enabled===!0&&(0,xt.jsx)(Ue.SSAO,{samples:c.ssao.samples,rings:c.ssao.rings,intensity:c.ssao.intensity,radius:c.ssao.radius,bias:c.ssao.bias,luminanceInfluence:c.ssao.luminanceInfluence,fade:c.ssao.fade,minRadiusScale:c.ssao.minRadiusScale,worldDistanceThreshold:c.ssao.worldDistanceThreshold,worldDistanceFalloff:c.ssao.worldDistanceFalloff,worldProximityThreshold:c.ssao.worldProximityThreshold,worldProximityFalloff:c.ssao.worldProximityFalloff}),c.autofocus.enabled===!0&&(0,xt.jsx)(Ue.Autofocus,{focusDistance:c.autofocus.focusDistance,focusRange:c.autofocus.focusRange,focalLength:c.autofocus.focalLength,bokehScale:c.autofocus.bokehScale,target:c.autofocus.target,mouse:c.autofocus.mouse,debug:c.autofocus.debug||void 0,manual:c.autofocus.manual,smoothTime:c.autofocus.smoothTime}),c.autofocus.enabled!==!0&&c.depthOfField.enabled===!0&&(0,xt.jsx)(Ue.DepthOfField,{focusDistance:c.depthOfField.focusDistance,focusRange:c.depthOfField.focusRange,focalLength:c.depthOfField.focalLength,bokehScale:c.depthOfField.bokehScale}),c.bloom.enabled===!0&&(0,xt.jsx)(Ue.Bloom,{intensity:c.bloom.intensity,luminanceThreshold:c.bloom.luminanceThreshold,luminanceSmoothing:c.bloom.luminanceSmoothing,mipmapBlur:c.bloom.mipmapBlur,radius:c.bloom.radius,levels:c.bloom.levels}),c.selectiveBloom.enabled===!0&&(0,xt.jsx)(Ue.SelectiveBloom,{selection:p??void 0,lights:v,selectionLayer:c.selectiveBloom.selectionLayer,intensity:c.selectiveBloom.intensity,luminanceThreshold:c.selectiveBloom.luminanceThreshold,luminanceSmoothing:c.selectiveBloom.luminanceSmoothing,kernelSize:Yd(c.selectiveBloom.kernelSize),mipmapBlur:c.selectiveBloom.mipmapBlur,inverted:c.selectiveBloom.inverted,ignoreBackground:c.selectiveBloom.ignoreBackground}),d&&(0,xt.jsx)(Ue.Outline,{ref:o,selection:Bh,selectionLayer:c.outline.selectionLayer,blendFunction:zo.BlendFunction.SCREEN,edgeStrength:u?c.outline.edgeStrength:Ra.edgeStrength,pulseSpeed:u?c.outline.pulseSpeed:Ra.pulseSpeed,visibleEdgeColor:u?w:Ra.visibleEdgeColor,hiddenEdgeColor:u?x:Ra.hiddenEdgeColor,kernelSize:u?Yd(c.outline.kernelSize):Ra.kernelSize,blur:u?c.outline.blur:Ra.blur,xRay:u?c.outline.xRay:Ra.xRay}),c.chromaticAberration.enabled===!0&&(0,xt.jsx)(Ue.ChromaticAberration,{offset:M,radialModulation:c.chromaticAberration.radialModulation,modulationOffset:c.chromaticAberration.modulationOffset}),c.colorAverage.enabled===!0&&(0,xt.jsx)(Ue.ColorAverage,{}),c.dotScreen.enabled===!0&&(0,xt.jsx)(Ue.DotScreen,{angle:c.dotScreen.angle,scale:c.dotScreen.scale}),c.glitch.enabled===!0&&(0,xt.jsx)(Ue.Glitch,{mode:lx(c.glitch.mode),delay:new Ai.Vector2(c.glitch.delay[0],c.glitch.delay[1]),duration:new Ai.Vector2(c.glitch.duration[0],c.glitch.duration[1]),strength:new Ai.Vector2(c.glitch.strength[0],c.glitch.strength[1]),chromaticAberrationOffset:new Ai.Vector2(c.glitch.chromaticAberrationOffset[0],c.glitch.chromaticAberrationOffset[1]),columns:c.glitch.columns,ratio:c.glitch.ratio,active:!0}),c.grid.enabled===!0&&(0,xt.jsx)(Ue.Grid,{scale:c.grid.scale,lineWidth:c.grid.lineWidth}),c.lensflare.enabled===!0&&(0,xt.jsx)(ix,{config:c.lensflare}),c.godRays.enabled===!0&&(0,xt.jsx)(Ue.GodRays,{sun:l,samples:c.godRays.samples,density:c.godRays.density,decay:c.godRays.decay,weight:c.godRays.weight,exposure:c.godRays.exposure,clampMax:c.godRays.clampMax,blur:c.godRays.blur,kernelSize:Yd(c.godRays.kernelSize)}),c.noise.enabled===!0&&(0,xt.jsx)(Ue.Noise,{premultiply:c.noise.premultiply,opacity:c.noise.opacity,blendFunction:zo.BlendFunction.ADD}),c.brightnessContrast.enabled===!0&&(0,xt.jsx)(Ue.BrightnessContrast,{brightness:c.brightnessContrast.brightness,contrast:c.brightnessContrast.contrast}),c.hueSaturation.enabled===!0&&(0,xt.jsx)(Ue.HueSaturation,{hue:c.hueSaturation.hue,saturation:c.hueSaturation.saturation}),c.toneMapping.enabled===!0&&(0,xt.jsx)(ex,{exposure:c.toneMapping.exposure}),c.vignette.enabled===!0&&(0,xt.jsx)(Ue.Vignette,{eskil:c.vignette.eskil,offset:c.vignette.offset,darkness:c.vignette.darkness,blendFunction:zo.BlendFunction.NORMAL}),c.toneMapping.enabled===!0&&(0,xt.jsx)(Ue.ToneMapping,{mode:sx(c.toneMapping.mode),resolution:c.toneMapping.resolution,whitePoint:c.toneMapping.whitePoint,middleGrey:c.toneMapping.middleGrey,minLuminance:c.toneMapping.minLuminance,averageLuminance:c.toneMapping.averageLuminance,adaptationRate:c.toneMapping.adaptationRate}),c.sepia.enabled===!0&&(0,xt.jsx)(Ue.Sepia,{intensity:c.sepia.intensity,blendFunction:zo.BlendFunction.NORMAL}),c.scanline.enabled===!0&&(0,xt.jsx)(Ue.Scanline,{density:c.scanline.density,blendFunction:zo.BlendFunction.OVERLAY}),c.pixelation.enabled===!0&&(0,xt.jsx)(Ue.Pixelation,{granularity:c.pixelation.granularity}),c.ramp.enabled===!0&&(0,xt.jsx)(Ue.Ramp,{rampType:cx(c.ramp.rampType),rampStart:c.ramp.rampStart,rampEnd:c.ramp.rampEnd,startColor:S,endColor:k,opacity:c.ramp.rampMask?1:c.ramp.opacity??.5,rampBias:c.ramp.rampBias,rampGain:c.ramp.rampGain,rampMask:c.ramp.rampMask,rampInvert:c.ramp.rampInvert})]})]})});function MM(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 CM(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function dx({hoveredObjectRef:e,...t}){let n=(0,$l.useThree)(l=>l.scene),r=(0,$l.useThree)(l=>l.invalidate),[i,o]=(0,Ln.useState)(null),a=(0,Ln.useCallback)(l=>o(l),[]),s=(0,Ln.useRef)({effect:null,objects:Bh});return(0,Ln.useEffect)(()=>{if(!i)return;let c=t.sceneConfig?.postProcessing?.outline.enabled===!0?SM(n):e&&MM(e)?[e]:Bh;s.current.effect===i&&CM(s.current.objects,c)||(s.current={effect:i,objects:c},i.selection.set(c),r())}),(0,xt.jsx)(_M,{...t,onOutlineEffect:a})}var Dn=require("react/jsx-runtime"),TM=1.5;function PM({captureRef:e}){let{gl:t,scene:n,camera:r,invalidate:i}=(0,Kd.useThree)();return(0,Ei.useEffect)(()=>{if(e)return e.current={gl:t,scene:n,camera:r,invalidate:i},()=>{e.current=null}},[e,t,n,r,i]),null}function Oh({children:e,camera:t,backgroundColor:n,shadows:r=!0,sceneConfig:i,selectedObjectRef:o,hoveredObjectRef:a,highlightOnHover:s,renderMode:l="demand",maxDpr:c=2,xrStore:p,rendererCaptureRef:u,preserveDrawingBuffer:d=!1,reduceGpuLoad:m,suspended:g=!1,onRendererCreated:v}){let M=m??kh(),w=M?Math.min(c,TM):c,x=r&&!M,S=(0,Ei.useMemo)(()=>n?{background:n}:i?.background.enabled?i.background.type==="color"?{background:i.background.color}:i.background.type==="image"&&i.background.imageUrl.trim()?{backgroundImage:`url("${i.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[n,i]),k=(0,Ei.useMemo)(()=>{if(n)return n;let D=i?.background;if(D?.enabled){if(D.type==="color")return D.color;if(D.type==="image"&&D.imageUrl.trim()||D.type==="environment")return null}return"#1c1c1d"},[n,i]),b=(0,Ei.useMemo)(()=>{let D=i?.postProcessing;return D?!!(D.glitch.enabled||D.noise.enabled||D.lensflare.enabled&&D.lensflare.animated):!1},[i?.postProcessing]),[_,y]=(0,Ei.useState)(!1),h=i?.environment,P=i?.groundShadows,A=(0,Ei.useMemo)(()=>{if(!h)return null;if(h.source==="custom"){let D=h.customEnvironmentUrl.trim();return Gd(D)?{files:D}:null}return{preset:h.preset}},[h]),C=(0,Dn.jsxs)(Dn.Fragment,{children:[(0,Dn.jsx)(PM,{captureRef:u}),(0,Dn.jsx)(Jv,{cameraConfig:t}),(0,Dn.jsx)(Yv,{active:b}),(0,Dn.jsx)(Kv,{color:k}),A?(0,Dn.jsx)(Cs,{onError:D=>console.warn("Failed to load environment map:",D),children:(0,Dn.jsx)(Ei.Suspense,{fallback:null,children:(0,Dn.jsx)(Zd.Environment,{...A,environmentIntensity:h?.intensity??.25,backgroundIntensity:h?.intensity??.25,background:i?.background.enabled===!0&&i.background.type==="environment"})})}):null,(0,Dn.jsx)(Zv,{rotation:h?.rotation??0}),p&&(0,Dn.jsx)($v,{onPresentingChange:y}),P?.enabled&&P.mode==="shadowCatcher"&&!_&&(0,Dn.jsx)(Zd.ContactShadows,{position:[0,P.height,0],scale:P.size,opacity:P.intensity,blur:P.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,Dn.jsx)(dx,{sceneConfig:i,selectedObjectRef:o,hoveredObjectRef:a,highlightOnHover:s,disabled:M})]});return(0,Dn.jsx)(Kd.Canvas,{frameloop:g?"never":l,onCreated:({gl:D})=>v?.(D),dpr:[1,w],shadows:x?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:S,camera:t??{fov:50},gl:{preserveDrawingBuffer:d,toneMapping:px.NoToneMapping,toneMappingExposure:1},children:p?(0,Dn.jsxs)(ux.XR,{store:p,children:[(0,Dn.jsx)(qv,{renderMode:l,suspended:g}),C]}):C})}var Qd=require("@react-three/drei"),Yl=require("three"),Uo=require("react");var Jd=e=>e*Math.PI/180;function hx(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:Jd(e?.minPolarAngle??0),maxPolarAngle:Jd(e?.maxPolarAngle??180),minAzimuthAngle:Jd(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:Jd(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}var Ih=require("react/jsx-runtime");function zh({controlsRef:e,onCameraChange:t,cameraLimits:n,controllerType:r="orbit",onPointerLockExit:i}){let o=r==="orbit",a=(0,Uo.useRef)(null);return(0,Uo.useEffect)(()=>{if(!o)return a.current?.lock(),()=>{a.current?.unlock()}},[o]),(0,Uo.useEffect)(()=>{o&&document.pointerLockElement&&document.exitPointerLock()},[o]),(0,Uo.useEffect)(()=>{if(o)return;let s=()=>{document.pointerLockElement||i?.()};return document.addEventListener("pointerlockchange",s),()=>{document.removeEventListener("pointerlockchange",s)}},[o,i]),(0,Uo.useEffect)(()=>{if(!o||!t||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let l=()=>{t(s.camera,s)};return s.addEventListener("update",l),()=>{s.removeEventListener("update",l)}},[o,e,t]),(0,Uo.useEffect)(()=>{if(!o||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let l=hx(n);s.minDistance=l.minDistance,s.maxDistance=l.maxDistance,s.minPolarAngle=l.minPolarAngle,s.maxPolarAngle=l.maxPolarAngle,s.minAzimuthAngle=l.minAzimuthAngle,s.maxAzimuthAngle=l.maxAzimuthAngle,s.boundaryEnclosesCamera=l.boundaryEnclosesCamera,s.boundaryFriction=l.boundaryFriction,s.setBoundary(l.panBoundary?new Yl.Box3(new Yl.Vector3(...l.panBoundary[0]),new Yl.Vector3(...l.panBoundary[1])):void 0)},[o,e,n?.minDistance,n?.maxDistance,n?.minPolarAngle,n?.maxPolarAngle,n?.minAzimuthAngle,n?.maxAzimuthAngle,n?.boundaryEnclosesCamera,n?.boundaryFriction,n?.panBoundary]),o?(0,Ih.jsx)(Qd.CameraControls,{ref:e,makeDefault:!0,smoothTime:.3,dollyToCursor:!0}):(0,Ih.jsx)(Qd.PointerLockControls,{ref:a,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}var Ri=require("react"),Zl=require("@react-three/fiber"),fx=require("three");var Uh=Symbol("react-immersive.model-node-id");function AM(e,t){Object.defineProperty(e,Uh,{value:t,configurable:!0})}function Fo(e){let t=new Map;e.traverse(l=>{if(!l.name)return;let c=t.get(l.name);c?c.push(l):t.set(l.name,[l])});let n=Object.create(null),r=new WeakMap,i=new Map,o=new Set(Array.from(t,([l,c])=>c.length===1?l:null).filter(l=>l!==null)),a=new Set,s=(l,c)=>{AM(l,c),n[c]=l,r.set(l,c),a.add(c)};for(let[l,c]of t)c.length===1&&s(c[0],l);for(let[l,c]of t){if(c.length<2)continue;let p=[];c.forEach((u,d)=>{let m=`${l} [${d+1}]`,g=m,v=2;for(;o.has(g)||a.has(g);)g=`${m}.${v++}`;s(u,g),p.push(g)}),i.set(l,p)}return{nodesById:n,idByNode:r,duplicateNames:i}}function Kl(e){return e[Uh]??e.name??null}function Xi(e,t){let n=null,r=[];return e.traverse(i=>{i[Uh]===t&&(n=i),i.name===t&&r.push(i)}),n??(r.length===1?r[0]:null)}var ai=require("react/jsx-runtime");function gx(e,t){if(!t)return e;let n=t*Math.PI/180,r=Math.cos(n),i=Math.sin(n);return[e[0]*r+e[2]*i,e[1],-e[0]*i+e[2]*r]}function EM(e,t){let[n,r,i]=e.center,o=e.radius,a=Math.hypot(t[0],t[1],t[2]),s=a>1e-6?[t[0]/a,t[1]/a,t[2]/a]:[0,1,0],l=o*2;return{position:[n+s[0]*l,r+s[1]*l,i+s[2]*l],target:e.center,extent:o,near:Math.max(o/100,.001),far:l+o*2}}function RM(e,t){let n=t[0]-e.center[0],r=t[1]-e.center[1],i=t[2]-e.center[2],o=Math.hypot(n,r,i);return{near:Math.max(o-e.radius,o*.01,.001),far:o+e.radius*2}}function kM(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var LM={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}]},DM={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function mx({light:e,shadows:t,shadowsEnabled:n,environmentRotation:r,modelBounds:i,objectBindings:o,nodeRefs:a}){let s=(0,Ri.useRef)(null),l=(0,Ri.useRef)(null),c=(0,Ri.useRef)(null),p=(0,Zl.useThree)(w=>w.camera),u=(0,Zl.useThree)(w=>w.scene),d=(0,Ri.useMemo)(()=>new fx.Vector3,[]),m=(0,Ri.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:gx(e.position,r),[e.position,e.attachedToCamera,e.attachment,r]);(0,Zl.useFrame)(()=>{let w=s.current??l.current??c.current;if(!w)return;if(e.attachedToCamera){w.position.copy(p.position);return}let x=e.attachment;if(!x)return;let S=o?Oo(o,x.objectId):null,b=(S?o?.[S]:void 0)?.modelObjectId??x.objectId,_=(S?a?.current[S]:void 0)??Xi(u,b);_&&(d.fromArray(x.offset),_.localToWorld(d),w.position.copy(d))});let g=n&&t.enabled&&e.castShadow,v=(0,Ri.useMemo)(()=>e.type==="directional"&&g&&i&&!e.attachedToCamera?EM(i,m):null,[e.type,e.attachedToCamera,g,i,m]),M=(0,Ri.useMemo)(()=>e.type==="spot"&&g&&i&&!e.attachedToCamera?RM(i,m):null,[e.type,e.attachedToCamera,g,i,m]);return(0,Ri.useEffect)(()=>{let w=s.current??c.current;if(!w)return;let[x,S,k]=kM(e,g,i);w.target.position.set(x,S,k),w.target.updateMatrixWorld()},[e,g,i]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,ai.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:v?.position??m,castShadow:g,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":v?.near??.5,"shadow-camera-far":v?.far??40,"shadow-camera-left":-(v?.extent??8),"shadow-camera-right":v?.extent??8,"shadow-camera-top":v?.extent??8,"shadow-camera-bottom":-(v?.extent??8)}):e.type==="point"?(0,ai.jsx)("pointLight",{ref:l,color:e.color,intensity:e.intensity,position:m,distance:e.distance,decay:e.decay,castShadow:g,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,ai.jsx)("spotLight",{ref:c,color:e.color,intensity:e.intensity,position:m,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:g,"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":M?.near??.5,"shadow-camera-far":M?.far??40}):e.type==="hemisphere"?(0,ai.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function Fh({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:r=0,environmentConfig:i,modelBounds:o,objectBindings:a,nodeRefs:s}){let l=e??LM,c=t??DM,p=i?.shadowLight,u=gx([5,10,5],r);return(0,ai.jsxs)(ai.Fragment,{children:[(0,ai.jsx)("ambientLight",{intensity:l.ambient.intensity,color:l.ambient.color}),l.lights.map(d=>(0,ai.jsx)(mx,{light:d,shadows:c,shadowsEnabled:n,environmentRotation:r,modelBounds:o,objectBindings:a,nodeRefs:s},d.id)),p?.enabled&&(0,ai.jsx)(mx,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:p.intensity,position:u,attachedToCamera:!1,castShadow:!0,shadowBias:p.bias,visible:!0},shadows:c,shadowsEnabled:n,environmentRotation:0,modelBounds:o,objectBindings:a,nodeRefs:s})]})}var me=require("react"),Da=require("@react-three/fiber");var Jl=require("@react-three/fiber"),Us=require("three"),Vo=require("three-stdlib"),Cx=require("three/examples/jsm/loaders/USDLoader.js");var NM=require("@react-three/drei"),BM=require("@react-three/fiber"),OM=require("react"),bx=require("three"),Is=require("three-stdlib");function IM(e){return{name:"RI_unlit_emissive_texture",async afterRoot(t){let n=e.json.materials??[],r=new Map;if(n.forEach(o=>{let a=!!o?.extensions?.KHR_materials_unlit,s=!!o?.pbrMetallicRoughness?.baseColorTexture;a&&!s&&o?.emissiveTexture&&o.name&&r.set(o.name,o.emissiveTexture.index)}),r.size===0||!t.scene)return;let i=new Map;await Promise.all([...r].map(async([o,a])=>{let s=await e.getDependency("texture",a);s&&(s.colorSpace=bx.SRGBColorSpace,i.set(o,s))})),t.scene.traverse(o=>{let a=Array.isArray(o.material)?o.material:o.material?[o.material]:[];for(let s of a){let l=s.name?i.get(s.name):void 0;l&&!s.map&&(s.map=l,s.needsUpdate=!0)}})}}}var Vh="https://assets.react-immersive.liveroom.dev/three-r184/draco/",jh="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function vx(e,t={},n){let{dracoDecoderPath:r=Vh,ktx2TranscoderPath:i=jh,meshopt:o=!0}=t;if(r){let a=new Is.DRACOLoader;a.setDecoderPath(r),e.setDRACOLoader(a)}if(o&&e.setMeshoptDecoder(Is.MeshoptDecoder),i&&n){let a=new Is.KTX2Loader().setTranscoderPath(i).detectSupport(n);e.setKTX2Loader(a)}e.register((a=>IM(a)))}var xx="KHR_materials_variants",yx="riMaterialVariants";function ka(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function zM(e){if(!ka(e)||!ka(e.extensions))return[];let t=e.extensions[xx];if(!ka(t)||!Array.isArray(t.variants))return[];let n=new Set;return t.variants.map((r,i)=>{let o=ka(r)&&typeof r.name=="string"&&r.name?r.name:`Variant ${i+1}`,a=o;for(let s=2;n.has(a);s+=1)a=`${o} (${s})`;return n.add(a),a})}function wx(e){let t=e.userData?.gltfExtensions;if(!ka(t))return[];let n=t[xx];return!ka(n)||!Array.isArray(n.mappings)?[]:n.mappings.filter(r=>ka(r)&&Number.isInteger(r.material)&&Array.isArray(r.variants)&&r.variants.every(Number.isInteger))}function Sx(e,t){if(t<0)return null;let n=e.find(r=>r.variants.includes(t));return n?n.material:null}function _x(e){let t=e.parser,n=zM(t?.json);if(!(!t||n.length===0))return e.scene.userData[yx]=n,{names:n,resolveMaterial:async(r,i)=>{let o={geometry:i.geometry,material:await t.getDependency("material",r),isPoints:i.isPoints,isLine:i.isLine};return t.assignFinalMaterial(o),o.material}}}function zs(e){let t=e.userData?.[yx];return Array.isArray(t)&&t.every(n=>typeof n=="string")?t:[]}var eu=class extends Us.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,r,i,o){this.loadAsset(n,i).then(r).catch(o)}async loadAsset(n,r){let i=FM(this.options.source),{format:o}=this.options.source;if(o==="obj")return UM(n,i,this.options.source,r);if(o==="fbx"){let l=Hh(this,new Vo.FBXLoader(i)),c=HM(n,this.options.source);c&&l.setResourcePath(c);let p=await l.loadAsync(n,r);return Gh(p,"FBXMesh",!1),{scene:p,animations:p.animations??[]}}if(o==="usdz"){let c=await Hh(this,new Cx.USDLoader(i)).loadAsync(n,r);return Gh(c,"USDZMesh",!1),{scene:c,animations:c.animations??[]}}let a=Hh(this,new Vo.GLTFLoader(i));vx(a,this.options.decoderConfig,this.options.renderer);let s=await a.loadAsync(n,r);return{scene:s.scene,animations:s.animations??[],materialVariants:_x(s)}}};vb(e=>{Jl.useLoader.clear(eu,e)});function Tx(e,t={},n,r){let i=(0,Jl.useThree)(s=>s.gl),o=Ab(e),a=n?{...o,format:n}:o;return(0,Jl.useLoader)(eu,e,s=>{s.configure({source:a,decoderConfig:t,renderer:i})},r)}async function UM(e,t,n,r){let i=await Mx(e,t,r),o=new Vo.OBJLoader(t),a=VM(i);if(a){let l=jM(a,e,n);if(l)try{let c=await Mx(l.url,t),u=new Vo.MTLLoader(t).parse(c,l.basePath);u.preload(),o.setMaterials(u)}catch(c){console.warn(`[react-immersive] Could not load OBJ material ${a}; rendering geometry with fallback materials.`,c)}}let s=o.parse(i);return Gh(s,"OBJMesh",!0),{scene:s,animations:[]}}function Gh(e,t,n){let r=new Set,i=0;e.traverse(o=>{if(!("isMesh"in o&&o.isMesh===!0)){o.name&&r.add(o.name);return}let s=o.name||`${t}_${++i}`;if(!n&&o.name){r.add(o.name);return}let l=s,c=2;for(;r.has(l);)l=`${s}_${c++}`;o.name=l,r.add(l)})}function Mx(e,t,n){let r=new Us.FileLoader(t);return r.setResponseType("text"),r.loadAsync(e,n)}function Hh(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function FM(e){let t=new Us.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(r=>{if(/^(?:blob:|data:)/i.test(r))return r;let i=nu(Ax(r).split(/[?#]/)[0]),o=n[i];if(o)return o;let a=tu(e.entryPath??""),s=nu(a?`${a}/${i}`:i);return n[s]??r}),t}function VM(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function jM(e,t,n){if(n.resourceUrls&&n.entryPath){let r=nu(`${tu(n.entryPath)}/${Ax(e)}`),i=n.resourceUrls[r];if(!i)return null;let o=tu(r);return{url:i,basePath:o?`${o}/`:""}}try{let r=new URL(e,t).href;return{url:r,basePath:Px(r)}}catch{return null}}function HM(e,t){if(t.resourceUrls&&t.entryPath){let n=tu(t.entryPath);return n?`${n}/`:""}return Px(e)}function Px(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function tu(e){let t=nu(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function nu(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(r=>r&&r!=="."))n===".."?t.pop():t.push(n);return t.join("/")}function Ax(e){try{return decodeURI(e)}catch{return e}}var ft=require("three"),Bx=require("three-stdlib");function Ex(e){let t=new Map;return e.map((n,r)=>{let o=n.name.trim()||`Animation ${r+1}`,a=t.get(o)??0;return t.set(o,a+1),{clip:n,sourceName:a===0?o:`${o} (${a+1})`,duration:n.duration}})}var mo=require("three");function Rx(e){let t=e._loopCount;return e.loop===mo.LoopPingPong&&(t&1)===1}function GM(e){return Rx(e)?e.getClip().duration-e.time:e.time}function kx({root:e,clips:t,getClipConfig:n,onChange:r}){let i=new mo.AnimationMixer(e),o=new Map;for(let{clip:A,sourceName:C}of t)o.set(C,i.clipAction(A));let a=new Map,s=new Set,l=new Map,c=1,p=A=>typeof A=="string",u=A=>p(A)?a.has(A)?[A]:[]:[...a.keys()],d=(A,C)=>{let D=iv(n(C));D==="once"?A.setLoop(mo.LoopOnce,1):D==="ping-pong"?A.setLoop(mo.LoopPingPong,1/0):A.setLoop(mo.LoopRepeat,1/0),A.clampWhenFinished=D==="once"},m=A=>{A.action.setEffectiveTimeScale(A.reverse?-A.speed:A.speed)},g=A=>{let C=a.get(A);C&&(C.action.stop(),a.delete(A))},v=(A,C={})=>{let D=o.get(A);if(!D||n(A)?.hidden)return;let B=Number.isFinite(C.fade)&&C.fade>0?C.fade:0,j=C.reverse??!1;if(!C.alongside)for(let[O,$]of[...a])O!==A&&(B>0?(a.delete(O),$.action.fadeOut(B),s.add($.action)):g(O));s.delete(D)&&D.stop();let W=D.getClip().duration,U=a.get(A),te=()=>{D.reset(),j&&(D.time=W),D.play()};if(!U)te(),B>0&&D.fadeIn(B);else{let O=j?D.time<=0:D.time>=W;U.finished&&O&&te(),D.paused=!1,D.enabled=!0,a.delete(A)}d(D,A),U={action:D,speed:n(A)?.speed??l.get(A)??c,reverse:j,finished:!1},U.speed=Pd(U.speed),m(U),a.set(A,U),r()},M=A=>{for(let C of u(A))a.get(C).action.paused=!0;r()},w=A=>{for(let C of u(A))g(C);if(!p(A)){for(let C of s)C.stop();s.clear()}r()},x=(A,C)=>{let D=Pd(A);p(C)?l.set(C,D):c=D;for(let B of u(C)){let j=a.get(B);l.set(B,D),j.speed=D,m(j)}r()},S=(A,C)=>{for(let D of u(C)){let B=a.get(D),j=B.action.getClip().duration,W=Math.min(Math.max(A,0),j);B.action.time=Rx(B.action)?j-W:W,B.finished&&(B.finished=!1,B.action.paused=!0)}i.update(0),r()},k=()=>{for(let[A,C]of[...a]){let D=n(A);if(D?.hidden){g(A);continue}d(C.action,A),D?.speed!==void 0&&(C.speed=Pd(D.speed),m(C))}r()},b=A=>{for(let C of a.values())C.action===A.action&&(C.finished=!0);r()};return i.addEventListener("finished",b),{play:v,pause:M,stop:w,setSpeed:x,seek:S,getState:()=>{let A=[...a].map(([D,B])=>({clip:D,status:B.finished?"finished":B.action.paused?"paused":"playing",time:GM(B.action),duration:B.action.getClip().duration,speed:B.speed,reverse:B.reverse})),C=A[A.length-1];return{currentClip:C?.clip??null,isPlaying:A.some(D=>D.status==="playing"),speed:C?.speed??c,time:C?.time??0,duration:C?.duration??0,active:A}},applyClipConfigs:k,isRunning:()=>{if(s.size>0)return!0;for(let{action:A}of a.values())if(!A.paused&&A.enabled)return!0;return!1},update:A=>{i.update(A);for(let C of s)(!C.enabled||C.getEffectiveWeight()<=0)&&(C.stop(),s.delete(C))},dispose:()=>{i.removeEventListener("finished",b),i.stopAllAction(),i.uncacheRoot(e),a.clear(),s.clear()}}}var si=require("three");function ru(e){if(Kb(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new si.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 si.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof si.Color&&n.emissive.copy(t.color)):(t.color instanceof si.Color&&n.color.copy(t.color),t.map instanceof si.Texture&&(n.map=t.map),t.emissive instanceof si.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof si.Texture&&(n.emissiveMap=t.emissiveMap));let i=["aoMap","aoMapIntensity","lightMap","lightMapIntensity","alphaMap","opacity","transparent","alphaTest","side","vertexColors","wireframe","depthTest","depthWrite","visible","toneMapped","fog"];for(let o of i)t[o]!==void 0&&(n[o]=t[o]);return n.needsUpdate=!0,n}function iu(e){if(Zb(e))return e.clone();let t=new si.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(co(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 ou(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=co(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=co(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 qi=require("three");function Lx(e,t,n,r){let i=Mi(t),o=Gl(n,i),a=Jb(r,t),s=Qb(r,t),l=ev(r,t);return a||s||l?kd(e.userData,t,o,n,a??[0,0],s??1,l??0):(Ld(e.userData,t),o)}function Fn(e,t,n,r){if(!n){Ld(e.userData,t);return}let i=Td[t];e[i]=Lx(e,t,n,r)}function au(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 qi.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??qi.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??qi.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(co(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(co(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new qi.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 qi.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 qi.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let r=rn(t,"texture"),i=rn(t,"metalnessMap"),o=rn(t,"roughnessMap"),a=rn(t,"emissiveMap"),s=rn(t,"alphaMap"),l=rn(t,"normalMap"),c=rn(t,"bumpMap"),p=rn(t,"aoMap"),u=rn(t,"displacementMap"),d=rn(t,"clearcoatMap"),m=rn(t,"clearcoatRoughnessMap"),g=rn(t,"clearcoatNormalMap"),v=rn(t,"anisotropyMap"),M=rn(t,"transmissionMap"),w=rn(t,"thicknessMap"),x=rn(t,"sheenColorMap"),S=rn(t,"sheenRoughnessMap"),k=rn(t,"specularIntensityMap"),b=rn(t,"specularColorMap");if(r?(e.map=Lx(e,"texture",r,t),e.color.set(n??"#ffffff")):(Ld(e.userData,"texture"),n&&(e.map=null,e.color.set(n))),Fn(e,"metalnessMap",i,t),t?.metalness!==void 0&&(e.metalness=t.metalness),Fn(e,"roughnessMap",o,t),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):a&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),Fn(e,"emissiveMap",a,t),t?.opacity!==void 0&&(e.opacity=t.opacity),Fn(e,"alphaMap",s,t),t?.alphaTest!==void 0&&(e.alphaTest=t.alphaTest),t?.alphaHash!==void 0&&(e.alphaHash=t.alphaHash),t?.dithering!==void 0&&(e.dithering=t.dithering),t?.blendingMode&&(e.blending=nv(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=tv(t.side)),Fn(e,"normalMap",l,t),l||t?.normalScale!==void 0){let _=t?.normalScale??Math.abs(co(e.userData.baseNormalScale).x);e.normalScale.set(_,t?.flipNormalY?-_:_)}if(Fn(e,"bumpMap",c,t),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),Fn(e,"aoMap",p,t),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),Fn(e,"displacementMap",u,t),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),Fn(e,"clearcoatMap",d,t),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),Fn(e,"clearcoatRoughnessMap",m,t),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),Fn(e,"clearcoatNormalMap",g,t),g||t?.clearcoatNormalScale!==void 0){let _=t?.clearcoatNormalScale??Math.abs(co(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(_,t?.flipClearcoatNormalY?-_:_)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),Fn(e,"sheenColorMap",x,t),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),Fn(e,"sheenRoughnessMap",S,t),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),Fn(e,"anisotropyMap",v,t),t?.transmission!==void 0&&(e.transmission=t.transmission),Fn(e,"transmissionMap",M,t),t?.thickness!==void 0&&(e.thickness=t.thickness),Fn(e,"thicknessMap",w,t),t?.attenuationColor&&e.attenuationColor.set(t.attenuationColor),t?.attenuationDistance!==void 0&&(e.attenuationDistance=t.attenuationDistance),t?.reflectivity!==void 0&&(e.reflectivity=t.reflectivity),t?.specularIntensity!==void 0&&(e.specularIntensity=t.specularIntensity),Fn(e,"specularIntensityMap",k,t),t?.specularColor&&e.specularColor.set(t.specularColor),Fn(e,"specularColorMap",b,t),e.transparent=e.opacity<1||e.transmission>0||e.blending!==qi.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function Ql(e){return e.material}function $i(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function vr(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function su(e,t){return Array.isArray(e)?e[t]:e}function Wh(e){e.updateMatrixWorld(!0),e.traverse(t=>{let n=t;n.isSkinnedMesh&&(n.skeleton?.update(),n.computeBoundingBox?.(),n.computeBoundingSphere?.())})}var La=require("react"),Dx=require("@react-three/fiber");function Nx(){let e=(0,Dx.useThree)(i=>i.gl.domElement),t=(0,La.useRef)(void 0),n=(0,La.useCallback)(i=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=i},[e]),r=(0,La.useCallback)(()=>{let i=t.current;i!==void 0&&(e.style.cursor=i,t.current=void 0)},[e]);return(0,La.useEffect)(()=>()=>{r()},[r]),{setCanvasCursor:n,restoreCanvasCursor:r}}var Xh=require("react/jsx-runtime");function lu(e,t,n){let r=n.get(e);r&&(t?.position?e.position.fromArray(t.position):e.position.copy(r.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],r.rotation.order):e.rotation.copy(r.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(r.scale),e.updateMatrix())}function Sn(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 Fs(e){let t=e,n=Number(t.clearcoat)>0,r=Number(t.sheen)>0,i=Number(t.anisotropy)>0,o=Number(t.transmission)>0,a=t.transparent===!1&&t.blending===ft.NormalBlending&&t.alphaToCoverage!==!0;return[Sn(t.map),Sn(t.aoMap),Sn(t.lightMap),Sn(t.bumpMap),Sn(t.normalMap,!0),t.normalMap?t.normalMapType:"",Sn(t.displacementMap),Sn(t.emissiveMap),Sn(t.metalnessMap),Sn(t.roughnessMap),i,Sn(i?t.anisotropyMap:null),n,Sn(n?t.clearcoatMap:null),Sn(n?t.clearcoatNormalMap:null,!0),Sn(n?t.clearcoatRoughnessMap:null),r,Sn(r?t.sheenColorMap:null),Sn(r?t.sheenRoughnessMap:null),Sn(t.specularColorMap),Sn(t.specularIntensityMap),o,Sn(o?t.transmissionMap:null),Sn(o?t.thicknessMap:null),Sn(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,t.side,a].join("|")}var WM={};function qh({url:e,objectBindings:t,selectedItem:n,itemMaterials:r,onItemClick:i,onItemHover:o,onItemDoubleClick:a,onItemContextMenu:s,onModelLoaded:l,onAnimationsReady:c,nodeRefsOut:p,onNodeRefsChange:u,materialRefsOut:d,panelHoveredItem:m,sceneConfig:g,zoomOnSelected:v=!0,highlightOnHover:M=!0,decoderConfig:w,modelFormat:x,onLoadProgress:S,explodeFactor:k=0,suspendBindingTransforms:b=!1,pulses:_=WM}){let y=Tx(e,w,x,S),h=(0,Da.useThree)(F=>F.invalidate),[P,A]=(0,me.useState)(null),C=(0,me.useRef)(null),{setCanvasCursor:D,restoreCanvasCursor:B}=Nx();(0,me.useEffect)(()=>{M||(A(null),o?.(null),B())},[M,o,B]);let j=(0,me.useMemo)(()=>Bx.SkeletonUtils.clone(y.scene),[y.scene]),W=(0,me.useMemo)(()=>Fo(j),[j]),U=W.nodesById,te=(0,me.useMemo)(()=>{let F=new WeakMap;return j.traverse(H=>{Wn(H)&&F.set(H,H.material)}),F},[j]),O=y.materialVariants,$=g?.model.materialVariant??null,le=$&&O?O.names.indexOf($):-1,[tt,xe]=(0,me.useState)(null);(0,me.useEffect)(()=>{if($&&le<0&&console.warn(`[react-immersive] The model has no material variant "${$}".`+(O?` Its variants are: ${O.names.join(", ")}.`:" It has no material variants.")),!O||le<0){xe(null);return}let F=!1,H=[];return j.traverse(q=>{if(!Wn(q)||!te.has(q))return;let ie=Sx(wx(q),le);ie!==null&&H.push(O.resolveMaterial(ie,q).then(ae=>[q,ae]))}),Promise.all(H).then(q=>{F||xe({scene:j,materials:new Map(q)})}).catch(q=>{F||console.warn(`[react-immersive] Material variant "${$}" failed to load.`,q)}),()=>{F=!0}},[j,te,O,le,$]);let nt=tt?.scene===j?tt.materials:void 0,ce=F=>nt?.get(F)??te.get(F)??Ql(F);(0,me.useEffect)(()=>{W.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(W.duplicateNames))},[W]);let Le=(0,me.useMemo)(()=>{let F=new WeakMap;return j.traverse(H=>{F.set(H,{position:H.position.clone(),rotation:H.rotation.clone(),scale:H.scale.clone()})}),F},[j]);(0,me.useEffect)(()=>{let F=!1,H=null,q=null,ie=window,ae=Object.entries(U).filter(([,qt])=>Wn(qt)),we=new ft.Box3,Pe=[],at=0;j.traverse(qt=>{!Wn(qt)||qt.userData[Ca]||(qt.castShadow=!1,qt.receiveShadow=!0)});let De=()=>{if(F)return;let qt=new Set,Me=we.getSize(new ft.Vector3),Ve=new ft.Vector3;for(let{name:hn,box:On}of Pe)On.getSize(Ve),Ve.x>Me.x*.7&&Ve.z>Me.z*.7&&Ve.y>Me.y*.4&&qt.add(hn);j.traverse(hn=>{if(!Wn(hn)||hn.userData[Ca])return;let On=Kl(hn);hn.castShadow=!On||!qt.has(On),hn.receiveShadow=!0}),h()},Rt=()=>{F||(ie.requestIdleCallback?H=ie.requestIdleCallback(vt,{timeout:100}):q=window.setTimeout(()=>vt(),0))},vt=qt=>{if(H=null,q=null,F)return;let Me=performance.now(),Ve=0;for(;at<ae.length&&!(Ve>0&&!(qt?qt.didTimeout?Ve<16:qt.timeRemaining()>1:performance.now()-Me<8));){let[hn,On]=ae[at];at+=1,Ve+=1;let hr=new ft.Box3().setFromObject(On);hr.isEmpty()||(Pe.push({name:hn,box:hr}),we.union(hr))}at<ae.length?Rt():De()};return Rt(),()=>{F=!0,H!==null&&ie.cancelIdleCallback?.(H),q!==null&&window.clearTimeout(q)}},[h,U,j]),(0,me.useEffect)(()=>{Wh(j)},[j]),(0,me.useEffect)(()=>{let F=new AbortController;return gd(j,F.signal),()=>{F.abort(),Nl(j)}},[j]);let he=(0,me.useMemo)(()=>{let F={};for(let[H,q]of Object.entries(t))F[q.modelObjectId??H]=H;return F},[t]),pt=(0,me.useMemo)(()=>Object.entries(t).map(([F,H])=>`${F}${H.modelObjectId??F}`).sort().join(""),[t]),Bt=(0,me.useMemo)(()=>Object.entries(t).map(([F,H])=>JSON.stringify([F,H.modelObjectId??F,H.transform??null])).sort().join(""),[t]),un=(0,me.useRef)(new Map);(0,me.useEffect)(()=>{let F=new Map,H=new Map;for(let[ae,we]of Object.entries(t)){if(!we.transform)continue;let Pe=U[we.modelObjectId??ae];Pe&&(F.set(Pe,we.transform),H.set(Pe,Rs(Pe)))}let q=new Set([...un.current.keys(),...F.keys()]);for(let ae of q){lu(ae,void 0,Le);for(let we of Rs(ae))ks(we)}j.updateMatrixWorld(!0);let ie=new Map;for(let ae of H.values())for(let we of ae)ie.has(we)||ie.set(we,we.matrixWorld.clone());for(let[ae,we]of F)lu(ae,we,Le);un.current=F,j.updateMatrixWorld(!0);for(let[ae,we]of ie)Ad(ae,we);h()},[j,U,Le,Bt,h]),(0,me.useEffect)(()=>()=>{for(let F of Rs(j))ks(F)},[j]);let Ie=(0,me.useMemo)(()=>{let F={};for(let[H,q]of Object.entries(t)){let ie=q.modelObjectId??H,ae=U[ie];if(!Wn(ae))continue;let we=ce(ae);we&&(F[H]=$i(we,Pe=>{let at=ru(Pe),De=iu(at??new ft.MeshStandardMaterial);return ou(De),De}))}return F},[U,pt,te,nt]);(0,me.useEffect)(()=>{d&&(d.current=Ie)},[Ie,d]),(0,me.useEffect)(()=>()=>{for(let F of Object.values(Ie))vr(F,H=>{pv(H.userData),H.dispose()})},[Ie]);let bt=g?.model.shading??"lit",Ot=g?.model.renderer??"pbr",dr=g?.wireframe.enabled??!1,de=g?.wireframe.color??"#93c5fd",Cr=g?.wireframe.opacity??1,Xt=(0,me.useMemo)(()=>{let F={};if(bt!=="unlit")return F;for(let[H,q]of Object.entries(Ie))F[H]=$i(q,ie=>{let ae=new ft.MeshBasicMaterial;return ae.color.copy(ie.color),ae.map=ie.map,ae.alphaMap=ie.alphaMap,ae.alphaTest=ie.alphaTest,ae.transparent=ie.transparent,ae.opacity=ie.opacity,ae.side=ie.side,ae});return F},[Ie,bt]),Et=(0,me.useMemo)(()=>{let F={};if(bt!=="normals")return F;for(let[H,q]of Object.entries(Ie))F[H]=$i(q,()=>new ft.MeshNormalMaterial);return F},[Ie,bt]),rt=(0,me.useMemo)(()=>{let F={};if(bt!=="lit"||Ot!=="matcap")return F;let H=Dd();for(let[q,ie]of Object.entries(Ie))F[q]=$i(ie,ae=>{let we=new ft.MeshMatcapMaterial;return we.matcap=H,we.color.copy(ae.color),we.alphaMap=ae.alphaMap,we.alphaTest=ae.alphaTest,we.side=ae.side,we});return F},[Ie,bt,Ot]);(0,me.useEffect)(()=>()=>{for(let F of Object.values(Xt))vr(F,H=>H.dispose());for(let F of Object.values(Et))vr(F,H=>H.dispose());for(let F of Object.values(rt))vr(F,H=>H.dispose())},[Xt,Et,rt]);let bn=F=>bt==="normals"?Et[F]:bt==="unlit"?Xt[F]:Ot==="matcap"?rt[F]:Ie[F],Tr=(0,me.useRef)(l);Tr.current=l,(0,me.useEffect)(()=>{Tr.current?.(j)},[j]);let Tn=(0,me.useMemo)(()=>{let F={};for(let[H,q]of Object.entries(t)){let ie=q.modelObjectId??H,ae=U[ie];ae&&(F[H]=ae)}return F},[U,pt]);(0,me.useEffect)(()=>(p.current=Tn,u?.(),()=>{p.current===Tn&&(p.current={})}),[Tn,p,u]);let Kt=(0,me.useRef)({});(0,me.useEffect)(()=>()=>{for(let F of Object.values(Kt.current))for(let[H,q]of Object.entries(F))q&&po(q,Mi(H));Kt.current={}},[]);let fe=(0,me.useMemo)(()=>{let F=new Map;for(let[H,q]of Object.entries(t)){let ie=m===q||m?.id===q.id||m?.modelObjectId===q.modelObjectId,ae=M&&(P===H||ie),we=ae||n===H;(ae||we)&&F.set(H,{emissive:ae,matcap:we})}return F},[t,M,P,n,m]),We=(0,me.useRef)(fe);We.current=fe,(0,me.useEffect)(()=>{let F=new Set;for(let[H,q]of Object.entries(t)){F.add(H);let ie=q.modelObjectId??H,ae=U[ie];if(!Wn(ae))continue;ae.visible=q.visible!==!1;let we=Ie[H];if(!we)continue;if(Ot!=="uv-checker"){let Me=bn(H);Me&&(ae.material=Me)}if(q.visible===!1)continue;let Pe=Xt[H],at=rt[H],De=r[H]??r[q.modelObjectId??H],Rt=q.style?.material,vt=Kt.current[H]??{};for(let Me of Wi){let Ve=rn(Rt,Me),hn=vt[Me];if(hn===Ve)continue;let On=Mi(Me);hn&&po(hn,On),Ve?(Ns(Ve,On,h),vt[Me]=Ve):delete vt[Me]}Object.keys(vt).length>0?Kt.current[H]=vt:delete Kt.current[H];let qt=De?.hex??Rt?.baseColor;vr(we,(Me,Ve)=>{let hn=Fs(Me);au(Me,Rt,qt);let On=Me.userData.reactImmersiveConfiguredEmissive;On?.isColor?On.copy(Me.emissive):Me.userData.reactImmersiveConfiguredEmissive=Me.emissive.clone();let hr=We.current.get(H);hr?.emissive&&Me.emissive.add(_a),hn!==Fs(Me)&&(Me.needsUpdate=!0);let $n=su(Pe,Ve);if($n){let mi=Fs($n);$n.color.copy(Me.color),$n.map=Me.map,$n.alphaMap=Me.alphaMap,$n.alphaTest=Me.alphaTest,$n.transparent=Me.transparent,$n.opacity=Me.opacity,$n.side=Me.side,mi!==Fs($n)&&($n.needsUpdate=!0)}let Pn=su(at,Ve);if(Pn){let mi=Fs(Pn);hr?.matcap?Pn.color.set(uo.color):Pn.color.copy(Me.color),Pn.map=Me.map,Pn.alphaMap=Me.alphaMap,Pn.alphaTest=Me.alphaTest,Pn.transparent=Me.transparent,Pn.opacity=Me.opacity,Pn.side=Me.side,mi!==Fs(Pn)&&(Pn.needsUpdate=!0)}})}for(let H of Object.keys(Kt.current))if(!F.has(H)){for(let[q,ie]of Object.entries(Kt.current[H]))ie&&po(ie,Mi(q));delete Kt.current[H]}h()},[t,U,Ie,Xt,Et,rt,r,bt,Ot,h]);let xn=(0,me.useRef)(new Map);(0,me.useEffect)(()=>{let F=xn.current,H=new Set([...F.keys(),...fe.keys()]),q=!1;for(let ie of H){let ae=F.get(ie),we=fe.get(ie),Pe=!!ae?.emissive!=!!we?.emissive,at=!!ae?.matcap!=!!we?.matcap;if(!Pe&&!at)continue;q=!0;let De=Ie[ie],Rt=rt[ie];De&&vr(De,(vt,qt)=>{let Me=vt.userData.reactImmersiveConfiguredEmissive;Pe&&Me?.isColor&&(vt.emissive.copy(Me),we?.emissive&&vt.emissive.add(_a));let Ve=su(Rt,qt);at&&Ve&&(we?.matcap?Ve.color.set(uo.color):Ve.color.copy(vt.color))})}xn.current=fe,q&&h()},[fe,Ie,rt,h]),fv({objectBindings:t,nodeMap:U,invalidate:h});let It=(0,me.useMemo)(()=>Object.entries(_).map(([F,H])=>({key:F,color:new ft.Color(H.color),speed:H.speed})),[_]),zt=(0,me.useRef)(new Set);(0,me.useEffect)(()=>{let F=new Set(It.map(({key:H})=>H));for(let H of zt.current){if(F.has(H)||!Ie[H])continue;let q=We.current.get(H)?.emissive;vr(Ie[H],ie=>{let ae=ie.userData.reactImmersiveConfiguredEmissive;ae?.isColor&&(ie.emissive.copy(ae),q&&ie.emissive.add(_a))})}zt.current=F,h()},[It,Ie,h]),(0,Da.useFrame)(({clock:F})=>{if(It.length===0)return;let H=F.getElapsedTime();for(let{key:q,color:ie,speed:ae}of It){let we=Ie[q];if(!we)continue;let Pe=(1-Math.cos(2*Math.PI*ae*H))/2,at=We.current.get(q)?.emissive;vr(we,De=>{let Rt=De.userData.reactImmersiveConfiguredEmissive;Rt?.isColor&&(De.emissive.copy(Rt).lerp(ie,Pe),at&&De.emissive.add(_a))})}h()}),(0,me.useEffect)(()=>{if(Ot==="uv-checker")return;let F=new Set(Object.values(Tn)),H=!1;j.traverse(q=>{if(!Wn(q)||F.has(q)||!te.has(q))return;let ie=nt?.get(q)??te.get(q);q.material!==ie&&(q.material=ie,H=!0)}),H&&h()},[j,Tn,te,nt,Ot,h]),(0,me.useEffect)(()=>{if(Ot!=="uv-checker")return;let F=hv(),H=[];return j.traverse(q=>{if(!Wn(q)||q.userData[Ca])return;let ie=q.material,ae=Array.isArray(ie)?ie:[ie],we=!!q.geometry.getAttribute("uv"),Pe=ae.map((De,Rt)=>{let vt=new ft.MeshBasicMaterial({color:we?"#ffffff":"#ff00ff",map:we?F:null,side:De.side});return vt.name=`${q.name||"mesh"}-uv-checker-${Rt}`,vt.toneMapped=!1,vt}),at=Array.isArray(ie)?Pe:Pe[0];q.material=at,H.push({node:q,original:ie,diagnostic:at})}),h(),()=>{for(let{node:q,original:ie,diagnostic:ae}of H){q.material=ie;let we=Array.isArray(ae)?ae:[ae];for(let Pe of we)Pe.dispose()}h()}},[j,Ot,h]),(0,me.useEffect)(()=>{if(!dr)return;let F=[];for(let[H,q]of Object.entries(t)){let ie=q.modelObjectId??H,ae=U[ie];if(!Wn(ae))continue;let we=new ft.MeshBasicMaterial({color:de,wireframe:!0,transparent:!0,opacity:Cr,depthTest:!1,depthWrite:!1,side:ft.DoubleSide,toneMapped:!1}),Pe=ae.clone(!1);Pe.name="",Pe.position.set(0,0,0),Pe.quaternion.identity(),Pe.scale.set(1,1,1),Pe.matrix.identity(),Pe.matrixAutoUpdate=!0,Pe.material=we,Pe.castShadow=!1,Pe.receiveShadow=!1,Pe.frustumCulled=!1,Pe.renderOrder=1,Pe.userData={isWireframeOverlay:!0},Pe.raycast=()=>{},ae.morphTargetInfluences&&(Pe.morphTargetInfluences=ae.morphTargetInfluences),ae.add(Pe),F.push({node:ae,overlay:Pe})}return h(),()=>{for(let{node:H,overlay:q}of F)H.remove(q),q.material.dispose()}},[dr,de,Cr,U,t,h]);let oe=(0,me.useMemo)(()=>Ex(y.animations),[y.animations]),ye=(0,me.useRef)(c);ye.current=c;let Ae=(0,me.useRef)(g);Ae.current=g;let ct=(0,me.useRef)(null),ht=(0,me.useRef)(new Set),Ke=(0,me.useRef)(0),wt=F=>{ht.current.forEach(H=>H(F))};(0,me.useEffect)(()=>{let F=kx({root:j,clips:oe,getClipConfig:q=>rv(Ae.current,q),onChange:()=>{wt(F.getState()),h()}});ct.current=F,ye.current?.({clips:oe.map(({sourceName:q})=>q),clipDetails:oe.map(({sourceName:q,duration:ie})=>({sourceName:q,duration:ie})),play:F.play,pause:F.pause,stop:F.stop,setSpeed:F.setSpeed,seek:F.seek,getState:F.getState,subscribe:q=>(ht.current.add(q),q(F.getState()),()=>{ht.current.delete(q)})}),wt(F.getState());let H=Ae.current?.animations.autoplayClip;return H&&F.play(H),()=>{F.dispose(),ct.current=null,wt(F.getState())}},[j,oe]),(0,me.useEffect)(()=>{g?.animations&&ct.current?.applyClipConfigs()},[g?.animations]),(0,Da.useFrame)((F,H)=>{let q=ct.current;if(q?.isRunning()){if(q.update(H),!b)for(let[ie,ae]of un.current)lu(ie,ae,Le);h(),Ke.current+=H,Ke.current>=.066&&(Ke.current=0,wt(q.getState()),Wh(j))}});let _e=(0,me.useMemo)(()=>(g?.model.rotation??[0,0,0]).map(F=>F*Math.PI/180),[g?.model.rotation]);(0,Da.useFrame)((F,H)=>{if(!C.current)return;let q=C.current.rotation;q.x=ft.MathUtils.lerp(q.x,_e[0],1-Math.exp(-5*H)),q.y=ft.MathUtils.lerp(q.y,_e[1],1-Math.exp(-5*H)),q.z=ft.MathUtils.lerp(q.z,_e[2],1-Math.exp(-5*H)),Math.abs(q.x-_e[0])<1e-4&&Math.abs(q.y-_e[1])<1e-4&&Math.abs(q.z-_e[2])<1e-4||h()});let qe=(0,me.useRef)([]),dt=(0,me.useRef)(0),pn=(0,me.useRef)(0),ur=(0,me.useMemo)(()=>new ft.Vector3,[]);(0,me.useEffect)(()=>{let F=new Map;for(let[De,Rt]of Object.entries(t)){let vt=U[Rt.modelObjectId??De];vt&&F.set(vt,Rt)}for(let De of qe.current)lu(De.node,F.get(De.node)?.transform,Le);pn.current=0,j.updateWorldMatrix(!0,!0);let H=new ft.Box3().setFromObject(j),q=H.getCenter(new ft.Vector3),ie=H.getSize(new ft.Vector3).length()*.5;dt.current=Number.isFinite(ie)?ie:0;let ae=[...F.keys()],we=new Set(ae),Pe=[],at=new ft.Vector3;for(let De of ae){if(!De.parent)continue;let Rt=De.parent,vt=!1;for(;Rt;){if(we.has(Rt)){vt=!0;break}Rt=Rt.parent}if(vt)continue;let qt=new ft.Box3().setFromObject(De);if(qt.isEmpty())continue;qt.getCenter(at);let Me=at.clone().sub(q);Me.lengthSq()<1e-8||(Me.normalize(),Pe.push({node:De,restLocalPos:De.position.clone(),restWorldPos:De.getWorldPosition(new ft.Vector3),worldDir:Me,parentInverse:new ft.Matrix4().copy(De.parent.matrixWorld).invert()}))}qe.current=Pe,h()},[j,U,pt,Bt,Le,h]),(0,me.useEffect)(()=>{h()},[k,h]),(0,Da.useFrame)((F,H)=>{let q=qe.current;if(q.length===0)return;let ie=Math.min(Math.max(k,0),1),ae=pn.current;if(Math.abs(ae-ie)<1e-4){if(ae===ie)return;pn.current=ie}else pn.current=ft.MathUtils.lerp(ae,ie,1-Math.exp(-6*H)),h();let we=pn.current*dt.current;for(let Pe of q)ur.copy(Pe.worldDir).multiplyScalar(we).add(Pe.restWorldPos).applyMatrix4(Pe.parentInverse),Pe.node.position.copy(ur)});let en=F=>{let H=F;for(;H;){let q=Kl(H),ie=q?he[q]:void 0;if(ie&&t[ie])return[ie,t[ie]];H=H.parent}return null},Hn=F=>{let H=en(F);if(!H)return null;let[q,ie]=H;return U[ie.modelObjectId??q]??null},Xr=Nd(F=>{let H=en(F);return H&&H[1].selectable!==!1?H[1]:null},s,Hn),pr=F=>{if(Xr.consumeClick())return;let H=en(F.object);if(!H)return;let[,q]=H;q.selectable!==!1&&(F.stopPropagation(),i(q,Bs(F,Hn(F.object))))},to=F=>{let H=en(F.object);if(!H)return;let[,q]=H;if(q.selectable===!1)return;a?.(q,Bs(F,Hn(F.object)))&&F.stopPropagation()},aa=F=>{if(!M)return;let H=en(F.object);if(!H)return;let[q,ie]=H;ie.hoverable!==!1&&(F.stopPropagation(),D("pointer"),A(q),o?.(ie))},tn=F=>{M&&(F.stopPropagation(),B(),A(null),o?.(null))},Pr=(0,me.useMemo)(()=>!ob(j),[j]);return(0,Xh.jsx)("group",{ref:C,children:(0,Xh.jsx)("primitive",{object:j,...Pr?{onClick:pr,onDoubleClick:to,...s?{onPointerDown:Xr.onPointerDown}:{},...M?{onPointerOver:aa,onPointerOut:tn}:{}}:{}})})}var $e=require("react");var zu=require("@react-three/fiber");var Jt=require("three");var $t=require("three");function zx(e){let t={};for(let[n,r]of Object.entries(e))t[r.modelObjectId??n]=n;return t}function Yh(e){let t=e,n=null;for(;t;){let r=t.userData?.ri_name;if(typeof r=="string"&&r)return r;!n&&t.name&&(n=t.name),t=t.parent}return n}function Ux(e,t){return e||(t?t.modelObjectId??t.id:null)}function uu(e,t){let n=Yh(e);if(!n)return null;let r=t.keyByModelObject[n]??n,i=t.objectBindings[r];return i?{key:r,binding:i}:null}var Vs=new $t.Vector3,$h=new $t.Vector3,XM=new $t.Matrix4,Ox=new $t.Matrix4,cu=new $t.Matrix4,qM=new $t.Matrix4,du=new $t.Matrix4,$M=new $t.Matrix4,YM=new $t.Matrix4,KM=new $t.Vector3,ZM=new $t.Vector3,jo=new $t.Vector3,Ix=new $t.Quaternion,JM=new $t.Euler;function QM(e,t,n,r,i){let o=!!(n?.position||n?.rotation||n?.scale),a=!!(i&&i.factor>0&&i.radius>0);if(!o&&!a){e.matrixAutoUpdate=!0,e.position.copy(t.position),e.rotation.copy(t.rotation),e.scale.copy(t.scale),e.updateMatrix(),e.updateWorldMatrix(!0,!1);return}Ox.compose(t.position,Ix.setFromEuler(t.rotation),t.scale);let s=n?.rotation;cu.compose(KM.fromArray(n?.position??[0,0,0]),Ix.setFromEuler(JM.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),ZM.fromArray(n?.scale??[1,1,1])),cu.premultiply(r).multiply(qM.copy(r).invert()),e.parent?.updateWorldMatrix(!0,!1);let l=e.parent?.matrixWorld??XM;if(du.multiplyMatrices(l,Ox).premultiply(cu),a&&i){let c=e;for(;c.parent&&!c.userData.ri_name;)c=c.parent;let p=c.userData.ri_center;Array.isArray(p)&&p.length===3?jo.fromArray(p).applyMatrix4(r).applyMatrix4(cu):jo.setFromMatrixPosition(du),jo.sub(i.centre),jo.lengthSq()>1e-8&&(jo.normalize().multiplyScalar(i.factor*i.radius),du.premultiply(YM.makeTranslation(jo.x,jo.y,jo.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices($M.copy(l).invert(),du),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function pu(e,t){if(!Wn(e)&&!e.userData.riLogicalObject)return;let n=uu(e,t);if(!n)return;let r=Fx(e);if(r.rest??(r.rest={position:e.position.clone(),rotation:e.rotation.clone(),scale:e.scale.clone()}),t.suspendTransforms)return;if(t.placementFrame&&!e.userData.riLogicalObject){QM(e,r.rest,n.binding.transform,t.placementFrame,t.explode);return}let i=r.rest,o=n.binding.transform;o?.position?e.position.fromArray(o.position):e.position.copy(i.position),o?.rotation?e.rotation.set(o.rotation[0],o.rotation[1],o.rotation[2],i.rotation.order):e.rotation.copy(i.rotation),o?.scale?e.scale.fromArray(o.scale):e.scale.copy(i.scale);let a=t.explode;if(a&&a.factor>0&&a.radius>0){e.updateWorldMatrix(!0,!1),$h.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let l=s.userData.ri_center;Array.isArray(l)&&l.length===3?Vs.fromArray(l).applyMatrix4(e.matrixWorld).sub(a.centre):Vs.copy($h).sub(a.centre),Vs.lengthSq()>1e-8&&(Vs.normalize().multiplyScalar(a.factor*a.radius).add($h),e.parent&&e.parent.worldToLocal(Vs),e.position.copy(Vs))}e.updateMatrix(),e.updateWorldMatrix(!0,!1)}function js(e,t){e.traverse(n=>pu(n,t))}function Fx(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function eC(e,t,n,r){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,r])}function tC(e){if(e.textures){for(let t of Wi){let n=e.textures[t];n&&po(n,Mi(t))}e.textures=void 0}}function nC(e,t,n){let r=e.textures??{};for(let i of Wi){let o=rn(t,i),a=r[i];if(a===o)continue;let s=Mi(i);a&&po(a,s),o?(Ns(o,s,n),r[i]=o):delete r[i]}e.textures=Object.keys(r).length>0?r:void 0}function rC(e,t){if(t.shadingMode==="normals")return $i(e,()=>new $t.MeshNormalMaterial);if(t.shadingMode==="unlit")return $i(e,n=>{let r=new $t.MeshBasicMaterial;return r.color.copy(n.color),r.map=n.map,r.alphaMap=n.alphaMap,r.alphaTest=n.alphaTest,r.transparent=n.transparent,r.opacity=n.opacity,r.side=n.side,r});if(t.rendererMode==="matcap"){let n=Dd();return $i(e,r=>{let i=new $t.MeshMatcapMaterial;return i.matcap=n,i.color.copy(r.color),i.alphaMap=r.alphaMap,i.alphaTest=r.alphaTest,i.side=r.side,i})}return e}function iC(e,t){if(!Wn(e))return;let r=Fx(e);r.original??(r.original=Ql(e));let i=uu(e,t);if(!i){r.original&&(e.material=r.original),e.visible=!0;return}let{key:o,binding:a}=i;e.visible=a.visible!==!1,pu(e,t);let s=t.itemMaterials?.[o]?.hex??t.itemMaterials?.[a.modelObjectId??o]?.hex,l=t.highlightOnHover!==!1&&o===t.hoveredKey,c=eC(a,s,t,l);if(r.signature===c&&r.display){e.material=r.display;return}let p=a.style?.material;if(nC(r,p,t.invalidate),!r.physical){let u=r.original??Ql(e);if(!u)return;r.physical=$i(u,d=>{let m=ru(d),g=iu(m??new $t.MeshStandardMaterial);return ou(g),g})}vr(r.physical,u=>{au(u,p,s??p?.baseColor),l&&(u.emissive.add(_a),u.color.lerp(lv,cv)),u.needsUpdate=!0}),r.display&&r.display!==r.physical&&vr(r.display,u=>u.dispose()),r.display=rC(r.physical,t),r.signature=c,e.material=r.display}function Vx(e,t){e.traverse(n=>iC(n,t))}function Kh(e){e.traverse(t=>{if(!Wn(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&&vr(n.display,r=>r.dispose()),n.physical&&vr(n.physical,r=>r.dispose()),tC(n),delete t.userData.riVisuals)})}var Hx=new Jt.Matrix4().makeRotationX(Math.PI/2),jx=Hx.clone().invert();function oC(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 aC(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 hu=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 r=new Jt.Box3(new Jt.Vector3(...n.minimum),new Jt.Vector3(...n.maximum)).applyMatrix4(jx),i=new Jt.Group;i.name=n.name,i.userData.ri_name=n.name,i.userData.riLogicalObject=!0,i.userData.ri_center=r.getCenter(new Jt.Vector3).toArray();let o=new Jt.Mesh(this.geometry,this.material);o.visible=!1,o.raycast=()=>{},o.position.copy(r.getCenter(new Jt.Vector3)),o.scale.copy(r.getSize(new Jt.Vector3)),i.add(o),this.group.add(i),this.objects.set(n.name,i)}this.signature="",this.lastContext=null}nodesByBinding(t){let n={};for(let[r,i]of this.objects){let o=t.keyByModelObject[r]??r;t.objectBindings[o]&&(n[o]=i)}return n}sync(t,n,r=!1){if(!r&&!this.lastDragging&&t===this.lastContext&&this.lastEffective)return this.lastEffective;this.lastContext=t,this.lastDragging=r;let i={...t,suspendTransforms:!1},o=n?t.objectBindings[n]:void 0,a=o?this.objects.get(o.modelObjectId??n):void 0;r&&a&&o&&(i={...i,objectBindings:{...t.objectBindings,[n]:{...o,transform:{position:a.position.toArray(),rotation:[a.rotation.x,a.rotation.y,a.rotation.z],scale:a.scale.toArray()}}}});for(let l of this.objects.values())r&&l===a||pu(l,i);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([l,c])=>`${l}:${c.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[l,c]of this.objects)c.matrix.equals(new Jt.Matrix4)||this.transforms.set(l,Hx.clone().multiply(c.matrix).multiply(jx))}return this.lastEffective=i,i}updateBounds(t){if(!t)return;let n=r=>{if(this.tileVersions.get(r)!==this.version){if(r.boundingVolume.box&&this.tileVersions.get(r)!==this.version){let i=this.originalBounds.get(r);i||(i={box:[...r.boundingVolume.box],error:r.geometricError},this.originalBounds.set(r,i));let o=oC(i.box),a=o.clone(),s=1;for(let c of r.extras?.featureIds??[]){let p=this.transforms.get(c);p&&(a.union(o.clone().applyMatrix4(p)),s=Math.max(s,p.getMaxScaleOnAxis()))}let l=aC(a);r.boundingVolume.box=l,r.geometricError=i.error*s,r.engineData?.boundingVolume?.setObbData(l,r.engineData.transform),this.tileVersions.set(r,this.version)}r.children?.forEach(n)}};n(t)}dispose(){this.group.clear(),this.objects.clear(),this.geometry.dispose(),this.material.dispose()}};var Zh=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),ec=16,Jh=1.25,sC=1.5,lC=1.25,cC=500,dC=3e3,Gx=5e3,Wx=2e3,uC=.9;function Xx(e){return e.full&&(e.wanting||e.usage>1)}function qx(e){return e.loosened?dC:cC}function $x(e){let t=e.factor/lC;return t<=1+1e-6?1:t}function Yx(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<uC&&$x(e)>e.tooFine}function Kx(e,t){let{now:n}=t,r=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(Xx(t)){if(n-r.changedAt<qx(r))return r;let i=Math.max(r.tooFine,r.factor);return r.factor>=ec?r.loosened&&r.tooFine===i?r:{...r,loosened:!0,tooFine:i,changedAt:n}:{factor:Math.min(ec,r.factor*sC),loosened:!0,tooFine:i,raisedAt:n,changedAt:n}}return r.loosened&&!t.wanting?{...r,loosened:!1,changedAt:n}:Yx(r,t)&&n-r.raisedAt>=Gx&&n-r.changedAt>=Wx?{...r,factor:$x(r),changedAt:n}:r}function Zx(e,t){let{now:n}=t;return Xx(t)?e.factor>=ec&&e.loosened?null:Math.max(0,qx(e)-(n-e.changedAt)):e.loosened&&!t.wanting?0:Yx(e,t)?Math.max(0,Gx-(n-e.raisedAt),Wx-(n-e.changedAt)):null}function ty(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function Qh(e){if(!e)return null;let t=e.length,n=e.indexOf("?"),r=e.indexOf("#");n!==-1&&(t=Math.min(t,n)),r!==-1&&(t=Math.min(t,r));let i=e.lastIndexOf(".",t),o=e.lastIndexOf("/",t),a=e.indexOf("://");return a!==-1&&a+2===o||i===-1||i<o?null:e.substring(i+1,t)||null}var fu,tc=(fu=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:n}=this,r,i=()=>{n.delete(r),e()};return r=t?t.requestAnimationFrame(i):requestAnimationFrame(i),n.set(r,e),r}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)})}},lh(fu,"pending",new Map),lh(fu,"session",null),fu),Jx=2**30,ic=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 r=e(t),i=e(n);return r<i?-1:+(r>i)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*Jx,this.maxBytesSize=.4*Jx,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:r}=this;r.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 r=this.usedSet,i=this.itemList,o=this.callbacks;return i.push(e),r.add(e),n.set(e,Date.now()),o.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,n=this.itemSet,r=this.itemList,i=this.bytesMap,o=this.callbacks,a=this.loadedSet;if(n.has(e)){this.cachedBytes-=i.get(e)||0,i.delete(e),o.get(e)(e);let s=r.indexOf(e);return r.splice(s,1),t.delete(e),n.delete(e),o.delete(e),a.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:n,loadedSet:r}=this;n.has(e)&&(t===!0?r.add(e):r.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:r,itemSet:i,usedSet:o,loadedSet:a,callbacks:s,bytesMap:l,minBytesSize:c,maxBytesSize:p}=this,u=r.length-o.size,d=r.length-a.size,m=Math.max(Math.min(r.length-t,u),0),g=this.cachedBytes-c,v=this.unloadPriorityCallback||this.defaultPriorityCallback,M=!1,w=m>0&&u>0||d&&r.length>n;if(u&&this.cachedBytes>c||d&&this.cachedBytes>p||w){r.sort((h,P)=>{let A=o.has(h);if(A===o.has(P)){let C=a.has(h);return C===a.has(P)?-v(h,P):C?1:-1}else return A?1:-1});let x=Math.max(t*e,m*e),S=Math.ceil(Math.min(x,u,m)),k=Math.max(e*g,e*c),b=Math.min(k,g),_=0,y=0;for(;this.cachedBytes-y>p||r.length-_>n;){let h=r[_],P=l.get(h)||0;if(o.has(h)&&a.has(h)||this.cachedBytes-y-P<p&&r.length-_<=n)break;y+=P,_++}for(;y<b||_<S;){let h=r[_],P=l.get(h)||0;if(o.has(h)||this.cachedBytes-y-P<c&&_>=S)break;y+=P,_++}r.splice(0,_).forEach(h=>{this.cachedBytes-=l.get(h)||0,s.get(h)(h),l.delete(h),i.delete(h),s.delete(h),a.delete(h),o.delete(h)}),M=_<m||y<g&&_<u,M&&(M=_>0)}M&&(this.unloadingHandle=tc.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){tc.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},pC=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Yi=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=>{tc.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((r,i)=>{let o=this.items,a=this.callbacks;n.resolve=r,n.reject=i,o.unshift(e),a.set(e,n),this.autoUpdate&&this.scheduleJobRun()}),n.promise}remove(e){let t=this.items,n=this.callbacks,r=t.indexOf(e);if(r!==-1){let i=n.get(e);i.promise.catch(o=>{if(o.name!=="AbortError")throw o}),i.reject(new pC),t.splice(r,1),n.delete(e)}}removeByFilter(e){let{items:t}=this;for(let n=0;n<t.length;n++){let r=t[n];e(r)&&(this.remove(r),n--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,n=this.maxJobs,r=0,i=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;n>this.currJobs&&e.length>0&&r<n;){this.currJobs++,r++;let o=e.pop(),{callback:a,resolve:s,reject:l}=t.get(o);t.delete(o);let c;try{c=a(o)}catch(p){l(p),i();continue}c instanceof Promise?c.then(s).catch(l).finally(i):(s(c),i())}}flush(e){let{items:t,callbacks:n}=this,r=t.indexOf(e);if(!n.has(e))return;let{callback:i,resolve:o,reject:a}=n.get(e);n.delete(e),t.splice(r,1);let s;try{s=i(e)}catch(l){a(l);return}return s instanceof Promise?s.then(o).catch(a):o(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},xu=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,r=null){this.originQueues.forEach((l,c)=>{l.running||this.originQueues.delete(c)});let i=e===null?null:ty(e),o=this.originQueues.get(i);o||(o=new Yi,o.maxJobs=this._maxJobsPerOrigin,o.priorityCallback=this._priorityCallback,this.originQueues.set(i,o));let a=this._itemQueues.get(t);if(a&&a!==o&&a.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,o);let s=o.add(t,n);return r!==null&&(r.aborted?this.remove(t):r.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 Oa=6378137,hC=1/298.257223563,tm=6356752314245179e-9,mu={inView:!1,error:1/0,distanceFromCamera:1/0};function yu(e){return e===4||e===-1}function fo(e,t){return wu(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function wu(e){return!!e.traversal}function oc(e){let{children:t}=e,n=t.length===0||wu(t[t.length-1]),r=!e.internal.hasUnrenderableContent||yu(e.internal.loadingState);return n&&r}function Na(e){return e.traversal.unconditionallyRefine}function nc(e,t){if(wu(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,mu),e.traversal.inFrustum=mu.inView,e.traversal.error=mu.error,e.traversal.distanceFromCamera=mu.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 em(e,t,n=!1){if(nc(e,t),n?t.markTileUsed(e):gu(e),Na(e)&&oc(e)){let r=e.children;for(let i=0,o=r.length;i<o;i++)em(r[i],t,n)}}function ny(e,t){if(nc(e,t),e.traversal.usedLastFrame&&(gu(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||Na(e))&&oc(e))){let n=e.children;for(let r=0,i=n.length;r<i;r++)ny(n[r],t)}}function gu(e){e.traversal.used=!0}function mC(e,t){return!(e.traversal.error<=t.errorTarget&&!Na(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!oc(e))}function ry(e,t){let{frameCount:n}=t,{children:r}=e;for(let i=0,o=r.length;i<o;i++){let a=r[i];fo(a,n)&&(a.traversal.active&&(a.traversal.kicked=!0,a.traversal.active=!1),ry(a,t))}}function Qx(e){return!Na(e)&&(!e.internal.hasContent||yu(e.internal.loadingState))}function iy(e,t){if(nc(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(!mC(e,t)){gu(e);return}let r=!1,i=!1,o=e.children;for(let a=0,s=o.length;a<s;a++){let l=o[a];iy(l,t),r||(r=fo(l,t.frameCount)),i||(i=l.traversal.inFrustum)}if(e.refine==="REPLACE"&&!i&&o.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let a=0,s=o.length;a<s;a++)em(o[a],t,!0);return}if(gu(e),e.refine==="REPLACE"&&r&&(t.loadSiblings||t.loadAncestors))for(let a=0,s=o.length;a<s;a++)em(o[a],t)}function oy(e,t){let n=t.frameCount;if(!fo(e,n))return;let r=e.children,i=!1;for(let a=0,s=r.length;a<s;a++){let l=r[a];i||(i=fo(l,n))}if(!i)e.traversal.isLeaf=!0;else{for(let s=0,l=r.length;s<l;s++)oy(r[s],t);let a=!0;for(let s=0,l=r.length;s<l;s++){let c=r[s];if(fo(c,n)){let p=!Na(c),u=!c.internal.hasContent||yu(c.internal.loadingState);p&&u||c.traversal.allChildrenLoaded||(a=!1)}}e.traversal.allChildrenLoaded=a}let o=!0;for(let a=0,s=r.length;a<s;a++){let l=r[a];fo(l,t.frameCount)&&!l.traversal.allUsedChildrenProcessed&&(o=!1)}e.traversal.allUsedChildrenProcessed=o&&oc(e)}function ay(e,t){if(!fo(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!Na(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!Na(e)&&(e.traversal.active=!0,oc(e)&&e.internal.hasContent&&!yu(e.internal.loadingState)))for(let i=0,o=n.length;i<o;i++)ny(n[i],t);return}let r=n.length>0;for(let i=0,o=n.length;i<o;i++){let a=n[i];ay(a,t),fo(a,t.frameCount)&&!(a.traversal.active&&Qx(a))&&!a.traversal.allChildrenReady&&(r=!1)}e.traversal.allChildrenReady=r,e.refine==="REPLACE"&&!r&&e.traversal.wasSetActive&&Qx(e)&&(e.traversal.active=!0,ry(e,t))}function sy(e,t){nc(e,t);let n=fo(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||wu(e)&&e.traversal.usedLastFrame){let r=!1,i=!1;n?(r=e.traversal.active,i=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):nc(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(r&&t.stats.active++,i&&t.stats.visible++,e.traversal.wasSetActive!==r&&t.invokeOnePlugin(a=>a.setTileActive&&a.setTileActive(e,r)),e.traversal.wasSetVisible!==i&&t.invokeOnePlugin(a=>a.setTileVisible&&a.setTileVisible(e,i))):e.internal.hasRenderableContent||(i=e.traversal.isLeaf,e.traversal.wasSetVisible!==i&&t.invokeOnePlugin(a=>a.setEmptyTileVisible&&a.setEmptyTileVisible(e,i))),e.traversal.visible=i,e.traversal.active=r;let o=e.children;for(let a=0,s=o.length;a<s;a++){let l=o[a];sy(l,t)}}}function fC(e,t){iy(e,t),oy(e,t),ay(e,t),sy(e,t)}function gC(e){let t=null;return()=>{t===null&&(t=tc.requestAnimationFrame(()=>{t=null,e()}))}}function bC(e,t=null,n=null){let r=[];for(r.push(e),r.push(null),r.push(0);r.length>0;){let i=r.pop(),o=r.pop(),a=r.pop();if(t&&t(a,o,i)){n&&n(a,o,i);return}let s=a.children;if(s)for(let l=s.length-1;l>=0;l--)r.push(s[l]),r.push(a),r.push(i+1);n&&n(a,o,i)}}var ey=Symbol("PLUGIN_REGISTERED"),Ho={inView:!0,error:0,distance:1/0},vC=(e,t)=>{let n=e.priority||0,r=t.priority||0;return n===r?!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>r?1:-1},xC=(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,yC=(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,Hs=(e,t)=>{let n=e.priority??1/0,r=t.priority??1/0;if(n!==r)return n>r?1:-1;if(!e.internal||!t.internal)return 0;let i=e.internal.renderer,o=t.internal.renderer,a=!i.loadAncestors,s=!o.loadAncestors;return a&&s?xC(e,t):vC(e,t)},nm=new ic;nm.unloadPriorityCallback=yC;var rc=new xu;rc.maxJobsPerOrigin=25,rc.priorityCallback=Hs;var bu=new Yi;bu.maxJobs=5,bu.priorityCallback=Hs;var vu=new Yi;vu.maxJobs=25,vu.priorityCallback=(e,t)=>{let n=e.parent,r=t.parent;return n===r?0:n?r?Hs(n,r):-1:1};var rm=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,r=e.inCacheSinceLoad+ +!!t;return r===0?1:1-n/r}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof Yi){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=nm,this.downloadQueue=rc,this.parseQueue=bu,this.processNodeQueue=vu,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=gC(()=>{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[ey]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,n=e.priority||0,r=t.length;for(let i=0;i<t.length;i++)if((t[i].priority||0)>n){r=i;break}t.splice(r,0,e),e[ey]=!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 r=e(t[n]);if(r)return r}return null}invokeAllPlugins(e){let t=[...this.plugins,this],n=[];for(let r=0;r<t.length;r++){let i=e(t[r]);i&&n.push(i)}return n.length===0?null:Promise.all(n)}traverse(e,t,n=!0){this.root&&bC(this.root,(r,...i)=>(n&&this.ensureChildrenArePreprocessed(r,!0),e?e(r,...i):!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:r,downloadQueue:i,parseQueue:o,processNodeQueue:a}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(c=>c.loadRootTileset&&c.loadRootTileset()).then(c=>{let p=this.rootURL;p!==null&&this.invokeAllPlugins(u=>p=u.preprocessURL?u.preprocessURL(p,null):p),this.rootLoadingState=4,this.rootTileset=c,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:c,url:p}),this.dispatchEvent({type:"load-root-tileset",tileset:c,url:p})}).catch(c=>{this.rootLoadingState=-1,console.error(c),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:c,url:this.rootURL})})),!r)return;let s=null;if(this.invokeAllPlugins(c=>{if(c.doTilesNeedUpdate){let p=c.doTilesNeedUpdate();s=s===null?p:!!(s||p)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),n.inFrustum=0,n.used=0,n.active=0,n.visible=0,n.tilesProcessed=0,this.frameCount++,t.forEach(c=>e.markUnused(c)),t.clear(),this.prepareForTraversal(),fC(r,this),this.removeUnusedPendingTiles();let l=this.queuedTiles;l.sort(e.unloadPriorityCallback);for(let c=0,p=l.length;c<p&&!e.isFull();c++)this.requestTileContents(l[c]);l.length=0,e.scheduleUnload(),(i.running||o.running||a.running)===!1&&this.isLoading===!0&&(this.cachedSinceLoadComplete.clear(),n.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1),this.dispatchEvent({type:"update-after"})}resetFailedTiles(){this.rootLoadingState===-1&&(this.rootLoadingState=0);let e=this.stats;e.failed!==0&&(this.traverse(t=>{t.internal.loadingState===-1&&(t.internal.loadingState=0)},null,!1),e.failed=0)}calculateTileViewErrorWithPlugin(e,t){this.calculateTileViewError(e,t);let{errorFalloff:n,errorFalloffDensity:r}=this;if(n>0&&Number.isFinite(t.distanceFromCamera)){let s=t.distanceFromCamera*r;t.error-=n*(1-Math.exp(-s*s))}let i=null,o=0,a=1/0;this.invokeAllPlugins(s=>{s!==this&&s.calculateTileViewError&&(Ho.inView=!0,Ho.error=0,Ho.distance=1/0,s.calculateTileViewError(e,Ho)&&(i===null&&(i=!0),i&&(i=Ho.inView),Ho.inView&&(a=Math.min(a,Ho.distance),o=Math.max(o,Ho.error))))}),t.inView&&i!==!1?(t.error=Math.max(t.error,o),t.distanceFromCamera=Math.min(t.distanceFromCamera,a)):i?(t.inView=!0,t.error=o,t.distanceFromCamera=a):t.inView=!1}dispose(){[...this.plugins].forEach(n=>{this.unregisterPlugin(n)});let e=this.lruCache,t=[];this.traverse(n=>(t.push(n),!1),null,!1);for(let n=0,r=t.length;n<r;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 r=Qh(e.content.uri),i=!!(r&&/json$/.test(r));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=i,e.internal.hasRenderableContent=!i}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(r=>{r!==this&&r.preprocessNode&&r.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 r of t)!e.isUsed(r)&&r.internal.loadingState===1&&n.push(r);for(let r=0;r<n.length;r++)e.remove(n[r])}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 r=i=>{for(let o=0,a=i.length;o<a;o++){let s=i[o];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),r(n)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,i=>{r(i.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(r=>{n.has(r)&&t.setMemoryUsage(r,this.getBytesUsed(r))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,n=null){let[r,i]=e.asset.version.split(".").map(a=>parseInt(a));console.assert(r<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),r===1&&i>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let o=t.replace(/\/[^/]*$/,"");o=new URL(o,window.location.href).toString(),this.preprocessNode(e.root,o,n)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,n=null,r=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(d=>r=d.preprocessURL?d.preprocessURL(r,e):r);let i=this.stats,o=this.lruCache,a=this.downloadQueue,s=this.parseQueue,l=this.loadingTiles,c=Qh(r),p=new AbortController,u=p.signal;if(o.add(e,d=>{p.abort(),t?d.children.length=0:this.invokeAllPlugins(m=>{m.disposeTile&&m.disposeTile(d)}),i.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),i.inCacheSinceLoad--),d.internal.loadingState===1?i.queued--:d.internal.loadingState===2?i.downloading--:d.internal.loadingState===3?i.parsing--:d.internal.loadingState===4&&i.loaded--,d.internal.loadingState=0,s.remove(d),a.remove(d),l.delete(d)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),o.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),i.inCacheSinceLoad++,i.inCache++,i.queued++,e.internal.loadingState=1,l.add(e),a.add(r,e,d=>{if(u.aborted)return Promise.resolve();e.internal.loadingState=2,i.downloading++,i.queued--;let m=this.invokeOnePlugin(g=>g.fetchData&&g.fetchData(r,{...this.fetchOptions,signal:u}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:r,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),m}).then(d=>{if(!u.aborted){if(!(d instanceof Response))return d;if(d.ok)return c==="json"?d.json():d.arrayBuffer();throw Error(`Failed to load model with error code ${d.status}`)}}).then(d=>{if(!u.aborted)return i.downloading--,i.parsing++,e.internal.loadingState=3,s.add(e,m=>u.aborted?Promise.resolve():c==="json"&&d.root?(this.preprocessTileset(d,r,e),e.children.push(d.root),n=d,t=!0,Promise.resolve()):this.invokeOnePlugin(g=>g.parseTile&&g.parseTile(d,m,c,r,u)))}).then(()=>{if(u.aborted)return;i.parsing--,i.loaded++,e.internal.loadingState=4,l.delete(e),o.setLoaded(e,!0);let d=this.getBytesUsed(e);if(o.getMemoryUsage(e)===0&&d>0&&o.isFull()){o.remove(e);return}o.setMemoryUsage(e,d),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:n,url:r}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:r})}).catch(d=>{u.aborted||(d.name==="AbortError"?o.remove(e):(s.remove(e),a.remove(e),e.internal.loadingState===1?i.queued--:e.internal.loadingState===2?i.downloading--:e.internal.loadingState===3?i.parsing--:e.internal.loadingState===4&&i.loaded--,i.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(d),e.internal.loadingState=-1,l.delete(e),o.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:d,url:r})))})}};function Ba(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 r=0;r<4;r++)n+=String.fromCharCode(t.getUint8(r));return n}var wC=new TextDecoder;function ly(e){return wC.decode(e)}function Su(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var Gs=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=Su(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function im(e,t,n,r,i,o){let a;switch(r){case"SCALAR":a=1;break;case"VEC2":a=2;break;case"VEC3":a=3;break;case"VEC4":a=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${o}".`)}let s,l=n*a;switch(i){case"BYTE":s=new Int8Array(e,t,l);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,l);break;case"SHORT":s=new Int16Array(e,t,l);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,l);break;case"INT":s=new Int32Array(e,t,l);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,l);break;case"FLOAT":s=new Float32Array(e,t,l);break;case"DOUBLE":s=new Float64Array(e,t,l);break;default:throw Error(`FeatureTable : Feature component type not provided for "${o}".`)}return s}var ac=class{constructor(e,t,n,r){this.buffer=e,this.binOffset=t+n,this.binLength=r;let i=null;if(n!==0){let o=new Uint8Array(e,t,n);i=JSON.parse(ly(o))}else i={};this.header=i}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,n=null,r=null){let i=this.header;if(!(e in i))return null;let o=i[e];if(!(o instanceof Object)||Array.isArray(o))return o;{let{buffer:a,binOffset:s,binLength:l}=this,c=o.byteOffset||0,p=o.type||r,u=o.componentType||n;if("type"in o&&r&&o.type!==r)throw Error("FeatureTable: Specified type does not match expected type.");let d=s+c,m=im(a,d,t,p,u,e);if(d+m.byteLength>s+l)throw Error("FeatureTable: Feature data read outside binary body length.");return m}}getBuffer(e,t){let{buffer:n,binOffset:r}=this;return n.slice(r+e,r+e+t)}},SC=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let r of this.classes){let i=r.instances;for(let o in i)r.instances[o]=this._parseProperty(i[o],r.length,o)}if(this.instancesLength=t.instancesLength,this.classIds=this._parseProperty(t.classIds,this.instancesLength,"classIds"),t.parentCounts?this.parentCounts=this._parseProperty(t.parentCounts,this.instancesLength,"parentCounts"):this.parentCounts=Array(this.instancesLength).fill(1),t.parentIds){let r=this.parentCounts.reduce((i,o)=>i+o,0);this.parentIds=this._parseProperty(t.parentIds,r,"parentIds")}else this.parentIds=null;this.instancesIds=[];let n={};for(let r of this.classIds)n[r]=n[r]??0,this.instancesIds.push(n[r]),n[r]++}_parseProperty(e,t,n){if(Array.isArray(e))return e;{let{buffer:r,binOffset:i}=this.batchTable,o=e.byteOffset,a=e.componentType||"UNSIGNED_SHORT";return im(r,i+o,t,"SCALAR",a,n)}}getDataFromId(e,t={}){let n=this.parentCounts[e];if(this.parentIds&&n>0){let s=0;for(let l=0;l<e;l++)s+=this.parentCounts[l];for(let l=0;l<n;l++){let c=this.parentIds[s+l];c!==e&&this.getDataFromId(c,t)}}let r=this.classIds[e],i=this.classes[r].instances,o=this.classes[r].name,a=this.instancesIds[e];for(let s in i)t[o]=t[o]||{},t[o][s]=i[s][a];return t}},_u=class extends ac{constructor(e,t,n,r,i){super(e,n,r,i),this.count=t,this.extensions={};let o=this.header.extensions;o&&o["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new SC(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 r=this.extensions[n];r.getDataFromId instanceof Function&&(t[n]=t[n]||{},r.getDataFromId(e,t[n]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},om=class extends Gs{parse(e){let t=new DataView(e),n=Ba(t);console.assert(n==="b3dm");let r=t.getUint32(4,!0);console.assert(r===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),l=t.getUint32(24,!0),c=new ac(e.slice(28,28+o+a),0,o,a),p=28+o+a,u=new _u(e.slice(p,p+s+l),c.getData("BATCH_LENGTH"),0,s,l),d=p+s+l;return{version:r,featureTable:c,batchTable:u,glbBytes:new Uint8Array(e,d,i-d)}}},am=class extends Gs{parse(e){let t=new DataView(e),n=Ba(t);console.assert(n==="i3dm");let r=t.getUint32(4,!0);console.assert(r===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),l=t.getUint32(24,!0),c=t.getUint32(28,!0),p=new ac(e.slice(32,32+o+a),0,o,a),u=32+o+a,d=new _u(e.slice(u,u+s+l),p.getData("INSTANCES_LENGTH"),0,s,l),m=u+s+l,g=new Uint8Array(e,m,i-m),v=null,M=null,w=null;if(c)v=g,M=Promise.resolve();else{let x=this.resolveExternalURL(ly(g));w=Su(x),M=fetch(x,this.fetchOptions).then(S=>{if(!S.ok)throw Error(`I3DMLoaderBase : Failed to load file "${x}" with status ${S.status} : ${S.statusText}`);return S.arrayBuffer()}).then(S=>{v=new Uint8Array(S)})}return M.then(()=>({version:r,featureTable:p,batchTable:d,glbBytes:v,gltfWorkingPath:w}))}},sm=class extends Gs{parse(e){let t=new DataView(e),n=Ba(t);console.assert(n==="pnts");let r=t.getUint32(4,!0);console.assert(r===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),l=t.getUint32(24,!0),c=new ac(e.slice(28,28+o+a),0,o,a),p=28+o+a,u=new _u(e.slice(p,p+s+l),c.getData("BATCH_LENGTH")||c.getData("POINTS_LENGTH"),0,s,l);return Promise.resolve({version:r,featureTable:c,batchTable:u})}},lm=class extends Gs{parse(e){let t=new DataView(e),n=Ba(t);console.assert(n==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let r=t.getUint32(4,!0);console.assert(r===1,'CMPTLoader: The version listed in the header is "1".');let i=t.getUint32(8,!0);console.assert(i===e.byteLength,"CMPTLoader: The contents buffer length listed in the header matches the file.");let o=t.getUint32(12,!0),a=[],s=16;for(let l=0;l<o;l++){let c=new DataView(e,s,12),p=Ba(c),u=c.getUint32(4,!0),d=c.getUint32(8,!0),m=new Uint8Array(e,s,d);a.push({type:p,buffer:m,version:u}),s+=d}return{version:r,tiles:a}}};var X=require("three"),Lu=require("three/addons/loaders/GLTFLoader.js"),My=require("three/addons/utils/BufferGeometryUtils.js"),vm=class extends om{constructor(e=X.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new X.Matrix4}parse(e){let t=super.parse(e),n=t.glbBytes.slice().buffer;return new Promise((r,i)=>{let o=this.manager,a=this.fetchOptions,s=o.getHandler("path.gltf")||new Lu.GLTFLoader(o);a.credentials==="include"&&a.mode==="cors"&&s.setCrossOrigin("use-credentials"),"credentials"in a&&s.setWithCredentials(a.credentials==="include"),a.headers&&s.setRequestHeader(a.headers);let l=this.workingPath;!/[\\/]$/.test(l)&&l.length&&(l+="/");let c=this.adjustmentTransform;s.parse(n,l,p=>{let{batchTable:u,featureTable:d}=t,{scene:m}=p,g=d.getData("RTC_CENTER",1,"FLOAT","VEC3");g&&(m.position.x+=g[0],m.position.y+=g[1],m.position.z+=g[2]),p.scene.updateMatrix(),p.scene.matrix.multiply(c),p.scene.matrix.decompose(p.scene.position,p.scene.quaternion,p.scene.scale),p.batchTable=u,p.featureTable=d,m.batchTable=u,m.featureTable=d,r(p)},i)})}};function _C(e){let t=e>>11,n=e>>5&63,r=e&31;return[Math.round(t/31*255),Math.round(n/63*255),Math.round(r/31*255)]}var sc=new X.Vector2;function MC(e,t,n=new X.Vector3){sc.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(sc.x,sc.y,1-Math.abs(sc.x)-Math.abs(sc.y));let r=X.MathUtils.clamp(-n.z,0,1);return n.x>=0?n.setX(n.x-r):n.setX(n.x+r),n.y>=0?n.setY(n.y-r):n.setY(n.y+r),n.normalize(),n}var cy={RGB:"color",POSITION:"position"},xm=class extends sm{constructor(e=X.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:r}=t,i=new X.PointsMaterial,o=n.header.extensions,a=new X.Vector3,s;if(o&&o["3DTILES_draco_point_compression"]){let{byteOffset:p,byteLength:u,properties:d}=o["3DTILES_draco_point_compression"],m=this.manager.getHandler("draco.drc");if(m==null)throw Error("PNTSLoader: dracoLoader not available.");let g={};for(let w in d)if(w in cy&&w in d){let x=cy[w];g[x]=d[w]}let v={attributeIDs:g,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},M=n.getBuffer(p,u);s=await m.decodeGeometry(M,v),s.attributes.color&&(i.vertexColors=!0)}else{let p=n.getData("POINTS_LENGTH"),u=n.getData("POSITION",p,"FLOAT","VEC3"),d=n.getData("NORMAL",p,"FLOAT","VEC3"),m=n.getData("NORMAL",p,"UNSIGNED_BYTE","VEC2"),g=n.getData("RGB",p,"UNSIGNED_BYTE","VEC3"),v=n.getData("RGBA",p,"UNSIGNED_BYTE","VEC4"),M=n.getData("RGB565",p,"UNSIGNED_SHORT","SCALAR"),w=n.getData("CONSTANT_RGBA",p,"UNSIGNED_BYTE","VEC4"),x=n.getData("POSITION_QUANTIZED",p,"UNSIGNED_SHORT","VEC3"),S=n.getData("QUANTIZED_VOLUME_SCALE",p,"FLOAT","VEC3"),k=n.getData("QUANTIZED_VOLUME_OFFSET",p,"FLOAT","VEC3");if(s=new X.BufferGeometry,x){let b=new Float32Array(p*3);for(let _=0;_<p;_++)for(let y=0;y<3;y++){let h=3*_+y;b[h]=x[h]/65535*S[y]}a.x=k[0],a.y=k[1],a.z=k[2],s.setAttribute("position",new X.BufferAttribute(b,3,!1))}else s.setAttribute("position",new X.BufferAttribute(u,3,!1));if(d!==null)s.setAttribute("normal",new X.BufferAttribute(d,3,!1));else if(m!==null){let b=new Float32Array(p*3),_=new X.Vector3;for(let y=0;y<p;y++){let h=m[y*2],P=m[y*2+1],A=MC(h,P,_);b[y*3]=A.x,b[y*3+1]=A.y,b[y*3+2]=A.z}s.setAttribute("normal",new X.BufferAttribute(b,3,!1))}if(v!==null)s.setAttribute("color",new X.BufferAttribute(v,4,!0)),i.vertexColors=!0,i.transparent=!0,i.depthWrite=!1;else if(g!==null)s.setAttribute("color",new X.BufferAttribute(g,3,!0)),i.vertexColors=!0;else if(M!==null){let b=new Uint8Array(p*3);for(let _=0;_<p;_++){let y=_C(M[_]);for(let h=0;h<3;h++){let P=3*_+h;b[P]=y[h]}}s.setAttribute("color",new X.BufferAttribute(b,3,!0)),i.vertexColors=!0}else if(w!==null){i.color=new X.Color(w[0],w[1],w[2]);let b=w[3]/255;b<1&&(i.opacity=b,i.transparent=!0,i.depthWrite=!1)}}let l=new X.Points(s,i);l.position.copy(a),t.scene=l,t.scene.featureTable=n,t.scene.batchTable=r;let c=n.getData("RTC_CENTER",1,"FLOAT","VEC3");return c&&(t.scene.position.x+=c[0],t.scene.position.y+=c[1],t.scene.position.z+=c[2]),t})}};function CC(e){let{x:t,y:n,z:r}=e;e.x=r,e.y=t,e.z=n}function TC(e){return-e+Math.PI/2}var dy=new X.Spherical,Go=new X.Vector3,sr=new X.Vector3,cm=new X.Vector3,li=new X.Matrix4,Ki=new X.Matrix4,dm=new X.Sphere,xr=new X.Euler,uy=new X.Vector3,py=new X.Vector3,hy=new X.Vector3,lc=new X.Vector3,Mu=new X.Ray,PC=1e-12,AC=.1;var ym=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new X.Vector3(e,t,n)}intersectRay(e,t){return li.makeScale(...this.radius).invert(),dm.center.set(0,0,0),dm.radius=1,Mu.copy(e).applyMatrix4(li),Mu.intersectSphere(dm,t)?(li.makeScale(...this.radius),t.applyMatrix4(li),t):null}getEastNorthUpFrame(e,t,n,r){return n.isMatrix4&&(r=n,n=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,uy,py,hy),this.getCartographicToPosition(e,t,n,lc),r.makeBasis(uy,py,hy).setPosition(lc)}getOrientedEastNorthUpFrame(e,t,n,r,i,o,a){return this.getObjectFrame(e,t,n,r,i,o,a,0)}getObjectFrame(e,t,n,r,i,o,a,s=2){return this.getEastNorthUpFrame(e,t,n,li),xr.set(i,o,-r,"ZXY"),a.makeRotationFromEuler(xr).premultiply(li),s===1?(xr.set(Math.PI/2,0,0,"XYZ"),Ki.makeRotationFromEuler(xr),a.multiply(Ki)):s===2&&(xr.set(-Math.PI/2,0,Math.PI,"XYZ"),Ki.makeRotationFromEuler(xr),a.multiply(Ki)),a}getCartographicFromObjectFrame(e,t,n=2){return n===1?(xr.set(-Math.PI/2,0,0,"XYZ"),Ki.makeRotationFromEuler(xr).premultiply(e)):n===2?(xr.set(-Math.PI/2,0,Math.PI,"XYZ"),Ki.makeRotationFromEuler(xr).premultiply(e)):Ki.copy(e),lc.setFromMatrixPosition(Ki),this.getPositionToCartographic(lc,t),this.getEastNorthUpFrame(t.lat,t.lon,0,li).invert(),Ki.premultiply(li),xr.setFromRotationMatrix(Ki,"ZXY"),t.azimuth=-xr.z,t.elevation=xr.x,t.roll=xr.y,t}getEastNorthUpAxes(e,t,n,r,i,o=lc){this.getCartographicToPosition(e,t,0,o),this.getCartographicToNormal(e,t,i),n.set(-o.y,o.x,0).normalize(),r.crossVectors(i,n).normalize()}getCartographicToPosition(e,t,n,r){this.getCartographicToNormal(e,t,Go);let i=this.radius;sr.copy(Go),sr.x*=i.x**2,sr.y*=i.y**2,sr.z*=i.z**2;let o=Math.sqrt(Go.dot(sr));return sr.divideScalar(o),r.copy(sr).addScaledVector(Go,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,sr),this.getPositionToNormal(sr,Go);let n=cm.subVectors(e,sr);return t.lon=Math.atan2(Go.y,Go.x),t.lat=Math.asin(Go.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return dy.set(1,TC(e),t),n.setFromSpherical(dy).normalize(),CC(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,r=1/n.x**2,i=1/n.y**2,o=1/n.z**2,a=e.x*e.x*r,s=e.y*e.y*i,l=e.z*e.z*o,c=a+s+l,p=Math.sqrt(1/c),u=sr.copy(e).multiplyScalar(p);if(c<AC)return isFinite(p)?t.copy(u):null;let d=cm.set(u.x*r*2,u.y*i*2,u.z*o*2),m=(1-p)*e.length()/(.5*d.length()),g=0,v,M,w,x,S,k,b,_,y,h,P;do{m-=g,w=1/(1+m*r),x=1/(1+m*i),S=1/(1+m*o),k=w*w,b=x*x,_=S*S,y=k*w,h=b*x,P=_*S,v=a*k+s*b+l*_-1,M=a*y*r+s*h*i+l*P*o;let A=-2*M;g=v/A}while(Math.abs(v)>PC);return t.set(e.x*w,e.y*x,e.z*S)}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,r=e*X.MathUtils.DEG2RAD,i=Math.sin(r)**2;return t/Math.sqrt(1-n*i)}getPositionElevation(e){this.getPositionToSurfacePoint(e,sr);let t=cm.subVectors(e,sr);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(li.makeScale(...this.radius).invert(),Mu.copy(e).applyMatrix4(li),sr.set(0,0,0),Mu.closestPointToPoint(sr,t).normalize(),li.makeScale(...this.radius),t.applyMatrix4(li))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},hc=new ym(Oa,Oa,tm);hc.name="WGS84 Earth";var Cu=new X.Vector3,Ws=new X.Vector3,Xs=new X.Vector3,um=new X.Vector3,Tu=new X.Quaternion,Pu=new X.Vector3,qs=new X.Matrix4,my=new X.Matrix4,fy=new X.Vector3,gy=new X.Matrix4,pm=new X.Quaternion,hm={};function by(e,t,n,r){if(e=e/n*2-1,t=t/n*2-1,r.x=e,r.y=t,r.z=1-Math.abs(e)-Math.abs(t),r.z<0){let i=r.x;r.x=(1-Math.abs(r.y))*(i>=0?1:-1),r.y=(1-Math.abs(i))*(r.y>=0?1:-1)}return r.normalize(),r}var wm=class extends am{constructor(e=X.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new X.Matrix4,this.ellipsoid=hc.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:n,batchTable:r}=t,i=t.glbBytes.slice().buffer;return new Promise((o,a)=>{let s=this.fetchOptions,l=this.manager,c=l.getHandler("path.gltf")||new Lu.GLTFLoader(l);s.credentials==="include"&&s.mode==="cors"&&c.setCrossOrigin("use-credentials"),"credentials"in s&&c.setWithCredentials(s.credentials==="include"),s.headers&&c.setRequestHeader(s.headers);let p=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(p)||(p+="/");let u=this.adjustmentTransform;c.parse(i,p,d=>{let m=n.getData("INSTANCES_LENGTH"),g=n.getData("POSITION",m,"FLOAT","VEC3"),v=n.getData("POSITION_QUANTIZED",m,"UNSIGNED_SHORT","VEC3"),M=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),w=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),x=n.getData("NORMAL_UP",m,"FLOAT","VEC3"),S=n.getData("NORMAL_RIGHT",m,"FLOAT","VEC3"),k=n.getData("NORMAL_UP_OCT32P",m,"UNSIGNED_SHORT","VEC2"),b=n.getData("NORMAL_RIGHT_OCT32P",m,"UNSIGNED_SHORT","VEC2"),_=n.getData("SCALE_NON_UNIFORM",m,"FLOAT","VEC3"),y=n.getData("SCALE",m,"FLOAT","SCALAR"),h=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),P=n.getData("EAST_NORTH_UP");if(!g&&v){g=new Float32Array(m*3);for(let B=0;B<m;B++)g[B*3+0]=M[0]+v[B*3+0]/65535*w[0],g[B*3+1]=M[1]+v[B*3+1]/65535*w[1],g[B*3+2]=M[2]+v[B*3+2]/65535*w[2]}let A=new X.Vector3;for(let B=0;B<m;B++)A.x+=g[B*3+0]/m,A.y+=g[B*3+1]/m,A.z+=g[B*3+2]/m;let C=[],D=[];d.scene.updateMatrixWorld(),d.scene.traverse(B=>{if(B.isMesh){D.push(B);let{geometry:j,material:W}=B,U=new X.InstancedMesh(j,W,m);U.position.copy(A),h&&(U.position.x+=h[0],U.position.y+=h[1],U.position.z+=h[2]),C.push(U)}});for(let B=0;B<m;B++){um.set(g[B*3+0]-A.x,g[B*3+1]-A.y,g[B*3+2]-A.z),Tu.identity(),x&&S?(Ws.set(x[B*3+0],x[B*3+1],x[B*3+2]),Xs.set(S[B*3+0],S[B*3+1],S[B*3+2]),Cu.crossVectors(Xs,Ws).normalize(),qs.makeBasis(Xs,Ws,Cu),Tu.setFromRotationMatrix(qs)):k&&b&&(by(k[B*2+0],k[B*2+1],65535,Ws),by(b[B*2+0],b[B*2+1],65535,Xs),Cu.crossVectors(Xs,Ws).normalize(),qs.makeBasis(Xs,Ws,Cu),Tu.setFromRotationMatrix(qs)),Pu.set(1,1,1),_&&Pu.set(_[B*3+0],_[B*3+1],_[B*3+2]),y&&Pu.multiplyScalar(y[B]);for(let j=0,W=C.length;j<W;j++){let U=C[j];pm.copy(Tu),P&&(U.updateMatrixWorld(),fy.copy(um).applyMatrix4(U.matrixWorld),this.ellipsoid.getPositionToCartographic(fy,hm),this.ellipsoid.getEastNorthUpFrame(hm.lat,hm.lon,gy),pm.setFromRotationMatrix(gy)),qs.compose(um,pm,Pu).multiply(u);let te=D[j];my.multiplyMatrices(qs,te.matrixWorld),U.setMatrixAt(B,my)}}d.scene.clear(),d.scene.add(...C),d.batchTable=r,d.featureTable=n,d.scene.batchTable=r,d.scene.featureTable=n,o(d)},a)})})}},Cy=class extends lm{constructor(e=X.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new X.Matrix4,this.ellipsoid=hc.clone()}parse(e){let t=super.parse(e),{manager:n,ellipsoid:r,adjustmentTransform:i}=this,o=[];for(let a in t.tiles){let{type:s,buffer:l}=t.tiles[a];switch(s){case"b3dm":{let c=l.slice(),p=new vm(n);p.workingPath=this.workingPath,p.fetchOptions=this.fetchOptions,p.adjustmentTransform.copy(i);let u=p.parse(c.buffer);o.push(u);break}case"pnts":{let c=l.slice(),p=new xm(n);p.workingPath=this.workingPath,p.fetchOptions=this.fetchOptions;let u=p.parse(c.buffer);o.push(u);break}case"i3dm":{let c=l.slice(),p=new wm(n);p.workingPath=this.workingPath,p.fetchOptions=this.fetchOptions,p.ellipsoid.copy(r),p.adjustmentTransform.copy(i);let u=p.parse(c.buffer);o.push(u);break}}}return Promise.all(o).then(a=>{let s=new X.Group;return a.forEach(l=>{s.add(l.scene)}),{tiles:a,scene:s}})}},cc=new X.Matrix4,EC=class extends X.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new X.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?cc.copy(this.matrix):cc.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=cc.elements,n=this.matrixWorld.elements,r=!1;for(let i=0;i<16;i++){let o=t[i],a=n[i];if(Math.abs(o-a)>2**-52){r=!0;break}}if(r){this.matrixWorld.copy(cc),this.matrixWorldInverse.copy(cc).invert();let i=this.children;for(let l=0,c=i.length;l<c;l++)i[l].updateMatrixWorld();let{tilesRenderer:o}=this,{activeTiles:a,visibleTiles:s}=o;a.forEach(l=>{s.has(l)||l.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},RC=new X.Ray;function kC(e,t,n,r){let{scene:i}=e.engineData;n.invokeOnePlugin(o=>o.raycastTile&&o.raycastTile(e,i,t,r))||t.intersectObject(i,!0,r)}function LC(e){return"traversal"in e}function Ty(e,t,n,r,i=null){if(!LC(t))return;let{group:o,activeTiles:a}=e,{boundingVolume:s}=t.engineData;if(i===null&&(i=RC,i.copy(n.ray).applyMatrix4(o.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(i))return;a.has(t)&&kC(t,n,e,r);let l=t.children;for(let c=0,p=l.length;c<p;c++)Ty(e,l[c],n,r,i)}var Au=new X.Vector3,Eu=new X.Vector3,yr=new X.Vector3,Ru=new X.Ray,gm=class{constructor(e=new X.Box3,t=new X.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new X.Matrix4,this.points=Array(8).fill().map(()=>new X.Vector3),this.planes=[,,,,,,].fill().map(()=>new X.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,yr).distanceTo(e)}containsPoint(e){return yr.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(yr)}intersectsRay(e){return Ru.copy(e).applyMatrix4(this.inverseTransform),Ru.intersectsBox(this.box)}intersectRay(e,t){return Ru.copy(e).applyMatrix4(this.inverseTransform),Ru.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:n,box:r}=this;t.copy(n).invert();let{min:i,max:o}=r,a=0;for(let s=-1;s<=1;s+=2)for(let l=-1;l<=1;l+=2)for(let c=-1;c<=1;c+=2)e[a].set(s<0?i.x:o.x,l<0?i.y:o.y,c<0?i.z:o.z).applyMatrix4(n),a++;this.updatePlanes()}updatePlanes(){Au.copy(this.box.min).applyMatrix4(this.transform),Eu.copy(this.box.max).applyMatrix4(this.transform),yr.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(yr,Au),this.planes[1].setFromNormalAndCoplanarPoint(yr,Eu).negate(),yr.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(yr,Au),this.planes[3].setFromNormalAndCoplanarPoint(yr,Eu).negate(),yr.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(yr,Au),this.planes[5].setFromNormalAndCoplanarPoint(yr,Eu).negate()}intersectsSphere(e){return this.clampPoint(e.center,yr),yr.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,r=this.planes;for(let i=0;i<6;i++){let o=e[i],a=-1/0;for(let s=0;s<8;s++){let l=n[s],c=o.distanceToPoint(l);a=a<c?c:a}if(a<0)return!1}for(let i=0;i<6;i++){let o=r[i],a=-1/0;for(let s=0;s<8;s++){let l=t[s],c=o.distanceToPoint(l);a=a<c?c:a}if(a<0)return!1}return!0}},pc=Math.PI,mm=pc/2,dc=new X.Vector3,Ia=new X.Vector3,ki=new X.Vector3,Ne=new X.Vector3,lr=new X.Matrix4,DC=new X.Box3,vy=new X.Matrix4;function Wo(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function xy(e){return e.x!==e.y}var Py=class extends ym{constructor(e=1,t=1,n=1,r=-mm,i=mm,o=0,a=2*pc,s=0,l=0){super(e,t,n),this.latStart=r,this.latEnd=i,this.lonStart=o,this.lonEnd=a,this.heightStart=s,this.heightEnd=l}getBoundingBox(e,t){xy(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:n,latEnd:r,lonStart:i,lonEnd:o,heightStart:a,heightEnd:s}=this,l=(n+r)*.5,c=(i+o)*.5,p=n>0,u=r<0,d;d=p?n:u?r:0;let{min:m,max:g}=e;m.setScalar(1/0),g.setScalar(-1/0),o-i<=pc?(this.getCartographicToNormal(l,c,ki),Ia.set(0,0,1),dc.crossVectors(Ia,ki).normalize(),Ia.crossVectors(ki,dc).normalize(),t.makeBasis(dc,Ia,ki),lr.copy(t).invert(),this.getCartographicToPosition(d,i,s,Ne).applyMatrix4(lr),g.x=Math.abs(Ne.x),m.x=-g.x,this.getCartographicToPosition(r,i,s,Ne).applyMatrix4(lr),g.y=Ne.y,this.getCartographicToPosition(r,c,s,Ne).applyMatrix4(lr),g.y=Math.max(Ne.y,g.y),this.getCartographicToPosition(n,i,s,Ne).applyMatrix4(lr),m.y=Ne.y,this.getCartographicToPosition(n,c,s,Ne).applyMatrix4(lr),m.y=Math.min(Ne.y,m.y),this.getCartographicToPosition(l,c,s,Ne).applyMatrix4(lr),g.z=Ne.z,this.getCartographicToPosition(n,i,a,Ne).applyMatrix4(lr),m.z=Ne.z,this.getCartographicToPosition(r,i,a,Ne).applyMatrix4(lr),m.z=Math.min(Ne.z,m.z)):(this.getCartographicToPosition(d,c,s,ki),ki.z=0,ki.length()<1e-10?ki.set(1,0,0):ki.normalize(),Ia.set(0,0,1),dc.crossVectors(ki,Ia).normalize(),t.makeBasis(dc,Ia,ki),lr.copy(t).invert(),this.getCartographicToPosition(d,c+mm,s,Ne).applyMatrix4(lr),g.x=Math.abs(Ne.x),m.x=-g.x,this.getCartographicToPosition(r,0,u?a:s,Ne).applyMatrix4(lr),g.y=Ne.y,this.getCartographicToPosition(n,0,p?a:s,Ne).applyMatrix4(lr),m.y=Ne.y,this.getCartographicToPosition(d,c,s,Ne).applyMatrix4(lr),g.z=Ne.z,this.getCartographicToPosition(d,o,s,Ne).applyMatrix4(lr),m.z=Ne.z),e.getCenter(Ne),e.min.sub(Ne).multiplyScalar(1.0000000000001),e.max.sub(Ne).multiplyScalar(1.0000000000001),Ne.applyMatrix4(t),t.setPosition(Ne)}getBoundingSphere(e){xy(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(DC,vy),e.center.setFromMatrixPosition(vy),e.radius=0;let{latStart:t,latEnd:n,lonStart:r,lonEnd:i,heightStart:o,heightEnd:a}=this,s=(t+n)*.5,l=(r+i)*.5,c=t>0,p=n<0,u;u=c?t:p?n:0,this.getCartographicToPosition(u,r,a,Ne),Wo(Ne,e),this.getCartographicToPosition(n,r,a,Ne),Wo(Ne,e),this.getCartographicToPosition(n,l,a,Ne),Wo(Ne,e),this.getCartographicToPosition(t,r,a,Ne),Wo(Ne,e),this.getCartographicToPosition(t,l,a,Ne),Wo(Ne,e),this.getCartographicToPosition(s,l,a,Ne),Wo(Ne,e),this.getCartographicToPosition(t,r,o,Ne),Wo(Ne,e),i-r>pc&&(this.getCartographicToPosition(u,l+pc,a,Ne),Wo(Ne,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},go=new X.Vector3,bo=new X.Vector3,vo=new X.Vector3,yy=new X.Vector3,wy=new X.Vector3,NC=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,r=this.obb||this.regionObb,i=-1/0,o=-1/0;n&&e.intersectSphere(n,yy)&&(i=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(yy)),r&&r.intersectRay(e,wy)&&(o=r.containsPoint(e.origin)?0:e.origin.distanceToSquared(wy));let a=Math.max(i,o);return a===-1/0?null:(e.at(Math.sqrt(a),t),t)}distanceToPoint(e){let t=this.sphere,n=this.obb||this.regionObb,r=-1/0,i=-1/0;return t&&(r=Math.max(t.distanceToPoint(e),0)),n&&(i=n.distanceToPoint(e)),r>i?r:i}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 gm;go.set(e[3],e[4],e[5]),bo.set(e[6],e[7],e[8]),vo.set(e[9],e[10],e[11]);let r=go.length(),i=bo.length(),o=vo.length();go.normalize(),bo.normalize(),vo.normalize(),r===0&&go.crossVectors(bo,vo),i===0&&bo.crossVectors(go,vo),o===0&&vo.crossVectors(go,bo),n.transform.set(go.x,bo.x,vo.x,e[0],go.y,bo.y,vo.y,e[1],go.z,bo.z,vo.z,e[2],0,0,0,1).premultiply(t),n.box.min.set(-r,-i,-o),n.box.max.set(r,i,o),n.update(),this.obb=n}setSphereData(e,t,n,r,i){let o=new X.Sphere;o.center.set(e,t,n),o.radius=r,o.applyMatrix4(i),this.sphere=o}setRegionData(e,t,n,r,i,o,a){let s=new Py(...e.radius,n,i,t,r,o,a),l=new gm;s.getBoundingBox(l.box,l.transform),l.update(),this.region=s,this.regionObb=l}},BC=new X.Matrix3;function OC(e,t,n,r){let i=BC.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 r.set(-e.constant,-t.constant,-n.constant),r.applyMatrix3(i.invert()),r}var IC=class extends X.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new X.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,r)=>{OC(n[0],n[1],n[2],t[r])})}};var bm=0;function Sy(e,t,n,r){try{return X.TextureUtils.getByteLength(e,t,n,r)}catch{return bm}}function zC(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??bm;let{format:t,type:n,image:r,mipmaps:i}=e;if(e.isCompressedTexture&&Array.isArray(i)&&i.length>0){let a=0;for(let s of i)s?.data?.byteLength?a+=s.data.byteLength:a+=Sy(s.width,s.height,t,n);return a}if(!r)return bm;let o=Sy(r.width,r.height,t,n);return o*=e.generateMipmaps?4/3:1,o}function UC(e){let t=new Set,n=0;return e.traverse(r=>{if(r.geometry&&!t.has(r.geometry)&&(n+=(0,My.estimateBytesUsed)(r.geometry),t.add(r.geometry)),r.material){let i=r.material;for(let o in i){let a=i[o];a&&a.isTexture&&!t.has(a)&&(n+=zC(a),t.add(a))}}}),n}var Ay=Symbol("INITIAL_FRUSTUM_CULLED"),ku=new X.Matrix4,uc=new X.Vector3,fm=new X.Vector2,FC=new X.Vector3(1,0,0),VC=new X.Vector3(0,1,0),jC=()=>null;function _y(e,t){e.traverse(n=>{n.frustumCulled=n[Ay]&&t})}var Sm=class extends rm{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{_y(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new EC(this),this.ellipsoid=hc.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new X.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new X.LoadingManager,this._listeners={}}addEventListener(e,t){X.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return X.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){X.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){X.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)Ty(this,this.root,e,t);else{let n=e.firstHitOnly?[]:t;for(let r of this.activeTiles){let{scene:i}=r.engineData;this.invokeOnePlugin(o=>o.raycastTile&&o.raycastTile(r,i,e,n))||e.intersectObject(i,!0,n)}e.firstHitOnly&&n.length>0&&(n.sort((r,i)=>r.distance-i.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 X.Vector2),t.push(e),this.dispatchEvent({type:"add-camera",camera:e}),!0)}setResolution(e,t,n){let r=this.cameraMap;if(!r.has(e))return!1;let i=t.isVector2?t.x:t,o=t.isVector2?t.y:n,a=r.get(e);return(a.width!==i||a.height!==o)&&(a.set(i,o),this.dispatchEvent({type:"camera-resolution-change"})),!0}getResolution(e,t){let n=this.cameraMap.get(e);return n?t.copy(n):null}setResolutionFromRenderer(e,t){return t.getSize(fm),this.setResolution(e,fm.x,fm.y)}deleteCamera(e){let t=this.cameras,n=this.cameraMap;if(n.has(e)){let r=t.indexOf(e);return t.splice(r,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:r={}}=t;switch((n&&n.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(VC,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(FC,Math.PI/2);break}if("3DTILES_ellipsoid"in r){let i=r["3DTILES_ellipsoid"],{ellipsoid:o}=this;o.name=i.body,i.radii?o.radius.set(...i.radii):o.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,n=this.cameraMap,r=this.cameraInfo;for(;r.length>t.length;)r.pop();for(;r.length<t.length;)r.push({frustum:new IC,isOrthographic:!1,sseDenominator:-1,position:new X.Vector3,invScale:-1,pixelSize:0});uc.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(uc.x-uc.y,uc.x-uc.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let i=0,o=r.length;i<o;i++){let a=t[i],s=r[i],l=s.frustum,c=s.position,p=n.get(a);(p.width===0||p.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let u=a.projectionMatrix.elements;if(s.isOrthographic=u[15]===1,s.isOrthographic){let d=2/u[0],m=2/u[5];s.pixelSize=Math.max(m/p.height,d/p.width)}else s.sseDenominator=2/u[5]/p.height;ku.copy(e.matrixWorld),ku.premultiply(a.matrixWorldInverse),ku.premultiply(a.projectionMatrix),l.setFromProjectionMatrix(ku,a.coordinateSystem,a.reversedDepth),c.set(0,0,0),c.applyMatrix4(a.matrixWorld),c.applyMatrix4(e.matrixWorldInverse)}}update(){if(super.update(),this.cameras.length===0&&this.root){let e=!1;this.invokeAllPlugins(t=>e||(e=!!(t!==this&&t.calculateTileViewError))),e===!1&&console.warn("TilesRenderer: no cameras defined. Cannot update 3d tiles.")}}preprocessNode(e,t,n=null){super.preprocessNode(e,t,n);let r=new X.Matrix4;if(e.transform){let a=e.transform;for(let s=0;s<16;s++)r.elements[s]=a[s]}n&&r.premultiply(n.engineData.transform);let i=new X.Matrix4().copy(r).invert(),o=new NC;"sphere"in e.boundingVolume&&o.setSphereData(...e.boundingVolume.sphere,r),"box"in e.boundingVolume&&o.setObbData(e.boundingVolume.box,r),"region"in e.boundingVolume&&o.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=r,e.engineData.transformInverse=i,e.engineData.boundingVolume=o,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=jC}async parseTile(e,t,n,r,i){let o=t.engineData,a=Su(r),s=this.fetchOptions,l=this.manager,c=null,p=o.transform,u=this._upRotationMatrix,d=(Ba(e)||n).toLowerCase();switch(d){case"b3dm":{let S=new vm(l);S.workingPath=a,S.fetchOptions=s,S.adjustmentTransform.copy(u),c=S.parse(e);break}case"pnts":{let S=new xm(l);S.workingPath=a,S.fetchOptions=s,c=S.parse(e);break}case"i3dm":{let S=new wm(l);S.workingPath=a,S.fetchOptions=s,S.adjustmentTransform.copy(u),S.ellipsoid.copy(this.ellipsoid),c=S.parse(e);break}case"cmpt":{let S=new Cy(l);S.workingPath=a,S.fetchOptions=s,S.adjustmentTransform.copy(u),S.ellipsoid.copy(this.ellipsoid),c=S.parse(e).then(k=>k.scene);break}case"gltf":case"glb":{let S=l.getHandler("path.gltf")||l.getHandler("path.glb")||new Lu.GLTFLoader(l);S.setWithCredentials(s.credentials==="include"),S.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&S.setCrossOrigin("use-credentials");let k=S.resourcePath||S.path||a;!/[\\/]$/.test(k)&&k.length&&(k+="/"),c=S.parseAsync(e,k).then(b=>{b.scene=b.scene||new X.Group;let{scene:_}=b;return _.updateMatrix(),_.matrix.multiply(u).decompose(_.position,_.quaternion,_.scale),b});break}default:c=this.invokeOnePlugin(S=>S.parseToMesh&&S.parseToMesh(e,t,n,r,i));break}let m=await c;if(m===null)throw Error(`TilesRenderer: Content type "${d}" not supported.`);let g,v;m.isObject3D?(g=m,v=null):(g=m.scene,v=m),g.updateMatrix(),g.matrix.premultiply(p),g.matrix.decompose(g.position,g.quaternion,g.scale),await this.invokeAllPlugins(S=>S.processTileModel&&S.processTileModel(g,t)),g.traverse(S=>{S[Ay]=S.frustumCulled,S.userData.tile=t}),_y(g,!this.autoDisableRendererCulling);let M=[],w=[],x=[];if(g.traverse(S=>{if(S.geometry&&w.push(S.geometry),S.material){let k=S.material;M.push(S.material);for(let b in k){let _=k[b];_&&_.isTexture&&x.push(_)}}}),i.aborted){for(let S=0,k=x.length;S<k;S++){let b=x[S];b.image instanceof ImageBitmap&&b.image.close(),b.dispose()}return}o.materials=M,o.geometry=w,o.textures=x,o.scene=g,o.metadata=v}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let n=t.materials,r=t.geometry,i=t.textures,o=t.scene.parent;t.scene.traverse(a=>{a.userData.meshFeatures&&a.userData.meshFeatures.dispose(),a.userData.structuralMetadata&&a.userData.structuralMetadata.dispose()});for(let a=0,s=r.length;a<s;a++)r[a].dispose();for(let a=0,s=n.length;a<s;a++)n[a].dispose();for(let a=0,s=i.length;a<s;a++){let l=i[a];l.image instanceof ImageBitmap&&l.image.close(),l.dispose()}o&&o.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let n=e.engineData.scene;n&&(t?(n.parent=this.group,n.updateMatrixWorld(!0)):n.parent=null)}setTileVisible(e,t){let n=e.engineData.scene,{activeTiles:r,group:i}=this;n&&(t?i.add(n):(i.remove(n),r.has(e)&&(n.parent=i))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let n=this._bytesUsed;return!n.has(e)&&t&&n.set(e,UC(t)),n.get(e)??null}calculateTileViewError(e,t){let n=e.engineData,r=this.cameras,i=this.cameraInfo,o=n.boundingVolume,a=!1,s=0,l=1/0,c=0,p=1/0;for(let u=0,d=r.length;u<d;u++){let m=i[u],g,v;if(m.isOrthographic){let w=m.pixelSize;g=e.geometricError/w,v=1/0}else{let w=m.sseDenominator;v=o.distanceToPoint(m.position),g=v===0?1/0:e.geometricError/(v*w)}let M=i[u].frustum;o.intersectsFrustum(M)&&(a=!0,s=Math.max(s,g),l=Math.min(l,v)),c=Math.max(c,g),p=Math.min(p,v)}a?(t.inView=!0,t.error=s,t.distanceFromCamera=l):(t.inView=!1,t.error=c,t.distanceFromCamera=p)}dispose(){super.dispose(),this.group.removeFromParent()}};var re=require("three"),Hy=require("three/addons/loaders/GLTFLoader.js"),Cm=require("three/addons/postprocessing/Pass.js");var Kk=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var Ey=new Yi;Ey.maxJobs=10,Ey.priorityCallback=(e,t)=>{let n=e.tile,r=t.tile,i=n.internal.renderer,o=r.internal.renderer,a=i.visibleTiles.has(n);return a===o.visibleTiles.has(r)?Hs(n,r):a?1:-1};var Ry=new re.Vector3;function mc(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,r=new re.BufferAttribute(new t(e.count*e.itemSize),e.itemSize,!0),i=e.itemSize,o=e.count;for(let a=0;a<o;a++)for(let s=0;s<i;s++){let l=re.MathUtils.clamp(e.getComponent(a,s),n,1);r.setComponent(a,s,l)}return r}function HC(e,t=Int16Array){let n=e.geometry,r=n.attributes,i=r.position;if(i.isInterleavedBufferAttribute||i.array instanceof t)return i;let o=new re.BufferAttribute(new t(i.count*i.itemSize),i.itemSize,!1),a=i.itemSize,s=i.count;n.computeBoundingBox();let l=n.boundingBox,{min:c,max:p}=l,u=2**(8*t.BYTES_PER_ELEMENT-1)-1,d=-u;for(let m=0;m<s;m++)for(let g=0;g<a;g++){let v=g===0?"x":g===1?"y":"z",M=c[v],w=p[v],x=re.MathUtils.mapLinear(i.getComponent(m,g),M,w,d,u);o.setComponent(m,g,x)}l.getCenter(Ry).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(Ry),e.scale.x*=.5*(p.x-c.x)/u,e.scale.y*=.5*(p.y-c.y)/u,e.scale.z*=.5*(p.z-c.z)/u,r.position=o,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var Tm=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:r,compressIndex:i,compressUvs:o,compressNormals:a,compressPosition:s,uvType:l,normalType:c,positionType:p}=this._options;e.traverse(u=>{if(u.material&&r){let d=u.material;for(let m in d){let g=d[m];g&&g.isTexture&&g.generateMipmaps&&(g.generateMipmaps=!1,g.minFilter=re.LinearFilter)}}if(u.geometry){let d=u.geometry,m=d.attributes;if(o){let{uv:g,uv1:v,uv2:M,uv3:w}=m;g&&(m.uv=mc(g,l)),v&&(m.uv1=mc(v,l)),M&&(m.uv2=mc(M,l)),w&&(m.uv3=mc(w,l))}if(n&&!m.normals&&d.computeVertexNormals(),a&&m.normals&&(m.normals=mc(m.normals,c)),s&&HC(u,p),i&&d.index){let g=m.position.count,v=d.index,M=g>65535?Uint32Array:g>255?Uint16Array:Uint8Array;if(!(v.array instanceof M)){let w=new M(d.index.count);w.set(v.array);let x=new re.BufferAttribute(w,1);d.setIndex(x)}}}})}};function Vn(e,t,n){return e&&t in e?e[t]:n}function Gy(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function GC(e){return/^FLOAT/.test(e)}function vc(e){return/^VEC/.test(e)}function xc(e){return/^MAT/.test(e)}function Wy(e,t,n,r=null){return xc(n)||vc(n)?r.fromArray(e,t):e[t]}function _m(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new re.Vector2;case"VEC3":return new re.Vector3;case"VEC4":return new re.Vector4;case"MAT2":return new re.Matrix2;case"MAT3":return new re.Matrix3;case"MAT4":return new re.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function ky(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 bc(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 WC(e,t=null){if(e.array){t=t&&Array.isArray(t)?t:[],t.length=e.count;for(let n=0,r=t.length;n<r;n++)t[n]=Du(e,t[n])}else t=Du(e,t);return t}function Du(e,t=null){let n=e.default,r=e.type;if(t||(t=_m(e)),n===null){switch(r){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(xc(r))t.fromArray(n);else if(vc(r))t.fromArray(n);else return n}function XC(e,t){if(e.noData===null)return t;let n=e.noData,r=e.type;if(Array.isArray(t))for(let a=0,s=t.length;a<s;a++)t[a]=i(t[a]);else t=i(t);return t;function i(a){return o(a)&&(a=Du(e,a)),a}function o(a){if(xc(r)){let s=a.elements;for(let l=0,c=n.length;l<c;l++)if(n[l]!==s[l])return!1;return!0}else if(vc(r)){for(let s=0,l=n.length;s<l;s++)if(n[s]!==a.getComponent(s))return!1;return!0}else return n===a}}function qC(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 $C(e,t){let{type:n,componentType:r,scale:i,offset:o,normalized:a}=e;if(Array.isArray(t))for(let u=0,d=t.length;u<d;u++)t[u]=s(t[u]);else t=s(t);return t;function s(u){return u=xc(n)?c(u):vc(n)?l(u):p(u),u}function l(u){return u.x=p(u.x),u.y=p(u.y),"z"in u&&(u.z=p(u.z)),"w"in u&&(u.w=p(u.w)),u}function c(u){let d=u.elements;for(let m=0,g=d.length;m<g;m++)d[m]=p(d[m]);return u}function p(u){return a&&(u=qC(r,u)),(a||GC(r))&&(u=u*i+o),u}}function Pm(e,t,n=null){if(e.array){Array.isArray(t)||(t=Array(e.count||0)),t.length=n===null?e.count:n;for(let r=0,i=t.length;r<i;r++)ky(e.type,t[r])||(t[r]=_m(e))}else ky(e.type,t)||(t=_m(e));return t}function Nu(e,t){for(let n in t)n in e||delete t[n];for(let n in e){let r=e[n];t[n]=Pm(r,t[n])}}function YC(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 Ou=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=Vn(t,"scale",1),this.max=Vn(t,"max",1/0),this.min=Vn(t,"min",-1/0),this.required=t.required||!1,this.noData=Vn(t,"noData",null),this.default=Vn(t,"default",null),this.semantic=Vn(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=Vn(n,"offset",this.offset),this.scale=Vn(n,"scale",this.scale),this.max=Vn(n,"max",this.max),this.min=Vn(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=Vn(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return Pm(this,e,t)}resolveDefaultElement(e){return Du(this,e)}resolveDefault(e){return WC(this,e)}resolveNoData(e){return XC(this,e)}resolveEnumsToStrings(e){let t=this.enumSet;if(this.type==="ENUM")if(Array.isArray(e))for(let r=0,i=e.length;r<i;r++)e[r]=n(e[r]);else e=n(e);return e;function n(r){let i=t.values.find(o=>o.value===r);return i===null?"":i.name}}adjustValueScaleOffset(e){return Gy(this.type)?$C(this,e):e}},Am=class{constructor(e,t={},n={},r=null){this.definition=e,this.class=t[e.class],this.className=e.class,this.enums=n,this.data=r,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=Ou){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}},KC=class extends Ou{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},ZC=class extends Am{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(KC)}getData(e,t,n={}){let r=this.properties;Nu(r,n);for(let i in r)n[i]=this.getPropertyValue(i,e,t,n[i]);return n}getPropertyValue(e,t,n,r=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let i=this.properties[e],o=i.type;if(!i)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(r);r=i.shapeToProperty(r);let a=n.getAttribute(i.attribute.toLowerCase());if(xc(o)){let s=r.elements;for(let l=s.length;0<l;)s[0]=a.getComponent(t,0)}else if(vc(o))r.fromBufferAttribute(a,t);else if(o==="SCALAR"||o==="ENUM")r=a.getX(t);else throw Error("StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.");return r=i.adjustValueScaleOffset(r),r=i.resolveEnumsToStrings(r),r=i.resolveNoData(r),r}},JC=class extends Ou{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=YC(this.type),this.arrayOffsets=Vn(n,"arrayOffsets",null),this.stringOffsets=Vn(n,"stringOffsets",null),this.arrayOffsetType=Vn(n,"arrayOffsetType","UINT32"),this.stringOffsetType=Vn(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:r,arrayOffsetType:i}=this,o=new(bc(i))(e[r]);n=o[t+1]-o[t]}return n}getIndexOffsetFromId(e,t){let n=t;if(this.arrayOffsets){let{arrayOffsets:r,arrayOffsetType:i}=this;n=new(bc(i))(e[r])[n]}else this.array&&(n*=this.count);return n}},QC=class extends Am{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(JC)}getData(e,t={}){let n=this.properties;Nu(n,t);for(let r in n)t[r]=this.getPropertyValue(r,e,t[r]);return t}_readValueAtIndex(e,t,n,r=null){let i=this.properties[e],{componentType:o,type:a}=i,s=this.data,l=s[i.values],c=new(bc(o,a))(l),p=i.getIndexOffsetFromId(s,t);if(Gy(a)||a==="ENUM")return Wy(c,(p+n)*i.valueLength,a,r);if(a==="STRING"){let u=p+n,d=0;if(i.stringOffsets!==null){let{stringOffsets:g,stringOffsetType:v}=i,M=new(bc(v))(s[g]);d=M[u+1]-M[u],u=M[u]}let m=new Uint8Array(c.buffer,u,d);r=new TextDecoder().decode(m)}else if(a==="BOOLEAN"){let u=p+n,d=Math.floor(u/8),m=u%8;r=(c[d]>>m&1)==1}return r}getPropertyValue(e,t,n=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let r=this.properties[e];if(!r)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return r.resolveDefault(n);let i=r.array,o=this.data,a=r.getArrayLengthFromId(o,t);if(n=r.shapeToProperty(n,a),i)for(let s=0,l=n.length;s<l;s++)n[s]=this._readValueAtIndex(e,t,s,n[s]);else n=this._readValueAtIndex(e,t,0,n);return n=r.adjustValueScaleOffset(n),n=r.resolveEnumsToStrings(n),n=r.resolveNoData(n),n}},fc=new re.Box2,Ly=class{constructor(){this._renderer=new re.WebGLRenderer,this._target=new re.WebGLRenderTarget(1,1),this._texTarget=new re.WebGLRenderTarget,this._quad=new Cm.FullScreenQuad(new re.ShaderMaterial({blending:re.CustomBlending,blendDst:re.ZeroFactor,blendSrc:re.OneFactor,uniforms:{map:{value:null},pixel:{value:new re.Vector2}},vertexShader:`
|
|
3673
|
+
`,vb=class extends $m.Effect{constructor(t=1){super("ExposureEffect",ok,{blendFunction:$m.BlendFunction.NORMAL,uniforms:new Map([["exposure",new Tw.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},Pw=(0,Ec.forwardRef)(function({exposure:t},n){let r=(0,Ec.useMemo)(()=>new vb(t),[]);return r.exposure=t,(0,Ec.useImperativeHandle)(n,()=>r,[r]),(0,Aw.jsx)("primitive",{object:r,dispose:null})});var bl=require("@react-three/fiber"),Ew=lm(require("@react-three/postprocessing")),kw=require("postprocessing"),Ri=require("three"),ki=require("react"),Lw=require("react/jsx-runtime"),ak=Ew.LensFlareEffect;function Rw({config:e}){let t=(0,bl.useThree)(c=>c.camera),n=(0,bl.useThree)(c=>c.raycaster),r=(0,bl.useThree)(c=>c.scene),i=(0,bl.useThree)(c=>c.viewport),o=(0,ki.useRef)(null),a=(0,ki.useRef)(new Ri.Vector3),s=(0,ki.useRef)(new Ri.Vector2),l=(0,ki.useMemo)(()=>new Ri.Vector3(...e.lensPosition),[e.lensPosition]),d=(0,ki.useMemo)(()=>new Ri.Color(e.colorGain??"#141414"),[e.colorGain]),u=(0,ki.useMemo)(()=>new Ri.Vector2(0,0),[]),m=(0,ki.useMemo)(()=>new ak({blendFunction:kw.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:l,screenRes:u,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:d,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[d,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,l,u]);return(0,ki.useEffect)(()=>(o.current=m,()=>{m.dispose(),o.current=null}),[m]),(0,ki.useEffect)(()=>{let c=m.uniforms.get("screenRes");c&&(c.value.x=i.width,c.value.y=i.height)},[m,i]),(0,bl.useFrame)((c,p)=>{let f=o.current;if(!f)return;let v=f.uniforms.get("lensPosition"),b=f.uniforms.get("opacity");if(!v||!b)return;let g=1;if(a.current.copy(l).project(t),a.current.z>1)return;v.value.x=a.current.x,v.value.y=a.current.y,s.current.x=a.current.x,s.current.y=a.current.y,n.setFromCamera(s.current,t);let y=n.intersectObjects(r.children,!0),{object:x}=y[0]||{};x&&(x.userData?.lensflare==="no-occlusion"?g=0:x instanceof Ri.Mesh&&(x.material.uniforms?._transmission?.value>.2||x.material._transmission&&x.material._transmission>.2?g=.2:x.material.transparent&&(g=x.material.opacity))),b.value=Ri.MathUtils.damp(b.value,g,12,p)}),(0,Lw.jsx)("primitive",{object:m,dispose:null})}var yb=require("@react-three/fiber"),Dw=require("postprocessing"),Ym=require("react");var kc=require("postprocessing"),Ft=require("three"),sk=`
|
|
3674
|
+
#include <common>
|
|
3675
|
+
#include <morphtarget_pars_vertex>
|
|
3676
|
+
#include <skinning_pars_vertex>
|
|
3677
|
+
#include <clipping_planes_pars_vertex>
|
|
3678
|
+
#include <logdepthbuf_pars_vertex>
|
|
3679
|
+
void main() {
|
|
3680
|
+
#include <skinbase_vertex>
|
|
3681
|
+
#include <begin_vertex>
|
|
3682
|
+
#include <morphtarget_vertex>
|
|
3683
|
+
#include <skinning_vertex>
|
|
3684
|
+
#include <project_vertex>
|
|
3685
|
+
#include <logdepthbuf_vertex>
|
|
3686
|
+
#include <clipping_planes_vertex>
|
|
3687
|
+
}`,lk=`
|
|
3688
|
+
#include <common>
|
|
3689
|
+
#include <clipping_planes_pars_fragment>
|
|
3690
|
+
#include <logdepthbuf_pars_fragment>
|
|
3691
|
+
uniform vec3 objectId;
|
|
3692
|
+
uniform bool onlySelected;
|
|
3693
|
+
void main() {
|
|
3694
|
+
#include <clipping_planes_fragment>
|
|
3695
|
+
#include <logdepthbuf_fragment>
|
|
3696
|
+
if (onlySelected && length(objectId) < 0.001) discard;
|
|
3697
|
+
gl_FragColor = vec4(objectId, step(0.001, length(objectId)));
|
|
3698
|
+
}`,ck=`
|
|
3699
|
+
uniform sampler2D selectionMask;
|
|
3700
|
+
uniform sampler2D visibleMask;
|
|
3701
|
+
uniform vec2 texelSize;
|
|
3702
|
+
uniform vec3 outlineColor;
|
|
3703
|
+
uniform float edgeStrength;
|
|
3704
|
+
float different(vec4 a, vec4 b) {
|
|
3705
|
+
return max(a.a, b.a) * step(0.001, length(a.rgb - b.rgb) + abs(a.a - b.a));
|
|
3706
|
+
}
|
|
3707
|
+
float visible(vec4 id, vec4 surface) {
|
|
3708
|
+
return surface.a * (1.0 - step(0.001, length(id.rgb - surface.rgb)));
|
|
3709
|
+
}
|
|
3710
|
+
float edgeAt(vec2 uv, vec2 offset, vec4 center, float centerVisible) {
|
|
3711
|
+
vec4 neighbor = texture2D(selectionMask, uv + offset);
|
|
3712
|
+
return different(center, neighbor) * max(centerVisible, visible(neighbor, texture2D(visibleMask, uv + offset)));
|
|
3713
|
+
}
|
|
3714
|
+
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
3715
|
+
vec4 c = texture2D(selectionMask, uv);
|
|
3716
|
+
float shown = visible(c, texture2D(visibleMask, uv));
|
|
3717
|
+
float edge = max(max(edgeAt(uv, vec2(texelSize.x, 0.0), c, shown), edgeAt(uv, vec2(-texelSize.x, 0.0), c, shown)),
|
|
3718
|
+
max(edgeAt(uv, vec2(0.0, texelSize.y), c, shown), edgeAt(uv, vec2(0.0, -texelSize.y), c, shown)));
|
|
3719
|
+
outputColor = vec4(outlineColor * edge * edgeStrength, max(inputColor.a, edge));
|
|
3720
|
+
}`,qm=class extends kc.Effect{constructor(n,r,i,o,a={}){super("SelectionOutlineEffect",ck,{blendFunction:kc.BlendFunction.SCREEN,uniforms:new Map([["selectionMask",new Ft.Uniform(null)],["visibleMask",new Ft.Uniform(null)],["texelSize",new Ft.Uniform(new Ft.Vector2)],["outlineColor",new Ft.Uniform(new Ft.Color(a.visibleEdgeColor??2278750))],["edgeStrength",new Ft.Uniform(a.edgeStrength??3)]])});this.scene=n;this.camera=r;this.getObjects=i;this.layer=o;this.maskTarget=new Ft.WebGLRenderTarget(1,1,{minFilter:Ft.NearestFilter,magFilter:Ft.NearestFilter});this.visibleTarget=new Ft.WebGLRenderTarget(1,1,{minFilter:Ft.NearestFilter,magFilter:Ft.NearestFilter});this.visibleTarget.texture.name="SelectionOutline.VisibleIDs",this.uniforms.get("visibleMask").value=this.visibleTarget.texture,this.maskTarget.texture.name="SelectionOutline.IDs",this.uniforms.get("selectionMask").value=this.maskTarget.texture,this.maskMaterial=new Ft.ShaderMaterial({name:"SelectionOutline.IDs",vertexShader:sk,fragmentShader:lk,uniforms:{objectId:new Ft.Uniform(new Ft.Vector3),onlySelected:new Ft.Uniform(!1)},blending:Ft.NoBlending,toneMapped:!1,clipping:!0}),this.maskPass=new kc.RenderPass(n,r,this.maskMaterial),this.maskPass.skipShadowMapUpdate=!0,this.maskPass.ignoreBackground=!0,this.maskPass.clearPass.overrideClearColor=new Ft.Color(0),this.maskPass.clearPass.overrideClearAlpha=0}update(n){let r=dk(this.scene,this.getObjects()),i=[],o=this.camera.layers.mask;try{this.scene.traverseVisible(a=>{if(!(a instanceof Ft.Mesh))return;let s=r.get(a)??0,l=a.onBeforeRender;a.onBeforeRender=function(...d){l.apply(this,d);let u=d[4];u instanceof Ft.ShaderMaterial&&u.uniforms.objectId&&(u.uniforms.objectId.value.set((s&255)/255,(s>>>8&255)/255,(s>>>16&255)/255),u.uniformsNeedUpdate=!0)},i.push(()=>{a.onBeforeRender=l})}),this.maskMaterial.uniforms.onlySelected.value=!1,this.maskPass.render(n,this.visibleTarget,null);for(let a of r.keys()){let s=a.layers.mask;a.layers.enable(this.layer),i.push(()=>{a.layers.mask=s})}this.camera.layers.set(this.layer),this.maskMaterial.uniforms.onlySelected.value=!0,this.maskPass.render(n,this.maskTarget,null)}finally{this.camera.layers.mask=o;for(let a of i)a()}}setSize(n,r){this.maskTarget.setSize(n,r),this.visibleTarget.setSize(n,r),this.uniforms.get("texelSize").value.set(1/n,1/r)}dispose(){this.maskPass.dispose(),this.maskMaterial.dispose(),this.maskTarget.dispose(),this.visibleTarget.dispose()}};function dk(e,t){let n=new Map(t.map((o,a)=>[o,a+1])),r=new Map,i=(o,a)=>{if(!o.visible)return;let s=n.get(o)??a;s&&o instanceof Ft.Mesh&&r.set(o,s);for(let l of o.children)i(l,s)};return i(e,0),r}var Nw=require("react/jsx-runtime");function Ow({objects:e,layer:t,options:n}){let r=(0,yb.useThree)(a=>a.scene),i=(0,yb.useThree)(a=>a.camera),o=(0,Ym.useMemo)(()=>new Dw.EffectPass(i,new qm(r,i,()=>e.current,t,n)),[r,i,e,t,n]);return(0,Ym.useEffect)(()=>()=>o.dispose(),[o]),(0,Nw.jsx)("primitive",{object:o,dispose:null})}function Bw(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 Iw(e,t){let n=e.update,r=t,i=NaN,o=NaN;return e.update=function(...a){(i!==r.near||o!==r.far)&&(this.mainCamera=t,i=r.near,o=r.far),n.apply(this,a)},()=>{e.update=n}}var Km=require("@react-three/postprocessing"),Er=require("postprocessing"),zw=require("three");function Vw(e){return e==="linear"?Er.ToneMappingMode.LINEAR:e==="reinhard"?Er.ToneMappingMode.REINHARD:Er.ToneMappingMode.ACES_FILMIC}function Zm(e){switch(e){case"verySmall":return Er.KernelSize.VERY_SMALL;case"small":return Er.KernelSize.SMALL;case"medium":return Er.KernelSize.MEDIUM;case"large":return Er.KernelSize.LARGE;case"veryLarge":return Er.KernelSize.VERY_LARGE;case"huge":return Er.KernelSize.HUGE}}function Uw(e){switch(e){case"constantMild":return Er.GlitchMode.CONSTANT_MILD;case"constantWild":return Er.GlitchMode.CONSTANT_WILD;default:return Er.GlitchMode.SPORADIC}}function xb(e){let t=new zw.Color(e);return[t.r,t.g,t.b,1]}function Fw(e){return e==="radial"?Km.RampType.Radial:e==="mirroredLinear"?Km.RampType.MirroredLinear:Km.RampType.Linear}var Pt=require("react/jsx-runtime"),vl={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new Li.Color(la.color).getHex(),hiddenEdgeColor:new Li.Color(la.color).multiplyScalar(.35).getHex(),kernelSize:ua.KernelSize.VERY_SMALL,blur:!1,xRay:!1},uk={edgeStrength:3};function pk(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var fu=[],mk=(0,wn.memo)(function({sceneConfig:t,selectedObjectRef:n,selectedObjectOutlineColor:r,highlightOnHover:i=!1,disabled:o=!1,onOutlineEffect:a,hasMultiSelection:s,multiOutlineObjects:l}){let d=(0,Rc.useThree)(_=>_.scene),u=(0,Rc.useThree)(_=>_.gl),m=(0,wn.useRef)(null),c=t?.postProcessing,p=n??null,f=c?.outline.enabled===!0,v=f||i,b=(0,wn.useMemo)(()=>new Li.Color(r??"#22c55e").getHex(),[r]),g=(0,wn.useMemo)(()=>({...uk,blendFunction:ua.BlendFunction.SCREEN,visibleEdgeColor:b}),[b]),y=2;for(;y===c?.outline.selectionLayer||y===c?.selectiveBloom.selectionLayer;)y+=1;let[x,M]=(0,wn.useState)(()=>u.xr?.isPresenting??!1);(0,wn.useEffect)(()=>{let _=u.xr;if(!_)return;let k=()=>M(!0),R=()=>M(!1);return _.addEventListener("sessionstart",k),_.addEventListener("sessionend",R),M(_.isPresenting),()=>{_.removeEventListener("sessionstart",k),_.removeEventListener("sessionend",R)}},[u]);let P=d.children.filter(_=>_.isLight),S=(0,wn.useMemo)(()=>new Li.Vector2(c?.chromaticAberration.offsetX??.002,c?.chromaticAberration.offsetY??.002),[c?.chromaticAberration.offsetX,c?.chromaticAberration.offsetY]),T=(0,wn.useMemo)(()=>new Li.Color(c?.outline.visibleEdgeColor??"#ffffff").getHex(),[c?.outline.visibleEdgeColor]),h=(0,wn.useMemo)(()=>new Li.Color(c?.outline.hiddenEdgeColor??"#22090a").getHex(),[c?.outline.hiddenEdgeColor]),w=(0,wn.useMemo)(()=>xb(c?.ramp.startColor??"#000000"),[c?.ramp.startColor]),C=(0,wn.useMemo)(()=>xb(c?.ramp.endColor??"#ffffff"),[c?.ramp.endColor]);return!c||x||o?null:(0,Pt.jsxs)(Pt.Fragment,{children:[c.godRays.enabled===!0&&(0,Pt.jsxs)("mesh",{ref:m,position:c.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,Pt.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,Pt.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,Pt.jsxs)(tt.EffectComposer,{multisampling:0,enableNormalPass:c.ssao.enabled===!0,autoClear:!1,children:[c.smaa.enabled===!0&&(0,Pt.jsx)(tt.SMAA,{}),c.ssao.enabled===!0&&(0,Pt.jsx)(tt.SSAO,{samples:c.ssao.samples,rings:c.ssao.rings,intensity:c.ssao.intensity,radius:c.ssao.radius,bias:c.ssao.bias,luminanceInfluence:c.ssao.luminanceInfluence,fade:c.ssao.fade,minRadiusScale:c.ssao.minRadiusScale,worldDistanceThreshold:c.ssao.worldDistanceThreshold,worldDistanceFalloff:c.ssao.worldDistanceFalloff,worldProximityThreshold:c.ssao.worldProximityThreshold,worldProximityFalloff:c.ssao.worldProximityFalloff}),c.autofocus.enabled===!0&&(0,Pt.jsx)(tt.Autofocus,{focusDistance:c.autofocus.focusDistance,focusRange:c.autofocus.focusRange,focalLength:c.autofocus.focalLength,bokehScale:c.autofocus.bokehScale,target:c.autofocus.target,mouse:c.autofocus.mouse,debug:c.autofocus.debug||void 0,manual:c.autofocus.manual,smoothTime:c.autofocus.smoothTime}),c.autofocus.enabled!==!0&&c.depthOfField.enabled===!0&&(0,Pt.jsx)(tt.DepthOfField,{focusDistance:c.depthOfField.focusDistance,focusRange:c.depthOfField.focusRange,focalLength:c.depthOfField.focalLength,bokehScale:c.depthOfField.bokehScale}),c.bloom.enabled===!0&&(0,Pt.jsx)(tt.Bloom,{intensity:c.bloom.intensity,luminanceThreshold:c.bloom.luminanceThreshold,luminanceSmoothing:c.bloom.luminanceSmoothing,mipmapBlur:c.bloom.mipmapBlur,radius:c.bloom.radius,levels:c.bloom.levels}),c.selectiveBloom.enabled===!0&&(0,Pt.jsx)(tt.SelectiveBloom,{selection:p??void 0,lights:P,selectionLayer:c.selectiveBloom.selectionLayer,intensity:c.selectiveBloom.intensity,luminanceThreshold:c.selectiveBloom.luminanceThreshold,luminanceSmoothing:c.selectiveBloom.luminanceSmoothing,kernelSize:Zm(c.selectiveBloom.kernelSize),mipmapBlur:c.selectiveBloom.mipmapBlur,inverted:c.selectiveBloom.inverted,ignoreBackground:c.selectiveBloom.ignoreBackground}),v&&(0,Pt.jsx)(tt.Outline,{ref:a,selection:fu,selectionLayer:c.outline.selectionLayer,blendFunction:ua.BlendFunction.SCREEN,edgeStrength:f?c.outline.edgeStrength:vl.edgeStrength,pulseSpeed:f?c.outline.pulseSpeed:vl.pulseSpeed,visibleEdgeColor:f?T:vl.visibleEdgeColor,hiddenEdgeColor:f?h:vl.hiddenEdgeColor,kernelSize:f?Zm(c.outline.kernelSize):vl.kernelSize,blur:f?c.outline.blur:vl.blur,xRay:f?c.outline.xRay:vl.xRay}),s&&(0,Pt.jsx)(Ow,{objects:l,layer:y,options:g}),c.chromaticAberration.enabled===!0&&(0,Pt.jsx)(tt.ChromaticAberration,{offset:S,radialModulation:c.chromaticAberration.radialModulation,modulationOffset:c.chromaticAberration.modulationOffset}),c.colorAverage.enabled===!0&&(0,Pt.jsx)(tt.ColorAverage,{}),c.dotScreen.enabled===!0&&(0,Pt.jsx)(tt.DotScreen,{angle:c.dotScreen.angle,scale:c.dotScreen.scale}),c.glitch.enabled===!0&&(0,Pt.jsx)(tt.Glitch,{mode:Uw(c.glitch.mode),delay:new Li.Vector2(c.glitch.delay[0],c.glitch.delay[1]),duration:new Li.Vector2(c.glitch.duration[0],c.glitch.duration[1]),strength:new Li.Vector2(c.glitch.strength[0],c.glitch.strength[1]),chromaticAberrationOffset:new Li.Vector2(c.glitch.chromaticAberrationOffset[0],c.glitch.chromaticAberrationOffset[1]),columns:c.glitch.columns,ratio:c.glitch.ratio,active:!0}),c.grid.enabled===!0&&(0,Pt.jsx)(tt.Grid,{scale:c.grid.scale,lineWidth:c.grid.lineWidth}),c.lensflare.enabled===!0&&(0,Pt.jsx)(Rw,{config:c.lensflare}),c.godRays.enabled===!0&&(0,Pt.jsx)(tt.GodRays,{sun:m,samples:c.godRays.samples,density:c.godRays.density,decay:c.godRays.decay,weight:c.godRays.weight,exposure:c.godRays.exposure,clampMax:c.godRays.clampMax,blur:c.godRays.blur,kernelSize:Zm(c.godRays.kernelSize)}),c.noise.enabled===!0&&(0,Pt.jsx)(tt.Noise,{premultiply:c.noise.premultiply,opacity:c.noise.opacity,blendFunction:ua.BlendFunction.ADD}),c.brightnessContrast.enabled===!0&&(0,Pt.jsx)(tt.BrightnessContrast,{brightness:c.brightnessContrast.brightness,contrast:c.brightnessContrast.contrast}),c.hueSaturation.enabled===!0&&(0,Pt.jsx)(tt.HueSaturation,{hue:c.hueSaturation.hue,saturation:c.hueSaturation.saturation}),c.toneMapping.enabled===!0&&(0,Pt.jsx)(Pw,{exposure:c.toneMapping.exposure}),c.vignette.enabled===!0&&(0,Pt.jsx)(tt.Vignette,{eskil:c.vignette.eskil,offset:c.vignette.offset,darkness:c.vignette.darkness,blendFunction:ua.BlendFunction.NORMAL}),c.toneMapping.enabled===!0&&(0,Pt.jsx)(tt.ToneMapping,{mode:Vw(c.toneMapping.mode),resolution:c.toneMapping.resolution,whitePoint:c.toneMapping.whitePoint,middleGrey:c.toneMapping.middleGrey,minLuminance:c.toneMapping.minLuminance,averageLuminance:c.toneMapping.averageLuminance,adaptationRate:c.toneMapping.adaptationRate}),c.sepia.enabled===!0&&(0,Pt.jsx)(tt.Sepia,{intensity:c.sepia.intensity,blendFunction:ua.BlendFunction.NORMAL}),c.scanline.enabled===!0&&(0,Pt.jsx)(tt.Scanline,{density:c.scanline.density,blendFunction:ua.BlendFunction.OVERLAY}),c.pixelation.enabled===!0&&(0,Pt.jsx)(tt.Pixelation,{granularity:c.pixelation.granularity}),c.ramp.enabled===!0&&(0,Pt.jsx)(tt.Ramp,{rampType:Fw(c.ramp.rampType),rampStart:c.ramp.rampStart,rampEnd:c.ramp.rampEnd,startColor:w,endColor:C,opacity:c.ramp.rampMask?1:c.ramp.opacity??.5,rampBias:c.ramp.rampBias,rampGain:c.ramp.rampGain,rampMask:c.ramp.rampMask,rampInvert:c.ramp.rampInvert})]})]})});function hk(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function jw({hoveredObjectRef:e,selectedObjectRefs:t,...n}){let r=(0,Rc.useThree)(m=>m.scene),i=(0,Rc.useThree)(m=>m.camera),o=(0,Rc.useThree)(m=>m.invalidate),[a,s]=(0,wn.useState)(null),l=(0,wn.useRef)(fu);l.current=t??fu;let d=(0,wn.useCallback)(m=>s(m),[]);(0,wn.useLayoutEffect)(()=>{if(a)return Iw(a,i)},[a,i]);let u=(0,wn.useRef)({effect:null,objects:fu});return(0,wn.useEffect)(()=>{if(!a)return;let c=n.sceneConfig?.postProcessing?.outline.enabled===!0?pk(r):e&&Bw(e)?[e]:fu;u.current.effect===a&&hk(u.current.objects,c)||(u.current={effect:a,objects:c},a.selection.set(c),o())}),(0,wn.useEffect)(()=>{o()},[t,o]),(0,Pt.jsx)(mk,{...n,onOutlineEffect:d,hasMultiSelection:l.current.length>0,multiOutlineObjects:l})}var Fn=require("react/jsx-runtime"),fk=1.5;function wb({children:e,camera:t,backgroundColor:n,shadows:r=!0,sceneConfig:i,selectedObjectRef:o,selectedObjectRefs:a,selectedObjectOutlineColor:s,hoveredObjectRef:l,highlightOnHover:d,renderMode:u="demand",maxDpr:m=2,xrStore:c,rendererCaptureRef:p,preserveDrawingBuffer:f=!1,reduceGpuLoad:v,suspended:b=!1,paused:g=!1,onRendererCreated:y,backend:x="webgl"}){let M=x==="webgpu",P=v??eu(),S=P?Math.min(m,fk):m,T=r&&!P,h=(0,io.useMemo)(()=>n?{background:n}:i?.background.enabled?i.background.type==="color"?{background:i.background.color}:i.background.type==="image"&&i.background.imageUrl.trim()?{backgroundImage:`url("${i.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[n,i]),w=(0,io.useMemo)(()=>{if(n)return n;let X=i?.background;if(X?.enabled){if(X.type==="color")return X.color;if(X.type==="image"&&X.imageUrl.trim()||X.type==="environment")return null}return"#1c1c1d"},[n,i]),C=(0,io.useMemo)(()=>{let X=i?.postProcessing;return X?!!(X.glitch.enabled||X.noise.enabled||X.lensflare.enabled&&X.lensflare.animated):!1},[i?.postProcessing]),[_,k]=(0,io.useState)(!1),R=i?.environment,U=i?.groundShadows,H=(0,io.useMemo)(()=>{if(!R)return null;if(R.source==="custom"){let X=R.customEnvironmentUrl.trim();return Gm(X)?{files:X}:null}return{preset:R.preset}},[R]),B=(0,Fn.jsxs)(Fn.Fragment,{children:[(0,Fn.jsx)(f0,{captureRef:p}),(0,Fn.jsx)(g0,{}),(0,Fn.jsx)(Cw,{cameraConfig:t}),(0,Fn.jsx)(ww,{active:C}),(0,Fn.jsx)(Mw,{color:w}),H?(0,Fn.jsx)(vc,{onError:X=>console.warn("Failed to load environment map:",X),children:(0,Fn.jsx)(io.Suspense,{fallback:null,children:(0,Fn.jsx)(Hw.Environment,{...H,environmentIntensity:R?.intensity??.25,backgroundIntensity:R?.intensity??.25,background:i?.background.enabled===!0&&i.background.type==="environment"})})}):null,(0,Fn.jsx)(_w,{rotation:R?.rotation??0}),c&&(0,Fn.jsx)(xw,{onPresentingChange:k}),U?.enabled&&U.mode==="shadowCatcher"&&!_&&!M&&(0,Fn.jsx)(Sw,{position:[0,U.height,0],scale:U.size,opacity:U.intensity,blur:U.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,Fn.jsx)(jw,{sceneConfig:i,selectedObjectRef:o,selectedObjectRefs:a,selectedObjectOutlineColor:s,hoveredObjectRef:l,highlightOnHover:d,disabled:P||M}),M?(0,Fn.jsx)(bk,{toneMapping:i?.postProcessing.toneMapping}):null]});return(0,Fn.jsx)(gu.Canvas,{frameloop:b||g&&!_?"never":u,onCreated:({gl:X})=>y?.(X),dpr:[1,S],shadows:T?"percentage":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:h,camera:t??{fov:50},gl:M?l0:{preserveDrawingBuffer:f,toneMapping:pa.NoToneMapping,toneMappingExposure:1},flat:M||void 0,children:c&&!M?(0,Fn.jsxs)(Gw.XR,{store:c,children:[(0,Fn.jsx)(yw,{renderMode:u,suspended:b}),B]}):B})}var gk={linear:pa.LinearToneMapping,reinhard:pa.ReinhardToneMapping,aces:pa.ACESFilmicToneMapping};function bk({toneMapping:e}){let t=(0,gu.useThree)(a=>a.gl),n=(0,gu.useThree)(a=>a.invalidate),r=e?.enabled===!0,i=e?.mode??"aces",o=e?.exposure??1;return(0,io.useEffect)(()=>{t.toneMapping=r?gk[i]:pa.NoToneMapping,t.toneMappingExposure=r?o:1,n()},[t,n,r,i,o]),null}var Qm=require("@react-three/drei"),bu=require("three"),ma=require("react");var Jm=e=>e*Math.PI/180;function Ww(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:Jm(e?.minPolarAngle??0),maxPolarAngle:Jm(e?.maxPolarAngle??180),minAzimuthAngle:Jm(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:Jm(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}var Sb=new WeakSet;function Xw(e,t){t?Sb.add(e):Sb.delete(e)}function Lc(e,t){return Sb.has(e)?0:t}var Mb=require("react/jsx-runtime");function _b({controlsRef:e,onCameraChange:t,cameraLimits:n,controllerType:r="orbit",onPointerLockExit:i,reducedMotion:o=!1}){let a=r==="orbit",s=(0,ma.useRef)(null);return(0,ma.useEffect)(()=>{if(!a)return s.current?.lock(),()=>{s.current?.unlock()}},[a]),(0,ma.useEffect)(()=>{a&&document.pointerLockElement&&document.exitPointerLock()},[a]),(0,ma.useEffect)(()=>{if(a)return;let l=()=>{document.pointerLockElement||i?.()};return document.addEventListener("pointerlockchange",l),()=>{document.removeEventListener("pointerlockchange",l)}},[a,i]),(0,ma.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let l=e.current;l&&Xw(l,o)},[a,e,o]),(0,ma.useEffect)(()=>{if(!a||!t||!e||typeof e!="object"||!("current"in e))return;let l=e.current;if(!l)return;let d=()=>{t(l.camera,l)};return l.addEventListener("update",d),()=>{l.removeEventListener("update",d)}},[a,e,t]),(0,ma.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let l=e.current;if(!l)return;let d=Ww(n);l.minDistance=d.minDistance,l.maxDistance=d.maxDistance,l.minPolarAngle=d.minPolarAngle,l.maxPolarAngle=d.maxPolarAngle,l.minAzimuthAngle=d.minAzimuthAngle,l.maxAzimuthAngle=d.maxAzimuthAngle,l.boundaryEnclosesCamera=d.boundaryEnclosesCamera,l.boundaryFriction=d.boundaryFriction,l.setBoundary(d.panBoundary?new bu.Box3(new bu.Vector3(...d.panBoundary[0]),new bu.Vector3(...d.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,Mb.jsx)(Qm.CameraControls,{ref:e,makeDefault:!0,smoothTime:o?0:.3,dollyToCursor:!0}):(0,Mb.jsx)(Qm.PointerLockControls,{ref:s,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}var oo=require("react"),yu=require("@react-three/fiber"),Kw=require("three");var eh=require("three"),Cb=Symbol("react-immersive.model-node-id");function vk(e,t){Object.defineProperty(e,Cb,{value:t,configurable:!0})}function ci(e){let t=new Map;e.traverse(l=>{if(!l.name)return;let d=t.get(l.name);d?d.push(l):t.set(l.name,[l])});let n=Object.create(null),r=new WeakMap,i=new Map,o=new Set(Array.from(t,([l,d])=>d.length===1?l:null).filter(l=>l!==null)),a=new Set,s=(l,d)=>{vk(l,d),n[d]=l,r.set(l,d),a.add(d)};for(let[l,d]of t)d.length===1&&s(d[0],l);for(let[l,d]of t){if(d.length<2)continue;let u=[];d.forEach((m,c)=>{let p=`${l} [${c+1}]`,f=p,v=2;for(;o.has(f)||a.has(f);)f=`${p}.${v++}`;s(m,f),u.push(f)}),i.set(l,u)}return{nodesById:n,idByNode:r,duplicateNames:i}}function vu(e){return e[Cb]??e.name??null}function $w(e,t){let n=t.replace(/\.[^./\\]+$/,"");e.traverse(r=>{r.name&&(r.name=eh.PropertyBinding.sanitizeNodeName(`${n}_${r.name}`))})}function qw(e,t){let n=t.replace(/\.[^./\\]+$/,""),r=e.clone();for(let i of r.tracks){let a=eh.PropertyBinding.parseTrackName(i.name).nodeName??"",s=eh.PropertyBinding.sanitizeNodeName(`${n}_${a}`);i.name=s+i.name.slice(a.length)}return r}function di(e,t){let n=null,r=[];return e.traverse(i=>{i[Cb]===t&&(n=i),i.name===t&&r.push(i)}),n??(r.length===1?r[0]:null)}var Di=require("react/jsx-runtime");function Zw(e,t){if(!t)return e;let n=t*Math.PI/180,r=Math.cos(n),i=Math.sin(n);return[e[0]*r+e[2]*i,e[1],-e[0]*i+e[2]*r]}function yk(e,t){let[n,r,i]=e.center,o=e.radius,a=Math.hypot(t[0],t[1],t[2]),s=a>1e-6?[t[0]/a,t[1]/a,t[2]/a]:[0,1,0],l=o*2;return{position:[n+s[0]*l,r+s[1]*l,i+s[2]*l],target:e.center,extent:o,near:Math.max(o/100,.001),far:l+o*2}}function xk(e,t){let n=t[0]-e.center[0],r=t[1]-e.center[1],i=t[2]-e.center[2],o=Math.hypot(n,r,i);return{near:Math.max(o-e.radius,o*.01,.001),far:o+e.radius*2}}function wk(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var Sk={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}]},Mk={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function Yw({light:e,shadows:t,shadowsEnabled:n,environmentRotation:r,modelBounds:i,objectBindings:o,nodeRefs:a}){let s=(0,oo.useRef)(null),l=(0,oo.useRef)(null),d=(0,oo.useRef)(null),u=(0,yu.useThree)(g=>g.camera),m=(0,yu.useThree)(g=>g.scene),c=(0,oo.useMemo)(()=>new Kw.Vector3,[]),p=(0,oo.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:Zw(e.position,r),[e.position,e.attachedToCamera,e.attachment,r]);(0,yu.useFrame)(()=>{let g=s.current??l.current??d.current;if(!g)return;if(e.attachedToCamera){g.position.copy(u.position);return}let y=e.attachment;if(!y)return;let x=o?ts(o,y.objectId):null,P=(x?o?.[x]:void 0)?.modelObjectId??y.objectId,S=(x?a?.current[x]:void 0)??di(m,P);S&&(c.fromArray(y.offset),S.localToWorld(c),g.position.copy(c))});let f=n&&t.enabled&&e.castShadow,v=(0,oo.useMemo)(()=>e.type==="directional"&&f&&i&&!e.attachedToCamera?yk(i,p):null,[e.type,e.attachedToCamera,f,i,p]),b=(0,oo.useMemo)(()=>e.type==="spot"&&f&&i&&!e.attachedToCamera?xk(i,p):null,[e.type,e.attachedToCamera,f,i,p]);return(0,oo.useEffect)(()=>{let g=s.current??d.current;if(!g)return;let[y,x,M]=wk(e,f,i);g.target.position.set(y,x,M),g.target.updateMatrixWorld()},[e,f,i]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,Di.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:v?.position??p,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":v?.near??.5,"shadow-camera-far":v?.far??40,"shadow-camera-left":-(v?.extent??8),"shadow-camera-right":v?.extent??8,"shadow-camera-top":v?.extent??8,"shadow-camera-bottom":-(v?.extent??8)}):e.type==="point"?(0,Di.jsx)("pointLight",{ref:l,color:e.color,intensity:e.intensity,position:p,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,Di.jsx)("spotLight",{ref:d,color:e.color,intensity:e.intensity,position:p,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":b?.near??.5,"shadow-camera-far":b?.far??40}):e.type==="hemisphere"?(0,Di.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function Tb({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:r=0,environmentConfig:i,modelBounds:o,objectBindings:a,nodeRefs:s}){let l=e??Sk,d=t??Mk,u=i?.shadowLight,m=Zw([5,10,5],r);return(0,Di.jsxs)(Di.Fragment,{children:[(0,Di.jsx)("ambientLight",{intensity:l.ambient.intensity,color:l.ambient.color}),l.lights.map(c=>(0,Di.jsx)(Yw,{light:c,shadows:d,shadowsEnabled:n,environmentRotation:r,modelBounds:o,objectBindings:a,nodeRefs:s},c.id)),u?.enabled&&(0,Di.jsx)(Yw,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:u.intensity,position:m,attachedToCamera:!1,castShadow:!0,shadowBias:u.bias,visible:!0},shadows:d,shadowsEnabled:n,environmentRotation:0,modelBounds:o,objectBindings:a,nodeRefs:s})]})}var fe=require("react"),Sl=require("@react-three/fiber");var xu=require("@react-three/fiber"),yl=require("three"),as=require("three-stdlib"),aS=require("three/examples/jsm/loaders/USDLoader.js");var _k=require("@react-three/drei"),Ck=require("@react-three/fiber"),Tk=require("react"),Jw=require("three");var Dc=require("three-stdlib");function Pk(e){return{name:"RI_unlit_emissive_texture",async afterRoot(t){let n=e.json.materials??[],r=new Map;if(n.forEach(o=>{let a=!!o?.extensions?.KHR_materials_unlit,s=!!o?.pbrMetallicRoughness?.baseColorTexture;a&&!s&&o?.emissiveTexture&&o.name&&r.set(o.name,o.emissiveTexture.index)}),r.size===0||!t.scene)return;let i=new Map;await Promise.all([...r].map(async([o,a])=>{let s=await e.getDependency("texture",a);s&&(s.colorSpace=Jw.SRGBColorSpace,i.set(o,s))})),t.scene.traverse(o=>{let a=Array.isArray(o.material)?o.material:o.material?[o.material]:[];for(let s of a){let l=s.name?i.get(s.name):void 0;l&&!s.map&&(s.map=l,s.needsUpdate=!0)}})}}}var Pb="https://assets.react-immersive.liveroom.dev/three-r184/draco/",Ab="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function Ak(e,t){if(!Po(t))return e.detectSupport(t);let n=t,r=i=>n.hasFeature(i);return e.workerConfig={astcSupported:r("texture-compression-astc"),etc1Supported:r("texture-compression-etc1"),etc2Supported:r("texture-compression-etc2"),dxtSupported:r("texture-compression-s3tc"),bptcSupported:r("texture-compression-bc"),pvrtcSupported:r("texture-compression-pvrtc")},e}function Qw(e,t={},n){let{dracoDecoderPath:r=Pb,ktx2TranscoderPath:i=Ab,meshopt:o=!0}=t;if(r){let a=new Dc.DRACOLoader;a.setDecoderPath(r),e.setDRACOLoader(a)}if(o&&e.setMeshoptDecoder(Dc.MeshoptDecoder),i&&n){let a=Ak(new Dc.KTX2Loader().setTranscoderPath(i),n);e.setKTX2Loader(a)}e.register((a=>Pk(a)))}var Eb="KHR_materials_variants",eS="riMaterialVariants",tS="riMaterialVariantGroups";function br(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ek(e){if(!br(e)||!br(e.extensions))return[];let t=e.extensions[Eb];if(!br(t)||!Array.isArray(t.variants))return[];let n=new Set;return t.variants.map((r,i)=>{let o=br(r)&&typeof r.name=="string"&&r.name?r.name:`Variant ${i+1}`,a=o;for(let s=2;n.has(a);s+=1)a=`${o} (${s})`;return n.add(a),a})}function nS(e){let t=e.userData?.gltfExtensions;if(!br(t))return[];let n=t[Eb];return!br(n)||!Array.isArray(n.mappings)?[]:n.mappings.filter(r=>br(r)&&Number.isInteger(r.material)&&Array.isArray(r.variants)&&r.variants.every(Number.isInteger))}function rS(e,t){for(let n=t.length-1;n>=0;n-=1){let r=t[n];if(r<0)continue;let i=e.find(o=>o.variants.includes(r));if(i)return i.material}return null}var kk=/^\s*(.+?)\s*(?::|\s\/\s)\s*(.+?)\s*$/;function Rk(e){let t=Math.min(Math.max(e,0),1),n=t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;return Math.round(n*255)}function Lk(e){if(!br(e))return;let t=br(e.pbrMetallicRoughness)?e.pbrMetallicRoughness:{};if(t.baseColorTexture!==void 0)return;let n=Array.isArray(t.baseColorFactor)?t.baseColorFactor:[1,1,1,1];if(n.slice(0,3).every(r=>typeof r=="number"))return`#${n.slice(0,3).map(r=>Rk(r).toString(16).padStart(2,"0")).join("")}`}function Dk(e,t){if(t.length===0)return[];let n=br(e)?e:{},r=Array.isArray(n.meshes)?n.meshes:[],i=Array.isArray(n.accessors)?n.accessors:[],o=Array.isArray(n.materials)?n.materials:[],a=t.map(()=>new Set),s=t.map(()=>new Map);r.forEach((p,f)=>{(br(p)&&Array.isArray(p.primitives)?p.primitives:[]).forEach((b,g)=>{if(!br(b))return;let y=br(b.extensions)?b.extensions[Eb]:void 0;if(!br(y)||!Array.isArray(y.mappings))return;let x=br(b.attributes)?b.attributes.POSITION:void 0,M=typeof x=="number"?i[x]:void 0,P=br(M)&&typeof M.count=="number"?M.count:1;for(let S of y.mappings)if(!(!br(S)||!Number.isInteger(S.material)||!Array.isArray(S.variants)))for(let T of S.variants){if(!Number.isInteger(T)||!a[T])continue;a[T].add(`${f}/${g}`);let h=s[T],w=S.material;h.set(w,(h.get(w)??0)+P)}})});let l=t.map((p,f)=>{let v=null;for(let[g,y]of s[f])(v===null||y>(s[f].get(v)??0))&&(v=g);let b=v===null?void 0:Lk(o[v]);return{name:p,label:p,...b?{swatch:b}:{}}}),d=t.map(()=>-1),u=[],m=new Map;return t.forEach((p,f)=>{let v=kk.exec(p);if(!v)return;let[,b,g]=v;m.has(b)||(m.set(b,u.length),u.push({name:b,members:[]})),d[f]=m.get(b),u[d[f]].members.push(f),l[f].label=g}),t.map((p,f)=>f).filter(p=>d[p]<0).sort((p,f)=>+(a[p].size===0)-+(a[f].size===0)).forEach(p=>{let f=u.map((g,y)=>({group:g,groupIndex:y})).filter(({group:g})=>g.name===null&&g.members.some(y=>a[p].size===0||a[y].size===0?!1:[...a[p]].some(x=>a[y].has(x)))).map(({groupIndex:g})=>g);if(f.length===0&&a[p].size===0){let g=u.findIndex(y=>y.name===null);g>=0&&f.push(g)}if(f.length===0){d[p]=u.length,u.push({name:null,members:[p]});return}let[v,...b]=f;for(let g of b){for(let y of u[g].members)d[y]=v;u[v].members.push(...u[g].members),u[g].members=[]}d[p]=v,u[v].members.push(p)}),u.filter(p=>p.members.length>0).sort((p,f)=>Math.min(...p.members)-Math.min(...f.members)).map(p=>({name:p.name,variants:[...p.members].sort((f,v)=>f-v).map(f=>l[f])}))}function th(e,t,n){let r=n.find(o=>o.variants.some(a=>a.name===t)),i=new Set(r?.variants.map(o=>o.name)??[t]);return[...e.filter(o=>!i.has(o)),t]}function os(e){if(Array.isArray(e.activeVariants))return e.activeVariants.filter(n=>typeof n=="string");let t=e.materialVariant;return typeof t=="string"&&t?[t]:[]}function iS(e){let t=e.parser,n=Ek(t?.json);if(!(!t||n.length===0))return e.scene.userData[eS]=n,e.scene.userData[tS]=Dk(t.json,n),{names:n,resolveMaterial:async(r,i)=>{let o={geometry:i.geometry,material:await t.getDependency("material",r),isPoints:i.isPoints,isLine:i.isLine};return t.assignFinalMaterial(o),o.material}}}function kb(e){let t=e.userData?.[eS];return Array.isArray(t)&&t.every(n=>typeof n=="string")?t:[]}function Oc(e){let t=e.userData?.[tS];if(Array.isArray(t))return t;let n=kb(e);return n.length>0?[{name:null,variants:n.map(r=>({name:r,label:r}))}]:[]}function Nc(e,t){let{materialVariant:n,...r}=e;return{...r,activeVariants:t}}var rh=class extends yl.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,r,i,o){this.loadAsset(n,i).then(r).catch(o)}async loadAsset(n,r){let i=Bk(this.options.source),{format:o}=this.options.source;if(o==="obj")return Ok(n,i,this.options.source,r);if(o==="fbx"){let l=Rb(this,new as.FBXLoader(i)),d=Vk(n,this.options.source);d&&l.setResourcePath(d);let u=await l.loadAsync(n,r);return nh(u,"FBXMesh",!1),{scene:u,animations:u.animations??[]}}if(o==="stl"||o==="ply"){let l=await Nk(n,i,r),d=e1(this.options.source.entryPath??n,o==="stl"?"STL model":"PLY model"),u=o==="stl"?t1(l,d):n1(l,d);return nh(u,o==="stl"?"STLMesh":"PLYMesh",!0),{scene:u,animations:[]}}if(o==="usdz"){let d=await Rb(this,new aS.USDLoader(i)).loadAsync(n,r);return nh(d,"USDZMesh",!1),{scene:d,animations:d.animations??[]}}let a=Rb(this,new as.GLTFLoader(i));Qw(a,this.options.decoderConfig,this.options.renderer);let s=await a.loadAsync(n,r);return{scene:s.scene,animations:s.animations??[],materialVariants:iS(s)}}};B0(e=>{xu.useLoader.clear(rh,e)});function wu(e,t={},n,r){let i=(0,xu.useThree)(s=>s.gl),o=W0(e),a=n?{...o,format:n}:o;return(0,xu.useLoader)(rh,e,s=>{s.configure({source:a,decoderConfig:t,renderer:i})},r)}async function Ok(e,t,n,r){let i=await oS(e,t,r),o=new as.OBJLoader(t),a=Ik(i);if(a){let l=zk(a,e,n);if(l)try{let d=await oS(l.url,t),m=new as.MTLLoader(t).parse(d,l.basePath);m.preload(),o.setMaterials(m)}catch(d){console.warn(`[react-immersive] Could not load OBJ material ${a}; rendering geometry with fallback materials.`,d)}}let s=o.parse(i);return nh(s,"OBJMesh",!0),{scene:s,animations:[]}}function nh(e,t,n){let r=new Set,i=0;e.traverse(o=>{if(!("isMesh"in o&&o.isMesh===!0)){o.name&&r.add(o.name);return}let s=o.name||`${t}_${++i}`;if(!n&&o.name){r.add(o.name);return}let l=s,d=2;for(;r.has(l);)l=`${s}_${d++}`;o.name=l,r.add(l)})}function oS(e,t,n){let r=new yl.FileLoader(t);return r.setResponseType("text"),r.loadAsync(e,n)}function Nk(e,t,n){let r=new yl.FileLoader(t);return r.setResponseType("arraybuffer"),r.loadAsync(e,n)}function Rb(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function Bk(e){let t=new yl.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(r=>{if(/^(?:blob:|data:)/i.test(r))return r;let i=oh(lS(r).split(/[?#]/)[0]),o=n[i];if(o)return o;let a=ih(e.entryPath??""),s=oh(a?`${a}/${i}`:i);return n[s]??r}),t}function Ik(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function zk(e,t,n){if(n.resourceUrls&&n.entryPath){let r=oh(`${ih(n.entryPath)}/${lS(e)}`),i=n.resourceUrls[r];if(!i)return null;let o=ih(r);return{url:i,basePath:o?`${o}/`:""}}try{let r=new URL(e,t).href;return{url:r,basePath:sS(r)}}catch{return null}}function Vk(e,t){if(t.resourceUrls&&t.entryPath){let n=ih(t.entryPath);return n?`${n}/`:""}return sS(e)}function sS(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function ih(e){let t=oh(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function oh(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(r=>r&&r!=="."))n===".."?t.pop():t.push(n);return t.join("/")}function lS(e){try{return decodeURI(e)}catch{return e}}var Eo=require("three");function Bc(e){return new Eo.Matrix4().set(1,e[0],e[1],0,0,1,e[2],0,0,0,1,0,0,0,0,1)}function xl(e,t){e.matrixAutoUpdate=!t,e.updateMatrix(),t&&(e.matrix.makeRotationFromQuaternion(e.quaternion).multiply(Bc(t)).scale(e.scale).setPosition(e.position),e.matrixWorldNeedsUpdate=!0)}function cS(e,t,n){let r=new Eo.Vector3().setFromMatrixColumn(e,0),i=new Eo.Vector3().setFromMatrixColumn(e,1),o=new Eo.Vector3().setFromMatrixColumn(e,2),a=(f,v)=>{let b=f*(v<0?-1:1);return Math.abs(b-v)<1e-10?v:b},s=a(r.length(),t.x);if(Math.abs(s)<1e-12)return{rotation:n.clone(),scale:t.clone(),shear:void 0};r.divideScalar(s);let l=r.dot(i);i.addScaledVector(r,-l);let d=a(i.length(),t.y);if(Math.abs(d)<1e-12)return{rotation:n.clone(),scale:t.clone(),shear:void 0};i.divideScalar(d);let u=r.dot(o);o.addScaledVector(r,-u);let m=i.dot(o);o.addScaledVector(i,-m);let c=a(o.length(),t.z);if(Math.abs(c)<1e-12)return{rotation:n.clone(),scale:t.clone(),shear:void 0};o.divideScalar(c);let p=[l/d,u/c,m/c].map(f=>Math.abs(f)<1e-10?0:f);return{rotation:new Eo.Quaternion().setFromRotationMatrix(new Eo.Matrix4().makeBasis(r,i,o)).normalize(),scale:new Eo.Vector3(s,d,c),shear:p.some(Boolean)?p:void 0}}var Oi=require("react");function dS(e,t,n){let[r,i]=(0,Oi.useState)({}),o=(0,Oi.useRef)(new Map),[a,s]=(0,Oi.useState)(0),l=(0,Oi.useRef)(t);l.current=t;let d=(0,Oi.useRef)(n);d.current=n;let u=(0,Oi.useCallback)((m,c)=>{l.current?.some(p=>p.url===m)&&i(p=>p[m]===c?p:{...p,[m]:c})},[]);return(0,Oi.useEffect)(()=>{let m=new Set(t?.map(p=>p.url)),c=!1;for(let[p,f]of o.current)m.has(p)&&r[p]===f&&f.parent===e||(f.removeFromParent(),o.current.delete(p),c=!0);for(let[p,f]of Object.entries(r))!m.has(p)||o.current.get(p)===f||(e.add(f),o.current.set(p,f),c=!0,d.current?.(p,f));i(p=>{let f=Object.entries(p).filter(([v])=>m.has(v));return f.length===Object.keys(p).length?p:Object.fromEntries(f)}),c&&s(p=>p+1)},[e,t,r]),(0,Oi.useEffect)(()=>()=>{o.current.forEach(m=>m.removeFromParent()),o.current.clear()},[]),{rootsByUrl:r,revision:a,onSourceReady:u}}var Xn=require("three");function Su(e){e.updateWorldMatrix(!0,!0);let t=new Xn.Matrix4().copy(e.matrixWorld).invert(),n=new Xn.Box3,r=new Xn.Box3,i=!1;return e.traverse(o=>{let a=o;if(!a.isMesh||!a.geometry||(a.geometry.boundingBox||a.geometry.computeBoundingBox(),!a.geometry.boundingBox))return;let s=new Xn.Matrix4().multiplyMatrices(t,o.matrixWorld);r.copy(a.geometry.boundingBox).applyMatrix4(s),n.union(r),i=!0}),i?n:null}function ha(e){let t=Su(e);return t?t.getCenter(new Xn.Vector3):new Xn.Vector3}function uS(e,t="XYZ"){return new Xn.Quaternion().setFromEuler(new Xn.Euler(e[0],e[1],e[2],t))}function Uk(e,t,n,r,i="XYZ",o){let a=new Xn.Vector3(...r).multiply(new Xn.Vector3(...n));o&&a.applyMatrix4(Bc(o)),a.applyQuaternion(uS(t,i));let s=a.add(new Xn.Vector3(...e));return[s.x,s.y,s.z]}function Ic(e,t,n,r="XYZ",i){return{point:[...e],offset:Uk([0,0,0],t,n,e,r,i)}}function Mu(e,t,n,r,i="XYZ",o){if(!r)return e;let a=new Xn.Vector3(...r.point).multiply(new Xn.Vector3(...n));return o&&a.applyMatrix4(Bc(o)),a.applyQuaternion(uS(t,i)),new Xn.Vector3(...e).add(new Xn.Vector3(...r.offset)).sub(a).toArray()}function Lb(e,t){let n=t.findIndex(r=>Math.abs(r)>1e-12);return n<0?1:Math.abs(e[n]/t[n])}var _t=require("three"),Db=require("three-stdlib");function pS(e){let t=new Map;return e.map((n,r)=>{let o=n.name.trim()||`Animation ${r+1}`,a=t.get(o)??0;return t.set(o,a+1),{clip:n,sourceName:a===0?o:`${o} (${a+1})`,duration:n.duration}})}var fa=require("three");function mS(e){let t=e._loopCount;return e.loop===fa.LoopPingPong&&(t&1)===1}function Fk(e){return mS(e)?e.getClip().duration-e.time:e.time}function hS({root:e,clips:t,getClipConfig:n,onChange:r}){let i=new fa.AnimationMixer(e),o=new Map;for(let{clip:C,sourceName:_}of t)o.set(_,i.clipAction(C));let a=new Map,s=new Set,l=new Map,d=1,u=C=>typeof C=="string",m=C=>u(C)?a.has(C)?[C]:[]:[...a.keys()],c=(C,_)=>{let k=P1(n(_));k==="once"?C.setLoop(fa.LoopOnce,1):k==="ping-pong"?C.setLoop(fa.LoopPingPong,1/0):C.setLoop(fa.LoopRepeat,1/0),C.clampWhenFinished=k==="once"},p=C=>{C.action.setEffectiveTimeScale(C.reverse?-C.speed:C.speed)},f=C=>{let _=a.get(C);_&&(_.action.stop(),a.delete(C))},v=(C,_={})=>{let k=o.get(C);if(!k||n(C)?.hidden)return;let R=Number.isFinite(_.fade)&&_.fade>0?_.fade:0,U=_.reverse??!1;if(!_.alongside)for(let[D,L]of[...a])D!==C&&(R>0?(a.delete(D),L.action.fadeOut(R),s.add(L.action)):f(D));s.delete(k)&&k.stop();let H=k.getClip().duration,B=a.get(C),X=()=>{k.reset(),U&&(k.time=H),k.play()};if(!B)X(),R>0&&k.fadeIn(R);else{let D=U?k.time<=0:k.time>=H;B.finished&&D&&X(),k.paused=!1,k.enabled=!0,a.delete(C)}c(k,C),B={action:k,speed:n(C)?.speed??l.get(C)??d,reverse:U,finished:!1},B.speed=Am(B.speed),p(B),a.set(C,B),r()},b=C=>{for(let _ of m(C))a.get(_).action.paused=!0;r()},g=C=>{for(let _ of m(C))f(_);if(!u(C)){for(let _ of s)_.stop();s.clear()}r()},y=(C,_)=>{let k=Am(C);u(_)?l.set(_,k):d=k;for(let R of m(_)){let U=a.get(R);l.set(R,k),U.speed=k,p(U)}r()},x=(C,_)=>{for(let k of m(_)){let R=a.get(k),U=R.action.getClip().duration,H=Math.min(Math.max(C,0),U);R.action.time=mS(R.action)?U-H:H,R.finished&&(R.finished=!1,R.action.paused=!0)}i.update(0),r()},M=()=>{for(let[C,_]of[...a]){let k=n(C);if(k?.hidden){f(C);continue}c(_.action,C),k?.speed!==void 0&&(_.speed=Am(k.speed),p(_))}r()},P=C=>{for(let _ of a.values())_.action===C.action&&(_.finished=!0);r()};return i.addEventListener("finished",P),{play:v,pause:b,stop:g,setSpeed:y,seek:x,getState:()=>{let C=[...a].map(([k,R])=>({clip:k,status:R.finished?"finished":R.action.paused?"paused":"playing",time:Fk(R.action),duration:R.action.getClip().duration,speed:R.speed,reverse:R.reverse})),_=C[C.length-1];return{currentClip:_?.clip??null,isPlaying:C.some(k=>k.status==="playing"),speed:_?.speed??d,time:_?.time??0,duration:_?.duration??0,active:C}},applyClipConfigs:M,isRunning:()=>{if(s.size>0)return!0;for(let{action:C}of a.values())if(!C.paused&&C.enabled)return!0;return!1},update:C=>{i.update(C);for(let _ of s)(!_.enabled||_.getEffectiveWeight()<=0)&&(_.stop(),s.delete(_))},dispose:()=>{i.removeEventListener("finished",P),i.stopAllAction(),i.uncacheRoot(e),a.clear(),s.clear()}}}var Ni=require("three");function ah(e){if(y1(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new Ni.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 Ni.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof Ni.Color&&n.emissive.copy(t.color)):(t.color instanceof Ni.Color&&n.color.copy(t.color),t.map instanceof Ni.Texture&&(n.map=t.map),t.emissive instanceof Ni.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof Ni.Texture&&(n.emissiveMap=t.emissiveMap));let i=["aoMap","aoMapIntensity","lightMap","lightMapIntensity","alphaMap","opacity","transparent","alphaTest","side","vertexColors","wireframe","depthTest","depthWrite","visible","toneMapped","fog"];for(let o of i)t[o]!==void 0&&(n[o]=t[o]);return n.needsUpdate=!0,n}function sh(e){if(x1(e))return e.clone();let t=new Ni.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(aa(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 lh(e){e.userData.baseColor=e.color.clone(),e.userData.baseMap=e.map??null,e.userData.baseVertexColors=e.vertexColors,e.userData.baseMetalness=e.metalness,e.userData.baseMetalnessMap=e.metalnessMap??null,e.userData.baseRoughness=e.roughness,e.userData.baseRoughnessMap=e.roughnessMap??null,e.userData.baseEmissive=e.emissive.clone(),e.userData.baseEmissiveIntensity=e.emissiveIntensity,e.userData.baseEmissiveMap=e.emissiveMap??null,e.userData.baseOpacity=e.opacity,e.userData.baseTransparent=e.transparent,e.userData.baseAlphaMap=e.alphaMap??null,e.userData.baseAlphaTest=e.alphaTest,e.userData.baseAlphaHash=e.alphaHash,e.userData.baseDithering=e.dithering,e.userData.baseBlending=e.blending,e.userData.baseDepthWrite=e.depthWrite,e.userData.baseSide=e.side,e.userData.baseNormalMap=e.normalMap??null,e.userData.baseNormalScale=aa(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=aa(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 ko=require("three");function fS(e,t,n,r){let i=to(t),o=uu(n,i),a=w1(r,t),s=S1(r,t),l=M1(r,t);return a||s||l?Dm(e.userData,t,o,n,a??[0,0],s??1,l??0):(Om(e.userData,t),o)}function sr(e,t,n,r){if(!n){Om(e.userData,t);return}let i=Pm[t];e[i]=fS(e,t,n,r)}function ch(e,t,n){e.map=e.userData.baseMap??null,e.color.copy(e.userData.baseColor),e.vertexColors=e.userData.baseVertexColors??e.vertexColors,e.metalness=e.userData.baseMetalness??e.metalness,e.metalnessMap=e.userData.baseMetalnessMap??null,e.roughness=e.userData.baseRoughness??e.roughness,e.roughnessMap=e.userData.baseRoughnessMap??null,e.emissive.copy(e.userData.baseEmissive??new ko.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??ko.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??ko.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(aa(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(aa(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new ko.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 ko.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 ko.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let r=An(t,"texture"),i=An(t,"metalnessMap"),o=An(t,"roughnessMap"),a=An(t,"emissiveMap"),s=An(t,"alphaMap"),l=An(t,"normalMap"),d=An(t,"bumpMap"),u=An(t,"aoMap"),m=An(t,"displacementMap"),c=An(t,"clearcoatMap"),p=An(t,"clearcoatRoughnessMap"),f=An(t,"clearcoatNormalMap"),v=An(t,"anisotropyMap"),b=An(t,"transmissionMap"),g=An(t,"thicknessMap"),y=An(t,"sheenColorMap"),x=An(t,"sheenRoughnessMap"),M=An(t,"specularIntensityMap"),P=An(t,"specularColorMap");if(r?(e.map=fS(e,"texture",r,t),e.color.set(n??"#ffffff"),e.vertexColors=!1):(Om(e.userData,"texture"),n&&(e.map=null,e.color.set(n),e.vertexColors=!1)),sr(e,"metalnessMap",i,t),t?.metalness!==void 0&&(e.metalness=t.metalness),sr(e,"roughnessMap",o,t),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):a&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),sr(e,"emissiveMap",a,t),t?.opacity!==void 0&&(e.opacity=t.opacity),sr(e,"alphaMap",s,t),t?.alphaTest!==void 0&&(e.alphaTest=t.alphaTest),t?.alphaHash!==void 0&&(e.alphaHash=t.alphaHash),t?.dithering!==void 0&&(e.dithering=t.dithering),t?.blendingMode&&(e.blending=C1(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=_1(t.side)),sr(e,"normalMap",l,t),l||t?.normalScale!==void 0){let S=t?.normalScale??Math.abs(aa(e.userData.baseNormalScale).x);e.normalScale.set(S,t?.flipNormalY?-S:S)}if(sr(e,"bumpMap",d,t),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),sr(e,"aoMap",u,t),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),sr(e,"displacementMap",m,t),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),sr(e,"clearcoatMap",c,t),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),sr(e,"clearcoatRoughnessMap",p,t),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),sr(e,"clearcoatNormalMap",f,t),f||t?.clearcoatNormalScale!==void 0){let S=t?.clearcoatNormalScale??Math.abs(aa(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(S,t?.flipClearcoatNormalY?-S:S)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),sr(e,"sheenColorMap",y,t),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),sr(e,"sheenRoughnessMap",x,t),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),sr(e,"anisotropyMap",v,t),t?.transmission!==void 0&&(e.transmission=t.transmission),sr(e,"transmissionMap",b,t),t?.thickness!==void 0&&(e.thickness=t.thickness),sr(e,"thicknessMap",g,t),t?.attenuationColor&&e.attenuationColor.set(t.attenuationColor),t?.attenuationDistance!==void 0&&(e.attenuationDistance=t.attenuationDistance),t?.reflectivity!==void 0&&(e.reflectivity=t.reflectivity),t?.specularIntensity!==void 0&&(e.specularIntensity=t.specularIntensity),sr(e,"specularIntensityMap",M,t),t?.specularColor&&e.specularColor.set(t.specularColor),sr(e,"specularColorMap",P,t),e.transparent=e.opacity<1||e.transmission>0||e.blending!==ko.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function _u(e){return e.material}function Ro(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function jr(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function dh(e,t){return Array.isArray(e)?e[t]:e}var Bi=require("three");var gS=new WeakMap,bS=new Bi.Vector3,jk=new Bi.Vector3,Hk=new Bi.Vector3,Gk=new Bi.Box3,vS=new Bi.Matrix4;function zc(e){return"data"in e?e.data.version:e.version}function Wk(e){var l;let{geometry:t,skeleton:n}=e,r=t.getAttribute("position"),i=t.getAttribute("skinIndex"),o=t.getAttribute("skinWeight"),a=gS.get(e);if(a?.geometry===t&&a.position===r&&a.indices===i&&a.weights===o&&a.skeleton===n&&a.bindMatrix.equals(e.bindMatrix)&&a.versions[0]===zc(r)&&a.versions[1]===zc(i)&&a.versions[2]===zc(o)&&a.inverses.length===n.boneInverses.length&&a.inverses.every((d,u)=>d.equals(n.boneInverses[u])))return a;let s={geometry:t,position:r,indices:i,weights:o,skeleton:n,versions:[zc(r),zc(i),zc(o)],bindMatrix:e.bindMatrix.clone(),inverses:n.boneInverses.map(d=>d.clone()),bones:[],weightDeviation:0};e:for(let d=0;d<r.count;d++){bS.fromBufferAttribute(r,d).applyMatrix4(e.bindMatrix);let u=0;for(let c=0;c<4;c++){let p=o.getComponent(d,c);if(p===0)continue;let f=i.getComponent(d,c);if(!Number.isFinite(p)||p<0||!Number.isInteger(f)||!n.bones[f]||!s.inverses[f]){s.bones=null;break e}u+=p,((l=s.bones)[f]??(l[f]=new Bi.Box3)).expandByPoint(jk.copy(bS).applyMatrix4(s.inverses[f]))}let m=Math.abs(u-1);if(m>1e-4){s.bones=null;break}s.weightDeviation=Math.max(s.weightDeviation,m)}return gS.set(e,s),s}function uh(e,{precise:t=!1,updateFallbacks:n=!0}={}){e.updateMatrixWorld(!0),e.traverse(r=>{if(!Pr(r))return;let i=r;if(!i.skeleton)return;let o=lu(i);o&&i.bindMatrixInverse.copy(o);let s=!!i.geometry.morphAttributes.position?.length?null:Wk(i);if(!t&&!s?.bones&&!n&&i.boundingBox&&i.boundingSphere)return;let l=i.boundingBox??(i.boundingBox=new Bi.Box3),d=i.boundingSphere??(i.boundingSphere=new Bi.Sphere);if(l.makeEmpty(),t||!s?.bones){let u=i.geometry.getAttribute("position");for(let m=0;m<u.count;m++)l.expandByPoint(i.getVertexPosition(m,Hk))}else{for(let u=0;u<s.bones.length;u++){let m=s.bones[u];m&&(vS.multiplyMatrices(i.bindMatrixInverse,i.skeleton.bones[u].matrixWorld),l.union(Gk.copy(m).applyMatrix4(vS)))}if(!l.isEmpty()){let u=l.min,m=l.max,c=i.bindMatrixInverse.elements,p=Math.max(1,Math.abs(u.x),Math.abs(u.y),Math.abs(u.z),Math.abs(m.x),Math.abs(m.y),Math.abs(m.z)),f=Math.max(Math.abs(u.x-c[12]),Math.abs(m.x-c[12]),Math.abs(u.y-c[13]),Math.abs(m.y-c[13]),Math.abs(u.z-c[14]),Math.abs(m.z-c[14]));l.expandByScalar(s.weightDeviation*f+p*1e-10)}}l.getBoundingSphere(d)})}var wl=require("react"),yS=require("@react-three/fiber");function xS(){let e=(0,yS.useThree)(i=>i.gl.domElement),t=(0,wl.useRef)(void 0),n=(0,wl.useCallback)(i=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=i},[e]),r=(0,wl.useCallback)(()=>{let i=t.current;i!==void 0&&(e.style.cursor=i,t.current=void 0)},[e]);return(0,wl.useEffect)(()=>()=>{r()},[r]),{setCanvasCursor:n,restoreCanvasCursor:r}}var Ml=require("react/jsx-runtime");function ph(e,t,n){let r=n.get(e);r&&(t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],r.rotation.order):e.rotation.copy(r.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(r.scale),e.position.fromArray(Mu(t?.position??r.position.toArray(),[e.rotation.x,e.rotation.y,e.rotation.z],e.scale.toArray(),t?.pivot,r.rotation.order,t?.shear)),xl(e,t?.shear))}function $n(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 Vc(e){let t=e,n=Number(t.clearcoat)>0,r=Number(t.sheen)>0,i=Number(t.anisotropy)>0,o=Number(t.transmission)>0,a=t.transparent===!1&&t.blending===_t.NormalBlending&&t.alphaToCoverage!==!0;return[$n(t.map),$n(t.aoMap),$n(t.lightMap),$n(t.bumpMap),$n(t.normalMap,!0),t.normalMap?t.normalMapType:"",$n(t.displacementMap),$n(t.emissiveMap),$n(t.metalnessMap),$n(t.roughnessMap),i,$n(i?t.anisotropyMap:null),n,$n(n?t.clearcoatMap:null),$n(n?t.clearcoatNormalMap:null,!0),$n(n?t.clearcoatRoughnessMap:null),r,$n(r?t.sheenColorMap:null),$n(r?t.sheenRoughnessMap:null),$n(t.specularColorMap),$n(t.specularIntensityMap),o,$n(o?t.transmissionMap:null),$n(o?t.thicknessMap:null),$n(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,!!t.vertexColors,t.side,a].join("|")}var Xk={};function Cu({url:e,objectBindings:t,selectedItem:n,itemMaterials:r,interactive:i=!0,onItemClick:o,onItemHover:a,onItemDoubleClick:s,onItemContextMenu:l,onModelLoaded:d,onAnimationsReady:u,nodeRefsOut:m,onNodeRefsChange:c,materialRefsOut:p,panelHoveredItem:f,sceneConfig:v,zoomOnSelected:b=!0,highlightOnHover:g=!0,decoderConfig:y,modelFormat:x,onLoadProgress:M,explodeFactor:P=0,suspendBindingTransforms:S=!1,originalNodePoses:T,mergeModels:h,onMergeModelLoaded:w,onMergeModelError:C,pulses:_=Xk}){let k=wu(e,y,x,M),R=(0,Sl.useThree)(F=>F.invalidate),[U,H]=(0,fe.useState)(null),B=(0,fe.useRef)(null),{setCanvasCursor:X,restoreCanvasCursor:D}=xS();(0,fe.useEffect)(()=>{(!i||!g)&&(H(null),a?.(null),D())},[i,g,a,D]);let L=(0,fe.useMemo)(()=>Db.SkeletonUtils.clone(k.scene),[k.scene]),{revision:re,onSourceReady:Me}=dS(L,h,w),Pe=(0,fe.useRef)(new Map),[pe,Ve]=(0,fe.useState)(0),Q=(0,fe.useCallback)((F,W,G)=>{Me(F,W),Pe.current.get(F)!==G&&(Pe.current.set(F,G),Ve(ee=>ee+1))},[Me]);(0,fe.useEffect)(()=>{let F=new Set(h?.map(G=>G.url)),W=!1;for(let G of Pe.current.keys())F.has(G)||(Pe.current.delete(G),W=!0);W&&Ve(G=>G+1)},[h]);let J=(0,fe.useMemo)(()=>ci(L),[L,re]),ye=J.nodesById,{originalMaterials:Re,ownMeshes:nt}=(0,fe.useMemo)(()=>{let F=new WeakMap,W=new WeakSet;return L.traverse(G=>{ar(G)&&(F.set(G,G.material),W.add(G))}),{originalMaterials:F,ownMeshes:W}},[L]);(0,fe.useMemo)(()=>{L.traverse(F=>{ar(F)&&!Re.has(F)&&Re.set(F,F.material)})},[L,re,Re]);let le=k.materialVariants,it=(v?os(v.model):[]).join(`
|
|
3721
|
+
`),[Gt,be]=(0,fe.useState)(null);(0,fe.useEffect)(()=>{let F=it?it.split(`
|
|
3722
|
+
`):[],W=[];for(let ee of F){let ke=le?le.names.indexOf(ee):-1;if(ke>=0){W.push(ke);continue}console.warn(`[react-immersive] The model has no material variant "${ee}".`+(le?` Its variants are: ${le.names.join(", ")}.`:" It has no material variants."))}if(!le||W.length===0){be(null);return}let G=!1,ce=[];return L.traverse(ee=>{if(!ar(ee)||!nt.has(ee))return;let ke=rS(nS(ee),W);ke!==null&&ce.push(le.resolveMaterial(ke,ee).then(Ne=>[ee,Ne]))}),Promise.all(ce).then(ee=>{G||be({scene:L,materials:new Map(ee)})}).catch(ee=>{G||console.warn(`[react-immersive] Material variants "${F.join('", "')}" failed to load.`,ee)}),()=>{G=!0}},[L,nt,le,it]);let Ce=Gt?.scene===L?Gt.materials:void 0,en=F=>Ce?.get(F)??Re.get(F)??_u(F);(0,fe.useEffect)(()=>{J.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(J.duplicateNames))},[J]);let Se=(0,fe.useMemo)(()=>new WeakMap,[L]),xe=(0,fe.useMemo)(()=>{let F=new WeakMap;if(L.traverse(W=>{let G=Se.get(W);G||(G={position:W.position.clone(),rotation:W.rotation.clone(),scale:W.scale.clone()},Se.set(W,G)),F.set(W,{position:G.position.clone(),rotation:G.rotation.clone(),scale:G.scale.clone()})}),T)for(let[W,G]of Object.entries(T)){let ce=ye[W],ee=ce&&F.get(ce);ee&&(ee.position.fromArray(G.position),G.rotation&&ee.rotation.set(G.rotation[0],G.rotation[1],G.rotation[2],ee.rotation.order),G.scale&&ee.scale.fromArray(G.scale))}return F},[L,ye,T,Se]);(0,fe.useEffect)(()=>{let F=!1,W=null,G=null,ce=window,ee=Object.entries(ye).filter(([,ct])=>ar(ct)),ke=new _t.Box3,Ne=[],rn=0;L.traverse(ct=>{!ar(ct)||ct.userData[ml]||(ct.castShadow=!1,ct.receiveShadow=!0)});let At=()=>{if(F)return;let ct=new Set,dt=ke.getSize(new _t.Vector3),ae=new _t.Vector3;for(let{name:un,box:Hn}of Ne)Hn.getSize(ae),ae.x>dt.x*.7&&ae.z>dt.z*.7&&ae.y>dt.y*.4&&ct.add(un);L.traverse(un=>{if(!ar(un)||un.userData[ml])return;let Hn=vu(un);un.castShadow=!Hn||!ct.has(Hn),un.receiveShadow=!0}),R()},Tn=()=>{F||(ce.requestIdleCallback?W=ce.requestIdleCallback(dn,{timeout:100}):G=window.setTimeout(()=>dn(),0))},dn=ct=>{if(W=null,G=null,F)return;let dt=performance.now(),ae=0;for(;rn<ee.length&&!(ae>0&&!(ct?ct.didTimeout?ae<16:ct.timeRemaining()>1:performance.now()-dt<8));){let[un,Hn]=ee[rn];rn+=1,ae+=1;let hr=new _t.Box3().setFromObject(Hn);hr.isEmpty()||(Ne.push({name:un,box:hr}),ke.union(hr))}rn<ee.length?Tn():At()};return Tn(),()=>{F=!0,W!==null&&ce.cancelIdleCallback?.(W),G!==null&&window.clearTimeout(G)}},[R,ye,L]),(0,fe.useEffect)(()=>{uh(L,{precise:!0})},[L,re]),(0,fe.useEffect)(()=>{let F=new AbortController;return cm(L,F.signal),()=>{F.abort(),Jd(L)}},[L,re]);let $e=(0,fe.useMemo)(()=>{let F={};for(let[W,G]of Object.entries(t))F[G.modelObjectId??W]=W;return F},[t]),fn=(0,fe.useMemo)(()=>Object.entries(t).map(([F,W])=>`${F}${W.modelObjectId??F}`).sort().join(""),[t]),tn=(0,fe.useMemo)(()=>Object.entries(t).map(([F,W])=>JSON.stringify([F,W.modelObjectId??F,W.transform??null])).sort().join(""),[t]),Ln=(0,fe.useRef)(new Map);(0,fe.useEffect)(()=>{let F=new Map,W=new Map;for(let[ee,ke]of Object.entries(t)){if(!ke.transform)continue;let Ne=ye[ke.modelObjectId??ee];Ne&&(F.set(Ne,ke.transform),W.set(Ne,rs(Ne)))}let G=new Set([...Ln.current.keys(),...F.keys()]);for(let ee of G){ph(ee,void 0,xe);for(let ke of rs(ee))sa(ke)}L.updateMatrixWorld(!0);let ce=new Map;for(let ee of W.values())for(let ke of ee)ce.has(ke)||ce.set(ke,ke.matrixWorld.clone());for(let[ee,ke]of F)ph(ee,ke,xe);Ln.current=F,L.updateMatrixWorld(!0);for(let[ee,ke]of ce)_c(ee,ke);R()},[L,ye,xe,tn,R]),(0,fe.useEffect)(()=>()=>{for(let F of rs(L))sa(F)},[L]);let we=(0,fe.useMemo)(()=>{let F={};for(let[W,G]of Object.entries(t)){let ce=G.modelObjectId??W,ee=ye[ce];if(!ar(ee))continue;let ke=en(ee);ke&&(F[W]=Ro(ke,Ne=>{let rn=ah(Ne),At=sh(rn??new _t.MeshStandardMaterial);return lh(At),At}))}return F},[ye,fn,Re,Ce]);(0,fe.useEffect)(()=>(p&&(p.current=we),()=>{p?.current===we&&(p.current={})}),[we,p]),(0,fe.useEffect)(()=>()=>{for(let F of Object.values(we))jr(F,W=>{O1(W.userData),W.dispose()})},[we]);let Be=v?.model.shading??"lit",Qe=v?.model.renderer??"pbr",wt=v?.wireframe.enabled??!1,Dt=v?.wireframe.color??"#93c5fd",me=v?.wireframe.opacity??1,Ae=(0,fe.useMemo)(()=>{let F={};if(Be!=="unlit")return F;for(let[W,G]of Object.entries(we))F[W]=Ro(G,ce=>{let ee=new _t.MeshBasicMaterial;return ee.color.copy(ce.color),ee.map=ce.map,ee.alphaMap=ce.alphaMap,ee.alphaTest=ce.alphaTest,ee.transparent=ce.transparent,ee.opacity=ce.opacity,ee.side=ce.side,ee});return F},[we,Be]),Ee=(0,fe.useMemo)(()=>{let F={};if(Be!=="normals")return F;for(let[W,G]of Object.entries(we))F[W]=Ro(G,()=>new _t.MeshNormalMaterial);return F},[we,Be]),lt=(0,fe.useMemo)(()=>{let F={};if(Be!=="lit"||Qe!=="matcap")return F;let W=Nm();for(let[G,ce]of Object.entries(we))F[G]=Ro(ce,ee=>{let ke=new _t.MeshMatcapMaterial;return ke.matcap=W,ke.color.copy(ee.color),ke.alphaMap=ee.alphaMap,ke.alphaTest=ee.alphaTest,ke.side=ee.side,ke});return F},[we,Be,Qe]);(0,fe.useEffect)(()=>()=>{for(let F of Object.values(Ae))jr(F,W=>W.dispose());for(let F of Object.values(Ee))jr(F,W=>W.dispose());for(let F of Object.values(lt))jr(F,W=>W.dispose())},[Ae,Ee,lt]);let nn=F=>Be==="normals"?Ee[F]:Be==="unlit"?Ae[F]:Qe==="matcap"?lt[F]:we[F],Ot=(0,fe.useRef)(d);Ot.current=d,(0,fe.useEffect)(()=>{Ot.current?.(L)},[L]);let at=(0,fe.useMemo)(()=>{let F={};for(let[W,G]of Object.entries(t)){let ce=G.modelObjectId??W,ee=ye[ce];ee&&(F[W]=ee)}return F},[ye,fn]);(0,fe.useEffect)(()=>(m.current=at,c?.(),()=>{m.current===at&&(m.current={})}),[at,m,c]);let Ie=(0,fe.useRef)({});(0,fe.useEffect)(()=>()=>{for(let F of Object.values(Ie.current))for(let[W,G]of Object.entries(F))G&&ca(G,to(W));Ie.current={}},[]);let ht=(0,fe.useRef)(new Map);(0,fe.useEffect)(()=>()=>{ht.current.clear()},[]);let gt=(0,fe.useMemo)(()=>{let F=new Map;for(let[W,G]of Object.entries(t)){let ce=f===G||f?.id===G.id||f?.modelObjectId===G.modelObjectId,ee=g&&(U===W||ce),ke=ee||n===W;(ee||ke)&&F.set(W,{emissive:ee,matcap:ke})}return F},[t,g,U,n,f]),Yt=(0,fe.useRef)(gt);Yt.current=gt,(0,fe.useEffect)(()=>{let F=new Set;for(let[W,G]of Object.entries(t)){F.add(W);let ce=G.modelObjectId??W,ee=ye[ce];if(!ar(ee))continue;if(G.removed){ee.parent&&(ht.current.set(ee,ee.parent),ee.parent.remove(ee),L.dispatchEvent({type:"childremoved",child:ee}));continue}let ke=ht.current.get(ee);ke&&(ee.parent||(ke.add(ee),L.dispatchEvent({type:"childadded",child:ee})),ht.current.delete(ee)),ee.visible=G.visible!==!1;let Ne=we[W];if(!Ne)continue;if(Qe!=="uv-checker"){let ae=nn(W);ae&&(ee.material=ae)}if(G.visible===!1)continue;let rn=Ae[W],At=lt[W],Tn=r[W]??r[G.modelObjectId??W],dn=G.style?.material,ct=Ie.current[W]??{};for(let ae of Ao){let un=An(dn,ae),Hn=ct[ae];if(Hn===un)continue;let hr=to(ae);Hn&&ca(Hn,hr),un?(Pc(un,hr,R),ct[ae]=un):delete ct[ae]}Object.keys(ct).length>0?Ie.current[W]=ct:delete Ie.current[W];let dt=Tn?.hex??dn?.baseColor;jr(Ne,(ae,un)=>{let Hn=Vc(ae);ch(ae,dn,dt);let hr=ae.userData.reactImmersiveConfiguredEmissive;hr?.isColor?hr.copy(ae.emissive):ae.userData.reactImmersiveConfiguredEmissive=ae.emissive.clone();let La=Yt.current.get(W);La?.emissive&&ae.emissive.add(ul),Hn!==Vc(ae)&&(ae.needsUpdate=!0);let on=dh(rn,un);if(on){let xi=Vc(on);on.color.copy(ae.color),on.map=ae.map,on.vertexColors=ae.vertexColors,on.alphaMap=ae.alphaMap,on.alphaTest=ae.alphaTest,on.transparent=ae.transparent,on.opacity=ae.opacity,on.side=ae.side,xi!==Vc(on)&&(on.needsUpdate=!0)}let Un=dh(At,un);if(Un){let xi=Vc(Un);La?.matcap?Un.color.set(la.color):Un.color.copy(ae.color),Un.map=ae.map,Un.vertexColors=ae.vertexColors,Un.alphaMap=ae.alphaMap,Un.alphaTest=ae.alphaTest,Un.transparent=ae.transparent,Un.opacity=ae.opacity,Un.side=ae.side,xi!==Vc(Un)&&(Un.needsUpdate=!0)}})}for(let W of Object.keys(Ie.current))if(!F.has(W)){for(let[G,ce]of Object.entries(Ie.current[W]))ce&&ca(ce,to(G));delete Ie.current[W]}R()},[t,ye,we,Ae,Ee,lt,r,Be,Qe,R]);let Kr=(0,fe.useRef)(new Map);(0,fe.useEffect)(()=>{let F=Kr.current,W=new Set([...F.keys(),...gt.keys()]),G=!1;for(let ce of W){let ee=F.get(ce),ke=gt.get(ce),Ne=!!ee?.emissive!=!!ke?.emissive,rn=!!ee?.matcap!=!!ke?.matcap;if(!Ne&&!rn)continue;G=!0;let At=we[ce],Tn=lt[ce];At&&jr(At,(dn,ct)=>{let dt=dn.userData.reactImmersiveConfiguredEmissive;Ne&&dt?.isColor&&(dn.emissive.copy(dt),ke?.emissive&&dn.emissive.add(ul));let ae=dh(Tn,ct);rn&&ae&&(ke?.matcap?ae.color.set(la.color):ae.color.copy(dn.color))})}Kr.current=gt,G&&R()},[gt,we,lt,R]),I1({objectBindings:t,nodeMap:ye,invalidate:R});let Nt=(0,fe.useMemo)(()=>Object.entries(_).map(([F,W])=>({key:F,color:new _t.Color(W.color),speed:W.speed})),[_]),cn=(0,fe.useRef)(new Set);(0,fe.useEffect)(()=>{let F=new Set(Nt.map(({key:W})=>W));for(let W of cn.current){if(F.has(W)||!we[W])continue;let G=Yt.current.get(W)?.emissive;jr(we[W],ce=>{let ee=ce.userData.reactImmersiveConfiguredEmissive;ee?.isColor&&(ce.emissive.copy(ee),G&&ce.emissive.add(ul))})}cn.current=F,R()},[Nt,we,R]),(0,Sl.useFrame)(({clock:F})=>{if(Nt.length===0)return;let W=F.getElapsedTime();for(let{key:G,color:ce,speed:ee}of Nt){let ke=we[G];if(!ke)continue;let Ne=(1-Math.cos(2*Math.PI*ee*W))/2,rn=Yt.current.get(G)?.emissive;jr(ke,At=>{let Tn=At.userData.reactImmersiveConfiguredEmissive;Tn?.isColor&&(At.emissive.copy(Tn).lerp(ce,Ne),rn&&At.emissive.add(ul))})}R()}),(0,fe.useEffect)(()=>{if(Qe==="uv-checker")return;let F=new Set(Object.values(at)),W=!1;L.traverse(G=>{if(!ar(G)||F.has(G)||!Re.has(G))return;let ce=Ce?.get(G)??Re.get(G);G.material!==ce&&(G.material=ce,W=!0)}),W&&R()},[L,at,Re,Ce,Qe,R]),(0,fe.useEffect)(()=>{if(Qe!=="uv-checker")return;let F=N1(),W=[];return L.traverse(G=>{if(!ar(G)||G.userData[ml])return;let ce=G.material,ee=Array.isArray(ce)?ce:[ce],ke=!!G.geometry.getAttribute("uv"),Ne=ee.map((At,Tn)=>{let dn=new _t.MeshBasicMaterial({color:ke?"#ffffff":"#ff00ff",map:ke?F:null,side:At.side});return dn.name=`${G.name||"mesh"}-uv-checker-${Tn}`,dn.toneMapped=!1,dn}),rn=Array.isArray(ce)?Ne:Ne[0];G.material=rn,W.push({node:G,original:ce,diagnostic:rn})}),R(),()=>{for(let{node:G,original:ce,diagnostic:ee}of W){G.material=ce;let ke=Array.isArray(ee)?ee:[ee];for(let Ne of ke)Ne.dispose()}R()}},[L,Qe,R,re]),(0,fe.useEffect)(()=>{if(!wt)return;let F=[];for(let[W,G]of Object.entries(t)){let ce=G.modelObjectId??W,ee=ye[ce];if(!ar(ee))continue;let ke=new _t.MeshBasicMaterial({color:Dt,wireframe:!0,transparent:!0,opacity:me,depthTest:!1,depthWrite:!1,side:_t.DoubleSide,toneMapped:!1}),Ne=ee.clone(!1);Ne.name="",Ne.position.set(0,0,0),Ne.quaternion.identity(),Ne.scale.set(1,1,1),Ne.matrix.identity(),Ne.matrixAutoUpdate=!0,Ne.material=ke,Ne.castShadow=!1,Ne.receiveShadow=!1,Ne.frustumCulled=!1,Ne.renderOrder=1,Ne.userData={isWireframeOverlay:!0},Ne.raycast=()=>{},ee.morphTargetInfluences&&(Ne.morphTargetInfluences=ee.morphTargetInfluences),ee.add(Ne),F.push({node:ee,overlay:Ne})}return R(),()=>{for(let{node:W,overlay:G}of F)W.remove(G),G.material.dispose()}},[wt,Dt,me,ye,t,R]);let jn=(0,fe.useMemo)(()=>{let F=Array.from(Pe.current.values()).flat();return pS([...k.animations,...F])},[k.animations,pe]),yr=(0,fe.useRef)(u);yr.current=u;let bi=(0,fe.useRef)(v);bi.current=v;let Zr=(0,fe.useRef)(null),gn=(0,fe.useRef)(null),mr=(0,fe.useRef)(new Set),Xi=(0,fe.useRef)(0),Jr=F=>{mr.current.forEach(W=>W(F))};(0,fe.useEffect)(()=>{let F=hS({root:L,clips:jn,getClipConfig:G=>T1(bi.current,G),onChange:()=>{Jr(F.getState()),uh(L),R()}});Zr.current=F,gn.current={clips:jn.map(({sourceName:G})=>G),clipDetails:jn.map(({sourceName:G,duration:ce})=>({sourceName:G,duration:ce})),play:F.play,pause:F.pause,stop:F.stop,setSpeed:F.setSpeed,seek:F.seek,getState:F.getState,subscribe:G=>(mr.current.add(G),G(F.getState()),()=>{mr.current.delete(G)})},Jr(F.getState());let W=bi.current?.animations.autoplayClip;return W&&F.play(W),()=>{F.dispose(),Zr.current=null,gn.current=null,Jr(F.getState())}},[L,jn]);let Is=!!u;(0,fe.useEffect)(()=>{Is&&gn.current&&yr.current?.(gn.current)},[L,jn,Is,i]),(0,fe.useEffect)(()=>{v?.animations&&Zr.current?.applyClipConfigs()},[v?.animations]),(0,Sl.useFrame)((F,W)=>{let G=Zr.current;if(G?.isRunning()){if(G.update(W),!S)for(let[ce,ee]of Ln.current)ph(ce,ee,xe);Xi.current+=W,uh(L,{updateFallbacks:Xi.current>=.066}),R(),Xi.current>=.066&&(Xi.current=0,Jr(G.getState()))}});let Qr=(0,fe.useMemo)(()=>(v?.model.rotation??[0,0,0]).map(F=>F*Math.PI/180),[v?.model.rotation]);(0,Sl.useFrame)((F,W)=>{if(!B.current)return;let G=B.current.rotation;G.x=_t.MathUtils.lerp(G.x,Qr[0],1-Math.exp(-5*W)),G.y=_t.MathUtils.lerp(G.y,Qr[1],1-Math.exp(-5*W)),G.z=_t.MathUtils.lerp(G.z,Qr[2],1-Math.exp(-5*W)),Math.abs(G.x-Qr[0])<1e-4&&Math.abs(G.y-Qr[1])<1e-4&&Math.abs(G.z-Qr[2])<1e-4||R()});let zs=(0,fe.useRef)([]),ka=(0,fe.useRef)(0),Uo=(0,fe.useRef)(0),Vs=(0,fe.useMemo)(()=>new _t.Vector3,[]);(0,fe.useEffect)(()=>{let F=new Map;for(let[At,Tn]of Object.entries(t)){let dn=ye[Tn.modelObjectId??At];dn&&F.set(dn,Tn)}for(let At of zs.current)ph(At.node,F.get(At.node)?.transform,xe);Uo.current=0,L.updateWorldMatrix(!0,!0);let W=new _t.Box3().setFromObject(L),G=W.getCenter(new _t.Vector3),ce=W.getSize(new _t.Vector3).length()*.5;ka.current=Number.isFinite(ce)?ce:0;let ee=[...F.keys()],ke=new Set(ee),Ne=[],rn=new _t.Vector3;for(let At of ee){if(!At.parent)continue;let Tn=At.parent,dn=!1;for(;Tn;){if(ke.has(Tn)){dn=!0;break}Tn=Tn.parent}if(dn)continue;let ct=new _t.Box3().setFromObject(At);if(ct.isEmpty())continue;ct.getCenter(rn);let dt=rn.clone().sub(G);dt.lengthSq()<1e-8||(dt.normalize(),Ne.push({node:At,restLocalPos:At.position.clone(),restWorldPos:At.getWorldPosition(new _t.Vector3),worldDir:dt,parentInverse:new _t.Matrix4().copy(At.parent.matrixWorld).invert()}))}zs.current=Ne,R()},[L,ye,fn,tn,xe,R]),(0,fe.useEffect)(()=>{R()},[P,R]),(0,Sl.useFrame)((F,W)=>{let G=zs.current;if(G.length===0)return;let ce=Math.min(Math.max(P,0),1),ee=Uo.current;if(Math.abs(ee-ce)<1e-4){if(ee===ce)return;Uo.current=ce}else Uo.current=_t.MathUtils.lerp(ee,ce,1-Math.exp(-6*W)),R();let ke=Uo.current*ka.current;for(let Ne of G)Vs.copy(Ne.worldDir).multiplyScalar(ke).add(Ne.restWorldPos).applyMatrix4(Ne.parentInverse),Ne.node.position.copy(Vs),Ne.node.matrixAutoUpdate||(Ne.node.matrix.setPosition(Ne.node.position),Ne.node.matrixWorldNeedsUpdate=!0)});let $i=F=>{let W=F;for(;W;){let G=vu(W),ce=G?$e[G]:void 0;if(ce&&t[ce])return[ce,t[ce]];W=W.parent}return null},go=F=>{let W=$i(F);if(!W)return null;let[G,ce]=W;return ye[ce.modelObjectId??G]??null},Us=Bm(F=>{let W=$i(F);return W&&W[1].selectable!==!1?W[1]:null},i?l:void 0,go),qi=F=>{if(Us.consumeClick())return;let W=$i(F.object);if(!W)return;let[,G]=W;G.selectable!==!1&&(F.stopPropagation(),o(G,Ac(F,go(F.object))))},Or=F=>{let W=$i(F.object);if(!W)return;let[,G]=W;if(G.selectable===!1)return;s?.(G,Ac(F,go(F.object)))&&F.stopPropagation()},vi=F=>{if(!g)return;let W=$i(F.object);if(!W)return;let[G,ce]=W;ce.hoverable!==!1&&(F.stopPropagation(),X("pointer"),H(G),a?.(ce))},Ra=F=>{g&&(F.stopPropagation(),D(),H(null),a?.(null))},yi=(0,fe.useMemo)(()=>!Jx(L),[L,re]);return(0,Ml.jsxs)("group",{ref:B,children:[(0,Ml.jsx)("primitive",{object:L,...i&&yi?{onClick:qi,onDoubleClick:Or,...l?{onPointerDown:Us.onPointerDown}:{},...g?{onPointerOver:vi,onPointerOut:Ra}:{}}:{}}),h?.map(F=>(0,Ml.jsx)(Co,{onLoadError:W=>C?.(F.url,W),children:(0,Ml.jsx)(fe.Suspense,{fallback:null,children:(0,Ml.jsx)($k,{url:F.url,namePrefix:F.namePrefix,decoderConfig:y,onReady:Q})})},F.url))]})}function $k({url:e,namePrefix:t,decoderConfig:n,onReady:r}){let i=wu(e,n),o=(0,fe.useMemo)(()=>{let l=Db.SkeletonUtils.clone(i.scene);return $w(l,t),l},[i.scene,t]),a=(0,fe.useMemo)(()=>i.animations.map(l=>qw(l,t)),[i.animations,t]),s=(0,fe.useRef)(r);return s.current=r,(0,fe.useEffect)(()=>{s.current(e,o,a)},[e,o,a]),null}var Uc=require("react");var Tu=require("react/jsx-runtime");function qk({url:e,decoderConfig:t,onModelLoaded:n}){let{scene:r}=wu(e,t),i=(0,Uc.useRef)(n);return i.current=n,(0,Uc.useEffect)(()=>{i.current?.(r)},[r]),(0,Tu.jsx)("primitive",{object:r})}function wS({url:e,decoderConfig:t,onLoadError:n,onModelLoaded:r}){return(0,Tu.jsx)(Co,{onLoadError:i=>n?.(e,i),children:(0,Tu.jsx)(Uc.Suspense,{fallback:null,children:(0,Tu.jsx)(qk,{url:e,decoderConfig:t,onModelLoaded:r})})})}var ss=require("react");var mh=require("react/jsx-runtime"),Yk={};function SS({entry:e,isActive:t,decoderConfig:n,itemMaterials:r,sceneConfig:i,zoomOnSelected:o,highlightOnHover:a,explodeFactor:s,suspendBindingTransforms:l,onLoadProgress:d,onAnimationsReady:u,onModelAnimationsReady:m,onLoadError:c,onModelLoaded:p,selectedItem:f,panelHoveredItem:v,onItemClick:b,onItemDoubleClick:g,onItemContextMenu:y,onItemHover:x,nodeRefsOut:M,onNodeRefsChange:P,materialRefsOut:S,onMergeModelLoaded:T,onMergeModelError:h,pulses:w}){let C=(0,ss.useRef)({}),_=(0,ss.useRef)({}),k=(0,ss.useCallback)(()=>{},[]),R=(0,ss.useCallback)(H=>{t&&u?.(H),m?.(e.url,H)},[t,u,m,e.url]),U=!!u||!!m;return(0,mh.jsx)(Co,{onLoadError:H=>c?.(e.url,H),children:(0,mh.jsx)(ss.Suspense,{fallback:null,children:(0,mh.jsx)(Cu,{url:e.url,interactive:t,objectBindings:e.objectBindings,selectedItem:t?f:null,itemMaterials:t?r:Yk,onItemClick:t?b:k,onItemDoubleClick:t?g:void 0,onItemContextMenu:t?y:void 0,onItemHover:t?x:void 0,onModelLoaded:p?H=>p(e.url,H):void 0,onAnimationsReady:U?R:void 0,nodeRefsOut:t?M:C,onNodeRefsChange:t?P:void 0,materialRefsOut:S??_,panelHoveredItem:t?v:void 0,sceneConfig:t?i:e.sceneConfig??i,zoomOnSelected:t&&o,highlightOnHover:t&&!!a,decoderConfig:n,onLoadProgress:t?d:void 0,explodeFactor:s,suspendBindingTransforms:t?l:!1,originalNodePoses:e.originalNodePoses,mergeModels:e.mergeModels,onMergeModelLoaded:T,onMergeModelError:h,pulses:t?w:void 0})})})}var pt=require("react");var jh=require("@react-three/fiber");var Sn=require("three");var mn=require("three");function TS(e){let t={};for(let[n,r]of Object.entries(e))t[r.modelObjectId??n]=n;return t}function Bb(e){let t=e,n=null;for(;t;){let r=t.userData?.ri_name;if(typeof r=="string"&&r)return r;!n&&t.name&&(n=t.name),t=t.parent}return n}function PS(e,t){return e||(t?t.modelObjectId??t.id:null)}function fh(e,t){let n=Bb(e);if(!n)return null;let r=t.keyByModelObject[n]??n,i=t.objectBindings[r];return i?{key:r,binding:i}:null}var Fc=new mn.Vector3,Ob=new mn.Vector3,Kk=new mn.Matrix4,MS=new mn.Matrix4,Pu=new mn.Matrix4,Zk=new mn.Matrix4,hh=new mn.Matrix4,Jk=new mn.Matrix4,Qk=new mn.Matrix4,_S=new mn.Vector3,CS=new mn.Vector3,ls=new mn.Vector3,Nb=new mn.Quaternion,eR=new mn.Euler;function tR(e,t,n,r,i){let o=!!(n?.position||n?.rotation||n?.scale||n?.shear),a=!!(i&&i.factor>0&&i.radius>0);if(!o&&!a){e.matrixAutoUpdate=!0,e.position.copy(t.position),e.rotation.copy(t.rotation),e.scale.copy(t.scale),e.updateMatrix(),e.updateWorldMatrix(!0,!1);return}MS.compose(t.position,Nb.setFromEuler(t.rotation),t.scale);let s=n?.rotation;Pu.compose(_S.fromArray(Mu(n?.position??[0,0,0],s??[0,0,0],n?.scale??[1,1,1],n?.pivot,"XYZ",n?.shear)),Nb.setFromEuler(eR.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),CS.fromArray(n?.scale??[1,1,1])),n?.shear&&Pu.makeRotationFromQuaternion(Nb).multiply(Bc(n.shear)).scale(CS).setPosition(_S),Pu.premultiply(r).multiply(Zk.copy(r).invert()),e.parent?.updateWorldMatrix(!0,!1);let l=e.parent?.matrixWorld??Kk;if(hh.multiplyMatrices(l,MS).premultiply(Pu),a&&i){let d=e;for(;d.parent&&!d.userData.ri_name;)d=d.parent;let u=d.userData.ri_center;Array.isArray(u)&&u.length===3?ls.fromArray(u).applyMatrix4(r).applyMatrix4(Pu):ls.setFromMatrixPosition(hh),ls.sub(i.centre),ls.lengthSq()>1e-8&&(ls.normalize().multiplyScalar(i.factor*i.radius),hh.premultiply(Qk.makeTranslation(ls.x,ls.y,ls.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(Jk.copy(l).invert(),hh),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function gh(e,t){if(!ar(e)&&!e.userData.riLogicalObject)return;let n=fh(e,t);if(!n)return;let r=AS(e);if(r.rest??(r.rest={position:e.position.clone(),rotation:e.rotation.clone(),scale:e.scale.clone()}),t.suspendTransforms)return;if(t.placementFrame&&!e.userData.riLogicalObject){tR(e,r.rest,n.binding.transform,t.placementFrame,t.explode);return}let i=r.rest,o=n.binding.transform;o?.position?e.position.fromArray(o.position):e.position.copy(i.position),o?.rotation?e.rotation.set(o.rotation[0],o.rotation[1],o.rotation[2],i.rotation.order):e.rotation.copy(i.rotation),o?.scale?e.scale.fromArray(o.scale):e.scale.copy(i.scale),e.position.fromArray(Mu(e.position.toArray(),[e.rotation.x,e.rotation.y,e.rotation.z],e.scale.toArray(),o?.pivot,i.rotation.order,o?.shear)),xl(e,o?.shear);let a=t.explode;if(a&&a.factor>0&&a.radius>0){e.updateWorldMatrix(!0,!1),Ob.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let l=s.userData.ri_center;Array.isArray(l)&&l.length===3?Fc.fromArray(l).applyMatrix4(e.matrixWorld).sub(a.centre):Fc.copy(Ob).sub(a.centre),Fc.lengthSq()>1e-8&&(Fc.normalize().multiplyScalar(a.factor*a.radius).add(Ob),e.parent&&e.parent.worldToLocal(Fc),e.position.copy(Fc))}xl(e,o?.shear),e.updateWorldMatrix(!0,!1)}function jc(e,t){e.traverse(n=>gh(n,t))}function AS(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function nR(e,t,n,r){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,r])}function rR(e){if(e.textures){for(let t of Ao){let n=e.textures[t];n&&ca(n,to(t))}e.textures=void 0}}function iR(e,t,n){let r=e.textures??{};for(let i of Ao){let o=An(t,i),a=r[i];if(a===o)continue;let s=to(i);a&&ca(a,s),o?(Pc(o,s,n),r[i]=o):delete r[i]}e.textures=Object.keys(r).length>0?r:void 0}function oR(e,t){if(t.shadingMode==="normals")return Ro(e,()=>new mn.MeshNormalMaterial);if(t.shadingMode==="unlit")return Ro(e,n=>{let r=new mn.MeshBasicMaterial;return r.color.copy(n.color),r.map=n.map,r.vertexColors=n.vertexColors,r.alphaMap=n.alphaMap,r.alphaTest=n.alphaTest,r.transparent=n.transparent,r.opacity=n.opacity,r.side=n.side,r});if(t.rendererMode==="matcap"){let n=Nm();return Ro(e,r=>{let i=new mn.MeshMatcapMaterial;return i.matcap=n,i.color.copy(r.color),i.vertexColors=r.vertexColors,i.alphaMap=r.alphaMap,i.alphaTest=r.alphaTest,i.side=r.side,i})}return e}function aR(e,t){if(!ar(e))return;let r=AS(e);r.original??(r.original=_u(e));let i=fh(e,t);if(!i){r.original&&(e.material=r.original),e.visible=!0;return}let{key:o,binding:a}=i;e.visible=a.visible!==!1,gh(e,t);let s=t.itemMaterials?.[o]?.hex??t.itemMaterials?.[a.modelObjectId??o]?.hex,l=t.highlightOnHover!==!1&&o===t.hoveredKey,d=nR(a,s,t,l);if(r.signature===d&&r.display){e.material=r.display;return}let u=a.style?.material;if(iR(r,u,t.invalidate),!r.physical){let m=r.original??_u(e);if(!m)return;r.physical=Ro(m,c=>{let p=ah(c),f=sh(p??new mn.MeshStandardMaterial);return lh(f),f})}jr(r.physical,m=>{ch(m,u,s??u?.baseColor),l&&(m.emissive.add(ul),m.color.lerp(k1,R1)),m.needsUpdate=!0}),r.display&&r.display!==r.physical&&jr(r.display,m=>m.dispose()),r.display=oR(r.physical,t),r.signature=d,e.material=r.display}function ES(e,t){e.traverse(n=>aR(n,t))}function Ib(e){e.traverse(t=>{if(!ar(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&&jr(n.display,r=>r.dispose()),n.physical&&jr(n.physical,r=>r.dispose()),rR(n),delete t.userData.riVisuals)})}var RS=new Sn.Matrix4().makeRotationX(Math.PI/2),kS=RS.clone().invert();function sR(e){let t=new Sn.Vector3(e[0],e[1],e[2]),n=new Sn.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 Sn.Box3(t.clone().sub(n),t.clone().add(n))}function lR(e){let t=e.getCenter(new Sn.Vector3),n=e.getSize(new Sn.Vector3).multiplyScalar(.5);return[t.x,t.y,t.z,n.x,0,0,0,n.y,0,0,0,n.z]}var bh=class{constructor(){this.group=new Sn.Group;this.objects=new Map;this.geometry=new Sn.BoxGeometry(1,1,1);this.material=new Sn.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 r=new Sn.Box3(new Sn.Vector3(...n.minimum),new Sn.Vector3(...n.maximum)).applyMatrix4(kS),i=new Sn.Group;i.name=n.name,i.userData.ri_name=n.name,i.userData.riLogicalObject=!0,i.userData.ri_center=r.getCenter(new Sn.Vector3).toArray();let o=new Sn.Mesh(this.geometry,this.material);o.visible=!1,o.raycast=()=>{},o.position.copy(r.getCenter(new Sn.Vector3)),o.scale.copy(r.getSize(new Sn.Vector3)),i.add(o),this.group.add(i),this.objects.set(n.name,i)}this.signature="",this.lastContext=null}nodesByBinding(t){let n={};for(let[r,i]of this.objects){let o=t.keyByModelObject[r]??r;t.objectBindings[o]&&(n[o]=i)}return n}sync(t,n,r=!1){if(!r&&!this.lastDragging&&t===this.lastContext&&this.lastEffective)return this.lastEffective;this.lastContext=t,this.lastDragging=r;let i={...t,suspendTransforms:!1},o=n?t.objectBindings[n]:void 0,a=o?this.objects.get(o.modelObjectId??n):void 0;r&&a&&o&&(i={...i,objectBindings:{...t.objectBindings,[n]:{...o,transform:{position:a.position.toArray(),rotation:[a.rotation.x,a.rotation.y,a.rotation.z],scale:a.scale.toArray()}}}});for(let l of this.objects.values())r&&l===a||gh(l,i);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([l,d])=>`${l}:${d.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[l,d]of this.objects)d.matrix.equals(new Sn.Matrix4)||this.transforms.set(l,RS.clone().multiply(d.matrix).multiply(kS))}return this.lastEffective=i,i}updateBounds(t){if(!t)return;let n=r=>{if(this.tileVersions.get(r)!==this.version){if(r.boundingVolume.box&&this.tileVersions.get(r)!==this.version){let i=this.originalBounds.get(r);i||(i={box:[...r.boundingVolume.box],error:r.geometricError},this.originalBounds.set(r,i));let o=sR(i.box),a=o.clone(),s=1;for(let d of r.extras?.featureIds??[]){let u=this.transforms.get(d);u&&(a.union(o.clone().applyMatrix4(u)),s=Math.max(s,u.getMaxScaleOnAxis()))}let l=lR(a);r.boundingVolume.box=l,r.geometricError=i.error*s,r.engineData?.boundingVolume?.setObbData(l,r.engineData.transform),this.tileVersions.set(r,this.version)}r.children?.forEach(n)}};n(t)}dispose(){this.group.clear(),this.objects.clear(),this.geometry.dispose(),this.material.dispose()}};var zb=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),Au=16,Vb=1.25,cR=1.5,dR=1.25,uR=500,pR=3e3,LS=5e3,DS=2e3,mR=.9;function OS(e){return e.full&&(e.wanting||e.usage>1)}function NS(e){return e.loosened?pR:uR}function BS(e){let t=e.factor/dR;return t<=1+1e-6?1:t}function IS(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<mR&&BS(e)>e.tooFine}function zS(e,t){let{now:n}=t,r=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(OS(t)){if(n-r.changedAt<NS(r))return r;let i=Math.max(r.tooFine,r.factor);return r.factor>=Au?r.loosened&&r.tooFine===i?r:{...r,loosened:!0,tooFine:i,changedAt:n}:{factor:Math.min(Au,r.factor*cR),loosened:!0,tooFine:i,raisedAt:n,changedAt:n}}return r.loosened&&!t.wanting?{...r,loosened:!1,changedAt:n}:IS(r,t)&&n-r.raisedAt>=LS&&n-r.changedAt>=DS?{...r,factor:BS(r),changedAt:n}:r}function VS(e,t){let{now:n}=t;return OS(t)?e.factor>=Au&&e.loosened?null:Math.max(0,NS(e)-(n-e.changedAt)):e.loosened&&!t.wanting?0:IS(e,t)?Math.max(0,LS-(n-e.raisedAt),DS-(n-e.changedAt)):null}function HS(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function Ub(e){if(!e)return null;let t=e.length,n=e.indexOf("?"),r=e.indexOf("#");n!==-1&&(t=Math.min(t,n)),r!==-1&&(t=Math.min(t,r));let i=e.lastIndexOf(".",t),o=e.lastIndexOf("/",t),a=e.indexOf("://");return a!==-1&&a+2===o||i===-1||i<o?null:e.substring(i+1,t)||null}var yh,Eu=(yh=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:n}=this,r,i=()=>{n.delete(r),e()};return r=t?t.requestAnimationFrame(i):requestAnimationFrame(i),n.set(r,e),r}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)})}},Ug(yh,"pending",new Map),Ug(yh,"session",null),yh),US=2**30,Lu=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 r=e(t),i=e(n);return r<i?-1:+(r>i)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*US,this.maxBytesSize=.4*US,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:r}=this;r.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 r=this.usedSet,i=this.itemList,o=this.callbacks;return i.push(e),r.add(e),n.set(e,Date.now()),o.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,n=this.itemSet,r=this.itemList,i=this.bytesMap,o=this.callbacks,a=this.loadedSet;if(n.has(e)){this.cachedBytes-=i.get(e)||0,i.delete(e),o.get(e)(e);let s=r.indexOf(e);return r.splice(s,1),t.delete(e),n.delete(e),o.delete(e),a.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:n,loadedSet:r}=this;n.has(e)&&(t===!0?r.add(e):r.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:r,itemSet:i,usedSet:o,loadedSet:a,callbacks:s,bytesMap:l,minBytesSize:d,maxBytesSize:u}=this,m=r.length-o.size,c=r.length-a.size,p=Math.max(Math.min(r.length-t,m),0),f=this.cachedBytes-d,v=this.unloadPriorityCallback||this.defaultPriorityCallback,b=!1,g=p>0&&m>0||c&&r.length>n;if(m&&this.cachedBytes>d||c&&this.cachedBytes>u||g){r.sort((h,w)=>{let C=o.has(h);if(C===o.has(w)){let _=a.has(h);return _===a.has(w)?-v(h,w):_?1:-1}else return C?1:-1});let y=Math.max(t*e,p*e),x=Math.ceil(Math.min(y,m,p)),M=Math.max(e*f,e*d),P=Math.min(M,f),S=0,T=0;for(;this.cachedBytes-T>u||r.length-S>n;){let h=r[S],w=l.get(h)||0;if(o.has(h)&&a.has(h)||this.cachedBytes-T-w<u&&r.length-S<=n)break;T+=w,S++}for(;T<P||S<x;){let h=r[S],w=l.get(h)||0;if(o.has(h)||this.cachedBytes-T-w<d&&S>=x)break;T+=w,S++}r.splice(0,S).forEach(h=>{this.cachedBytes-=l.get(h)||0,s.get(h)(h),l.delete(h),i.delete(h),s.delete(h),a.delete(h),o.delete(h)}),b=S<p||T<f&&S<m,b&&(b=S>0)}b&&(this.unloadingHandle=Eu.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){Eu.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},hR=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Lo=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=>{Eu.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((r,i)=>{let o=this.items,a=this.callbacks;n.resolve=r,n.reject=i,o.unshift(e),a.set(e,n),this.autoUpdate&&this.scheduleJobRun()}),n.promise}remove(e){let t=this.items,n=this.callbacks,r=t.indexOf(e);if(r!==-1){let i=n.get(e);i.promise.catch(o=>{if(o.name!=="AbortError")throw o}),i.reject(new hR),t.splice(r,1),n.delete(e)}}removeByFilter(e){let{items:t}=this;for(let n=0;n<t.length;n++){let r=t[n];e(r)&&(this.remove(r),n--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,n=this.maxJobs,r=0,i=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;n>this.currJobs&&e.length>0&&r<n;){this.currJobs++,r++;let o=e.pop(),{callback:a,resolve:s,reject:l}=t.get(o);t.delete(o);let d;try{d=a(o)}catch(u){l(u),i();continue}d instanceof Promise?d.then(s).catch(l).finally(i):(s(d),i())}}flush(e){let{items:t,callbacks:n}=this,r=t.indexOf(e);if(!n.has(e))return;let{callback:i,resolve:o,reject:a}=n.get(e);n.delete(e),t.splice(r,1);let s;try{s=i(e)}catch(l){a(l);return}return s instanceof Promise?s.then(o).catch(a):o(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},Mh=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,r=null){this.originQueues.forEach((l,d)=>{l.running||this.originQueues.delete(d)});let i=e===null?null:HS(e),o=this.originQueues.get(i);o||(o=new Lo,o.maxJobs=this._maxJobsPerOrigin,o.priorityCallback=this._priorityCallback,this.originQueues.set(i,o));let a=this._itemQueues.get(t);if(a&&a!==o&&a.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,o);let s=o.add(t,n);return r!==null&&(r.aborted?this.remove(t):r.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 Tl=6378137,fR=1/298.257223563,jb=6356752314245179e-9,vh={inView:!1,error:1/0,distanceFromCamera:1/0};function _h(e){return e===4||e===-1}function ga(e,t){return Ch(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function Ch(e){return!!e.traversal}function Du(e){let{children:t}=e,n=t.length===0||Ch(t[t.length-1]),r=!e.internal.hasUnrenderableContent||_h(e.internal.loadingState);return n&&r}function _l(e){return e.traversal.unconditionallyRefine}function ku(e,t){if(Ch(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,vh),e.traversal.inFrustum=vh.inView,e.traversal.error=vh.error,e.traversal.distanceFromCamera=vh.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 Fb(e,t,n=!1){if(ku(e,t),n?t.markTileUsed(e):xh(e),_l(e)&&Du(e)){let r=e.children;for(let i=0,o=r.length;i<o;i++)Fb(r[i],t,n)}}function GS(e,t){if(ku(e,t),e.traversal.usedLastFrame&&(xh(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||_l(e))&&Du(e))){let n=e.children;for(let r=0,i=n.length;r<i;r++)GS(n[r],t)}}function xh(e){e.traversal.used=!0}function gR(e,t){return!(e.traversal.error<=t.errorTarget&&!_l(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!Du(e))}function WS(e,t){let{frameCount:n}=t,{children:r}=e;for(let i=0,o=r.length;i<o;i++){let a=r[i];ga(a,n)&&(a.traversal.active&&(a.traversal.kicked=!0,a.traversal.active=!1),WS(a,t))}}function FS(e){return!_l(e)&&(!e.internal.hasContent||_h(e.internal.loadingState))}function XS(e,t){if(ku(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(!gR(e,t)){xh(e);return}let r=!1,i=!1,o=e.children;for(let a=0,s=o.length;a<s;a++){let l=o[a];XS(l,t),r||(r=ga(l,t.frameCount)),i||(i=l.traversal.inFrustum)}if(e.refine==="REPLACE"&&!i&&o.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let a=0,s=o.length;a<s;a++)Fb(o[a],t,!0);return}if(xh(e),e.refine==="REPLACE"&&r&&(t.loadSiblings||t.loadAncestors))for(let a=0,s=o.length;a<s;a++)Fb(o[a],t)}function $S(e,t){let n=t.frameCount;if(!ga(e,n))return;let r=e.children,i=!1;for(let a=0,s=r.length;a<s;a++){let l=r[a];i||(i=ga(l,n))}if(!i)e.traversal.isLeaf=!0;else{for(let s=0,l=r.length;s<l;s++)$S(r[s],t);let a=!0;for(let s=0,l=r.length;s<l;s++){let d=r[s];if(ga(d,n)){let u=!_l(d),m=!d.internal.hasContent||_h(d.internal.loadingState);u&&m||d.traversal.allChildrenLoaded||(a=!1)}}e.traversal.allChildrenLoaded=a}let o=!0;for(let a=0,s=r.length;a<s;a++){let l=r[a];ga(l,t.frameCount)&&!l.traversal.allUsedChildrenProcessed&&(o=!1)}e.traversal.allUsedChildrenProcessed=o&&Du(e)}function qS(e,t){if(!ga(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!_l(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!_l(e)&&(e.traversal.active=!0,Du(e)&&e.internal.hasContent&&!_h(e.internal.loadingState)))for(let i=0,o=n.length;i<o;i++)GS(n[i],t);return}let r=n.length>0;for(let i=0,o=n.length;i<o;i++){let a=n[i];qS(a,t),ga(a,t.frameCount)&&!(a.traversal.active&&FS(a))&&!a.traversal.allChildrenReady&&(r=!1)}e.traversal.allChildrenReady=r,e.refine==="REPLACE"&&!r&&e.traversal.wasSetActive&&FS(e)&&(e.traversal.active=!0,WS(e,t))}function YS(e,t){ku(e,t);let n=ga(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||Ch(e)&&e.traversal.usedLastFrame){let r=!1,i=!1;n?(r=e.traversal.active,i=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):ku(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(r&&t.stats.active++,i&&t.stats.visible++,e.traversal.wasSetActive!==r&&t.invokeOnePlugin(a=>a.setTileActive&&a.setTileActive(e,r)),e.traversal.wasSetVisible!==i&&t.invokeOnePlugin(a=>a.setTileVisible&&a.setTileVisible(e,i))):e.internal.hasRenderableContent||(i=e.traversal.isLeaf,e.traversal.wasSetVisible!==i&&t.invokeOnePlugin(a=>a.setEmptyTileVisible&&a.setEmptyTileVisible(e,i))),e.traversal.visible=i,e.traversal.active=r;let o=e.children;for(let a=0,s=o.length;a<s;a++){let l=o[a];YS(l,t)}}}function bR(e,t){XS(e,t),$S(e,t),qS(e,t),YS(e,t)}function vR(e){let t=null;return()=>{t===null&&(t=Eu.requestAnimationFrame(()=>{t=null,e()}))}}function yR(e,t=null,n=null){let r=[];for(r.push(e),r.push(null),r.push(0);r.length>0;){let i=r.pop(),o=r.pop(),a=r.pop();if(t&&t(a,o,i)){n&&n(a,o,i);return}let s=a.children;if(s)for(let l=s.length-1;l>=0;l--)r.push(s[l]),r.push(a),r.push(i+1);n&&n(a,o,i)}}var jS=Symbol("PLUGIN_REGISTERED"),cs={inView:!0,error:0,distance:1/0},xR=(e,t)=>{let n=e.priority||0,r=t.priority||0;return n===r?!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>r?1:-1},wR=(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,SR=(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,Hc=(e,t)=>{let n=e.priority??1/0,r=t.priority??1/0;if(n!==r)return n>r?1:-1;if(!e.internal||!t.internal)return 0;let i=e.internal.renderer,o=t.internal.renderer,a=!i.loadAncestors,s=!o.loadAncestors;return a&&s?wR(e,t):xR(e,t)},Hb=new Lu;Hb.unloadPriorityCallback=SR;var Ru=new Mh;Ru.maxJobsPerOrigin=25,Ru.priorityCallback=Hc;var wh=new Lo;wh.maxJobs=5,wh.priorityCallback=Hc;var Sh=new Lo;Sh.maxJobs=25,Sh.priorityCallback=(e,t)=>{let n=e.parent,r=t.parent;return n===r?0:n?r?Hc(n,r):-1:1};var Gb=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,r=e.inCacheSinceLoad+ +!!t;return r===0?1:1-n/r}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof Lo){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=Hb,this.downloadQueue=Ru,this.parseQueue=wh,this.processNodeQueue=Sh,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=vR(()=>{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[jS]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,n=e.priority||0,r=t.length;for(let i=0;i<t.length;i++)if((t[i].priority||0)>n){r=i;break}t.splice(r,0,e),e[jS]=!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 r=e(t[n]);if(r)return r}return null}invokeAllPlugins(e){let t=[...this.plugins,this],n=[];for(let r=0;r<t.length;r++){let i=e(t[r]);i&&n.push(i)}return n.length===0?null:Promise.all(n)}traverse(e,t,n=!0){this.root&&yR(this.root,(r,...i)=>(n&&this.ensureChildrenArePreprocessed(r,!0),e?e(r,...i):!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:r,downloadQueue:i,parseQueue:o,processNodeQueue:a}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(d=>d.loadRootTileset&&d.loadRootTileset()).then(d=>{let u=this.rootURL;u!==null&&this.invokeAllPlugins(m=>u=m.preprocessURL?m.preprocessURL(u,null):u),this.rootLoadingState=4,this.rootTileset=d,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:d,url:u}),this.dispatchEvent({type:"load-root-tileset",tileset:d,url:u})}).catch(d=>{this.rootLoadingState=-1,console.error(d),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:d,url:this.rootURL})})),!r)return;let s=null;if(this.invokeAllPlugins(d=>{if(d.doTilesNeedUpdate){let u=d.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(d=>e.markUnused(d)),t.clear(),this.prepareForTraversal(),bR(r,this),this.removeUnusedPendingTiles();let l=this.queuedTiles;l.sort(e.unloadPriorityCallback);for(let d=0,u=l.length;d<u&&!e.isFull();d++)this.requestTileContents(l[d]);l.length=0,e.scheduleUnload(),(i.running||o.running||a.running)===!1&&this.isLoading===!0&&(this.cachedSinceLoadComplete.clear(),n.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1),this.dispatchEvent({type:"update-after"})}resetFailedTiles(){this.rootLoadingState===-1&&(this.rootLoadingState=0);let e=this.stats;e.failed!==0&&(this.traverse(t=>{t.internal.loadingState===-1&&(t.internal.loadingState=0)},null,!1),e.failed=0)}calculateTileViewErrorWithPlugin(e,t){this.calculateTileViewError(e,t);let{errorFalloff:n,errorFalloffDensity:r}=this;if(n>0&&Number.isFinite(t.distanceFromCamera)){let s=t.distanceFromCamera*r;t.error-=n*(1-Math.exp(-s*s))}let i=null,o=0,a=1/0;this.invokeAllPlugins(s=>{s!==this&&s.calculateTileViewError&&(cs.inView=!0,cs.error=0,cs.distance=1/0,s.calculateTileViewError(e,cs)&&(i===null&&(i=!0),i&&(i=cs.inView),cs.inView&&(a=Math.min(a,cs.distance),o=Math.max(o,cs.error))))}),t.inView&&i!==!1?(t.error=Math.max(t.error,o),t.distanceFromCamera=Math.min(t.distanceFromCamera,a)):i?(t.inView=!0,t.error=o,t.distanceFromCamera=a):t.inView=!1}dispose(){[...this.plugins].forEach(n=>{this.unregisterPlugin(n)});let e=this.lruCache,t=[];this.traverse(n=>(t.push(n),!1),null,!1);for(let n=0,r=t.length;n<r;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 r=Ub(e.content.uri),i=!!(r&&/json$/.test(r));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=i,e.internal.hasRenderableContent=!i}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(r=>{r!==this&&r.preprocessNode&&r.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 r of t)!e.isUsed(r)&&r.internal.loadingState===1&&n.push(r);for(let r=0;r<n.length;r++)e.remove(n[r])}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 r=i=>{for(let o=0,a=i.length;o<a;o++){let s=i[o];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),r(n)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,i=>{r(i.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(r=>{n.has(r)&&t.setMemoryUsage(r,this.getBytesUsed(r))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,n=null){let[r,i]=e.asset.version.split(".").map(a=>parseInt(a));console.assert(r<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),r===1&&i>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let o=t.replace(/\/[^/]*$/,"");o=new URL(o,window.location.href).toString(),this.preprocessNode(e.root,o,n)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,n=null,r=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(c=>r=c.preprocessURL?c.preprocessURL(r,e):r);let i=this.stats,o=this.lruCache,a=this.downloadQueue,s=this.parseQueue,l=this.loadingTiles,d=Ub(r),u=new AbortController,m=u.signal;if(o.add(e,c=>{u.abort(),t?c.children.length=0:this.invokeAllPlugins(p=>{p.disposeTile&&p.disposeTile(c)}),i.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),i.inCacheSinceLoad--),c.internal.loadingState===1?i.queued--:c.internal.loadingState===2?i.downloading--:c.internal.loadingState===3?i.parsing--:c.internal.loadingState===4&&i.loaded--,c.internal.loadingState=0,s.remove(c),a.remove(c),l.delete(c)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),o.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),i.inCacheSinceLoad++,i.inCache++,i.queued++,e.internal.loadingState=1,l.add(e),a.add(r,e,c=>{if(m.aborted)return Promise.resolve();e.internal.loadingState=2,i.downloading++,i.queued--;let p=this.invokeOnePlugin(f=>f.fetchData&&f.fetchData(r,{...this.fetchOptions,signal:m}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:r,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),p}).then(c=>{if(!m.aborted){if(!(c instanceof Response))return c;if(c.ok)return d==="json"?c.json():c.arrayBuffer();throw Error(`Failed to load model with error code ${c.status}`)}}).then(c=>{if(!m.aborted)return i.downloading--,i.parsing++,e.internal.loadingState=3,s.add(e,p=>m.aborted?Promise.resolve():d==="json"&&c.root?(this.preprocessTileset(c,r,e),e.children.push(c.root),n=c,t=!0,Promise.resolve()):this.invokeOnePlugin(f=>f.parseTile&&f.parseTile(c,p,d,r,m)))}).then(()=>{if(m.aborted)return;i.parsing--,i.loaded++,e.internal.loadingState=4,l.delete(e),o.setLoaded(e,!0);let c=this.getBytesUsed(e);if(o.getMemoryUsage(e)===0&&c>0&&o.isFull()){o.remove(e);return}o.setMemoryUsage(e,c),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:n,url:r}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:r})}).catch(c=>{m.aborted||(c.name==="AbortError"?o.remove(e):(s.remove(e),a.remove(e),e.internal.loadingState===1?i.queued--:e.internal.loadingState===2?i.downloading--:e.internal.loadingState===3?i.parsing--:e.internal.loadingState===4&&i.loaded--,i.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(c),e.internal.loadingState=-1,l.delete(e),o.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:c,url:r})))})}};function Cl(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 r=0;r<4;r++)n+=String.fromCharCode(t.getUint8(r));return n}var MR=new TextDecoder;function KS(e){return MR.decode(e)}function Th(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var Gc=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=Th(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function Wb(e,t,n,r,i,o){let a;switch(r){case"SCALAR":a=1;break;case"VEC2":a=2;break;case"VEC3":a=3;break;case"VEC4":a=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${o}".`)}let s,l=n*a;switch(i){case"BYTE":s=new Int8Array(e,t,l);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,l);break;case"SHORT":s=new Int16Array(e,t,l);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,l);break;case"INT":s=new Int32Array(e,t,l);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,l);break;case"FLOAT":s=new Float32Array(e,t,l);break;case"DOUBLE":s=new Float64Array(e,t,l);break;default:throw Error(`FeatureTable : Feature component type not provided for "${o}".`)}return s}var Ou=class{constructor(e,t,n,r){this.buffer=e,this.binOffset=t+n,this.binLength=r;let i=null;if(n!==0){let o=new Uint8Array(e,t,n);i=JSON.parse(KS(o))}else i={};this.header=i}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,n=null,r=null){let i=this.header;if(!(e in i))return null;let o=i[e];if(!(o instanceof Object)||Array.isArray(o))return o;{let{buffer:a,binOffset:s,binLength:l}=this,d=o.byteOffset||0,u=o.type||r,m=o.componentType||n;if("type"in o&&r&&o.type!==r)throw Error("FeatureTable: Specified type does not match expected type.");let c=s+d,p=Wb(a,c,t,u,m,e);if(c+p.byteLength>s+l)throw Error("FeatureTable: Feature data read outside binary body length.");return p}}getBuffer(e,t){let{buffer:n,binOffset:r}=this;return n.slice(r+e,r+e+t)}},_R=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let r of this.classes){let i=r.instances;for(let o in i)r.instances[o]=this._parseProperty(i[o],r.length,o)}if(this.instancesLength=t.instancesLength,this.classIds=this._parseProperty(t.classIds,this.instancesLength,"classIds"),t.parentCounts?this.parentCounts=this._parseProperty(t.parentCounts,this.instancesLength,"parentCounts"):this.parentCounts=Array(this.instancesLength).fill(1),t.parentIds){let r=this.parentCounts.reduce((i,o)=>i+o,0);this.parentIds=this._parseProperty(t.parentIds,r,"parentIds")}else this.parentIds=null;this.instancesIds=[];let n={};for(let r of this.classIds)n[r]=n[r]??0,this.instancesIds.push(n[r]),n[r]++}_parseProperty(e,t,n){if(Array.isArray(e))return e;{let{buffer:r,binOffset:i}=this.batchTable,o=e.byteOffset,a=e.componentType||"UNSIGNED_SHORT";return Wb(r,i+o,t,"SCALAR",a,n)}}getDataFromId(e,t={}){let n=this.parentCounts[e];if(this.parentIds&&n>0){let s=0;for(let l=0;l<e;l++)s+=this.parentCounts[l];for(let l=0;l<n;l++){let d=this.parentIds[s+l];d!==e&&this.getDataFromId(d,t)}}let r=this.classIds[e],i=this.classes[r].instances,o=this.classes[r].name,a=this.instancesIds[e];for(let s in i)t[o]=t[o]||{},t[o][s]=i[s][a];return t}},Ph=class extends Ou{constructor(e,t,n,r,i){super(e,n,r,i),this.count=t,this.extensions={};let o=this.header.extensions;o&&o["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new _R(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 r=this.extensions[n];r.getDataFromId instanceof Function&&(t[n]=t[n]||{},r.getDataFromId(e,t[n]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},Xb=class extends Gc{parse(e){let t=new DataView(e),n=Cl(t);console.assert(n==="b3dm");let r=t.getUint32(4,!0);console.assert(r===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),l=t.getUint32(24,!0),d=new Ou(e.slice(28,28+o+a),0,o,a),u=28+o+a,m=new Ph(e.slice(u,u+s+l),d.getData("BATCH_LENGTH"),0,s,l),c=u+s+l;return{version:r,featureTable:d,batchTable:m,glbBytes:new Uint8Array(e,c,i-c)}}},$b=class extends Gc{parse(e){let t=new DataView(e),n=Cl(t);console.assert(n==="i3dm");let r=t.getUint32(4,!0);console.assert(r===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),l=t.getUint32(24,!0),d=t.getUint32(28,!0),u=new Ou(e.slice(32,32+o+a),0,o,a),m=32+o+a,c=new Ph(e.slice(m,m+s+l),u.getData("INSTANCES_LENGTH"),0,s,l),p=m+s+l,f=new Uint8Array(e,p,i-p),v=null,b=null,g=null;if(d)v=f,b=Promise.resolve();else{let y=this.resolveExternalURL(KS(f));g=Th(y),b=fetch(y,this.fetchOptions).then(x=>{if(!x.ok)throw Error(`I3DMLoaderBase : Failed to load file "${y}" with status ${x.status} : ${x.statusText}`);return x.arrayBuffer()}).then(x=>{v=new Uint8Array(x)})}return b.then(()=>({version:r,featureTable:u,batchTable:c,glbBytes:v,gltfWorkingPath:g}))}},qb=class extends Gc{parse(e){let t=new DataView(e),n=Cl(t);console.assert(n==="pnts");let r=t.getUint32(4,!0);console.assert(r===1);let i=t.getUint32(8,!0);console.assert(i===e.byteLength);let o=t.getUint32(12,!0),a=t.getUint32(16,!0),s=t.getUint32(20,!0),l=t.getUint32(24,!0),d=new Ou(e.slice(28,28+o+a),0,o,a),u=28+o+a,m=new Ph(e.slice(u,u+s+l),d.getData("BATCH_LENGTH")||d.getData("POINTS_LENGTH"),0,s,l);return Promise.resolve({version:r,featureTable:d,batchTable:m})}},Yb=class extends Gc{parse(e){let t=new DataView(e),n=Cl(t);console.assert(n==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let r=t.getUint32(4,!0);console.assert(r===1,'CMPTLoader: The version listed in the header is "1".');let i=t.getUint32(8,!0);console.assert(i===e.byteLength,"CMPTLoader: The contents buffer length listed in the header matches the file.");let o=t.getUint32(12,!0),a=[],s=16;for(let l=0;l<o;l++){let d=new DataView(e,s,12),u=Cl(d),m=d.getUint32(4,!0),c=d.getUint32(8,!0),p=new Uint8Array(e,s,c);a.push({type:u,buffer:p,version:m}),s+=c}return{version:r,tiles:a}}};var $=require("three"),Bh=require("three/addons/loaders/GLTFLoader.js"),pM=require("three/addons/utils/BufferGeometryUtils.js"),ov=class extends Xb{constructor(e=$.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new $.Matrix4}parse(e){let t=super.parse(e),n=t.glbBytes.slice().buffer;return new Promise((r,i)=>{let o=this.manager,a=this.fetchOptions,s=o.getHandler("path.gltf")||new Bh.GLTFLoader(o);a.credentials==="include"&&a.mode==="cors"&&s.setCrossOrigin("use-credentials"),"credentials"in a&&s.setWithCredentials(a.credentials==="include"),a.headers&&s.setRequestHeader(a.headers);let l=this.workingPath;!/[\\/]$/.test(l)&&l.length&&(l+="/");let d=this.adjustmentTransform;s.parse(n,l,u=>{let{batchTable:m,featureTable:c}=t,{scene:p}=u,f=c.getData("RTC_CENTER",1,"FLOAT","VEC3");f&&(p.position.x+=f[0],p.position.y+=f[1],p.position.z+=f[2]),u.scene.updateMatrix(),u.scene.matrix.multiply(d),u.scene.matrix.decompose(u.scene.position,u.scene.quaternion,u.scene.scale),u.batchTable=m,u.featureTable=c,p.batchTable=m,p.featureTable=c,r(u)},i)})}};function CR(e){let t=e>>11,n=e>>5&63,r=e&31;return[Math.round(t/31*255),Math.round(n/63*255),Math.round(r/31*255)]}var Nu=new $.Vector2;function TR(e,t,n=new $.Vector3){Nu.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(Nu.x,Nu.y,1-Math.abs(Nu.x)-Math.abs(Nu.y));let r=$.MathUtils.clamp(-n.z,0,1);return n.x>=0?n.setX(n.x-r):n.setX(n.x+r),n.y>=0?n.setY(n.y-r):n.setY(n.y+r),n.normalize(),n}var ZS={RGB:"color",POSITION:"position"},av=class extends qb{constructor(e=$.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:r}=t,i=new $.PointsMaterial,o=n.header.extensions,a=new $.Vector3,s;if(o&&o["3DTILES_draco_point_compression"]){let{byteOffset:u,byteLength:m,properties:c}=o["3DTILES_draco_point_compression"],p=this.manager.getHandler("draco.drc");if(p==null)throw Error("PNTSLoader: dracoLoader not available.");let f={};for(let g in c)if(g in ZS&&g in c){let y=ZS[g];f[y]=c[g]}let v={attributeIDs:f,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},b=n.getBuffer(u,m);s=await p.decodeGeometry(b,v),s.attributes.color&&(i.vertexColors=!0)}else{let u=n.getData("POINTS_LENGTH"),m=n.getData("POSITION",u,"FLOAT","VEC3"),c=n.getData("NORMAL",u,"FLOAT","VEC3"),p=n.getData("NORMAL",u,"UNSIGNED_BYTE","VEC2"),f=n.getData("RGB",u,"UNSIGNED_BYTE","VEC3"),v=n.getData("RGBA",u,"UNSIGNED_BYTE","VEC4"),b=n.getData("RGB565",u,"UNSIGNED_SHORT","SCALAR"),g=n.getData("CONSTANT_RGBA",u,"UNSIGNED_BYTE","VEC4"),y=n.getData("POSITION_QUANTIZED",u,"UNSIGNED_SHORT","VEC3"),x=n.getData("QUANTIZED_VOLUME_SCALE",u,"FLOAT","VEC3"),M=n.getData("QUANTIZED_VOLUME_OFFSET",u,"FLOAT","VEC3");if(s=new $.BufferGeometry,y){let P=new Float32Array(u*3);for(let S=0;S<u;S++)for(let T=0;T<3;T++){let h=3*S+T;P[h]=y[h]/65535*x[T]}a.x=M[0],a.y=M[1],a.z=M[2],s.setAttribute("position",new $.BufferAttribute(P,3,!1))}else s.setAttribute("position",new $.BufferAttribute(m,3,!1));if(c!==null)s.setAttribute("normal",new $.BufferAttribute(c,3,!1));else if(p!==null){let P=new Float32Array(u*3),S=new $.Vector3;for(let T=0;T<u;T++){let h=p[T*2],w=p[T*2+1],C=TR(h,w,S);P[T*3]=C.x,P[T*3+1]=C.y,P[T*3+2]=C.z}s.setAttribute("normal",new $.BufferAttribute(P,3,!1))}if(v!==null)s.setAttribute("color",new $.BufferAttribute(v,4,!0)),i.vertexColors=!0,i.transparent=!0,i.depthWrite=!1;else if(f!==null)s.setAttribute("color",new $.BufferAttribute(f,3,!0)),i.vertexColors=!0;else if(b!==null){let P=new Uint8Array(u*3);for(let S=0;S<u;S++){let T=CR(b[S]);for(let h=0;h<3;h++){let w=3*S+h;P[w]=T[h]}}s.setAttribute("color",new $.BufferAttribute(P,3,!0)),i.vertexColors=!0}else if(g!==null){i.color=new $.Color(g[0],g[1],g[2]);let P=g[3]/255;P<1&&(i.opacity=P,i.transparent=!0,i.depthWrite=!1)}}let l=new $.Points(s,i);l.position.copy(a),t.scene=l,t.scene.featureTable=n,t.scene.batchTable=r;let d=n.getData("RTC_CENTER",1,"FLOAT","VEC3");return d&&(t.scene.position.x+=d[0],t.scene.position.y+=d[1],t.scene.position.z+=d[2]),t})}};function PR(e){let{x:t,y:n,z:r}=e;e.x=r,e.y=t,e.z=n}function AR(e){return-e+Math.PI/2}var JS=new $.Spherical,ds=new $.Vector3,kr=new $.Vector3,Kb=new $.Vector3,Ii=new $.Matrix4,Do=new $.Matrix4,Zb=new $.Sphere,Hr=new $.Euler,QS=new $.Vector3,eM=new $.Vector3,tM=new $.Vector3,Bu=new $.Vector3,Ah=new $.Ray,ER=1e-12,kR=.1;var sv=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new $.Vector3(e,t,n)}intersectRay(e,t){return Ii.makeScale(...this.radius).invert(),Zb.center.set(0,0,0),Zb.radius=1,Ah.copy(e).applyMatrix4(Ii),Ah.intersectSphere(Zb,t)?(Ii.makeScale(...this.radius),t.applyMatrix4(Ii),t):null}getEastNorthUpFrame(e,t,n,r){return n.isMatrix4&&(r=n,n=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,QS,eM,tM),this.getCartographicToPosition(e,t,n,Bu),r.makeBasis(QS,eM,tM).setPosition(Bu)}getOrientedEastNorthUpFrame(e,t,n,r,i,o,a){return this.getObjectFrame(e,t,n,r,i,o,a,0)}getObjectFrame(e,t,n,r,i,o,a,s=2){return this.getEastNorthUpFrame(e,t,n,Ii),Hr.set(i,o,-r,"ZXY"),a.makeRotationFromEuler(Hr).premultiply(Ii),s===1?(Hr.set(Math.PI/2,0,0,"XYZ"),Do.makeRotationFromEuler(Hr),a.multiply(Do)):s===2&&(Hr.set(-Math.PI/2,0,Math.PI,"XYZ"),Do.makeRotationFromEuler(Hr),a.multiply(Do)),a}getCartographicFromObjectFrame(e,t,n=2){return n===1?(Hr.set(-Math.PI/2,0,0,"XYZ"),Do.makeRotationFromEuler(Hr).premultiply(e)):n===2?(Hr.set(-Math.PI/2,0,Math.PI,"XYZ"),Do.makeRotationFromEuler(Hr).premultiply(e)):Do.copy(e),Bu.setFromMatrixPosition(Do),this.getPositionToCartographic(Bu,t),this.getEastNorthUpFrame(t.lat,t.lon,0,Ii).invert(),Do.premultiply(Ii),Hr.setFromRotationMatrix(Do,"ZXY"),t.azimuth=-Hr.z,t.elevation=Hr.x,t.roll=Hr.y,t}getEastNorthUpAxes(e,t,n,r,i,o=Bu){this.getCartographicToPosition(e,t,0,o),this.getCartographicToNormal(e,t,i),n.set(-o.y,o.x,0).normalize(),r.crossVectors(i,n).normalize()}getCartographicToPosition(e,t,n,r){this.getCartographicToNormal(e,t,ds);let i=this.radius;kr.copy(ds),kr.x*=i.x**2,kr.y*=i.y**2,kr.z*=i.z**2;let o=Math.sqrt(ds.dot(kr));return kr.divideScalar(o),r.copy(kr).addScaledVector(ds,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,kr),this.getPositionToNormal(kr,ds);let n=Kb.subVectors(e,kr);return t.lon=Math.atan2(ds.y,ds.x),t.lat=Math.asin(ds.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return JS.set(1,AR(e),t),n.setFromSpherical(JS).normalize(),PR(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,r=1/n.x**2,i=1/n.y**2,o=1/n.z**2,a=e.x*e.x*r,s=e.y*e.y*i,l=e.z*e.z*o,d=a+s+l,u=Math.sqrt(1/d),m=kr.copy(e).multiplyScalar(u);if(d<kR)return isFinite(u)?t.copy(m):null;let c=Kb.set(m.x*r*2,m.y*i*2,m.z*o*2),p=(1-u)*e.length()/(.5*c.length()),f=0,v,b,g,y,x,M,P,S,T,h,w;do{p-=f,g=1/(1+p*r),y=1/(1+p*i),x=1/(1+p*o),M=g*g,P=y*y,S=x*x,T=M*g,h=P*y,w=S*x,v=a*M+s*P+l*S-1,b=a*T*r+s*h*i+l*w*o;let C=-2*b;f=v/C}while(Math.abs(v)>ER);return t.set(e.x*g,e.y*y,e.z*x)}calculateHorizonDistance(e,t){let n=this.calculateEffectiveRadius(e);return Math.sqrt(2*n*t+t**2)}calculateEffectiveRadius(e){let t=this.radius.x,n=1-this.radius.z**2/t**2,r=e*$.MathUtils.DEG2RAD,i=Math.sin(r)**2;return t/Math.sqrt(1-n*i)}getPositionElevation(e){this.getPositionToSurfacePoint(e,kr);let t=Kb.subVectors(e,kr);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(Ii.makeScale(...this.radius).invert(),Ah.copy(e).applyMatrix4(Ii),kr.set(0,0,0),Ah.closestPointToPoint(kr,t).normalize(),Ii.makeScale(...this.radius),t.applyMatrix4(Ii))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},Fu=new sv(Tl,Tl,jb);Fu.name="WGS84 Earth";var Eh=new $.Vector3,Wc=new $.Vector3,Xc=new $.Vector3,Jb=new $.Vector3,kh=new $.Quaternion,Rh=new $.Vector3,$c=new $.Matrix4,nM=new $.Matrix4,rM=new $.Vector3,iM=new $.Matrix4,Qb=new $.Quaternion,ev={};function oM(e,t,n,r){if(e=e/n*2-1,t=t/n*2-1,r.x=e,r.y=t,r.z=1-Math.abs(e)-Math.abs(t),r.z<0){let i=r.x;r.x=(1-Math.abs(r.y))*(i>=0?1:-1),r.y=(1-Math.abs(i))*(r.y>=0?1:-1)}return r.normalize(),r}var lv=class extends $b{constructor(e=$.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new $.Matrix4,this.ellipsoid=Fu.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:n,batchTable:r}=t,i=t.glbBytes.slice().buffer;return new Promise((o,a)=>{let s=this.fetchOptions,l=this.manager,d=l.getHandler("path.gltf")||new Bh.GLTFLoader(l);s.credentials==="include"&&s.mode==="cors"&&d.setCrossOrigin("use-credentials"),"credentials"in s&&d.setWithCredentials(s.credentials==="include"),s.headers&&d.setRequestHeader(s.headers);let u=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(u)||(u+="/");let m=this.adjustmentTransform;d.parse(i,u,c=>{let p=n.getData("INSTANCES_LENGTH"),f=n.getData("POSITION",p,"FLOAT","VEC3"),v=n.getData("POSITION_QUANTIZED",p,"UNSIGNED_SHORT","VEC3"),b=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),g=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),y=n.getData("NORMAL_UP",p,"FLOAT","VEC3"),x=n.getData("NORMAL_RIGHT",p,"FLOAT","VEC3"),M=n.getData("NORMAL_UP_OCT32P",p,"UNSIGNED_SHORT","VEC2"),P=n.getData("NORMAL_RIGHT_OCT32P",p,"UNSIGNED_SHORT","VEC2"),S=n.getData("SCALE_NON_UNIFORM",p,"FLOAT","VEC3"),T=n.getData("SCALE",p,"FLOAT","SCALAR"),h=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),w=n.getData("EAST_NORTH_UP");if(!f&&v){f=new Float32Array(p*3);for(let R=0;R<p;R++)f[R*3+0]=b[0]+v[R*3+0]/65535*g[0],f[R*3+1]=b[1]+v[R*3+1]/65535*g[1],f[R*3+2]=b[2]+v[R*3+2]/65535*g[2]}let C=new $.Vector3;for(let R=0;R<p;R++)C.x+=f[R*3+0]/p,C.y+=f[R*3+1]/p,C.z+=f[R*3+2]/p;let _=[],k=[];c.scene.updateMatrixWorld(),c.scene.traverse(R=>{if(R.isMesh){k.push(R);let{geometry:U,material:H}=R,B=new $.InstancedMesh(U,H,p);B.position.copy(C),h&&(B.position.x+=h[0],B.position.y+=h[1],B.position.z+=h[2]),_.push(B)}});for(let R=0;R<p;R++){Jb.set(f[R*3+0]-C.x,f[R*3+1]-C.y,f[R*3+2]-C.z),kh.identity(),y&&x?(Wc.set(y[R*3+0],y[R*3+1],y[R*3+2]),Xc.set(x[R*3+0],x[R*3+1],x[R*3+2]),Eh.crossVectors(Xc,Wc).normalize(),$c.makeBasis(Xc,Wc,Eh),kh.setFromRotationMatrix($c)):M&&P&&(oM(M[R*2+0],M[R*2+1],65535,Wc),oM(P[R*2+0],P[R*2+1],65535,Xc),Eh.crossVectors(Xc,Wc).normalize(),$c.makeBasis(Xc,Wc,Eh),kh.setFromRotationMatrix($c)),Rh.set(1,1,1),S&&Rh.set(S[R*3+0],S[R*3+1],S[R*3+2]),T&&Rh.multiplyScalar(T[R]);for(let U=0,H=_.length;U<H;U++){let B=_[U];Qb.copy(kh),w&&(B.updateMatrixWorld(),rM.copy(Jb).applyMatrix4(B.matrixWorld),this.ellipsoid.getPositionToCartographic(rM,ev),this.ellipsoid.getEastNorthUpFrame(ev.lat,ev.lon,iM),Qb.setFromRotationMatrix(iM)),$c.compose(Jb,Qb,Rh).multiply(m);let X=k[U];nM.multiplyMatrices($c,X.matrixWorld),B.setMatrixAt(R,nM)}}c.scene.clear(),c.scene.add(..._),c.batchTable=r,c.featureTable=n,c.scene.batchTable=r,c.scene.featureTable=n,o(c)},a)})})}},mM=class extends Yb{constructor(e=$.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new $.Matrix4,this.ellipsoid=Fu.clone()}parse(e){let t=super.parse(e),{manager:n,ellipsoid:r,adjustmentTransform:i}=this,o=[];for(let a in t.tiles){let{type:s,buffer:l}=t.tiles[a];switch(s){case"b3dm":{let d=l.slice(),u=new ov(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.adjustmentTransform.copy(i);let m=u.parse(d.buffer);o.push(m);break}case"pnts":{let d=l.slice(),u=new av(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions;let m=u.parse(d.buffer);o.push(m);break}case"i3dm":{let d=l.slice(),u=new lv(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.ellipsoid.copy(r),u.adjustmentTransform.copy(i);let m=u.parse(d.buffer);o.push(m);break}}}return Promise.all(o).then(a=>{let s=new $.Group;return a.forEach(l=>{s.add(l.scene)}),{tiles:a,scene:s}})}},Iu=new $.Matrix4,RR=class extends $.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new $.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?Iu.copy(this.matrix):Iu.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=Iu.elements,n=this.matrixWorld.elements,r=!1;for(let i=0;i<16;i++){let o=t[i],a=n[i];if(Math.abs(o-a)>2**-52){r=!0;break}}if(r){this.matrixWorld.copy(Iu),this.matrixWorldInverse.copy(Iu).invert();let i=this.children;for(let l=0,d=i.length;l<d;l++)i[l].updateMatrixWorld();let{tilesRenderer:o}=this,{activeTiles:a,visibleTiles:s}=o;a.forEach(l=>{s.has(l)||l.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},LR=new $.Ray;function DR(e,t,n,r){let{scene:i}=e.engineData;n.invokeOnePlugin(o=>o.raycastTile&&o.raycastTile(e,i,t,r))||t.intersectObject(i,!0,r)}function OR(e){return"traversal"in e}function hM(e,t,n,r,i=null){if(!OR(t))return;let{group:o,activeTiles:a}=e,{boundingVolume:s}=t.engineData;if(i===null&&(i=LR,i.copy(n.ray).applyMatrix4(o.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(i))return;a.has(t)&&DR(t,n,e,r);let l=t.children;for(let d=0,u=l.length;d<u;d++)hM(e,l[d],n,r,i)}var Lh=new $.Vector3,Dh=new $.Vector3,Gr=new $.Vector3,Oh=new $.Ray,rv=class{constructor(e=new $.Box3,t=new $.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new $.Matrix4,this.points=Array(8).fill().map(()=>new $.Vector3),this.planes=[,,,,,,].fill().map(()=>new $.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,Gr).distanceTo(e)}containsPoint(e){return Gr.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(Gr)}intersectsRay(e){return Oh.copy(e).applyMatrix4(this.inverseTransform),Oh.intersectsBox(this.box)}intersectRay(e,t){return Oh.copy(e).applyMatrix4(this.inverseTransform),Oh.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:n,box:r}=this;t.copy(n).invert();let{min:i,max:o}=r,a=0;for(let s=-1;s<=1;s+=2)for(let l=-1;l<=1;l+=2)for(let d=-1;d<=1;d+=2)e[a].set(s<0?i.x:o.x,l<0?i.y:o.y,d<0?i.z:o.z).applyMatrix4(n),a++;this.updatePlanes()}updatePlanes(){Lh.copy(this.box.min).applyMatrix4(this.transform),Dh.copy(this.box.max).applyMatrix4(this.transform),Gr.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(Gr,Lh),this.planes[1].setFromNormalAndCoplanarPoint(Gr,Dh).negate(),Gr.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(Gr,Lh),this.planes[3].setFromNormalAndCoplanarPoint(Gr,Dh).negate(),Gr.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(Gr,Lh),this.planes[5].setFromNormalAndCoplanarPoint(Gr,Dh).negate()}intersectsSphere(e){return this.clampPoint(e.center,Gr),Gr.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,r=this.planes;for(let i=0;i<6;i++){let o=e[i],a=-1/0;for(let s=0;s<8;s++){let l=n[s],d=o.distanceToPoint(l);a=a<d?d:a}if(a<0)return!1}for(let i=0;i<6;i++){let o=r[i],a=-1/0;for(let s=0;s<8;s++){let l=t[s],d=o.distanceToPoint(l);a=a<d?d:a}if(a<0)return!1}return!0}},Uu=Math.PI,tv=Uu/2,zu=new $.Vector3,Pl=new $.Vector3,ao=new $.Vector3,Ye=new $.Vector3,Rr=new $.Matrix4,NR=new $.Box3,aM=new $.Matrix4;function us(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function sM(e){return e.x!==e.y}var fM=class extends sv{constructor(e=1,t=1,n=1,r=-tv,i=tv,o=0,a=2*Uu,s=0,l=0){super(e,t,n),this.latStart=r,this.latEnd=i,this.lonStart=o,this.lonEnd=a,this.heightStart=s,this.heightEnd=l}getBoundingBox(e,t){sM(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:n,latEnd:r,lonStart:i,lonEnd:o,heightStart:a,heightEnd:s}=this,l=(n+r)*.5,d=(i+o)*.5,u=n>0,m=r<0,c;c=u?n:m?r:0;let{min:p,max:f}=e;p.setScalar(1/0),f.setScalar(-1/0),o-i<=Uu?(this.getCartographicToNormal(l,d,ao),Pl.set(0,0,1),zu.crossVectors(Pl,ao).normalize(),Pl.crossVectors(ao,zu).normalize(),t.makeBasis(zu,Pl,ao),Rr.copy(t).invert(),this.getCartographicToPosition(c,i,s,Ye).applyMatrix4(Rr),f.x=Math.abs(Ye.x),p.x=-f.x,this.getCartographicToPosition(r,i,s,Ye).applyMatrix4(Rr),f.y=Ye.y,this.getCartographicToPosition(r,d,s,Ye).applyMatrix4(Rr),f.y=Math.max(Ye.y,f.y),this.getCartographicToPosition(n,i,s,Ye).applyMatrix4(Rr),p.y=Ye.y,this.getCartographicToPosition(n,d,s,Ye).applyMatrix4(Rr),p.y=Math.min(Ye.y,p.y),this.getCartographicToPosition(l,d,s,Ye).applyMatrix4(Rr),f.z=Ye.z,this.getCartographicToPosition(n,i,a,Ye).applyMatrix4(Rr),p.z=Ye.z,this.getCartographicToPosition(r,i,a,Ye).applyMatrix4(Rr),p.z=Math.min(Ye.z,p.z)):(this.getCartographicToPosition(c,d,s,ao),ao.z=0,ao.length()<1e-10?ao.set(1,0,0):ao.normalize(),Pl.set(0,0,1),zu.crossVectors(ao,Pl).normalize(),t.makeBasis(zu,Pl,ao),Rr.copy(t).invert(),this.getCartographicToPosition(c,d+tv,s,Ye).applyMatrix4(Rr),f.x=Math.abs(Ye.x),p.x=-f.x,this.getCartographicToPosition(r,0,m?a:s,Ye).applyMatrix4(Rr),f.y=Ye.y,this.getCartographicToPosition(n,0,u?a:s,Ye).applyMatrix4(Rr),p.y=Ye.y,this.getCartographicToPosition(c,d,s,Ye).applyMatrix4(Rr),f.z=Ye.z,this.getCartographicToPosition(c,o,s,Ye).applyMatrix4(Rr),p.z=Ye.z),e.getCenter(Ye),e.min.sub(Ye).multiplyScalar(1.0000000000001),e.max.sub(Ye).multiplyScalar(1.0000000000001),Ye.applyMatrix4(t),t.setPosition(Ye)}getBoundingSphere(e){sM(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(NR,aM),e.center.setFromMatrixPosition(aM),e.radius=0;let{latStart:t,latEnd:n,lonStart:r,lonEnd:i,heightStart:o,heightEnd:a}=this,s=(t+n)*.5,l=(r+i)*.5,d=t>0,u=n<0,m;m=d?t:u?n:0,this.getCartographicToPosition(m,r,a,Ye),us(Ye,e),this.getCartographicToPosition(n,r,a,Ye),us(Ye,e),this.getCartographicToPosition(n,l,a,Ye),us(Ye,e),this.getCartographicToPosition(t,r,a,Ye),us(Ye,e),this.getCartographicToPosition(t,l,a,Ye),us(Ye,e),this.getCartographicToPosition(s,l,a,Ye),us(Ye,e),this.getCartographicToPosition(t,r,o,Ye),us(Ye,e),i-r>Uu&&(this.getCartographicToPosition(m,l+Uu,a,Ye),us(Ye,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},ba=new $.Vector3,va=new $.Vector3,ya=new $.Vector3,lM=new $.Vector3,cM=new $.Vector3,BR=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,r=this.obb||this.regionObb,i=-1/0,o=-1/0;n&&e.intersectSphere(n,lM)&&(i=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(lM)),r&&r.intersectRay(e,cM)&&(o=r.containsPoint(e.origin)?0:e.origin.distanceToSquared(cM));let a=Math.max(i,o);return a===-1/0?null:(e.at(Math.sqrt(a),t),t)}distanceToPoint(e){let t=this.sphere,n=this.obb||this.regionObb,r=-1/0,i=-1/0;return t&&(r=Math.max(t.distanceToPoint(e),0)),n&&(i=n.distanceToPoint(e)),r>i?r:i}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 rv;ba.set(e[3],e[4],e[5]),va.set(e[6],e[7],e[8]),ya.set(e[9],e[10],e[11]);let r=ba.length(),i=va.length(),o=ya.length();ba.normalize(),va.normalize(),ya.normalize(),r===0&&ba.crossVectors(va,ya),i===0&&va.crossVectors(ba,ya),o===0&&ya.crossVectors(ba,va),n.transform.set(ba.x,va.x,ya.x,e[0],ba.y,va.y,ya.y,e[1],ba.z,va.z,ya.z,e[2],0,0,0,1).premultiply(t),n.box.min.set(-r,-i,-o),n.box.max.set(r,i,o),n.update(),this.obb=n}setSphereData(e,t,n,r,i){let o=new $.Sphere;o.center.set(e,t,n),o.radius=r,o.applyMatrix4(i),this.sphere=o}setRegionData(e,t,n,r,i,o,a){let s=new fM(...e.radius,n,i,t,r,o,a),l=new rv;s.getBoundingBox(l.box,l.transform),l.update(),this.region=s,this.regionObb=l}},IR=new $.Matrix3;function zR(e,t,n,r){let i=IR.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 r.set(-e.constant,-t.constant,-n.constant),r.applyMatrix3(i.invert()),r}var VR=class extends $.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new $.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,r)=>{zR(n[0],n[1],n[2],t[r])})}};var iv=0;function dM(e,t,n,r){try{return $.TextureUtils.getByteLength(e,t,n,r)}catch{return iv}}function UR(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??iv;let{format:t,type:n,image:r,mipmaps:i}=e;if(e.isCompressedTexture&&Array.isArray(i)&&i.length>0){let a=0;for(let s of i)s?.data?.byteLength?a+=s.data.byteLength:a+=dM(s.width,s.height,t,n);return a}if(!r)return iv;let o=dM(r.width,r.height,t,n);return o*=e.generateMipmaps?4/3:1,o}function FR(e){let t=new Set,n=0;return e.traverse(r=>{if(r.geometry&&!t.has(r.geometry)&&(n+=(0,pM.estimateBytesUsed)(r.geometry),t.add(r.geometry)),r.material){let i=r.material;for(let o in i){let a=i[o];a&&a.isTexture&&!t.has(a)&&(n+=UR(a),t.add(a))}}}),n}var gM=Symbol("INITIAL_FRUSTUM_CULLED"),Nh=new $.Matrix4,Vu=new $.Vector3,nv=new $.Vector2,jR=new $.Vector3(1,0,0),HR=new $.Vector3(0,1,0),GR=()=>null;function uM(e,t){e.traverse(n=>{n.frustumCulled=n[gM]&&t})}var cv=class extends Gb{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{uM(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new RR(this),this.ellipsoid=Fu.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new $.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new $.LoadingManager,this._listeners={}}addEventListener(e,t){$.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return $.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){$.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){$.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)hM(this,this.root,e,t);else{let n=e.firstHitOnly?[]:t;for(let r of this.activeTiles){let{scene:i}=r.engineData;this.invokeOnePlugin(o=>o.raycastTile&&o.raycastTile(r,i,e,n))||e.intersectObject(i,!0,n)}e.firstHitOnly&&n.length>0&&(n.sort((r,i)=>r.distance-i.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 $.Vector2),t.push(e),this.dispatchEvent({type:"add-camera",camera:e}),!0)}setResolution(e,t,n){let r=this.cameraMap;if(!r.has(e))return!1;let i=t.isVector2?t.x:t,o=t.isVector2?t.y:n,a=r.get(e);return(a.width!==i||a.height!==o)&&(a.set(i,o),this.dispatchEvent({type:"camera-resolution-change"})),!0}getResolution(e,t){let n=this.cameraMap.get(e);return n?t.copy(n):null}setResolutionFromRenderer(e,t){return t.getSize(nv),this.setResolution(e,nv.x,nv.y)}deleteCamera(e){let t=this.cameras,n=this.cameraMap;if(n.has(e)){let r=t.indexOf(e);return t.splice(r,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:r={}}=t;switch((n&&n.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(HR,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(jR,Math.PI/2);break}if("3DTILES_ellipsoid"in r){let i=r["3DTILES_ellipsoid"],{ellipsoid:o}=this;o.name=i.body,i.radii?o.radius.set(...i.radii):o.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,n=this.cameraMap,r=this.cameraInfo;for(;r.length>t.length;)r.pop();for(;r.length<t.length;)r.push({frustum:new VR,isOrthographic:!1,sseDenominator:-1,position:new $.Vector3,invScale:-1,pixelSize:0});Vu.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(Vu.x-Vu.y,Vu.x-Vu.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let i=0,o=r.length;i<o;i++){let a=t[i],s=r[i],l=s.frustum,d=s.position,u=n.get(a);(u.width===0||u.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let m=a.projectionMatrix.elements;if(s.isOrthographic=m[15]===1,s.isOrthographic){let c=2/m[0],p=2/m[5];s.pixelSize=Math.max(p/u.height,c/u.width)}else s.sseDenominator=2/m[5]/u.height;Nh.copy(e.matrixWorld),Nh.premultiply(a.matrixWorldInverse),Nh.premultiply(a.projectionMatrix),l.setFromProjectionMatrix(Nh,a.coordinateSystem,a.reversedDepth),d.set(0,0,0),d.applyMatrix4(a.matrixWorld),d.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 r=new $.Matrix4;if(e.transform){let a=e.transform;for(let s=0;s<16;s++)r.elements[s]=a[s]}n&&r.premultiply(n.engineData.transform);let i=new $.Matrix4().copy(r).invert(),o=new BR;"sphere"in e.boundingVolume&&o.setSphereData(...e.boundingVolume.sphere,r),"box"in e.boundingVolume&&o.setObbData(e.boundingVolume.box,r),"region"in e.boundingVolume&&o.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=r,e.engineData.transformInverse=i,e.engineData.boundingVolume=o,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=GR}async parseTile(e,t,n,r,i){let o=t.engineData,a=Th(r),s=this.fetchOptions,l=this.manager,d=null,u=o.transform,m=this._upRotationMatrix,c=(Cl(e)||n).toLowerCase();switch(c){case"b3dm":{let x=new ov(l);x.workingPath=a,x.fetchOptions=s,x.adjustmentTransform.copy(m),d=x.parse(e);break}case"pnts":{let x=new av(l);x.workingPath=a,x.fetchOptions=s,d=x.parse(e);break}case"i3dm":{let x=new lv(l);x.workingPath=a,x.fetchOptions=s,x.adjustmentTransform.copy(m),x.ellipsoid.copy(this.ellipsoid),d=x.parse(e);break}case"cmpt":{let x=new mM(l);x.workingPath=a,x.fetchOptions=s,x.adjustmentTransform.copy(m),x.ellipsoid.copy(this.ellipsoid),d=x.parse(e).then(M=>M.scene);break}case"gltf":case"glb":{let x=l.getHandler("path.gltf")||l.getHandler("path.glb")||new Bh.GLTFLoader(l);x.setWithCredentials(s.credentials==="include"),x.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&x.setCrossOrigin("use-credentials");let M=x.resourcePath||x.path||a;!/[\\/]$/.test(M)&&M.length&&(M+="/"),d=x.parseAsync(e,M).then(P=>{P.scene=P.scene||new $.Group;let{scene:S}=P;return S.updateMatrix(),S.matrix.multiply(m).decompose(S.position,S.quaternion,S.scale),P});break}default:d=this.invokeOnePlugin(x=>x.parseToMesh&&x.parseToMesh(e,t,n,r,i));break}let p=await d;if(p===null)throw Error(`TilesRenderer: Content type "${c}" not supported.`);let f,v;p.isObject3D?(f=p,v=null):(f=p.scene,v=p),f.updateMatrix(),f.matrix.premultiply(u),f.matrix.decompose(f.position,f.quaternion,f.scale),await this.invokeAllPlugins(x=>x.processTileModel&&x.processTileModel(f,t)),f.traverse(x=>{x[gM]=x.frustumCulled,x.userData.tile=t}),uM(f,!this.autoDisableRendererCulling);let b=[],g=[],y=[];if(f.traverse(x=>{if(x.geometry&&g.push(x.geometry),x.material){let M=x.material;b.push(x.material);for(let P in M){let S=M[P];S&&S.isTexture&&y.push(S)}}}),i.aborted){for(let x=0,M=y.length;x<M;x++){let P=y[x];P.image instanceof ImageBitmap&&P.image.close(),P.dispose()}return}o.materials=b,o.geometry=g,o.textures=y,o.scene=f,o.metadata=v}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let n=t.materials,r=t.geometry,i=t.textures,o=t.scene.parent;t.scene.traverse(a=>{a.userData.meshFeatures&&a.userData.meshFeatures.dispose(),a.userData.structuralMetadata&&a.userData.structuralMetadata.dispose()});for(let a=0,s=r.length;a<s;a++)r[a].dispose();for(let a=0,s=n.length;a<s;a++)n[a].dispose();for(let a=0,s=i.length;a<s;a++){let l=i[a];l.image instanceof ImageBitmap&&l.image.close(),l.dispose()}o&&o.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let n=e.engineData.scene;n&&(t?(n.parent=this.group,n.updateMatrixWorld(!0)):n.parent=null)}setTileVisible(e,t){let n=e.engineData.scene,{activeTiles:r,group:i}=this;n&&(t?i.add(n):(i.remove(n),r.has(e)&&(n.parent=i))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let n=this._bytesUsed;return!n.has(e)&&t&&n.set(e,FR(t)),n.get(e)??null}calculateTileViewError(e,t){let n=e.engineData,r=this.cameras,i=this.cameraInfo,o=n.boundingVolume,a=!1,s=0,l=1/0,d=0,u=1/0;for(let m=0,c=r.length;m<c;m++){let p=i[m],f,v;if(p.isOrthographic){let g=p.pixelSize;f=e.geometricError/g,v=1/0}else{let g=p.sseDenominator;v=o.distanceToPoint(p.position),f=v===0?1/0:e.geometricError/(v*g)}let b=i[m].frustum;o.intersectsFrustum(b)&&(a=!0,s=Math.max(s,f),l=Math.min(l,v)),d=Math.max(d,f),u=Math.min(u,v)}a?(t.inView=!0,t.error=s,t.distanceFromCamera=l):(t.inView=!1,t.error=d,t.distanceFromCamera=u)}dispose(){super.dispose(),this.group.removeFromParent()}};var de=require("three"),RM=require("three/addons/loaders/GLTFLoader.js"),pv=require("three/addons/postprocessing/Pass.js");var Cz=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var bM=new Lo;bM.maxJobs=10,bM.priorityCallback=(e,t)=>{let n=e.tile,r=t.tile,i=n.internal.renderer,o=r.internal.renderer,a=i.visibleTiles.has(n);return a===o.visibleTiles.has(r)?Hc(n,r):a?1:-1};var vM=new de.Vector3;function ju(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,r=new de.BufferAttribute(new t(e.count*e.itemSize),e.itemSize,!0),i=e.itemSize,o=e.count;for(let a=0;a<o;a++)for(let s=0;s<i;s++){let l=de.MathUtils.clamp(e.getComponent(a,s),n,1);r.setComponent(a,s,l)}return r}function WR(e,t=Int16Array){let n=e.geometry,r=n.attributes,i=r.position;if(i.isInterleavedBufferAttribute||i.array instanceof t)return i;let o=new de.BufferAttribute(new t(i.count*i.itemSize),i.itemSize,!1),a=i.itemSize,s=i.count;n.computeBoundingBox();let l=n.boundingBox,{min:d,max:u}=l,m=2**(8*t.BYTES_PER_ELEMENT-1)-1,c=-m;for(let p=0;p<s;p++)for(let f=0;f<a;f++){let v=f===0?"x":f===1?"y":"z",b=d[v],g=u[v],y=de.MathUtils.mapLinear(i.getComponent(p,f),b,g,c,m);o.setComponent(p,f,y)}l.getCenter(vM).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(vM),e.scale.x*=.5*(u.x-d.x)/m,e.scale.y*=.5*(u.y-d.y)/m,e.scale.z*=.5*(u.z-d.z)/m,r.position=o,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var mv=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:r,compressIndex:i,compressUvs:o,compressNormals:a,compressPosition:s,uvType:l,normalType:d,positionType:u}=this._options;e.traverse(m=>{if(m.material&&r){let c=m.material;for(let p in c){let f=c[p];f&&f.isTexture&&f.generateMipmaps&&(f.generateMipmaps=!1,f.minFilter=de.LinearFilter)}}if(m.geometry){let c=m.geometry,p=c.attributes;if(o){let{uv:f,uv1:v,uv2:b,uv3:g}=p;f&&(p.uv=ju(f,l)),v&&(p.uv1=ju(v,l)),b&&(p.uv2=ju(b,l)),g&&(p.uv3=ju(g,l))}if(n&&!p.normals&&c.computeVertexNormals(),a&&p.normals&&(p.normals=ju(p.normals,d)),s&&WR(m,u),i&&c.index){let f=p.position.count,v=c.index,b=f>65535?Uint32Array:f>255?Uint16Array:Uint8Array;if(!(v.array instanceof b)){let g=new b(c.index.count);g.set(v.array);let y=new de.BufferAttribute(g,1);c.setIndex(y)}}}})}};function lr(e,t,n){return e&&t in e?e[t]:n}function LM(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function XR(e){return/^FLOAT/.test(e)}function Xu(e){return/^VEC/.test(e)}function $u(e){return/^MAT/.test(e)}function DM(e,t,n,r=null){return $u(n)||Xu(n)?r.fromArray(e,t):e[t]}function dv(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new de.Vector2;case"VEC3":return new de.Vector3;case"VEC4":return new de.Vector4;case"MAT2":return new de.Matrix2;case"MAT3":return new de.Matrix3;case"MAT4":return new de.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function yM(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 Wu(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 $R(e,t=null){if(e.array){t=t&&Array.isArray(t)?t:[],t.length=e.count;for(let n=0,r=t.length;n<r;n++)t[n]=Ih(e,t[n])}else t=Ih(e,t);return t}function Ih(e,t=null){let n=e.default,r=e.type;if(t||(t=dv(e)),n===null){switch(r){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($u(r))t.fromArray(n);else if(Xu(r))t.fromArray(n);else return n}function qR(e,t){if(e.noData===null)return t;let n=e.noData,r=e.type;if(Array.isArray(t))for(let a=0,s=t.length;a<s;a++)t[a]=i(t[a]);else t=i(t);return t;function i(a){return o(a)&&(a=Ih(e,a)),a}function o(a){if($u(r)){let s=a.elements;for(let l=0,d=n.length;l<d;l++)if(n[l]!==s[l])return!1;return!0}else if(Xu(r)){for(let s=0,l=n.length;s<l;s++)if(n[s]!==a.getComponent(s))return!1;return!0}else return n===a}}function YR(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 KR(e,t){let{type:n,componentType:r,scale:i,offset:o,normalized:a}=e;if(Array.isArray(t))for(let m=0,c=t.length;m<c;m++)t[m]=s(t[m]);else t=s(t);return t;function s(m){return m=$u(n)?d(m):Xu(n)?l(m):u(m),m}function l(m){return m.x=u(m.x),m.y=u(m.y),"z"in m&&(m.z=u(m.z)),"w"in m&&(m.w=u(m.w)),m}function d(m){let c=m.elements;for(let p=0,f=c.length;p<f;p++)c[p]=u(c[p]);return m}function u(m){return a&&(m=YR(r,m)),(a||XR(r))&&(m=m*i+o),m}}function hv(e,t,n=null){if(e.array){Array.isArray(t)||(t=Array(e.count||0)),t.length=n===null?e.count:n;for(let r=0,i=t.length;r<i;r++)yM(e.type,t[r])||(t[r]=dv(e))}else yM(e.type,t)||(t=dv(e));return t}function zh(e,t){for(let n in t)n in e||delete t[n];for(let n in e){let r=e[n];t[n]=hv(r,t[n])}}function ZR(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 Uh=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=lr(t,"scale",1),this.max=lr(t,"max",1/0),this.min=lr(t,"min",-1/0),this.required=t.required||!1,this.noData=lr(t,"noData",null),this.default=lr(t,"default",null),this.semantic=lr(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=lr(n,"offset",this.offset),this.scale=lr(n,"scale",this.scale),this.max=lr(n,"max",this.max),this.min=lr(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=lr(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return hv(this,e,t)}resolveDefaultElement(e){return Ih(this,e)}resolveDefault(e){return $R(this,e)}resolveNoData(e){return qR(this,e)}resolveEnumsToStrings(e){let t=this.enumSet;if(this.type==="ENUM")if(Array.isArray(e))for(let r=0,i=e.length;r<i;r++)e[r]=n(e[r]);else e=n(e);return e;function n(r){let i=t.values.find(o=>o.value===r);return i===null?"":i.name}}adjustValueScaleOffset(e){return LM(this.type)?KR(this,e):e}},fv=class{constructor(e,t={},n={},r=null){this.definition=e,this.class=t[e.class],this.className=e.class,this.enums=n,this.data=r,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=Uh){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}},JR=class extends Uh{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},QR=class extends fv{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(JR)}getData(e,t,n={}){let r=this.properties;zh(r,n);for(let i in r)n[i]=this.getPropertyValue(i,e,t,n[i]);return n}getPropertyValue(e,t,n,r=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let i=this.properties[e],o=i.type;if(!i)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(r);r=i.shapeToProperty(r);let a=n.getAttribute(i.attribute.toLowerCase());if($u(o)){let s=r.elements;for(let l=s.length;0<l;)s[0]=a.getComponent(t,0)}else if(Xu(o))r.fromBufferAttribute(a,t);else if(o==="SCALAR"||o==="ENUM")r=a.getX(t);else throw Error("StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.");return r=i.adjustValueScaleOffset(r),r=i.resolveEnumsToStrings(r),r=i.resolveNoData(r),r}},eL=class extends Uh{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=ZR(this.type),this.arrayOffsets=lr(n,"arrayOffsets",null),this.stringOffsets=lr(n,"stringOffsets",null),this.arrayOffsetType=lr(n,"arrayOffsetType","UINT32"),this.stringOffsetType=lr(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:r,arrayOffsetType:i}=this,o=new(Wu(i))(e[r]);n=o[t+1]-o[t]}return n}getIndexOffsetFromId(e,t){let n=t;if(this.arrayOffsets){let{arrayOffsets:r,arrayOffsetType:i}=this;n=new(Wu(i))(e[r])[n]}else this.array&&(n*=this.count);return n}},tL=class extends fv{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(eL)}getData(e,t={}){let n=this.properties;zh(n,t);for(let r in n)t[r]=this.getPropertyValue(r,e,t[r]);return t}_readValueAtIndex(e,t,n,r=null){let i=this.properties[e],{componentType:o,type:a}=i,s=this.data,l=s[i.values],d=new(Wu(o,a))(l),u=i.getIndexOffsetFromId(s,t);if(LM(a)||a==="ENUM")return DM(d,(u+n)*i.valueLength,a,r);if(a==="STRING"){let m=u+n,c=0;if(i.stringOffsets!==null){let{stringOffsets:f,stringOffsetType:v}=i,b=new(Wu(v))(s[f]);c=b[m+1]-b[m],m=b[m]}let p=new Uint8Array(d.buffer,m,c);r=new TextDecoder().decode(p)}else if(a==="BOOLEAN"){let m=u+n,c=Math.floor(m/8),p=m%8;r=(d[c]>>p&1)==1}return r}getPropertyValue(e,t,n=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let r=this.properties[e];if(!r)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return r.resolveDefault(n);let i=r.array,o=this.data,a=r.getArrayLengthFromId(o,t);if(n=r.shapeToProperty(n,a),i)for(let s=0,l=n.length;s<l;s++)n[s]=this._readValueAtIndex(e,t,s,n[s]);else n=this._readValueAtIndex(e,t,0,n);return n=r.adjustValueScaleOffset(n),n=r.resolveEnumsToStrings(n),n=r.resolveNoData(n),n}},Hu=new de.Box2,xM=class{constructor(){this._renderer=new de.WebGLRenderer,this._target=new de.WebGLRenderTarget(1,1),this._texTarget=new de.WebGLRenderTarget,this._quad=new pv.FullScreenQuad(new de.ShaderMaterial({blending:de.CustomBlending,blendDst:de.ZeroFactor,blendSrc:de.OneFactor,uniforms:{map:{value:null},pixel:{value:new de.Vector2}},vertexShader:`
|
|
3674
3723
|
void main() {
|
|
3675
3724
|
|
|
3676
3725
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
@@ -3685,11 +3734,13 @@ ${c.id}`,u=$b(c),d=i.get(p);d&&(d.node!==l||d.signature!==u)&&(Mh(d),d=void 0),d
|
|
|
3685
3734
|
gl_FragColor = texelFetch( map, pixel, 0 );
|
|
3686
3735
|
|
|
3687
3736
|
}
|
|
3688
|
-
`}))}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:r,_target:i}=this;fc.min.copy(t),fc.max.copy(t),fc.max.x+=1,fc.max.y+=1,r.initRenderTarget(i),r.copyTextureToTexture(e,i.texture,fc,n,0)}},qo=new class{constructor(){let e=null;Object.getOwnPropertyNames(Ly.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new Ly),e[t](...n)))})}},Dy=new re.Vector2,Ny=new re.Vector2,By=new re.Vector2;function eT(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function Xy(e,t,n=[,,,]){let r=3*t,i=3*t+1,o=3*t+2;return e.index&&(r=e.index.getX(r),i=e.index.getX(i),o=e.index.getX(o)),n[0]=r,n[1]=i,n[2]=o,n}function qy(e,t,n,r,i){let[o,a,s]=r,l=eT(e,t);Dy.fromBufferAttribute(l,o),Ny.fromBufferAttribute(l,a),By.fromBufferAttribute(l,s),i.set(0,0,0).addScaledVector(Dy,n.x).addScaledVector(Ny,n.y).addScaledVector(By,n.z)}function $y(e,t,n,r){let i=e.x-Math.floor(e.x),o=e.y-Math.floor(e.y),a=Math.floor(i*t%t),s=Math.floor(o*n%n);return r.set(a,s),r}var Oy=new re.Vector2,Iy=new re.Vector2,zy=new re.Vector2,tT=class extends Ou{constructor(e,t,n=null){super(e,t,n),this.channels=Vn(n,"channels",[0]),this.index=Vn(n,"index",null),this.texCoord=Vn(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let r=this.type;if(r==="BOOLEAN"||r==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return Wy(e,t*this.valueLength,r,n)}},nT=class extends Am{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(tT)}getData(e,t,n,r={}){let i=this.properties;Nu(i,r);let o=Object.keys(i),a=o.map(s=>r[s]);return this.getPropertyValuesAtTexel(o,e,t,n,a),o.forEach((s,l)=>r[s]=a[l]),r}async getDataAsync(e,t,n,r={}){let i=this.properties;Nu(i,r);let o=Object.keys(i),a=o.map(s=>r[s]);return await this.getPropertyValuesAtTexelAsync(o,e,t,n,a),o.forEach((s,l)=>r[s]=a[l]),r}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,r,i=[]){for(;i.length<e.length;)i.push(null);i.length=e.length,qo.increaseSizeTo(i.length);let o=this.data,a=this.definition.properties,s=this.properties,l=Xy(r,t);for(let u=0,d=e.length;u<d;u++){let m=e[u];if(!a[m])continue;let g=s[m],v=o[g.index];qy(r,g.texCoord,n,l,Oy),$y(Oy,v.image.width,v.image.height,Iy),zy.set(u,0),qo.renderPixelToTarget(v,Iy,zy)}let c=new Uint8Array(e.length*4);if(this._asyncRead)return qo.readDataAsync(c).then(()=>(p.call(this),i));return qo.readData(c),p.call(this),i;function p(){for(let u=0,d=e.length;u<d;u++){let m=e[u],g=s[m],v=g.type;if(i[u]=Pm(g,i[u]),!g)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!a[m]){i[u]=g.resolveDefault(i);continue}let M=g.valueLength*(g.count||1),w=g.channels.map(k=>c[4*u+k]),x=g.componentType,S=new(bc(x,v))(M);if(new Uint8Array(S.buffer).set(w),g.array){let k=i[u];for(let b=0,_=k.length;b<_;b++)k[b]=g.readDataFromBuffer(S,b,k[b])}else i[u]=g.readDataFromBuffer(S,0,i[u]);i[u]=g.adjustValueScaleOffset(i[u]),i[u]=g.resolveEnumsToStrings(i[u]),i[u]=g.resolveNoData(i[u])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Mm=class{constructor(e,t,n,r=null,i=null){let{schema:o,propertyTables:a=[],propertyTextures:s=[],propertyAttributes:l=[]}=e,{enums:c,classes:p}=o,u=a.map(g=>new QC(g,p,c,n)),d=[],m=[];r&&(r.propertyTextures&&(d=r.propertyTextures.map(g=>new nT(s[g],p,c,t))),r.propertyAttributes&&(m=r.propertyAttributes.map(g=>new ZC(l[g],p,c)))),this.schema=o,this.tableAccessors=u,this.textureAccessors=d,this.attributeAccessors=m,this.object=i,this.textures=t,this.nodeMetadata=r}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let r=Math.min(e.length,t.length);n.length=r;for(let i=0;i<r;i++){let o=this.tableAccessors[e[i]];n[i]=o.getData(t[i],n[i])}}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 r=this.textureAccessors;n.length=r.length;for(let i=0;i<r.length;i++)n[i]=r[i].getData(e,t,this.object.geometry,n[i]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let r=this.textureAccessors;n.length=r.length;let i=[];for(let o=0;o<r.length;o++){let a=r[o].getDataAsync(e,t,this.object.geometry,n[o]).then(s=>{n[o]=s});i.push(a)}return await Promise.all(i),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let r=0;r<n.length;r++)t[r]=n[r].getData(e,this.object.geometry,t[r]);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())}},gc="EXT_structural_metadata";function rT(e,t=[]){let n=e.json.textures?.length||0,r=Array(n).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{index:a}=i[o];r[a]===null&&(r[a]=e.loadTexture(a))}}),Promise.all(r)}function iT(e,t=[]){let n=e.json.bufferViews?.length||0,r=Array(n).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{values:a,arrayOffsets:s,stringOffsets:l}=i[o];r[a]===null&&(r[a]=e.getDependency("bufferView",a)),r[s]===null&&(r[s]=e.getDependency("bufferView",s)),r[l]===null&&(r[l]=e.getDependency("bufferView",l))}}),Promise.all(r)}var Yy=class{constructor(e){this.parser=e,this.name=gc}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(gc))return;let r=null,i=t.json.extensions[gc];if(i.schemaUri){let{manager:l,path:c,requestHeader:p,crossOrigin:u}=t.options,d=new URL(i.schemaUri,c).toString(),m=new re.FileLoader(l);m.setCrossOrigin(u),m.setResponseType("json"),m.setRequestHeader(p),r=m.loadAsync(d).then(g=>{i={...i,schema:g}})}let[o,a]=await Promise.all([rT(t,i.propertyTextures),iT(t,i.propertyTables),r]),s=new Mm(i,o,a);e.userData.structuralMetadata=s,e.traverse(l=>{if(t.associations.has(l)){let{meshes:c,primitives:p}=t.associations.get(l),u=t.json.meshes[c]?.primitives[p];if(u&&u.extensions&&u.extensions[gc]){let d=u.extensions[gc];l.userData.structuralMetadata=new Mm(i,o,a,d,l)}else l.userData.structuralMetadata=s}})}},Uy=new re.Vector2,Fy=new re.Vector2,Vy=new re.Vector2;function oT(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var Ky=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(r=>{let{texture:i,...o}=r,a={label:null,propertyTable:null,nullFeatureId:null,...o};return i&&(a.texture={texCoord:0,channels:[0],...i}),a})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:n,textures:r,featureIds:i}=this,o=Array(i.length).fill(null),a=i.length;qo.increaseSizeTo(a);let s=Xy(n,e),l=s[oT(t)];for(let u=0,d=i.length;u<d;u++){let m=i[u],g="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let v=r[m.texture.index];qy(n,m.texture.texCoord,t,s,Uy),$y(Uy,v.image.width,v.image.height,Fy),Vy.set(u,0),qo.renderPixelToTarget(r[m.texture.index],Fy,Vy)}else if("attribute"in m){let v=n.getAttribute(`_feature_id_${m.attribute}`).getX(l);v!==g&&(o[u]=v)}else{let v=l;v!==g&&(o[u]=v)}}let c=new Uint8Array(a*4);if(this._asyncRead)return qo.readDataAsync(c).then(()=>(p(),o));return qo.readData(c),p(),o;function p(){let u=new Uint32Array(1);for(let d=0,m=i.length;d<m;d++){let g=i[d],v="nullFeatureId"in g?g.nullFeatureId:null;if("texture"in g){let{channels:M}=g.texture,w=M.map(S=>c[4*d+S]);new Uint8Array(u.buffer).set(w);let x=u[0];x!==v&&(o[d]=x)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Bu="EXT_mesh_features";function jy(e,t,n){e.traverse(r=>{if(t.associations.has(r)){let{meshes:i,primitives:o}=t.associations.get(r),a=t.json.meshes[i]?.primitives[o];a&&a.extensions&&a.extensions[Bu]&&n(r,a.extensions[Bu])}})}var Zy=class{constructor(e){this.parser=e,this.name=Bu}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Bu))return;let r=t.json.textures?.length||0,i=Array(r).fill(null);jy(e,t,(a,{featureIds:s})=>{s.forEach(l=>{if(l.texture&&i[l.texture.index]===null){let c=l.texture.index;i[c]=t.loadTexture(c)}})});let o=await Promise.all(i);jy(e,t,(a,s)=>{a.userData.meshFeatures=new Ky(a.geometry,o,s)})}},Jy=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])}}},Em=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 Hy.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 Jy),this.metadata&&(t.register(()=>new Yy),t.register(()=>new Zy)),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:Zk}=re.MathUtils;var Jk=new Cm.FullScreenQuad(new re.MeshBasicMaterial),aT=new re.DataTexture(new Uint8Array([255,255,255,255]),1,1);aT.needsUpdate=!0;var sT=0,lT=1,cT=2,dT=3,uT=4,pT=5,hT=6,mT=7,fT=8,gT=9,bT=10,vT=11,Qk=Object.freeze({NONE:sT,SCREEN_ERROR:lT,GEOMETRIC_ERROR:cT,DISTANCE:dT,DEPTH:uT,RELATIVE_DEPTH:pT,IS_LEAF:hT,RANDOM_COLOR:mT,RANDOM_NODE_COLOR:fT,CUSTOM_COLOR:gT,LOAD_ORDER:bT,INDEXED_COLOR:vT});var eL=Math.PI/4,tL=3/5;var Xo={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var nL=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:r}=this;return n in r||(t.setHSL(Math.random(),1,.5),r[n]=t.getHex()),t.set(r[n])}};var rL={[Xo.NONE]:16777215,[Xo.NOT_READY]:7829367,[Xo.NO_FIT]:2250239,[Xo.DEPTH]:4473924,[Xo.OCCUPANCY]:65535,[Xo.SPACING]:16776960,[Xo.ANGLE]:16711680,[Xo.FACING]:16711935};var iL=Math.PI/180;var oL=Oa*Math.PI*2;var aL=Oa*Math.PI*2;var n0=require("three/examples/jsm/loaders/DRACOLoader.js"),r0=require("three/examples/jsm/loaders/KTX2Loader.js"),i0=require("three/examples/jsm/libs/meshopt_decoder.module.js"),jr=require("three");var yc=require("three");function Qy(e){return!!e&&!e.isInterleavedBufferAttribute}function e0(e,t,n,r){for(let i=0;i<e.count;i+=1)for(let o=0;o<e.itemSize;o+=1)t.setComponent(i,o,yc.MathUtils.clamp(e.getComponent(i,o),n,r));return t}function xT(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let r=e.getComponent(t,n);if(!Number.isFinite(r)||r<0||r>1)return!1}return!0}var Iu=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let r=n.geometry;if(!r)return;let i=r.attributes.normal;Qy(i)&&!(i.array instanceof Int16Array)&&(r.attributes.normal=e0(i,new yc.BufferAttribute(new Int16Array(i.count*i.itemSize),i.itemSize,!0),-1,1));for(let o of["uv","uv1","uv2","uv3"]){let a=r.attributes[o];!Qy(a)||a.array instanceof Uint16Array||!xT(a)||(r.attributes[o]=e0(a,new yc.BufferAttribute(new Uint16Array(a.count*a.itemSize),a.itemSize,!0),0,1))}})}};var wc=require("react/jsx-runtime"),yT=0,t0=4,wT=6,ST=12,_T=4;function MT(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 Rm({url:e,rotation:t=[0,0,0],errorTarget:n=64,cacheSize:r=800,memoryBudgetMB:i=800,decoderConfig:o,objectBindings:a,itemMaterials:s,sceneConfig:l,selectedItem:c,panelHoveredItem:p,highlightOnHover:u=!0,onItemClick:d,onItemHover:m,onItemDoubleClick:g,onItemContextMenu:v,onObjectCatalog:M,onTilesetBounds:w,onModelLoaded:x,onLoadError:S,nodeRefsOut:k,onNodeRefsChange:b,materialRefsOut:_,explodeFactor:y=0,suspendBindingTransforms:h=!1}){let{camera:P,gl:A,invalidate:C}=(0,zu.useThree)(),D=(0,$e.useRef)(null),[B,j]=(0,$e.useState)(null),W=(0,$e.useRef)({onItemClick:d,onItemHover:m,onItemDoubleClick:g,onObjectCatalog:M,onTilesetBounds:w,onModelLoaded:x,onLoadError:S,onNodeRefsChange:b});W.current={onItemClick:d,onItemHover:m,onItemDoubleClick:g,onObjectCatalog:M,onTilesetBounds:w,onModelLoaded:x,onLoadError:S,onNodeRefsChange:b};let U=(0,$e.useRef)(!0),[te,O]=(0,$e.useState)(null),$=(0,$e.useRef)(null);$.current=te;let le=(0,$e.useRef)([]),tt=(0,$e.useRef)(!1);(0,$e.useEffect)(()=>{let oe=new hu;return O(oe),()=>oe.dispose()},[e]);let xe=(0,$e.useRef)(null),nt=(0,$e.useRef)(0),ce=(0,$e.useRef)(!1),Le=i*1024*1024,he=(0,$e.useRef)(!1),pt=(0,$e.useRef)(Zh),Bt=(0,$e.useRef)(null),un=(0,$e.useRef)(null),Ie=(0,$e.useRef)(null);(0,$e.useEffect)(()=>()=>{Ie.current!==null&&clearTimeout(Ie.current)},[]);let bt=o?.dracoDecoderPath??Vh,Ot=o?.ktx2TranscoderPath??jh,dr=o?.meshopt??!0,[de,Cr]=(0,$e.useState)(null);(0,$e.useEffect)(()=>{ce.current=!1,he.current=!1;let oe=new Sm(e);oe.loadAncestors=!0;let ye=new xu;ye.priorityCallback=oe.downloadQueue.priorityCallback,ye.maxJobsPerOrigin=ST;let Ae=new Yi;Ae.priorityCallback=oe.parseQueue.priorityCallback,Ae.maxJobs=wT;let ct=new Yi;ct.priorityCallback=oe.processNodeQueue.priorityCallback,ct.maxJobs=oe.processNodeQueue.maxJobs;let ht=new ic;ht.unloadPriorityCallback=oe.lruCache.unloadPriorityCallback,oe.downloadQueue=ye,oe.parseQueue=Ae,oe.processNodeQueue=ct,oe.lruCache=ht;let Ke=bt?new n0.DRACOLoader().setDecoderPath(bt).setWorkerLimit(_T):null,wt=Ot?new r0.KTX2Loader().setTranscoderPath(Ot).detectSupport(A):null;return oe.registerPlugin(new Em({dracoLoader:Ke,ktxLoader:wt,meshoptDecoder:dr?i0.MeshoptDecoder:null,autoDispose:!1})),oe.registerPlugin(new Tm({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),oe.registerPlugin(new Iu),Cr(oe),window.__riTiles=oe,()=>{oe.forEachLoadedModel(_e=>Nl(_e)),oe.dispose(),Ke?.dispose(),wt?.dispose(),Cr(_e=>_e===oe?null:_e)}},[bt,A,Ot,dr,e]),(0,$e.useEffect)(()=>{de&&(pt.current=Zh,Bt.current=null,de.errorTarget=n,de.lruCache.maxSize=r,de.lruCache.minSize=Math.max(1,Math.floor(r*.75)),de.lruCache.maxBytesSize=Le,de.lruCache.minBytesSize=Le*.75,C())},[r,n,C,Le,de]);let Xt=(0,$e.useMemo)(()=>{let oe=a??{};return{objectBindings:oe,keyByModelObject:zx(oe),itemMaterials:s,shadingMode:l?.model.shading??"lit",rendererMode:l?.model.renderer??"pbr",selectedKey:c??null,hoveredKey:Ux(B,p),highlightOnHover:u,suspendTransforms:h,placementFrame:de?.group.matrixWorld,invalidate:C}},[B,u,C,s,a,p,l,c,h,de]),Et=(0,$e.useCallback)(()=>{if(!de)return;let oe=Tn.current,ye=tt.current?$.current?.nodesByBinding(oe)??{}:{},Ae={};de.group.traverse(wt=>{if(!wt.isMesh)return;let _e=Yh(wt);if(!_e)return;let qe=oe.keyByModelObject[_e]??_e;if(!oe.objectBindings[qe])return;ye[qe]||(ye[qe]=wt);let dt=wt.material;dt&&(Ae[qe]=dt)});let ct=k?.current??{},ht=Object.keys(ct),Ke=ht.length!==Object.keys(ye).length||ht.some(wt=>ct[wt]!==ye[wt]);k&&(k.current=ye),_&&(_.current=Ae),(Ke||!k)&&W.current.onNodeRefsChange?.()},[_,k,de]),rt=(0,$e.useCallback)(oe=>uu(oe,Xt),[Xt]),bn=(0,$e.useCallback)(oe=>Vx(oe,Xt),[Xt]),Tr=(0,$e.useRef)(bn);Tr.current=bn;let Tn=(0,$e.useRef)(Xt);Tn.current=Xt;let Kt=(0,$e.useCallback)(()=>{let oe=xe.current,ye=nt.current;return!oe||ye<=0?Tn.current:{...Tn.current,explode:{factor:ye,centre:oe.centre,radius:oe.radius}}},[]);(0,$e.useEffect)(()=>{de&&(bn(de.group),U.current=!0,de.forEachLoadedModel(oe=>{bn(oe),js(oe,Kt())}),C())},[bn,C,Kt,de]),(0,$e.useEffect)(()=>{let oe=MT(e);if(!oe)return;let ye=!1;return fetch(oe).then(Ae=>Ae.ok?Ae.json():null).then(Ae=>{ye||!Ae?.objects||(le.current=Ae.objects,tt.current=Ae.bindingFrame==="gltf-identity-v2",tt.current&&$.current?.setCatalog(Ae.objects),U.current=!0,W.current.onObjectCatalog?.(Ae.objects),C())}).catch(()=>{}),()=>{ye=!0}},[e,C,te]),(0,$e.useEffect)(()=>{if(!de)return;let oe=!1,ye=()=>C(),Ae=_e=>{_e.scene&&(_e.scene.traverse(qe=>{let dt=qe.material;for(let pn of Array.isArray(dt)?dt:dt?[dt]:[])pn.transparent&&pn.side===jr.DoubleSide&&(pn.forceSinglePass=!0)}),Tr.current(_e.scene),js(_e.scene,Kt()),gd(_e.scene)),U.current=!0,oe||(oe=!0,W.current.onModelLoaded?.(de.group)),C()},ct=_e=>{W.current.onLoadError?.(_e.error)},ht=_e=>{_e.scene&&(Kh(_e.scene),Nl(_e.scene)),U.current=!0};de.setCamera(P),de.setResolutionFromRenderer(P,A),de.addEventListener("needs-update",ye),de.addEventListener("load-model",Ae),de.addEventListener("load-error",ct),de.addEventListener("dispose-model",ht);let Ke=()=>{U.current=!0,C()};de.addEventListener("tile-visibility-change",Ke);let wt=()=>{let _e=de.root;_e&&!_e.content?.uri&&_e.refine==="REPLACE"&&(_e.refine="ADD",C())};return de.addEventListener("load-root-tileset",wt),C(),()=>{de.removeEventListener("needs-update",ye),de.removeEventListener("load-model",Ae),de.removeEventListener("load-error",ct),de.removeEventListener("dispose-model",ht),de.removeEventListener("tile-visibility-change",Ke),de.removeEventListener("load-root-tileset",wt),Kh(de.group),de.deleteCamera(P),k&&(k.current={}),_&&(_.current={})}},[P,A,C,_,k,Kt,de]);let fe=Nd(oe=>rt(oe)?.binding??null,v),We=(0,$e.useCallback)(oe=>{if(fe.consumeClick())return;let ye=rt(oe.object);ye&&(oe.stopPropagation(),W.current.onItemClick?.(ye.binding))},[rt,fe,d]),xn=(0,$e.useCallback)(oe=>{let ye=rt(oe.object);if(!ye)return;W.current.onItemDoubleClick?.(ye.binding,Bs(oe))&&oe.stopPropagation()},[rt]),It=(0,$e.useCallback)(oe=>{let ye=rt(oe.object),Ae=ye?.key??null;Ae!==D.current&&(D.current=Ae,j(Ae),W.current.onItemHover?.(ye?.binding??null))},[rt]),zt=(0,$e.useCallback)(()=>{D.current!==null&&(D.current=null,j(null),W.current.onItemHover?.(null))},[]);return(0,$e.useEffect)(()=>{C()},[C,de]),(0,zu.useFrame)((oe,ye)=>{if(!de)return;if(de.setResolutionFromRenderer(P,A),tt.current&&te){let tn=te.sync(Kt(),c,h);te.updateBounds(de.root),h&&de.forEachLoadedModel(Pr=>js(Pr,tn))}if(de.update(),!ce.current){let tn=new jr.Box3;if(de.getBoundingBox(tn)){ce.current=!0,de.group.updateMatrixWorld(),tn.applyMatrix4(de.group.matrixWorld);let Pr=tn.getBoundingSphere(new jr.Sphere);xe.current={centre:Pr.center.clone(),radius:tn.getSize(new jr.Vector3).length()*.5},W.current.onTilesetBounds?.(tn),C()}}U.current&&(U.current=!1,Et());let Ae=Math.min(Math.max(y,0),1),ct=nt.current;Math.abs(ct-Ae)>1e-4?(nt.current=jr.MathUtils.lerp(ct,Ae,1-Math.exp(-6*ye)),js(de.group,Kt()),C()):ct!==Ae&&(nt.current=Ae,js(de.group,Kt()),C());let ht=de,Ke=de.lruCache,wt=Ke.isFull(),_e=pt.current,qe=_e.loosened&&Bt.current?Bt.current:{bytes:Ke.maxBytesSize,items:Ke.maxSize},dt=0;for(let tn of Ke.usedSet??[])dt+=Ke.bytesMap?.get(tn)??0;let pn=!1,ur=de;for(let tn of ur.usedSet??[]){let Pr=tn.internal?.loadingState??t0;if(tn.traversal?.used&&tn.internal?.hasContent&&Pr>=yT&&Pr<t0){pn=!0;break}}let en=un.current??(un.current={world:new jr.Matrix4,projection:new jr.Matrix4}),Hn=!en.world.equals(P.matrixWorld)||!en.projection.equals(P.projectionMatrix);Hn&&(en.world.copy(P.matrixWorld),en.projection.copy(P.projectionMatrix));let Xr={full:wt,wanting:pn,moved:Hn,usage:Math.max(dt/Math.max(1,qe.bytes),(Ke.usedSet?.size??0)/Math.max(1,qe.items)),now:performance.now()},pr=Kx(_e,Xr);pr!==_e&&(pr.loosened&&(!_e.loosened||pr.raisedAt!==_e.raisedAt)?(_e.loosened||(Bt.current=qe),Ke.maxBytesSize=Math.max(qe.bytes,Ke.cachedBytes??0)*Jh,Ke.maxSize=Math.ceil(Math.max(qe.items,Ke.itemSet?.size??0)*Jh)):!pr.loosened&&_e.loosened&&Bt.current&&(Ke.maxBytesSize=Bt.current.bytes,Ke.maxSize=Bt.current.items,Bt.current=null),pt.current=pr,de.errorTarget=n*pr.factor,C()),!he.current&&wt&&Xr.wanting&&pr.factor>=ec&&(he.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 to=Zx(pr,Xr);to===0?C():to!==null&&Ie.current===null&&(Ie.current=setTimeout(()=>{Ie.current=null,C()},to)),((ht.stats?.downloading??0)>0||(ht.stats?.parsing??0)>0||ht.loadProgress!==void 0&&ht.loadProgress<1&&!wt)&&C()}),de?(0,wc.jsxs)("group",{rotation:t,children:[te?(0,wc.jsx)("primitive",{object:te.group}):null,(0,wc.jsx)("primitive",{object:de.group,onClick:We,onDoubleClick:xn,onPointerDown:v?fe.onPointerDown:void 0,onPointerMove:It,onPointerOut:zt})]}):null}var Uu=require("three");var CT=new Uu.Matrix4().makeRotationX(Math.PI/2);function o0(e){e.updateMatrixWorld(!0);let t=new Uu.Matrix4().copy(e.matrixWorld).invert().premultiply(CT),n=new Uu.Matrix4,r=[];for(let[i,o]of Object.entries(Fo(e).nodesById)){let a=o;if(!a.isMesh||!a.geometry||!o.name)continue;let s=a.geometry;s.boundingBox||s.computeBoundingBox();let l=s.boundingBox.clone().applyMatrix4(n.multiplyMatrices(t,o.matrixWorld)),c=s.index?s.index.count:s.getAttribute("position")?.count??0;r.push({name:i,triangles:Math.floor(c/3),minimum:l.min.toArray(),maximum:l.max.toArray()})}return r.sort((i,o)=>i.name.localeCompare(o.name))}var ot=require("react"),km=require("@react-three/drei"),za=require("@react-three/fiber"),Zi=require("three");var Qn=require("react/jsx-runtime"),TT=.02;function a0(e,t){let n=(0,ot.useRef)(null),r=(0,za.useThree)(c=>c.scene),i=(0,ot.useRef)(null),o=(0,ot.useMemo)(()=>new Zi.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),a=(0,ot.useMemo)(()=>new Zi.Vector3,[]),s=(0,ot.useMemo)(()=>new Zi.Vector3,[]),l=(0,ot.useMemo)(()=>new Zi.Vector3,[]);return(0,ot.useEffect)(()=>{i.current=null},[e.anchorNodeName]),(0,za.useFrame)(({camera:c})=>{let p=n.current,u=p?.parent;if(!p||!u)return;let d=i.current;if(e.anchorNodeName&&(!d||!d.parent)&&(d=Xi(r,e.anchorNodeName),i.current=d),d?(d.updateWorldMatrix(!0,!1),a.copy(o).applyMatrix4(d.matrixWorld)):(a.copy(o),u.localToWorld(a)),t){let m=t.current.get(e.id);m||(m=new Zi.Vector3,t.current.set(e.id,m)),m.copy(a)}l.copy(c.position).sub(a),l.lengthSq()>0?(l.normalize(),s.copy(a).addScaledVector(l,TT)):s.copy(a),u.worldToLocal(s),p.position.copy(s)}),n}function PT({annotation:e,occluders:t,worldPositionsRef:n,onClick:r,onHover:i,showAnnotationOnHover:o}){let[a,s]=(0,ot.useState)(!1),l=a0(e,n),[c,p]=(0,ot.useState)(!1),[u,d]=(0,ot.useState)(1),m=(0,ot.useRef)(null),g=(0,ot.useRef)(null),v=(0,ot.useRef)(null);(0,ot.useEffect)(()=>()=>{m.current&&(clearTimeout(m.current),m.current=null),v.current&&(clearTimeout(v.current),v.current=null)},[]);let M=b=>{b.stopPropagation(),b.preventDefault(),m.current&&(clearTimeout(m.current),m.current=null),m.current=window.setTimeout(()=>{r?.(e),m.current=null},10)},w=b=>{b.stopPropagation(),p(!0),d(100),v.current&&(clearTimeout(v.current),v.current=null),i?.(e),o&&r?.(e)},x=b=>{b.stopPropagation(),p(!1),d(1),v.current&&clearTimeout(v.current),v.current=window.setTimeout(()=>{i?.(null),o&&i?.(null),v.current=null},50)},S=b=>{b.stopPropagation();let _=b.currentTarget;_.dataset.pointerX=String(b.clientX),_.dataset.pointerY=String(b.clientY)},k=b=>{b.stopPropagation();let _=b.currentTarget,y=parseFloat(_.dataset.pointerX||"0"),h=parseFloat(_.dataset.pointerY||"0"),P=b.clientX-y,A=b.clientY-h;Math.sqrt(P*P+A*A)<10&&M(b)};return(0,Qn.jsx)("group",{ref:l,children:(0,Qn.jsx)(km.Html,{center:!0,occlude:t,onOcclude:s,pointerEvents:a?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:a?"none":"auto",zIndex:u},className:"annotation-html-wrapper",transparent:!0,children:(0,Qn.jsx)("div",{ref:g,className:`ri-annotationMarker ${c?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:a?"none":"flex"},onPointerDown:S,onPointerUp:k,onPointerEnter:w,onPointerLeave:x,onDoubleClick:b=>{b.stopPropagation(),r?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:(0,Qn.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function AT({annotation:e,occluders:t,popupRef:n,onClose:r,hideCloseButton:i=!1}){let[o,a]=(0,ot.useState)(!1),s=a0(e),l=(0,Qn.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:o?"none":"block"},onPointerDown:c=>c.stopPropagation(),onClick:c=>c.stopPropagation(),children:[(0,Qn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,Qn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!i&&(0,Qn.jsx)("button",{onClick:c=>{c.stopPropagation(),r?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&(0,Qn.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return(0,Qn.jsx)("group",{ref:s,children:(0,Qn.jsx)(km.Html,{occlude:t,onOcclude:a,pointerEvents:o?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:o?"none":"auto",zIndex:1e3},transparent:!0,children:l})})}function Lm({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:r,canvasRootRef:i,worldPositionsRef:o,modelLoaded:a,onAnnotationClick:s,onAnnotationHover:l,onCloseAnnotation:c,hideCloseButton:p=!1,showAnnotationOnHover:u=!1}){let d=(0,za.useThree)(W=>W.invalidate),m=(0,za.useThree)(W=>W.scene),[g,v]=(0,ot.useState)(null),[M,w]=(0,ot.useState)(!1),x=(0,ot.useRef)(null),S=(0,ot.useRef)(null),k=(0,ot.useRef)(null),b=(0,ot.useMemo)(()=>{let W=[];return m.traverse(U=>{let te=U;te.isMesh&&!te.isSkinnedMesh&&W.push({current:U})}),W},[m,e,a]),_=(0,ot.useCallback)(()=>{d();let W=()=>{d(),S.current=window.requestAnimationFrame(()=>{d(),S.current=null})};S.current=window.requestAnimationFrame(W)},[d]);(0,ot.useEffect)(()=>{_()},[e,_]),(0,ot.useEffect)(()=>{_()},[n,_]),(0,ot.useEffect)(()=>()=>{S.current!==null&&window.cancelAnimationFrame(S.current),k.current&&clearTimeout(k.current)},[]);let y=M?g:n||g,h=(0,ot.useMemo)(()=>y?e.find(W=>W.id===y.id)??y:null,[y,e]),P=(0,ot.useCallback)(W=>{if(M&&g?.id===W.id){w(!1),v(null),c?.();return}w(!0),v(W),s?.(W)},[M,g,s,c]),A=(0,ot.useCallback)(W=>{l?.(W),u&&!M&&(k.current&&(clearTimeout(k.current),k.current=null),W?v(W):k.current=window.setTimeout(()=>{v(null),c?.(),k.current=null},100))},[M,l,u,c]),C=(0,ot.useCallback)(()=>{w(!1),v(null),c?.()},[c]),D=(0,ot.useCallback)(W=>{let U=W.target;if(U.closest?.(".ri-annotationMarker")||U.closest?.(".ri-viewAnnotationPopup")||U.closest?.(".annotation-html-wrapper"))return;let te=i.current;te&&te.contains(U)&&(w(!1),v(null),c?.())},[i,c]),B=(0,ot.useCallback)(W=>{W.key==="Escape"&&M&&(w(!1),v(null),c?.())},[M,c]);(0,ot.useEffect)(()=>{let W=i.current;return W&&(W.addEventListener("click",D),W.addEventListener("pointerdown",D)),document.addEventListener("keydown",B),()=>{W&&(W.removeEventListener("click",D),W.removeEventListener("pointerdown",D)),document.removeEventListener("keydown",B)}},[i,D,B]);let j=(0,ot.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(W=>W*Math.PI/180),[t?.model.rotation]);return(0,ot.useEffect)(()=>{d()},[d,j]),(0,za.useFrame)((W,U)=>{if(!x.current)return;x.current.rotation.x=Zi.MathUtils.lerp(x.current.rotation.x,j[0],1-Math.exp(-5*U)),x.current.rotation.y=Zi.MathUtils.lerp(x.current.rotation.y,j[1],1-Math.exp(-5*U)),x.current.rotation.z=Zi.MathUtils.lerp(x.current.rotation.z,j[2],1-Math.exp(-5*U));let{rotation:te}=x.current;Math.abs(te.x-j[0])+Math.abs(te.y-j[1])+Math.abs(te.z-j[2])>1e-4&&d()}),(0,Qn.jsxs)("group",{ref:x,children:[e.map(W=>{let U=`${W.worldPosition.join(",")}-${W.title}-${W.id}`;return(0,Qn.jsx)(PT,{annotation:W,occluders:b,worldPositionsRef:o,onClick:P,onHover:A,showAnnotationOnHover:u},U)}),h?(0,Qn.jsx)(AT,{annotation:h,occluders:b,popupRef:r,onClose:C,hideCloseButton:p},`popup-${h.id}`):null]})}var xo=require("react"),Li=require("@react-three/drei"),_n=require("three");var Ge=require("react/jsx-runtime"),Ua="#22d3ee",ET="#facc15";function $s(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function s0(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function $o({position:e,children:t}){return(0,Ge.jsx)(Li.Html,{center:!0,position:e,zIndexRange:[20,0],style:{pointerEvents:"none"},children:(0,Ge.jsx)("div",{className:"ri-measureLabel",children:t})})}function l0({positions:e,triangles:t}){let n=(0,xo.useMemo)(()=>{let r=new _n.Vector3(...e[0]),i=new _n.BufferGeometry;return i.setAttribute("position",new _n.Float32BufferAttribute(e.flatMap(o=>new _n.Vector3(...o).sub(r).toArray()),3)),i.setIndex(t.flat()),i},[e,t]);return(0,xo.useEffect)(()=>()=>n.dispose(),[n]),(0,Ge.jsx)("mesh",{position:e[0],geometry:n,raycast:()=>{},renderOrder:100,children:(0,Ge.jsx)("meshBasicMaterial",{color:Ua,side:_n.DoubleSide,transparent:!0,opacity:.18,depthWrite:!1})})}var RT=[[0,1,2]];function kT({positions:e}){let t=Vd(e);if(t===null)return null;let n=new _n.Vector3(...e[1]),r=new _n.Vector3(...e[0]).sub(n),i=new _n.Vector3(...e[2]).sub(n),o=Math.min(r.length(),i.length())*.22;r.normalize(),i.normalize();let a=r.clone().cross(i);a.lengthSq()<1e-12&&a.copy(r).cross(Math.abs(r.y)<.9?new _n.Vector3(0,1,0):new _n.Vector3(1,0,0)),a.normalize();let s=t*Math.PI/180,l=Array.from({length:33},(p,u)=>r.clone().applyAxisAngle(a,s*u/32).multiplyScalar(o).add(n).toArray()),c=r.clone().applyAxisAngle(a,s/2).multiplyScalar(o*1.4).add(n).toArray();return(0,Ge.jsxs)(Ge.Fragment,{children:[(0,Ge.jsx)(Li.Line,{points:l,color:Ua,lineWidth:2}),(0,Ge.jsxs)($o,{position:c,children:[t.toFixed(2),"\xB0"]})]})}function LT({box:e,unit:t}){let n=(0,xo.useMemo)(()=>[(e.min[0]+e.max[0])/2,(e.min[1]+e.max[1])/2,(e.min[2]+e.max[2])/2],[e.min,e.max]),r=(0,xo.useMemo)(()=>{let[s,l,c]=e.size,p=new _n.BoxGeometry(s||1e-4,l||1e-4,c||1e-4),u=new _n.EdgesGeometry(p);return p.dispose(),u},[e.size]);(0,xo.useEffect)(()=>()=>{r.dispose()},[r]);let[i,o,a]=e.size;return(0,Ge.jsxs)("group",{position:n,children:[(0,Ge.jsx)("lineSegments",{geometry:r,children:(0,Ge.jsx)("lineBasicMaterial",{color:ET})}),(0,Ge.jsxs)($o,{position:[0,-o/2,a/2],children:["W ",$s(i,t)]}),(0,Ge.jsxs)($o,{position:[-i/2,0,a/2],children:["H ",$s(o,t)]}),(0,Ge.jsxs)($o,{position:[i/2,-o/2,0],children:["D ",$s(a,t)]})]})}function Dm({points:e,unit:t,box:n,showDimensions:r,tool:i="distance",areaClosed:o=!1,snapPreview:a}){let s=(0,xo.useMemo)(()=>e.map(p=>p.position),[e]),l=(0,xo.useMemo)(()=>i==="area"&&o?jd(s):null,[i,o,s]),c=i==="pointToPlane"&&e.length===2?Ev(e[0],e[1].position):null;return(0,Ge.jsxs)("group",{children:[e.map(p=>(0,Ge.jsx)(Li.Html,{center:!0,position:p.position,zIndexRange:[15,0],style:{pointerEvents:"none"},children:(0,Ge.jsx)("div",{className:`ri-measureDot${p.snapped?" ri-measureDot--snapped":""}`})},p.id)),i==="distance"&&e.slice(1).map((p,u)=>{let d=e[u].position,m=p.position,g=new _n.Vector3(...d).distanceTo(new _n.Vector3(...m));return(0,Ge.jsxs)("group",{children:[(0,Ge.jsx)(Li.Line,{points:[d,m],color:Ua,lineWidth:2}),(0,Ge.jsx)($o,{position:s0(d,m),children:$s(g,t)})]},`${e[u].id}-${p.id}`)}),(i==="angle"||i==="area")&&s.length>=2&&(0,Ge.jsx)(Li.Line,{points:o?[...s,s[0]]:s,color:Ua,lineWidth:2}),i==="angle"&&(0,Ge.jsx)(kT,{positions:s}),l&&!("error"in l)&&(0,Ge.jsxs)(Ge.Fragment,{children:[(0,Ge.jsx)(l0,{positions:s,triangles:l.triangles}),(0,Ge.jsx)($o,{position:l.center,children:$s(l.area,t?`${t}\xB2`:"")})]}),i==="pointToPlane"&&e[0]?.faceVertices&&(0,Ge.jsxs)(Ge.Fragment,{children:[(0,Ge.jsx)(l0,{positions:e[0].faceVertices,triangles:RT}),(0,Ge.jsx)(Li.Line,{points:[...e[0].faceVertices,e[0].faceVertices[0]],color:Ua,lineWidth:1}),e.length===1&&(0,Ge.jsx)($o,{position:e[0].position,children:"Reference plane"})]}),c&&(0,Ge.jsxs)(Ge.Fragment,{children:[(0,Ge.jsx)(Li.Line,{points:[e[1].position,c.projection],color:Ua,lineWidth:2}),(0,Ge.jsx)(Li.Line,{points:[e[0].position,c.projection],color:Ua,lineWidth:1,dashed:!0}),(0,Ge.jsx)($o,{position:s0(e[1].position,c.projection),children:$s(c.distance,t)})]}),a&&(0,Ge.jsxs)(Li.Html,{center:!0,position:a.position,zIndexRange:[20,0],style:{pointerEvents:"none"},children:[(0,Ge.jsx)("div",{className:"ri-measureSnapTarget"}),(0,Ge.jsx)("div",{className:"ri-measureSnapLabel",children:a.snapped==="vertex"?"Vertex":"Edge"})]}),r&&n?(0,Ge.jsx)(LT,{box:n,unit:t}):null]})}var Yo=require("lucide-react"),Fu=require("react"),Ut=require("react/jsx-runtime");function Nm(e){let t=(0,Fu.useRef)(null);(0,Fu.useLayoutEffect)(()=>{if(!t.current)return;let a=()=>e.onHeight(t.current?.getBoundingClientRect().height??34),s=new ResizeObserver(a);return s.observe(t.current),a(),()=>s.disconnect()},[e.onHeight]);let{tool:n,pointCount:r,areaClosed:i}=e,o=n==="angle"?["Pick the first arm","Pick the angle's vertex","Pick the second arm","Pick a point to start a new angle"][r]:n==="area"?i?"Pick a point to start a new area":"Pick polygon corners in order, then Finish area":n==="pointToPlane"?["Pick the reference face","Pick a point to measure its perpendicular distance","Pick a face to start a new measurement"][r]:"Pick points on the model to measure distances";return(0,Ut.jsxs)("div",{ref:t,className:"ri-measureTools",style:{top:e.top},children:[(0,Ut.jsxs)("div",{className:"ri-measureToolbarRow",children:[(0,Ut.jsx)("button",{type:"button",className:`ri-measureButton ${e.active?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onToggle,title:e.active?"Stop measuring":"Start measuring","aria-pressed":e.active,children:(0,Ut.jsx)(Yo.PencilRuler,{size:16})}),(0,Ut.jsx)("button",{type:"button",className:`ri-measureButton ${e.showDimensions?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onDimensions,title:"Toggle bounding dimensions","aria-pressed":e.showDimensions,children:(0,Ut.jsx)(Yo.RulerDimensionLine,{size:16})}),e.active&&(0,Ut.jsxs)(Ut.Fragment,{children:[(0,Ut.jsxs)("select",{className:"ri-measureSelect","aria-label":"Measurement tool",value:n,disabled:e.disabled,onChange:a=>e.onTool(a.target.value),children:[(0,Ut.jsx)("option",{value:"distance",children:"Distance"}),(0,Ut.jsx)("option",{value:"angle",children:"Angle"}),(0,Ut.jsx)("option",{value:"area",children:"Area"}),(0,Ut.jsx)("option",{value:"pointToPlane",children:"Point to plane"})]}),(0,Ut.jsxs)("select",{className:"ri-measureSelect","aria-label":"Measurement snapping",value:e.snap,disabled:e.disabled,onChange:a=>e.onSnap(a.target.value),children:[(0,Ut.jsx)("option",{value:"none",children:"No snapping"}),(0,Ut.jsx)("option",{value:"auto",children:"Snap: auto"}),(0,Ut.jsx)("option",{value:"vertex",children:"Snap: vertex"}),(0,Ut.jsx)("option",{value:"edge",children:"Snap: edge"})]})]}),r>0&&(0,Ut.jsxs)(Ut.Fragment,{children:[(0,Ut.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onUndo,disabled:e.disabled,title:"Undo measurement point",children:(0,Ut.jsx)(Yo.Undo2,{size:16})}),(0,Ut.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onClear,disabled:e.disabled,title:"Clear measurements",children:(0,Ut.jsx)(Yo.Eraser,{size:16})})]}),e.active&&n==="area"&&!i&&(0,Ut.jsx)("button",{type:"button",className:"ri-measureFinish",onClick:e.onFinishArea,disabled:e.disabled||r<3,children:"Finish area"})]}),e.active&&(0,Ut.jsx)("div",{className:`ri-measureHint${e.error?" ri-measureHint--error":""}`,role:"status",children:e.error??o})]})}var Mt=require("react"),Fa=require("@react-three/xr"),p0=require("@react-three/fiber"),Sc=require("three"),Di=require("react/jsx-runtime"),DT=1,c0=1,NT=.1,BT=10;function OT(e,t){let[n,r,i]=e.size,o=(e.min[0]+e.max[0])/2,a=(e.min[2]+e.max[2])/2,s=Math.max(n,r,i)||1;return{scale:t==="real-world"?1:DT/s,offset:[-o,-e.min[1],-a]}}function d0(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function u0(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var IT=(0,Mt.forwardRef)(function({box:t,scaleMode:n,children:r,onARStateChange:i},o){let a=(0,Mt.useRef)(null),s=(0,Mt.useRef)(null),l=(0,Mt.useRef)(null),c=(0,Fa.useXR)(U=>U.session!=null),p=(0,Fa.useXR)(U=>U.mode==="immersive-ar"),u=(0,Mt.useMemo)(()=>t?OT(t,n):null,[t,n]),d=(0,Mt.useRef)(new Sc.Vector3(0,0,-c0)),m=(0,Mt.useRef)(1),g=(0,Mt.useRef)(0),v=(0,Mt.useRef)(!0),M=(0,Mt.useRef)(!1),w=(0,Mt.useMemo)(()=>new Sc.Matrix4,[]),x=(0,Mt.useRef)(new Sc.Vector3),S=(0,Mt.useRef)(!1),k=(0,Mt.useRef)(null),b=(0,Mt.useRef)(!1),_=(0,Mt.useRef)(0),y=(0,Mt.useRef)(0),h=(0,Mt.useRef)(1),P=(0,Mt.useRef)(0),A=(0,Mt.useCallback)(()=>{if(!i||!p)return;let U={canPlace:S.current,isPlacementMode:v.current,isModelPlaced:M.current},te=k.current;te&&te.canPlace===U.canPlace&&te.isPlacementMode===U.isPlacementMode&&te.isModelPlaced===U.isModelPlaced||(k.current=U,i(U))},[p,i]),C=(0,Mt.useCallback)(()=>!p||!S.current?!1:(d.current.copy(x.current),M.current=!0,v.current=!1,A(),!0),[A,p]),D=(0,Mt.useCallback)(()=>{p&&(v.current=!0,A())},[A,p]),B=(0,Mt.useCallback)(()=>{let U=C();return!U&&p&&(v.current=!1,A()),U},[A,p,C]),j=(0,Mt.useCallback)(()=>{p&&(v.current=!1,A())},[A,p]);(0,Mt.useImperativeHandle)(o,()=>({placeCurrent:C,startPlacementMode:D,finishPlacementMode:B,cancelPlacementMode:j}),[j,B,C,D]),(0,Mt.useEffect)(()=>{if(!c){d.current.set(0,0,-c0),m.current=1,g.current=0,S.current=!1,b.current=!1,v.current=!0,M.current=!1,k.current=null;return}p&&(S.current=!1,b.current=!1,v.current=!0,M.current=!1,k.current=null,A())},[A,c,p]),(0,Fa.useXRHitTest)((U,te)=>{if(!p||U.length===0){S.current&&(S.current=!1,A());return}te(w,U[0])&&(x.current.setFromMatrixPosition(w),S.current||(S.current=!0,A()))},"viewer"),(0,Fa.useXRInputSourceEvent)("all","select",()=>{!p||b.current||!v.current||C()},[p,C]),(0,Mt.useEffect)(()=>{if(!p)return;let U=$=>{$.touches.length===2&&(b.current=!0,_.current=d0($.touches),y.current=u0($.touches),h.current=m.current,P.current=g.current)},te=$=>{if(!b.current||$.touches.length!==2)return;$.preventDefault();let le=d0($.touches);if(_.current>0){let xe=le/_.current;m.current=Math.min(BT,Math.max(NT,h.current*xe))}let tt=u0($.touches);g.current=P.current-(tt-y.current)},O=$=>{$.touches.length===0&&requestAnimationFrame(()=>{b.current=!1})};return window.addEventListener("touchstart",U),window.addEventListener("touchmove",te,{passive:!1}),window.addEventListener("touchend",O),window.addEventListener("touchcancel",O),()=>{window.removeEventListener("touchstart",U),window.removeEventListener("touchmove",te),window.removeEventListener("touchend",O),window.removeEventListener("touchcancel",O)}},[p]),(0,p0.useFrame)(()=>{let U=a.current,te=s.current;if(!U||!te)return;!c||!u?(U.visible=!0,U.position.set(0,0,0),U.rotation.set(0,0,0),te.scale.setScalar(1)):(U.visible=!p||M.current,U.position.copy(d.current),U.rotation.set(0,g.current,0),te.scale.setScalar(u.scale*m.current));let O=l.current;if(O){let $=p&&v.current&&S.current;O.visible=$,$&&O.position.copy(x.current)}});let W=c&&u?u.offset:[0,0,0];return(0,Di.jsxs)(Di.Fragment,{children:[(0,Di.jsxs)("mesh",{ref:l,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,Di.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,Di.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,Di.jsx)("group",{ref:a,children:(0,Di.jsx)("group",{ref:s,children:(0,Di.jsx)("group",{position:W,children:r})})})]})}),h0=IT;var ju=require("react");var zT="ri:license-grant:v1",UT={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},m0=new Map;function g0(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function f0(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return g0(t.padEnd(Math.ceil(t.length/4)*4,"="))}function FT(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 Vu(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 Bm(e,t){return`${zT}:${t}:${e}`}function VT(e,t){let n=m0.get(e);if(n)return n;let r=crypto.subtle.importKey("spki",g0(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return m0.set(e,r),r}async function Om(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[r,i,o,a,...s]=e.split("."),l=UT[i];if(r!=="ri1"||!l||!o||!a||s.length>0)return null;let c=JSON.parse(new TextDecoder().decode(f0(o)));if(!FT(c)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await VT(i,l),f0(a),new TextEncoder().encode(`${r}.${i}.${o}`)))return null;let u=Math.floor(Date.now()/1e3),d=c.expiresAt-c.issuedAt;return c.licenseKeyHash!==t||c.domain!==n||c.expiresAt<=u||c.issuedAt>u+300||d<=0||d>43200?null:{environment:c.environment,tier:c.tier,expiresAt:c.expiresAt}}catch{return null}}async function b0(e,t,n){try{return await Om(e,await Vu(t),n)}catch{return null}}async function v0(e,t,n){try{let r=await Vu(t);return await Om(e,r,n)?(localStorage.setItem(Bm(r,n),e),!0):!1}catch{return!1}}async function x0(e,t){try{let n=await Vu(e),r=Bm(n,t),i=localStorage.getItem(r);if(!i)return null;let o=await Om(i,n,t);return o||localStorage.removeItem(r),o}catch{return null}}async function Im(e,t){try{let n=await Vu(e);localStorage.removeItem(Bm(n,t))}catch{}}var jT=["localhost","127.0.0.1","0.0.0.0"],HT=e=>jT.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),w0="https://react-immersive.liveroom.dev/api/validate-license",GT=()=>typeof window<"u",WT=300*1e3,XT=5e3,qT=400,Um=new Map,zm=new Map,Ko=class extends Error{},S0=async(e,t,n)=>{let r=await x0(e,t);return r?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:r.environment,tier:r.tier,isLocalDomain:n}):null},y0=async(e,t,n)=>{let r=await S0(e,t,n);return r||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:n})},$T=e=>e instanceof Ko||e instanceof TypeError,YT=()=>new Promise(e=>setTimeout(e,qT)),KT=e=>e==="development"||e==="production",ZT=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&&!KT(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},JT=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},QT=(e,t,n)=>`${n}::${e}::${t}`,e2=e=>{let t=Um.get(e);return t?Date.now()-t.timestamp>WT?(Um.delete(e),null):t.result:null},t2=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),n2=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function r2(e,t,n,r){let i=QT(e,t,r),o=e2(i);if(o)return o;let a=zm.get(i);if(a)return a;let s=(async()=>{for(let l=0;l<2;l+=1)try{return await i2(e,t,n,i,r)}catch(c){if(!$T(c))throw c;if(l===0){let p=await S0(e,t,n);if(p)return p;await YT();continue}return y0(e,t,n)}return y0(e,t,n)})().finally(()=>{zm.delete(i)});return zm.set(i,s),s}async function i2(e,t,n,r,i){let o=new AbortController,a=setTimeout(()=>o.abort(),XT),s;try{s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:o.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(p){throw o.signal.aborted?new Ko("License validation timed out"):p}finally{clearTimeout(a)}let l;try{l=await s.json()}catch{throw new Ko(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new Ko(`License server error (${s.status})`);let p=JT(l)??`License validation failed${s.status?` (${s.status})`:""}`;return await Im(e,t),n2(p,n)}if(!ZT(l))throw new Ko("License server returned an unexpected payload");let c=t2(l,n);if(c.status==="valid"&&i!==w0){let p=l.offlineGrant?await b0(l.offlineGrant,e,t):null;if(!p)throw new Ko("License validation endpoint did not return a verifiable signed grant");c={...c,environment:p.environment,tier:p.tier}}return c.status==="valid"?(Um.set(r,{result:c,timestamp:Date.now()}),l.offlineGrant&&(await v0(l.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await Im(e,t),c}var Hu=(e,t=w0)=>{let[n,r]=(0,ju.useState)({status:"checking",isLocalDomain:!1});return(0,ju.useEffect)(()=>{if(!GT())return;let i=!1,o=p=>{i||r(p)},a=e.trim(),s=window.location.hostname.toLowerCase(),l=HT(s);return o({status:"checking",isLocalDomain:l}),a?((async()=>{try{o(await r2(a,s,l,t))}catch(p){let u=p instanceof TypeError?"Could not reach license server":p instanceof Error?p.message:"License validation failed";o({status:"invalid",reason:u,isLocalDomain:l})}})(),()=>{i=!0}):(o({status:"invalid",reason:"No license key provided",isLocalDomain:l}),()=>{i=!0})},[e,t]),n};var dn=require("react");var jn=require("react/jsx-runtime"),o2={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},a2={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"},Gu=({direction:e})=>{let t=o2[e],n=a2[e];return(0,jn.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,jn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,jn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},yo=16,s2={"bottom-left":{bottom:yo,left:yo,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:yo,right:yo,top:"auto",left:"auto",transform:"none"},"top-left":{top:yo,left:yo,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:yo,right:yo,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:yo,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},l2=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:r=.001,rotateSensitivity:i=.01,position:o="center-bottom"})=>{let a=(0,dn.useRef)(null),[s,l]=(0,dn.useState)({x:0,y:0}),c=(0,dn.useRef)(!1),p=(0,dn.useRef)({x:0,y:0}),u=(0,dn.useRef)(void 0),d=(0,dn.useRef)(void 0),m=(0,dn.useRef)(null),g=(0,dn.useRef)(0),v=()=>e.current,M=(B,j,W)=>{let U=Math.hypot(B,j);if(U>W){let te=W/U;return{x:B*te,y:j*te}}return{x:B,y:j}},w=B=>{let W=Math.abs(B);return W<.12?0:Math.sign(B)*((W-.12)/(1-.12))},x=(0,dn.useCallback)(()=>{let B=()=>{let{x:j,y:W}=p.current,U=w(j),te=w(W);if(t&&(U!==0||te!==0)){let O=v();O&&O.rotate(-U*i,-te*i,!0)}u.current=requestAnimationFrame(B)};u.current=requestAnimationFrame(B)},[t,i]),S=(0,dn.useCallback)(()=>{u.current&&cancelAnimationFrame(u.current)},[]),k=(0,dn.useCallback)((B,j)=>{if(!a.current||!c.current)return;let W=a.current.getBoundingClientRect(),U=W.left+W.width/2,te=W.top+W.height/2,O=W.width/2-18,$=B-U,le=j-te,tt=M($,le,O);l(tt),p.current={x:tt.x/O,y:tt.y/O}},[]),b=(0,dn.useCallback)(B=>{if(!t)return;B.preventDefault(),B.stopPropagation(),c.current=!0,x();let j="touches"in B?B.touches[0]:B;k(j.clientX,j.clientY)},[t,x,k]),_=(0,dn.useCallback)(B=>{if(!c.current)return;B.preventDefault();let j="touches"in B?B.touches[0]:B;k(j.clientX,j.clientY)},[k]),y=(0,dn.useCallback)(()=>{c.current=!1,l({x:0,y:0}),p.current={x:0,y:0},S()},[S]),h=r*10,P=(0,dn.useCallback)(B=>{t&&v()?.forward(B*h,!0)},[t,h]),A=(0,dn.useCallback)(B=>{t&&v()?.truck(B*h,0,!0)},[t,h]),C=(0,dn.useCallback)((B,j,W)=>{if(!t)return;d.current&&cancelAnimationFrame(d.current),m.current={control:B,amount:j,action:W},g.current=0,W(j);let U=te=>{if(!m.current)return;if(g.current===0){g.current=te,d.current=requestAnimationFrame(U);return}if(te-g.current>200){let{amount:$,action:le}=m.current;le($),g.current=te}d.current=requestAnimationFrame(U)};d.current=requestAnimationFrame(U)},[t]),D=(0,dn.useCallback)(B=>{m.current?.control===B&&(d.current&&(cancelAnimationFrame(d.current),d.current=void 0),m.current=null,g.current=0)},[]);return(0,dn.useEffect)(()=>(window.addEventListener("mousemove",_),window.addEventListener("mouseup",y),window.addEventListener("touchmove",_,{passive:!1}),window.addEventListener("touchend",y),window.addEventListener("touchcancel",y),()=>{window.removeEventListener("mousemove",_),window.removeEventListener("mouseup",y),window.removeEventListener("touchmove",_),window.removeEventListener("touchend",y),window.removeEventListener("touchcancel",y),S(),d.current&&cancelAnimationFrame(d.current)}),[_,y,S]),t?(0,jn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...s2[o]},children:(0,jn.jsxs)("div",{className:"mc__dpad",children:[(0,jn.jsx)("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>C("up",1,P),onMouseUp:()=>D("up"),onMouseLeave:()=>D("up"),onTouchStart:B=>{B.preventDefault(),C("up",1,P)},onTouchEnd:()=>D("up"),onTouchCancel:()=>D("up"),children:(0,jn.jsx)(Gu,{direction:"up"})}),(0,jn.jsxs)("div",{className:"mc__middle-row",children:[(0,jn.jsx)("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>C("left",-1,A),onMouseUp:()=>D("left"),onMouseLeave:()=>D("left"),onTouchStart:B=>{B.preventDefault(),C("left",-1,A)},onTouchEnd:()=>D("left"),onTouchCancel:()=>D("left"),children:(0,jn.jsx)(Gu,{direction:"left"})}),(0,jn.jsx)("div",{ref:a,className:"mc__joystick",onMouseDown:b,onTouchStart:b,children:(0,jn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${s.x}px, ${s.y}px)`}})}),(0,jn.jsx)("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>C("right",1,A),onMouseUp:()=>D("right"),onMouseLeave:()=>D("right"),onTouchStart:B=>{B.preventDefault(),C("right",1,A)},onTouchEnd:()=>D("right"),onTouchCancel:()=>D("right"),children:(0,jn.jsx)(Gu,{direction:"right"})})]}),(0,jn.jsx)("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>C("down",-1,P),onMouseUp:()=>D("down"),onMouseLeave:()=>D("down"),onTouchStart:B=>{B.preventDefault(),C("down",-1,P)},onTouchEnd:()=>D("down"),onTouchCancel:()=>D("down"),children:(0,jn.jsx)(Gu,{direction:"down"})})]})}):null},_0=l2;var Qt=require("react"),Vm=require("three");var Fm=new WeakSet;function Ys(e){Fm.add(e)}function M0(e){let t=Fm.has(e);return t&&Fm.delete(e),t}function C0(e){return[e.x,e.y,e.z]}function wo(e,t){let n=new Vm.Vector3,r=new Vm.Vector3;return t.getPosition(n),t.getTarget(r),{position:C0(n),target:C0(r),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 c2(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 _c(e,t,n=.6){let r=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=r}}function T0(e={}){let t=(0,Qt.useRef)(e);t.current=e;let n=(0,Qt.useRef)(null),[r,i]=(0,Qt.useState)(null),[o,a]=(0,Qt.useState)(()=>({...e.presets})),s=(0,Qt.useRef)(o);s.current=o;let l=(0,Qt.useCallback)(P=>{i(A=>c2(A,P)?A:P)},[]),c=(0,Qt.useCallback)(P=>{l(P)},[l]),p=(0,Qt.useRef)(null),u=(0,Qt.useRef)(null),d=(0,Qt.useRef)(null),m=(0,Qt.useCallback)(P=>{n.current=P;let A=wo(P.raw.controls.camera,P.raw.controls);l(A),P.raw.scene!==u.current&&(u.current=P.raw.scene,p.current=null,d.current=null),P.homeCameraState&&!p.current&&(p.current=P.homeCameraState);let{initialPosition:C,initialTarget:D,initialTransition:B=!1}=t.current;if((C||D)&&P.raw.scene&&(C||P.homeCameraState)&&d.current!==P.raw.controls){d.current=P.raw.controls,P.homeCameraState||Ys(P.raw.controls);let j=C??A.position,W=D??A.target;P.raw.controls.setLookAt(j[0],j[1],j[2],W[0],W[1],W[2],B).then(()=>{if(n.current?.raw.controls!==P.raw.controls)return;let U=wo(P.raw.controls.camera,P.raw.controls);p.current={position:U.position,target:U.target},l(U)}).catch(()=>{})}},[l]),g=(0,Qt.useCallback)(async()=>{let P=n.current,A=P?.raw.controls;if(!A)return!1;try{let C=p.current;return C?await _c(A,()=>A.setLookAt(C.position[0],C.position[1],C.position[2],C.target[0],C.target[1],C.target[2],!0)):P?.raw.scene?await _c(A,()=>A.fitToBox(P.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await _c(A,()=>A.reset(!0)),!0}catch{return!1}},[]),v=(0,Qt.useCallback)(async()=>{let P=n.current;if(!P?.raw.controls||!P.raw.scene)return!1;try{return await _c(P.raw.controls,()=>P.raw.controls.fitToBox(P.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),M=(0,Qt.useCallback)(async P=>{let A=n.current;if(!A?.raw.controls)return!1;let C=Oo(A.objectBindings,P);if(!C)return!1;let D=A.raw.nodes[C];if(!D)return!1;try{return await _c(A.raw.controls,()=>A.raw.controls.fitToBox(D,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),w=(0,Qt.useCallback)(async(P,A=!0)=>{let C=n.current?.raw.controls;if(!C)return!1;try{return n.current?.homeCameraState||Ys(C),await C.setTarget(P[0],P[1],P[2],A),l(wo(C.camera,C)),!0}catch{return!1}},[l]),x=(0,Qt.useCallback)(async(P,A=!0)=>{let C=n.current?.raw.controls;if(!C)return!1;try{n.current?.homeCameraState||Ys(C);let D=[C.setLookAt(P.position[0],P.position[1],P.position[2],P.target[0],P.target[1],P.target[2],A)];P.azimuthAngle!=null&&P.polarAngle!=null&&D.push(C.rotateTo(P.azimuthAngle,P.polarAngle,A)),await Promise.all(D);let B=C.camera,j=!1;return P.fov!=null&&"fov"in B&&typeof B.fov=="number"&&(B.fov=P.fov,j=!0),P.zoom!=null&&"zoom"in B&&typeof B.zoom=="number"&&(B.zoom=P.zoom,j=!0),j&&"updateProjectionMatrix"in B&&B.updateProjectionMatrix(),l(wo(B,C)),!0}catch{return!1}},[l]),S=(0,Qt.useCallback)((P,A=!0)=>x(P,A),[x]),k=(0,Qt.useCallback)((P,A,C=!0)=>x({position:P,target:A},C),[x]),b=(0,Qt.useCallback)(async(P,A,C=!0)=>{let D=n.current?.raw.controls;if(!D)return!1;try{return n.current?.homeCameraState||Ys(D),await D.rotateTo(P*Math.PI/180,A*Math.PI/180,C),l(wo(D.camera,D)),!0}catch{return!1}},[l]),_=(0,Qt.useCallback)(async(P,A=!0)=>{let C=n.current?.raw.controls;if(!C)return!1;try{return n.current?.homeCameraState||Ys(C),await C.dollyTo(P,A),l(wo(C.camera,C)),!0}catch{return!1}},[l]),y=(0,Qt.useCallback)(P=>{let A=n.current?.raw.controls,C=P.trim();if(!A||!C)return null;let D=wo(A.camera,A);return s.current={...s.current,[C]:D},a(B=>({...B,[C]:D})),l(D),D},[l]),h=(0,Qt.useCallback)((P,A=!0)=>{let C=s.current[P];return C?x(C,A):Promise.resolve(!1)},[x]);return{cameraState:r,cameraPresets:o,resetView:g,focusObject:M,fitScene:v,setCameraTarget:w,setCameraState:S,lookAt:k,orbitTo:b,dollyTo:_,savePreset:y,goToPreset:h,handleCameraChange:c,handleViewerReady:m}}var Mc=require("three");function Wu(e){return[e.x,e.y,e.z]}function P0(e){let t=new Mc.Box3().setFromObject(e),n=0;return e.traverse(r=>{r.isMesh&&(n+=1)}),{bounds:{min:Wu(t.min),max:Wu(t.max),center:Wu(t.getCenter(new Mc.Vector3)),size:Wu(t.getSize(new Mc.Vector3))},objectCount:n,materialVariants:zs(e)}}function d2(e){return typeof e=="object"&&!Array.isArray(e)}function u2(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:(e.type??"other")===t.type}function Va(e,t){if(d2(t))return Object.entries(e).filter(([,i])=>u2(i,t)).map(([i])=>i);let r=(typeof t=="string"?[t]:t).map(i=>Oo(e,i)).filter(i=>i!==null);return[...new Set(r)]}var p2="#ff3b30",h2=Object.freeze({}),A0=e=>e;function m2(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function f2(e,t){let n=e.metadata;for(let r of t.split(".")){if(!m2(n))return;n=n[r]}return n}function Hm(e,t){if("metric"in t){let n=e.metrics?.[t.metric];return!(typeof n!="number"||!Number.isFinite(n)||t.above!==void 0&&!(n>t.above)||t.below!==void 0&&!(n<t.below))}if("status"in t){let n=e.status??"normal";return Array.isArray(t.status)?t.status.includes(n):t.status===n}return f2(e,t.metadata)===t.equals}function g2(e){let t=e.trim().replace(/^#/,""),n=t.length===3?t.split("").map(r=>r+r).join(""):t;return/^[0-9a-f]{6}$/i.test(n)?[0,2,4].map(r=>parseInt(n.slice(r,r+2),16)):null}var jm=e=>`#${e.map(t=>Math.round(t).toString(16).padStart(2,"0")).join("")}`;function b2(e,t){let n=e.map(([l,c])=>({at:l,rgb:g2(c)})).filter(l=>Number.isFinite(l.at)&&l.rgb!==null).sort((l,c)=>l.at-c.at);if(n.length===0||!Number.isFinite(t))return null;if(t<=n[0].at)return jm(n[0].rgb);let r=n[n.length-1];if(t>=r.at)return jm(r.rgb);let i=n.findIndex(l=>l.at>=t),o=n[i-1],a=n[i],s=a.at===o.at?1:(t-o.at)/(a.at-o.at);return jm(o.rgb.map((l,c)=>l+(a.rgb[c]-l)*s))}function E0(e,t){if(!t?.length)return{bindings:e,pulses:h2,sourceOf:A0};let n=new Map,r={};for(let a of t){let s=a.target?Va(e,a.target):Object.keys(e),l=a.when?Array.isArray(a.when)?a.when:[a.when]:[];for(let c of s){let p=e[c];if(!l.every(d=>Hm(p,d)))continue;let u={...a.material};if(a.colorScale){let d=p.metrics?.[a.colorScale.metric],m=typeof d=="number"?b2(a.colorScale.stops,d):null;m&&(u={...u,[a.colorScale.channel??"baseColor"]:m})}if(a.pulse){let d=a.pulse===!0?{}:a.pulse;r[c]={color:d.color??p2,speed:d.speed!==void 0&&d.speed>0?d.speed:1};let m=u.emissiveIntensity??n.get(c)?.emissiveIntensity??p.style?.material?.emissiveIntensity;m!==void 0&&m>0||(u.emissiveIntensity=1)}Object.keys(u).length>0&&n.set(c,{...n.get(c),...u})}}if(n.size===0)return{bindings:e,pulses:r,sourceOf:A0};let i={...e},o=new WeakMap;for(let[a,s]of n){let l=e[a],c={...l,style:{...l.style,material:{...l.style?.material,...s}}};i[a]=c,o.set(c,l)}return{bindings:i,pulses:r,sourceOf:a=>o.get(a)??a}}var v2=.12,R0=new Set;function Gm(e,t){return t?new Set(Va(e,t.target)):R0}function k0(e,t){let n=Gm(e.bindings,t);if(!t||n.size===0)return{...e,setAside:R0};let r=Math.min(Math.max(t.ghostOpacity??v2,0),1),i={...e.bindings},o=new WeakMap,a=new Set;for(let[s,l]of Object.entries(e.bindings)){if(n.has(s))continue;a.add(s);let c=t.mode==="hide"?{...l,visible:!1}:{...l,style:{...l.style,material:{...l.style?.material,opacity:Math.min(l.style?.material?.opacity??1,r)}}};i[s]=c,o.set(c,e.sourceOf(l))}return{bindings:i,pulses:e.pulses,sourceOf:s=>o.get(s)??e.sourceOf(s),setAside:a}}var N0=require("react");var D0=require("react"),Wm=require("@react-three/fiber"),L0=new WeakMap;function Xu(e){let t=(0,Wm.useThree)(r=>r.get),n=(0,Wm.useThree)(r=>r.setEvents);(0,D0.useEffect)(()=>{if(!e)return;let r=L0.get(t);if(!r){let o=new Set;r=o,L0.set(t,o);let a=t().events.filter;n({filter:(s,l)=>{let c=a?a(s,l):s;return o.size===0?c:c.filter(p=>{for(let u of o)if(!u(p))return!1;return!0})}})}r.add(e);let i=r;return()=>{i.delete(e)}},[e,t,n])}function Xm({setAside:e,nodeRefs:t}){let n=(0,N0.useMemo)(()=>{if(e.size===0)return null;let r={refs:null,bound:new Map};return i=>{let o=t.current??{};if(r.refs!==o){let s=new Map;for(let[l,c]of Object.entries(o))s.set(c,e.has(l));r={refs:o,bound:s}}let{bound:a}=r;for(let s=i.object;s;s=s.parent){let l=a.get(s);if(l!==void 0)return!l}return!0}},[e,t]);return Xu(n),null}var wr=require("react"),F0=require("@react-three/drei"),Ks=require("@react-three/fiber"),ja=require("three");var qm=require("three"),qu={x:0,y:1,z:2},B0=e=>Math.min(Math.max(e,0),1);function $m(e,t){let n=qu[t.axis],r=e.min[n],i=e.max[n];if(!Number.isFinite(r)||!Number.isFinite(i)||i<r)return null;let o=Number.isFinite(t.position)?t.position:.5;return r+(i-r)*B0(o)}function O0(e,t,n){let r=$m(t,n);if(r===null)return!1;let i=new qm.Vector3;return i.setComponent(qu[n.axis],n.flip?1:-1),e.normal.copy(i),e.constant=n.flip?-r:r,!0}function I0(e,t,n,r){let i=qu[r],o=new qm.Vector3().setComponent(i,1),a=n.clone().addScaledVector(o,-n.dot(o));if(a.lengthSq()<1e-8)return null;a.normalize();let s=e.direction.dot(a);if(Math.abs(s)<1e-8)return null;let l=t.clone().sub(e.origin).dot(a)/s;return Number.isFinite(l)?e.origin.getComponent(i)+e.direction.getComponent(i)*l:null}function z0(e,t,n){let r=qu[t],i=e.max[r]-e.min[r];return i>0?B0((n-e.min[r])/i):null}var Ha=require("react/jsx-runtime"),x2={x:0,y:1,z:2},U0="#22d3ee";function Ym({section:e,box:t,modelRef:n,showHandle:r,onPositionChange:i,onDraggingChange:o}){let a=(0,Ks.useThree)(v=>v.gl),s=(0,Ks.useThree)(v=>v.raycaster),l=(0,Ks.useThree)(v=>v.invalidate),c=(0,wr.useMemo)(()=>new ja.Plane,[]),p=(0,wr.useMemo)(()=>[c],[c]),u=e.enabled&&t!==null&&O0(c,t,e),d=(0,wr.useRef)(new Map),m=()=>{for(let[v,M]of d.current)v.clippingPlanes=M.clippingPlanes,v.side=M.side,v.needsUpdate=!0;d.current.clear()};(0,wr.useEffect)(()=>{if(u)return a.localClippingEnabled=!0,l(),()=>{m(),l()}},[u,a,l]),(0,wr.useEffect)(()=>{u&&l()},[u,e.axis,e.position,e.flip,t,l]),(0,Ks.useFrame)(()=>{let v=n.current;if(!u||!v)return;let M=d.current;v.traverse(w=>{let x=w.material;if(x)for(let S of Array.isArray(x)?x:[x]){let k=M.get(S);if(S.clippingPlanes===p&&S.side===ja.DoubleSide)continue;let b=S.side===ja.DoubleSide&&k?k.side:S.side;M.set(S,{clippingPlanes:k?k.clippingPlanes:S.clippingPlanes,side:b}),S.clippingPlanes=p,S.clipShadows=!0,S.side=ja.DoubleSide,S.needsUpdate=!0}})});let g=(0,wr.useMemo)(()=>u?v=>!!v.object.userData.riSectionHandle||c.distanceToPoint(v.point)>=-1e-4:null,[u,c]);return Xu(g),(0,wr.useEffect)(()=>{if(!u)return;let v=s,M=v.firstHitOnly;return v.firstHitOnly=!1,()=>{v.firstHitOnly=M}},[u,s]),!u||!r||!t?null:(0,Ha.jsx)(y2,{section:e,box:t,onPositionChange:i,onDraggingChange:o})}function y2({section:e,box:t,onPositionChange:n,onDraggingChange:r}){let[i,o]=(0,wr.useState)(!1),[a,s]=(0,wr.useState)(!1),l=(0,wr.useRef)(null),c=x2[e.axis],p=$m(t,e)??0,u=[0,1,2].map(w=>(t.max[w]-t.min[w])*1.08||.01),d=[0,1,2].map(w=>(t.min[w]+t.max[w])/2);d[c]=p;let[m,g]=e.axis==="x"?[u[2],u[1]]:e.axis==="y"?[u[0],u[2]]:[u[0],u[1]],v=e.axis==="x"?[0,Math.PI/2,0]:e.axis==="y"?[-Math.PI/2,0,0]:[0,0,0],M=w=>{a&&(w.target?.releasePointerCapture?.(w.pointerId),l.current=null,s(!1),r(!1))};return(0,Ha.jsxs)("mesh",{ref:w=>{w&&(vd(w),w.userData.riSectionHandle=!0)},position:d,rotation:v,renderOrder:2,onPointerOver:w=>{w.stopPropagation(),o(!0)},onPointerOut:()=>o(!1),onPointerDown:w=>{w.stopPropagation(),w.target?.setPointerCapture?.(w.pointerId),l.current={point:w.point.clone(),direction:w.ray.direction.clone(),coordinate:w.point.getComponent(c),cut:p},s(!0),r(!0)},onPointerMove:w=>{let x=l.current;if(!a||!x)return;w.stopPropagation();let S=I0(w.ray,x.point,x.direction,e.axis);if(S===null)return;let k=z0(t,e.axis,x.cut+(S-x.coordinate));k!==null&&n(k)},onPointerUp:M,onPointerCancel:M,onClick:w=>w.stopPropagation(),children:[(0,Ha.jsx)("planeGeometry",{args:[m,g]}),(0,Ha.jsx)("meshBasicMaterial",{color:U0,transparent:!0,opacity:a?.22:i?.16:.08,side:ja.DoubleSide,depthWrite:!1,toneMapped:!1}),(0,Ha.jsx)(F0.Edges,{color:U0,renderOrder:3})]})}var V0=require("react-colorful"),Zo=require("react/jsx-runtime"),Km=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:r,inline:i=!1})=>(0,Zo.jsxs)("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:o=>o.stopPropagation(),children:[(0,Zo.jsx)("p",{className:"ri-popoverLabel",children:"Color"}),(0,Zo.jsx)(V0.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:o=>r(a=>({...a,[e.objectId]:{...a[e.objectId],hex:o}}))}),(0,Zo.jsxs)("div",{className:"ri-inlineRow",children:[(0,Zo.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,Zo.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});var kt=require("react/jsx-runtime"),Zm=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:r,inline:i=!1,offset:o,rotationDegrees:a,onOffsetChange:s,onRotationChange:l,isPositioning:c=!1,onEndPositioning:p})=>(0,kt.jsxs)("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:u=>u.stopPropagation(),children:[(0,kt.jsx)("div",{className:"ri-popoverHeader",children:(0,kt.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),(0,kt.jsxs)("div",{className:"ri-materialBody",children:[t?(0,kt.jsx)("div",{className:"ri-previewFrame",children:(0,kt.jsx)("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):(0,kt.jsxs)("div",{className:"ri-emptyState",children:[(0,kt.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,kt.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,kt.jsx)("span",{style:{fontSize:12},children:"No texture applied"})]}),(0,kt.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&(0,kt.jsx)("button",{onClick:()=>r(e.objectId),className:"ri-removeButton",children:"Remove texture"}),(0,kt.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}),t&&(s||l)&&(0,kt.jsxs)("div",{className:"ri-texturePosition",children:[(0,kt.jsx)("p",{className:"ri-texturePositionLabel",children:"Texture position"}),(0,kt.jsxs)("div",{className:"ri-texturePositionGrid",children:[(0,kt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,kt.jsx)("span",{children:"Offset X"}),(0,kt.jsx)("input",{type:"number",step:.01,value:o?.[0]??0,onChange:u=>s?.(e.objectId,0,Number(u.target.value))})]}),(0,kt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,kt.jsx)("span",{children:"Offset Y"}),(0,kt.jsx)("input",{type:"number",step:.01,value:o?.[1]??0,onChange:u=>s?.(e.objectId,1,Number(u.target.value))})]})]}),(0,kt.jsxs)("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[(0,kt.jsx)("span",{children:"Rotation"}),(0,kt.jsxs)("div",{className:"ri-texturePositionSliderRow",children:[(0,kt.jsx)("input",{type:"range",min:0,max:360,step:1,value:a??0,onChange:u=>l?.(e.objectId,Number(u.target.value))}),(0,kt.jsx)("input",{type:"number",min:0,max:360,step:1,value:Math.round(a??0),onChange:u=>l?.(e.objectId,Number(u.target.value))})]})]}),c?(0,kt.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:p,title:"Confirm this texture position and exit positioning mode",children:"Done positioning"}):(0,kt.jsx)("p",{className:"ri-texturePositionHint",children:"Double-click the object in the preview to drag its texture directly (scroll to zoom), or edit its offset numerically."})]})]})]});var ci=require("react");var Nt=require("react/jsx-runtime");function j0({entries:e}){return(0,Nt.jsx)(Nt.Fragment,{children:e.map(([t,n])=>{let r=n!==null&&typeof n=="object",i=r?Object.entries(n):[];return r&&i.length>0?(0,Nt.jsxs)("div",{className:"left-panel__data-group",children:[(0,Nt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,Nt.jsx)("div",{className:"left-panel__data-children",children:(0,Nt.jsx)(j0,{entries:i})})]},t):(0,Nt.jsxs)("div",{className:"left-panel__data-row",children:[(0,Nt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,Nt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:r?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function w2({content:e}){let t=e!=null,[n,r]=(0,ci.useState)(t),[i,o]=(0,ci.useState)(t),a=(0,ci.useRef)(e);return t&&(a.current=e),(0,ci.useEffect)(()=>{if(t){r(!0);return}if(n){o(!1);let s=setTimeout(()=>r(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,ci.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>o(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,Nt.jsx)("div",{className:`left-panel__action-extra${i?" left-panel__action-extra--open":""}`,children:(0,Nt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??a.current})}):null}function Jm({isOpen:e,selectedObject:t,currentAction:n,onClose:r,onAction:i,renderActionExtra:o}){let[a,s]=(0,ci.useState)(t);(0,ci.useEffect)(()=>{t&&s(t)},[t]);let l=t??a,c=l?Object.entries(l).filter(([p])=>p!=="actions"&&p!=="decals"):[];return(0,Nt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:l&&(0,Nt.jsxs)(Nt.Fragment,{children:[(0,Nt.jsxs)("div",{className:"left-panel__header",children:[(0,Nt.jsx)("p",{className:"left-panel__title",children:l.label}),(0,Nt.jsx)("button",{onClick:r,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),c.length>0&&(0,Nt.jsx)("div",{className:"left-panel__data",children:(0,Nt.jsx)(j0,{entries:c})}),(0,Nt.jsx)("hr",{className:"left-panel__divider"}),l.actions&&l.actions.length>0&&(0,Nt.jsxs)(Nt.Fragment,{children:[(0,Nt.jsx)("div",{className:"left-panel__actions-label",children:"Actions"}),(0,Nt.jsx)("div",{className:"left-panel__actions-list",children:l.actions.map((p,u)=>{let d=n?.action.id===p.id&&(n.binding===l||n.binding?.id===l.id||n.binding?.modelObjectId===l.modelObjectId||n.objectId===l.id||n.objectId===l.modelObjectId),m=o?.(p.id);return(0,Nt.jsxs)(ci.Fragment,{children:[(0,Nt.jsx)("button",{onClick:g=>i({objectId:l.modelObjectId||l.id||"",action:p,binding:l,screenX:g.clientX,screenY:g.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${p.id}`,d?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":p.id,"data-label":p.label,children:p.label}),(0,Nt.jsx)(w2,{content:m})]},u)})})]})]})})}var Cc=require("react"),$u=require("lucide-react");var H0=require("react");var er=require("react/jsx-runtime");function G0({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:r,searchValue:i,onSearchChange:o,searchPlaceholder:a,children:s,isOpen:l,onToggle:c,openButtonIcon:p,closeButtonIcon:u,closeButtonAriaLabel:d}){let[m,g]=(0,H0.useState)(!1),v=l!==void 0?l:m,M=w=>{l===void 0&&g(w),c?.(w)};return(0,er.jsxs)("div",{className:`ri-sidepanel-wrap ${v?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!v&&(0,er.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>M(!0),"aria-label":t,title:"Open panel",children:[p,e?(0,er.jsx)("span",{children:e}):null]}),(0,er.jsxs)("div",{className:`ri-sidepanel ${v?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!v,children:[(0,er.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,er.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,er.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,er.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>M(!1),"aria-label":d,title:"Close",children:u??(0,er.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,er.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,er.jsx)("p",{className:"ri-sidepanel__title",children:r})]}),(0,er.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,er.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:a,value:i,onChange:w=>o(w.target.value)})}),(0,er.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var di=require("react/jsx-runtime");function Qm({objectBindings:e,onAction:t,onFocus:n,onHover:r,isOpen:i,onToggle:o,isolatedKeys:a=null,onIsolate:s}){let[l,c]=(0,Cc.useState)(null),[p,u]=(0,Cc.useState)(""),d=(0,Cc.useMemo)(()=>Object.entries(e).filter(([m,g])=>{let v=p.toLowerCase();return m.toLowerCase().includes(v)||(g.label??"").toLowerCase().includes(v)}),[e,p]);return(0,di.jsx)(G0,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:(0,di.jsx)($u.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${d.length} visible entries`,searchValue:p,onSearchChange:u,searchPlaceholder:"Search nodes, labels",isOpen:i,onToggle:o,closeButtonAriaLabel:"Close scene objects panel",children:d.map(([m,g])=>{let v=g.visible!==!1,M=l===m,w=a?.has(m)??!1;return(0,di.jsxs)("div",{onClick:()=>n(g),onMouseEnter:()=>{c(m),r?.(g)},onMouseLeave:()=>{c(null),r?.(null)},className:`ri-sidepanel__row${M?" ri-sidepanel__row--hovered":""}${a!==null&&!w?" ri-sidepanel__row--setAside":""}`,children:[(0,di.jsx)("span",{className:`ri-sidepanel__label${M?" ri-sidepanel__label--hovered":""}`,children:g.label??m}),s?(0,di.jsx)("button",{type:"button",onClick:S=>{S.stopPropagation(),s(g)},className:`ri-sidepanel__isolate-btn${w?" ri-sidepanel__isolate-btn--active":""}`,title:w?"Show all":"Isolate","aria-label":`${w?"Show all":"Isolate"} ${g.label??m}`,"aria-pressed":w,children:(0,di.jsx)($u.Focus,{width:14,height:14,"aria-hidden":"true"})}):null,(0,di.jsx)("button",{type:"button",onClick:S=>{S.stopPropagation(),t?.({objectId:m,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:g})},className:"ri-sidepanel__vis-btn",title:v?"Hide":"Show",children:(0,di.jsx)("span",{className:`ri-sidepanel__checkbox${v?" ri-sidepanel__checkbox--checked":""}`,children:v&&(0,di.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,di.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},m)})})}var Se=require("lucide-react");var Yu=require("react"),ef=(0,Yu.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Sr=()=>(0,Yu.useContext)(ef);var Jo=require("react/jsx-runtime");function Ku({visible:e,message:t,tone:n="default",progress:r}){if(!e)return null;let i=typeof r=="number"&&Number.isFinite(r),o=i?Math.min(Math.max(r,0),100):0,a=Math.round(o);return(0,Jo.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[i&&(0,Jo.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,Jo.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a,children:(0,Jo.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${a}%`}})}),(0,Jo.jsxs)("span",{className:"bb-loadingProgress__label",children:[a,"%"]})]}),(0,Jo.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}function S2(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 tf(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 _2(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 W0(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 X0(e){let t=_2(e);return{id:S2(e),modelObjectId:e,type:t,label:tf(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:W0(t),metrics:{},metadata:{}}}function Zu(e){return Object.fromEntries(e.map(t=>[t,X0(t)]))}function q0(e){let t=new Set,n={};for(let r of e){let i=X0(r),o=i.id||"object",a=o;for(let l=2;t.has(a);l++)a=`${o}-${l}`;t.add(a),i.id=a;let s=(i.actions??[]).filter(l=>Ul.includes(l.id));i.actions=s.length>0?s:W0("other"),n[r]=i}return n}function Tc(e){let{nodesById:t}=Fo(e),n=[];for(let[r,i]of Object.entries(t)){let o=i;o.isMesh&&o.geometry&&i.name&&n.push(r)}return n.sort((r,i)=>r.localeCompare(i))}var Be=require("react"),tp=require("@react-three/fiber"),np=require("@react-three/drei"),yt=require("three");var $0="data:image/png;base64,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";var Y0="data:image/png;base64,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";var K0="data:image/png;base64,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";var Ye=require("react/jsx-runtime"),nf=-100,rf=100,i1=.03,P2=.03,A2=.03,Z0=.5,E2=$0,R2=Y0,k2=K0,L2=Math.PI/4,J0=.4,Zs=64,Q0=i1*3,of="#4d7dff",e1="#ffcc00",t1=.02,D2=new yt.Vector3(0,1,0),Ju=32,n1="#ff9d3d",Qu=4;function af(e){let t=new Float32Array((Zs+1)*3);for(let n=0;n<=Zs;n++){let r=n/Zs*Math.PI*2,i=Math.cos(r)*J0,o=Math.sin(r)*J0,a=0,s=0,l=0;e==="x"?(s=i,l=o):e==="y"?(a=i,l=o):(a=i,s=o),t[n*3]=a,t[n*3+1]=s,t[n*3+2]=l}return t}function N2(e){let t=Math.abs(e.y)<.99?new yt.Vector3(0,1,0):new yt.Vector3(1,0,0),n=new yt.Vector3().crossVectors(e,t).normalize(),r=new yt.Vector3().crossVectors(e,n).normalize();return[n,r]}function r1(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 Js=null,sf=new Set;function Pc(e){Js!==e&&(Js=e,sf.forEach(t=>t()))}function lf(e){return sf.add(e),()=>sf.delete(e)}function ep(){return Js}function o1({light:e,position:t,rotation:n=[0,0,0],color:r,intensity:i,visible:o,onPositionChange:a,onRotationChange:s,onDraggingChange:l}){let{activeTab:c,activeSubTab:p,setActiveTab:u,setActiveSubTab:d}=Sr(),{camera:m,gl:g,raycaster:v,invalidate:M}=(0,tp.useThree)(),w=(0,Be.useRef)(null),x=(0,Be.useRef)(null),S=(0,Be.useRef)(null),k=(0,Be.useRef)(null),b=(0,Be.useRef)(null),_=(0,Be.useRef)(null),y=(0,Be.useRef)(null),h=(0,Be.useRef)(null),P=(0,Be.useRef)(null),A=(0,Be.useRef)(null),C=(0,Be.useRef)(null),D=(0,Be.useMemo)(()=>new yt.Matrix4,[]),B=(0,Be.useMemo)(()=>new yt.Quaternion,[]),j=(0,Be.useMemo)(()=>new yt.Vector3(1,1,1),[]),W=(0,Be.useRef)([0,0,0]),U=(0,Be.useRef)([0,0,0]),te=(0,Be.useRef)(!1),O=(0,Be.useRef)(null),$=(0,Be.useRef)(null),le=(0,Be.useRef)(null),tt=(0,Be.useRef)(l);(0,Be.useEffect)(()=>{tt.current=l},[l]);let xe=(0,Be.useMemo)(()=>new yt.Vector3(t[0],t[1],t[2]),[t]),nt=(0,Be.useMemo)(()=>new yt.Euler(n[0],n[1],n[2]),[n]),ce=(0,Be.useMemo)(()=>new Float32Array(6),[]),Le=(0,Be.useMemo)(()=>af("x"),[]),he=(0,Be.useMemo)(()=>af("y"),[]),pt=(0,Be.useMemo)(()=>af("z"),[]),Bt=(0,Be.useMemo)(()=>new Float32Array((Ju+1)*3),[]),un=(0,Be.useMemo)(()=>new Float32Array(Qu*2*3),[]),Ie=e?.type==="point",bt=e?.type==="spot",Ot=Ie?R2:bt?k2:E2,dr=Ie?P2:bt?A2:i1,de=(0,Be.useMemo)(()=>new yt.TextureLoader().load(Ot),[Ot]),Cr=(0,Be.useSyncExternalStore)(lf,ep,ep),Xt=!!e&&Cr===e.id,Et=(0,Be.useRef)(new yt.Vector3),rt=(0,Be.useRef)(new yt.Euler);(0,Be.useEffect)(()=>{te.current||(Et.current.copy(xe),rt.current.copy(nt),M())},[xe,nt,M]),(0,Be.useEffect)(()=>{e&&Js===e.id&&!o&&Pc(null)},[e?.id,o]),(0,Be.useEffect)(()=>()=>{e&&Js===e.id&&Pc(null),le.current!==null&&(cancelAnimationFrame(le.current),le.current=null)},[e?.id]);let bn=(0,Be.useCallback)(()=>{if(te.current||!Xt)return;let fe=Et.current,We=new yt.Quaternion().setFromEuler(rt.current);D.compose(fe,We,j)},[D,j,Xt]);(0,tp.useFrame)(()=>{if(w.current&&w.current.position.copy(Et.current),bn(),S.current){S.current.lookAt(m.position);let fe=m,We;fe.isOrthographicCamera?We=dr/fe.zoom:We=m.position.distanceTo(Et.current)*dr,S.current.scale.setScalar(We)}if(y.current){let fe=m,We;fe.isOrthographicCamera?We=Q0/fe.zoom:We=m.position.distanceTo(Et.current)*Q0,y.current.scale.setScalar(We)}if(b.current){let fe=b.current.getAttribute("position"),We=fe.array;We[0]=0,We[1]=0,We[2]=0,We[3]=Et.current.x,We[4]=Et.current.y,We[5]=Et.current.z,fe.needsUpdate=!0,b.current.computeBoundingSphere()}if(_.current){let fe=Et.current,We=fe.length();_.current.visible=We>Z0,We>1e-6&&(_.current.position.copy(fe).multiplyScalar(.5),_.current.scale.set(1,We,1),_.current.quaternion.setFromUnitVectors(D2,fe.clone().normalize()))}if(k.current&&(k.current.visible=Et.current.length()>Z0),bt&&h.current&&P.current&&A.current){let fe=Et.current,We=fe.length();if(We>1e-6){h.current.visible=!0;let xn=fe.clone().negate().normalize(),It=We,zt=e?.angle??Math.PI/6,oe=It*Math.tan(zt),ye=fe.clone().add(xn.clone().multiplyScalar(It)),[Ae,ct]=N2(xn),ht=P.current.getAttribute("position"),Ke=ht.array;for(let qe=0;qe<=Ju;qe++){let dt=qe/Ju*Math.PI*2,pn=ye.x+(Ae.x*Math.cos(dt)+ct.x*Math.sin(dt))*oe,ur=ye.y+(Ae.y*Math.cos(dt)+ct.y*Math.sin(dt))*oe,en=ye.z+(Ae.z*Math.cos(dt)+ct.z*Math.sin(dt))*oe;Ke[qe*3]=pn,Ke[qe*3+1]=ur,Ke[qe*3+2]=en}ht.needsUpdate=!0,P.current.computeBoundingSphere();let wt=A.current.getAttribute("position"),_e=wt.array;for(let qe=0;qe<Qu;qe++){let dt=qe/Qu*Math.PI*2,pn=ye.x+(Ae.x*Math.cos(dt)+ct.x*Math.sin(dt))*oe,ur=ye.y+(Ae.y*Math.cos(dt)+ct.y*Math.sin(dt))*oe,en=ye.z+(Ae.z*Math.cos(dt)+ct.z*Math.sin(dt))*oe,Hn=qe*6;_e[Hn]=fe.x,_e[Hn+1]=fe.y,_e[Hn+2]=fe.z,_e[Hn+3]=pn,_e[Hn+4]=ur,_e[Hn+5]=en}wt.needsUpdate=!0,A.current.computeBoundingSphere()}else h.current.visible=!1}});let Tr=(0,Be.useCallback)(()=>{le.current!==null&&(cancelAnimationFrame(le.current),le.current=null),W.current=t,U.current=[n[0],n[1],n[2]],te.current=!0,O.current=null,$.current=null,tt.current?.(!0)},[t,n]),Tn=(0,Be.useCallback)((fe,We,xn,It)=>{let zt=new yt.Vector3(W.current[0],W.current[1],W.current[2]),oe=new yt.Vector3,ye=new yt.Quaternion,Ae=new yt.Vector3;It.decompose(oe,ye,Ae);let ct=zt.clone().applyMatrix4(It),ht=[Math.min(Math.max(ct.x,nf),rf),Math.min(Math.max(ct.y,nf),rf),Math.min(Math.max(ct.z,nf),rf)],Ke=new yt.Quaternion().setFromEuler(new yt.Euler(U.current[0],U.current[1],U.current[2],"XYZ")),wt=new yt.Quaternion().copy(ye).multiply(Ke),_e=new yt.Euler().setFromQuaternion(wt,"XYZ"),qe=[_e.x,_e.y,_e.z];Et.current.set(ht[0],ht[1],ht[2]),rt.current.set(qe[0],qe[1],qe[2]),O.current=ht,$.current=qe;let dt=new yt.Quaternion().setFromEuler(rt.current);D.compose(Et.current,dt,j),M()},[D,j,M]),Kt=(0,Be.useCallback)(()=>{te.current=!1;let fe=O.current,We=$.current;O.current=null,$.current=null;let xn=fe&&!r1(fe,W.current),It=We&&!r1(We,U.current);xn&&a&&a(fe),It&&s&&s(We),xn||It?le.current=requestAnimationFrame(()=>{le.current=null,tt.current?.(!1)}):tt.current?.(!1)},[a,s]);return(0,Be.useEffect)(()=>{let fe=It=>{let zt=g.domElement.getBoundingClientRect();return new yt.Vector2((It.clientX-zt.left)/zt.width*2-1,-((It.clientY-zt.top)/zt.height)*2+1)},We=It=>!!It.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),xn=It=>{if(We(It))return;let zt=fe(It);v.setFromCamera(zt,m);let oe=[];if(x.current&&oe.push(x.current),S.current&&oe.push(S.current),oe.length===0)return;if(v.intersectObjects(oe,!1).length>0){let Ae=e?.id??null;Js!==Ae&&(Pc(Ae),u?.("scene"),d?.("Lighting")),It.preventDefault(),It.stopPropagation()}};return g.domElement.addEventListener("pointerdown",xn),()=>{g.domElement.removeEventListener("pointerdown",xn)}},[m,v,g,e,u,d]),c!=="scene"||p!=="Lighting"||!e||!o||e.type==="none"||e.type==="hemisphere"?null:(0,Ye.jsxs)("group",{ref:fe=>{fe&&vd(fe)},children:[(0,Ye.jsxs)("group",{ref:w,children:[(0,Ye.jsx)("sprite",{ref:S,children:(0,Ye.jsx)("spriteMaterial",{map:de,transparent:!0,opacity:.9,blending:yt.AdditiveBlending,depthWrite:!1,rotation:bt?L2:0},Ot)}),(0,Ye.jsx)(np.Sphere,{ref:x,args:[.25,16,16],children:(0,Ye.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),Ie&&(0,Ye.jsxs)("group",{ref:y,children:[(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[Le,3],count:Zs+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:of,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[he,3],count:Zs+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:of,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[pt,3],count:Zs+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:of,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!Ie&&!bt&&(0,Ye.jsxs)(Ye.Fragment,{children:[(0,Ye.jsxs)("mesh",{ref:_,children:[(0,Ye.jsx)("cylinderGeometry",{args:[t1,t1,1,8,1,!0]}),(0,Ye.jsx)("meshBasicMaterial",{color:e1,transparent:!0,opacity:.05,blending:yt.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Ye.jsxs)("line",{ref:k,children:[(0,Ye.jsx)("bufferGeometry",{ref:b,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[ce,3],count:2})}),(0,Ye.jsx)("lineBasicMaterial",{color:e1,transparent:!0,opacity:.7,blending:yt.AdditiveBlending})]})]}),bt&&(0,Ye.jsxs)("group",{ref:h,children:[(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{ref:P,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[Bt,3],count:Ju+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:n1,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineSegments",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{ref:A,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[un,3],count:Qu*2})}),(0,Ye.jsx)("lineBasicMaterial",{color:n1,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),Xt&&a&&(0,Ye.jsx)(np.PivotControls,{ref:C,matrix:D,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Tr,onDrag:Tn,onDragEnd:Kt})]})}var Gt=require("react"),l1=require("@react-three/drei"),ip=require("@react-three/fiber"),Bn=require("three");var Nn=require("three");function rp(e){e.updateWorldMatrix(!0,!0);let t=new Nn.Matrix4().copy(e.matrixWorld).invert(),n=new Nn.Box3,r=new Nn.Box3,i=!1;return e.traverse(o=>{let a=o;if(!a.isMesh||!a.geometry||(a.geometry.boundingBox||a.geometry.computeBoundingBox(),!a.geometry.boundingBox))return;let s=new Nn.Matrix4().multiplyMatrices(t,o.matrixWorld);r.copy(a.geometry.boundingBox).applyMatrix4(s),n.union(r),i=!0}),i?n.getCenter(new Nn.Vector3):new Nn.Vector3}function a1(e,t="XYZ"){return new Nn.Quaternion().setFromEuler(new Nn.Euler(e[0],e[1],e[2],t))}function B2(e,t,n,r,i="XYZ"){let a=new Nn.Vector3(...r).multiply(new Nn.Vector3(...n)).applyQuaternion(a1(t,i)).add(new Nn.Vector3(...e));return[a.x,a.y,a.z]}function s1(e,t,n,r,i,o="XYZ"){let a=new Nn.Vector3(...B2(e,t,r,i,o)),s=new Nn.Vector3(...i).multiply(new Nn.Vector3(...r)).applyQuaternion(a1(n,o)),l=a.sub(s);return[l.x,l.y,l.z]}var cf=require("react/jsx-runtime");function df({node:e,space:t,onTransformChange:n,onDraggingChange:r}){let i=(0,ip.useThree)(C=>C.invalidate),o=(0,Gt.useMemo)(()=>rp(e),[e]),a=(0,Gt.useMemo)(()=>new Bn.Matrix4,[]),s=(0,Gt.useRef)(!1),l=(0,Gt.useRef)(new Bn.Matrix4),c=(0,Gt.useRef)(new Bn.Matrix4),p=(0,Gt.useRef)(null),u=(0,Gt.useRef)(0),d=(0,Gt.useRef)([]),m=(0,Gt.useRef)(null),g=(0,Gt.useRef)(r);g.current=r;let v=(0,Gt.useMemo)(()=>new Bn.Vector3,[]),M=(0,Gt.useMemo)(()=>new Bn.Quaternion,[]),w=(0,Gt.useMemo)(()=>new Bn.Vector3,[]),x=(0,Gt.useMemo)(()=>new Bn.Quaternion,[]),S=(0,Gt.useMemo)(()=>new Bn.Vector3(1,1,1),[]),k=(0,Gt.useMemo)(()=>new Bn.Quaternion,[]),b=(0,Gt.useMemo)(()=>new Bn.Vector3,[]),_=(0,Gt.useMemo)(()=>new Bn.Vector3,[]),y=(0,Gt.useRef)([0,0,0]),h=(0,Gt.useCallback)(()=>{s.current||(e.updateWorldMatrix(!0,!1),v.copy(o).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(M),x.copy(M),t==="world"&&x.identity(),a.compose(v,x,S))},[v,a,x,S,e,o,t,M]);(0,Gt.useLayoutEffect)(()=>(h(),()=>{let C=m.current!==null;C&&(cancelAnimationFrame(m.current),m.current=null),(s.current||C)&&(s.current=!1,g.current(!1));for(let D of d.current)ks(D);d.current=[]}),[h]),(0,ip.useFrame)(()=>h());let P=(0,Gt.useCallback)(()=>{m.current!==null&&(cancelAnimationFrame(m.current),m.current=null),e.updateWorldMatrix(!0,!0),d.current=[];for(let C of Rs(e))av(C)||(Ad(C,C.matrixWorld),d.current.push(C));e.updateWorldMatrix(!0,!1),v.copy(o).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(M),e.getWorldScale(w),l.current.compose(v,M,w),c.current.copy(a),y.current=[e.rotation.x,e.rotation.y,e.rotation.z],p.current=null,s.current=!0,r(!0)},[v,a,e,r,o,M,w]),A=(0,Gt.useCallback)((C,D)=>{let B=l.current.clone().premultiply(D),j=c.current.clone().premultiply(D);B.decompose(b,M,_);let W=b.clone();j.decompose(v,x,S),t==="world"&&x.identity(),a.compose(v,x,S),C.decompose(b,k,_);let U=new Bn.Euler().setFromQuaternion(k,e.rotation.order),[te,O,$]=y.current,le=[te+U.x,O+U.y,$+U.z],tt=new Bn.Quaternion().setFromEuler(new Bn.Euler(le[0],le[1],le[2],e.rotation.order)),nt=(e.parent?.matrixWorld||new Bn.Matrix4).clone().invert(),ce=W.clone().applyMatrix4(nt),Le=o.clone().multiply(e.scale).applyQuaternion(tt),he=ce.clone().sub(Le),pt=[he.x,he.y,he.z];e.position.set(pt[0],pt[1],pt[2]),e.rotation.set(le[0],le[1],le[2],e.rotation.order),e.updateMatrixWorld(!0),i(),p.current={position:pt,rotation:le}},[v,k,a,x,S,i,e,o,b,_,t,M]);return(0,cf.jsx)("group",{children:(0,cf.jsx)(l1.PivotControls,{matrix:a,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:P,onDrag:(C,D,B,j)=>A(D,j),onDragEnd:()=>{s.current=!1;let C=p.current;if(p.current=null,C)n(C),m.current=requestAnimationFrame(()=>{m.current=null,r(!1)});else if(d.current.length>0){for(let D of d.current)ks(D);e.updateMatrixWorld(!0),i(),r(!1)}else r(!1);d.current=[]}})})}var L=require("react/jsx-runtime");function O2(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,r=n.getAttribute("skinIndex"),i=n.getAttribute("skinWeight"),o=n.getAttribute("position");if(!r||!i||!o)return null;let a=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],l=new Tt.Vector3,c=s[0],p=1/0;for(let m of s){l.fromBufferAttribute(o,m);let g=l.distanceToSquared(a);g<p&&(p=g,c=m)}let u=r.getComponent(c,0),d=i.getComponent(c,0);for(let m=1;m<4;m++){let g=i.getComponent(c,m);g>d&&(d=g,u=r.getComponent(c,m))}return t.skeleton.bones[u]??null}function I2(e){let t=O2(e)??e.object,n=Kl(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let r=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[r.x,r.y,r.z]}}function z2(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let r=Xi(t,e.anchorNodeName);return r?(r.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(r.matrixWorld),!0):!1}function U2({annotation:e,enabled:t,controlsRef:n,offsetRef:r}){let i=(0,Qs.useThree)(d=>d.scene),o=(0,E.useRef)(null),a=(0,E.useRef)(!1),s=(0,E.useMemo)(()=>new Tt.Vector3,[]),l=(0,E.useMemo)(()=>new Tt.Vector3,[]),c=(0,E.useMemo)(()=>new Tt.Vector3,[]),p=e?.anchorNodeName,u=e?.anchorLocalPosition;return(0,E.useEffect)(()=>{o.current=null,a.current=!1},[p,e?.id]),(0,Qs.useFrame)(()=>{let d=n.current,m=r.current;if(!t||!d||!m||!p||!u){a.current=!1;return}let g=o.current;if((!g||!g.parent)&&(g=Xi(i,p),o.current=g),!g){a.current=!1;return}g.updateWorldMatrix(!0,!1),s.set(u[0],u[1],u[2]).applyMatrix4(g.matrixWorld),!(a.current&&s.distanceToSquared(l)<1e-8)&&(l.copy(s),a.current=!0,c.copy(s).add(m),d.setLookAt(c.x,c.y,c.z,s.x,s.y,s.z,!0))}),null}function F2(e){let t={total:0,missing:0};return e.traverse(n=>{let r=n;!r.isMesh||!r.geometry||(t.total+=1,r.geometry.getAttribute("uv")||(t.missing+=1))}),t}var V2=.2,c1=Object.freeze({});function j2({enabled:e,speed:t,controlsRef:n}){let r=(0,Qs.useThree)(i=>i.invalidate);return(0,Qs.useFrame)((i,o)=>{!e||!n.current||(n.current.rotate(o*V2*t,0,!1),r())}),null}function H2(e,t,n){let r=t?.camera;if(!(r instanceof Tt.PerspectiveCamera))return null;let o=(e instanceof Tt.Box3?e:new Tt.Box3().setFromObject(e)).getSize(new Tt.Vector3).length();return!Number.isFinite(o)||o<=0?null:(r.near=o/100,r.far=o*100,r.updateProjectionMatrix(),t&&n===void 0&&(t.maxDistance=o*10),o)}function G2(e,t){let n=e.camera;if(!(n instanceof Tt.PerspectiveCamera)||!(t>0))return;let r=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(r-n.near)<=n.near*.01||(n.near=r,n.updateProjectionMatrix())}async function d1(e,t,n=.6){let r=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=r}}function uf(e){let t=hb(),n=gb(e);return(0,L.jsx)(W2,{...Ob(e),contextRecovery:t,engagement:n},t.generation)}function W2({contextRecovery:e,engagement:t,modelUrl:n,tilesetUrl:r,tilesErrorTarget:i=8,tilesCacheSize:o=800,onObjectCatalog:a,modelFormat:s,licenseKey:l,licenseValidationUrl:c,objectBindings:p="auto",selectedObject:u,panelHoveredObject:d,onObjectBindingsChange:m,onObjectSelect:g,onObjectHover:v,onObjectDoubleClick:M,onObjectContextMenu:w,decalMove:x,onObjectEditLeaseChange:S,onSceneLoaded:k,onModelLoaded:b,onLoadError:_,onProgress:y,onCameraControllerChange:h,cameraControllerType:P,onAction:A,onHiddenObjectsChange:C,onCameraChange:D,onViewerReady:B,onTextureUpload:j,onAnimationsReady:W,onAnnotationsChange:U,activeAnnotation:te,onActiveAnnotationChange:O,camera:$,cameraLimits:le,backgroundColor:tt,shadows:xe=!0,showObjectBindingDataPanel:nt=!0,customObjectBindingDataPanel:ce,customSceneObjectsPanel:Le,showSceneObjectsPanel:he=!0,showDownloadButton:pt=!0,downloadFilename:Bt="model",showResetButton:un=!0,showFullscreenButton:Ie=!1,showLoadingOverlay:bt=!0,showMouseController:Ot=!1,mouseControllerPosition:dr="center-bottom",mouseControllerOpacity:de=1,moveSensitivity:Cr=.08,zoomSensitivity:Xt=1,sceneConfig:Et,onSceneConfigChange:rt,disableZoom:bn=!1,zoomOnSelected:Tr=!0,highlightOnHover:Tn=!0,enableCameraControls:Kt=!0,onAutoFit:fe,refitOnResize:We=!0,renderMode:xn="demand",maxDpr:It=2,preserveDrawingBuffer:zt=!1,performanceProfile:oe="auto",dracoDecoderPath:ye,ktx2TranscoderPath:Ae,meshopt:ct=!0,showMeasureTools:ht=!1,showUvCheckerButton:Ke=!1,showExplodeControls:wt=!1,showMaterialVariants:_e=!0,showSectionTools:qe=!1,isolation:dt,onIsolationChange:pn,showIsolateControls:ur=!1,cinematic:en,measurementUnit:Hn="m",enableXR:Xr=!1,usdzUrl:pr,arScaleMode:to="normalized",mobileHandoffUrl:aa,showAnnotationNavigation:tn=!0,showAnnotationOnHover:Pr=!1,moveModeEnabled:F=!1,objectTransformSpace:H="world",enableKeyboardNavigation:q=!1,showViewGizmo:ie=!1,overlay:ae,unsafe_sceneChildren:we,autoRotate:Pe,autoRotateSpeed:at,onTexturePositioningChange:De,endTexturePositioningRef:Rt,texturePositioning:vt}){(0,E.useEffect)(()=>()=>t.interrupt(),[t]);let qt=(0,E.useRef)(t);qt.current=t;let Me=p==="auto",Ve=Me?c1:p,{isInsideEditor:hn,activeTab:On,activeSubTab:hr}=Sr(),$n=hn&&On==="scene"&&hr==="Lighting",Pn=Hu(l,c),[mi,_p]=(0,E.useState)({}),[sa,Mo]=(0,E.useState)(void 0),[Ka,Fc]=(0,E.useState)(void 0),ze=(0,E.useMemo)(()=>{let f=vh(Et??Aa,mi);return sa!==void 0&&(f={...f,model:{...f.model,materialVariant:sa}}),Ka!==void 0&&(f={...f,section:{...Pa,...f.section,...Ka}}),f},[Et,mi,sa,Ka]),Ar=(0,E.useRef)(ze);Ar.current=ze,(0,E.useEffect)(()=>{t.setMaterialVariant(ze.model.materialVariant??null)},[ze.model.materialVariant,t]);let fi=Et?.model.materialVariant;(0,E.useEffect)(()=>{Mo(void 0)},[fi,n]);let Vc=JSON.stringify(Et?.section??null);(0,E.useEffect)(()=>{Fc(void 0)},[Vc,n]);let Co=(0,E.useCallback)(f=>{if(rt){let T=Ar.current;rt({...T,section:{...Pa,...T.section,...f}});return}Fc(T=>({...T,...f}))},[rt]),[cl,To]=(0,E.useState)(!1),Za=(0,E.useCallback)(f=>{if(t.chooseVariant(f,Ar.current.model.materialVariant??null),rt){let T=Ar.current;rt({...T,model:{...T.model,materialVariant:f}});return}Mo(f)},[rt,t]),no=(0,E.useCallback)(f=>{if(rt){rt(vh(Ar.current,f));return}_p(T=>{let N={...T};for(let[V,z]of Object.entries(f))N[V]={...T[V],...z};return N})},[rt]),[gi,mn]=(0,E.useState)(null),[Yn,mr]=(0,E.useState)(null),[Ja,In]=(0,E.useState)(null),qr=(0,E.useRef)(0),[Er,nr]=(0,E.useState)(null),[nn,dl]=(0,E.useState)(null),Po=ze.model.renderer==="uv-checker",ro=Ke?nn??Po:Po,$r=(0,E.useMemo)(()=>{let f=ro?"uv-checker":Po?"pbr":ze.model.renderer;return f===ze.model.renderer?ze:{...ze,model:{...ze.model,renderer:f}}},[Po,ze,ro]);(0,E.useEffect)(()=>{dl(null)},[n,ze.model.renderer,Ke,r]);let Mp=(0,E.useMemo)(()=>{if(tt)return tt;let f=ze.background;return f.enabled&&f.type==="color"?f.color:"#1c1c1d"},[tt,ze]),jc=(0,E.useMemo)(()=>({dracoDecoderPath:ye,ktx2TranscoderPath:Ae,meshopt:ct}),[ye,Ae,ct]),Cp=(0,E.useMemo)(()=>Ov(oe),[oe]),Ze=(0,E.useRef)(null),[cn,ul]=(0,E.useState)("orbit"),[Ii,Hc]=(0,E.useState)(!1),zi=P!==void 0?P:cn,bi=(0,E.useCallback)(f=>{Hc(!1),f!==zi&&(ul(f),h?.(f))},[zi,h]),[Ao,Rr]=(0,E.useState)(!1),[Fe,la]=(0,E.useState)(null),Eo=!!(vt||De||Rt),kr=(0,E.useRef)(De);kr.current=De,(0,E.useEffect)(()=>{kr.current?.(Fe)},[Fe]),(0,E.useEffect)(()=>{if(Rt)return Rt.current=()=>la(null),()=>{Rt.current=null}},[]),(0,E.useEffect)(()=>{Ze.current&&(Ze.current.dollySpeed=Math.max(Xt,0))},[Xt]),(0,E.useEffect)(()=>{Ze.current&&(Ze.current.enabled=Kt&&!Ao&&!cl&&!Fe)},[Kt,Ao,cl,Fe]);let pl=(0,E.useRef)(null),rr=(0,E.useRef)(new Map),Qa=(0,E.useRef)(null),Gc=(0,E.useRef)(null),fr=(0,E.useRef)(null),Ui=(0,E.useRef)({});(0,E.useEffect)(()=>()=>{for(let f of Object.values(Ui.current))URL.revokeObjectURL(f)},[]);let An=(0,E.useRef)({}),[,Tp]=(0,E.useState)(0),Wc=(0,E.useCallback)(()=>{Tp(f=>f+1)},[]),es=(0,E.useRef)({}),Xc=(0,E.useRef)(null),Lr=ub(Ie),vi=(0,E.useRef)(null),[xi,Pp]=(0,E.useState)(null),Ap=(0,E.useCallback)(f=>{vi.current=f,Pp(f)},[]),ts=(0,E.useRef)(new Set),io=(0,E.useRef)(null);(0,E.useEffect)(()=>{let f=xi;if(!f||!q||!Kt||F)return;let T=new Set(["w","a","s","d"," ","c"]),N=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),V=0,z=Te=>Te.code==="Space"?" ":Te.key.toLowerCase(),se=()=>{ts.current.clear(),V=0,io.current!==null&&(cancelAnimationFrame(io.current),io.current=null)},pe=Te=>{let Qe=Ze.current,et=ts.current;if(!Qe||et.size===0){io.current=null,V=0;return}let vn=V?Math.min((Te-V)/1e3,.05):1/60;V=Te;let wn=Math.max(Qe.distance*.75,.01)*vn;et.has("w")&&Qe.forward(wn,!1),et.has("s")&&Qe.forward(-wn,!1),et.has("a")&&Qe.truck(-wn,0,!1),et.has("d")&&Qe.truck(wn,0,!1),et.has(" ")&&Qe.truck(0,wn,!1),et.has("c")&&Qe.truck(0,-wn,!1),io.current=requestAnimationFrame(pe)},He=Te=>{if(Te.target!==f){se();return}if(N.has(Te.key)){let et=Ze.current;if(!et)return;Te.preventDefault();let vn=Math.PI/90,wn=Math.max(et.distance*.05,.01);Te.key==="ArrowUp"?Te.shiftKey?et.forward(wn,!0):et.rotate(0,-vn,!0):Te.key==="ArrowDown"?Te.shiftKey?et.forward(-wn,!0):et.rotate(0,vn,!0):Te.key==="ArrowLeft"?et.rotate(-vn,0,!0):et.rotate(vn,0,!0);return}let Qe=z(Te);T.has(Qe)&&(Te.preventDefault(),ts.current.add(Qe),io.current===null&&(io.current=requestAnimationFrame(pe)))},it=Te=>{ts.current.delete(z(Te))};return f.addEventListener("keydown",He),f.addEventListener("keyup",it),f.addEventListener("blur",se),()=>{f.removeEventListener("keydown",He),f.removeEventListener("keyup",it),f.removeEventListener("blur",se),se()}},[xi,Kt,q,F]);let ns=(0,E.useRef)(null),[Ep,qc]=(0,E.useState)(Ve),[Ro,rs]=(0,E.useState)({}),[$c,hl]=(0,E.useState)(null),[ml,Yc]=(0,E.useState)(null),[Rp,Kc]=(0,E.useState)(null),[kp,Lp]=(0,E.useState)(null),[Dr,Zc]=(0,E.useState)(null),[Dp,Jc]=(0,E.useState)({}),En=(0,E.useRef)(null),is=(0,E.useRef)(null),fl=(0,E.useRef)(0),Qc=(0,E.useRef)(null),[Np,Bp]=(0,E.useState)(0),Fi=(0,E.useRef)(!1),ca=(0,E.useRef)(!1),gl=(0,E.useRef)(!!$);gl.current=!!$;let Yr=(0,E.useRef)(null),[Kr,da]=(0,E.useState)(!!n),[Vi,ua]=(0,E.useState)(!n||!!fe||!!$),[Nr,R]=(0,E.useState)(!1),[I,Z]=(0,E.useState)([]),[ee,ue]=(0,E.useState)(!1),[Ee,Je]=(0,E.useState)(null),[Ce,St]=(0,E.useState)(!1),[Kn,os]=(0,E.useState)(0),bl=(0,E.useRef)(""),Hf=(0,E.useRef)(""),[Gf,Wf]=(0,E.useState)(!1),[Xf,$w]=(0,E.useState)(null),[Yw,qf]=(0,E.useState)(!1),[vl,$f]=(0,E.useState)({total:0,missing:0}),[Kw,Yf]=(0,E.useState)("Loading model..."),[Zw,Op]=(0,E.useState)(null),Zn=(0,E.useRef)({}),xl=(0,E.useCallback)(()=>{let f=Ze.current;if(!f||Yr.current)return;let T=f.getPosition(new Tt.Vector3),N=f.getTarget(new Tt.Vector3);Yr.current={position:[T.x,T.y,T.z],target:[N.x,N.y,N.z]}},[]),[yl,ed]=(0,E.useState)(!1),[td,Kf]=(0,E.useState)(0),[Ip,Zf]=(0,E.useState)(!1);(0,E.useEffect)(()=>{Kf(0),Zf(!1)},[n,r]);let pa=(0,E.useMemo)(()=>{let f=ze.cinematic,T=f?.enabled?{waypoints:f.waypoints,duration:f.duration,loop:f.loop,autoPlay:f.autoPlay}:null;return en===void 0?T&&(T.waypoints?.length??0)>=2?T:null:en===!1?null:en===!0?T??{}:{...T??{},...en}},[en,ze]),[ha,Br]=(0,E.useState)(!1),[Jw,ma]=(0,E.useState)(!1),zp=(0,E.useRef)(!1);(0,E.useEffect)(()=>{Br(!1),ma(!1),zp.current=!1},[n,r]),(0,E.useEffect)(()=>{!pa?.autoPlay||zp.current||Nr&&Vi&&!Kr&&(zp.current=!0,Br(!0),ma(!1))},[pa,Nr,Vi,Kr]);let Qw=(0,E.useCallback)(()=>{Br(!1),ma(!0)},[]),{captureVideo:Up,cancelVideo:Fp,isRecording:Jf,recording:yn,progress:eS,onProgress:tS}=db({rendererCaptureRef:fr,controlsRef:Ze,cinematicConfig:pa,ready:e.status==="ready"&&Nr&&Vi&&!Kr,modelUrl:`${n}|${r??""}`,onCaptureStart:Qw});(0,E.useEffect)(()=>{e.status==="lost"&&(t.interrupt(),Fp(),Br(!1),Ze.current?.stop())},[e.status,Fp,t]);let{xrStore:fa,presenterRef:nS,arSupported:Vp,vrSupported:Qf,quickLookSupported:eg,resolvedMobileHandoffUrl:nd,isMobileHandoffOpen:tg,arOverlay:rS,openMobileHandoff:iS,closeMobileHandoff:ng,openQuickLook:oS,handleARStateChange:aS}=Vv({enableXR:Xr,usdzUrl:pr,mobileHandoffUrl:aa,engagement:t}),[ji,rg]=(0,E.useState)(()=>Et?.annotations??[]);(0,E.useEffect)(()=>{if(ji.length>0){let f=ji.reduce((T,N)=>Math.max(T,N.id),0);od.current=f}else od.current=0},[ji]);let[gr,rd]=(0,E.useState)(null),[ko,id]=(0,E.useState)({title:"",description:""}),od=(0,E.useRef)(0),[sS,ig]=(0,E.useState)(null),[Zr,as]=(0,E.useState)(-1),[og,ad]=(0,E.useState)(!1),ss=(0,E.useRef)(null),fn=(0,E.useMemo)(()=>[...ji].sort((f,T)=>f.id-T.id),[ji]),yi=ze.section??Pa,ag=_e&&Nr&&I.length>1,sg=un||pt||Ie&&Lr.supported||tn&&fn.length>0,sd=(0,E.useMemo)(()=>Zr<0||Zr>=fn.length?null:fn[Zr],[Zr,fn]),Hi=(0,E.useCallback)(f=>{if(te!==void 0){O?.(f);return}ig(f?{annotation:f}:null)},[te,O]),ls=(0,E.useCallback)(f=>{let T=Ze.current,N=En.current;if(!T)return;let V=new Tt.Vector3,z=rr.current.get(f.id);z?V.copy(z):N&&z2(f,N,V)||V.set(f.worldPosition[0],f.worldPosition[1],f.worldPosition[2]),pl.current=null;let se=T.smoothTime;T.smoothTime=.6;let pe=f.worldNormal;if(N){let He=new Tt.Box3().setFromObject(N),it=new Tt.Vector3;He.getCenter(it);let Te=new Tt.Vector3;He.getSize(Te);let Qe=Te.length()*.2,et;pe?et=new Tt.Vector3(pe[0],pe[1],pe[2]):et=V.clone().sub(it),et.lengthSq()<1e-6&&et.set(0,0,1),et.normalize();let vn=Math.max(Qe*.6,.3),wn=V.clone().add(et.multiplyScalar(vn));T.setPosition(wn.x,wn.y,wn.z,!0),f.anchorNodeName&&f.anchorLocalPosition&&(pl.current=wn.clone().sub(V))}T.setTarget(V.x,V.y,V.z,!0),ss.current&&clearTimeout(ss.current),ss.current=setTimeout(()=>{T.smoothTime=se,ss.current=null},800),Hi(f)},[Hi]),lS=(0,E.useCallback)(()=>{fn.length!==0&&(t.startTour(fn.length),ed(!0),as(0),ls(fn[0]))},[fn,ls,t]),cS=(0,E.useCallback)(()=>{if(fn.length===0||Zr<0)return;ad(!0);let f=(Zr-1+fn.length)%fn.length;as(f),ls(fn[f]),setTimeout(()=>ad(!1),500)},[Zr,fn,ls]),dS=(0,E.useCallback)(()=>{if(fn.length===0||Zr<0)return;if(Zr===fn.length-1){if(t.completeTour(),ed(!1),as(-1),Hi(null),Ze.current&&Yr.current){let T=Yr.current;Ze.current.setLookAt(T.position[0],T.position[1],T.position[2],T.target[0],T.target[1],T.target[2],!0)}return}ad(!0);let f=Zr+1;as(f),ls(fn[f]),setTimeout(()=>ad(!1),500)},[Zr,fn,ls,Hi,t]),uS=(0,E.useCallback)(()=>{if(t.stopTour(),ed(!1),as(-1),Hi(null),Ze.current&&Yr.current){let f=Yr.current;Ze.current.setLookAt(f.position[0],f.position[1],f.position[2],f.target[0],f.target[1],f.target[2],!0)}},[Hi,t]);(0,E.useEffect)(()=>{qt.current.stopTour("annotations-changed"),as(-1),ed(!1)},[fn.length]),(0,E.useEffect)(()=>()=>{ss.current&&clearTimeout(ss.current)},[]),(0,E.useEffect)(()=>{sd&&yl&&Hi(sd)},[sd,Hi,yl]),(0,E.useEffect)(()=>{if(Et?.annotations===void 0)return;let f=Et.annotations.map(T=>({...T,localPosition:T.localPosition??T.worldPosition}));rg(f)},[Et?.annotations]);let wl=(0,E.useCallback)(()=>{if(te!==void 0){O?.(null);return}ig(null)},[te,O]),Sl=te!==void 0?te:sS?.annotation??null,_l=(0,E.useMemo)(()=>Sl?ji.find(T=>T.id===Sl.id)??null:null,[Sl,ji]);(0,E.useEffect)(()=>{Sl&&!_l&&wl()},[Sl,_l,wl]);let Ml=!Me&&m!==void 0,je=Ml?Ve:Ep;Zn.current=je,(0,E.useEffect)(()=>{if(!Fe)return;let f=je[Fe.objectKey]?.style?.material?.[Fe.textureKey]?.path;(!Eo||!f)&&la(null)},[je,Eo,Fe]);let jp=(0,E.useRef)({}),[ld,pS]=(0,E.useState)({});(0,E.useEffect)(()=>{let f={...ld},T=!1,N=new Set;for(let[V,z]of Object.entries(je)){N.add(V);let se=z.style?.material,pe=jp.current[V]??{},He={};for(let Te of Wi){let Qe=se?.[Te]?.path;Qe&&(He[Te]=Qe,Qe!==pe[Te]&&(f[V]!==Te&&(T=!0),f[V]=Te))}let it=f[V];if(it&&!He[it]){let Te=Wi.find(Qe=>!!He[Qe]);Te?f[V]=Te:delete f[V],T=!0}jp.current[V]=He}for(let V of Object.keys(f))N.has(V)||(delete f[V],delete jp.current[V],T=!0);T&&pS(f)},[je]);let hS=(0,E.useMemo)(()=>Object.entries(je).map(([f,T])=>JSON.stringify([f,T.modelObjectId,T.transform??null])).sort().join(""),[je]),{measureMode:cs,measureModeRef:lg,measurePoints:cg,measurementTool:dg,areaClosed:ug,measurementError:mS,selectMeasurementTool:fS,undoMeasurementPoint:gS,finishMeasureArea:bS,snapMode:vS,setSnapMode:xS,snapPreview:yS,handleMeasurePointerMove:wS,clearSnapPreview:pg,showDimensions:hg,measureBox:Hp,modelBounds:SS,refreshBounds:mg,clearMeasurements:_S,toggleMeasureMode:MS,toggleDimensions:CS,handleMeasurePointerDown:TS,handleMeasureClick:PS}=Dv({canvasAreaRef:vi,controlsRef:Ze,sceneRef:En,modelUrl:`${n}|${r??""}`,modelRotation:ze.model.rotation,bindingTransformSignature:hS,modelLoaded:Nr,enabled:ht&&!yn}),[AS,ES]=(0,E.useState)(34),{isDownloading:Gp,downloadMenuOpen:RS,uvExportError:fg,toggleDownloadMenu:kS,handleDownloadMesh:LS,handleDownloadScreenshot:DS,handleDownloadUvLayout:NS,handleDownloadVideo:gg,videoFormat:Wp,setVideoFormat:BS,videoExportError:bg}=Av({sceneRef:En,materialRefs:es,rendererCaptureRef:fr,objectBindings:je,downloadFilename:Bt,captureVideo:Up}),vg=(0,E.useMemo)(()=>Object.fromEntries(Object.entries(je).filter(([,f])=>f.visible===!1).map(([f])=>[f,!0])),[je]),oo=(0,E.useMemo)(()=>{let f=new WeakMap,T=new Map,N=new Map;for(let[V,z]of Object.entries(je))f.set(z,V),T.has(z.id)||T.set(z.id,V),N.has(z.modelObjectId)||N.set(z.modelObjectId,V);return{byReference:f,byId:T,byModelObjectId:N}},[je]),Or=(0,E.useCallback)(f=>f?oo.byReference.get(f)??oo.byModelObjectId.get(f.modelObjectId)??oo.byId.get(f.id)??null:null,[oo]),Xp=u!==void 0,Cl=Xp?u??null:kp,ir=Or(Cl);(0,E.useEffect)(()=>{t.setSelectedPart(ir)},[ir,t]);let qp=ir?An.current[ir]??null:null,OS=ir?ld[ir]:void 0,xg=Or(Tn?d??ml??Rp:null),IS=xg?An.current[xg]??null:null,yg=(0,E.useCallback)(f=>{Kc(f),v?.(f)},[v]),wg=nt&&Cl!==null&&ir!==null,Tl=(ir?je[ir]:null)??Cl,Pl=Tl&&(Tl.modelObjectId||Tl.id)||null,ds=Pl?Dp[Pl]??null:null;(0,E.useEffect)(()=>{Ml||qc(Ve)},[Ml,Ve]),(0,E.useEffect)(()=>{C?.(vg)},[vg,C]);let us=(0,E.useCallback)((f,T)=>{if(zi==="pointerLock"){bi("orbit");return}f&&T?t.viewPart({objectId:f.id,objectKey:Or(f)??(f.modelObjectId||f.id),label:f.label,source:T}):f||t.setSelectedPart(null),Xp||Lp(f),g?.(f)},[zi,bi,Xp,g,Or,t]),Jr=(0,E.useCallback)(f=>{Ml||qc(f),m?.(f)},[Ml,m]),Sg=(0,E.useRef)(null),cd=(0,E.useCallback)(f=>{if(!Me)return;let T=`${n}
|
|
3689
|
-
${r??""}`,N=Sg.current===T?Zn.current:c1;Sg.current=T;let V=q0(f);for(let z of Object.keys(V))N[z]&&(V[z]=N[z]);Jr(V)},[Me,n,r,Jr]),dd=(0,E.useRef)({}),ps=(0,E.useCallback)(f=>{let T=Vb(An.current[f]),N=Zn.current[f]?.style?.material,V=N?.emissive??T.color,z=N?.emissiveIntensity??T.intensity;return{color:V,intensity:z,on:V!=="#000000"&&z>0}},[]),Al=(0,E.useCallback)((f,T)=>{let N=Zn.current,V=N[f];V&&Jr({...N,[f]:{...V,style:{...V.style,material:{...V.style?.material,...T}}}})},[Jr]),$p=f=>f==="#000000"?"#ffffff":f,zS=(0,E.useCallback)(f=>{let T=ir;if(!T||!f)return;let N=Zn.current[T];N&&Jr({...Zn.current,[T]:{...N,transform:{...N.transform,...f}}})},[Jr,ir]),wi=(0,E.useCallback)((f,T)=>je[f]?f:T?Or(T):oo.byId.get(f)??oo.byModelObjectId.get(f)??null,[je,Or,oo]),or=(0,E.useCallback)((f,T)=>{let N=wi(f),V=N?je[N]:void 0;!N||!V||Jr({...je,[N]:{...V,style:T(V.style)}})},[wi,je,Jr]),Ir=(0,E.useCallback)(()=>{if(Dr){let f=Ro[Dr.objectId]?.hex;f!==void 0&&(or(Dr.objectId,T=>({...T,material:{...T?.material,baseColor:f}})),rs(T=>({...T,[Dr.objectId]:{}})))}Zc(null)},[Dr,Ro,or]),_g=(0,E.useCallback)(()=>{us(null),hl(null),Ir()},[us,Ir]),Yp=(0,E.useCallback)((f,T,N,V,z)=>{let se=Xc.current,pe=vi.current,He=Ze.current?.camera;if(!se)return{objectId:f,x:24,y:24};let it=se.getBoundingClientRect(),Te=12,Qe=it.width-T-Te,et=it.height-N-Te,vn=Math.max(Te,(it.width-T)/2),wn=Math.max(Te,(it.height-N)/2),ys=wi(f,V),Rl=ys?An.current[ys]:null,Gi=(ws,xa)=>xa<=Te?Te:Math.min(Math.max(ws,Te),xa);if(pe&&He&&Rl){let ws=pe.getBoundingClientRect(),xa=new Tt.Vector3;new Tt.Box3().setFromObject(Rl).getCenter(xa),xa.project(He);let p_=(xa.x+1)/2*ws.width+(ws.left-it.left),h_=(1-xa.y)/2*ws.height+(ws.top-it.top);return{objectId:f,x:Gi(p_+24,Qe),y:Gi(h_-N/2,et)}}let ah=typeof z?.screenX=="number"?z.screenX-it.left:vn,sh=typeof z?.screenY=="number"?z.screenY-it.top:wn;return{objectId:f,x:Gi(ah,Qe),y:Gi(sh,et)}},[wi]),ud=(0,E.useCallback)(f=>{let{objectId:T,action:N,binding:V}=f;switch(hl(f),N.id){case"toggle-visibility":{let z=T;V?.modelObjectId&&(z=oo.byModelObjectId.get(V.modelObjectId)??z);let se=je[z],pe=se?.visible===!1;se&&Jr({...je,[z]:{...se,visible:pe}});break}case"change-color":Ir(),Jc(z=>{if(!(T in z))return z;let se={...z};return delete se[T],se}),rs(z=>{let se=wi(T,V)??T,pe=z[T]?.hex,He=je[se]?.style?.material?.baseColor;return{...z,[T]:{...z[T],hex:pe??He??"#ffffff"}}}),Zc(Yp(T,225,250,V,f));break;case"change-material":Ir(),Jc(z=>{if(T in z){let se={...z};return delete se[T],se}return{...z,[T]:Yp(T,300,320,V,f)}});break;case"add-text":case"add-image":{Ir();let z=N.id;qr.current++,In(null),nr(null),mr(se=>se?.objectId===T&&se.kind===z?null:{objectId:T,kind:z,activeId:null});break}case"toggle-light":case"change-light-color":case"set-brightness":{let z=wi(T,V);if(!z)break;let se=Fb(Ar.current,je,z);if(N.id==="toggle-light"){if(se.length>0){let Te=!se.some(Qe=>Qe.visible);no(Object.fromEntries(se.map(Qe=>[Qe.id,{visible:Te}])));break}let it=ps(z);it.on?(dd.current[z]=it.intensity,Al(z,{emissiveIntensity:0})):Al(z,{emissive:$p(it.color),emissiveIntensity:dd.current[z]??1});break}let pe=N.id,He=se.length>0?null:ps(z);mn(it=>it?.objectId===T&&it.kind===pe?null:{objectId:T,kind:pe,target:He?{type:"glow",objectKey:z,baseIntensity:He.on?He.intensity:dd.current[z]??1}:{type:"lights",lightIds:se.map(Te=>Te.id),baseIntensity:Object.fromEntries(se.map(Te=>[Te.id,Te.intensity]))},percent:He&&!He.on?0:100});break}default:break}A?.(f)},[Jr,Al,no,ps,je,Yp,A,Ir,wi,oo]);(0,E.useEffect)(()=>{if(Dr)return window.addEventListener("pointerdown",Ir),()=>window.removeEventListener("pointerdown",Ir)},[Dr,Ir]),(0,E.useEffect)(()=>{if(!_l)return;let f=T=>{if(ns.current&&!ns.current.contains(T.target)){if(T.target.closest?.(".ri-annotationMarker"))return;wl()}};return document.addEventListener("mousedown",f),document.addEventListener("touchstart",f),()=>{document.removeEventListener("mousedown",f),document.removeEventListener("touchstart",f)}},[_l,wl]),(0,E.useEffect)(()=>{if(!gr)return;let f=T=>{let N=T.target;if(N.closest?.(".ri-annotationPopup")||N.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let V=vi.current;!V||!V.contains(N)||(rd(null),id({title:"",description:""}))};return document.addEventListener("mousedown",f,!0),document.addEventListener("touchstart",f,!0),()=>{document.removeEventListener("mousedown",f,!0),document.removeEventListener("touchstart",f,!0)}},[gr]);let Mg=(0,E.useCallback)((f,T)=>{let N=Ui.current[f];N&&URL.revokeObjectURL(N),T.startsWith("blob:")?Ui.current[f]=T:delete Ui.current[f],or(f,V=>({...V,material:{...V?.material,texture:{path:T}}}))},[or]),US=f=>{let T=f.target.files?.[0],N=Gc.current;if(!T||!N)return;let V=wi(N);V&&(j?j(T,V).then(z=>Mg(V,z),z=>console.error("onTextureUpload failed:",z)):Mg(V,URL.createObjectURL(T)),f.target.value="")},Cg=f=>{Gc.current=f,Qa.current?.click()},Tg=f=>{let T=wi(f);if(!T)return;or(T,V=>V?.material?.texture?{...V,material:{...V.material,texture:void 0}}:V);let N=Ui.current[T];N&&(URL.revokeObjectURL(N),delete Ui.current[T])},hs=!!vt,Si=typeof vt=="object"?vt:void 0,FS=(0,E.useCallback)((f,T,N)=>{if(Si?.onOffsetChange){Si.onOffsetChange(f,T,N);return}or(f,V=>{let z=V?.material?.texture;if(!z?.path)return V;let se=z.offset??[0,0],pe=[se[0],se[1]];return pe[T]=N,{...V,material:{...V?.material,texture:{...z,offset:pe}}}})},[or,Si]),VS=(0,E.useCallback)((f,T)=>{if(Si?.onRotationChange){Si.onRotationChange(f,T);return}or(f,N=>{let V=N?.material?.texture;if(!V?.path)return N;let z=(T%360+360)%360;return{...N,material:{...N?.material,texture:{...V,rotation:z*Math.PI/180}}}})},[or,Si]),jS=(0,E.useCallback)(()=>{la(null),Si?.onEndPositioning?.()},[Si]),Kp=(0,E.useRef)(B);Kp.current=B;let _i=(0,E.useCallback)(()=>{let f=Ze.current;!f||!Kp.current||Kp.current({objectBindings:Zn.current,homeCameraState:Yr.current,captureImage:T=>Jf()?Promise.reject(new Error("Wait for video export to finish before capturing an image.")):yd(fr.current,T),captureVideo:Up,invalidate:()=>fr.current?.invalidate(),raw:{controls:f,scene:En.current,nodes:An.current}})},[Up,Jf]),ms=(0,E.useCallback)(async(f=!1)=>{let T=Ze.current,N=is.current??En.current;if(!T||!N)return!1;try{if(f){let V=(N instanceof Tt.Box3?N:new Tt.Box3().setFromObject(N)).getBoundingSphere(new Tt.Sphere),z=V.center.clone(),pe=T.getPosition(new Tt.Vector3).clone().sub(T.getTarget(new Tt.Vector3));pe.lengthSq()<1e-6&&pe.set(0,0,1),pe.normalize();let He=Math.max(V.radius*10,20),it=z.clone().add(pe.multiplyScalar(He));await T.setLookAt(it.x,it.y,it.z,z.x,z.y,z.z,!1)}return ua(!0),await d1(T,()=>T.fitToBox(N,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(V=>{let z=performance.now(),se=()=>{T.active===!1||performance.now()-z>8e3?(T.dispatchEvent({type:"update"}),fr.current?.invalidate(),V()):(fr.current?.invalidate(),setTimeout(se,100))};setTimeout(se,100)}),Fi.current=!0,xl(),_i(),!0}catch(V){return console.error("Fit scene error:",V),!1}},[xl,_i]);(0,E.useEffect)(()=>{if(Fi.current=!1,ca.current=!1,Yr.current=null,En.current=null,is.current=null,R(!1),Z([]),ue(!1),Je(null),St(!1),bl.current="",$f({total:0,missing:0}),Yf("Loading model..."),Op(null),!n){da(!1),ua(!0);return}da(!0),ua(!!fe||gl.current);let f=!1,T=null,N=z=>{T=setTimeout(V,z)},V=()=>{if(f||Fi.current||ca.current)return;let z=is.current??En.current;if(!Ze.current||!z){N(100);return}if(fl.current=H2(z,Ze.current,le?.maxDistance)??fl.current,M0(Ze.current)){Fi.current=!0,xl(),_i(),da(!1),ua(!0),fr.current?.invalidate();return}ca.current=!0,(fe?fe():gl.current?Promise.resolve(!0):ms(!0)).then(pe=>{Fi.current=pe!==!1,Fi.current?(xl(),_i(),da(!1)):f||N(100)}).catch(()=>{Fi.current=!1,f||N(100)}).finally(()=>{ca.current=!1})};return N(50),()=>{f=!0,T&&clearTimeout(T)}},[xl,le?.maxDistance,ms,n,_i,fe,r]),(0,E.useEffect)(()=>{if(!We)return;let f=xi;if(!f)return;let T=null,N=new ResizeObserver(()=>{!Fi.current||ca.current||(T&&clearTimeout(T),T=setTimeout(()=>{ms()},150))});return N.observe(f),()=>{N.disconnect(),T&&clearTimeout(T)}},[xi,ms,We]);let Pg=(0,E.useCallback)(f=>{if(lg.current||(Br(!1),Ir(),hl(null),us(f,"canvas"),bn||!Tr))return;let T=Ze.current,N=Or(f),V=N?An.current[N]:null;T&&f.cameraState?.position&&f.cameraState?.target?(T.setPosition(f.cameraState.position[0],f.cameraState.position[1],f.cameraState.position[2],!0),T.setTarget(f.cameraState.target[0],f.cameraState.target[1],f.cameraState.target[2],!0)):T&&V&&T.fitToBox(V,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[us,Ir,Or,bn,Tr]),Ag=(0,E.useCallback)(f=>{if(!Eo)return!1;let T=Or(f);if(!T)return!1;let N=ld[T];return N?(bs.current=!1,va.current=null,la({objectKey:T,textureKey:N}),!0):!1},[Eo,Or,ld]),Zp=(0,E.useRef)(!1),ga=(0,E.useCallback)((f,T)=>{let N=Zn.current,V=N[f];if(!V)return;let z=T(V.decals??[]);Jr({...N,[f]:{...V,decals:z.length>0?z:void 0}})},[Jr,je]),HS=(0,E.useMemo)(()=>{if(!Er)return null;let{objectKey:f,decalId:T}=Er,N=je[f],V=N?.decals?.find(z=>z.id===T);return V?{objectId:N.modelObjectId??f,decal:V,onCancel:()=>nr(null),onCommit:z=>{ga(f,se=>se.map(pe=>pe.id===T?{...pe,...z}:pe)),nr(null)}}:null},[Er,je,ga]),fs=x??HS,Jp=(0,E.useCallback)((f,T)=>{qr.current++;let N=Zn.current[f],V=An.current[N?.modelObjectId??f],z=Id(V,Ze.current?.camera);if(!z)return In("Could not find a surface on this object for the decal."),!1;let se={...T,...z};return ga(f,pe=>[...pe,se]),In(null),mr(pe=>pe&&{...pe,activeId:se.id}),nr({objectKey:f,decalId:se.id}),!0},[ga]),pd=(0,E.useCallback)(f=>{let T=Zn.current[f],N=An.current[T?.modelObjectId??f]?.geometry;if(!N)return .2;N.boundingBox||N.computeBoundingBox();let V=N.boundingBox?.getSize(new Tt.Vector3),z=V?Math.max(V.x,V.y,V.z):0;return z>0&&Number.isFinite(z)?z/3:.2},[]),Eg=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,Rg=(0,E.useRef)([]);(0,E.useEffect)(()=>()=>{for(let f of Rg.current)URL.revokeObjectURL(f)},[]);let GS=(0,E.useCallback)(async(f,T,N)=>{let V=++qr.current;nr(null);let z;if(j){if(z=await j(N,f),V!==qr.current)return}else z=URL.createObjectURL(N),Rg.current.push(z);Jp(T,{id:Eg(),image:z,size:pd(T)})},[pd,j,Jp]);(0,E.useEffect)(()=>{qr.current++,In(null),nr(null)},[Pl,n]);let kg=(0,E.useMemo)(()=>E0(je,$r.styleRules),[je,$r.styleRules]),[WS,Lg]=(0,E.useState)(null);(0,E.useEffect)(()=>{Lg(null)},[n]);let gs=dt!==void 0?dt:WS,Qp=(0,E.useCallback)(f=>{dt===void 0&&Lg(f),pn?.(f)},[dt,pn]),ba=(0,E.useMemo)(()=>k0(kg,gs),[kg,gs]),ao=(0,E.useMemo)(()=>ba.setAside.size>0?Gm(je,gs):null,[ba,je,gs]),XS=(0,E.useCallback)(f=>{let T=Or(f),N=T!==null&&ao?.size===1&&ao.has(T);Qp(N?null:{...gs,target:f.id})},[Qp,gs,ao]),{sourceOf:Lo}=ba,Dg=(0,E.useCallback)(f=>{let T=Lo(f);Pg(T)},[Pg,Lo]),Ng=(0,E.useCallback)(f=>yg(f&&Lo(f)),[yg,Lo]),Bg=(0,E.useCallback)((f,T)=>{let N=Lo(f);return M?.({binding:N,...T})===!0?(Zp.current=!0,!0):Ag(N)},[M,Ag,Lo]),Og=(0,E.useMemo)(()=>w?(f,T)=>w({binding:Lo(f),...T}):void 0,[w,Lo]),Ig=(0,E.useCallback)(f=>{if(us(f,"panel"),bn)return;let T=Ze.current,N=Or(f),V=N?An.current[N]:null;if(!T||!V)return;let z=f.cameraState;z?.position&&z?.target?(T.setPosition(z.position[0],z.position[1],z.position[2],!0),T.setTarget(z.target[0],z.target[1],z.target[2],!0)):T.fitToBox(V,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[us,Or,bn]);(0,E.useEffect)(()=>{_i()},[_i,je]);let zg=(0,E.useCallback)((f,T)=>{G2(T,fl.current),D?.(wo(f,T)),_i()},[_i,D]),qS=(0,E.useCallback)(f=>{Qc.current=new Set(f.map(T=>T.name)),Bp(T=>T+1),cd(f.map(T=>T.name)),a?.(f)},[cd,a]),$S=(0,E.useCallback)(f=>{is.current=f,fr.current?.invalidate()},[]),Ug=(0,E.useCallback)(f=>{En.current=f,mg(f),$f(F2(f));let T=ch(f);$w(T>Dl?T:null),qf(!1),Op(null),T>Dl&&Yf(`Preparing large model (${Math.round(T/1e6)}M triangles) \u2014 the first display can take a while on this device...`),R(!0),Z(zs(f)),ue(!1),Je(null),Wf(!1),r||(a&&a(o0(f)),cd(Tc(f))),k?.(f),b?.(P0(f)),_i()},[cd,_i,b,a,k,mg,r]),Fg=(0,E.useCallback)(f=>{da(!1),ua(!0),ue(!0),Je(f),_?.(f)},[_]),YS=(0,E.useCallback)(f=>{f.lengthComputable&&f.total>0&&Op(f.loaded/f.total*100),y?.(f)},[y]),Vg=(0,E.useCallback)((f,T,N)=>{if(!rt)return;let V={...ze,lighting:{...ze.lighting,lights:ze.lighting.lights.map(z=>z.id===f?{...z,position:T,...N?{rotation:N}:{}}:z)}};rt(V)},[ze,rt]);(0,E.useEffect)(()=>{let f=En.current;if(!Nr||!f){St(!1);return}let T=Object.entries(je);if(T.length===0){St(!1);return}let N=r?Qc.current:new Set(Object.keys(Fo(f).nodesById));if(!N||N.size===0){St(!1);return}let V=T.map(([se,pe])=>pe.modelObjectId??se).filter(se=>!N.has(se));St(V.length>0),os(V.length);let z=V.join(`
|
|
3690
|
-
|
|
3691
|
-
`);if(f.length>0&&T!==Hf.current){let N=f.slice(0,10).join(", "),V=f.length>10?` and ${f.length-10} more`:"";console.warn(`[react-immersive] ${f.length} action button(s) do nothing because ModelViewer has no onAction handler: ${N}${V}. ModelViewer itself handles ${Ul.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}Hf.current=T},[je,hn,A]);let eh=(0,E.useCallback)(async()=>{if(fe){await fe();return}let f=Ze.current;if(!f)return;let T=Yr.current;try{T?await d1(f,()=>f.setLookAt(T.position[0],T.position[1],T.position[2],T.target[0],T.target[1],T.target[2],!0)):await ms()}catch(N){console.error("Reset camera error:",N)}},[fe,ms]),RP=(0,E.useCallback)(()=>{ma(!1),Br(!0)},[]),kP=(0,E.useCallback)(()=>{Br(!1)},[]),KS=(0,E.useCallback)(()=>{Br(!1),ma(!0),setTimeout(()=>{eh()},100)},[eh]),ZS=(0,E.useCallback)((f,T)=>{zg(f,T)},[zg]),jg=1,JS=4,QS=.0015,e_=.1,t_=8,va=(0,E.useRef)(null),bs=(0,E.useRef)(!1),th=(0,E.useRef)([0,0]),hd=(0,E.useRef)([0,0]),md=(0,E.useRef)(1),Qr=(0,E.useRef)(null),fd=(0,E.useCallback)((f,T)=>{let N=Fe;if(!N)return;let V=Zn.current[N.objectKey]?.style?.material?.[N.textureKey],z=V?.path;if(!z)return;let se=V?.rotation??0,pe=Mi(N.textureKey),He=Gl(z,pe),it=es.current[N.objectKey],Te=Array.isArray(it)?it:it?[it]:[],Qe=Td[N.textureKey];for(let et of Te){let vn=et;Qe in vn&&(vn[Qe]=kd(vn.userData,N.textureKey,He,z,f,T,se))}fr.current?.invalidate()},[Fe]),n_=(0,E.useCallback)(f=>{if(!Fe)return;f.currentTarget.setPointerCapture?.(f.pointerId),va.current={x:f.clientX,y:f.clientY},bs.current=!1;let T=Zn.current[Fe.objectKey]?.style?.material?.[Fe.textureKey];if(th.current=T?.offset??[0,0],hd.current=th.current,md.current=T?.scale??1,Qr.current===null){let N=()=>{fr.current?.invalidate(),Qr.current=requestAnimationFrame(N)};Qr.current=requestAnimationFrame(N)}},[Fe]),nh=(0,E.useCallback)(f=>{if(!Fe||!va.current)return;let T=vi.current,N=T?.clientWidth||1,V=T?.clientHeight||1,z=f.clientX-va.current.x,se=f.clientY-va.current.y;if(!bs.current&&Math.hypot(z,se)<JS)return;bs.current=!0;let pe=-(z/N)*jg,He=se/V*jg,[it,Te]=th.current,Qe=[it+pe,Te+He];hd.current=Qe,fd(Qe,md.current),or(Fe.objectKey,et=>({...et,material:{...et?.material,[Fe.textureKey]:{...et?.material?.[Fe.textureKey],path:Zn.current[Fe.objectKey]?.style?.material?.[Fe.textureKey]?.path,offset:Qe}}}))},[Fe,fd,or]),El=(0,E.useCallback)(f=>{if(!Fe)return;f.target?.releasePointerCapture?.(f.pointerId),Qr.current!==null&&(cancelAnimationFrame(Qr.current),Qr.current=null);let T=bs.current,N=Fe;if(T){or(N.objectKey,V=>({...V,material:{...V?.material,[N.textureKey]:{...V?.material?.[N.textureKey],path:Zn.current[N.objectKey]?.style?.material?.[N.textureKey]?.path,offset:hd.current}}})),va.current=null,bs.current=!1;return}va.current=null,la(null)},[Fe,or]);(0,E.useEffect)(()=>{if(!Fe)return Qr.current!==null&&(cancelAnimationFrame(Qr.current),Qr.current=null),()=>{Qr.current!==null&&(cancelAnimationFrame(Qr.current),Qr.current=null)}},[Fe]),(0,E.useEffect)(()=>{let f=xi;if(!(!f||!Fe))return f.addEventListener("pointermove",nh),f.addEventListener("pointerup",El),f.addEventListener("pointercancel",El),()=>{f.removeEventListener("pointermove",nh),f.removeEventListener("pointerup",El),f.removeEventListener("pointercancel",El)}},[xi,Fe,nh,El]);let rh=(0,E.useCallback)(f=>{if(!Fe)return;f.preventDefault();let T=Fe,N=Math.exp(-f.deltaY*QS),V=Math.min(t_,Math.max(e_,md.current*N));md.current=V,fd(hd.current,V),or(T.objectKey,z=>({...z,material:{...z?.material,[T.textureKey]:{...z?.material?.[T.textureKey],path:Zn.current[T.objectKey]?.style?.material?.[T.textureKey]?.path,scale:V}}}))},[Fe,fd,or]);(0,E.useEffect)(()=>{let f=xi;if(!(!f||!Fe))return f.addEventListener("wheel",rh,{passive:!1}),()=>f.removeEventListener("wheel",rh)},[xi,Fe,rh]);let r_=(0,E.useCallback)(f=>{if(lg.current)return;if(Zp.current){Zp.current=!1;return}let T=On==="scene"&&hr==="Annotations";if(f.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let V=vi.current,z=Ze.current,se=z?.camera,pe=En.current;if(!V||!z||!se||!pe||!T&&!z.enabled)return;let He=V.getBoundingClientRect(),it=(f.clientX-He.left)/He.width*2-1,Te=-((f.clientY-He.top)/He.height)*2+1,Qe=new Tt.Raycaster;Qe.setFromCamera(new Tt.Vector2(it,Te),se);let et=Qe.intersectObject(pe,!0);if(et.length===0)return;if(!T){let{x:Gi,y:ah,z:sh}=et[0].point;z.setOrbitPoint(Gi,ah,sh);return}let vn=et[0],wn=vn.point,ys=pe.worldToLocal(vn.point.clone()),Rl=[0,0,1];if(vn.face){let Gi=vn.face.normal.clone().transformDirection(vn.object.matrixWorld).normalize();Rl=[Gi.x,Gi.y,Gi.z]}rd({worldPosition:[wn.x,wn.y,wn.z],localPosition:[ys.x,ys.y,ys.z],worldNormal:Rl,anchor:I2(vn),screenX:f.clientX-He.left,screenY:f.clientY-He.top}),id({title:"",description:""})},[On,hr]),Hg=(0,E.useCallback)(()=>{if(!gr||!ko.title.trim())return;od.current+=1;let T={id:od.current,worldPosition:gr.worldPosition,localPosition:gr.localPosition,worldNormal:gr.worldNormal,anchorNodeName:gr.anchor?.anchorNodeName,anchorLocalPosition:gr.anchor?.anchorLocalPosition,title:ko.title.trim(),description:ko.description},N=[...ji,T];rg(N),U?.(N),rd(null)},[gr,ko,ji,U]),ih=(0,E.useCallback)(()=>rd(null),[]),i_=(0,E.useCallback)(f=>{Hi(f)},[Hi]);if(Pn.status==="checking")return(0,L.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,L.jsx)(ya,{title:"Verifying License",message:"Checking your license key..."})});if(Pn.status==="invalid")return(0,L.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,L.jsx)(ya,{tone:"error",title:"Invalid License",message:Pn.isLocalDomain?Pn.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let Do=ds?wi(ds.objectId):null,oh=Do?je[Do]?.style?.material?.texture?.path:void 0,Gg=oh?Rd(oh)??oh:void 0,Wg=hs?Si?.offset??(Do?je[Do]?.style?.material?.texture?.offset:void 0):void 0,Xg=hs?Si?.rotationDegrees??(Do?((je[Do]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,qg=hs?Si?.isPositioning??!!(Do&&Fe?.objectKey===Do&&Fe?.textureKey==="texture"):!1,$g=hs?FS:void 0,Yg=hs?VS:void 0,Kg=hs?jS:void 0,o_=vi.current?.offsetWidth??600,a_=vi.current?.offsetHeight??400,s_=350,l_=290,c_=gr?Math.min(gr.screenX+12,o_-s_-8):0,d_=gr?Math.min(gr.screenY,a_-l_-8):0,u_=bt&&!!n&&!ee&&!Nr,vs=Xr&&(fa&&(Vp||Qf)||eg||!!nd),Zg=(vs?1:0)+(Ke?1:0),xs=f=>16+f*42+(ht&&f>Zg?Math.max(0,AS-34):0);return(0,L.jsxs)("div",{className:"ri-viewer",ref:Lr.rootRef,style:{background:Mp},children:[e.status!=="ready"&&(0,L.jsx)("div",{className:"ri-contextRecovery",role:"alert",children:(0,L.jsxs)("div",{className:"ri-contextRecovery__card",children:[(0,L.jsx)(Se.AlertTriangle,{size:24,"aria-hidden":"true"}),(0,L.jsx)("h2",{children:e.status==="rebuilding"?"Reloading viewer\u2026":"3D view interrupted"}),(0,L.jsx)("p",{children:e.status==="rebuilding"?"Rebuilding the 3D view. Please wait\u2026":"The graphics connection was interrupted. The viewer will rebuild when it returns, or you can reload it now."}),(0,L.jsxs)("button",{type:"button",onClick:e.reload,disabled:e.status==="rebuilding",children:[(0,L.jsx)(Se.RotateCcw,{size:16,"aria-hidden":"true"}),"Reload viewer"]})]})}),(0,L.jsxs)("div",{className:"ri-viewerLeft",ref:Xc,inert:e.status!=="ready",children:[ce?ce({isOpen:wg,selectedObject:Tl,currentAction:$c,onClose:_g,onAction:ud}):(0,L.jsx)(Jm,{isOpen:wg,selectedObject:Tl,currentAction:$c,onClose:_g,onAction:ud,renderActionExtra:f=>{if(f==="change-color"&&Dr)return(0,L.jsx)(Km,{inline:!0,colorPicker:Dr,onClose:Ir,itemMaterials:Ro,setItemMaterials:rs});if((f==="change-light-color"||f==="set-brightness")&&gi?.kind===f&&gi.objectId===Pl){let T=gi,N=T.target,V=N.type==="lights"?ze.lighting.lights.find(z=>z.id===N.lightIds[0])?.color??"#ffffff":$p(ps(N.objectKey).color);return(0,L.jsx)(Hb,{kind:T.kind,color:V,brightness:T.percent,onColorChange:z=>{if(N.type==="lights"){no(Object.fromEntries(N.lightIds.map(pe=>[pe,{color:z}])));return}let se=ps(N.objectKey);Al(N.objectKey,{emissive:z,emissiveIntensity:se.intensity>0?se.intensity:dd.current[N.objectKey]??1})},onBrightnessChange:z=>{if(mn({...T,percent:z}),N.type==="lights"){no(Object.fromEntries(N.lightIds.map(se=>[se,{intensity:(N.baseIntensity[se]??0)*(z/100)}])));return}Al(N.objectKey,{emissive:$p(ps(N.objectKey).color),emissiveIntensity:N.baseIntensity*(z/100)})},onClose:()=>mn(null)})}if((f==="add-text"||f==="add-image")&&Yn?.kind===f&&Yn.objectId===Pl){let T=Yn,N=wi(T.objectId);if(!N)return null;let V=f==="add-image";return(0,L.jsx)(Wb,{kind:f,decals:(je[N]?.decals??[]).filter(z=>!!z.image===V),activeId:T.activeId,error:Ja,moving:Er?.objectKey===N&&Er.decalId===T.activeId,defaultSize:pd(N),onSelect:z=>{qr.current++,In(null),nr(null),mr({...T,activeId:z})},onAddText:(z,se)=>Jp(N,{id:Eg(),text:z,color:se,size:pd(N)}),onAddImage:z=>{GS(T.objectId,N,z)},onChange:(z,se)=>ga(N,pe=>pe.map(He=>He.id===z?{...He,...se}:He)),onNudge:(z,se)=>{let pe=Zn.current[N],He=pe?.decals?.find(Qe=>Qe.id===z);if(!He)return;let it=An.current[pe.modelObjectId??N],Te=zd(it,Ze.current?.camera,He,se);if(!Te){In("No visible surface in that direction. Try another arrow or rotate the view.");return}In(null),nr(null),ga(N,Qe=>Qe.map(et=>et.id===z?{...et,...Te}:et))},onMove:z=>{qr.current++,je[N]?.decals?.find(pe=>pe.id===z)&&(In(null),nr(pe=>pe?.objectKey===N&&pe.decalId===z?null:{objectKey:N,decalId:z}))},onRemove:z=>{nr(null),ga(N,se=>se.filter(pe=>pe.id!==z)),mr({...T,activeId:null})},onClose:()=>{qr.current++,In(null),nr(null),mr(null)}})}return f==="change-material"&&ds?(0,L.jsx)(Zm,{inline:!0,triggerFileUpload:Cg,materialPopup:ds,textureUrl:Gg,clearTexture:Tg,offset:Wg,rotationDegrees:Xg,onOffsetChange:$g,onRotationChange:Yg,isPositioning:qg,onEndPositioning:Kg}):null}}),(0,L.jsxs)("div",{className:`ri-canvasArea ${cs?"ri-canvasArea--measuring":""} ${Vi?"":"ri-canvasArea--positioning"} ${F?"ri-canvasArea--moveMode":""}`,ref:Ap,tabIndex:q?0:void 0,onDoubleClick:r_,onPointerDown:f=>{if(q&&vi.current?.focus({preventScroll:!0}),Fe){n_(f);return}TS(f)},onClick:Fe?void 0:PS,onPointerMove:wS,onPointerLeave:pg,onWheel:pg,children:[Eo&&!r&&(Fe||OS)&&(0,L.jsx)("div",{className:"ri-moveZoomHint",role:"status",style:{position:"absolute",top:12,left:"50%",transform:"translateX(-50%)",zIndex:5,padding:"6px 12px",borderRadius:999,fontSize:12,fontWeight:500,color:"#fff",background:Fe?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:Fe?"Drag to move \xB7 Scroll to zoom \xB7 Click elsewhere to finish":"Double-click to move or zoom"}),Ce&&!Gf&&(0,L.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,L.jsx)(Se.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,L.jsx)("span",{children:Kn===1?"1 object binding doesn't match this model":`${Kn} object bindings don't match this model`}),(0,L.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:f=>{f.stopPropagation(),Wf(!0)},"aria-label":"Dismiss",children:(0,L.jsx)(Se.X,{size:12})})]}),Xf!==null&&!Yw&&(0,L.jsxs)("div",{className:`ri-largeModelBanner ${Ce&&!Gf?"ri-largeModelBanner--offset":""}`,children:[(0,L.jsx)(Se.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,L.jsxs)("span",{children:["Very large model (",Math.round(Xf/1e6),"M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the objects panel to select parts."]}),(0,L.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:f=>{f.stopPropagation(),qf(!0)},"aria-label":"Dismiss",children:(0,L.jsx)(Se.X,{size:12})})]}),$r.model.renderer==="uv-checker"&&vl.missing>0&&(0,L.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,L.jsx)(Se.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,L.jsxs)("span",{children:[vl.missing===vl.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${vl.missing} of ${vl.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),(0,L.jsx)("input",{ref:Qa,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:US}),(0,L.jsx)(Cs,{onError:e.fail,children:(0,L.jsxs)(Oh,{onRendererCreated:e.onRendererCreated,suspended:e.status!=="ready",camera:$,backgroundColor:tt,shadows:xe&&ze.shadows.enabled,sceneConfig:$r,selectedObjectRef:qp,hoveredObjectRef:IS,highlightOnHover:Tn,renderMode:xn,maxDpr:It,reduceGpuLoad:Cp,xrStore:fa,rendererCaptureRef:fr,preserveDrawingBuffer:zt,children:[(0,L.jsx)(Fh,{lightingConfig:ze.lighting,shadowConfig:ze.shadows,shadowsEnabled:xe,environmentRotation:ze.environment.rotation,environmentConfig:ze.environment,modelBounds:SS,objectBindings:je,nodeRefs:An}),$n&&ze.lighting.lights.map(f=>!f.visible||f.type==="none"||f.type==="hemisphere"||f.attachment?null:(0,L.jsx)(o1,{light:f,position:f.position,rotation:f.rotation,color:f.color,intensity:f.intensity,visible:f.visible,onPositionChange:T=>Vg(f.id,T,f.rotation),onRotationChange:T=>Vg(f.id,f.position,T),onDraggingChange:Rr},f.id)),(0,L.jsx)(Xm,{setAside:ba.setAside,nodeRefs:An}),(0,L.jsx)(Ym,{section:ze.section??Pa,box:Hp,modelRef:En,showHandle:qe,onPositionChange:f=>Co({position:f}),onDraggingChange:To}),(0,L.jsx)(zh,{controlsRef:Ze,onCameraChange:ZS,cameraLimits:le,controllerType:zi,onPointerLockExit:()=>bi("orbit")}),(0,L.jsx)(j2,{enabled:yn||cs||fs||zi==="pointerLock"?!1:Pe??ze.model.autoRotate??!1,speed:at??ze.model.autoRotateSpeed??1,controlsRef:Ze}),ie&&!yn&&(0,L.jsx)(op.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{Ze.current?.update(0),fr.current?.invalidate()},children:(0,L.jsx)(op.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),F&&qp&&ir&&(0,L.jsx)(df,{node:qp,space:H,onTransformChange:zS,onDraggingChange:f=>{Rr(f),Cl&&S?.(Cl,f)}},ir),fs&&(0,L.jsx)(vv,{target:fs,nodes:An,controls:Ze}),(0,L.jsx)(bd,{onLoadError:Fg,children:(0,L.jsx)(E.Suspense,{fallback:null,children:(()=>{let f=(0,L.jsxs)(L.Fragment,{children:[r?(0,L.jsx)(Rm,{url:r,rotation:$r.model.rotation,errorTarget:i,cacheSize:o,decoderConfig:jc,objectBindings:ba.bindings,itemMaterials:Ro,sceneConfig:$r,selectedItem:ir,panelHoveredItem:d??ml,highlightOnHover:Tn,onItemClick:Dg,onItemHover:Ng,onItemDoubleClick:Bg,onItemContextMenu:Og,onObjectCatalog:qS,onTilesetBounds:$S,onModelLoaded:Ug,onLoadError:Fg,nodeRefsOut:An,onNodeRefsChange:Wc,materialRefsOut:es,explodeFactor:td,suspendBindingTransforms:Ao}):(0,L.jsx)(qh,{url:n,modelFormat:s,objectBindings:ba.bindings,selectedItem:ir,itemMaterials:Ro,onItemClick:Dg,onItemDoubleClick:Bg,onItemContextMenu:Og,onItemHover:Ng,onModelLoaded:Ug,onAnimationsReady:W,nodeRefsOut:An,onNodeRefsChange:Wc,materialRefsOut:es,panelHoveredItem:d??ml,sceneConfig:$r,zoomOnSelected:Tr,highlightOnHover:Tn,decoderConfig:jc,onLoadProgress:YS,explodeFactor:td,suspendBindingTransforms:Ao,pulses:ba.pulses}),(0,L.jsx)(Lm,{annotations:ji,sceneConfig:ze,activeAnnotation:_l,popupRef:ns,canvasRootRef:vi,worldPositionsRef:rr,modelLoaded:Nr,onAnnotationClick:i_,onCloseAnnotation:wl,hideCloseButton:yl,showAnnotationOnHover:Pr}),(0,L.jsx)(U2,{annotation:sd,enabled:yl&&!yn,controlsRef:Ze,offsetRef:pl}),yn?(0,L.jsx)(Sd,{controlsRef:Ze,sceneRef:En,config:yn.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:yn.onStarted,onFinished:yn.onFinished,onProgress:tS},"video-export"):pa&&(0,L.jsx)(Sd,{controlsRef:Ze,sceneRef:En,config:pa,playing:ha&&!cs,resetOnPlay:Jw,onFinished:()=>{Br(!1),ma(!1)},onUserInteract:()=>{Br(!1)}},"cinematic-preview"),ht&&(0,L.jsx)(Dm,{points:cg,unit:Hn,box:Hp,showDimensions:hg,tool:dg,areaClosed:ug,snapPreview:cs?yS:null})]});return fa?(0,L.jsx)(h0,{ref:nS,box:Hp,scaleMode:to,onARStateChange:aS,children:f}):f})()})},r??n),we&&(0,L.jsx)(E.Suspense,{fallback:null,children:we})]})}),ae&&(0,L.jsx)("div",{className:"ri-overlay",children:ae}),bt&&n&&ee&&(()=>{let f=Db(Ee,r||n,r?void 0:s);return(0,L.jsx)("div",{className:"ri-loadError",role:"alert",children:(0,L.jsxs)("div",{className:"ri-loadError__card",children:[(0,L.jsxs)("div",{className:"ri-loadError__header",children:[(0,L.jsx)(Se.AlertTriangle,{size:16,"aria-hidden":"true"}),(0,L.jsx)("span",{className:"ri-loadError__title",children:f.title})]}),(0,L.jsx)("p",{className:"ri-loadError__detail",children:f.detail}),(0,L.jsx)("p",{className:"ri-loadError__source",children:r||n}),f.technical&&(0,L.jsx)("p",{className:"ri-loadError__technical",children:f.technical})]})})})(),(0,L.jsx)(Ku,{visible:u_,message:Kw,progress:Zw??void 0}),vs&&(0,L.jsxs)("div",{className:"ri-xrTools",style:{top:`${xs(0)}px`},children:[!Vp&&eg&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:oS,title:"View this model in AR with Apple Quick Look",children:[(0,L.jsx)(Se.Box,{size:16}),"View in AR"]}),nd&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:iS,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":tg,children:[(0,L.jsx)(Se.QrCode,{size:16}),(0,L.jsx)("span",{children:"Open on phone"})]}),fa&&Vp&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>fa.enterAR().catch(f=>{console.error("Failed to enter AR session:",f)}),title:"View this model in your space",children:[(0,L.jsx)(Se.Smartphone,{size:16}),(0,L.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,L.jsx)("span",{children:"AR"})]}),fa&&Qf&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>fa.enterVR().catch(f=>{console.error("Failed to enter VR session:",f)}),title:"View this model in VR",children:[(0,L.jsx)(Se.RectangleGoggles,{size:16}),(0,L.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,L.jsx)("span",{children:"VR"})]})]}),rS,tg&&nd&&(0,L.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:f=>{f.target===f.currentTarget&&ng()},children:(0,L.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,L.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:ng,"aria-label":"Close phone handoff",children:(0,L.jsx)(Se.X,{size:18})}),(0,L.jsx)(Se.Smartphone,{size:22,"aria-hidden":"true"}),(0,L.jsx)("h2",{id:"ri-mobileHandoffTitle",children:"View in AR"}),(0,L.jsx)("p",{children:"Scan the code and choose AR."}),(0,L.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,L.jsx)(u1.QRCodeSVG,{value:nd,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),Ke&&(0,L.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${xs(vs?1:0)}px`},children:(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${ro?"ri-measureButton--active":""}`,onClick:()=>dl(f=>!(f??Po)),title:ro?"Disable UV checker":"Enable UV checker","aria-label":ro?"Disable UV checker":"Enable UV checker","aria-pressed":ro,children:(0,L.jsx)(Se.Grid3X3,{size:16})})}),ht&&(0,L.jsx)(Nm,{top:xs(Zg),active:cs,disabled:!!yn,tool:dg,snap:vS,pointCount:cg.length,areaClosed:ug,error:mS,showDimensions:hg,onToggle:()=>{Br(!1),MS()},onTool:fS,onSnap:xS,onUndo:gS,onClear:_S,onFinishArea:bS,onDimensions:CS,onHeight:ES}),wt&&(0,L.jsxs)("div",{className:"ri-explodeTools",style:{top:`${xs((vs?1:0)+(Ke?1:0)+(ht?1:0))}px`},children:[(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${Ip||td>0?"ri-measureButton--active":""}`,onClick:()=>Zf(f=>!f),title:"Exploded view","aria-pressed":Ip,children:(0,L.jsx)(Se.Expand,{size:16})}),Ip&&(0,L.jsx)("div",{className:"ri-explodeSlider",onPointerDown:f=>f.stopPropagation(),children:(0,L.jsx)("input",{type:"range",min:0,max:100,value:Math.round(td*100),onChange:f=>Kf(Number(f.target.value)/100),"aria-label":"Explode amount"})})]}),qe&&(0,L.jsxs)("div",{className:"ri-sectionTools",style:{top:`${xs((vs?1:0)+(Ke?1:0)+(ht?1:0)+(wt?1:0))}px`},children:[(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${yi.enabled?"ri-measureButton--active":""}`,onClick:()=>Co({enabled:!yi.enabled}),title:yi.enabled?"Remove section cut":"Section cut","aria-label":"Section cut","aria-pressed":yi.enabled,children:(0,L.jsx)(Se.Slice,{size:16})}),yi.enabled&&(0,L.jsxs)("div",{className:"ri-sectionPanel",onPointerDown:f=>f.stopPropagation(),children:[(0,L.jsx)("div",{className:"ri-sectionAxes",role:"group","aria-label":"Section axis",children:Wd.map(f=>(0,L.jsx)("button",{type:"button",className:`ri-sectionAxis ${yi.axis===f?"ri-sectionAxis--active":""}`,"aria-pressed":yi.axis===f,onClick:()=>Co({axis:f}),children:f.toUpperCase()},f))}),(0,L.jsx)("input",{type:"range",min:0,max:100,value:Math.round(yi.position*100),onChange:f=>Co({position:Number(f.target.value)/100}),"aria-label":"Section position"}),(0,L.jsx)("button",{type:"button",className:`ri-sectionAxis ${yi.flip?"ri-sectionAxis--active":""}`,"aria-pressed":yi.flip,"aria-label":"Keep the other side",title:"Keep the other side",onClick:()=>Co({flip:!yi.flip}),children:(0,L.jsx)(Se.FlipVertical2,{size:14})})]})]}),pa&&(0,L.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${xs((vs?1:0)+(Ke?1:0)+(ht?1:0)+(wt?1:0)+(qe?1:0))}px`},children:[(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${ha?"ri-measureButton--active":""}`,disabled:!!yn||cs,onClick:()=>{ha?Br(!1):(ma(!1),Br(!0))},title:ha?"Pause cinematic":"Play cinematic","aria-pressed":ha,children:ha?(0,L.jsx)(Se.Pause,{size:16}):(0,L.jsx)(Se.Play,{size:16})}),ha&&(0,L.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:KS,title:"Stop cinematic and reset camera",children:(0,L.jsx)(Se.Square,{size:16})})]}),yn&&(0,L.jsx)("div",{className:"ri-recordingOverlay",onPointerDown:f=>f.stopPropagation(),children:(0,L.jsxs)("div",{className:"ri-isolationPill",role:"status","aria-live":"polite",children:[(0,L.jsxs)("span",{className:"ri-isolationPill__label",children:["Recording video \xB7 ",eS,"%"]}),(0,L.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:Fp,children:"Cancel"})]})}),(ag||fs||ur&&ao)&&(0,L.jsxs)("div",{className:`ri-bottomStack ${sg?"ri-bottomStack--aboveButtons":""}`,children:[fs&&(0,L.jsxs)("div",{className:"ri-isolationPill",role:"status",onPointerDown:f=>f.stopPropagation(),children:[(0,L.jsx)("span",{className:"ri-isolationPill__label",children:"Drag the decal on the object. Release to save; Escape to cancel."}),(0,L.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:fs.onCancel,children:"Cancel"})]}),ur&&ao&&(0,L.jsxs)("div",{className:"ri-isolationPill",onPointerDown:f=>f.stopPropagation(),children:[(0,L.jsx)("span",{className:"ri-isolationPill__label",children:ao.size===1?`Isolated: ${(()=>{let[f]=ao;return je[f]?.label??f})()}`:`Isolated: ${ao.size} objects`}),(0,L.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:()=>Qp(null),children:"Show all"})]}),ag&&(0,L.jsx)("div",{className:"ri-variantPicker",role:"group","aria-label":"Material variants",onPointerDown:f=>f.stopPropagation(),children:I.map(f=>{let T=ze.model.materialVariant===f;return(0,L.jsx)("button",{type:"button",className:`ri-variantPicker__option ${T?"ri-variantPicker__option--active":""}`,"aria-pressed":T,onClick:()=>Za(f),children:f},f)})})]}),sg&&(0,L.jsxs)("div",{className:"ri-buttonContainer",children:[(0,L.jsx)("div",{className:"ri-tourControls",children:tn&&fn.length>0&&(0,L.jsx)(L.Fragment,{children:yl?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)("button",{className:"ri-tourButton",onClick:cS,disabled:og||fn.length===0||Zr<=0,title:"Previous annotation",children:[(0,L.jsx)(Se.ChevronLeft,{size:16}),(0,L.jsx)("span",{children:"Prev"})]}),(0,L.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:uS,title:"Stop guided tour",children:(0,L.jsx)(Se.Square,{size:16})}),(0,L.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:dS,disabled:og||fn.length===0,title:"Next annotation",children:[(0,L.jsx)("span",{children:"Next"}),(0,L.jsx)(Se.ChevronRight,{size:16})]})]}):(0,L.jsx)("button",{className:"ri-navButtonSingle",onClick:lS,disabled:fn.length===0,title:"Start guided tour",children:"Guided Tour"})})}),(0,L.jsxs)("div",{className:"mv-rightControls",children:[Ie&&Lr.supported&&(0,L.jsxs)("div",{className:"mv-fullscreenWrapper",children:[Lr.error&&(0,L.jsx)("div",{className:"mv-fullscreenError",role:"alert",children:Lr.error}),(0,L.jsx)("button",{type:"button",className:"mv-fullscreenButton",onClick:()=>{Lr.toggle()},disabled:Lr.pending||!!yn,title:Lr.active?"Exit fullscreen":"Enter fullscreen","aria-label":Lr.active?"Exit fullscreen":"Enter fullscreen","aria-pressed":Lr.active,children:Lr.active?(0,L.jsx)(Se.Minimize,{}):(0,L.jsx)(Se.Maximize,{})})]}),un&&(0,L.jsx)("button",{className:"mv-resetButton",onClick:eh,disabled:!!yn,title:"Reset camera view",children:(0,L.jsx)(Se.RotateCcw,{})}),(0,L.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:f=>f.stopPropagation(),children:[Ii&&(0,L.jsxs)("div",{className:"mv-controllersMenu",children:[(0,L.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${zi==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>bi("orbit"),children:"Orbit Control"}),(0,L.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${zi==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>bi("pointerLock"),children:"Point Lock"})]}),(0,L.jsx)("button",{className:"mv-controllersButton",onClick:()=>Hc(f=>!f),title:"Camera controller","aria-label":"Camera controller settings",disabled:!!yn,children:(0,L.jsx)(Se.Orbit,{size:15})})]}),pt&&(0,L.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:f=>f.stopPropagation(),children:[RS&&(0,L.jsxs)("div",{className:"mv-downloadMenu",children:[(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:LS,disabled:Gp||!!yn||!En.current,children:[(0,L.jsx)(Se.Box,{size:14}),"Download GLB"]}),(0,L.jsx)("div",{className:"mv-downloadMenuDivider"}),zt&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:DS,disabled:!!yn||!En.current,children:[(0,L.jsx)(Se.Camera,{size:14}),"Download PNG"]}),(0,L.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:NS,disabled:!!yn||!En.current,children:[(0,L.jsx)(Se.FileImage,{size:14}),"Download UV Layout"]}),(0,L.jsx)("div",{className:"mv-downloadMenuDivider"}),(0,L.jsxs)("label",{className:"mv-downloadMenuItem",children:["Video format",(0,L.jsxs)("select",{"aria-label":"Video format",value:Wp,onChange:f=>BS(f.target.value),children:[(0,L.jsx)("option",{value:"auto",children:"Auto"}),(0,L.jsx)("option",{value:"webm",disabled:!wa("webm"),children:"WebM"}),(0,L.jsx)("option",{value:"mp4",disabled:!wa("mp4"),children:"MP4"})]})]}),(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{gg("turntable")},disabled:!!yn||!Nr||!Vi||Kr||!wa(Wp),children:[(0,L.jsx)(Se.Play,{size:14}),"Record turntable video"]}),pa&&(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{gg("cinematic")},disabled:!!yn||!Nr||!Vi||Kr||!wa(Wp),children:[(0,L.jsx)(Se.Play,{size:14}),"Record cinematic video"]}),!wa()&&(0,L.jsx)("div",{className:"mv-downloadMenuNotice",role:"status",children:"Video recording is not supported in this browser."}),bg&&(0,L.jsx)("div",{className:"mv-downloadMenuNotice",role:"alert",children:bg}),fg&&(0,L.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:fg})]}),(0,L.jsx)("button",{className:"mv-downloadButton",onClick:kS,disabled:Gp||!!yn||!En.current,title:"Download options",children:Gp?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)("span",{className:"mv-downloadButton__spinner"}),"Exporting\u2026"]}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(Se.Download,{size:15}),"Download"]})})]})]})]}),gr&&(0,L.jsxs)("div",{className:"ri-annotationPopup",style:{left:c_,top:d_},onPointerDown:f=>f.stopPropagation(),onClick:f=>f.stopPropagation(),children:[(0,L.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:ko.title,onChange:f=>id(T=>({...T,title:f.target.value})),onKeyDown:f=>{f.key==="Enter"&&Hg(),f.key==="Escape"&&ih()}}),(0,L.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:ko.description,onChange:f=>id(T=>({...T,description:f.target.value})),onKeyDown:f=>{f.key==="Escape"&&ih()},rows:5}),(0,L.jsxs)("div",{className:"ri-annotationActions",children:[(0,L.jsx)("button",{onClick:Hg,className:`ri-annotationOkBtn ${ko.title.trim()?"":"disabled"}`,disabled:!ko.title.trim(),children:"OK"}),(0,L.jsx)("button",{onClick:ih,className:"ri-annotationCancelBtn",children:"Cancel"}),(0,L.jsx)("div",{className:"ri-annotationIcons"})]})]})]}),ce&&Dr&&(0,L.jsx)(Km,{colorPicker:Dr,onClose:Ir,itemMaterials:Ro,setItemMaterials:rs}),ce&&ds&&(0,L.jsx)(Zm,{triggerFileUpload:Cg,materialPopup:ds,textureUrl:Gg,clearTexture:Tg,offset:Wg,rotationDegrees:Xg,onOffsetChange:$g,onRotationChange:Yg,isPositioning:qg,onEndPositioning:Kg})]}),he&&(0,L.jsx)("div",{className:"ri-viewerRight",inert:e.status!=="ready",children:Le?Le({objectBindings:je,onAction:ud,onFocus:Ig,onHover:Yc}):(0,L.jsx)(Qm,{objectBindings:je,onAction:ud,onFocus:Ig,onHover:Yc,isolatedKeys:ao,onIsolate:ur?XS:void 0})}),Ot&&(0,L.jsx)(_0,{controlsRef:Ze,enabled:e.status==="ready",opacity:de,moveSensitivity:Cr,position:dr})]})}var Xn=require("react"),p1={currentClip:null,isPlaying:!1,speed:1,time:0,duration:0,active:[]};function h1(){let e=(0,Xn.useRef)(null),t=(0,Xn.useRef)(null),[n,r]=(0,Xn.useState)([]),[i,o]=(0,Xn.useState)([]),[a,s]=(0,Xn.useState)(p1);(0,Xn.useEffect)(()=>()=>{t.current?.()},[]);let l=(0,Xn.useCallback)(v=>{t.current?.(),e.current=v,r(v.clips),o(v.clipDetails??v.clips.map(M=>({sourceName:M,duration:0}))),s(v.getState?.()??p1),t.current=v.subscribe?.(s)??null},[]),c=(0,Xn.useCallback)(v=>{let M=e.current;M&&(v(M),!M.subscribe&&M.getState&&s(M.getState()))},[]),p=(0,Xn.useCallback)((v,M)=>c(w=>w.play(v,M)),[c]),u=(0,Xn.useCallback)(v=>c(M=>M.pause(v)),[c]),d=(0,Xn.useCallback)(v=>c(M=>M.stop(v)),[c]),m=(0,Xn.useCallback)((v,M)=>c(w=>w.setSpeed(v,M)),[c]),g=(0,Xn.useCallback)((v,M)=>c(w=>w.seek?.(v,M)),[c]);return{clips:n,clipDetails:i,...a,play:p,pause:u,stop:d,setSpeed:m,seek:g,handleAnimationsReady:l}}var X2="react-immersive:binding-builder";var el="session",Wa="model",tl="textures",Ac="current";var Ga=null;function sp(){return Ga||(Ga=new Promise((e,t)=>{if(typeof indexedDB>"u"){t(new Error("IndexedDB is not available in this environment."));return}let n=indexedDB.open(X2,2);n.onupgradeneeded=()=>{let r=n.result;r.objectStoreNames.contains(el)||r.createObjectStore(el),r.objectStoreNames.contains(Wa)||r.createObjectStore(Wa),r.objectStoreNames.contains(tl)||r.createObjectStore(tl)},n.onsuccess=()=>{let r=n.result;r.onversionchange=()=>{r.close(),Ga=null},e(r)},n.onerror=()=>t(n.error??new Error("Failed to open IndexedDB."))}),Ga.catch(()=>{Ga=null}),Ga)}function lp(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 pf(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error??new Error("IndexedDB request failed."))})}function ap(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function q2(e){if(!ap(e)||e.version!==1)return!1;let t=e.model;return typeof e.savedAt=="number"&&ap(e.bindings)&&ap(e.sceneConfig)&&ap(t)&&typeof t.name=="string"&&(t.kind==="file"&&typeof t.key=="string"||t.kind==="url"&&typeof t.url=="string")}async function m1(e,t){let n=await sp(),r={...e,version:1,savedAt:Date.now()},i=n.transaction([el,Wa],"readwrite"),o=lp(i);if(i.objectStore(el).put(r,Ac),r.model.kind==="file"&&t){let a={key:r.model.key,blob:t,name:t.name,type:t.type,lastModified:t.lastModified};i.objectStore(Wa).put(a,Ac)}else r.model.kind==="url"&&i.objectStore(Wa).delete(Ac);return await o,r}async function f1(){let t=(await sp()).transaction([el,Wa],"readonly"),n=lp(t),[r,i]=await Promise.all([pf(t.objectStore(el).get(Ac)),pf(t.objectStore(Wa).get(Ac))]);return await n,q2(r)?r.model.kind==="url"?{session:r,file:null}:!i||i.key!==r.model.key?null:{session:r,file:new File([i.blob],i.name,{type:i.type,lastModified:i.lastModified})}:null}async function hf(e,t){let r=(await sp()).transaction(tl,"readwrite"),i=lp(r),o={blob:t,name:t.name,type:t.type,savedAt:Date.now()};r.objectStore(tl).put(o,e),await i}async function Ec(e){let n=(await sp()).transaction(tl,"readonly"),r=lp(n),i=await pf(n.objectStore(tl).get(e));return await r,i?new File([i.blob],i.name,{type:i.type,lastModified:i.savedAt}):null}var gp=require("react");var C1=require("react"),ta=require("lucide-react"),up=require("react-colorful");var Ni=require("react"),v1=require("react-dom"),cp=require("lucide-react"),dp=require("react-colorful");function Qo(e){let t=e.replace("#","").match(/.{2}/g).map(r=>parseInt(r,16)/255).map(r=>r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var g1=require("react");function b1(e,t,n){(0,g1.useEffect)(()=>{if(!n)return;let r=Array.isArray(e)?e:[e],i=o=>{let a=o.target;r.some(l=>l.current?.contains(a))||t()};return document.addEventListener("pointerdown",i,!0),()=>{document.removeEventListener("pointerdown",i,!0)}},[e,t,n])}var Re=require("react/jsx-runtime");function Rc({anchorRef:e,onClose:t,children:n}){let r=(0,Ni.useRef)(null),[i,o]=(0,Ni.useState)(null);return b1([r,e],t,!0),(0,Ni.useLayoutEffect)(()=>{let a=e.current;if(!a)return;let s=a.getBoundingClientRect(),l=222,c=8,p=Math.min(Math.max(s.right-l,c),window.innerWidth-l-c),u=Math.min(s.bottom+6,window.innerHeight-200);o({top:u,left:p})},[e]),i?(0,v1.createPortal)((0,Re.jsx)("div",{ref:r,className:"se-colorPickerPopover",style:{position:"fixed",top:i.top,left:i.left},children:n}),document.body):null}function $2(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 So({title:e,children:t}){return(0,Re.jsxs)("section",{className:"se-section",children:[(0,Re.jsx)("h3",{className:"se-sectionTitle",children:e}),(0,Re.jsx)("div",{className:"se-sectionBody",children:t})]})}function Ct({title:e,open:t,onToggle:n,trailing:r,children:i,disabled:o,tooltip:a}){let s=a?`${a}`:e;return(0,Re.jsxs)("section",{className:"se-panel",children:[(0,Re.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,title:s,children:[(0,Re.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Re.jsx)(cp.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Re.jsx)("span",{className:"se-panelTitle",children:e}),a?(0,Re.jsx)("span",{className:"se-panelHelp",title:s,"aria-label":s,role:"img",onClick:l=>l.stopPropagation(),children:(0,Re.jsx)(cp.Info,{size:13})}):null]}),r?(0,Re.jsx)("span",{className:"se-panelTrailing",onClick:l=>l.stopPropagation(),children:r}):null]}),t?(0,Re.jsx)("div",{className:"se-panelBody",style:o?{opacity:.45,pointerEvents:"none"}:void 0,children:i}):null]})}function Lt({checked:e,onChange:t,label:n}){return(0,Re.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Re.jsx)("input",{type:"checkbox",checked:e,onChange:r=>t(r.target.checked)}),(0,Re.jsx)("span",{className:"se-switchTrack",children:(0,Re.jsx)("span",{className:"se-switchThumb"})})]})}function J({label:e,value:t,min:n,max:r,step:i,formatValue:o,onChange:a,disabled:s=!1}){return(0,Re.jsxs)("label",{className:`se-field ${s?"se-field--disabled":""}`,children:[(0,Re.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,Re.jsx)("span",{className:"se-fieldValue",children:o?o(t):t})]}),(0,Re.jsx)("input",{className:"se-slider",type:"range",min:n,max:r,step:i,value:t,onChange:l=>a(Number(l.target.value)),disabled:s})]})}function Pt({label:e,checked:t,onChange:n}){return(0,Re.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Re.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Re.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:r=>n(r.target.checked)})]})}function Hr({label:e,value:t,options:n,onChange:r}){return(0,Re.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Re.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Re.jsx)("select",{className:"se-select",value:t,onChange:i=>r(i.target.value),children:n.map(i=>(0,Re.jsx)("option",{value:i,children:$2(i)},i))})]})}function _r({label:e,value:t,onChange:n}){let[r,i]=(0,Ni.useState)(!1),o=(0,Ni.useRef)(null);return(0,Re.jsxs)("div",{className:"se-field",children:[(0,Re.jsxs)("div",{className:"se-fieldInline",children:[(0,Re.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Re.jsx)("span",{ref:o,style:{display:"inline-flex"},children:(0,Re.jsx)(dp.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>i(a=>!a),style:{background:t,color:Qo(t)},color:t,onChange:n})})]}),r?(0,Re.jsx)(Rc,{anchorRef:o,onClose:()=>i(!1),children:(0,Re.jsx)(dp.HexColorPicker,{color:t,onChange:n})}):null]})}function x1({value:e,min:t,max:n,step:r,onChange:i}){let[o,a]=(0,Ni.useState)(String(e)),s=(0,Ni.useRef)(!1);return(0,Ni.useLayoutEffect)(()=>{s.current||a(String(e))},[e]),(0,Re.jsx)("input",{type:"number",className:"se-numberInput",min:t,max:n,step:r,value:o,onFocus:()=>{s.current=!0},onChange:l=>{let c=l.target.value;a(c),c!==""&&c!=="-"&&!Number.isNaN(Number(c))&&i(Number(c))},onBlur:()=>{s.current=!1,a(String(e))}})}function ea({label:e,value:t,min:n,max:r,step:i,onChange:o}){return(0,Re.jsxs)("div",{className:"se-field",children:[(0,Re.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Re.jsx)("div",{className:"se-vectorRow",children:["X","Y","Z"].map((s,l)=>(0,Re.jsxs)("label",{className:"se-vectorAxis",children:[(0,Re.jsx)("span",{children:s}),(0,Re.jsx)(x1,{value:t[l],min:n,max:r,step:i,onChange:c=>{let p=[...t];p[l]=c,o(p)}})]},s))})]})}function Xa({label:e,value:t,min:n,max:r,step:i,onChange:o}){return(0,Re.jsxs)("div",{className:"se-field",children:[(0,Re.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Re.jsx)("div",{className:"se-vectorRow",children:["X","Y"].map((s,l)=>(0,Re.jsxs)("label",{className:"se-vectorAxis",children:[(0,Re.jsx)("span",{children:s}),(0,Re.jsx)(x1,{value:t[l],min:n,max:r,step:i,onChange:c=>{let p=[...t];p[l]=c,o(p)}})]},s))})]})}var y1={free:0,starter:1,growth:2};function w1(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function Bi(e,t){return y1[e]>=y1[t]}var S1={free:"Free",starter:"Starter",growth:"Growth"};var _1=require("lucide-react");var kc=require("react/jsx-runtime");function qn({requiredTier:e,feature:t}){return(0,kc.jsxs)("div",{className:"bb-tierLock",children:[(0,kc.jsx)(_1.Lock,{size:16}),(0,kc.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",S1[e]," plan or higher."]})]})}var Q=require("react/jsx-runtime"),Y2=["lit","unlit","normals"],K2=["color","image","environment"];function M1(e){let t=e%360;return t<0?t+360:t}function nl({title:e,open:t,onToggle:n,children:r,trailing:i}){return(0,Q.jsxs)("section",{className:"se-panel",children:[(0,Q.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:[(0,Q.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Q.jsx)(ta.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Q.jsx)("span",{className:"se-panelTitle",children:e})]}),i?(0,Q.jsx)("span",{className:"se-panelTrailing",onClick:o=>o.stopPropagation(),children:i}):null]}),t?(0,Q.jsx)("div",{className:"se-panelBody",children:r}):null]})}function mf({config:e,onChange:t,materialVariants:n=[]}){let{model:r,camera:i,wireframe:o,background:a,environment:s}=e,{tier:l}=Sr(),c=Bi(l,"starter"),[p,u]=(0,C1.useState)({general:!0,camera:!0,autoRotate:!1,section:!1,wireframe:!1,background:!1}),d=b=>u(_=>({..._,[b]:!_[b]})),m=b=>t({...e,model:b}),g=b=>t({...e,camera:b}),v=e.section??Pa,M=b=>t({...e,section:{...v,...b}}),w=b=>t({...e,wireframe:b}),x=b=>t({...e,background:b}),S=b=>t({...e,environment:b}),k=b=>{S({...s,source:"preset",preset:b})};return(0,Q.jsxs)("div",{className:"se-generalContent",children:[(0,Q.jsxs)(nl,{title:"General",open:p.general,onToggle:()=>d("general"),children:[(0,Q.jsxs)("div",{className:"se-field",children:[(0,Q.jsxs)("div",{className:"se-fieldLabel",children:[(0,Q.jsx)("span",{children:"Straighten model"}),(0,Q.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>m({...r,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,Q.jsx)(ta.RotateCcw,{size:16})})]}),(0,Q.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((b,_)=>(0,Q.jsxs)("div",{className:"se-axisStepper",children:[(0,Q.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let y=[...r.rotation];y[_]=M1(y[_]-90),m({...r,rotation:y})},"aria-label":`Rotate ${b} axis backward`,children:(0,Q.jsx)(ta.ChevronLeft,{size:16})}),(0,Q.jsx)("span",{className:"se-axisStepperLabel",children:b}),(0,Q.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let y=[...r.rotation];y[_]=M1(y[_]+90),m({...r,rotation:y})},"aria-label":`Rotate ${b} axis forward`,children:(0,Q.jsx)(ta.ChevronRight,{size:16})})]},b))})]}),(0,Q.jsx)(ea,{label:"Rotation",value:r.rotation,min:0,max:360,step:1,onChange:b=>m({...r,rotation:b})}),(0,Q.jsxs)("div",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,Q.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:Hv.map(b=>(0,Q.jsx)("button",{type:"button",className:`se-segmentedOption ${r.renderer===b?"se-segmentedOption--active":""}`,onClick:()=>m({...r,renderer:b}),children:b==="uv-checker"?"UV CHECKER":b.toUpperCase()},b))})]}),(0,Q.jsx)(Hr,{label:"Shading",value:r.shading,options:Y2,onChange:b=>m({...r,shading:b})}),n.length>0?(0,Q.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Material variant"}),(0,Q.jsxs)("select",{className:"se-select",value:r.materialVariant??"",onChange:b=>m({...r,materialVariant:b.target.value||null}),children:[(0,Q.jsx)("option",{value:"",children:"Model default"}),n.map(b=>(0,Q.jsx)("option",{value:b,children:b},b)),r.materialVariant&&!n.includes(r.materialVariant)?(0,Q.jsxs)("option",{value:r.materialVariant,children:[r.materialVariant," (not in this model)"]}):null]})]}):null]}),(0,Q.jsx)(nl,{title:"Camera",open:p.camera,onToggle:()=>d("camera"),children:(0,Q.jsx)(J,{label:"Field Of View",value:i.fieldOfView,min:20,max:100,step:.1,formatValue:b=>`${b.toFixed(3)}\xB0`,onChange:b=>g({...i,fieldOfView:b})})}),(0,Q.jsx)(nl,{title:"Auto Rotate",open:p.autoRotate,onToggle:()=>d("autoRotate"),trailing:(0,Q.jsxs)("label",{className:"se-switch","aria-label":"Toggle auto rotate",children:[(0,Q.jsx)("input",{type:"checkbox",checked:r.autoRotate??!1,onChange:b=>m({...r,autoRotate:b.target.checked})}),(0,Q.jsx)("span",{className:"se-switchTrack",children:(0,Q.jsx)("span",{className:"se-switchThumb"})})]}),children:r.autoRotate?(0,Q.jsx)(J,{label:"Rotation Speed",value:r.autoRotateSpeed??1,min:.1,max:3,step:.1,formatValue:b=>`${b.toFixed(1)}x`,onChange:b=>m({...r,autoRotateSpeed:b})}):(0,Q.jsx)("div",{className:"se-placeholder",children:"Enable auto rotate to adjust its speed."})}),(0,Q.jsx)(nl,{title:"Section Cut",open:p.section,onToggle:()=>d("section"),trailing:(0,Q.jsxs)("label",{className:"se-switch","aria-label":"Toggle section cut",children:[(0,Q.jsx)("input",{type:"checkbox",checked:v.enabled,onChange:b=>M({enabled:b.target.checked})}),(0,Q.jsx)("span",{className:"se-switchTrack",children:(0,Q.jsx)("span",{className:"se-switchThumb"})})]}),children:v.enabled?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)("div",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Cut across"}),(0,Q.jsx)("div",{className:"se-segmentedControl",children:Wd.map(b=>(0,Q.jsx)("button",{type:"button",className:`se-segmentedOption ${v.axis===b?"se-segmentedOption--active":""}`,onClick:()=>M({axis:b}),children:b.toUpperCase()},b))})]}),(0,Q.jsx)(J,{label:"Position",value:v.position,min:0,max:1,step:.01,formatValue:b=>`${Math.round(b*100)}%`,onChange:b=>M({position:b})}),(0,Q.jsx)(Pt,{label:"Keep the other side",checked:v.flip,onChange:b=>M({flip:b})})]}):(0,Q.jsx)("div",{className:"se-placeholder",children:"Cut the model open to see inside. Drag the plane in the preview, or set it here."})}),(0,Q.jsx)(nl,{title:"Wireframe",open:p.wireframe,onToggle:()=>d("wireframe"),trailing:(0,Q.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,Q.jsx)("input",{type:"checkbox",checked:c&&o.enabled,disabled:!c,onChange:b=>w({...o,enabled:b.target.checked})}),(0,Q.jsx)("span",{className:"se-switchTrack",children:(0,Q.jsx)("span",{className:"se-switchThumb"})})]}),children:c?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(J,{label:"Opacity",value:o.opacity,min:0,max:1,step:.01,onChange:b=>w({...o,opacity:b})}),(0,Q.jsx)(_r,{label:"Wire color",value:o.color,onChange:b=>w({...o,color:b})})]}):(0,Q.jsx)(qn,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,Q.jsx)(nl,{title:"Background",open:p.background,onToggle:()=>d("background"),trailing:(0,Q.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,Q.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:b=>x({...a,enabled:b.target.checked})}),(0,Q.jsx)("span",{className:"se-switchTrack",children:(0,Q.jsx)("span",{className:"se-switchThumb"})})]}),children:a.enabled?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)("div",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,Q.jsx)("div",{className:"se-segmentedControl",children:K2.map(b=>(0,Q.jsx)("button",{type:"button",className:`se-segmentedOption ${a.type===b?"se-segmentedOption--active":""}`,onClick:()=>x({...a,type:b}),children:b},b))})]}),a.type==="environment"?c?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)("div",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,Q.jsxs)("div",{className:"se-segmentedControl",children:[(0,Q.jsx)("button",{type:"button",className:`se-segmentedOption ${s.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>S({...s,source:"preset"}),children:"PRESET"}),(0,Q.jsx)("button",{type:"button",className:`se-segmentedOption ${s.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>S({...s,source:"custom"}),children:"CUSTOM"})]})]}),s.source==="preset"?(0,Q.jsx)(Hr,{label:"Environment preset",value:s.preset,options:Gv,onChange:k}):(0,Q.jsxs)("label",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,Q.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:s.customEnvironmentUrl,onChange:b=>S({...s,customEnvironmentUrl:b.target.value})}),(0,Q.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),s.customEnvironmentUrl.trim()&&!Gd(s.customEnvironmentUrl)?(0,Q.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,Q.jsx)(J,{label:"Environment intensity",value:s.intensity,min:0,max:3,step:.05,onChange:b=>S({...s,intensity:b})})]}):(0,Q.jsx)(qn,{requiredTier:"starter",feature:"Environment backgrounds"}):null,a.type==="image"?(0,Q.jsxs)("label",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,Q.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:a.imageUrl,onChange:b=>x({...a,imageUrl:b.target.value})})]}):null,a.type==="color"?(0,Q.jsxs)("div",{className:"se-field",children:[(0,Q.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,Q.jsx)("div",{className:"se-inlineColorPicker",children:(0,Q.jsx)(up.HexColorPicker,{color:a.color,onChange:b=>x({...a,color:b})})}),(0,Q.jsx)("div",{className:"se-fieldInline",children:(0,Q.jsx)(up.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:a.color,color:Qo(a.color)},color:a.color,onChange:b=>x({...a,color:b})})})]}):null]}):(0,Q.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var Y1=require("react");var be=require("react/jsx-runtime");function T1({pp:e,set:t,open:n,toggle:r}){let{ssao:i}=e;return(0,be.jsxs)(Ct,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:n.ssao,onToggle:()=>r("ssao"),disabled:!i.enabled,trailing:(0,be.jsx)(Lt,{checked:i.enabled,onChange:o=>t("ssao",{...i,enabled:o}),label:"Toggle SSAO"}),children:[(0,be.jsx)(J,{label:"Samples",value:i.samples,min:1,max:64,step:1,onChange:o=>t("ssao",{...i,samples:o})}),(0,be.jsx)(J,{label:"Rings",value:i.rings,min:1,max:12,step:1,onChange:o=>t("ssao",{...i,rings:o})}),(0,be.jsx)(J,{label:"Intensity",value:i.intensity,min:0,max:20,step:.5,onChange:o=>t("ssao",{...i,intensity:o})}),(0,be.jsx)(J,{label:"Radius",value:i.radius,min:.01,max:1,step:.01,onChange:o=>t("ssao",{...i,radius:o})}),(0,be.jsx)(J,{label:"Bias",value:i.bias,min:0,max:.1,step:.001,onChange:o=>t("ssao",{...i,bias:o})}),(0,be.jsx)(J,{label:"Luminance Influence",value:i.luminanceInfluence,min:0,max:1,step:.01,onChange:o=>t("ssao",{...i,luminanceInfluence:o})}),(0,be.jsx)(J,{label:"Fade",value:i.fade,min:0,max:.1,step:.001,onChange:o=>t("ssao",{...i,fade:o})}),(0,be.jsx)(J,{label:"Min Radius Scale",value:i.minRadiusScale,min:0,max:1,step:.01,onChange:o=>t("ssao",{...i,minRadiusScale:o})}),(0,be.jsx)(J,{label:"World Distance Threshold",value:i.worldDistanceThreshold,min:0,max:100,step:.1,onChange:o=>t("ssao",{...i,worldDistanceThreshold:o})}),(0,be.jsx)(J,{label:"World Distance Falloff",value:i.worldDistanceFalloff,min:0,max:20,step:.1,onChange:o=>t("ssao",{...i,worldDistanceFalloff:o})}),(0,be.jsx)(J,{label:"World Proximity Threshold",value:i.worldProximityThreshold,min:0,max:100,step:.1,onChange:o=>t("ssao",{...i,worldProximityThreshold:o})}),(0,be.jsx)(J,{label:"World Proximity Falloff",value:i.worldProximityFalloff,min:0,max:20,step:.1,onChange:o=>t("ssao",{...i,worldProximityFalloff:o})})]})}function P1({pp:e,set:t,open:n,toggle:r}){let{autofocus:i}=e;return(0,be.jsxs)(Ct,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:n.autofocus,onToggle:()=>r("autofocus"),disabled:!i.enabled,trailing:(0,be.jsx)(Lt,{checked:i.enabled,onChange:o=>t("autofocus",{...i,enabled:o}),label:"Toggle Autofocus"}),children:[(0,be.jsx)(J,{label:"Focus Distance",value:i.focusDistance,min:0,max:50,step:.1,onChange:o=>t("autofocus",{...i,focusDistance:o})}),(0,be.jsx)(J,{label:"Focus Range",value:i.focusRange,min:.1,max:50,step:.1,onChange:o=>t("autofocus",{...i,focusRange:o})}),(0,be.jsx)(J,{label:"Focal Length",value:i.focalLength,min:0,max:1,step:.01,onChange:o=>t("autofocus",{...i,focalLength:o})}),(0,be.jsx)(J,{label:"Bokeh Scale",value:i.bokehScale,min:0,max:20,step:.1,onChange:o=>t("autofocus",{...i,bokehScale:o})}),(0,be.jsx)(ea,{label:"Target",value:i.target,min:-100,max:100,step:.1,onChange:o=>t("autofocus",{...i,target:o})}),(0,be.jsx)(Pt,{label:"Mouse Follow",checked:i.mouse,onChange:o=>t("autofocus",{...i,mouse:o})}),(0,be.jsx)(Pt,{label:"Manual Update",checked:i.manual,onChange:o=>t("autofocus",{...i,manual:o})}),(0,be.jsx)(J,{label:"Debug",value:i.debug,min:0,max:1,step:.01,onChange:o=>t("autofocus",{...i,debug:o})}),(0,be.jsx)(J,{label:"Smooth Time",value:i.smoothTime,min:0,max:2,step:.01,onChange:o=>t("autofocus",{...i,smoothTime:o})})]})}function A1({pp:e,set:t,open:n,toggle:r}){let{godRays:i}=e;return(0,be.jsxs)(Ct,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:n.godRays,onToggle:()=>r("godRays"),disabled:!i.enabled,trailing:(0,be.jsx)(Lt,{checked:i.enabled,onChange:o=>t("godRays",{...i,enabled:o}),label:"Toggle GodRays"}),children:[(0,be.jsx)(ea,{label:"Sun Position",value:i.sunPosition,min:-100,max:100,step:.1,onChange:o=>t("godRays",{...i,sunPosition:o})}),(0,be.jsx)(J,{label:"Samples",value:i.samples,min:1,max:128,step:1,onChange:o=>t("godRays",{...i,samples:o})}),(0,be.jsx)(J,{label:"Density",value:i.density,min:0,max:2,step:.01,onChange:o=>t("godRays",{...i,density:o})}),(0,be.jsx)(J,{label:"Decay",value:i.decay,min:0,max:1,step:.01,onChange:o=>t("godRays",{...i,decay:o})}),(0,be.jsx)(J,{label:"Weight",value:i.weight,min:0,max:2,step:.01,onChange:o=>t("godRays",{...i,weight:o})}),(0,be.jsx)(J,{label:"Exposure",value:i.exposure,min:0,max:2,step:.01,onChange:o=>t("godRays",{...i,exposure:o})}),(0,be.jsx)(J,{label:"Clamp Max",value:i.clampMax,min:0,max:2,step:.01,onChange:o=>t("godRays",{...i,clampMax:o})}),(0,be.jsx)(Pt,{label:"Blur",checked:i.blur,onChange:o=>t("godRays",{...i,blur:o})}),(0,be.jsx)(Hr,{label:"Kernel Size",value:i.kernelSize,options:ql,onChange:o=>t("godRays",{...i,kernelSize:o})})]})}function E1({pp:e,set:t,open:n,toggle:r}){let{lensflare:i}=e;return(0,be.jsxs)(Ct,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:n.lensflare,onToggle:()=>r("lensflare"),disabled:!i.enabled,trailing:(0,be.jsx)(Lt,{checked:i.enabled,onChange:o=>t("lensflare",{...i,enabled:o}),label:"Toggle Lensflare"}),children:[(0,be.jsx)(ea,{label:"Lens Position",value:i.lensPosition,min:-100,max:100,step:.1,onChange:o=>t("lensflare",{...i,lensPosition:o})}),(0,be.jsx)(J,{label:"Smooth Time",value:i.smoothTime,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...i,smoothTime:o})}),(0,be.jsx)(J,{label:"Glare Size",value:i.glareSize,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...i,glareSize:o})}),(0,be.jsx)(J,{label:"Flare Size",value:i.flareSize,min:0,max:.1,step:.001,onChange:o=>t("lensflare",{...i,flareSize:o})}),(0,be.jsx)(J,{label:"Flare Speed",value:i.flareSpeed,min:0,max:.2,step:.001,onChange:o=>t("lensflare",{...i,flareSpeed:o})}),(0,be.jsx)(J,{label:"Flare Shape",value:i.flareShape,min:0,max:.2,step:.001,onChange:o=>t("lensflare",{...i,flareShape:o})}),(0,be.jsx)(Pt,{label:"Animated",checked:i.animated,onChange:o=>t("lensflare",{...i,animated:o})}),(0,be.jsx)(Pt,{label:"Anamorphic",checked:i.anamorphic,onChange:o=>t("lensflare",{...i,anamorphic:o})}),(0,be.jsx)(_r,{label:"Color Gain",value:i.colorGain,onChange:o=>t("lensflare",{...i,colorGain:o})}),(0,be.jsx)(J,{label:"Halo Scale",value:i.haloScale,min:0,max:2,step:.01,onChange:o=>t("lensflare",{...i,haloScale:o})}),(0,be.jsx)(Pt,{label:"Secondary Ghosts",checked:i.secondaryGhosts,onChange:o=>t("lensflare",{...i,secondaryGhosts:o})}),(0,be.jsx)(Pt,{label:"Additional Streaks",checked:i.aditionalStreaks,onChange:o=>t("lensflare",{...i,aditionalStreaks:o})}),(0,be.jsx)(J,{label:"Ghost Scale",value:i.ghostScale,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...i,ghostScale:o})}),(0,be.jsx)(J,{label:"Opacity",value:i.opacity,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...i,opacity:o})}),(0,be.jsx)(Pt,{label:"Star Burst",checked:i.starBurst,onChange:o=>t("lensflare",{...i,starBurst:o})})]})}function R1({pp:e,set:t,open:n,toggle:r}){let{depthOfField:i}=e;return(0,be.jsxs)(Ct,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:n.depthOfField,onToggle:()=>r("depthOfField"),disabled:!i.enabled,trailing:(0,be.jsx)(Lt,{checked:i.enabled,onChange:o=>t("depthOfField",{...i,enabled:o}),label:"Toggle DepthOfField"}),children:[(0,be.jsx)(J,{label:"Focus Distance",value:i.focusDistance,min:0,max:50,step:.1,onChange:o=>t("depthOfField",{...i,focusDistance:o})}),(0,be.jsx)(J,{label:"Focus Range",value:i.focusRange,min:.1,max:50,step:.1,onChange:o=>t("depthOfField",{...i,focusRange:o})}),(0,be.jsx)(J,{label:"Focal Length",value:i.focalLength,min:0,max:1,step:.01,onChange:o=>t("depthOfField",{...i,focalLength:o})}),(0,be.jsx)(J,{label:"Bokeh Scale",value:i.bokehScale,min:0,max:20,step:.1,onChange:o=>t("depthOfField",{...i,bokehScale:o})})]})}var Xe=require("react/jsx-runtime"),Z2=["linear","reinhard","aces"];function k1({pp:e,set:t,open:n,toggle:r}){let{colorAverage:i}=e;return(0,Xe.jsx)(Ct,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:n.colorAverage,onToggle:()=>r("colorAverage"),disabled:!i.enabled,trailing:(0,Xe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("colorAverage",{...i,enabled:o}),label:"Toggle ColorAverage"}),children:(0,Xe.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function L1({pp:e,set:t,open:n,toggle:r}){let{brightnessContrast:i}=e;return(0,Xe.jsxs)(Ct,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:n.brightnessContrast,onToggle:()=>r("brightnessContrast"),disabled:!i.enabled,trailing:(0,Xe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("brightnessContrast",{...i,enabled:o}),label:"Toggle BrightnessContrast"}),children:[(0,Xe.jsx)(J,{label:"Brightness",value:i.brightness,min:-1,max:1,step:.01,onChange:o=>t("brightnessContrast",{...i,brightness:o})}),(0,Xe.jsx)(J,{label:"Contrast",value:i.contrast,min:-1,max:1,step:.01,onChange:o=>t("brightnessContrast",{...i,contrast:o})})]})}function D1({pp:e,set:t,open:n,toggle:r}){let{hueSaturation:i}=e;return(0,Xe.jsxs)(Ct,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:n.hueSaturation,onToggle:()=>r("hueSaturation"),disabled:!i.enabled,trailing:(0,Xe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("hueSaturation",{...i,enabled:o}),label:"Toggle HueSaturation"}),children:[(0,Xe.jsx)(J,{label:"Hue",value:i.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:o=>`${o.toFixed(2)} rad`,onChange:o=>t("hueSaturation",{...i,hue:o})}),(0,Xe.jsx)(J,{label:"Saturation",value:i.saturation,min:-1,max:1,step:.01,onChange:o=>t("hueSaturation",{...i,saturation:o})})]})}function N1({pp:e,set:t,open:n,toggle:r}){let{vignette:i}=e;return(0,Xe.jsxs)(Ct,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:n.vignette,onToggle:()=>r("vignette"),disabled:!i.enabled,trailing:(0,Xe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("vignette",{...i,enabled:o}),label:"Toggle Vignette"}),children:[(0,Xe.jsx)(J,{label:"Offset",value:i.offset,min:0,max:1,step:.01,onChange:o=>t("vignette",{...i,offset:o})}),(0,Xe.jsx)(J,{label:"Darkness",value:i.darkness,min:0,max:1,step:.01,onChange:o=>t("vignette",{...i,darkness:o})}),(0,Xe.jsx)(Pt,{label:"Eskil",checked:i.eskil,onChange:o=>t("vignette",{...i,eskil:o})})]})}function B1({pp:e,set:t,open:n,toggle:r}){let{bloom:i}=e;return(0,Xe.jsxs)(Ct,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:n.bloom,onToggle:()=>r("bloom"),disabled:!i.enabled,trailing:(0,Xe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("bloom",{...i,enabled:o}),label:"Toggle Bloom"}),children:[(0,Xe.jsx)(J,{label:"Threshold",value:i.luminanceThreshold,min:0,max:1,step:.01,onChange:o=>t("bloom",{...i,luminanceThreshold:o})}),(0,Xe.jsx)(J,{label:"Smoothing",value:i.luminanceSmoothing,min:0,max:1,step:.01,onChange:o=>t("bloom",{...i,luminanceSmoothing:o})}),(0,Xe.jsx)(J,{label:"Intensity",value:i.intensity,min:0,max:3,step:.05,onChange:o=>t("bloom",{...i,intensity:o})}),(0,Xe.jsx)(Pt,{label:"Mipmap Blur",checked:i.mipmapBlur,onChange:o=>t("bloom",{...i,mipmapBlur:o})}),(0,Xe.jsx)(J,{label:"Radius",value:i.radius,min:0,max:1,step:.01,onChange:o=>t("bloom",{...i,radius:o})}),(0,Xe.jsx)(J,{label:"Levels",value:i.levels,min:1,max:16,step:1,onChange:o=>t("bloom",{...i,levels:o})})]})}function O1({pp:e,set:t,open:n,toggle:r}){let{toneMapping:i}=e;return(0,Xe.jsxs)(Ct,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:n.toneMapping,onToggle:()=>r("toneMapping"),disabled:!i.enabled,trailing:(0,Xe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("toneMapping",{...i,enabled:o}),label:"Toggle ToneMapping"}),children:[(0,Xe.jsxs)("div",{className:"se-field",children:[(0,Xe.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,Xe.jsx)("div",{className:"se-segmentedControl",children:Z2.map(o=>(0,Xe.jsx)("button",{type:"button",className:`se-segmentedOption ${i.mode===o?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...i,mode:o}),children:o==="aces"?"Filmic":o.charAt(0).toUpperCase()+o.slice(1)},o))})]}),(0,Xe.jsx)(J,{label:"Resolution",value:i.resolution,min:64,max:4096,step:64,onChange:o=>t("toneMapping",{...i,resolution:o})}),(0,Xe.jsx)(J,{label:"White Point",value:i.whitePoint,min:0,max:16,step:.01,onChange:o=>t("toneMapping",{...i,whitePoint:o})}),(0,Xe.jsx)(J,{label:"Middle Grey",value:i.middleGrey,min:0,max:1,step:.01,onChange:o=>t("toneMapping",{...i,middleGrey:o})}),(0,Xe.jsx)(J,{label:"Min Luminance",value:i.minLuminance,min:0,max:1,step:.01,onChange:o=>t("toneMapping",{...i,minLuminance:o})}),(0,Xe.jsx)(J,{label:"Average Luminance",value:i.averageLuminance,min:0,max:4,step:.01,onChange:o=>t("toneMapping",{...i,averageLuminance:o})}),(0,Xe.jsx)(J,{label:"Adaptation Rate",value:i.adaptationRate,min:0,max:10,step:.01,onChange:o=>t("toneMapping",{...i,adaptationRate:o})}),(0,Xe.jsx)(J,{label:"Exposure",value:i.exposure,min:0,max:3,step:.01,onChange:o=>t("toneMapping",{...i,exposure:o})})]})}function I1({pp:e,set:t,open:n,toggle:r}){let{sepia:i}=e;return(0,Xe.jsx)(Ct,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:n.sepia,onToggle:()=>r("sepia"),disabled:!i.enabled,trailing:(0,Xe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("sepia",{...i,enabled:o}),label:"Toggle Sepia"}),children:(0,Xe.jsx)(J,{label:"Intensity",value:i.intensity,min:0,max:1,step:.01,onChange:o=>t("sepia",{...i,intensity:o})})})}var Oe=require("react/jsx-runtime");function z1({pp:e,set:t,open:n,toggle:r}){let{dotScreen:i}=e;return(0,Oe.jsxs)(Ct,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:n.dotScreen,onToggle:()=>r("dotScreen"),disabled:!i.enabled,trailing:(0,Oe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("dotScreen",{...i,enabled:o}),label:"Toggle DotScreen"}),children:[(0,Oe.jsx)(J,{label:"Angle",value:i.angle,min:0,max:Math.PI*2,step:.01,formatValue:o=>`${o.toFixed(2)} rad`,onChange:o=>t("dotScreen",{...i,angle:o})}),(0,Oe.jsx)(J,{label:"Scale",value:i.scale,min:.1,max:10,step:.05,onChange:o=>t("dotScreen",{...i,scale:o})})]})}function U1({pp:e,set:t,open:n,toggle:r}){let{glitch:i}=e;return(0,Oe.jsxs)(Ct,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:n.glitch,onToggle:()=>r("glitch"),disabled:!i.enabled,trailing:(0,Oe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("glitch",{...i,enabled:o}),label:"Toggle Glitch"}),children:[(0,Oe.jsx)(Hr,{label:"Mode",value:i.mode,options:Wv,onChange:o=>t("glitch",{...i,mode:o})}),(0,Oe.jsx)(Xa,{label:"Delay",value:i.delay,min:0,max:10,step:.01,onChange:o=>t("glitch",{...i,delay:o})}),(0,Oe.jsx)(Xa,{label:"Duration",value:i.duration,min:0,max:5,step:.01,onChange:o=>t("glitch",{...i,duration:o})}),(0,Oe.jsx)(Xa,{label:"Strength",value:i.strength,min:0,max:2,step:.01,onChange:o=>t("glitch",{...i,strength:o})}),(0,Oe.jsx)(Xa,{label:"Chromatic Aberration Offset",value:i.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:o=>t("glitch",{...i,chromaticAberrationOffset:o})}),(0,Oe.jsx)(J,{label:"Columns",value:i.columns,min:0,max:.5,step:.001,onChange:o=>t("glitch",{...i,columns:o})}),(0,Oe.jsx)(J,{label:"Ratio",value:i.ratio,min:0,max:1,step:.01,onChange:o=>t("glitch",{...i,ratio:o})})]})}function F1({pp:e,set:t,open:n,toggle:r}){let{grid:i}=e;return(0,Oe.jsxs)(Ct,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:n.grid,onToggle:()=>r("grid"),disabled:!i.enabled,trailing:(0,Oe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("grid",{...i,enabled:o}),label:"Toggle Grid"}),children:[(0,Oe.jsx)(J,{label:"Scale",value:i.scale,min:.1,max:10,step:.05,onChange:o=>t("grid",{...i,scale:o})}),(0,Oe.jsx)(J,{label:"Line Width",value:i.lineWidth,min:0,max:1,step:.01,onChange:o=>t("grid",{...i,lineWidth:o})})]})}function V1({pp:e,set:t,open:n,toggle:r}){let{chromaticAberration:i}=e;return(0,Oe.jsxs)(Ct,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:n.chromaticAberration,onToggle:()=>r("chromaticAberration"),disabled:!i.enabled,trailing:(0,Oe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("chromaticAberration",{...i,enabled:o}),label:"Toggle ChromaticAberration"}),children:[(0,Oe.jsx)(J,{label:"Offset X",value:i.offsetX,min:0,max:.02,step:1e-4,onChange:o=>t("chromaticAberration",{...i,offsetX:o})}),(0,Oe.jsx)(J,{label:"Offset Y",value:i.offsetY,min:0,max:.02,step:1e-4,onChange:o=>t("chromaticAberration",{...i,offsetY:o})}),(0,Oe.jsx)(Pt,{label:"Radial Modulation",checked:i.radialModulation,onChange:o=>t("chromaticAberration",{...i,radialModulation:o})}),(0,Oe.jsx)(J,{label:"Modulation Offset",value:i.modulationOffset,min:0,max:1,step:.01,onChange:o=>t("chromaticAberration",{...i,modulationOffset:o})})]})}function j1({pp:e,set:t,open:n,toggle:r}){let{noise:i}=e;return(0,Oe.jsxs)(Ct,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:n.noise,onToggle:()=>r("noise"),disabled:!i.enabled,trailing:(0,Oe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("noise",{...i,enabled:o}),label:"Toggle Noise"}),children:[(0,Oe.jsx)(J,{label:"Amount",value:i.opacity,min:0,max:1,step:.01,onChange:o=>t("noise",{...i,opacity:o})}),(0,Oe.jsx)(Pt,{label:"Premultiply",checked:i.premultiply,onChange:o=>t("noise",{...i,premultiply:o})})]})}function H1({pp:e,set:t,open:n,toggle:r}){let{scanline:i}=e;return(0,Oe.jsx)(Ct,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:n.scanline,onToggle:()=>r("scanline"),disabled:!i.enabled,trailing:(0,Oe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("scanline",{...i,enabled:o}),label:"Toggle Scanline"}),children:(0,Oe.jsx)(J,{label:"Density",value:i.density,min:0,max:10,step:.25,onChange:o=>t("scanline",{...i,density:o})})})}function G1({pp:e,set:t,open:n,toggle:r}){let{pixelation:i}=e;return(0,Oe.jsx)(Ct,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:n.pixelation,onToggle:()=>r("pixelation"),disabled:!i.enabled,trailing:(0,Oe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("pixelation",{...i,enabled:o}),label:"Toggle Pixelation"}),children:(0,Oe.jsx)(J,{label:"Granularity",value:i.granularity,min:0,max:20,step:1,onChange:o=>t("pixelation",{...i,granularity:o})})})}function W1({pp:e,set:t,open:n,toggle:r}){let{ramp:i}=e;return(0,Oe.jsxs)(Ct,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:n.ramp,onToggle:()=>r("ramp"),disabled:!i.enabled,trailing:(0,Oe.jsx)(Lt,{checked:i.enabled,onChange:o=>t("ramp",{...i,enabled:o}),label:"Toggle Ramp"}),children:[(0,Oe.jsx)(Hr,{label:"Ramp Type",value:i.rampType,options:Xv,onChange:o=>t("ramp",{...i,rampType:o})}),(0,Oe.jsx)(Xa,{label:"Ramp Start",value:i.rampStart,min:0,max:1,step:.01,onChange:o=>t("ramp",{...i,rampStart:o})}),(0,Oe.jsx)(Xa,{label:"Ramp End",value:i.rampEnd,min:0,max:1,step:.01,onChange:o=>t("ramp",{...i,rampEnd:o})}),(0,Oe.jsx)(_r,{label:"Start Color",value:i.startColor,onChange:o=>t("ramp",{...i,startColor:o})}),(0,Oe.jsx)(_r,{label:"End Color",value:i.endColor,onChange:o=>t("ramp",{...i,endColor:o})}),!i.rampMask&&(0,Oe.jsx)(J,{label:"Gradient Opacity",value:i.opacity??.5,min:0,max:1,step:.01,onChange:o=>t("ramp",{...i,opacity:o})}),(0,Oe.jsx)(J,{label:"Bias",value:i.rampBias,min:0,max:1,step:.01,onChange:o=>t("ramp",{...i,rampBias:o})}),(0,Oe.jsx)(J,{label:"Gain",value:i.rampGain,min:0,max:1,step:.01,onChange:o=>t("ramp",{...i,rampGain:o})}),(0,Oe.jsx)(Pt,{label:"Mask Earlier Effects",checked:i.rampMask,onChange:o=>t("ramp",{...i,rampMask:o})}),(0,Oe.jsx)(Pt,{label:"Invert",checked:i.rampInvert,onChange:o=>t("ramp",{...i,rampInvert:o})})]})}var Wt=require("react/jsx-runtime");function X1({pp:e,set:t,open:n,toggle:r}){let{outline:i}=e;return(0,Wt.jsxs)(Ct,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:n.outline,onToggle:()=>r("outline"),disabled:!i.enabled,trailing:(0,Wt.jsx)(Lt,{checked:i.enabled,onChange:o=>t("outline",{...i,enabled:o}),label:"Toggle Outline"}),children:[(0,Wt.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,Wt.jsx)(J,{label:"Selection Layer",value:i.selectionLayer,min:0,max:20,step:1,onChange:o=>t("outline",{...i,selectionLayer:o})}),(0,Wt.jsx)(J,{label:"Edge Strength",value:i.edgeStrength,min:0,max:10,step:.1,onChange:o=>t("outline",{...i,edgeStrength:o})}),(0,Wt.jsx)(J,{label:"Pulse Speed",value:i.pulseSpeed,min:0,max:10,step:.1,onChange:o=>t("outline",{...i,pulseSpeed:o})}),(0,Wt.jsx)(_r,{label:"Visible Edge Color",value:i.visibleEdgeColor,onChange:o=>t("outline",{...i,visibleEdgeColor:o})}),(0,Wt.jsx)(_r,{label:"Hidden Edge Color",value:i.hiddenEdgeColor,onChange:o=>t("outline",{...i,hiddenEdgeColor:o})}),(0,Wt.jsx)(Hr,{label:"Kernel Size",value:i.kernelSize,options:ql,onChange:o=>t("outline",{...i,kernelSize:o})}),(0,Wt.jsx)(Pt,{label:"Blur",checked:i.blur,onChange:o=>t("outline",{...i,blur:o})}),(0,Wt.jsx)(Pt,{label:"X-Ray",checked:i.xRay,onChange:o=>t("outline",{...i,xRay:o})})]})}function q1({pp:e,set:t,open:n,toggle:r}){let{selectiveBloom:i}=e;return(0,Wt.jsxs)(Ct,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:n.selectiveBloom,onToggle:()=>r("selectiveBloom"),disabled:!i.enabled,trailing:(0,Wt.jsx)(Lt,{checked:i.enabled,onChange:o=>t("selectiveBloom",{...i,enabled:o}),label:"Toggle SelectiveBloom"}),children:[(0,Wt.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,Wt.jsx)(J,{label:"Selection Layer",value:i.selectionLayer,min:0,max:20,step:1,onChange:o=>t("selectiveBloom",{...i,selectionLayer:o})}),(0,Wt.jsx)(J,{label:"Intensity",value:i.intensity,min:0,max:5,step:.05,onChange:o=>t("selectiveBloom",{...i,intensity:o})}),(0,Wt.jsx)(J,{label:"Threshold",value:i.luminanceThreshold,min:0,max:1,step:.01,onChange:o=>t("selectiveBloom",{...i,luminanceThreshold:o})}),(0,Wt.jsx)(J,{label:"Smoothing",value:i.luminanceSmoothing,min:0,max:1,step:.01,onChange:o=>t("selectiveBloom",{...i,luminanceSmoothing:o})}),(0,Wt.jsx)(Hr,{label:"Kernel Size",value:i.kernelSize,options:ql,onChange:o=>t("selectiveBloom",{...i,kernelSize:o})}),(0,Wt.jsx)(Pt,{label:"Mipmap Blur",checked:i.mipmapBlur,onChange:o=>t("selectiveBloom",{...i,mipmapBlur:o})}),(0,Wt.jsx)(Pt,{label:"Inverted",checked:i.inverted,onChange:o=>t("selectiveBloom",{...i,inverted:o})}),(0,Wt.jsx)(Pt,{label:"Ignore Background",checked:i.ignoreBackground,onChange:o=>t("selectiveBloom",{...i,ignoreBackground:o})})]})}function $1({pp:e,set:t,open:n,toggle:r}){let{smaa:i}=e;return(0,Wt.jsx)(Ct,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:n.smaa,onToggle:()=>r("smaa"),trailing:(0,Wt.jsx)(Lt,{checked:i.enabled,onChange:o=>t("smaa",{...i,enabled:o}),label:"Toggle SMAA"}),children:(0,Wt.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var Yt=require("react/jsx-runtime");function ff({config:e,onChange:t}){let[n,r]=(0,Y1.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}),i=l=>r(c=>({...c,[l]:!c[l]})),o=e.postProcessing,s={pp:o,set:(l,c)=>t({...e,postProcessing:{...o,[l]:c}}),open:n,toggle:i};return(0,Yt.jsxs)("div",{className:"se-generalContent",children:[(0,Yt.jsx)(T1,{...s}),(0,Yt.jsx)(P1,{...s}),(0,Yt.jsx)(k1,{...s}),(0,Yt.jsx)(z1,{...s}),(0,Yt.jsx)(U1,{...s}),(0,Yt.jsx)(A1,{...s}),(0,Yt.jsx)(F1,{...s}),(0,Yt.jsx)(E1,{...s}),(0,Yt.jsx)(X1,{...s}),(0,Yt.jsx)(q1,{...s}),(0,Yt.jsx)(L1,{...s}),(0,Yt.jsx)(D1,{...s}),(0,Yt.jsx)(R1,{...s}),(0,Yt.jsx)(V1,{...s}),(0,Yt.jsx)(N1,{...s}),(0,Yt.jsx)(B1,{...s}),(0,Yt.jsx)(O1,{...s}),(0,Yt.jsx)(j1,{...s}),(0,Yt.jsx)(I1,{...s}),(0,Yt.jsx)(H1,{...s}),(0,Yt.jsx)(G1,{...s}),(0,Yt.jsx)(W1,{...s}),(0,Yt.jsx)($1,{...s})]})}var Lc=require("react"),na=require("lucide-react");var ve=require("react/jsx-runtime"),J2=["512","1024","2048","4096"],K1={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function Q2({index:e,light:t,selected:n,onSelect:r,onToggleVisible:i}){return(0,ve.jsxs)("div",{className:`se-lightRow ${n?"se-lightRow--active":""}`,onClick:r,children:[(0,ve.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",K1[t.type]]}),(0,ve.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:o=>{o.stopPropagation(),i()},children:t.visible?(0,ve.jsx)(na.Eye,{size:14}):(0,ve.jsx)(na.EyeOff,{size:14})})]})}function eP(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function gf({config:e,onChange:t}){let[n,r]=(0,Lc.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),i=(0,Lc.useSyncExternalStore)(lf,ep),[o,a]=(0,Lc.useState)(e.lighting.lights[0]?.id??null),s=i??o,l=h=>{a(h),Pc(h)},c=h=>r(P=>({...P,[h]:!P[h]})),{tier:p}=Sr(),u=Bi(p,"starter"),{lighting:d,shadows:m,groundShadows:g,environment:v}=e,M=h=>t({...e,lighting:h}),w=h=>t({...e,shadows:h}),x=h=>t({...e,groundShadows:h}),S=h=>t({...e,environment:h}),k=(h,P)=>{M({...d,lights:d.lights.map(A=>A.id===h?{...A,...P}:A)})},b=d.lights.find(h=>h.id===s)??null,_=()=>{let h=eP();M({...d,lights:[...d.lights,h]}),l(h.id)},y=()=>{if(!b)return;let h=d.lights.filter(P=>P.id!==b.id);M({...d,lights:h}),l(h[0]?.id??null)};return(0,ve.jsxs)("div",{className:"se-generalContent",children:[(0,ve.jsxs)(Ct,{title:"Lights",open:n.lights,onToggle:()=>c("lights"),children:[(0,ve.jsx)("div",{className:"se-lightList",children:d.lights.map((h,P)=>(0,ve.jsx)(Q2,{index:P,light:h,selected:h.id===s,onSelect:()=>l(h.id),onToggleVisible:()=>k(h.id,{visible:!h.visible})},h.id))}),(0,ve.jsxs)("div",{className:"se-lightActions",children:[(0,ve.jsx)("button",{type:"button",className:"se-iconButton",onClick:_,title:"Add light",children:(0,ve.jsx)(na.Plus,{size:14})}),b&&d.lights.length>1&&(0,ve.jsx)("button",{type:"button",className:"se-iconButton",onClick:y,title:"Remove selected light",children:(0,ve.jsx)(na.Trash2,{size:14})})]}),b?(0,ve.jsxs)("div",{className:"se-lightProps",children:[(0,ve.jsxs)("div",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,ve.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:jv.map(h=>(0,ve.jsx)("button",{type:"button",className:`se-segmentedOption ${b.type===h?"se-segmentedOption--active":""}`,onClick:()=>k(b.id,{type:h}),children:K1[h]},h))})]}),(0,ve.jsx)(_r,{label:"Color",value:b.color,onChange:h=>k(b.id,{color:h})}),(0,ve.jsx)(J,{label:"Intensity",value:b.intensity,min:0,max:10,step:.1,onChange:h=>k(b.id,{intensity:h})}),b.type!=="hemisphere"&&b.type!=="none"&&(0,ve.jsx)(ea,{label:"Position",value:b.position,min:-100,max:100,step:.05,onChange:h=>k(b.id,{position:h})}),b.type==="spot"&&(0,ve.jsxs)(ve.Fragment,{children:[(0,ve.jsx)(J,{label:"Angle",value:b.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:h=>`${Math.round(h*180/Math.PI)}\xB0`,onChange:h=>k(b.id,{angle:h})}),(0,ve.jsx)(J,{label:"Penumbra",value:b.penumbra??.2,min:0,max:1,step:.01,onChange:h=>k(b.id,{penumbra:h})}),(0,ve.jsx)(J,{label:"Distance",value:b.distance??0,min:0,max:100,step:.5,onChange:h=>k(b.id,{distance:h})}),(0,ve.jsx)(J,{label:"Decay",value:b.decay??2,min:0,max:4,step:.1,onChange:h=>k(b.id,{decay:h})})]}),(0,ve.jsx)(Pt,{label:"Attached to camera",checked:b.attachedToCamera,onChange:h=>k(b.id,{attachedToCamera:h})}),(0,ve.jsx)(Pt,{label:"Cast shadows",checked:b.castShadow,onChange:h=>k(b.id,{castShadow:h})}),(0,ve.jsx)(J,{label:"Shadow bias",value:b.shadowBias,min:-.01,max:.01,step:1e-4,onChange:h=>k(b.id,{shadowBias:h})})]}):null]}),(0,ve.jsxs)(Ct,{title:"Shadows",open:n.shadows,onToggle:()=>c("shadows"),disabled:!m.enabled,trailing:(0,ve.jsx)(Lt,{checked:m.enabled,onChange:h=>w({...m,enabled:h}),label:"Toggle shadows"}),children:[(0,ve.jsx)(Hr,{label:"Map size",value:String(m.mapSize),options:J2,onChange:h=>w({...m,mapSize:Number(h)})}),(0,ve.jsx)(J,{label:"Bias",value:m.bias,min:-.01,max:.01,step:1e-4,onChange:h=>w({...m,bias:h})}),(0,ve.jsx)(J,{label:"Normal bias",value:m.normalBias,min:0,max:.2,step:.01,onChange:h=>w({...m,normalBias:h})}),(0,ve.jsx)(J,{label:"Radius (softness)",value:m.radius,min:0,max:20,step:.5,onChange:h=>w({...m,radius:h})})]}),(0,ve.jsxs)(Ct,{title:"Ground Shadows",open:n.groundShadows,onToggle:()=>c("groundShadows"),disabled:!g.enabled,trailing:(0,ve.jsx)(Lt,{checked:g.enabled,onChange:h=>x({...g,enabled:h}),label:"Toggle ground shadows"}),children:[(0,ve.jsxs)("div",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,ve.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(h=>(0,ve.jsx)("button",{type:"button",className:`se-segmentedOption ${g.mode===h?"se-segmentedOption--active":""}`,onClick:()=>x({...g,mode:h}),children:h==="shadowCatcher"?"Shadow Catcher":"Baked AO"},h))})]}),g.mode==="bakedAO"&&(0,ve.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,ve.jsx)(J,{label:"Intensity",value:g.intensity,min:0,max:1,step:.01,onChange:h=>x({...g,intensity:h})}),(0,ve.jsx)(J,{label:"Border fade",value:g.borderFade,min:0,max:10,step:.1,onChange:h=>x({...g,borderFade:h})}),(0,ve.jsx)(J,{label:"Height",value:g.height,min:-5,max:5,step:.1,onChange:h=>x({...g,height:h})}),(0,ve.jsx)(J,{label:"Size",value:g.size,min:1,max:50,step:.5,onChange:h=>x({...g,size:h})})]}),(0,ve.jsx)(Ct,{title:"Environment",open:n.environment,onToggle:()=>c("environment"),children:u?(0,ve.jsxs)(ve.Fragment,{children:[(0,ve.jsx)(J,{label:"Orientation",value:v.rotation,min:0,max:360,step:1,formatValue:h=>`${h}\xB0`,onChange:h=>S({...v,rotation:h})}),(0,ve.jsx)(J,{label:"Brightness",value:v.intensity,min:0,max:3,step:.05,onChange:h=>S({...v,intensity:h})}),(0,ve.jsxs)(Ct,{title:"Shadow",open:n.envShadow,onToggle:()=>c("envShadow"),trailing:(0,ve.jsx)(Lt,{checked:v.shadowLight.enabled,onChange:h=>S({...v,shadowLight:{...v.shadowLight,enabled:h}}),label:"Toggle environment shadow light"}),disabled:!v.shadowLight.enabled,children:[(0,ve.jsx)(J,{label:"Light intensity",value:v.shadowLight.intensity,min:0,max:20,step:.1,onChange:h=>S({...v,shadowLight:{...v.shadowLight,intensity:h}})}),(0,ve.jsx)(J,{label:"Shadow bias",value:v.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:h=>S({...v,shadowLight:{...v.shadowLight,bias:h}})})]})]}):(0,ve.jsx)(qn,{requiredTier:"starter",feature:"Environment lighting"})})]})}var pp=require("react"),Gr=require("lucide-react");var ge=require("react/jsx-runtime"),tP={playing:"Playing",paused:"Paused",finished:"Finished"},Z1={repeat:"Looping",once:"Play once","ping-pong":"Ping-pong"};function nP(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),r=(t%60).toFixed(1).padStart(4,"0");return`${n}:${r}`}function J1(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),r=(t%60).toFixed(1).padStart(4,"0");return`${n}:${r}`}function rP(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function bf({config:e,onChange:t,clipDetails:n,active:r,play:i,pause:o,stop:a,setSpeed:s,seek:l}){let[c,p]=(0,pp.useState)(!1),u=(0,pp.useMemo)(()=>new Map(n.map(_=>[_.sourceName,_.duration])),[n]),d=e.animations.clips.filter(_=>!_.hidden),m=e.animations.clips.filter(_=>_.hidden),g=(_,y=e.animations.autoplayClip)=>{t({...e,animations:{clips:_(e.animations.clips),autoplayClip:y}})},v=(_,y)=>{g(h=>h.map(P=>P.sourceName===_?y(P):P))},M=(_,y)=>{v(_,h=>({...h,loopMode:y}))},w=(_,y)=>{let h=rP(y);v(_,P=>({...P,speed:h})),r.some(P=>P.clip===_)&&s(h,_)},x=(_,y)=>{v(_,h=>({...h,displayName:y}))},S=_=>{let y=e.animations.autoplayClip===_?null:_;t({...e,animations:{...e.animations,autoplayClip:y}})},k=_=>{g(y=>y.map(h=>h.sourceName===_?{...h,hidden:!0}:h),e.animations.autoplayClip===_?null:e.animations.autoplayClip),r.some(y=>y.clip===_)&&a(_)},b=_=>{g(y=>y.map(h=>h.sourceName===_?{...h,hidden:!1}:h))};return e.animations.clips.length===0?(0,ge.jsx)(So,{title:"Animations",children:(0,ge.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,ge.jsxs)(So,{title:"Animations",children:[d.length===0&&(0,ge.jsx)("div",{className:"se-helperCard",children:(0,ge.jsx)("span",{children:"Preview clips directly in the viewer (several can play at once), choose one optional autoplay animation, and use soft delete to hide clips without modifying the GLB."})}),d.length===0?(0,ge.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,ge.jsx)("div",{className:"se-animationList",children:d.map(_=>{let y=r.find(D=>D.clip===_.sourceName),h=y?.status==="playing",P=y?.time??0,A=u.get(_.sourceName)??0,C=y?tP[y.status]:"Ready";return(0,ge.jsxs)("article",{className:`se-animationCard ${y?"se-animationCard--active":""}`,children:[(0,ge.jsxs)("div",{className:"se-animationHeader",children:[(0,ge.jsxs)("div",{className:"se-animationHeading",children:[(0,ge.jsxs)("div",{className:"se-animationTitleRow",children:[(0,ge.jsx)("span",{className:"se-animationStatus",children:C}),e.animations.autoplayClip===_.sourceName?(0,ge.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,ge.jsx)("div",{className:"se-animationSource",children:_.sourceName})]}),(0,ge.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>k(_.sourceName),title:"Remove animation",children:(0,ge.jsx)(Gr.Trash2,{size:16})})]}),(0,ge.jsxs)("div",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,ge.jsx)("input",{className:"se-textInput",value:_.displayName,onChange:D=>x(_.sourceName,D.target.value),placeholder:"Animation name"})]}),(0,ge.jsxs)("div",{className:"se-animationMeta",children:[(0,ge.jsx)("span",{children:nP(A)}),(0,ge.jsx)("span",{children:Z1[_.loopMode]??Z1.repeat}),(0,ge.jsxs)("span",{children:[_.speed.toFixed(2),"x"]})]}),(0,ge.jsxs)("div",{className:"se-animationButtonRow",children:[(0,ge.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>h&&!y?.reverse?o(_.sourceName):i(_.sourceName,{alongside:!0}),"aria-label":h&&!y?.reverse?"Pause":"Play",title:h&&!y?.reverse?"Pause":"Play",children:h&&!y?.reverse?(0,ge.jsx)(Gr.Pause,{size:16}):(0,ge.jsx)(Gr.Play,{size:16})}),(0,ge.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>h&&y?.reverse?o(_.sourceName):i(_.sourceName,{alongside:!0,reverse:!0}),"aria-label":h&&y?.reverse?"Pause":"Play backwards",title:h&&y?.reverse?"Pause":"Play backwards",children:h&&y?.reverse?(0,ge.jsx)(Gr.Pause,{size:16}):(0,ge.jsx)(Gr.Rewind,{size:16})}),(0,ge.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>a(_.sourceName),disabled:!y,"aria-label":"Stop",title:"Stop",children:(0,ge.jsx)(Gr.Square,{size:16})})]}),(0,ge.jsxs)("div",{className:"se-animationSeekRow",children:[(0,ge.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(A,.001),step:.01,value:Math.min(P,A),disabled:!y||A<=0,onChange:D=>l(Number(D.target.value),_.sourceName),"aria-label":"Seek"}),(0,ge.jsxs)("span",{className:"se-animationSeekTime",children:[J1(Math.min(P,A))," / ",J1(A)]})]}),(0,ge.jsxs)("div",{className:"se-animationGrid",children:[(0,ge.jsxs)("label",{className:"se-field",children:[(0,ge.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,ge.jsxs)("select",{className:"se-select",value:_.loopMode,onChange:D=>M(_.sourceName,D.target.value),children:[(0,ge.jsx)("option",{value:"repeat",children:"Loop"}),(0,ge.jsx)("option",{value:"once",children:"Play Once"}),(0,ge.jsx)("option",{value:"ping-pong",children:"Ping-Pong"})]})]}),(0,ge.jsxs)("label",{className:"se-field",children:[(0,ge.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,ge.jsxs)("span",{className:"se-fieldValue",children:[_.speed.toFixed(2),"x"]})]}),(0,ge.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,ge.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:_.speed,onChange:D=>w(_.sourceName,Number(D.target.value))}),(0,ge.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:_.speed,onChange:D=>w(_.sourceName,Number(D.target.value))})]})]})]}),(0,ge.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===_.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>S(_.sourceName),children:e.animations.autoplayClip===_.sourceName?"Disable autoplay":"Set as autoplay"})]},_.sourceName)})}),m.length>0?(0,ge.jsxs)("section",{className:"se-removedAnimations",children:[(0,ge.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>p(_=>!_),children:(0,ge.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ge.jsx)(Gr.ChevronDown,{size:16,className:`se-panelChevron ${c?"se-panelChevron--open":""}`}),(0,ge.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",m.length,")"]})]})}),c?(0,ge.jsx)("div",{className:"se-removedAnimationList",children:m.map(_=>(0,ge.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,ge.jsxs)("div",{children:[(0,ge.jsx)("div",{className:"se-removedAnimationName",children:_.displayName||_.sourceName}),(0,ge.jsx)("div",{className:"se-animationSource",children:_.sourceName})]}),(0,ge.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>b(_.sourceName),children:"Restore"})]},_.sourceName))}):null]}):null]})}var vf=require("react"),hp=require("lucide-react");var At=require("react/jsx-runtime");function xf({config:e,onChange:t}){let[n,r]=(0,vf.useState)(null),[i,o]=(0,vf.useState)({title:"",description:""}),a=e.annotations,s=u=>{r(u),o({title:u.title,description:u.description||""})},l=()=>{if(!n||!i.title.trim())return;let u=a.map(d=>d.id===n.id?{...d,title:i.title.trim(),description:i.description||""}:d);t({...e,annotations:u}),r(null),o({title:"",description:""})},c=u=>{if(window.confirm("Delete this annotation?")){let m=a.filter(g=>g.id!==u).map((g,v)=>({...g,id:v+1}));t({...e,annotations:m}),r(null),o({title:"",description:""})}},p=()=>{r(null),o({title:"",description:""})};return(0,At.jsxs)(So,{title:"Annotations",children:[e.annotations.length===0?(0,At.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,At.jsx)("div",{className:"bb-annotationsList",children:e.annotations.map(u=>(0,At.jsxs)("div",{className:"bb-annotationCard",children:[(0,At.jsxs)("div",{className:"bb-annotationHeader",children:[(0,At.jsxs)("div",{className:"bb-annotationBadge",children:["#",u.id]}),(0,At.jsxs)("div",{className:"bb-annotationActions",children:[(0,At.jsx)("button",{className:"bb-annotationAction bb-annotationAction--edit",onClick:()=>s(u),title:"Edit annotation",children:(0,At.jsx)(hp.Pencil,{size:16})}),(0,At.jsx)("button",{className:"bb-annotationAction bb-annotationAction--delete",onClick:()=>c(u.id),title:"Delete annotation",children:(0,At.jsx)(hp.Trash2,{size:16})})]})]}),(0,At.jsx)("div",{className:"bb-annotationTitle",children:u.title}),u.description&&(0,At.jsx)("div",{className:"bb-annotationDescription",children:u.description}),(0,At.jsxs)("div",{className:"bb-annotationPosition",children:["Position: [",u.worldPosition[0].toFixed(2),","," ",u.worldPosition[1].toFixed(2),","," ",u.worldPosition[2].toFixed(2),"]"]})]},u.id))}),n&&(0,At.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:p,children:(0,At.jsxs)("div",{className:"bb-editAnnotationPopup",onClick:u=>u.stopPropagation(),children:[(0,At.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,At.jsx)("h3",{className:"bb-editAnnotationTitle",children:"Edit Annotation"}),(0,At.jsx)("button",{className:"bb-editAnnotationClose",onClick:p,children:"\xD7"})]}),(0,At.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,At.jsxs)("div",{className:"bb-field",children:[(0,At.jsx)("label",{className:"bb-label",children:"Title"}),(0,At.jsx)("input",{className:"bb-input",value:i.title,onChange:u=>o({...i,title:u.target.value}),placeholder:"Enter annotation title"})]}),(0,At.jsxs)("div",{className:"bb-field",children:[(0,At.jsx)("label",{className:"bb-label",children:"Description"}),(0,At.jsx)("textarea",{className:"bb-textarea",value:i.description,onChange:u=>o({...i,description:u.target.value}),placeholder:"Enter annotation description",rows:3})]}),(0,At.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,At.jsx)("button",{className:"bb-button",onClick:p,children:"Cancel"}),(0,At.jsx)("button",{className:"bb-button bb-button--primary",onClick:l,disabled:!i.title.trim(),children:"Save"}),(0,At.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>c(n.id),children:"Delete"})]})]})]})})]})}var Ji=require("react"),ui=require("lucide-react");var ke=require("react/jsx-runtime"),iP={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},qa=3.5;function yf({config:e,onChange:t,cameraState:n,onPreviewWaypoint:r}){let i=e.cinematic??iP,{waypoints:o}=i,a=(0,Ji.useCallback)((w,x)=>{if(w.length<2)return 0;let S=0;for(let k=0;k<w.length-1;k++){let b=w[k].segmentDuration??qa;S+=b}return x&&w.length>1&&(S+=w[w.length-1].segmentDuration??qa),Math.max(S,0)},[]),s=(0,Ji.useCallback)(w=>{t({...e,cinematic:{...i,...w}})},[e,i,t]),l=(0,Ji.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:qa},x=[...o,w],S=a(x,i.loop);s({waypoints:x,duration:S})},[n,o,i.loop,a,s]),c=(0,Ji.useCallback)(w=>{let x=o.filter((k,b)=>b!==w),S=a(x,i.loop);s({waypoints:x,duration:S})},[o,i.loop,a,s]),p=(0,Ji.useCallback)((w,x)=>{let S=w+x;if(S<0||S>=o.length)return;let k=[...o];[k[w],k[S]]=[k[S],k[w]];let b=a(k,i.loop);s({waypoints:k,duration:b})},[o,i.loop,a,s]),u=(0,Ji.useCallback)((w,x)=>{let S=o.map((b,_)=>_===w?{...b,...x}:b),k=a(S,i.loop);s({waypoints:S,duration:k})},[o,i.loop,a,s]),[d,m]=(0,Ji.useState)(!1),g=o.some(w=>w.segmentDuration!==void 0),v=(0,Ji.useCallback)(w=>w>=o.length-1?qa:o[w]?.segmentDuration??qa,[o]),M=o.length>=2;return(0,ke.jsxs)(So,{title:"Cinematic Camera",children:[(0,ke.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,ke.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:l,disabled:!n,title:"Capture the current camera view as a waypoint",children:[(0,ke.jsx)(ui.Plus,{size:15}),"Add waypoint from current view"]}),(0,ke.jsxs)("div",{className:"se-customizeToggle",children:[(0,ke.jsxs)("label",{className:"se-toggleLabel",children:[(0,ke.jsx)("input",{type:"checkbox",checked:d,onChange:w=>m(w.target.checked)}),(0,ke.jsx)(ui.Settings,{size:14}),(0,ke.jsx)("span",{children:"Customize durations between waypoints"})]}),d&&(0,ke.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",qa,"s"]})]}),o.length===0?(0,ke.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,ke.jsxs)(ke.Fragment,{children:[(0,ke.jsx)("div",{className:"se-waypointList",children:o.map((w,x)=>{let S=v(x),k=x===o.length-1,b=w.segmentDuration!==void 0&&w.segmentDuration!==qa;return(0,ke.jsxs)("div",{children:[(0,ke.jsxs)("div",{className:"se-waypointCard",children:[(0,ke.jsx)("div",{className:"se-waypointBadge",children:x+1}),(0,ke.jsxs)("div",{className:"se-waypointBody",children:[(0,ke.jsxs)("div",{className:"se-waypointCoords",children:["pos [",w.position.map(_=>_.toFixed(1)).join(", "),"]"]}),(0,ke.jsxs)("div",{className:"se-waypointCoords",children:["look [",w.target.map(_=>_.toFixed(1)).join(", "),"]"]}),d&&!k&&(0,ke.jsxs)("div",{className:`se-customBadge ${b?"se-customBadge--custom":"se-customBadge--default"}`,children:[S.toFixed(1),"s",!b&&" (default)"]})]}),(0,ke.jsxs)("div",{className:"se-waypointActions",children:[(0,ke.jsx)("button",{className:"se-waypointAction",onClick:()=>r?.(w),title:"Fly camera to this waypoint",disabled:!r,children:(0,ke.jsx)(ui.MapPin,{size:15})}),(0,ke.jsx)("button",{className:"se-waypointAction",onClick:()=>p(x,-1),title:"Move up",disabled:x===0,children:(0,ke.jsx)(ui.ArrowUp,{size:15})}),(0,ke.jsx)("button",{className:"se-waypointAction",onClick:()=>p(x,1),title:"Move down",disabled:k,children:(0,ke.jsx)(ui.ArrowDown,{size:15})}),(0,ke.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>c(x),title:"Delete waypoint",children:(0,ke.jsx)(ui.Trash2,{size:15})})]})]}),d&&!k&&(0,ke.jsxs)("div",{className:"se-segmentBetween",children:[(0,ke.jsxs)("div",{className:"se-segmentLabel",children:[x+1," \u2192 ",x+2,!w.segmentDuration&&" (default)"]}),(0,ke.jsxs)("div",{className:"se-segmentControls",children:[(0,ke.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,ke.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:S,onChange:_=>{let y=parseFloat(_.target.value);u(x,{segmentDuration:y})}}),(0,ke.jsxs)("span",{className:"se-segmentValue",children:[S.toFixed(1),"s"]}),(0,ke.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(_=>(0,ke.jsxs)("button",{className:"se-presetButton",onClick:()=>u(x,{segmentDuration:_}),children:[_,"s"]},`preset-${x}-${_}`)),(0,ke.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let _=o.map((h,P)=>{if(P===x){let{segmentDuration:A,...C}=h;return C}return h}),y=a(_,i.loop);s({waypoints:_,duration:y})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${x}`)})}),(0,ke.jsxs)("div",{className:"se-totalDuration",children:[(0,ke.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,ke.jsx)("span",{className:"se-totalValue",children:M?(i.duration??a(o,i.loop)).toFixed(1)+"s":"-"}),!M&&(0,ke.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,ke.jsx)(Pt,{label:"Enable cinematic camera",checked:i.enabled,onChange:w=>s({enabled:w})}),(0,ke.jsx)(Pt,{label:"Loop",checked:i.loop,onChange:w=>{let x=w,S=a(o,x);s({loop:x,duration:S})}}),(0,ke.jsx)(Pt,{label:"Auto-play on load",checked:i.autoPlay,onChange:w=>s({autoPlay:w})}),!d&&M&&(0,ke.jsx)(J,{label:"Duration",value:i.duration??a(o,i.loop),min:4,max:120,step:1,formatValue:w=>`${w}s`,onChange:w=>s({duration:w})})]})}var $a=require("react"),fp=require("react-colorful"),cr=require("lucide-react");var Q1=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],mp=["normal","hidden","selected","disabled"];var ne=require("react/jsx-runtime"),wf={all:"All objects",group:"Group",tag:"Tag",type:"Type",object:"One object"},ew={metric:"Metric",status:"Status",metadata:"Metadata"},oP={metric:"",stops:[[0,"#3b82f6"],[100,"#ef4444"]]};function aP(e){return e===void 0?"all":typeof e=="string"||Array.isArray(e)?"object":"group"in e?"group":"tag"in e?"tag":"type"}function Dc(e){return e===void 0?"":typeof e=="string"?e:Array.isArray(e)?e[0]??"":"group"in e?e.group:"tag"in e?e.tag:e.type}function tw(e,t){if(e!=="all")return e==="object"?t:e==="group"?{group:t}:e==="tag"?{tag:t}:{type:t}}function sP(e){return"metric"in e?"metric":"status"in e?"status":"metadata"}function nw(e){return e==="metric"?{metric:""}:e==="status"?{status:["disabled"]}:{metadata:"",equals:""}}function lP(e){let t=e.trim();return t==="true"?!0:t==="false"?!1:t==="null"?null:t!==""&&Number.isFinite(Number(t))?Number(t):e}function Sf(e){return e.trim()===""||!Number.isFinite(Number(e))?void 0:Number(e)}function rw(e,t="",n=0){return typeof e!="object"||e===null||Array.isArray(e)?t?[t]:[]:n>2?t?[t]:[]:Object.entries(e).flatMap(([r,i])=>rw(i,t?`${t}.${r}`:r,n+1))}var Nc=e=>[...new Set(e.filter(t=>!!t))].sort((t,n)=>t.localeCompare(n));function Qi({label:e,children:t}){return(0,ne.jsxs)("label",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:e}),t]})}function Bc({label:e,checked:t,color:n,onToggle:r,onColorChange:i}){let[o,a]=(0,$a.useState)(!1),s=(0,$a.useRef)(null);return(0,ne.jsxs)("div",{className:"se-field se-fieldInline",children:[(0,ne.jsxs)("label",{className:"se-ruleLook",children:[(0,ne.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:l=>r(l.target.checked)}),e]}),t&&n!==void 0&&i?(0,ne.jsx)("span",{ref:s,style:{display:"inline-flex"},children:(0,ne.jsx)(fp.HexColorInput,{prefixed:!0,className:"se-swatch","aria-label":`${e} value`,onClick:()=>a(l=>!l),style:{background:n,color:Qo(n)},color:n,onChange:i})}):null,o?(0,ne.jsx)(Rc,{anchorRef:s,onClose:()=>a(!1),children:(0,ne.jsx)(fp.HexColorPicker,{color:n,onChange:i})}):null]})}function cP({title:e,open:t,onToggle:n,actions:r,children:i}){return(0,ne.jsxs)("section",{className:"se-panel",children:[(0,ne.jsxs)("div",{className:"se-ruleHeader",children:[(0,ne.jsx)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:(0,ne.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ne.jsx)(cr.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,ne.jsx)("span",{className:"se-panelTitle",children:e})]})}),(0,ne.jsx)("span",{className:"se-ruleActions",children:r})]}),t?(0,ne.jsx)("div",{className:"se-panelBody",children:i}):null]})}function _f({config:e,onChange:t,objectBindings:n}){let r=e.styleRules??[],[i,o]=(0,$a.useState)(r[0]?.id??null),a=(0,$a.useMemo)(()=>{let d=Object.values(n);return{groups:Nc(d.map(m=>m.group)),tags:Nc(d.flatMap(m=>m.tags??[])),types:Nc(d.map(m=>m.type??"other")),objects:d.map(m=>({id:m.id,label:m.label||m.id})).sort((m,g)=>m.label.localeCompare(g.label)),metrics:Nc(d.flatMap(m=>Object.keys(m.metrics??{}))),metadata:Nc(d.flatMap(m=>rw(m.metadata)))}},[n]),s=d=>t({...e,styleRules:d}),l=(d,m)=>s(r.map(g=>g.id===d?m(g):g)),c=()=>{let d=crypto.randomUUID();s([...r,{id:d,label:`Rule ${r.length+1}`,when:[{status:["disabled"]}],material:{baseColor:"#9ca3af"}}]),o(d)},p=(d,m)=>{let g=[...r],[v]=g.splice(d,1);g.splice(d+m,0,v),s(g)},u=d=>{let m=d.target?Va(n,d.target):Object.keys(n),g=d.when?Array.isArray(d.when)?d.when:[d.when]:[];return m.filter(v=>g.every(M=>Hm(n[v],M))).length};return(0,ne.jsxs)(So,{title:"Style rules",children:[(0,ne.jsx)("div",{className:"se-helperCard se-ruleIntro",children:"Restyle objects from their data while the app runs: a colour from a metric, grey when disabled, a pulse for an alarm. Set an object's metrics, status, and metadata in the Object tab to try a rule here. Later rules win over earlier ones."}),(0,ne.jsx)("datalist",{id:"se-ruleMetrics",children:a.metrics.map(d=>(0,ne.jsx)("option",{value:d},d))}),(0,ne.jsx)("datalist",{id:"se-ruleMetadata",children:a.metadata.map(d=>(0,ne.jsx)("option",{value:d},d))}),r.map((d,m)=>{let g=d.when?Array.isArray(d.when)?d.when:[d.when]:[],v=aP(d.target),M=d.material??{},w=d.pulse===!0?{}:d.pulse||void 0,x=d.target?Va(n,d.target).length:Object.keys(n).length,S=h=>l(d.id,P=>({...P,when:h.length>0?h:void 0})),k=(h,P)=>S(g.map((A,C)=>C===h?P:A)),b=h=>l(d.id,P=>{let A={...P.material,...h};for(let C of Object.keys(A))A[C]===void 0&&delete A[C];return{...P,material:Object.keys(A).length>0?A:void 0}}),_=h=>l(d.id,P=>({...P,colorScale:h})),y=v==="group"?a.groups:v==="tag"?a.tags:v==="type"?a.types:[];return(0,ne.jsxs)(cP,{title:d.label||`Rule ${m+1}`,open:i===d.id,onToggle:()=>o(h=>h===d.id?null:d.id),actions:(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>p(m,-1),disabled:m===0,"aria-label":"Move rule up",title:"Move up",children:(0,ne.jsx)(cr.ArrowUp,{size:14})}),(0,ne.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>p(m,1),disabled:m===r.length-1,"aria-label":"Move rule down",title:"Move down",children:(0,ne.jsx)(cr.ArrowDown,{size:14})}),(0,ne.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>s(r.filter(h=>h.id!==d.id)),"aria-label":"Delete rule",title:"Delete rule",children:(0,ne.jsx)(cr.Trash2,{size:14})})]}),children:[(0,ne.jsx)(Qi,{label:"Name",children:(0,ne.jsx)("input",{className:"se-textInput",value:d.label??"",placeholder:`Rule ${m+1}`,onChange:h=>l(d.id,P=>({...P,label:h.target.value}))})}),(0,ne.jsxs)("div",{className:"se-ruleGrid",children:[(0,ne.jsx)(Qi,{label:"Applies to",children:(0,ne.jsx)("select",{className:"se-select",value:v,onChange:h=>{let P=h.target.value,A=P==="object"?a.objects[0]?.id:P==="group"?a.groups[0]:P==="tag"?a.tags[0]:P==="type"?a.types[0]:"";l(d.id,C=>({...C,target:tw(P,A??"")}))},children:Object.keys(wf).map(h=>(0,ne.jsx)("option",{value:h,children:wf[h]},h))})}),v!=="all"?(0,ne.jsx)(Qi,{label:wf[v],children:(0,ne.jsxs)("select",{className:"se-select",value:Dc(d.target),onChange:h=>l(d.id,P=>({...P,target:tw(v,h.target.value)})),children:[v==="object"?a.objects.map(h=>(0,ne.jsx)("option",{value:h.id,children:h.label},h.id)):y.map(h=>(0,ne.jsx)("option",{value:h,children:h},h)),(v==="object"?a.objects.some(h=>h.id===Dc(d.target)):y.includes(Dc(d.target)))?null:(0,ne.jsx)("option",{value:Dc(d.target),children:Dc(d.target)||"None in this model"})]})}):null]}),(0,ne.jsx)("div",{className:"se-fieldLabel",children:"When"}),g.length===0?(0,ne.jsx)("div",{className:"se-ruleHint",children:"Always applies."}):null,g.map((h,P)=>{let A=sP(h);return(0,ne.jsxs)("div",{className:"se-ruleCondition",children:[(0,ne.jsxs)("div",{className:"se-ruleConditionHeader",children:[(0,ne.jsx)("select",{className:"se-select","aria-label":"Condition type",value:A,onChange:C=>k(P,nw(C.target.value)),children:Object.keys(ew).map(C=>(0,ne.jsx)("option",{value:C,children:ew[C]},C))}),(0,ne.jsx)("button",{type:"button",className:"se-iconButton","aria-label":"Remove condition",title:"Remove condition",onClick:()=>S(g.filter((C,D)=>D!==P)),children:(0,ne.jsx)(cr.X,{size:14})})]}),"metric"in h?(0,ne.jsxs)("div",{className:"se-ruleGrid se-ruleGrid--three",children:[(0,ne.jsx)(Qi,{label:"Metric",children:(0,ne.jsx)("input",{className:"se-textInput",list:"se-ruleMetrics",value:h.metric,placeholder:"temperature",onChange:C=>k(P,{...h,metric:C.target.value})})}),(0,ne.jsx)(Qi,{label:"Above",children:(0,ne.jsx)("input",{className:"se-numberInput",type:"number",value:h.above??"",placeholder:"any",onChange:C=>k(P,{...h,above:Sf(C.target.value)})})}),(0,ne.jsx)(Qi,{label:"Below",children:(0,ne.jsx)("input",{className:"se-numberInput",type:"number",value:h.below??"",placeholder:"any",onChange:C=>k(P,{...h,below:Sf(C.target.value)})})})]}):"status"in h?(0,ne.jsx)("div",{className:"se-ruleStatuses",children:mp.map(C=>{let D=[].concat(h.status).includes(C);return(0,ne.jsxs)("label",{className:"se-ruleStatus",children:[(0,ne.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:D,onChange:()=>{let B=[].concat(h.status),j=D?B.filter(W=>W!==C):[...B,C];k(P,{status:j})}}),C]},C)})}):(0,ne.jsxs)("div",{className:"se-ruleGrid",children:[(0,ne.jsx)(Qi,{label:"Key",children:(0,ne.jsx)("input",{className:"se-textInput",list:"se-ruleMetadata",value:h.metadata,placeholder:"alarm.state",onChange:C=>k(P,{...h,metadata:C.target.value})})}),(0,ne.jsx)(Qi,{label:"Equals",children:(0,ne.jsx)("input",{className:"se-textInput",value:h.equals===null?"null":String(h.equals),placeholder:"fault",onChange:C=>k(P,{...h,equals:lP(C.target.value)})})})]})]},P)}),(0,ne.jsxs)("button",{type:"button",className:"se-animationButton",onClick:()=>S([...g,nw("metric")]),children:[(0,ne.jsx)(cr.Plus,{size:14})," Add condition"]}),(0,ne.jsx)("div",{className:"se-fieldLabel",children:"Look"}),(0,ne.jsx)(Bc,{label:"Colour",checked:M.baseColor!==void 0,color:M.baseColor,onToggle:h=>b({baseColor:h?"#9ca3af":void 0}),onColorChange:h=>b({baseColor:h})}),(0,ne.jsx)(Bc,{label:"Opacity",checked:M.opacity!==void 0,onToggle:h=>b({opacity:h?.4:void 0})}),M.opacity!==void 0?(0,ne.jsx)(J,{label:"Opacity",value:M.opacity,min:0,max:1,step:.05,formatValue:h=>`${Math.round(h*100)}%`,onChange:h=>b({opacity:h})}):null,(0,ne.jsx)(Bc,{label:"Glow",checked:M.emissive!==void 0,color:M.emissive,onToggle:h=>b({emissive:h?"#ff3b30":void 0,emissiveIntensity:h?M.emissiveIntensity??1:void 0}),onColorChange:h=>b({emissive:h})}),(0,ne.jsx)(Bc,{label:"Colour from a metric",checked:d.colorScale!==void 0,onToggle:h=>_(h?{...oP,metric:a.metrics[0]??""}:void 0)}),d.colorScale?(0,ne.jsxs)("div",{className:"se-ruleCondition",children:[(0,ne.jsxs)("div",{className:"se-ruleGrid",children:[(0,ne.jsx)(Qi,{label:"Metric",children:(0,ne.jsx)("input",{className:"se-textInput",list:"se-ruleMetrics",value:d.colorScale.metric,placeholder:"temperature",onChange:h=>_({...d.colorScale,metric:h.target.value})})}),(0,ne.jsx)(Qi,{label:"Sets",children:(0,ne.jsxs)("select",{className:"se-select",value:d.colorScale.channel??"baseColor",onChange:h=>_({...d.colorScale,channel:h.target.value}),children:[(0,ne.jsx)("option",{value:"baseColor",children:"Colour"}),(0,ne.jsx)("option",{value:"emissive",children:"Glow colour"})]})})]}),d.colorScale.stops.map(([h,P],A)=>{let C=D=>_({...d.colorScale,stops:d.colorScale.stops.map((B,j)=>j===A?D:B)});return(0,ne.jsxs)("div",{className:"se-ruleStop",children:[(0,ne.jsx)("input",{className:"se-numberInput",type:"number","aria-label":"Stop value",value:h,onChange:D=>C([Sf(D.target.value)??0,P])}),(0,ne.jsx)(_r,{label:`At ${h}`,value:P,onChange:D=>C([h,D])}),(0,ne.jsx)("button",{type:"button",className:"se-iconButton","aria-label":"Remove stop",title:"Remove stop",disabled:d.colorScale.stops.length<=1,onClick:()=>_({...d.colorScale,stops:d.colorScale.stops.filter((D,B)=>B!==A)}),children:(0,ne.jsx)(cr.X,{size:14})})]},A)}),(0,ne.jsxs)("button",{type:"button",className:"se-animationButton",onClick:()=>{let h=d.colorScale.stops,P=h[h.length-1];_({...d.colorScale,stops:[...h,[(P?.[0]??0)+10,P?.[1]??"#ffffff"]]})},children:[(0,ne.jsx)(cr.Plus,{size:14})," Add stop"]})]}):null,(0,ne.jsx)(Bc,{label:"Pulse",checked:w!==void 0,color:w?.color??"#ff3b30",onToggle:h=>l(d.id,P=>({...P,pulse:h?{color:"#ff3b30",speed:1}:void 0})),onColorChange:h=>l(d.id,P=>({...P,pulse:{...w,color:h}}))}),w?(0,ne.jsx)(ne.Fragment,{children:(0,ne.jsx)(J,{label:"Pulses per second",value:w.speed??1,min:.2,max:4,step:.1,formatValue:h=>h.toFixed(1),onChange:h=>l(d.id,P=>({...P,pulse:{...w,speed:h}}))})}):null,(0,ne.jsxs)("div",{className:"se-ruleHint se-ruleMatches",children:["Matches ",u(d)," of ",x," ",x===1?"object":"objects"," right now."]})]},d.id)}),(0,ne.jsxs)("button",{type:"button",className:"se-animationButton",onClick:c,children:[(0,ne.jsx)(cr.Plus,{size:14})," Add rule"]})]})}var Mr=require("lucide-react");var sn=require("react/jsx-runtime"),dP=[{label:"General",icon:(0,sn.jsx)(Mr.Box,{})},{label:"Lighting",icon:(0,sn.jsx)(Mr.Spotlight,{})},{label:"Animations",icon:(0,sn.jsx)(Mr.Clapperboard,{})},{label:"Post Processing",icon:(0,sn.jsx)(Mr.Sparkles,{})},{label:"Annotations",icon:(0,sn.jsx)(Mr.MessageSquareText,{})},{label:"Cinematic",icon:(0,sn.jsx)(Mr.Video,{})},{label:"Rules",icon:(0,sn.jsx)(Mr.Palette,{})}],iw={active:[],play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}},uP=[],pP={};function Mf({config:e,onChange:t,activeSubTab:n,onActiveSubTabChange:r,cameraState:i=null,onPreviewWaypoint:o,animationClipDetails:a=[],materialVariants:s=uP,objectBindings:l=pP,animationPlayback:c=iw}){let[p,u]=(0,gp.useState)("General"),d=n??p,m=c??iw,{tier:g}=Sr(),v=Bi(g,"starter"),M=Bi(g,"growth");(0,gp.useEffect)(()=>{n!==void 0&&u(n)},[n]);let w=x=>{n===void 0&&u(x),r?.(x)};return(0,sn.jsxs)("div",{className:"se-tabContent",children:[(0,sn.jsx)("div",{className:"se-subTabRow",children:dP.map(x=>(0,sn.jsx)("button",{type:"button",title:x.label,"aria-label":x.label,"aria-pressed":d===x.label,className:`se-subTab ${d===x.label?"se-subTab--active":""}`,onClick:()=>w(x.label),children:x.icon},x.label))}),d==="General"&&(0,sn.jsx)(mf,{config:e,onChange:t,materialVariants:s}),d==="Lighting"&&(0,sn.jsx)(gf,{config:e,onChange:t}),d==="Animations"&&(v?(0,sn.jsx)(bf,{config:e,onChange:t,clipDetails:a,active:m.active,play:m.play,pause:m.pause,stop:m.stop,setSpeed:m.setSpeed,seek:m.seek}):(0,sn.jsx)(qn,{requiredTier:"starter",feature:"Animation configuration"})),d==="Post Processing"&&(M?(0,sn.jsx)(ff,{config:e,onChange:t}):(0,sn.jsx)(qn,{requiredTier:"growth",feature:"Post-processing effects"})),d==="Annotations"&&(v?(0,sn.jsx)(xf,{config:e,onChange:t}):(0,sn.jsx)(qn,{requiredTier:"starter",feature:"Annotations"})),d==="Cinematic"&&(v?(0,sn.jsx)(yf,{config:e,onChange:t,cameraState:i,onPreviewWaypoint:o}):(0,sn.jsx)(qn,{requiredTier:"starter",feature:"Cinematic camera"})),d==="Rules"&&(v?(0,sn.jsx)(_f,{config:e,onChange:t,objectBindings:l}):(0,sn.jsx)(qn,{requiredTier:"starter",feature:"Style rules"}))]})}var rl=require("lucide-react"),ln=require("react/jsx-runtime");function ow({title:e,trailing:t,children:n,disabled:r,open:i,onToggle:o,tooltip:a}){let s=a?`${a}`:e;return(0,ln.jsxs)("div",{className:"bb-materialPanel",children:[(0,ln.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:o,"aria-expanded":i,title:s,children:[(0,ln.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,ln.jsx)(rl.ChevronDown,{size:14,className:`bb-materialPanelChevron ${i?"bb-materialPanelChevron--open":""}`}),(0,ln.jsx)("span",{className:"bb-materialPanelTitle",children:e}),a?(0,ln.jsx)("span",{className:"bb-materialPanelHelp",title:s,"aria-label":s,role:"img",onClick:l=>l.stopPropagation(),children:(0,ln.jsx)(rl.Info,{size:12})}):null]}),t?(0,ln.jsx)("div",{onClick:l=>l.stopPropagation(),children:t}):null]}),i?(0,ln.jsx)("div",{className:"bb-materialPanelBody",style:r?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function tr({title:e,open:t,onToggle:n,trailing:r,children:i,tooltip:o}){let a=o?`${e}: ${o}`:e;return(0,ln.jsxs)("div",{className:"bb-section",children:[(0,ln.jsxs)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:n,"aria-expanded":t,title:a,children:[(0,ln.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,ln.jsx)(rl.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,ln.jsx)("h2",{className:"bb-sectionTitle",children:e}),o?(0,ln.jsx)("span",{className:"bb-sectionHelp",title:a,"aria-label":a,role:"img",onClick:s=>s.stopPropagation(),children:(0,ln.jsx)(rl.Info,{size:13})}):null]}),r?(0,ln.jsx)("span",{onClick:s=>s.stopPropagation(),children:r}):null]}),t?(0,ln.jsx)("div",{className:"bb-sectionBody",children:i}):null]})}function aw({checked:e,onChange:t,label:n}){return(0,ln.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,ln.jsx)("input",{type:"checkbox",checked:e,onChange:r=>t(r.target.checked)}),(0,ln.jsx)("span",{className:"se-switchTrack",children:(0,ln.jsx)("span",{className:"se-switchThumb"})})]})}var Tf=require("react"),dw=require("lucide-react");var sw=["front","back","double"],lw=["normal","additive"];var bp=require("react/jsx-runtime");function Wr({panelKey:e,title:t,tooltip:n,toggleLabel:r,controls:i,children:o,requiredTier:a}){let{openMaterialPanels:s,materialPanelEnabled:l,onToggleMaterialPanel:c,onSetMaterialPanelState:p}=i,u=a?.locked??!1;return(0,bp.jsx)(ow,{title:t,tooltip:n,disabled:u||!l[e],open:s[e],onToggle:()=>c(e),trailing:(0,bp.jsx)(aw,{checked:!u&&l[e],onChange:u?()=>{}:d=>p(e,d),label:r??`Toggle ${t}`}),children:u&&a?(0,bp.jsx)(qn,{requiredTier:a.tier,feature:t}):o})}var Oc=require("react"),vp=require("react-colorful"),il=require("lucide-react");var st=require("react/jsx-runtime");function Mn({label:e,value:t,placeholder:n,onChange:r}){let i=(0,Oc.useRef)(null);return(0,st.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,st.jsx)("label",{className:"bb-label",children:e}),(0,st.jsxs)("div",{className:"bb-fileField",children:[(0,st.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:n,value:t,onChange:o=>{let a=o.target.value;!a&&t&&Hl(t),r(a)}}),(0,st.jsx)("button",{type:"button",className:"bb-fileFieldButton",onClick:()=>i.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,st.jsx)(il.FileUp,{size:20})}),(0,st.jsx)("input",{ref:i,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:o=>{let a=o.target.files?.[0];if(!a)return;let s=Ed(a);t&&t!==s&&Hl(t),Ma(s,URL.createObjectURL(a)),r(s),o.target.value=""}})]})]})}function _o({label:e,value:t,fallback:n="#ffffff",variant:r="swatch",onChange:i}){let[o,a]=(0,Oc.useState)(!1),s=t||n,l=(0,Oc.useRef)(null);return(0,st.jsxs)("div",{className:"bb-field",children:[(0,st.jsx)("span",{className:"bb-label",children:e}),(0,st.jsx)("div",{className:"se-fieldInline",children:(0,st.jsx)("span",{ref:l,className:r==="input"?"bb-colorFieldAnchor":void 0,style:r==="swatch"?{display:"inline-flex"}:void 0,children:(0,st.jsx)(vp.HexColorInput,{prefixed:!0,className:r==="input"?"bb-input bb-colorInput":"se-swatch","aria-label":e,onClick:()=>a(c=>!c),style:{background:s,color:Qo(s)},color:s,onChange:i})})}),o?(0,st.jsx)(Rc,{anchorRef:l,onClose:()=>a(!1),children:(0,st.jsx)(vp.HexColorPicker,{color:s,onChange:i})}):null]})}function Ic({label:e,checked:t,onChange:n}){return(0,st.jsxs)("label",{className:"bb-checkbox",children:[(0,st.jsx)("input",{type:"checkbox",checked:t,onChange:r=>n(r.target.checked)}),e]})}function cw({label:e,value:t,min:n,max:r,step:i,placeholder:o,disabled:a,onChange:s}){return(0,st.jsxs)("div",{className:"bb-field",children:[(0,st.jsx)("label",{className:"bb-label",children:e}),(0,st.jsx)("input",{className:"bb-input",type:"number",min:n,max:r,step:i,placeholder:o,disabled:a,value:t??"",onChange:l=>s(l.target.value===""?void 0:Number(l.target.value))})]})}function hP(e,t){let n=t<1?Math.ceil(-Math.log10(t)):0,r=10**Math.max(n,0);return Math.round(e*r)/r}function Cf({label:e,value:t,min:n,max:r,step:i=.01,disabled:o,onChange:a}){let s=t??0,l=p=>{let u=p;return n!==void 0&&(u=Math.max(n,u)),r!==void 0&&(u=Math.min(r,u)),u},c=p=>{a(l(hP(s+p*i,i)))};return(0,st.jsxs)("div",{className:"bb-field",children:[(0,st.jsx)("label",{className:"bb-label",children:e}),(0,st.jsxs)("div",{className:"bb-numberStepper",children:[(0,st.jsx)("button",{type:"button",className:"bb-numberStepper-btn",disabled:o,onClick:()=>c(-1),"aria-label":`Decrease ${e}`,title:`Decrease ${e}`,children:(0,st.jsx)(il.Minus,{size:12})}),(0,st.jsx)("input",{className:"bb-input bb-numberStepper-input",type:"number",min:n,max:r,step:i,disabled:o,value:s,onChange:p=>{p.target.value!==""&&a(l(Number(p.target.value)))}}),(0,st.jsx)("button",{type:"button",className:"bb-numberStepper-btn",disabled:o,onClick:()=>c(1),"aria-label":`Increase ${e}`,title:`Increase ${e}`,children:(0,st.jsx)(il.Plus,{size:12})})]})]})}function ol({label:e,value:t,options:n,onChange:r}){return(0,st.jsxs)("div",{className:"bb-field",children:[(0,st.jsx)("label",{className:"bb-label",children:e}),(0,st.jsx)("select",{className:"bb-select",value:t,onChange:i=>r(i.target.value),children:n.map(i=>(0,st.jsx)("option",{value:i,children:i},i))})]})}function Ft({label:e,value:t,min:n,max:r,step:i,onChange:o}){return(0,st.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,st.jsx)("label",{className:"bb-label",children:e}),(0,st.jsxs)("div",{className:"bb-sliderField",children:[(0,st.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:n,max:r,step:i,value:t??n,onChange:s=>o(Number(s.target.value))}),(0,st.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:n,max:r,step:i,value:t??"",onChange:s=>o(s.target.value===""?void 0:Number(s.target.value))})]})]})}var Y=require("react/jsx-runtime");function uw({selectedItem:e,selectedMaterial:t,pbrWorkflow:n,onPbrWorkflowChange:r,openMaterialPanels:i,materialPanelEnabled:o,onToggleMaterialPanel:a,onSetMaterialPanelState:s,updateSelectedMaterial:l,setSelectedTexturePath:c,isTexturePositioningEnabled:p,onConfirmTexturePosition:u}){let d={openMaterialPanels:i,materialPanelEnabled:o,onToggleMaterialPanel:a,onSetMaterialPanelState:s},{tier:m}=Sr(),g=Bi(m,"starter"),v={tier:"starter",locked:!g},[M,w]=(0,Tf.useState)("roughness"),[x,S]=(0,Tf.useState)("factor"),k=(y,h)=>{l(e,P=>{if(!P?.texture?.path)return P??{};let A=P.texture.offset??[0,0],C=[A[0],A[1]];return C[y]=h,{...P,texture:{...P.texture,offset:C}}})},b=y=>{l(e,h=>{if(!h?.texture?.path)return h??{};let P=(y%360+360)%360;return{...h,texture:{...h.texture,rotation:P*Math.PI/180}}})},_=()=>{c(e,"texture","")};return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Wr,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:d,children:g?(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(ol,{label:"Workflow",value:n,options:["metalness","specular"],onChange:r}),(0,Y.jsx)("div",{className:"bb-field bb-field--full",children:(0,Y.jsx)("p",{className:"bb-note",style:{margin:0},children:n==="metalness"?"Metalness workflow maps directly to the underlying physical material.":"Specular workflow exposes the same physical material with non-metal specular controls; it does not switch to a separate spec/gloss shader."})}),(0,Y.jsx)(Mn,{label:n==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:y=>c(e,"texture",y)}),t?.texture?.path?(0,Y.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Y.jsxs)("div",{className:"bb-fieldLabel",style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,Y.jsx)("span",{className:"bb-label",children:"Texture position"}),(0,Y.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:_,title:"Remove the base color texture and its position offset",children:[(0,Y.jsx)(dw.Trash2,{size:14,style:{marginRight:4,verticalAlign:"-2px"}}),"Remove texture"]})]}),(0,Y.jsxs)("div",{className:"bb-grid",style:{marginTop:6},children:[(0,Y.jsx)(Cf,{label:"Offset X",value:t?.texture?.offset?.[0]??0,step:.01,onChange:y=>k(0,y)}),(0,Y.jsx)(Cf,{label:"Offset Y",value:t?.texture?.offset?.[1]??0,step:.01,onChange:y=>k(1,y)})]}),(0,Y.jsx)(Ft,{label:"Rotation",value:((t?.texture?.rotation??0)*180/Math.PI%360+360)%360,min:0,max:360,step:1,onChange:y=>b(y??0)}),p?(0,Y.jsx)("button",{type:"button",className:"bb-button bb-button--primary",style:{marginTop:8},onClick:u,title:"Confirm this texture position and exit positioning mode",children:"Done positioning"}):(0,Y.jsx)("p",{className:"bb-note",style:{margin:"6px 0 0"},children:"Double-click the object in the preview to drag its texture directly (scroll to zoom), or edit its offset numerically once positioning."})]}):null,(0,Y.jsx)(_o,{label:n==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:y=>l(e,h=>({...h,baseColor:y}))}),n==="metalness"?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Ft,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,metalness:y}))}),(0,Y.jsx)(Mn,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:y=>c(e,"metalnessMap",y)})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Ft,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,specularIntensity:y}))}),(0,Y.jsx)(_o,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:y=>l(e,h=>({...h,specularColor:y}))}),(0,Y.jsx)(Mn,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:y=>c(e,"specularIntensityMap",y)}),(0,Y.jsx)(Mn,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:y=>c(e,"specularColorMap",y)})]}),(0,Y.jsx)(Ft,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,reflectivity:y}))})]}):(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(_o,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:y=>l(e,h=>({...h,baseColor:y}))}),(0,Y.jsx)(Ft,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,metalness:y}))}),(0,Y.jsx)("div",{className:"bb-field bb-field--full",children:(0,Y.jsx)(qn,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,Y.jsx)(Wr,{panelKey:"roughness",requiredTier:v,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(ol,{label:"Mode",value:M,options:["roughness","glossiness"],onChange:w}),(0,Y.jsx)("div",{className:"bb-field bb-field--full",children:(0,Y.jsx)("p",{className:"bb-note",style:{margin:0},children:M==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),M==="roughness"?(0,Y.jsx)(Ft,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,roughness:y}))}):(0,Y.jsx)(Ft,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,roughness:y===void 0?void 0:1-y}))}),(0,Y.jsx)(Mn,{label:M==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:y=>c(e,"roughnessMap",y)})]})}),(0,Y.jsx)(Wr,{panelKey:"emission",requiredTier:v,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(_o,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:y=>l(e,h=>({...h,emissive:y}))}),(0,Y.jsx)(Ft,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:y=>l(e,h=>({...h,emissiveIntensity:y}))}),(0,Y.jsx)(Mn,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:y=>c(e,"emissiveMap",y)})]})}),(0,Y.jsx)(Wr,{panelKey:"opacity",requiredTier:v,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Ft,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,opacity:y}))}),(0,Y.jsx)(Ft,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,alphaTest:y}))}),(0,Y.jsx)(Mn,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:y=>c(e,"alphaMap",y)}),(0,Y.jsx)(ol,{label:"Blending mode",value:t?.blendingMode??"normal",options:lw,onChange:y=>l(e,h=>({...h,blendingMode:y}))}),(0,Y.jsxs)("div",{className:"bb-field",children:[(0,Y.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,Y.jsx)("div",{className:"bb-checkboxRow",children:(0,Y.jsx)(Ic,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:y=>l(e,h=>({...h,alphaHash:y}))})})]}),(0,Y.jsxs)("div",{className:"bb-field",children:[(0,Y.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,Y.jsx)("div",{className:"bb-checkboxRow",children:(0,Y.jsx)(Ic,{label:"Use dithering",checked:t?.dithering??!1,onChange:y=>l(e,h=>({...h,dithering:y}))})})]})]})}),(0,Y.jsxs)(Wr,{panelKey:"normalBump",requiredTier:v,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:d,children:[(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Mn,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:y=>c(e,"normalMap",y)}),(0,Y.jsx)(Ft,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:y=>l(e,h=>({...h,normalScale:y}))}),(0,Y.jsx)(Mn,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:y=>c(e,"bumpMap",y)}),(0,Y.jsx)(Ft,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:y=>l(e,h=>({...h,bumpScale:y}))})]}),(0,Y.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Y.jsx)(Ic,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:y=>l(e,h=>({...h,flipNormalY:y}))})})]}),(0,Y.jsx)(Wr,{panelKey:"displacement",requiredTier:v,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Mn,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:y=>c(e,"displacementMap",y)}),(0,Y.jsx)(Ft,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:y=>l(e,h=>({...h,displacementScale:y}))}),(0,Y.jsx)(Ft,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:y=>l(e,h=>({...h,displacementBias:y}))})]})}),(0,Y.jsx)(Wr,{panelKey:"ao",requiredTier:v,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Mn,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:y=>c(e,"aoMap",y)}),(0,Y.jsx)(Ft,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:y=>l(e,h=>({...h,aoMapIntensity:y}))})]})}),(0,Y.jsxs)(Wr,{panelKey:"clearcoat",requiredTier:v,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:d,children:[(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Mn,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:y=>c(e,"clearcoatMap",y)}),(0,Y.jsx)(Ft,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,clearcoat:y}))}),(0,Y.jsx)(Mn,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:y=>c(e,"clearcoatRoughnessMap",y)}),(0,Y.jsx)(Ft,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,clearcoatRoughness:y}))}),(0,Y.jsx)(Mn,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:y=>c(e,"clearcoatNormalMap",y)}),(0,Y.jsx)(Ft,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:y=>l(e,h=>({...h,clearcoatNormalScale:y}))})]}),(0,Y.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,Y.jsx)(Ic,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:y=>l(e,h=>({...h,flipClearcoatNormalY:y}))})})]}),(0,Y.jsx)(Wr,{panelKey:"sheen",requiredTier:v,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Ft,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,sheen:y}))}),(0,Y.jsx)(_o,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:y=>l(e,h=>({...h,sheenColor:y}))}),(0,Y.jsx)(Mn,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:y=>c(e,"sheenColorMap",y)}),(0,Y.jsx)(Ft,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,sheenRoughness:y}))}),(0,Y.jsx)(Mn,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:y=>c(e,"sheenRoughnessMap",y)})]})}),(0,Y.jsx)(Wr,{panelKey:"anisotropy",requiredTier:v,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Ft,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,anisotropy:y}))}),(0,Y.jsx)(ol,{label:"Tilt direction",value:x,options:["factor","texture"],onChange:S}),x==="factor"?(0,Y.jsx)(Ft,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:y=>l(e,h=>({...h,anisotropyRotation:y}))}):(0,Y.jsx)(Mn,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:y=>c(e,"anisotropyMap",y)})]})}),(0,Y.jsx)(Wr,{panelKey:"transmission",requiredTier:v,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:d,children:(0,Y.jsxs)("div",{className:"bb-grid",children:[(0,Y.jsx)(Ft,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:y=>l(e,h=>({...h,transmission:y}))}),(0,Y.jsx)(Mn,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:y=>c(e,"transmissionMap",y)}),(0,Y.jsx)(Ft,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:y=>l(e,h=>({...h,thickness:y}))}),(0,Y.jsx)(Mn,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:y=>c(e,"thicknessMap",y)}),(0,Y.jsx)(_o,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:y=>l(e,h=>({...h,attenuationColor:y}))}),(0,Y.jsx)(cw,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:y=>l(e,h=>({...h,attenuationDistance:y}))})]})}),(0,Y.jsx)(Wr,{panelKey:"faces",requiredTier:v,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:d,children:(0,Y.jsx)("div",{className:"bb-grid",children:(0,Y.jsx)(ol,{label:"Side",value:t?.side??"front",options:sw,onChange:y=>l(e,h=>({...h,side:y}))})})})]})}var pw=[{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 al=require("react/jsx-runtime");function hw({disabled:e,onApply:t}){return(0,al.jsx)("div",{className:"bb-presetGallery",children:pw.map(n=>(0,al.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${n.label} preset`,onClick:()=>t(n.material),children:[(0,al.jsx)("span",{className:"bb-presetSwatchColor",style:{background:n.swatch}}),(0,al.jsx)("span",{className:"bb-presetSwatchLabel",children:n.label})]},n.id))})}var sl=require("react"),ra=require("lucide-react"),Oi=require("react/jsx-runtime");function Pf({disabled:e,exporting:t,onExportJson:n,onExportTs:r}){let[i,o]=(0,sl.useState)(!1),a=(0,sl.useRef)(null);return(0,sl.useEffect)(()=>{if(!i)return;let s=l=>{a.current?.contains(l.target)||o(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[i]),(0,Oi.jsxs)("div",{className:"bb-exportMenuWrapper",ref:a,children:[(0,Oi.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>o(s=>!s),title:"Export",children:[(0,Oi.jsx)(ra.Download,{size:14}),t?"Exporting\u2026":"Export",(0,Oi.jsx)(ra.ChevronDown,{size:12})]}),i&&(0,Oi.jsxs)("div",{className:"bb-exportMenu",children:[(0,Oi.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{o(!1),n()},children:[(0,Oi.jsx)(ra.FileJson,{size:14}),"JSON"]}),(0,Oi.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{o(!1),r()},children:[(0,Oi.jsx)(ra.FileCode2,{size:14}),"TypeScript"]})]})]})}var pi=require("react/jsx-runtime");function mw({selectedItem:e,selectedBinding:t,open:n,onToggle:r,updateBinding:i,idError:o}){return(0,pi.jsx)(tr,{title:"Identity",open:n,onToggle:r,children:(0,pi.jsxs)("div",{className:"bb-grid",children:[(0,pi.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,pi.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,pi.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,pi.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,pi.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,pi.jsx)("label",{className:"bb-label",children:"ID"}),(0,pi.jsx)("input",{className:`bb-input ${o?"bb-input--error":""}`,value:t.id,onChange:a=>i(e,s=>({...s,id:a.target.value}))}),o?(0,pi.jsx)("span",{className:"bb-status bb-status--error",children:o}):null]})]})})}var zc=require("react");var Vt=require("react/jsx-runtime");function fw({selectedItem:e,selectedBinding:t,open:n,onToggle:r,updateBinding:i}){let[o,a]=(0,zc.useState)(t.group??""),[s,l]=(0,zc.useState)(t.tags?.join(", ")??"");(0,zc.useEffect)(()=>{a(t.group??""),l(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let c=()=>{i(e,u=>({...u,group:o.trim()||void 0}))},p=()=>{let u=[...new Set(s.split(",").map(d=>d.trim()).filter(Boolean))];i(e,d=>({...d,tags:u.length>0?u:void 0}))};return(0,Vt.jsxs)(tr,{title:"Basics",open:n,onToggle:r,children:[(0,Vt.jsxs)("div",{className:"bb-grid",children:[(0,Vt.jsxs)("div",{className:"bb-field",children:[(0,Vt.jsx)("label",{className:"bb-label",children:"Label"}),(0,Vt.jsx)("input",{className:"bb-input",value:t.label??"",onChange:u=>i(e,d=>({...d,label:u.target.value}))})]}),(0,Vt.jsxs)("div",{className:"bb-field",children:[(0,Vt.jsx)("label",{className:"bb-label",children:"Type"}),(0,Vt.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type??"other",onChange:u=>i(e,d=>({...d,type:u.target.value}))}),(0,Vt.jsx)("datalist",{id:"binding-type-suggestions",children:Q1.map(u=>(0,Vt.jsx)("option",{value:u},u))})]}),(0,Vt.jsxs)("div",{className:"bb-field",children:[(0,Vt.jsx)("label",{className:"bb-label",children:"Status"}),(0,Vt.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:u=>i(e,d=>({...d,status:u.target.value})),children:mp.map(u=>(0,Vt.jsx)("option",{value:u,children:u},u))})]}),(0,Vt.jsxs)("div",{className:"bb-field",children:[(0,Vt.jsx)("label",{className:"bb-label",children:"Group"}),(0,Vt.jsx)("input",{className:"bb-input",placeholder:"paint",value:o,onChange:u=>a(u.target.value),onBlur:c,onKeyDown:u=>{u.key==="Enter"&&u.currentTarget.blur()}})]}),(0,Vt.jsxs)("div",{className:"bb-field",children:[(0,Vt.jsx)("label",{className:"bb-label",children:"Tags"}),(0,Vt.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:s,onChange:u=>l(u.target.value),onBlur:p,onKeyDown:u=>{u.key==="Enter"&&u.currentTarget.blur()}})]})]}),(0,Vt.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,Vt.jsxs)("label",{className:"bb-checkbox",children:[(0,Vt.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:u=>i(e,d=>({...d,selectable:u.target.checked}))}),"selectable"]}),(0,Vt.jsxs)("label",{className:"bb-checkbox",children:[(0,Vt.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:u=>i(e,d=>({...d,hoverable:u.target.checked}))}),"hoverable"]}),(0,Vt.jsxs)("label",{className:"bb-checkbox",children:[(0,Vt.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:u=>i(e,d=>({...d,visible:u.target.checked}))}),"visible"]})]})]})}var xp=require("react");var gt=require("react/jsx-runtime"),gw=Sa.filter(e=>e.handling==="viewer"),mP=Sa.filter(e=>e.handling==="host");function bw({selectedItem:e,selectedBinding:t,open:n,onToggle:r,updateBinding:i}){let[o,a]=(0,xp.useState)(new Set);(0,xp.useEffect)(()=>{a(new Set)},[e]);let s=t.actions??[],l=(u,d)=>i(e,m=>({...m,actions:(m.actions??[]).map((g,v)=>v===u?d(g):g)})),c=u=>{i(e,d=>({...d,actions:(d.actions??[]).filter((m,g)=>g!==u)})),a(d=>{let m=new Set;return d.forEach(g=>{g<u?m.add(g):g>u&&m.add(g-1)}),m})},p=(u,d)=>a(m=>{let g=new Set(m);return d?g.add(u):g.delete(u),g});return(0,gt.jsxs)(tr,{title:"Actions",open:n,onToggle:r,children:[(0,gt.jsx)("div",{className:"bb-actionList",children:s.map((u,d)=>{let m=zl(u.id),g=o.has(d)||!m,v=u.id.trim(),M=m?null:zb(u.id),w=v.length>0&&s.some((x,S)=>S!==d&&x.id.trim()===v);return(0,gt.jsxs)("div",{className:"bb-actionCard",children:[(0,gt.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,gt.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",d+1]}),(0,gt.jsx)("div",{className:"bb-actionCardMeta",children:u.type})]}),(0,gt.jsxs)("div",{className:"bb-actionGrid",children:[(0,gt.jsxs)("div",{className:"bb-field",children:[(0,gt.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,gt.jsxs)("select",{className:"bb-select",value:g?_d:u.id,onChange:x=>{let S=x.target.value;if(S===_d){p(d,!0);return}p(d,!1);let k=zl(S);l(d,b=>({...b,id:S,label:k&&bh(b.label)?k.label:b.label}))},children:[(0,gt.jsx)("optgroup",{label:"Handled by the viewer",children:gw.map(x=>(0,gt.jsx)("option",{value:x.id,children:x.id},x.id))}),(0,gt.jsx)("optgroup",{label:"Handled by your app",children:mP.map(x=>(0,gt.jsx)("option",{value:x.id,children:x.id},x.id))}),(0,gt.jsx)("option",{value:_d,children:"Custom\u2026"})]})]}),g?(0,gt.jsxs)("div",{className:"bb-field",children:[(0,gt.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,gt.jsx)("input",{className:"bb-input",value:u.id,placeholder:"open-datasheet",onChange:x=>{p(d,!0),l(d,S=>({...S,id:x.target.value}))}})]}):null,(0,gt.jsxs)("div",{className:"bb-field",children:[(0,gt.jsx)("label",{className:"bb-label",children:"Label"}),(0,gt.jsx)("input",{className:"bb-input",value:u.label,onChange:x=>l(d,S=>({...S,label:x.target.value}))})]}),m?(0,gt.jsx)("span",{className:"bb-note",children:m.description}):v.length===0?(0,gt.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,gt.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.",M?(0,gt.jsxs)(gt.Fragment,{children:[" Did you mean ",(0,gt.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{p(d,!1);let x=zl(M);l(d,S=>({...S,id:M,label:x&&bh(S.label)?x.label:S.label}))},children:M}),"?"]}):null]}),u.effects?.length?(0,gt.jsxs)("span",{className:"bb-note",children:[u.effects.length," declarative effect",u.effects.length===1?"":"s",", execute with useViewerActions."]}):null,w?(0,gt.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,gt.jsx)("div",{className:"bb-actionFooter",children:(0,gt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>c(d),children:"Remove Action"})})]},d)})}),(0,gt.jsx)("div",{style:{marginTop:10},children:(0,gt.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let u=gw.find(d=>!s.some(m=>m.id===d.id));i(e,d=>({...d,actions:[...d.actions??[],{id:u?.id??"",label:u?.label??"New Action",type:"command"}]})),u||p(s.length,!0)},children:"Add Action"})})]})}var xw=require("react"),ia=require("lucide-react");var lt=require("react/jsx-runtime"),vw=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function yw({selectedItem:e,selectedBinding:t,open:n,onToggle:r,updateBinding:i,placement:o,onPlacementChange:a,defaultSize:s,onImageFile:l,onNudge:c}){let{tier:p}=Sr(),u=(0,xw.useRef)(null),d=t.decals??[],m=o?.nodeKey===e?o:null,g=w=>i(e,x=>({...x,decals:w.length>0?w:void 0})),v=(w,x)=>g(d.map(S=>S.id===w?{...S,...x}:S)),M=w=>{w.image&&Hl(w.image),m?.decal.id===w.id&&a(null),g(d.filter(x=>x.id!==w.id))};return(0,lt.jsx)(tr,{title:"Decals",open:n,onToggle:r,tooltip:"Print a logo, image, or text on the selected object's surface.",children:Bi(p,"starter")?(0,lt.jsxs)(lt.Fragment,{children:[(0,lt.jsxs)("div",{className:"bb-decalActions",children:[(0,lt.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:()=>u.current?.click(),children:[(0,lt.jsx)(ia.ImagePlus,{size:15})," Add image"]}),(0,lt.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:()=>a({nodeKey:e,decal:{id:vw(),text:"Your text",color:"#ffffff",size:s}}),children:[(0,lt.jsx)(ia.Type,{size:15})," Add text"]}),(0,lt.jsx)("input",{ref:u,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif,image/svg+xml",className:"bb-hiddenInput",onChange:w=>{let x=w.target.files?.[0];if(w.target.value="",!x)return;let S=Ed(x);Ma(S,URL.createObjectURL(x)),l?.(S,x),a({nodeKey:e,decal:{id:vw(),image:S,size:s}})}})]}),d.length===0&&!m?(0,lt.jsx)("div",{className:"bb-decalEmpty",children:"No decals on this object yet."}):null,d.map(w=>(0,lt.jsxs)("div",{className:"bb-decalCard",children:[(0,lt.jsxs)("div",{className:"bb-decalCardHeader",children:[(0,lt.jsx)("span",{className:"bb-decalKind",children:w.image?"Image":"Text"}),(0,lt.jsx)("span",{className:"bb-decalName",title:w.image??w.text,children:w.image??w.text}),(0,lt.jsx)("button",{type:"button",className:"bb-iconButton",title:"Move: drag the decal in the preview","aria-label":"Move decal","aria-pressed":m?.decal.id===w.id,onClick:()=>{let{position:x,normal:S,...k}=w;a(m?.decal.id===w.id?null:{nodeKey:e,decal:k,moving:!0})},children:(0,lt.jsx)(ia.Move,{size:15})}),(0,lt.jsx)("button",{type:"button",className:"bb-iconButton bb-iconButton--danger",title:"Delete decal","aria-label":"Delete decal",onClick:()=>M(w),children:(0,lt.jsx)(ia.Trash2,{size:15})})]}),(0,lt.jsx)(Md,{onNudge:x=>c(w.id,x)}),(0,lt.jsxs)("div",{className:"bb-grid",children:[w.image?null:(0,lt.jsxs)(lt.Fragment,{children:[(0,lt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,lt.jsx)("label",{className:"bb-label",children:"Text"}),(0,lt.jsx)("input",{className:"bb-input",value:w.text??"",onChange:x=>v(w.id,{text:x.target.value})})]}),(0,lt.jsx)(_o,{label:"Colour",variant:"input",value:w.color??"#ffffff",onChange:x=>v(w.id,{color:x})}),(0,lt.jsxs)("div",{className:"bb-field",children:[(0,lt.jsx)("label",{className:"bb-label",children:"Weight"}),(0,lt.jsxs)("select",{className:"bb-input bb-decalWeight",value:w.fontWeight??"bold",onChange:x=>v(w.id,{fontWeight:x.target.value}),children:[(0,lt.jsx)("option",{value:"bold",children:"Bold"}),(0,lt.jsx)("option",{value:"normal",children:"Regular"})]})]})]}),(0,lt.jsx)(Ft,{label:"Size",value:Number(w.size.toFixed(4)),min:Number((s/20).toPrecision(2)),max:Number((s*6).toPrecision(2)),step:Number((s/50).toPrecision(1)),onChange:x=>x!==void 0&&x>0&&v(w.id,{size:x})}),(0,lt.jsx)(Ft,{label:"Rotation (\xB0)",value:Math.round((w.rotation??0)*180/Math.PI),min:-180,max:180,step:1,onChange:x=>v(w.id,{rotation:(x??0)*Math.PI/180})}),(0,lt.jsx)(Ft,{label:"Opacity",value:w.opacity??1,min:0,max:1,step:.05,onChange:x=>v(w.id,{opacity:x??1})})]})]},w.id))]}):(0,lt.jsx)(qn,{requiredTier:"starter",feature:"Decals"})})}var yp=require("lucide-react");var jt=require("react/jsx-runtime");function ww({selectedBinding:e,open:t,onToggle:n,cameraState:r,formattedCameraState:i,savedCameraPosition:o,onSaveCameraPosition:a,onGoToSavedCamera:s,onClearSavedCamera:l,onResetView:c,onFitScene:p}){return(0,jt.jsxs)(tr,{title:"Camera Position",open:t,onToggle:n,children:[(0,jt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,jt.jsx)("span",{className:"bb-cameraLiveBadge",children:"LIVE"}),(0,jt.jsxs)("div",{className:"se-waypointBody",children:[(0,jt.jsx)("div",{className:"bb-cameraWaypointLabel",children:"Current view"}),r?(0,jt.jsxs)(jt.Fragment,{children:[(0,jt.jsxs)("div",{className:"se-waypointCoords",children:["pos ",i?.position]}),(0,jt.jsxs)("div",{className:"se-waypointCoords",children:["look ",i?.target]})]}):(0,jt.jsx)("div",{className:"se-waypointCoords",children:"Move the camera to see live position"})]})]}),(0,jt.jsxs)("div",{className:"bb-cameraControls bb-cameraControls--centered",children:[(0,jt.jsx)("button",{type:"button",className:"bb-button bb-button--primary",onClick:a,disabled:!r,children:"Save"}),(0,jt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:c,children:"Reset View"}),(0,jt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:p,children:"Fit Scene"})]}),o?.position&&o?.target&&(0,jt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,jt.jsx)("span",{className:"bb-cameraSavedBadge",children:"SAVED"}),(0,jt.jsxs)("div",{className:"se-waypointBody",children:[(0,jt.jsxs)("div",{className:"bb-cameraWaypointLabel",children:["For ",e.label]}),(0,jt.jsxs)("div",{className:"se-waypointCoords",children:["pos [",o.position.map(u=>u.toFixed(1)).join(", "),"]"]}),(0,jt.jsxs)("div",{className:"se-waypointCoords",children:["look [",o.target.map(u=>u.toFixed(1)).join(", "),"]"]})]}),(0,jt.jsxs)("div",{className:"se-waypointActions",children:[(0,jt.jsx)("button",{className:"se-waypointAction",onClick:s,title:"Fly camera to the saved position",children:(0,jt.jsx)(yp.MapPin,{size:15})}),(0,jt.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:l,title:"Delete saved position",children:(0,jt.jsx)(yp.Trash2,{size:15})})]})]}),(0,jt.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 ll=require("react"),wp=require("lucide-react");var ut=require("react/jsx-runtime"),Sw=["X","Y","Z"];var fP=.1;function Af(e){let t=e%360;return t<0?t+360:t}function _w(e){return Af(e*180/Math.PI)}function Mw(e){return e*Math.PI/180}function gP(e,t,n){let r=[...e],i=_w(e[t]);return r[t]=Mw(Af(i+n)),r}function Cw({value:e,min:t=-1/0,max:n=1/0,step:r=.1,disabled:i=!1,onChange:o,formatValue:a=c=>Number(c.toFixed(3)),ariaLabel:s,className:l}){let c=a(e),[p,u]=(0,ll.useState)(String(c)),d=(0,ll.useRef)(!1);return(0,ll.useLayoutEffect)(()=>{d.current||u(String(c))},[c]),(0,ut.jsx)("input",{type:"number",className:l,step:r,min:t===-1/0?void 0:t,max:n===1/0?void 0:n,value:p,disabled:i,"aria-label":s,onFocus:()=>{d.current=!0},onChange:m=>{let g=m.target.value;if(u(g),g===""||g==="-")return;let v=Number(g);if(Number.isFinite(v)){let M=Math.max(t,Math.min(n,v));o(M)}},onBlur:()=>{d.current=!1,u(String(a(e)))}})}function bP({value:e,min:t=-1/0,max:n=1/0,step:r=.1,disabled:i=!1,onChange:o,formatValue:a=l=>Number(l.toFixed(3)),label:s}){return(0,ut.jsx)("div",{className:"bb-transformAxesGrid",children:Sw.map((l,c)=>(0,ut.jsxs)("div",{className:"bb-transformAxis",children:[(0,ut.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:l}),(0,ut.jsx)("div",{className:"bb-transformAxisControl",children:(0,ut.jsx)(Cw,{className:"se-numberInput bb-transformNumberInput",step:r,min:t,max:n,value:e[c],disabled:i,formatValue:a,ariaLabel:`${l} ${s?.toLowerCase()||""}`,onChange:p=>{let u=[...e];u[c]=p,o(u)}})})]},l))})}function Tw({selectedItem:e,selectedBinding:t,open:n,onToggle:r,updateBinding:i,moveModeEnabled:o,onToggleMoveMode:a,transformSpace:s,onTransformSpaceChange:l,originalTransform:c}){let p=t.transform?.rotation??c?.rotation??[0,0,0],u=t.transform?.position??c?.position??[0,0,0],d=(x,S)=>{let k=x.transform?.rotation??c?.rotation??[0,0,0],b=x.transform?.position??c?.position??[0,0,0],_=x.transform?.scale??c?.scale??[1,1,1],y=c?.pivotLocal??[0,0,0],h=s1(b,k,S,_,y,c?.rotationOrder??"XYZ");return{...x,transform:{...x.transform,position:h,rotation:S}}},m=(x,S)=>{e&&i(e,k=>{let b=k.transform?.rotation??c?.rotation??[0,0,0],_=gP(b,x,S);return d(k,_)})},g=(x,S)=>{e&&i(e,k=>{let _=[...k.transform?.rotation??c?.rotation??[0,0,0]];return _[x]=Mw(Af(S)),d(k,_)})},v=(x,S)=>{e&&i(e,k=>{let _=[...k.transform?.position??c?.position??[0,0,0]];return _[x]=S,{...k,transform:{...k.transform,position:_}}})},M=(x,S)=>{e&&v(x,u[x]+S)},w=()=>{!e||!c||i(e,x=>{let S={...x.transform};return delete S.position,delete S.rotation,{...x,transform:Object.keys(S).length>0?S:void 0}})};return(0,ut.jsxs)(tr,{title:"Move & Rotate",open:n,onToggle:r,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,ut.jsxs)("div",{className:"se-field",children:[(0,ut.jsxs)("div",{className:"se-fieldLabel",children:[(0,ut.jsxs)("span",{children:[(0,ut.jsx)(wp.Move3d,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Transform gizmo"]}),(0,ut.jsxs)("label",{className:"se-switch","aria-label":"Toggle move mode",children:[(0,ut.jsx)("input",{type:"checkbox",checked:o,onChange:x=>a(x.target.checked)}),(0,ut.jsx)("span",{className:"se-switchTrack",children:(0,ut.jsx)("span",{className:"se-switchThumb"})})]})]}),(0,ut.jsx)("span",{className:"bb-note",children:"Select a mesh \xB7 drag the colored arrows or planes to move"})]}),(0,ut.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,ut.jsx)("div",{className:"se-fieldLabel",children:(0,ut.jsx)("span",{children:"Axis space"})}),(0,ut.jsx)("div",{className:"se-segmentedControl",children:["world","local"].map(x=>(0,ut.jsx)("button",{type:"button",className:`se-segmentedOption ${s===x?"se-segmentedOption--active":""}`,onClick:()=>l(x),children:x},x))})]}),(0,ut.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,ut.jsx)("div",{className:"se-fieldLabel",children:(0,ut.jsx)("span",{children:"Rotation (degrees)"})}),(0,ut.jsx)("div",{className:"bb-transformAxesGrid",children:Sw.map((x,S)=>{let k=Math.round(_w(p[S]));return(0,ut.jsxs)("div",{className:"bb-transformAxis",children:[(0,ut.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:x}),(0,ut.jsx)("div",{className:"bb-transformAxisControl",children:(0,ut.jsx)(Cw,{className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:k,disabled:!e,formatValue:b=>Math.round(b),ariaLabel:`${x} rotation in degrees`,onChange:b=>g(S,b)})})]},x)})})]}),(0,ut.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,ut.jsx)("div",{className:"se-fieldLabel",children:(0,ut.jsx)("span",{children:"Position"})}),(0,ut.jsx)(bP,{value:u,min:-1/0,max:1/0,step:fP,disabled:!e,label:"position",onChange:x=>{e&&i(e,S=>({...S,transform:{...S.transform,position:x}}))}})]}),(0,ut.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!c,onClick:w,title:"Restore this node's position and rotation to what they were in the original model",children:[(0,ut.jsx)(wp.RotateCcw,{size:14}),"Restore original position & rotation"]})]})}var Ya=require("react"),Pw=require("lucide-react");var gn=require("react/jsx-runtime"),Aw=(0,Ya.memo)(vP);function vP({bindings:e,selectedItem:t,onSelect:n,onHover:r,isOpen:i=!0,onToggle:o,isolatedItem:a=null,onIsolate:s}){let[l,c]=(0,Ya.useState)(""),p=(0,Ya.useMemo)(()=>Object.keys(e),[e]),u=(0,Ya.useMemo)(()=>{let d=l.trim().toLowerCase();return d?p.filter(m=>{let g=e[m];return m.toLowerCase().includes(d)||g.label?.toLowerCase().includes(d)||(g.type??"other").toLowerCase().includes(d)}):p},[e,p,l]);return(0,gn.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${i?"":"bb-sidebar--collapsed"}`,children:[(0,gn.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!i&&(0,gn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>o?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),i&&(0,gn.jsxs)(gn.Fragment,{children:[(0,gn.jsxs)("div",{children:[(0,gn.jsx)("div",{className:"bb-sectionKicker",children:"Scene Nodes"}),(0,gn.jsxs)("div",{className:"bb-sectionHeading",children:[u.length," visible entries"]})]}),(0,gn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>o?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]}),i&&(0,gn.jsxs)("section",{className:"bb-nodeList",children:[(0,gn.jsx)("div",{className:"bb-search",children:(0,gn.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:l,onChange:d=>c(d.target.value)})}),(0,gn.jsx)("div",{className:"bb-nodeItems",children:u.map(d=>{let m=e[d],g=d===t,v=d===a;return(0,gn.jsxs)("div",{className:`bb-nodeRow ${a&&!v?"bb-nodeRow--setAside":""}`,children:[(0,gn.jsxs)("button",{type:"button",className:`bb-nodeButton ${g?"bb-nodeButton--active":""}`,onClick:()=>n(d),onMouseEnter:()=>r?.(d),onMouseLeave:()=>r?.(null),children:[(0,gn.jsx)("span",{className:"bb-nodeName",children:d}),(0,gn.jsxs)("span",{className:"bb-nodeMeta",children:[m.type??"other",m.label===tf(d)?"":m.label||"\xB7 Untitled"]})]}),s?(0,gn.jsx)("button",{type:"button",className:`bb-nodeIsolate ${v?"bb-nodeIsolate--active":""}`,onClick:()=>s(v?null:d),title:v?"Show all":"Isolate in the preview","aria-label":`${v?"Show all":"Isolate"} ${d}`,"aria-pressed":v,children:(0,gn.jsx)(Pw.Focus,{size:14,"aria-hidden":"true"})}):null]},d)})})]})]})}var oa=require("react/jsx-runtime");function Ef({title:e,label:t,open:n,onToggle:r,draft:i,error:o,example:a,onDraftChange:s,onCommit:l}){return(0,oa.jsx)(tr,{title:e,open:n,onToggle:r,children:(0,oa.jsxs)("div",{className:"bb-field",children:[(0,oa.jsx)("label",{className:"bb-label",children:t}),(0,oa.jsx)("textarea",{className:"bb-textarea",value:i,onChange:c=>s(c.target.value),onBlur:l}),o?(0,oa.jsx)("span",{className:"bb-status bb-status--error",children:o}):(0,oa.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",a,"."]})]})})}function Ew(e,t){let n=new Map(e.animations.clips.map(o=>[o.sourceName,o])),r=t.map(({sourceName:o})=>n.get(o)??{sourceName:o,displayName:o,hidden:!1,loopMode:"repeat",speed:1}),i=e.animations.autoplayClip&&r.some(o=>o.sourceName===e.animations.autoplayClip&&!o.hidden)?e.animations.autoplayClip:null;return{clips:r,autoplayClip:i}}var eo=require("react"),xP=100;function yP(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 r=t.track?e.edits+1:e.edits;return t.coalesce?{...e,present:n,future:[],edits:r}:{past:[...e.past,e.present].slice(-xP),present:n,future:[],edits:r}}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,...r]=e.future;return{past:[...e.past,e.present],present:n,future:r,edits:e.edits+1}}case"reset":return{past:[],present:t.value,future:[],edits:t.track?e.edits+1:0}}}function Rf(e,t=600){let[n,r]=(0,eo.useReducer)(yP,{past:[],present:e,future:[],edits:0}),i=(0,eo.useRef)(0),o=(0,eo.useCallback)(p=>{let u=Date.now(),d=u-i.current<t;i.current=u,r({type:"set",updater:p,coalesce:d,track:!0})},[t]),a=(0,eo.useCallback)(p=>{let u=Date.now()-i.current<t;r({type:"set",updater:p,coalesce:u,track:!1})},[t]),s=(0,eo.useCallback)(()=>{i.current=0,r({type:"undo"})},[]),l=(0,eo.useCallback)(()=>{i.current=0,r({type:"redo"})},[]),c=(0,eo.useCallback)((p,u)=>{i.current=0,r({type:"reset",value:p,track:u?.asEdit??!1})},[]);return{value:n.present,setValue:o,setValueUntracked:a,undo:s,redo:l,reset:c,canUndo:n.past.length>0,canRedo:n.future.length>0,edits:n.edits}}var Nw=require("fflate");function Rw(e){return JSON.stringify(e,null,2)}function kw(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
|
|
3692
|
-
`)
|
|
3693
|
-
`)}function Uc(e,t,n){ho(new Blob([t],{type:n}),e)}function kf(e){return JSON.stringify(e??{},null,2)}function Lf(e){return`[${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}]`}function wP(e){return(e.decals??[]).map(t=>t.image).filter(t=>!!t?.trim())}function SP(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 Bw(e){let t=new Set;for(let i of Object.values(e)){for(let o of SP(i))t.add(o);for(let o of wP(i))t.add(o)}let n=[],r=[];return await Promise.all(Array.from(t).map(async i=>{let o=Rd(i);if(o)try{let a=await fetch(o);if(!a.ok)throw new Error(String(a.status));n.push({path:i,blob:await a.blob()});return}catch{r.push(i);return}try{let a=await Ec(i);a&&n.push({path:i,blob:a})}catch{}})),{assets:n,failedPaths:r}}async function Df(e,t,n,r,i){if(i.length===0){Uc(e,t,n);return}let o={[e]:(0,Nw.strToU8)(t)};for(let s of i)o[s.path]=new Uint8Array(await s.blob.arrayBuffer());let a=await Ud(o);ho(new Blob([a],{type:"application/zip"}),r)}var Nf={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"]},Ow=Object.keys(Nf);function Iw(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 Bf(e){if(e)return Object.values(e).some(Iw)?e:void 0}function hi(e,t){return e?Nf[t].some(n=>Iw(e[n])):!1}function Of(e){return{pbr:hi(e,"pbr"),roughness:hi(e,"roughness"),emission:hi(e,"emission"),opacity:hi(e,"opacity"),normalBump:hi(e,"normalBump"),displacement:hi(e,"displacement"),ao:hi(e,"ao"),clearcoat:hi(e,"clearcoat"),sheen:hi(e,"sheen"),anisotropy:hi(e,"anisotropy"),transmission:hi(e,"transmission"),faces:hi(e,"faces")}}function If(e,t){if(t)return{...e,style:{...e.style,material:t}};if(!e.style)return e;let{material:n,...r}=e.style;return{...e,style:Object.keys(r).length>0?r:void 0}}function zw(e,t){if(!e)return;let n={...e};for(let r of Nf[t])delete n[r];return n}var G=require("react/jsx-runtime"),Uw="/room.glb",_P=500;function MP(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function Fw(e){return`Couldn't reload ${e} from your last session. It's still saved in this browser.`}function CP(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 Sp(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function zf(e,t){if(!Sp(e)||!Sp(t))return t??e;let n={...e};for(let[r,i]of Object.entries(t)){let o=n[r];n[r]=Sp(o)&&Sp(i)?zf(o,i):i}return n}function Uf({licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:r,meshopt:i,project:o,onProjectChange:a,projectChangeDebounceMs:s=350,onModelUpload:l,onTextureUpload:c,onEditLeaseChange:p,allowModelChange:u=!0}){let d=(0,K.useRef)(null),m=(0,K.useRef)(null),g=(0,K.useRef)(null),[v,M]=(0,K.useState)(o?.model.url??null),[w,x]=(0,K.useState)(o?.model.name??""),[S,k]=(0,K.useState)(o?.model??null),[b,_]=(0,K.useState)(null),y=Rf(o?.objectBindings??{}),h=y.value,P=y.setValue,[A,C]=(0,K.useState)(!1),[D,B]=(0,K.useState)(null),j=(0,K.useMemo)(()=>D?{target:D}:null,[D]),[W,U]=(0,K.useState)(null);(0,K.useEffect)(()=>U(null),[b,v]);let[te,O]=(0,K.useState)([]),[$,le]=(0,K.useState)(null),[tt,xe]=(0,K.useState)(!1),[nt,ce]=(0,K.useState)("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),[Le,he]=(0,K.useState)("default"),[pt,Bt]=(0,K.useState)(!1),[un,Ie]=(0,K.useState)("{}"),[bt,Ot]=(0,K.useState)("{}"),[dr,de]=(0,K.useState)(null),[Cr,Xt]=(0,K.useState)(null),[Et,rt]=(0,K.useState)(!1),[bn,Tr]=(0,K.useState)(!1),[Tn,Kt]=(0,K.useState)(!1),[fe,We]=(0,K.useState)({identity:!0,basics:!0,material:!1,decals:!1,actions:!1,camera:!1,transform:!1,metrics:!1,metadata:!1}),[xn,It]=(0,K.useState)({pbr:!1,roughness:!1,emission:!1,opacity:!1,normalBump:!1,displacement:!1,ao:!1,clearcoat:!1,sheen:!1,anisotropy:!1,transmission:!1,faces:!1}),zt=R=>We(I=>({...I,[R]:!I[R]})),oe=R=>It(I=>({...I,[R]:!I[R]})),[ye,Ae]=(0,K.useState)("object"),[ct,ht]=(0,K.useState)("General"),[Ke,wt]=(0,K.useState)("metalness"),[_e,qe]=(0,K.useState)(Of()),dt=(0,K.useRef)(null),[pn,ur]=(0,K.useState)(!1),[en,Hn]=(0,K.useState)(!0),[Xr,pr]=(0,K.useState)(!0),[to,aa]=(0,K.useState)(!1),[tn,Pr]=(0,K.useState)(null),[F,H]=(0,K.useState)(null),[q,ie]=(0,K.useState)(!1),[ae,we]=(0,K.useState)("world"),Pe=(0,K.useRef)({}),at=Rf(o?.sceneConfig??Aa),De=at.value,Rt=at.setValue,vt=at.setValueUntracked,[qt,Me]=(0,K.useState)("orbit"),Ve=qt==="pointerLock",[hn,On]=(0,K.useState)(null),hr=(0,K.useRef)(null),$n=hn?.objectKey===b&&hn?.textureKey==="texture",[Pn,mi]=(0,K.useState)(null),[_p,sa]=(0,K.useState)(null),Mo=Hu(e,t),Ka=w1(Mo.tier),Fc=(0,K.useMemo)(()=>({isInsideEditor:!0,activeTab:ye,activeSubTab:ct,tier:Ka,setActiveTab:Ae,setActiveSubTab:ht}),[ye,ct,Ka]),ze=(0,K.useRef)(null),Ar=(0,K.useRef)(0),fi=(0,K.useRef)(0),Vc=(0,K.useRef)(o?`${o.id}:${o.revision}`:null),Co=(0,K.useRef)(null),cl=(0,K.useRef)(!1),To=(0,K.useRef)(!1),Za=(0,K.useRef)(o?{modelUrl:o.model.url,bindings:o.objectBindings,sceneConfig:o.sceneConfig}:null),no=(0,K.useRef)(void 0),gi=(0,K.useRef)(0),mn=(0,K.useRef)(null),Yn=(0,K.useRef)(o?{requestId:0,modelName:o.model.name??"model",modelUrl:o.model.url,storedBindings:o.objectBindings,streaming:!!o.model.tilesetUrl}:null),mr=(0,K.useRef)(null),Ja=(0,K.useRef)(null),In=(0,K.useRef)(null),qr=(0,K.useRef)(!1),Er=(0,K.useRef)(null),nr=(0,K.useRef)(null),{cameraState:nn,resetView:dl,focusObject:Po,fitScene:ro,setCameraState:$r,handleCameraChange:Mp,handleViewerReady:jc}=T0(),Cp=(0,K.useCallback)(R=>{Ve||$r({position:R.position,target:R.target,fov:nn?.fov??null,zoom:nn?.zoom??1,azimuthAngle:R.azimuthAngle,polarAngle:R.polarAngle},!0)},[Ve,$r,nn]),Ze=h1(),cn=b?h[b]??null:null,ul=cn?.style?.material,Ii=cn?.cameraState,Hc=nn?{position:Lf(nn.position),target:Lf(nn.target)}:null,jf=(0,K.useCallback)(R=>{Rt(I=>{let Z=I.annotations.map(ue=>ue.id).join(","),ee=R.map(ue=>ue.id).join(",");return Z===ee?I:{...I,annotations:R}})},[]),zi=(0,K.useCallback)(R=>{mi(R?{annotation:R}:null)},[]);(0,K.useEffect)(()=>{if(!cn){Ie("{}"),Ot("{}"),de(null),Xt(null);return}Ie(kf(cn.metrics)),Ot(kf(cn.metadata)),de(null),Xt(null)},[cn]),(0,K.useEffect)(()=>{let R=Of(ul);if(dt.current!==b){dt.current=b,qe(R);return}qe(I=>{let Z=!1,ee={...I};for(let ue of Ow)R[ue]&&!I[ue]&&(ee[ue]=!0,Z=!0);return Z?ee:I})},[b,ul]),(0,K.useEffect)(()=>()=>{ze.current?.cleanup(),mn.current&&clearTimeout(mn.current)},[]);let bi=(0,K.useCallback)((R,I)=>{let Z=Zu(R);if(I){let ee=new Map(Object.values(I).map(ue=>[ue.modelObjectId,ue]));for(let ue of R){let Ee=ee.get(ue);Ee&&(Z[ue]=Ee)}}return Z},[]);(0,K.useEffect)(()=>{if(!o)return;let R=`${o.id}:${o.revision}`;if(Vc.current===R)return;Vc.current=R;let I=v!==o.model.url||S?.tilesetUrl!==o.model.tilesetUrl||S?.assetVersion!==o.model.assetVersion,Z=h!==o.objectBindings,ee=De!==o.sceneConfig;(I||Z||ee)&&(To.current=!0),k(o.model),x(o.model.name??"model");let ue=o.objectBindings;if(Z){let Ee=Co.current;ue=Ee?bi(Ee,o.objectBindings):o.objectBindings,y.reset(ue)}if(ee&&at.reset(o.sceneConfig),I){let Ee=++fi.current;Yn.current={requestId:Ee,modelName:o.model.name??"model",modelUrl:o.model.url,storedBindings:o.objectBindings,streaming:!!o.model.tilesetUrl},Er.current=null,_(null),C(!0),M(o.model.url)}Za.current={modelUrl:o.model.url,bindings:ue,sceneConfig:o.sceneConfig}},[h,bi,o,v,De,S,y,at]);let Ao=(0,K.useRef)(a);Ao.current=a,(0,K.useEffect)(()=>{if(!o||!Ao.current||!v)return;if(!cl.current){cl.current=!0;return}let R=Za.current;if(v===o.model.url&&h===o.objectBindings&&De===o.sceneConfig||R!==null&&v===R.modelUrl&&h===R.bindings&&De===R.sceneConfig){To.current=!1;return}if(Yn.current)return;if(To.current){To.current=!1;return}let I=window.setTimeout(()=>{Ao.current?.({projectId:o.id,baseRevision:o.revision,model:{...S??o.model,url:v,name:w||o.model.name},objectBindings:h,sceneConfig:De},"local")},s);return()=>window.clearTimeout(I)},[h,w,v,o,s,S,De]),(0,K.useEffect)(()=>{let R=I=>{if(I.key.toLowerCase()!=="z"||!(I.metaKey||I.ctrlKey))return;let Z=I.target,ee=Z?.tagName;if(ee==="INPUT"||ee==="TEXTAREA"||Z?.isContentEditable)return;I.preventDefault();let ue=ye==="scene"?at:y;I.shiftKey?ue.redo():ue.undo()};return window.addEventListener("keydown",R),()=>window.removeEventListener("keydown",R)},[ye,y,at]);let Rr=!o&&u,Fe=y.edits>0||at.edits>0,la=(0,K.useCallback)(async(R,I)=>{if(c)return c(R,I);let Z=URL.createObjectURL(R);if(Rr)try{await hf(Z,R)}catch(ee){console.warn("[BindingBuilder] Could not store texture file for autosave:",ee)}return Z},[c,Rr]),Eo=(0,K.useCallback)(async R=>(await Promise.all(Object.entries(R).map(async([I,Z])=>{for(let ue of Z.decals??[])if(ue.image)try{let Ee=await Ec(ue.image);Ee&&Ma(ue.image,URL.createObjectURL(Ee))}catch(Ee){console.warn(`[BindingBuilder] Could not rehydrate a decal image on "${I}":`,Ee)}let ee=Z.style?.material;if(ee)for(let ue of Wi){let Je=ee[ue]?.path;if(Je)try{let Ce=await Ec(Je);if(!Ce){console.warn(`[BindingBuilder] No stored texture found for "${I}"'s ${ue} ("${Je}"). If this is meant to be an uploaded file rather than a hosted URL, it was uploaded before texture autosave existed (or this browser's storage was cleared) \u2014 re-upload it once so it's stored for future restores.`);continue}let St=URL.createObjectURL(Ce);Ma(Je,St)}catch(Ce){console.warn(`[BindingBuilder] Could not rehydrate "${I}"'s ${ue}:`,Ce)}}})),R),[]);(0,K.useEffect)(()=>{if(!Rr||!Fe||!v)return;let R=mr.current;if(!R)return;let I=()=>{if(In.current===I&&(In.current=null),Yn.current)return;let{model:ee,file:ue}=R,Ee=ee.kind==="file"&&Ja.current!==ee.key?ue:void 0;m1({model:ee,bindings:h,sceneConfig:De},Ee).then(()=>{Ja.current=ee.kind==="file"?ee.key:null,qr.current=!1}).catch(Je=>{console.warn("[BindingBuilder] Autosave failed:",Je),!qr.current&&(qr.current=!0,ce("Couldn't autosave this session \u2014 the browser refused to store it, possibly for lack of space. Export your work to keep it."),he("error"))})};In.current=I;let Z=window.setTimeout(I,_P);return()=>window.clearTimeout(Z)},[Rr,Fe,v,h,De]),(0,K.useEffect)(()=>{if(!Rr)return;let R=()=>In.current?.(),I=()=>{document.visibilityState==="hidden"&&R()};return window.addEventListener("pagehide",R),document.addEventListener("visibilitychange",I),()=>{window.removeEventListener("pagehide",R),document.removeEventListener("visibilitychange",I),R()}},[Rr]),(0,K.useEffect)(()=>{if(!Rr||!v||!Fe)return;let R=I=>{In.current?.(),I.preventDefault(),I.returnValue=""};return window.addEventListener("beforeunload",R),()=>window.removeEventListener("beforeunload",R)},[Rr,v,Fe]),(0,K.useEffect)(()=>{if(A||Le==="default"||Le==="success")return;Bt(!0);let R=window.setTimeout(()=>Bt(!1),4e3);return()=>window.clearTimeout(R)},[nt,Le,A]);let kr=(0,K.useMemo)(()=>Object.keys(h),[h]),pl=(0,K.useMemo)(()=>!b||!cn?null:cn.id.trim()?Object.entries(h).some(([Z,ee])=>Z!==b&&ee.id===cn.id)?"Another binding already uses this ID.":null:"ID is required.",[h,b,cn]),rr=(R,I)=>{P(Z=>({...Z,[R]:I(Z[R])}))},Qa=(R,I)=>{rr(R,Z=>{let ee=Bf(I(Z.style?.material));return If(Z,ee)})},Gc=(R,I,Z)=>{Qa(R,ee=>({...ee,[I]:Z?{path:Z}:void 0}))},fr=(R,I)=>{qe(Z=>({...Z,[R]:I})),!I&&b&&rr(b,Z=>{let ee=Bf(zw(Z.style?.material,R));return If(Z,ee)})},Ui=(0,K.useCallback)((R,I,Z)=>{let ee=Tc(R),ue=Zu(ee);if(Z){let Je=new Map(Object.values(Z).map(Ce=>[Ce.modelObjectId,Ce]));for(let Ce of ee){let St=Je.get(Ce);St&&(ue[Ce]=St)}}R.updateMatrixWorld(!0);let Ee={};for(let Je of ee){let Ce=Xi(R,Je);if(!Ce){Ee[Je]={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivotLocal:[0,0,0],rotationOrder:"XYZ"};continue}let St=rp(Ce);Ee[Je]={position:[Ce.position.x,Ce.position.y,Ce.position.z],rotation:[Ce.rotation.x,Ce.rotation.y,Ce.rotation.z],scale:[Ce.scale.x,Ce.scale.y,Ce.scale.z],pivotLocal:[St.x,St.y,St.z],rotationOrder:Ce.rotation.order}}Pe.current=Ee,y.reset(ue),_(ee[0]??null),Z||vt(Je=>({...Je,annotations:[]})),ce(`Generated ${ee.length} bindings from ${I}.`),he("success"),gi.current=100,le(100),mn.current&&clearTimeout(mn.current),mn.current=setTimeout(()=>{mn.current=null,C(!1),le(null)},400)},[y,vt]),An=(R,I,Z,ee)=>{In.current?.();let ue=++fi.current;C(!0),le(null),gi.current=0,mn.current&&(clearTimeout(mn.current),mn.current=null),no.current=Z;let Ee=Z?Z/1048576:0;ce(Ee>=100?`Reading ${I} (${Math.round(Ee)}MB \u2014 large file, this can take a while)...`:`Reading ${I} and generating starter bindings...`),he("default"),x(I),k(ee??{url:R,name:I}),mi(null);let Je=Er.current;if(R===v&&Je?.url===R){Yn.current=null,Ui(Je.scene,I);return}Yn.current={requestId:ue,modelName:I,modelUrl:R,streaming:!!ee?.tilesetUrl},M(R),y.reset({}),_(null)},Tp=(0,K.useCallback)(R=>{let I=Yn.current;if(!(!I||I.requestId!==fi.current)){if(Yn.current=null,Er.current={url:I.modelUrl,scene:R},U(null),O(zs(R)),B(null),I.streaming){ce(`Streaming ${I.modelName}.`),he("success"),C(!1);return}I.storedBindings&&(To.current=!0),Ui(R,I.modelName,I.storedBindings),I.restoring&&ce(`Restored your last session with ${I.modelName}.`)}},[Ui]),Wc=(0,K.useCallback)(R=>{let I=R.map(ee=>ee.name);if(I.length===0)return;Co.current=I,To.current=!0;let Z=bi(I,o?.objectBindings);if(y.reset(Z),o){let ee=Za.current;Za.current={modelUrl:ee?.modelUrl??o.model.url,bindings:Z,sceneConfig:ee?.sceneConfig??o.sceneConfig}}_(ee=>ee??I[0]??null),ce(`Streaming ${I.length} bindable objects.`),he("success"),C(!1)},[bi,y,o]),es=(0,K.useCallback)(R=>{let I=Yn.current;!I||I.requestId!==fi.current||(Yn.current=null,console.error(R),I.restoring?(mr.current=null,M(null),ce(Fw(I.modelName))):ce(`Could not read ${I.modelName}. Make sure the file is a valid GLB, GLTF, OBJ, FBX, or USDZ asset.`),he("error"),mn.current&&(clearTimeout(mn.current),mn.current=null),gi.current=0,C(!1),le(null))},[]),Xc=(0,K.useCallback)(R=>{let I=null;if(R.lengthComputable&&R.total>0)I=R.loaded/R.total*100;else{let ee=no.current;ee&&ee>0&&(I=R.loaded/ee*100)}if(I===null)return;let Z=Math.min(90,Math.floor(I/10)*10);Z>gi.current&&(gi.current=Z,le(Z)),I>=99.5&&ce(ee=>ee.startsWith("Finalizing")?ee:"Finalizing model \u2014 parsing geometry and textures (large files can take a moment here)...")},[]),Lr=(0,K.useCallback)(R=>{Ze.handleAnimationsReady(R);let I=R.clipDetails??R.clips.map(Z=>({sourceName:Z,duration:0}));vt(Z=>({...Z,animations:Ew(Z,I)}))},[Ze,vt]),vi=async()=>{ze.current?.cleanup(),ze.current=null,mr.current={model:{kind:"url",url:Uw,name:"room.glb"}},await An(Uw,"room.glb")},xi=async R=>{if(!u)return;if(l){try{C(!0),ce(`Uploading ${R.name}...`),he("default");let Z=await l(R);mr.current={model:{kind:"url",url:Z.url,name:Z.name??R.name}},await An(Z.url,Z.name??R.name,R.size,Z)}catch(Z){C(!1),ce(Z instanceof Error?Z.message:`Could not upload ${R.name}.`),he("error")}return}let I;try{I=await mh(R)}catch(Z){ce(Z instanceof Error?Z.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset."),he("error");return}ze.current?.cleanup(),ze.current=I,mr.current={model:{kind:"file",key:MP(),name:I.name},file:R},await An(I.url,I.name,R.size,{url:I.url,name:I.name})},Pp=async R=>{let I=R.target.files?.[0];I&&(await xi(I),R.target.value="")},Ap=()=>{In.current?.(),ze.current?.cleanup(),ze.current=null,Er.current=null,Yn.current=null,mr.current=null,Pe.current={},Ar.current=0,rt(!1),mn.current&&(clearTimeout(mn.current),mn.current=null),gi.current=0,le(null),no.current=void 0,M(null),x(""),k(null),_(null),mi(null),y.reset({}),Ie("{}"),Ot("{}"),de(null),Xt(null),sa(null),ie(!1),vt(R=>({...R,animations:Aa.animations,annotations:[]})),ce("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),he("default")},ts=()=>{d.current?.click()},io=()=>{m.current?.click()},ns=async R=>{xe(!0);try{let{assets:I,failedPaths:Z}=await Bw(h);R==="json"?await Df("objectBindings.json",Rw(h),"application/json","objectBindings.zip",I):await Df("objectBindings.ts",kw(h),"text/typescript","objectBindings-ts.zip",I),Z.length>0?(ce(`Exported, but ${Z.length} uploaded image${Z.length===1?"":"s"} couldn't be bundled: ${Z.join(", ")}.`),he("error")):I.length>0&&(ce(`Exported with ${I.length} uploaded image${I.length===1?"":"s"} bundled into the zip.`),he("success"))}catch(I){let Z=I instanceof Error?I.message:"Unknown export error.";ce(`Failed to export bindings: ${Z}`),he("error")}finally{xe(!1)}},Ep=async R=>{if(!kr.length){ce("Load a model before importing bindings."),he("error");return}let I;try{I=JSON.parse(await R.text())}catch{ce(`${R.name} is not valid JSON.`),he("error");return}if(I===null||typeof I!="object"||Array.isArray(I)){ce("Expected a JSON object mapping object IDs to bindings."),he("error");return}let Z=new Map;for(let St of Object.values(I))if(St!==null&&typeof St=="object"&&typeof St.id=="string"&&typeof St.type=="string"&&typeof St.modelObjectId=="string"){let Kn=St;Z.set(Kn.modelObjectId,Kn)}if(Z.size===0){ce(`${R.name} doesn't look like an exported bindings file.`),he("error");return}let ee={...h},ue={},Ee=0;for(let St of Object.keys(ee)){let Kn=Z.get(St);Kn&&(ee[St]=Kn,ue[St]=Kn,Ee++)}if(Ee===0){ce(`None of the object IDs in ${R.name} match this model \u2014 nothing imported.`),he("error");return}let Je=await Eo(ue);Object.assign(ee,Je),P(ee);let Ce=Z.size-Ee;ce(Ce>0?`Imported ${Ee} binding${Ee===1?"":"s"} from ${R.name} (${Ce} skipped \u2014 not in this model).`:`Imported ${Ee} binding${Ee===1?"":"s"} from ${R.name}.`),he("success")},qc=async R=>{let I=R.target.files?.[0];I&&(await Ep(I),R.target.value="")},Ro=()=>{g.current?.click()},rs=async R=>{let I;try{I=JSON.parse(await R.text())}catch{ce(`${R.name} is not valid JSON.`),he("error");return}if(I===null||typeof I!="object"||Array.isArray(I)){ce("Expected a JSON object with scene config sections."),he("error");return}let Z=["model","camera","lighting","wireframe","shadows","environment","background","groundShadows","postProcessing","animations","annotations","cinematic","styleRules","section"],ee=I,ue=Z.filter(Ee=>ee[Ee]!==void 0);if(ue.length===0){ce(`${R.name} doesn't look like an exported scene config file.`),he("error");return}Rt(Ee=>{let Je={...Ee};for(let Ce of ue)Je[Ce]=zf(Ee[Ce],ee[Ce]);return Je}),ce(`Imported ${ue.length} section${ue.length===1?"":"s"} from ${R.name}.`),he("success")},$c=async R=>{let I=R.target.files?.[0];I&&(await rs(I),R.target.value="")},hl=R=>{R.preventDefault(),R.stopPropagation(),!(A||v)&&(Ar.current+=1,rt(!0))},ml=R=>{R.preventDefault(),R.stopPropagation(),!(A||v)&&(R.dataTransfer.dropEffect="copy",rt(!0))},Yc=R=>{R.preventDefault(),R.stopPropagation(),!(A||v)&&(Ar.current=Math.max(0,Ar.current-1),Ar.current===0&&rt(!1))},Rp=async R=>{if(R.preventDefault(),R.stopPropagation(),Ar.current=0,rt(!1),A||v)return;let I=R.dataTransfer.files?.[0];I&&await xi(I)},Kc=(R,I,Z)=>{if(!b)return;let ee;try{ee=JSON.parse(I)}catch{Z("Invalid JSON");return}if(ee===null||typeof ee!="object"||Array.isArray(ee)){Z("Expected a JSON object");return}if(R==="metrics"&&Object.values(ee).some(Ee=>typeof Ee!="number"||!Number.isFinite(Ee))){Z("Metrics values must be numbers");return}rr(b,ue=>({...ue,[R]:ee})),Z(null)},kp=(0,K.useCallback)((R,I)=>{Rr&&hf(R,I).catch(Z=>console.warn("[BindingBuilder] Could not store decal image for autosave:",Z))},[Rr]),Lp=(0,K.useMemo)(()=>{let R=Er.current?.scene,Z=(R&&b?Xi(R,b):null)?.geometry;if(!Z)return .2;Z.boundingBox||Z.computeBoundingBox();let ee=Z.boundingBox?.getSize(new Vw.Vector3),ue=ee?Math.max(ee.x,ee.y,ee.z):0;return ue>0&&Number.isFinite(ue)?ue/3:.2},[b,v,A]),Dr=(0,K.useMemo)(()=>{if(!W?.moving)return null;let{nodeKey:R,decal:I}=W,Z=h[R],ee=Z?.decals?.find(ue=>ue.id===I.id);return ee?{objectId:Z.modelObjectId??R,decal:ee,onCancel:()=>U(null),onCommit:ue=>{P(Ee=>{let Je=Ee[R];return Je?{...Ee,[R]:{...Je,decals:Je.decals?.map(Ce=>Ce.id===ee.id?{...Ce,...ue}:Ce)}}:Ee}),U(null)}}:null},[h,W,P]),Zc=(0,K.useCallback)((R,I)=>{if(!b)return;let Z=h[b],ee=Z?.decals?.find(Ce=>Ce.id===R);if(!ee)return;let ue=nr.current,Ee=ue?.raw.nodes[Z.modelObjectId??b],Je=zd(Ee,ue?.raw.controls.camera,ee,I);if(!Je){ce("No visible surface in that direction. Try another arrow or rotate the view."),he("error"),Bt(!0);return}U(null),Bt(!1),rr(b,Ce=>({...Ce,decals:Ce.decals?.map(St=>St.id===R?{...St,...Je}:St)}))},[h,b,rr]),Dp=(0,K.useCallback)(R=>{if(!R||R.moving){U(R);return}let I=nr.current,Z=h[R.nodeKey],ee=I?.raw.nodes[Z?.modelObjectId??R.nodeKey],ue=Id(ee,I?.raw.controls.camera);if(!ue){ce("Could not find a surface on this object for the decal."),he("error"),Bt(!0);return}let Ee={...R.decal,...ue};P(Je=>{let Ce=Je[R.nodeKey];if(!Ce)return Je;let St=(Ce.decals??[]).filter(Kn=>Kn.id!==Ee.id);return{...Je,[R.nodeKey]:{...Ce,decals:[...St,Ee]}}}),U({...R,moving:!0})},[h,P]),Jc=(0,K.useCallback)(R=>{if(Ve){Me("orbit");return}if(!R){_(null);return}let I=Object.entries(h).find(([Z,ee])=>ee===R||Z===R.modelObjectId||ee.modelObjectId===R.modelObjectId)?.[0]??null;_(I)},[Ve,h]),En=(0,K.useCallback)(async R=>{if(Ve){Me("orbit");return}_(R),sa(null),await Po(R)},[Ve,Po]),is=(0,K.useCallback)(R=>{sa(R?h[R]??null:null)},[h]),fl=(0,K.useCallback)(R=>Kt(!R),[]),Qc=(0,K.useCallback)(()=>{if(Ve){ce("Camera positions aren't available while Pointer Lock is the active camera controller."),he("error");return}if(!b||!nn)return;let R={position:nn.position,target:nn.target,...nn.fov!=null?{fov:nn.fov}:{},zoom:nn.zoom};rr(b,I=>({...I,cameraState:R}))},[Ve,b,nn]),Np=(0,K.useCallback)(()=>{if(Ve){ce("Camera positions aren't available while Pointer Lock is the active camera controller."),he("error");return}!Ii?.position||!Ii?.target||$r({position:Ii.position,target:Ii.target,fov:Ii.fov??nn?.fov??null,zoom:Ii.zoom??nn?.zoom??1},!0)},[Ve,Ii,$r,nn]),Bp=(0,K.useCallback)(()=>{Ve||b&&rr(b,R=>({...R,cameraState:void 0}))},[Ve,b]),Fi=(0,K.useCallback)(async()=>{if(Ve){ce("Reset View isn't available while Pointer Lock is the active camera controller."),he("error");return}await dl()},[Ve,dl]),ca=(0,K.useCallback)(async()=>{if(Ve){ce("Fit Scene isn't available while Pointer Lock is the active camera controller."),he("error");return}await ro()},[Ve,ro]),gl=(0,K.useCallback)(()=>{ce("Texture position saved."),he("success"),hr.current?.()},[]),Yr=(0,K.useCallback)(R=>{Pr(R),aa(!0)},[]),Kr=(0,K.useCallback)(()=>{aa(!1),Pr(null)},[]),da=(0,K.useCallback)(()=>{if(tn==="bindings"){if(!kr.length){Kr();return}let R=Zu(kr);y.reset(R,{asEdit:!0}),_(kr[0]??null),ce("Object bindings reset to default values."),he("success")}else tn==="scene"&&(at.reset(Aa,{asEdit:!0}),ce("Scene config reset to default values."),he("success"));Kr()},[tn,kr,y,at,Kr]),Vi=(0,K.useCallback)(()=>{H(null)},[]),ua=async()=>{let R;try{R=await f1()}catch(I){console.warn("[BindingBuilder] Could not read the saved session:",I),ce("Couldn't read the saved session from this browser."),he("error");return}if(!R){ce("No saved session in this browser yet \u2014 one is saved as soon as you edit a model."),he("error");return}H(R)},Nr=async()=>{let R=F;if(H(null),!R)return;let{session:I,file:Z}=R,{model:ee}=I;In.current=null;let ue=zf(Aa,I.sceneConfig),Ee=fi.current,Je=await Eo(I.bindings);if(fi.current!==Ee)return;let Ce;if(ee.kind==="file"){if(!Z)return;let Kn=fi.current,os;try{os=await mh(Z)}catch(bl){console.warn("[BindingBuilder] Could not read the saved model:",bl),ce(Fw(ee.name)),he("error");return}if(fi.current!==Kn){os.cleanup();return}ze.current?.cleanup(),ze.current=os,Ce=os.url}else{Ce=ee.url;let Kn=Er.current;if(Ce===v&&Kn?.url===Ce&&!Yn.current){mr.current={model:ee},Ja.current=null,y.reset(bi(Tc(Kn.scene),Je)),at.reset(ue),ce(`Restored your last session with ${ee.name}.`),he("success");return}ze.current?.cleanup(),ze.current=null}mr.current={model:ee,file:Z??void 0},Ja.current=ee.kind==="file"?ee.key:null;let St=++fi.current;C(!0),le(null),gi.current=0,mn.current&&(clearTimeout(mn.current),mn.current=null),no.current=Z?.size,ce(`Restoring your last session with ${ee.name}...`),he("default"),x(ee.name),k({url:Ce,name:ee.name}),mi(null),_(null),Er.current=null,y.reset({}),at.reset(ue),Yn.current={requestId:St,modelName:ee.name,modelUrl:Ce,storedBindings:Je,restoring:!0},M(Ce)};return Mo.status==="checking"?(0,G.jsx)("div",{className:"bb-root bb-root--licenseChecking",children:(0,G.jsx)(ya,{title:"Verifying License",message:"Checking your license key..."})}):Mo.status==="invalid"?(0,G.jsx)("div",{className:"bb-root bb-root--licenseInvalid",children:(0,G.jsx)(ya,{tone:"error",title:"Invalid License",message:Mo.isLocalDomain?Mo.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})}):(0,G.jsxs)(ef.Provider,{value:Fc,children:[(0,G.jsxs)("div",{className:"bb-root",children:[(0,G.jsx)("input",{ref:d,type:"file",accept:Pb,className:"bb-hiddenInput",onChange:Pp,disabled:A}),(0,G.jsx)("input",{ref:m,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:qc,disabled:A}),(0,G.jsx)("input",{ref:g,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:$c,disabled:A}),(0,G.jsxs)("aside",{className:`bb-sidebar bb-sidebar--left ${bn?"bb-sidebar--collapsed":""}`,children:[(0,G.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!bn&&(0,G.jsx)("h1",{className:"bb-title",children:"Binding Builder"}),(0,G.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>Tr(R=>!R),"aria-label":bn?"Open editor sidebar":"Collapse editor sidebar",title:bn?"Open editor":"Collapse editor",children:bn?"\u2192":"\u2190"})]}),!bn&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)("div",{className:"bb-tabRow",children:[(0,G.jsx)("button",{type:"button",className:`bb-tab ${ye==="object"?"bb-tab--active":""}`,onClick:()=>Ae("object"),children:"Object"}),(0,G.jsx)("button",{type:"button",className:`bb-tab ${ye==="scene"?"bb-tab--active":""}`,onClick:()=>Ae("scene"),children:"Scene"})]}),(0,G.jsx)("section",{className:"bb-editor",children:ye==="scene"?(0,G.jsx)(G.Fragment,{children:v?(0,G.jsx)(Mf,{config:De,onChange:Rt,activeSubTab:ct,onActiveSubTabChange:ht,cameraState:ct==="Cinematic"&&nn?{position:nn.position,target:nn.target,azimuthAngle:nn.azimuthAngle,polarAngle:nn.polarAngle}:null,onPreviewWaypoint:Cp,animationClipDetails:Ze.clipDetails,animationPlayback:Ze,materialVariants:te,objectBindings:h}):(0,G.jsx)("div",{className:"bb-emptyEditor",children:"Upload a model to edit its scene settings."})}):!cn||!b?(0,G.jsx)("div",{className:"bb-emptyEditor",children:"Select a generated node binding to edit its values."}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)("div",{className:"bb-editorHeader",children:(0,G.jsxs)("div",{children:[(0,G.jsx)("div",{className:"bb-sectionKicker",children:"Editing Binding"}),(0,G.jsx)("h2",{className:"bb-editorTitle",children:cn.label||b}),(0,G.jsxs)("div",{className:"bb-editorMeta",children:[(0,G.jsx)("span",{children:cn.type}),(0,G.jsx)("span",{children:cn.modelObjectId})]})]})}),(0,G.jsx)(mw,{selectedItem:b,selectedBinding:cn,open:fe.identity,onToggle:()=>zt("identity"),updateBinding:rr,idError:pl}),(0,G.jsx)(fw,{selectedItem:b,selectedBinding:cn,open:fe.basics,onToggle:()=>zt("basics"),updateBinding:rr}),(0,G.jsxs)(tr,{title:"Material",open:fe.material,onToggle:()=>zt("material"),tooltip:"Edit the selected object's base material, textures, and surface properties.",children:[(0,G.jsx)(hw,{disabled:!b,onApply:R=>b&&Qa(b,I=>({...I,...R}))}),(0,G.jsx)(uw,{selectedItem:b,selectedMaterial:ul,pbrWorkflow:Ke,onPbrWorkflowChange:wt,openMaterialPanels:xn,materialPanelEnabled:_e,onToggleMaterialPanel:oe,onSetMaterialPanelState:fr,updateSelectedMaterial:Qa,setSelectedTexturePath:Gc,isTexturePositioningEnabled:$n,onConfirmTexturePosition:gl})]}),(0,G.jsx)(yw,{selectedItem:b,selectedBinding:cn,open:fe.decals,onToggle:()=>zt("decals"),updateBinding:rr,placement:W,onPlacementChange:Dp,defaultSize:Lp,onImageFile:kp,onNudge:Zc}),(0,G.jsx)(bw,{selectedItem:b,selectedBinding:cn,open:fe.actions,onToggle:()=>zt("actions"),updateBinding:rr}),(0,G.jsx)(ww,{selectedBinding:cn,open:fe.camera,onToggle:()=>zt("camera"),cameraState:nn,formattedCameraState:Hc,savedCameraPosition:Ii,onSaveCameraPosition:Qc,onGoToSavedCamera:Np,onClearSavedCamera:Bp,onResetView:Fi,onFitScene:ca}),(0,G.jsx)(Tw,{selectedItem:b,selectedBinding:cn,open:fe.transform,onToggle:()=>zt("transform"),updateBinding:rr,moveModeEnabled:q,onToggleMoveMode:ie,transformSpace:ae,onTransformSpaceChange:we,originalTransform:Pe.current[b]??null}),(0,G.jsx)(Ef,{title:"Metrics",label:"Metrics JSON",open:fe.metrics,onToggle:()=>zt("metrics"),draft:un,error:dr,example:'{"area": 42}',onDraftChange:Ie,onCommit:()=>Kc("metrics",un,de)}),(0,G.jsx)(Ef,{title:"Metadata",label:"Metadata JSON",open:fe.metadata,onToggle:()=>zt("metadata"),draft:bt,error:Cr,example:'{"room": "kitchen"}',onDraftChange:Ot,onCommit:()=>Kc("metadata",bt,Xt)})]})}),ye==="object"&&(0,G.jsxs)("div",{className:"bb-toolbar",children:[(0,G.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!y.canUndo,onClick:y.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,G.jsx)(Cn.Undo2,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!kr.length,onClick:()=>Yr("bindings"),title:"Reset object bindings to default",children:(0,G.jsx)(Cn.ListRestart,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!y.canRedo,onClick:y.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,G.jsx)(Cn.Redo2,{size:16})})]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!kr.length||A,onClick:io,title:"Re-apply a previously exported objectBindings.json onto this model",children:[(0,G.jsx)(Cn.Upload,{size:14}),"Import"]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsx)(Pf,{disabled:!kr.length||tt,exporting:tt,onExportJson:()=>ns("json"),onExportTs:()=>ns("ts")})]}),ye==="scene"&&(0,G.jsxs)("div",{className:"bb-toolbar",children:[(0,G.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!at.canUndo,onClick:at.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,G.jsx)(Cn.Undo2,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",onClick:()=>Yr("scene"),title:"Reset scene config to default",children:(0,G.jsx)(Cn.ListRestart,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!at.canRedo,onClick:at.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,G.jsx)(Cn.Redo2,{size:16})})]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!kr.length||A,onClick:Ro,title:"Re-apply a previously exported sceneConfig.json",children:[(0,G.jsx)(Cn.Upload,{size:14}),"Import"]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsx)(Pf,{disabled:!kr.length||A,onExportJson:()=>Uc("sceneConfig.json",Lw(De),"application/json"),onExportTs:()=>Uc("sceneConfig.ts",Dw(De),"text/typescript")})]})]})]}),(0,G.jsxs)("main",{className:"bb-previewShell",children:[(0,G.jsxs)("div",{className:"bb-previewHeader",children:[(0,G.jsxs)("div",{className:"bb-previewToggles",children:[(0,G.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,G.jsx)("input",{type:"checkbox",checked:pn,onChange:R=>ur(R.target.checked)}),"Zoom on selected"]}),(0,G.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,G.jsx)("input",{type:"checkbox",checked:en,onChange:R=>Hn(R.target.checked)}),"Highlight on hover"]}),(0,G.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,G.jsx)("input",{type:"checkbox",checked:Xr,onChange:R=>pr(R.target.checked)}),"Camera controller"]})]}),(0,G.jsxs)("div",{className:"bb-previewControlsColumn",children:[(0,G.jsxs)("div",{className:"bb-previewControls",children:[(0,G.jsx)("div",{className:"bb-previewMeta",children:(0,G.jsx)("span",{children:b?`Focused: ${b}`:"Select a node to inspect it"})}),u&&!o&&(0,G.jsx)("button",{type:"button",className:"bb-restoreSessionButton",disabled:A,onClick:ua,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,G.jsx)(Cn.History,{size:14})}),v&&u&&!o&&(0,G.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-removeModelButton",onClick:Ap,children:"Remove model"})]}),v&&(0,G.jsx)("div",{className:"bb-moveHint",children:Ve?(0,G.jsx)(G.Fragment,{children:"Click the preview to look around \xB7 Esc to release"}):q?(0,G.jsx)(G.Fragment,{children:"Select a mesh \xB7 drag the colored arrows, planes, or rings"}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)("kbd",{children:"W"}),(0,G.jsx)("kbd",{children:"A"}),(0,G.jsx)("kbd",{children:"S"}),(0,G.jsx)("kbd",{children:"D"})," move \xB7 ",(0,G.jsx)("kbd",{children:"Space"}),"/",(0,G.jsx)("kbd",{children:"C"})," up \xB7 down \xB7 drag to look"]})})]})]}),(0,G.jsxs)("div",{className:"bb-preview",children:[(0,G.jsx)(Ku,{visible:A||pt,message:nt,tone:Le,progress:$??void 0}),v?(0,G.jsx)(uf,{modelUrl:v,tilesetUrl:S?.tilesetUrl,objectBindings:h,selectedObject:cn,onObjectSelect:Jc,onObjectBindingsChange:P,onTextureUpload:la,onObjectEditLeaseChange:(R,I)=>p?.(R.modelObjectId||R.id,I),showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,onCameraChange:Mp,onViewerReady:R=>{nr.current=R,jc(R)},onAnnotationsChange:jf,activeAnnotation:Pn?.annotation??null,onActiveAnnotationChange:zi,onAnimationsReady:Lr,onSceneLoaded:Tp,onLoadError:es,onObjectCatalog:S?.tilesetUrl?Wc:void 0,onProgress:Xc,onCameraControllerChange:Me,cameraControllerType:qt,onTexturePositioningChange:On,endTexturePositioningRef:hr,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:r,meshopt:i,sceneConfig:De,onSceneConfigChange:Rt,preserveDrawingBuffer:!0,disableZoom:!1,zoomOnSelected:pn,highlightOnHover:en,enableCameraControls:Xr,moveModeEnabled:q,objectTransformSpace:ae,enableKeyboardNavigation:!0,showViewGizmo:!0,showSectionTools:De.section?.enabled??!1,isolation:j,onIsolationChange:()=>B(null),showIsolateControls:!0,decalMove:Dr,panelHoveredObject:en?_p:null,showLoadingOverlay:!1,autoRotate:Ve?!1:De.model.autoRotate??!1,autoRotateSpeed:De.model.autoRotateSpeed??1}):(0,G.jsx)("div",{className:`bb-previewPlaceholder ${Et?"bb-previewPlaceholder--dragActive":""}`,onDragEnter:hl,onDragOver:ml,onDragLeave:Yc,onDrop:Rp,children:(0,G.jsxs)("div",{children:[(0,G.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,G.jsx)("button",{type:"button",className:"bb-previewPlaceholderButton",onClick:ts,disabled:A,children:"Upload"}):null]})})]})]}),(0,G.jsx)(Aw,{bindings:h,selectedItem:b,onSelect:En,onHover:is,isOpen:!Tn,onToggle:fl,isolatedItem:D,onIsolate:B})]}),to&&(0,G.jsx)("div",{className:"bb-reset-overlay",onClick:Kr,children:(0,G.jsxs)("div",{className:"bb-reset-dialog",onClick:R=>R.stopPropagation(),children:[(0,G.jsxs)("div",{className:"bb-reset-header",children:[(0,G.jsxs)("h3",{className:"bb-reset-title",children:[(0,G.jsx)(Cn.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Confirm Reset"]}),(0,G.jsx)("button",{className:"bb-reset-close",onClick:Kr,children:(0,G.jsx)(Cn.X,{size:20})})]}),(0,G.jsxs)("div",{className:"bb-reset-body",children:[(0,G.jsxs)("p",{className:"bb-reset-message",children:["Are you sure you want to reset"," ",(0,G.jsx)("strong",{children:tn==="bindings"?"Object Bindings":"Scene Config"}),"?"]}),(0,G.jsx)("p",{className:"bb-reset-details",children:tn==="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,G.jsx)("p",{className:"bb-reset-warning",children:"This action cannot be undone!"})]}),(0,G.jsxs)("div",{className:"bb-reset-footer",children:[(0,G.jsx)("button",{className:"bb-reset-btn",onClick:Kr,children:"Cancel"}),(0,G.jsx)("button",{className:"bb-reset-btn-danger",onClick:da,children:"Reset"})]})]})}),F&&(0,G.jsx)("div",{className:"bb-reset-overlay",onClick:Vi,children:(0,G.jsxs)("div",{className:"bb-reset-dialog",onClick:R=>R.stopPropagation(),children:[(0,G.jsxs)("div",{className:"bb-reset-header",children:[(0,G.jsxs)("h3",{className:"bb-reset-title",children:[(0,G.jsx)(Cn.History,{size:20,className:"bb-icon-restore"}),"Restore Last Session"]}),(0,G.jsx)("button",{className:"bb-reset-close",onClick:Vi,children:(0,G.jsx)(Cn.X,{size:20})})]}),(0,G.jsxs)("div",{className:"bb-reset-body",children:[(0,G.jsxs)("p",{className:"bb-reset-message",children:["Restore ",(0,G.jsx)("strong",{children:F.session.model.name}),", saved ",CP(F.session.savedAt),"?"]}),(0,G.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,G.jsxs)("div",{className:"bb-reset-footer",children:[(0,G.jsx)("button",{className:"bb-reset-btn",onClick:Vi,children:"Cancel"}),(0,G.jsx)("button",{className:"bb-reset-btn-restore",onClick:Nr,children:"Restore"})]})]})})]})}var jw={licenseKey:!0,dracoDecoderPath:!0,ktx2TranscoderPath:!0,meshopt:!0};function Hw(e,t){let n={};for(let r of Object.keys(t))r in e&&(n[r]=e[r]);return n}var Ww=require("react"),TP={"model-viewer":"@liveroom-tech/react-immersive/styles.css","simple-model-viewer":"@liveroom-tech/react-immersive/simple-model-viewer.css","binding-builder":"@liveroom-tech/react-immersive/binding-builder.css"},Ff=new Set,PP=1e3;function Gw(e){return getComputedStyle(document.documentElement).getPropertyValue(`--ri-styles-${e}`).trim()!==""}function Xw(e,t){(0,Ww.useEffect)(()=>{if(process.env.NODE_ENV==="production"||Ff.has(e)||Gw(e))return;let n,r=()=>{n=setTimeout(()=>{Ff.has(e)||Gw(e)||(Ff.add(e),console.warn(`[react-immersive] ${t}'s styles aren't loaded, so it renders unstyled. Import them once, in your app's root:
|
|
3737
|
+
`}))}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:r,_target:i}=this;Hu.min.copy(t),Hu.max.copy(t),Hu.max.x+=1,Hu.max.y+=1,r.initRenderTarget(i),r.copyTextureToTexture(e,i.texture,Hu,n,0)}},ms=new class{constructor(){let e=null;Object.getOwnPropertyNames(xM.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new xM),e[t](...n)))})}},wM=new de.Vector2,SM=new de.Vector2,MM=new de.Vector2;function nL(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function OM(e,t,n=[,,,]){let r=3*t,i=3*t+1,o=3*t+2;return e.index&&(r=e.index.getX(r),i=e.index.getX(i),o=e.index.getX(o)),n[0]=r,n[1]=i,n[2]=o,n}function NM(e,t,n,r,i){let[o,a,s]=r,l=nL(e,t);wM.fromBufferAttribute(l,o),SM.fromBufferAttribute(l,a),MM.fromBufferAttribute(l,s),i.set(0,0,0).addScaledVector(wM,n.x).addScaledVector(SM,n.y).addScaledVector(MM,n.z)}function BM(e,t,n,r){let i=e.x-Math.floor(e.x),o=e.y-Math.floor(e.y),a=Math.floor(i*t%t),s=Math.floor(o*n%n);return r.set(a,s),r}var _M=new de.Vector2,CM=new de.Vector2,TM=new de.Vector2,rL=class extends Uh{constructor(e,t,n=null){super(e,t,n),this.channels=lr(n,"channels",[0]),this.index=lr(n,"index",null),this.texCoord=lr(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let r=this.type;if(r==="BOOLEAN"||r==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return DM(e,t*this.valueLength,r,n)}},iL=class extends fv{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(rL)}getData(e,t,n,r={}){let i=this.properties;zh(i,r);let o=Object.keys(i),a=o.map(s=>r[s]);return this.getPropertyValuesAtTexel(o,e,t,n,a),o.forEach((s,l)=>r[s]=a[l]),r}async getDataAsync(e,t,n,r={}){let i=this.properties;zh(i,r);let o=Object.keys(i),a=o.map(s=>r[s]);return await this.getPropertyValuesAtTexelAsync(o,e,t,n,a),o.forEach((s,l)=>r[s]=a[l]),r}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,r,i=[]){for(;i.length<e.length;)i.push(null);i.length=e.length,ms.increaseSizeTo(i.length);let o=this.data,a=this.definition.properties,s=this.properties,l=OM(r,t);for(let m=0,c=e.length;m<c;m++){let p=e[m];if(!a[p])continue;let f=s[p],v=o[f.index];NM(r,f.texCoord,n,l,_M),BM(_M,v.image.width,v.image.height,CM),TM.set(m,0),ms.renderPixelToTarget(v,CM,TM)}let d=new Uint8Array(e.length*4);if(this._asyncRead)return ms.readDataAsync(d).then(()=>(u.call(this),i));return ms.readData(d),u.call(this),i;function u(){for(let m=0,c=e.length;m<c;m++){let p=e[m],f=s[p],v=f.type;if(i[m]=hv(f,i[m]),!f)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!a[p]){i[m]=f.resolveDefault(i);continue}let b=f.valueLength*(f.count||1),g=f.channels.map(M=>d[4*m+M]),y=f.componentType,x=new(Wu(y,v))(b);if(new Uint8Array(x.buffer).set(g),f.array){let M=i[m];for(let P=0,S=M.length;P<S;P++)M[P]=f.readDataFromBuffer(x,P,M[P])}else i[m]=f.readDataFromBuffer(x,0,i[m]);i[m]=f.adjustValueScaleOffset(i[m]),i[m]=f.resolveEnumsToStrings(i[m]),i[m]=f.resolveNoData(i[m])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},uv=class{constructor(e,t,n,r=null,i=null){let{schema:o,propertyTables:a=[],propertyTextures:s=[],propertyAttributes:l=[]}=e,{enums:d,classes:u}=o,m=a.map(f=>new tL(f,u,d,n)),c=[],p=[];r&&(r.propertyTextures&&(c=r.propertyTextures.map(f=>new iL(s[f],u,d,t))),r.propertyAttributes&&(p=r.propertyAttributes.map(f=>new QR(l[f],u,d)))),this.schema=o,this.tableAccessors=m,this.textureAccessors=c,this.attributeAccessors=p,this.object=i,this.textures=t,this.nodeMetadata=r}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let r=Math.min(e.length,t.length);n.length=r;for(let i=0;i<r;i++){let o=this.tableAccessors[e[i]];n[i]=o.getData(t[i],n[i])}}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 r=this.textureAccessors;n.length=r.length;for(let i=0;i<r.length;i++)n[i]=r[i].getData(e,t,this.object.geometry,n[i]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let r=this.textureAccessors;n.length=r.length;let i=[];for(let o=0;o<r.length;o++){let a=r[o].getDataAsync(e,t,this.object.geometry,n[o]).then(s=>{n[o]=s});i.push(a)}return await Promise.all(i),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let r=0;r<n.length;r++)t[r]=n[r].getData(e,this.object.geometry,t[r]);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())}},Gu="EXT_structural_metadata";function oL(e,t=[]){let n=e.json.textures?.length||0,r=Array(n).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{index:a}=i[o];r[a]===null&&(r[a]=e.loadTexture(a))}}),Promise.all(r)}function aL(e,t=[]){let n=e.json.bufferViews?.length||0,r=Array(n).fill(null);return t.forEach(({properties:i})=>{for(let o in i){let{values:a,arrayOffsets:s,stringOffsets:l}=i[o];r[a]===null&&(r[a]=e.getDependency("bufferView",a)),r[s]===null&&(r[s]=e.getDependency("bufferView",s)),r[l]===null&&(r[l]=e.getDependency("bufferView",l))}}),Promise.all(r)}var IM=class{constructor(e){this.parser=e,this.name=Gu}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Gu))return;let r=null,i=t.json.extensions[Gu];if(i.schemaUri){let{manager:l,path:d,requestHeader:u,crossOrigin:m}=t.options,c=new URL(i.schemaUri,d).toString(),p=new de.FileLoader(l);p.setCrossOrigin(m),p.setResponseType("json"),p.setRequestHeader(u),r=p.loadAsync(c).then(f=>{i={...i,schema:f}})}let[o,a]=await Promise.all([oL(t,i.propertyTextures),aL(t,i.propertyTables),r]),s=new uv(i,o,a);e.userData.structuralMetadata=s,e.traverse(l=>{if(t.associations.has(l)){let{meshes:d,primitives:u}=t.associations.get(l),m=t.json.meshes[d]?.primitives[u];if(m&&m.extensions&&m.extensions[Gu]){let c=m.extensions[Gu];l.userData.structuralMetadata=new uv(i,o,a,c,l)}else l.userData.structuralMetadata=s}})}},PM=new de.Vector2,AM=new de.Vector2,EM=new de.Vector2;function sL(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var zM=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(r=>{let{texture:i,...o}=r,a={label:null,propertyTable:null,nullFeatureId:null,...o};return i&&(a.texture={texCoord:0,channels:[0],...i}),a})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:n,textures:r,featureIds:i}=this,o=Array(i.length).fill(null),a=i.length;ms.increaseSizeTo(a);let s=OM(n,e),l=s[sL(t)];for(let m=0,c=i.length;m<c;m++){let p=i[m],f="nullFeatureId"in p?p.nullFeatureId:null;if("texture"in p){let v=r[p.texture.index];NM(n,p.texture.texCoord,t,s,PM),BM(PM,v.image.width,v.image.height,AM),EM.set(m,0),ms.renderPixelToTarget(r[p.texture.index],AM,EM)}else if("attribute"in p){let v=n.getAttribute(`_feature_id_${p.attribute}`).getX(l);v!==f&&(o[m]=v)}else{let v=l;v!==f&&(o[m]=v)}}let d=new Uint8Array(a*4);if(this._asyncRead)return ms.readDataAsync(d).then(()=>(u(),o));return ms.readData(d),u(),o;function u(){let m=new Uint32Array(1);for(let c=0,p=i.length;c<p;c++){let f=i[c],v="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let{channels:b}=f.texture,g=b.map(x=>d[4*c+x]);new Uint8Array(m.buffer).set(g);let y=m[0];y!==v&&(o[c]=y)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Vh="EXT_mesh_features";function kM(e,t,n){e.traverse(r=>{if(t.associations.has(r)){let{meshes:i,primitives:o}=t.associations.get(r),a=t.json.meshes[i]?.primitives[o];a&&a.extensions&&a.extensions[Vh]&&n(r,a.extensions[Vh])}})}var VM=class{constructor(e){this.parser=e,this.name=Vh}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Vh))return;let r=t.json.textures?.length||0,i=Array(r).fill(null);kM(e,t,(a,{featureIds:s})=>{s.forEach(l=>{if(l.texture&&i[l.texture.index]===null){let d=l.texture.index;i[d]=t.loadTexture(d)}})});let o=await Promise.all(i);kM(e,t,(a,s)=>{a.userData.meshFeatures=new zM(a.geometry,o,s)})}},UM=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])}}},gv=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 RM.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 UM),this.metadata&&(t.register(()=>new IM),t.register(()=>new VM)),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:Tz}=de.MathUtils;var Pz=new pv.FullScreenQuad(new de.MeshBasicMaterial),lL=new de.DataTexture(new Uint8Array([255,255,255,255]),1,1);lL.needsUpdate=!0;var cL=0,dL=1,uL=2,pL=3,mL=4,hL=5,fL=6,gL=7,bL=8,vL=9,yL=10,xL=11,Az=Object.freeze({NONE:cL,SCREEN_ERROR:dL,GEOMETRIC_ERROR:uL,DISTANCE:pL,DEPTH:mL,RELATIVE_DEPTH:hL,IS_LEAF:fL,RANDOM_COLOR:gL,RANDOM_NODE_COLOR:bL,CUSTOM_COLOR:vL,LOAD_ORDER:yL,INDEXED_COLOR:xL});var Ez=Math.PI/4,kz=3/5;var ps={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var Rz=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:r}=this;return n in r||(t.setHSL(Math.random(),1,.5),r[n]=t.getHex()),t.set(r[n])}};var Lz={[ps.NONE]:16777215,[ps.NOT_READY]:7829367,[ps.NO_FIT]:2250239,[ps.DEPTH]:4473924,[ps.OCCUPANCY]:65535,[ps.SPACING]:16776960,[ps.ANGLE]:16711680,[ps.FACING]:16711935};var Dz=Math.PI/180;var Oz=Tl*Math.PI*2;var Nz=Tl*Math.PI*2;var GM=require("three/examples/jsm/loaders/DRACOLoader.js"),WM=require("three/examples/jsm/loaders/KTX2Loader.js"),XM=require("three/examples/jsm/libs/meshopt_decoder.module.js"),ui=require("three");var qu=require("three");function FM(e){return!!e&&!e.isInterleavedBufferAttribute}function jM(e,t,n,r){for(let i=0;i<e.count;i+=1)for(let o=0;o<e.itemSize;o+=1)t.setComponent(i,o,qu.MathUtils.clamp(e.getComponent(i,o),n,r));return t}function wL(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let r=e.getComponent(t,n);if(!Number.isFinite(r)||r<0||r>1)return!1}return!0}var Fh=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let r=n.geometry;if(!r)return;let i=r.attributes.normal;FM(i)&&!(i.array instanceof Int16Array)&&(r.attributes.normal=jM(i,new qu.BufferAttribute(new Int16Array(i.count*i.itemSize),i.itemSize,!0),-1,1));for(let o of["uv","uv1","uv2","uv3"]){let a=r.attributes[o];!FM(a)||a.array instanceof Uint16Array||!wL(a)||(r.attributes[o]=jM(a,new qu.BufferAttribute(new Uint16Array(a.count*a.itemSize),a.itemSize,!0),0,1))}})}};var Yu=require("react/jsx-runtime"),SL=0,HM=4,ML=6,_L=12,CL=4;function TL(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 bv({url:e,rotation:t=[0,0,0],errorTarget:n=64,cacheSize:r=800,memoryBudgetMB:i=800,decoderConfig:o,objectBindings:a,itemMaterials:s,sceneConfig:l,selectedItem:d,panelHoveredItem:u,highlightOnHover:m=!0,onItemClick:c,onItemHover:p,onItemDoubleClick:f,onItemContextMenu:v,onObjectCatalog:b,onTilesetBounds:g,onModelLoaded:y,onLoadError:x,nodeRefsOut:M,onNodeRefsChange:P,materialRefsOut:S,explodeFactor:T=0,suspendBindingTransforms:h=!1}){let{camera:w,gl:C,invalidate:_}=(0,jh.useThree)(),k=(0,pt.useRef)(null),[R,U]=(0,pt.useState)(null),H=(0,pt.useRef)({onItemClick:c,onItemHover:p,onItemDoubleClick:f,onObjectCatalog:b,onTilesetBounds:g,onModelLoaded:y,onLoadError:x,onNodeRefsChange:P});H.current={onItemClick:c,onItemHover:p,onItemDoubleClick:f,onObjectCatalog:b,onTilesetBounds:g,onModelLoaded:y,onLoadError:x,onNodeRefsChange:P};let B=(0,pt.useRef)(!0),[X,D]=(0,pt.useState)(null),L=(0,pt.useRef)(null);L.current=X;let re=(0,pt.useRef)([]),Me=(0,pt.useRef)(!1);(0,pt.useEffect)(()=>{let me=new bh;return D(me),()=>me.dispose()},[e]);let Pe=(0,pt.useRef)(null),pe=(0,pt.useRef)(0),Ve=(0,pt.useRef)(!1),Q=i*1024*1024,J=(0,pt.useRef)(!1),ye=(0,pt.useRef)(zb),Re=(0,pt.useRef)(null),nt=(0,pt.useRef)(null),le=(0,pt.useRef)(null);(0,pt.useEffect)(()=>()=>{le.current!==null&&clearTimeout(le.current)},[]);let _e=o?.dracoDecoderPath??Pb,it=o?.ktx2TranscoderPath??Ab,Gt=o?.meshopt??!0,[be,Ce]=(0,pt.useState)(null);(0,pt.useEffect)(()=>{Ve.current=!1,J.current=!1;let me=new cv(e);me.loadAncestors=!0;let Ae=new Mh;Ae.priorityCallback=me.downloadQueue.priorityCallback,Ae.maxJobsPerOrigin=_L;let Ee=new Lo;Ee.priorityCallback=me.parseQueue.priorityCallback,Ee.maxJobs=ML;let lt=new Lo;lt.priorityCallback=me.processNodeQueue.priorityCallback,lt.maxJobs=me.processNodeQueue.maxJobs;let nn=new Lu;nn.unloadPriorityCallback=me.lruCache.unloadPriorityCallback,me.downloadQueue=Ae,me.parseQueue=Ee,me.processNodeQueue=lt,me.lruCache=nn;let Ot=_e?new GM.DRACOLoader().setDecoderPath(_e).setWorkerLimit(CL):null,at=it?new WM.KTX2Loader().setTranscoderPath(it).detectSupport(C):null;return me.registerPlugin(new gv({dracoLoader:Ot,ktxLoader:at,meshoptDecoder:Gt?XM.MeshoptDecoder:null,autoDispose:!1})),me.registerPlugin(new mv({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),me.registerPlugin(new Fh),Ce(me),window.__riTiles=me,()=>{me.forEachLoadedModel(Ie=>Jd(Ie)),me.dispose(),Ot?.dispose(),at?.dispose(),Ce(Ie=>Ie===me?null:Ie)}},[_e,C,it,Gt,e]),(0,pt.useEffect)(()=>{be&&(ye.current=zb,Re.current=null,be.errorTarget=n,be.lruCache.maxSize=r,be.lruCache.minSize=Math.max(1,Math.floor(r*.75)),be.lruCache.maxBytesSize=Q,be.lruCache.minBytesSize=Q*.75,_())},[r,n,_,Q,be]);let en=(0,pt.useMemo)(()=>{let me=a??{};return{objectBindings:me,keyByModelObject:TS(me),itemMaterials:s,shadingMode:l?.model.shading??"lit",rendererMode:l?.model.renderer??"pbr",selectedKey:d??null,hoveredKey:PS(R,u),highlightOnHover:m,suspendTransforms:h,placementFrame:be?.group.matrixWorld,invalidate:_}},[R,m,_,s,a,u,l,d,h,be]),Se=(0,pt.useCallback)(()=>{if(!be)return;let me=tn.current,Ae=Me.current?L.current?.nodesByBinding(me)??{}:{},Ee={};be.group.traverse(at=>{if(!at.isMesh)return;let Ie=Bb(at);if(!Ie)return;let ht=me.keyByModelObject[Ie]??Ie;if(!me.objectBindings[ht])return;Ae[ht]||(Ae[ht]=at);let gt=at.material;gt&&(Ee[ht]=gt)});let lt=M?.current??{},nn=Object.keys(lt),Ot=nn.length!==Object.keys(Ae).length||nn.some(at=>lt[at]!==Ae[at]);M&&(M.current=Ae),S&&(S.current=Ee),(Ot||!M)&&H.current.onNodeRefsChange?.()},[S,M,be]),xe=(0,pt.useCallback)(me=>fh(me,en),[en]),$e=(0,pt.useCallback)(me=>ES(me,en),[en]),fn=(0,pt.useRef)($e);fn.current=$e;let tn=(0,pt.useRef)(en);tn.current=en;let Ln=(0,pt.useCallback)(()=>{let me=Pe.current,Ae=pe.current;return!me||Ae<=0?tn.current:{...tn.current,explode:{factor:Ae,centre:me.centre,radius:me.radius}}},[]);(0,pt.useEffect)(()=>{be&&($e(be.group),B.current=!0,be.forEachLoadedModel(me=>{$e(me),jc(me,Ln())}),_())},[$e,_,Ln,be]),(0,pt.useEffect)(()=>{let me=TL(e);if(!me)return;let Ae=!1;return fetch(me).then(Ee=>Ee.ok?Ee.json():null).then(Ee=>{Ae||!Ee?.objects||(re.current=Ee.objects,Me.current=Ee.bindingFrame==="gltf-identity-v2",Me.current&&L.current?.setCatalog(Ee.objects),B.current=!0,H.current.onObjectCatalog?.(Ee.objects),_())}).catch(()=>{}),()=>{Ae=!0}},[e,_,X]),(0,pt.useEffect)(()=>{if(!be)return;let me=!1,Ae=()=>_(),Ee=Ie=>{Ie.scene&&(Ie.scene.traverse(ht=>{let gt=ht.material;for(let Yt of Array.isArray(gt)?gt:gt?[gt]:[])Yt.transparent&&Yt.side===ui.DoubleSide&&(Yt.forceSinglePass=!0)}),fn.current(Ie.scene),jc(Ie.scene,Ln()),cm(Ie.scene)),B.current=!0,me||(me=!0,H.current.onModelLoaded?.(be.group)),_()},lt=Ie=>{H.current.onLoadError?.(Ie.error)},nn=Ie=>{Ie.scene&&(Ib(Ie.scene),Jd(Ie.scene)),B.current=!0};be.setCamera(w),be.setResolutionFromRenderer(w,C),be.addEventListener("needs-update",Ae),be.addEventListener("load-model",Ee),be.addEventListener("load-error",lt),be.addEventListener("dispose-model",nn);let Ot=()=>{B.current=!0,_()};be.addEventListener("tile-visibility-change",Ot);let at=()=>{let Ie=be.root;Ie&&!Ie.content?.uri&&Ie.refine==="REPLACE"&&(Ie.refine="ADD",_())};return be.addEventListener("load-root-tileset",at),_(),()=>{be.removeEventListener("needs-update",Ae),be.removeEventListener("load-model",Ee),be.removeEventListener("load-error",lt),be.removeEventListener("dispose-model",nn),be.removeEventListener("tile-visibility-change",Ot),be.removeEventListener("load-root-tileset",at),Ib(be.group),be.deleteCamera(w),M&&(M.current={}),S&&(S.current={})}},[w,C,_,S,M,Ln,be]);let we=Bm(me=>xe(me)?.binding??null,v),Be=(0,pt.useCallback)(me=>{if(we.consumeClick())return;let Ae=xe(me.object);Ae&&(me.stopPropagation(),H.current.onItemClick?.(Ae.binding))},[xe,we,c]),Qe=(0,pt.useCallback)(me=>{let Ae=xe(me.object);if(!Ae)return;H.current.onItemDoubleClick?.(Ae.binding,Ac(me))&&me.stopPropagation()},[xe]),wt=(0,pt.useCallback)(me=>{let Ae=xe(me.object),Ee=Ae?.key??null;Ee!==k.current&&(k.current=Ee,U(Ee),H.current.onItemHover?.(Ae?.binding??null))},[xe]),Dt=(0,pt.useCallback)(()=>{k.current!==null&&(k.current=null,U(null),H.current.onItemHover?.(null))},[]);return(0,pt.useEffect)(()=>{_()},[_,be]),(0,jh.useFrame)((me,Ae)=>{if(!be)return;if(be.setResolutionFromRenderer(w,C),Me.current&&X){let gn=X.sync(Ln(),d,h);X.updateBounds(be.root),h&&be.forEachLoadedModel(mr=>jc(mr,gn))}if(be.update(),!Ve.current){let gn=new ui.Box3;if(be.getBoundingBox(gn)){Ve.current=!0,be.group.updateMatrixWorld(),gn.applyMatrix4(be.group.matrixWorld);let mr=gn.getBoundingSphere(new ui.Sphere);Pe.current={centre:mr.center.clone(),radius:gn.getSize(new ui.Vector3).length()*.5},H.current.onTilesetBounds?.(gn),_()}}B.current&&(B.current=!1,Se());let Ee=Math.min(Math.max(T,0),1),lt=pe.current;Math.abs(lt-Ee)>1e-4?(pe.current=ui.MathUtils.lerp(lt,Ee,1-Math.exp(-6*Ae)),jc(be.group,Ln()),_()):lt!==Ee&&(pe.current=Ee,jc(be.group,Ln()),_());let nn=be,Ot=be.lruCache,at=Ot.isFull(),Ie=ye.current,ht=Ie.loosened&&Re.current?Re.current:{bytes:Ot.maxBytesSize,items:Ot.maxSize},gt=0;for(let gn of Ot.usedSet??[])gt+=Ot.bytesMap?.get(gn)??0;let Yt=!1,Kr=be;for(let gn of Kr.usedSet??[]){let mr=gn.internal?.loadingState??HM;if(gn.traversal?.used&&gn.internal?.hasContent&&mr>=SL&&mr<HM){Yt=!0;break}}let Nt=nt.current??(nt.current={world:new ui.Matrix4,projection:new ui.Matrix4}),cn=!Nt.world.equals(w.matrixWorld)||!Nt.projection.equals(w.projectionMatrix);cn&&(Nt.world.copy(w.matrixWorld),Nt.projection.copy(w.projectionMatrix));let jn={full:at,wanting:Yt,moved:cn,usage:Math.max(gt/Math.max(1,ht.bytes),(Ot.usedSet?.size??0)/Math.max(1,ht.items)),now:performance.now()},yr=zS(Ie,jn);yr!==Ie&&(yr.loosened&&(!Ie.loosened||yr.raisedAt!==Ie.raisedAt)?(Ie.loosened||(Re.current=ht),Ot.maxBytesSize=Math.max(ht.bytes,Ot.cachedBytes??0)*Vb,Ot.maxSize=Math.ceil(Math.max(ht.items,Ot.itemSet?.size??0)*Vb)):!yr.loosened&&Ie.loosened&&Re.current&&(Ot.maxBytesSize=Re.current.bytes,Ot.maxSize=Re.current.items,Re.current=null),ye.current=yr,be.errorTarget=n*yr.factor,_()),!J.current&&at&&jn.wanting&&yr.factor>=Au&&(J.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 bi=VS(yr,jn);bi===0?_():bi!==null&&le.current===null&&(le.current=setTimeout(()=>{le.current=null,_()},bi)),((nn.stats?.downloading??0)>0||(nn.stats?.parsing??0)>0||nn.loadProgress!==void 0&&nn.loadProgress<1&&!at)&&_()}),be?(0,Yu.jsxs)("group",{rotation:t,children:[X?(0,Yu.jsx)("primitive",{object:X.group}):null,(0,Yu.jsx)("primitive",{object:be.group,onClick:Be,onDoubleClick:Qe,onPointerDown:v?we.onPointerDown:void 0,onPointerMove:wt,onPointerOut:Dt})]}):null}var Hh=require("three");var PL=new Hh.Matrix4().makeRotationX(Math.PI/2);function $M(e){e.updateMatrixWorld(!0);let t=new Hh.Matrix4().copy(e.matrixWorld).invert().premultiply(PL),n=new Hh.Matrix4,r=[];for(let[i,o]of Object.entries(ci(e).nodesById)){let a=o;if(!a.isMesh||!a.geometry||!o.name)continue;let s=a.geometry;s.boundingBox||s.computeBoundingBox();let l=s.boundingBox.clone().applyMatrix4(n.multiplyMatrices(t,o.matrixWorld)),d=s.index?s.index.count:s.getAttribute("position")?.count??0;r.push({name:i,triangles:Math.floor(d/3),minimum:l.min.toArray(),maximum:l.max.toArray()})}return r.sort((i,o)=>i.name.localeCompare(o.name))}var rt=require("react"),xv=require("@react-three/drei"),El=require("@react-three/fiber"),so=require("three");var vv=require("three");function qc(e){if(!e?.trim()||/[\u0000-\u001f\u007f]/.test(e))return null;try{let t=new URL(e.trim(),"https://annotation.invalid/");return t.protocol==="https:"||t.protocol==="http:"?e.trim():null}catch{return null}}function yv(e){return e.category?.trim()??""}function qM(e,t){if(t===null)return e;let n=new Set(t.map(r=>r.trim()));return e.filter(r=>n.has(yv(r)))}function YM(e,t){let n=Number.isFinite(e.minDistance)?Math.max(0,e.minDistance):0,r=Number.isFinite(e.maxDistance)?Math.max(0,e.maxDistance):1/0;return t>=n&&t<=r}function Yc(e){return!!e&&[e.position,e.target].every(t=>Array.isArray(t)&&t.length===3&&t.every(Number.isFinite))}function Kc(e){let t=e.camera;return{position:e.getPosition(new vv.Vector3,!1).toArray(),target:e.getTarget(new vv.Vector3,!1).toArray(),azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle,fov:"fov"in t?Number(t.fov):null,zoom:t.zoom}}function Ku(e,t){Yc(t)&&(e.setLookAt(...t.position,...t.target,!0),Number.isFinite(t.azimuthAngle)&&Number.isFinite(t.polarAngle)&&e.rotateTo(t.azimuthAngle,t.polarAngle,!0),Al(e,t))}function Al(e,t){let n=!1;t.fov!=null&&Number.isFinite(t.fov)&&t.fov>0&&t.fov<180&&"fov"in e.camera&&(e.camera.fov=t.fov,e.camera.updateProjectionMatrix(),n=!0),t.zoom!=null&&Number.isFinite(t.zoom)&&t.zoom>0&&e.zoomTo(t.zoom,!0),n&&e.dispatchEvent({type:"update"})}var Zn=require("react/jsx-runtime"),AL=.02;function KM(e,t,n=!1){let r=(0,rt.useRef)(null),[i,o]=(0,rt.useState)(!0),a=(0,rt.useRef)(!0),s=(0,rt.useMemo)(()=>new so.Vector3,[]),l=(0,El.useThree)(f=>f.scene),d=(0,rt.useRef)(null),u=(0,rt.useMemo)(()=>new so.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),m=(0,rt.useMemo)(()=>new so.Vector3,[]),c=(0,rt.useMemo)(()=>new so.Vector3,[]),p=(0,rt.useMemo)(()=>new so.Vector3,[]);return(0,rt.useEffect)(()=>{d.current=null},[e.anchorNodeName]),(0,El.useFrame)(({camera:f})=>{let v=r.current,b=v?.parent;if(!v||!b)return;let g=d.current;if(e.anchorNodeName&&(!g||!g.parent)&&(g=di(l,e.anchorNodeName),d.current=g),g?(g.updateWorldMatrix(!0,!1),m.copy(u).applyMatrix4(g.matrixWorld)):(m.copy(u),b.localToWorld(m)),t){let x=t.current.get(e.id);x||(x=new so.Vector3,t.current.set(e.id,x)),x.copy(m)}f.getWorldPosition(s);let y=!n||YM(e,s.distanceTo(m));y!==a.current&&(a.current=y,o(y)),p.copy(s).sub(m),p.lengthSq()>0?(p.normalize(),c.copy(m).addScaledVector(p,AL)):c.copy(m),b.worldToLocal(c),v.position.copy(c)}),{anchorRef:r,inRange:i}}function EL({annotation:e,occluders:t,worldPositionsRef:n,onClick:r,onHover:i,showAnnotationOnHover:o}){let a=Fe(),[s,l]=(0,rt.useState)(!1),{anchorRef:d,inRange:u}=KM(e,n,!0),m=s||!u,[c,p]=(0,rt.useState)(!1),[f,v]=(0,rt.useState)(1),b=(0,rt.useRef)(null),g=(0,rt.useRef)(null),y=(0,rt.useRef)(null);(0,rt.useEffect)(()=>{u||(b.current&&clearTimeout(b.current),c&&(p(!1),i?.(null)))},[u,c,i]),(0,rt.useEffect)(()=>()=>{b.current&&(clearTimeout(b.current),b.current=null),y.current&&(clearTimeout(y.current),y.current=null)},[]);let x=h=>{h.stopPropagation(),h.preventDefault(),b.current&&(clearTimeout(b.current),b.current=null),b.current=window.setTimeout(()=>{r?.(e),b.current=null},10)},M=h=>{h.stopPropagation(),p(!0),v(100),y.current&&(clearTimeout(y.current),y.current=null),i?.(e)},P=h=>{h.stopPropagation(),p(!1),v(1),y.current&&clearTimeout(y.current),y.current=window.setTimeout(()=>{i?.(null),o&&i?.(null),y.current=null},50)},S=h=>{h.stopPropagation();let w=h.currentTarget;w.dataset.pointerX=String(h.clientX),w.dataset.pointerY=String(h.clientY)},T=h=>{h.stopPropagation();let w=h.currentTarget,C=parseFloat(w.dataset.pointerX||"0"),_=parseFloat(w.dataset.pointerY||"0"),k=h.clientX-C,R=h.clientY-_;Math.sqrt(k*k+R*R)<10&&x(h)};return(0,Zn.jsx)("group",{ref:d,children:(0,Zn.jsx)(xv.Html,{center:!0,occlude:t,onOcclude:l,pointerEvents:m?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:m?"none":"auto",zIndex:f},className:"annotation-html-wrapper",transparent:!0,children:(0,Zn.jsx)("div",{ref:g,className:`ri-annotationMarker ${c?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:m?"none":"flex"},onPointerDown:S,onPointerUp:T,onPointerEnter:M,onPointerLeave:P,onDoubleClick:h=>{h.stopPropagation(),r?.(e)},role:"button",tabIndex:0,"aria-label":a("annotationMarker",{id:e.id,title:e.title}),onKeyDown:h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),h.stopPropagation(),r?.(e))},children:(0,Zn.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function kL({annotation:e,occluders:t,popupRef:n,onClose:r,hideCloseButton:i=!1}){let o=Fe(),[a,s]=(0,rt.useState)(!1),{anchorRef:l}=KM(e),d=(0,Zn.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:a?"none":"block"},onPointerDown:u=>u.stopPropagation(),onClick:u=>u.stopPropagation(),children:[(0,Zn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,Zn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!i&&(0,Zn.jsx)("button",{onClick:u=>{u.stopPropagation(),r?.()},className:"ri-viewAnnotationClose","aria-label":o("closeAnnotation"),children:"\xD7"})]}),e.category&&(0,Zn.jsx)("span",{className:"ri-annotationCategory",children:e.category}),e.description&&(0,Zn.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description}),e.images?.map((u,m)=>{let c=qc(u.src);return c?(0,Zn.jsx)("img",{className:"ri-annotationImage",src:c,alt:u.alt??"",loading:"lazy"},`${c}-${m}`):null}),e.links?.map((u,m)=>{let c=qc(u.href);return c?(0,Zn.jsx)("a",{className:"ri-annotationLink",href:c,target:"_blank",rel:"noopener noreferrer",children:u.label||o("learnMore")},`${c}-${m}`):null})]});return(0,Zn.jsx)("group",{ref:l,children:(0,Zn.jsx)(xv.Html,{occlude:t,onOcclude:s,pointerEvents:a?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:a?"none":"auto",zIndex:1e3},transparent:!0,children:d})})}function Gh({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:r,canvasRootRef:i,worldPositionsRef:o,modelLoaded:a,onAnnotationClick:s,onAnnotationHover:l,onCloseAnnotation:d,hideCloseButton:u=!1,showAnnotationOnHover:m=!1}){let c=(0,El.useThree)(B=>B.invalidate),p=(0,El.useThree)(B=>B.scene),[f,v]=(0,rt.useState)(null),[b,g]=(0,rt.useState)(!1),y=(0,rt.useRef)(null);(0,rt.useEffect)(()=>{y.current!==null&&n===null&&(v(null),g(!1)),y.current=n?.id??null},[n]);let x=(0,rt.useRef)(null),M=(0,rt.useRef)(null),P=(0,rt.useRef)(null),S=(0,rt.useMemo)(()=>{let B=[];return p.traverse(X=>{let D=X;D.isMesh&&!D.isSkinnedMesh&&B.push({current:X})}),B},[p,e,a]),T=(0,rt.useCallback)(()=>{c();let B=()=>{c(),M.current=window.requestAnimationFrame(()=>{c(),M.current=null})};M.current=window.requestAnimationFrame(B)},[c]);(0,rt.useEffect)(()=>{T()},[e,T]),(0,rt.useEffect)(()=>{T()},[n,T]),(0,rt.useEffect)(()=>()=>{M.current!==null&&window.cancelAnimationFrame(M.current),P.current&&clearTimeout(P.current)},[]);let h=n||f,w=(0,rt.useMemo)(()=>h?e.find(B=>B.id===h.id)??null:null,[h,e]),C=(0,rt.useCallback)(B=>{if(b&&f?.id===B.id){g(!1),v(null),d?.();return}g(!0),v(B),s?.(B)},[b,f,s,d]),_=(0,rt.useCallback)(B=>{l?.(B),m&&!b&&(P.current&&(clearTimeout(P.current),P.current=null),B?v(B):P.current=window.setTimeout(()=>{v(null),d?.(),P.current=null},100))},[b,l,m,d]),k=(0,rt.useCallback)(()=>{g(!1),v(null),d?.()},[d]),R=(0,rt.useCallback)(B=>{let X=B.target;if(X.closest?.(".ri-annotationMarker")||X.closest?.(".ri-viewAnnotationPopup")||X.closest?.(".annotation-html-wrapper"))return;let D=i.current;D&&D.contains(X)&&(g(!1),v(null),d?.())},[i,d]),U=(0,rt.useCallback)(B=>{B.key==="Escape"&&b&&(g(!1),v(null),d?.())},[b,d]);(0,rt.useEffect)(()=>{let B=i.current;return B&&(B.addEventListener("click",R),B.addEventListener("pointerdown",R)),document.addEventListener("keydown",U),()=>{B&&(B.removeEventListener("click",R),B.removeEventListener("pointerdown",R)),document.removeEventListener("keydown",U)}},[i,R,U]);let H=(0,rt.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(B=>B*Math.PI/180),[t?.model.rotation]);return(0,rt.useEffect)(()=>{c()},[c,H]),(0,El.useFrame)((B,X)=>{if(!x.current)return;x.current.rotation.x=so.MathUtils.lerp(x.current.rotation.x,H[0],1-Math.exp(-5*X)),x.current.rotation.y=so.MathUtils.lerp(x.current.rotation.y,H[1],1-Math.exp(-5*X)),x.current.rotation.z=so.MathUtils.lerp(x.current.rotation.z,H[2],1-Math.exp(-5*X));let{rotation:D}=x.current;Math.abs(D.x-H[0])+Math.abs(D.y-H[1])+Math.abs(D.z-H[2])>1e-4&&c()}),(0,Zn.jsxs)("group",{ref:x,children:[e.map(B=>{let X=`${B.worldPosition.join(",")}-${B.title}-${B.id}`;return(0,Zn.jsx)(EL,{annotation:B,occluders:S,worldPositionsRef:o,onClick:C,onHover:_,showAnnotationOnHover:m},X)}),w?(0,Zn.jsx)(kL,{annotation:w,occluders:S,popupRef:r,onClose:k,hideCloseButton:u},`popup-${w.id}`):null]})}var wa=require("react"),$h=require("@react-three/drei");var Xh=require("react"),ZM=require("@react-three/drei"),JM=require("@react-three/fiber"),lo=require("three");var Wh=require("react/jsx-runtime");function hs(e){return(0,JM.useThree)(n=>Po(n.gl))?(0,Wh.jsx)(RL,{...e}):(0,Wh.jsx)(ZM.Line,{points:e.points,color:e.color,lineWidth:e.lineWidth,dashed:e.dashed})}function RL({points:e,color:t,dashed:n=!1}){let r=(0,Xh.useMemo)(()=>{let i=new lo.BufferGeometry().setFromPoints(e.map(s=>s instanceof lo.Vector3?s:new lo.Vector3(...s))),o=n?new lo.LineDashedMaterial({color:t,dashSize:.02,gapSize:.02}):new lo.LineBasicMaterial({color:t}),a=new lo.Line(i,o);return n&&a.computeLineDistances(),a},[e,t,n]);return(0,Xh.useEffect)(()=>()=>{r.geometry.dispose(),r.material.dispose()},[r]),(0,Wh.jsx)("primitive",{object:r})}var qn=require("three");var Ke=require("react/jsx-runtime"),fs="#22d3ee",LL="#facc15";function kl(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function QM(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function DL(e){let t=e.reduce((n,r)=>[n[0]+r[0],n[1]+r[1],n[2]+r[2]],[0,0,0]);return[t[0]/e.length,t[1]/e.length,t[2]/e.length]}function xa({position:e,children:t}){return(0,Ke.jsx)($h.Html,{center:!0,position:e,zIndexRange:[20,0],style:{pointerEvents:"none"},children:(0,Ke.jsx)("div",{className:"ri-measureLabel",children:t})})}function e_({positions:e,triangles:t}){let n=(0,wa.useMemo)(()=>{let r=new qn.Vector3(...e[0]),i=new qn.BufferGeometry;return i.setAttribute("position",new qn.Float32BufferAttribute(e.flatMap(o=>new qn.Vector3(...o).sub(r).toArray()),3)),i.setIndex(t.flat()),i},[e,t]);return(0,wa.useEffect)(()=>()=>n.dispose(),[n]),(0,Ke.jsx)("mesh",{position:e[0],geometry:n,raycast:()=>{},renderOrder:100,children:(0,Ke.jsx)("meshBasicMaterial",{color:fs,side:qn.DoubleSide,transparent:!0,opacity:.18,depthWrite:!1})})}var OL=[[0,1,2]];function NL({positions:e}){let t=Fm(e);if(t===null)return null;let n=new qn.Vector3(...e[1]),r=new qn.Vector3(...e[0]).sub(n),i=new qn.Vector3(...e[2]).sub(n),o=Math.min(r.length(),i.length())*.22;r.normalize(),i.normalize();let a=r.clone().cross(i);a.lengthSq()<1e-12&&a.copy(r).cross(Math.abs(r.y)<.9?new qn.Vector3(0,1,0):new qn.Vector3(1,0,0)),a.normalize();let s=t*Math.PI/180,l=Array.from({length:33},(u,m)=>r.clone().applyAxisAngle(a,s*m/32).multiplyScalar(o).add(n).toArray()),d=r.clone().applyAxisAngle(a,s/2).multiplyScalar(o*1.4).add(n).toArray();return(0,Ke.jsxs)(Ke.Fragment,{children:[(0,Ke.jsx)(hs,{points:l,color:fs,lineWidth:2}),(0,Ke.jsxs)(xa,{position:d,children:[t.toFixed(2),"\xB0"]})]})}function BL({box:e,unit:t}){let n=(0,wa.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]),r=(0,wa.useMemo)(()=>{let[s,l,d]=e.size,u=new qn.BoxGeometry(s||1e-4,l||1e-4,d||1e-4),m=new qn.EdgesGeometry(u);return u.dispose(),m},[e.size]);(0,wa.useEffect)(()=>()=>{r.dispose()},[r]);let[i,o,a]=e.size;return(0,Ke.jsxs)("group",{position:n,children:[(0,Ke.jsx)("lineSegments",{geometry:r,children:(0,Ke.jsx)("lineBasicMaterial",{color:LL})}),(0,Ke.jsxs)(xa,{position:[0,-o/2,a/2],children:["W ",kl(i,t)]}),(0,Ke.jsxs)(xa,{position:[-i/2,0,a/2],children:["H ",kl(o,t)]}),(0,Ke.jsxs)(xa,{position:[i/2,-o/2,0],children:["D ",kl(a,t)]})]})}function qh({points:e,unit:t,box:n,showDimensions:r,tool:i="distance",areaClosed:o=!1,snapPreview:a}){let s=(0,wa.useMemo)(()=>e.map(u=>u.position),[e]),l=(0,wa.useMemo)(()=>i==="area"&&o?jm(s):null,[i,o,s]),d=i==="pointToPlane"&&e.length===2?Z1(e[0],e[1].position):null;return(0,Ke.jsxs)("group",{children:[i!=="wrap"&&i!=="wrapHorizontal"&&e.map(u=>(0,Ke.jsx)($h.Html,{center:!0,position:u.position,zIndexRange:[15,0],style:{pointerEvents:"none"},children:(0,Ke.jsx)("div",{className:`ri-measureDot${u.snapped?" ri-measureDot--snapped":""}`})},u.id)),i==="distance"&&e.slice(1).map((u,m)=>{let c=e[m].position,p=u.position,f=new qn.Vector3(...c).distanceTo(new qn.Vector3(...p));return(0,Ke.jsxs)("group",{children:[(0,Ke.jsx)(hs,{points:[c,p],color:fs,lineWidth:2}),(0,Ke.jsx)(xa,{position:QM(c,p),children:kl(f,t)})]},`${e[m].id}-${u.id}`)}),(i==="angle"||i==="area")&&s.length>=2&&(0,Ke.jsx)(hs,{points:o?[...s,s[0]]:s,color:fs,lineWidth:2}),i==="angle"&&(0,Ke.jsx)(NL,{positions:s}),l&&!("error"in l)&&(0,Ke.jsxs)(Ke.Fragment,{children:[(0,Ke.jsx)(e_,{positions:s,triangles:l.triangles}),(0,Ke.jsx)(xa,{position:l.center,children:kl(l.area,t?`${t}\xB2`:"")})]}),i==="pointToPlane"&&e[0]?.faceVertices&&(0,Ke.jsxs)(Ke.Fragment,{children:[(0,Ke.jsx)(e_,{positions:e[0].faceVertices,triangles:OL}),(0,Ke.jsx)(hs,{points:[...e[0].faceVertices,e[0].faceVertices[0]],color:fs,lineWidth:1}),e.length===1&&(0,Ke.jsx)(xa,{position:e[0].position,children:"Reference plane"})]}),d&&(0,Ke.jsxs)(Ke.Fragment,{children:[(0,Ke.jsx)(hs,{points:[e[1].position,d.projection],color:fs,lineWidth:2}),(0,Ke.jsx)(hs,{points:[e[0].position,d.projection],color:fs,lineWidth:1,dashed:!0}),(0,Ke.jsx)(xa,{position:QM(e[1].position,d.projection),children:kl(d.distance,t)})]}),(i==="wrap"||i==="wrapHorizontal")&&s.length>=3&&(0,Ke.jsxs)(Ke.Fragment,{children:[(0,Ke.jsx)(hs,{points:[...s,s[0]],color:fs,lineWidth:2}),(0,Ke.jsx)(xa,{position:DL(s),children:kl(gb(s,!0),t)})]}),a&&(0,Ke.jsxs)($h.Html,{center:!0,position:a.position,zIndexRange:[20,0],style:{pointerEvents:"none"},children:[(0,Ke.jsx)("div",{className:"ri-measureSnapTarget"}),(0,Ke.jsx)("div",{className:"ri-measureSnapLabel",children:a.snapped==="vertex"?"Vertex":"Edge"})]}),r&&n?(0,Ke.jsx)(BL,{box:n,unit:t}):null]})}var gs=require("lucide-react"),Yh=require("react"),jt=require("react/jsx-runtime");function wv(e){let t=Fe(),n=(0,Yh.useRef)(null);(0,Yh.useLayoutEffect)(()=>{if(!n.current)return;let s=()=>e.onHeight(n.current?.getBoundingClientRect().height??34),l=new ResizeObserver(s);return l.observe(n.current),s(),()=>l.disconnect()},[e.onHeight]);let{tool:r,pointCount:i,areaClosed:o}=e,a=r==="angle"?[t("angleFirstArmHint"),t("angleVertexHint"),t("angleSecondArmHint"),t("angleNewHint")][i]:r==="area"?t(o?"areaNewHint":"areaCornersHint"):r==="pointToPlane"?[t("pointToPlaneFaceHint"),t("pointToPlanePointHint"),t("pointToPlaneNewHint")][i]:t(r==="wrap"?"wrapHint":r==="wrapHorizontal"?"wrapHorizontalHint":"distanceHint");return(0,jt.jsxs)("div",{ref:n,className:"ri-measureTools",style:{top:e.top},children:[(0,jt.jsxs)("div",{className:"ri-measureToolbarRow",children:[(0,jt.jsx)("button",{type:"button",className:`ri-measureButton ${e.active?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onToggle,title:e.active?t("stopMeasuring"):t("startMeasuring"),"aria-pressed":e.active,children:(0,jt.jsx)(gs.PencilRuler,{size:16})}),(0,jt.jsx)("button",{type:"button",className:`ri-measureButton ${e.showDimensions?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onDimensions,title:t("toggleBoundingDimensions"),"aria-pressed":e.showDimensions,children:(0,jt.jsx)(gs.RulerDimensionLine,{size:16})}),e.active&&(0,jt.jsxs)(jt.Fragment,{children:[(0,jt.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementTool"),value:r,disabled:e.disabled,onChange:s=>e.onTool(s.target.value),children:[(0,jt.jsx)("option",{value:"distance",children:t("distance")}),(0,jt.jsx)("option",{value:"angle",children:t("angle")}),(0,jt.jsx)("option",{value:"area",children:t("area")}),(0,jt.jsx)("option",{value:"pointToPlane",children:t("pointToPlane")}),(0,jt.jsx)("option",{value:"wrap",children:t("wrap")}),(0,jt.jsx)("option",{value:"wrapHorizontal",children:t("wrapHorizontal")})]}),(0,jt.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementSnapping"),value:e.snap,disabled:e.disabled,onChange:s=>e.onSnap(s.target.value),children:[(0,jt.jsx)("option",{value:"none",children:t("noSnapping")}),(0,jt.jsx)("option",{value:"auto",children:t("snapAuto")}),(0,jt.jsx)("option",{value:"vertex",children:t("snapVertex")}),(0,jt.jsx)("option",{value:"edge",children:t("snapEdge")})]})]}),i>0&&(0,jt.jsxs)(jt.Fragment,{children:[(0,jt.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onUndo,disabled:e.disabled,title:t("undoMeasurementPoint"),children:(0,jt.jsx)(gs.Undo2,{size:16})}),(0,jt.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onClear,disabled:e.disabled,title:t("clearMeasurements"),children:(0,jt.jsx)(gs.Eraser,{size:16})})]}),e.active&&r==="area"&&!o&&(0,jt.jsx)("button",{type:"button",className:"ri-measureFinish",onClick:e.onFinishArea,disabled:e.disabled||i<3,children:t("finishArea")})]}),e.active&&(0,jt.jsx)("div",{className:`ri-measureHint${e.error?" ri-measureHint--error":""}`,role:"status",children:e.error?t.message(e.error):a})]})}var It=require("react"),Rl=require("@react-three/xr"),i_=require("@react-three/fiber"),Zu=require("three"),co=require("react/jsx-runtime"),IL=1,t_=1,zL=.1,VL=10;function UL(e,t){let[n,r,i]=e.size,o=(e.min[0]+e.max[0])/2,a=(e.min[2]+e.max[2])/2,s=Math.max(n,r,i)||1;return{scale:t==="real-world"?1:IL/s,offset:[-o,-e.min[1],-a]}}function n_(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function r_(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var FL=(0,It.forwardRef)(function({box:t,scaleMode:n,children:r,onARStateChange:i},o){let a=(0,It.useRef)(null),s=(0,It.useRef)(null),l=(0,It.useRef)(null),d=(0,Rl.useXR)(B=>B.session!=null),u=(0,Rl.useXR)(B=>B.mode==="immersive-ar"),m=(0,It.useMemo)(()=>t?UL(t,n):null,[t,n]),c=(0,It.useRef)(new Zu.Vector3(0,0,-t_)),p=(0,It.useRef)(1),f=(0,It.useRef)(0),v=(0,It.useRef)(!0),b=(0,It.useRef)(!1),g=(0,It.useMemo)(()=>new Zu.Matrix4,[]),y=(0,It.useRef)(new Zu.Vector3),x=(0,It.useRef)(!1),M=(0,It.useRef)(null),P=(0,It.useRef)(!1),S=(0,It.useRef)(0),T=(0,It.useRef)(0),h=(0,It.useRef)(1),w=(0,It.useRef)(0),C=(0,It.useCallback)(()=>{if(!i||!u)return;let B={canPlace:x.current,isPlacementMode:v.current,isModelPlaced:b.current},X=M.current;X&&X.canPlace===B.canPlace&&X.isPlacementMode===B.isPlacementMode&&X.isModelPlaced===B.isModelPlaced||(M.current=B,i(B))},[u,i]),_=(0,It.useCallback)(()=>!u||!x.current?!1:(c.current.copy(y.current),b.current=!0,v.current=!1,C(),!0),[C,u]),k=(0,It.useCallback)(()=>{u&&(v.current=!0,C())},[C,u]),R=(0,It.useCallback)(()=>{let B=_();return!B&&u&&(v.current=!1,C()),B},[C,u,_]),U=(0,It.useCallback)(()=>{u&&(v.current=!1,C())},[C,u]);(0,It.useImperativeHandle)(o,()=>({placeCurrent:_,startPlacementMode:k,finishPlacementMode:R,cancelPlacementMode:U}),[U,R,_,k]),(0,It.useEffect)(()=>{if(!d){c.current.set(0,0,-t_),p.current=1,f.current=0,x.current=!1,P.current=!1,v.current=!0,b.current=!1,M.current=null;return}u&&(x.current=!1,P.current=!1,v.current=!0,b.current=!1,M.current=null,C())},[C,d,u]),(0,Rl.useXRHitTest)((B,X)=>{if(!u||B.length===0){x.current&&(x.current=!1,C());return}X(g,B[0])&&(y.current.setFromMatrixPosition(g),x.current||(x.current=!0,C()))},"viewer"),(0,Rl.useXRInputSourceEvent)("all","select",()=>{!u||P.current||!v.current||_()},[u,_]),(0,It.useEffect)(()=>{if(!u)return;let B=L=>{L.touches.length===2&&(P.current=!0,S.current=n_(L.touches),T.current=r_(L.touches),h.current=p.current,w.current=f.current)},X=L=>{if(!P.current||L.touches.length!==2)return;L.preventDefault();let re=n_(L.touches);if(S.current>0){let Pe=re/S.current;p.current=Math.min(VL,Math.max(zL,h.current*Pe))}let Me=r_(L.touches);f.current=w.current-(Me-T.current)},D=L=>{L.touches.length===0&&requestAnimationFrame(()=>{P.current=!1})};return window.addEventListener("touchstart",B),window.addEventListener("touchmove",X,{passive:!1}),window.addEventListener("touchend",D),window.addEventListener("touchcancel",D),()=>{window.removeEventListener("touchstart",B),window.removeEventListener("touchmove",X),window.removeEventListener("touchend",D),window.removeEventListener("touchcancel",D)}},[u]),(0,i_.useFrame)(()=>{let B=a.current,X=s.current;if(!B||!X)return;!d||!m?(B.visible=!0,B.position.set(0,0,0),B.rotation.set(0,0,0),X.scale.setScalar(1)):(B.visible=!u||b.current,B.position.copy(c.current),B.rotation.set(0,f.current,0),X.scale.setScalar(m.scale*p.current));let D=l.current;if(D){let L=u&&v.current&&x.current;D.visible=L,L&&D.position.copy(y.current)}});let H=d&&m?m.offset:[0,0,0];return(0,co.jsxs)(co.Fragment,{children:[(0,co.jsxs)("mesh",{ref:l,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,co.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,co.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,co.jsx)("group",{ref:a,children:(0,co.jsx)("group",{ref:s,children:(0,co.jsx)("group",{position:H,children:r})})})]})}),o_=FL;var Zh=require("react");var jL="ri:license-grant:v1",HL={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},a_=new Map;function l_(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function s_(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return l_(t.padEnd(Math.ceil(t.length/4)*4,"="))}function GL(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 Kh(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 Sv(e,t){return`${jL}:${t}:${e}`}function WL(e,t){let n=a_.get(e);if(n)return n;let r=crypto.subtle.importKey("spki",l_(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return a_.set(e,r),r}async function Mv(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[r,i,o,a,...s]=e.split("."),l=HL[i];if(r!=="ri1"||!l||!o||!a||s.length>0)return null;let d=JSON.parse(new TextDecoder().decode(s_(o)));if(!GL(d)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await WL(i,l),s_(a),new TextEncoder().encode(`${r}.${i}.${o}`)))return null;let m=Math.floor(Date.now()/1e3),c=d.expiresAt-d.issuedAt;return d.licenseKeyHash!==t||d.domain!==n||d.expiresAt<=m||d.issuedAt>m+300||c<=0||c>43200?null:{environment:d.environment,tier:d.tier,expiresAt:d.expiresAt}}catch{return null}}async function c_(e,t,n){try{return await Mv(e,await Kh(t),n)}catch{return null}}async function d_(e,t,n){try{let r=await Kh(t);return await Mv(e,r,n)?(localStorage.setItem(Sv(r,n),e),!0):!1}catch{return!1}}async function u_(e,t){try{let n=await Kh(e),r=Sv(n,t),i=localStorage.getItem(r);if(!i)return null;let o=await Mv(i,n,t);return o||localStorage.removeItem(r),o}catch{return null}}async function _v(e,t){try{let n=await Kh(e);localStorage.removeItem(Sv(n,t))}catch{}}var XL=["localhost","127.0.0.1","0.0.0.0"],$L=e=>XL.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),h_="https://react-immersive.liveroom.dev/api/validate-license",f_=()=>typeof window<"u",qL=300*1e3,YL=5e3,KL=400,Tv=new Map,Cv=new Map,bs=class extends Error{},g_=async(e,t,n)=>{let r=await u_(e,t);return r?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:r.environment,tier:r.tier,isLocalDomain:n}):null},p_=async(e,t,n)=>{let r=await g_(e,t,n);return r||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:n})},ZL=e=>e instanceof bs||e instanceof TypeError,JL=()=>new Promise(e=>setTimeout(e,KL)),QL=e=>e==="development"||e==="production",eD=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&&!QL(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},tD=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},b_=(e,t,n)=>`${n}::${e}::${t}`,v_=e=>{let t=Tv.get(e);return t?Date.now()-t.timestamp>qL?(Tv.delete(e),null):t.result:null},nD=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),rD=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function iD(e,t,n,r){let i=b_(e,t,r),o=v_(i);if(o)return o;let a=Cv.get(i);if(a)return a;let s=(async()=>{for(let l=0;l<2;l+=1)try{return await oD(e,t,n,i,r)}catch(d){if(!ZL(d))throw d;if(l===0){let u=await g_(e,t,n);if(u)return u;await JL();continue}return p_(e,t,n)}return p_(e,t,n)})().finally(()=>{Cv.delete(i)});return Cv.set(i,s),s}async function oD(e,t,n,r,i){let o=new AbortController,a=setTimeout(()=>o.abort(),YL),s;try{s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:o.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(u){throw o.signal.aborted?new bs("License validation timed out"):u}finally{clearTimeout(a)}let l;try{l=await s.json()}catch{throw new bs(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new bs(`License server error (${s.status})`);let u=tD(l)??`License validation failed${s.status?` (${s.status})`:""}`;return await _v(e,t),rD(u,n)}if(!eD(l))throw new bs("License server returned an unexpected payload");let d=nD(l,n);if(d.status==="valid"&&i!==h_){let u=l.offlineGrant?await c_(l.offlineGrant,e,t):null;if(!u)throw new bs("License validation endpoint did not return a verifiable signed grant");d={...d,environment:u.environment,tier:u.tier}}return d.status==="valid"?(Tv.set(r,{result:d,timestamp:Date.now()}),l.offlineGrant&&(await d_(l.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await _v(e,t),d}var m_=(e,t)=>{let n=e.trim();return!f_()||!n?null:v_(b_(n,window.location.hostname.toLowerCase(),t))},Jh=(e,t=h_)=>{let[n,r]=(0,Zh.useState)(()=>m_(e,t)??{status:"checking",isLocalDomain:!1});return(0,Zh.useEffect)(()=>{if(!f_())return;let i=!1,o=m=>{i||r(m)},a=e.trim(),s=window.location.hostname.toLowerCase(),l=$L(s),d=m_(e,t);return d?(o(d),()=>{i=!0}):(o({status:"checking",isLocalDomain:l}),a?((async()=>{try{o(await iD(a,s,l,t))}catch(m){let c=m instanceof TypeError?"Could not reach license server":m instanceof Error?m.message:"License validation failed";o({status:"invalid",reason:c,isLocalDomain:l})}})(),()=>{i=!0}):(o({status:"invalid",reason:"No license key provided",isLocalDomain:l}),()=>{i=!0}))},[e,t]),n};var On=require("react");var cr=require("react/jsx-runtime"),aD={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},sD={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"},Qh=({direction:e})=>{let t=aD[e],n=sD[e];return(0,cr.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,cr.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,cr.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Sa=16,lD={"bottom-left":{bottom:Sa,left:Sa,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Sa,right:Sa,top:"auto",left:"auto",transform:"none"},"top-left":{top:Sa,left:Sa,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Sa,right:Sa,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:Sa,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},cD=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:r=.001,rotateSensitivity:i=.01,position:o="center-bottom"})=>{let a=Fe(),s=(0,On.useRef)(null),[l,d]=(0,On.useState)({x:0,y:0}),u=(0,On.useRef)(!1),m=(0,On.useRef)({x:0,y:0}),c=(0,On.useRef)(void 0),p=(0,On.useRef)(void 0),f=(0,On.useRef)(null),v=(0,On.useRef)(0),b=()=>e.current,g=(U,H,B)=>{let X=Math.hypot(U,H);if(X>B){let D=B/X;return{x:U*D,y:H*D}}return{x:U,y:H}},y=U=>{let B=Math.abs(U);return B<.12?0:Math.sign(U)*((B-.12)/(1-.12))},x=(0,On.useCallback)(()=>{let U=()=>{let{x:H,y:B}=m.current,X=y(H),D=y(B);if(t&&(X!==0||D!==0)){let L=b();L&&L.rotate(-X*i,-D*i,!0)}c.current=requestAnimationFrame(U)};c.current=requestAnimationFrame(U)},[t,i]),M=(0,On.useCallback)(()=>{c.current&&cancelAnimationFrame(c.current)},[]),P=(0,On.useCallback)((U,H)=>{if(!s.current||!u.current)return;let B=s.current.getBoundingClientRect(),X=B.left+B.width/2,D=B.top+B.height/2,L=B.width/2-18,re=U-X,Me=H-D,Pe=g(re,Me,L);d(Pe),m.current={x:Pe.x/L,y:Pe.y/L}},[]),S=(0,On.useCallback)(U=>{if(!t)return;U.preventDefault(),U.stopPropagation(),u.current=!0,x();let H="touches"in U?U.touches[0]:U;P(H.clientX,H.clientY)},[t,x,P]),T=(0,On.useCallback)(U=>{if(!u.current)return;U.preventDefault();let H="touches"in U?U.touches[0]:U;P(H.clientX,H.clientY)},[P]),h=(0,On.useCallback)(()=>{u.current=!1,d({x:0,y:0}),m.current={x:0,y:0},M()},[M]),w=r*10,C=(0,On.useCallback)(U=>{t&&b()?.forward(U*w,!0)},[t,w]),_=(0,On.useCallback)(U=>{t&&b()?.truck(U*w,0,!0)},[t,w]),k=(0,On.useCallback)((U,H,B)=>{if(!t)return;p.current&&cancelAnimationFrame(p.current),f.current={control:U,amount:H,action:B},v.current=0,B(H);let X=D=>{if(!f.current)return;if(v.current===0){v.current=D,p.current=requestAnimationFrame(X);return}if(D-v.current>200){let{amount:re,action:Me}=f.current;Me(re),v.current=D}p.current=requestAnimationFrame(X)};p.current=requestAnimationFrame(X)},[t]),R=(0,On.useCallback)(U=>{f.current?.control===U&&(p.current&&(cancelAnimationFrame(p.current),p.current=void 0),f.current=null,v.current=0)},[]);return(0,On.useEffect)(()=>(window.addEventListener("mousemove",T),window.addEventListener("mouseup",h),window.addEventListener("touchmove",T,{passive:!1}),window.addEventListener("touchend",h),window.addEventListener("touchcancel",h),()=>{window.removeEventListener("mousemove",T),window.removeEventListener("mouseup",h),window.removeEventListener("touchmove",T),window.removeEventListener("touchend",h),window.removeEventListener("touchcancel",h),M(),p.current&&cancelAnimationFrame(p.current)}),[T,h,M]),t?(0,cr.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...lD[o]},children:(0,cr.jsxs)("div",{className:"mc__dpad",children:[(0,cr.jsx)("button",{"aria-label":a("moveForward"),className:"mc__arrow mc__arrow--up",onMouseDown:()=>k("up",1,C),onMouseUp:()=>R("up"),onMouseLeave:()=>R("up"),onTouchStart:U=>{U.preventDefault(),k("up",1,C)},onTouchEnd:()=>R("up"),onTouchCancel:()=>R("up"),children:(0,cr.jsx)(Qh,{direction:"up"})}),(0,cr.jsxs)("div",{className:"mc__middle-row",children:[(0,cr.jsx)("button",{"aria-label":a("moveLeft"),className:"mc__arrow mc__arrow--left",onMouseDown:()=>k("left",-1,_),onMouseUp:()=>R("left"),onMouseLeave:()=>R("left"),onTouchStart:U=>{U.preventDefault(),k("left",-1,_)},onTouchEnd:()=>R("left"),onTouchCancel:()=>R("left"),children:(0,cr.jsx)(Qh,{direction:"left"})}),(0,cr.jsx)("div",{ref:s,className:"mc__joystick",onMouseDown:S,onTouchStart:S,children:(0,cr.jsx)("div",{className:"mc__knob",style:{transform:`translate(${l.x}px, ${l.y}px)`}})}),(0,cr.jsx)("button",{"aria-label":a("moveRight"),className:"mc__arrow mc__arrow--right",onMouseDown:()=>k("right",1,_),onMouseUp:()=>R("right"),onMouseLeave:()=>R("right"),onTouchStart:U=>{U.preventDefault(),k("right",1,_)},onTouchEnd:()=>R("right"),onTouchCancel:()=>R("right"),children:(0,cr.jsx)(Qh,{direction:"right"})})]}),(0,cr.jsx)("button",{"aria-label":a("moveBackward"),className:"mc__arrow mc__arrow--down",onMouseDown:()=>k("down",-1,C),onMouseUp:()=>R("down"),onMouseLeave:()=>R("down"),onTouchStart:U=>{U.preventDefault(),k("down",-1,C)},onTouchEnd:()=>R("down"),onTouchCancel:()=>R("down"),children:(0,cr.jsx)(Qh,{direction:"down"})})]})}):null},y_=cD;var Mn=require("react"),Av=require("three");var Pv=new WeakSet;function Zc(e){Pv.add(e)}function x_(e){let t=Pv.has(e);return t&&Pv.delete(e),t}var zi=require("three");function w_(e,t){let n=Kc(e);if(!(e.camera instanceof zi.PerspectiveCamera)||!t)return n;let r=t instanceof zi.Box3?t:new zi.Box3().setFromObject(t);return r.isEmpty()||(n.framing={aspect:e.camera.aspect,min:r.min.toArray(),max:r.max.toArray()}),n}function ef(e,t){let n=t.camera,r=e.framing;if(!(n instanceof zi.PerspectiveCamera)||!r||!(n.aspect>0)||Math.abs(n.aspect-r.aspect)<1e-6)return[...e.position];let i=new zi.Vector3(...e.position),o=new zi.Vector3(...e.target),a=i.clone().sub(o).normalize(),s=new zi.Matrix4().lookAt(i,o,n.up).invert(),l=Math.tan((e.fov??n.fov)*Math.PI/360)/(e.zoom??n.zoom);if(!(l>0)||!Number.isFinite(l))return[...e.position];let d=0;for(let u of[r.min[0],r.max[0]])for(let m of[r.min[1],r.max[1]])for(let c of[r.min[2],r.max[2]]){let p=new zi.Vector3(u,m,c).sub(i).applyMatrix4(s);d=Math.max(d,Math.abs(p.x)/(l*n.aspect)+p.z,Math.abs(p.y)/l+p.z)}return i.addScaledVector(a,d*1.02).toArray()}function S_(e){return[e.x,e.y,e.z]}function Ma(e,t){let n=new Av.Vector3,r=new Av.Vector3;return t.getPosition(n),t.getTarget(r),{position:S_(n),target:S_(r),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 dD(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 Ju(e,t,n=.6){let r=e.smoothTime;e.smoothTime=Lc(e,n);try{return await t()}finally{e.smoothTime=r}}function M_(e={}){let t=(0,Mn.useRef)(e);t.current=e;let n=(0,Mn.useRef)(null),[r,i]=(0,Mn.useState)(null),[o,a]=(0,Mn.useState)(()=>({...e.presets})),s=(0,Mn.useRef)(o);s.current=o;let l=(0,Mn.useCallback)(w=>{i(C=>dD(C,w)?C:w)},[]),d=(0,Mn.useCallback)(w=>{l(w)},[l]),u=(0,Mn.useRef)(null),m=(0,Mn.useRef)(null),c=(0,Mn.useRef)(null),p=(0,Mn.useCallback)(w=>{n.current=w;let C=Ma(w.raw.controls.camera,w.raw.controls);l(C),w.raw.scene!==m.current&&(m.current=w.raw.scene,u.current=null,c.current=null),w.homeCameraState&&!u.current&&(u.current=w.homeCameraState);let{initialPosition:_,initialTarget:k,initialTransition:R=!1}=t.current;if((_||k)&&w.raw.scene&&(_||w.homeCameraState)&&c.current!==w.raw.controls){c.current=w.raw.controls,w.homeCameraState||Zc(w.raw.controls);let U=_??C.position,H=k??C.target;w.raw.controls.setLookAt(U[0],U[1],U[2],H[0],H[1],H[2],R).then(()=>{if(n.current?.raw.controls!==w.raw.controls)return;let B=Ma(w.raw.controls.camera,w.raw.controls);u.current={position:B.position,target:B.target},l(B)}).catch(()=>{})}},[l]),f=(0,Mn.useCallback)(async()=>{let w=n.current,C=w?.raw.controls;if(!C)return!1;try{let _=u.current;if(_){Al(C,_);let k=ef(_,C);await Ju(C,()=>C.setLookAt(k[0],k[1],k[2],_.target[0],_.target[1],_.target[2],!0))}else w?.raw.scene?await Ju(C,()=>C.fitToBox(w.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Ju(C,()=>C.reset(!0));return!0}catch{return!1}},[]),v=(0,Mn.useCallback)(async()=>{let w=n.current;if(!w?.raw.controls||!w.raw.scene)return!1;try{return await Ju(w.raw.controls,()=>w.raw.controls.fitToBox(w.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),b=(0,Mn.useCallback)(async w=>{let C=n.current;if(!C?.raw.controls)return!1;let _=ts(C.objectBindings,w);if(!_)return!1;let k=C.raw.nodes[_];if(!k)return!1;try{return await Ju(C.raw.controls,()=>C.raw.controls.fitToBox(k,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),g=(0,Mn.useCallback)(async(w,C=!0)=>{let _=n.current?.raw.controls;if(!_)return!1;try{return n.current?.homeCameraState||Zc(_),await _.setTarget(w[0],w[1],w[2],C),l(Ma(_.camera,_)),!0}catch{return!1}},[l]),y=(0,Mn.useCallback)(async(w,C=!0)=>{let _=n.current?.raw.controls;if(!_)return!1;try{n.current?.homeCameraState||Zc(_);let k=[_.setLookAt(w.position[0],w.position[1],w.position[2],w.target[0],w.target[1],w.target[2],C)];w.azimuthAngle!=null&&w.polarAngle!=null&&k.push(_.rotateTo(w.azimuthAngle,w.polarAngle,C)),await Promise.all(k);let R=_.camera,U=!1;return w.fov!=null&&"fov"in R&&typeof R.fov=="number"&&(R.fov=w.fov,U=!0),w.zoom!=null&&"zoom"in R&&typeof R.zoom=="number"&&(R.zoom=w.zoom,U=!0),U&&"updateProjectionMatrix"in R&&R.updateProjectionMatrix(),l(Ma(R,_)),!0}catch{return!1}},[l]),x=(0,Mn.useCallback)((w,C=!0)=>y(w,C),[y]),M=(0,Mn.useCallback)((w,C,_=!0)=>y({position:w,target:C},_),[y]),P=(0,Mn.useCallback)(async(w,C,_=!0)=>{let k=n.current?.raw.controls;if(!k)return!1;try{return n.current?.homeCameraState||Zc(k),await k.rotateTo(w*Math.PI/180,C*Math.PI/180,_),l(Ma(k.camera,k)),!0}catch{return!1}},[l]),S=(0,Mn.useCallback)(async(w,C=!0)=>{let _=n.current?.raw.controls;if(!_)return!1;try{return n.current?.homeCameraState||Zc(_),await _.dollyTo(w,C),l(Ma(_.camera,_)),!0}catch{return!1}},[l]),T=(0,Mn.useCallback)(w=>{let C=n.current?.raw.controls,_=w.trim();if(!C||!_)return null;let k=Ma(C.camera,C);return s.current={...s.current,[_]:k},a(R=>({...R,[_]:k})),l(k),k},[l]),h=(0,Mn.useCallback)((w,C=!0)=>{let _=s.current[w];return _?y(_,C):Promise.resolve(!1)},[y]);return{cameraState:r,cameraPresets:o,resetView:f,focusObject:b,fitScene:v,setCameraTarget:g,setCameraState:x,lookAt:M,orbitTo:P,dollyTo:S,savePreset:T,goToPreset:h,handleCameraChange:d,handleViewerReady:p}}var Qu=require("three");function tf(e){return[e.x,e.y,e.z]}function __(e){let t=new Qu.Box3().setFromObject(e),n=0;return e.traverse(r=>{r.isMesh&&(n+=1)}),{bounds:{min:tf(t.min),max:tf(t.max),center:tf(t.getCenter(new Qu.Vector3)),size:tf(t.getSize(new Qu.Vector3))},objectCount:n,materialVariants:kb(e),materialVariantGroups:Oc(e)}}function uD(e){return typeof e=="object"&&!Array.isArray(e)}function pD(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:(e.type??"other")===t.type}function Ll(e,t){if(uD(t))return Object.entries(e).filter(([,i])=>pD(i,t)).map(([i])=>i);let r=(typeof t=="string"?[t]:t).map(i=>ts(e,i)).filter(i=>i!==null);return[...new Set(r)]}var mD="#ff3b30",hD=Object.freeze({}),C_=e=>e;function fD(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function gD(e,t){let n=e.metadata;for(let r of t.split(".")){if(!fD(n))return;n=n[r]}return n}function kv(e,t){if("metric"in t){let n=e.metrics?.[t.metric];return!(typeof n!="number"||!Number.isFinite(n)||t.above!==void 0&&!(n>t.above)||t.below!==void 0&&!(n<t.below))}if("status"in t){let n=e.status??"normal";return Array.isArray(t.status)?t.status.includes(n):t.status===n}return gD(e,t.metadata)===t.equals}function bD(e){let t=e.trim().replace(/^#/,""),n=t.length===3?t.split("").map(r=>r+r).join(""):t;return/^[0-9a-f]{6}$/i.test(n)?[0,2,4].map(r=>parseInt(n.slice(r,r+2),16)):null}var Ev=e=>`#${e.map(t=>Math.round(t).toString(16).padStart(2,"0")).join("")}`;function vD(e,t){let n=e.map(([l,d])=>({at:l,rgb:bD(d)})).filter(l=>Number.isFinite(l.at)&&l.rgb!==null).sort((l,d)=>l.at-d.at);if(n.length===0||!Number.isFinite(t))return null;if(t<=n[0].at)return Ev(n[0].rgb);let r=n[n.length-1];if(t>=r.at)return Ev(r.rgb);let i=n.findIndex(l=>l.at>=t),o=n[i-1],a=n[i],s=a.at===o.at?1:(t-o.at)/(a.at-o.at);return Ev(o.rgb.map((l,d)=>l+(a.rgb[d]-l)*s))}function T_(e,t){if(!t?.length)return{bindings:e,pulses:hD,sourceOf:C_};let n=new Map,r={};for(let a of t){let s=a.target?Ll(e,a.target):Object.keys(e),l=a.when?Array.isArray(a.when)?a.when:[a.when]:[];for(let d of s){let u=e[d];if(!l.every(c=>kv(u,c)))continue;let m={...a.material};if(a.colorScale){let c=u.metrics?.[a.colorScale.metric],p=typeof c=="number"?vD(a.colorScale.stops,c):null;p&&(m={...m,[a.colorScale.channel??"baseColor"]:p})}if(a.pulse){let c=a.pulse===!0?{}:a.pulse;r[d]={color:c.color??mD,speed:c.speed!==void 0&&c.speed>0?c.speed:1};let p=m.emissiveIntensity??n.get(d)?.emissiveIntensity??u.style?.material?.emissiveIntensity;p!==void 0&&p>0||(m.emissiveIntensity=1)}Object.keys(m).length>0&&n.set(d,{...n.get(d),...m})}}if(n.size===0)return{bindings:e,pulses:r,sourceOf:C_};let i={...e},o=new WeakMap;for(let[a,s]of n){let l=e[a],d={...l,style:{...l.style,material:{...l.style?.material,...s}}};i[a]=d,o.set(d,l)}return{bindings:i,pulses:r,sourceOf:a=>o.get(a)??a}}var yD=.12,P_=new Set;function Rv(e,t){return t?new Set(Ll(e,t.target)):P_}function A_(e,t){let n=Rv(e.bindings,t);if(!t||n.size===0)return{...e,setAside:P_};let r=Math.min(Math.max(t.ghostOpacity??yD,0),1),i={...e.bindings},o=new WeakMap,a=new Set;for(let[s,l]of Object.entries(e.bindings)){if(n.has(s))continue;a.add(s);let d=t.mode==="hide"?{...l,visible:!1}:{...l,style:{...l.style,material:{...l.style?.material,opacity:Math.min(l.style?.material?.opacity??1,r)}}};i[s]=d,o.set(d,e.sourceOf(l))}return{bindings:i,pulses:e.pulses,sourceOf:s=>o.get(s)??e.sourceOf(s),setAside:a}}var R_=require("react");var k_=require("react"),Lv=require("@react-three/fiber"),E_=new WeakMap;function nf(e){let t=(0,Lv.useThree)(r=>r.get),n=(0,Lv.useThree)(r=>r.setEvents);(0,k_.useEffect)(()=>{if(!e)return;let r=E_.get(t);if(!r){let o=new Set;r=o,E_.set(t,o);let a=t().events.filter;n({filter:(s,l)=>{let d=a?a(s,l):s;return o.size===0?d:d.filter(u=>{for(let m of o)if(!m(u))return!1;return!0})}})}r.add(e);let i=r;return()=>{i.delete(e)}},[e,t,n])}function Dv({setAside:e,nodeRefs:t}){let n=(0,R_.useMemo)(()=>{if(e.size===0)return null;let r={refs:null,bound:new Map};return i=>{let o=t.current??{};if(r.refs!==o){let s=new Map;for(let[l,d]of Object.entries(o))s.set(d,e.has(l));r={refs:o,bound:s}}let{bound:a}=r;for(let s=i.object;s;s=s.parent){let l=a.get(s);if(l!==void 0)return!l}return!0}},[e,t]);return nf(n),null}var Wr=require("react"),I_=require("@react-three/drei"),Jc=require("@react-three/fiber"),Dl=require("three");var Ov=require("three"),rf={x:0,y:1,z:2},L_=e=>Math.min(Math.max(e,0),1);function Nv(e,t){let n=rf[t.axis],r=e.min[n],i=e.max[n];if(!Number.isFinite(r)||!Number.isFinite(i)||i<r)return null;let o=Number.isFinite(t.position)?t.position:.5;return r+(i-r)*L_(o)}function D_(e,t,n){let r=Nv(t,n);if(r===null)return!1;let i=new Ov.Vector3;return i.setComponent(rf[n.axis],n.flip?1:-1),e.normal.copy(i),e.constant=n.flip?-r:r,!0}function O_(e,t,n,r){let i=rf[r],o=new Ov.Vector3().setComponent(i,1),a=n.clone().addScaledVector(o,-n.dot(o));if(a.lengthSq()<1e-8)return null;a.normalize();let s=e.direction.dot(a);if(Math.abs(s)<1e-8)return null;let l=t.clone().sub(e.origin).dot(a)/s;return Number.isFinite(l)?e.origin.getComponent(i)+e.direction.getComponent(i)*l:null}function N_(e,t,n){let r=rf[t],i=e.max[r]-e.min[r];return i>0?L_((n-e.min[r])/i):null}var Ol=require("react/jsx-runtime"),xD={x:0,y:1,z:2},B_="#22d3ee";function Bv({section:e,box:t,modelRef:n,showHandle:r,onPositionChange:i,onDraggingChange:o}){let a=(0,Jc.useThree)(v=>v.gl),s=(0,Jc.useThree)(v=>v.raycaster),l=(0,Jc.useThree)(v=>v.invalidate),d=(0,Wr.useMemo)(()=>new Dl.Plane,[]),u=(0,Wr.useMemo)(()=>[d],[d]),m=e.enabled&&t!==null&&D_(d,t,e),c=(0,Wr.useRef)(new Map),p=()=>{for(let[v,b]of c.current)v.clippingPlanes=b.clippingPlanes,v.side=b.side,v.needsUpdate=!0;c.current.clear()};(0,Wr.useEffect)(()=>{if(m)return a.localClippingEnabled=!0,l(),()=>{p(),l()}},[m,a,l]),(0,Wr.useEffect)(()=>{m&&l()},[m,e.axis,e.position,e.flip,t,l]),(0,Jc.useFrame)(()=>{let v=n.current;if(!m||!v)return;let b=c.current;v.traverse(g=>{let y=g.material;if(y)for(let x of Array.isArray(y)?y:[y]){let M=b.get(x);if(x.clippingPlanes===u&&x.side===Dl.DoubleSide)continue;let P=x.side===Dl.DoubleSide&&M?M.side:x.side;b.set(x,{clippingPlanes:M?M.clippingPlanes:x.clippingPlanes,side:P}),x.clippingPlanes=u,x.clipShadows=!0,x.side=Dl.DoubleSide,x.needsUpdate=!0}})});let f=(0,Wr.useMemo)(()=>m?v=>!!v.object.userData.riSectionHandle||d.distanceToPoint(v.point)>=-1e-4:null,[m,d]);return nf(f),(0,Wr.useEffect)(()=>{if(!m)return;let v=s,b=v.firstHitOnly;return v.firstHitOnly=!1,()=>{v.firstHitOnly=b}},[m,s]),!m||!r||!t?null:(0,Ol.jsx)(wD,{section:e,box:t,onPositionChange:i,onDraggingChange:o})}function wD({section:e,box:t,onPositionChange:n,onDraggingChange:r}){let[i,o]=(0,Wr.useState)(!1),[a,s]=(0,Wr.useState)(!1),l=(0,Wr.useRef)(null),d=xD[e.axis],u=Nv(t,e)??0,m=[0,1,2].map(g=>(t.max[g]-t.min[g])*1.08||.01),c=[0,1,2].map(g=>(t.min[g]+t.max[g])/2);c[d]=u;let[p,f]=e.axis==="x"?[m[2],m[1]]:e.axis==="y"?[m[0],m[2]]:[m[0],m[1]],v=e.axis==="x"?[0,Math.PI/2,0]:e.axis==="y"?[-Math.PI/2,0,0]:[0,0,0],b=g=>{a&&(g.target?.releasePointerCapture?.(g.pointerId),l.current=null,s(!1),r(!1))};return(0,Ol.jsxs)("mesh",{ref:g=>{g&&(um(g),g.userData.riSectionHandle=!0)},position:c,rotation:v,renderOrder:2,onPointerOver:g=>{g.stopPropagation(),o(!0)},onPointerOut:()=>o(!1),onPointerDown:g=>{g.stopPropagation(),g.target?.setPointerCapture?.(g.pointerId),l.current={point:g.point.clone(),direction:g.ray.direction.clone(),coordinate:g.point.getComponent(d),cut:u},s(!0),r(!0)},onPointerMove:g=>{let y=l.current;if(!a||!y)return;g.stopPropagation();let x=O_(g.ray,y.point,y.direction,e.axis);if(x===null)return;let M=N_(t,e.axis,y.cut+(x-y.coordinate));M!==null&&n(M)},onPointerUp:b,onPointerCancel:b,onClick:g=>g.stopPropagation(),children:[(0,Ol.jsx)("planeGeometry",{args:[p,f]}),(0,Ol.jsx)("meshBasicMaterial",{color:B_,transparent:!0,opacity:a?.22:i?.16:.08,side:Dl.DoubleSide,depthWrite:!1,toneMapped:!1}),(0,Ol.jsx)(I_.Edges,{color:B_,renderOrder:3})]})}var z_=require("react-colorful"),vs=require("react/jsx-runtime"),Iv=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:r,inline:i=!1})=>{let o=Fe();return(0,vs.jsxs)("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:a=>a.stopPropagation(),children:[(0,vs.jsx)("p",{className:"ri-popoverLabel",children:o("color")}),(0,vs.jsx)(z_.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>r(s=>({...s,[e.objectId]:{...s[e.objectId],hex:a}}))}),(0,vs.jsxs)("div",{className:"ri-inlineRow",children:[(0,vs.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,vs.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:o("done")})]})]})};var Vt=require("react/jsx-runtime"),zv=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:r,canPlaceImage:i=!0,inline:o=!1,offset:a,rotationDegrees:s,onOffsetChange:l,onRotationChange:d,isPositioning:u=!1,onEndPositioning:m})=>{let c=Fe();return(0,Vt.jsxs)("div",{className:`ri-popover${o?" ri-popover--inline":""}`,style:o?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:p=>p.stopPropagation(),children:[(0,Vt.jsx)("div",{className:"ri-popoverHeader",children:(0,Vt.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:c("material")})}),(0,Vt.jsxs)("div",{className:"ri-materialBody",children:[t?(0,Vt.jsx)("div",{className:"ri-previewFrame",children:(0,Vt.jsx)("img",{src:t,alt:c("texturePreview"),className:"ri-previewImage"})}):(0,Vt.jsxs)("div",{className:"ri-emptyState",children:[(0,Vt.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,Vt.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,Vt.jsx)("span",{style:{fontSize:12},children:c("noTextureApplied")})]}),i?(0,Vt.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:c(t?"replaceImage":"uploadImage")}):(0,Vt.jsx)("p",{className:"ri-formatHint",children:c("noTextureCoordinates")}),t&&(0,Vt.jsx)("button",{onClick:()=>r(e.objectId),className:"ri-removeButton",children:c("removeTexture")}),i?(0,Vt.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}):null,t&&(l||d)&&(0,Vt.jsxs)("div",{className:"ri-texturePosition",children:[(0,Vt.jsx)("p",{className:"ri-texturePositionLabel",children:c("texturePosition")}),(0,Vt.jsxs)("div",{className:"ri-texturePositionGrid",children:[(0,Vt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,Vt.jsx)("span",{children:c("offsetX")}),(0,Vt.jsx)("input",{type:"number",step:.01,value:a?.[0]??0,onChange:p=>l?.(e.objectId,0,Number(p.target.value))})]}),(0,Vt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,Vt.jsx)("span",{children:c("offsetY")}),(0,Vt.jsx)("input",{type:"number",step:.01,value:a?.[1]??0,onChange:p=>l?.(e.objectId,1,Number(p.target.value))})]})]}),(0,Vt.jsxs)("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[(0,Vt.jsx)("span",{children:c("rotation")}),(0,Vt.jsxs)("div",{className:"ri-texturePositionSliderRow",children:[(0,Vt.jsx)("input",{type:"range",min:0,max:360,step:1,value:s??0,onChange:p=>d?.(e.objectId,Number(p.target.value))}),(0,Vt.jsx)("input",{type:"number",min:0,max:360,step:1,value:Math.round(s??0),onChange:p=>d?.(e.objectId,Number(p.target.value))})]})]}),u?(0,Vt.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:m,title:c("confirmTexturePosition"),children:c("donePositioning")}):(0,Vt.jsx)("p",{className:"ri-texturePositionHint",children:c("textureOffsetHint")})]})]})]})};var Vi=require("react");var $t=require("react/jsx-runtime");function V_({entries:e}){return(0,$t.jsx)($t.Fragment,{children:e.map(([t,n])=>{let r=n!==null&&typeof n=="object",i=r?Object.entries(n):[];return r&&i.length>0?(0,$t.jsxs)("div",{className:"left-panel__data-group",children:[(0,$t.jsx)("span",{className:"left-panel__data-key",children:t}),(0,$t.jsx)("div",{className:"left-panel__data-children",children:(0,$t.jsx)(V_,{entries:i})})]},t):(0,$t.jsxs)("div",{className:"left-panel__data-row",children:[(0,$t.jsx)("span",{className:"left-panel__data-key",children:t}),(0,$t.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:r?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function SD({content:e}){let t=e!=null,[n,r]=(0,Vi.useState)(t),[i,o]=(0,Vi.useState)(t),a=(0,Vi.useRef)(e);return t&&(a.current=e),(0,Vi.useEffect)(()=>{if(t){r(!0);return}if(n){o(!1);let s=setTimeout(()=>r(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,Vi.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>o(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,$t.jsx)("div",{className:`left-panel__action-extra${i?" left-panel__action-extra--open":""}`,children:(0,$t.jsx)("div",{className:"left-panel__action-extra-inner",children:e??a.current})}):null}function Vv({isOpen:e,selectedObject:t,currentAction:n,onClose:r,onAction:i,renderActionExtra:o,translateDefaultActions:a=!1}){let s=Fe(),[l,d]=(0,Vi.useState)(t);(0,Vi.useEffect)(()=>{t&&d(t)},[t]);let u=t??l,m=u?Object.entries(u).filter(([c])=>c!=="actions"&&c!=="decals"):[];return(0,$t.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:u&&(0,$t.jsxs)($t.Fragment,{children:[(0,$t.jsxs)("div",{className:"left-panel__header",children:[(0,$t.jsx)("p",{className:"left-panel__title",children:u.label}),(0,$t.jsx)("button",{onClick:r,className:"left-panel__close-btn","aria-label":s("closePanel"),children:"\u2715"})]}),m.length>0&&(0,$t.jsx)("div",{className:"left-panel__data",children:(0,$t.jsx)(V_,{entries:m})}),(0,$t.jsx)("hr",{className:"left-panel__divider"}),u.actions&&u.actions.length>0&&(0,$t.jsxs)($t.Fragment,{children:[(0,$t.jsx)("div",{className:"left-panel__actions-label",children:s("actions")}),(0,$t.jsx)("div",{className:"left-panel__actions-list",children:u.actions.map((c,p)=>{let f=n?.action.id===c.id&&(n.binding===u||n.binding?.id===u.id||n.binding?.modelObjectId===u.modelObjectId||n.objectId===u.id||n.objectId===u.modelObjectId),v=o?.(c.id);return(0,$t.jsxs)(Vi.Fragment,{children:[(0,$t.jsx)("button",{onClick:b=>i({objectId:u.modelObjectId||u.id||"",action:c,binding:u,screenX:b.clientX,screenY:b.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${c.id}`,f?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":c.id,"data-label":c.label,children:a?s.message(c.label):c.label}),(0,$t.jsx)(SD,{content:v})]},p)})})]})]})})}var ep=require("react"),of=require("lucide-react");var U_=require("react");var Sr=require("react/jsx-runtime");function F_({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:r,searchValue:i,onSearchChange:o,searchPlaceholder:a,children:s,isOpen:l,onToggle:d,openButtonIcon:u,closeButtonIcon:m,closeButtonAriaLabel:c}){let p=Fe(),[f,v]=(0,U_.useState)(!1),b=l!==void 0?l:f,g=y=>{l===void 0&&v(y),d?.(y)};return(0,Sr.jsxs)("div",{className:`ri-sidepanel-wrap ${b?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!b&&(0,Sr.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>g(!0),"aria-label":t,title:p("openPanel"),children:[u,e?(0,Sr.jsx)("span",{children:e}):null]}),(0,Sr.jsxs)("div",{className:`ri-sidepanel ${b?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!b,children:[(0,Sr.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,Sr.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,Sr.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,Sr.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>g(!1),"aria-label":c,title:p("close"),children:m??(0,Sr.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,Sr.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,Sr.jsx)("p",{className:"ri-sidepanel__title",children:r})]}),(0,Sr.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,Sr.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:a,value:i,onChange:y=>o(y.target.value)})}),(0,Sr.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var Ui=require("react/jsx-runtime");function Uv({objectBindings:e,onAction:t,onFocus:n,onHover:r,isOpen:i,onToggle:o,isolatedKeys:a=null,onIsolate:s}){let l=Fe(),[d,u]=(0,ep.useState)(null),[m,c]=(0,ep.useState)(""),p=(0,ep.useMemo)(()=>Object.entries(e).filter(([f,v])=>{let b=m.toLowerCase();return f.toLowerCase().includes(b)||(v.label??"").toLowerCase().includes(b)}),[e,m]);return(0,Ui.jsx)(F_,{openButtonLabel:"",openButtonAriaLabel:l("openSceneObjectsPanel"),openButtonIcon:(0,Ui.jsx)(of.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:l("sceneObjects"),title:l("visibleEntries",{count:p.length}),searchValue:m,onSearchChange:c,searchPlaceholder:l("searchNodesLabels"),isOpen:i,onToggle:o,closeButtonAriaLabel:l("closeSceneObjectsPanel"),children:p.map(([f,v])=>{let b=v.visible!==!1,g=d===f,y=a?.has(f)??!1;return(0,Ui.jsxs)("div",{onClick:()=>n(v),onMouseEnter:()=>{u(f),r?.(v)},onMouseLeave:()=>{u(null),r?.(null)},className:`ri-sidepanel__row${g?" ri-sidepanel__row--hovered":""}${a!==null&&!y?" ri-sidepanel__row--setAside":""}`,children:[(0,Ui.jsx)("button",{type:"button",className:`ri-sidepanel__label ri-sidepanel__labelButton${g?" ri-sidepanel__label--hovered":""}`,onFocus:()=>{u(f),r?.(v)},onBlur:()=>{u(null),r?.(null)},children:v.label??f}),s?(0,Ui.jsx)("button",{type:"button",onClick:M=>{M.stopPropagation(),s(v)},className:`ri-sidepanel__isolate-btn${y?" ri-sidepanel__isolate-btn--active":""}`,title:l(y?"showAll":"isolate"),"aria-label":l(y?"showAllObject":"isolateObject",{name:v.label??f}),"aria-pressed":y,children:(0,Ui.jsx)(of.Focus,{width:14,height:14,"aria-hidden":"true"})}):null,(0,Ui.jsx)("button",{type:"button",onClick:M=>{M.stopPropagation(),t?.({objectId:f,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:v})},className:"ri-sidepanel__vis-btn",title:l(b?"hide":"show"),"aria-label":l(b?"hideObject":"showObject",{name:v.label??f}),children:(0,Ui.jsx)("span",{className:`ri-sidepanel__checkbox${b?" ri-sidepanel__checkbox--checked":""}`,children:b&&(0,Ui.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,Ui.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},f)})})}var uo=require("react");function j_(e,t){let n=[];for(let[r,i]of Object.entries(e))(t.bindings[r]??i).visible!==!1&&(t.setAside.has(r)||n.push({key:r,binding:i,label:i.label||r}));return n}function H_(e,t,n){if(n===0)return null;switch(e){case"ArrowDown":case"ArrowRight":return Math.min(t+1,n-1);case"ArrowUp":case"ArrowLeft":return Math.max(t-1,0);case"Home":return 0;case"End":return n-1;default:return null}}function G_(e,t,n){let r=n.toLocaleLowerCase();if(!r)return null;let i=[...r].every(s=>s===r[0]),o=r.length>1&&!i?t:t+1,a=i?[r,r[0]]:[r];for(let s of a)for(let l=0;l<e.length;l++){let d=((o+l)%e.length+e.length)%e.length;if(e[d].label.toLocaleLowerCase().startsWith(s))return d}return null}var ys=require("react/jsx-runtime"),MD=600;function W_({objects:e,selectedKey:t,onHighlight:n,onSelect:r,onClearSelection:i}){let o=Fe(),a=(0,uo.useId)(),[s,l]=(0,uo.useState)(!1),[d,u]=(0,uo.useState)(null),m=(0,uo.useRef)({query:"",at:0}),c=d?e.findIndex(M=>M.key===d):-1,p=c>=0?e[c]:null;(0,uo.useEffect)(()=>{t&&e.some(M=>M.key===t)&&u(t)},[t,e]);let f=s?p?.binding??null:null,v=(0,uo.useRef)(n);v.current=n,(0,uo.useEffect)(()=>{if(s)return v.current(f),()=>v.current(null)},[s,f]);let b=M=>{M!==null&&e[M]&&u(e[M].key)},g=M=>{let P=p?c:-1,S=H_(M.key,Math.max(P,0),e.length);if(S!==null){M.preventDefault(),b(P<0&&M.key!=="End"?0:S);return}if(M.key==="Enter"||M.key===" "){if(!p)return;M.preventDefault(),r(p.binding);return}if(M.key==="Escape"){if(!t)return;M.preventDefault(),M.stopPropagation(),i();return}if(M.key.length===1&&M.key!==" "&&!M.ctrlKey&&!M.metaKey&&!M.altKey){let T=Date.now(),h=m.current;h.query=T-h.at>MD?M.key:h.query+M.key,h.at=T,M.preventDefault(),b(G_(e,P,h.query))}};if(e.length===0)return null;let y=`${a}-option`,x=`${a}-hint`;return(0,ys.jsxs)("div",{className:`ri-objectNavigator${s?" ri-objectNavigator--focused":""}`,children:[(0,ys.jsx)("div",{role:"listbox",tabIndex:0,className:"ri-objectNavigator__list","aria-label":o("objectNavigator"),"aria-describedby":x,"aria-activedescendant":p?y:void 0,onFocus:()=>{l(!0),p||u(e[0].key)},onBlur:()=>l(!1),onKeyDown:g,children:p?(0,ys.jsxs)("div",{id:y,role:"option","aria-selected":p.key===t,"aria-setsize":e.length,"aria-posinset":c+1,className:`ri-objectNavigator__option${p.key===t?" ri-objectNavigator__option--selected":""}`,children:[(0,ys.jsx)("span",{className:"ri-objectNavigator__name",children:p.label}),(0,ys.jsx)("span",{className:"ri-objectNavigator__position","aria-hidden":"true",children:o("objectNavigatorPosition",{position:c+1,count:e.length})})]}):null}),(0,ys.jsx)("div",{id:x,className:"ri-objectNavigator__hint",children:o("objectNavigatorHint")})]})}var X_=require("react"),$_="(prefers-reduced-motion: reduce)";function _D(e){if(typeof window>"u"||!window.matchMedia)return()=>{};let t=window.matchMedia($_);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}var CD=()=>typeof window<"u"&&!!window.matchMedia?.($_).matches;function Qc(e="user"){let t=(0,X_.useSyncExternalStore)(_D,CD,()=>!1);return e==="always"?!0:e==="never"?!1:t}var iT=require("lucide-react");var af=require("react"),Fv=(0,af.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Xr=()=>(0,af.useContext)(Fv);var xs=require("react/jsx-runtime");function sf({visible:e,message:t,tone:n="default",progress:r}){if(!e)return null;let i=typeof r=="number"&&Number.isFinite(r),o=i?Math.min(Math.max(r,0),100):0,a=Math.round(o);return(0,xs.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[i&&(0,xs.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,xs.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a,children:(0,xs.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${a}%`}})}),(0,xs.jsxs)("span",{className:"bb-loadingProgress__label",children:[a,"%"]})]}),n!=="success"&&(0,xs.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}function TD(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 jv(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 PD(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 q_(e,t=!0){return e==="light"||e.endsWith("light")?[{id:"toggle-light",label:"Toggle Light",type:"command"},{id:"change-light-color",label:"Change Light Color",type:"command"},{id:"set-brightness",label:"Set Brightness",type:"command"}]:[{id:"change-color",label:"Change Color",type:"command"},...t?[{id:"change-material",label:"Change Material",type:"command"}]:[],{id:"toggle-visibility",label:"Toggle Visibility",type:"command"}]}function Y_(e,t=!0){let n=PD(e);return{id:TD(e),modelObjectId:e,type:n,label:jv(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:q_(n,t),metrics:{},metadata:{}}}function tp(e,t){return Object.fromEntries(e.map(n=>[n,Y_(n,!t?.has(n))]))}function K_(e,t){let n=new Set,r={};for(let i of e){let o=Y_(i,!t?.has(i)),a=o.id||"object",s=a;for(let d=2;n.has(s);d++)s=`${a}-${d}`;n.add(s),o.id=s;let l=(o.actions??[]).filter(d=>ou.includes(d.id));o.actions=l.length>0?l:q_("other",!t?.has(i)),r[i]=o}return r}function ed(e){let t=new Set;for(let[n,r]of Object.entries(ci(e).nodesById))Tm(r)||t.add(n);return t}function lf(e){let{nodesById:t}=ci(e),n=[];for(let[r,i]of Object.entries(t)){let o=i;o.isMesh&&o.geometry&&i.name&&n.push(r)}return n.sort((r,i)=>r.localeCompare(i))}var Ze=require("react"),pf=require("@react-three/fiber"),mf=require("@react-three/drei"),Rt=require("three");var Z_="data:image/png;base64,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";var J_="data:image/png;base64,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";var Q_="data:image/png;base64,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";var mt=require("react/jsx-runtime"),Hv=-100,Gv=100,sC=.03,RD=.03,LD=.03,eC=.5,DD=Z_,OD=J_,ND=Q_,BD=Math.PI/4,tC=.4,td=64,nC=sC*3,Wv="#4d7dff",rC="#ffcc00",iC=.02,ID=new Rt.Vector3(0,1,0),cf=32,oC="#ff9d3d",df=4;function Xv(e){let t=new Float32Array((td+1)*3);for(let n=0;n<=td;n++){let r=n/td*Math.PI*2,i=Math.cos(r)*tC,o=Math.sin(r)*tC,a=0,s=0,l=0;e==="x"?(s=i,l=o):e==="y"?(a=i,l=o):(a=i,s=o),t[n*3]=a,t[n*3+1]=s,t[n*3+2]=l}return t}function zD(e){let t=Math.abs(e.y)<.99?new Rt.Vector3(0,1,0):new Rt.Vector3(1,0,0),n=new Rt.Vector3().crossVectors(e,t).normalize(),r=new Rt.Vector3().crossVectors(e,n).normalize();return[n,r]}function aC(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 nd=null,$v=new Set;function np(e){nd!==e&&(nd=e,$v.forEach(t=>t()))}function qv(e){return $v.add(e),()=>$v.delete(e)}function uf(){return nd}function lC({light:e,position:t,rotation:n=[0,0,0],color:r,intensity:i,visible:o,onPositionChange:a,onRotationChange:s,onDraggingChange:l}){let{activeTab:d,activeSubTab:u,setActiveTab:m,setActiveSubTab:c}=Xr(),{camera:p,gl:f,raycaster:v,invalidate:b}=(0,pf.useThree)(),g=(0,Ze.useRef)(null),y=(0,Ze.useRef)(null),x=(0,Ze.useRef)(null),M=(0,Ze.useRef)(null),P=(0,Ze.useRef)(null),S=(0,Ze.useRef)(null),T=(0,Ze.useRef)(null),h=(0,Ze.useRef)(null),w=(0,Ze.useRef)(null),C=(0,Ze.useRef)(null),_=(0,Ze.useRef)(null),k=(0,Ze.useMemo)(()=>new Rt.Matrix4,[]),R=(0,Ze.useMemo)(()=>new Rt.Quaternion,[]),U=(0,Ze.useMemo)(()=>new Rt.Vector3(1,1,1),[]),H=(0,Ze.useRef)([0,0,0]),B=(0,Ze.useRef)([0,0,0]),X=(0,Ze.useRef)(!1),D=(0,Ze.useRef)(null),L=(0,Ze.useRef)(null),re=(0,Ze.useRef)(null),Me=(0,Ze.useRef)(l);(0,Ze.useEffect)(()=>{Me.current=l},[l]);let Pe=(0,Ze.useMemo)(()=>new Rt.Vector3(t[0],t[1],t[2]),[t]),pe=(0,Ze.useMemo)(()=>new Rt.Euler(n[0],n[1],n[2]),[n]),Ve=(0,Ze.useMemo)(()=>new Float32Array(6),[]),Q=(0,Ze.useMemo)(()=>Xv("x"),[]),J=(0,Ze.useMemo)(()=>Xv("y"),[]),ye=(0,Ze.useMemo)(()=>Xv("z"),[]),Re=(0,Ze.useMemo)(()=>new Float32Array((cf+1)*3),[]),nt=(0,Ze.useMemo)(()=>new Float32Array(df*2*3),[]),le=e?.type==="point",_e=e?.type==="spot",it=le?OD:_e?ND:DD,Gt=le?RD:_e?LD:sC,be=(0,Ze.useMemo)(()=>new Rt.TextureLoader().load(it),[it]),Ce=(0,Ze.useSyncExternalStore)(qv,uf,uf),en=!!e&&Ce===e.id,Se=(0,Ze.useRef)(new Rt.Vector3),xe=(0,Ze.useRef)(new Rt.Euler);(0,Ze.useEffect)(()=>{X.current||(Se.current.copy(Pe),xe.current.copy(pe),b())},[Pe,pe,b]),(0,Ze.useEffect)(()=>{e&&nd===e.id&&!o&&np(null)},[e?.id,o]),(0,Ze.useEffect)(()=>()=>{e&&nd===e.id&&np(null),re.current!==null&&(cancelAnimationFrame(re.current),re.current=null)},[e?.id]);let $e=(0,Ze.useCallback)(()=>{if(X.current||!en)return;let we=Se.current,Be=new Rt.Quaternion().setFromEuler(xe.current);k.compose(we,Be,U)},[k,U,en]);(0,pf.useFrame)(()=>{if(g.current&&g.current.position.copy(Se.current),$e(),x.current){x.current.lookAt(p.position);let we=p,Be;we.isOrthographicCamera?Be=Gt/we.zoom:Be=p.position.distanceTo(Se.current)*Gt,x.current.scale.setScalar(Be)}if(T.current){let we=p,Be;we.isOrthographicCamera?Be=nC/we.zoom:Be=p.position.distanceTo(Se.current)*nC,T.current.scale.setScalar(Be)}if(P.current){let we=P.current.getAttribute("position"),Be=we.array;Be[0]=0,Be[1]=0,Be[2]=0,Be[3]=Se.current.x,Be[4]=Se.current.y,Be[5]=Se.current.z,we.needsUpdate=!0,P.current.computeBoundingSphere()}if(S.current){let we=Se.current,Be=we.length();S.current.visible=Be>eC,Be>1e-6&&(S.current.position.copy(we).multiplyScalar(.5),S.current.scale.set(1,Be,1),S.current.quaternion.setFromUnitVectors(ID,we.clone().normalize()))}if(M.current&&(M.current.visible=Se.current.length()>eC),_e&&h.current&&w.current&&C.current){let we=Se.current,Be=we.length();if(Be>1e-6){h.current.visible=!0;let Qe=we.clone().negate().normalize(),wt=Be,Dt=e?.angle??Math.PI/6,me=wt*Math.tan(Dt),Ae=we.clone().add(Qe.clone().multiplyScalar(wt)),[Ee,lt]=zD(Qe),nn=w.current.getAttribute("position"),Ot=nn.array;for(let ht=0;ht<=cf;ht++){let gt=ht/cf*Math.PI*2,Yt=Ae.x+(Ee.x*Math.cos(gt)+lt.x*Math.sin(gt))*me,Kr=Ae.y+(Ee.y*Math.cos(gt)+lt.y*Math.sin(gt))*me,Nt=Ae.z+(Ee.z*Math.cos(gt)+lt.z*Math.sin(gt))*me;Ot[ht*3]=Yt,Ot[ht*3+1]=Kr,Ot[ht*3+2]=Nt}nn.needsUpdate=!0,w.current.computeBoundingSphere();let at=C.current.getAttribute("position"),Ie=at.array;for(let ht=0;ht<df;ht++){let gt=ht/df*Math.PI*2,Yt=Ae.x+(Ee.x*Math.cos(gt)+lt.x*Math.sin(gt))*me,Kr=Ae.y+(Ee.y*Math.cos(gt)+lt.y*Math.sin(gt))*me,Nt=Ae.z+(Ee.z*Math.cos(gt)+lt.z*Math.sin(gt))*me,cn=ht*6;Ie[cn]=we.x,Ie[cn+1]=we.y,Ie[cn+2]=we.z,Ie[cn+3]=Yt,Ie[cn+4]=Kr,Ie[cn+5]=Nt}at.needsUpdate=!0,C.current.computeBoundingSphere()}else h.current.visible=!1}});let fn=(0,Ze.useCallback)(()=>{re.current!==null&&(cancelAnimationFrame(re.current),re.current=null),H.current=t,B.current=[n[0],n[1],n[2]],X.current=!0,D.current=null,L.current=null,Me.current?.(!0)},[t,n]),tn=(0,Ze.useCallback)((we,Be,Qe,wt)=>{let Dt=new Rt.Vector3(H.current[0],H.current[1],H.current[2]),me=new Rt.Vector3,Ae=new Rt.Quaternion,Ee=new Rt.Vector3;wt.decompose(me,Ae,Ee);let lt=Dt.clone().applyMatrix4(wt),nn=[Math.min(Math.max(lt.x,Hv),Gv),Math.min(Math.max(lt.y,Hv),Gv),Math.min(Math.max(lt.z,Hv),Gv)],Ot=new Rt.Quaternion().setFromEuler(new Rt.Euler(B.current[0],B.current[1],B.current[2],"XYZ")),at=new Rt.Quaternion().copy(Ae).multiply(Ot),Ie=new Rt.Euler().setFromQuaternion(at,"XYZ"),ht=[Ie.x,Ie.y,Ie.z];Se.current.set(nn[0],nn[1],nn[2]),xe.current.set(ht[0],ht[1],ht[2]),D.current=nn,L.current=ht;let gt=new Rt.Quaternion().setFromEuler(xe.current);k.compose(Se.current,gt,U),b()},[k,U,b]),Ln=(0,Ze.useCallback)(()=>{X.current=!1;let we=D.current,Be=L.current;D.current=null,L.current=null;let Qe=we&&!aC(we,H.current),wt=Be&&!aC(Be,B.current);Qe&&a&&a(we),wt&&s&&s(Be),Qe||wt?re.current=requestAnimationFrame(()=>{re.current=null,Me.current?.(!1)}):Me.current?.(!1)},[a,s]);return(0,Ze.useEffect)(()=>{let we=wt=>{let Dt=f.domElement.getBoundingClientRect();return new Rt.Vector2((wt.clientX-Dt.left)/Dt.width*2-1,-((wt.clientY-Dt.top)/Dt.height)*2+1)},Be=wt=>!!wt.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Qe=wt=>{if(Be(wt))return;let Dt=we(wt);v.setFromCamera(Dt,p);let me=[];if(y.current&&me.push(y.current),x.current&&me.push(x.current),me.length===0)return;if(v.intersectObjects(me,!1).length>0){let Ee=e?.id??null;nd!==Ee&&(np(Ee),m?.("scene"),c?.("Lighting")),wt.preventDefault(),wt.stopPropagation()}};return f.domElement.addEventListener("pointerdown",Qe),()=>{f.domElement.removeEventListener("pointerdown",Qe)}},[p,v,f,e,m,c]),d!=="scene"||u!=="Lighting"||!e||!o||e.type==="none"||e.type==="hemisphere"?null:(0,mt.jsxs)("group",{ref:we=>{we&&um(we)},children:[(0,mt.jsxs)("group",{ref:g,children:[(0,mt.jsx)("sprite",{ref:x,children:(0,mt.jsx)("spriteMaterial",{map:be,transparent:!0,opacity:.9,blending:Rt.AdditiveBlending,depthWrite:!1,rotation:_e?BD:0},it)}),(0,mt.jsx)(mf.Sphere,{ref:y,args:[.25,16,16],children:(0,mt.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),le&&(0,mt.jsxs)("group",{ref:T,children:[(0,mt.jsxs)("lineLoop",{renderOrder:999,children:[(0,mt.jsx)("bufferGeometry",{children:(0,mt.jsx)("bufferAttribute",{attach:"attributes-position",args:[Q,3],count:td+1})}),(0,mt.jsx)("lineBasicMaterial",{color:Wv,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,mt.jsxs)("lineLoop",{renderOrder:999,children:[(0,mt.jsx)("bufferGeometry",{children:(0,mt.jsx)("bufferAttribute",{attach:"attributes-position",args:[J,3],count:td+1})}),(0,mt.jsx)("lineBasicMaterial",{color:Wv,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,mt.jsxs)("lineLoop",{renderOrder:999,children:[(0,mt.jsx)("bufferGeometry",{children:(0,mt.jsx)("bufferAttribute",{attach:"attributes-position",args:[ye,3],count:td+1})}),(0,mt.jsx)("lineBasicMaterial",{color:Wv,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!le&&!_e&&(0,mt.jsxs)(mt.Fragment,{children:[(0,mt.jsxs)("mesh",{ref:S,children:[(0,mt.jsx)("cylinderGeometry",{args:[iC,iC,1,8,1,!0]}),(0,mt.jsx)("meshBasicMaterial",{color:rC,transparent:!0,opacity:.05,blending:Rt.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,mt.jsxs)("line",{ref:M,children:[(0,mt.jsx)("bufferGeometry",{ref:P,children:(0,mt.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ve,3],count:2})}),(0,mt.jsx)("lineBasicMaterial",{color:rC,transparent:!0,opacity:.7,blending:Rt.AdditiveBlending})]})]}),_e&&(0,mt.jsxs)("group",{ref:h,children:[(0,mt.jsxs)("lineLoop",{renderOrder:999,children:[(0,mt.jsx)("bufferGeometry",{ref:w,children:(0,mt.jsx)("bufferAttribute",{attach:"attributes-position",args:[Re,3],count:cf+1})}),(0,mt.jsx)("lineBasicMaterial",{color:oC,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,mt.jsxs)("lineSegments",{renderOrder:999,children:[(0,mt.jsx)("bufferGeometry",{ref:C,children:(0,mt.jsx)("bufferAttribute",{attach:"attributes-position",args:[nt,3],count:df*2})}),(0,mt.jsx)("lineBasicMaterial",{color:oC,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),en&&a&&(0,mt.jsx)(mf.PivotControls,{ref:_,matrix:k,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:fn,onDrag:tn,onDragEnd:Ln})]})}var ot=require("react"),hf=require("@react-three/drei"),rd=require("@react-three/fiber"),Kt=require("three"),cC=require("lucide-react");var ws=require("react/jsx-runtime"),VD=.01,Yv=.5;function Kv({node:e,space:t,moveEnabled:n,scaleEnabled:r,onTransformChange:i,onDraggingChange:o,transform:a}){let s=(0,rd.useThree)(le=>le.invalidate),l=(0,rd.useThree)(le=>le.camera),d=(0,rd.useThree)(le=>le.size),u=(0,ot.useMemo)(()=>ha(e),[e]),m=(0,ot.useMemo)(()=>new Kt.Vector3,[e]);a?.pivot?m.fromArray(a.pivot.point):m.copy(u);let c=(0,ot.useMemo)(()=>{let le=Su(e);if(!le)return[m.clone().add(new Kt.Vector3(Yv,Yv,Yv))];let _e=[];for(let it of[le.min.x,le.max.x])for(let Gt of[le.min.y,le.max.y])for(let be of[le.min.z,le.max.z])_e.push(new Kt.Vector3(it,Gt,be));return _e},[e,m]),p=(0,ot.useMemo)(()=>new Kt.Vector3,[]),f=(0,ot.useMemo)(()=>new Kt.Vector3,[]),v=(0,ot.useRef)(null),b=(0,ot.useMemo)(()=>new Kt.Matrix4,[]),g=(0,ot.useRef)(!1),y=(0,ot.useRef)(new Kt.Matrix4),x=(0,ot.useRef)(new Kt.Matrix4),M=(0,ot.useRef)(null),P=(0,ot.useRef)([]),S=(0,ot.useRef)(null),T=(0,ot.useRef)(o);T.current=o;let h=(0,ot.useMemo)(()=>new Kt.Vector3,[]),w=(0,ot.useMemo)(()=>new Kt.Quaternion,[]),C=(0,ot.useMemo)(()=>new Kt.Vector3,[]),_=(0,ot.useMemo)(()=>new Kt.Quaternion,[]),k=(0,ot.useMemo)(()=>new Kt.Vector3(1,1,1),[]),R=(0,ot.useMemo)(()=>new Kt.Quaternion,[]),U=(0,ot.useMemo)(()=>new Kt.Vector3,[]),H=(0,ot.useMemo)(()=>new Kt.Vector3,[]),B=(0,ot.useRef)([0,0,0]),X=(0,ot.useRef)(new Kt.Vector3(1,1,1)),D=(0,ot.useRef)({point:[0,0,0],offset:[0,0,0]}),L=(0,ot.useCallback)(()=>{g.current||(e.updateWorldMatrix(!0,!1),h.copy(m).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(w),_.copy(w),t==="world"&&_.identity(),b.compose(h,_,k))},[h,b,_,k,e,m,t,w]),re=(0,ot.useCallback)(()=>{e.updateWorldMatrix(!0,!1);let le=1/0;for(let _e of c){p.copy(_e).applyMatrix4(e.matrixWorld);let it=p.distanceToSquared(l.position);it<le&&(le=it,f.copy(p))}v.current?.position.copy(f)},[l,f,c,e,p]);(0,ot.useLayoutEffect)(()=>(L(),re(),()=>{let le=S.current!==null;le&&(cancelAnimationFrame(S.current),S.current=null),(g.current||le)&&(g.current=!1,T.current(!1));for(let _e of P.current)sa(_e);P.current=[]}),[L]),(0,rd.useFrame)(()=>{L(),re()});let Me=(0,ot.useCallback)(()=>{S.current!==null&&(cancelAnimationFrame(S.current),S.current=null),e.updateWorldMatrix(!0,!0),P.current=[];for(let le of rs(e))km(le)||(_c(le,le.matrixWorld),P.current.push(le));e.updateWorldMatrix(!0,!1),h.copy(m).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(w),e.getWorldScale(C),y.current.compose(h,w,C),x.current.copy(b),B.current=[e.rotation.x,e.rotation.y,e.rotation.z],X.current.copy(e.scale),D.current=a?.pivot??Ic(m.toArray(),B.current,e.scale.toArray(),e.rotation.order),M.current=null,g.current=!0,o(!0)},[h,b,e,o,m,w,C,a?.pivot]),Pe=(0,ot.useCallback)((le,_e)=>{let it=y.current.clone().premultiply(_e),Gt=x.current.clone().premultiply(_e);it.decompose(U,w,H);let be=U.clone();Gt.decompose(h,_,k),t==="world"&&_.identity(),b.compose(h,_,k),le.decompose(U,R,H);let Ce=new Kt.Euler().setFromQuaternion(R,e.rotation.order),[en,Se,xe]=B.current,$e=[en+Ce.x,Se+Ce.y,xe+Ce.z],fn=new Kt.Quaternion().setFromEuler(new Kt.Euler($e[0],$e[1],$e[2],e.rotation.order));e.scale.copy(X.current);let Ln=(e.parent?.matrixWorld||new Kt.Matrix4).clone().invert(),we=be.clone().applyMatrix4(Ln),Be=m.clone().multiply(e.scale).applyQuaternion(fn),Qe=we.clone().sub(Be);e.position.copy(Qe),e.rotation.set($e[0],$e[1],$e[2],e.rotation.order),e.updateMatrixWorld(!0),s();let wt=D.current,Dt=we.clone().sub(new Kt.Vector3(...wt.offset)),me=[Dt.x,Dt.y,Dt.z];M.current={position:me,rotation:$e,pivot:wt}},[h,R,b,_,k,s,e,m,U,H,t,w]),pe=(0,ot.useCallback)(()=>{g.current=!1;let le=M.current;if(M.current=null,le)i(le),S.current=requestAnimationFrame(()=>{S.current=null,o(!1)});else if(P.current.length>0){for(let _e of P.current)sa(_e);e.updateMatrixWorld(!0),s(),o(!1)}else o(!1);P.current=[]},[s,e,o,i]),Ve=(0,ot.useRef)(null),Q=(0,ot.useCallback)(le=>{let _e=le.clone().project(l);return{x:d.left+(_e.x*.5+.5)*d.width,y:d.top+(-_e.y*.5+.5)*d.height}},[l,d]),J=(0,ot.useCallback)((le,_e)=>{let it=Math.max(VD,Number.isFinite(le)?le:1);e.scale.copy(X.current).multiplyScalar(it);let be=(e.parent?.matrixWorld||new Kt.Matrix4).clone().invert(),Ce=_e.clone().applyMatrix4(be),en=new Kt.Quaternion().setFromEuler(e.rotation),Se=m.clone().multiply(e.scale).applyQuaternion(en),xe=Ce.clone().sub(Se);e.position.set(xe.x,xe.y,xe.z),e.updateMatrixWorld(!0),re(),s(),M.current={position:Ce.clone().sub(new Kt.Vector3(...D.current.offset)).toArray(),scale:e.scale.toArray(),pivot:D.current}},[s,e,m,re]),ye=(0,ot.useCallback)(le=>{if(!r)return;le.stopPropagation(),le.preventDefault(),le.currentTarget.setPointerCapture(le.pointerId),Me();let _e=h.clone(),it=Q(_e),Gt=Math.max(1,Math.hypot(le.clientX-it.x,le.clientY-it.y));Ve.current={pointerId:le.pointerId,centerScreen:it,startDistance:Gt,pivotWorld:_e}},[Me,h,Q,r]),Re=(0,ot.useCallback)(le=>{let _e=Ve.current;if(!_e||le.pointerId!==_e.pointerId)return;le.stopPropagation();let it=Math.hypot(le.clientX-_e.centerScreen.x,le.clientY-_e.centerScreen.y);J(it/_e.startDistance,_e.pivotWorld)},[J]),nt=(0,ot.useCallback)(le=>{let _e=Ve.current;!_e||le.pointerId!==_e.pointerId||(le.stopPropagation(),le.currentTarget.hasPointerCapture(le.pointerId)&&le.currentTarget.releasePointerCapture(le.pointerId),Ve.current=null,pe())},[pe]);return(0,ot.useEffect)(()=>{r||Ve.current&&(Ve.current=null,pe())},[r,pe]),(0,ws.jsxs)("group",{children:[(0,ws.jsx)(hf.PivotControls,{matrix:b,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableAxes:!n,disableSliders:!n,disableRotations:!n,disableScaling:!0,onDragStart:Me,onDrag:(le,_e,it,Gt)=>Pe(_e,Gt),onDragEnd:pe}),r&&(0,ws.jsx)("group",{ref:v,children:(0,ws.jsx)(hf.Html,{portal:void 0,zIndexRange:[10,0],style:{pointerEvents:"none",transition:"opacity 0.2s"},children:(0,ws.jsx)("div",{onPointerDown:ye,onPointerMove:Re,onPointerUp:nt,onPointerCancel:nt,title:"Drag to resize",style:{position:"absolute",transform:"translate(-50%, -50%)",width:24,height:24,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",background:"#113456",border:"2px solid #ffffff",boxShadow:"0 2px 6px rgba(0,0,0,0.5)",cursor:"nwse-resize",touchAction:"none",pointerEvents:"auto"},children:(0,ws.jsx)(cC.Maximize2,{size:13,color:"#ffffff"})})})})]})}var yt=require("react"),ff=require("@react-three/drei"),id=require("@react-three/fiber"),Mr=require("three"),uC=require("lucide-react");var rp=require("three");function Zv(e){let t=new Set(e.map(({node:r})=>r)),n=new Set;return e.filter(({node:r})=>{if(n.has(r))return!1;n.add(r);for(let i=r.parent;i;i=i.parent)if(t.has(i))return!1;return!0})}function dC(e){return Zv(e).map(({key:t,node:n,transform:r})=>{n.updateWorldMatrix(!0,!0);let i=r?.pivot?.point??ha(n).toArray(),o=r?.pivot??Ic(i,[n.rotation.x,n.rotation.y,n.rotation.z],n.scale.toArray(),n.rotation.order,r?.shear);return{key:t,node:n,pivot:o,startWorld:n.matrixWorld.clone(),startMatrix:n.matrix.clone(),startMatrixAutoUpdate:n.matrixAutoUpdate,startPosition:n.position.clone(),startQuaternion:n.quaternion.clone(),startScale:n.scale.clone(),pivotWorld:new rp.Vector3(...o.point).applyMatrix4(n.matrixWorld)}})}function Jv(e,t,n=1){return e.map(r=>{let{node:i,pivot:o}=r;i.parent?.updateWorldMatrix(!0,!1);let a=(i.parent?.matrixWorld.clone()??new rp.Matrix4).invert(),s=a.clone().multiply(t).multiply(r.startWorld),{rotation:l,scale:d,shear:u}=cS(s,r.startScale.clone().multiplyScalar(n),r.startQuaternion),m=r.pivotWorld.clone().applyMatrix4(t).applyMatrix4(a);return i.position.setFromMatrixPosition(s),i.quaternion.copy(l),i.scale.copy(d),xl(i,u),i.updateMatrixWorld(!0),{key:r.key,transform:{position:m.clone().sub(new rp.Vector3(...o.offset)).toArray(),rotation:[i.rotation.x,i.rotation.y,i.rotation.z],scale:d.toArray(),pivot:o,shear:u}}})}var Ss=require("react/jsx-runtime"),UD=.01;function Qv({entries:e,referenceNode:t,space:n,moveEnabled:r,scaleEnabled:i,onTransformChange:o,onDraggingChange:a}){let s=(0,id.useThree)(Q=>Q.invalidate),l=(0,id.useThree)(Q=>Q.camera),d=(0,id.useThree)(Q=>Q.size),u=(0,yt.useRef)(e);u.current=e;let m=(0,yt.useRef)([]);(e.length!==m.current.length||e.some((Q,J)=>Q.key!==m.current[J].key||Q.node!==m.current[J].node))&&(m.current=e);let c=m.current,p=(0,yt.useMemo)(()=>Zv(c).map(({node:Q})=>Q),[c]),f=t??e[e.length-1]?.node,v=(0,yt.useMemo)(()=>new Mr.Vector3,[]),b=(0,yt.useMemo)(()=>new Mr.Quaternion,[]),g=(0,yt.useMemo)(()=>new Mr.Matrix4,[]),y=(0,yt.useMemo)(()=>new Mr.Vector3(1,1,1),[]),x=(0,yt.useMemo)(()=>new Mr.Vector3,[]),M=(0,yt.useRef)(null),P=(0,yt.useMemo)(()=>p.flatMap(Q=>{let J=Su(Q);if(!J)return[{node:Q,point:ha(Q).addScalar(.5)}];let ye=[];for(let Re of[J.min.x,J.max.x])for(let nt of[J.min.y,J.max.y])for(let le of[J.min.z,J.max.z])ye.push({node:Q,point:new Mr.Vector3(Re,nt,le)});return ye}),[p]),S=(0,yt.useRef)(!1),T=(0,yt.useRef)(new Mr.Matrix4),h=(0,yt.useRef)([]),w=(0,yt.useRef)(null),C=(0,yt.useRef)([]),_=(0,yt.useRef)(null),k=(0,yt.useRef)(null),R=(0,yt.useRef)(a);R.current=a;let U=(0,yt.useRef)(o);U.current=o;let H=(0,yt.useCallback)(()=>{if(!S.current){v.set(0,0,0);for(let Q of p)Q.updateWorldMatrix(!0,!1),v.add(ha(Q).applyMatrix4(Q.matrixWorld));p.length&&v.divideScalar(p.length),b.identity(),n==="local"&&f&&(f.updateWorldMatrix(!0,!1),f.getWorldQuaternion(b)),g.compose(v,b,y)}},[v,g,b,p,f,n,y]),B=(0,yt.useCallback)(()=>{let Q=1/0,J=new Mr.Vector3;for(let{node:ye,point:Re}of P){ye.updateWorldMatrix(!0,!1),J.copy(Re).applyMatrix4(ye.matrixWorld);let nt=J.distanceToSquared(l.position);nt<Q&&(Q=nt,x.copy(J))}M.current?.position.copy(x)},[l,P,x]),X=(0,yt.useCallback)(()=>{let Q=k.current;k.current=null,Q?.target.hasPointerCapture(Q.pointerId)&&Q.target.releasePointerCapture(Q.pointerId)},[]);(0,yt.useLayoutEffect)(()=>{H(),B()},[H,B]),(0,yt.useLayoutEffect)(()=>()=>{X();let Q=_.current!==null;if(Q&&(cancelAnimationFrame(_.current),_.current=null),S.current)for(let J of h.current)J.node.matrixAutoUpdate=J.startMatrixAutoUpdate,J.node.matrix.copy(J.startMatrix),J.node.position.copy(J.startPosition),J.node.quaternion.copy(J.startQuaternion),J.node.scale.copy(J.startScale),J.node.updateMatrixWorld(!0);(S.current||Q)&&(S.current=!1,w.current=null,R.current(!1),s());for(let J of C.current)sa(J);C.current=[]},[c,s,X]),(0,id.useFrame)(()=>{H(),B()});let D=(0,yt.useCallback)(()=>{_.current!==null&&(cancelAnimationFrame(_.current),_.current=null),H(),h.current=dC(u.current),C.current=[];for(let{node:Q}of h.current)for(let J of rs(Q))km(J)||(_c(J,J.matrixWorld),C.current.push(J));T.current.copy(g),w.current=null,S.current=!0,R.current(!0)},[g,H]),L=(0,yt.useCallback)((Q,J)=>{if(!S.current)return;T.current.clone().premultiply(J).decompose(v,b,new Mr.Vector3),n==="world"&&b.identity(),g.compose(v,b,y),w.current=Jv(h.current,J),B(),s()},[v,g,b,s,n,B,y]),re=(0,yt.useCallback)(()=>{if(!S.current)return;S.current=!1,X();let Q=w.current;if(w.current=null,Q?.length)_.current=requestAnimationFrame(()=>{_.current=null,R.current(!1)}),U.current(Q);else{for(let J of C.current)sa(J);s(),R.current(!1)}C.current=[]},[s,X]);(0,yt.useEffect)(()=>{(!i&&k.current||!r&&S.current&&!k.current)&&re()},[i,r,re]);let Me=(0,yt.useCallback)(Q=>{let J=Q.clone().project(l);return{x:d.left+(J.x*.5+.5)*d.width,y:d.top+(-J.y*.5+.5)*d.height}},[l,d]),Pe=(0,yt.useCallback)(Q=>{if(!i)return;Q.stopPropagation(),Q.preventDefault(),Q.currentTarget.setPointerCapture(Q.pointerId),D();let J=Me(v);k.current={pointerId:Q.pointerId,target:Q.currentTarget,centerScreen:J,startDistance:Math.max(1,Math.hypot(Q.clientX-J.x,Q.clientY-J.y))}},[D,v,Me,i]),pe=(0,yt.useCallback)(Q=>{let J=k.current;if(!J||Q.pointerId!==J.pointerId)return;Q.stopPropagation();let ye=Math.hypot(Q.clientX-J.centerScreen.x,Q.clientY-J.centerScreen.y),Re=Math.max(UD,ye/J.startDistance),nt=new Mr.Vector3().setFromMatrixPosition(T.current),le=new Mr.Matrix4().makeTranslation(...nt.toArray()).multiply(new Mr.Matrix4().makeScale(Re,Re,Re)).multiply(new Mr.Matrix4().makeTranslation(...nt.clone().negate().toArray()));w.current=Jv(h.current,le,Re),B(),s()},[s,B]),Ve=(0,yt.useCallback)(Q=>{Q.pointerId===k.current?.pointerId&&(Q.stopPropagation(),re())},[re]);return(0,Ss.jsxs)("group",{children:[(0,Ss.jsx)(ff.PivotControls,{matrix:g,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableAxes:!r,disableSliders:!r,disableRotations:!r,disableScaling:!0,onDragStart:D,onDrag:(Q,J,ye,Re)=>L(J,Re),onDragEnd:re}),i&&(0,Ss.jsx)("group",{ref:M,children:(0,Ss.jsx)(ff.Html,{children:(0,Ss.jsx)("div",{onPointerDown:Pe,onPointerMove:pe,onPointerUp:Ve,onPointerCancel:Ve,title:"Drag to resize",style:{position:"absolute",transform:"translate(-50%, -50%)",width:24,height:24,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",background:"#113456",border:"2px solid #ffffff",boxShadow:"0 1px 4px rgba(0,0,0,0.4)",cursor:"nwse-resize",touchAction:"none",pointerEvents:"auto"},children:(0,Ss.jsx)(uC.Maximize2,{size:13,color:"#ffffff"})})})})]})}var pC=require("three");function FD(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,r=n.getAttribute("skinIndex"),i=n.getAttribute("skinWeight"),o=n.getAttribute("position");if(!r||!i||!o)return null;let a=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],l=new pC.Vector3,d=s[0],u=1/0;for(let p of s){l.fromBufferAttribute(o,p);let f=l.distanceToSquared(a);f<u&&(u=f,d=p)}let m=r.getComponent(d,0),c=i.getComponent(d,0);for(let p=1;p<4;p++){let f=i.getComponent(d,p);f>c&&(c=f,m=r.getComponent(d,p))}return t.skeleton.bones[m]??null}function mC(e){let t=FD(e)??e.object,n=vu(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let r=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[r.x,r.y,r.z]}}function hC(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let r=di(t,e.anchorNodeName);return r?(r.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(r.matrixWorld),!0):!1}var _a=require("react"),bf=require("@react-three/fiber"),gf=require("three");function vf({annotation:e,enabled:t,controlsRef:n,offsetRef:r}){let i=(0,bf.useThree)(c=>c.scene),o=(0,_a.useRef)(null),a=(0,_a.useRef)(!1),s=(0,_a.useMemo)(()=>new gf.Vector3,[]),l=(0,_a.useMemo)(()=>new gf.Vector3,[]),d=(0,_a.useMemo)(()=>new gf.Vector3,[]),u=e?.anchorNodeName,m=e?.anchorLocalPosition;return(0,_a.useEffect)(()=>{o.current=null,a.current=!1},[u,e?.id]),(0,bf.useFrame)(()=>{let c=n.current,p=r.current;if(!t||!c||!p||!u||!m){a.current=!1;return}let f=o.current;if((!f||!f.parent)&&(f=di(i,u),o.current=f),!f){a.current=!1;return}f.updateWorldMatrix(!0,!1),s.set(m[0],m[1],m[2]).applyMatrix4(f.matrixWorld),!(a.current&&s.distanceToSquared(l)<1e-8)&&(l.copy(s),a.current=!0,d.copy(s).add(p),c.setLookAt(d.x,d.y,d.z,s.x,s.y,s.z,!0))}),null}var bt=require("react"),Nl=require("three");function fC({sceneAnnotations:e,controlledAnnotationCategories:t,onAnnotationCategoriesChange:n,showAnnotationFilters:r,initialCategories:i,controlledActiveAnnotation:o,onActiveAnnotationChange:a,onAnnotationsChange:s,controlsRef:l,sceneRef:d,annotationWorldPositionsRef:u,tourCameraOffsetRef:m,initialCameraStateRef:c,engagement:p,engagementRef:f}){let[v,b]=(0,bt.useState)(!1),[g,y]=(0,bt.useState)(()=>e??[]);(0,bt.useEffect)(()=>{if(g.length>0){let xe=g.reduce(($e,fn)=>Math.max($e,fn.id),0);T.current=xe}else T.current=0},[g]);let[x,M]=(0,bt.useState)(null),[P,S]=(0,bt.useState)({title:"",description:""}),T=(0,bt.useRef)(0),[h,w]=(0,bt.useState)(null),[C,_]=(0,bt.useState)(-1),[k,R]=(0,bt.useState)(!1),U=(0,bt.useRef)(null),[H,B]=(0,bt.useState)(()=>i),X=t===void 0?H:t,D=(0,bt.useMemo)(()=>qM(g,X),[g,X]),L=(0,bt.useMemo)(()=>[...new Set(g.map(yv))].sort(),[g]),re=r&&L.some(Boolean),Me=xe=>{t===void 0&&B(xe),n?.(xe)},Pe=(0,bt.useMemo)(()=>[...D].sort((xe,$e)=>xe.id-$e.id),[D]),pe=(0,bt.useMemo)(()=>JSON.stringify([X?.map(xe=>xe.trim()).sort()??null,Pe]),[X,Pe]),Ve=(0,bt.useMemo)(()=>C<0||C>=Pe.length?null:Pe[C],[C,Pe]),Q=(0,bt.useCallback)(xe=>{if(o!==void 0){a?.(xe);return}w(xe?{annotation:xe}:null)},[o,a]),J=(0,bt.useRef)(null),ye=(0,bt.useCallback)(xe=>{let $e=l.current,fn=d.current;if(!$e)return;let tn=new Nl.Vector3,Ln=u.current.get(xe.id);Ln?tn.copy(Ln):fn&&hC(xe,fn,tn)||tn.set(xe.worldPosition[0],xe.worldPosition[1],xe.worldPosition[2]),m.current=null;let we=$e.smoothTime;$e.smoothTime=Lc($e,.6);let Be=xe.worldNormal;if(Yc(xe.cameraView))Ku($e,xe.cameraView);else{if(fn){let Qe=new Nl.Box3().setFromObject(fn),wt=new Nl.Vector3;Qe.getCenter(wt);let Dt=new Nl.Vector3;Qe.getSize(Dt);let me=Dt.length()*.2,Ae;Be?Ae=new Nl.Vector3(Be[0],Be[1],Be[2]):Ae=tn.clone().sub(wt),Ae.lengthSq()<1e-6&&Ae.set(0,0,1),Ae.normalize();let Ee=Math.max(me*.6,.3),lt=tn.clone().add(Ae.multiplyScalar(Ee));$e.setPosition(lt.x,lt.y,lt.z,!0),xe.anchorNodeName&&xe.anchorLocalPosition&&(m.current=lt.clone().sub(tn))}$e.setTarget(tn.x,tn.y,tn.z,!0),J.current&&Al($e,J.current)}U.current&&clearTimeout(U.current),U.current=setTimeout(()=>{$e.smoothTime=we,U.current=null},800),Q(xe)},[Q]),Re=(0,bt.useCallback)(()=>{Pe.length!==0&&(l.current&&(J.current=Kc(l.current)),p.startTour(Pe.length),b(!0),_(0),ye(Pe[0]))},[Pe,ye,p]),nt=(0,bt.useCallback)(()=>{if(Pe.length===0||C<0)return;R(!0);let xe=(C-1+Pe.length)%Pe.length;_(xe),ye(Pe[xe]),setTimeout(()=>R(!1),500)},[C,Pe,ye]),le=(0,bt.useCallback)(()=>{if(Pe.length===0||C<0)return;if(C===Pe.length-1){if(p.completeTour(),b(!1),_(-1),Q(null),l.current&&c.current){let $e=c.current;Ku(l.current,{...J.current,...$e}),J.current=null}return}R(!0);let xe=C+1;_(xe),ye(Pe[xe]),setTimeout(()=>R(!1),500)},[C,Pe,ye,Q,p]),_e=(0,bt.useCallback)(()=>{if(p.stopTour(),b(!1),_(-1),Q(null),l.current&&c.current){let xe=c.current;Ku(l.current,{...J.current,...xe}),J.current=null}},[Q,p]);(0,bt.useEffect)(()=>{f.current.stopTour("annotations-changed"),J.current&&l.current&&(Ku(l.current,{...J.current,...c.current??{}}),J.current=null),m.current=null,_(-1),b(!1)},[pe]),(0,bt.useEffect)(()=>()=>{U.current&&clearTimeout(U.current)},[]),(0,bt.useEffect)(()=>{Ve&&v&&J.current&&Q(Ve)},[Ve,Q,v]),(0,bt.useEffect)(()=>{if(e===void 0)return;let xe=e.map($e=>({...$e,localPosition:$e.localPosition??$e.worldPosition}));y(xe)},[e]);let it=(0,bt.useCallback)(()=>{if(o!==void 0){a?.(null);return}w(null)},[o,a]),Gt=o!==void 0?o:h?.annotation??null,be=(0,bt.useMemo)(()=>Gt?D.find($e=>$e.id===Gt.id)??null:null,[Gt,D]);(0,bt.useEffect)(()=>{Gt&&!be&&it()},[Gt,be,it]);let Ce=(0,bt.useCallback)(()=>{if(!x||!P.title.trim())return;T.current+=1;let $e={id:T.current,worldPosition:x.worldPosition,localPosition:x.localPosition,worldNormal:x.worldNormal,anchorNodeName:x.anchor?.anchorNodeName,anchorLocalPosition:x.anchor?.anchorLocalPosition,title:P.title.trim(),description:P.description},fn=[...g,$e];y(fn),s?.(fn),M(null)},[x,P,g,s]),en=(0,bt.useCallback)(()=>M(null),[]),Se=(0,bt.useCallback)(xe=>{Yc(xe.cameraView)?ye(xe):Q(xe)},[Q,ye]);return{annotations:g,pendingAnnotation:x,setPendingAnnotation:M,annotationForm:P,setAnnotationForm:S,currentAnnotationIndex:C,isNavigating:k,localAnnotationCategories:H,selectedAnnotationCategories:X,visibleAnnotations:D,availableAnnotationCategories:L,annotationFiltersVisible:re,changeAnnotationCategories:Me,sortedAnnotations:Pe,currentAnnotation:Ve,setActiveAnnotation:Q,focusAnnotation:ye,startGuidedTour:Re,goToPreviousAnnotation:nt,goToNextAnnotation:le,stopGuidedTour:_e,closeViewingAnnotation:it,activeAnnotation:Gt,activeViewingAnnotation:be,isGuidedTourActive:v,handleAnnotationOk:Ce,handleAnnotationCancel:en,handleAnnotationMarkerClick:Se}}var Fi=require("react"),bC=require("three");var Jn=require("three");function yf(e,t){if(!(e instanceof Jn.Mesh)||!t)return null;let n=e.geometry.getAttribute("position");if(!n?.count)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let r=new Jn.Box3,i=new Jn.Vector3;if(Pr(e)){let S=e;S.computeBoundingBox(),S.computeBoundingSphere();for(let T=0;T<n.count;T++)r.expandByPoint(e.getVertexPosition(T,i))}else e.geometry.boundingBox||e.geometry.computeBoundingBox(),r.copy(e.geometry.boundingBox);if(r.applyMatrix4(e.matrixWorld),r.isEmpty())return null;let o=r.getCenter(new Jn.Vector3),a=t.getWorldPosition(new Jn.Vector3),s=t.getWorldDirection(new Jn.Vector3),l=t.isOrthographicCamera,d=new Jn.Raycaster,u=S=>{if(l){let h=a.distanceTo(o)+r.getSize(i).length()+1;d.set(S.clone().addScaledVector(s,-h),s)}else d.set(a,S.clone().sub(a).normalize());let T=d.intersectObject(e,!1)[0];return T?hl({...T,ray:d.ray},e):null},m=u(o);if(m)return m;let c=e.geometry.index,p=c?.count??n.count,f=new Jn.Vector3,v=new Jn.Vector3,b=new Jn.Vector3,g=new Jn.Vector3,y=new Jn.Vector3,x=new Jn.Vector3,M=null,P=1/0;for(let S=0;S+2<p;S+=3){if(e.getVertexPosition(c?c.getX(S):S,f).applyMatrix4(e.matrixWorld),e.getVertexPosition(c?c.getX(S+1):S+1,v).applyMatrix4(e.matrixWorld),e.getVertexPosition(c?c.getX(S+2):S+2,b).applyMatrix4(e.matrixWorld),g.copy(f).add(v).add(b).multiplyScalar(1/3),Jn.Triangle.getNormal(f,v,b,y),l?x.copy(s).negate():x.copy(a).sub(g),y.dot(x)<=0)continue;let T=g.distanceToSquared(o);T<P&&(P=T,M=g.clone())}return M?u(M):null}var Qn=require("three");function xf(e,t,n,r){if(!(e instanceof Qn.Mesh)||!t)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let i=new Qn.Vector3().fromArray(n.position);if(Pr(e)){let d=e;d.computeBoundingBox(),d.computeBoundingSphere();let u=d.geometry.getAttribute("position");if(!u)return null;let m=d.geometry.index,c=m?.count??u.count,p=new Qn.Triangle,f=new Qn.Vector3,v=new Qn.Vector3,b=1/0,g=null;for(let y=0;y+2<c;y+=3){let x=[0,1,2].map(P=>m?m.getX(y+P):y+P);p.a.fromBufferAttribute(u,x[0]),p.b.fromBufferAttribute(u,x[1]),p.c.fromBufferAttribute(u,x[2]),p.closestPointToPoint(i,f);let M=f.distanceToSquared(i);if(!(M>=b||!p.getBarycoord(f,v))&&(b=M,g=new Qn.Vector3().addScaledVector(d.getVertexPosition(x[0],new Qn.Vector3),v.x).addScaledVector(d.getVertexPosition(x[1],new Qn.Vector3),v.y).addScaledVector(d.getVertexPosition(x[2],new Qn.Vector3),v.z),b<1e-12))break}if(!g)return null;i.copy(g)}if(i.applyMatrix4(e.matrixWorld).project(t),!Number.isFinite(i.x)||i.z<-1||i.z>1)return null;let o=new Qn.Vector2(r==="left"?-.0035:r==="right"?.0035:0,r==="down"?-.0035:r==="up"?.0035:0),a=new Qn.Raycaster,s=n.size*.01,l=new Qn.Vector3().fromArray(n.position);for(let d=1;d>=1/1024;d/=2){a.setFromCamera(new Qn.Vector2(i.x,i.y).addScaledVector(o,d),t);let u=a.intersectObject(e,!1)[0];if(u){let m=hl({...u,ray:a.ray},e);if(new Qn.Vector3().fromArray(m.position).distanceTo(l)<=s)return m}}return null}var gC=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function vC({currentObjectBindings:e,currentObjectBindingsRef:t,applyObjectBindings:n,nodeRefsMap:r,controlsRef:i,decalMove:o,decalDragging:a,setDecalDragging:s,setDecalError:l,setDecalControl:d,decalRequestRef:u,onTextureUpload:m,currentPanelObjectId:c,modelUrl:p}){let f=(0,Fi.useCallback)((S,T)=>{let h=t.current,w=h[S];if(!w)return;let C=T(w.decals??[]);n({...h,[S]:{...w,decals:C.length>0?C:void 0}})},[n,e]),v=(0,Fi.useMemo)(()=>{if(!a)return null;let{objectKey:S,decalId:T}=a,h=e[S],w=h?.decals?.find(C=>C.id===T);return w?{objectId:h.modelObjectId??S,decal:w,onCancel:()=>s(null),onCommit:C=>{f(S,_=>_.map(k=>k.id===T?{...k,...C}:k)),s(null)}}:null},[a,e,f]),b=o??v,g=(0,Fi.useCallback)((S,T)=>{u.current++;let h=t.current[S],w=r.current[h?.modelObjectId??S],C=yf(w,i.current?.camera);if(!C)return l("Could not find a surface on this object for the decal."),!1;let _={...T,...C};return f(S,k=>[...k,_]),l(null),d(k=>k&&{...k,activeId:_.id}),s({objectKey:S,decalId:_.id}),!0},[f]),y=(0,Fi.useCallback)(S=>{let T=t.current[S],h=r.current[T?.modelObjectId??S]?.geometry;if(!h)return .2;h.boundingBox||h.computeBoundingBox();let w=h.boundingBox?.getSize(new bC.Vector3),C=w?Math.max(w.x,w.y,w.z):0;return C>0&&Number.isFinite(C)?C/3:.2},[]),x=(0,Fi.useRef)([]);(0,Fi.useEffect)(()=>()=>{for(let S of x.current)URL.revokeObjectURL(S)},[]);let M=(0,Fi.useCallback)(async(S,T,h)=>{let w=++u.current;s(null);let C;if(m){if(C=await m(h,S),w!==u.current)return}else C=URL.createObjectURL(h),x.current.push(C);g(T,{id:gC(),image:C,size:y(T)})},[y,m,g]);return(0,Fi.useEffect)(()=>{u.current++,l(null),s(null)},[c,p]),{editDecals:f,activeDecalMove:b,addCenteredDecal:g,decalSizeFor:y,startImageDecal:M,decalControlHandlers:(S,T)=>({onSelect:h=>{u.current++,l(null),s(null),d({...S,activeId:h})},onAddText:(h,w)=>g(T,{id:gC(),text:h,color:w,size:y(T)}),onAddImage:h=>{M(S.objectId,T,h)},onChange:(h,w)=>f(T,C=>C.map(_=>_.id===h?{..._,...w}:_)),onNudge:(h,w)=>{let C=t.current[T],_=C?.decals?.find(U=>U.id===h);if(!_)return;let k=r.current[C.modelObjectId??T],R=xf(k,i.current?.camera,_,w);if(!R){l("No visible surface in that direction. Try another arrow or rotate the view.");return}l(null),s(null),f(T,U=>U.map(H=>H.id===h?{...H,...R}:H))},onMove:h=>{u.current++,e[T]?.decals?.find(C=>C.id===h)&&(l(null),s(C=>C?.objectKey===T&&C.decalId===h?null:{objectKey:T,decalId:h}))},onRemove:h=>{s(null),f(T,w=>w.filter(C=>C.id!==h)),d({...S,activeId:null})},onClose:()=>{u.current++,l(null),s(null),d(null)}})}}var ip=require("react");function yC({canvasAreaElement:e,controlsRef:t,enabled:n}){let r=(0,ip.useRef)(new Set),i=(0,ip.useRef)(null);(0,ip.useEffect)(()=>{let o=e;if(!o||!n)return;let a=new Set(["w","a","s","d"," ","c"]),s=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),l=0,d=f=>f.code==="Space"?" ":f.key.toLowerCase(),u=()=>{r.current.clear(),l=0,i.current!==null&&(cancelAnimationFrame(i.current),i.current=null)},m=f=>{let v=t.current,b=r.current;if(!v||b.size===0){i.current=null,l=0;return}let g=l?Math.min((f-l)/1e3,.05):1/60;l=f;let y=Math.max(v.distance*.75,.01)*g;b.has("w")&&v.forward(y,!1),b.has("s")&&v.forward(-y,!1),b.has("a")&&v.truck(-y,0,!1),b.has("d")&&v.truck(y,0,!1),b.has(" ")&&v.truck(0,y,!1),b.has("c")&&v.truck(0,-y,!1),i.current=requestAnimationFrame(m)},c=f=>{if(f.target!==o){u();return}if(s.has(f.key)){let b=t.current;if(!b)return;f.preventDefault();let g=Math.PI/90,y=Math.max(b.distance*.05,.01);f.key==="ArrowUp"?f.shiftKey?b.forward(y,!0):b.rotate(0,-g,!0):f.key==="ArrowDown"?f.shiftKey?b.forward(-y,!0):b.rotate(0,g,!0):f.key==="ArrowLeft"?b.rotate(-g,0,!0):b.rotate(g,0,!0);return}let v=d(f);a.has(v)&&(f.preventDefault(),r.current.add(v),i.current===null&&(i.current=requestAnimationFrame(m)))},p=f=>{r.current.delete(d(f))};return o.addEventListener("keydown",c),o.addEventListener("keyup",p),o.addEventListener("blur",u),()=>{o.removeEventListener("keydown",c),o.removeEventListener("keyup",p),o.removeEventListener("blur",u),u()}},[e,t,n])}var dr=require("react");var xC=1,jD=4,HD=.0015,GD=.1,WD=8;function wC({moveZoomTarget:e,setMoveZoomTarget:t,currentObjectBindingsRef:n,materialRefsOut:r,rendererCaptureRef:i,canvasAreaRef:o,canvasAreaElement:a,applyBindingStyle:s}){let l=(0,dr.useRef)(null),d=(0,dr.useRef)(!1),u=(0,dr.useRef)([0,0]),m=(0,dr.useRef)([0,0]),c=(0,dr.useRef)(1),p=(0,dr.useRef)(null),f=(0,dr.useCallback)((M,P)=>{let S=e;if(!S)return;let T=n.current[S.objectKey]?.style?.material?.[S.textureKey],h=T?.path;if(!h)return;let w=T?.rotation??0,C=to(S.textureKey),_=uu(h,C),k=r.current[S.objectKey],R=Array.isArray(k)?k:k?[k]:[],U=Pm[S.textureKey];for(let H of R){let B=H;U in B&&(B[U]=Dm(B.userData,S.textureKey,_,h,M,P,w))}i.current?.invalidate()},[e]),v=(0,dr.useCallback)(M=>{if(!e)return;M.currentTarget.setPointerCapture?.(M.pointerId),l.current={x:M.clientX,y:M.clientY},d.current=!1;let P=n.current[e.objectKey]?.style?.material?.[e.textureKey];if(u.current=P?.offset??[0,0],m.current=u.current,c.current=P?.scale??1,p.current===null){let S=()=>{i.current?.invalidate(),p.current=requestAnimationFrame(S)};p.current=requestAnimationFrame(S)}},[e]),b=(0,dr.useCallback)(M=>{if(!e||!l.current)return;let P=o.current,S=P?.clientWidth||1,T=P?.clientHeight||1,h=M.clientX-l.current.x,w=M.clientY-l.current.y;if(!d.current&&Math.hypot(h,w)<jD)return;d.current=!0;let C=-(h/S)*xC,_=w/T*xC,[k,R]=u.current,U=[k+C,R+_];m.current=U,f(U,c.current),s(e.objectKey,H=>({...H,material:{...H?.material,[e.textureKey]:{...H?.material?.[e.textureKey],path:n.current[e.objectKey]?.style?.material?.[e.textureKey]?.path,offset:U}}}))},[e,f,s]),g=(0,dr.useCallback)(M=>{if(!e)return;M.target?.releasePointerCapture?.(M.pointerId),p.current!==null&&(cancelAnimationFrame(p.current),p.current=null);let P=d.current,S=e;if(P){s(S.objectKey,T=>({...T,material:{...T?.material,[S.textureKey]:{...T?.material?.[S.textureKey],path:n.current[S.objectKey]?.style?.material?.[S.textureKey]?.path,offset:m.current}}})),l.current=null,d.current=!1;return}l.current=null,t(null)},[e,s]);(0,dr.useEffect)(()=>{if(!e)return p.current!==null&&(cancelAnimationFrame(p.current),p.current=null),()=>{p.current!==null&&(cancelAnimationFrame(p.current),p.current=null)}},[e]),(0,dr.useEffect)(()=>{let M=a;if(!(!M||!e))return M.addEventListener("pointermove",b),M.addEventListener("pointerup",g),M.addEventListener("pointercancel",g),()=>{M.removeEventListener("pointermove",b),M.removeEventListener("pointerup",g),M.removeEventListener("pointercancel",g)}},[a,e,b,g]);let y=(0,dr.useCallback)(M=>{if(!e)return;M.preventDefault();let P=e,S=Math.exp(-M.deltaY*HD),T=Math.min(WD,Math.max(GD,c.current*S));c.current=T,f(m.current,T),s(P.objectKey,h=>({...h,material:{...h?.material,[P.textureKey]:{...h?.material?.[P.textureKey],path:n.current[P.objectKey]?.style?.material?.[P.textureKey]?.path,scale:T}}}))},[e,f,s]);return(0,dr.useEffect)(()=>{let M=a;if(!(!M||!e))return M.addEventListener("wheel",y,{passive:!1}),()=>M.removeEventListener("wheel",y)},[a,e,y]),{beginMoveZoom:(0,dr.useCallback)(M=>{d.current=!1,l.current=null,t(M)},[t]),handleMoveZoomPointerDown:v}}var wf=require("@react-three/fiber"),XD=.2;function ey({enabled:e,speed:t,controlsRef:n}){let r=(0,wf.useThree)(i=>i.invalidate);return(0,wf.useFrame)((i,o)=>{!e||!n.current||(n.current.rotate(o*XD*t,0,!1),r())}),null}var po=require("lucide-react");var qt=require("react/jsx-runtime");function SC({count:e,onDismiss:t}){let n=Fe();return(0,qt.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,qt.jsx)(po.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,qt.jsx)("span",{children:n(e===1?"bindingMismatchOne":"bindingMismatchMany",{count:e})}),(0,qt.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:r=>{r.stopPropagation(),t()},"aria-label":n("dismiss"),children:(0,qt.jsx)(po.X,{size:12})})]})}function MC({triangles:e,offset:t,onDismiss:n}){let r=Fe();return(0,qt.jsxs)("div",{className:`ri-largeModelBanner ${t?"ri-largeModelBanner--offset":""}`,children:[(0,qt.jsx)(po.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,qt.jsx)("span",{children:r("largeModelWarning",{millions:Math.round(e/1e6)})}),(0,qt.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:i=>{i.stopPropagation(),n()},"aria-label":r("dismiss"),children:(0,qt.jsx)(po.X,{size:12})})]})}function _C({missing:e,total:t}){let n=Fe();return(0,qt.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,qt.jsx)(po.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,qt.jsxs)("span",{children:[e===t?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${e} of ${t} meshes have no UV0 coordinates.`," ",n("missingUVsAreShownInMagenta")]})]})}function CC({failure:e,source:t}){return(0,qt.jsx)("div",{className:"ri-loadError",role:"alert",children:(0,qt.jsxs)("div",{className:"ri-loadError__card",children:[(0,qt.jsxs)("div",{className:"ri-loadError__header",children:[(0,qt.jsx)(po.AlertTriangle,{size:16,"aria-hidden":"true"}),(0,qt.jsx)("span",{className:"ri-loadError__title",children:e.title})]}),(0,qt.jsx)("p",{className:"ri-loadError__detail",children:e.detail}),(0,qt.jsx)("p",{className:"ri-loadError__source",children:t}),e.technical&&(0,qt.jsx)("p",{className:"ri-loadError__technical",children:e.technical})]})})}function TC({rebuilding:e,onReload:t}){let n=Fe();return(0,qt.jsx)("div",{className:"ri-contextRecovery",role:"alert",children:(0,qt.jsxs)("div",{className:"ri-contextRecovery__card",children:[(0,qt.jsx)(po.AlertTriangle,{size:24,"aria-hidden":"true"}),(0,qt.jsx)("h2",{children:n(e?"contextRestoringTitle":"contextLostTitle")}),(0,qt.jsx)("p",{children:n(e?"contextRestoringMessage":"contextLostMessage")}),(0,qt.jsxs)("button",{type:"button",onClick:t,disabled:e,children:[(0,qt.jsx)(po.RotateCcw,{size:16,"aria-hidden":"true"}),n("reloadViewer")]})]})})}var op=require("react");function PC({applyBindingStyle:e,resolveObjectKey:t,onTextureUpload:n,fileInputRef:r,pendingObjectId:i,createdBlobUrls:o,texturePositioning:a,setMoveZoomTarget:s}){let l=(0,op.useCallback)((g,y)=>{let x=o.current[g];x&&URL.revokeObjectURL(x),y.startsWith("blob:")?o.current[g]=y:delete o.current[g],e(g,M=>({...M,material:{...M?.material,texture:{path:y}}}))},[e]),d=g=>{let y=g.target.files?.[0],x=i.current;if(!y||!x)return;let M=t(x);M&&(n?n(y,M).then(P=>l(M,P),P=>console.error("onTextureUpload failed:",P)):l(M,URL.createObjectURL(y)),g.target.value="")},u=g=>{i.current=g,r.current?.click()},m=g=>{let y=t(g);if(!y)return;e(y,M=>M?.material?.texture?{...M,material:{...M.material,texture:void 0}}:M);let x=o.current[y];x&&(URL.revokeObjectURL(x),delete o.current[y])},c=!!a,p=typeof a=="object"?a:void 0,f=(0,op.useCallback)((g,y,x)=>{if(p?.onOffsetChange){p.onOffsetChange(g,y,x);return}e(g,M=>{let P=M?.material?.texture;if(!P?.path)return M;let S=P.offset??[0,0],T=[S[0],S[1]];return T[y]=x,{...M,material:{...M?.material,texture:{...P,offset:T}}}})},[e,p]),v=(0,op.useCallback)((g,y)=>{if(p?.onRotationChange){p.onRotationChange(g,y);return}e(g,x=>{let M=x?.material?.texture;if(!M?.path)return x;let P=(y%360+360)%360;return{...x,material:{...x?.material,texture:{...M,rotation:P*Math.PI/180}}}})},[e,p]),b=(0,op.useCallback)(()=>{s(null),p?.onEndPositioning?.()},[p]);return{handleFileChange:d,triggerFileUpload:u,clearTexture:m,texturePositioningEnabled:c,texturePositioningOverrides:p,setMaterialTextureOffset:f,setMaterialTextureRotation:v,endMaterialTexturePositioning:b}}function AC({materialPopup:e,resolveObjectKey:t,currentObjectBindings:n,nodeRefsMap:r,moveZoomTarget:i,texturePositioningEnabled:o,texturePositioningOverrides:a,setMaterialTextureOffset:s,setMaterialTextureRotation:l,endMaterialTexturePositioning:d}){let u=e?t(e.objectId):null,m=u?n[u]?.style?.material?.texture?.path:void 0,c=m?Lm(m)??m:void 0,p=Tm(u?r.current[u]:null),f=o?a?.offset??(u?n[u]?.style?.material?.texture?.offset:void 0):void 0,v=o?a?.rotationDegrees??(u?((n[u]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,b=o?a?.isPositioning??!!(u&&i?.objectKey===u&&i?.textureKey==="texture"):!1;return{materialTextureUrl:c,materialTargetTakesImage:p,materialTextureOffset:f,materialTextureRotationDegrees:v,isMaterialTexturePositioning:b,materialTextureOnOffsetChange:o?s:void 0,materialTextureOnRotationChange:o?l:void 0,materialTextureOnEndPositioning:o?d:void 0}}var od=require("react");var Sf=e=>e==="#000000"?"#ffffff":e;function EC({nodeRefsMap:e,currentObjectBindingsRef:t,applyObjectBindings:n}){let r=(0,od.useRef)({}),i=(0,od.useCallback)(a=>{let s=d1(e.current[a]),l=t.current[a]?.style?.material,d=l?.emissive??s.color,u=l?.emissiveIntensity??s.intensity;return{color:d,intensity:u,on:d!=="#000000"&&u>0}},[]),o=(0,od.useCallback)((a,s)=>{let l=t.current,d=l[a];d&&n({...l,[a]:{...d,style:{...d.style,material:{...d.style?.material,...s}}}})},[n]);return{glowMemoryRef:r,readObjectGlow:i,applyGlow:o}}function kC({setCurrentAction:e,bindingKeyIndex:t,currentObjectBindings:n,applyObjectBindings:r,resolveObjectKey:i,closeColorPicker:o,setColorPicker:a,setMaterialPopupsByObject:s,setItemMaterials:l,getPopoverPosition:d,decalRequestRef:u,setDecalError:m,setDecalDragging:c,setDecalControl:p,resolvedSceneConfigRef:f,applyLightPatches:v,readObjectGlow:b,applyGlow:g,glowMemoryRef:y,setLightControl:x,onAction:M}){return(0,od.useCallback)(P=>{let{objectId:S,action:T,binding:h}=P;switch(e(P),T.id){case"toggle-visibility":{let w=S;h?.modelObjectId&&(w=t.byModelObjectId.get(h.modelObjectId)??w);let C=n[w],_=C?.visible===!1;C&&r({...n,[w]:{...C,visible:_}});break}case"change-color":o(),s(w=>{if(!(S in w))return w;let C={...w};return delete C[S],C}),l(w=>{let C=i(S,h)??S,_=w[S]?.hex,k=n[C]?.style?.material?.baseColor;return{...w,[S]:{...w[S],hex:_??k??"#ffffff"}}}),a(d(S,225,250,h,P));break;case"change-material":o(),s(w=>{if(S in w){let C={...w};return delete C[S],C}return{...w,[S]:d(S,300,320,h,P)}});break;case"add-text":case"add-image":{o();let w=T.id;u.current++,m(null),c(null),p(C=>C?.objectId===S&&C.kind===w?null:{objectId:S,kind:w,activeId:null});break}case"toggle-light":case"change-light-color":case"set-brightness":{let w=i(S,h);if(!w)break;let C=c1(f.current,n,w);if(T.id==="toggle-light"){if(C.length>0){let U=!C.some(H=>H.visible);v(Object.fromEntries(C.map(H=>[H.id,{visible:U}])));break}let R=b(w);R.on?(y.current[w]=R.intensity,g(w,{emissiveIntensity:0})):g(w,{emissive:Sf(R.color),emissiveIntensity:y.current[w]??1});break}let _=T.id,k=C.length>0?null:b(w);x(R=>R?.objectId===S&&R.kind===_?null:{objectId:S,kind:_,target:k?{type:"glow",objectKey:w,baseIntensity:k.on?k.intensity:y.current[w]??1}:{type:"lights",lightIds:C.map(U=>U.id),baseIntensity:Object.fromEntries(C.map(U=>[U.id,U.intensity]))},percent:k&&!k.on?0:100});break}default:break}M?.(P)},[r,g,v,b,n,d,M,o,i,t])}var RC=require("react"),Nn=require("lucide-react");var he=require("react/jsx-runtime");function LC({categories:e,selected:t,disabled:n,onChange:r}){let i=Fe();return(0,he.jsxs)("div",{className:"ri-annotationFilters",role:"group","aria-label":i("annotationCategories"),onPointerDown:o=>o.stopPropagation(),children:[(0,he.jsx)("span",{children:i("annotations")}),(0,he.jsx)("button",{type:"button","aria-pressed":t===null,disabled:n,onClick:()=>r(null),children:i("all")}),e.map(o=>(0,he.jsx)("button",{type:"button",disabled:n,"aria-pressed":t?.some(a=>a.trim()===o)??!1,onClick:()=>r(t===null?[o]:t.some(a=>a.trim()===o)?t.filter(a=>a.trim()!==o):[...t,o]),children:o||i("uncategorized")},o))]})}function DC({onCancel:e}){let t=Fe();return(0,he.jsxs)("div",{className:"ri-isolationPill",role:"status",onPointerDown:n=>n.stopPropagation(),children:[(0,he.jsx)("span",{className:"ri-isolationPill__label",children:t("decalDragHint")}),(0,he.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:e,children:t("cancel")})]})}function OC({label:e,onShowAll:t}){let n=Fe();return(0,he.jsxs)("div",{className:"ri-isolationPill",onPointerDown:r=>r.stopPropagation(),children:[(0,he.jsx)("span",{className:"ri-isolationPill__label",children:e}),(0,he.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("showAll")})]})}function NC({groups:e,activeVariants:t,onSelect:n}){let r=Fe();return(0,he.jsx)(he.Fragment,{children:e.map((i,o)=>(0,he.jsxs)("div",{className:"ri-variantPicker",role:"group","aria-label":i.name??r("materialVariants"),onPointerDown:a=>a.stopPropagation(),children:[i.name?(0,he.jsx)("span",{className:"ri-variantPicker__group","aria-hidden":"true",children:i.name}):null,i.variants.map(a=>{let s=t.includes(a.name);return(0,he.jsxs)("button",{type:"button",className:`ri-variantPicker__option ${s?"ri-variantPicker__option--active":""}`,"aria-pressed":s,onClick:()=>n(a.name),children:[a.swatch?(0,he.jsx)("span",{className:"ri-variantPicker__swatch",style:{background:a.swatch},"aria-hidden":"true"}):null,a.label]},a.name)})]},i.name??`group-${o}`))})}function BC({count:e,active:t,index:n,navigating:r,onStart:i,onPrevious:o,onNext:a,onStop:s}){let l=Fe();return t?(0,he.jsxs)(he.Fragment,{children:[(0,he.jsxs)("button",{className:"ri-tourButton",onClick:o,disabled:r||e===0||n<=0,title:l("previousAnnotation"),children:[(0,he.jsx)(Nn.ChevronLeft,{size:16}),(0,he.jsx)("span",{children:l("previous")})]}),(0,he.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:s,title:l("stopGuidedTour"),children:(0,he.jsx)(Nn.Square,{size:16})}),(0,he.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:a,disabled:r||e===0,title:l("nextAnnotation"),children:[(0,he.jsx)("span",{children:l("next")}),(0,he.jsx)(Nn.ChevronRight,{size:16})]})]}):(0,he.jsx)("button",{className:"ri-navButtonSingle",onClick:i,disabled:e===0,title:l("startGuidedTour"),children:l("guidedTour")})}function IC({fullscreen:e,disabled:t}){let n=Fe();return(0,he.jsxs)("div",{className:"mv-fullscreenWrapper",children:[e.error&&(0,he.jsx)("div",{className:"mv-fullscreenError",role:"alert",children:n.message(e.error)}),(0,he.jsx)("button",{type:"button",className:"mv-fullscreenButton",onClick:()=>{e.toggle()},disabled:e.pending||t,title:e.active?n("exitFullscreen"):n("enterFullscreen"),"aria-label":e.active?n("exitFullscreen"):n("enterFullscreen"),"aria-pressed":e.active,children:e.active?(0,he.jsx)(Nn.Minimize,{}):(0,he.jsx)(Nn.Maximize,{})})]})}function zC({open:e,current:t,disabled:n,onSelect:r,onToggle:i}){let o=Fe();return(0,he.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:a=>a.stopPropagation(),children:[e&&(0,he.jsxs)("div",{className:"mv-controllersMenu",children:[(0,he.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("orbit"),children:o("orbitControl")}),(0,he.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("pointerLock"),children:o("pointLock")})]}),(0,he.jsx)("button",{className:"mv-controllersButton",onClick:i,title:o("cameraController"),"aria-label":o("cameraControllerSettings"),disabled:n,children:(0,he.jsx)(Nn.Orbit,{size:15})})]})}function VC({menu:e,recording:t,hasScene:n,canCaptureImage:r,canRecord:i,hasCinematic:o}){let a=Fe(),s=(0,RC.useId)(),{isDownloading:l,downloadMenuOpen:d,uvExportError:u,toggleDownloadMenu:m,handleDownloadMesh:c,handleDownloadScreenshot:p,handleDownloadUvLayout:f,handleDownloadVideo:v,videoFormat:b,setVideoFormat:g,videoExportError:y}=e;return(0,he.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:x=>x.stopPropagation(),children:[d&&(0,he.jsxs)("div",{className:"mv-downloadMenu",children:[(0,he.jsxs)("button",{className:"mv-downloadMenuItem",onClick:c,disabled:l||t||!n,"aria-describedby":s,children:[(0,he.jsx)(Nn.Box,{size:14}),a("downloadGLB")]}),(0,he.jsx)("p",{className:"mv-downloadMenuDescription",id:s,children:a("downloadGLBDescription")}),(0,he.jsx)("div",{className:"mv-downloadMenuDivider"}),r&&(0,he.jsxs)(he.Fragment,{children:[(0,he.jsxs)("button",{className:"mv-downloadMenuItem",onClick:p,disabled:t||!n,children:[(0,he.jsx)(Nn.Camera,{size:14}),a("downloadPNG")]}),(0,he.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,he.jsxs)("button",{className:"mv-downloadMenuItem",onClick:f,disabled:t||!n,children:[(0,he.jsx)(Nn.FileImage,{size:14}),a("downloadUVLayout")]}),(0,he.jsx)("div",{className:"mv-downloadMenuDivider"}),(0,he.jsxs)("label",{className:"mv-downloadMenuItem",children:[a("videoFormat"),(0,he.jsxs)("select",{"aria-label":a("videoFormat"),value:b,onChange:x=>g(x.target.value),children:[(0,he.jsx)("option",{value:"auto",children:a("auto")}),(0,he.jsx)("option",{value:"webm",disabled:!ra("webm"),children:"WebM"}),(0,he.jsx)("option",{value:"mp4",disabled:!ra("mp4"),children:"MP4"}),(0,he.jsx)("option",{value:"gif",disabled:!ra("gif"),children:"GIF"})]})]}),(0,he.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{v("turntable")},disabled:t||!i||!ra(b),children:[(0,he.jsx)(Nn.Play,{size:14}),a("recordTurntableVideo")]}),o&&(0,he.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{v("cinematic")},disabled:t||!i||!ra(b),children:[(0,he.jsx)(Nn.Play,{size:14}),a("recordCinematicVideo")]}),!ra()&&!ra("gif")&&(0,he.jsx)("div",{className:"mv-downloadMenuNotice",role:"status",children:a("videoUnsupported")}),y&&(0,he.jsx)("div",{className:"mv-downloadMenuNotice",role:"alert",children:a.message(y)}),u&&(0,he.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:a.message(u)})]}),(0,he.jsx)("button",{className:"mv-downloadButton",onClick:m,disabled:l||t||!n,title:a("downloadOptions"),children:l?(0,he.jsxs)(he.Fragment,{children:[(0,he.jsx)("span",{className:"mv-downloadButton__spinner"}),a("exporting")]}):(0,he.jsxs)(he.Fragment,{children:[(0,he.jsx)(Nn.Download,{size:15}),a("download")]})})]})}function UC({x:e,y:t,form:n,setForm:r,onOk:i,onCancel:o}){let a=Fe();return(0,he.jsxs)("div",{className:"ri-annotationPopup",style:{left:e,top:t},onPointerDown:s=>s.stopPropagation(),onClick:s=>s.stopPropagation(),children:[(0,he.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:a("annotationTitlePlaceholder"),value:n.title,onChange:s=>r(l=>({...l,title:s.target.value})),onKeyDown:s=>{s.key==="Enter"&&i(),s.key==="Escape"&&o()}}),(0,he.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:a("description"),value:n.description,onChange:s=>r(l=>({...l,description:s.target.value})),onKeyDown:s=>{s.key==="Escape"&&o()},rows:5}),(0,he.jsxs)("div",{className:"ri-annotationActions",children:[(0,he.jsx)("button",{onClick:i,className:`ri-annotationOkBtn ${n.title.trim()?"":"disabled"}`,disabled:!n.title.trim(),children:a("ok")}),(0,he.jsx)("button",{onClick:o,className:"ri-annotationCancelBtn",children:a("cancel")}),(0,he.jsx)("div",{className:"ri-annotationIcons"})]})]})}var FC=require("qrcode.react"),_n=require("lucide-react");var We=require("react/jsx-runtime");function jC({top:e,xrStore:t,arSupported:n,vrSupported:r,quickLookSupported:i,mobileHandoffUrl:o,mobileHandoffOpen:a,onQuickLook:s,onOpenMobileHandoff:l}){let d=Fe();return(0,We.jsxs)("div",{className:"ri-xrTools",style:{top:`${e}px`},children:[!n&&i&&(0,We.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:s,title:d("viewThisModelInARWithAppleQuickLook"),children:[(0,We.jsx)(_n.Box,{size:16}),d("viewInAR")]}),o&&(0,We.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:l,title:d("openThisExperienceOnAPhoneForAR"),"aria-haspopup":"dialog","aria-expanded":a,children:[(0,We.jsx)(_n.QrCode,{size:16}),(0,We.jsx)("span",{children:d("openOnPhone")})]}),t&&n&&(0,We.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>t.enterAR().catch(u=>{console.error("Failed to enter AR session:",u)}),title:d("viewThisModelInYourSpace"),children:[(0,We.jsx)(_n.Smartphone,{size:16}),(0,We.jsx)("span",{children:d("enterAR")})]}),t&&r&&(0,We.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>t.enterVR().catch(u=>{console.error("Failed to enter VR session:",u)}),title:d("viewThisModelInVR"),children:[(0,We.jsx)(_n.RectangleGoggles,{size:16}),(0,We.jsx)("span",{children:d("enterVR")})]})]})}function HC({url:e,onClose:t}){let n=Fe();return(0,We.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:r=>{r.target===r.currentTarget&&t()},children:(0,We.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,We.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:t,"aria-label":n("closePhoneHandoff"),children:(0,We.jsx)(_n.X,{size:18})}),(0,We.jsx)(_n.Smartphone,{size:22,"aria-hidden":"true"}),(0,We.jsx)("h2",{id:"ri-mobileHandoffTitle",children:n("viewInAR")}),(0,We.jsx)("p",{children:n("arScanCode")}),(0,We.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,We.jsx)(FC.QRCodeSVG,{value:e,size:208,level:"M",marginSize:4,title:n("qrCodeToOpenThisModelOnAPhone")})})]})})}function GC({top:e,active:t,onToggle:n}){let r=Fe();return(0,We.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${e}px`},children:(0,We.jsx)("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,onClick:n,title:r(t?"disableUVChecker":"enableUVChecker"),"aria-label":r(t?"disableUVChecker":"enableUVChecker"),"aria-pressed":t,children:(0,We.jsx)(_n.Grid3X3,{size:16})})})}function WC({top:e,open:t,factor:n,onToggleOpen:r,onFactorChange:i}){let o=Fe();return(0,We.jsxs)("div",{className:"ri-explodeTools",style:{top:`${e}px`},children:[(0,We.jsx)("button",{type:"button",className:`ri-measureButton ${t||n>0?"ri-measureButton--active":""}`,onClick:r,title:o("explodedView"),"aria-pressed":t,children:(0,We.jsx)(_n.Expand,{size:16})}),t&&(0,We.jsx)("div",{className:"ri-explodeSlider",onPointerDown:a=>a.stopPropagation(),children:(0,We.jsx)("input",{type:"range",min:0,max:100,value:Math.round(n*100),onChange:a=>i(Number(a.target.value)/100),"aria-label":o("explodeAmount")})})]})}function XC({top:e,section:t,onChange:n}){let r=Fe();return(0,We.jsxs)("div",{className:"ri-sectionTools",style:{top:`${e}px`},children:[(0,We.jsx)("button",{type:"button",className:`ri-measureButton ${t.enabled?"ri-measureButton--active":""}`,onClick:()=>n({enabled:!t.enabled}),title:t.enabled?r("removeSectionCut"):r("sectionCut"),"aria-label":r("sectionCut"),"aria-pressed":t.enabled,children:(0,We.jsx)(_n.Slice,{size:16})}),t.enabled&&(0,We.jsxs)("div",{className:"ri-sectionPanel",onPointerDown:i=>i.stopPropagation(),children:[(0,We.jsx)("div",{className:"ri-sectionAxes",role:"group","aria-label":r("sectionAxis"),children:Wm.map(i=>(0,We.jsx)("button",{type:"button",className:`ri-sectionAxis ${t.axis===i?"ri-sectionAxis--active":""}`,"aria-pressed":t.axis===i,onClick:()=>n({axis:i}),children:i.toUpperCase()},i))}),(0,We.jsx)("input",{type:"range",min:0,max:100,value:Math.round(t.position*100),onChange:i=>n({position:Number(i.target.value)/100}),"aria-label":r("sectionPosition")}),(0,We.jsx)("button",{type:"button",className:`ri-sectionAxis ${t.flip?"ri-sectionAxis--active":""}`,"aria-pressed":t.flip,"aria-label":r("keepTheOtherSide"),title:r("keepTheOtherSide"),onClick:()=>n({flip:!t.flip}),children:(0,We.jsx)(_n.FlipVertical2,{size:14})})]})]})}function $C({top:e,playing:t,disabled:n,onPlay:r,onPause:i,onStop:o}){let a=Fe();return(0,We.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${e}px`},children:[(0,We.jsx)("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,disabled:n,onClick:t?i:r,title:a(t?"pauseCinematic":"playCinematic"),"aria-pressed":t,children:t?(0,We.jsx)(_n.Pause,{size:16}):(0,We.jsx)(_n.Play,{size:16})}),t&&(0,We.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:o,title:a("stopCinematicAndResetCamera"),children:(0,We.jsx)(_n.Square,{size:16})})]})}function qC({progress:e,onCancel:t}){let n=Fe();return(0,We.jsx)("div",{className:"ri-recordingOverlay",onPointerDown:r=>r.stopPropagation(),children:(0,We.jsxs)("div",{className:"ri-isolationPill",role:"status","aria-live":"polite",children:[(0,We.jsx)("span",{className:"ri-isolationPill__label",children:n("recordingVideo",{progress:e})}),(0,We.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("cancel")})]})})}function YC(e){let t={total:0,missing:0};return e.traverse(n=>{let r=n;!r.isMesh||!r.geometry||(t.total+=1,r.geometry.getAttribute("uv")||(t.missing+=1))}),t}var ur=require("three");function KC(e,t,n,r,i){return!!(e?.usesSlots&&t.usesSlots&&e.url!==t.url&&n.includes(e.url)&&n.includes(t.url)&&r[e.url]&&r[t.url]&&i[e.url]&&i[t.url])}function ZC(e,t,n){let r=t?.camera;if(!(r instanceof ur.PerspectiveCamera))return null;let o=(e instanceof ur.Box3?e:new ur.Box3().setFromObject(e)).getSize(new ur.Vector3).length();return!Number.isFinite(o)||o<=0?null:(r.near=o/100,r.far=o*100,r.updateProjectionMatrix(),t&&n===void 0&&(t.maxDistance=o*10),o)}function JC(e,t){let n=e.camera;if(!(n instanceof ur.PerspectiveCamera)||!(t>0))return;let r=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(r-n.near)<=n.near*.01||(n.near=r,n.updateProjectionMatrix())}var Mf={paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5},ap={kind:"model"};function QC(e,t){let n=new ur.Box3().setFromObject(t);return n.isEmpty()?!1:(n.expandByScalar(n.getSize(new ur.Vector3).length()*.05),n.containsPoint(e.getTarget(new ur.Vector3)))}function eT(e,t){return e.getTarget(new ur.Vector3).distanceTo(t)<=Math.max(e.distance,1)*.001}async function ty(e,t,n=.6){let r=e.smoothTime;e.smoothTime=Lc(e,n);try{return await t()}finally{e.smoothTime=r}}async function tT(e,t,{flyIn:n,onStart:r,invalidate:i}){if(n){let o=(t instanceof ur.Box3?t:new ur.Box3().setFromObject(t)).getBoundingSphere(new ur.Sphere),a=o.center.clone(),l=e.getPosition(new ur.Vector3).clone().sub(e.getTarget(new ur.Vector3));l.lengthSq()<1e-6&&l.set(0,0,1),l.normalize();let d=Math.max(o.radius*10,20),u=a.clone().add(l.multiplyScalar(d));await e.setLookAt(u.x,u.y,u.z,a.x,a.y,a.z,!1)}r(),await ty(e,()=>e.fitToBox(t,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(o=>{let a=performance.now(),s=()=>{e.active===!1||performance.now()-a>8e3?(e.dispatchEvent({type:"update"}),i(),o()):(i(),setTimeout(s,100))};setTimeout(s,100)})}var nT=require("react");function rT({enabled:e,canvasAreaElement:t,fitAttemptedRef:n,fitInFlightRef:r,controlsRef:i,cameraFramingRef:o,nodeRefsMap:a,fitScene:s}){(0,nT.useEffect)(()=>{if(!e)return;let l=t;if(!l)return;let d=null,u=new ResizeObserver(()=>{!n.current||r.current||(d&&clearTimeout(d),d=setTimeout(()=>{let m=i.current,c=o.current;if(c.kind==="view"&&m){if(eT(m,c.target))return}else if(c.kind==="object"&&m){let p=a.current[c.key];if(p&&QC(m,p)){m.fitToBox(p,!0,Mf).catch(()=>{});return}}s()},150))});return u.observe(l),()=>{u.disconnect(),d&&clearTimeout(d)}},[t,s,e])}var oe=require("react/jsx-runtime");function ny(e){let n=e.split(/[?#]/)[0].split("/");return(n[n.length-1]||e).replace(/\.[^./]+$/,"")||e}var $D=Object.freeze({});function Cf(e){let t=o1(e),n=xm(t.modelUrl,t.tilesetUrl),r=(0,N.useRef)(n);r.current=n;let i=(0,N.useRef)(null),o=(0,N.useRef)(null),a=(0,N.useCallback)(()=>{let v=o.current;v&&(i.current=v.snapshot())},[]),s=y0(a),l=O0(e),[d,u]=(0,N.useState)(null);(0,N.useEffect)(()=>()=>{d&&URL.revokeObjectURL(d)},[d]);let m=()=>{a();let v=r.current;o.current?.captureFrame().then(b=>{b&&(v===r.current?u(b):URL.revokeObjectURL(b))})};na(()=>{i.current=null,u(null)},[n]);let c=(0,N.useRef)(null),p=A0({loading:t.loading,reveal:t.reveal,rootRef:c,onPark:m}),{release:f}=s;return(0,N.useEffect)(()=>{p.live||f()},[p.live,f]),(0,oe.jsx)(Xx,{labels:e.labels,children:(0,oe.jsx)("div",{className:"ri-viewerSlot",ref:c,children:p.live?(0,oe.jsx)(qD,{...t,contextRecovery:s,engagement:l,resumeRef:i,viewerHandleRef:o,offscreen:!p.visible,frame:d},s.generation):(0,oe.jsx)(k0,{className:"ri-viewer",background:Kg(t.backgroundColor,t.sceneConfig),poster:d??t.poster,onReveal:p.awaitingReveal?p.reveal:void 0})})})}function qD({labels:e,contextRecovery:t,engagement:n,modelUrl:r,tilesetUrl:i,tilesErrorTarget:o=8,tilesCacheSize:a=800,onObjectCatalog:s,modelFormat:l,licenseKey:d,licenseValidationUrl:u,objectBindings:m="auto",selectedObject:c,multiSelectedKeys:p,selectedObjectRefs:f,selectedObjectOutlineColor:v,panelHoveredObject:b,onObjectBindingsChange:g,onObjectSelect:y,onObjectHover:x,onObjectDoubleClick:M,onDecalDoubleClick:P,onObjectContextMenu:S,decalMove:T,onObjectEditLeaseChange:h,onSelectionClear:w,onSceneLoaded:C,onModelLoaded:_,onLoadError:k,onProgress:R,onCameraControllerChange:U,cameraControllerType:H,onAction:B,onHiddenObjectsChange:X,onCameraChange:D,onViewerReady:L,onTextureUpload:re,onAnimationsReady:Me,onModelAnimationsReady:Pe,onAnnotationsChange:pe,activeAnnotation:Ve,onActiveAnnotationChange:Q,camera:J,cameraLimits:ye,backgroundColor:Re,shadows:nt=!0,showObjectBindingDataPanel:le=!0,customObjectBindingDataPanel:_e,customSceneObjectsPanel:it,showSceneObjectsPanel:Gt=!0,showDownloadButton:be=!0,downloadFilename:Ce="model",showResetButton:en=!0,showFullscreenButton:Se=!1,showLoadingOverlay:xe=!0,showMouseController:$e=!1,mouseControllerPosition:fn="center-bottom",mouseControllerOpacity:tn=1,moveSensitivity:Ln=.08,zoomSensitivity:we=1,sceneConfig:Be,onSceneConfigChange:Qe,disableZoom:wt=!1,zoomOnSelected:Dt=!0,highlightOnHover:me=!0,enableCameraControls:Ae=!0,onAutoFit:Ee,refitOnResize:lt=!0,renderMode:nn="demand",maxDpr:Ot=2,preserveDrawingBuffer:at=!1,webgpu:Ie=!1,performanceProfile:ht="auto",dracoDecoderPath:gt,ktx2TranscoderPath:Yt,meshopt:Kr=!0,showMeasureTools:Nt=!1,showUvCheckerButton:cn=!1,showExplodeControls:jn=!1,showMaterialVariants:yr=!0,showObjectNavigator:bi=!0,showSectionTools:Zr=!1,isolation:gn,onIsolationChange:mr,showIsolateControls:Xi=!1,cinematic:Jr,measurementUnit:Is="m",enableXR:Qr=!1,usdzUrl:zs,arScaleMode:ka="normalized",mobileHandoffUrl:Uo,showAnnotationNavigation:Vs=!0,showAnnotationOnHover:$i=!1,showAnnotationFilters:go=!0,annotationCategories:Us,onAnnotationCategoriesChange:qi,moveModeEnabled:Or=!1,scaleModeEnabled:vi=!1,objectTransformSpace:Ra="world",enableKeyboardNavigation:yi=!1,reducedMotion:F="user",showViewGizmo:W=!1,overlay:G,unsafe_sceneChildren:ce,autoRotate:ee,autoRotateSpeed:ke,onTexturePositioningChange:Ne,endTexturePositioningRef:rn,texturePositioning:At,extraModelUrls:Tn,onExtraModelError:dn,onExtraModelLoaded:ct,originalNodePoses:dt,models:ae,mergeModels:un,onMergeModelLoaded:Hn,onMergeModelError:hr,poster:La,resumeRef:on,viewerHandleRef:Un,offscreen:xi,frame:Tp,onModelChange:Pp}){let tr=Fe(),Fo=xm(r,i),[Bn]=(0,N.useState)(()=>on.current?.model===Fo?on.current:null),Da=Qc(F);(0,N.useEffect)(()=>()=>n.interrupt(),[n]);let vd=(0,N.useRef)(n);vd.current=n;let{autoBindings:Fs,controlled:Ap,currentBindings:et,applyBindings:_r,bindingsForModel:js,modelEdits:Gn}=r0({modelUrl:r,tilesetUrl:i,models:ae,objectBindings:m,onChange:g,initialBindings:Bn?.objectBindings,initialModelEdits:Bn?.modelBindingEdits}),{isInsideEditor:Wl,activeTab:yd,activeSubTab:Xl}=Xr(),Kf=Wl&&yd==="scene"&&Xl==="Lighting",$l=Jh(d,u),[bo,Zf]=(0,N.useState)(()=>Bn?.lightEdits??{}),[Oa,Na]=(0,N.useState)(Bn?.variantEdit),[Hs,Ep]=(0,N.useState)(Bn?.sectionEdit),He=(0,N.useMemo)(()=>{let A=rb(Be??is,bo);return Oa!==void 0&&(A={...A,model:Nc(A.model,Oa)}),Hs!==void 0&&(A={...A,section:{...fl,...A.section,...Hs}}),A},[Be,bo,Oa,Hs]),wi=(0,N.useRef)(He);wi.current=He;let Nr=(0,N.useMemo)(()=>os(He.model),[He.model]);(0,N.useEffect)(()=>{n.setActiveVariants(Nr)},[Nr,n]);let kp=Be?os(Be.model).join(`
|
|
3738
|
+
`):"";na(()=>{Na(void 0)},[kp,r]);let Rp=JSON.stringify(Be?.section??null);na(()=>{Ep(void 0)},[Rp,r]);let xd=(0,N.useCallback)(A=>{if(Qe){let V=wi.current;Qe({...V,section:{...fl,...V.section,...A}});return}Ep(V=>({...V,...A}))},[Qe]),[jo,ql]=(0,N.useState)(!1),Gs=(0,N.useRef)([]),Ho=(0,N.useCallback)(A=>{let V=wi.current,q=os(V.model),ve=Gs.current,Te=ve.find(Tt=>Tt.variants.some(yn=>yn.name===A)),Wt=q.find(Tt=>Te?Te.variants.some(yn=>yn.name===Tt):Tt===A)??null,St=q.includes(A)?q.filter(Tt=>Tt!==A):th(q,A,ve);if(n.chooseVariant(St.includes(A)?A:null,Wt,Te?.name??null),Qe){Qe({...V,model:Nc(V.model,St)});return}Na(St)},[Qe,n]),In=(0,N.useCallback)(A=>{if(Qe){Qe(rb(wi.current,A));return}Zf(V=>{let q={...V};for(let[ve,Te]of Object.entries(A))q[ve]={...V[ve],...Te};return q})},[Qe]),[nr,xr]=(0,N.useState)(null),[Ws,Go]=(0,N.useState)(null),[Ba,Lp]=(0,N.useState)(null),Si=(0,N.useRef)(0),[Mi,wd]=(0,N.useState)(null),[Sd,Dp]=(0,N.useState)(Bn?.uvCheckerOverride??null),Ia=He.model.renderer==="uv-checker",Wo=cn?Sd??Ia:Ia,Yi=(0,N.useMemo)(()=>{let A=Wo?"uv-checker":Ia?"pbr":He.model.renderer;return A===He.model.renderer?He:{...He,model:{...He.model,renderer:A}}},[Ia,He,Wo]);na(()=>{Dp(null)},[r,He.model.renderer,cn,i]);let Op=(0,N.useMemo)(()=>Kg(Re,He),[Re,He]),Yl=(0,N.useMemo)(()=>({dracoDecoderPath:gt,ktx2TranscoderPath:Yt,meshopt:Kr}),[gt,Yt,Kr]),pn=(0,N.useMemo)(()=>_0(ht),[ht]),ft=(0,N.useRef)(null),[Md,Np]=(0,N.useState)(()=>Bn&&Bn.cameraControllerType!=="pointerLock"?Bn.cameraControllerType:"orbit"),[Kl,Bp]=(0,N.useState)(!1),Xo=H!==void 0?H:Md,Cr=(0,N.useCallback)(A=>{Bp(!1),A!==Xo&&(Np(A),U?.(A))},[Xo,U]),[Xs,$o]=(0,N.useState)(!1),_d=(0,N.useRef)({dragging:!1,endedAt:-1/0}),bn=(0,N.useCallback)(A=>{_d.current={dragging:A,endedAt:A?-1/0:performance.now()},$o(A)},[]),[Kn,za]=(0,N.useState)(null),$s=!!(At||Ne||rn),qs=(0,N.useRef)(Ne);qs.current=Ne,(0,N.useEffect)(()=>{qs.current?.(Kn)},[Kn]),(0,N.useEffect)(()=>{if(rn)return rn.current=()=>za(null),()=>{rn.current=null}},[]),(0,N.useEffect)(()=>{ft.current&&(ft.current.dollySpeed=Math.max(we,0))},[we]),(0,N.useEffect)(()=>{ft.current&&(ft.current.enabled=Ae&&!Xs&&!jo&&!Kn)},[Ae,Xs,jo,Kn]);let Ys=(0,N.useRef)(null),Zl=(0,N.useRef)(new Map),Ki=(0,N.useRef)(null),Jf=(0,N.useRef)(null),Br=(0,N.useRef)(null),Ip=(0,N.useRef)({});(0,N.useEffect)(()=>()=>{for(let A of Object.values(Ip.current))URL.revokeObjectURL(A)},[]);let Dn=(0,N.useRef)({}),vo=(0,N.useRef)(ap),[Cd,Qf]=(0,N.useState)(0),Ir=(0,N.useCallback)(()=>{Qf(A=>A+1)},[]),Va=(0,N.useRef)({}),Et=!!(ae&&ae.length>=1&&!i),Ua=(0,N.useRef)(ae);Ua.current=ae;let Jl=(0,N.useRef)(new Map),{scenesByUrlRef:Fa,cameraHomesByUrlRef:_i,materialRefsByUrlRef:Td,getMaterialRefsForUrl:eg}=n0(Et,ae),Ql=(0,N.useRef)(null),zp=(0,N.useRef)(null),ec=m0(Se),ei=(0,N.useRef)(null),[Vp,Up]=(0,N.useState)(null),tg=(0,N.useCallback)(A=>{ei.current=A,Up(A)},[]);yC({canvasAreaElement:Vp,controlsRef:ft,enabled:yi&&Ae&&!Or&&!vi});let qo=(0,N.useRef)(null),[Yo,tc]=(0,N.useState)({}),[Fp,Pd]=(0,N.useState)(null),[nc,Ad]=(0,N.useState)(null),[ng,rg]=(0,N.useState)(null),[ig,og]=(0,N.useState)(null),[ti,jp]=(0,N.useState)(null),[ag,sg]=(0,N.useState)({}),zn=(0,N.useRef)(null),Ko=(0,N.useRef)(null),Ed=(0,N.useRef)(0),kd=(0,N.useRef)(null),[lg,cg]=(0,N.useState)(0),Ci=(0,N.useRef)(!1),Ks=(0,N.useRef)(!1),Rd=(0,N.useRef)(null),Ld=(0,N.useRef)(!!J);Ld.current=!!J;let ni=(0,N.useRef)(null),Zs=(0,N.useRef)(Bn?.camera?{camera:Bn.camera,home:Bn.home}:null),[rc,Zo]=(0,N.useState)(!!r),[Jo,Qo]=(0,N.useState)(!r||!!Ee||!!J),[fr,Hp]=(0,N.useState)(!1),[ja,Gp]=(0,N.useState)([]),[ic,Dd]=(0,N.useState)(!1),[Wp,Od]=(0,N.useState)(null),[Xp,Ha]=(0,N.useState)(!1),[dg,ug]=(0,N.useState)(0),Nd=(0,N.useRef)(""),$p=(0,N.useRef)(new Set),qp=(0,N.useRef)(""),[Bd,Js]=(0,N.useState)(!1),Id=(0,N.useRef)(new Set),[pg,mg]=(0,N.useState)(0),[zd,hg]=(0,N.useState)(null),[fg,oc]=(0,N.useState)(!1),[Vd,Yp]=(0,N.useState)({total:0,missing:0}),[Ud,E]=(0,N.useState)("loadingModel"),[O,I]=(0,N.useState)(null),z=(0,N.useRef)({}),Y=(0,N.useCallback)(()=>{let A=ft.current;if(!A||ni.current)return;ni.current=w_(A,Ko.current??zn.current);let V=Rd.current;V?.usesSlots&&(_i.current[V.url]=ni.current)},[_i]),[se,ze]=(0,N.useState)(()=>Bn?.explodeFactor??0),[Ue,qe]=(0,N.useState)(!1);na(()=>{ze(0),qe(!1)},[r,i]);let Bt=(0,N.useMemo)(()=>{let A=He.cinematic,V=A?.enabled?{waypoints:A.waypoints,duration:A.duration,loop:A.loop,autoPlay:A.autoPlay}:null;return Jr===void 0?V&&(V.waypoints?.length??0)>=2?V:null:Jr===!1?null:Jr===!0?V??{}:{...V??{},...Jr}},[Jr,He]),[zr,vn]=(0,N.useState)(!1),[ri,yo]=(0,N.useState)(!1),Tr=(0,N.useRef)(!1);(0,N.useEffect)(()=>{vn(!1),yo(!1),Tr.current=!1},[r,i]),(0,N.useEffect)(()=>{if(!(!Bt?.autoPlay||Tr.current)&&fr&&Jo&&!rc){if(Tr.current=!0,Da)return;vn(!0),yo(!1)}},[Bt,fr,Jo,rc,Da]);let Vr=(0,N.useCallback)(()=>{vn(!1),yo(!0)},[]),{captureVideo:Zi,cancelVideo:ac,isRecording:Ur,recording:Pn,progress:g2,onProgress:Gy}=p0({rendererCaptureRef:Br,controlsRef:ft,cinematicConfig:Bt,ready:t.status==="ready"&&fr&&Jo&&!rc,modelUrl:`${r}|${i??""}`,onCaptureStart:Vr});(0,N.useEffect)(()=>{t.status==="lost"&&(n.interrupt(),ac(),vn(!1),ft.current?.stop())},[t.status,ac,n]);let{xrStore:b2,presenterRef:v2,arSupported:Wy,vrSupported:Xy,quickLookSupported:$y,resolvedMobileHandoffUrl:Kp,isMobileHandoffOpen:qy,arOverlay:y2,openMobileHandoff:x2,closeMobileHandoff:w2,openQuickLook:S2,handleARStateChange:M2}=pw({enableXR:Qr,usdzUrl:zs,mobileHandoffUrl:Uo,engagement:n}),sc=s0(Ie),Yy=(0,N.useRef)(sc);Yy.current=sc;let Qs=sc==="webgpu",Zp=Qs?null:b2,Ky=Zr||He.section?.enabled===!0;(0,N.useEffect)(()=>{if(!Qs)return;let A=[Ky&&"the section cut",(Or||vi)&&"the transform gizmo"].filter(Boolean);A.length!==0&&console.info(`[react-immersive] With WebGPU, ${A.join(" and ")} ${A.length>1?"aren't":"isn't"} available; ${A.length>1?"they need":"it needs"} WebGL.`)},[Qs,Ky,Or,vi]);let{annotations:jO,pendingAnnotation:el,setPendingAnnotation:Zy,annotationForm:_2,setAnnotationForm:gg,currentAnnotationIndex:C2,isNavigating:T2,localAnnotationCategories:P2,selectedAnnotationCategories:A2,visibleAnnotations:Jy,availableAnnotationCategories:E2,annotationFiltersVisible:bg,changeAnnotationCategories:k2,sortedAnnotations:vg,currentAnnotation:Qy,setActiveAnnotation:HO,focusAnnotation:GO,startGuidedTour:R2,goToPreviousAnnotation:L2,goToNextAnnotation:D2,stopGuidedTour:O2,closeViewingAnnotation:Jp,activeAnnotation:WO,activeViewingAnnotation:Qp,isGuidedTourActive:Fd,handleAnnotationOk:N2,handleAnnotationCancel:B2,handleAnnotationMarkerClick:ex}=fC({sceneAnnotations:Be?.annotations,controlledAnnotationCategories:Us,onAnnotationCategoriesChange:qi,showAnnotationFilters:go,initialCategories:Bn?.annotationCategories??null,controlledActiveAnnotation:Ve,onActiveAnnotationChange:Q,onAnnotationsChange:pe,controlsRef:ft,sceneRef:zn,annotationWorldPositionsRef:Zl,tourCameraOffsetRef:Ys,initialCameraStateRef:ni,engagement:n,engagementRef:vd}),I2=He.section??fl,tx=yr&&fr&&ja.length>0;Gs.current=ja;let nx=en||be||Se&&ec.supported||Vs&&vg.length>0;z.current=et,(0,N.useEffect)(()=>{if(!Kn)return;let A=et[Kn.objectKey]?.style?.material?.[Kn.textureKey]?.path;(!$s||!A)&&za(null)},[et,$s,Kn]);let yg=(0,N.useRef)({}),[em,z2]=(0,N.useState)({});(0,N.useEffect)(()=>{let A={...em},V=!1,q=new Set;for(let[ve,Te]of Object.entries(et)){q.add(ve);let Wt=Te.style?.material,St=yg.current[ve]??{},Tt={};for(let Wn of Ao){let eo=Wt?.[Wn]?.path;eo&&(Tt[Wn]=eo,eo!==St[Wn]&&(A[ve]!==Wn&&(V=!0),A[ve]=Wn))}let yn=A[ve];if(yn&&!Tt[yn]){let Wn=Ao.find(eo=>!!Tt[eo]);Wn?A[ve]=Wn:delete A[ve],V=!0}yg.current[ve]=Tt}for(let ve of Object.keys(A))q.has(ve)||(delete A[ve],delete yg.current[ve],V=!0);V&&z2(A)},[et]);let V2=(0,N.useMemo)(()=>Object.entries(et).map(([A,V])=>JSON.stringify([A,V.modelObjectId,V.transform??null])).sort().join(""),[et]),{measureMode:ea,measureModeRef:rx,measurePoints:xg,measurementTool:wg,areaClosed:Sg,measurementError:U2,selectMeasurementTool:F2,undoMeasurementPoint:j2,finishMeasureArea:H2,snapMode:G2,setSnapMode:W2,snapPreview:ix,handleMeasurePointerMove:X2,clearSnapPreview:ox,showDimensions:Mg,measureBox:tm,modelBounds:$2,refreshBounds:ax,clearMeasurements:q2,toggleMeasureMode:Y2,toggleDimensions:K2,handleMeasurePointerDown:Z2,handleMeasureClick:J2}=aw({canvasAreaRef:ei,controlsRef:ft,sceneRef:zn,modelUrl:`${r}|${i??""}`,modelRotation:He.model.rotation,bindingTransformSignature:V2,modelLoaded:fr,enabled:Nt&&!Pn}),Q2=(0,N.useCallback)(()=>{if(!ae||ae.length<2)return null;let A=ae.map(V=>{let q=Fa.current[V.url];if(!q)return null;let ve=V.url===r?Va.current:Td.current[V.url]?.current??{};return{scene:q,objectBindings:js(V),matRefs:ve}}).filter(V=>V!==null);return A.length>0?A:null},[ae,r,js]),eA=(0,N.useCallback)(()=>{if(!ae||ae.length<2)return null;let A=ae.map(V=>{let q=Fa.current[V.url];return q?{scene:q,label:V.label||ny(V.url)}:null}).filter(V=>V!==null);return A.length>0?A:null},[ae]),[tA,nA]=(0,N.useState)(34),rA=Y1({sceneRef:zn,materialRefs:Va,rendererCaptureRef:Br,objectBindings:et,downloadFilename:Ce,getAllLoadedModels:Q2,getAllLoadedModelUvSources:eA,captureVideo:Zi}),sx=(0,N.useMemo)(()=>Object.fromEntries(Object.entries(et).filter(([,A])=>A.visible===!1).map(([A])=>[A,!0])),[et]),Ga=(0,N.useMemo)(()=>{let A=new WeakMap,V=new Map,q=new Map;for(let[ve,Te]of Object.entries(et))A.set(Te,ve),V.has(Te.id)||V.set(Te.id,ve),q.has(Te.modelObjectId)||q.set(Te.modelObjectId,ve);return{byReference:A,byId:V,byModelObjectId:q}},[et]),Ji=(0,N.useCallback)(A=>A?Ga.byReference.get(A)??Ga.byModelObjectId.get(A.modelObjectId)??Ga.byId.get(A.id)??null:null,[Ga]),_g=c!==void 0,tl=_g?c??null:ig,an=Ji(tl);(0,N.useEffect)(()=>{n.setSelectedPart(an)},[an,n]);let nl=an?Dn.current[an]??null:null,iA=an?em[an]:void 0,lx=Ji(me?b??nc??ng:null),oA=lx?Dn.current[lx]??null:null,Cg=f??(p?p.map(A=>Dn.current[A]).filter(Boolean):null),nm=(0,N.useMemo)(()=>{let A=Cg??(nl&&et[an??""]?.transform?.shear?[nl]:null);if(!A?.length)return null;let V=new Set(A),q=Object.entries(Dn.current).filter(([,ve])=>V.has(ve)).map(([ve,Te])=>({key:ve,node:Te,transform:et[ve]?.transform}));return q.length>1||q.some(({transform:ve})=>ve?.shear)?q:null},[Cg,et,nl,an]),cx=(0,N.useCallback)(A=>{rg(A),x?.(A)},[x]),dx=le&&tl!==null&&an!==null,rl=(an?et[an]:null)??tl,jd=rl&&(rl.modelObjectId||rl.id)||null,Hd=jd?ag[jd]??null:null,[aA,ux]=(0,N.useState)(""),px=(0,N.useRef)(null);(0,N.useEffect)(()=>{let A=px.current;if(A!==an)if(px.current=an,an){let V=rl?.label||tl?.label||an;ux(tr("objectSelected",{name:V}))}else A&&ux(tr("selectionCleared"))},[an,rl,tl,tr]),(0,N.useEffect)(()=>{X?.(sx)},[sx,X]);let lc=(0,N.useCallback)((A,V)=>{if(Xo==="pointerLock"){Cr("orbit");return}A&&V?n.viewPart({objectId:A.id,objectKey:Ji(A)??(A.modelObjectId||A.id),label:A.label,source:V}):A||n.setSelectedPart(null),_g||og(A),y?.(A)},[Xo,Cr,_g,y,Ji,n]),mx=(0,N.useRef)(Bn?.objectBindings?`${r}
|
|
3739
|
+
${i??""}`:null),rm=(0,N.useCallback)((A,V)=>{if(!Fs)return;let q=`${r}
|
|
3740
|
+
${i??""}`,ve=mx.current===q?z.current:$D;mx.current=q;let Te=K_(A,V);for(let Wt of Object.keys(Te))ve[Wt]&&(Te[Wt]=ve[Wt]);_r(Te)},[Fs,r,i,_r]),{glowMemoryRef:hx,readObjectGlow:im,applyGlow:Tg}=EC({nodeRefsMap:Dn,currentObjectBindingsRef:z,applyObjectBindings:_r}),sA=(0,N.useCallback)(A=>{let V=an;if(!V||!A)return;let q=z.current[V];q&&_r({...z.current,[V]:{...q,transform:{...q.transform,...A}}})},[_r,an]),lA=(0,N.useCallback)(A=>{let V=z.current,q={...V};for(let{key:ve,transform:Te}of A){let Wt=V[ve];Wt&&(q[ve]={...Wt,transform:{...Wt.transform,...Te}})}_r(q)},[_r]),Wa=(0,N.useCallback)((A,V)=>et[A]?A:V?Ji(V):Ga.byId.get(A)??Ga.byModelObjectId.get(A)??null,[et,Ji,Ga]),om=(0,N.useCallback)((A,V)=>{let q=Wa(A),ve=q?et[q]:void 0;!q||!ve||_r({...et,[q]:{...ve,style:V(ve.style)}})},[Wa,et,_r]),xo=(0,N.useCallback)(()=>{if(ti){let A=Yo[ti.objectId]?.hex;A!==void 0&&(om(ti.objectId,V=>({...V,material:{...V?.material,baseColor:A}})),tc(V=>({...V,[ti.objectId]:{}})))}jp(null)},[ti,Yo,om]),Pg=(0,N.useCallback)(()=>{lc(null),Pd(null),xo()},[lc,xo]),cA=(0,N.useCallback)((A,V,q,ve,Te)=>{let Wt=zp.current,St=ei.current,Tt=ft.current?.camera;if(!Wt)return{objectId:A,x:24,y:24};let yn=Wt.getBoundingClientRect(),Wn=12,eo=yn.width-V-Wn,al=yn.height-q-Wn,$a=Math.max(Wn,(yn.width-V)/2),Wd=Math.max(Wn,(yn.height-q)/2),pc=Wa(A,ve),Xd=pc?Dn.current[pc]:null,Pi=(So,Mo)=>Mo<=Wn?Wn:Math.min(Math.max(So,Wn),Mo);if(St&&Tt&&Xd){let So=St.getBoundingClientRect(),Mo=new Oo.Vector3;new Oo.Box3().setFromObject(Xd).getCenter(Mo),Mo.project(Tt);let zg=(Mo.x+1)/2*So.width+(So.left-yn.left),qa=(1-Mo.y)/2*So.height+(So.top-yn.top);return{objectId:A,x:Pi(zg+24,eo),y:Pi(qa-q/2,al)}}let wo=typeof Te?.screenX=="number"?Te.screenX-yn.left:$a,$d=typeof Te?.screenY=="number"?Te.screenY-yn.top:Wd;return{objectId:A,x:Pi(wo,eo),y:Pi($d,al)}},[Wa]),am=kC({setCurrentAction:Pd,bindingKeyIndex:Ga,currentObjectBindings:et,applyObjectBindings:_r,resolveObjectKey:Wa,closeColorPicker:xo,setColorPicker:jp,setMaterialPopupsByObject:sg,setItemMaterials:tc,getPopoverPosition:cA,decalRequestRef:Si,setDecalError:Lp,setDecalDragging:wd,setDecalControl:Go,resolvedSceneConfigRef:wi,applyLightPatches:In,readObjectGlow:im,applyGlow:Tg,glowMemoryRef:hx,setLightControl:xr,onAction:B});(0,N.useEffect)(()=>{if(ti)return window.addEventListener("pointerdown",xo),()=>window.removeEventListener("pointerdown",xo)},[ti,xo]),(0,N.useEffect)(()=>{if(!Qp)return;let A=V=>{if(qo.current&&!qo.current.contains(V.target)){if(V.target.closest?.(".ri-annotationMarker"))return;Jp()}};return document.addEventListener("mousedown",A),document.addEventListener("touchstart",A),()=>{document.removeEventListener("mousedown",A),document.removeEventListener("touchstart",A)}},[Qp,Jp]),(0,N.useEffect)(()=>{if(!el)return;let A=V=>{let q=V.target;if(q.closest?.(".ri-annotationPopup")||q.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let ve=ei.current;!ve||!ve.contains(q)||(Zy(null),gg({title:"",description:""}))};return document.addEventListener("mousedown",A,!0),document.addEventListener("touchstart",A,!0),()=>{document.removeEventListener("mousedown",A,!0),document.removeEventListener("touchstart",A,!0)}},[el]);let{handleFileChange:dA,triggerFileUpload:fx,clearTexture:gx,texturePositioningEnabled:uA,texturePositioningOverrides:pA,setMaterialTextureOffset:mA,setMaterialTextureRotation:hA,endMaterialTexturePositioning:fA}=PC({applyBindingStyle:om,resolveObjectKey:Wa,onTextureUpload:re,fileInputRef:Ki,pendingObjectId:Jf,createdBlobUrls:Ip,texturePositioning:At,setMoveZoomTarget:za}),Ag=(0,N.useRef)(L);Ag.current=L;let Ti=(0,N.useCallback)(()=>{let A=ft.current;!A||!Ag.current||Ag.current({objectBindings:z.current,homeCameraState:ni.current,captureImage:V=>Ur()?Promise.reject(new Error("Wait for video export to finish before capturing an image.")):hm(Br.current,V),captureVideo:Zi,invalidate:()=>Br.current?.invalidate(),rendererBackend:Yy.current??"webgl",raw:{controls:A,scene:zn.current,nodes:Dn.current}})},[Zi,Ur]),Gd=(0,N.useCallback)(async(A=!1)=>{let V=ft.current,q=Ko.current??zn.current;if(!V||!q)return!1;vo.current=ap;try{return await tT(V,q,{flyIn:A,onStart:()=>Qo(!0),invalidate:()=>Br.current?.invalidate()}),(Ko.current??zn.current)!==q?!1:(Ci.current=!0,Y(),Ti(),!0)}catch(ve){return console.error("Fit scene error:",ve),!1}},[Y,Ti]);(0,N.useEffect)(()=>{let A={url:r,usesSlots:Et},V=KC(Rd.current,A,(Ua.current??[]).map(St=>St.url),Fa.current,_i.current);if(Rd.current=A,Ci.current=!1,Ks.current=!1,ni.current=Et?_i.current[r]??null:null,zn.current=null,Ko.current=null,Hp(!1),Gp([]),Dd(!1),Od(null),Ha(!1),Nd.current="",$p.current=new Set,Id.current=new Set,Yp({total:0,missing:0}),E("loadingModel"),I(null),Bn?.model!==xm(r,i)&&(Zs.current=null),!r){Zo(!1),Qo(!0);return}if(Et&&Jl.current.has(r)){Zo(!1),Qo(!0);return}Zo(!V),Qo(V||!!Ee||Ld.current);let q=!1,ve=null,Te=St=>{ve=setTimeout(Wt,St)},Wt=()=>{if(q||Ci.current||Ks.current||Et&&Jl.current.has(r))return;let St=Ko.current??zn.current;if(!ft.current||!St){Te(100);return}Ed.current=ZC(St,ft.current,ye?.maxDistance)??Ed.current;let Tt=Zs.current;if(Tt){Zs.current=null,R0(ft.current,Tt.camera),Ci.current=!0,Tt.home?(ni.current=Tt.home,Et&&(_i.current[r]=Tt.home)):Y(),Ti(),Zo(!1),Qo(!0),Br.current?.invalidate();return}if(x_(ft.current)||V){Ci.current=!0,Y(),Ti(),Zo(!1),Qo(!0),Br.current?.invalidate();return}Ks.current=!0,(Ee?Ee():Ld.current?Promise.resolve(!0):Gd(!0)).then(Wn=>{q||(Ci.current=Wn!==!1,Ci.current?(Y(),Ti(),Zo(!1)):q||Te(100))}).catch(()=>{Ci.current=!1,q||Te(100)}).finally(()=>{q||(Ks.current=!1)})};return Te(50),()=>{q=!0,ve&&clearTimeout(ve)}},[Y,_i,ye?.maxDistance,Gd,r,Ti,Ee,Bn,i,Et]),rT({enabled:lt,canvasAreaElement:Vp,fitAttemptedRef:Ci,fitInFlightRef:Ks,controlsRef:ft,cameraFramingRef:vo,nodeRefsMap:Dn,fitScene:Gd});let sm=(0,N.useCallback)(A=>{let V=ft.current;if(!V)return;let q=A.cameraState;if(q?.position&&q?.target){let[Wt,St,Tt]=q.position,yn=new Oo.Vector3(...q.target);V.setPosition(Wt,St,Tt,!0),V.setTarget(yn.x,yn.y,yn.z,!0),vo.current={kind:"view",target:yn};return}let ve=Ji(A),Te=ve?Dn.current[ve]:null;!ve||!Te||(V.fitToBox(Te,!0,Mf).catch(()=>{}),vo.current={kind:"object",key:ve})},[Ji]);(0,N.useEffect)(()=>{an||(vo.current=ap)},[an]);let Eg=(0,N.useCallback)((A,V="canvas")=>{if(rx.current)return;let q=_d.current;q.dragging||performance.now()-q.endedAt<150||(vn(!1),xo(),Pd(null),lc(A,V),!(wt||!Dt)&&sm(A))},[lc,xo,sm,wt,Dt]),{beginMoveZoom:bx,handleMoveZoomPointerDown:gA}=wC({moveZoomTarget:Kn,setMoveZoomTarget:za,currentObjectBindingsRef:z,materialRefsOut:Va,rendererCaptureRef:Br,canvasAreaRef:ei,canvasAreaElement:Vp,applyBindingStyle:om}),vx=(0,N.useCallback)(A=>{if(!$s)return!1;let V=Ji(A);if(!V)return!1;let q=em[V];return q?(bx({objectKey:V,textureKey:q}),!0):!1},[$s,Ji,em,bx]),kg=(0,N.useRef)(!1),{editDecals:$O,activeDecalMove:cc,addCenteredDecal:qO,decalSizeFor:bA,startImageDecal:YO,decalControlHandlers:vA}=vC({currentObjectBindings:et,currentObjectBindingsRef:z,applyObjectBindings:_r,nodeRefsMap:Dn,controlsRef:ft,decalMove:T,decalDragging:Mi,setDecalDragging:wd,setDecalError:Lp,setDecalControl:Go,decalRequestRef:Si,onTextureUpload:re,currentPanelObjectId:jd,modelUrl:r}),yx=(0,N.useMemo)(()=>T_(et,Yi.styleRules),[et,Yi.styleRules]),[xx,wx]=(0,N.useState)(()=>Bn?.isolation??null);na(()=>{wx(null)},[r]);let dc=gn!==void 0?gn:xx,Rg=(0,N.useCallback)(A=>{gn===void 0&&wx(A),mr?.(A)},[gn,mr]),Qi=(0,N.useMemo)(()=>A_(yx,dc),[yx,dc]),ta=(0,N.useMemo)(()=>Qi.setAside.size>0?Rv(et,dc):null,[Qi,et,dc]),yA=(0,N.useCallback)(A=>{let V=Ji(A),q=V!==null&&ta?.size===1&&ta.has(V);Rg(q?null:{...dc,target:A.id})},[Rg,dc,ta]),{sourceOf:Xa}=Qi,xA=(0,N.useMemo)(()=>bi?j_(et,Qi):[],[bi,et,Qi]),Lg=(0,N.useCallback)(A=>{let V=Xa(A);Eg(V)},[Eg,Xa]),Dg=(0,N.useCallback)(A=>cx(A&&Xa(A)),[cx,Xa]),Og=(0,N.useCallback)((A,V)=>{let q=Xa(A);return M?.({binding:q,...V})===!0?(kg.current=!0,!0):vx(q)},[M,vx,Xa]),Ng=(0,N.useMemo)(()=>S?(A,V)=>S({binding:Xa(A),...V}):void 0,[S,Xa]),Sx=(0,N.useCallback)(A=>{lc(A,"panel"),!wt&&sm(A)},[lc,sm,wt]);(0,N.useEffect)(()=>{Ti()},[Ti,et,Cd]);let Mx=(0,N.useCallback)((A,V)=>{JC(V,Ed.current),D?.(Ma(A,V)),Ti()},[Ti,D]),wA=(0,N.useCallback)(A=>{kd.current=new Set(A.map(V=>V.name)),cg(V=>V+1),rm(A.map(V=>V.name)),s?.(A)},[rm,s]),SA=(0,N.useCallback)(A=>{Ko.current=A,Br.current?.invalidate()},[]),uc=(0,N.useCallback)(A=>{zn.current=A,ax(A),Yp(YC(A));let V=jg(A);hg(V>Zd?V:null),oc(!1),I(null),V>Zd&&E("preparingLargeModel"),Hp(!0),Gp(Oc(A)),Dd(!1),Od(null),Js(!1),i||(s&&s($M(A)),rm(lf(A),ed(A))),C?.(A),_?.(__(A)),Ti()},[rm,Ti,_,s,C,ax,i]),Bg=(0,N.useCallback)(A=>{Zo(!1),Qo(!0),Dd(!0),Od(A),k?.(A)},[k]),{reportError:_x,clearError:Cx}=t0({enabled:Et,activeUrl:r,models:ae,errorsRef:Jl,activeFailed:ic,activeError:Wp,onActiveError:Bg,onExtraError:dn}),MA=(0,N.useCallback)((A,V)=>{!Et||!Ua.current?.some(q=>q.url===A)||(delete Fa.current[A],delete _i.current[A],_x(A,V))},[Et,_x,_i]),_A=(0,N.useCallback)((A,V)=>{!Et||!Ua.current?.some(q=>q.url===A)||(Cx(A),Fa.current[A]=V,A===r&&(Ql.current!==A||zn.current!==V)&&(Ql.current=A,uc(V)),ct?.(A,V))},[Et,r,uc,ct,Cx]);(0,N.useEffect)(()=>{if(!Et||Jl.current.has(r))return;let A=Fa.current[r];A&&(Ql.current===r&&zn.current===A||(Ql.current=r,uc(A)))},[Et,r,fr,uc]);let Tx=(0,N.useCallback)((A,V)=>{Id.current.add(A),mg(q=>q+1),Hn?.(A,V)},[Hn]),Px=Et&&ae?ae.find(A=>A.url===r)?.mergeModels:un,Ax=(0,N.useMemo)(()=>new Set((Px??[]).map(A=>A.url)),[Px]),Ex=(0,N.useCallback)(A=>{A.lengthComputable&&A.total>0&&I(A.loaded/A.total*100),R?.(A)},[R]),kx=(0,N.useCallback)((A,V,q)=>{if(!Qe)return;let ve={...He,lighting:{...He.lighting,lights:He.lighting.lights.map(Te=>Te.id===A?{...Te,position:V,...q?{rotation:q}:{}}:Te)}};Qe(ve)},[He,Qe]);(0,N.useEffect)(()=>{let A=zn.current;if(!fr||!A){Ha(!1);return}if(Array.from(Ax).some(St=>!Id.current.has(St))){Ha(!1);return}let q=Object.entries(et).filter(([,St])=>!St.removed);if(q.length===0){Ha(!1);return}let ve=i?kd.current:(()=>{let St=$p.current;for(let Tt of Object.keys(ci(A).nodesById))St.add(Tt);return St})();if(!ve||ve.size===0){Ha(!1);return}let Te=q.map(([St,Tt])=>Tt.modelObjectId??St).filter(St=>!ve.has(St));Ha(Te.length>0),ug(Te.length);let Wt=Te.join(`
|
|
3741
|
+
`);if(Te.length>0&&Wt!==Nd.current){let St=Te.slice(0,10).map(yn=>`"${yn}"`).join(", "),Tt=Te.length>10?` and ${Te.length-10} more`:"";console.warn(`[react-immersive] ${Te.length} object binding(s) point at nodes this model doesn't have, so they can't be selected: ${St}${Tt}. Each binding's modelObjectId (or its key) must match a node name; log onObjectCatalog to see this model's names.`)}Nd.current=Wt},[fr,et,lg,i,Ax,pg]),(0,N.useEffect)(()=>{if(B||Wl)return;let A=[];for(let[q,ve]of Object.entries(et))for(let Te of ve.actions??[])ou.includes(Te.id)||A.push(`"${Te.id}" on "${ve.label??q}"`);let V=A.join(`
|
|
3742
|
+
`);if(A.length>0&&V!==qp.current){let q=A.slice(0,10).join(", "),ve=A.length>10?` and ${A.length-10} more`:"";console.warn(`[react-immersive] ${A.length} action button(s) do nothing because ModelViewer has no onAction handler: ${q}${ve}. ModelViewer itself handles ${ou.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}qp.current=V},[et,Wl,B]);let Ig=(0,N.useCallback)(async()=>{if(ft.current&&ni.current&&Al(ft.current,ni.current),Ee){await Ee();return}let A=ft.current;if(!A)return;let V=ni.current;try{if(V){vo.current=ap;let q=ef(V,A);await ty(A,()=>A.setLookAt(q[0],q[1],q[2],V.target[0],V.target[1],V.target[2],!0))}else await Gd()}catch(q){console.error("Reset camera error:",q)}},[Ee,Gd]),KO=(0,N.useCallback)(()=>{yo(!1),vn(!0)},[]),ZO=(0,N.useCallback)(()=>{vn(!1)},[]),CA=(0,N.useCallback)(()=>{vn(!1),yo(!0),setTimeout(()=>{Ig()},100)},[Ig]),TA=(0,N.useCallback)((A,V)=>{Mx(A,V)},[Mx]),PA=(0,N.useCallback)(A=>{if(rx.current)return;if(kg.current){kg.current=!1;return}let V=yd==="scene"&&Xl==="Annotations";if(A.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let ve=ei.current,Te=ft.current,Wt=Te?.camera,St=zn.current;if(!ve||!Te||!Wt||!St||!V&&!Te.enabled)return;let Tt=ve.getBoundingClientRect(),yn=(A.clientX-Tt.left)/Tt.width*2-1,Wn=-((A.clientY-Tt.top)/Tt.height)*2+1,eo=new Oo.Raycaster;eo.setFromCamera(new Oo.Vector2(yn,Wn),Wt);let al=eo.intersectObject(St,!0);if(al.length===0)return;if(!V&&P){let Pi=al[0].point,wo=null;for(let[$d,So]of Object.entries(z.current)){if(!So.decals?.length)continue;let Mo=Dn.current[$d];if(!Mo)continue;let zg=Mo.worldToLocal(Pi.clone());for(let qa of So.decals){if(!qa.position)continue;let Vg=zg.distanceTo(new Oo.Vector3(qa.position[0],qa.position[1],qa.position[2]));Vg<=qa.size/2&&(!wo||Vg<wo.distance)&&(wo={binding:So,id:qa.id,distance:Vg})}}if(wo){za(null),P(wo.binding,wo.id);return}}if(!V){let{x:Pi,y:wo,z:$d}=al[0].point;Te.setOrbitPoint(Pi,wo,$d);return}let $a=al[0],Wd=$a.point,pc=St.worldToLocal($a.point.clone()),Xd=[0,0,1];if($a.face){let Pi=$a.face.normal.clone().transformDirection($a.object.matrixWorld).normalize();Xd=[Pi.x,Pi.y,Pi.z]}Zy({worldPosition:[Wd.x,Wd.y,Wd.z],localPosition:[pc.x,pc.y,pc.z],worldNormal:Xd,anchor:mC($a),screenX:A.clientX-Tt.left,screenY:A.clientY-Tt.top}),gg({title:"",description:""})},[yd,Xl,P]);if((0,N.useEffect)(()=>{Un.current={snapshot:()=>{let A=ft.current,V=Zs.current;return{model:Fo,camera:Ci.current&&A?Kc(A):V?.camera,home:ni.current??V?.home,lightEdits:bo,variantEdit:Oa,sectionEdit:Hs,isolation:xx,objectBindings:Ap||Et?void 0:et,modelBindingEdits:Ap?void 0:Gn,explodeFactor:se,cameraControllerType:Md,uvCheckerOverride:Sd,annotationCategories:P2}},captureFrame:()=>{let A=Br.current;return!A||t.status!=="ready"||!fr||!Jo?Promise.resolve(null):v0(A)}}}),(0,N.useEffect)(()=>()=>{Un.current=null},[Un]),$l.status==="checking"){let A=Tp??La;return A?(0,oe.jsx)("div",{className:"ri-viewer ri-viewerPlaceholder",style:{background:Op},children:(0,oe.jsx)(ym,{src:A})}):(0,oe.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,oe.jsx)(sl,{title:tr("verifyingLicense"),message:tr("checkingYourLicenseKey")})})}if($l.status==="invalid")return(0,oe.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,oe.jsx)(sl,{tone:"error",title:tr("invalidLicense"),message:$l.isLocalDomain?$l.reason??tr("licenseHasBeenRevokedOrHasExpired"):tr("failedToLoadPleaseContactTheSiteAdministrator")})});let{materialTextureUrl:Rx,materialTargetTakesImage:Lx,materialTextureOffset:Dx,materialTextureRotationDegrees:Ox,isMaterialTexturePositioning:Nx,materialTextureOnOffsetChange:Bx,materialTextureOnRotationChange:Ix,materialTextureOnEndPositioning:zx}=AC({materialPopup:Hd,resolveObjectKey:Wa,currentObjectBindings:et,nodeRefsMap:Dn,moveZoomTarget:Kn,texturePositioningEnabled:uA,texturePositioningOverrides:pA,setMaterialTextureOffset:mA,setMaterialTextureRotation:hA,endMaterialTexturePositioning:fA}),AA=ei.current?.offsetWidth??600,EA=ei.current?.offsetHeight??400,kA=350,RA=290,LA=el?Math.min(el.screenX+12,AA-kA-8):0,DA=el?Math.min(el.screenY,EA-RA-8):0,OA=xe&&!!r&&!ic&&!fr,il=Qr&&(Zp&&(Wy||Xy)||$y||!!Kp),Vx=(il?1:0)+(cn?1:0),ol=A=>16+A*42+(Nt&&A>Vx?Math.max(0,tA-34):0);return(0,oe.jsxs)("div",{className:"ri-viewer",ref:ec.rootRef,style:{background:Op},"data-reduced-motion":Da?"":void 0,children:[(0,oe.jsx)("div",{className:"ri-visuallyHidden",role:"status","aria-atomic":"true",children:aA}),t.status!=="ready"&&(0,oe.jsx)(TC,{rebuilding:t.status==="rebuilding",onReload:t.reload}),(0,oe.jsxs)("div",{className:"ri-viewerLeft",ref:zp,inert:t.status!=="ready",children:[_e?_e({isOpen:dx,selectedObject:rl,currentAction:Fp,onClose:Pg,onAction:am}):(0,oe.jsx)(Vv,{translateDefaultActions:Fs,isOpen:dx,selectedObject:rl,currentAction:Fp,onClose:Pg,onAction:am,renderActionExtra:A=>{if(A==="change-color"&&ti)return(0,oe.jsx)(Iv,{inline:!0,colorPicker:ti,onClose:xo,itemMaterials:Yo,setItemMaterials:tc});if((A==="change-light-color"||A==="set-brightness")&&nr?.kind===A&&nr.objectId===jd){let V=nr,q=V.target,ve=q.type==="lights"?He.lighting.lights.find(Te=>Te.id===q.lightIds[0])?.color??"#ffffff":Sf(im(q.objectKey).color);return(0,oe.jsx)(p1,{kind:V.kind,color:ve,brightness:V.percent,onColorChange:Te=>{if(q.type==="lights"){In(Object.fromEntries(q.lightIds.map(St=>[St,{color:Te}])));return}let Wt=im(q.objectKey);Tg(q.objectKey,{emissive:Te,emissiveIntensity:Wt.intensity>0?Wt.intensity:hx.current[q.objectKey]??1})},onBrightnessChange:Te=>{if(xr({...V,percent:Te}),q.type==="lights"){In(Object.fromEntries(q.lightIds.map(Wt=>[Wt,{intensity:(q.baseIntensity[Wt]??0)*(Te/100)}])));return}Tg(q.objectKey,{emissive:Sf(im(q.objectKey).color),emissiveIntensity:q.baseIntensity*(Te/100)})},onClose:()=>xr(null)})}if((A==="add-text"||A==="add-image")&&Ws?.kind===A&&Ws.objectId===jd){let V=Ws,q=Wa(V.objectId);if(!q)return null;let ve=A==="add-image";return(0,oe.jsx)(h1,{kind:A,decals:(et[q]?.decals??[]).filter(Te=>!!Te.image===ve),activeId:V.activeId,error:Ba?tr.message(Ba):null,moving:Mi?.objectKey===q&&Mi.decalId===V.activeId,defaultSize:bA(q),...vA(V,q)})}return A==="change-material"&&Hd?(0,oe.jsx)(zv,{inline:!0,triggerFileUpload:fx,materialPopup:Hd,textureUrl:Rx,clearTexture:gx,canPlaceImage:Lx,offset:Dx,rotationDegrees:Ox,onOffsetChange:Bx,onRotationChange:Ix,isPositioning:Nx,onEndPositioning:zx}):null}}),(0,oe.jsxs)("div",{className:`ri-canvasArea ${ea?"ri-canvasArea--measuring":""} ${Jo?"":"ri-canvasArea--positioning"} ${Or||vi?"ri-canvasArea--moveMode":""}`,ref:tg,tabIndex:yi?0:void 0,role:yi?"group":void 0,"aria-label":yi?tr("cameraKeyboardHelp"):void 0,onDoubleClick:PA,onPointerDown:A=>{if(yi&&ei.current?.focus({preventScroll:!0}),Kn){gA(A);return}Z2(A)},onClick:Kn?void 0:J2,onPointerMove:X2,onPointerLeave:ox,onWheel:ox,children:[fr&&!ea&&t.status==="ready"?(0,oe.jsx)(W_,{objects:xA,selectedKey:an,onHighlight:Ad,onSelect:A=>Eg(A,"keyboard"),onClearSelection:()=>{Pg(),w?.()}}):null,$s&&!i&&(Kn||iA)&&(0,oe.jsx)("div",{className:"ri-moveZoomHint",role:"status",style:{position:"absolute",top:12,left:"50%",transform:"translateX(-50%)",zIndex:5,padding:"6px 12px",borderRadius:999,fontSize:12,fontWeight:500,color:"#fff",background:Kn?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:tr(Kn?"texturePositioningHint":"texturePositioningStartHint")}),Xp&&!Bd&&(0,oe.jsx)(SC,{count:dg,onDismiss:()=>Js(!0)}),zd!==null&&!fg&&(0,oe.jsx)(MC,{triangles:zd,offset:Xp&&!Bd,onDismiss:()=>oc(!0)}),Yi.model.renderer==="uv-checker"&&Vd.missing>0&&(0,oe.jsx)(_C,{missing:Vd.missing,total:Vd.total}),(0,oe.jsx)("input",{ref:Ki,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:dA}),(0,oe.jsx)(vc,{onError:t.fail,children:sc?(0,oe.jsxs)(wb,{backend:sc,onRendererCreated:t.onRendererCreated,suspended:t.status!=="ready",paused:xi&&!Pn,camera:J,backgroundColor:Re,shadows:nt&&He.shadows.enabled,sceneConfig:Yi,selectedObjectRef:nl,selectedObjectRefs:Cg,selectedObjectOutlineColor:v,hoveredObjectRef:oA,highlightOnHover:me,renderMode:nn,maxDpr:Ot,reduceGpuLoad:pn,xrStore:Zp,rendererCaptureRef:Br,preserveDrawingBuffer:at,children:[(0,oe.jsx)(Tb,{lightingConfig:He.lighting,shadowConfig:He.shadows,shadowsEnabled:nt,environmentRotation:He.environment.rotation,environmentConfig:He.environment,modelBounds:$2,objectBindings:et,nodeRefs:Dn}),Kf&&He.lighting.lights.map(A=>!A.visible||A.type==="none"||A.type==="hemisphere"||A.attachment?null:(0,oe.jsx)(lC,{light:A,position:A.position,rotation:A.rotation,color:A.color,intensity:A.intensity,visible:A.visible,onPositionChange:V=>kx(A.id,V,A.rotation),onRotationChange:V=>kx(A.id,A.position,V),onDraggingChange:$o},A.id)),(0,oe.jsx)(Dv,{setAside:Qi.setAside,nodeRefs:Dn}),!Qs&&(0,oe.jsx)(Bv,{section:He.section??fl,box:tm,modelRef:zn,showHandle:Zr,onPositionChange:A=>xd({position:A}),onDraggingChange:ql}),(0,oe.jsx)(_b,{controlsRef:ft,onCameraChange:TA,cameraLimits:ye,controllerType:Xo,onPointerLockExit:()=>Cr("orbit"),reducedMotion:Da}),(0,oe.jsx)(ey,{enabled:Pn||ea||cc||Da||Xo==="pointerLock"?!1:ee??He.model.autoRotate??!1,speed:ke??He.model.autoRotateSpeed??1,controlsRef:ft}),W&&!Pn&&(0,oe.jsx)(_f.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{ft.current?.update(0),Br.current?.invalidate()},children:(0,oe.jsx)(_f.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),(Or||vi)&&!Qs&&!nm&&nl&&an&&(0,oe.jsx)(Kv,{node:nl,space:Ra,moveEnabled:Or,scaleEnabled:vi,onTransformChange:sA,transform:et[an]?.transform,onDraggingChange:A=>{bn(A),tl&&h?.(tl,A)}},an),(Or||vi)&&!Qs&&nm&&(0,oe.jsx)(Qv,{entries:nm,referenceNode:nl,space:Ra,moveEnabled:Or,scaleEnabled:vi,onTransformChange:lA,onDraggingChange:A=>{bn(A);for(let V of nm){let q=et[V.key];q&&h?.(q,A)}}}),cc&&(0,oe.jsx)(U1,{target:cc,nodes:Dn,controls:ft}),(()=>{let A=Et&&ae?(0,oe.jsxs)(oe.Fragment,{children:[ae.map(V=>(0,oe.jsx)(SS,{entry:{...V,objectBindings:V.url===r?Qi.bindings:js(V)},isActive:V.url===r,pulses:Qi.pulses,decoderConfig:Yl,itemMaterials:Yo,sceneConfig:Yi,zoomOnSelected:Dt,highlightOnHover:me,explodeFactor:se,suspendBindingTransforms:Xs,onLoadProgress:Ex,onAnimationsReady:Me,onModelAnimationsReady:Pe,onLoadError:MA,onModelLoaded:_A,selectedItem:an,panelHoveredItem:b??nc,onItemClick:Lg,onItemDoubleClick:Og,onItemContextMenu:Ng,onItemHover:Dg,nodeRefsOut:Dn,onNodeRefsChange:Ir,materialRefsOut:V.url===r?Va:eg(V.url),onMergeModelLoaded:Tx,onMergeModelError:hr},V.url)),(0,oe.jsx)(Gh,{annotations:Jy,sceneConfig:He,activeAnnotation:Qp,popupRef:qo,canvasRootRef:ei,worldPositionsRef:Zl,modelLoaded:fr,onAnnotationClick:ex,onCloseAnnotation:Jp,hideCloseButton:Fd,showAnnotationOnHover:$i}),(0,oe.jsx)(vf,{annotation:Qy,enabled:Fd&&!Pn,controlsRef:ft,offsetRef:Ys}),Pn?(0,oe.jsx)(bc,{controlsRef:ft,sceneRef:zn,config:Pn.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:Pn.onStarted,onFinished:Pn.onFinished,onProgress:Gy},"video-export"):Bt&&(0,oe.jsx)(bc,{controlsRef:ft,sceneRef:zn,config:Bt,playing:zr&&!ea,resetOnPlay:ri,onFinished:()=>{vn(!1),yo(!1)},onUserInteract:()=>{vn(!1)}},"cinematic-preview"),Nt&&(0,oe.jsx)(qh,{points:xg,unit:Is,box:tm,showDimensions:Mg,tool:wg,areaClosed:Sg,snapPreview:ea?ix:null})]}):(0,oe.jsx)(Co,{onLoadError:Bg,children:(0,oe.jsxs)(N.Suspense,{fallback:null,children:[i?(0,oe.jsx)(bv,{url:i,rotation:Yi.model.rotation,errorTarget:o,cacheSize:a,decoderConfig:Yl,objectBindings:Qi.bindings,itemMaterials:Yo,sceneConfig:Yi,selectedItem:an,panelHoveredItem:b??nc,highlightOnHover:me,onItemClick:Lg,onItemHover:Dg,onItemDoubleClick:Og,onItemContextMenu:Ng,onObjectCatalog:wA,onTilesetBounds:SA,onModelLoaded:uc,onLoadError:Bg,nodeRefsOut:Dn,onNodeRefsChange:Ir,materialRefsOut:Va,explodeFactor:se,suspendBindingTransforms:Xs}):(0,oe.jsx)(Cu,{url:r,modelFormat:l,objectBindings:Qi.bindings,selectedItem:an,itemMaterials:Yo,onItemClick:Lg,onItemDoubleClick:Og,onItemContextMenu:Ng,onItemHover:Dg,onModelLoaded:uc,onAnimationsReady:Me,nodeRefsOut:Dn,onNodeRefsChange:Ir,materialRefsOut:Va,panelHoveredItem:b??nc,sceneConfig:Yi,zoomOnSelected:Dt,highlightOnHover:me,decoderConfig:Yl,onLoadProgress:Ex,explodeFactor:se,suspendBindingTransforms:Xs,originalNodePoses:dt,mergeModels:un,onMergeModelLoaded:Tx,onMergeModelError:hr,pulses:Qi.pulses}),Tn?.map(V=>(0,oe.jsx)(wS,{url:V,decoderConfig:Yl,onLoadError:dn,onModelLoaded:ct?q=>ct(V,q):void 0},V)),(0,oe.jsx)(Gh,{annotations:Jy,sceneConfig:He,activeAnnotation:Qp,popupRef:qo,canvasRootRef:ei,worldPositionsRef:Zl,modelLoaded:fr,onAnnotationClick:ex,onCloseAnnotation:Jp,hideCloseButton:Fd,showAnnotationOnHover:$i}),(0,oe.jsx)(vf,{annotation:Qy,enabled:Fd&&!Pn,controlsRef:ft,offsetRef:Ys}),Pn?(0,oe.jsx)(bc,{controlsRef:ft,sceneRef:zn,config:Pn.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:Pn.onStarted,onFinished:Pn.onFinished,onProgress:Gy},"video-export"):Bt&&(0,oe.jsx)(bc,{controlsRef:ft,sceneRef:zn,config:Bt,playing:zr&&!ea,resetOnPlay:ri,onFinished:()=>{vn(!1),yo(!1)},onUserInteract:()=>{vn(!1)}},"cinematic-preview"),Nt&&(0,oe.jsx)(qh,{points:xg,unit:Is,box:tm,showDimensions:Mg,tool:wg,areaClosed:Sg,snapPreview:ea?ix:null})]})},i??r);return Zp?(0,oe.jsx)(o_,{ref:v2,box:tm,scaleMode:ka,onARStateChange:M2,children:A}):A})(),ce&&(0,oe.jsx)(N.Suspense,{fallback:null,children:ce})]}):null}),(0,oe.jsx)(ym,{src:Tp??La,hidden:fr&&Jo}),G&&(0,oe.jsx)("div",{className:"ri-overlay",children:G}),xe&&r&&ic&&(0,oe.jsx)(CC,{failure:wc(Wp,i||r,i?void 0:l,e),source:i||r}),(0,oe.jsx)(sf,{visible:OA,message:tr(Ud,{millions:Math.round((zd??0)/1e6)}),progress:O??void 0}),il&&(0,oe.jsx)(jC,{top:ol(0),xrStore:Zp,arSupported:Wy,vrSupported:Xy,quickLookSupported:$y,mobileHandoffUrl:Kp,mobileHandoffOpen:qy,onQuickLook:S2,onOpenMobileHandoff:x2}),y2,qy&&Kp&&(0,oe.jsx)(HC,{url:Kp,onClose:w2}),cn&&(0,oe.jsx)(GC,{top:ol(il?1:0),active:Wo,onToggle:()=>Dp(A=>!(A??Ia))}),Nt&&(0,oe.jsx)(wv,{top:ol(Vx),active:ea,disabled:!!Pn,tool:wg,snap:G2,pointCount:xg.length,areaClosed:Sg,error:U2,showDimensions:Mg,onToggle:()=>{vn(!1),Y2()},onTool:F2,onSnap:W2,onUndo:j2,onClear:q2,onFinishArea:H2,onDimensions:K2,onHeight:nA}),jn&&(0,oe.jsx)(WC,{top:ol((il?1:0)+(cn?1:0)+(Nt?1:0)),open:Ue,factor:se,onToggleOpen:()=>qe(A=>!A),onFactorChange:ze}),Zr&&!Qs&&(0,oe.jsx)(XC,{top:ol((il?1:0)+(cn?1:0)+(Nt?1:0)+(jn?1:0)),section:I2,onChange:xd}),Bt&&(0,oe.jsx)($C,{top:ol((il?1:0)+(cn?1:0)+(Nt?1:0)+(jn?1:0)+(Zr?1:0)),playing:zr,disabled:!!Pn||ea,onPlay:()=>{yo(!1),vn(!0)},onPause:()=>vn(!1),onStop:CA}),Pn&&(0,oe.jsx)(qC,{progress:g2,onCancel:ac}),Et&&ae&&ae.length>1&&Pp&&(0,oe.jsx)("div",{className:"ri-modelSwitcher",style:{top:`${ol((il?1:0)+(cn?1:0)+(Nt?1:0)+(jn?1:0)+(Zr?1:0)+(Bt?1:0))}px`},role:"group","aria-label":"Switch model",children:ae.map(A=>(0,oe.jsx)("button",{type:"button",className:`ri-modelSwitcherButton ${A.url===r?"ri-modelSwitcherButton--active":""}`,onClick:()=>Pp?.(A.url),title:`Switch to ${A.label||ny(A.url)}`,"aria-pressed":A.url===r,children:A.label||ny(A.url)},A.url))}),(bg||tx||cc||Xi&&ta)&&(0,oe.jsxs)("div",{className:`ri-bottomStack ${nx?"ri-bottomStack--aboveButtons":""} ${bg?"ri-bottomStack--annotationFilters":""}`,children:[bg&&(0,oe.jsx)(LC,{categories:E2,selected:A2,disabled:!!Pn,onChange:k2}),cc&&(0,oe.jsx)(DC,{onCancel:cc.onCancel}),Xi&&ta&&(0,oe.jsx)(OC,{label:ta.size===1?tr("isolatedObject",{name:(()=>{let[A]=ta;return et[A]?.label??A})()}):tr("isolatedObjects",{count:ta.size}),onShowAll:()=>Rg(null)}),tx&&(0,oe.jsx)(NC,{groups:ja,activeVariants:Nr,onSelect:Ho})]}),nx&&(0,oe.jsxs)("div",{className:"ri-buttonContainer",children:[(0,oe.jsx)("div",{className:"ri-tourControls",children:Vs&&vg.length>0&&(0,oe.jsx)(BC,{count:vg.length,active:Fd,index:C2,navigating:T2,onStart:R2,onPrevious:L2,onNext:D2,onStop:O2})}),(0,oe.jsxs)("div",{className:"mv-rightControls",children:[Se&&ec.supported&&(0,oe.jsx)(IC,{fullscreen:ec,disabled:!!Pn}),en&&(0,oe.jsx)("button",{className:"mv-resetButton",onClick:Ig,disabled:!!Pn,title:tr("resetCameraView"),children:(0,oe.jsx)(iT.RotateCcw,{})}),(0,oe.jsx)(zC,{open:Kl,current:Xo,disabled:!!Pn,onSelect:Cr,onToggle:()=>Bp(A=>!A)}),be&&(0,oe.jsx)(VC,{menu:rA,recording:!!Pn,hasScene:!!zn.current,canCaptureImage:at||sc==="webgpu",canRecord:fr&&Jo&&!rc,hasCinematic:!!Bt})]})]}),el&&(0,oe.jsx)(UC,{x:LA,y:DA,form:_2,setForm:gg,onOk:N2,onCancel:B2})]}),_e&&ti&&(0,oe.jsx)(Iv,{colorPicker:ti,onClose:xo,itemMaterials:Yo,setItemMaterials:tc}),_e&&Hd&&(0,oe.jsx)(zv,{triggerFileUpload:fx,materialPopup:Hd,textureUrl:Rx,clearTexture:gx,canPlaceImage:Lx,offset:Dx,rotationDegrees:Ox,onOffsetChange:Bx,onRotationChange:Ix,isPositioning:Nx,onEndPositioning:zx})]}),Gt&&(0,oe.jsx)("div",{className:"ri-viewerRight",inert:t.status!=="ready",children:it?it({objectBindings:et,onAction:am,onFocus:Sx,onHover:Ad}):(0,oe.jsx)(Uv,{objectBindings:et,onAction:am,onFocus:Sx,onHover:Ad,isolatedKeys:ta,onIsolate:Xi?yA:void 0})}),$e&&(0,oe.jsx)(y_,{controlsRef:ft,enabled:t.status==="ready",opacity:tn,moveSensitivity:Ln,position:fn})]})}var Ms=require("react");var sp=require("three"),Tf=1e-6;function oT(){let e=[null,null],t=0,n=!1,r=new sp.Vector3,i=new sp.Vector3,o=new sp.Vector3,a=new sp.Vector3,s=(d,u)=>{let m=e[d],c=e[u];if(!m||!c)return;m.controls.getPosition(r,!1),m.controls.getTarget(o,!1),c.controls.getPosition(i,!1),c.controls.getTarget(a,!1);let p=m.controls.camera.zoom;if(!(r.distanceToSquared(i)<Tf&&o.distanceToSquared(a)<Tf&&Math.abs(p-c.controls.camera.zoom)<Tf)){n=!0;try{Math.abs(p-c.controls.camera.zoom)>=Tf&&c.controls.zoomTo(p,!1),c.controls.setLookAt(r.x,r.y,r.z,o.x,o.y,o.z,!1)}finally{n=!1}c.invalidate()}},l=d=>{n||(d===t?s(d,1-d):s(t,d))};return{attach(d,u,m){let c=e[d];if(c?.controls===u){c.invalidate=m;return}c?.detach();let p=()=>l(d),f=()=>{t=d};u.addEventListener("update",p),u.addEventListener("controlstart",f),e[d]={controls:u,invalidate:m,detach:()=>{u.removeEventListener("update",p),u.removeEventListener("controlstart",f)}},s(t,1-t)},get leader(){return t},detach(){e.forEach(d=>d?.detach()),e[0]=e[1]=null}}}var Ca=require("react/jsx-runtime"),Pf=.05,aT=.2,sT=e=>Math.min(Math.max(Number.isFinite(e)?e:.5,0),1);function lT({split:e,onSplitChange:t,labels:n,containerRef:r,beforeAction:i}){let o=Fe(),a=m=>{let c=r.current?.getBoundingClientRect();c&&c.width>0&&t(sT((m-c.left)/c.width))},s=m=>{m.preventDefault(),m.stopPropagation(),m.currentTarget.setPointerCapture(m.pointerId),m.currentTarget.focus(),a(m.clientX)},l=m=>{m.currentTarget.hasPointerCapture(m.pointerId)&&a(m.clientX)},d=m=>{let c={ArrowLeft:e-Pf,ArrowDown:e-Pf,ArrowRight:e+Pf,ArrowUp:e+Pf,PageDown:e-aT,PageUp:e+aT,Home:0,End:1}[m.key];c!==void 0&&(m.preventDefault(),m.stopPropagation(),t(sT(c)))},u=Math.round(e*100);return(0,Ca.jsxs)(Ca.Fragment,{children:[(0,Ca.jsxs)("span",{className:"ri-compare__label ri-compare__label--before",hidden:e<.08,children:[n[0],i]}),(0,Ca.jsx)("span",{className:"ri-compare__label ri-compare__label--after",hidden:e>.92,children:n[1]}),(0,Ca.jsx)("div",{className:"ri-compare__divider",role:"slider",tabIndex:0,"aria-label":o("compareDivider"),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":u,"aria-valuetext":o("compareDividerValue",{before:n[0],after:n[1],percent:u,rest:100-u}),onPointerDown:s,onPointerMove:l,onKeyDown:d,children:(0,Ca.jsx)("span",{className:"ri-compare__handle","aria-hidden":"true"})})]})}var lp=require("react/jsx-runtime");function cT({liveViewerRef:e,renderBefore:t,split:n,onSplitChange:r,labels:i,beforeAction:o}){let a=(0,Ms.useRef)(null),s=(0,Ms.useMemo)(()=>oT(),[]);(0,Ms.useEffect)(()=>()=>s.detach(),[s]);let l=(0,Ms.useCallback)(d=>{let u=e.current;u&&s.attach(0,u.raw.controls,u.invalidate),s.attach(1,d.raw.controls,d.invalidate)},[s,e]);return(0,lp.jsxs)("div",{ref:a,className:"ri-compare ri-compare--overlay",style:{"--ri-compare-split":`${n*100}%`},children:[(0,lp.jsx)("div",{className:"ri-compare__layer ri-compare__layer--before",children:t(l)}),(0,lp.jsx)(lT,{split:n,onSplitChange:r,labels:i,containerRef:a,beforeAction:o})]})}var pr=require("react"),ry={currentClip:null,isPlaying:!1,speed:1,time:0,duration:0,active:[]};function dT(){let e=(0,pr.useRef)(null),t=(0,pr.useRef)(null),[n,r]=(0,pr.useState)([]),[i,o]=(0,pr.useState)([]),[a,s]=(0,pr.useState)(ry);(0,pr.useEffect)(()=>()=>{t.current?.()},[]);let l=(0,pr.useCallback)(b=>{t.current?.(),e.current=b,r(b.clips),o(b.clipDetails??b.clips.map(g=>({sourceName:g,duration:0}))),s(b.getState?.()??ry),t.current=b.subscribe?.(s)??null},[]),d=(0,pr.useCallback)(()=>{t.current?.(),t.current=null,e.current=null,r([]),o([]),s(ry)},[]),u=(0,pr.useCallback)(b=>{let g=e.current;g&&(b(g),!g.subscribe&&g.getState&&s(g.getState()))},[]),m=(0,pr.useCallback)((b,g)=>u(y=>y.play(b,g)),[u]),c=(0,pr.useCallback)(b=>u(g=>g.pause(b)),[u]),p=(0,pr.useCallback)(b=>u(g=>g.stop(b)),[u]),f=(0,pr.useCallback)((b,g)=>u(y=>y.setSpeed(b,g)),[u]),v=(0,pr.useCallback)((b,g)=>u(y=>y.seek?.(b,g)),[u]);return{clips:n,clipDetails:i,...a,play:m,pause:c,stop:p,setSpeed:f,seek:v,handleAnimationsReady:l,clearAnimations:d}}var kn=require("react"),YD={currentClip:null,isPlaying:!1,speed:1,time:0,duration:0,active:[]};function KD(e,t){let n=[],r=new Map,i=new Map,o=new Map,a=new Set;for(let s of e){let l=t.get(s);if(!l)continue;let d=l.clipDetails??l.clips.map(m=>({sourceName:m,duration:0}));o.set(s,d);let u=new Map;for(let m of d){let c=m.sourceName;for(let p=2;a.has(c);p+=1)c=`${m.sourceName} (${p})`;a.add(c),n.push({sourceName:c,duration:m.duration}),r.set(c,{url:s,sourceName:m.sourceName}),u.set(m.sourceName,c)}i.set(s,u)}return{clipDetails:n,targets:r,displayNamesByUrl:i,clipDetailsByUrl:o}}function ZD(e,t,n){let r=[];for(let i of e){let o=t.get(i),a=n.get(i);if(!(!o||!a))for(let s of o.active){let l=a.get(s.clip);l&&r.push({...s,clip:l})}}return r}function uT(e){let t=(0,kn.useRef)(new Map),n=(0,kn.useRef)(new Map),r=(0,kn.useRef)(new Map),[i,o]=(0,kn.useState)(0),[a,s]=(0,kn.useState)(0),l=(0,kn.useCallback)((h,w)=>{if(t.current.get(h)===w)return;r.current.get(h)?.(),r.current.delete(h),t.current.set(h,w),n.current.set(h,w.getState?.()??YD);let C=w.subscribe?.(_=>{n.current.set(h,_),s(k=>k+1)});C&&r.current.set(h,C),o(_=>_+1)},[]);(0,kn.useEffect)(()=>{let h=new Set(e),w=!1;for(let C of[...t.current.keys()])h.has(C)||(r.current.get(C)?.(),r.current.delete(C),t.current.delete(C),n.current.delete(C),w=!0);w&&o(C=>C+1)},[e]),(0,kn.useEffect)(()=>()=>r.current.forEach(h=>h()),[]);let{clipDetails:d,targets:u,displayNamesByUrl:m,clipDetailsByUrl:c,hasModels:p}=(0,kn.useMemo)(()=>({...KD(e,t.current),hasModels:t.current.size>0}),[e,i]),f=(0,kn.useRef)(u);f.current=u;let v=(0,kn.useMemo)(()=>ZD(e,n.current,m),[e,m,a]),b=(0,kn.useCallback)((h,w,C)=>{C(),!w.subscribe&&w.getState&&(n.current.set(h,w.getState()),s(_=>_+1))},[]),g=(0,kn.useCallback)(h=>{t.current.forEach((w,C)=>b(C,w,()=>h(w,C)))},[b]),y=(0,kn.useCallback)((h,w)=>{let C=f.current.get(h);if(!C)return;let _=t.current.get(C.url);_&&b(C.url,_,()=>w(_,C))},[b]),x=(0,kn.useCallback)((h,w)=>y(h,(C,_)=>C.play(_.sourceName,w)),[y]),M=(0,kn.useCallback)(h=>h===void 0?g(w=>w.pause()):y(h,(w,C)=>w.pause(C.sourceName)),[g,y]),P=(0,kn.useCallback)(h=>h===void 0?g(w=>w.stop()):y(h,(w,C)=>w.stop(C.sourceName)),[g,y]),S=(0,kn.useCallback)((h,w)=>w===void 0?g(C=>C.setSpeed(h)):y(w,(C,_)=>C.setSpeed(h,_.sourceName)),[g,y]),T=(0,kn.useCallback)((h,w)=>w===void 0?g(C=>C.seek?.(h)):y(w,(C,_)=>C.seek?.(h,_.sourceName)),[g,y]);return{clipDetails:d,clipDetailsByUrl:c,displayNamesByUrl:m,hasModels:p,active:v,play:x,pause:M,stop:P,setSpeed:S,seek:T,handleModelAnimationsReady:l}}var Rf=require("react");function Af(e){return{annotations:e.annotations,animations:e.animations,activeVariants:e.model.activeVariants}}function No(e,t){return{...e,model:{...e.model,activeVariants:t?.activeVariants??[]},annotations:t?.annotations??[],animations:t?.animations??is.animations}}function cp(e,t){let n=new Map(e.animations.clips.map(o=>[o.sourceName,o])),r=t.map(({sourceName:o})=>n.get(o)??{sourceName:o,displayName:o,hidden:!1,loopMode:"repeat",speed:1}),i=e.animations.autoplayClip&&r.some(o=>o.sourceName===e.animations.autoplayClip&&!o.hidden)?e.animations.autoplayClip:null;return i===e.animations.autoplayClip&&r.length===e.animations.clips.length&&r.every((o,a)=>o===e.animations.clips[a])?e.animations:{clips:r,autoplayClip:i}}function Ef(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function dp(e,t){if(!Ef(e)||!Ef(t))return t??e;let n={...e};for(let[r,i]of Object.entries(t)){let o=n[r];n[r]=Ef(o)&&Ef(i)?dp(o,i):i}return n}var pi=require("react"),JD=100;function _s(e,t){switch(t.type){case"history":return t.updater(e);case"set":{let n=typeof t.updater=="function"?t.updater(e.present):t.updater;if(n===e.present)return e;let r=t.track?e.edits+1:e.edits,i=!t.track&&e.edits===0?n:e.baseline;return t.track?t.coalesce?{...e,present:n,future:[],edits:r,baseline:i}:{past:[...e.past,e.present].slice(-JD),present:n,future:[],edits:r,baseline:i}:{...e,present:n,baseline:i}}case"undo":{if(e.past.length===0)return e;let n=e.past[e.past.length-1];return{...e,past:e.past.slice(0,-1),present:n,future:[e.present,...e.future],edits:e.edits+1}}case"redo":{if(e.future.length===0)return e;let[n,...r]=e.future;return{...e,past:[...e.past,e.present],present:n,future:r,edits:e.edits+1}}case"reset":return{past:[],present:t.value,future:[],edits:t.track?e.edits+1:0,baseline:t.track?e.baseline:t.value}}}function kf(e,t=600){let[n,r]=(0,pi.useReducer)(_s,{past:[],present:e,future:[],edits:0,baseline:e}),i=(0,pi.useRef)(0),o=(0,pi.useCallback)(p=>{let f=Date.now(),v=f-i.current<t;i.current=f,r({type:"set",updater:p,coalesce:v,track:!0})},[t]),a=(0,pi.useCallback)(p=>{let f=Date.now()-i.current<t;r({type:"set",updater:p,coalesce:f,track:!1})},[t]),s=(0,pi.useCallback)(p=>{i.current=0,r({type:"set",updater:p,coalesce:!1,track:!0})},[]),l=(0,pi.useCallback)(p=>{r({type:"history",updater:p})},[]),d=(0,pi.useCallback)(p=>{i.current=0,r({type:"history",updater:typeof p=="function"?p:()=>p})},[]),u=(0,pi.useCallback)(()=>{i.current=0,r({type:"undo"})},[]),m=(0,pi.useCallback)(()=>{i.current=0,r({type:"redo"})},[]),c=(0,pi.useCallback)((p,f)=>{i.current=0,r({type:"reset",value:p,track:f?.asEdit??!1})},[]);return{value:n.present,setValue:o,setValueUntracked:a,setValueAsStep:s,updateHistory:l,restoreSnapshot:d,snapshot:n,undo:u,redo:m,reset:c,canUndo:n.past.length>0,canRedo:n.future.length>0,edits:n.edits,baseline:n.baseline}}function QD(e,t){return e.sourceName===t.sourceName&&e.displayName===t.displayName&&e.hidden===t.hidden&&e.loopMode===t.loopMode&&e.speed===t.speed}function pT(e,t,n,r){let i=No(t,e.modelSettings);if(i.animations===n)return e;let o={...i,animations:n},a=e.sceneHistory??{past:[],present:i,future:[],baseline:i,edits:0};return{...e,modelSettings:Af(o),sceneHistory:_s(a,{type:"set",updater:o,track:r,coalesce:!1})}}function mT({modelUrl:e,sceneConfig:t,setSceneConfig:n,setSceneConfigUntracked:r,parkedModels:i,setParkedModels:o,animations:a,markSessionEdited:s}){let{clipDetailsByUrl:l,displayNamesByUrl:d}=a;(0,Rf.useEffect)(()=>{let c=e?l.get(e):void 0;c&&r(p=>{let f=cp(p,c);return f===p.animations?p:{...p,animations:f}}),o(p=>{let f=!1,v=p.map(b=>{let g=l.get(b.url);if(!g)return b;let y=No(t,b.modelSettings),x=pT(b,t,cp(y,g),!1);return f||(f=x!==b),x});return f?v:p})},[l,e,t,r,o]);let u=(0,Rf.useMemo)(()=>{let c=[],p=null;for(let[f,v]of d){let b=f===e?t:No(t,i.find(y=>y.url===f)?.modelSettings),g=cp(b,l.get(f)??[]);for(let y of g.clips){let x=v.get(y.sourceName);x&&c.push({...y,sourceName:x,displayName:y.displayName===y.sourceName?x:y.displayName})}p??(p=g.autoplayClip?v.get(g.autoplayClip)??null:null)}return{clips:c,autoplayClip:p}},[d,l,e,t,i]);return{config:u,onChange:c=>{let p=new Map(u.clips.map(b=>[b.sourceName,b])),f=new Map(c.clips.map(b=>[b.sourceName,b])),v=(b,g)=>{let y=d.get(b);if(!y)return g.animations;let x=cp(g,l.get(b)??[]),M=x.clips.map(S=>{let T=y.get(S.sourceName),h=T?f.get(T):void 0;if(!h)return S;let w={...h,sourceName:S.sourceName,displayName:h.displayName===p.get(T)?.displayName?S.displayName:h.displayName};return QD(S,w)?S:w}),P=c.autoplayClip===u.autoplayClip?x.autoplayClip:[...y].find(([,S])=>S===c.autoplayClip)?.[0]??null;return P===x.autoplayClip&&M.every((S,T)=>S===x.clips[T])?x:{clips:M,autoplayClip:P}};e&&n(b=>{let g=v(e,b);return g===b.animations?b:{...b,animations:g}}),o(b=>b.map(g=>pT(g,t,v(g.url,No(t,g.modelSettings)),!0))),s()}}}var eO="react-immersive:binding-builder";var Cs="session",Ts="model",Ps="textures",oy="current";function up(e){return e.kind==="file"?`file:${e.key}`:`url:${e.url}`}var Bl=null;function pp(){return Bl||(Bl=new Promise((e,t)=>{if(typeof indexedDB>"u"){t(new Error("IndexedDB is not available in this environment."));return}let n=indexedDB.open(eO,2);n.onupgradeneeded=()=>{let r=n.result;r.objectStoreNames.contains(Cs)||r.createObjectStore(Cs),r.objectStoreNames.contains(Ts)||r.createObjectStore(Ts),r.objectStoreNames.contains(Ps)||r.createObjectStore(Ps)},n.onsuccess=()=>{let r=n.result;r.onversionchange=()=>{r.close(),Bl=null},e(r)},n.onerror=()=>t(n.error??new Error("Failed to open IndexedDB."))}),Bl.catch(()=>{Bl=null}),Bl)}function ad(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error??new Error("IndexedDB transaction failed.")),e.onabort=()=>n(e.error??new Error("IndexedDB transaction aborted."))})}function ay(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(e.error??new Error("IndexedDB request failed."))})}function Bo(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function sy(e){return!Bo(e)||typeof e.name!="string"?!1:e.kind==="file"?typeof e.key=="string":e.kind==="url"?typeof e.url=="string":!1}function fT(e){return Bo(e)&&sy(e.model)&&typeof e.namePrefix=="string"}function tO(e){return!Bo(e)||!sy(e.model)||!Bo(e.bindings)||!Bo(e.originalTransforms)||e.modelSettings!==void 0&&(!Bo(e.modelSettings)||!Array.isArray(e.modelSettings.annotations)||!Bo(e.modelSettings.animations)||!Array.isArray(e.modelSettings.animations.clips)||e.modelSettings.activeVariants!==void 0&&(!Array.isArray(e.modelSettings.activeVariants)||!e.modelSettings.activeVariants.every(t=>typeof t=="string")))?!1:e.mergeModels===void 0?!0:Array.isArray(e.mergeModels)&&e.mergeModels.every(fT)}function nO(e){return!(!Bo(e)||e.version!==1||typeof e.savedAt!="number"||!Bo(e.bindings)||!Bo(e.sceneConfig)||!sy(e.model)||e.parkedModels!==void 0&&(!Array.isArray(e.parkedModels)||!e.parkedModels.every(tO))||e.mergeModels!==void 0&&(!Array.isArray(e.mergeModels)||!e.mergeModels.every(fT))||e.modelOrder!==void 0&&(!Array.isArray(e.modelOrder)||!e.modelOrder.every(t=>typeof t=="string")))}function iy(e,t){return e.kind==="url"?Promise.resolve(null):ay(t.get(e.key)).then(n=>!n||n.key!==e.key?null:new File([n.blob],n.name,{type:n.type,lastModified:n.lastModified}))}async function gT(e,t){let n=await pp(),r={...e,version:1,savedAt:Date.now()},i=n.transaction([Cs,Ts],"readwrite"),o=ad(i);i.objectStore(Cs).put(r,oy);let a=i.objectStore(Ts),s=new Set,l=u=>{u.kind==="file"&&s.add(u.key)};l(r.model),r.mergeModels?.forEach(u=>l(u.model)),r.parkedModels?.forEach(u=>{l(u.model),u.mergeModels?.forEach(m=>l(m.model))});for(let{key:u,file:m}of t??[]){let c={key:u,blob:m,name:m.name,type:m.type,lastModified:m.lastModified};a.put(c,u)}let d=a.getAllKeys();return d.onsuccess=()=>{for(let u of d.result)s.has(u)||a.delete(u)},await o,r}function hT(e,t){return Promise.all(e.map(async n=>({entry:n,file:await iy(n.model,t)})))}async function bT(){let e=await pp(),t=e.transaction(Cs,"readonly"),n=ad(t),r=await ay(t.objectStore(Cs).get(oy));if(await n,!nO(r))return null;let i=r.parkedModels??[],o=r.mergeModels??[],a=e.transaction(Ts,"readonly"),s=ad(a),l=a.objectStore(Ts),[d,u,m]=await Promise.all([iy(r.model,l),hT(o,l),Promise.all(i.map(async c=>({entry:c,file:await iy(c.model,l),mergeFiles:await hT(c.mergeModels??[],l)})))]);return await s,r.model.kind==="file"&&!d?null:{session:{...r,parkedModels:i,mergeModels:o},file:d,parkedFiles:m,mergeFiles:u}}async function vT(){let t=(await pp()).transaction([Cs,Ts,Ps],"readwrite"),n=ad(t);t.objectStore(Cs).delete(oy),t.objectStore(Ts).clear(),t.objectStore(Ps).clear(),await n}async function Lf(e,t){let r=(await pp()).transaction(Ps,"readwrite"),i=ad(r),o={blob:t,name:t.name,type:t.type,savedAt:Date.now()};r.objectStore(Ps).put(o,e),await i}async function mp(e){let n=(await pp()).transaction(Ps,"readonly"),r=ad(n),i=await ay(n.objectStore(Ps).get(e));return await r,i?new File([i.blob],i.name,{type:i.type,lastModified:i.savedAt}):null}var Uf=require("react");var AT=require("react"),ks=require("lucide-react"),Nf=require("react-colorful");var mo=require("react"),wT=require("react-dom"),Df=require("lucide-react"),Of=require("react-colorful");function As(e){let t=e.replace("#","").match(/.{2}/g).map(r=>parseInt(r,16)/255).map(r=>r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var yT=require("react");function xT(e,t,n){(0,yT.useEffect)(()=>{if(!n)return;let r=Array.isArray(e)?e:[e],i=o=>{let a=o.target;r.some(l=>l.current?.contains(a))||t()};return document.addEventListener("pointerdown",i,!0),()=>{document.removeEventListener("pointerdown",i,!0)}},[e,t,n])}var Xe=require("react/jsx-runtime");function hp({anchorRef:e,onClose:t,children:n}){let r=(0,mo.useRef)(null),[i,o]=(0,mo.useState)(null);return xT([r,e],t,!0),(0,mo.useLayoutEffect)(()=>{let a=e.current;if(!a)return;let s=a.getBoundingClientRect(),l=222,d=8,u=Math.min(Math.max(s.right-l,d),window.innerWidth-l-d),m=Math.min(s.bottom+6,window.innerHeight-200);o({top:m,left:u})},[e]),i?(0,wT.createPortal)((0,Xe.jsx)("div",{ref:r,className:"se-colorPickerPopover",style:{position:"fixed",top:i.top,left:i.left},children:n}),document.body):null}function rO(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 Ta({title:e,children:t}){return(0,Xe.jsxs)("section",{className:"se-section",children:[(0,Xe.jsx)("h3",{className:"se-sectionTitle",children:e}),(0,Xe.jsx)("div",{className:"se-sectionBody",children:t})]})}function zt({title:e,open:t,onToggle:n,trailing:r,children:i,disabled:o,tooltip:a}){let s=a?`${a}`:e;return(0,Xe.jsxs)("section",{className:"se-panel",children:[(0,Xe.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,title:s,children:[(0,Xe.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Xe.jsx)(Df.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Xe.jsx)("span",{className:"se-panelTitle",children:e}),a?(0,Xe.jsx)("span",{className:"se-panelHelp",title:s,"aria-label":s,role:"img",onClick:l=>l.stopPropagation(),children:(0,Xe.jsx)(Df.Info,{size:13})}):null]}),r?(0,Xe.jsx)("span",{className:"se-panelTrailing",onClick:l=>l.stopPropagation(),children:r}):null]}),t?(0,Xe.jsx)("div",{className:"se-panelBody",style:o?{opacity:.45,pointerEvents:"none"}:void 0,children:i}):null]})}function Ht({checked:e,onChange:t,label:n}){return(0,Xe.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Xe.jsx)("input",{type:"checkbox",checked:e,onChange:r=>t(r.target.checked)}),(0,Xe.jsx)("span",{className:"se-switchTrack",children:(0,Xe.jsx)("span",{className:"se-switchThumb"})})]})}function te({label:e,value:t,min:n,max:r,step:i,formatValue:o,onChange:a,disabled:s=!1}){return(0,Xe.jsxs)("label",{className:`se-field ${s?"se-field--disabled":""}`,children:[(0,Xe.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,Xe.jsx)("span",{className:"se-fieldValue",children:o?o(t):t})]}),(0,Xe.jsx)("input",{className:"se-slider",type:"range",min:n,max:r,step:i,value:t,onChange:l=>a(Number(l.target.value)),disabled:s})]})}function Ut({label:e,checked:t,onChange:n}){return(0,Xe.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Xe.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Xe.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:r=>n(r.target.checked)})]})}function mi({label:e,value:t,options:n,onChange:r}){return(0,Xe.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Xe.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Xe.jsx)("select",{className:"se-select",value:t,onChange:i=>r(i.target.value),children:n.map(i=>(0,Xe.jsx)("option",{value:i,children:rO(i)},i))})]})}function $r({label:e,value:t,onChange:n}){let[r,i]=(0,mo.useState)(!1),o=(0,mo.useRef)(null);return(0,Xe.jsxs)("div",{className:"se-field",children:[(0,Xe.jsxs)("div",{className:"se-fieldInline",children:[(0,Xe.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Xe.jsx)("span",{ref:o,style:{display:"inline-flex"},children:(0,Xe.jsx)(Of.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>i(a=>!a),style:{background:t,color:As(t)},color:t,onChange:n})})]}),r?(0,Xe.jsx)(hp,{anchorRef:o,onClose:()=>i(!1),children:(0,Xe.jsx)(Of.HexColorPicker,{color:t,onChange:n})}):null]})}function ST({value:e,min:t,max:n,step:r,onChange:i}){let[o,a]=(0,mo.useState)(String(e)),s=(0,mo.useRef)(!1);return(0,mo.useLayoutEffect)(()=>{s.current||a(String(e))},[e]),(0,Xe.jsx)("input",{type:"number",className:"se-numberInput",min:t,max:n,step:r,value:o,onFocus:()=>{s.current=!0},onChange:l=>{let d=l.target.value;a(d),d!==""&&d!=="-"&&!Number.isNaN(Number(d))&&i(Number(d))},onBlur:()=>{s.current=!1,a(String(e))}})}function Es({label:e,value:t,min:n,max:r,step:i,onChange:o}){return(0,Xe.jsxs)("div",{className:"se-field",children:[(0,Xe.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Xe.jsx)("div",{className:"se-vectorRow",children:["X","Y","Z"].map((s,l)=>(0,Xe.jsxs)("label",{className:"se-vectorAxis",children:[(0,Xe.jsx)("span",{children:s}),(0,Xe.jsx)(ST,{value:t[l],min:n,max:r,step:i,onChange:d=>{let u=[...t];u[l]=d,o(u)}})]},s))})]})}function Il({label:e,value:t,min:n,max:r,step:i,onChange:o}){return(0,Xe.jsxs)("div",{className:"se-field",children:[(0,Xe.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Xe.jsx)("div",{className:"se-vectorRow",children:["X","Y"].map((s,l)=>(0,Xe.jsxs)("label",{className:"se-vectorAxis",children:[(0,Xe.jsx)("span",{children:s}),(0,Xe.jsx)(ST,{value:t[l],min:n,max:r,step:i,onChange:d=>{let u=[...t];u[l]=d,o(u)}})]},s))})]})}var MT={free:0,starter:1,growth:2};function _T(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function ho(e,t){return MT[e]>=MT[t]}var CT={free:"Free",starter:"Starter",growth:"Growth"};var TT=require("lucide-react");var fp=require("react/jsx-runtime");function vr({requiredTier:e,feature:t}){return(0,fp.jsxs)("div",{className:"bb-tierLock",children:[(0,fp.jsx)(TT.Lock,{size:16}),(0,fp.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",CT[e]," plan or higher."]})]})}var ne=require("react/jsx-runtime"),iO=["lit","unlit","normals"],oO=["color","image","environment"];function PT(e){let t=e%360;return t<0?t+360:t}function sd({title:e,open:t,onToggle:n,children:r,trailing:i}){return(0,ne.jsxs)("section",{className:"se-panel",children:[(0,ne.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:[(0,ne.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ne.jsx)(ks.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,ne.jsx)("span",{className:"se-panelTitle",children:e})]}),i?(0,ne.jsx)("span",{className:"se-panelTrailing",onClick:o=>o.stopPropagation(),children:i}):null]}),t?(0,ne.jsx)("div",{className:"se-panelBody",children:r}):null]})}function ly({config:e,onChange:t,materialVariantGroups:n=[]}){let{model:r,camera:i,wireframe:o,background:a,environment:s}=e,l=os(r),d=n.length>0?l.filter(h=>!n.some(w=>w.variants.some(C=>C.name===h))):[],{tier:u}=Xr(),m=ho(u,"starter"),c=Qc(),[p,f]=(0,AT.useState)({general:!0,camera:!0,autoRotate:!1,section:!1,wireframe:!1,background:!1}),v=h=>f(w=>({...w,[h]:!w[h]})),b=h=>t({...e,model:h}),g=h=>t({...e,camera:h}),y=e.section??fl,x=h=>t({...e,section:{...y,...h}}),M=h=>t({...e,wireframe:h}),P=h=>t({...e,background:h}),S=h=>t({...e,environment:h}),T=h=>{S({...s,source:"preset",preset:h})};return(0,ne.jsxs)("div",{className:"se-generalContent",children:[(0,ne.jsxs)(sd,{title:"General",open:p.general,onToggle:()=>v("general"),children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsxs)("div",{className:"se-fieldLabel",children:[(0,ne.jsx)("span",{children:"Straighten model"}),(0,ne.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>b({...r,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,ne.jsx)(ks.RotateCcw,{size:16})})]}),(0,ne.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((h,w)=>(0,ne.jsxs)("div",{className:"se-axisStepper",children:[(0,ne.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let C=[...r.rotation];C[w]=PT(C[w]-90),b({...r,rotation:C})},"aria-label":`Rotate ${h} axis backward`,children:(0,ne.jsx)(ks.ChevronLeft,{size:16})}),(0,ne.jsx)("span",{className:"se-axisStepperLabel",children:h}),(0,ne.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let C=[...r.rotation];C[w]=PT(C[w]+90),b({...r,rotation:C})},"aria-label":`Rotate ${h} axis forward`,children:(0,ne.jsx)(ks.ChevronRight,{size:16})})]},h))})]}),(0,ne.jsx)(Es,{label:"Rotation",value:r.rotation,min:0,max:360,step:1,onChange:h=>b({...r,rotation:h})}),(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,ne.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:hw.map(h=>(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${r.renderer===h?"se-segmentedOption--active":""}`,onClick:()=>b({...r,renderer:h}),children:h==="uv-checker"?"UV CHECKER":h.toUpperCase()},h))})]}),(0,ne.jsx)(mi,{label:"Shading",value:r.shading,options:iO,onChange:h=>b({...r,shading:h})}),n.map((h,w)=>{let C=l.find(_=>h.variants.some(k=>k.name===_));return(0,ne.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:h.name??"Material variant"}),(0,ne.jsxs)("select",{className:"se-select",value:C??"",onChange:_=>{let k=_.target.value,R=l.filter(U=>U!==C);b(Nc(r,k?th(R,k,n):R))},children:[(0,ne.jsx)("option",{value:"",children:"Model default"}),h.variants.map(_=>(0,ne.jsx)("option",{value:_.name,children:_.label},_.name))]})]},h.name??`group-${w}`)}),d.length>0?(0,ne.jsxs)("div",{className:"se-placeholder se-placeholder--spaced",children:["Not in this model: ",d.join(", "),"."," ",(0,ne.jsx)("button",{type:"button",className:"se-linkButton",onClick:()=>b(Nc(r,l.filter(h=>!d.includes(h)))),children:"Remove"})]}):null]}),(0,ne.jsx)(sd,{title:"Camera",open:p.camera,onToggle:()=>v("camera"),children:(0,ne.jsx)(te,{label:"Field Of View",value:i.fieldOfView,min:20,max:100,step:.1,formatValue:h=>`${h.toFixed(3)}\xB0`,onChange:h=>g({...i,fieldOfView:h})})}),(0,ne.jsxs)(sd,{title:"Auto Rotate",open:p.autoRotate,onToggle:()=>v("autoRotate"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle auto rotate",children:[(0,ne.jsx)("input",{type:"checkbox",checked:r.autoRotate??!1,onChange:h=>b({...r,autoRotate:h.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:[r.autoRotate&&c?(0,ne.jsx)("div",{className:"se-placeholder se-placeholder--spaced",children:"Your device is set to reduce motion, so this preview won't turn. Visitors without that setting will see it."}):null,r.autoRotate?(0,ne.jsx)(te,{label:"Rotation Speed",value:r.autoRotateSpeed??1,min:.1,max:3,step:.1,formatValue:h=>`${h.toFixed(1)}x`,onChange:h=>b({...r,autoRotateSpeed:h})}):(0,ne.jsx)("div",{className:"se-placeholder",children:"Enable auto rotate to adjust its speed."})]}),(0,ne.jsx)(sd,{title:"Section Cut",open:p.section,onToggle:()=>v("section"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle section cut",children:[(0,ne.jsx)("input",{type:"checkbox",checked:y.enabled,onChange:h=>x({enabled:h.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:y.enabled?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Cut across"}),(0,ne.jsx)("div",{className:"se-segmentedControl",children:Wm.map(h=>(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${y.axis===h?"se-segmentedOption--active":""}`,onClick:()=>x({axis:h}),children:h.toUpperCase()},h))})]}),(0,ne.jsx)(te,{label:"Position",value:y.position,min:0,max:1,step:.01,formatValue:h=>`${Math.round(h*100)}%`,onChange:h=>x({position:h})}),(0,ne.jsx)(Ut,{label:"Keep the other side",checked:y.flip,onChange:h=>x({flip:h})})]}):(0,ne.jsx)("div",{className:"se-placeholder",children:"Cut the model open to see inside. Drag the plane in the preview, or set it here."})}),(0,ne.jsx)(sd,{title:"Wireframe",open:p.wireframe,onToggle:()=>v("wireframe"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,ne.jsx)("input",{type:"checkbox",checked:m&&o.enabled,disabled:!m,onChange:h=>M({...o,enabled:h.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:m?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsx)(te,{label:"Opacity",value:o.opacity,min:0,max:1,step:.01,onChange:h=>M({...o,opacity:h})}),(0,ne.jsx)($r,{label:"Wire color",value:o.color,onChange:h=>M({...o,color:h})})]}):(0,ne.jsx)(vr,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,ne.jsx)(sd,{title:"Background",open:p.background,onToggle:()=>v("background"),trailing:(0,ne.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,ne.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:h=>P({...a,enabled:h.target.checked})}),(0,ne.jsx)("span",{className:"se-switchTrack",children:(0,ne.jsx)("span",{className:"se-switchThumb"})})]}),children:a.enabled?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,ne.jsx)("div",{className:"se-segmentedControl",children:oO.map(h=>(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${a.type===h?"se-segmentedOption--active":""}`,onClick:()=>P({...a,type:h}),children:h},h))})]}),a.type==="environment"?m?(0,ne.jsxs)(ne.Fragment,{children:[(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,ne.jsxs)("div",{className:"se-segmentedControl",children:[(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${s.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>S({...s,source:"preset"}),children:"PRESET"}),(0,ne.jsx)("button",{type:"button",className:`se-segmentedOption ${s.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>S({...s,source:"custom"}),children:"CUSTOM"})]})]}),s.source==="preset"?(0,ne.jsx)(mi,{label:"Environment preset",value:s.preset,options:fw,onChange:T}):(0,ne.jsxs)("label",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,ne.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:s.customEnvironmentUrl,onChange:h=>S({...s,customEnvironmentUrl:h.target.value})}),(0,ne.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),s.customEnvironmentUrl.trim()&&!Gm(s.customEnvironmentUrl)?(0,ne.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,ne.jsx)(te,{label:"Environment intensity",value:s.intensity,min:0,max:3,step:.05,onChange:h=>S({...s,intensity:h})})]}):(0,ne.jsx)(vr,{requiredTier:"starter",feature:"Environment backgrounds"}):null,a.type==="image"?(0,ne.jsxs)("label",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,ne.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:a.imageUrl,onChange:h=>P({...a,imageUrl:h.target.value})})]}):null,a.type==="color"?(0,ne.jsxs)("div",{className:"se-field",children:[(0,ne.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,ne.jsx)("div",{className:"se-inlineColorPicker",children:(0,ne.jsx)(Nf.HexColorPicker,{color:a.color,onChange:h=>P({...a,color:h})})}),(0,ne.jsx)("div",{className:"se-fieldInline",children:(0,ne.jsx)(Nf.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:a.color,color:As(a.color)},color:a.color,onChange:h=>P({...a,color:h})})})]}):null]}):(0,ne.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var JT=require("react");var De=require("react/jsx-runtime");function ET({pp:e,set:t,open:n,toggle:r}){let{ssao:i}=e;return(0,De.jsxs)(zt,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:n.ssao,onToggle:()=>r("ssao"),disabled:!i.enabled,trailing:(0,De.jsx)(Ht,{checked:i.enabled,onChange:o=>t("ssao",{...i,enabled:o}),label:"Toggle SSAO"}),children:[(0,De.jsx)(te,{label:"Samples",value:i.samples,min:1,max:64,step:1,onChange:o=>t("ssao",{...i,samples:o})}),(0,De.jsx)(te,{label:"Rings",value:i.rings,min:1,max:12,step:1,onChange:o=>t("ssao",{...i,rings:o})}),(0,De.jsx)(te,{label:"Intensity",value:i.intensity,min:0,max:20,step:.5,onChange:o=>t("ssao",{...i,intensity:o})}),(0,De.jsx)(te,{label:"Radius",value:i.radius,min:.01,max:1,step:.01,onChange:o=>t("ssao",{...i,radius:o})}),(0,De.jsx)(te,{label:"Bias",value:i.bias,min:0,max:.1,step:.001,onChange:o=>t("ssao",{...i,bias:o})}),(0,De.jsx)(te,{label:"Luminance Influence",value:i.luminanceInfluence,min:0,max:1,step:.01,onChange:o=>t("ssao",{...i,luminanceInfluence:o})}),(0,De.jsx)(te,{label:"Fade",value:i.fade,min:0,max:.1,step:.001,onChange:o=>t("ssao",{...i,fade:o})}),(0,De.jsx)(te,{label:"Min Radius Scale",value:i.minRadiusScale,min:0,max:1,step:.01,onChange:o=>t("ssao",{...i,minRadiusScale:o})}),(0,De.jsx)(te,{label:"World Distance Threshold",value:i.worldDistanceThreshold,min:0,max:100,step:.1,onChange:o=>t("ssao",{...i,worldDistanceThreshold:o})}),(0,De.jsx)(te,{label:"World Distance Falloff",value:i.worldDistanceFalloff,min:0,max:20,step:.1,onChange:o=>t("ssao",{...i,worldDistanceFalloff:o})}),(0,De.jsx)(te,{label:"World Proximity Threshold",value:i.worldProximityThreshold,min:0,max:100,step:.1,onChange:o=>t("ssao",{...i,worldProximityThreshold:o})}),(0,De.jsx)(te,{label:"World Proximity Falloff",value:i.worldProximityFalloff,min:0,max:20,step:.1,onChange:o=>t("ssao",{...i,worldProximityFalloff:o})})]})}function kT({pp:e,set:t,open:n,toggle:r}){let{autofocus:i}=e;return(0,De.jsxs)(zt,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:n.autofocus,onToggle:()=>r("autofocus"),disabled:!i.enabled,trailing:(0,De.jsx)(Ht,{checked:i.enabled,onChange:o=>t("autofocus",{...i,enabled:o}),label:"Toggle Autofocus"}),children:[(0,De.jsx)(te,{label:"Focus Distance",value:i.focusDistance,min:0,max:50,step:.1,onChange:o=>t("autofocus",{...i,focusDistance:o})}),(0,De.jsx)(te,{label:"Focus Range",value:i.focusRange,min:.1,max:50,step:.1,onChange:o=>t("autofocus",{...i,focusRange:o})}),(0,De.jsx)(te,{label:"Focal Length",value:i.focalLength,min:0,max:1,step:.01,onChange:o=>t("autofocus",{...i,focalLength:o})}),(0,De.jsx)(te,{label:"Bokeh Scale",value:i.bokehScale,min:0,max:20,step:.1,onChange:o=>t("autofocus",{...i,bokehScale:o})}),(0,De.jsx)(Es,{label:"Target",value:i.target,min:-100,max:100,step:.1,onChange:o=>t("autofocus",{...i,target:o})}),(0,De.jsx)(Ut,{label:"Mouse Follow",checked:i.mouse,onChange:o=>t("autofocus",{...i,mouse:o})}),(0,De.jsx)(Ut,{label:"Manual Update",checked:i.manual,onChange:o=>t("autofocus",{...i,manual:o})}),(0,De.jsx)(te,{label:"Debug",value:i.debug,min:0,max:1,step:.01,onChange:o=>t("autofocus",{...i,debug:o})}),(0,De.jsx)(te,{label:"Smooth Time",value:i.smoothTime,min:0,max:2,step:.01,onChange:o=>t("autofocus",{...i,smoothTime:o})})]})}function RT({pp:e,set:t,open:n,toggle:r}){let{godRays:i}=e;return(0,De.jsxs)(zt,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:n.godRays,onToggle:()=>r("godRays"),disabled:!i.enabled,trailing:(0,De.jsx)(Ht,{checked:i.enabled,onChange:o=>t("godRays",{...i,enabled:o}),label:"Toggle GodRays"}),children:[(0,De.jsx)(Es,{label:"Sun Position",value:i.sunPosition,min:-100,max:100,step:.1,onChange:o=>t("godRays",{...i,sunPosition:o})}),(0,De.jsx)(te,{label:"Samples",value:i.samples,min:1,max:128,step:1,onChange:o=>t("godRays",{...i,samples:o})}),(0,De.jsx)(te,{label:"Density",value:i.density,min:0,max:2,step:.01,onChange:o=>t("godRays",{...i,density:o})}),(0,De.jsx)(te,{label:"Decay",value:i.decay,min:0,max:1,step:.01,onChange:o=>t("godRays",{...i,decay:o})}),(0,De.jsx)(te,{label:"Weight",value:i.weight,min:0,max:2,step:.01,onChange:o=>t("godRays",{...i,weight:o})}),(0,De.jsx)(te,{label:"Exposure",value:i.exposure,min:0,max:2,step:.01,onChange:o=>t("godRays",{...i,exposure:o})}),(0,De.jsx)(te,{label:"Clamp Max",value:i.clampMax,min:0,max:2,step:.01,onChange:o=>t("godRays",{...i,clampMax:o})}),(0,De.jsx)(Ut,{label:"Blur",checked:i.blur,onChange:o=>t("godRays",{...i,blur:o})}),(0,De.jsx)(mi,{label:"Kernel Size",value:i.kernelSize,options:hu,onChange:o=>t("godRays",{...i,kernelSize:o})})]})}function LT({pp:e,set:t,open:n,toggle:r}){let{lensflare:i}=e;return(0,De.jsxs)(zt,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:n.lensflare,onToggle:()=>r("lensflare"),disabled:!i.enabled,trailing:(0,De.jsx)(Ht,{checked:i.enabled,onChange:o=>t("lensflare",{...i,enabled:o}),label:"Toggle Lensflare"}),children:[(0,De.jsx)(Es,{label:"Lens Position",value:i.lensPosition,min:-100,max:100,step:.1,onChange:o=>t("lensflare",{...i,lensPosition:o})}),(0,De.jsx)(te,{label:"Smooth Time",value:i.smoothTime,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...i,smoothTime:o})}),(0,De.jsx)(te,{label:"Glare Size",value:i.glareSize,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...i,glareSize:o})}),(0,De.jsx)(te,{label:"Flare Size",value:i.flareSize,min:0,max:.1,step:.001,onChange:o=>t("lensflare",{...i,flareSize:o})}),(0,De.jsx)(te,{label:"Flare Speed",value:i.flareSpeed,min:0,max:.2,step:.001,onChange:o=>t("lensflare",{...i,flareSpeed:o})}),(0,De.jsx)(te,{label:"Flare Shape",value:i.flareShape,min:0,max:.2,step:.001,onChange:o=>t("lensflare",{...i,flareShape:o})}),(0,De.jsx)(Ut,{label:"Animated",checked:i.animated,onChange:o=>t("lensflare",{...i,animated:o})}),(0,De.jsx)(Ut,{label:"Anamorphic",checked:i.anamorphic,onChange:o=>t("lensflare",{...i,anamorphic:o})}),(0,De.jsx)($r,{label:"Color Gain",value:i.colorGain,onChange:o=>t("lensflare",{...i,colorGain:o})}),(0,De.jsx)(te,{label:"Halo Scale",value:i.haloScale,min:0,max:2,step:.01,onChange:o=>t("lensflare",{...i,haloScale:o})}),(0,De.jsx)(Ut,{label:"Secondary Ghosts",checked:i.secondaryGhosts,onChange:o=>t("lensflare",{...i,secondaryGhosts:o})}),(0,De.jsx)(Ut,{label:"Additional Streaks",checked:i.aditionalStreaks,onChange:o=>t("lensflare",{...i,aditionalStreaks:o})}),(0,De.jsx)(te,{label:"Ghost Scale",value:i.ghostScale,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...i,ghostScale:o})}),(0,De.jsx)(te,{label:"Opacity",value:i.opacity,min:0,max:1,step:.01,onChange:o=>t("lensflare",{...i,opacity:o})}),(0,De.jsx)(Ut,{label:"Star Burst",checked:i.starBurst,onChange:o=>t("lensflare",{...i,starBurst:o})})]})}function DT({pp:e,set:t,open:n,toggle:r}){let{depthOfField:i}=e;return(0,De.jsxs)(zt,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:n.depthOfField,onToggle:()=>r("depthOfField"),disabled:!i.enabled,trailing:(0,De.jsx)(Ht,{checked:i.enabled,onChange:o=>t("depthOfField",{...i,enabled:o}),label:"Toggle DepthOfField"}),children:[(0,De.jsx)(te,{label:"Focus Distance",value:i.focusDistance,min:0,max:50,step:.1,onChange:o=>t("depthOfField",{...i,focusDistance:o})}),(0,De.jsx)(te,{label:"Focus Range",value:i.focusRange,min:.1,max:50,step:.1,onChange:o=>t("depthOfField",{...i,focusRange:o})}),(0,De.jsx)(te,{label:"Focal Length",value:i.focalLength,min:0,max:1,step:.01,onChange:o=>t("depthOfField",{...i,focalLength:o})}),(0,De.jsx)(te,{label:"Bokeh Scale",value:i.bokehScale,min:0,max:20,step:.1,onChange:o=>t("depthOfField",{...i,bokehScale:o})})]})}var st=require("react/jsx-runtime"),aO=["linear","reinhard","aces"];function OT({pp:e,set:t,open:n,toggle:r}){let{colorAverage:i}=e;return(0,st.jsx)(zt,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:n.colorAverage,onToggle:()=>r("colorAverage"),disabled:!i.enabled,trailing:(0,st.jsx)(Ht,{checked:i.enabled,onChange:o=>t("colorAverage",{...i,enabled:o}),label:"Toggle ColorAverage"}),children:(0,st.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function NT({pp:e,set:t,open:n,toggle:r}){let{brightnessContrast:i}=e;return(0,st.jsxs)(zt,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:n.brightnessContrast,onToggle:()=>r("brightnessContrast"),disabled:!i.enabled,trailing:(0,st.jsx)(Ht,{checked:i.enabled,onChange:o=>t("brightnessContrast",{...i,enabled:o}),label:"Toggle BrightnessContrast"}),children:[(0,st.jsx)(te,{label:"Brightness",value:i.brightness,min:-1,max:1,step:.01,onChange:o=>t("brightnessContrast",{...i,brightness:o})}),(0,st.jsx)(te,{label:"Contrast",value:i.contrast,min:-1,max:1,step:.01,onChange:o=>t("brightnessContrast",{...i,contrast:o})})]})}function BT({pp:e,set:t,open:n,toggle:r}){let{hueSaturation:i}=e;return(0,st.jsxs)(zt,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:n.hueSaturation,onToggle:()=>r("hueSaturation"),disabled:!i.enabled,trailing:(0,st.jsx)(Ht,{checked:i.enabled,onChange:o=>t("hueSaturation",{...i,enabled:o}),label:"Toggle HueSaturation"}),children:[(0,st.jsx)(te,{label:"Hue",value:i.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:o=>`${o.toFixed(2)} rad`,onChange:o=>t("hueSaturation",{...i,hue:o})}),(0,st.jsx)(te,{label:"Saturation",value:i.saturation,min:-1,max:1,step:.01,onChange:o=>t("hueSaturation",{...i,saturation:o})})]})}function IT({pp:e,set:t,open:n,toggle:r}){let{vignette:i}=e;return(0,st.jsxs)(zt,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:n.vignette,onToggle:()=>r("vignette"),disabled:!i.enabled,trailing:(0,st.jsx)(Ht,{checked:i.enabled,onChange:o=>t("vignette",{...i,enabled:o}),label:"Toggle Vignette"}),children:[(0,st.jsx)(te,{label:"Offset",value:i.offset,min:0,max:1,step:.01,onChange:o=>t("vignette",{...i,offset:o})}),(0,st.jsx)(te,{label:"Darkness",value:i.darkness,min:0,max:1,step:.01,onChange:o=>t("vignette",{...i,darkness:o})}),(0,st.jsx)(Ut,{label:"Eskil",checked:i.eskil,onChange:o=>t("vignette",{...i,eskil:o})})]})}function zT({pp:e,set:t,open:n,toggle:r}){let{bloom:i}=e;return(0,st.jsxs)(zt,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:n.bloom,onToggle:()=>r("bloom"),disabled:!i.enabled,trailing:(0,st.jsx)(Ht,{checked:i.enabled,onChange:o=>t("bloom",{...i,enabled:o}),label:"Toggle Bloom"}),children:[(0,st.jsx)(te,{label:"Threshold",value:i.luminanceThreshold,min:0,max:1,step:.01,onChange:o=>t("bloom",{...i,luminanceThreshold:o})}),(0,st.jsx)(te,{label:"Smoothing",value:i.luminanceSmoothing,min:0,max:1,step:.01,onChange:o=>t("bloom",{...i,luminanceSmoothing:o})}),(0,st.jsx)(te,{label:"Intensity",value:i.intensity,min:0,max:3,step:.05,onChange:o=>t("bloom",{...i,intensity:o})}),(0,st.jsx)(Ut,{label:"Mipmap Blur",checked:i.mipmapBlur,onChange:o=>t("bloom",{...i,mipmapBlur:o})}),(0,st.jsx)(te,{label:"Radius",value:i.radius,min:0,max:1,step:.01,onChange:o=>t("bloom",{...i,radius:o})}),(0,st.jsx)(te,{label:"Levels",value:i.levels,min:1,max:16,step:1,onChange:o=>t("bloom",{...i,levels:o})})]})}function VT({pp:e,set:t,open:n,toggle:r}){let{toneMapping:i}=e;return(0,st.jsxs)(zt,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:n.toneMapping,onToggle:()=>r("toneMapping"),disabled:!i.enabled,trailing:(0,st.jsx)(Ht,{checked:i.enabled,onChange:o=>t("toneMapping",{...i,enabled:o}),label:"Toggle ToneMapping"}),children:[(0,st.jsxs)("div",{className:"se-field",children:[(0,st.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,st.jsx)("div",{className:"se-segmentedControl",children:aO.map(o=>(0,st.jsx)("button",{type:"button",className:`se-segmentedOption ${i.mode===o?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...i,mode:o}),children:o==="aces"?"Filmic":o.charAt(0).toUpperCase()+o.slice(1)},o))})]}),(0,st.jsx)(te,{label:"Resolution",value:i.resolution,min:64,max:4096,step:64,onChange:o=>t("toneMapping",{...i,resolution:o})}),(0,st.jsx)(te,{label:"White Point",value:i.whitePoint,min:0,max:16,step:.01,onChange:o=>t("toneMapping",{...i,whitePoint:o})}),(0,st.jsx)(te,{label:"Middle Grey",value:i.middleGrey,min:0,max:1,step:.01,onChange:o=>t("toneMapping",{...i,middleGrey:o})}),(0,st.jsx)(te,{label:"Min Luminance",value:i.minLuminance,min:0,max:1,step:.01,onChange:o=>t("toneMapping",{...i,minLuminance:o})}),(0,st.jsx)(te,{label:"Average Luminance",value:i.averageLuminance,min:0,max:4,step:.01,onChange:o=>t("toneMapping",{...i,averageLuminance:o})}),(0,st.jsx)(te,{label:"Adaptation Rate",value:i.adaptationRate,min:0,max:10,step:.01,onChange:o=>t("toneMapping",{...i,adaptationRate:o})}),(0,st.jsx)(te,{label:"Exposure",value:i.exposure,min:0,max:3,step:.01,onChange:o=>t("toneMapping",{...i,exposure:o})})]})}function UT({pp:e,set:t,open:n,toggle:r}){let{sepia:i}=e;return(0,st.jsx)(zt,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:n.sepia,onToggle:()=>r("sepia"),disabled:!i.enabled,trailing:(0,st.jsx)(Ht,{checked:i.enabled,onChange:o=>t("sepia",{...i,enabled:o}),label:"Toggle Sepia"}),children:(0,st.jsx)(te,{label:"Intensity",value:i.intensity,min:0,max:1,step:.01,onChange:o=>t("sepia",{...i,intensity:o})})})}var Je=require("react/jsx-runtime");function FT({pp:e,set:t,open:n,toggle:r}){let{dotScreen:i}=e;return(0,Je.jsxs)(zt,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:n.dotScreen,onToggle:()=>r("dotScreen"),disabled:!i.enabled,trailing:(0,Je.jsx)(Ht,{checked:i.enabled,onChange:o=>t("dotScreen",{...i,enabled:o}),label:"Toggle DotScreen"}),children:[(0,Je.jsx)(te,{label:"Angle",value:i.angle,min:0,max:Math.PI*2,step:.01,formatValue:o=>`${o.toFixed(2)} rad`,onChange:o=>t("dotScreen",{...i,angle:o})}),(0,Je.jsx)(te,{label:"Scale",value:i.scale,min:.1,max:10,step:.05,onChange:o=>t("dotScreen",{...i,scale:o})})]})}function jT({pp:e,set:t,open:n,toggle:r}){let{glitch:i}=e;return(0,Je.jsxs)(zt,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:n.glitch,onToggle:()=>r("glitch"),disabled:!i.enabled,trailing:(0,Je.jsx)(Ht,{checked:i.enabled,onChange:o=>t("glitch",{...i,enabled:o}),label:"Toggle Glitch"}),children:[(0,Je.jsx)(mi,{label:"Mode",value:i.mode,options:gw,onChange:o=>t("glitch",{...i,mode:o})}),(0,Je.jsx)(Il,{label:"Delay",value:i.delay,min:0,max:10,step:.01,onChange:o=>t("glitch",{...i,delay:o})}),(0,Je.jsx)(Il,{label:"Duration",value:i.duration,min:0,max:5,step:.01,onChange:o=>t("glitch",{...i,duration:o})}),(0,Je.jsx)(Il,{label:"Strength",value:i.strength,min:0,max:2,step:.01,onChange:o=>t("glitch",{...i,strength:o})}),(0,Je.jsx)(Il,{label:"Chromatic Aberration Offset",value:i.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:o=>t("glitch",{...i,chromaticAberrationOffset:o})}),(0,Je.jsx)(te,{label:"Columns",value:i.columns,min:0,max:.5,step:.001,onChange:o=>t("glitch",{...i,columns:o})}),(0,Je.jsx)(te,{label:"Ratio",value:i.ratio,min:0,max:1,step:.01,onChange:o=>t("glitch",{...i,ratio:o})})]})}function HT({pp:e,set:t,open:n,toggle:r}){let{grid:i}=e;return(0,Je.jsxs)(zt,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:n.grid,onToggle:()=>r("grid"),disabled:!i.enabled,trailing:(0,Je.jsx)(Ht,{checked:i.enabled,onChange:o=>t("grid",{...i,enabled:o}),label:"Toggle Grid"}),children:[(0,Je.jsx)(te,{label:"Scale",value:i.scale,min:.1,max:10,step:.05,onChange:o=>t("grid",{...i,scale:o})}),(0,Je.jsx)(te,{label:"Line Width",value:i.lineWidth,min:0,max:1,step:.01,onChange:o=>t("grid",{...i,lineWidth:o})})]})}function GT({pp:e,set:t,open:n,toggle:r}){let{chromaticAberration:i}=e;return(0,Je.jsxs)(zt,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:n.chromaticAberration,onToggle:()=>r("chromaticAberration"),disabled:!i.enabled,trailing:(0,Je.jsx)(Ht,{checked:i.enabled,onChange:o=>t("chromaticAberration",{...i,enabled:o}),label:"Toggle ChromaticAberration"}),children:[(0,Je.jsx)(te,{label:"Offset X",value:i.offsetX,min:0,max:.02,step:1e-4,onChange:o=>t("chromaticAberration",{...i,offsetX:o})}),(0,Je.jsx)(te,{label:"Offset Y",value:i.offsetY,min:0,max:.02,step:1e-4,onChange:o=>t("chromaticAberration",{...i,offsetY:o})}),(0,Je.jsx)(Ut,{label:"Radial Modulation",checked:i.radialModulation,onChange:o=>t("chromaticAberration",{...i,radialModulation:o})}),(0,Je.jsx)(te,{label:"Modulation Offset",value:i.modulationOffset,min:0,max:1,step:.01,onChange:o=>t("chromaticAberration",{...i,modulationOffset:o})})]})}function WT({pp:e,set:t,open:n,toggle:r}){let{noise:i}=e;return(0,Je.jsxs)(zt,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:n.noise,onToggle:()=>r("noise"),disabled:!i.enabled,trailing:(0,Je.jsx)(Ht,{checked:i.enabled,onChange:o=>t("noise",{...i,enabled:o}),label:"Toggle Noise"}),children:[(0,Je.jsx)(te,{label:"Amount",value:i.opacity,min:0,max:1,step:.01,onChange:o=>t("noise",{...i,opacity:o})}),(0,Je.jsx)(Ut,{label:"Premultiply",checked:i.premultiply,onChange:o=>t("noise",{...i,premultiply:o})})]})}function XT({pp:e,set:t,open:n,toggle:r}){let{scanline:i}=e;return(0,Je.jsx)(zt,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:n.scanline,onToggle:()=>r("scanline"),disabled:!i.enabled,trailing:(0,Je.jsx)(Ht,{checked:i.enabled,onChange:o=>t("scanline",{...i,enabled:o}),label:"Toggle Scanline"}),children:(0,Je.jsx)(te,{label:"Density",value:i.density,min:0,max:10,step:.25,onChange:o=>t("scanline",{...i,density:o})})})}function $T({pp:e,set:t,open:n,toggle:r}){let{pixelation:i}=e;return(0,Je.jsx)(zt,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:n.pixelation,onToggle:()=>r("pixelation"),disabled:!i.enabled,trailing:(0,Je.jsx)(Ht,{checked:i.enabled,onChange:o=>t("pixelation",{...i,enabled:o}),label:"Toggle Pixelation"}),children:(0,Je.jsx)(te,{label:"Granularity",value:i.granularity,min:0,max:20,step:1,onChange:o=>t("pixelation",{...i,granularity:o})})})}function qT({pp:e,set:t,open:n,toggle:r}){let{ramp:i}=e;return(0,Je.jsxs)(zt,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:n.ramp,onToggle:()=>r("ramp"),disabled:!i.enabled,trailing:(0,Je.jsx)(Ht,{checked:i.enabled,onChange:o=>t("ramp",{...i,enabled:o}),label:"Toggle Ramp"}),children:[(0,Je.jsx)(mi,{label:"Ramp Type",value:i.rampType,options:bw,onChange:o=>t("ramp",{...i,rampType:o})}),(0,Je.jsx)(Il,{label:"Ramp Start",value:i.rampStart,min:0,max:1,step:.01,onChange:o=>t("ramp",{...i,rampStart:o})}),(0,Je.jsx)(Il,{label:"Ramp End",value:i.rampEnd,min:0,max:1,step:.01,onChange:o=>t("ramp",{...i,rampEnd:o})}),(0,Je.jsx)($r,{label:"Start Color",value:i.startColor,onChange:o=>t("ramp",{...i,startColor:o})}),(0,Je.jsx)($r,{label:"End Color",value:i.endColor,onChange:o=>t("ramp",{...i,endColor:o})}),!i.rampMask&&(0,Je.jsx)(te,{label:"Gradient Opacity",value:i.opacity??.5,min:0,max:1,step:.01,onChange:o=>t("ramp",{...i,opacity:o})}),(0,Je.jsx)(te,{label:"Bias",value:i.rampBias,min:0,max:1,step:.01,onChange:o=>t("ramp",{...i,rampBias:o})}),(0,Je.jsx)(te,{label:"Gain",value:i.rampGain,min:0,max:1,step:.01,onChange:o=>t("ramp",{...i,rampGain:o})}),(0,Je.jsx)(Ut,{label:"Mask Earlier Effects",checked:i.rampMask,onChange:o=>t("ramp",{...i,rampMask:o})}),(0,Je.jsx)(Ut,{label:"Invert",checked:i.rampInvert,onChange:o=>t("ramp",{...i,rampInvert:o})})]})}var ln=require("react/jsx-runtime");function YT({pp:e,set:t,open:n,toggle:r}){let{outline:i}=e;return(0,ln.jsxs)(zt,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:n.outline,onToggle:()=>r("outline"),disabled:!i.enabled,trailing:(0,ln.jsx)(Ht,{checked:i.enabled,onChange:o=>t("outline",{...i,enabled:o}),label:"Toggle Outline"}),children:[(0,ln.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,ln.jsx)(te,{label:"Selection Layer",value:i.selectionLayer,min:0,max:20,step:1,onChange:o=>t("outline",{...i,selectionLayer:o})}),(0,ln.jsx)(te,{label:"Edge Strength",value:i.edgeStrength,min:0,max:10,step:.1,onChange:o=>t("outline",{...i,edgeStrength:o})}),(0,ln.jsx)(te,{label:"Pulse Speed",value:i.pulseSpeed,min:0,max:10,step:.1,onChange:o=>t("outline",{...i,pulseSpeed:o})}),(0,ln.jsx)($r,{label:"Visible Edge Color",value:i.visibleEdgeColor,onChange:o=>t("outline",{...i,visibleEdgeColor:o})}),(0,ln.jsx)($r,{label:"Hidden Edge Color",value:i.hiddenEdgeColor,onChange:o=>t("outline",{...i,hiddenEdgeColor:o})}),(0,ln.jsx)(mi,{label:"Kernel Size",value:i.kernelSize,options:hu,onChange:o=>t("outline",{...i,kernelSize:o})}),(0,ln.jsx)(Ut,{label:"Blur",checked:i.blur,onChange:o=>t("outline",{...i,blur:o})}),(0,ln.jsx)(Ut,{label:"X-Ray",checked:i.xRay,onChange:o=>t("outline",{...i,xRay:o})})]})}function KT({pp:e,set:t,open:n,toggle:r}){let{selectiveBloom:i}=e;return(0,ln.jsxs)(zt,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:n.selectiveBloom,onToggle:()=>r("selectiveBloom"),disabled:!i.enabled,trailing:(0,ln.jsx)(Ht,{checked:i.enabled,onChange:o=>t("selectiveBloom",{...i,enabled:o}),label:"Toggle SelectiveBloom"}),children:[(0,ln.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,ln.jsx)(te,{label:"Selection Layer",value:i.selectionLayer,min:0,max:20,step:1,onChange:o=>t("selectiveBloom",{...i,selectionLayer:o})}),(0,ln.jsx)(te,{label:"Intensity",value:i.intensity,min:0,max:5,step:.05,onChange:o=>t("selectiveBloom",{...i,intensity:o})}),(0,ln.jsx)(te,{label:"Threshold",value:i.luminanceThreshold,min:0,max:1,step:.01,onChange:o=>t("selectiveBloom",{...i,luminanceThreshold:o})}),(0,ln.jsx)(te,{label:"Smoothing",value:i.luminanceSmoothing,min:0,max:1,step:.01,onChange:o=>t("selectiveBloom",{...i,luminanceSmoothing:o})}),(0,ln.jsx)(mi,{label:"Kernel Size",value:i.kernelSize,options:hu,onChange:o=>t("selectiveBloom",{...i,kernelSize:o})}),(0,ln.jsx)(Ut,{label:"Mipmap Blur",checked:i.mipmapBlur,onChange:o=>t("selectiveBloom",{...i,mipmapBlur:o})}),(0,ln.jsx)(Ut,{label:"Inverted",checked:i.inverted,onChange:o=>t("selectiveBloom",{...i,inverted:o})}),(0,ln.jsx)(Ut,{label:"Ignore Background",checked:i.ignoreBackground,onChange:o=>t("selectiveBloom",{...i,ignoreBackground:o})})]})}function ZT({pp:e,set:t,open:n,toggle:r}){let{smaa:i}=e;return(0,ln.jsx)(zt,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:n.smaa,onToggle:()=>r("smaa"),trailing:(0,ln.jsx)(Ht,{checked:i.enabled,onChange:o=>t("smaa",{...i,enabled:o}),label:"Toggle SMAA"}),children:(0,ln.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var hn=require("react/jsx-runtime");function cy({config:e,onChange:t}){let[n,r]=(0,JT.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}),i=l=>r(d=>({...d,[l]:!d[l]})),o=e.postProcessing,s={pp:o,set:(l,d)=>t({...e,postProcessing:{...o,[l]:d}}),open:n,toggle:i};return(0,hn.jsxs)("div",{className:"se-generalContent",children:[(0,hn.jsx)(ET,{...s}),(0,hn.jsx)(kT,{...s}),(0,hn.jsx)(OT,{...s}),(0,hn.jsx)(FT,{...s}),(0,hn.jsx)(jT,{...s}),(0,hn.jsx)(RT,{...s}),(0,hn.jsx)(HT,{...s}),(0,hn.jsx)(LT,{...s}),(0,hn.jsx)(YT,{...s}),(0,hn.jsx)(KT,{...s}),(0,hn.jsx)(NT,{...s}),(0,hn.jsx)(BT,{...s}),(0,hn.jsx)(DT,{...s}),(0,hn.jsx)(GT,{...s}),(0,hn.jsx)(IT,{...s}),(0,hn.jsx)(zT,{...s}),(0,hn.jsx)(VT,{...s}),(0,hn.jsx)(WT,{...s}),(0,hn.jsx)(UT,{...s}),(0,hn.jsx)(XT,{...s}),(0,hn.jsx)($T,{...s}),(0,hn.jsx)(qT,{...s}),(0,hn.jsx)(ZT,{...s})]})}var gp=require("react"),Rs=require("lucide-react");var Oe=require("react/jsx-runtime"),sO=["512","1024","2048","4096"],QT={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function lO({index:e,light:t,selected:n,onSelect:r,onToggleVisible:i}){return(0,Oe.jsxs)("div",{className:`se-lightRow ${n?"se-lightRow--active":""}`,onClick:r,children:[(0,Oe.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",QT[t.type]]}),(0,Oe.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:o=>{o.stopPropagation(),i()},children:t.visible?(0,Oe.jsx)(Rs.Eye,{size:14}):(0,Oe.jsx)(Rs.EyeOff,{size:14})})]})}function cO(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function dy({config:e,onChange:t}){let[n,r]=(0,gp.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),i=(0,gp.useSyncExternalStore)(qv,uf),[o,a]=(0,gp.useState)(e.lighting.lights[0]?.id??null),s=i??o,l=h=>{a(h),np(h)},d=h=>r(w=>({...w,[h]:!w[h]})),{tier:u}=Xr(),m=ho(u,"starter"),{lighting:c,shadows:p,groundShadows:f,environment:v}=e,b=h=>t({...e,lighting:h}),g=h=>t({...e,shadows:h}),y=h=>t({...e,groundShadows:h}),x=h=>t({...e,environment:h}),M=(h,w)=>{b({...c,lights:c.lights.map(C=>C.id===h?{...C,...w}:C)})},P=c.lights.find(h=>h.id===s)??null,S=()=>{let h=cO();b({...c,lights:[...c.lights,h]}),l(h.id)},T=()=>{if(!P)return;let h=c.lights.filter(w=>w.id!==P.id);b({...c,lights:h}),l(h[0]?.id??null)};return(0,Oe.jsxs)("div",{className:"se-generalContent",children:[(0,Oe.jsxs)(zt,{title:"Lights",open:n.lights,onToggle:()=>d("lights"),children:[(0,Oe.jsx)("div",{className:"se-lightList",children:c.lights.map((h,w)=>(0,Oe.jsx)(lO,{index:w,light:h,selected:h.id===s,onSelect:()=>l(h.id),onToggleVisible:()=>M(h.id,{visible:!h.visible})},h.id))}),(0,Oe.jsxs)("div",{className:"se-lightActions",children:[(0,Oe.jsx)("button",{type:"button",className:"se-iconButton",onClick:S,title:"Add light",children:(0,Oe.jsx)(Rs.Plus,{size:14})}),P&&c.lights.length>1&&(0,Oe.jsx)("button",{type:"button",className:"se-iconButton",onClick:T,title:"Remove selected light",children:(0,Oe.jsx)(Rs.Trash2,{size:14})})]}),P?(0,Oe.jsxs)("div",{className:"se-lightProps",children:[(0,Oe.jsxs)("div",{className:"se-field",children:[(0,Oe.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,Oe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:mw.map(h=>(0,Oe.jsx)("button",{type:"button",className:`se-segmentedOption ${P.type===h?"se-segmentedOption--active":""}`,onClick:()=>M(P.id,{type:h}),children:QT[h]},h))})]}),(0,Oe.jsx)($r,{label:"Color",value:P.color,onChange:h=>M(P.id,{color:h})}),(0,Oe.jsx)(te,{label:"Intensity",value:P.intensity,min:0,max:10,step:.1,onChange:h=>M(P.id,{intensity:h})}),P.type!=="hemisphere"&&P.type!=="none"&&(0,Oe.jsx)(Es,{label:"Position",value:P.position,min:-100,max:100,step:.05,onChange:h=>M(P.id,{position:h})}),P.type==="spot"&&(0,Oe.jsxs)(Oe.Fragment,{children:[(0,Oe.jsx)(te,{label:"Angle",value:P.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:h=>`${Math.round(h*180/Math.PI)}\xB0`,onChange:h=>M(P.id,{angle:h})}),(0,Oe.jsx)(te,{label:"Penumbra",value:P.penumbra??.2,min:0,max:1,step:.01,onChange:h=>M(P.id,{penumbra:h})}),(0,Oe.jsx)(te,{label:"Distance",value:P.distance??0,min:0,max:100,step:.5,onChange:h=>M(P.id,{distance:h})}),(0,Oe.jsx)(te,{label:"Decay",value:P.decay??2,min:0,max:4,step:.1,onChange:h=>M(P.id,{decay:h})})]}),(0,Oe.jsx)(Ut,{label:"Attached to camera",checked:P.attachedToCamera,onChange:h=>M(P.id,{attachedToCamera:h})}),(0,Oe.jsx)(Ut,{label:"Cast shadows",checked:P.castShadow,onChange:h=>M(P.id,{castShadow:h})}),(0,Oe.jsx)(te,{label:"Shadow bias",value:P.shadowBias,min:-.01,max:.01,step:1e-4,onChange:h=>M(P.id,{shadowBias:h})})]}):null]}),(0,Oe.jsxs)(zt,{title:"Shadows",open:n.shadows,onToggle:()=>d("shadows"),disabled:!p.enabled,trailing:(0,Oe.jsx)(Ht,{checked:p.enabled,onChange:h=>g({...p,enabled:h}),label:"Toggle shadows"}),children:[(0,Oe.jsx)(mi,{label:"Map size",value:String(p.mapSize),options:sO,onChange:h=>g({...p,mapSize:Number(h)})}),(0,Oe.jsx)(te,{label:"Bias",value:p.bias,min:-.01,max:.01,step:1e-4,onChange:h=>g({...p,bias:h})}),(0,Oe.jsx)(te,{label:"Normal bias",value:p.normalBias,min:0,max:.2,step:.01,onChange:h=>g({...p,normalBias:h})}),(0,Oe.jsx)(te,{label:"Radius (softness)",value:p.radius,min:0,max:20,step:.5,onChange:h=>g({...p,radius:h})})]}),(0,Oe.jsxs)(zt,{title:"Ground Shadows",open:n.groundShadows,onToggle:()=>d("groundShadows"),disabled:!f.enabled,trailing:(0,Oe.jsx)(Ht,{checked:f.enabled,onChange:h=>y({...f,enabled:h}),label:"Toggle ground shadows"}),children:[(0,Oe.jsxs)("div",{className:"se-field",children:[(0,Oe.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,Oe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(h=>(0,Oe.jsx)("button",{type:"button",className:`se-segmentedOption ${f.mode===h?"se-segmentedOption--active":""}`,onClick:()=>y({...f,mode:h}),children:h==="shadowCatcher"?"Shadow Catcher":"Baked AO"},h))})]}),f.mode==="bakedAO"&&(0,Oe.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,Oe.jsx)(te,{label:"Intensity",value:f.intensity,min:0,max:1,step:.01,onChange:h=>y({...f,intensity:h})}),(0,Oe.jsx)(te,{label:"Border fade",value:f.borderFade,min:0,max:10,step:.1,onChange:h=>y({...f,borderFade:h})}),(0,Oe.jsx)(te,{label:"Height",value:f.height,min:-5,max:5,step:.1,onChange:h=>y({...f,height:h})}),(0,Oe.jsx)(te,{label:"Size",value:f.size,min:1,max:50,step:.5,onChange:h=>y({...f,size:h})})]}),(0,Oe.jsx)(zt,{title:"Environment",open:n.environment,onToggle:()=>d("environment"),children:m?(0,Oe.jsxs)(Oe.Fragment,{children:[(0,Oe.jsx)(te,{label:"Orientation",value:v.rotation,min:0,max:360,step:1,formatValue:h=>`${h}\xB0`,onChange:h=>x({...v,rotation:h})}),(0,Oe.jsx)(te,{label:"Brightness",value:v.intensity,min:0,max:3,step:.05,onChange:h=>x({...v,intensity:h})}),(0,Oe.jsxs)(zt,{title:"Shadow",open:n.envShadow,onToggle:()=>d("envShadow"),trailing:(0,Oe.jsx)(Ht,{checked:v.shadowLight.enabled,onChange:h=>x({...v,shadowLight:{...v.shadowLight,enabled:h}}),label:"Toggle environment shadow light"}),disabled:!v.shadowLight.enabled,children:[(0,Oe.jsx)(te,{label:"Light intensity",value:v.shadowLight.intensity,min:0,max:20,step:.1,onChange:h=>x({...v,shadowLight:{...v.shadowLight,intensity:h}})}),(0,Oe.jsx)(te,{label:"Shadow bias",value:v.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:h=>x({...v,shadowLight:{...v.shadowLight,bias:h}})})]})]}):(0,Oe.jsx)(vr,{requiredTier:"starter",feature:"Environment lighting"})})]})}var Bf=require("react"),hi=require("lucide-react");var Le=require("react/jsx-runtime"),dO={playing:"Playing",paused:"Paused",finished:"Finished"},eP={repeat:"Looping",once:"Play once","ping-pong":"Ping-pong"};function uO(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),r=(t%60).toFixed(1).padStart(4,"0");return`${n}:${r}`}function tP(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),r=(t%60).toFixed(1).padStart(4,"0");return`${n}:${r}`}function pO(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function uy({config:e,onChange:t,clipDetails:n,active:r,play:i,pause:o,stop:a,setSpeed:s,seek:l}){let[d,u]=(0,Bf.useState)(!1),m=(0,Bf.useMemo)(()=>new Map(n.map(S=>[S.sourceName,S.duration])),[n]),c=e.animations.clips.filter(S=>!S.hidden),p=e.animations.clips.filter(S=>S.hidden),f=(S,T=e.animations.autoplayClip)=>{t({...e,animations:{clips:S(e.animations.clips),autoplayClip:T}})},v=(S,T)=>{f(h=>h.map(w=>w.sourceName===S?T(w):w))},b=(S,T)=>{v(S,h=>({...h,loopMode:T}))},g=(S,T)=>{let h=pO(T);v(S,w=>({...w,speed:h})),r.some(w=>w.clip===S)&&s(h,S)},y=(S,T)=>{v(S,h=>({...h,displayName:T}))},x=S=>{let T=e.animations.autoplayClip===S?null:S;t({...e,animations:{...e.animations,autoplayClip:T}})},M=S=>{f(T=>T.map(h=>h.sourceName===S?{...h,hidden:!0}:h),e.animations.autoplayClip===S?null:e.animations.autoplayClip),r.some(T=>T.clip===S)&&a(S)},P=S=>{f(T=>T.map(h=>h.sourceName===S?{...h,hidden:!1}:h))};return e.animations.clips.length===0?(0,Le.jsx)(Ta,{title:"Animations",children:(0,Le.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,Le.jsxs)(Ta,{title:"Animations",children:[c.length===0&&(0,Le.jsx)("div",{className:"se-helperCard",children:(0,Le.jsx)("span",{children:"Preview clips directly in the viewer (several can play at once), choose one optional autoplay animation, and use soft delete to hide clips without modifying the GLB."})}),c.length===0?(0,Le.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,Le.jsx)("div",{className:"se-animationList",children:c.map(S=>{let T=r.find(k=>k.clip===S.sourceName),h=T?.status==="playing",w=T?.time??0,C=m.get(S.sourceName)??0,_=T?dO[T.status]:"Ready";return(0,Le.jsxs)("article",{className:`se-animationCard ${T?"se-animationCard--active":""}`,children:[(0,Le.jsxs)("div",{className:"se-animationHeader",children:[(0,Le.jsxs)("div",{className:"se-animationHeading",children:[(0,Le.jsxs)("div",{className:"se-animationTitleRow",children:[(0,Le.jsx)("span",{className:"se-animationStatus",children:_}),e.animations.autoplayClip===S.sourceName?(0,Le.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,Le.jsx)("div",{className:"se-animationSource",children:S.sourceName})]}),(0,Le.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>M(S.sourceName),title:"Remove animation",children:(0,Le.jsx)(hi.Trash2,{size:16})})]}),(0,Le.jsxs)("div",{className:"se-field",children:[(0,Le.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,Le.jsx)("input",{className:"se-textInput",value:S.displayName,onChange:k=>y(S.sourceName,k.target.value),placeholder:"Animation name"})]}),(0,Le.jsxs)("div",{className:"se-animationMeta",children:[(0,Le.jsx)("span",{children:uO(C)}),(0,Le.jsx)("span",{children:eP[S.loopMode]??eP.repeat}),(0,Le.jsxs)("span",{children:[S.speed.toFixed(2),"x"]})]}),(0,Le.jsxs)("div",{className:"se-animationButtonRow",children:[(0,Le.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>h&&!T?.reverse?o(S.sourceName):i(S.sourceName,{alongside:!0}),"aria-label":h&&!T?.reverse?"Pause":"Play",title:h&&!T?.reverse?"Pause":"Play",children:h&&!T?.reverse?(0,Le.jsx)(hi.Pause,{size:16}):(0,Le.jsx)(hi.Play,{size:16})}),(0,Le.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>h&&T?.reverse?o(S.sourceName):i(S.sourceName,{alongside:!0,reverse:!0}),"aria-label":h&&T?.reverse?"Pause":"Play backwards",title:h&&T?.reverse?"Pause":"Play backwards",children:h&&T?.reverse?(0,Le.jsx)(hi.Pause,{size:16}):(0,Le.jsx)(hi.Rewind,{size:16})}),(0,Le.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>a(S.sourceName),disabled:!T,"aria-label":"Stop",title:"Stop",children:(0,Le.jsx)(hi.Square,{size:16})})]}),(0,Le.jsxs)("div",{className:"se-animationSeekRow",children:[(0,Le.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(C,.001),step:.01,value:Math.min(w,C),disabled:!T||C<=0,onChange:k=>l(Number(k.target.value),S.sourceName),"aria-label":"Seek"}),(0,Le.jsxs)("span",{className:"se-animationSeekTime",children:[tP(Math.min(w,C))," / ",tP(C)]})]}),(0,Le.jsxs)("div",{className:"se-animationGrid",children:[(0,Le.jsxs)("label",{className:"se-field",children:[(0,Le.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,Le.jsxs)("select",{className:"se-select",value:S.loopMode,onChange:k=>b(S.sourceName,k.target.value),children:[(0,Le.jsx)("option",{value:"repeat",children:"Loop"}),(0,Le.jsx)("option",{value:"once",children:"Play Once"}),(0,Le.jsx)("option",{value:"ping-pong",children:"Ping-Pong"})]})]}),(0,Le.jsxs)("label",{className:"se-field",children:[(0,Le.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,Le.jsxs)("span",{className:"se-fieldValue",children:[S.speed.toFixed(2),"x"]})]}),(0,Le.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,Le.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:S.speed,onChange:k=>g(S.sourceName,Number(k.target.value))}),(0,Le.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:S.speed,onChange:k=>g(S.sourceName,Number(k.target.value))})]})]})]}),(0,Le.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===S.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>x(S.sourceName),children:e.animations.autoplayClip===S.sourceName?"Disable autoplay":"Set as autoplay"})]},S.sourceName)})}),p.length>0?(0,Le.jsxs)("section",{className:"se-removedAnimations",children:[(0,Le.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>u(S=>!S),children:(0,Le.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Le.jsx)(hi.ChevronDown,{size:16,className:`se-panelChevron ${d?"se-panelChevron--open":""}`}),(0,Le.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",p.length,")"]})]})}),d?(0,Le.jsx)("div",{className:"se-removedAnimationList",children:p.map(S=>(0,Le.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,Le.jsxs)("div",{children:[(0,Le.jsx)("div",{className:"se-removedAnimationName",children:S.displayName||S.sourceName}),(0,Le.jsx)("div",{className:"se-animationSource",children:S.sourceName})]}),(0,Le.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>P(S.sourceName),children:"Restore"})]},S.sourceName))}):null]}):null]})}var If=require("react"),ld=require("lucide-react");var ge=require("react/jsx-runtime");function py({config:e,onChange:t,cameraState:n,onPreviewView:r}){let[i,o]=(0,If.useState)(null),[a,s]=(0,If.useState)(""),[l,d]=(0,If.useState)(""),u=b=>{o(structuredClone(b)),s(b.minDistance?.toString()??""),d(b.maxDistance?.toString()??"")},m=a.trim()===""?void 0:Number(a),c=l.trim()===""?void 0:Number(l),p=[m,c].some(b=>b!==void 0&&(!Number.isFinite(b)||b<0))?"Distances must be non-negative numbers.":m!==void 0&&c!==void 0&&m>c?"Maximum distance must be at least the minimum.":i?.images?.some(b=>b.src.trim()&&!qc(b.src))||i?.links?.some(b=>b.href.trim()&&!qc(b.href))?"Use an HTTP(S) URL or a relative path for images and links.":null,f=()=>{if(!i?.title.trim()||p)return;let b={...i,title:i.title.trim(),category:i.category?.trim()||void 0,minDistance:m,maxDistance:c,images:i.images?.filter(g=>g.src.trim()).map(g=>({...g,src:g.src.trim()})),links:i.links?.filter(g=>g.href.trim()).map(g=>({...g,href:g.href.trim(),label:g.label.trim()||"Learn more"}))};t({...e,annotations:e.annotations.map(g=>g.id===i.id?b:g)}),o(null)},v=b=>{window.confirm("Delete this annotation?")&&(t({...e,annotations:e.annotations.filter(g=>g.id!==b).map((g,y)=>({...g,id:y+1}))}),o(null))};return(0,ge.jsxs)(Ta,{title:"Annotations",children:[e.annotations.length===0?(0,ge.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,ge.jsx)("div",{className:"se-annotationList",children:e.annotations.map(b=>(0,ge.jsxs)("div",{className:"se-annotationRow",children:[(0,ge.jsxs)("span",{className:"se-annotationNumber",children:["#",b.id]}),(0,ge.jsxs)("div",{className:"se-annotationSummary",children:[(0,ge.jsxs)("div",{className:"se-annotationHeading",children:[(0,ge.jsx)("span",{className:"se-annotationTitle",title:b.title,children:b.title}),b.category?.trim()&&(0,ge.jsx)("span",{className:"se-annotationCategory",title:b.category,children:b.category})]}),b.description&&(0,ge.jsx)("p",{className:"se-annotationDescription",title:b.description,children:b.description})]}),(0,ge.jsxs)("div",{className:"se-annotationActions",children:[Yc(b.cameraView)&&(0,ge.jsx)("button",{type:"button",className:"se-annotationAction",disabled:!r,onClick:()=>r?.(b.cameraView),title:"Preview saved view","aria-label":`Preview saved view for ${b.title}`,children:(0,ge.jsx)(ld.Eye,{size:15,"aria-hidden":"true"})}),(0,ge.jsx)("button",{type:"button",className:"se-annotationAction",onClick:()=>u(b),title:"Edit annotation","aria-label":`Edit ${b.title}`,children:(0,ge.jsx)(ld.Pencil,{size:15,"aria-hidden":"true"})}),(0,ge.jsx)("button",{type:"button",className:"se-annotationAction se-annotationAction--delete",onClick:()=>v(b.id),title:"Delete annotation","aria-label":`Delete ${b.title}`,children:(0,ge.jsx)(ld.Trash2,{size:15,"aria-hidden":"true"})})]})]},b.id))}),i&&(0,ge.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:()=>o(null),children:(0,ge.jsxs)("div",{className:"bb-editAnnotationPopup",onKeyDown:b=>{b.key==="Escape"&&(b.stopPropagation(),o(null))},role:"dialog","aria-modal":"true","aria-labelledby":"annotation-edit-title",onClick:b=>b.stopPropagation(),children:[(0,ge.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,ge.jsx)("h3",{id:"annotation-edit-title",className:"bb-editAnnotationTitle",children:"Edit annotation"}),(0,ge.jsx)("button",{className:"bb-editAnnotationClose","aria-label":"Close annotation editor",onClick:()=>o(null),children:"\xD7"})]}),(0,ge.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,ge.jsxs)("label",{className:"bb-field",children:[(0,ge.jsx)("span",{className:"bb-label",children:"Title"}),(0,ge.jsx)("input",{className:"bb-input",autoFocus:!0,value:i.title,onChange:b=>o({...i,title:b.target.value})})]}),(0,ge.jsxs)("label",{className:"bb-field",children:[(0,ge.jsx)("span",{className:"bb-label",children:"Description"}),(0,ge.jsx)("textarea",{className:"bb-textarea",rows:3,value:i.description,onChange:b=>o({...i,description:b.target.value})})]}),(0,ge.jsxs)("label",{className:"bb-field",children:[(0,ge.jsx)("span",{className:"bb-label",children:"Category"}),(0,ge.jsx)("input",{className:"bb-input",value:i.category??"",onChange:b=>o({...i,category:b.target.value}),placeholder:"For example, Features"})]}),(0,ge.jsxs)("p",{className:"se-annotationCoordinates",children:["Position: [",i.worldPosition.map(b=>b.toFixed(2)).join(", "),"]"]}),(0,ge.jsxs)("fieldset",{className:"bb-annotationFields",children:[(0,ge.jsx)("legend",{children:"Saved camera view"}),(0,ge.jsx)("p",{children:i.cameraView?"Tours use this saved view. Clear it to restore automatic close-up zoom.":"Tours automatically zoom in on the marker. Capture a view to use custom framing."}),(0,ge.jsxs)("div",{className:"bb-annotationFieldActions",children:[(0,ge.jsx)("button",{className:"bb-button",disabled:!n,onClick:()=>n&&o({...i,cameraView:structuredClone(n)}),children:"Capture current view"}),(0,ge.jsx)("button",{className:"bb-button",disabled:!i.cameraView||!r,onClick:()=>i.cameraView&&r?.(i.cameraView),children:"Preview"}),(0,ge.jsx)("button",{className:"bb-button",disabled:!i.cameraView,onClick:()=>o({...i,cameraView:void 0}),children:"Clear view"})]})]}),(0,ge.jsxs)("fieldset",{className:"bb-annotationFields",children:[(0,ge.jsx)("legend",{children:"Marker distance (scene units)"}),(0,ge.jsx)("p",{children:"Leave blank to show markers at any distance."}),(0,ge.jsxs)("div",{className:"bb-annotationDistanceFields",children:[(0,ge.jsxs)("label",{className:"bb-field",children:[(0,ge.jsx)("span",{className:"bb-label",children:"Minimum distance"}),(0,ge.jsx)("input",{className:"bb-input",type:"number",min:"0",step:"any",value:a,onChange:b=>s(b.target.value)})]}),(0,ge.jsxs)("label",{className:"bb-field",children:[(0,ge.jsx)("span",{className:"bb-label",children:"Maximum distance"}),(0,ge.jsx)("input",{className:"bb-input",type:"number",min:"0",step:"any",value:l,onChange:b=>d(b.target.value)})]})]})]}),(0,ge.jsxs)("fieldset",{className:"bb-annotationFields",children:[(0,ge.jsx)("legend",{children:"Images"}),i.images?.map((b,g)=>(0,ge.jsxs)("div",{className:"bb-annotationMediaRow",children:[(0,ge.jsxs)("label",{className:"bb-field",children:[(0,ge.jsxs)("span",{className:"bb-label",children:["Image URL ",g+1]}),(0,ge.jsx)("input",{className:"bb-input",value:b.src,onChange:y=>o({...i,images:i.images.map((x,M)=>M===g?{...x,src:y.target.value}:x)}),placeholder:"https://example.com/image.jpg"})]}),(0,ge.jsxs)("label",{className:"bb-field",children:[(0,ge.jsxs)("span",{className:"bb-label",children:["Image description ",g+1]}),(0,ge.jsx)("input",{className:"bb-input",value:b.alt??"",onChange:y=>o({...i,images:i.images.map((x,M)=>M===g?{...x,alt:y.target.value}:x)})})]}),(0,ge.jsxs)("button",{className:"bb-button",onClick:()=>o({...i,images:i.images.filter((y,x)=>x!==g)}),children:["Remove image ",g+1]})]},g)),(0,ge.jsx)("button",{className:"bb-button",onClick:()=>o({...i,images:[...i.images??[],{src:"",alt:""}]}),children:"Add image"})]}),(0,ge.jsxs)("fieldset",{className:"bb-annotationFields",children:[(0,ge.jsx)("legend",{children:"Links"}),i.links?.map((b,g)=>(0,ge.jsxs)("div",{className:"bb-annotationMediaRow",children:[(0,ge.jsxs)("label",{className:"bb-field",children:[(0,ge.jsxs)("span",{className:"bb-label",children:["Link URL ",g+1]}),(0,ge.jsx)("input",{className:"bb-input",value:b.href,onChange:y=>o({...i,links:i.links.map((x,M)=>M===g?{...x,href:y.target.value}:x)}),placeholder:"https://example.com/details"})]}),(0,ge.jsxs)("label",{className:"bb-field",children:[(0,ge.jsxs)("span",{className:"bb-label",children:["Link label ",g+1]}),(0,ge.jsx)("input",{className:"bb-input",value:b.label,onChange:y=>o({...i,links:i.links.map((x,M)=>M===g?{...x,label:y.target.value}:x)})})]}),(0,ge.jsxs)("button",{className:"bb-button",onClick:()=>o({...i,links:i.links.filter((y,x)=>x!==g)}),children:["Remove link ",g+1]})]},g)),(0,ge.jsx)("button",{className:"bb-button",onClick:()=>o({...i,links:[...i.links??[],{href:"",label:""}]}),children:"Add link"})]}),p&&(0,ge.jsx)("p",{role:"alert",children:p}),(0,ge.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,ge.jsx)("button",{className:"bb-button",onClick:()=>o(null),children:"Cancel"}),(0,ge.jsx)("button",{className:"bb-button bb-button--primary",disabled:!i.title.trim()||!!p,onClick:f,children:"Save"}),(0,ge.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>v(i.id),children:"Delete"})]})]})]})})]})}var Io=require("react"),ji=require("lucide-react");var Ge=require("react/jsx-runtime"),mO={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},zl=3.5;function my({config:e,onChange:t,cameraState:n,onPreviewWaypoint:r}){let i=e.cinematic??mO,o=Qc(),{waypoints:a}=i,s=(0,Io.useCallback)((y,x)=>{if(y.length<2)return 0;let M=0;for(let P=0;P<y.length-1;P++){let S=y[P].segmentDuration??zl;M+=S}return x&&y.length>1&&(M+=y[y.length-1].segmentDuration??zl),Math.max(M,0)},[]),l=(0,Io.useCallback)(y=>{t({...e,cinematic:{...i,...y}})},[e,i,t]),d=(0,Io.useCallback)(()=>{if(!n)return;let y={position:[...n.position],target:[...n.target],...n.azimuthAngle!=null?{azimuthAngle:n.azimuthAngle}:{},...n.polarAngle!=null?{polarAngle:n.polarAngle}:{},segmentDuration:zl},x=[...a,y],M=s(x,i.loop);l({waypoints:x,duration:M})},[n,a,i.loop,s,l]),u=(0,Io.useCallback)(y=>{let x=a.filter((P,S)=>S!==y),M=s(x,i.loop);l({waypoints:x,duration:M})},[a,i.loop,s,l]),m=(0,Io.useCallback)((y,x)=>{let M=y+x;if(M<0||M>=a.length)return;let P=[...a];[P[y],P[M]]=[P[M],P[y]];let S=s(P,i.loop);l({waypoints:P,duration:S})},[a,i.loop,s,l]),c=(0,Io.useCallback)((y,x)=>{let M=a.map((S,T)=>T===y?{...S,...x}:S),P=s(M,i.loop);l({waypoints:M,duration:P})},[a,i.loop,s,l]),[p,f]=(0,Io.useState)(!1),v=a.some(y=>y.segmentDuration!==void 0),b=(0,Io.useCallback)(y=>y>=a.length-1?zl:a[y]?.segmentDuration??zl,[a]),g=a.length>=2;return(0,Ge.jsxs)(Ta,{title:"Cinematic Camera",children:[(0,Ge.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,Ge.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:d,disabled:!n,title:"Capture the current camera view as a waypoint",children:[(0,Ge.jsx)(ji.Plus,{size:15}),"Add waypoint from current view"]}),(0,Ge.jsxs)("div",{className:"se-customizeToggle",children:[(0,Ge.jsxs)("label",{className:"se-toggleLabel",children:[(0,Ge.jsx)("input",{type:"checkbox",checked:p,onChange:y=>f(y.target.checked)}),(0,Ge.jsx)(ji.Settings,{size:14}),(0,Ge.jsx)("span",{children:"Customize durations between waypoints"})]}),p&&(0,Ge.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",zl,"s"]})]}),a.length===0?(0,Ge.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,Ge.jsxs)(Ge.Fragment,{children:[(0,Ge.jsx)("div",{className:"se-waypointList",children:a.map((y,x)=>{let M=b(x),P=x===a.length-1,S=y.segmentDuration!==void 0&&y.segmentDuration!==zl;return(0,Ge.jsxs)("div",{children:[(0,Ge.jsxs)("div",{className:"se-waypointCard",children:[(0,Ge.jsx)("div",{className:"se-waypointBadge",children:x+1}),(0,Ge.jsxs)("div",{className:"se-waypointBody",children:[(0,Ge.jsxs)("div",{className:"se-waypointCoords",children:["pos [",y.position.map(T=>T.toFixed(1)).join(", "),"]"]}),(0,Ge.jsxs)("div",{className:"se-waypointCoords",children:["look [",y.target.map(T=>T.toFixed(1)).join(", "),"]"]}),p&&!P&&(0,Ge.jsxs)("div",{className:`se-customBadge ${S?"se-customBadge--custom":"se-customBadge--default"}`,children:[M.toFixed(1),"s",!S&&" (default)"]})]}),(0,Ge.jsxs)("div",{className:"se-waypointActions",children:[(0,Ge.jsx)("button",{className:"se-waypointAction",onClick:()=>r?.(y),title:"Fly camera to this waypoint",disabled:!r,children:(0,Ge.jsx)(ji.MapPin,{size:15})}),(0,Ge.jsx)("button",{className:"se-waypointAction",onClick:()=>m(x,-1),title:"Move up",disabled:x===0,children:(0,Ge.jsx)(ji.ArrowUp,{size:15})}),(0,Ge.jsx)("button",{className:"se-waypointAction",onClick:()=>m(x,1),title:"Move down",disabled:P,children:(0,Ge.jsx)(ji.ArrowDown,{size:15})}),(0,Ge.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>u(x),title:"Delete waypoint",children:(0,Ge.jsx)(ji.Trash2,{size:15})})]})]}),p&&!P&&(0,Ge.jsxs)("div",{className:"se-segmentBetween",children:[(0,Ge.jsxs)("div",{className:"se-segmentLabel",children:[x+1," \u2192 ",x+2,!y.segmentDuration&&" (default)"]}),(0,Ge.jsxs)("div",{className:"se-segmentControls",children:[(0,Ge.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,Ge.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:M,onChange:T=>{let h=parseFloat(T.target.value);c(x,{segmentDuration:h})}}),(0,Ge.jsxs)("span",{className:"se-segmentValue",children:[M.toFixed(1),"s"]}),(0,Ge.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(T=>(0,Ge.jsxs)("button",{className:"se-presetButton",onClick:()=>c(x,{segmentDuration:T}),children:[T,"s"]},`preset-${x}-${T}`)),(0,Ge.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let T=a.map((w,C)=>{if(C===x){let{segmentDuration:_,...k}=w;return k}return w}),h=s(T,i.loop);l({waypoints:T,duration:h})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${x}`)})}),(0,Ge.jsxs)("div",{className:"se-totalDuration",children:[(0,Ge.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,Ge.jsx)("span",{className:"se-totalValue",children:g?(i.duration??s(a,i.loop)).toFixed(1)+"s":"-"}),!g&&(0,Ge.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,Ge.jsx)(Ut,{label:"Enable cinematic camera",checked:i.enabled,onChange:y=>l({enabled:y})}),(0,Ge.jsx)(Ut,{label:"Loop",checked:i.loop,onChange:y=>{let x=y,M=s(a,x);l({loop:x,duration:M})}}),(0,Ge.jsx)(Ut,{label:"Auto-play on load",checked:i.autoPlay,onChange:y=>l({autoPlay:y})}),i.autoPlay&&o?(0,Ge.jsx)("div",{className:"se-placeholder se-placeholder--spaced",children:"Your device is set to reduce motion, so this preview won't play on its own. Visitors without that setting will see it."}):null,!p&&g&&(0,Ge.jsx)(te,{label:"Duration",value:i.duration??s(a,i.loop),min:4,max:120,step:1,formatValue:y=>`${y}s`,onChange:y=>l({duration:y})})]})}var Vl=require("react"),Vf=require("react-colorful"),Lr=require("lucide-react");var nP=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],zf=["normal","hidden","selected","disabled"];var ie=require("react/jsx-runtime"),hy={all:"All objects",group:"Group",tag:"Tag",type:"Type",object:"One object"},rP={metric:"Metric",status:"Status",metadata:"Metadata"},hO={metric:"",stops:[[0,"#3b82f6"],[100,"#ef4444"]]};function fO(e){return e===void 0?"all":typeof e=="string"||Array.isArray(e)?"object":"group"in e?"group":"tag"in e?"tag":"type"}function bp(e){return e===void 0?"":typeof e=="string"?e:Array.isArray(e)?e[0]??"":"group"in e?e.group:"tag"in e?e.tag:e.type}function iP(e,t){if(e!=="all")return e==="object"?t:e==="group"?{group:t}:e==="tag"?{tag:t}:{type:t}}function gO(e){return"metric"in e?"metric":"status"in e?"status":"metadata"}function oP(e){return e==="metric"?{metric:""}:e==="status"?{status:["disabled"]}:{metadata:"",equals:""}}function bO(e){let t=e.trim();return t==="true"?!0:t==="false"?!1:t==="null"?null:t!==""&&Number.isFinite(Number(t))?Number(t):e}function fy(e){return e.trim()===""||!Number.isFinite(Number(e))?void 0:Number(e)}function aP(e,t="",n=0){return typeof e!="object"||e===null||Array.isArray(e)?t?[t]:[]:n>2?t?[t]:[]:Object.entries(e).flatMap(([r,i])=>aP(i,t?`${t}.${r}`:r,n+1))}var vp=e=>[...new Set(e.filter(t=>!!t))].sort((t,n)=>t.localeCompare(n));function zo({label:e,children:t}){return(0,ie.jsxs)("label",{className:"se-field",children:[(0,ie.jsx)("span",{className:"se-fieldLabel",children:e}),t]})}function yp({label:e,checked:t,color:n,onToggle:r,onColorChange:i}){let[o,a]=(0,Vl.useState)(!1),s=(0,Vl.useRef)(null);return(0,ie.jsxs)("div",{className:"se-field se-fieldInline",children:[(0,ie.jsxs)("label",{className:"se-ruleLook",children:[(0,ie.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:l=>r(l.target.checked)}),e]}),t&&n!==void 0&&i?(0,ie.jsx)("span",{ref:s,style:{display:"inline-flex"},children:(0,ie.jsx)(Vf.HexColorInput,{prefixed:!0,className:"se-swatch","aria-label":`${e} value`,onClick:()=>a(l=>!l),style:{background:n,color:As(n)},color:n,onChange:i})}):null,o?(0,ie.jsx)(hp,{anchorRef:s,onClose:()=>a(!1),children:(0,ie.jsx)(Vf.HexColorPicker,{color:n,onChange:i})}):null]})}function vO({title:e,open:t,onToggle:n,actions:r,children:i}){return(0,ie.jsxs)("section",{className:"se-panel",children:[(0,ie.jsxs)("div",{className:"se-ruleHeader",children:[(0,ie.jsx)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:(0,ie.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ie.jsx)(Lr.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,ie.jsx)("span",{className:"se-panelTitle",children:e})]})}),(0,ie.jsx)("span",{className:"se-ruleActions",children:r})]}),t?(0,ie.jsx)("div",{className:"se-panelBody",children:i}):null]})}function gy({config:e,onChange:t,objectBindings:n}){let r=e.styleRules??[],[i,o]=(0,Vl.useState)(r[0]?.id??null),a=(0,Vl.useMemo)(()=>{let c=Object.values(n);return{groups:vp(c.map(p=>p.group)),tags:vp(c.flatMap(p=>p.tags??[])),types:vp(c.map(p=>p.type??"other")),objects:c.map(p=>({id:p.id,label:p.label||p.id})).sort((p,f)=>p.label.localeCompare(f.label)),metrics:vp(c.flatMap(p=>Object.keys(p.metrics??{}))),metadata:vp(c.flatMap(p=>aP(p.metadata)))}},[n]),s=c=>t({...e,styleRules:c}),l=(c,p)=>s(r.map(f=>f.id===c?p(f):f)),d=()=>{let c=crypto.randomUUID();s([...r,{id:c,label:`Rule ${r.length+1}`,when:[{status:["disabled"]}],material:{baseColor:"#9ca3af"}}]),o(c)},u=(c,p)=>{let f=[...r],[v]=f.splice(c,1);f.splice(c+p,0,v),s(f)},m=c=>{let p=c.target?Ll(n,c.target):Object.keys(n),f=c.when?Array.isArray(c.when)?c.when:[c.when]:[];return p.filter(v=>f.every(b=>kv(n[v],b))).length};return(0,ie.jsxs)(Ta,{title:"Style rules",children:[(0,ie.jsx)("div",{className:"se-helperCard se-ruleIntro",children:"Restyle objects from their data while the app runs: a colour from a metric, grey when disabled, a pulse for an alarm. Set an object's metrics, status, and metadata in the Object tab to try a rule here. Later rules win over earlier ones."}),(0,ie.jsx)("datalist",{id:"se-ruleMetrics",children:a.metrics.map(c=>(0,ie.jsx)("option",{value:c},c))}),(0,ie.jsx)("datalist",{id:"se-ruleMetadata",children:a.metadata.map(c=>(0,ie.jsx)("option",{value:c},c))}),r.map((c,p)=>{let f=c.when?Array.isArray(c.when)?c.when:[c.when]:[],v=fO(c.target),b=c.material??{},g=c.pulse===!0?{}:c.pulse||void 0,y=c.target?Ll(n,c.target).length:Object.keys(n).length,x=h=>l(c.id,w=>({...w,when:h.length>0?h:void 0})),M=(h,w)=>x(f.map((C,_)=>_===h?w:C)),P=h=>l(c.id,w=>{let C={...w.material,...h};for(let _ of Object.keys(C))C[_]===void 0&&delete C[_];return{...w,material:Object.keys(C).length>0?C:void 0}}),S=h=>l(c.id,w=>({...w,colorScale:h})),T=v==="group"?a.groups:v==="tag"?a.tags:v==="type"?a.types:[];return(0,ie.jsxs)(vO,{title:c.label||`Rule ${p+1}`,open:i===c.id,onToggle:()=>o(h=>h===c.id?null:c.id),actions:(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>u(p,-1),disabled:p===0,"aria-label":"Move rule up",title:"Move up",children:(0,ie.jsx)(Lr.ArrowUp,{size:14})}),(0,ie.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>u(p,1),disabled:p===r.length-1,"aria-label":"Move rule down",title:"Move down",children:(0,ie.jsx)(Lr.ArrowDown,{size:14})}),(0,ie.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>s(r.filter(h=>h.id!==c.id)),"aria-label":"Delete rule",title:"Delete rule",children:(0,ie.jsx)(Lr.Trash2,{size:14})})]}),children:[(0,ie.jsx)(zo,{label:"Name",children:(0,ie.jsx)("input",{className:"se-textInput",value:c.label??"",placeholder:`Rule ${p+1}`,onChange:h=>l(c.id,w=>({...w,label:h.target.value}))})}),(0,ie.jsxs)("div",{className:"se-ruleGrid",children:[(0,ie.jsx)(zo,{label:"Applies to",children:(0,ie.jsx)("select",{className:"se-select",value:v,onChange:h=>{let w=h.target.value,C=w==="object"?a.objects[0]?.id:w==="group"?a.groups[0]:w==="tag"?a.tags[0]:w==="type"?a.types[0]:"";l(c.id,_=>({..._,target:iP(w,C??"")}))},children:Object.keys(hy).map(h=>(0,ie.jsx)("option",{value:h,children:hy[h]},h))})}),v!=="all"?(0,ie.jsx)(zo,{label:hy[v],children:(0,ie.jsxs)("select",{className:"se-select",value:bp(c.target),onChange:h=>l(c.id,w=>({...w,target:iP(v,h.target.value)})),children:[v==="object"?a.objects.map(h=>(0,ie.jsx)("option",{value:h.id,children:h.label},h.id)):T.map(h=>(0,ie.jsx)("option",{value:h,children:h},h)),(v==="object"?a.objects.some(h=>h.id===bp(c.target)):T.includes(bp(c.target)))?null:(0,ie.jsx)("option",{value:bp(c.target),children:bp(c.target)||"None in this model"})]})}):null]}),(0,ie.jsx)("div",{className:"se-fieldLabel",children:"When"}),f.length===0?(0,ie.jsx)("div",{className:"se-ruleHint",children:"Always applies."}):null,f.map((h,w)=>{let C=gO(h);return(0,ie.jsxs)("div",{className:"se-ruleCondition",children:[(0,ie.jsxs)("div",{className:"se-ruleConditionHeader",children:[(0,ie.jsx)("select",{className:"se-select","aria-label":"Condition type",value:C,onChange:_=>M(w,oP(_.target.value)),children:Object.keys(rP).map(_=>(0,ie.jsx)("option",{value:_,children:rP[_]},_))}),(0,ie.jsx)("button",{type:"button",className:"se-iconButton","aria-label":"Remove condition",title:"Remove condition",onClick:()=>x(f.filter((_,k)=>k!==w)),children:(0,ie.jsx)(Lr.X,{size:14})})]}),"metric"in h?(0,ie.jsxs)("div",{className:"se-ruleGrid se-ruleGrid--three",children:[(0,ie.jsx)(zo,{label:"Metric",children:(0,ie.jsx)("input",{className:"se-textInput",list:"se-ruleMetrics",value:h.metric,placeholder:"temperature",onChange:_=>M(w,{...h,metric:_.target.value})})}),(0,ie.jsx)(zo,{label:"Above",children:(0,ie.jsx)("input",{className:"se-numberInput",type:"number",value:h.above??"",placeholder:"any",onChange:_=>M(w,{...h,above:fy(_.target.value)})})}),(0,ie.jsx)(zo,{label:"Below",children:(0,ie.jsx)("input",{className:"se-numberInput",type:"number",value:h.below??"",placeholder:"any",onChange:_=>M(w,{...h,below:fy(_.target.value)})})})]}):"status"in h?(0,ie.jsx)("div",{className:"se-ruleStatuses",children:zf.map(_=>{let k=[].concat(h.status).includes(_);return(0,ie.jsxs)("label",{className:"se-ruleStatus",children:[(0,ie.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:k,onChange:()=>{let R=[].concat(h.status),U=k?R.filter(H=>H!==_):[...R,_];M(w,{status:U})}}),_]},_)})}):(0,ie.jsxs)("div",{className:"se-ruleGrid",children:[(0,ie.jsx)(zo,{label:"Key",children:(0,ie.jsx)("input",{className:"se-textInput",list:"se-ruleMetadata",value:h.metadata,placeholder:"alarm.state",onChange:_=>M(w,{...h,metadata:_.target.value})})}),(0,ie.jsx)(zo,{label:"Equals",children:(0,ie.jsx)("input",{className:"se-textInput",value:h.equals===null?"null":String(h.equals),placeholder:"fault",onChange:_=>M(w,{...h,equals:bO(_.target.value)})})})]})]},w)}),(0,ie.jsxs)("button",{type:"button",className:"se-animationButton",onClick:()=>x([...f,oP("metric")]),children:[(0,ie.jsx)(Lr.Plus,{size:14})," Add condition"]}),(0,ie.jsx)("div",{className:"se-fieldLabel",children:"Look"}),(0,ie.jsx)(yp,{label:"Colour",checked:b.baseColor!==void 0,color:b.baseColor,onToggle:h=>P({baseColor:h?"#9ca3af":void 0}),onColorChange:h=>P({baseColor:h})}),(0,ie.jsx)(yp,{label:"Opacity",checked:b.opacity!==void 0,onToggle:h=>P({opacity:h?.4:void 0})}),b.opacity!==void 0?(0,ie.jsx)(te,{label:"Opacity",value:b.opacity,min:0,max:1,step:.05,formatValue:h=>`${Math.round(h*100)}%`,onChange:h=>P({opacity:h})}):null,(0,ie.jsx)(yp,{label:"Glow",checked:b.emissive!==void 0,color:b.emissive,onToggle:h=>P({emissive:h?"#ff3b30":void 0,emissiveIntensity:h?b.emissiveIntensity??1:void 0}),onColorChange:h=>P({emissive:h})}),(0,ie.jsx)(yp,{label:"Colour from a metric",checked:c.colorScale!==void 0,onToggle:h=>S(h?{...hO,metric:a.metrics[0]??""}:void 0)}),c.colorScale?(0,ie.jsxs)("div",{className:"se-ruleCondition",children:[(0,ie.jsxs)("div",{className:"se-ruleGrid",children:[(0,ie.jsx)(zo,{label:"Metric",children:(0,ie.jsx)("input",{className:"se-textInput",list:"se-ruleMetrics",value:c.colorScale.metric,placeholder:"temperature",onChange:h=>S({...c.colorScale,metric:h.target.value})})}),(0,ie.jsx)(zo,{label:"Sets",children:(0,ie.jsxs)("select",{className:"se-select",value:c.colorScale.channel??"baseColor",onChange:h=>S({...c.colorScale,channel:h.target.value}),children:[(0,ie.jsx)("option",{value:"baseColor",children:"Colour"}),(0,ie.jsx)("option",{value:"emissive",children:"Glow colour"})]})})]}),c.colorScale.stops.map(([h,w],C)=>{let _=k=>S({...c.colorScale,stops:c.colorScale.stops.map((R,U)=>U===C?k:R)});return(0,ie.jsxs)("div",{className:"se-ruleStop",children:[(0,ie.jsx)("input",{className:"se-numberInput",type:"number","aria-label":"Stop value",value:h,onChange:k=>_([fy(k.target.value)??0,w])}),(0,ie.jsx)($r,{label:`At ${h}`,value:w,onChange:k=>_([h,k])}),(0,ie.jsx)("button",{type:"button",className:"se-iconButton","aria-label":"Remove stop",title:"Remove stop",disabled:c.colorScale.stops.length<=1,onClick:()=>S({...c.colorScale,stops:c.colorScale.stops.filter((k,R)=>R!==C)}),children:(0,ie.jsx)(Lr.X,{size:14})})]},C)}),(0,ie.jsxs)("button",{type:"button",className:"se-animationButton",onClick:()=>{let h=c.colorScale.stops,w=h[h.length-1];S({...c.colorScale,stops:[...h,[(w?.[0]??0)+10,w?.[1]??"#ffffff"]]})},children:[(0,ie.jsx)(Lr.Plus,{size:14})," Add stop"]})]}):null,(0,ie.jsx)(yp,{label:"Pulse",checked:g!==void 0,color:g?.color??"#ff3b30",onToggle:h=>l(c.id,w=>({...w,pulse:h?{color:"#ff3b30",speed:1}:void 0})),onColorChange:h=>l(c.id,w=>({...w,pulse:{...g,color:h}}))}),g?(0,ie.jsx)(ie.Fragment,{children:(0,ie.jsx)(te,{label:"Pulses per second",value:g.speed??1,min:.2,max:4,step:.1,formatValue:h=>h.toFixed(1),onChange:h=>l(c.id,w=>({...w,pulse:{...g,speed:h}}))})}):null,(0,ie.jsxs)("div",{className:"se-ruleHint se-ruleMatches",children:["Matches ",m(c)," of ",y," ",y===1?"object":"objects"," right now."]})]},c.id)}),(0,ie.jsxs)("button",{type:"button",className:"se-animationButton",onClick:d,children:[(0,ie.jsx)(Lr.Plus,{size:14})," Add rule"]})]})}var qr=require("lucide-react");var Rn=require("react/jsx-runtime"),yO=[{label:"General",icon:(0,Rn.jsx)(qr.Box,{})},{label:"Lighting",icon:(0,Rn.jsx)(qr.Spotlight,{})},{label:"Animations",icon:(0,Rn.jsx)(qr.Clapperboard,{})},{label:"Post Processing",icon:(0,Rn.jsx)(qr.Sparkles,{})},{label:"Annotations",icon:(0,Rn.jsx)(qr.MessageSquareText,{})},{label:"Cinematic",icon:(0,Rn.jsx)(qr.Video,{})},{label:"Rules",icon:(0,Rn.jsx)(qr.Palette,{})}],sP={active:[],play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}},xO=[],wO={};function by({config:e,onChange:t,activeSubTab:n,onActiveSubTabChange:r,cameraState:i=null,onPreviewWaypoint:o,animationClipDetails:a=[],animationConfig:s,onAnimationConfigChange:l,materialVariantGroups:d=xO,objectBindings:u=wO,animationPlayback:m=sP}){let[c,p]=(0,Uf.useState)("General"),f=n??c,v=m??sP,{tier:b}=Xr(),g=ho(b,"starter"),y=ho(b,"growth");(0,Uf.useEffect)(()=>{n!==void 0&&p(n)},[n]);let x=M=>{n===void 0&&p(M),r?.(M)};return(0,Rn.jsxs)("div",{className:"se-tabContent",children:[(0,Rn.jsx)("div",{className:"se-subTabRow",children:yO.map(M=>(0,Rn.jsx)("button",{type:"button",title:M.label,"aria-label":M.label,"aria-pressed":f===M.label,className:`se-subTab ${f===M.label?"se-subTab--active":""}`,onClick:()=>x(M.label),children:M.icon},M.label))}),f==="General"&&(0,Rn.jsx)(ly,{config:e,onChange:t,materialVariantGroups:d}),f==="Lighting"&&(0,Rn.jsx)(dy,{config:e,onChange:t}),f==="Animations"&&(g?(0,Rn.jsx)(uy,{config:s?{...e,animations:s}:e,onChange:l?M=>l(M.animations):t,clipDetails:a,active:v.active,play:v.play,pause:v.pause,stop:v.stop,setSpeed:v.setSpeed,seek:v.seek}):(0,Rn.jsx)(vr,{requiredTier:"starter",feature:"Animation configuration"})),f==="Post Processing"&&(y?(0,Rn.jsx)(cy,{config:e,onChange:t}):(0,Rn.jsx)(vr,{requiredTier:"growth",feature:"Post-processing effects"})),f==="Annotations"&&(g?(0,Rn.jsx)(py,{config:e,onChange:t,cameraState:i,onPreviewView:o}):(0,Rn.jsx)(vr,{requiredTier:"starter",feature:"Annotations"})),f==="Cinematic"&&(g?(0,Rn.jsx)(my,{config:e,onChange:t,cameraState:i,onPreviewWaypoint:o}):(0,Rn.jsx)(vr,{requiredTier:"starter",feature:"Cinematic camera"})),f==="Rules"&&(g?(0,Rn.jsx)(gy,{config:e,onChange:t,objectBindings:u}):(0,Rn.jsx)(vr,{requiredTier:"starter",feature:"Style rules"}))]})}var cd=require("lucide-react"),Cn=require("react/jsx-runtime");function lP({title:e,trailing:t,children:n,disabled:r,open:i,onToggle:o,tooltip:a}){let s=a?`${a}`:e;return(0,Cn.jsxs)("div",{className:"bb-materialPanel",children:[(0,Cn.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:o,"aria-expanded":i,title:s,children:[(0,Cn.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,Cn.jsx)(cd.ChevronDown,{size:14,className:`bb-materialPanelChevron ${i?"bb-materialPanelChevron--open":""}`}),(0,Cn.jsx)("span",{className:"bb-materialPanelTitle",children:e}),a?(0,Cn.jsx)("span",{className:"bb-materialPanelHelp",title:s,"aria-label":s,role:"img",onClick:l=>l.stopPropagation(),children:(0,Cn.jsx)(cd.Info,{size:12})}):null]}),t?(0,Cn.jsx)("div",{onClick:l=>l.stopPropagation(),children:t}):null]}),i?(0,Cn.jsx)("div",{className:"bb-materialPanelBody",style:r?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function er({title:e,open:t,onToggle:n,trailing:r,children:i,tooltip:o}){let a=o?`${e}: ${o}`:e;return(0,Cn.jsxs)("div",{className:"bb-section",children:[(0,Cn.jsxs)("div",{className:"bb-sectionHeaderRow",children:[(0,Cn.jsx)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:n,"aria-expanded":t,title:a,children:(0,Cn.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,Cn.jsx)(cd.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,Cn.jsx)("h2",{className:"bb-sectionTitle",children:e}),o?(0,Cn.jsx)("span",{className:"bb-sectionHelp",title:a,"aria-label":a,role:"img",onClick:s=>s.stopPropagation(),children:(0,Cn.jsx)(cd.Info,{size:13})}):null]})}),r?(0,Cn.jsx)("span",{className:"bb-sectionHeaderTrailing",children:r}):null]}),t?(0,Cn.jsx)("div",{className:"bb-sectionBody",children:i}):null]})}function cP({checked:e,onChange:t,label:n}){return(0,Cn.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Cn.jsx)("input",{type:"checkbox",checked:e,onChange:r=>t(r.target.checked)}),(0,Cn.jsx)("span",{className:"se-switchTrack",children:(0,Cn.jsx)("span",{className:"se-switchThumb"})})]})}var xy=require("react"),hP=require("lucide-react");var dP=["front","back","double"],uP=["normal","additive"];var Ff=require("react/jsx-runtime");function fi({panelKey:e,title:t,tooltip:n,toggleLabel:r,controls:i,children:o,requiredTier:a}){let{openMaterialPanels:s,materialPanelEnabled:l,onToggleMaterialPanel:d,onSetMaterialPanelState:u}=i,m=a?.locked??!1;return(0,Ff.jsx)(lP,{title:t,tooltip:n,disabled:m||!l[e],open:s[e],onToggle:()=>d(e),trailing:(0,Ff.jsx)(cP,{checked:!m&&l[e],onChange:m?()=>{}:c=>u(e,c),label:r??`Toggle ${t}`}),children:m&&a?(0,Ff.jsx)(vr,{requiredTier:a.tier,feature:t}):o})}var Pa=require("react"),jf=require("react-colorful"),dd=require("lucide-react");var vt=require("react/jsx-runtime"),vy=(0,Pa.createContext)(null);function Yn({label:e,value:t,placeholder:n,onChange:r}){let i=(0,Pa.useRef)(null),o=(0,Pa.useContext)(vy);return(0,vt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsxs)("div",{className:"bb-fileField",title:o??void 0,children:[(0,vt.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:n,value:t,disabled:!!o&&!t,onChange:a=>{let s=a.target.value;!s&&t&&du(t),r(s)}}),(0,vt.jsx)("button",{type:"button",className:"bb-fileFieldButton",disabled:!!o,onClick:()=>i.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,vt.jsx)(dd.FileUp,{size:20})}),(0,vt.jsx)("input",{ref:i,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:a=>{let s=a.target.files?.[0];if(!s)return;let l=Rm(s);t&&t!==l&&du(t),pl(l,URL.createObjectURL(s)),r(l),a.target.value=""}})]})]})}function Aa({label:e,value:t,fallback:n="#ffffff",variant:r="swatch",onChange:i}){let[o,a]=(0,Pa.useState)(!1),s=t||n,l=(0,Pa.useRef)(null);return(0,vt.jsxs)("div",{className:"bb-field",children:[(0,vt.jsx)("span",{className:"bb-label",children:e}),(0,vt.jsx)("div",{className:"se-fieldInline",children:(0,vt.jsx)("span",{ref:l,className:r==="input"?"bb-colorFieldAnchor":void 0,style:r==="swatch"?{display:"inline-flex"}:void 0,children:(0,vt.jsx)(jf.HexColorInput,{prefixed:!0,className:r==="input"?"bb-input bb-colorInput":"se-swatch","aria-label":e,onClick:()=>a(d=>!d),style:{background:s,color:As(s)},color:s,onChange:i})})}),o?(0,vt.jsx)(hp,{anchorRef:l,onClose:()=>a(!1),children:(0,vt.jsx)(jf.HexColorPicker,{color:s,onChange:i})}):null]})}function xp({label:e,checked:t,onChange:n}){return(0,vt.jsxs)("label",{className:"bb-checkbox",children:[(0,vt.jsx)("input",{type:"checkbox",checked:t,onChange:r=>n(r.target.checked)}),e]})}function pP({label:e,value:t,min:n,max:r,step:i,placeholder:o,disabled:a,onChange:s}){return(0,vt.jsxs)("div",{className:"bb-field",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsx)("input",{className:"bb-input",type:"number",min:n,max:r,step:i,placeholder:o,disabled:a,value:t??"",onChange:l=>s(l.target.value===""?void 0:Number(l.target.value))})]})}function SO(e,t){let n=t<1?Math.ceil(-Math.log10(t)):0,r=10**Math.max(n,0);return Math.round(e*r)/r}function yy({label:e,value:t,min:n,max:r,step:i=.01,disabled:o,onChange:a}){let s=t??0,l=u=>{let m=u;return n!==void 0&&(m=Math.max(n,m)),r!==void 0&&(m=Math.min(r,m)),m},d=u=>{a(l(SO(s+u*i,i)))};return(0,vt.jsxs)("div",{className:"bb-field",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsxs)("div",{className:"bb-numberStepper",children:[(0,vt.jsx)("button",{type:"button",className:"bb-numberStepper-btn",disabled:o,onClick:()=>d(-1),"aria-label":`Decrease ${e}`,title:`Decrease ${e}`,children:(0,vt.jsx)(dd.Minus,{size:12})}),(0,vt.jsx)("input",{className:"bb-input bb-numberStepper-input",type:"number",min:n,max:r,step:i,disabled:o,value:s,onChange:u=>{u.target.value!==""&&a(l(Number(u.target.value)))}}),(0,vt.jsx)("button",{type:"button",className:"bb-numberStepper-btn",disabled:o,onClick:()=>d(1),"aria-label":`Increase ${e}`,title:`Increase ${e}`,children:(0,vt.jsx)(dd.Plus,{size:12})})]})]})}function ud({label:e,value:t,options:n,onChange:r}){return(0,vt.jsxs)("div",{className:"bb-field",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsx)("select",{className:"bb-select",value:t,onChange:i=>r(i.target.value),children:n.map(i=>(0,vt.jsx)("option",{value:i,children:i},i))})]})}function Zt({label:e,value:t,min:n,max:r,step:i,onChange:o}){return(0,vt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,vt.jsx)("label",{className:"bb-label",children:e}),(0,vt.jsxs)("div",{className:"bb-sliderField",children:[(0,vt.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:n,max:r,step:i,value:t??n,onChange:s=>o(Number(s.target.value))}),(0,vt.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:n,max:r,step:i,value:t??"",onChange:s=>o(s.target.value===""?void 0:Number(s.target.value))})]})]})}var K=require("react/jsx-runtime"),mP="This object has no texture coordinates (UVs), so image maps can't be placed on it. Colors and the other settings work, and Decals can put an image on it.";function fP({selectedItem:e,selectedMaterial:t,pbrWorkflow:n,onPbrWorkflowChange:r,openMaterialPanels:i,materialPanelEnabled:o,onToggleMaterialPanel:a,onSetMaterialPanelState:s,updateSelectedMaterial:l,setSelectedTexturePath:d,isTexturePositioningEnabled:u,onConfirmTexturePosition:m,takesImage:c=!0}){let p={openMaterialPanels:i,materialPanelEnabled:o,onToggleMaterialPanel:a,onSetMaterialPanelState:s},{tier:f}=Xr(),v=ho(f,"starter"),b={tier:"starter",locked:!v},[g,y]=(0,xy.useState)("roughness"),[x,M]=(0,xy.useState)("factor"),P=(h,w)=>{l(e,C=>{if(!C?.texture?.path)return C??{};let _=C.texture.offset??[0,0],k=[_[0],_[1]];return k[h]=w,{...C,texture:{...C.texture,offset:k}}})},S=h=>{l(e,w=>{if(!w?.texture?.path)return w??{};let C=(h%360+360)%360;return{...w,texture:{...w.texture,rotation:C*Math.PI/180}}})},T=()=>{d(e,"texture","")};return(0,K.jsxs)(vy.Provider,{value:c?null:mP,children:[c?null:(0,K.jsx)("p",{className:"bb-note bb-materialNotice",children:mP}),(0,K.jsx)(fi,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:p,children:v?(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(ud,{label:"Workflow",value:n,options:["metalness","specular"],onChange:r}),(0,K.jsx)("div",{className:"bb-field bb-field--full",children:(0,K.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,K.jsx)(Yn,{label:n==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:h=>d(e,"texture",h)}),t?.texture?.path?(0,K.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,K.jsxs)("div",{className:"bb-fieldLabel",style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[(0,K.jsx)("span",{className:"bb-label",children:"Texture position"}),(0,K.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:T,title:"Remove the base color texture and its position offset",children:[(0,K.jsx)(hP.Trash2,{size:14,style:{marginRight:4,verticalAlign:"-2px"}}),"Remove texture"]})]}),(0,K.jsxs)("div",{className:"bb-grid",style:{marginTop:6},children:[(0,K.jsx)(yy,{label:"Offset X",value:t?.texture?.offset?.[0]??0,step:.01,onChange:h=>P(0,h)}),(0,K.jsx)(yy,{label:"Offset Y",value:t?.texture?.offset?.[1]??0,step:.01,onChange:h=>P(1,h)})]}),(0,K.jsx)(Zt,{label:"Rotation",value:((t?.texture?.rotation??0)*180/Math.PI%360+360)%360,min:0,max:360,step:1,onChange:h=>S(h??0)}),u?(0,K.jsx)("button",{type:"button",className:"bb-button bb-button--primary",style:{marginTop:8},onClick:m,title:"Confirm this texture position and exit positioning mode",children:"Done positioning"}):(0,K.jsx)("p",{className:"bb-note",style:{margin:"6px 0 0"},children:"Double-click the object in the preview to drag its texture directly (scroll to zoom), or edit its offset numerically once positioning."})]}):null,(0,K.jsx)(Aa,{label:n==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:h=>l(e,w=>({...w,baseColor:h}))}),n==="metalness"?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,metalness:h}))}),(0,K.jsx)(Yn,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:h=>d(e,"metalnessMap",h)})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Zt,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,specularIntensity:h}))}),(0,K.jsx)(Aa,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:h=>l(e,w=>({...w,specularColor:h}))}),(0,K.jsx)(Yn,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:h=>d(e,"specularIntensityMap",h)}),(0,K.jsx)(Yn,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:h=>d(e,"specularColorMap",h)})]}),(0,K.jsx)(Zt,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,reflectivity:h}))})]}):(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Aa,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:h=>l(e,w=>({...w,baseColor:h}))}),(0,K.jsx)(Zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,metalness:h}))}),(0,K.jsx)("div",{className:"bb-field bb-field--full",children:(0,K.jsx)(vr,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,K.jsx)(fi,{panelKey:"roughness",requiredTier:b,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:p,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(ud,{label:"Mode",value:g,options:["roughness","glossiness"],onChange:y}),(0,K.jsx)("div",{className:"bb-field bb-field--full",children:(0,K.jsx)("p",{className:"bb-note",style:{margin:0},children:g==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),g==="roughness"?(0,K.jsx)(Zt,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,roughness:h}))}):(0,K.jsx)(Zt,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,roughness:h===void 0?void 0:1-h}))}),(0,K.jsx)(Yn,{label:g==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:h=>d(e,"roughnessMap",h)})]})}),(0,K.jsx)(fi,{panelKey:"emission",requiredTier:b,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:p,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Aa,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:h=>l(e,w=>({...w,emissive:h}))}),(0,K.jsx)(Zt,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:h=>l(e,w=>({...w,emissiveIntensity:h}))}),(0,K.jsx)(Yn,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:h=>d(e,"emissiveMap",h)})]})}),(0,K.jsx)(fi,{panelKey:"opacity",requiredTier:b,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:p,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Zt,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,opacity:h}))}),(0,K.jsx)(Zt,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,alphaTest:h}))}),(0,K.jsx)(Yn,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:h=>d(e,"alphaMap",h)}),(0,K.jsx)(ud,{label:"Blending mode",value:t?.blendingMode??"normal",options:uP,onChange:h=>l(e,w=>({...w,blendingMode:h}))}),(0,K.jsxs)("div",{className:"bb-field",children:[(0,K.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,K.jsx)("div",{className:"bb-checkboxRow",children:(0,K.jsx)(xp,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:h=>l(e,w=>({...w,alphaHash:h}))})})]}),(0,K.jsxs)("div",{className:"bb-field",children:[(0,K.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,K.jsx)("div",{className:"bb-checkboxRow",children:(0,K.jsx)(xp,{label:"Use dithering",checked:t?.dithering??!1,onChange:h=>l(e,w=>({...w,dithering:h}))})})]})]})}),(0,K.jsxs)(fi,{panelKey:"normalBump",requiredTier:b,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:p,children:[(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Yn,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:h=>d(e,"normalMap",h)}),(0,K.jsx)(Zt,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:h=>l(e,w=>({...w,normalScale:h}))}),(0,K.jsx)(Yn,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:h=>d(e,"bumpMap",h)}),(0,K.jsx)(Zt,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:h=>l(e,w=>({...w,bumpScale:h}))})]}),(0,K.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,K.jsx)(xp,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:h=>l(e,w=>({...w,flipNormalY:h}))})})]}),(0,K.jsx)(fi,{panelKey:"displacement",requiredTier:b,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:p,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Yn,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:h=>d(e,"displacementMap",h)}),(0,K.jsx)(Zt,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:h=>l(e,w=>({...w,displacementScale:h}))}),(0,K.jsx)(Zt,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:h=>l(e,w=>({...w,displacementBias:h}))})]})}),(0,K.jsx)(fi,{panelKey:"ao",requiredTier:b,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:p,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Yn,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:h=>d(e,"aoMap",h)}),(0,K.jsx)(Zt,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:h=>l(e,w=>({...w,aoMapIntensity:h}))})]})}),(0,K.jsxs)(fi,{panelKey:"clearcoat",requiredTier:b,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:p,children:[(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Yn,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:h=>d(e,"clearcoatMap",h)}),(0,K.jsx)(Zt,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,clearcoat:h}))}),(0,K.jsx)(Yn,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:h=>d(e,"clearcoatRoughnessMap",h)}),(0,K.jsx)(Zt,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,clearcoatRoughness:h}))}),(0,K.jsx)(Yn,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:h=>d(e,"clearcoatNormalMap",h)}),(0,K.jsx)(Zt,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:h=>l(e,w=>({...w,clearcoatNormalScale:h}))})]}),(0,K.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,K.jsx)(xp,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:h=>l(e,w=>({...w,flipClearcoatNormalY:h}))})})]}),(0,K.jsx)(fi,{panelKey:"sheen",requiredTier:b,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:p,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Zt,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,sheen:h}))}),(0,K.jsx)(Aa,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:h=>l(e,w=>({...w,sheenColor:h}))}),(0,K.jsx)(Yn,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:h=>d(e,"sheenColorMap",h)}),(0,K.jsx)(Zt,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,sheenRoughness:h}))}),(0,K.jsx)(Yn,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:h=>d(e,"sheenRoughnessMap",h)})]})}),(0,K.jsx)(fi,{panelKey:"anisotropy",requiredTier:b,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:p,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Zt,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,anisotropy:h}))}),(0,K.jsx)(ud,{label:"Tilt direction",value:x,options:["factor","texture"],onChange:M}),x==="factor"?(0,K.jsx)(Zt,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:h=>l(e,w=>({...w,anisotropyRotation:h}))}):(0,K.jsx)(Yn,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:h=>d(e,"anisotropyMap",h)})]})}),(0,K.jsx)(fi,{panelKey:"transmission",requiredTier:b,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:p,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Zt,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:h=>l(e,w=>({...w,transmission:h}))}),(0,K.jsx)(Yn,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:h=>d(e,"transmissionMap",h)}),(0,K.jsx)(Zt,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:h=>l(e,w=>({...w,thickness:h}))}),(0,K.jsx)(Yn,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:h=>d(e,"thicknessMap",h)}),(0,K.jsx)(Aa,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:h=>l(e,w=>({...w,attenuationColor:h}))}),(0,K.jsx)(pP,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:h=>l(e,w=>({...w,attenuationDistance:h}))})]})}),(0,K.jsx)(fi,{panelKey:"faces",requiredTier:b,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:p,children:(0,K.jsx)("div",{className:"bb-grid",children:(0,K.jsx)(ud,{label:"Side",value:t?.side??"front",options:dP,onChange:h=>l(e,w=>({...w,side:h}))})})})]})}var bP=require("lucide-react");var Hf="default",wy=[{id:Hf,label:"Default",swatch:"transparent",material:{}},{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}}],MO=Array.from(new Set(wy.flatMap(e=>Object.keys(e.material)))),_O=Object.fromEntries(MO.map(e=>[e,void 0]));function gP(e){return e.id===Hf?_O:e.material}var Ul=require("react/jsx-runtime");function vP({disabled:e,onApply:t}){return(0,Ul.jsx)("div",{className:"bb-presetGallery",children:wy.map(n=>(0,Ul.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${n.label} preset`,onClick:()=>t(gP(n)),children:[(0,Ul.jsx)("span",{className:"bb-presetSwatchColor",style:{background:n.swatch,display:"flex",alignItems:"center",justifyContent:"center"},children:n.id===Hf?(0,Ul.jsx)(bP.Ban,{size:28,strokeWidth:2,color:"#ffffff"}):null}),(0,Ul.jsx)("span",{className:"bb-presetSwatchLabel",children:n.label})]},n.id))})}var Hi=require("react/jsx-runtime");function yP({selectedItem:e,selectedBinding:t,open:n,onToggle:r,updateBinding:i,idError:o}){return(0,Hi.jsx)(er,{title:"Identity",open:n,onToggle:r,children:(0,Hi.jsxs)("div",{className:"bb-grid",children:[(0,Hi.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Hi.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,Hi.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,Hi.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,Hi.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Hi.jsx)("label",{className:"bb-label",children:"ID"}),(0,Hi.jsx)("input",{className:`bb-input ${o?"bb-input--error":""}`,value:t.id,onChange:a=>i(e,s=>({...s,id:a.target.value}))}),o?(0,Hi.jsx)("span",{className:"bb-status bb-status--error",children:o}):null]})]})})}var wp=require("react");var Jt=require("react/jsx-runtime");function xP({selectedItem:e,selectedBinding:t,open:n,onToggle:r,updateBinding:i}){let[o,a]=(0,wp.useState)(t.group??""),[s,l]=(0,wp.useState)(t.tags?.join(", ")??"");(0,wp.useEffect)(()=>{a(t.group??""),l(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let d=()=>{i(e,m=>({...m,group:o.trim()||void 0}))},u=()=>{let m=[...new Set(s.split(",").map(c=>c.trim()).filter(Boolean))];i(e,c=>({...c,tags:m.length>0?m:void 0}))};return(0,Jt.jsxs)(er,{title:"Basics",open:n,onToggle:r,children:[(0,Jt.jsxs)("div",{className:"bb-grid",children:[(0,Jt.jsxs)("div",{className:"bb-field",children:[(0,Jt.jsx)("label",{className:"bb-label",children:"Label"}),(0,Jt.jsx)("input",{className:"bb-input",value:t.label??"",onChange:m=>i(e,c=>({...c,label:m.target.value}))})]}),(0,Jt.jsxs)("div",{className:"bb-field",children:[(0,Jt.jsx)("label",{className:"bb-label",children:"Type"}),(0,Jt.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type??"other",onChange:m=>i(e,c=>({...c,type:m.target.value}))}),(0,Jt.jsx)("datalist",{id:"binding-type-suggestions",children:nP.map(m=>(0,Jt.jsx)("option",{value:m},m))})]}),(0,Jt.jsxs)("div",{className:"bb-field",children:[(0,Jt.jsx)("label",{className:"bb-label",children:"Status"}),(0,Jt.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:m=>i(e,c=>({...c,status:m.target.value})),children:zf.map(m=>(0,Jt.jsx)("option",{value:m,children:m},m))})]}),(0,Jt.jsxs)("div",{className:"bb-field",children:[(0,Jt.jsx)("label",{className:"bb-label",children:"Group"}),(0,Jt.jsx)("input",{className:"bb-input",placeholder:"paint",value:o,onChange:m=>a(m.target.value),onBlur:d,onKeyDown:m=>{m.key==="Enter"&&m.currentTarget.blur()}})]}),(0,Jt.jsxs)("div",{className:"bb-field",children:[(0,Jt.jsx)("label",{className:"bb-label",children:"Tags"}),(0,Jt.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:s,onChange:m=>l(m.target.value),onBlur:u,onKeyDown:m=>{m.key==="Enter"&&m.currentTarget.blur()}})]})]}),(0,Jt.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,Jt.jsxs)("label",{className:"bb-checkbox",children:[(0,Jt.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:m=>i(e,c=>({...c,selectable:m.target.checked}))}),"selectable"]}),(0,Jt.jsxs)("label",{className:"bb-checkbox",children:[(0,Jt.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:m=>i(e,c=>({...c,hoverable:m.target.checked}))}),"hoverable"]}),(0,Jt.jsxs)("label",{className:"bb-checkbox",children:[(0,Jt.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:m=>i(e,c=>({...c,visible:m.target.checked}))}),"visible"]})]})]})}var Gf=require("react");var xt=require("react/jsx-runtime"),wP=dl.filter(e=>e.handling==="viewer"),CO=dl.filter(e=>e.handling==="host");function SP({selectedItem:e,selectedBinding:t,open:n,onToggle:r,updateBinding:i,takesImage:o=!0}){let[a,s]=(0,Gf.useState)(new Set);(0,Gf.useEffect)(()=>{s(new Set)},[e]);let l=t.actions??[],d=(c,p)=>i(e,f=>({...f,actions:(f.actions??[]).map((v,b)=>b===c?p(v):v)})),u=c=>{i(e,p=>({...p,actions:(p.actions??[]).filter((f,v)=>v!==c)})),s(p=>{let f=new Set;return p.forEach(v=>{v<c?f.add(v):v>c&&f.add(v-1)}),f})},m=(c,p)=>s(f=>{let v=new Set(f);return p?v.add(c):v.delete(c),v});return(0,xt.jsxs)(er,{title:"Actions",open:n,onToggle:r,children:[(0,xt.jsx)("div",{className:"bb-actionList",children:l.map((c,p)=>{let f=iu(c.id),v=a.has(p)||!f,b=c.id.trim(),g=f?null:s1(c.id),y=b.length>0&&l.some((x,M)=>M!==p&&x.id.trim()===b);return(0,xt.jsxs)("div",{className:"bb-actionCard",children:[(0,xt.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,xt.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",p+1]}),(0,xt.jsx)("div",{className:"bb-actionCardMeta",children:c.type})]}),(0,xt.jsxs)("div",{className:"bb-actionGrid",children:[(0,xt.jsxs)("div",{className:"bb-field",children:[(0,xt.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,xt.jsxs)("select",{className:"bb-select",value:v?Mm:c.id,onChange:x=>{let M=x.target.value;if(M===Mm){m(p,!0);return}m(p,!1);let P=iu(M);d(p,S=>({...S,id:M,label:P&&nb(S.label)?P.label:S.label}))},children:[(0,xt.jsx)("optgroup",{label:"Handled by the viewer",children:wP.map(x=>(0,xt.jsx)("option",{value:x.id,children:x.id},x.id))}),(0,xt.jsx)("optgroup",{label:"Handled by your app",children:CO.map(x=>(0,xt.jsx)("option",{value:x.id,children:x.id},x.id))}),(0,xt.jsx)("option",{value:Mm,children:"Custom\u2026"})]})]}),v?(0,xt.jsxs)("div",{className:"bb-field",children:[(0,xt.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,xt.jsx)("input",{className:"bb-input",value:c.id,placeholder:"open-datasheet",onChange:x=>{m(p,!0),d(p,M=>({...M,id:x.target.value}))}})]}):null,(0,xt.jsxs)("div",{className:"bb-field",children:[(0,xt.jsx)("label",{className:"bb-label",children:"Label"}),(0,xt.jsx)("input",{className:"bb-input",value:c.label,onChange:x=>d(p,M=>({...M,label:x.target.value}))})]}),f?.id==="change-material"&&!o?(0,xt.jsx)("span",{className:"bb-note",style:{color:"#fcd34d"},children:"This object has no texture coordinates, so an image picked here can't be placed on it, and the viewer says so. Change Color and Add Image work."}):f?(0,xt.jsx)("span",{className:"bb-note",children:f.description}):b.length===0?(0,xt.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,xt.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.",g?(0,xt.jsxs)(xt.Fragment,{children:[" Did you mean ",(0,xt.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{m(p,!1);let x=iu(g);d(p,M=>({...M,id:g,label:x&&nb(M.label)?x.label:M.label}))},children:g}),"?"]}):null]}),c.effects?.length?(0,xt.jsxs)("span",{className:"bb-note",children:[c.effects.length," declarative effect",c.effects.length===1?"":"s",", execute with useViewerActions."]}):null,y?(0,xt.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,xt.jsx)("div",{className:"bb-actionFooter",children:(0,xt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>u(p),children:"Remove Action"})})]},p)})}),(0,xt.jsx)("div",{style:{marginTop:10},children:(0,xt.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let c=wP.find(p=>!l.some(f=>f.id===p.id));i(e,p=>({...p,actions:[...p.actions??[],{id:c?.id??"",label:c?.label??"New Action",type:"command"}]})),c||m(l.length,!0)},children:"Add Action"})})]})}var _P=require("react"),pd=require("lucide-react");var Ct=require("react/jsx-runtime"),MP=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function CP({selectedItem:e,selectedBinding:t,open:n,onToggle:r,updateBinding:i,placement:o,onPlacementChange:a,defaultSize:s,onImageFile:l,onNudge:d}){let{tier:u}=Xr(),m=(0,_P.useRef)(null),c=t.decals??[],p=o?.nodeKey===e?o:null,f=g=>i(e,y=>({...y,decals:g.length>0?g:void 0})),v=(g,y)=>f(c.map(x=>x.id===g?{...x,...y}:x)),b=g=>{g.image&&du(g.image),p?.decal.id===g.id&&a(null),f(c.filter(y=>y.id!==g.id))};return(0,Ct.jsx)(er,{title:"Decals",open:n,onToggle:r,tooltip:"Print a logo, image, or text on the selected object's surface.",children:ho(u,"starter")?(0,Ct.jsxs)(Ct.Fragment,{children:[(0,Ct.jsxs)("div",{className:"bb-decalActions",children:[(0,Ct.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:()=>m.current?.click(),children:[(0,Ct.jsx)(pd.ImagePlus,{size:15})," Add image"]}),(0,Ct.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:()=>a({nodeKey:e,decal:{id:MP(),text:"Your text",color:"#ffffff",size:s}}),children:[(0,Ct.jsx)(pd.Type,{size:15})," Add text"]}),(0,Ct.jsx)("input",{ref:m,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif,image/svg+xml",className:"bb-hiddenInput",onChange:g=>{let y=g.target.files?.[0];if(g.target.value="",!y)return;let x=Rm(y);pl(x,URL.createObjectURL(y)),l?.(x,y),a({nodeKey:e,decal:{id:MP(),image:x,size:s}})}})]}),c.length===0&&!p?(0,Ct.jsx)("div",{className:"bb-decalEmpty",children:"No decals on this object yet."}):null,c.map(g=>(0,Ct.jsxs)("div",{className:"bb-decalCard",children:[(0,Ct.jsxs)("div",{className:"bb-decalCardHeader",children:[(0,Ct.jsx)("span",{className:"bb-decalKind",children:g.image?"Image":"Text"}),(0,Ct.jsx)("span",{className:"bb-decalName",title:g.image??g.text,children:g.image??g.text}),(0,Ct.jsx)("button",{type:"button",className:"bb-iconButton bb-iconButton--danger",title:"Delete decal","aria-label":"Delete decal",onClick:()=>b(g),children:(0,Ct.jsx)(pd.Trash2,{size:15})})]}),(0,Ct.jsx)(_m,{onNudge:y=>d(g.id,y)}),(0,Ct.jsxs)("div",{className:"bb-grid",children:[g.image?null:(0,Ct.jsxs)(Ct.Fragment,{children:[(0,Ct.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,Ct.jsx)("label",{className:"bb-label",children:"Text"}),(0,Ct.jsx)("input",{className:"bb-input",value:g.text??"",onChange:y=>v(g.id,{text:y.target.value})})]}),(0,Ct.jsx)(Aa,{label:"Colour",variant:"input",value:g.color??"#ffffff",onChange:y=>v(g.id,{color:y})}),(0,Ct.jsxs)("div",{className:"bb-field",children:[(0,Ct.jsx)("label",{className:"bb-label",children:"Weight"}),(0,Ct.jsxs)("select",{className:"bb-input bb-decalWeight",value:g.fontWeight??"bold",onChange:y=>v(g.id,{fontWeight:y.target.value}),children:[(0,Ct.jsx)("option",{value:"bold",children:"Bold"}),(0,Ct.jsx)("option",{value:"normal",children:"Regular"})]})]})]}),(0,Ct.jsx)(Zt,{label:"Size",value:Number(g.size.toFixed(4)),min:Number((s/20).toPrecision(2)),max:Number((s*6).toPrecision(2)),step:Number((s/50).toPrecision(1)),onChange:y=>y!==void 0&&y>0&&v(g.id,{size:y})}),(0,Ct.jsx)(Zt,{label:"Rotation (\xB0)",value:Math.round((g.rotation??0)*180/Math.PI),min:-180,max:180,step:1,onChange:y=>v(g.id,{rotation:(y??0)*Math.PI/180})}),(0,Ct.jsx)(Zt,{label:"Opacity",value:g.opacity??1,min:0,max:1,step:.05,onChange:y=>v(g.id,{opacity:y??1})})]})]},g.id))]}):(0,Ct.jsx)(vr,{requiredTier:"starter",feature:"Decals"})})}var Wf=require("lucide-react");var Qt=require("react/jsx-runtime");function TP({selectedBinding:e,open:t,onToggle:n,cameraState:r,formattedCameraState:i,savedCameraPosition:o,onSaveCameraPosition:a,onGoToSavedCamera:s,onClearSavedCamera:l,onResetView:d,onFitScene:u}){return(0,Qt.jsxs)(er,{title:"Camera Position",open:t,onToggle:n,children:[(0,Qt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Qt.jsx)("span",{className:"bb-cameraLiveBadge",children:"LIVE"}),(0,Qt.jsxs)("div",{className:"se-waypointBody",children:[(0,Qt.jsx)("div",{className:"bb-cameraWaypointLabel",children:"Current view"}),r?(0,Qt.jsxs)(Qt.Fragment,{children:[(0,Qt.jsxs)("div",{className:"se-waypointCoords",children:["pos ",i?.position]}),(0,Qt.jsxs)("div",{className:"se-waypointCoords",children:["look ",i?.target]})]}):(0,Qt.jsx)("div",{className:"se-waypointCoords",children:"Move the camera to see live position"})]})]}),(0,Qt.jsxs)("div",{className:"bb-cameraControls bb-cameraControls--centered",children:[(0,Qt.jsx)("button",{type:"button",className:"bb-button bb-button--primary",onClick:a,disabled:!r,children:"Save"}),(0,Qt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:d,children:"Reset View"}),(0,Qt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:u,children:"Fit Scene"})]}),o?.position&&o?.target&&(0,Qt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Qt.jsx)("span",{className:"bb-cameraSavedBadge",children:"SAVED"}),(0,Qt.jsxs)("div",{className:"se-waypointBody",children:[(0,Qt.jsxs)("div",{className:"bb-cameraWaypointLabel",children:["For ",e.label]}),(0,Qt.jsxs)("div",{className:"se-waypointCoords",children:["pos [",o.position.map(m=>m.toFixed(1)).join(", "),"]"]}),(0,Qt.jsxs)("div",{className:"se-waypointCoords",children:["look [",o.target.map(m=>m.toFixed(1)).join(", "),"]"]})]}),(0,Qt.jsxs)("div",{className:"se-waypointActions",children:[(0,Qt.jsx)("button",{className:"se-waypointAction",onClick:s,title:"Fly camera to the saved position",children:(0,Qt.jsx)(Wf.MapPin,{size:15})}),(0,Qt.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:l,title:"Delete saved position",children:(0,Qt.jsx)(Wf.Trash2,{size:15})})]})]}),(0,Qt.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 md=require("react"),hd=require("lucide-react");var je=require("react/jsx-runtime"),AP=["X","Y","Z"],TO=.1,PO=.1,PP=.01;function EP(e){let t=e%360;return t<0?t+360:t}function AO(e){return EP(e*180/Math.PI)}function EO(e){return e*Math.PI/180}function Sy({value:e,min:t=-1/0,max:n=1/0,step:r=.1,disabled:i=!1,onChange:o,formatValue:a=d=>Number(d.toFixed(3)),ariaLabel:s,className:l}){let d=a(e),[u,m]=(0,md.useState)(String(d)),c=(0,md.useRef)(!1);return(0,md.useLayoutEffect)(()=>{c.current||m(String(d))},[d]),(0,je.jsx)("input",{type:"number",className:l,step:r,min:t===-1/0?void 0:t,max:n===1/0?void 0:n,value:u,disabled:i,"aria-label":s,onFocus:()=>{c.current=!0},onChange:p=>{let f=p.target.value;if(m(f),f===""||f==="-")return;let v=Number(f);if(Number.isFinite(v)){let b=Math.max(t,Math.min(n,v));o(b)}},onBlur:()=>{c.current=!1,m(String(a(e)))}})}function kO({value:e,min:t=-1/0,max:n=1/0,step:r=.1,disabled:i=!1,onChange:o,formatValue:a=l=>Number(l.toFixed(3)),label:s}){return(0,je.jsx)("div",{className:"bb-transformAxesGrid",children:AP.map((l,d)=>(0,je.jsxs)("div",{className:"bb-transformAxis",children:[(0,je.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:l}),(0,je.jsx)("div",{className:"bb-transformAxisControl",children:(0,je.jsx)(Sy,{className:"se-numberInput bb-transformNumberInput",step:r,min:t,max:n,value:e[d],disabled:i,formatValue:a,ariaLabel:`${l} ${s?.toLowerCase()||""}`,onChange:u=>{let m=[...e];m[d]=u,o(m,d)}})})]},l))})}function kP({selectedItem:e,selectedBinding:t,open:n,onToggle:r,updateBinding:i,moveModeEnabled:o,onToggleMoveMode:a,scaleModeEnabled:s,onToggleScaleMode:l,transformSpace:d,onTransformSpaceChange:u,originalTransform:m,originalTransforms:c}){let p=t.transform?.rotation??m?.rotation??[0,0,0],f=t.transform?.position??m?.position??[0,0,0],v=m?.scale??[1,1,1],b=Lb(t.transform?.scale??v,v),g=(T=e??"")=>c?.[T]??(T===e?m:null),y=(T,h)=>T.transform?.pivot??Ic(h?.pivotLocal??[0,0,0],T.transform?.rotation??h?.rotation??[0,0,0],T.transform?.scale??h?.scale??[1,1,1],h?.rotationOrder??"XYZ",T.transform?.shear),x=(T,h)=>{e&&i(e,(w,C)=>{let _=g(C),R=[...w.transform?.rotation??_?.rotation??[0,0,0]];return R[T]=EO(EP(h)),{...w,transform:{...w.transform,rotation:R,pivot:y(w,_)}}})},M=(T,h)=>{e&&i(e,(w,C)=>{let _=g(C),R=[...w.transform?.position??_?.position??[0,0,0]];return R[T]=h,{...w,transform:{...w.transform,position:R}}})},P=T=>{if(!e)return;let h=Math.max(PP,T);i(e,(w,C)=>{let _=g(C),k=_?.scale??[1,1,1],R=w.transform?.scale??k,U=Lb(R,k),H=U>0?R:k,B=h/(U||1);return{...w,transform:{...w.transform,scale:H.map(X=>X*B),pivot:y(w,_)}}})},S=()=>{!e||!m||i(e,T=>{let h={...T.transform};return delete h.position,delete h.rotation,delete h.scale,delete h.pivot,delete h.shear,{...T,transform:Object.keys(h).length>0?h:void 0}})};return(0,je.jsxs)(er,{title:"Move, Rotate & Scale",open:n,onToggle:r,tooltip:"Enable Transform Gizmo to move or rotate the selected object, and Scale to resize it. Rotation and resizing keep its visible center fixed; resizing preserves its proportions.",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)(hd.Move3d,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Transform Gizmo"]}),(0,je.jsxs)("label",{className:"se-switch","aria-label":"Toggle transform gizmo",children:[(0,je.jsx)("input",{type:"checkbox",checked:o,onChange:T=>a(T.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(T=>(0,je.jsx)("button",{type:"button",className:`se-segmentedOption ${d===T?"se-segmentedOption--active":""}`,onClick:()=>u(T),children:T},T))})]}),(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:AP.map((T,h)=>{let w=Math.round(AO(p[h]));return(0,je.jsxs)("div",{className:"bb-transformAxis",children:[(0,je.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:T}),(0,je.jsx)("div",{className:"bb-transformAxisControl",children:(0,je.jsx)(Sy,{className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:w,disabled:!e,formatValue:C=>Math.round(C),ariaLabel:`${T} rotation in degrees`,onChange:C=>x(h,C)})})]},T)})})]}),(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)(kO,{value:f,min:-1/0,max:1/0,step:TO,disabled:!e,label:"position",onChange:(T,h)=>M(h,T[h])})]}),(0,je.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,je.jsxs)("div",{className:"se-fieldLabel",children:[(0,je.jsxs)("span",{children:[(0,je.jsx)(hd.Maximize2,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Scale"]}),(0,je.jsxs)("label",{className:"se-switch","aria-label":"Toggle scale controls",children:[(0,je.jsx)("input",{type:"checkbox",checked:s,onChange:T=>l(T.target.checked)}),(0,je.jsx)("span",{className:"se-switchTrack",children:(0,je.jsx)("span",{className:"se-switchThumb"})})]})]}),s?(0,je.jsxs)(je.Fragment,{children:[(0,je.jsxs)("div",{className:"bb-transformAxis",style:{marginTop:8},children:[(0,je.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:"\xD7"}),(0,je.jsx)("div",{className:"bb-transformAxisControl",children:(0,je.jsx)(Sy,{className:"se-numberInput bb-transformNumberInput",step:PO,min:PP,value:b,disabled:!e,formatValue:T=>Number(T.toFixed(2)),ariaLabel:"Uniform scale factor",onChange:P})})]}),(0,je.jsx)("span",{className:"bb-note",children:"1 is the model's original size \xB7 smaller shrinks, larger grows it"})]}):(0,je.jsx)("span",{className:"bb-note",children:"Enable to resize this object independently of the others"})]}),(0,je.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!m,onClick:S,title:"Restore this node's position, rotation, and scale to what they were in the original model",children:[(0,je.jsx)(hd.RotateCcw,{size:14}),"Restore original transform"]})]})}var Fl=require("react"),$f=require("lucide-react");var Lt=require("react/jsx-runtime"),Xf=[],RP=(0,Fl.memo)(RO);function My(e){let t=0;for(let n of Object.values(e))n.removed||(t+=1);return t}function RO({bindings:e,selectedItem:t,onSelect:n,onHover:r,isOpen:i=!0,onToggle:o,modelGroups:a,onSelectModel:s,isolatedItem:l=null,onIsolate:d,multiSelectEnabled:u=!1,onToggleMultiSelect:m,multiSelectedKeys:c=Xf,onSetMultiSelected:p}){let f=a&&a.length>=2?a:null,v=f?f.reduce((b,g)=>b+My(g.bindings),0):My(e);return(0,Lt.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${i?"":"bb-sidebar--collapsed"}`,children:[(0,Lt.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!i&&(0,Lt.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>o?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),i&&(0,Lt.jsxs)(Lt.Fragment,{children:[(0,Lt.jsxs)("div",{className:"bb-sidebarHeadingText",children:[(0,Lt.jsx)("div",{className:"bb-sectionKicker",children:u?`Scene Nodes \xB7 ${v}`:"Scene Nodes"}),(0,Lt.jsx)("div",{className:"bb-sectionHeading",style:u?{fontSize:15}:void 0,children:u?`${c.length} selected`:`${v} ${v===1?"node":"nodes"}`})]}),(0,Lt.jsxs)("div",{className:"bb-sidebarActions",children:[m?(0,Lt.jsx)("button",{type:"button",className:`bb-sidebarToggle ${u?"bb-sidebarToggle--active":""}`,onClick:m,"aria-pressed":u,"aria-label":"Toggle multi-select",title:u?"Multi-select on: edits apply to every selected node":"Select multiple nodes",children:(0,Lt.jsx)($f.ListChecks,{size:16,"aria-hidden":"true"})}):null,(0,Lt.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>o?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]})]}),i&&(f?(0,Lt.jsx)(LO,{groups:f,selectedItem:t,onSelect:n,onHover:r,onSelectModel:s,isolatedItem:l,onIsolate:d,multiSelectEnabled:u,multiSelectedKeys:c,onSetMultiSelected:p}):(0,Lt.jsx)(LP,{bindings:e,selectedItem:t,onSelect:n,onHover:r,isolatedItem:l,onIsolate:d,multiSelectEnabled:u,multiSelectedKeys:c,onSetMultiSelected:p}))]})}function LP({bindings:e,selectedItem:t,onSelect:n,onHover:r,fill:i=!1,isolatedItem:o=null,onIsolate:a,multiSelectEnabled:s=!1,multiSelectedKeys:l=Xf,onSetMultiSelected:d}){let[u,m]=(0,Fl.useState)(""),c=(0,Fl.useMemo)(()=>Object.keys(e).filter(b=>!e[b].removed),[e]),p=(0,Fl.useMemo)(()=>{let b=u.trim().toLowerCase();return b?c.filter(g=>{let y=e[g];return g.toLowerCase().includes(b)||y.label?.toLowerCase().includes(b)||(y.type??"other").toLowerCase().includes(b)}):c},[e,c,u]),f=p.length>0&&p.every(b=>l.includes(b));return(0,Lt.jsxs)("section",{className:`bb-nodeList ${i?"bb-nodeList--fill":""}`,children:[(0,Lt.jsx)("div",{className:"bb-search",children:(0,Lt.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:u,onChange:b=>m(b.target.value)})}),s&&d?(0,Lt.jsx)("div",{style:{padding:"8px 16px",borderBottom:"1px solid rgba(255, 255, 255, 0.07)"},children:(0,Lt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:()=>{if(!d)return;if(f){let g=new Set(p);d(l.filter(y=>!g.has(y)));return}let b=[...l];for(let g of p)b.includes(g)||b.push(g);d(b)},disabled:p.length===0,style:{width:"100%"},children:f?`Clear (${p.length})`:`Select all (${p.length})`})}):null,(0,Lt.jsx)("div",{className:`bb-nodeItems ${i?"bb-nodeItems--fill":""}`,children:p.map(b=>{let g=e[b],y=s&&l.includes(b),x=s?y:b===t,M=b===o;return(0,Lt.jsxs)("div",{className:`bb-nodeRow ${s?"bb-nodeRow--multi":""} ${o&&!M?"bb-nodeRow--setAside":""}`,children:[s?(0,Lt.jsx)("input",{type:"checkbox",className:"bb-nodeCheckbox",checked:y,onChange:()=>n(b),"aria-label":`Select ${b}`}):null,(0,Lt.jsxs)("button",{type:"button",className:`bb-nodeButton ${x?"bb-nodeButton--active":""}`,onClick:()=>n(b),onMouseEnter:()=>r?.(b),onMouseLeave:()=>r?.(null),children:[(0,Lt.jsx)("span",{className:"bb-nodeName",children:b}),(0,Lt.jsxs)("span",{className:"bb-nodeMeta",children:[g.type??"other",g.label===jv(b)?"":` \xB7 ${g.label||"Untitled"}`]})]}),a?(0,Lt.jsx)("button",{type:"button",className:`bb-nodeIsolate ${M?"bb-nodeIsolate--active":""}`,onClick:()=>a(M?null:b),title:M?"Show all":"Isolate in the preview","aria-label":`${M?"Show all":"Isolate"} ${b}`,"aria-pressed":M,children:(0,Lt.jsx)($f.Focus,{size:14,"aria-hidden":"true"})}):null]},b)})})]})}function LO({groups:e,selectedItem:t,onSelect:n,onHover:r,onSelectModel:i,isolatedItem:o=null,onIsolate:a,multiSelectEnabled:s=!1,multiSelectedKeys:l=Xf,onSetMultiSelected:d}){return(0,Lt.jsx)("section",{className:"bb-nodeList bb-nodeList--grouped",children:e.map(u=>{let m=u.isActive,c=My(u.bindings),p=`${u.label} (${c})${u.isActive?" \xB7 Active":""}`,f=m;return(0,Lt.jsx)("div",{className:`bb-groupItem ${f?"bb-groupItem--fill":""}`,children:(0,Lt.jsx)(er,{title:p,open:m,onToggle:()=>{i?.(u.url)},children:(0,Lt.jsx)(LP,{bindings:u.bindings,selectedItem:t,onSelect:v=>{i?.(u.url),n(v)},onHover:r,fill:f,isolatedItem:u.isActive?o:null,onIsolate:u.isActive?a:void 0,multiSelectEnabled:u.isActive&&s,multiSelectedKeys:u.isActive?l:Xf,onSetMultiSelected:u.isActive?d:void 0})})},u.url)})})}var Ls=require("react/jsx-runtime");function _y({title:e,label:t,open:n,onToggle:r,draft:i,error:o,example:a,onDraftChange:s,onCommit:l}){return(0,Ls.jsx)(er,{title:e,open:n,onToggle:r,children:(0,Ls.jsxs)("div",{className:"bb-field",children:[(0,Ls.jsx)("label",{className:"bb-label",children:t}),(0,Ls.jsx)("textarea",{className:"bb-textarea",value:i,onChange:d=>s(d.target.value),onBlur:l}),o?(0,Ls.jsx)("span",{className:"bb-status bb-status--error",children:o}):(0,Ls.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",a,"."]})]})})}var fo=require("react"),Py=require("three");var qf=require("three");function jl(e,t,n=[],r={},i=new Set(Object.keys(ci(e).nodesById))){let o=new Map(Object.entries(t).filter(([,c])=>c.removed===!0).map(([c,p])=>[p.modelObjectId??c,p])),a=new Set(Object.entries(r).map(([c,p])=>p.modelObjectId??c)),s=n.filter(c=>c.loadState==="loading").map(c=>qf.PropertyBinding.sanitizeNodeName(`${Vo(c.namePrefix)}_`)),l=Object.fromEntries(Object.entries(t).filter(([c,p])=>{let f=p.modelObjectId??c;return!a.has(f)&&(p.removed===!0||i.has(f)||s.some(v=>f.startsWith(v)))})),d=Object.fromEntries(Object.entries(r).map(([c,p])=>[c,o.get(p.modelObjectId??c)??p])),u={...l,...d},m=Object.keys(u);return m.length===Object.keys(t).length&&m.every(c=>u[c]===t[c])?t:u}function Vo(e){return e.replace(/\.[^./\\]+$/,"")}function Cy(e,t,n={}){let r=qf.PropertyBinding.sanitizeNodeName(Vo(e)).replace(/_/g,"-")||"Model",i=t.map(s=>qf.PropertyBinding.sanitizeNodeName(Vo(s.namePrefix))),o=Object.entries(n).map(([s,l])=>l.modelObjectId??s),a=r;for(let s=2;;s++){let l=`${a}_`;if(!i.some(d=>d===a||d.startsWith(l))&&!o.some(d=>d.startsWith(l)))return a;a=`${r}-${s}`}}function fd(e){e.resolved.cleanup()}function Sp(e){e.resolved?.cleanup(),e.mergedModelSources.forEach(fd)}function Mp(e,t){let n=lf(e),r=tp(n,ed(e));if(t){let o=new Map(Object.values(t).map(a=>[a.modelObjectId,a]));for(let a of n){let s=o.get(a);s&&(r[a]=s)}}e.updateMatrixWorld(!0);let i={};for(let o of n){let a=di(e,o);if(!a){i[o]={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivotLocal:[0,0,0],rotationOrder:"XYZ"};continue}let s=ha(a);i[o]={position:[a.position.x,a.position.y,a.position.z],rotation:[a.rotation.x,a.rotation.y,a.rotation.z],scale:[a.scale.x,a.scale.y,a.scale.z],pivotLocal:[s.x,s.y,s.z],rotationOrder:a.rotation.order}}return{bindings:r,originalTransforms:i,nodeNames:n}}function DO(e,t){let n=e;for(;n;){if(n===t)return!0;n=n.parent}return!1}function Ty(e,t){let n=e.parent??e,r=Mp(n,t),i=r.nodeNames.filter(o=>{let a=di(n,o);return a?DO(a,e):!1});return{bindings:Object.fromEntries(i.map(o=>[o,r.bindings[o]])),originalTransforms:Object.fromEntries(i.map(o=>[o,r.originalTransforms[o]])),nodeNames:i}}function Yf(e,t=[]){let n={bindings:e,mergeSources:t};return{past:[],present:n,future:[],baseline:n,edits:0}}function OP(e,t){let n=t(e.present),r=e.past.map(t),i=e.future.map(t),o=t(e.baseline);return n===e.present&&o===e.baseline&&r.every((a,s)=>a===e.past[s])&&i.every((a,s)=>a===e.future[s])?e:{...e,present:n,past:r,future:i,baseline:o}}function NP(e,t,n,r={}){return OP(e,i=>{if(!i.mergeSources.some(s=>s.url===t))return i;let o=new Map(Object.entries(i.bindings).map(([s,l])=>[l.modelObjectId??s,l])),a={...i.bindings};for(let[s,l]of Object.entries(r))a[s]=o.get(l.modelObjectId??s)??l;return{bindings:a,mergeSources:i.mergeSources.map(s=>s.url===t?{...s,...n}:s)}})}function Ay(e,t){let n=e.mergeSources.find(o=>o.url===t);if(!n)return e;let r=new Set(n.nodeNames),i=Py.PropertyBinding.sanitizeNodeName(`${Vo(n.namePrefix)}_`);return{mergeSources:e.mergeSources.filter(o=>o.url!==t),bindings:Object.fromEntries(Object.entries(e.bindings).filter(([o,a])=>{let s=a.modelObjectId??o;return!r.has(s)&&!r.has(o)&&!s.startsWith(i)}))}}function Ey(e,t){let n=_s(e.bindingHistory??Yf(e.bindings,e.mergedModelSources),{type:"set",updater:t,track:!0,coalesce:!1});return{...e,bindings:n.present.bindings,mergedModelSources:n.present.mergeSources,bindingHistory:n}}function ky(e,t,n,r){let i=NP(e.bindingHistory??Yf(e.bindings,e.mergedModelSources),t,n,r);return{...e,bindings:i.present.bindings,mergedModelSources:i.present.mergeSources,bindingHistory:i}}function BP(e,t){let n=e.bindingHistory??Yf(e.bindings,e.mergedModelSources),i=[n.present,...n.past,...n.future].flatMap(s=>s.mergeSources).map(s=>Py.PropertyBinding.sanitizeNodeName(`${Vo(s.namePrefix)}_`)),o=Object.fromEntries(Object.entries(t).filter(([s,l])=>!i.some(d=>(l.modelObjectId??s).startsWith(d)))),a=OP(n,s=>({...s,bindings:{...o,...s.bindings}}));return{...e,bindings:a.present.bindings,bindingHistory:a}}function DP(e,t){let n=new Set(t.mergeSources.map(r=>r.url));return{...e,present:{...e.present,mergeSources:e.present.mergeSources.map(r=>n.has(r.url)?r:{...r,loadState:"loading"})}}}function IP(e,t=[]){let n=kf({bindings:e,mergeSources:t}),{setValue:r,setValueAsStep:i,updateHistory:o,restoreSnapshot:a}=n,s=(0,fo.useCallback)(g=>r(y=>{let x=typeof g=="function"?g(y.bindings):g;return x===y.bindings?y:{...y,bindings:x}}),[r]),l=(0,fo.useCallback)(g=>o(y=>{let x=typeof g=="function"?g(y.present.bindings):g;if(x===y.present.bindings)return y;let M={...y.present,bindings:x};return{...y,present:M,baseline:y.edits===0?M:y.baseline}}),[o]),d=(0,fo.useCallback)(g=>o(y=>{let x=typeof g=="function"?g(y.present.mergeSources):g,M={...y.present,mergeSources:x};return{...y,present:M,baseline:y.edits===0?M:y.baseline}}),[o]),u=(0,fo.useCallback)(g=>i(y=>({...y,mergeSources:[...y.mergeSources,typeof g=="function"?g(y):g]})),[i]),m=(0,fo.useCallback)(g=>i(y=>Ay(y,g)),[i]),c=(0,fo.useCallback)((g,y,x)=>{o(M=>NP(M,g,y,x))},[o]),p=(0,fo.useCallback)(()=>a(g=>{let y=_s(g,{type:"undo"});return y===g?g:DP(y,g.present)}),[a]),f=(0,fo.useCallback)(()=>a(g=>{let y=_s(g,{type:"redo"});return y===g?g:DP(y,g.present)}),[a]),v=(0,fo.useCallback)((g,y)=>a(x=>_s(x,{type:"reset",value:{bindings:g,mergeSources:x.present.mergeSources},track:y?.asEdit??!1})),[a]),b=(0,fo.useCallback)(g=>a({...g.bindingHistory??Yf(g.bindings,g.mergedModelSources),present:{bindings:g.bindings,mergeSources:g.mergedModelSources}}),[a]);return{value:n.value.bindings,baseline:n.baseline.bindings,mergeSources:n.value.mergeSources,snapshot:n.snapshot,edits:n.edits,canUndo:n.canUndo,canRedo:n.canRedo,setValue:s,setValueUntracked:l,setMergeSourcesUntracked:d,addMerge:u,removeMerge:m,hydrateMerge:c,undo:p,redo:f,reset:v,restoreModel:b}}var _p=require("react");function zP(e,t,{modelUrl:n,modelSourceRef:r,uploadedFilesRef:i}={}){let o=(0,_p.useRef)(new Map);(0,_p.useEffect)(()=>{let a=new Map,s=u=>{for(let m of[u.present,...u.past,...u.future])m.mergeSources.forEach(c=>a.set(c.url,c))};s(e);for(let u of t)u.bindingHistory&&s(u.bindingHistory),u.mergedModelSources.forEach(m=>a.set(m.url,m));for(let[u,m]of o.current)a.has(u)||m.resolved.cleanup();o.current=a;let l=new Set,d=u=>{u?.kind==="file"&&l.add(u.key)};n&&d(r?.current?.model),t.forEach(u=>d(u.sessionModel)),a.forEach(u=>d(u.sessionModel));for(let u of i?.current.keys()??[])l.has(u)||i?.current.delete(u)},[e,t,n,r,i]),(0,_p.useEffect)(()=>()=>{o.current.forEach(a=>a.resolved.cleanup()),o.current.clear(),i?.current.clear()},[i])}var Ds=require("react");var OO=500;function VP({autosaveEnabled:e,hasEdits:t,modelUrl:n,bindings:r,sceneConfig:i,parkedModels:o,mergedModelSources:a,modelOrder:s,onTextureUpload:l,modelSourceRef:d,pendingLoadRef:u,storedModelKeysRef:m,uploadedFilesRef:c,pendingAutosaveRef:p,autosaveFailureShownRef:f,setStatusMessage:v,setStatusTone:b}){let g=(0,Ds.useRef)(0),y=(0,Ds.useCallback)(async(x,M)=>{if(l)return l(x,M);let P=URL.createObjectURL(x);if(e)try{await Lf(P,x)}catch(S){console.warn("[BindingBuilder] Could not store texture file for autosave:",S)}return P},[l,e]);return(0,Ds.useEffect)(()=>{if(!e||!t){p.current=null;return}let x=d.current;if(n&&!x){p.current=null;return}let M=n,P=()=>{if(p.current!==P||u.current)return;p.current=null;let T=++g.current,h=D=>{console.warn("[BindingBuilder] Autosave failed:",D),!f.current&&(f.current=!0,v("Couldn't autosave this session \u2014 the browser refused to store it, possibly for lack of space. Export your work to keep it."),b("error"))};if(!M||!x){m.current.clear(),vT().then(()=>{T===g.current&&(f.current=!1)}).catch(h);return}let{model:w}=x,C=[],_=new Set,k=D=>{if(!D||D.kind!=="file"||(_.add(D.key),m.current.has(D.key)))return;let L=c.current.get(D.key);L&&C.push({key:D.key,file:L})};k(w),o.forEach(D=>{k(D.sessionModel),D.mergedModelSources.forEach(L=>k(L.sessionModel))}),a.forEach(D=>k(D.sessionModel)),m.current=new Set([...m.current].filter(D=>_.has(D)));let R=D=>({model:D.sessionModel,namePrefix:D.namePrefix}),U=o.filter(D=>!!D.sessionModel).map(D=>({model:D.sessionModel,bindings:D.bindings,originalTransforms:D.originalTransforms,modelSettings:D.modelSettings,mergeModels:D.mergedModelSources.map(R)})),H=a.map(R),B=new Map;B.set(M,w),o.forEach(D=>{D.sessionModel&&B.set(D.url,D.sessionModel)});let X=s.map(D=>{let L=B.get(D);return L?up(L):null}).filter(D=>D!==null);gT({model:w,bindings:r,sceneConfig:i,parkedModels:U,mergeModels:H,modelOrder:X},C).then(()=>{T===g.current&&(m.current=_,f.current=!1)}).catch(h)};if(p.current=P,!M){P();return}let S=window.setTimeout(P,OO);return()=>window.clearTimeout(S)},[e,t,n,r,i,o,a,s]),(0,Ds.useEffect)(()=>{if(!e)return;let x=()=>p.current?.(),M=()=>{document.visibilityState==="hidden"&&x()};return window.addEventListener("pagehide",x),document.addEventListener("visibilitychange",M),()=>{window.removeEventListener("pagehide",x),document.removeEventListener("visibilitychange",M),x()}},[e]),(0,Ds.useEffect)(()=>{if(!e||!n||!t)return;let x=M=>{p.current?.(),M.preventDefault(),M.returnValue=""};return window.addEventListener("beforeunload",x),()=>window.removeEventListener("beforeunload",x)},[e,n,t]),{handleTextureUpload:y}}var UP=require("react");function FP({bindings:e,multiSelectMode:t,selectedItem:n,multiSelectedKeys:r,setSelectedItem:i,setMultiSelectedKeys:o}){(0,UP.useLayoutEffect)(()=>{let a=l=>!!(e[l]&&!e[l].removed),s=r.filter(a);s.length!==r.length&&o(s),n&&(!a(n)||t&&!s.includes(n))&&i(t?s[s.length-1]??null:null)},[e,t,n,r,i,o])}var Hl=require("react");function jP(e,t){let[n,r]=(0,Hl.useState)(!1),i=e>0||t>0,o=(0,Hl.useCallback)(()=>r(!0),[]),a=(0,Hl.useCallback)(()=>r(!1),[]);return(0,Hl.useEffect)(()=>{i&&o()},[i,o]),{hasEdits:n||i,markSessionEdited:o,resetSessionEdits:a}}var Gl=require("react");function HP({enabled:e=!0,modelUrl:t,bindings:n,mergeSources:r,parkedModels:i,scenesRef:o,sceneRevision:a,setBindings:s,setParkedModels:l}){let[d,u]=(0,Gl.useReducer)(c=>c+1,0),m=(0,Gl.useRef)(new WeakMap);(0,Gl.useEffect)(()=>{if(!e)return;let c=[t,...i.map(v=>v.url)],p=new Set(c.flatMap(v=>{let b=v?o.current.get(v):void 0;return b?[b]:[]})),f=v=>{v.target&&m.current.delete(v.target),u()};for(let v of p)v.addEventListener("childadded",f),v.addEventListener("childremoved",f);return()=>{for(let v of p)v.removeEventListener("childadded",f),v.removeEventListener("childremoved",f)}},[e,t,i,o,a]),(0,Gl.useEffect)(()=>{if(!e)return;let c=f=>{let v=m.current.get(f);return v||(v=new Set(Object.keys(ci(f).nodesById)),m.current.set(f,v)),v},p=t?o.current.get(t):void 0;if(p){let f=c(p);s(v=>jl(p,v,r,{},f))}l(f=>{let v=!1,b=f.map(g=>{let y=o.current.get(g.url);if(!y)return g;let x=jl(y,g.bindings,g.mergedModelSources,{},c(y));return x===g.bindings?g:(v=!0,{...g,bindings:x})});return v?b:f})},[e,t,n,r,i,o,a,d,s,l])}var gd=require("react");function GP({modelUrl:e,scenesRef:t,sceneRevision:n,streaming:r=!1}){let i=e?t.current.get(e):void 0,[o,a]=(0,gd.useReducer)(s=>s+1,0);return(0,gd.useEffect)(()=>{if(!i||r)return;let s=()=>a();return i.addEventListener("childadded",s),i.addEventListener("childremoved",s),()=>{i.removeEventListener("childadded",s),i.removeEventListener("childremoved",s)}},[i,r]),(0,gd.useMemo)(()=>({materialVariantGroups:i?Oc(i):[],objectsWithoutUvs:i&&!r?ed(i):new Set}),[i,n,o,r])}var Ns=require("lucide-react");var Ea=require("react"),Os=require("lucide-react"),gi=require("react/jsx-runtime");function WP({disabled:e,exporting:t,exportTitle:n,exportDescription:r,onExportJson:i,onExportTs:o}){let[a,s]=(0,Ea.useState)(!1),l=(0,Ea.useRef)(null),d=(0,Ea.useId)(),u=(0,Ea.useId)();return(0,Ea.useEffect)(()=>{if(!a)return;let m=c=>{l.current?.contains(c.target)||s(!1)};return window.addEventListener("pointerdown",m),()=>window.removeEventListener("pointerdown",m)},[a]),(0,gi.jsxs)("div",{className:"bb-exportMenuWrapper",ref:l,children:[(0,gi.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>s(m=>!m),title:`Export ${n.toLowerCase()}`,"aria-label":`Export ${n.toLowerCase()}`,"aria-expanded":a,"aria-controls":a?d:void 0,children:[(0,gi.jsx)(Os.Download,{size:14}),t?"Exporting\u2026":"Export",(0,gi.jsx)(Os.ChevronDown,{size:12})]}),a&&(0,gi.jsxs)("div",{className:"bb-exportMenu",id:d,role:"group","aria-label":n,children:[(0,gi.jsx)("div",{className:"bb-exportMenuTitle",children:n}),(0,gi.jsx)("p",{className:"bb-exportMenuDescription",id:u,children:r}),(0,gi.jsxs)("button",{type:"button",className:"bb-exportMenuItem","aria-label":`Export ${n.toLowerCase()} as JSON`,"aria-describedby":u,onClick:()=>{s(!1),i()},children:[(0,gi.jsx)(Os.FileJson,{size:14}),"JSON"]}),(0,gi.jsxs)("button",{type:"button",className:"bb-exportMenuItem","aria-label":`Export ${n.toLowerCase()} as TypeScript`,"aria-describedby":u,onClick:()=>{s(!1),o()},children:[(0,gi.jsx)(Os.FileCode2,{size:14}),"TypeScript"]})]})]})}var Dr=require("react/jsx-runtime");function Ry({canUndo:e,canRedo:t,onUndo:n,onRedo:r,onReset:i,resetDisabled:o,resetTitle:a,onImport:s,importDisabled:l,importTitle:d,exportDisabled:u,exporting:m,exportTitle:c,exportDescription:p,onExportJson:f,onExportTs:v}){return(0,Dr.jsxs)("div",{className:"bb-toolbar",children:[(0,Dr.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,Dr.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!e,onClick:n,title:"Undo (Cmd/Ctrl+Z)",children:(0,Dr.jsx)(Ns.Undo2,{size:16})}),(0,Dr.jsx)("button",{type:"button",className:"bb-iconButton",disabled:o,onClick:i,title:a,children:(0,Dr.jsx)(Ns.ListRestart,{size:16})}),(0,Dr.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!t,onClick:r,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,Dr.jsx)(Ns.Redo2,{size:16})})]}),(0,Dr.jsx)("div",{className:"bb-toolbarDivider"}),(0,Dr.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:l,onClick:s,title:d,children:[(0,Dr.jsx)(Ns.Upload,{size:14}),"Import"]}),(0,Dr.jsx)("div",{className:"bb-toolbarDivider"}),(0,Dr.jsx)(WP,{disabled:u,exporting:m,exportTitle:c,exportDescription:p,onExportJson:f,onExportTs:v})]})}var Yr=require("lucide-react"),Bs=require("react"),ue=require("react/jsx-runtime");function NO(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 XP({target:e,onCancel:t,onConfirm:n}){return(0,ue.jsx)("div",{className:"bb-reset-overlay",onClick:t,children:(0,ue.jsxs)("div",{className:"bb-reset-dialog",onClick:r=>r.stopPropagation(),children:[(0,ue.jsxs)("div",{className:"bb-reset-header",children:[(0,ue.jsxs)("h3",{className:"bb-reset-title",children:[(0,ue.jsx)(Yr.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Confirm Reset"]}),(0,ue.jsx)("button",{className:"bb-reset-close",onClick:t,children:(0,ue.jsx)(Yr.X,{size:20})})]}),(0,ue.jsxs)("div",{className:"bb-reset-body",children:[(0,ue.jsxs)("p",{className:"bb-reset-message",children:["Are you sure you want to reset"," ",(0,ue.jsx)("strong",{children:e==="bindings"?"Object Bindings":"Scene Config"}),"?"]}),(0,ue.jsx)("p",{className:"bb-reset-details",children:e==="bindings"?"This will remove all your custom changes to object properties, groups, tags, transforms, materials, actions, camera positions, metrics, and metadata.":"This will restore all scene settings (camera, lighting, environment, background, animations, annotations, etc.) to their default values."}),(0,ue.jsx)("p",{className:"bb-reset-warning",children:"This action cannot be undone!"})]}),(0,ue.jsxs)("div",{className:"bb-reset-footer",children:[(0,ue.jsx)("button",{className:"bb-reset-btn",onClick:t,children:"Cancel"}),(0,ue.jsx)("button",{className:"bb-reset-btn-danger",onClick:n,children:"Reset"})]})]})})}function $P({modelNames:e,mergedSourceCount:t,savedAt:n,onCancel:r,onConfirm:i}){let o=(0,Bs.useId)();return(0,ue.jsx)("div",{className:"bb-reset-overlay",onClick:r,children:(0,ue.jsxs)("div",{className:"bb-reset-dialog",role:"dialog","aria-modal":"true","aria-labelledby":o,onClick:a=>a.stopPropagation(),children:[(0,ue.jsxs)("div",{className:"bb-reset-header",children:[(0,ue.jsxs)("h3",{className:"bb-reset-title",id:o,children:[(0,ue.jsx)(Yr.History,{size:20,className:"bb-icon-restore"}),"Restore Last Session"]}),(0,ue.jsx)("button",{className:"bb-reset-close",onClick:r,children:(0,ue.jsx)(Yr.X,{size:20})})]}),(0,ue.jsxs)("div",{className:"bb-reset-body",children:[(0,ue.jsxs)("p",{className:"bb-reset-message",children:["Restore the session saved ",NO(n),"?"]}),(0,ue.jsxs)("p",{className:"bb-reset-message",children:[(0,ue.jsxs)("strong",{children:[e.length," ",e.length===1?"model":"models"]})," \xB7 ",t," merged ",t===1?"source":"sources"]}),(0,ue.jsx)("ul",{className:"bb-restoreModelNames","aria-label":"Saved models",children:e.map((a,s)=>(0,ue.jsx)("li",{children:a},s))}),(0,ue.jsx)("p",{className:"bb-reset-details",children:"This restores the saved models and merged nodes with their object bindings and scene settings, replacing what's in the editor now."})]}),(0,ue.jsxs)("div",{className:"bb-reset-footer",children:[(0,ue.jsx)("button",{className:"bb-reset-btn",onClick:r,children:"Cancel"}),(0,ue.jsx)("button",{className:"bb-reset-btn-restore",onClick:i,children:"Restore"})]})]})})}function qP({nodeLabel:e,onCancel:t,onConfirm:n}){return(0,ue.jsx)("div",{className:"bb-reset-overlay",onClick:t,children:(0,ue.jsxs)("div",{className:"bb-reset-dialog",onClick:r=>r.stopPropagation(),children:[(0,ue.jsxs)("div",{className:"bb-reset-header",children:[(0,ue.jsxs)("h3",{className:"bb-reset-title",children:[(0,ue.jsx)(Yr.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Delete Object"]}),(0,ue.jsx)("button",{className:"bb-reset-close",onClick:t,children:(0,ue.jsx)(Yr.X,{size:20})})]}),(0,ue.jsxs)("div",{className:"bb-reset-body",children:[(0,ue.jsxs)("p",{className:"bb-reset-message",children:["Delete ",(0,ue.jsx)("strong",{children:e}),"?"]}),(0,ue.jsx)("p",{className:"bb-reset-details",children:"This removes it from the Object and Scene Nodes panels and takes it out of the 3D view entirely, for every viewer, not just hidden, as the Visible toggle does."}),(0,ue.jsx)("p",{className:"bb-reset-warning",children:"This action cannot be undone!"})]}),(0,ue.jsxs)("div",{className:"bb-reset-footer",children:[(0,ue.jsx)("button",{className:"bb-reset-btn",onClick:t,children:"Cancel"}),(0,ue.jsx)("button",{className:"bb-reset-btn-danger",onClick:n,children:"Delete"})]})]})})}function YP({destinations:e,onCancel:t,onChoose:n}){let[r,i]=(0,Bs.useState)(e.find(l=>l.isActive)?.url??e[0]?.url??""),o=e.find(l=>l.url===r),a=(0,Bs.useId)(),s=(0,Bs.useId)();return(0,ue.jsx)("div",{className:"bb-reset-overlay",onClick:t,children:(0,ue.jsxs)("div",{className:"bb-reset-dialog",role:"dialog","aria-modal":"true","aria-labelledby":a,onClick:l=>l.stopPropagation(),children:[(0,ue.jsxs)("div",{className:"bb-reset-header",children:[(0,ue.jsxs)("h3",{className:"bb-reset-title",id:a,children:[(0,ue.jsx)(Yr.Upload,{size:20,className:"bb-icon-restore"}),"Add Model"]}),(0,ue.jsx)("button",{className:"bb-reset-close",onClick:t,children:(0,ue.jsx)(Yr.X,{size:20})})]}),(0,ue.jsxs)("div",{className:"bb-reset-body",children:[(0,ue.jsx)("p",{className:"bb-reset-message",children:"Add this as a separate model or add its nodes to an existing model?"}),(0,ue.jsx)("p",{className:"bb-reset-details",children:"A separate model stays independent and switchable, with its own entry in Scene Nodes. Adding its nodes combines it with the destination selected below."}),(0,ue.jsx)("label",{className:"bb-label",htmlFor:s,children:"Destination model for added nodes"}),(0,ue.jsx)("select",{className:"bb-select",id:s,value:r,onChange:l=>i(l.target.value),children:e.map(l=>(0,ue.jsxs)("option",{value:l.url,children:[l.label,": ",l.name,l.isActive?" (active)":""]},l.url))})]}),(0,ue.jsxs)("div",{className:"bb-reset-footer",children:[(0,ue.jsx)("button",{className:"bb-reset-btn",onClick:t,children:"Cancel"}),(0,ue.jsx)("button",{className:"bb-reset-btn-secondary",onClick:()=>n({mode:"separate"}),children:"Add as Separate Model"}),(0,ue.jsx)("button",{className:"bb-reset-btn-restore",disabled:!o,title:o?`Add nodes to ${o.name}`:void 0,onClick:()=>o&&n({mode:"merge",targetUrl:r}),children:"Add Nodes"})]})]})})}function KP({options:e,onCancel:t,onRemoveModel:n,onRemoveMerge:r,onRemoveAll:i}){let o=(0,Bs.useId)(),a=(0,Bs.useId)();return(0,ue.jsx)("div",{className:"bb-reset-overlay",onClick:t,children:(0,ue.jsxs)("div",{className:"bb-reset-dialog",role:"dialog","aria-modal":"true","aria-labelledby":o,onClick:s=>s.stopPropagation(),children:[(0,ue.jsxs)("div",{className:"bb-reset-header",children:[(0,ue.jsxs)("h3",{className:"bb-reset-title",id:o,children:[(0,ue.jsx)(Yr.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Remove Model"]}),(0,ue.jsx)("button",{className:"bb-reset-close",onClick:t,children:(0,ue.jsx)(Yr.X,{size:20})})]}),(0,ue.jsxs)("div",{className:"bb-reset-body",children:[(0,ue.jsx)("p",{className:"bb-reset-message",children:"Which model do you want to remove?"}),(0,ue.jsx)("p",{className:"bb-reset-details",children:"Selecting a model below removes its bindings, transforms, and any nodes merged into it. Removing one entry keeps the remaining models."}),(0,ue.jsx)("div",{className:"bb-removeModelList",children:e.map(s=>s.kind==="model"?(0,ue.jsxs)("button",{type:"button",className:"bb-removeModelOption",onClick:()=>n(s.url),children:[(0,ue.jsxs)("span",{className:"bb-removeModelOptionLabel",children:[s.label,s.isActive&&(0,ue.jsx)("span",{className:"bb-removeModelOptionActive",children:"active"})]}),(0,ue.jsx)("span",{className:"bb-removeModelOptionName",children:s.name})]},s.url):(0,ue.jsxs)("button",{type:"button",className:"bb-removeModelOption bb-removeModelOptionMerge",onClick:()=>r(s.url),children:[(0,ue.jsxs)("span",{className:"bb-removeModelOptionLabel",children:[s.label,(0,ue.jsxs)("span",{className:"bb-removeModelOptionActive",children:["merged into ",s.ownerLabel]})]}),(0,ue.jsx)("span",{className:"bb-removeModelOptionName",children:s.name})]},s.url))}),(0,ue.jsx)("p",{className:"bb-reset-warning",id:a,children:"Remove All Models removes every model and its edits, including merged nodes. This also clears the saved session in this browser and cannot be undone. Export your work first if you want to keep it."})]}),(0,ue.jsxs)("div",{className:"bb-reset-footer",children:[(0,ue.jsx)("button",{className:"bb-reset-btn",onClick:t,children:"Cancel"}),(0,ue.jsx)("button",{className:"bb-reset-btn-danger","aria-describedby":a,onClick:i,children:"Remove All Models"})]})]})})}var t2=require("fflate");function ZP(e){return JSON.stringify(e,null,2)}function JP(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
|
|
3743
|
+
`)}function QP(e){return JSON.stringify(e,null,2)}function e2(e){return['import type { SceneConfig } from "@liveroom-tech/react-immersive/utils";',"",`export const sceneConfig: SceneConfig = ${JSON.stringify(e,null,2)};`,""].join(`
|
|
3744
|
+
`)}function Cp(e,t,n){da(new Blob([t],{type:n}),e)}function Ly(e){return JSON.stringify(e??{},null,2)}function Dy(e){return`[${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}]`}function BO(e){return(e.decals??[]).map(t=>t.image).filter(t=>!!t?.trim())}function IO(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 n2(e){let t=new Set;for(let i of Object.values(e)){for(let o of IO(i))t.add(o);for(let o of BO(i))t.add(o)}let n=[],r=[];return await Promise.all(Array.from(t).map(async i=>{let o=Lm(i);if(o)try{let a=await fetch(o);if(!a.ok)throw new Error(String(a.status));n.push({path:i,blob:await a.blob()});return}catch{r.push(i);return}try{let a=await mp(i);a&&n.push({path:i,blob:a})}catch{}})),{assets:n,failedPaths:r}}async function Oy(e,t,n,r,i){if(i.length===0){Cp(e,t,n);return}let o={[e]:(0,t2.strToU8)(t)};for(let s of i)o[s.path]=new Uint8Array(await s.blob.arrayBuffer());let a=await Vm(o);da(new Blob([a],{type:"application/zip"}),r)}async function bd(e){return await Promise.all(Object.entries(e).map(async([t,n])=>{for(let i of n.decals??[])if(i.image)try{let o=await mp(i.image);o&&pl(i.image,URL.createObjectURL(o))}catch(o){console.warn(`[BindingBuilder] Could not rehydrate a decal image on "${t}":`,o)}let r=n.style?.material;if(r)for(let i of Ao){let a=r[i]?.path;if(a)try{let s=await mp(a);if(!s){console.warn(`[BindingBuilder] No stored texture found for "${t}"'s ${i} ("${a}"). If this is meant to be an uploaded file rather than a hosted URL, it was uploaded before texture autosave existed (or this browser's storage was cleared) \u2014 re-upload it once so it's stored for future restores.`);continue}let l=URL.createObjectURL(s);pl(a,l)}catch(s){console.warn(`[BindingBuilder] Could not rehydrate "${t}"'s ${i}:`,s)}}})),e}function r2({bindings:e,setBindings:t,setSceneConfig:n,nodeKeys:r,sceneConfigInputRef:i,setIsExporting:o,setStatusMessage:a,setStatusTone:s}){let l=async f=>{o(!0);try{let{assets:v,failedPaths:b}=await n2(e);f==="json"?await Oy("objectBindings.json",ZP(e),"application/json","objectBindings.zip",v):await Oy("objectBindings.ts",JP(e),"text/typescript","objectBindings-ts.zip",v),b.length>0?(a(`Exported, but ${b.length} uploaded image${b.length===1?"":"s"} couldn't be bundled: ${b.join(", ")}.`),s("error")):v.length>0&&(a(`Exported with ${v.length} uploaded image${v.length===1?"":"s"} bundled into the zip.`),s("success"))}catch(v){let b=v instanceof Error?v.message:"Unknown export error.";a(`Failed to export bindings: ${b}`),s("error")}finally{o(!1)}},d=async f=>{if(!r.length){a("Load a model before importing bindings."),s("error");return}let v;try{v=JSON.parse(await f.text())}catch{a(`${f.name} is not valid JSON.`),s("error");return}if(v===null||typeof v!="object"||Array.isArray(v)){a("Expected a JSON object mapping object IDs to bindings."),s("error");return}let b=new Map;for(let S of Object.values(v))if(S!==null&&typeof S=="object"&&typeof S.id=="string"&&typeof S.type=="string"&&typeof S.modelObjectId=="string"){let T=S;b.set(T.modelObjectId,T)}if(b.size===0){a(`${f.name} doesn't look like an exported bindings file.`),s("error");return}let g={...e},y={},x=0;for(let S of Object.keys(g)){let T=b.get(S);T&&(g[S]=T,y[S]=T,x++)}if(x===0){a(`None of the object IDs in ${f.name} match this model \u2014 nothing imported.`),s("error");return}let M=await bd(y);Object.assign(g,M),t(g);let P=b.size-x;a(P>0?`Imported ${x} binding${x===1?"":"s"} from ${f.name} (${P} skipped \u2014 not in this model).`:`Imported ${x} binding${x===1?"":"s"} from ${f.name}.`),s("success")},u=async f=>{let v=f.target.files?.[0];v&&(await d(v),f.target.value="")},m=()=>{i.current?.click()},c=async f=>{let v;try{v=JSON.parse(await f.text())}catch{a(`${f.name} is not valid JSON.`),s("error");return}if(v===null||typeof v!="object"||Array.isArray(v)){a("Expected a JSON object with scene config sections."),s("error");return}let b=["model","camera","lighting","wireframe","shadows","environment","background","groundShadows","postProcessing","animations","annotations","cinematic","styleRules","section"],g=v,y=b.filter(x=>g[x]!==void 0);if(y.length===0){a(`${f.name} doesn't look like an exported scene config file.`),s("error");return}n(x=>{let M={...x};for(let P of y)M[P]=dp(x[P],g[P]);return M}),a(`Imported ${y.length} section${y.length===1?"":"s"} from ${f.name}.`),s("success")};return{handleExportBindings:l,importBindingsFile:d,handleImportBindingsChange:u,openSceneConfigImportPicker:m,importSceneConfigFile:c,handleImportSceneConfigChange:async f=>{let v=f.target.files?.[0];v&&(await c(v),f.target.value="")}}}var Ny={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"]},i2=Object.keys(Ny);function o2(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 By(e){if(e)return Object.values(e).some(o2)?e:void 0}function Gi(e,t){return e?Ny[t].some(n=>o2(e[n])):!1}function Iy(e){return{pbr:Gi(e,"pbr"),roughness:Gi(e,"roughness"),emission:Gi(e,"emission"),opacity:Gi(e,"opacity"),normalBump:Gi(e,"normalBump"),displacement:Gi(e,"displacement"),ao:Gi(e,"ao"),clearcoat:Gi(e,"clearcoat"),sheen:Gi(e,"sheen"),anisotropy:Gi(e,"anisotropy"),transmission:Gi(e,"transmission"),faces:Gi(e,"faces")}}function zy(e,t){if(t)return{...e,style:{...e.style,material:t}};if(!e.style)return e;let{material:n,...r}=e.style;return{...e,style:Object.keys(r).length>0?r:void 0}}function a2(e,t){if(!e)return;let n={...e};for(let r of Ny[t])delete n[r];return n}var Z=require("react/jsx-runtime"),s2="/room.glb";function Vy(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}function l2(e){return`Couldn't reload ${e} from your last session. It's still saved in this browser.`}function zO({label:e,values:t,onChange:n}){let r=t.length>0&&t.every(Boolean),i=!r&&t.some(Boolean);return(0,Z.jsxs)("label",{className:"bb-groupFlag",children:[(0,Z.jsx)("input",{type:"checkbox",ref:o=>{o&&(o.indeterminate=i)},checked:r,onChange:o=>n(o.target.checked)}),e]})}function Uy({licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:r,meshopt:i,project:o,onProjectChange:a,projectChangeDebounceMs:s=350,onModelUpload:l,onTextureUpload:d,onEditLeaseChange:u,allowModelChange:m=!0}){let c=(0,j.useRef)(null),p=(0,j.useRef)(null),f=(0,j.useRef)(null),v=(0,j.useRef)(null),b=(0,j.useRef)(null),[g,y]=(0,j.useState)(o?.model.url??null),[x,M]=(0,j.useState)([]),[P,S]=(0,j.useState)(()=>o?.model.url?[o.model.url]:[]),[T,h]=(0,j.useState)(o?.model.name??""),[w,C]=(0,j.useState)(o?.model??null),[_,k]=(0,j.useState)(null),[R,U]=(0,j.useState)(!1),[H,B]=(0,j.useState)([]),X=(0,j.useRef)({mode:!1,keys:[]});X.current={mode:R,keys:H};let D=IP(o?.objectBindings??{}),L=D.value,re=D.setValue;FP({bindings:L,multiSelectMode:R,selectedItem:_,multiSelectedKeys:H,setSelectedItem:k,setMultiSelectedKeys:B});let Me=D.mergeSources,Pe=D.setMergeSourcesUntracked,[pe,Ve]=(0,j.useState)(!1),[Q,J]=(0,j.useState)(null),ye=(0,j.useMemo)(()=>Q?{target:Q}:null,[Q]);(0,j.useEffect)(()=>{J(null)},[g]),(0,j.useEffect)(()=>{U(!1),B([])},[g]);let[Re,nt]=(0,j.useState)(null);(0,j.useEffect)(()=>nt(null),[_,g]),(0,j.useEffect)(()=>Bn(null),[g]);let[le,_e]=(0,j.useState)(null),[it,Gt]=(0,j.useState)(!1),[be,Ce]=(0,j.useState)("Load the demo model or upload a GLB, GLTF, OBJ, FBX, USDZ, STL, or PLY model to generate bindings."),[en,Se]=(0,j.useState)("default"),[xe,$e]=(0,j.useState)(!1),[fn,tn]=(0,j.useState)("{}"),[Ln,we]=(0,j.useState)("{}"),[Be,Qe]=(0,j.useState)(null),[wt,Dt]=(0,j.useState)(null),[me,Ae]=(0,j.useState)(!1),[Ee,lt]=(0,j.useState)(!1),[nn,Ot]=(0,j.useState)(!1),[at,Ie]=(0,j.useState)({identity:!0,basics:!0,material:!1,decals:!1,actions:!1,camera:!1,transform:!1,metrics:!1,metadata:!1}),[ht,gt]=(0,j.useState)({pbr:!1,roughness:!1,emission:!1,opacity:!1,normalBump:!1,displacement:!1,ao:!1,clearcoat:!1,sheen:!1,anisotropy:!1,transmission:!1,faces:!1}),Yt=E=>Ie(O=>({...O,[E]:!O[E]})),Kr=E=>gt(O=>({...O,[E]:!O[E]})),[Nt,cn]=(0,j.useState)("object"),[jn,yr]=(0,j.useState)("General"),[bi,Zr]=(0,j.useState)("metalness"),[gn,mr]=(0,j.useState)(Iy()),Xi=(0,j.useRef)(null),[Jr,Is]=(0,j.useState)(!1),[Qr,zs]=(0,j.useState)(!0),[ka,Uo]=(0,j.useState)(!0),[Vs,$i]=(0,j.useState)(!1),[go,Us]=(0,j.useState)(null),[qi,Or]=(0,j.useState)(null),[vi,Ra]=(0,j.useState)(!1),yi=(0,j.useRef)(null),F=(0,j.useRef)({modelUrl:g,modelName:T,modelOrder:P,parkedModels:x});F.current={modelUrl:g,modelName:T,modelOrder:P,parkedModels:x};let[W,G]=(0,j.useState)(!1),[ce,ee]=(0,j.useState)(null),[ke,Ne]=(0,j.useState)(!1),[rn,At]=(0,j.useState)(!1),[Tn,dn]=(0,j.useState)("world"),ct=(0,j.useRef)({}),dt=kf(o?.sceneConfig??is),ae=dt.value,un=dt.setValue,Hn=dt.setValueUntracked,hr=(0,j.useCallback)(E=>{let O=No(ae,E.modelSettings);E.sceneHistory?dt.restoreSnapshot({...E.sceneHistory,present:O}):dt.reset(O)},[ae,dt.restoreSnapshot,dt.reset]),{hasEdits:La,markSessionEdited:on,resetSessionEdits:Un}=jP(D.edits,dt.edits),[xi,Tp]=(0,j.useState)(!1),[Pp,tr]=(0,j.useState)(.5),[Fo,Bn]=(0,j.useState)(null),Da=Fo??{bindings:D.baseline,sceneConfig:dt.baseline},[vd,Fs]=(0,j.useState)("orbit"),[Ap,et]=(0,j.useState)(!1),_r=(0,j.useRef)(void 0),js=(0,j.useCallback)(()=>{et(!0),clearTimeout(_r.current),_r.current=setTimeout(()=>et(!1),5e3)},[]);(0,j.useEffect)(()=>()=>clearTimeout(_r.current),[]),(0,j.useEffect)(()=>{g&&!pe&&js()},[g,pe,js]);let Gn=vd==="pointerLock",[Wl,yd]=(0,j.useState)(null),Xl=(0,j.useRef)(null),Kf=Wl?.objectKey===_&&Wl?.textureKey==="texture",[$l,bo]=(0,j.useState)(null),[Zf,Oa]=(0,j.useState)(null),Na=Jh(e,t),Hs=_T(Na.tier),Ep=(0,j.useMemo)(()=>({isInsideEditor:!0,activeTab:Nt,activeSubTab:jn,tier:Hs,setActiveTab:cn,setActiveSubTab:yr}),[Nt,jn,Hs]),He=(0,j.useRef)(null),wi=(0,j.useRef)(0),Nr=(0,j.useRef)(0),kp=(0,j.useRef)(o?`${o.id}:${o.revision}`:null),Rp=(0,j.useRef)(null),xd=(0,j.useRef)(!1),jo=(0,j.useRef)(!1),ql=(0,j.useRef)(o?{modelUrl:o.model.url,bindings:o.objectBindings,sceneConfig:o.sceneConfig}:null),Gs=(0,j.useRef)(void 0),Ho=(0,j.useRef)(0),In=(0,j.useRef)(null),nr=(0,j.useRef)(o?{requestId:0,modelName:o.model.name??"model",modelUrl:o.model.url,storedBindings:o.objectBindings,streaming:!!o.model.tilesetUrl}:null),xr=(0,j.useRef)(null),Ws=(0,j.useRef)(new Set),Go=(0,j.useRef)(new Map);zP(D.snapshot,x,{modelUrl:g,modelSourceRef:xr,uploadedFilesRef:Go});let Ba=(0,j.useRef)(null),Lp=(0,j.useRef)(!1),Si=(0,j.useRef)(null),Mi=(0,j.useRef)(new Map),[wd,Sd]=(0,j.useState)(0),{materialVariantGroups:Dp,objectsWithoutUvs:Ia}=GP({modelUrl:g,scenesRef:Mi,sceneRevision:wd,streaming:!!w?.tilesetUrl});(0,j.useEffect)(()=>{let E=new Set(o?g?[g]:[]:P);for(let O of Mi.current.keys())E.has(O)||Mi.current.delete(O)},[o,g,P]),HP({enabled:!w?.tilesetUrl,modelUrl:g,bindings:L,mergeSources:Me,parkedModels:x,scenesRef:Mi,sceneRevision:wd,setBindings:D.setValueUntracked,setParkedModels:M});let Wo=(0,j.useRef)(null),[Yi,Op]=(0,j.useState)({}),Yl=(0,j.useMemo)(()=>{if(!R||H.length===0||!Wo.current)return null;let O=H.filter(I=>L[I]&&!L[I].removed).map(I=>Yi[I]).filter(I=>!!I);return O.length>0?O:null},[R,H,Yi,L]),{cameraState:pn,resetView:ft,focusObject:Md,fitScene:Np,setCameraState:Kl,handleCameraChange:Bp,handleViewerReady:Hy}=M_(),Xo=(0,j.useCallback)(E=>{Gn||Kl({position:E.position,target:E.target,fov:E.fov??pn?.fov??null,zoom:E.zoom??pn?.zoom??1,azimuthAngle:E.azimuthAngle,polarAngle:E.polarAngle},!0)},[Gn,Kl,pn]),Cr=dT(),Xs=(0,j.useMemo)(()=>o?g?[g]:[]:P,[o,g,P]),$o=uT(Xs),_d=mT({modelUrl:g,sceneConfig:ae,setSceneConfig:un,setSceneConfigUntracked:Hn,parkedModels:x,setParkedModels:M,animations:$o,markSessionEdited:on}),bn=_?L[_]??null:null,Kn=bn?.style?.material,za=!Ia.has(bn?.modelObjectId??_??""),$s=(0,j.useMemo)(()=>{if(!o&&!(P.length<2))return P.map((E,O)=>{let I=E===g,z=I?void 0:x.find(Y=>Y.url===E);return{url:E,label:`Model ${O+1}`,bindings:I?L:z?.bindings??{},isActive:I}})},[o,P,g,L,x]),qs=(0,j.useMemo)(()=>{let E=[];return P.forEach((O,I)=>{let z=O===g,Y=z?void 0:x.find(Ue=>Ue.url===O),se=`Model ${I+1}`;E.push({kind:"model",url:O,label:se,name:z?T:Y?.name??"Untitled model",isActive:z}),(z?Me:Y?.mergedModelSources??[]).forEach(Ue=>{E.push({kind:"merge",url:Ue.url,label:"Merged nodes",name:Vo(Ue.namePrefix),ownerLabel:se})})}),E},[P,g,T,x,Me]),Ys=(0,j.useMemo)(()=>Me.map(E=>({url:E.url,namePrefix:E.namePrefix})),[Me]),Zl=(0,j.useMemo)(()=>{if(!o&&!(P.length<1))return P.map((E,O)=>{if(E===g)return{url:E,label:T||`Model ${O+1}`,objectBindings:L,originalNodePoses:ct.current,mergeModels:Ys};let z=x.find(Y=>Y.url===E);return{url:E,label:z?.name||`Model ${O+1}`,objectBindings:z?.bindings??{},originalNodePoses:z?.originalTransforms,sceneConfig:No(ae,z?.modelSettings),mergeModels:(z?.mergedModelSources??[]).map(Y=>({url:Y.url,namePrefix:Y.namePrefix}))}})},[o,P,g,T,L,x,Ys,ae]);(0,j.useEffect)(()=>{let E=f.current;if(!E)return;let O=E.querySelector(".ri-modelSwitcher"),I=()=>{let Y=xi?48:12,se=O?Math.max(Y,O.getBoundingClientRect().bottom-E.getBoundingClientRect().top+8):Y;E.style.setProperty("--bb-canvas-hint-top",`${se}px`)};I();let z=new ResizeObserver(I);return z.observe(E),O&&z.observe(O),()=>{z.disconnect(),E.style.removeProperty("--bb-canvas-hint-top")}},[Zl,xi]);let Ki=bn?.cameraState,Jf=pn?{position:Dy(pn.position),target:Dy(pn.target)}:null,Br=(0,j.useCallback)(E=>{un(O=>{let I=O.annotations.map(Y=>Y.id).join(","),z=E.map(Y=>Y.id).join(",");return I===z?O:{...O,annotations:E}})},[]),Ip=(0,j.useCallback)(E=>{bo(E?{annotation:E}:null)},[]);(0,j.useEffect)(()=>{if(!bn){tn("{}"),we("{}"),Qe(null),Dt(null);return}tn(Ly(bn.metrics)),we(Ly(bn.metadata)),Qe(null),Dt(null)},[bn]),(0,j.useEffect)(()=>{let E=Iy(Kn);if(Xi.current!==_){Xi.current=_,mr(E);return}mr(O=>{let I=!1,z={...O};for(let Y of i2)E[Y]&&!O[Y]&&(z[Y]=!0,I=!0);return I?z:O})},[_,Kn]),(0,j.useEffect)(()=>()=>{He.current?.cleanup(),In.current&&clearTimeout(In.current)},[]);let Dn=(0,j.useCallback)((E,O)=>{let I=tp(E);if(O){let z=new Map(Object.values(O).map(Y=>[Y.modelObjectId,Y]));for(let Y of E){let se=z.get(Y);se&&(I[Y]=se)}}return I},[]);(0,j.useEffect)(()=>{if(!o)return;let E=`${o.id}:${o.revision}`;if(kp.current===E)return;kp.current=E;let O=g!==o.model.url||w?.tilesetUrl!==o.model.tilesetUrl||w?.assetVersion!==o.model.assetVersion,I=L!==o.objectBindings,z=ae!==o.sceneConfig;(O||I||z)&&(jo.current=!0),C(o.model),h(o.model.name??"model");let Y=o.objectBindings;if(I){let se=Rp.current;Y=se?Dn(se,o.objectBindings):o.objectBindings,D.reset(Y)}if(z&&dt.reset(o.sceneConfig),O){Cr.clearAnimations();let se=++Nr.current;nr.current={requestId:se,modelName:o.model.name??"model",modelUrl:o.model.url,storedBindings:o.objectBindings,streaming:!!o.model.tilesetUrl},Si.current=null,k(null),Ve(!0),y(o.model.url)}ql.current={modelUrl:o.model.url,bindings:Y,sceneConfig:o.sceneConfig}},[L,Dn,o,g,ae,w,D,dt,Cr.clearAnimations]);let vo=(0,j.useRef)(a);vo.current=a,(0,j.useEffect)(()=>{if(!o||!vo.current||!g)return;if(!xd.current){xd.current=!0;return}let E=ql.current;if(g===o.model.url&&L===o.objectBindings&&ae===o.sceneConfig||E!==null&&g===E.modelUrl&&L===E.bindings&&ae===E.sceneConfig){jo.current=!1;return}if(nr.current)return;if(jo.current){jo.current=!1;return}let O=window.setTimeout(()=>{vo.current?.({projectId:o.id,baseRevision:o.revision,model:{...w??o.model,url:g,name:T||o.model.name},objectBindings:L,sceneConfig:ae},"local")},s);return()=>window.clearTimeout(O)},[L,T,g,o,s,w,ae]),(0,j.useEffect)(()=>{let E=O=>{if(O.key.toLowerCase()!=="z"||!(O.metaKey||O.ctrlKey))return;let I=O.target,z=I?.tagName;if(z==="INPUT"||z==="TEXTAREA"||I?.isContentEditable)return;O.preventDefault();let Y=Nt==="scene"?dt:D;O.shiftKey?Y.redo():Y.undo()};return window.addEventListener("keydown",E),()=>window.removeEventListener("keydown",E)},[Nt,D,dt]);let Cd=!o&&m,{handleTextureUpload:Qf}=VP({autosaveEnabled:Cd,hasEdits:La,modelUrl:g,bindings:L,sceneConfig:ae,parkedModels:x,mergedModelSources:Me,modelOrder:P,onTextureUpload:d,modelSourceRef:xr,pendingLoadRef:nr,storedModelKeysRef:Ws,uploadedFilesRef:Go,pendingAutosaveRef:Ba,autosaveFailureShownRef:Lp,setStatusMessage:Ce,setStatusTone:Se});(0,j.useEffect)(()=>{if(pe||en==="default"||en==="success")return;$e(!0);let E=window.setTimeout(()=>$e(!1),4e3);return()=>window.clearTimeout(E)},[be,en,pe]);let Ir=(0,j.useMemo)(()=>Object.keys(L),[L]),Va=(0,j.useMemo)(()=>!_||!bn?null:bn.id.trim()?Object.entries(L).some(([I,z])=>I!==_&&z.id===bn.id)?"Another binding already uses this ID.":null:"ID is required.",[L,_,bn]),Et=(E,O)=>{re(I=>{let z=X.current,Y=z.mode&&z.keys.includes(E)?z.keys.filter(ze=>I[ze]):[E];if(Y.length<=1)return{...I,[E]:O(I[E],E)};let se={...I};for(let ze of Y){let Ue=I[ze];se[ze]={...O(Ue,ze),id:Ue.id,modelObjectId:Ue.modelObjectId}}return se})},Ua=(E,O)=>{Et(E,I=>{let z=By(O(I.style?.material));return zy(I,z)})},Jl=(E,O,I)=>{Ua(E,z=>({...z,[O]:I?{path:I}:void 0}))},Fa=(E,O)=>{mr(I=>({...I,[E]:O})),!O&&_&&Et(_,I=>{let z=By(a2(I.style?.material,E));return zy(I,z)})},_i=(0,j.useCallback)((E,O,I)=>{let{bindings:z,originalTransforms:Y,nodeNames:se}=Mp(E,I);ct.current=Y,D.reset(jl(E,I??{},Me,z)),k(se[0]??null),I||Hn(ze=>({...ze,annotations:[]})),Ce(`Generated ${se.length} bindings from ${O}.`),Se("success"),Ho.current=100,_e(100),In.current&&clearTimeout(In.current),In.current=setTimeout(()=>{In.current=null,Ve(!1),_e(null)},400)},[D,Hn,Me]),Td=(E,O,I,z)=>{Ba.current?.();let Y=++Nr.current;Un(),o||dt.reset(E!==g?No(ae):ae),E!==g&&Cr.clearAnimations(),x.forEach(Ue=>Ue.resolved?.cleanup()),M([]),S([E]),Pe([]),Ve(!0),_e(null),Ho.current=0,In.current&&(clearTimeout(In.current),In.current=null),Gs.current=I;let se=I?I/1048576:0;Ce(se>=100?`Reading ${O} (${Math.round(se)}MB \u2014 large file, this can take a while)...`:`Reading ${O} and generating starter bindings...`),Se("default"),h(O),C(z??{url:E,name:O}),bo(null);let ze=Si.current;if(E===g&&ze?.url===E){nr.current=null,_i(ze.scene,O);return}nr.current={requestId:Y,modelName:O,modelUrl:E,streaming:!!z?.tilesetUrl},y(E),D.reset({}),k(null)},eg=(0,j.useCallback)(E=>{g&&Mi.current.get(g)!==E&&(Mi.current.set(g,E),Sd(I=>I+1));let O=nr.current;if(!(O&&O.requestId!==Nr.current)&&(g&&(Si.current={url:g,scene:E}),nt(null),J(null),!!O)){if(nr.current=null,O.streaming){Ce(`Streaming ${O.modelName}.`),Se("success"),Ve(!1);return}O.storedBindings&&(jo.current=!0),_i(E,O.modelName,O.storedBindings),O.restoring&&Ce(`Restored your last session with ${O.modelName}.`)}},[_i,g]),Ql=(0,j.useCallback)(E=>{if(!w?.tilesetUrl)return;let O=E.map(z=>z.name);if(O.length===0)return;Rp.current=O,jo.current=!0;let I=Dn(O,o?.objectBindings);if(D.reset(I),o){let z=ql.current;ql.current={modelUrl:z?.modelUrl??o.model.url,bindings:I,sceneConfig:z?.sceneConfig??o.sceneConfig}}k(z=>z??O[0]??null),Ce(`Streaming ${O.length} bindable objects.`),Se("success"),Ve(!1)},[Dn,D,o,w]),zp=(0,j.useCallback)(E=>{let O=nr.current;if(!(O&&O.requestId!==Nr.current)){if(nr.current=null,console.error(E),O?.restoring)xr.current=null,y(null),Ce(l2(O.modelName));else if(O)Ce(Sm(E)?`${O.modelName} is a point cloud: it has points but no faces. Turn it into a mesh first, for example with MeshLab or Blender.`:`Could not read ${O.modelName}. Make sure the file is a valid GLB, GLTF, OBJ, FBX, USDZ, STL, or PLY asset.`);else{let{detail:I}=wc(E,g??"",He.current?.format);Ce(`Could not read ${T||"the model"}. ${I}`)}Se("error"),In.current&&(clearTimeout(In.current),In.current=null),Ho.current=0,Ve(!1),_e(null)}},[g,T]),ec=(0,j.useCallback)(E=>{let O=null;if(E.lengthComputable&&E.total>0)O=E.loaded/E.total*100;else{let z=Gs.current;z&&z>0&&(O=E.loaded/z*100)}if(O===null)return;let I=Math.min(90,Math.floor(O/10)*10);I>Ho.current&&(Ho.current=I,_e(I)),O>=99.5&&Ce(z=>z.startsWith("Finalizing")?z:"Finalizing model \u2014 parsing geometry and textures (large files can take a moment here)...")},[]),ei=(0,j.useCallback)(E=>{Cr.handleAnimationsReady(E),g&&$o.handleModelAnimationsReady(g,E)},[Cr,g,$o.handleModelAnimationsReady]),Vp=async()=>{He.current?.cleanup(),He.current=null,xr.current={model:{kind:"url",url:s2,name:"room.glb"}},await Td(s2,"room.glb")},Up=async E=>{if(!m)return;if(l){try{Ve(!0),Ce(`Uploading ${E.name}...`),Se("default");let z=await l(E);xr.current={model:{kind:"url",url:z.url,name:z.name??E.name}},await Td(z.url,z.name??E.name,E.size,z)}catch(z){Ve(!1),Ce(z instanceof Error?z.message:`Could not upload ${E.name}.`),Se("error")}return}let O;try{O=await cl(E)}catch(z){Ce(z instanceof Error?z.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, .stl, .ply, or .zip asset."),Se("error");return}He.current?.cleanup(),He.current=O;let I=Vy();Go.current.set(I,E),xr.current={model:{kind:"file",key:I,name:O.name},file:E},await Td(O.url,O.name,E.size,{url:O.url,name:O.name})},tg=async E=>{let O=E.target.files?.[0];O&&(await Up(O),E.target.value="")},qo=()=>{Ba.current=null,on(),He.current?.cleanup(),He.current=null,Si.current=null,nr.current=null,xr.current=null,Cr.clearAnimations(),ct.current={},wi.current=0,Ae(!1),In.current&&(clearTimeout(In.current),In.current=null),Ho.current=0,_e(null),Gs.current=void 0,y(null),h(""),x.forEach(E=>E.resolved?.cleanup()),M([]),S([]),Pe([]),C(null),k(null),bo(null),D.reset({}),tn("{}"),we("{}"),Qe(null),Dt(null),Oa(null),Ne(!1),At(!1),Hn(E=>No(E)),Ce("Load the demo model or upload a GLB, GLTF, OBJ, FBX, USDZ, STL, or PLY model to generate bindings."),Se("default")},Yo=()=>{qs.length>1?G(!0):qo()},tc=()=>{G(!1)},Fp=E=>{if(G(!1),P.length<=1){qo();return}if(!P.includes(E))return;if(on(),E!==g){let se=x.find(ze=>ze.url===E);se?.resolved?.cleanup(),M(ze=>ze.filter(Ue=>Ue.url!==E)),S(ze=>ze.filter(Ue=>Ue!==E)),Ce(`Removed ${se?.name??"the model"}.`),Se("success");return}let O=P.filter(se=>se!==E),I=O[0],z=x.findIndex(se=>se.url===I),Y=x[z];if(!Y){qo();return}He.current?.cleanup(),M(se=>se.filter((ze,Ue)=>Ue!==z)),S(O),He.current=Y.resolved??null,xr.current={model:Y.sessionModel??{kind:"url",url:Y.url,name:Y.name}},Si.current=null,nr.current=null,ct.current=Y.originalTransforms,Cr.clearAnimations(),hr(Y),y(Y.url),h(Y.name),C({url:Y.url,name:Y.name}),D.restoreModel(Y),k(Object.keys(Y.bindings)[0]??null),bo(null),Ce(`Removed the model \u2014 now viewing ${Y.name}.`),Se("success")},Pd=E=>{G(!1);let O=Me.find(Y=>Y.url===E);if(O){on(),D.removeMerge(E),Ce(`Removed ${Vo(O.namePrefix)}.`),Se("success");return}let I=x.find(Y=>Y.mergedModelSources.some(se=>se.url===E));if(!I)return;let z=I.mergedModelSources.find(Y=>Y.url===E);z&&(on(),M(Y=>Y.map(se=>se.url!==I.url?se:Ey(se,ze=>Ay(ze,E)))),Ce(`Removed ${Vo(z.namePrefix)}.`),Se("success"))},nc=()=>{c.current?.click()},Ad=()=>{Ra(!0)},ng=E=>{let O=E.target.files?.[0];E.target.value="";let I=yi.current;yi.current=null,!(!O||!m||!I)&&(I.mode==="separate"?og(O):ti(O,I.targetUrl))},rg=(0,j.useCallback)(()=>{yi.current=null,Ra(!1)},[]),ig=(0,j.useCallback)(E=>{yi.current=E,Ra(!1),p.current?.click()},[]),og=(0,j.useCallback)(async E=>{let O;try{O=await cl(E)}catch(z){Ce(z instanceof Error?z.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset."),Se("error");return}let I=Vy();Go.current.set(I,E),M(z=>[...z,{url:O.url,name:O.name,bindings:{},originalTransforms:{},resolved:O,sessionModel:{kind:"file",key:I,name:O.name},mergedModelSources:[]}]),S(z=>[...z,O.url]),on(),Ce(`Added ${O.name} as a separate model.`),Se("success")},[on]),ti=(0,j.useCallback)(async(E,O)=>{let I;try{I=await cl(E)}catch(qe){Ce(qe instanceof Error?qe.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset."),Se("error");return}let z=F.current,Y=z.parkedModels.find(qe=>qe.url===O);if(!z.modelOrder.includes(O)||O!==z.modelUrl&&!Y){I.cleanup(),Ce("The destination model was removed. Choose a model and add the file again."),Se("error");return}let se=Vy();Go.current.set(se,E);let ze={url:I.url,resolved:I,sessionModel:{kind:"file",key:se,name:I.name},nodeNames:[],loadState:"loading"};O===z.modelUrl?D.addMerge(qe=>({...ze,namePrefix:Cy(I.name,qe.mergeSources,qe.bindings)})):M(qe=>{let Bt=qe.findIndex(vn=>vn.url===O);if(Bt===-1)return qe;let zr=[...qe];return zr[Bt]=Ey(zr[Bt],vn=>({...vn,mergeSources:[...vn.mergeSources,{...ze,namePrefix:Cy(I.name,vn.mergeSources,vn.bindings)}]})),zr});let Ue=O===z.modelUrl?z.modelName:Y?.name;on(),Ce(`Merging ${I.name} into ${Ue||"the model"}...`),Se("default")},[D.addMerge,on]),jp=(0,j.useCallback)((E,O)=>{let I=Me.find(qe=>qe.url===E);if(I){let{bindings:qe,originalTransforms:Bt,nodeNames:zr}=Ty(O,L);D.hydrateMerge(E,{nodeNames:zr,loadState:"loaded"},qe),ct.current={...ct.current,...Bt},Ce(`Merged ${zr.length} node${zr.length===1?"":"s"} from ${I.namePrefix||"the added model"} into ${T||"the model"}.`),Se("success");return}let z=x.find(qe=>qe.mergedModelSources.some(Bt=>Bt.url===E));if(!z)return;let Y=z.mergedModelSources.find(qe=>qe.url===E);if(!Y)return;let{bindings:se,originalTransforms:ze,nodeNames:Ue}=Ty(O,z.bindings);M(qe=>qe.map(Bt=>Bt.url!==z.url?Bt:{...ky(Bt,E,{nodeNames:Ue,loadState:"loaded"},se),originalTransforms:{...Bt.originalTransforms,...ze}})),Ce(`Merged ${Ue.length} node${Ue.length===1?"":"s"} from ${Y.namePrefix||"the added model"} into ${z.name||"the model"}.`),Se("success")},[D.hydrateMerge,T,Me,L,x]),ag=(0,j.useCallback)((E,O)=>{let I=Me.find(Y=>Y.url===E)??x.flatMap(Y=>Y.mergedModelSources).find(Y=>Y.url===E);if(!I)return;D.hydrateMerge(E,{loadState:"failed"}),M(Y=>Y.map(se=>se.mergedModelSources.some(ze=>ze.url===E)?ky(se,E,{loadState:"failed"}):se));let{detail:z}=wc(O,E,I.resolved.format);Ce(`Could not merge ${I.resolved.name}. ${z} Remove the failed file using the Remove model menu.`),Se("error")},[Me,x,D.hydrateMerge]),sg=(0,j.useCallback)((E,O)=>{let I=x.find(Y=>Y.url===E);if(!I)return;let{detail:z}=wc(O,E,I.resolved?.format);Ce(`Could not read ${I.name}. ${z} Remove the failed file using the Remove model menu.`),Se("error")},[x]),zn=(0,j.useCallback)((E,O)=>{Mi.current.get(E)!==O&&(Mi.current.set(E,O),Sd(I=>I+1)),M(I=>{let z=I.findIndex(Ue=>Ue.url===E);if(z===-1)return I;let{bindings:Y,originalTransforms:se}=Mp(O,I[z].bindings),ze=[...I];return ze[z]={...BP(ze[z],Y),bindings:jl(O,I[z].bindings,I[z].mergedModelSources,Y),originalTransforms:{...se,...I[z].originalTransforms}},ze})},[]),Ko=(0,j.useCallback)(E=>{if(o||E===g)return;let O=x.findIndex(Y=>Y.url===E);if(O===-1)return;let I=x[O];Ba.current?.(),on();let z=g?{url:g,name:T,bindings:L,originalTransforms:ct.current,resolved:He.current??void 0,sessionModel:xr.current?.model,mergedModelSources:Me,modelSettings:Af(ae),bindingHistory:D.snapshot,sceneHistory:dt.snapshot}:null;M(Y=>{let se=Y.filter((ze,Ue)=>Ue!==O);return z?[...se,z]:se}),He.current=I.resolved??null,xr.current={model:I.sessionModel??{kind:"url",url:I.url,name:I.name}},Si.current=null,nr.current=null,Cr.clearAnimations(),hr(I),ct.current=I.originalTransforms,y(I.url),h(I.name),C({url:I.url,name:I.name}),D.restoreModel(I),k(Object.keys(I.bindings)[0]??null),bo(null)},[o,g,T,L,x,D,Me,ae,dt,hr,Cr.clearAnimations,on]),Ed=()=>{v.current?.click()},{handleExportBindings:kd,handleImportBindingsChange:lg,openSceneConfigImportPicker:cg,handleImportSceneConfigChange:Ci}=r2({bindings:L,setBindings:re,setSceneConfig:un,nodeKeys:Ir,sceneConfigInputRef:b,setIsExporting:Gt,setStatusMessage:Ce,setStatusTone:Se}),Ks=E=>{E.preventDefault(),E.stopPropagation(),!(pe||g)&&(wi.current+=1,Ae(!0))},Rd=E=>{E.preventDefault(),E.stopPropagation(),!(pe||g)&&(E.dataTransfer.dropEffect="copy",Ae(!0))},Ld=E=>{E.preventDefault(),E.stopPropagation(),!(pe||g)&&(wi.current=Math.max(0,wi.current-1),wi.current===0&&Ae(!1))},ni=async E=>{if(E.preventDefault(),E.stopPropagation(),wi.current=0,Ae(!1),pe||g)return;let O=E.dataTransfer.files?.[0];O&&await Up(O)},Zs=(E,O,I)=>{if(!_)return;let z;try{z=JSON.parse(O)}catch{I("Invalid JSON");return}if(z===null||typeof z!="object"||Array.isArray(z)){I("Expected a JSON object");return}if(E==="metrics"&&Object.values(z).some(se=>typeof se!="number"||!Number.isFinite(se))){I("Metrics values must be numbers");return}Et(_,Y=>({...Y,[E]:z})),I(null)},rc=(0,j.useCallback)((E,O)=>{Cd&&Lf(E,O).catch(I=>console.warn("[BindingBuilder] Could not store decal image for autosave:",I))},[Cd]),Zo=(0,j.useMemo)(()=>{let E=Si.current?.scene,I=(E&&_?di(E,_):null)?.geometry;if(!I)return .2;I.boundingBox||I.computeBoundingBox();let z=I.boundingBox?.getSize(new c2.Vector3),Y=z?Math.max(z.x,z.y,z.z):0;return Y>0&&Number.isFinite(Y)?Y/3:.2},[_,g,pe]),Jo=(0,j.useMemo)(()=>{if(!Re?.moving)return null;let{nodeKey:E,decal:O}=Re,I=L[E],z=I?.decals?.find(Y=>Y.id===O.id);return z?{objectId:I.modelObjectId??E,decal:z,onCancel:()=>nt(null),onCommit:Y=>{re(se=>{let ze=se[E];return ze?{...se,[E]:{...ze,decals:ze.decals?.map(Ue=>Ue.id===z.id?{...Ue,...Y}:Ue)}}:se}),nt(null)}}:null},[L,Re,re]),Qo=(0,j.useCallback)((E,O)=>{if(!_)return;let I=L[_],z=I?.decals?.find(Ue=>Ue.id===E);if(!z)return;let Y=Wo.current,se=Y?.raw.nodes[I.modelObjectId??_],ze=xf(se,Y?.raw.controls.camera,z,O);if(!ze){Ce("No visible surface in that direction. Try another arrow or rotate the view."),Se("error"),$e(!0);return}nt(null),$e(!1),Et(_,Ue=>({...Ue,decals:Ue.decals?.map(qe=>qe.id===E?{...qe,...ze}:qe)}))},[L,_,Et]),fr=(0,j.useCallback)(E=>{if(!E||E.moving){nt(E);return}let O=Wo.current,I=L[E.nodeKey],z=O?.raw.nodes[I?.modelObjectId??E.nodeKey],Y=yf(z,O?.raw.controls.camera);if(!Y){Ce("Could not find a surface on this object for the decal."),Se("error"),$e(!0);return}let se={...E.decal,...Y};re(ze=>{let Ue=ze[E.nodeKey];if(!Ue)return ze;let qe=(Ue.decals??[]).filter(Bt=>Bt.id!==se.id);return{...ze,[E.nodeKey]:{...Ue,decals:[...qe,se]}}}),nt({...E,moving:!0})},[L,re]),Hp=(0,j.useCallback)((E,O)=>{let I=Object.entries(L).find(([Ue,qe])=>qe===E||Ue===E.modelObjectId||qe.modelObjectId===E.modelObjectId)?.[0],z=I?L[I]?.decals?.find(Ue=>Ue.id===O):void 0;if(!I||!z)return;cn("object"),Ie(Ue=>({...Ue,decals:!0})),k(I);let{position:Y,normal:se,...ze}=z;setTimeout(()=>nt({nodeKey:I,decal:ze,moving:!0}),0)},[L]),ja=(0,j.useCallback)(E=>{let O=H.includes(E),I=O?H.filter(z=>z!==E):[...H,E];B(I),O?_===E&&k(I[I.length-1]??null):k(E)},[H,_]),Gp=(0,j.useCallback)(()=>{if(R){U(!1),B([]);return}U(!0),B(_?[_]:[])},[R,_]),ic=(0,j.useCallback)(E=>{B(E),k(O=>O&&E.includes(O)?O:E[E.length-1]??null)},[]),Dd=(0,j.useCallback)(E=>{if(Gn){Fs("orbit");return}if(!E){if(R)return;k(null);return}let O=Object.entries(L).find(([I,z])=>z===E||I===E.modelObjectId||z.modelObjectId===E.modelObjectId)?.[0]??null;if(R){O&&ja(O);return}k(O)},[Gn,L,R,ja]),Wp=(0,j.useCallback)(async E=>{if(Gn){Fs("orbit");return}if(R){ja(E);return}k(E),Oa(null),await Md(E)},[Gn,Md,R,ja]),Od=(0,j.useCallback)(E=>{Oa(E?L[E]??null:null)},[L]),Xp=(0,j.useCallback)(E=>Ot(!E),[]),Ha=(0,j.useCallback)(()=>{if(Gn){Ce("Camera positions aren't available while Pointer Lock is the active camera controller."),Se("error");return}if(!_||!pn)return;let E={position:pn.position,target:pn.target,...pn.fov!=null?{fov:pn.fov}:{},zoom:pn.zoom};Et(_,O=>({...O,cameraState:E}))},[Gn,_,pn]),dg=(0,j.useCallback)(()=>{if(Gn){Ce("Camera positions aren't available while Pointer Lock is the active camera controller."),Se("error");return}!Ki?.position||!Ki?.target||Kl({position:Ki.position,target:Ki.target,fov:Ki.fov??pn?.fov??null,zoom:Ki.zoom??pn?.zoom??1},!0)},[Gn,Ki,Kl,pn]),ug=(0,j.useCallback)(()=>{Gn||_&&Et(_,E=>({...E,cameraState:void 0}))},[Gn,_]),Nd=(0,j.useCallback)(async()=>{if(Gn){Ce("Reset View isn't available while Pointer Lock is the active camera controller."),Se("error");return}await ft()},[Gn,ft]),$p=(0,j.useCallback)(async()=>{if(Gn){Ce("Fit Scene isn't available while Pointer Lock is the active camera controller."),Se("error");return}await Np()},[Gn,Np]),qp=(0,j.useCallback)(()=>{Ce("Texture position saved."),Se("success"),Xl.current?.()},[]),Bd=(0,j.useCallback)(E=>{Us(E),$i(!0)},[]),Js=(0,j.useCallback)(()=>{$i(!1),Us(null)},[]),Id=(0,j.useCallback)(()=>{if(go==="bindings"){if(!Ir.length){Js();return}let E=tp(Ir,Ia);D.reset(E,{asEdit:!0}),k(Ir[0]??null),Ce("Object bindings reset to default values."),Se("success")}else go==="scene"&&(dt.reset(is,{asEdit:!0}),Ce("Scene config reset to default values."),Se("success"));Js()},[go,Ir,D,dt,Js]),pg=(0,j.useCallback)(E=>{ee(E)},[]),mg=(0,j.useCallback)(()=>{ee(null)},[]),zd=(0,j.useCallback)(()=>{let E=ce;if(!E)return;let O=L[E]?.label||E;Et(E,I=>({...I,removed:!0})),k(I=>I===E?null:I),J(I=>I===E?null:I),Ce(`Deleted ${O}.`),Se("success"),ee(null)},[ce,L,Et]),hg=(0,j.useCallback)(()=>{Or(null)},[]),fg=async()=>{let E;try{E=await bT()}catch(O){console.warn("[BindingBuilder] Could not read the saved session:",O),Ce("Couldn't read the saved session from this browser."),Se("error");return}if(!E){Ce("No saved session in this browser. Sessions are saved when you edit a model or add another one."),Se("error");return}Or(E)},oc=async(E,O)=>(await Promise.all(E.map(async({entry:z,file:Y})=>{if(z.model.kind==="url")return console.warn(`[BindingBuilder] Could not restore merged model "${z.model.name}" \u2014 merged models must come from an uploaded file.`),null;if(!Y)return console.warn(`[BindingBuilder] Could not restore merged model "${z.model.name}" \u2014 its file is no longer in this browser's storage.`),null;try{let se=await cl(Y);return O.set(z.model.key,Y),{url:se.url,namePrefix:z.namePrefix,resolved:se,sessionModel:z.model,nodeNames:[],loadState:"loading"}}catch(se){return console.warn(`[BindingBuilder] Could not restore merged model "${z.model.name}":`,se),null}}))).filter(z=>z!==null),Vd=async(E,O,I)=>{let z=await Promise.all(E.map(async({entry:se,file:ze,mergeFiles:Ue})=>{if(se.model.kind==="url")return{url:se.model.url,name:se.model.name,bindings:await bd(se.bindings),originalTransforms:se.originalTransforms,modelSettings:se.modelSettings,sessionModel:se.model,mergedModelSources:await oc(Ue,I)};if(!ze)return console.warn(`[BindingBuilder] Could not restore parked model "${se.model.name}" \u2014 its file is no longer in this browser's storage.`),null;try{let qe=await cl(ze);return I.set(se.model.key,ze),{url:qe.url,name:se.model.name,bindings:await bd(se.bindings),originalTransforms:se.originalTransforms,modelSettings:se.modelSettings,resolved:qe,sessionModel:se.model,mergedModelSources:await oc(Ue,I)}}catch(qe){return console.warn(`[BindingBuilder] Could not restore parked model "${se.model.name}":`,qe),null}})),Y=await oc(O,I);return{parkedModels:z.filter(se=>se!==null),mergedModelSources:Y}},Yp=async()=>{let E=qi;if(Or(null),!E)return;let{session:O,file:I}=E,{model:z}=O;Ba.current=null;let Y=dp(is,O.sceneConfig),se=Nr.current,ze=await bd(O.bindings);if(Nr.current!==se)return;let Ue=new Map,{parkedModels:qe,mergedModelSources:Bt}=await Vd(E.parkedFiles,E.mergeFiles,Ue);if(Nr.current!==se){qe.forEach(Sp),Bt.forEach(fd);return}let zr=Tr=>{let Vr=new Map;Vr.set(up(z),Tr),qe.forEach(Ur=>{Ur.sessionModel&&Vr.set(up(Ur.sessionModel),Ur.url)});let Zi=(O.modelOrder??[]).map(Ur=>Vr.get(Ur)).filter(Ur=>!!Ur),ac=new Set(Zi);for(let Ur of[Tr,...qe.map(Pn=>Pn.url)])ac.has(Ur)||(Zi.push(Ur),ac.add(Ur));return Zi},vn=()=>{for(let[Tr,Vr]of Ue)Go.current.set(Tr,Vr),Ws.current.add(Tr)},ri;if(z.kind==="file"){if(!I){qe.forEach(Sp),Bt.forEach(fd);return}let Tr=Nr.current,Vr;try{Vr=await cl(I)}catch(Zi){console.warn("[BindingBuilder] Could not read the saved model:",Zi),Ce(l2(z.name)),Se("error"),qe.forEach(Sp),Bt.forEach(fd);return}if(Nr.current!==Tr){Vr.cleanup(),qe.forEach(Sp),Bt.forEach(fd);return}He.current?.cleanup(),He.current=Vr,ri=Vr.url,Ue.set(z.key,I),vn(),Un(),x.forEach(Zi=>Zi.resolved?.cleanup()),M(qe),Pe(Bt),S(zr(ri))}else{ri=z.url,vn(),Un(),x.forEach(Vr=>Vr.resolved?.cleanup()),M(qe),Pe(Bt),S(zr(ri));let Tr=Si.current;if(ri===g&&Tr?.url===ri&&!nr.current){xr.current={model:z},D.reset(jl(Tr.scene,ze,Bt,Mp(Tr.scene,ze).bindings)),dt.reset(Y),Ce(`Restored your last session with ${z.name}.`),Se("success");return}He.current?.cleanup(),He.current=null}xr.current={model:z,file:I??void 0},z.kind==="file"&&Ws.current.add(z.key);let yo=++Nr.current;ri!==g&&Cr.clearAnimations(),Ve(!0),_e(null),Ho.current=0,In.current&&(clearTimeout(In.current),In.current=null),Gs.current=I?.size,Ce(`Restoring your last session with ${z.name}...`),Se("default"),h(z.name),C({url:ri,name:z.name}),bo(null),k(null),Si.current=null,D.reset({}),dt.reset(Y),nr.current={requestId:yo,modelName:z.name,modelUrl:ri,storedBindings:ze,restoring:!0},y(ri)};if(Na.status==="checking")return(0,Z.jsx)("div",{className:"bb-root bb-root--licenseChecking",children:(0,Z.jsx)(sl,{title:"Verifying License",message:"Checking your license key..."})});if(Na.status==="invalid")return(0,Z.jsx)("div",{className:"bb-root bb-root--licenseInvalid",children:(0,Z.jsx)(sl,{tone:"error",title:"Invalid License",message:Na.isLocalDomain?Na.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let Ud=Gn?(0,Z.jsx)(Z.Fragment,{children:"Click the preview to look around \xB7 Esc to release"}):ke?(0,Z.jsx)(Z.Fragment,{children:"Select a mesh \xB7 drag the colored arrows, planes, or rings"}):Ap&&ka?(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)("span",{children:[(0,Z.jsx)("kbd",{children:"W"}),(0,Z.jsx)("kbd",{children:"A"}),(0,Z.jsx)("kbd",{children:"S"}),(0,Z.jsx)("kbd",{children:"D"})," move"]}),(0,Z.jsxs)("span",{children:["\xB7 ",(0,Z.jsx)("kbd",{children:"Space"}),"/",(0,Z.jsx)("kbd",{children:"C"})," up \xB7 down"]}),(0,Z.jsx)("span",{children:"\xB7 drag to look"})]}):null;return(0,Z.jsxs)(Fv.Provider,{value:Ep,children:[(0,Z.jsxs)("div",{className:"bb-root",children:[(0,Z.jsx)("input",{ref:c,type:"file",accept:Jg,className:"bb-hiddenInput",onChange:tg,disabled:pe}),(0,Z.jsx)("input",{ref:p,type:"file",accept:Jg,className:"bb-hiddenInput",onChange:ng,disabled:pe}),(0,Z.jsx)("input",{ref:v,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:lg,disabled:pe}),(0,Z.jsx)("input",{ref:b,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:Ci,disabled:pe}),(0,Z.jsxs)("aside",{className:`bb-sidebar bb-sidebar--left ${Ee?"bb-sidebar--collapsed":""}`,children:[(0,Z.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!Ee&&(0,Z.jsx)("h1",{className:"bb-title",children:"Binding Builder"}),(0,Z.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>lt(E=>!E),"aria-label":Ee?"Open editor sidebar":"Collapse editor sidebar",title:Ee?"Open editor":"Collapse editor",children:Ee?"\u2192":"\u2190"})]}),!Ee&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)("div",{className:"bb-tabRow",children:[(0,Z.jsx)("button",{type:"button",className:`bb-tab ${Nt==="object"?"bb-tab--active":""}`,onClick:()=>cn("object"),children:"Object"}),(0,Z.jsx)("button",{type:"button",className:`bb-tab ${Nt==="scene"?"bb-tab--active":""}`,onClick:()=>cn("scene"),children:"Scene"})]}),(0,Z.jsx)("section",{className:"bb-editor",children:Nt==="scene"?(0,Z.jsx)(Z.Fragment,{children:g?(0,Z.jsx)(by,{config:ae,onChange:un,activeSubTab:jn,onActiveSubTabChange:yr,cameraState:(jn==="Cinematic"||jn==="Annotations")&&pn?{position:pn.position,target:pn.target,azimuthAngle:pn.azimuthAngle,polarAngle:pn.polarAngle,fov:pn.fov,zoom:pn.zoom}:null,onPreviewWaypoint:Xo,animationClipDetails:$o.clipDetails,animationConfig:_d.config,onAnimationConfigChange:_d.onChange,animationPlayback:$o,materialVariantGroups:Dp,objectBindings:L}):(0,Z.jsx)("div",{className:"bb-emptyEditor",children:"Upload a model to edit its scene settings."})}):!bn||!_?(0,Z.jsx)("div",{className:"bb-emptyEditor",children:"Select a generated node binding to edit its values."}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)("div",{className:"bb-editorHeader",children:[(0,Z.jsxs)("div",{children:[(0,Z.jsx)("div",{className:"bb-sectionKicker",children:"Editing Binding"}),(0,Z.jsx)("h2",{className:"bb-editorTitle",children:R&&H.length>1?`${H.length} objects selected`:bn.label||_}),(0,Z.jsx)("div",{className:"bb-editorMeta",children:R?(0,Z.jsx)("span",{children:"Changes apply to every selected object"}):(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)("span",{children:bn.type}),(0,Z.jsx)("span",{children:bn.modelObjectId})]})})]}),!R&&(0,Z.jsx)("button",{type:"button",className:"bb-editorDeleteButton",onClick:()=>pg(_),title:"Delete this object","aria-label":"Delete this object",children:(0,Z.jsx)(Wi.Trash2,{size:18})})]}),!R&&(0,Z.jsx)(yP,{selectedItem:_,selectedBinding:bn,open:at.identity,onToggle:()=>Yt("identity"),updateBinding:Et,idError:Va}),!R&&(0,Z.jsx)(xP,{selectedItem:_,selectedBinding:bn,open:at.basics,onToggle:()=>Yt("basics"),updateBinding:Et}),R&&(0,Z.jsx)(er,{title:"Basics",open:at.basics,onToggle:()=>Yt("basics"),children:(0,Z.jsx)("div",{className:"bb-groupFlags",children:["selectable","hoverable","visible"].map(E=>(0,Z.jsx)(zO,{label:E,values:H.map(O=>L[O]).filter(O=>O&&!O.removed).map(O=>O[E]!==!1),onChange:O=>Et(_,I=>({...I,[E]:O}))},E))})}),(0,Z.jsxs)(er,{title:"Material",open:at.material,onToggle:()=>Yt("material"),tooltip:"Edit the selected object's base material, textures, and surface properties.",children:[(0,Z.jsx)(vP,{disabled:!_,onApply:E=>_&&Ua(_,O=>({...O,...E}))}),(0,Z.jsx)(fP,{selectedItem:_,selectedMaterial:Kn,pbrWorkflow:bi,onPbrWorkflowChange:Zr,openMaterialPanels:ht,materialPanelEnabled:gn,onToggleMaterialPanel:Kr,onSetMaterialPanelState:Fa,updateSelectedMaterial:Ua,setSelectedTexturePath:Jl,isTexturePositioningEnabled:Kf,onConfirmTexturePosition:qp,takesImage:za})]}),!R&&(0,Z.jsx)(CP,{selectedItem:_,selectedBinding:bn,open:at.decals,onToggle:()=>Yt("decals"),updateBinding:Et,placement:Re,onPlacementChange:fr,defaultSize:Zo,onImageFile:rc,onNudge:Qo}),!R&&(0,Z.jsx)(SP,{selectedItem:_,selectedBinding:bn,open:at.actions,onToggle:()=>Yt("actions"),updateBinding:Et,takesImage:za}),!R&&(0,Z.jsx)(TP,{selectedBinding:bn,open:at.camera,onToggle:()=>Yt("camera"),cameraState:pn,formattedCameraState:Jf,savedCameraPosition:Ki,onSaveCameraPosition:Ha,onGoToSavedCamera:dg,onClearSavedCamera:ug,onResetView:Nd,onFitScene:$p}),(0,Z.jsx)(kP,{selectedItem:_,selectedBinding:bn,open:at.transform,onToggle:()=>Yt("transform"),updateBinding:Et,moveModeEnabled:ke,onToggleMoveMode:Ne,scaleModeEnabled:rn,onToggleScaleMode:At,transformSpace:Tn,onTransformSpaceChange:dn,originalTransform:ct.current[_]??null,originalTransforms:ct.current}),(0,Z.jsx)(_y,{title:"Metrics",label:"Metrics JSON",open:at.metrics,onToggle:()=>Yt("metrics"),draft:fn,error:Be,example:'{"area": 42}',onDraftChange:tn,onCommit:()=>Zs("metrics",fn,Qe)}),(0,Z.jsx)(_y,{title:"Metadata",label:"Metadata JSON",open:at.metadata,onToggle:()=>Yt("metadata"),draft:Ln,error:wt,example:'{"room": "kitchen"}',onDraftChange:we,onCommit:()=>Zs("metadata",Ln,Dt)})]})}),Nt==="object"&&(0,Z.jsx)(Ry,{canUndo:D.canUndo,canRedo:D.canRedo,onUndo:D.undo,onRedo:D.redo,onReset:()=>Bd("bindings"),resetDisabled:!Ir.length,resetTitle:"Reset object bindings to default",onImport:Ed,importDisabled:!Ir.length||pe,importTitle:"Re-apply a previously exported objectBindings.json onto this model",exportDisabled:!Ir.length||it,exporting:it,exportTitle:"Active model bindings",exportDescription:"Object bindings for the active model only. Other models, model files and scene settings are not included.",onExportJson:()=>kd("json"),onExportTs:()=>kd("ts")}),Nt==="scene"&&(0,Z.jsx)(Ry,{canUndo:dt.canUndo,canRedo:dt.canRedo,onUndo:dt.undo,onRedo:dt.redo,onReset:()=>Bd("scene"),resetTitle:"Reset scene config to default",onImport:cg,importDisabled:!Ir.length||pe,importTitle:"Re-apply a previously exported sceneConfig.json",exportDisabled:!Ir.length||pe,exportTitle:"Scene settings",exportDescription:"Shared scene settings and the active model's annotations, variants and animation settings. Model files and object bindings are not included.",onExportJson:()=>Cp("sceneConfig.json",QP(ae),"application/json"),onExportTs:()=>Cp("sceneConfig.ts",e2(ae),"text/typescript")})]})]}),(0,Z.jsxs)("main",{className:"bb-previewShell",children:[(0,Z.jsxs)("div",{className:"bb-previewHeader",children:[(0,Z.jsx)(Fg,{label:"View",icon:(0,Z.jsx)(Wi.SlidersHorizontal,{size:14,"aria-hidden":"true"}),title:"Preview options",children:()=>(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)("label",{className:"bb-headerMenuItem",children:[(0,Z.jsx)("input",{type:"checkbox",checked:Jr,onChange:E=>Is(E.target.checked)}),"Zoom on selected"]}),(0,Z.jsxs)("label",{className:"bb-headerMenuItem",children:[(0,Z.jsx)("input",{type:"checkbox",checked:Qr,onChange:E=>zs(E.target.checked)}),"Highlight on hover"]}),(0,Z.jsxs)("label",{className:"bb-headerMenuItem",children:[(0,Z.jsx)("input",{type:"checkbox",checked:ka,onChange:E=>Uo(E.target.checked)}),"Camera controller"]})]})}),(0,Z.jsx)("div",{className:"bb-previewMeta",children:(0,Z.jsx)("span",{title:_??void 0,children:_?`Focused: ${_}`:"Select a node to inspect it"})}),g&&(0,Z.jsxs)("button",{type:"button",className:`bb-compareButton ${xi?"bb-compareButton--active":""}`,onClick:()=>{Tp(E=>!E),Bn(null)},"aria-pressed":xi,title:"Compare: drag a divider across the preview to see it before and after your changes",children:[(0,Z.jsx)(Wi.SquareSplitHorizontal,{size:14}),"Compare"]}),m&&!o&&(0,Z.jsx)(Fg,{icon:(0,Z.jsx)(Wi.Ellipsis,{size:16,"aria-hidden":"true"}),title:"More model actions",align:"right",children:E=>(0,Z.jsx)(jx,{close:E,onRestore:g?void 0:fg,restoreDisabled:pe,onAddModel:g?Ad:void 0,addModelDisabled:pe,onRemove:g?Yo:void 0,confirmRemove:qs.length<=1})})]}),(0,Z.jsxs)("div",{className:"bb-preview",ref:f,onFocus:E=>{E.currentTarget.contains(E.relatedTarget)||js()},children:[(0,Z.jsx)(sf,{visible:pe||xe,message:be,tone:en,progress:le??void 0}),g&&(0,Z.jsx)("div",{className:`bb-canvasHint ${Ud?"bb-canvasHint--visible":""} ${xi?"bb-canvasHint--belowCompare":""}`,"aria-hidden":!Ud,children:Ud}),g?(0,Z.jsx)(Cf,{loading:"eager",modelUrl:g,tilesetUrl:w?.tilesetUrl,models:Zl,onModelChange:Ko,onExtraModelLoaded:zn,onExtraModelError:sg,mergeModels:Ys,onMergeModelLoaded:jp,onMergeModelError:ag,originalNodePoses:ct.current,objectBindings:L,selectedObject:bn,selectedObjectRefs:Yl,selectedObjectOutlineColor:"#22c55e",onObjectSelect:Dd,onSelectionClear:()=>ic([]),onObjectBindingsChange:re,onTextureUpload:Qf,onObjectEditLeaseChange:(E,O)=>u?.(E.modelObjectId||E.id,O),showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,onCameraChange:Bp,onViewerReady:E=>{Wo.current=E,Op(E.raw.nodes),Hy(E)},onAnnotationsChange:Br,activeAnnotation:$l?.annotation??null,onActiveAnnotationChange:Ip,onAnimationsReady:ei,onModelAnimationsReady:$o.handleModelAnimationsReady,onSceneLoaded:eg,onLoadError:zp,onObjectCatalog:w?.tilesetUrl?Ql:void 0,onProgress:ec,onCameraControllerChange:Fs,cameraControllerType:vd,onTexturePositioningChange:yd,endTexturePositioningRef:Xl,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:r,meshopt:i,sceneConfig:ae,onSceneConfigChange:un,preserveDrawingBuffer:!0,disableZoom:!1,zoomOnSelected:Jr,highlightOnHover:Qr,enableCameraControls:ka,moveModeEnabled:ke,scaleModeEnabled:rn,objectTransformSpace:Tn,enableKeyboardNavigation:!0,showViewGizmo:!0,showSectionTools:ae.section?.enabled??!1,isolation:ye,onIsolationChange:()=>J(null),showIsolateControls:!0,decalMove:Jo,onDecalDoubleClick:Hp,panelHoveredObject:Qr?Zf:null,showLoadingOverlay:!1,autoRotate:Gn?!1:ae.model.autoRotate??!1,autoRotateSpeed:ae.model.autoRotateSpeed??1}):(0,Z.jsx)("div",{className:`bb-previewPlaceholder ${me?"bb-previewPlaceholder--dragActive":""}`,onDragEnter:Ks,onDragOver:Rd,onDragLeave:Ld,onDrop:ni,children:(0,Z.jsxs)("div",{children:[(0,Z.jsx)("div",{children:"Upload a GLB, GLTF, OBJ, FBX, USDZ, STL, or PLY model, or drag a supported model/ZIP bundle here to generate editable object bindings."}),m?(0,Z.jsx)("button",{type:"button",className:"bb-previewPlaceholderButton",onClick:nc,disabled:pe,children:"Upload"}):null]})}),g&&xi?(0,Z.jsx)(cT,{liveViewerRef:Wo,split:Pp,onSplitChange:tr,labels:[Fo?"Pinned":"Before","Now"],beforeAction:(0,Z.jsxs)("button",{type:"button",className:"ri-compare__labelAction",onClick:()=>Bn(E=>E?null:{bindings:L,sceneConfig:ae}),"aria-pressed":!!Fo,title:Fo?"Unpin: compare with the project as it was opened again":"Pin as before: compare later changes with how the preview looks now",children:[Fo?(0,Z.jsx)(Wi.PinOff,{size:12}):(0,Z.jsx)(Wi.Pin,{size:12}),Fo?"Unpin":"Pin"]}),renderBefore:E=>(0,Z.jsx)(Cf,{loading:"eager",modelUrl:g,tilesetUrl:w?.tilesetUrl,objectBindings:Da.bindings,sceneConfig:Da.sceneConfig,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:r,meshopt:i,preset:"minimal",showLoadingOverlay:!1,showObjectNavigator:!1,selectedObject:null,zoomOnSelected:!1,highlightOnHover:!1,autoRotate:!1,cinematic:!1,onViewerReady:E})}):null]})]}),(0,Z.jsx)(RP,{bindings:L,selectedItem:_,onSelect:Wp,onHover:Od,isOpen:!nn,onToggle:Xp,modelGroups:$s,onSelectModel:Ko,isolatedItem:Q,onIsolate:J,multiSelectEnabled:R,onToggleMultiSelect:Gp,multiSelectedKeys:H,onSetMultiSelected:ic})]}),Vs&&(0,Z.jsx)(XP,{target:go,onCancel:Js,onConfirm:Id}),qi&&(0,Z.jsx)($P,{modelNames:[qi.session.model.name,...(qi.session.parkedModels??[]).map(E=>E.model.name)],mergedSourceCount:(qi.session.mergeModels?.length??0)+(qi.session.parkedModels??[]).reduce((E,O)=>E+(O.mergeModels?.length??0),0),savedAt:qi.session.savedAt,onCancel:hg,onConfirm:Yp}),vi&&(0,Z.jsx)(YP,{destinations:qs.filter(E=>E.kind==="model"),onCancel:rg,onChoose:ig}),W&&(0,Z.jsx)(KP,{options:qs,onCancel:tc,onRemoveModel:Fp,onRemoveMerge:Pd,onRemoveAll:()=>{G(!1),qo()}}),ce&&(0,Z.jsx)(qP,{nodeLabel:L[ce]?.label||ce,onCancel:mg,onConfirm:zd})]})}var d2={licenseKey:!0,dracoDecoderPath:!0,ktx2TranscoderPath:!0,meshopt:!0};function u2(e,t){let n={};for(let r of Object.keys(t))r in e&&(n[r]=e[r]);return n}var m2=require("react"),VO={"model-viewer":"@liveroom-tech/react-immersive/styles.css","simple-model-viewer":"@liveroom-tech/react-immersive/simple-model-viewer.css","binding-builder":"@liveroom-tech/react-immersive/binding-builder.css"},Fy=new Set,UO=1e3;function p2(e){return getComputedStyle(document.documentElement).getPropertyValue(`--ri-styles-${e}`).trim()!==""}function h2(e,t){(0,m2.useEffect)(()=>{if(process.env.NODE_ENV==="production"||Fy.has(e)||p2(e))return;let n,r=()=>{n=setTimeout(()=>{Fy.has(e)||p2(e)||(Fy.add(e),console.warn(`[react-immersive] ${t}'s styles aren't loaded, so it renders unstyled. Import them once, in your app's root:
|
|
3694
3745
|
|
|
3695
|
-
import "${
|
|
3746
|
+
import "${VO[e]}";`))},UO)};return document.readyState==="complete"?(r(),()=>clearTimeout(n)):(window.addEventListener("load",r,{once:!0}),()=>{window.removeEventListener("load",r),clearTimeout(n)})},[e,t])}var f2=require("react/jsx-runtime");function jy(e){return h2("binding-builder","BindingBuilder"),(0,f2.jsx)(Uy,{...u2(e,d2)})}0&&(module.exports={BindingBuilder});
|