@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/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";"use client";var L0=Object.create;var wa=Object.defineProperty;var O0=Object.getOwnPropertyDescriptor;var D0=Object.getOwnPropertyNames;var I0=Object.getPrototypeOf,B0=Object.prototype.hasOwnProperty;var k0=(e,t,n)=>t in e?wa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var N0=(e,t)=>()=>(e&&(t=e(e=0)),t);var gm=(e,t)=>{for(var n in t)wa(e,n,{get:t[n],enumerable:!0})},bm=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of D0(t))!B0.call(e,i)&&i!==n&&wa(e,i,{get:()=>t[i],enumerable:!(r=O0(t,i))||r.enumerable});return e};var ym=(e,t,n)=>(n=e!=null?L0(I0(e)):{},bm(t||!e||!e.__esModule?wa(n,"default",{value:e,enumerable:!0}):n,e)),V0=e=>bm(wa({},"__esModule",{value:!0}),e);var Lu=(e,t,n)=>k0(e,typeof t!="symbol"?t+"":t,n);var vm={};gm(vm,{bvhWorkerCode:()=>z0});var z0,xm=N0(()=>{"use strict";z0=`(()=>{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 V1=Object.create;var bs=Object.defineProperty;var z1=Object.getOwnPropertyDescriptor;var U1=Object.getOwnPropertyNames;var j1=Object.getPrototypeOf,F1=Object.prototype.hasOwnProperty;var G1=(e,t,n)=>t in e?bs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var H1=(e,t)=>()=>(e&&(t=e(e=0)),t);var ob=(e,t)=>{for(var n in t)bs(e,n,{get:t[n],enumerable:!0})},ab=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of U1(t))!F1.call(e,i)&&i!==n&&bs(e,i,{get:()=>t[i],enumerable:!(r=z1(t,i))||r.enumerable});return e};var lc=(e,t,n)=>(n=e!=null?V1(j1(e)):{},ab(t||!e||!e.__esModule?bs(n,"default",{value:e,enumerable:!0}):n,e)),W1=e=>ab(bs({},"__esModule",{value:!0}),e);var Zp=(e,t,n)=>G1(e,typeof t!="symbol"?t+"":t,n);var ub={};ob(ub,{bvhWorkerCode:()=>q1});var q1,db=H1(()=>{"use strict";q1=`(()=>{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 uM={};gm(uM,{ACTION_CATALOG:()=>Ta,DEFAULT_SCENE_CONFIG:()=>Ni,DEFAULT_SECTION_CONFIG:()=>ki,MATERIAL_BLENDING_MODES:()=>zv,MATERIAL_SIDES:()=>Vv,MODEL_VIEWER_PRESETS:()=>zu,ModelViewer:()=>Lp,applyIsolation:()=>hc,applyStyleRules:()=>pc,buildBindingsFromNodes:()=>Ky,colorScaleValue:()=>up,createDefaultBinding:()=>vc,defineObjectBindings:()=>Dv,findCatalogAction:()=>jm,inferType:()=>xp,isolatedBindingKeys:()=>ps,material:()=>Pc,patchBindings:()=>Qi,patchSceneConfig:()=>Ac,sceneLight:()=>Rc,selectBindingKeys:()=>dn,selectBindings:()=>dc,useObjectBinding:()=>Rv,useObjectBindingIds:()=>Ov,useObjectBindings:()=>Ec,useSceneConfig:()=>Lc,useShareableViewerState:()=>Nv,useViewer:()=>Ev,useViewerActions:()=>Dc,useViewerAnimations:()=>Ic,useViewerCamera:()=>cc,useViewerConnection:()=>Bc,useViewerEffects:()=>zc,useViewerHover:()=>jc,useViewerIsolation:()=>Fc,useViewerModel:()=>Hc,useViewerSelection:()=>Gc});module.exports=V0(uM);var C=require("react");var So=require("three"),ti=require("three-mesh-bvh"),_m=!1,wo=new WeakMap,Sa=new WeakMap;function U0(){_m||(So.Mesh.prototype.raycast=ti.acceleratedRaycast,_m=!0)}function j0(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;!r||!r.attributes?.position||t.add(r)}),[...t]}function wm(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 Ma=12e6;function Sm(e){return Ou(e)>Ma}function Ou(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;r?.attributes?.position&&t.add(r)}),wm([...t])}function F0(e,t){return new Promise((n,r)=>{let i=l=>{let d=l.data;if(!d||!d.error&&!d.serialized)return;if(e.removeEventListener("message",i),e.removeEventListener("error",o),d.error){r(new Error(String(d.error)));return}let{serialized:u}=d,m=ti.MeshBVH.deserialize(u,t,{setIndex:!1});u.index&&(t.index?t.index.array=u.index:t.setIndex(new So.BufferAttribute(u.index,1,!1))),t.boundingBox=m.getBoundingBox(new So.Box3),n(m)},o=l=>{e.removeEventListener("message",i),e.removeEventListener("error",o),r(new Error(l.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(),c=[s,...a?[a]:[]].map(l=>l.buffer);e.postMessage({index:a,position:s,options:{groups:[...t.groups]}},c)})}async function H0(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await Promise.resolve().then(()=>(xm(),vm)),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 G0(e,t){if(t)try{return await F0(t,e)}catch{}let n=ti.computeBoundsTree.call(e);return e.boundsTree=void 0,await new Promise(r=>setTimeout(r,0)),n}async function W0(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&&wo.delete(e)}),t.buildPromise}async function js(e,t){if(t?.aborted)return;let n=Sa.get(e);if(!n){if(n=j0(e),wm(n)>Ma){Sa.set(e,[]);return}Sa.set(e,n);for(let i of n){let o=wo.get(i)??{references:0};o.references+=1,wo.set(i,o)}}if(n.length===0)return;U0();let r=await H0();if(t?.aborted){r?.dispose();return}try{for(let i of n){if(t?.aborted)return;let o=wo.get(i);o&&await W0(i,o,()=>G0(i,r?.worker))}}finally{r?.dispose()}}function Ca(e){let t=Sa.get(e);if(t){Sa.delete(e);for(let n of t){let r=wo.get(n);r&&(r.references=Math.max(0,r.references-1),!(r.references>0)&&(r.ownedTree&&n.boundsTree===r.ownedTree&&(ti.disposeBoundsTree.call(n),n.boundsTree=void 0),r.ownedTree=void 0,r.buildPromise||wo.delete(n)))}}}var Tc=require("@react-three/drei"),$o=require("@react-three/fiber"),fv=require("qrcode.react"),Ze=require("three");var Mm=require("lucide-react");var ni=require("react/jsx-runtime");function Fs({title:e,message:t,tone:n="default"}){return(0,ni.jsxs)("div",{className:`ri-license-overlay${n==="error"?" ri-license-overlay--error":""}`,children:[(0,ni.jsxs)("div",{className:"ri-license-overlay__header",children:[n==="error"?(0,ni.jsx)(Mm.AlertTriangle,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):(0,ni.jsx)("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),(0,ni.jsx)("span",{className:"ri-license-overlay__title",children:e})]}),(0,ni.jsx)("p",{className:"ri-license-overlay__message",children:t})]})}var Cm=require("react"),Hs=class extends Cm.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 Mo=require("three");var Tm="riEditorGizmo";function Gs(e){return e.userData[Tm]=!0,e}function Ws(e){let t=[];return e.traverse(n=>{n.visible&&n.userData[Tm]&&(n.visible=!1,t.push(n))}),()=>{for(let n of t)n.visible=!0}}function Xs(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 Mo.Vector2),c=n.getPixelRatio(),l=i instanceof Mo.PerspectiveCamera?i.aspect:null,d=r.background,u=t.width??s.x,m=t.height??s.y,h=u!==s.x||m!==s.y,f=Ws(r);return a&&(r.background=null),h&&(n.setPixelRatio(1),n.setSize(u,m,!1),i instanceof Mo.PerspectiveCamera&&(i.aspect=u/m,i.updateProjectionMatrix())),o(),new Promise((b,v)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let y,S;try{y=n.domElement.toDataURL("image/png")}catch(_){S=_}f(),a&&(r.background=d),h&&(n.setPixelRatio(c),n.setSize(s.x,s.y,!1),i instanceof Mo.PerspectiveCamera&&l!==null&&(i.aspect=l,i.updateProjectionMatrix())),o(),S?v(S):b(y)})})})}var Du={webm:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"],mp4:["video/mp4;codecs=avc1.42E01E","video/mp4"]};function Oi(e="auto"){return typeof MediaRecorder>"u"?null:(e==="auto"?[...Du.webm,...Du.mp4]:Du[e]).find(n=>MediaRecorder.isTypeSupported(n))??null}function Pm(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=Oi(t.format);if(!o||typeof e.captureStream!="function"){let P=t.format&&t.format!=="auto"?` as ${t.format.toUpperCase()}`:"";throw new Error(`Video recording${P} is not supported in this browser.`)}let a,s,c=!1,l=!1,d,u,m,h=[],f,b,v=new Promise((P,B)=>{f=P,b=B}),y=()=>{clearTimeout(d),u!==void 0&&cancelAnimationFrame(u),m!==void 0&&cancelAnimationFrame(m),i?.removeEventListener("abort",_),e.removeEventListener("webglcontextlost",k),s&&(s.ondataavailable=null,s.onstop=null,s.onerror=null),a?.getTracks().forEach(P=>P.stop())},S=(P=new DOMException("Video export cancelled.","AbortError"))=>{if(!c){if(c=!0,y(),s&&s.state!=="inactive")try{s.stop()}catch{}b(P)}},_=()=>S(),k=()=>S(new Error("Video export stopped because the WebGL context was lost.")),T=()=>S(new Error("Video export timed out. Keep the viewer tab visible while recording."));return i?.addEventListener("abort",_,{once:!0}),e.addEventListener("webglcontextlost",k),d=setTimeout(T,3e4),{result:v,cancel:S,start(P){c||u!==void 0||(u=requestAnimationFrame(()=>{if(!c)try{a=e.captureStream(n);let B=new MediaRecorder(a,{mimeType:o,videoBitsPerSecond:r});s=B,B.ondataavailable=({data:D})=>{D.size>0&&h.push(D)},B.onerror=()=>S(new Error("The browser could not encode the video.")),B.onstop=()=>{if(c)return;c=!0,y();let D=new Blob(h,{type:B.mimeType||o});D.size===0?b(new Error("The browser produced an empty video.")):f(D)},B.start(1e3),clearTimeout(d),d=setTimeout(T,(P+30)*1e3)}catch(B){S(B)}}))},finish(){c||l||(l=!0,m=requestAnimationFrame(()=>{if(!c)try{if(!s)throw new Error("Video recording did not start.");s.stop()}catch(P){S(P)}}))}}}var Rn=require("react"),Bu=require("three");var gt=require("react"),qs=require("@react-three/fiber"),Yt=require("three");function Iu(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 X0=1.2;function Ys({controlsRef:e,sceneRef:t,config:n,playing:r,resetOnPlay:i=!1,onFinished:o,onUserInteract:a,onStop:s,playOnce:c=!1,startAtPath:l=!1,onStarted:d,onProgress:u}){let m=(0,qs.useThree)(x=>x.invalidate),h=(0,gt.useMemo)(()=>n.waypoints??[],[n.waypoints]),f=h.length>=2,b=n.loop??!0,v=Iu(n),y=(0,gt.useMemo)(()=>h.map(x=>[...x.position,...x.target,x.azimuthAngle??"",x.polarAngle??"",x.segmentDuration??""].join(",")).join(";"),[h]),S=(0,gt.useMemo)(()=>{let x=[];if(h.length<2)return x;let R=0;for(let X=0;X<h.length-1;X++)R+=h[X].segmentDuration??3.5,x.push(R);return b&&h.length>1&&(R+=h[h.length-1].segmentDuration??3.5,x.push(R)),x},[h,b]),_=(0,gt.useMemo)(()=>x=>{if(h.length<2||S.length===0)return x/v;let R=S[S.length-1],X=b?x%v:Math.min(x,v),Y=v>0?X/v*R:0;for(let K=0;K<S.length;K++)if(Y<=S[K]){let oe=K===0?0:S[K-1],ae=S[K]-oe,ne=ae>0?(Y-oe)/ae:0,Ie=b?h.length:h.length-1,me=K/Ie,tt=1/Ie;return me+ne*tt}return 1},[h.length,S,v,b]),k=(0,gt.useMemo)(()=>f?{position:new Yt.CatmullRomCurve3(h.map(x=>new Yt.Vector3(...x.position)),b,"catmullrom",.5),target:new Yt.CatmullRomCurve3(h.map(x=>new Yt.Vector3(...x.target)),b,"catmullrom",.5)}:null,[y,f,b]),T=(0,gt.useMemo)(()=>{if(!f||!h.every(R=>Number.isFinite(R.azimuthAngle)&&Number.isFinite(R.polarAngle)))return null;let x=h.map(R=>({azimuth:R.azimuthAngle,polar:R.polarAngle,distance:new Yt.Vector3(...R.position).distanceTo(new Yt.Vector3(...R.target))}));for(let R=1;R<x.length;R+=1){let X=x[R-1].azimuth,Y=x[R].azimuth;x[R].azimuth=Y+Math.round((X-Y)/(Math.PI*2))*Math.PI*2}return x},[y,f]),P=(0,gt.useRef)(0),B=(0,gt.useRef)(0),D=(0,gt.useRef)(new Yt.Vector3),O=(0,gt.useRef)(new Yt.Vector3),E=(0,gt.useRef)(!1),g=(0,gt.useRef)(!0),M=(0,gt.useRef)(0),A=(0,gt.useRef)(!1),N=(0,gt.useRef)(null),z=(0,gt.useMemo)(()=>new Yt.Vector3,[]),U=(0,gt.useMemo)(()=>new Yt.Vector3,[]),q=(0,gt.useMemo)(()=>new Yt.Spherical,[]);return(0,gt.useEffect)(()=>{P.current=0,M.current=0,B.current=0,A.current=!1},[y,b,v]),(0,gt.useEffect)(()=>{i&&(M.current=0,P.current=0,A.current=!1)},[i]),(0,gt.useEffect)(()=>{if(!r){E.current=!1,P.current>0&&!i?M.current=P.current:i&&(M.current=0),(P.current>0||A.current)&&s?.();return}P.current>=v&&!b&&(P.current=0,M.current=0,A.current=!1);let x=e.current;if(x&&(x.getPosition(D.current),x.getTarget(O.current)),i||A.current||M.current===0?(P.current=0,M.current=0,A.current=!1):M.current>0&&M.current<v?P.current=M.current:(P.current=0,M.current=0),B.current=0,!f){let R=t.current;if(R){let X=new Yt.Box3().setFromObject(R).getBoundingSphere(new Yt.Sphere);N.current={center:X.center.clone(),radius:X.radius>0?X.radius:1}}}E.current=!0,g.current=!0,m()},[r,f,e,t,m,v,b,y,i,s]),(0,gt.useEffect)(()=>{if(!r||!a)return;let x=e.current;if(!x)return;let R=()=>{A.current||a()};return x.addEventListener("controlstart",R),()=>x.removeEventListener("controlstart",R)},[r,e,a]),(0,qs.useFrame)((x,R)=>{if(!r||!E.current)return;let X=e.current;if(!X)return;let Y=g.current;g.current=!1,(!Y||!l)&&(P.current+=R,B.current+=R);let K=(!b||c)&&P.current>=v,oe=K&&b?0:_(P.current);if(oe=b?oe%1:Math.min(oe,1),k)if(k.target.getPoint(oe,U),T){let ne=b?T.length:T.length-1,Ie=Math.min(oe,1)*ne,me=Math.min(Math.floor(Ie),ne-1),tt=(me+1)%T.length,dt=oe>=1?1:Ie-me,pe=dt*dt*(3-2*dt),_e=T[me],je=T[tt],Bt=je.azimuth+Math.round((_e.azimuth-je.azimuth)/(Math.PI*2))*Math.PI*2,te=_e.azimuth+(Bt-_e.azimuth)*pe,an=_e.polar+(je.polar-_e.polar)*pe,nt=_e.distance+(je.distance-_e.distance)*pe;q.set(Math.max(nt,1e-6),Math.min(Math.max(an,1e-6),Math.PI-1e-6),te),z.setFromSpherical(q).add(U)}else k.position.getPoint(oe,z);else{let ne=N.current;if(!ne)return;let Ie=oe*Math.PI*2,me=ne.radius*2.2;z.set(ne.center.x+Math.cos(Ie)*me,ne.center.y+ne.radius*.6,ne.center.z+Math.sin(Ie)*me),U.copy(ne.center)}let ae=l?1:Math.min(B.current/X0,1);if(ae<1){let ne=ae*ae*(3-2*ae);z.lerpVectors(D.current,z,ne),U.lerpVectors(O.current,U,ne)}if(X.setLookAt(z.x,z.y,z.z,U.x,U.y,U.z,!1),Y&&d?.(),u?.(Math.min(P.current/v,1)),K){E.current=!1,A.current=!0,P.current=0,M.current=0,o?.();return}m()}),null}function Em(e){let t=(0,Rn.useRef)(e);t.current=e;let n=(0,Rn.useRef)(null),[r,i]=(0,Rn.useState)(null),[o,a]=(0,Rn.useState)(0),s=(0,Rn.useCallback)(()=>n.current?.cancel(),[]),c=(0,Rn.useCallback)(()=>n.current!==null,[]);(0,Rn.useEffect)(()=>s,[e.modelUrl,s]);let l=(0,Rn.useCallback)(async(u={})=>{let{rendererCaptureRef:m,controlsRef:h,cinematicConfig:f,ready:b,onCaptureStart:v}=t.current,y=m.current,S=h.current;if(!b||!y||!S)throw new Error("Viewer not ready for video export.");if(y.gl.xr.isPresenting)throw new Error("Exit the XR session before recording a video.");if(n.current)throw new Error("A video export is already in progress.");let _=u.mode??(f?"cinematic":"turntable");if(_==="cinematic"&&!f)throw new Error("Enable a cinematic camera path before recording it.");let k=_==="cinematic"?f:{loop:!0},T=u.duration??Iu(k);if(!Number.isFinite(T)||T<=0||T>300)throw new Error("Video duration must be greater than 0 and at most 300 seconds.");let P=Pm(y.gl.domElement,u);n.current=P;let B=S.getPosition(new Bu.Vector3),D=S.getTarget(new Bu.Vector3),O=S.enabled,E=Ws(y.scene);S.stop(),S.enabled=!1,a(0),v(),i({config:{...k,duration:T,autoPlay:!1},onStarted:()=>P.start(T),onFinished:P.finish});try{return await P.result}finally{E(),S.enabled=O,S.setLookAt(B.x,B.y,B.z,D.x,D.y,D.z,!1),y.invalidate(),n.current=null,i(null)}},[]),d=(0,Rn.useCallback)(u=>{let m=Math.floor(u*100);a(h=>h===m?h:m)},[]);return{captureVideo:l,cancelVideo:s,isRecording:c,recording:r,progress:o,onProgress:d}}var Fn=require("react");function Am(e){let[t,n]=(0,Fn.useState)(null),[r,i]=(0,Fn.useState)(!1),[o,a]=(0,Fn.useState)(!1),[s,c]=(0,Fn.useState)(!1),[l,d]=(0,Fn.useState)(null),u=(0,Fn.useRef)(!1);(0,Fn.useEffect)(()=>{if(!t||!e){i(!1),a(!1),d(null);return}let h=t.ownerDocument;i(h.fullscreenEnabled===!0&&typeof t.requestFullscreen=="function"&&typeof h.exitFullscreen=="function");let f=()=>{a(h.fullscreenElement===t),d(null)};return f(),h.addEventListener("fullscreenchange",f),()=>h.removeEventListener("fullscreenchange",f)},[t,e]);let m=(0,Fn.useCallback)(async()=>{if(!t||!e||!r||u.current)return;let h=t.ownerDocument,f=h.fullscreenElement===t;u.current=!0,c(!0),d(null);try{f?await h.exitFullscreen():await t.requestFullscreen(),a(h.fullscreenElement===t)}catch{d(f?"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,c(!1)}},[t,e,r]);return{rootRef:n,supported:r,active:o,pending:s,error:l,toggle:m}}var cn=require("react");function Rm(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 Lm(){let[e,t]=(0,cn.useState)(null),[n,r]=(0,cn.useState)(0),[i,o]=(0,cn.useState)("ready"),a=(0,cn.useRef)(null),s=(0,cn.useRef)(!1),c=(0,cn.useRef)(null),l=(0,cn.useRef)(null),d=(0,cn.useCallback)(h=>{l.current?.dispose(),l.current=null,c.current=h,t(h)},[]),u=(0,cn.useCallback)(()=>{s.current||(s.current=!0,a.current?.(),a.current=null,c.current&&(l.current=c.current),c.current=null,t(null),o("rebuilding"),r(h=>h+1))},[]),m=(0,cn.useCallback)(()=>{s.current=!1,o("lost")},[]);return(0,cn.useEffect)(()=>()=>{l.current?.dispose(),l.current=null},[]),(0,cn.useEffect)(()=>{if(!e)return;s.current=!1,o("ready");let h=Rm(e.domElement,{initiallyLost:e.getContext().isContextLost(),onLost:m,onRestored:u});return a.current=h,()=>{h(),a.current===h&&(a.current=null)}},[e,m,u]),{generation:n,status:i,reload:u,fail:m,onRendererCreated:d}}var Om=require("react"),Co=class extends Om.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 To=require("react");function Dm({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=c=>console.info("[react-immersive engagement]",c),warn:s=c=>console.warn("[react-immersive] onEngagement callback failed:",c)}){let c=r(),l=()=>{let g=n();return!!(g.onEngagement||g.debugEngagement)},d=g=>Math.max(0,Math.round(r()-g)),u=g=>{let{onEngagement:M,debugEngagement:A}=n();if(!M&&!A)return;let N={...g,sessionId:o,timestamp:i(),elapsedMs:d(c),modelUrl:e,tilesetUrl:t};A&&a(N);try{Promise.resolve(M?.(N)).catch(s)}catch(z){s(z)}},m=null,h=null,f=null,b=null,v=null,y=g=>{m=g},S=g=>{!l()||m===g.objectKey||(m=g.objectKey,u({type:"part-viewed",...g}))},_=(g,M)=>{let A=JSON.stringify([M,g]);!l()||g===M||A===h||(h=A,u({type:"variant-chosen",variant:g,previousVariant:M}))},k=g=>{g!==f&&(f=g,h=null)},T=()=>{!l()||b!==null||(b=r(),u({type:"ar-started"}))},P=(g="session-ended")=>{if(b===null)return;let M=d(b);b=null,u({type:"ar-ended",durationMs:M,reason:g})},B=(g="stopped")=>{if(!v)return;let{startedAt:M,annotationCount:A}=v;v=null,u({type:"tour-stopped",annotationCount:A,durationMs:d(M),reason:g})};return{setSelectedPart:y,viewPart:S,setMaterialVariant:k,chooseVariant:_,startAR:T,endAR:P,startTour:g=>{!l()||g<=0||(B("restarted"),v={startedAt:r(),annotationCount:g},u({type:"tour-started",annotationCount:g}))},stopTour:B,completeTour:()=>{if(!v)return;let{startedAt:g,annotationCount:M}=v;v=null,u({type:"tour-completed",annotationCount:M,durationMs:d(g)})},interrupt:()=>{P("interrupted"),B("interrupted")},requestARLaunch:g=>u({type:"ar-launch-requested",channel:g})}}function Im(e){let t=(0,To.useRef)(e);t.current=e;let n=!!(e.onEngagement||e.debugEngagement),r=(0,To.useMemo)(()=>Dm({modelUrl:e.modelUrl,tilesetUrl:e.tilesetUrl,getOptions:()=>t.current}),[e.modelUrl,e.tilesetUrl,n]);return(0,To.useEffect)(()=>()=>r.interrupt(),[r]),r}var ku=require("fflate");var q0;function Bm(e){q0=e}var Nu=1024*1024,HM=128*Nu;var GM=128*Nu,WM=256*Nu;var Y0=new Map;function Vu(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 km(e){return Y0.get(e)??{format:Vu(e)}}var $0={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ"},K0=/\.(glb|gltf|obj|fbx|usdz|zip)$/i;function Z0(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 Nm(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=Z0(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],c=$0[n??Vu(t)],l=K0.test(s);return{title:i,detail:l||n?`The file couldn't be read as ${c}. Check that it's a valid ${c} file${n?" and that modelFormat matches it":""}.`:`The file couldn't be read as ${c}. The URL has no file extension, so set modelFormat to the file's format.`,technical:o}}var Vm={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1,showMaterialVariants:!1},zu=Object.freeze({minimal:Object.freeze({...Vm}),showcase:Object.freeze({...Vm,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})}),Q0=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function zm(e){let t={};for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t}function J0({ui:e,tools:t,controls:n,perf:r,tiles:i,xr:o,decoders:a}){let s=e?.download,c=e?.mouseController,l=t?.measure,d=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:c===void 0?void 0:c!==!1,mouseControllerPosition:typeof c=="object"?c.position:void 0,mouseControllerOpacity:typeof c=="object"?c.opacity:void 0,showAnnotationNavigation:e?.annotationNavigation,showAnnotationOnHover:e?.annotationOnHover,highlightOnHover:e?.highlightOnHover,showMaterialVariants:e?.materialVariants,showMeasureTools:l===void 0?void 0:l!==!1,measurementUnit:typeof l=="object"?l.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:d===void 0?void 0:d!==!1,autoRotateSpeed:typeof d=="number"?d: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 Um(e){let t={...e};for(let n of Q0)delete t[n];return{...e.preset?zu[e.preset]:void 0,...zm(t),...zm(J0(e))}}var Ta=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."}]);function jm(e){return Ta.find(t=>t.id===e)}var Pa=Ta.filter(e=>e.handling==="viewer").map(e=>e.id),KM=new Set(["","New Action",...Ta.map(e=>e.label)]);var Fm=require("three");function Ot(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 Hm(e,t,n){let r=t[n]?.modelObjectId;return e.lighting.lights.filter(i=>{let o=i.attachment?.objectId;return o?Ot(t,o)===n||o===r:!1})}function Uu(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 Gm(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 Fm.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 Wm=require("react-colorful"),$t=require("react/jsx-runtime");function Xm({kind:e,color:t,brightness:n,onColorChange:r,onBrightnessChange:i,onClose:o}){return(0,$t.jsx)("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:a=>a.stopPropagation(),children:e==="change-light-color"?(0,$t.jsxs)($t.Fragment,{children:[(0,$t.jsx)("p",{className:"ri-popoverLabel",children:"Light color"}),(0,$t.jsx)(Wm.HexColorPicker,{color:t,onChange:r}),(0,$t.jsxs)("div",{className:"ri-inlineRow",children:[(0,$t.jsx)("span",{className:"ri-colorCode",children:t}),(0,$t.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]}):(0,$t.jsxs)($t.Fragment,{children:[(0,$t.jsx)("p",{className:"ri-popoverLabel",children:"Brightness"}),(0,$t.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,$t.jsxs)("div",{className:"ri-inlineRow",children:[(0,$t.jsxs)("span",{className:"ri-colorCode",children:[n,"%"]}),(0,$t.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]})})}var Ea=require("react");var ri=require("lucide-react"),Po=require("react");function qm(e){let t=!1,n,r=()=>{t||(e(),t||(n=setTimeout(r,70)))};return e(),n=setTimeout(r,300),()=>{t=!0,clearTimeout(n)}}var Ir=require("react/jsx-runtime");function Ym({onNudge:e}){let t=(0,Po.useRef)(e);t.current=e;let n=(0,Po.useRef)(null),r=(0,Po.useRef)(null),i=()=>{n.current?.(),n.current=null,r.current=null};return(0,Po.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,Ir.jsxs)("div",{className:"ri-decalPosition",children:[(0,Ir.jsxs)("div",{children:[(0,Ir.jsx)("div",{className:"ri-decalPosition__label",children:"Position"}),(0,Ir.jsx)("div",{className:"ri-decalPosition__hint",children:"Click to fine-tune \xB7 Hold to move"})]}),(0,Ir.jsx)("div",{className:"ri-decalPosition__pad",role:"group","aria-label":"Move decal in small steps",children:[["up",ri.ArrowUp],["left",ri.ArrowLeft],["right",ri.ArrowRight],["down",ri.ArrowDown]].map(([o,a])=>(0,Ir.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=qm(()=>t.current(o)))},onClick:s=>{s.detail===0&&t.current(o)},children:(0,Ir.jsx)(a,{size:16})},o))})]})}var Ne=require("react/jsx-runtime"),e_=e=>Math.round(e*180/Math.PI);function $m({kind:e,decals:t,activeId:n,error:r,moving:i,defaultSize:o,onSelect:a,onAddText:s,onAddImage:c,onChange:l,onMove:d,onNudge:u,onRemove:m,onClose:h}){let[f,b]=(0,Ea.useState)(""),[v,y]=(0,Ea.useState)("#ffffff"),S=(0,Ea.useRef)(null),_=t.find(T=>T.id===n)??null;return(0,Ne.jsxs)("div",{className:"ri-popover ri-popover--inline ri-decalControl",onPointerDown:T=>T.stopPropagation(),children:[e==="add-text"?(0,Ne.jsxs)(Ne.Fragment,{children:[(0,Ne.jsx)("p",{className:"ri-popoverLabel",children:"Text"}),(0,Ne.jsxs)("div",{className:"ri-decalControl__row",children:[(0,Ne.jsx)("input",{className:"ri-decalControl__input",value:f,placeholder:"Your text","aria-label":"Text to add",onChange:T=>b(T.target.value)}),(0,Ne.jsx)("input",{type:"color",className:"ri-decalControl__color",value:v,"aria-label":"Text colour",onChange:T=>y(T.target.value)})]}),(0,Ne.jsx)("button",{type:"button",className:"ri-uploadButton",disabled:!f.trim(),onClick:()=>{s(f.trim(),v)&&b("")},children:"Add text"})]}):(0,Ne.jsxs)(Ne.Fragment,{children:[(0,Ne.jsx)("p",{className:"ri-popoverLabel",children:"Image"}),(0,Ne.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:()=>S.current?.click(),children:"Choose image"}),(0,Ne.jsx)("input",{ref:S,type:"file",accept:"image/png,image/jpeg,image/webp,image/svg+xml",className:"ri-hiddenInput","aria-label":"Image to add",onChange:T=>{let P=T.target.files?.[0];T.target.value="",P&&c(P)}})]}),r?(0,Ne.jsx)("div",{className:"ri-decalControl__hint",role:"alert",children:r}):null,t.length>0?(0,Ne.jsx)("div",{className:"ri-decalControl__list",role:"group","aria-label":"Added",children:t.map((T,P)=>(0,Ne.jsx)("button",{type:"button",className:`ri-decalControl__chip ${T.id===n?"ri-decalControl__chip--active":""}`,"aria-pressed":T.id===n,onClick:()=>a(T.id),children:T.image?`Image ${P+1}`:T.text||`Text ${P+1}`},T.id))}):null,_?(0,Ne.jsxs)("div",{className:"ri-decalControl__editor",children:[(0,Ne.jsx)(Ym,{onNudge:T=>u(_.id,T)}),_.image?null:(0,Ne.jsxs)("div",{className:"ri-decalControl__row",children:[(0,Ne.jsx)("input",{className:"ri-decalControl__input",value:_.text??"","aria-label":"Text",onChange:T=>l(_.id,{text:T.target.value})}),(0,Ne.jsx)("input",{type:"color",className:"ri-decalControl__color",value:_.color??"#ffffff","aria-label":"Colour",onChange:T=>l(_.id,{color:T.target.value})})]}),(0,Ne.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,Ne.jsx)("span",{children:"Size"}),(0,Ne.jsx)("input",{type:"range",min:o/10,max:o*4,step:o/50,value:_.size,"aria-label":"Size",onChange:T=>l(_.id,{size:Number(T.target.value)})})]}),(0,Ne.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,Ne.jsx)("span",{children:"Turn"}),(0,Ne.jsx)("input",{type:"range",min:-180,max:180,step:1,value:e_(_.rotation??0),"aria-label":"Rotation",onChange:T=>l(_.id,{rotation:Number(T.target.value)*Math.PI/180})})]}),(0,Ne.jsxs)("div",{className:"ri-inlineRow",children:[(0,Ne.jsx)("button",{type:"button",className:"ri-secondaryButton","aria-pressed":i,title:"Drag the decal across the object's surface",onClick:()=>d(_.id),children:"Move"}),(0,Ne.jsx)("button",{type:"button",className:"ri-removeButton",onClick:()=>m(_.id),children:"Remove"})]})]}):null,(0,Ne.jsxs)("div",{className:"ri-inlineRow",children:[(0,Ne.jsx)("span",{className:"ri-colorCode",children:t.length===0?"None added yet":`${t.length} added`}),(0,Ne.jsx)("button",{type:"button",className:"ri-secondaryButton",onClick:h,children:"Done"})]})]})}var ol=require("react"),wf=require("@react-three/fiber"),dr=require("three");var ct=require("three"),t_=.5,Aa=4;function n_(e,t=0){let n=new ct.Vector3(...e);n.lengthSq()<1e-12&&n.set(0,0,1),n.normalize();let r=new ct.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 r_(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 Km(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],c=e[(a+1)%e.length],l=i(s);if(l&&o.push(s),l!==i(c)){let d=c.position[t]-s.position[t];o.push(r_(s,c,(n-s.position[t])/d))}}return o}function $s(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"),c=!!(a&&s),l=r.getIndex(),d=Math.max(t.size,1e-6),u=d/(n>0&&Number.isFinite(n)?n:1),m=Math.max(d,u)*t_,h={x:d/2,y:u/2,z:m/2},f=new ct.Matrix4().makeRotationFromEuler(n_(t.normal,t.rotation)).setPosition(...t.position),b=f.clone().invert(),v=(z,U)=>{let q=null;if(c){q=new Map;for(let x=0;x<Aa;x++){let R=s.getComponent(z,x);if(R<=0)continue;let X=a.getComponent(z,x);q.set(X,(q.get(X)??0)+R)}}return{position:U.clone(),normal:o?new ct.Vector3().fromBufferAttribute(o,z):new ct.Vector3,bones:q}},y=[],S=[],_=[],k=[],T=[],P=new ct.Vector3,B=new ct.Vector3,D=new ct.Vector3,O=z=>{if(_.push(.5+z.position.x/d,.5-z.position.y/u),P.copy(z.position).applyMatrix4(f),y.push(P.x,P.y,P.z),S.push(z.normal.x,z.normal.y,z.normal.z),!z.bones)return;let U=[...z.bones].sort((x,R)=>R[1]-x[1]).slice(0,Aa),q=U.reduce((x,[,R])=>x+R,0)||1;for(let x=0;x<Aa;x++)k.push(U[x]?.[0]??0),T.push((U[x]?.[1]??0)/q)},E=["x","y","z"],g=[new ct.Vector3,new ct.Vector3,new ct.Vector3],M=[0,0,0],A=(l?l.count:i.count)/3;for(let z=0;z<A;z++){for(let x=0;x<3;x++){let R=z*3+x;M[x]=l?l.getX(R):R,g[x].fromBufferAttribute(i,M[x]).applyMatrix4(b)}if(E.some(x=>g[0][x]>h[x]&&g[1][x]>h[x]&&g[2][x]>h[x]||g[0][x]<-h[x]&&g[1][x]<-h[x]&&g[2][x]<-h[x]))continue;let U=g.map((x,R)=>v(M[R],x));if(!o){B.copy(U[1].position).sub(U[0].position),D.copy(U[2].position).sub(U[0].position);let x=B.cross(D).transformDirection(f);for(let R of U)R.normal.copy(x)}let q=U;for(let x of E)if(q=Km(q,x,h[x],!0),q=Km(q,x,-h[x],!1),q.length<3)break;for(let x=1;x+1<q.length;x++)O(q[0]),O(q[x]),O(q[x+1])}if(y.length===0)return null;let N=new ct.BufferGeometry;return N.setAttribute("position",new ct.Float32BufferAttribute(y,3)),N.setAttribute("normal",new ct.Float32BufferAttribute(S,3)),N.setAttribute("uv",new ct.Float32BufferAttribute(_,2)),c&&(N.setAttribute("skinIndex",new ct.Uint16BufferAttribute(k,Aa)),N.setAttribute("skinWeight",new ct.Float32BufferAttribute(T,Aa))),N}function Qm(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 Zm=256,ju=24;function Jm(e){let t=`${e.fontWeight??"bold"} ${Zm-ju*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)+ju*2,8),4096),n.height=Zm,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-ju);let o=new ct.CanvasTexture(n);return o.flipY=!1,o.colorSpace=ct.SRGBColorSpace,{texture:o,aspect:n.width/n.height}}var Oa=require("react"),Ln=require("three");var nn=require("three");function ef(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function tf(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function rn(e){return!!(e&&"isMesh"in e&&e.isMesh)}var ii=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],Ks={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"},i_=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function lr(e){return i_.has(e)?nn.SRGBColorSpace:nn.NoColorSpace}function vt(e,t){return e?.[t]?.path}function nf(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 rf(e,t){let n=e?.[t]?.scale;if(!(!Number.isFinite(n)||!n))return n===1?void 0:n}function of(e,t){let n=e?.[t]?.rotation;if(!(!Number.isFinite(n)||!n))return n}function af(e){return e==="back"?nn.BackSide:e==="double"?nn.DoubleSide:nn.FrontSide}function sf(e){return e==="additive"?nn.AdditiveBlending:nn.NormalBlending}function Br(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 nn.Vector2(r.x,r.y)}return new nn.Vector2(t,n)}function Zs(e){return Number.isFinite(e)&&e>0?e:1}function lf(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function cf(e){return e?.loopMode??"repeat"}var uf=require("three");function cr(e){return e.isSkinnedMesh===!0}function Ao(e){let t=[];return e.traverse(n=>{cr(n)&&t.push(n)}),t}var Eo="reactImmersiveSkinFreeze";function df(e){return!!e.userData[Eo]}function Qs(e,t){let n=e.userData,r=new uf.Matrix4().copy(t).invert(),i=n[Eo];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,c,l,d,u){o.previousOnBeforeRender.call(this,a,s,c,l,d,u),e.bindMatrixInverse.copy(o.frozenInverse)},n[Eo]=o}function pf(e){return e.userData[Eo]?.frozenInverse??null}function Ro(e){let t=e.userData,n=t[Eo];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[Eo],e.updateMatrixWorld(!0))}var Mt=require("three"),Ra=new Map,kr={color:"#93c5fd",intensity:.07},Di=new Mt.Color(kr.color).multiplyScalar(kr.intensity),hf=new Mt.Color(kr.color),mf=.28,ff=new Map;function gf(e){return ff.get(e)}function o_(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 Mt.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 Js(e,t){return`${t}|${e}`}function La(e,t=Mt.NoColorSpace,n){let r=Js(e,t),i=Ra.get(r);if(i)return n&&!i.loaded&&i.pending.push(n),i.texture;let o=ff.get(e)??e,a={texture:new Mt.Texture,refCount:0,loaded:!1,pending:n?[n]:[],loadGeneration:0};return a.texture.flipY=!1,a.texture.colorSpace=t,Ra.set(r,a),o_(a,o),a.texture}function Lo(e,t=Mt.NoColorSpace,n){let r=La(e,t,n);return Ra.get(Js(e,t)).refCount+=1,r}function Nr(e,t=Mt.NoColorSpace){let n=Ra.get(Js(e,t));n&&(n.refCount-=1,n.refCount<=0&&(n.loadGeneration+=1,n.pending=[],n.texture.dispose(),Ra.delete(Js(e,t))))}function el(e,t,n,r,i,o=1,a=0){let s=e.offsetTextures??(e.offsetTextures={}),c=s[t],l=c;if(!l||l.sourcePath!==r||l.base!==n){c?.texture.dispose();let u=n.clone();u.wrapS=Mt.RepeatWrapping,u.wrapT=Mt.RepeatWrapping,u.center.set(.5,.5),u.needsUpdate=!0,l={texture:u,sourcePath:r,base:n},s[t]=l}let d=o>0?o:1;return l.texture.offset.set(i[0],i[1]),l.texture.repeat.set(1/d,1/d),l.texture.rotation=a,l.texture}function tl(e,t){let n=e.offsetTextures,r=n?.[t];r&&(r.texture.dispose(),delete n[t])}function bf(e){let t=e.offsetTextures;if(t){for(let n of Object.values(t))n.texture.dispose();delete e.offsetTextures}}var Fu=null;function nl(){if(Fu)return Fu;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 Mt.CanvasTexture(t);return i.colorSpace=Mt.SRGBColorSpace,Fu=i,i}var Hu=null;function yf(){if(Hu)return Hu;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 c=0;c<t;c+=1){let l=c*n,d=s*n,u=(Math.floor(c/2)+Math.floor(s/2))%4;o.fillStyle=r[u],o.fillRect(l,d,n,n),o.strokeStyle="rgba(0, 0, 0, 0.28)",o.lineWidth=2;for(let S=1;S<4;S+=1){let _=S*n/4;o.beginPath(),o.moveTo(l+_,d),o.lineTo(l+_,d+n),o.moveTo(l,d+_),o.lineTo(l+n,d+_),o.stroke()}o.strokeStyle="#09090b",o.lineWidth=7,o.strokeRect(l,d,n,n);let m=l+n*.23,h=d+n*.72,f=l+n*.72,b=d+n*.23;o.lineCap="round",o.lineJoin="round",o.beginPath(),o.moveTo(m,h),o.lineTo(f,b),o.lineTo(f-n*.2,b),o.moveTo(f,b),o.lineTo(f,b+n*.2),o.stroke();let v=s*t+c+1;o.font=`700 ${Math.round(n*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,o.fillStyle="#ffffff",o.strokeStyle="rgba(0, 0, 0, 0.85)",o.lineWidth=6;let y=String(v).padStart(2,"0");o.strokeText(y,l+n/2,d+n*.82),o.fillText(y,l+n/2,d+n*.82)}let a=new Mt.CanvasTexture(i);return a.colorSpace=Mt.SRGBColorSpace,a.wrapS=Mt.RepeatWrapping,a.wrapT=Mt.RepeatWrapping,a.flipY=!1,a.anisotropy=8,a.needsUpdate=!0,Hu=a,a}var Ii="riDecal",Xu="riDecalId";function Gu(){return new Ln.BufferGeometry().setAttribute("position",new Ln.Float32BufferAttribute([],3))}function vf(e){let t=e.image;return t?.width&&t.height?t.width/t.height:1}function Wu(e){e.disposed=!0,e.node.remove(e.mesh),e.mesh.geometry.dispose(),e.mesh.material.dispose(),e.imagePath&&Nr(e.imagePath,Ln.SRGBColorSpace),e.ownTexture?.dispose()}function a_(e,t,n,r){let i=new Ln.MeshStandardMaterial({transparent:!0,polygonOffset:!0,polygonOffsetFactor:-4,depthWrite:!1,metalness:0,roughness:.7}),o=cr(e)&&e.skeleton?e:null,a=o?new Ln.SkinnedMesh(Gu(),i):new Ln.Mesh(Gu(),i);if(o){let l=a;l.bind(o.skeleton,o.bindMatrix),l.frustumCulled=!1,l.onBeforeRender=()=>{let d=pf(o);d&&l.bindMatrixInverse.copy(d)}}a.userData[Ii]=!0,a.userData[Xu]=t.id,a.raycast=()=>{},a.castShadow=!1,a.receiveShadow=!0,a.renderOrder=1;let s={node:e,mesh:a,signature:n,disposed:!1},c=l=>{let d=$s(e,t,l);a.geometry.dispose(),a.geometry=d??Gu(),a.visible=d!==null};if(t.image){s.imagePath=t.image;let l=Lo(t.image,Ln.SRGBColorSpace,()=>{s.disposed||(c(vf(l)),i.needsUpdate=!0,r())});i.map=l,c(vf(l))}else{let{texture:l,aspect:d}=Jm(t);s.ownTexture=l,i.map=l,c(d)}return e.add(a),s}function xf({objectBindings:e,nodeMap:t,invalidate:n}){let r=(0,Oa.useRef)(new Map);(0,Oa.useEffect)(()=>{let i=r.current,o=new Set;for(let[a,s]of Object.entries(e)){if(!s.decals?.length)continue;let c=t[s.modelObjectId??a];if(rn(c))for(let l of s.decals){if(!l.image&&!l.text)continue;let d=`${a}
|
|
3665
|
-
${l.id}`,u=Qm(l),m=i.get(d);m&&(m.node!==c||m.signature!==u)&&(Wu(m),m=void 0),m||(m=a_(c,l,u,n),i.set(d,m)),m.mesh.material.opacity=(l.opacity??1)*(s.style?.material?.opacity??1),o.add(d)}}for(let[a,s]of i)o.has(a)||(Wu(s),i.delete(a));n()},[e,t,n]),(0,Oa.useEffect)(()=>{let i=r.current;return()=>{for(let o of i.values())Wu(o);i.clear()}},[])}var Hn=require("react"),ur=require("three"),s_=500,l_=10,c_=5;function rl(e,t,n){let r=(0,Hn.useRef)({resolve:e,onContextMenu:t,anchorOf:n});r.current={resolve:e,onContextMenu:t,anchorOf:n};let i=(0,Hn.useRef)(null),o=(0,Hn.useRef)(!1),a=(0,Hn.useRef)(null),s=(0,Hn.useCallback)(()=>{let u=i.current;u?.timer&&clearTimeout(u.timer),i.current=null,a.current?.(),a.current=null},[]),c=(0,Hn.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]),l=(0,Hn.useCallback)(u=>{let m=u.nativeEvent,h=m.pointerType!=="touch"&&m.button===2,f=m.pointerType==="touch"&&m.button===0;if(!r.current.onContextMenu||!h&&!f)return;let b=r.current.resolve(u.object);if(b===null)return;s();let v={target:b,kind:h?"right":"touch",pointerId:m.pointerId,pointer:Oo(u,r.current.anchorOf?.(u.object)),timer:f?setTimeout(c,s_):null};i.current=v;let y=h?c_:l_,S=P=>Math.hypot(P.clientX-v.pointer.clientX,P.clientY-v.pointer.clientY)>y,_=P=>{P.pointerId===v.pointerId&&S(P)&&s()},k=P=>{P.pointerId===v.pointerId&&(v.kind==="right"&&!S(P)?c():s())},T=P=>{P.pointerId!==v.pointerId&&s()};window.addEventListener("pointermove",_),window.addEventListener("pointerup",k),window.addEventListener("pointercancel",s),window.addEventListener("pointerdown",T),a.current=()=>{window.removeEventListener("pointermove",_),window.removeEventListener("pointerup",k),window.removeEventListener("pointercancel",s),window.removeEventListener("pointerdown",T)}},[s,c]);(0,Hn.useEffect)(()=>s,[s]);let d=(0,Hn.useCallback)(()=>o.current?(o.current=!1,!0):!1,[]);return{onPointerDown:l,consumeClick:d}}function u_(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,m,h]=[n.a,n.b,n.c].map(f=>t.getVertexPosition(f,new ur.Vector3));if(i=ur.Triangle.getBarycoord(t.worldToLocal(e.point.clone()),u,m,h,new ur.Vector3),!i)return null}let[o,a,s]=[n.a,n.b,n.c].map(u=>new ur.Vector3().fromBufferAttribute(r,u)),c=new ur.Vector3().addScaledVector(o,i.x).addScaledVector(a,i.y).addScaledVector(s,i.z),l=new ur.Triangle(o,a,s).getNormal(new ur.Vector3);return n.normal.clone().transformDirection(t.matrixWorld).dot(e.ray.direction)>0&&l.negate(),{position:[c.x,c.y,c.z],normal:[l.x,l.y,l.z]}}function Bi(e,t){if(t.updateWorldMatrix(!0,!1),e.object===t&&t.isSkinnedMesh===!0){let i=u_(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 ur.Matrix4().copy(t.matrixWorld).invert()),{position:[n.x,n.y,n.z],normal:[r.x,r.y,r.z]}}function Oo(e,t){let n=e.nativeEvent;return{clientX:n.clientX,clientY:n.clientY,pointerType:"pointerType"in n?n.pointerType:"mouse",...t?{surface:Bi(e,t)}:{}}}var il=require("three");function _f(e,t){let n=[];if(cr(e)){let r=e;r.computeBoundingSphere(),r.computeBoundingBox(),il.SkinnedMesh.prototype.raycast.call(r,t,n)}else il.Mesh.prototype.raycast.call(e,t,n);return n.sort((r,i)=>r.distance-i.distance)[0]}function Sf({target:e,nodes:t,controls:n}){let{camera:r,gl:i,invalidate:o}=(0,wf.useThree)(),a=(0,ol.useRef)(e);return a.current=e,(0,ol.useEffect)(()=>{let s=i.domElement,c=new dr.Raycaster,l=new dr.Vector2,d=s.style.cursor,u=s.style.touchAction;s.style.cursor="grab",s.style.touchAction="none";let m=0,h=null,f=null,b=(B,D=new dr.Vector2)=>{let O=s.getBoundingClientRect();l.set((B.clientX-O.left-D.x)/O.width*2-1,-((B.clientY-O.top-D.y)/O.height)*2+1),c.setFromCamera(l,r)},v=B=>{if(!f)return;b(B,f.offset),f.node.updateWorldMatrix(!0,!1);let D=c.intersectObject(f.node,!1)[0];if(!D)return;let O=Bi({...D,ray:c.ray},f.node),E=$s(f.node,{...f.decal,...O},f.aspect);E&&(f.mesh.geometry!==f.geometry&&f.mesh.geometry.dispose(),f.mesh.geometry=E,f.surface=O,o())},y=B=>{if(!f)return;cancelAnimationFrame(m),m=0,h=null;let D=f;f=null,D.mesh.geometry!==D.geometry&&(B&&D.surface?D.geometry.dispose():(D.mesh.geometry.dispose(),D.mesh.geometry=D.geometry)),D.controller&&(D.controller.enabled=D.controlsEnabled),s.hasPointerCapture(D.pointerId)&&s.releasePointerCapture(D.pointerId),s.style.cursor="grab",o();let O=()=>{window.removeEventListener("click",E,!0),window.removeEventListener("pointerdown",O,!0),clearTimeout(g)},E=M=>{M.target===s&&(M.preventDefault(),M.stopImmediatePropagation()),O()},g=setTimeout(O,300);window.addEventListener("click",E,!0),window.addEventListener("pointerdown",O,!0),B&&D.surface&&a.current.onCommit(D.surface)},S=B=>{if(B.button!==0||f)return;let D=a.current,O=t.current[D.objectId];if(!(O instanceof dr.Mesh)||!O.visible)return;let E=O.children.find(x=>x.userData[Ii]&&x.userData[Xu]===D.decal.id);if(!E?.visible)return;O.updateWorldMatrix(!0,!0),b(B);let g=_f(E,c),M=c.intersectObject(O,!1)[0];if(!g||!M||g.distance>M.distance+1e-4)return;let A=new dr.Vector3;if(cr(E)){let x=new dr.Vector3,R=E.geometry.getAttribute("position").count;if(!R)return;for(let X=0;X<R;X++)A.add(E.getVertexPosition(X,x));A.divideScalar(R).applyMatrix4(E.matrixWorld)}else A.fromArray(D.decal.position).applyMatrix4(O.matrixWorld);A.project(r);let N=s.getBoundingClientRect(),z=new dr.Vector2(B.clientX-(N.left+(A.x+1)/2*N.width),B.clientY-(N.top+(1-A.y)/2*N.height)),U=E.material.map?.image,q=n.current;f={pointerId:B.pointerId,node:O,mesh:E,geometry:E.geometry,decal:D.decal,surface:null,offset:z,aspect:U?.width&&U.height?U.width/U.height:1,controller:q,controlsEnabled:q?.enabled??!1},q&&(q.enabled=!1),B.preventDefault(),B.stopImmediatePropagation(),s.setPointerCapture(B.pointerId),s.style.cursor="grabbing"},_=B=>{!f||B.pointerId!==f.pointerId||(B.preventDefault(),B.stopImmediatePropagation(),h=B,m||(m=requestAnimationFrame(()=>{m=0,h&&v(h)})))},k=B=>{!f||B.pointerId!==f.pointerId||(B.preventDefault(),B.stopImmediatePropagation(),h&&v(h),y(!0))},T=()=>y(!1),P=B=>{B.key==="Escape"&&(y(!1),a.current.onCancel())};return s.addEventListener("pointerdown",S,!0),window.addEventListener("pointermove",_,{capture:!0,passive:!1}),window.addEventListener("pointerup",k,!0),window.addEventListener("pointercancel",T),window.addEventListener("blur",T),window.addEventListener("keydown",P),s.addEventListener("lostpointercapture",T),()=>{y(!1),s.style.cursor=d,s.style.touchAction=u,s.removeEventListener("pointerdown",S,!0),window.removeEventListener("pointermove",_,!0),window.removeEventListener("pointerup",k,!0),window.removeEventListener("pointercancel",T),window.removeEventListener("blur",T),window.removeEventListener("keydown",P),s.removeEventListener("lostpointercapture",T)}},[r,i,o,t,n,e.objectId,e.decal]),null}var Ut=require("three");function Mf(e,t){if(!(e instanceof Ut.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 Ut.Box3,i=new Ut.Vector3;if(cr(e)){let P=e;P.computeBoundingBox(),P.computeBoundingSphere();for(let B=0;B<n.count;B++)r.expandByPoint(e.getVertexPosition(B,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 Ut.Vector3),a=t.getWorldPosition(new Ut.Vector3),s=t.getWorldDirection(new Ut.Vector3),c=t.isOrthographicCamera,l=new Ut.Raycaster,d=P=>{if(c){let D=a.distanceTo(o)+r.getSize(i).length()+1;l.set(P.clone().addScaledVector(s,-D),s)}else l.set(a,P.clone().sub(a).normalize());let B=l.intersectObject(e,!1)[0];return B?Bi({...B,ray:l.ray},e):null},u=d(o);if(u)return u;let m=e.geometry.index,h=m?.count??n.count,f=new Ut.Vector3,b=new Ut.Vector3,v=new Ut.Vector3,y=new Ut.Vector3,S=new Ut.Vector3,_=new Ut.Vector3,k=null,T=1/0;for(let P=0;P+2<h;P+=3){if(e.getVertexPosition(m?m.getX(P):P,f).applyMatrix4(e.matrixWorld),e.getVertexPosition(m?m.getX(P+1):P+1,b).applyMatrix4(e.matrixWorld),e.getVertexPosition(m?m.getX(P+2):P+2,v).applyMatrix4(e.matrixWorld),y.copy(f).add(b).add(v).multiplyScalar(1/3),Ut.Triangle.getNormal(f,b,v,S),c?_.copy(s).negate():_.copy(a).sub(y),S.dot(_)<=0)continue;let B=y.distanceToSquared(o);B<T&&(T=B,k=y.clone())}return k?d(k):null}var jt=require("three");function Cf(e,t,n,r){if(!(e instanceof jt.Mesh)||!t)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let i=new jt.Vector3().fromArray(n.position);if(cr(e)){let l=e;l.computeBoundingBox(),l.computeBoundingSphere();let d=l.geometry.getAttribute("position");if(!d)return null;let u=l.geometry.index,m=u?.count??d.count,h=new jt.Triangle,f=new jt.Vector3,b=new jt.Vector3,v=1/0,y=null;for(let S=0;S+2<m;S+=3){let _=[0,1,2].map(T=>u?u.getX(S+T):S+T);h.a.fromBufferAttribute(d,_[0]),h.b.fromBufferAttribute(d,_[1]),h.c.fromBufferAttribute(d,_[2]),h.closestPointToPoint(i,f);let k=f.distanceToSquared(i);if(!(k>=v||!h.getBarycoord(f,b))&&(v=k,y=new jt.Vector3().addScaledVector(l.getVertexPosition(_[0],new jt.Vector3),b.x).addScaledVector(l.getVertexPosition(_[1],new jt.Vector3),b.y).addScaledVector(l.getVertexPosition(_[2],new jt.Vector3),b.z),v<1e-12))break}if(!y)return null;i.copy(y)}if(i.applyMatrix4(e.matrixWorld).project(t),!Number.isFinite(i.x)||i.z<-1||i.z>1)return null;let o=new jt.Vector2(r==="left"?-.0035:r==="right"?.0035:0,r==="down"?-.0035:r==="up"?.0035:0),a=new jt.Raycaster,s=n.size*.01,c=new jt.Vector3().fromArray(n.position);for(let l=1;l>=1/1024;l/=2){a.setFromCamera(new jt.Vector2(i.x,i.y).addScaledVector(o,l),t);let d=a.intersectObject(e,!1)[0];if(d){let u=Bi({...d,ray:a.ray},e);if(new jt.Vector3().fromArray(u.position).distanceTo(c)<=s)return u}}return null}var wn=require("react");var Tf=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 Pf({scene:e,objectBindings:t,matRefs:n,downloadFilename:r,onComplete:i}){import("three").then(({Group:o,Mesh:a})=>{let s=new o,c=new Map;for(let[u,m]of Object.entries(t))c.set(m.modelObjectId??u,u);let l=u=>{let m=u;for(;m;){let h=m.name||m.uuid,f=c.get(h)??h,b=t[f];if(b?b.visible===!1:m.visible===!1)return!1;m=m.parent}return!0};e.traverse(u=>{let m=u;if(!m.isMesh||!m.geometry||!l(m))return;let h=m.name||m.uuid,f=c.get(h)??h,b=n[f]??m.material;if(!b)return;let v=new a(m.geometry,b);v.name=h,v.applyMatrix4(m.matrixWorld),s.add(v)}),new Tf.GLTFExporter().parse(s,u=>{let m=u instanceof ArrayBuffer?new Blob([u],{type:"model/gltf-binary"}):new Blob([JSON.stringify(u)],{type:"model/gltf+json"}),h=u instanceof ArrayBuffer?".glb":".gltf";Da(m,`${r}${h}`),i()},u=>{console.error("GLTFExporter error:",u),i()},{binary:!0})})}var Df=require("fflate");var Ef=require("fflate");function Af(e,t=6){return new Promise((n,r)=>{(0,Ef.zip)(e,{level:t},(i,o)=>{i?r(i):n(o)})})}var Ia=2048,Rf=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function Lf(e){return e.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}function $u(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function If(e){return $u(e,"model")}function qu(e,t){return e.index?Math.round(e.index.getX(t)):t}function d_(e,t,n){let r=qu(e,n),i=qu(e,n+1),o=qu(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 Of(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function Yu(e,t,n,r){let i,o;r?(i=t.index,o=n.index):(i=Of(t),o=Of(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 p_(e,t,n){Yu(e,t[0],t[1],n),Yu(e,t[1],t[2],n),Yu(e,t[2],t[0],n)}function h_(e,t){return Array.isArray(e)?e[t]??null:e}function m_(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,c=s.getAttribute("uv");if(!c||c.itemSize<2||c.count<3)return;n+=1;let l=a.name||`Mesh ${n}`,d=s.index?.count??c.count,u=s.groups.length>0?s.groups:[{start:0,count:d,materialIndex:0}];for(let m of u){let h=m.materialIndex??0,f=h_(a.material,h);if(!f)continue;let b=t.get(f.uuid);b||(r+=1,b={name:f.name||`Material ${r}`,layers:new Map},t.set(f.uuid,b));let v=b.layers.get(a.uuid);v||(v={name:l,color:Rf[i%Rf.length],edges:new Map},i+=1,b.layers.set(a.uuid,v));let y=Math.max(0,m.start),S=Math.min(d,y+m.count);for(let _=y;_+2<S;_+=3){let k=d_(s,c,_);k&&p_(v.edges,k,!!s.index)}}}),[...t.values()].filter(o=>[...o.layers.values()].some(a=>a.edges.size>0))}function al(e){return(e*Ia).toFixed(2)}function f_(e){return`M${al(e.start.u)} ${al(1-e.start.v)}L${al(e.end.u)} ${al(1-e.end.v)}`}function g_(e){let t=Lf(e.name),n=[...e.layers.values()].filter(r=>r.edges.size>0).map((r,i)=>{let o=Lf(r.name),a=`${$u(r.name,"mesh")}-${i+1}`,s=[...r.edges.values()],c=s.filter(u=>u.count===1),d=(c.length>0?c:s).map(f_).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="${d}"/>`," </g>"].join(`
|
|
3664
|
+
`});var r2={};ob(r2,{ACTION_CATALOG:()=>Cs,CompareViewer:()=>pf,DEFAULT_MODEL_VIEWER_LABELS:()=>cc,DEFAULT_SCENE_CONFIG:()=>Oo,DEFAULT_SECTION_CONFIG:()=>Ro,MATERIAL_BLENDING_MODES:()=>NM,MATERIAL_SIDES:()=>kM,MODEL_VIEWER_PRESETS:()=>uh,ModelViewer:()=>Qo,applyIsolation:()=>id,applyStyleRules:()=>rd,buildBindingsFromNodes:()=>Zw,chooseMaterialVariant:()=>Qc,colorScaleValue:()=>Vm,createDefaultBinding:()=>ud,defineObjectBindings:()=>RM,findCatalogAction:()=>uy,inferType:()=>Ym,isolatedBindingKeys:()=>xl,material:()=>Pd,patchBindings:()=>Jo,patchSceneConfig:()=>Ed,sceneLight:()=>Rd,selectBindingKeys:()=>wn,selectBindings:()=>nd,useObjectBinding:()=>PM,useObjectBindingIds:()=>EM,useObjectBindings:()=>Ad,useSceneConfig:()=>Od,useShareableViewerState:()=>IM,useViewer:()=>CM,useViewerActions:()=>Dd,useViewerAnimations:()=>Id,useViewerCamera:()=>ed,useViewerConnection:()=>Bd,useViewerEffects:()=>zd,useViewerHover:()=>jd,useViewerIsolation:()=>Fd,useViewerModel:()=>Gd,useViewerModels:()=>BM,useViewerSelection:()=>Hd});module.exports=W1(r2);var ha=require("react");var cc={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 ys(e,t,n={}){return(e?.[t]??cc[t]).replace(/\{(\w+)\}/g,(i,o)=>Object.prototype.hasOwnProperty.call(n,o)?String(n[o]):i)}var X1=new Map(Object.entries(cc).map(([e,t])=>[t,e]));function sb(e,t){let n=X1.get(t);return n?ys(e,n):t}var cb=require("react/jsx-runtime"),lb=(0,ha.createContext)(void 0);function uc({labels:e,children:t}){return(0,cb.jsx)(lb.Provider,{value:e,children:t})}function ve(){let e=(0,ha.useContext)(lb);return(0,ha.useMemo)(()=>Object.assign((t,n)=>ys(e,t,n),{message:t=>sb(e,t)}),[e])}var D=require("react");var fa=require("three"),Vi=require("three-mesh-bvh"),pb=!1,ma=new WeakMap,vs=new WeakMap;function Y1(){pb||(fa.Mesh.prototype.raycast=Vi.acceleratedRaycast,pb=!0)}function $1(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;!r||!r.attributes?.position||t.add(r)}),[...t]}function hb(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 xs=12e6;function mb(e){return Qp(e)>xs}function Qp(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;r?.attributes?.position&&t.add(r)}),hb([...t])}function K1(e,t){return new Promise((n,r)=>{let i=c=>{let d=c.data;if(!d||!d.error&&!d.serialized)return;if(e.removeEventListener("message",i),e.removeEventListener("error",o),d.error){r(new Error(String(d.error)));return}let{serialized:p}=d,u=Vi.MeshBVH.deserialize(p,t,{setIndex:!1});p.index&&(t.index?t.index.array=p.index:t.setIndex(new fa.BufferAttribute(p.index,1,!1))),t.boundingBox=u.getBoundingBox(new fa.Box3),n(u)},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 Z1(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await Promise.resolve().then(()=>(db(),ub)),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 Q1(e,t){if(t)try{return await K1(t,e)}catch{}let n=Vi.computeBoundsTree.call(e);return e.boundsTree=void 0,await new Promise(r=>setTimeout(r,0)),n}async function J1(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&&ma.delete(e)}),t.buildPromise}async function dc(e,t){if(t?.aborted)return;let n=vs.get(e);if(!n){if(n=$1(e),hb(n)>xs){vs.set(e,[]);return}vs.set(e,n);for(let i of n){let o=ma.get(i)??{references:0};o.references+=1,ma.set(i,o)}}if(n.length===0)return;Y1();let r=await Z1();if(t?.aborted){r?.dispose();return}try{for(let i of n){if(t?.aborted)return;let o=ma.get(i);o&&await J1(i,o,()=>Q1(i,r?.worker))}}finally{r?.dispose()}}function ws(e){let t=vs.get(e);if(t){vs.delete(e);for(let n of t){let r=ma.get(n);r&&(r.references=Math.max(0,r.references-1),!(r.references>0)&&(r.ownedTree&&n.boundsTree===r.ownedTree&&(Vi.disposeBoundsTree.call(n),n.boundsTree=void 0),r.ownedTree=void 0,r.buildPromise||ma.delete(n)))}}}var Sd=require("@react-three/drei"),ti=require("three");var fb=require("lucide-react");var zi=require("react/jsx-runtime");function pc({title:e,message:t,tone:n="default"}){return(0,zi.jsxs)("div",{className:`ri-license-overlay${n==="error"?" ri-license-overlay--error":""}`,children:[(0,zi.jsxs)("div",{className:"ri-license-overlay__header",children:[n==="error"?(0,zi.jsx)(fb.AlertTriangle,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):(0,zi.jsx)("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),(0,zi.jsx)("span",{className:"ri-license-overlay__title",children:e})]}),(0,zi.jsx)("p",{className:"ri-license-overlay__message",children:t})]})}var gb=require("react"),Xr=class extends gb.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 Ui=require("react");function bb({enabled:e,activeUrl:t,models:n,errorsRef:r,activeFailed:i,activeError:o,onActiveError:a,onExtraError:s}){let[l,c]=(0,Ui.useState)(0),d=(0,Ui.useCallback)((u,h)=>{r.current.set(u,h),c(m=>m+1),u!==t&&s?.(u,h)},[t,r,s]),p=(0,Ui.useCallback)(u=>{r.current.delete(u)&&c(h=>h+1)},[r]);return(0,Ui.useEffect)(()=>{let u=new Set(e?n?.map(h=>h.url):[]);for(let h of r.current.keys())u.has(h)||r.current.delete(h)},[e,n,r]),(0,Ui.useEffect)(()=>{if(!e||!r.current.has(t))return;let u=r.current.get(t);i&&Object.is(o,u)||a(u)},[e,t,n,r,l,i,o,a]),{reportError:d,clearError:p}}var qr=require("react");function yb(e,t){let n=(0,qr.useRef)({}),r=(0,qr.useRef)({}),i=(0,qr.useRef)({}),o=(0,qr.useRef)(0),a=(0,qr.useCallback)(s=>{var l;return(l=i.current)[s]??(l[s]={current:{}})},[]);return(0,qr.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,qr.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 ji=require("react");var hc=require("react");function oi(e,t){let n=(0,hc.useRef)(t);(0,hc.useEffect)(()=>{let r=n.current;n.current=t,t.some((i,o)=>!Object.is(i,r[o]))&&e()},t)}var eC={};function vb({modelUrl:e,tilesetUrl:t,models:n,objectBindings:r="auto",onChange:i,initialBindings:o,initialModelEdits:a}){let s=!!(n?.length&&!t),l=r==="auto"&&!s,c=!l&&i!==void 0,d=r==="auto"?eC:r,[p,u]=(0,ji.useState)(()=>o??d),[h,m]=(0,ji.useState)(()=>{let x=new Map(a),_=s?n?.find(L=>L.url===e):void 0;return _&&o&&a===void 0&&x.set(e,{source:_.objectBindings,bindings:o}),x});oi(()=>{c||u(d)},[c,d]),(0,ji.useEffect)(()=>{let x=new Map(s?n?.map(_=>[_.url,_.objectBindings]):[]);m(_=>{let L=[..._].filter(([w,R])=>!c&&x.get(w)===R.source);return L.length===_.size?_:new Map(L)})},[s,n,c]);let b=(0,ji.useCallback)(x=>{let _=c?void 0:h.get(x.url);return _?.source===x.objectBindings?_.bindings:x.objectBindings},[c,h]),f=s?n?.find(x=>x.url===e):void 0,g=f?b(f):c?d:p,y=(0,ji.useCallback)(x=>{c||(f?m(_=>new Map(_).set(f.url,{source:f.objectBindings,bindings:x})):u(x)),i?.(x)},[c,f,i]);return{autoBindings:l,controlled:c,currentBindings:g,applyBindings:y,bindingsForModel:b,modelEdits:h}}var ga=require("three");var xb="riEditorGizmo";function mc(e){return e.userData[xb]=!0,e}function fc(e){let t=[];return e.traverse(n=>{n.visible&&n.userData[xb]&&(n.visible=!1,t.push(n))}),()=>{for(let n of t)n.visible=!0}}var gc=require("react");function Yr(e){return!!e?.isWebGPURenderer}var wb;function tC(){return wb??(wb=(async()=>{let e=typeof navigator>"u"?void 0:navigator.gpu;if(!e)return!1;try{return!!await e.requestAdapter()}catch{return!1}})()),wb}var _b=!1;function Mb(e){let[t,n]=(0,gc.useState)(null);return(0,gc.useEffect)(()=>{if(!e)return;let r=!1;return tC().then(i=>{r||(!i&&!_b&&(_b=!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 Sb(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 bc(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:n,scene:r,camera:i,invalidate:o}=e,a=Yr(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 ga.Vector2),c=n.getPixelRatio(),d=i instanceof ga.PerspectiveCamera?i.aspect:null,p=r.background,u=t.width??l.x,h=t.height??l.y,m=u!==l.x||h!==l.y,b=fc(r);s&&(r.background=null),m&&(n.setPixelRatio(1),n.setSize(u,h,!1),i instanceof ga.PerspectiveCamera&&(i.aspect=u/h,i.updateProjectionMatrix()));let f=()=>{b(),s&&(r.background=p),m&&(n.setPixelRatio(c),n.setSize(l.x,l.y,!1),i instanceof ga.PerspectiveCamera&&d!==null&&(i.aspect=d,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{f()}return o(),new Promise((g,y)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let x,_;try{x=n.domElement.toDataURL("image/png")}catch(L){_=L}f(),_?y(_):g(x)})})})}var Wn=require("react"),th=require("three");var Mt=require("react"),yc=require("@react-three/fiber"),on=require("three");function Jp(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 nC=1.2;function ba({controlsRef:e,sceneRef:t,config:n,playing:r,resetOnPlay:i=!1,onFinished:o,onUserInteract:a,onStop:s,playOnce:l=!1,startAtPath:c=!1,onStarted:d,onProgress:p}){let u=(0,yc.useThree)(O=>O.invalidate),h=(0,Mt.useMemo)(()=>n.waypoints??[],[n.waypoints]),m=h.length>=2,b=n.loop??!0,f=Jp(n),g=(0,Mt.useMemo)(()=>h.map(O=>[...O.position,...O.target,O.azimuthAngle??"",O.polarAngle??"",O.segmentDuration??""].join(",")).join(";"),[h]),y=(0,Mt.useMemo)(()=>{let O=[];if(h.length<2)return O;let T=0;for(let z=0;z<h.length-1;z++)T+=h[z].segmentDuration??3.5,O.push(T);return b&&h.length>1&&(T+=h[h.length-1].segmentDuration??3.5,O.push(T)),O},[h,b]),x=(0,Mt.useMemo)(()=>O=>{if(h.length<2||y.length===0)return O/f;let T=y[y.length-1],z=b?O%f:Math.min(O,f),q=f>0?z/f*T:0;for(let Z=0;Z<y.length;Z++)if(q<=y[Z]){let J=Z===0?0:y[Z-1],le=y[Z]-J,H=le>0?(q-J)/le:0,X=b?h.length:h.length-1,te=Z/X,he=1/X;return te+H*he}return 1},[h.length,y,f,b]),_=(0,Mt.useMemo)(()=>m?{position:new on.CatmullRomCurve3(h.map(O=>new on.Vector3(...O.position)),b,"catmullrom",.5),target:new on.CatmullRomCurve3(h.map(O=>new on.Vector3(...O.target)),b,"catmullrom",.5)}:null,[g,m,b]),L=(0,Mt.useMemo)(()=>{if(!m||!h.every(T=>Number.isFinite(T.azimuthAngle)&&Number.isFinite(T.polarAngle)))return null;let O=h.map(T=>({azimuth:T.azimuthAngle,polar:T.polarAngle,distance:new on.Vector3(...T.position).distanceTo(new on.Vector3(...T.target))}));for(let T=1;T<O.length;T+=1){let z=O[T-1].azimuth,q=O[T].azimuth;O[T].azimuth=q+Math.round((z-q)/(Math.PI*2))*Math.PI*2}return O},[g,m]),w=(0,Mt.useRef)(0),R=(0,Mt.useRef)(0),C=(0,Mt.useRef)(new on.Vector3),P=(0,Mt.useRef)(new on.Vector3),S=(0,Mt.useRef)(!1),v=(0,Mt.useRef)(!0),A=(0,Mt.useRef)(0),E=(0,Mt.useRef)(!1),B=(0,Mt.useRef)(null),N=(0,Mt.useMemo)(()=>new on.Vector3,[]),I=(0,Mt.useMemo)(()=>new on.Vector3,[]),F=(0,Mt.useMemo)(()=>new on.Spherical,[]);return(0,Mt.useEffect)(()=>{w.current=0,A.current=0,R.current=0,E.current=!1},[g,b,f]),(0,Mt.useEffect)(()=>{i&&(A.current=0,w.current=0,E.current=!1)},[i]),(0,Mt.useEffect)(()=>{if(!r){S.current=!1,w.current>0&&!i?A.current=w.current:i&&(A.current=0),(w.current>0||E.current)&&s?.();return}w.current>=f&&!b&&(w.current=0,A.current=0,E.current=!1);let O=e.current;if(O&&(O.getPosition(C.current),O.getTarget(P.current)),i||E.current||A.current===0?(w.current=0,A.current=0,E.current=!1):A.current>0&&A.current<f?w.current=A.current:(w.current=0,A.current=0),R.current=0,!m){let T=t.current;if(T){let z=new on.Box3().setFromObject(T).getBoundingSphere(new on.Sphere);B.current={center:z.center.clone(),radius:z.radius>0?z.radius:1}}}S.current=!0,v.current=!0,u()},[r,m,e,t,u,f,b,g,i,s]),(0,Mt.useEffect)(()=>{if(!r||!a)return;let O=e.current;if(!O)return;let T=()=>{E.current||a()};return O.addEventListener("controlstart",T),()=>O.removeEventListener("controlstart",T)},[r,e,a]),(0,yc.useFrame)((O,T)=>{if(!r||!S.current)return;let z=e.current;if(!z)return;let q=v.current;v.current=!1,(!q||!c)&&(w.current+=T,R.current+=T);let Z=(!b||l)&&w.current>=f,J=Z&&b?0:x(w.current);if(J=b?J%1:Math.min(J,1),_)if(_.target.getPoint(J,I),L){let H=b?L.length:L.length-1,X=Math.min(J,1)*H,te=Math.min(Math.floor(X),H-1),he=(te+1)%L.length,Ee=J>=1?1:X-te,$=Ee*Ee*(3-2*Ee),se=L[te],we=L[he],Xe=we.azimuth+Math.round((se.azimuth-we.azimuth)/(Math.PI*2))*Math.PI*2,ie=se.azimuth+(Xe-se.azimuth)*$,bt=se.polar+(we.polar-se.polar)*$,et=se.distance+(we.distance-se.distance)*$;F.set(Math.max(et,1e-6),Math.min(Math.max(bt,1e-6),Math.PI-1e-6),ie),N.setFromSpherical(F).add(I)}else _.position.getPoint(J,N);else{let H=B.current;if(!H)return;let X=J*Math.PI*2,te=H.radius*2.2;N.set(H.center.x+Math.cos(X)*te,H.center.y+H.radius*.6,H.center.z+Math.sin(X)*te),I.copy(H.center)}let le=c?1:Math.min(R.current/nC,1);if(le<1){let H=le*le*(3-2*le);N.lerpVectors(C.current,N,H),I.lerpVectors(P.current,I,H)}if(z.setLookAt(N.x,N.y,N.z,I.x,I.y,I.z,!1),q&&d?.(),p?.(Math.min(w.current/f,1)),Z){S.current=!1,E.current=!0,w.current=0,A.current=0,o?.();return}u()}),null}function Cb(){return typeof document<"u"&&typeof HTMLCanvasElement<"u"&&typeof HTMLCanvasElement.prototype.captureStream=="function"}function Tb(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,c=null,d,p=0,u=0,h=0,m=null,b=0,f=0,g=0,y=!1,x=!1,_,L,w,R,C,P,S=new Promise((T,z)=>{C=T,P=z}),v=()=>{clearTimeout(_),clearInterval(L),w!==void 0&&cancelAnimationFrame(w),R!==void 0&&cancelAnimationFrame(R),i?.removeEventListener("abort",E),e.removeEventListener("webglcontextlost",B),l&&(l.pause(),l.srcObject=null),s?.getTracks().forEach(T=>T.stop())},A=(T=new DOMException("Video export cancelled.","AbortError"))=>{y||(y=!0,v(),P(T))},E=()=>A(),B=()=>A(new Error("Video export stopped because the WebGL context was lost.")),N=()=>A(new Error("Video export timed out. Keep the viewer tab visible while recording."));i?.addEventListener("abort",E,{once:!0}),e.addEventListener("webglcontextlost",B),_=setTimeout(N,3e4);let I=(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(c=document.createElement("canvas").getContext("2d",{willReadFrequently:!0}),!c)throw new Error("Video recording as GIF is not supported in this browser.");d=a.GIFEncoder()}})().catch(T=>A(T)),F=T=>{if(!m||!d)return;let z=Math.max(2,Math.round((T-b)/10)-g);g+=z,d.writeFrame(m.index,p,u,{palette:m.palette,delay:z*10}),m=null},O=()=>{if(y||!a||!l||!c||!d||l.readyState<2||!l.videoWidth)return;let T=performance.now();if(!(h>0&&T-f<o/2)){p||(p=Math.min(r,l.videoWidth),u=Math.max(1,Math.round(p*l.videoHeight/l.videoWidth)),c.canvas.width=p,c.canvas.height=u);try{c.drawImage(l,0,0,p,u);let{data:z}=c.getImageData(0,0,p,u),q=a.quantize(z,256),Z=a.applyPalette(z,q);h===0&&(b=T),F(T),m={index:Z,palette:q},f=T,h+=1}catch(z){A(z)}}};return{result:S,cancel:A,start(T){y||w!==void 0||(w=requestAnimationFrame(()=>{I.then(()=>{y||(O(),L=setInterval(O,o),clearTimeout(_),_=setTimeout(N,(T+30)*1e3))})}))},finish(){y||x||(x=!0,R=requestAnimationFrame(()=>{I.then(()=>{if(y||(O(),y))return;if(!d||h===0){A(new Error("The browser produced an empty video."));return}F(f+o),d.finish();let T=new Blob([d.bytes()],{type:"image/gif"});y=!0,v(),C(T)})}))}}}var eh={webm:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"],mp4:["video/mp4;codecs=avc1.42E01E","video/mp4"]};function ai(e="auto"){return e==="gif"?Cb()?"image/gif":null:typeof MediaRecorder>"u"?null:(e==="auto"?[...eh.webm,...eh.mp4]:eh[e]).find(n=>MediaRecorder.isTypeSupported(n))??null}function Pb(e,t={}){if(t.format==="gif")return Tb(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=ai(t.format);if(!o||typeof e.captureStream!="function"){let w=t.format&&t.format!=="auto"?` as ${t.format.toUpperCase()}`:"";throw new Error(`Video recording${w} is not supported in this browser.`)}let a,s,l=!1,c=!1,d,p,u,h=[],m,b,f=new Promise((w,R)=>{m=w,b=R}),g=()=>{clearTimeout(d),p!==void 0&&cancelAnimationFrame(p),u!==void 0&&cancelAnimationFrame(u),i?.removeEventListener("abort",x),e.removeEventListener("webglcontextlost",_),s&&(s.ondataavailable=null,s.onstop=null,s.onerror=null),a?.getTracks().forEach(w=>w.stop())},y=(w=new DOMException("Video export cancelled.","AbortError"))=>{if(!l){if(l=!0,g(),s&&s.state!=="inactive")try{s.stop()}catch{}b(w)}},x=()=>y(),_=()=>y(new Error("Video export stopped because the WebGL context was lost.")),L=()=>y(new Error("Video export timed out. Keep the viewer tab visible while recording."));return i?.addEventListener("abort",x,{once:!0}),e.addEventListener("webglcontextlost",_),d=setTimeout(L,3e4),{result:f,cancel:y,start(w){l||p!==void 0||(p=requestAnimationFrame(()=>{if(!l)try{a=e.captureStream(n);let R=new MediaRecorder(a,{mimeType:o,videoBitsPerSecond:r});s=R,R.ondataavailable=({data:C})=>{C.size>0&&h.push(C)},R.onerror=()=>y(new Error("The browser could not encode the video.")),R.onstop=()=>{if(l)return;l=!0,g();let C=new Blob(h,{type:R.mimeType||o});C.size===0?b(new Error("The browser produced an empty video.")):m(C)},R.start(1e3),clearTimeout(d),d=setTimeout(L,(w+30)*1e3)}catch(R){y(R)}}))},finish(){l||c||(c=!0,u=requestAnimationFrame(()=>{if(!l)try{if(!s)throw new Error("Video recording did not start.");s.stop()}catch(w){y(w)}}))}}}function Ab(e){let t=(0,Wn.useRef)(e);t.current=e;let n=(0,Wn.useRef)(null),[r,i]=(0,Wn.useState)(null),[o,a]=(0,Wn.useState)(0),s=(0,Wn.useCallback)(()=>n.current?.cancel(),[]),l=(0,Wn.useCallback)(()=>n.current!==null,[]);(0,Wn.useEffect)(()=>s,[e.modelUrl,s]);let c=(0,Wn.useCallback)(async(p={})=>{let{rendererCaptureRef:u,controlsRef:h,cinematicConfig:m,ready:b,onCaptureStart:f}=t.current,g=u.current,y=h.current;if(!b||!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=p.mode??(m?"cinematic":"turntable");if(x==="cinematic"&&!m)throw new Error("Enable a cinematic camera path before recording it.");let _=x==="cinematic"?m:{loop:!0},L=p.duration??(x==="turntable"&&p.format==="gif"?8:Jp(_));if(!Number.isFinite(L)||L<=0||L>300)throw new Error("Video duration must be greater than 0 and at most 300 seconds.");let w=Pb(g.gl.domElement,p);n.current=w;let R=y.getPosition(new th.Vector3),C=y.getTarget(new th.Vector3),P=y.enabled,S=fc(g.scene);y.stop(),y.enabled=!1,a(0),f(),i({config:{..._,duration:L,autoPlay:!1},onStarted:()=>w.start(L),onFinished:w.finish});try{return await w.result}finally{S(),y.enabled=P,y.setLookAt(R.x,R.y,R.z,C.x,C.y,C.z,!1),g.invalidate(),n.current=null,i(null)}},[]),d=(0,Wn.useCallback)(p=>{let u=Math.floor(p*100);a(h=>h===u?h:u)},[]);return{captureVideo:c,cancelVideo:s,isRecording:l,recording:r,progress:o,onProgress:d}}var tr=require("react");function Eb(e){let[t,n]=(0,tr.useState)(null),[r,i]=(0,tr.useState)(!1),[o,a]=(0,tr.useState)(!1),[s,l]=(0,tr.useState)(!1),[c,d]=(0,tr.useState)(null),p=(0,tr.useRef)(!1);(0,tr.useEffect)(()=>{if(!t||!e){i(!1),a(!1),d(null);return}let h=t.ownerDocument;i(h.fullscreenEnabled===!0&&typeof t.requestFullscreen=="function"&&typeof h.exitFullscreen=="function");let m=()=>{a(h.fullscreenElement===t),d(null)};return m(),h.addEventListener("fullscreenchange",m),()=>h.removeEventListener("fullscreenchange",m)},[t,e]);let u=(0,tr.useCallback)(async()=>{if(!t||!e||!r||p.current)return;let h=t.ownerDocument,m=h.fullscreenElement===t;p.current=!0,l(!0),d(null);try{m?await h.exitFullscreen():await t.requestFullscreen(),a(h.fullscreenElement===t)}catch{d(m?"Could not exit fullscreen. Press Escape to exit.":"Could not enter fullscreen. Check your browser or iframe fullscreen permissions and try again.")}finally{p.current=!1,l(!1)}},[t,e,r]);return{rootRef:n,supported:r,active:o,pending:s,error:c,toggle:u}}var an=require("react");function Rb(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 vc=require("@react-three/fiber"),nh=require("react");function Ob({captureRef:e}){let{gl:t,scene:n,camera:r,invalidate:i,get:o}=(0,vc.useThree)();return(0,nh.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 Lb(){let e=(0,vc.useThree)(n=>n.frameloop),t=(0,vc.useThree)(n=>n.invalidate);return(0,nh.useEffect)(()=>{e!=="never"&&t()},[e,t]),null}function Db(e){e.dispose(),"forceContextLoss"in e&&!Yr(e)&&(e.forceContextLoss(),e.forceContextLoss=()=>{})}function Ib(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 Bb(e){let t=(0,an.useRef)(e);t.current=e;let[n,r]=(0,an.useState)(null),[i,o]=(0,an.useState)(0),[a,s]=(0,an.useState)("ready"),l=(0,an.useRef)(null),c=(0,an.useRef)(!1),d=(0,an.useRef)(null),p=(0,an.useRef)(null),u=(0,an.useCallback)(f=>{p.current?.dispose(),p.current=null,d.current=f,r(f)},[]),h=(0,an.useCallback)(()=>{c.current||(c.current=!0,t.current?.(),l.current?.(),l.current=null,d.current&&(p.current=d.current),d.current=null,r(null),s("rebuilding"),o(f=>f+1))},[]),m=(0,an.useCallback)(()=>{l.current?.(),l.current=null;let f=d.current;d.current=null,r(null),f&&Db(f)},[]),b=(0,an.useCallback)(()=>{c.current=!1,s("lost")},[]);return(0,an.useEffect)(()=>()=>{p.current?.dispose(),p.current=null},[]),(0,an.useEffect)(()=>{if(!n)return;if(c.current=!1,s("ready"),Yr(n)){let g=n,y=g.onDeviceLost;return g.onDeviceLost=x=>{console.warn("[react-immersive] The WebGPU device was lost.",x),b()},()=>{g.onDeviceLost=y}}let f=Rb(n.domElement,{initiallyLost:n.getContext().isContextLost(),onLost:b,onRestored:h});return l.current=f,()=>{f(),l.current===f&&(l.current=null)}},[n,b,h]),{generation:i,status:a,reload:h,fail:b,release:m,onRendererCreated:u}}var wc=require("react");var _s=require("react"),rC="200px",kb=new Map;function Nb(e,t,n){let r=kb.get(t);if(!r){let a=new Map;r={observer:new IntersectionObserver(l=>{for(let c of l)a.get(c.target)?.(c.isIntersecting)},{rootMargin:t}),watchers:a},kb.set(t,r)}let{observer:i,watchers:o}=r;return o.set(e,n),i.observe(e),()=>{o.delete(e),i.unobserve(e)}}function Vb(e){let t=typeof IntersectionObserver<"u",[n,r]=(0,_s.useState)(!t),[i,o]=(0,_s.useState)(!t);return(0,_s.useEffect)(()=>{let a=e.current;if(!a||!t)return;let s=Nb(a,rC,r),l=Nb(a,"0px",o);return()=>{s(),l()}},[e,t]),{near:n,visible:i}}var Fi=require("react");function rh(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function ih(){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 zb(){return rh()||ih()}function iC(){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=rh();return t||o||r&&n||r&&i}function Ms(){if(!iC())return!1;if(rh())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function Ub(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return Ms()}}function oC(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 aC=12,sC=6,xc=new Map,lC=1,oh=!1,jb;function Fb(){oh||(oh=!0,queueMicrotask(()=>{oh=!1,jb??(jb=Ms()?sC:aC);let e=oC([...xc.values()],jb);for(let t of xc.values()){let n=e.has(t.id);n!==t.live&&(t.live=n,t.onLiveChange(n))}}))}function Gb({managed:e,wanted:t,visible:n,onPark:r}){let[i,o]=(0,Fi.useState)(!1),a=(0,Fi.useRef)(r);a.current=r;let s=(0,Fi.useRef)(null);return(0,Fi.useEffect)(()=>{if(!e)return;let l={id:lC++,wanted:!1,visible:!1,live:!1,since:performance.now(),onLiveChange:c=>{c||a.current?.(),o(c)}};return xc.set(l.id,l),s.current=l,()=>{xc.delete(l.id),s.current=null,o(!1),Fb()}},[e]),(0,Fi.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,Fb())},[e,t,n]),e?i:t}function Hb({loading:e="lazy",reveal:t="auto",rootRef:n,onPark:r}){let{near:i,visible:o}=Vb(n),[a,s]=(0,wc.useState)(t==="auto");return(0,wc.useEffect)(()=>{t==="auto"&&s(!0)},[t]),{live:Gb({managed:e==="lazy",wanted:a&&(e==="eager"||i),visible:o,onPark:r}),visible:o,awaitingReveal:!a,reveal:()=>s(!0)}}var Wb=require("lucide-react");var To=require("react/jsx-runtime");function _c({src:e,hidden:t=!1}){return e?(0,To.jsx)("img",{className:`ri-poster${t?" ri-poster--hidden":""}`,src:e,alt:"","aria-hidden":"true",draggable:!1,decoding:"async"}):null}function Mc({className:e,background:t,poster:n,onReveal:r}){let i=ve();return(0,To.jsxs)("div",{className:`${e} ri-viewerPlaceholder`,style:{background:t},children:[(0,To.jsx)(_c,{src:n}),r?(0,To.jsxs)("button",{type:"button",className:"ri-revealButton",onClick:r,children:[(0,To.jsx)(Wb.Box,{size:16,"aria-hidden":"true"}),i("viewIn3D")]}):null]})}function Ss(e,t){if(e)return e;let n=t?.background;return n?.enabled&&n.type==="color"?n.color:"#1c1c1d"}function Sc(e,t){return t||e}async function Xb(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 qb=require("react"),ya=class extends qb.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 va=require("react");function Yb({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 v=n();return!!(v.onEngagement||v.debugEngagement)},d=v=>Math.max(0,Math.round(r()-v)),p=v=>{let{onEngagement:A,debugEngagement:E}=n();if(!A&&!E)return;let B={...v,sessionId:o,timestamp:i(),elapsedMs:d(l),modelUrl:e,tilesetUrl:t};E&&a(B);try{Promise.resolve(A?.(B)).catch(s)}catch(N){s(N)}},u=null,h=null,m="[]",b=null,f=null,g=v=>{u=v},y=v=>{!c()||u===v.objectKey||(u=v.objectKey,p({type:"part-viewed",...v}))},x=(v,A,E=null)=>{let B=JSON.stringify([E,A,v]);!c()||v===A||B===h||(h=B,p({type:"variant-chosen",variant:v,previousVariant:A,group:E}))},_=v=>{let A=JSON.stringify(v);A!==m&&(m=A,h=null)},L=()=>{!c()||b!==null||(b=r(),p({type:"ar-started"}))},w=(v="session-ended")=>{if(b===null)return;let A=d(b);b=null,p({type:"ar-ended",durationMs:A,reason:v})},R=(v="stopped")=>{if(!f)return;let{startedAt:A,annotationCount:E}=f;f=null,p({type:"tour-stopped",annotationCount:E,durationMs:d(A),reason:v})};return{setSelectedPart:g,viewPart:y,setActiveVariants:_,chooseVariant:x,startAR:L,endAR:w,startTour:v=>{!c()||v<=0||(R("restarted"),f={startedAt:r(),annotationCount:v},p({type:"tour-started",annotationCount:v}))},stopTour:R,completeTour:()=>{if(!f)return;let{startedAt:v,annotationCount:A}=f;f=null,p({type:"tour-completed",annotationCount:A,durationMs:d(v)})},interrupt:()=>{w("interrupted"),R("interrupted")},requestARLaunch:v=>p({type:"ar-launch-requested",channel:v})}}function $b(e){let t=(0,va.useRef)(e);t.current=e;let n=!!(e.onEngagement||e.debugEngagement),r=(0,va.useMemo)(()=>Yb({modelUrl:e.modelUrl,tilesetUrl:e.tilesetUrl,getOptions:()=>t.current}),[e.modelUrl,e.tilesetUrl,n]);return(0,va.useEffect)(()=>()=>r.interrupt(),[r]),r}var ah=require("fflate");var cC;function Kb(e){cC=e}var sh=1024*1024,xR=128*sh;var wR=128*sh,_R=256*sh;var uC=new Map;function lh(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 Zb(e){return uC.get(e)??{format:lh(e)}}var Xn=require("three"),Jb=require("three/examples/jsm/loaders/STLLoader.js"),ey=require("three/examples/jsm/loaders/PLYLoader.js"),dC=12106948,ty="This PLY file is a point cloud: it has vertices but no faces.",Cc=class extends Error{constructor(){super(ty),this.name="PointCloudError"}};function ny(e){return e instanceof Cc||e instanceof Error&&e.message.includes(ty)}function ry(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 ch(e){return new Xn.MeshStandardMaterial({color:e?16777215:dC,vertexColors:e,metalness:0,roughness:.6})}function Qb(e,t,n){let r=e.itemSize;return new Xn.Float32BufferAttribute(e.array.slice(t*r,(t+n)*r),r)}function iy(e,t){let n=new Jb.STLLoader().parse(e),r=!!n.hasColors,i=new Xn.Group;if(n.groups.length>1){let s=n.userData.groupNames??[],l=n.getAttribute("position"),c=n.getAttribute("normal");return n.groups.forEach((d,p)=>{let u=new Xn.BufferGeometry;u.setAttribute("position",Qb(l,d.start,d.count)),c&&u.setAttribute("normal",Qb(c,d.start,d.count));let h=new Xn.Mesh(u,ch(!1));h.name=s[p]?.trim()||`${t} ${p+1}`,i.add(h)}),n.dispose(),i}n.clearGroups();let o=ch(r);r&&n.alpha!==void 0&&n.alpha<1&&(o.opacity=n.alpha,o.transparent=!0);let a=new Xn.Mesh(n,o);return a.name=t,i.add(a),i}function pC(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 oy(e,t){if(!pC(e))throw new Cc;let n=new ey.PLYLoader().parse(e);n.getAttribute("normal")||n.computeVertexNormals();let r=new Xn.Mesh(n,ch(!!n.getAttribute("color")));r.name=t;let i=new Xn.Group;return i.add(r),i}var hC={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ",stl:"STL",ply:"PLY"},mC=/\.(glb|gltf|obj|fbx|usdz|stl|ply|zip)$/i;function fC(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 ay(e,t,n,r){let i=e instanceof Error?e.message:e==null?"":String(e),o=(u,h)=>ys(r,u,h),a=o("loadErrorTitle"),s=i||null;if(ny(e))return{title:a,detail:o("loadErrorPointCloud"),technical:s};let l=fC(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 c=t.split(/[?#]/,1)[0],d=hC[n??lh(t)],p=mC.test(c);return{title:a,detail:p||n?o(n?"loadErrorInvalidExplicitFormat":"loadErrorInvalidFile",{format:d}):o("loadErrorMissingFormat",{format:d}),technical:s}}var sy={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1,showMaterialVariants:!1},uh=Object.freeze({minimal:Object.freeze({...sy}),showcase:Object.freeze({...sy,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})}),gC=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function ly(e){let t={};for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t}function bC({ui:e,tools:t,controls:n,perf:r,tiles:i,xr:o,decoders:a}){let s=e?.download,l=e?.mouseController,c=t?.measure,d=n?.autoRotate;return{showObjectBindingDataPanel:e?.objectPanel,showSceneObjectsPanel:e?.sceneObjects,showDownloadButton:s===void 0?void 0:s!==!1,downloadFilename:typeof s=="string"?s:void 0,showResetButton:e?.reset,showFullscreenButton:e?.fullscreen,showLoadingOverlay:e?.loadingOverlay,showViewGizmo:e?.viewGizmo,showMouseController:l===void 0?void 0:l!==!1,mouseControllerPosition:typeof l=="object"?l.position:void 0,mouseControllerOpacity:typeof l=="object"?l.opacity:void 0,showAnnotationNavigation:e?.annotationNavigation,showAnnotationOnHover:e?.annotationOnHover,showAnnotationFilters:e?.annotationFilters,highlightOnHover:e?.highlightOnHover,showMaterialVariants:e?.materialVariants,showObjectNavigator:e?.objectNavigator,showMeasureTools:c===void 0?void 0:c!==!1,measurementUnit:typeof c=="object"?c.unit:void 0,showUvCheckerButton:t?.uvChecker,showExplodeControls:t?.explode,showSectionTools:t?.section,showIsolateControls:t?.isolate,texturePositioning:t?.texturePositioning,enableCameraControls:n?.enabled,enableKeyboardNavigation:n?.keyboard,reducedMotion:n?.reducedMotion,disableZoom:n?.zoom===void 0?void 0:!n.zoom,zoomOnSelected:n?.zoomOnSelect,autoRotate:d===void 0?void 0:d!==!1,autoRotateSpeed:typeof d=="number"?d: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 cy(e){let t={...e};for(let n of gC)delete t[n];return{...e.preset?uh[e.preset]:void 0,...ly(t),...ly(bC(e))}}var Cs=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."}]);function uy(e){return Cs.find(t=>t.id===e)}var Ts=Cs.filter(e=>e.handling==="viewer").map(e=>e.id),RR=new Set(["","New Action",...Cs.map(e=>e.label)]);var dy=require("three");function Xt(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 py(e,t,n){let r=t[n]?.modelObjectId;return e.lighting.lights.filter(i=>{let o=i.attachment?.objectId;return o?Xt(t,o)===n||o===r:!1})}function dh(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 hy(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 dy.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 my=require("react-colorful"),sn=require("react/jsx-runtime");function fy({kind:e,color:t,brightness:n,onColorChange:r,onBrightnessChange:i,onClose:o}){return(0,sn.jsx)("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:a=>a.stopPropagation(),children:e==="change-light-color"?(0,sn.jsxs)(sn.Fragment,{children:[(0,sn.jsx)("p",{className:"ri-popoverLabel",children:"Light color"}),(0,sn.jsx)(my.HexColorPicker,{color:t,onChange:r}),(0,sn.jsxs)("div",{className:"ri-inlineRow",children:[(0,sn.jsx)("span",{className:"ri-colorCode",children:t}),(0,sn.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]}):(0,sn.jsxs)(sn.Fragment,{children:[(0,sn.jsx)("p",{className:"ri-popoverLabel",children:"Brightness"}),(0,sn.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,sn.jsxs)("div",{className:"ri-inlineRow",children:[(0,sn.jsxs)("span",{className:"ri-colorCode",children:[n,"%"]}),(0,sn.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]})})}var Ps=require("react");var Gi=require("lucide-react"),xa=require("react");function gy(e){let t=!1,n,r=()=>{t||(e(),t||(n=setTimeout(r,70)))};return e(),n=setTimeout(r,300),()=>{t=!0,clearTimeout(n)}}var si=require("react/jsx-runtime");function by({onNudge:e}){let t=ve(),n=(0,xa.useRef)(e);n.current=e;let r=(0,xa.useRef)(null),i=(0,xa.useRef)(null),o=()=>{r.current?.(),r.current=null,i.current=null};return(0,xa.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,si.jsxs)("div",{className:"ri-decalPosition",children:[(0,si.jsxs)("div",{children:[(0,si.jsx)("div",{className:"ri-decalPosition__label",children:t("position")}),(0,si.jsx)("div",{className:"ri-decalPosition__hint",children:t("decalNudgeHint")})]}),(0,si.jsx)("div",{className:"ri-decalPosition__pad",role:"group","aria-label":t("decalNudgeControls"),children:[["up",Gi.ArrowUp],["left",Gi.ArrowLeft],["right",Gi.ArrowRight],["down",Gi.ArrowDown]].map(([a,s])=>(0,si.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=gy(()=>n.current(a)))},onClick:l=>{l.detail===0&&n.current(a)},children:(0,si.jsx)(s,{size:16})},a))})]})}var He=require("react/jsx-runtime"),yC=e=>Math.round(e*180/Math.PI);function yy({kind:e,decals:t,activeId:n,error:r,moving:i,defaultSize:o,onSelect:a,onAddText:s,onAddImage:l,onChange:c,onMove:d,onNudge:p,onRemove:u,onClose:h}){let m=ve(),[b,f]=(0,Ps.useState)(""),[g,y]=(0,Ps.useState)("#ffffff"),x=(0,Ps.useRef)(null),_=t.find(w=>w.id===n)??null;return(0,He.jsxs)("div",{className:"ri-popover ri-popover--inline ri-decalControl",onPointerDown:w=>w.stopPropagation(),children:[e==="add-text"?(0,He.jsxs)(He.Fragment,{children:[(0,He.jsx)("p",{className:"ri-popoverLabel",children:m("text")}),(0,He.jsxs)("div",{className:"ri-decalControl__row",children:[(0,He.jsx)("input",{className:"ri-decalControl__input",value:b,placeholder:m("yourText"),"aria-label":m("textToAdd"),onChange:w=>f(w.target.value)}),(0,He.jsx)("input",{type:"color",className:"ri-decalControl__color",value:g,"aria-label":m("textColour"),onChange:w=>y(w.target.value)})]}),(0,He.jsx)("button",{type:"button",className:"ri-uploadButton",disabled:!b.trim(),onClick:()=>{s(b.trim(),g)&&f("")},children:m("addText")})]}):(0,He.jsxs)(He.Fragment,{children:[(0,He.jsx)("p",{className:"ri-popoverLabel",children:m("image")}),(0,He.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:()=>x.current?.click(),children:m("chooseImage")}),(0,He.jsx)("input",{ref:x,type:"file",accept:"image/png,image/jpeg,image/webp,image/svg+xml",className:"ri-hiddenInput","aria-label":m("imageToAdd"),onChange:w=>{let R=w.target.files?.[0];w.target.value="",R&&l(R)}})]}),r?(0,He.jsx)("div",{className:"ri-decalControl__hint",role:"alert",children:r}):null,t.length>0?(0,He.jsx)("div",{className:"ri-decalControl__list",role:"group","aria-label":m("added"),children:t.map((w,R)=>(0,He.jsx)("button",{type:"button",className:`ri-decalControl__chip ${w.id===n?"ri-decalControl__chip--active":""}`,"aria-pressed":w.id===n,onClick:()=>a(w.id),children:w.image?m("decalImage",{index:R+1}):w.text||m("decalText",{index:R+1})},w.id))}):null,_?(0,He.jsxs)("div",{className:"ri-decalControl__editor",children:[(0,He.jsx)(by,{onNudge:w=>p(_.id,w)}),_.image?null:(0,He.jsxs)("div",{className:"ri-decalControl__row",children:[(0,He.jsx)("input",{className:"ri-decalControl__input",value:_.text??"","aria-label":m("text"),onChange:w=>c(_.id,{text:w.target.value})}),(0,He.jsx)("input",{type:"color",className:"ri-decalControl__color",value:_.color??"#ffffff","aria-label":m("colour"),onChange:w=>c(_.id,{color:w.target.value})})]}),(0,He.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,He.jsx)("span",{children:m("size")}),(0,He.jsx)("input",{type:"range",min:o/10,max:o*4,step:o/50,value:_.size,"aria-label":m("size"),onChange:w=>c(_.id,{size:Number(w.target.value)})})]}),(0,He.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,He.jsx)("span",{children:m("turn")}),(0,He.jsx)("input",{type:"range",min:-180,max:180,step:1,value:yC(_.rotation??0),"aria-label":m("rotation"),onChange:w=>c(_.id,{rotation:Number(w.target.value)*Math.PI/180})})]}),(0,He.jsxs)("div",{className:"ri-inlineRow",children:[(0,He.jsx)("button",{type:"button",className:"ri-secondaryButton","aria-pressed":i,title:m("dragTheDecalAcrossTheObjectsSurface"),onClick:()=>d(_.id),children:m("move")}),(0,He.jsx)("button",{type:"button",className:"ri-removeButton",onClick:()=>u(_.id),children:m("remove")})]})]}):null,(0,He.jsxs)("div",{className:"ri-inlineRow",children:[(0,He.jsx)("span",{className:"ri-colorCode",children:t.length===0?m("noneAddedYet"):m("decalAdded",{count:t.length})}),(0,He.jsx)("button",{type:"button",className:"ri-secondaryButton",onClick:h,children:m("done")})]})]})}var Vc=require("react"),Gy=require("@react-three/fiber"),Tr=require("three");var vt=require("three"),vC=.5,As=4;function xC(e,t=0){let n=new vt.Vector3(...e);n.lengthSq()<1e-12&&n.set(0,0,1),n.normalize();let r=new vt.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 wC(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 vy(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 d=l.position[t]-s.position[t];o.push(wC(s,l,(n-s.position[t])/d))}}return o}function Tc(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(),d=Math.max(t.size,1e-6),p=d/(n>0&&Number.isFinite(n)?n:1),u=Math.max(d,p)*vC,h={x:d/2,y:p/2,z:u/2},m=new vt.Matrix4().makeRotationFromEuler(xC(t.normal,t.rotation)).setPosition(...t.position),b=m.clone().invert(),f=(N,I)=>{let F=null;if(l){F=new Map;for(let O=0;O<As;O++){let T=s.getComponent(N,O);if(T<=0)continue;let z=a.getComponent(N,O);F.set(z,(F.get(z)??0)+T)}}return{position:I.clone(),normal:o?new vt.Vector3().fromBufferAttribute(o,N):new vt.Vector3,bones:F}},g=[],y=[],x=[],_=[],L=[],w=new vt.Vector3,R=new vt.Vector3,C=new vt.Vector3,P=N=>{if(x.push(.5+N.position.x/d,.5-N.position.y/p),w.copy(N.position).applyMatrix4(m),g.push(w.x,w.y,w.z),y.push(N.normal.x,N.normal.y,N.normal.z),!N.bones)return;let I=[...N.bones].sort((O,T)=>T[1]-O[1]).slice(0,As),F=I.reduce((O,[,T])=>O+T,0)||1;for(let O=0;O<As;O++)_.push(I[O]?.[0]??0),L.push((I[O]?.[1]??0)/F)},S=["x","y","z"],v=[new vt.Vector3,new vt.Vector3,new vt.Vector3],A=[0,0,0],E=(c?c.count:i.count)/3;for(let N=0;N<E;N++){for(let O=0;O<3;O++){let T=N*3+O;A[O]=c?c.getX(T):T,v[O].fromBufferAttribute(i,A[O]).applyMatrix4(b)}if(S.some(O=>v[0][O]>h[O]&&v[1][O]>h[O]&&v[2][O]>h[O]||v[0][O]<-h[O]&&v[1][O]<-h[O]&&v[2][O]<-h[O]))continue;let I=v.map((O,T)=>f(A[T],O));if(!o){R.copy(I[1].position).sub(I[0].position),C.copy(I[2].position).sub(I[0].position);let O=R.cross(C).transformDirection(m);for(let T of I)T.normal.copy(O)}let F=I;for(let O of S)if(F=vy(F,O,h[O],!0),F=vy(F,O,-h[O],!1),F.length<3)break;for(let O=1;O+1<F.length;O++)P(F[0]),P(F[O]),P(F[O+1])}if(g.length===0)return null;let B=new vt.BufferGeometry;return B.setAttribute("position",new vt.Float32BufferAttribute(g,3)),B.setAttribute("normal",new vt.Float32BufferAttribute(y,3)),B.setAttribute("uv",new vt.Float32BufferAttribute(x,2)),l&&(B.setAttribute("skinIndex",new vt.Uint16BufferAttribute(_,As)),B.setAttribute("skinWeight",new vt.Float32BufferAttribute(L,As))),B}function wy(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 xy=256,ph=24;function _y(e){let t=`${e.fontWeight??"bold"} ${xy-ph*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)+ph*2,8),4096),n.height=xy,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-ph);let o=new vt.CanvasTexture(n);return o.flipY=!1,o.colorSpace=vt.SRGBColorSpace,{texture:o,aspect:n.width/n.height}}var Ls=require("react"),qn=require("three");var gn=require("three");function Pc(e){let t=!0;return e?.traverse(n=>{let r=n.isMesh?n.geometry:null;r&&!r.getAttribute("uv")&&(t=!1)}),t}function My(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function Sy(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function ln(e){return!!(e&&"isMesh"in e&&e.isMesh)}var Hi=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],Ac={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"},_C=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function Sr(e){return _C.has(e)?gn.SRGBColorSpace:gn.NoColorSpace}function Ot(e,t){return e?.[t]?.path}function Cy(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 Ty(e,t){let n=e?.[t]?.scale;if(!(!Number.isFinite(n)||!n))return n===1?void 0:n}function Py(e,t){let n=e?.[t]?.rotation;if(!(!Number.isFinite(n)||!n))return n}function Ay(e){return e==="back"?gn.BackSide:e==="double"?gn.DoubleSide:gn.FrontSide}function Ey(e){return e==="additive"?gn.AdditiveBlending:gn.NormalBlending}function li(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 Ec(e){return Number.isFinite(e)&&e>0?e:1}function Ry(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function Oy(e){return e?.loopMode??"repeat"}var Rc=require("three");function En(e){return e.isSkinnedMesh===!0}function Wi(e){let t=[];return e.traverse(n=>{En(n)&&t.push(n)}),t}var wa="reactImmersiveSkinFreeze";function Oc(e){return!!e.userData[wa]}function _a(e,t){let n=e.userData,r=new Rc.Matrix4().copy(t).invert(),i=n[wa];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,d,p){o.previousOnBeforeRender.call(this,a,s,l,c,d,p),e.bindMatrixInverse.copy(o.frozenInverse)},n[wa]=o}function Es(e){return e.userData[wa]?.frozenInverse??null}function ci(e){let t=e.userData,n=t[wa];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[wa],e.updateMatrixWorld(!0))}function Ly(e){let t=e,n=Es(e);n&&t.bindMatrixInverse.copy(n),t.skeleton?.update?.();let r=t.geometry.clone(),i=r.getAttribute("position");if(i){let o=new Rc.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 Dy(e){return e.matrixWorld.clone()}var zt=require("three"),Rs=new Map,ui={color:"#93c5fd",intensity:.07},Po=new zt.Color(ui.color).multiplyScalar(ui.intensity),Iy=new zt.Color(ui.color),By=.28,ky=new Map;function Ny(e){return ky.get(e)}function MC(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 zt.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 Lc(e,t){return`${t}|${e}`}function Os(e,t=zt.NoColorSpace,n){let r=Lc(e,t),i=Rs.get(r);if(i)return n&&!i.loaded&&i.pending.push(n),i.texture;let o=ky.get(e)??e,a={texture:new zt.Texture,refCount:0,loaded:!1,pending:n?[n]:[],loadGeneration:0};return a.texture.flipY=!1,a.texture.colorSpace=t,Rs.set(r,a),MC(a,o),a.texture}function Ma(e,t=zt.NoColorSpace,n){let r=Os(e,t,n);return Rs.get(Lc(e,t)).refCount+=1,r}function di(e,t=zt.NoColorSpace){let n=Rs.get(Lc(e,t));n&&(n.refCount-=1,n.refCount<=0&&(n.loadGeneration+=1,n.pending=[],n.texture.dispose(),Rs.delete(Lc(e,t))))}function Dc(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 p=n.clone();p.wrapS=zt.RepeatWrapping,p.wrapT=zt.RepeatWrapping,p.center.set(.5,.5),p.needsUpdate=!0,c={texture:p,sourcePath:r,base:n},s[t]=c}let d=o>0?o:1;return c.texture.offset.set(i[0],i[1]),c.texture.repeat.set(1/d,1/d),c.texture.rotation=a,c.texture}function Ic(e,t){let n=e.offsetTextures,r=n?.[t];r&&(r.texture.dispose(),delete n[t])}function Vy(e){let t=e.offsetTextures;if(t){for(let n of Object.values(t))n.texture.dispose();delete e.offsetTextures}}var hh=null;function Bc(){if(hh)return hh;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 zt.CanvasTexture(t);return i.colorSpace=zt.SRGBColorSpace,hh=i,i}var mh=null;function zy(){if(mh)return mh;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,d=s*n,p=(Math.floor(l/2)+Math.floor(s/2))%4;o.fillStyle=r[p],o.fillRect(c,d,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(c+x,d),o.lineTo(c+x,d+n),o.moveTo(c,d+x),o.lineTo(c+n,d+x),o.stroke()}o.strokeStyle="#09090b",o.lineWidth=7,o.strokeRect(c,d,n,n);let u=c+n*.23,h=d+n*.72,m=c+n*.72,b=d+n*.23;o.lineCap="round",o.lineJoin="round",o.beginPath(),o.moveTo(u,h),o.lineTo(m,b),o.lineTo(m-n*.2,b),o.moveTo(m,b),o.lineTo(m,b+n*.2),o.stroke();let f=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(f).padStart(2,"0");o.strokeText(g,c+n/2,d+n*.82),o.fillText(g,c+n/2,d+n*.82)}let a=new zt.CanvasTexture(i);return a.colorSpace=zt.SRGBColorSpace,a.wrapS=zt.RepeatWrapping,a.wrapT=zt.RepeatWrapping,a.flipY=!1,a.anisotropy=8,a.needsUpdate=!0,mh=a,a}var Ao="riDecal",bh="riDecalId";function fh(){return new qn.BufferGeometry().setAttribute("position",new qn.Float32BufferAttribute([],3))}function Uy(e){let t=e.image;return t?.width&&t.height?t.width/t.height:1}function gh(e){e.disposed=!0,e.node.remove(e.mesh),e.mesh.geometry.dispose(),e.mesh.material.dispose(),e.imagePath&&di(e.imagePath,qn.SRGBColorSpace),e.ownTexture?.dispose()}function SC(e,t,n,r){let i=new qn.MeshStandardMaterial({transparent:!0,polygonOffset:!0,polygonOffsetFactor:-4,depthWrite:!1,metalness:0,roughness:.7}),o=En(e)&&e.skeleton?e:null,a=o?new qn.SkinnedMesh(fh(),i):new qn.Mesh(fh(),i);if(o){let c=a;c.bind(o.skeleton,o.bindMatrix),c.frustumCulled=!1,c.onBeforeRender=()=>{let d=Es(o);d&&c.bindMatrixInverse.copy(d)}}a.userData[Ao]=!0,a.userData[bh]=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 d=Tc(e,t,c);a.geometry.dispose(),a.geometry=d??fh(),a.visible=d!==null};if(t.image){s.imagePath=t.image;let c=Ma(t.image,qn.SRGBColorSpace,()=>{s.disposed||(l(Uy(c)),i.needsUpdate=!0,r())});i.map=c,l(Uy(c))}else{let{texture:c,aspect:d}=_y(t);s.ownTexture=c,i.map=c,l(d)}return e.add(a),s}function jy({objectBindings:e,nodeMap:t,invalidate:n}){let r=(0,Ls.useRef)(new Map);(0,Ls.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(ln(l))for(let c of s.decals){if(!c.image&&!c.text)continue;let d=`${a}
|
|
3665
|
+
${c.id}`,p=wy(c),u=i.get(d);u&&(u.node!==l||u.signature!==p)&&(gh(u),u=void 0),u||(u=SC(l,c,p,n),i.set(d,u)),u.mesh.material.opacity=(c.opacity??1)*(s.style?.material?.opacity??1),o.add(d)}}for(let[a,s]of i)o.has(a)||(gh(s),i.delete(a));n()},[e,t,n]),(0,Ls.useEffect)(()=>{let i=r.current;return()=>{for(let o of i.values())gh(o);i.clear()}},[])}var nr=require("react"),Cr=require("three"),CC=500,TC=10,PC=5;function kc(e,t,n){let r=(0,nr.useRef)({resolve:e,onContextMenu:t,anchorOf:n});r.current={resolve:e,onContextMenu:t,anchorOf:n};let i=(0,nr.useRef)(null),o=(0,nr.useRef)(!1),a=(0,nr.useRef)(null),s=(0,nr.useCallback)(()=>{let p=i.current;p?.timer&&clearTimeout(p.timer),i.current=null,a.current?.(),a.current=null},[]),l=(0,nr.useCallback)(()=>{let p=i.current;p&&(s(),p.kind==="touch"&&(o.current=!0,setTimeout(()=>o.current=!1,800)),r.current.onContextMenu?.(p.target,p.pointer))},[s]),c=(0,nr.useCallback)(p=>{let u=p.nativeEvent,h=u.pointerType!=="touch"&&u.button===2,m=u.pointerType==="touch"&&u.button===0;if(!r.current.onContextMenu||!h&&!m)return;let b=r.current.resolve(p.object);if(b===null)return;s();let f={target:b,kind:h?"right":"touch",pointerId:u.pointerId,pointer:Sa(p,r.current.anchorOf?.(p.object)),timer:m?setTimeout(l,CC):null};i.current=f;let g=h?PC:TC,y=w=>Math.hypot(w.clientX-f.pointer.clientX,w.clientY-f.pointer.clientY)>g,x=w=>{w.pointerId===f.pointerId&&y(w)&&s()},_=w=>{w.pointerId===f.pointerId&&(f.kind==="right"&&!y(w)?l():s())},L=w=>{w.pointerId!==f.pointerId&&s()};window.addEventListener("pointermove",x),window.addEventListener("pointerup",_),window.addEventListener("pointercancel",s),window.addEventListener("pointerdown",L),a.current=()=>{window.removeEventListener("pointermove",x),window.removeEventListener("pointerup",_),window.removeEventListener("pointercancel",s),window.removeEventListener("pointerdown",L)}},[s,l]);(0,nr.useEffect)(()=>s,[s]);let d=(0,nr.useCallback)(()=>o.current?(o.current=!1,!0):!1,[]);return{onPointerDown:c,consumeClick:d}}function AC(e,t){let n=e.face,r=t.geometry.getAttribute("position");if(!n||!r)return null;let i=e.barycoord??null;if(!i){let[p,u,h]=[n.a,n.b,n.c].map(m=>t.getVertexPosition(m,new Cr.Vector3));if(i=Cr.Triangle.getBarycoord(t.worldToLocal(e.point.clone()),p,u,h,new Cr.Vector3),!i)return null}let[o,a,s]=[n.a,n.b,n.c].map(p=>new Cr.Vector3().fromBufferAttribute(r,p)),l=new Cr.Vector3().addScaledVector(o,i.x).addScaledVector(a,i.y).addScaledVector(s,i.z),c=new Cr.Triangle(o,a,s).getNormal(new Cr.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 Eo(e,t){if(t.updateWorldMatrix(!0,!1),e.object===t&&t.isSkinnedMesh===!0){let i=AC(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 Cr.Matrix4().copy(t.matrixWorld).invert()),{position:[n.x,n.y,n.z],normal:[r.x,r.y,r.z]}}function Sa(e,t){let n=e.nativeEvent;return{clientX:n.clientX,clientY:n.clientY,pointerType:"pointerType"in n?n.pointerType:"mouse",...t?{surface:Eo(e,t)}:{}}}var Nc=require("three");function Fy(e,t){let n=[];if(En(e)){let r=e;r.computeBoundingSphere(),r.computeBoundingBox(),Nc.SkinnedMesh.prototype.raycast.call(r,t,n)}else Nc.Mesh.prototype.raycast.call(e,t,n);return n.sort((r,i)=>r.distance-i.distance)[0]}function Hy({target:e,nodes:t,controls:n}){let{camera:r,gl:i,invalidate:o}=(0,Gy.useThree)(),a=(0,Vc.useRef)(e);return a.current=e,(0,Vc.useEffect)(()=>{let s=i.domElement,l=new Tr.Raycaster,c=new Tr.Vector2,d=s.style.cursor,p=s.style.touchAction;s.style.cursor="grab",s.style.touchAction="none";let u=0,h=null,m=null,b=(R,C=new Tr.Vector2)=>{let P=s.getBoundingClientRect();c.set((R.clientX-P.left-C.x)/P.width*2-1,-((R.clientY-P.top-C.y)/P.height)*2+1),l.setFromCamera(c,r)},f=R=>{if(!m)return;b(R,m.offset),m.node.updateWorldMatrix(!0,!1);let C=l.intersectObject(m.node,!1)[0];if(!C)return;let P=Eo({...C,ray:l.ray},m.node),S=Tc(m.node,{...m.decal,...P},m.aspect);S&&(m.mesh.geometry!==m.geometry&&m.mesh.geometry.dispose(),m.mesh.geometry=S,m.surface=P,o())},g=R=>{if(!m)return;cancelAnimationFrame(u),u=0,h=null;let C=m;m=null,C.mesh.geometry!==C.geometry&&(R&&C.surface?C.geometry.dispose():(C.mesh.geometry.dispose(),C.mesh.geometry=C.geometry)),C.controller&&(C.controller.enabled=C.controlsEnabled),s.hasPointerCapture(C.pointerId)&&s.releasePointerCapture(C.pointerId),s.style.cursor="grab",o();let P=()=>{window.removeEventListener("click",S,!0),window.removeEventListener("pointerdown",P,!0),clearTimeout(v)},S=A=>{A.target===s&&(A.preventDefault(),A.stopImmediatePropagation()),P()},v=setTimeout(P,300);window.addEventListener("click",S,!0),window.addEventListener("pointerdown",P,!0),R&&C.surface&&a.current.onCommit(C.surface)},y=R=>{if(R.button!==0||m)return;let C=a.current,P=t.current[C.objectId];if(!(P instanceof Tr.Mesh)||!P.visible)return;let S=P.children.find(O=>O.userData[Ao]&&O.userData[bh]===C.decal.id);if(!S?.visible)return;P.updateWorldMatrix(!0,!0),b(R);let v=Fy(S,l),A=l.intersectObject(P,!1)[0];if(!v||!A||v.distance>A.distance+1e-4)return;let E=new Tr.Vector3;if(En(S)){let O=new Tr.Vector3,T=S.geometry.getAttribute("position").count;if(!T)return;for(let z=0;z<T;z++)E.add(S.getVertexPosition(z,O));E.divideScalar(T).applyMatrix4(S.matrixWorld)}else E.fromArray(C.decal.position).applyMatrix4(P.matrixWorld);E.project(r);let B=s.getBoundingClientRect(),N=new Tr.Vector2(R.clientX-(B.left+(E.x+1)/2*B.width),R.clientY-(B.top+(1-E.y)/2*B.height)),I=S.material.map?.image,F=n.current;m={pointerId:R.pointerId,node:P,mesh:S,geometry:S.geometry,decal:C.decal,surface:null,offset:N,aspect:I?.width&&I.height?I.width/I.height:1,controller:F,controlsEnabled:F?.enabled??!1},F&&(F.enabled=!1),R.preventDefault(),R.stopImmediatePropagation(),s.setPointerCapture(R.pointerId),s.style.cursor="grabbing"},x=R=>{!m||R.pointerId!==m.pointerId||(R.preventDefault(),R.stopImmediatePropagation(),h=R,u||(u=requestAnimationFrame(()=>{u=0,h&&f(h)})))},_=R=>{!m||R.pointerId!==m.pointerId||(R.preventDefault(),R.stopImmediatePropagation(),h&&f(h),g(!0))},L=()=>g(!1),w=R=>{R.key==="Escape"&&(g(!1),a.current.onCancel())};return s.addEventListener("pointerdown",y,!0),window.addEventListener("pointermove",x,{capture:!0,passive:!1}),window.addEventListener("pointerup",_,!0),window.addEventListener("pointercancel",L),window.addEventListener("blur",L),window.addEventListener("keydown",w),s.addEventListener("lostpointercapture",L),()=>{g(!1),s.style.cursor=d,s.style.touchAction=p,s.removeEventListener("pointerdown",y,!0),window.removeEventListener("pointermove",x,!0),window.removeEventListener("pointerup",_,!0),window.removeEventListener("pointercancel",L),window.removeEventListener("blur",L),window.removeEventListener("keydown",w),s.removeEventListener("lostpointercapture",L)}},[r,i,o,t,n,e.objectId,e.decal]),null}var kn=require("react");var Wy=require("three-stdlib");function Ds(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 yh({sources:e,downloadFilename:t,onComplete:n}){import("three").then(({Group:r,Mesh:i})=>{let o=new r;for(let{scene:s,objectBindings:l,matRefs:c}of e){s.updateMatrixWorld(!0);let d=new Map;for(let[u,h]of Object.entries(l))d.set(h.modelObjectId??u,u);let p=u=>{let h=u;for(;h;){let m=h.name||h.uuid,b=d.get(m)??m,f=l[b];if(f?f.visible===!1:h.visible===!1)return!1;h=h.parent}return!0};s.traverse(u=>{let h=u;if(!h.isMesh||!h.geometry)return;let m=h.name||h.uuid,b=d.get(m)??m,f=c[b]??h.material;if(!f)return;let g=En(h),y=g?Ly(h):h.geometry,x=g?Dy(h):h.matrixWorld,_=new i(y,f);_.name=m,_.matrix.copy(x),_.matrixAutoUpdate=!1,_.visible=p(h),o.add(_)})}new Wy.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"}),c=s instanceof ArrayBuffer?".glb":".gltf";Ds(l,`${t}${c}`),n()},s=>{console.error("GLTFExporter error:",s),n()},{binary:!0,onlyVisible:!0})})}var Zy=require("fflate");var Xy=require("fflate");function qy(e,t=6){return new Promise((n,r)=>{(0,Xy.zip)(e,{level:t},(i,o)=>{i?r(i):n(o)})})}var Is=2048,Yy=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function $y(e){return e.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'")}function wh(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function Qy(e){return wh(e,"model")}function vh(e,t){return e.index?Math.round(e.index.getX(t)):t}function EC(e,t,n){let r=vh(e,n),i=vh(e,n+1),o=vh(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 Ky(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function xh(e,t,n,r){let i,o;r?(i=t.index,o=n.index):(i=Ky(t),o=Ky(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 RC(e,t,n){xh(e,t[0],t[1],n),xh(e,t[1],t[2],n),xh(e,t[2],t[0],n)}function OC(e,t){return Array.isArray(e)?e[t]??null:e}function LC(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}`,d=s.index?.count??l.count,p=s.groups.length>0?s.groups:[{start:0,count:d,materialIndex:0}];for(let u of p){let h=u.materialIndex??0,m=OC(a.material,h);if(!m)continue;let b=t.get(m.uuid);b||(r+=1,b={name:m.name||`Material ${r}`,layers:new Map},t.set(m.uuid,b));let f=b.layers.get(a.uuid);f||(f={name:c,color:Yy[i%Yy.length],edges:new Map},i+=1,b.layers.set(a.uuid,f));let g=Math.max(0,u.start),y=Math.min(d,g+u.count);for(let x=g;x+2<y;x+=3){let _=EC(s,l,x);_&&RC(f.edges,_,!!s.index)}}}),[...t.values()].filter(o=>[...o.layers.values()].some(a=>a.edges.size>0))}function zc(e){return(e*Is).toFixed(2)}function DC(e){return`M${zc(e.start.u)} ${zc(1-e.start.v)}L${zc(e.end.u)} ${zc(1-e.end.v)}`}function IC(e){let t=$y(e.name),n=[...e.layers.values()].filter(r=>r.edges.size>0).map((r,i)=>{let o=$y(r.name),a=`${wh(r.name,"mesh")}-${i+1}`,s=[...r.edges.values()],l=s.filter(p=>p.count===1),d=(l.length>0?l:s).map(DC).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="${d}"/>`," </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 b_(e,t="model"){let n=m_(e),r=If(t);return n.map((i,o)=>{let a=$u(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(c=>c.edges.size>0).length,svg:g_(i)}})}async function Bf(e,t="model"){let n=b_(e,t);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,Df.strToU8)(o.svg)])),i=await Af(r);return Da(new Blob([i],{type:"application/zip"}),`${If(t)}-uv-layouts.zip`),n}function kf({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:r,downloadFilename:i,captureVideo:o}){let[a,s]=(0,wn.useState)(!1),[c,l]=(0,wn.useState)(!1),[d,u]=(0,wn.useState)(null),[m,h]=(0,wn.useState)(null),[f,b]=(0,wn.useState)("auto");(0,wn.useEffect)(()=>{if(!c)return;let T=()=>l(!1);return window.addEventListener("pointerdown",T),()=>window.removeEventListener("pointerdown",T)},[c]);let v=(0,wn.useCallback)(()=>{u(null),h(null),l(T=>!T)},[]),y=(0,wn.useCallback)(()=>{let T=e.current;T&&(l(!1),s(!0),Pf({scene:T,objectBindings:r,matRefs:t.current,downloadFilename:i,onComplete:()=>s(!1)}))},[i,t,r,e]),S=(0,wn.useCallback)(()=>{l(!1),Xs(n.current).then(T=>{let P=document.createElement("a");P.href=T,P.download=`${i}.png`,document.body.appendChild(P),P.click(),document.body.removeChild(P)}).catch(T=>{console.error("Screenshot failed:",T)})},[i,n]),_=(0,wn.useCallback)(async()=>{let T=e.current;if(T)try{if((await Bf(T,i)).length===0){u("This model does not contain UV coordinates.");return}u(null),l(!1)}catch(P){console.error("UV layout export failed:",P),u("Could not create the UV layout archive.")}},[i,e]),k=(0,wn.useCallback)(async T=>{l(!1),h(null);try{let P=await o({mode:T,format:f}),B=P.type.startsWith("video/mp4")?"mp4":"webm",D=URL.createObjectURL(P),O=document.createElement("a");O.href=D,O.download=`${i}-${T}.${B}`,document.body.appendChild(O);try{O.click()}finally{O.remove(),setTimeout(()=>URL.revokeObjectURL(D),1e3)}}catch(P){if(P instanceof DOMException&&P.name==="AbortError")return;h(P instanceof Error?P.message:"Could not export the video."),l(!0)}},[o,i,f]);return{isDownloading:a,downloadMenuOpen:c,uvExportError:d,toggleDownloadMenu:v,handleDownloadMesh:y,handleDownloadScreenshot:S,handleDownloadUvLayout:_,handleDownloadVideo:k,videoFormat:f,setVideoFormat:b,videoExportError:m}}var qe=require("react"),Gn=require("three");var xt=require("three");function sl(e){if(e.length!==3)return null;let t=new xt.Vector3(...e[0]).sub(new xt.Vector3(...e[1])),n=new xt.Vector3(...e[2]).sub(new xt.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 Nf(e,t){if(!e.normal)return null;let n=new xt.Vector3(...e.normal);if(n.lengthSq()===0)return null;n.normalize();let r=new xt.Vector3(...t),i=r.clone().sub(new xt.Vector3(...e.position)).dot(n);return{distance:Math.abs(i),projection:r.addScaledVector(n,-i).toArray()}}function ll(e){if(e.length<3)return{error:"Pick at least three points to finish the area."};let t=new xt.Vector3(...e[0]),n=e.map(v=>new xt.Vector3(...v).sub(t)),r=Math.max(...n.map(v=>v.length()));if(r===0)return{error:"Area points must be distinct."};let i=new xt.Vector3;for(let v=1;v<n.length-1;v+=1){let y=n[v].clone().cross(n[v+1]);y.lengthSq()>i.lengthSq()&&i.copy(y)}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(v=>Math.abs(v.dot(i))>o))return{error:"Area points must lie on one plane."};let a=n.find(v=>v.length()>r*1e-10).clone().normalize(),s=i.clone().cross(a).normalize(),c=n.map(v=>new xt.Vector2(v.dot(a),v.dot(s))),l=(v,y,S)=>(y.x-v.x)*(S.y-v.y)-(y.y-v.y)*(S.x-v.x),d=r*r*1e-10,u=(v,y,S)=>Math.abs(l(v,y,S))<=d&&S.x>=Math.min(v.x,y.x)-r*1e-10&&S.x<=Math.max(v.x,y.x)+r*1e-10&&S.y>=Math.min(v.y,y.y)-r*1e-10&&S.y<=Math.max(v.y,y.y)+r*1e-10;for(let v=0;v<c.length;v+=1){let y=c[v],S=c[(v+1)%c.length];if(y.distanceTo(S)<=r*1e-10)return{error:"Area points must be distinct."};for(let _=v+1;_<c.length;_+=1){if(_===v+1||v===0&&_===c.length-1)continue;let k=c[_],T=c[(_+1)%c.length],P=l(y,S,k),B=l(y,S,T),D=l(k,T,y),O=l(k,T,S);if(P*B<0&&D*O<0||u(y,S,k)||u(y,S,T)||u(k,T,y)||u(k,T,S))return{error:"Area edges must not cross or touch each other."}}}let m=0,h=0,f=0;for(let v=0;v<c.length;v+=1){let y=c[v],S=c[(v+1)%c.length],_=y.x*S.y-S.x*y.y;m+=_,h+=(y.x+S.x)*_,f+=(y.y+S.y)*_}if(Math.abs(m)<=d)return{error:"The polygon has no measurable area."};let b=t.clone().addScaledVector(a,h/(3*m)).addScaledVector(s,f/(3*m));return{area:Math.abs(m)/2,center:b.toArray(),triangles:xt.ShapeUtils.triangulateShape(c,[])}}function y_(e){if(!(e.object instanceof xt.Mesh)||!e.face)return null;let t=e.object,n=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let r=new xt.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 xt.Vector3).applyMatrix4(n))}function Vf(e){if(!(e.object instanceof xt.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 zf(e,t,n,r,i,o=12){let a=y_(e),s=a?a[1].clone().sub(a[0]).cross(a[2].clone().sub(a[0])).normalize():null,c={position:e.point.toArray(),...s&&s.lengthSq()>0?{normal:s.toArray()}:{},...a?{faceVertices:a.map(m=>m.toArray())}:{}};if(!a||i==="none")return c;let l=m=>{let h=new xt.Vector4(m.x,m.y,m.z,1).applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix);return h.w<=0||h.z/h.w<-1||h.z/h.w>1?null:{screen:new xt.Vector2((h.x/h.w+1)*r.width/2,(1-h.y/h.w)*r.height/2),w:h.w}},d=a.map(l),u=o;if((i==="vertex"||i==="auto")&&(d.forEach((m,h)=>{let f=m?.screen.distanceTo(n)??1/0;f<=u&&(u=f,c.position=a[h].toArray(),c.snapped="vertex")}),c.snapped))return c;if(i==="edge"||i==="auto")for(let m=0;m<3;m+=1){let h=(m+1)%3,f=d[m],b=d[h];if(!f||!b)continue;let v=b.screen.clone().sub(f.screen);if(v.lengthSq()===0)continue;let y=Math.max(0,Math.min(1,n.clone().sub(f.screen).dot(v)/v.lengthSq())),S=f.screen.clone().addScaledVector(v,y).distanceTo(n);if(S<=u){u=S;let _=y*f.w/((1-y)*b.w+y*f.w);c.position=a[m].clone().lerp(a[h],_).toArray(),c.snapped="edge"}}return c}var cl={tool:"distance",points:[],areaClosed:!1,error:null};function Uf(e,t){if(t.type==="tool")return{...cl,tool:t.tool};if(t.type==="clear")return{...cl,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=ll(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&&sl(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 v_(e){let t=new Gn.Box3().setFromObject(e),n=new Gn.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 x_(e){let t=new Gn.Box3().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new Gn.Vector3),r=t.getSize(new Gn.Vector3).length()/2;return!Number.isFinite(r)||r<=0?null:{center:[n.x,n.y,n.z],radius:r}}function jf({canvasAreaRef:e,controlsRef:t,sceneRef:n,modelUrl:r,modelRotation:i,bindingTransformSignature:o,modelLoaded:a,enabled:s}){let[c,l]=(0,qe.useState)(!1),[d,u]=(0,qe.useReducer)(Uf,cl),[m,h]=(0,qe.useState)("none"),[f,b]=(0,qe.useState)(null),[v,y]=(0,qe.useState)(!1),[S,_]=(0,qe.useState)(null),[k,T]=(0,qe.useState)(null),P=(0,qe.useRef)(!1),B=(0,qe.useRef)(0),D=(0,qe.useRef)(null),O=(0,qe.useRef)(null);P.current=c&&s;let E=(0,qe.useCallback)(K=>{K.updateMatrixWorld(!0),_(v_(K)),T(x_(K))},[]),g=(0,qe.useCallback)(()=>{u({type:"clear"}),b(null)},[]),M=(0,qe.useCallback)(K=>{u({type:"tool",tool:K}),b(null)},[]),A=(0,qe.useCallback)(()=>u({type:"undo"}),[]),N=(0,qe.useCallback)(()=>u({type:"finishArea"}),[]),z=(0,qe.useCallback)(()=>l(K=>!K),[]),U=(0,qe.useCallback)(()=>y(K=>!K),[]),q=(0,qe.useCallback)(K=>{!P.current||K.button!==0||(D.current={x:K.clientX,y:K.clientY})},[]),x=(0,qe.useCallback)((K,oe)=>{let ae=e.current,ne=t.current?.camera,Ie=n.current;if(!ae||!ne||!Ie)return null;let me=ae.getBoundingClientRect();if(!me.width||!me.height)return null;Ie.updateMatrixWorld(!0),ne.updateMatrixWorld(!0);let tt=new Gn.Vector2(K-me.left,oe-me.top),dt=new Gn.Raycaster;dt.setFromCamera(new Gn.Vector2(tt.x/me.width*2-1,1-tt.y/me.height*2),ne);let pe=dt.intersectObject(Ie,!0).find(Vf);return pe?zf(pe,ne,tt,me,m):null},[e,t,n,m]),R=(0,qe.useCallback)(()=>{O.current!==null&&cancelAnimationFrame(O.current),O.current=null,b(null)},[]),X=(0,qe.useCallback)(K=>{if(!P.current||m==="none"||K.buttons!==0||K.target.closest("button, input, select, label, textarea, .ri-measureTools")){R();return}O.current!==null&&cancelAnimationFrame(O.current);let{clientX:oe,clientY:ae}=K;O.current=requestAnimationFrame(()=>{O.current=null;let ne=x(oe,ae);b(ne?.snapped?ne:null)})},[R,x,m]),Y=(0,qe.useCallback)(K=>{if(!P.current)return;let oe=D.current;if(D.current=null,oe&&Math.hypot(K.clientX-oe.x,K.clientY-oe.y)>6||K.target.closest("button, input, select, label, textarea, .ri-measureTools"))return;let ne=x(K.clientX,K.clientY);ne&&(B.current+=1,u({type:"place",point:{...ne,id:B.current}}))},[x]);return(0,qe.useEffect)(()=>{g(),_(null),T(null)},[r,g]),(0,qe.useEffect)(()=>{g()},[i,o,g]),(0,qe.useEffect)(()=>(R(),R),[R,c,m]),(0,qe.useEffect)(()=>{s||(l(!1),R())},[s,R]),(0,qe.useEffect)(()=>{let K=n.current;!a||!K||E(K)},[o,a,E,n]),{measureMode:c,measureModeRef:P,measurePoints:d.points,measurementTool:d.tool,areaClosed:d.areaClosed,measurementError:d.error,selectMeasurementTool:M,undoMeasurementPoint:A,finishMeasureArea:N,snapMode:m,setSnapMode:h,snapPreview:f,handleMeasurePointerMove:X,clearSnapPreview:R,showDimensions:v,measureBox:S,modelBounds:k,refreshBounds:E,clearMeasurements:g,toggleMeasureMode:z,toggleDimensions:U,handleMeasurePointerDown:q,handleMeasureClick:Y}}var Xf=require("react-dom"),qf=require("@react-three/xr"),Yf=require("lucide-react"),rt=require("react");function Ff(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 Ku(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function Zu(){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 Hf(){return Ku()||Zu()}function __(){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=Ku();return t||o||r&&n||r&&i}function Qu(){if(!__())return!1;if(Ku())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function Gf(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return Qu()}}var On=require("react/jsx-runtime"),Wf={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function $f({enableXR:e,usdzUrl:t,mobileHandoffUrl:n,engagement:r}){let i=(0,rt.useRef)(null),o=(0,rt.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let x=navigator.xr;if(!x||typeof x.isSessionSupported!="function"||typeof x.addEventListener!="function")return null;try{return(0,qf.createXRStore)({emulate:!1})}catch{return null}},[e]),[a,s]=(0,rt.useState)(!1),[c,l]=(0,rt.useState)(!1),[d,u]=(0,rt.useState)(!0),[m,h]=(0,rt.useState)(null),[f,b]=(0,rt.useState)(!1),[v,y]=(0,rt.useState)(!1),[S,_]=(0,rt.useState)(Wf),[k,T]=(0,rt.useState)(!1),P=(0,rt.useMemo)(()=>e&&!!t?.trim()&&Zu(),[e,t]);(0,rt.useEffect)(()=>{u(Hf())},[]);let B=(0,rt.useCallback)(()=>{if(typeof window>"u")return null;try{let x=new URL(n?.trim()||window.location.href,window.location.href);return x.protocol==="http:"||x.protocol==="https:"?x.toString():null}catch{return null}},[n]);(0,rt.useEffect)(()=>{if(!e||d){h(null),b(!1);return}h(B())},[e,d,B]),(0,rt.useEffect)(()=>{if(o)return o.subscribe(x=>y(x.session!=null&&x.mode==="immersive-ar"))},[o]),(0,rt.useEffect)(()=>{if(o)return Ff(o,r)},[o,r]),(0,rt.useEffect)(()=>{T(!1),_(Wf)},[v]),(0,rt.useEffect)(()=>{if(!e||typeof navigator>"u")return;let x=navigator.xr;if(!x?.isSessionSupported)return;let R=!1;return x.isSessionSupported("immersive-ar").then(X=>!R&&s(X)).catch(()=>{}),x.isSessionSupported("immersive-vr").then(X=>!R&&l(X)).catch(()=>{}),()=>{R=!0}},[e]);let D=(0,rt.useCallback)(()=>{let x=B();x&&(r.requestARLaunch("mobile-handoff"),h(x),b(!0))},[B,r]),O=(0,rt.useCallback)(()=>b(!1),[]),E=(0,rt.useCallback)(()=>{let x=t?.trim();if(!x)return;r.requestARLaunch("quick-look");let R=document.createElement("a");R.setAttribute("rel","ar"),R.href=x,R.style.display="none";let X=document.createElement("img");X.alt="",X.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",R.appendChild(X),document.body.appendChild(R),R.click(),R.remove()},[t,r]),g=(0,rt.useCallback)(x=>{_(x),x.isPlacementMode||T(!1)},[]),M=(0,rt.useCallback)(x=>{T(!1),x?i.current?.finishPlacementMode():i.current?.cancelPlacementMode()},[]),A=(0,rt.useCallback)(x=>{x.preventDefault(),T(!0),i.current?.startPlacementMode()},[]);(0,rt.useEffect)(()=>{if(!k)return;let x=()=>M(!0),R=()=>M(!1);return window.addEventListener("pointerup",x),window.addEventListener("pointercancel",R),()=>{window.removeEventListener("pointerup",x),window.removeEventListener("pointercancel",R)}},[M,k]);let N=S.isModelPlaced?S.isPlacementMode?S.canPlace?"Release to place":"Move your device over a flat surface":null:S.canPlace?null:"Move your device over a flat surface",z=S.isModelPlaced&&!S.isPlacementMode?"Pinch to resize \xB7 Twist to rotate":null,U=o?.getState().domOverlayRoot??null,q=v&&U?(0,Xf.createPortal)((0,On.jsxs)(On.Fragment,{children:[z&&(0,On.jsx)("div",{className:"ri-arHintOverlay",children:(0,On.jsx)("div",{className:"ri-arHint",children:z})}),(0,On.jsx)("div",{className:"ri-arOverlay",children:(0,On.jsxs)("div",{className:"ri-arControls",children:[N&&(0,On.jsx)("div",{className:"ri-arStatus",children:N}),S.isModelPlaced&&(0,On.jsxs)("button",{type:"button",className:`ri-arActionButton ${k?"ri-arActionButton--active":""}`,onPointerDown:x=>A(x.nativeEvent),"aria-pressed":k,children:[(0,On.jsx)(Yf.MapPin,{size:14}),"Relocate"]}),!S.isModelPlaced&&S.canPlace&&(0,On.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:c,quickLookSupported:P,resolvedMobileHandoffUrl:m,isMobileHandoffOpen:f,arOverlay:q,openMobileHandoff:D,closeMobileHandoff:O,openQuickLook:E,handleARStateChange:g}}var ml=require("@react-three/fiber"),fl=require("@react-three/drei"),gg=require("@react-three/xr"),bg=require("three"),hr=require("react");function Kf(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var Zf=["x","y","z"],ki={enabled:!1,axis:"y",position:.5,flip:!1},w_={clips:[],autoplayClip:null},S_={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}},Ni={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:S_,animations:w_,annotations:[]};var Wn=require("@react-three/fiber"),Ju=require("@react-three/xr"),ul=require("three"),Dn=require("react");function Qf({renderMode:e,suspended:t=!1}){let{scene:n}=(0,Wn.useThree)(),r=(0,Wn.useThree)(s=>s.setFrameloop),i=(0,Ju.useXR)(s=>s.session!=null),o=(0,Ju.useXR)(s=>s.mode==="immersive-ar"),a=(0,Dn.useRef)(void 0);return(0,Dn.useEffect)(()=>{r(t?"never":i?"always":e)},[i,e,t,r]),(0,Dn.useEffect)(()=>{o?(a.current=n.background,n.background=null):a.current!==void 0&&(n.background=a.current,a.current=void 0)},[o,n]),(0,Wn.useFrame)(()=>{o&&n.background!==null&&(n.background=null)}),null}function Jf({onPresentingChange:e}){let t=(0,Wn.useThree)(i=>i.gl),n=(0,Dn.useRef)(null);(0,Dn.useEffect)(()=>{let i=t.xr;if(!i)return;let o=c=>{c?(n.current=t.shadowMap.enabled,t.shadowMap.enabled=!1):n.current!==null&&(t.shadowMap.enabled=n.current,n.current=null),e(c)},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,Dn.useRef)(0);return(0,Wn.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 eg({active:e}){let t=(0,Wn.useThree)(n=>n.invalidate);return(0,Dn.useEffect)(()=>{e&&t()},[e,t]),(0,Wn.useFrame)(()=>{e&&t()}),null}function tg({color:e}){let{scene:t}=(0,Wn.useThree)();return(0,Dn.useEffect)(()=>{let n=t.background;return t.background=e?new ul.Color(e):null,()=>{t.background=n}},[t,e]),null}function ng({rotation:e}){let{scene:t}=(0,Wn.useThree)();return(0,Dn.useLayoutEffect)(()=>{let n=e*Math.PI/180;t.environmentRotation.set(0,n,0),t.backgroundRotation.set(0,n,0)}),null}function rg({cameraConfig:e}){let{camera:t}=(0,Wn.useThree)();return(0,Dn.useEffect)(()=>{if(!(t instanceof ul.PerspectiveCamera))return;let n=e?.fov;typeof n=="number"&&t.fov!==n&&(t.fov=n,t.updateProjectionMatrix())},[t,e]),null}var Ba=require("@react-three/fiber"),xe=require("@react-three/postprocessing"),oi=require("postprocessing"),pr=require("three"),Ft=require("react");var Do=require("react"),dl=require("postprocessing"),ig=require("three"),ag=require("react/jsx-runtime"),M_=`
|
|
3667
|
+
`);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${Is}" height="${Is}" viewBox="0 0 ${Is} ${Is}">`,` <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 BC(e){let t=[],n=new Set;return e.forEach((r,i)=>{let o=LC(r.scene);if(o.length===0)return;let a=Qy(r.label||`model-${i+1}`);o.forEach((s,l)=>{let c=wh(s.name,`material-${l+1}`),d=o.length===1?`${a}-uv-layout.svg`:`${a}-uv-${c}-${l+1}.svg`;if(n.has(d)){let p=d.replace(/\.svg$/,""),u=2;for(;n.has(`${p}-${u}.svg`);)u+=1;d=`${p}-${u}.svg`}n.add(d),t.push({filename:d,materialName:s.name,meshCount:[...s.layers.values()].filter(p=>p.edges.size>0).length,svg:IC(s)})})}),t}async function _h(e,t="model"){let n=BC(e);if(n.length===0)return n;if(n.length===1)return Ds(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,Zy.strToU8)(o.svg)])),i=await qy(r);return Ds(new Blob([i],{type:"application/zip"}),`${Qy(t)}-uv-layouts.zip`),n}async function Jy(e,t="model"){return _h([{scene:e,label:t}],t)}function ev({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:r,downloadFilename:i,getAllLoadedModels:o,getAllLoadedModelUvSources:a,captureVideo:s}){let[l,c]=(0,kn.useState)(!1),[d,p]=(0,kn.useState)(!1),[u,h]=(0,kn.useState)(null),[m,b]=(0,kn.useState)(null),[f,g]=(0,kn.useState)("auto");(0,kn.useEffect)(()=>{if(!d)return;let R=()=>p(!1);return window.addEventListener("pointerdown",R),()=>window.removeEventListener("pointerdown",R)},[d]);let y=(0,kn.useCallback)(()=>{h(null),b(null),p(R=>!R)},[]),x=(0,kn.useCallback)(()=>{let R=o?.()??null;if(R&&R.length>0){p(!1),c(!0),yh({sources:R,downloadFilename:i,onComplete:()=>c(!1)});return}let C=e.current;C&&(p(!1),c(!0),yh({sources:[{scene:C,objectBindings:r,matRefs:t.current??{}}],downloadFilename:i,onComplete:()=>c(!1)}))},[i,t,r,e,o]),_=(0,kn.useCallback)(()=>{p(!1),bc(n.current).then(R=>{let C=document.createElement("a");C.href=R,C.download=`${i}.png`,document.body.appendChild(C),C.click(),document.body.removeChild(C)}).catch(R=>{console.error("Screenshot failed:",R)})},[i,n]),L=(0,kn.useCallback)(async()=>{let R=a?.()??null;try{let C;if(R&&R.length>0)C=await _h(R,i);else{let P=e.current;if(!P)return;C=await Jy(P,i)}if(C.length===0){h("This model does not contain UV coordinates.");return}h(null),p(!1)}catch(C){console.error("UV layout export failed:",C),h("Could not create the UV layout archive.")}},[i,e,a]),w=(0,kn.useCallback)(async R=>{p(!1),b(null);try{let C=await s({mode:R,format:f}),P=C.type==="image/gif"?"gif":C.type.startsWith("video/mp4")?"mp4":"webm",S=URL.createObjectURL(C),v=document.createElement("a");v.href=S,v.download=`${i}-${R}.${P}`,document.body.appendChild(v);try{v.click()}finally{v.remove(),setTimeout(()=>URL.revokeObjectURL(S),1e3)}}catch(C){if(C instanceof DOMException&&C.name==="AbortError")return;b(C instanceof Error?C.message:"Could not export the video."),p(!0)}},[s,i,f]);return{isDownloading:l,downloadMenuOpen:d,uvExportError:u,toggleDownloadMenu:y,handleDownloadMesh:x,handleDownloadScreenshot:_,handleDownloadUvLayout:L,handleDownloadVideo:w,videoFormat:f,setVideoFormat:g,videoExportError:m}}var Ze=require("react"),Yn=require("three");var De=require("three");function Uc(e){if(e.length!==3)return null;let t=new De.Vector3(...e[0]).sub(new De.Vector3(...e[1])),n=new De.Vector3(...e[2]).sub(new De.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 nv(e,t){if(!e.normal)return null;let n=new De.Vector3(...e.normal);if(n.lengthSq()===0)return null;n.normalize();let r=new De.Vector3(...t),i=r.clone().sub(new De.Vector3(...e.position)).dot(n);return{distance:Math.abs(i),projection:r.addScaledVector(n,-i).toArray()}}function jc(e){if(e.length<3)return{error:"Pick at least three points to finish the area."};let t=new De.Vector3(...e[0]),n=e.map(f=>new De.Vector3(...f).sub(t)),r=Math.max(...n.map(f=>f.length()));if(r===0)return{error:"Area points must be distinct."};let i=new De.Vector3;for(let f=1;f<n.length-1;f+=1){let g=n[f].clone().cross(n[f+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(f=>Math.abs(f.dot(i))>o))return{error:"Area points must lie on one plane."};let a=n.find(f=>f.length()>r*1e-10).clone().normalize(),s=i.clone().cross(a).normalize(),l=n.map(f=>new De.Vector2(f.dot(a),f.dot(s))),c=(f,g,y)=>(g.x-f.x)*(y.y-f.y)-(g.y-f.y)*(y.x-f.x),d=r*r*1e-10,p=(f,g,y)=>Math.abs(c(f,g,y))<=d&&y.x>=Math.min(f.x,g.x)-r*1e-10&&y.x<=Math.max(f.x,g.x)+r*1e-10&&y.y>=Math.min(f.y,g.y)-r*1e-10&&y.y<=Math.max(f.y,g.y)+r*1e-10;for(let f=0;f<l.length;f+=1){let g=l[f],y=l[(f+1)%l.length];if(g.distanceTo(y)<=r*1e-10)return{error:"Area points must be distinct."};for(let x=f+1;x<l.length;x+=1){if(x===f+1||f===0&&x===l.length-1)continue;let _=l[x],L=l[(x+1)%l.length],w=c(g,y,_),R=c(g,y,L),C=c(_,L,g),P=c(_,L,y);if(w*R<0&&C*P<0||p(g,y,_)||p(g,y,L)||p(_,L,g)||p(_,L,y))return{error:"Area edges must not cross or touch each other."}}}let u=0,h=0,m=0;for(let f=0;f<l.length;f+=1){let g=l[f],y=l[(f+1)%l.length],x=g.x*y.y-y.x*g.y;u+=x,h+=(g.x+y.x)*x,m+=(g.y+y.y)*x}if(Math.abs(u)<=d)return{error:"The polygon has no measurable area."};let b=t.clone().addScaledVector(a,h/(3*u)).addScaledVector(s,m/(3*u));return{area:Math.abs(u)/2,center:b.toArray(),triangles:De.ShapeUtils.triangulateShape(l,[])}}function Mh(e,t){if(e.length<2)return 0;let n=0;for(let r=1;r<e.length;r+=1)n+=new De.Vector3(...e[r]).distanceTo(new De.Vector3(...e[r-1]));return t&&(n+=new De.Vector3(...e[e.length-1]).distanceTo(new De.Vector3(...e[0]))),n}var kC=1e-5;function NC(e,t){let n=e.getAttribute("position"),r=e.getIndex(),i=n.count,o=Math.max(t,1e-9),a=(m,b,f)=>`${Math.round(m/o)}_${Math.round(b/o)}_${Math.round(f/o)}`,s=new Int32Array(i),l=[],c=new Map;for(let m=0;m<i;m+=1){let b=n.getX(m),f=n.getY(m),g=n.getZ(m),y=a(b,f,g),x=c.get(y);x===void 0&&(x=l.length,l.push(new De.Vector3(b,f,g)),c.set(y,x)),s[m]=x}let d=l.map(()=>new Map),p=(m,b)=>{if(m===b)return;let f=l[m].distanceTo(l[b]);d[m].has(b)||d[m].set(b,f),d[b].has(m)||d[b].set(m,f)},u=(r?r.count:i)/3,h=m=>r?r.getX(m):m;for(let m=0;m<u;m+=1)p(s[h(m*3)],s[h(m*3+1)]),p(s[h(m*3+1)],s[h(m*3+2)]),p(s[h(m*3+2)],s[h(m*3)]);return{weldedId:s,weldedPosition:l,neighbors:d}}function VC(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[c,d]of e[s]??[])r.has(c)||(r.set(c,l+d),a.push(c))}i=a}return r}function zC(e){let n=(Math.abs(e.y)<.9?new De.Vector3(0,1,0):new De.Vector3(1,0,0)).clone().cross(e).normalize(),r=e.clone().cross(n).normalize();return[n,r]}function UC(e,t,n){let[r,i]=zC(t),o=0,a=0,s=0;for(let b of n){let f=b.clone().sub(e),g=f.dot(r),y=f.dot(i);o+=g*g,a+=g*y,s+=y*y}let l=o+s,c=o*s-a*a,d=Math.sqrt(Math.max(0,l*l/4-c)),p=l/2+d,u=1,h=0;Math.abs(a)>1e-12?(u=p-s,h=a):s>o&&(u=0,h=1);let m=Math.hypot(u,h)||1;return r.clone().multiplyScalar(u/m).add(i.clone().multiplyScalar(h/m)).normalize()}function jC(e,t,n,r){let i=e.getAttribute("position"),o=e.getIndex(),a=i.count,s=(o?o.count:a)/3,l=u=>o?o.getX(u):u,c=u=>new De.Vector3(i.getX(u),i.getY(u),i.getZ(u)).applyMatrix4(t),d=u=>u.clone().sub(n).dot(r),p=[];for(let u=0;u<s;u+=1){let h=c(l(u*3)),m=c(l(u*3+1)),b=c(l(u*3+2)),f=d(h),g=d(m),y=d(b),x=[],_=(L,w,R,C)=>{w>0!=C>0&&x.push(L.clone().lerp(R,w/(w-C)))};_(h,f,m,g),_(m,g,b,y),_(b,y,h,f),x.length===2&&p.push([x[0],x[1]])}return p}function FC(e,t){let n=Math.max(t,1e-9),r=u=>`${Math.round(u.x/n)}_${Math.round(u.y/n)}_${Math.round(u.z/n)}`,i=new Map,o=[],a=u=>{let h=r(u),m=i.get(h);return m===void 0&&(m=o.length,o.push(u),i.set(h,m)),m},s=[],l=u=>{for(;s.length<=u;)s.push(new Map)};for(let[u,h]of e){let m=a(u),b=a(h);m!==b&&(l(m),l(b),s[m].set(b,(s[m].get(b)??0)+1),s[b].set(m,(s[b].get(m)??0)+1))}let c=(u,h)=>u<h?`${u}_${h}`:`${h}_${u}`,d=new Set,p=[];for(let u=0;u<s.length;u+=1)for(let h of s[u]?.keys()??[]){if(d.has(c(u,h)))continue;let m=[u],b=u,f=h;d.add(c(b,f));let g=0;for(;f!==u&&f>=0&&g<s.length+4;){m.push(f);let y=[...s[f].keys()].filter(_=>_!==b),x;if(y.length<=1)x=y[0];else{let _=o[f].clone().sub(o[b]).normalize(),L=-1/0;for(let w of y){let R=o[w].clone().sub(o[f]).normalize(),C=_.dot(R);C>L&&(L=C,x=w)}}if(x===void 0){f=-1;break}d.add(c(f,x)),b=f,f=x,g+=1}f===u&&m.length>=3&&p.push(m.map(y=>o[y]))}return p}function tv(e,t){let n=1/0;for(let r of e)n=Math.min(n,r.distanceTo(t));return n}function GC(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 rv(e,t,n,r,i){let o=jC(e,t,r,i);if(o.length===0)return{error:"Couldn't trace a loop around this point."};let a=FC(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=tv(s,r);for(let d of a.slice(1)){let p=tv(d,r);p<l&&(l=p,s=d)}let c=GC(s,r).map(d=>d.toArray());return{points:c,length:Mh(c,!0)}}function iv(e){if(!(e.object instanceof De.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 De.Float32BufferAttribute(new Float32Array(o.count*3),3),s=new De.Vector3;for(let l=0;l<o.count;l++)t.getVertexPosition(l,s),a.setXYZ(l,s.x,s.y,s.z);n=new De.BufferGeometry().setAttribute("position",a).setIndex(n.getIndex())}let r=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let o=new De.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*kC}}function ov(e,t=6){let n=iv(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=sv(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:c,weldedPosition:d,neighbors:p}=NC(i,a),u=i.getAttribute("position"),h=e.point.clone().applyMatrix4(o.clone().invert()),m=[r.a,r.b,r.c],b=m[0],f=1/0;for(let w of m){let C=new De.Vector3(u.getX(w),u.getY(w),u.getZ(w)).distanceTo(h);C<f&&(f=C,b=w)}let g=c[b],y=d[g].clone().applyMatrix4(o),x=VC(p,g,t),_=[];for(let w of x.keys())_.push(d[w].clone().applyMatrix4(o));if(_.length<6)return{error:"Not enough surface detail near this point to trace a loop. Try a different spot."};let L=UC(y,l,_);return rv(i,o,a,e.point.clone(),L)}function av(e,t=new De.Vector3(0,1,0)){let n=iv(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."}:rv(r,i,o,e.point.clone(),a)}function sv(e){if(!(e.object instanceof De.Mesh)||!e.face)return null;let t=e.object,n=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let r=new De.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 De.Vector3).applyMatrix4(n))}function lv(e){if(!(e.object instanceof De.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 cv(e,t,n,r,i,o=12){let a=sv(e),s=a?a[1].clone().sub(a[0]).cross(a[2].clone().sub(a[0])).normalize():null,l={position:e.point.toArray(),...s&&s.lengthSq()>0?{normal:s.toArray()}:{},...a?{faceVertices:a.map(u=>u.toArray())}:{}};if(!a||i==="none")return l;let c=u=>{let h=new De.Vector4(u.x,u.y,u.z,1).applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix);return h.w<=0||h.z/h.w<-1||h.z/h.w>1?null:{screen:new De.Vector2((h.x/h.w+1)*r.width/2,(1-h.y/h.w)*r.height/2),w:h.w}},d=a.map(c),p=o;if((i==="vertex"||i==="auto")&&(d.forEach((u,h)=>{let m=u?.screen.distanceTo(n)??1/0;m<=p&&(p=m,l.position=a[h].toArray(),l.snapped="vertex")}),l.snapped))return l;if(i==="edge"||i==="auto")for(let u=0;u<3;u+=1){let h=(u+1)%3,m=d[u],b=d[h];if(!m||!b)continue;let f=b.screen.clone().sub(m.screen);if(f.lengthSq()===0)continue;let g=Math.max(0,Math.min(1,n.clone().sub(m.screen).dot(f)/f.lengthSq())),y=m.screen.clone().addScaledVector(f,g).distanceTo(n);if(y<=p){p=y;let x=g*m.w/((1-g)*b.w+g*m.w);l.position=a[u].clone().lerp(a[h],x).toArray(),l.snapped="edge"}}return l}var Fc={tool:"distance",points:[],areaClosed:!1,error:null};function uv(e,t){if(t.type==="tool")return{...Fc,tool:t.tool};if(t.type==="clear")return{...Fc,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=jc(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&&Uc(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 HC(e){let t=new Yn.Box3().setFromObject(e),n=new Yn.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 WC(e){let t=new Yn.Box3().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new Yn.Vector3),r=t.getSize(new Yn.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,Ze.useState)(!1),[d,p]=(0,Ze.useReducer)(uv,Fc),[u,h]=(0,Ze.useState)("none"),[m,b]=(0,Ze.useState)(null),[f,g]=(0,Ze.useState)(!1),[y,x]=(0,Ze.useState)(null),[_,L]=(0,Ze.useState)(null),w=(0,Ze.useRef)(!1),R=(0,Ze.useRef)(0),C=(0,Ze.useRef)(null),P=(0,Ze.useRef)(null);w.current=l&&s;let S=(0,Ze.useCallback)(J=>{J.updateMatrixWorld(!0),x(HC(J)),L(WC(J))},[]),v=(0,Ze.useCallback)(()=>{p({type:"clear"}),b(null)},[]),A=(0,Ze.useCallback)(J=>{p({type:"tool",tool:J}),b(null)},[]),E=(0,Ze.useCallback)(()=>p({type:"undo"}),[]),B=(0,Ze.useCallback)(()=>p({type:"finishArea"}),[]),N=(0,Ze.useCallback)(()=>c(J=>!J),[]),I=(0,Ze.useCallback)(()=>g(J=>!J),[]),F=(0,Ze.useCallback)(J=>{!w.current||J.button!==0||(C.current={x:J.clientX,y:J.clientY})},[]),O=(0,Ze.useCallback)((J,le)=>{let H=e.current,X=t.current?.camera,te=n.current;if(!H||!X||!te)return null;let he=H.getBoundingClientRect();if(!he.width||!he.height)return null;te.updateMatrixWorld(!0),X.updateMatrixWorld(!0);let Ee=new Yn.Vector2(J-he.left,le-he.top),$=new Yn.Raycaster;return $.setFromCamera(new Yn.Vector2(Ee.x/he.width*2-1,1-Ee.y/he.height*2),X),$.intersectObject(te,!0).find(lv)??null},[e,t,n]),T=(0,Ze.useCallback)((J,le)=>{let H=e.current,X=t.current?.camera,te=O(J,le);if(!te||!H||!X)return null;let he=H.getBoundingClientRect(),Ee=new Yn.Vector2(J-he.left,le-he.top);return cv(te,X,Ee,he,u)},[e,t,O,u]),z=(0,Ze.useCallback)(()=>{P.current!==null&&cancelAnimationFrame(P.current),P.current=null,b(null)},[]),q=(0,Ze.useCallback)(J=>{if(!w.current||u==="none"||J.buttons!==0||J.target.closest("button, input, select, label, textarea, .ri-measureTools")){z();return}P.current!==null&&cancelAnimationFrame(P.current);let{clientX:le,clientY:H}=J;P.current=requestAnimationFrame(()=>{P.current=null;let X=T(le,H);b(X?.snapped?X:null)})},[z,T,u]),Z=(0,Ze.useCallback)(J=>{if(!w.current)return;let le=C.current;if(C.current=null,le&&Math.hypot(J.clientX-le.x,J.clientY-le.y)>6||J.target.closest("button, input, select, label, textarea, .ri-measureTools"))return;if(d.tool==="wrap"||d.tool==="wrapHorizontal"){let te=O(J.clientX,J.clientY);if(!te)return;let he=d.tool==="wrapHorizontal"?av(te):ov(te);if("error"in he){p({type:"fail",error:he.error});return}let Ee=he.points.map(($,se)=>({id:R.current+se+1,position:$}));R.current+=Ee.length,p({type:"wrapResult",points:Ee});return}let X=T(J.clientX,J.clientY);X&&(R.current+=1,p({type:"place",point:{...X,id:R.current}}))},[d.tool,T,O]);return(0,Ze.useEffect)(()=>{v(),x(null),L(null)},[r,v]),(0,Ze.useEffect)(()=>{v()},[i,o,v]),(0,Ze.useEffect)(()=>(z(),z),[z,l,u]),(0,Ze.useEffect)(()=>{s||(c(!1),z())},[s,z]),(0,Ze.useEffect)(()=>{let J=n.current;!a||!J||S(J)},[o,a,S,n]),{measureMode:l,measureModeRef:w,measurePoints:d.points,measurementTool:d.tool,areaClosed:d.areaClosed,measurementError:d.error,selectMeasurementTool:A,undoMeasurementPoint:E,finishMeasureArea:B,snapMode:u,setSnapMode:h,snapPreview:m,handleMeasurePointerMove:q,clearSnapPreview:z,showDimensions:f,measureBox:y,modelBounds:_,refreshBounds:S,clearMeasurements:v,toggleMeasureMode:N,toggleDimensions:I,handleMeasurePointerDown:F,handleMeasureClick:Z}}var mv=require("react-dom"),fv=require("@react-three/xr"),gv=require("lucide-react"),ut=require("react");function pv(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 $n=require("react/jsx-runtime"),hv={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function bv({enableXR:e,usdzUrl:t,mobileHandoffUrl:n,engagement:r}){let i=ve(),o=(0,ut.useRef)(null),a=(0,ut.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let T=navigator.xr;if(!T||typeof T.isSessionSupported!="function"||typeof T.addEventListener!="function")return null;try{return(0,fv.createXRStore)({emulate:!1})}catch{return null}},[e]),[s,l]=(0,ut.useState)(!1),[c,d]=(0,ut.useState)(!1),[p,u]=(0,ut.useState)(!0),[h,m]=(0,ut.useState)(null),[b,f]=(0,ut.useState)(!1),[g,y]=(0,ut.useState)(!1),[x,_]=(0,ut.useState)(hv),[L,w]=(0,ut.useState)(!1),R=(0,ut.useMemo)(()=>e&&!!t?.trim()&&ih(),[e,t]);(0,ut.useEffect)(()=>{u(zb())},[]);let C=(0,ut.useCallback)(()=>{if(typeof window>"u")return null;try{let T=new URL(n?.trim()||window.location.href,window.location.href);return T.protocol==="http:"||T.protocol==="https:"?T.toString():null}catch{return null}},[n]);(0,ut.useEffect)(()=>{if(!e||p){m(null),f(!1);return}m(C())},[e,p,C]),(0,ut.useEffect)(()=>{if(a)return a.subscribe(T=>y(T.session!=null&&T.mode==="immersive-ar"))},[a]),(0,ut.useEffect)(()=>{if(a)return pv(a,r)},[a,r]),(0,ut.useEffect)(()=>{w(!1),_(hv)},[g]),(0,ut.useEffect)(()=>{if(!e||typeof navigator>"u")return;let T=navigator.xr;if(!T?.isSessionSupported)return;let z=!1;return T.isSessionSupported("immersive-ar").then(q=>!z&&l(q)).catch(()=>{}),T.isSessionSupported("immersive-vr").then(q=>!z&&d(q)).catch(()=>{}),()=>{z=!0}},[e]);let P=(0,ut.useCallback)(()=>{let T=C();T&&(r.requestARLaunch("mobile-handoff"),m(T),f(!0))},[C,r]),S=(0,ut.useCallback)(()=>f(!1),[]),v=(0,ut.useCallback)(()=>{let T=t?.trim();if(!T)return;r.requestARLaunch("quick-look");let z=document.createElement("a");z.setAttribute("rel","ar"),z.href=T,z.style.display="none";let q=document.createElement("img");q.alt="",q.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",z.appendChild(q),document.body.appendChild(z),z.click(),z.remove()},[t,r]),A=(0,ut.useCallback)(T=>{_(T),T.isPlacementMode||w(!1)},[]),E=(0,ut.useCallback)(T=>{w(!1),T?o.current?.finishPlacementMode():o.current?.cancelPlacementMode()},[]),B=(0,ut.useCallback)(T=>{T.preventDefault(),w(!0),o.current?.startPlacementMode()},[]);(0,ut.useEffect)(()=>{if(!L)return;let T=()=>E(!0),z=()=>E(!1);return window.addEventListener("pointerup",T),window.addEventListener("pointercancel",z),()=>{window.removeEventListener("pointerup",T),window.removeEventListener("pointercancel",z)}},[E,L]);let N=x.isModelPlaced?x.isPlacementMode?x.canPlace?i("arReleaseToPlace"):i("arFindSurface"):null:x.canPlace?null:i("arFindSurface"),I=x.isModelPlaced&&!x.isPlacementMode?i("arGestureHint"):null,F=a?.getState().domOverlayRoot??null,O=g&&F?(0,mv.createPortal)((0,$n.jsxs)($n.Fragment,{children:[I&&(0,$n.jsx)("div",{className:"ri-arHintOverlay",children:(0,$n.jsx)("div",{className:"ri-arHint",children:I})}),(0,$n.jsx)("div",{className:"ri-arOverlay",children:(0,$n.jsxs)("div",{className:"ri-arControls",children:[N&&(0,$n.jsx)("div",{className:"ri-arStatus",children:N}),x.isModelPlaced&&(0,$n.jsxs)("button",{type:"button",className:`ri-arActionButton ${L?"ri-arActionButton--active":""}`,onPointerDown:T=>B(T.nativeEvent),"aria-pressed":L,children:[(0,$n.jsx)(gv.MapPin,{size:14}),i("arRelocate")]}),!x.isModelPlaced&&x.canPlace&&(0,$n.jsx)("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>o.current?.placeCurrent(),children:i("tapToPlace")})]})})]}),F):null;return{xrStore:a,presenterRef:o,arSupported:s,vrSupported:c,quickLookSupported:R,resolvedMobileHandoffUrl:h,isMobileHandoffOpen:b,arOverlay:O,openMobileHandoff:P,closeMobileHandoff:S,openQuickLook:v,handleARStateChange:A}}var ks=require("@react-three/fiber"),Wv=require("@react-three/drei"),Xv=require("@react-three/xr"),hi=require("three"),Pr=require("react");function yv(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var vv=["x","y","z"],Ro={enabled:!1,axis:"y",position:.5,flip:!1},XC={clips:[],autoplayClip:null},qC={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}},Oo={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:qC,animations:XC,annotations:[]};var xn=require("@react-three/fiber"),xv=require("@react-three/drei"),Sh=require("@react-three/xr"),Gc=require("three"),Rn=require("react"),Lo=require("react/jsx-runtime");function wv({renderMode:e,suspended:t=!1}){let{scene:n}=(0,xn.useThree)(),r=(0,xn.useThree)(s=>s.setFrameloop),i=(0,Sh.useXR)(s=>s.session!=null),o=(0,Sh.useXR)(s=>s.mode==="immersive-ar"),a=(0,Rn.useRef)(void 0);return(0,Rn.useEffect)(()=>{r(t?"never":i?"always":e)},[i,e,t,r]),(0,Rn.useEffect)(()=>{o?(a.current=n.background,n.background=null):a.current!==void 0&&(n.background=a.current,a.current=void 0)},[o,n]),(0,xn.useFrame)(()=>{o&&n.background!==null&&(n.background=null)}),null}function _v({onPresentingChange:e}){let t=(0,xn.useThree)(i=>i.gl),n=(0,Rn.useRef)(null);(0,Rn.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,Rn.useRef)(0);return(0,xn.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 Mv({active:e}){let t=(0,xn.useThree)(n=>n.invalidate);return(0,Rn.useEffect)(()=>{e&&t()},[e,t]),(0,xn.useFrame)(()=>{e&&t()}),null}function Sv(e){let t=(0,xn.useThree)(r=>r.gl),n=(0,Rn.useRef)(t.autoClear);return(0,xn.useFrame)(()=>{n.current=t.autoClear,t.autoClear=!0},-1),(0,Lo.jsxs)(Lo.Fragment,{children:[(0,Lo.jsx)(xv.ContactShadows,{...e}),(0,Lo.jsx)(YC,{saved:n})]})}function YC({saved:e}){let t=(0,xn.useThree)(n=>n.gl);return(0,xn.useFrame)(()=>{t.autoClear=e.current}),null}function Cv({color:e}){let{scene:t,invalidate:n}=(0,xn.useThree)();return(0,Rn.useEffect)(()=>{let r=t.background;return t.background=e?new Gc.Color(e):null,n(),()=>{t.background=r}},[t,e,n]),null}function Tv({rotation:e}){let{scene:t,invalidate:n}=(0,xn.useThree)();return(0,Rn.useLayoutEffect)(()=>{let r=e*Math.PI/180;t.environmentRotation.set(0,r,0),t.backgroundRotation.set(0,r,0)}),(0,Rn.useEffect)(()=>{n()},[e,n]),null}function Pv({cameraConfig:e}){let{camera:t,invalidate:n}=(0,xn.useThree)();return(0,Rn.useEffect)(()=>{if(!(t instanceof Gc.PerspectiveCamera))return;let r=e?.fov;typeof r=="number"&&t.fov!==r&&(t.fov=r,t.updateProjectionMatrix(),n())},[t,e,n]),null}var Pa=require("@react-three/fiber"),Pe=require("@react-three/postprocessing"),pi=require("postprocessing"),or=require("three"),St=require("react");var Ca=require("react"),Hc=require("postprocessing"),Av=require("three"),Rv=require("react/jsx-runtime"),$C=`
|
|
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
|
-
`,ed=class extends dl.Effect{constructor(t=1){super("ExposureEffect",M_,{blendFunction:dl.BlendFunction.NORMAL,uniforms:new Map([["exposure",new ig.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},og=(0,Do.forwardRef)(function({exposure:t},n){let r=(0,Do.useMemo)(()=>new ed(t),[]);return r.exposure=t,(0,Do.useImperativeHandle)(n,()=>r,[r]),(0,ag.jsx)("primitive",{object:r,dispose:null})});var Vi=require("@react-three/fiber"),sg=ym(require("@react-three/postprocessing")),lg=require("postprocessing"),qn=require("three"),Xn=require("react"),ug=require("react/jsx-runtime"),C_=sg.LensFlareEffect;function cg({config:e}){let t=(0,Vi.useThree)(m=>m.camera),n=(0,Vi.useThree)(m=>m.raycaster),r=(0,Vi.useThree)(m=>m.scene),i=(0,Vi.useThree)(m=>m.viewport),o=(0,Xn.useRef)(null),a=(0,Xn.useRef)(new qn.Vector3),s=(0,Xn.useRef)(new qn.Vector2),c=(0,Xn.useMemo)(()=>new qn.Vector3(...e.lensPosition),[e.lensPosition]),l=(0,Xn.useMemo)(()=>new qn.Color(e.colorGain??"#141414"),[e.colorGain]),d=(0,Xn.useMemo)(()=>new qn.Vector2(0,0),[]),u=(0,Xn.useMemo)(()=>new C_({blendFunction:lg.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:c,screenRes:d,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:l,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[l,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,c,d]);return(0,Xn.useEffect)(()=>(o.current=u,()=>{u.dispose(),o.current=null}),[u]),(0,Xn.useEffect)(()=>{let m=u.uniforms.get("screenRes");m&&(m.value.x=i.width,m.value.y=i.height)},[u,i]),(0,Vi.useFrame)((m,h)=>{let f=o.current;if(!f)return;let b=f.uniforms.get("lensPosition"),v=f.uniforms.get("opacity");if(!b||!v)return;let y=1;if(a.current.copy(c).project(t),a.current.z>1)return;b.value.x=a.current.x,b.value.y=a.current.y,s.current.x=a.current.x,s.current.y=a.current.y,n.setFromCamera(s.current,t);let S=n.intersectObjects(r.children,!0),{object:_}=S[0]||{};_&&(_.userData?.lensflare==="no-occlusion"?y=0:_ instanceof qn.Mesh&&(_.material.uniforms?._transmission?.value>.2||_.material._transmission&&_.material._transmission>.2?y=.2:_.material.transparent&&(y=_.material.opacity))),v.value=qn.MathUtils.damp(v.value,y,12,h)}),(0,ug.jsx)("primitive",{object:u,dispose:null})}var pl=require("@react-three/postprocessing"),bn=require("postprocessing"),dg=require("three");function pg(e){return e==="linear"?bn.ToneMappingMode.LINEAR:e==="reinhard"?bn.ToneMappingMode.REINHARD:bn.ToneMappingMode.ACES_FILMIC}function hl(e){switch(e){case"verySmall":return bn.KernelSize.VERY_SMALL;case"small":return bn.KernelSize.SMALL;case"medium":return bn.KernelSize.MEDIUM;case"large":return bn.KernelSize.LARGE;case"veryLarge":return bn.KernelSize.VERY_LARGE;case"huge":return bn.KernelSize.HUGE}}function hg(e){switch(e){case"constantMild":return bn.GlitchMode.CONSTANT_MILD;case"constantWild":return bn.GlitchMode.CONSTANT_WILD;default:return bn.GlitchMode.SPORADIC}}function td(e){let t=new dg.Color(e);return[t.r,t.g,t.b,1]}function mg(e){return e==="radial"?pl.RampType.Radial:e==="mirroredLinear"?pl.RampType.MirroredLinear:pl.RampType.Linear}var Ge=require("react/jsx-runtime"),zi={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new pr.Color(kr.color).getHex(),hiddenEdgeColor:new pr.Color(kr.color).multiplyScalar(.35).getHex(),kernelSize:oi.KernelSize.VERY_SMALL,blur:!1,xRay:!1};function T_(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var nd=[],P_=(0,Ft.memo)(function({sceneConfig:t,selectedObjectRef:n,highlightOnHover:r=!1,disabled:i=!1,onOutlineEffect:o}){let a=(0,Ba.useThree)(T=>T.scene),s=(0,Ba.useThree)(T=>T.gl),c=(0,Ft.useRef)(null),l=t?.postProcessing,d=n??null,u=l?.outline.enabled===!0,m=u||r,[h,f]=(0,Ft.useState)(()=>s.xr?.isPresenting??!1);(0,Ft.useEffect)(()=>{let T=s.xr;if(!T)return;let P=()=>f(!0),B=()=>f(!1);return T.addEventListener("sessionstart",P),T.addEventListener("sessionend",B),f(T.isPresenting),()=>{T.removeEventListener("sessionstart",P),T.removeEventListener("sessionend",B)}},[s]);let b=a.children.filter(T=>T.isLight),v=(0,Ft.useMemo)(()=>new pr.Vector2(l?.chromaticAberration.offsetX??.002,l?.chromaticAberration.offsetY??.002),[l?.chromaticAberration.offsetX,l?.chromaticAberration.offsetY]),y=(0,Ft.useMemo)(()=>new pr.Color(l?.outline.visibleEdgeColor??"#ffffff").getHex(),[l?.outline.visibleEdgeColor]),S=(0,Ft.useMemo)(()=>new pr.Color(l?.outline.hiddenEdgeColor??"#22090a").getHex(),[l?.outline.hiddenEdgeColor]),_=(0,Ft.useMemo)(()=>td(l?.ramp.startColor??"#000000"),[l?.ramp.startColor]),k=(0,Ft.useMemo)(()=>td(l?.ramp.endColor??"#ffffff"),[l?.ramp.endColor]);return!l||h||i?null:(0,Ge.jsxs)(Ge.Fragment,{children:[l.godRays.enabled===!0&&(0,Ge.jsxs)("mesh",{ref:c,position:l.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,Ge.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,Ge.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,Ge.jsxs)(xe.EffectComposer,{multisampling:0,enableNormalPass:l.ssao.enabled===!0,autoClear:!1,children:[l.smaa.enabled===!0&&(0,Ge.jsx)(xe.SMAA,{}),l.ssao.enabled===!0&&(0,Ge.jsx)(xe.SSAO,{samples:l.ssao.samples,rings:l.ssao.rings,intensity:l.ssao.intensity,radius:l.ssao.radius,bias:l.ssao.bias,luminanceInfluence:l.ssao.luminanceInfluence,fade:l.ssao.fade,minRadiusScale:l.ssao.minRadiusScale,worldDistanceThreshold:l.ssao.worldDistanceThreshold,worldDistanceFalloff:l.ssao.worldDistanceFalloff,worldProximityThreshold:l.ssao.worldProximityThreshold,worldProximityFalloff:l.ssao.worldProximityFalloff}),l.autofocus.enabled===!0&&(0,Ge.jsx)(xe.Autofocus,{focusDistance:l.autofocus.focusDistance,focusRange:l.autofocus.focusRange,focalLength:l.autofocus.focalLength,bokehScale:l.autofocus.bokehScale,target:l.autofocus.target,mouse:l.autofocus.mouse,debug:l.autofocus.debug||void 0,manual:l.autofocus.manual,smoothTime:l.autofocus.smoothTime}),l.autofocus.enabled!==!0&&l.depthOfField.enabled===!0&&(0,Ge.jsx)(xe.DepthOfField,{focusDistance:l.depthOfField.focusDistance,focusRange:l.depthOfField.focusRange,focalLength:l.depthOfField.focalLength,bokehScale:l.depthOfField.bokehScale}),l.bloom.enabled===!0&&(0,Ge.jsx)(xe.Bloom,{intensity:l.bloom.intensity,luminanceThreshold:l.bloom.luminanceThreshold,luminanceSmoothing:l.bloom.luminanceSmoothing,mipmapBlur:l.bloom.mipmapBlur,radius:l.bloom.radius,levels:l.bloom.levels}),l.selectiveBloom.enabled===!0&&(0,Ge.jsx)(xe.SelectiveBloom,{selection:d??void 0,lights:b,selectionLayer:l.selectiveBloom.selectionLayer,intensity:l.selectiveBloom.intensity,luminanceThreshold:l.selectiveBloom.luminanceThreshold,luminanceSmoothing:l.selectiveBloom.luminanceSmoothing,kernelSize:hl(l.selectiveBloom.kernelSize),mipmapBlur:l.selectiveBloom.mipmapBlur,inverted:l.selectiveBloom.inverted,ignoreBackground:l.selectiveBloom.ignoreBackground}),m&&(0,Ge.jsx)(xe.Outline,{ref:o,selection:nd,selectionLayer:l.outline.selectionLayer,blendFunction:oi.BlendFunction.SCREEN,edgeStrength:u?l.outline.edgeStrength:zi.edgeStrength,pulseSpeed:u?l.outline.pulseSpeed:zi.pulseSpeed,visibleEdgeColor:u?y:zi.visibleEdgeColor,hiddenEdgeColor:u?S:zi.hiddenEdgeColor,kernelSize:u?hl(l.outline.kernelSize):zi.kernelSize,blur:u?l.outline.blur:zi.blur,xRay:u?l.outline.xRay:zi.xRay}),l.chromaticAberration.enabled===!0&&(0,Ge.jsx)(xe.ChromaticAberration,{offset:v,radialModulation:l.chromaticAberration.radialModulation,modulationOffset:l.chromaticAberration.modulationOffset}),l.colorAverage.enabled===!0&&(0,Ge.jsx)(xe.ColorAverage,{}),l.dotScreen.enabled===!0&&(0,Ge.jsx)(xe.DotScreen,{angle:l.dotScreen.angle,scale:l.dotScreen.scale}),l.glitch.enabled===!0&&(0,Ge.jsx)(xe.Glitch,{mode:hg(l.glitch.mode),delay:new pr.Vector2(l.glitch.delay[0],l.glitch.delay[1]),duration:new pr.Vector2(l.glitch.duration[0],l.glitch.duration[1]),strength:new pr.Vector2(l.glitch.strength[0],l.glitch.strength[1]),chromaticAberrationOffset:new pr.Vector2(l.glitch.chromaticAberrationOffset[0],l.glitch.chromaticAberrationOffset[1]),columns:l.glitch.columns,ratio:l.glitch.ratio,active:!0}),l.grid.enabled===!0&&(0,Ge.jsx)(xe.Grid,{scale:l.grid.scale,lineWidth:l.grid.lineWidth}),l.lensflare.enabled===!0&&(0,Ge.jsx)(cg,{config:l.lensflare}),l.godRays.enabled===!0&&(0,Ge.jsx)(xe.GodRays,{sun:c,samples:l.godRays.samples,density:l.godRays.density,decay:l.godRays.decay,weight:l.godRays.weight,exposure:l.godRays.exposure,clampMax:l.godRays.clampMax,blur:l.godRays.blur,kernelSize:hl(l.godRays.kernelSize)}),l.noise.enabled===!0&&(0,Ge.jsx)(xe.Noise,{premultiply:l.noise.premultiply,opacity:l.noise.opacity,blendFunction:oi.BlendFunction.ADD}),l.brightnessContrast.enabled===!0&&(0,Ge.jsx)(xe.BrightnessContrast,{brightness:l.brightnessContrast.brightness,contrast:l.brightnessContrast.contrast}),l.hueSaturation.enabled===!0&&(0,Ge.jsx)(xe.HueSaturation,{hue:l.hueSaturation.hue,saturation:l.hueSaturation.saturation}),l.toneMapping.enabled===!0&&(0,Ge.jsx)(og,{exposure:l.toneMapping.exposure}),l.vignette.enabled===!0&&(0,Ge.jsx)(xe.Vignette,{eskil:l.vignette.eskil,offset:l.vignette.offset,darkness:l.vignette.darkness,blendFunction:oi.BlendFunction.NORMAL}),l.toneMapping.enabled===!0&&(0,Ge.jsx)(xe.ToneMapping,{mode:pg(l.toneMapping.mode),resolution:l.toneMapping.resolution,whitePoint:l.toneMapping.whitePoint,middleGrey:l.toneMapping.middleGrey,minLuminance:l.toneMapping.minLuminance,averageLuminance:l.toneMapping.averageLuminance,adaptationRate:l.toneMapping.adaptationRate}),l.sepia.enabled===!0&&(0,Ge.jsx)(xe.Sepia,{intensity:l.sepia.intensity,blendFunction:oi.BlendFunction.NORMAL}),l.scanline.enabled===!0&&(0,Ge.jsx)(xe.Scanline,{density:l.scanline.density,blendFunction:oi.BlendFunction.OVERLAY}),l.pixelation.enabled===!0&&(0,Ge.jsx)(xe.Pixelation,{granularity:l.pixelation.granularity}),l.ramp.enabled===!0&&(0,Ge.jsx)(xe.Ramp,{rampType:mg(l.ramp.rampType),rampStart:l.ramp.rampStart,rampEnd:l.ramp.rampEnd,startColor:_,endColor:k,opacity:l.ramp.rampMask?1:l.ramp.opacity??.5,rampBias:l.ramp.rampBias,rampGain:l.ramp.rampGain,rampMask:l.ramp.rampMask,rampInvert:l.ramp.rampInvert})]})]})});function E_(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 A_(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function fg({hoveredObjectRef:e,...t}){let n=(0,Ba.useThree)(c=>c.scene),r=(0,Ba.useThree)(c=>c.invalidate),[i,o]=(0,Ft.useState)(null),a=(0,Ft.useCallback)(c=>o(c),[]),s=(0,Ft.useRef)({effect:null,objects:nd});return(0,Ft.useEffect)(()=>{if(!i)return;let l=t.sceneConfig?.postProcessing?.outline.enabled===!0?T_(n):e&&E_(e)?[e]:nd;s.current.effect===i&&A_(s.current.objects,l)||(s.current={effect:i,objects:l},i.selection.set(l),r())}),(0,Ge.jsx)(P_,{...t,onOutlineEffect:a})}var Ht=require("react/jsx-runtime"),R_=1.5;function L_({captureRef:e}){let{gl:t,scene:n,camera:r,invalidate:i}=(0,ml.useThree)();return(0,hr.useEffect)(()=>{if(e)return e.current={gl:t,scene:n,camera:r,invalidate:i},()=>{e.current=null}},[e,t,n,r,i]),null}function rd({children:e,camera:t,backgroundColor:n,shadows:r=!0,sceneConfig:i,selectedObjectRef:o,hoveredObjectRef:a,highlightOnHover:s,renderMode:c="demand",maxDpr:l=2,xrStore:d,rendererCaptureRef:u,preserveDrawingBuffer:m=!1,reduceGpuLoad:h,suspended:f=!1,onRendererCreated:b}){let v=h??Qu(),y=v?Math.min(l,R_):l,S=r&&!v,_=(0,hr.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,hr.useMemo)(()=>{if(n)return n;let M=i?.background;if(M?.enabled){if(M.type==="color")return M.color;if(M.type==="image"&&M.imageUrl.trim()||M.type==="environment")return null}return"#1c1c1d"},[n,i]),T=(0,hr.useMemo)(()=>{let M=i?.postProcessing;return M?!!(M.glitch.enabled||M.noise.enabled||M.lensflare.enabled&&M.lensflare.animated):!1},[i?.postProcessing]),[P,B]=(0,hr.useState)(!1),D=i?.environment,O=i?.groundShadows,E=(0,hr.useMemo)(()=>{if(!D)return null;if(D.source==="custom"){let M=D.customEnvironmentUrl.trim();return Kf(M)?{files:M}:null}return{preset:D.preset}},[D]),g=(0,Ht.jsxs)(Ht.Fragment,{children:[(0,Ht.jsx)(L_,{captureRef:u}),(0,Ht.jsx)(rg,{cameraConfig:t}),(0,Ht.jsx)(eg,{active:T}),(0,Ht.jsx)(tg,{color:k}),E?(0,Ht.jsx)(Co,{onError:M=>console.warn("Failed to load environment map:",M),children:(0,Ht.jsx)(hr.Suspense,{fallback:null,children:(0,Ht.jsx)(fl.Environment,{...E,environmentIntensity:D?.intensity??.25,backgroundIntensity:D?.intensity??.25,background:i?.background.enabled===!0&&i.background.type==="environment"})})}):null,(0,Ht.jsx)(ng,{rotation:D?.rotation??0}),d&&(0,Ht.jsx)(Jf,{onPresentingChange:B}),O?.enabled&&O.mode==="shadowCatcher"&&!P&&(0,Ht.jsx)(fl.ContactShadows,{position:[0,O.height,0],scale:O.size,opacity:O.intensity,blur:O.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,Ht.jsx)(fg,{sceneConfig:i,selectedObjectRef:o,hoveredObjectRef:a,highlightOnHover:s,disabled:v})]});return(0,Ht.jsx)(ml.Canvas,{frameloop:f?"never":c,onCreated:({gl:M})=>b?.(M),dpr:[1,y],shadows:S?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:_,camera:t??{fov:50},gl:{preserveDrawingBuffer:m,toneMapping:bg.NoToneMapping,toneMappingExposure:1},children:d?(0,Ht.jsxs)(gg.XR,{store:d,children:[(0,Ht.jsx)(Qf,{renderMode:c,suspended:f}),g]}):g})}var bl=require("@react-three/drei"),ka=require("three"),ai=require("react");var gl=e=>e*Math.PI/180;function yg(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:gl(e?.minPolarAngle??0),maxPolarAngle:gl(e?.maxPolarAngle??180),minAzimuthAngle:gl(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:gl(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}var id=require("react/jsx-runtime");function od({controlsRef:e,onCameraChange:t,cameraLimits:n,controllerType:r="orbit",onPointerLockExit:i}){let o=r==="orbit",a=(0,ai.useRef)(null);return(0,ai.useEffect)(()=>{if(!o)return a.current?.lock(),()=>{a.current?.unlock()}},[o]),(0,ai.useEffect)(()=>{o&&document.pointerLockElement&&document.exitPointerLock()},[o]),(0,ai.useEffect)(()=>{if(o)return;let s=()=>{document.pointerLockElement||i?.()};return document.addEventListener("pointerlockchange",s),()=>{document.removeEventListener("pointerlockchange",s)}},[o,i]),(0,ai.useEffect)(()=>{if(!o||!t||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let c=()=>{t(s.camera,s)};return s.addEventListener("update",c),()=>{s.removeEventListener("update",c)}},[o,e,t]),(0,ai.useEffect)(()=>{if(!o||!e||typeof e!="object"||!("current"in e))return;let s=e.current;if(!s)return;let c=yg(n);s.minDistance=c.minDistance,s.maxDistance=c.maxDistance,s.minPolarAngle=c.minPolarAngle,s.maxPolarAngle=c.maxPolarAngle,s.minAzimuthAngle=c.minAzimuthAngle,s.maxAzimuthAngle=c.maxAzimuthAngle,s.boundaryEnclosesCamera=c.boundaryEnclosesCamera,s.boundaryFriction=c.boundaryFriction,s.setBoundary(c.panBoundary?new ka.Box3(new ka.Vector3(...c.panBoundary[0]),new ka.Vector3(...c.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,id.jsx)(bl.CameraControls,{ref:e,makeDefault:!0,smoothTime:.3,dollyToCursor:!0}):(0,id.jsx)(bl.PointerLockControls,{ref:a,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}var mr=require("react"),Va=require("@react-three/fiber"),xg=require("three");var ad=Symbol("react-immersive.model-node-id");function O_(e,t){Object.defineProperty(e,ad,{value:t,configurable:!0})}function si(e){let t=new Map;e.traverse(c=>{if(!c.name)return;let l=t.get(c.name);l?l.push(c):t.set(c.name,[c])});let n=Object.create(null),r=new WeakMap,i=new Map,o=new Set(Array.from(t,([c,l])=>l.length===1?c:null).filter(c=>c!==null)),a=new Set,s=(c,l)=>{O_(c,l),n[l]=c,r.set(c,l),a.add(l)};for(let[c,l]of t)l.length===1&&s(l[0],c);for(let[c,l]of t){if(l.length<2)continue;let d=[];l.forEach((u,m)=>{let h=`${c} [${m+1}]`,f=h,b=2;for(;o.has(f)||a.has(f);)f=`${h}.${b++}`;s(u,f),d.push(f)}),i.set(c,d)}return{nodesById:n,idByNode:r,duplicateNames:i}}function Na(e){return e[ad]??e.name??null}function Vr(e,t){let n=null,r=[];return e.traverse(i=>{i[ad]===t&&(n=i),i.name===t&&r.push(i)}),n??(r.length===1?r[0]:null)}var Yn=require("react/jsx-runtime");function _g(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 D_(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],c=o*2;return{position:[n+s[0]*c,r+s[1]*c,i+s[2]*c],target:e.center,extent:o,near:Math.max(o/100,.001),far:c+o*2}}function I_(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 B_(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var k_={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}]},N_={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function vg({light:e,shadows:t,shadowsEnabled:n,environmentRotation:r,modelBounds:i,objectBindings:o,nodeRefs:a}){let s=(0,mr.useRef)(null),c=(0,mr.useRef)(null),l=(0,mr.useRef)(null),d=(0,Va.useThree)(y=>y.camera),u=(0,Va.useThree)(y=>y.scene),m=(0,mr.useMemo)(()=>new xg.Vector3,[]),h=(0,mr.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:_g(e.position,r),[e.position,e.attachedToCamera,e.attachment,r]);(0,Va.useFrame)(()=>{let y=s.current??c.current??l.current;if(!y)return;if(e.attachedToCamera){y.position.copy(d.position);return}let S=e.attachment;if(!S)return;let _=o?Ot(o,S.objectId):null,T=(_?o?.[_]:void 0)?.modelObjectId??S.objectId,P=(_?a?.current[_]:void 0)??Vr(u,T);P&&(m.fromArray(S.offset),P.localToWorld(m),y.position.copy(m))});let f=n&&t.enabled&&e.castShadow,b=(0,mr.useMemo)(()=>e.type==="directional"&&f&&i&&!e.attachedToCamera?D_(i,h):null,[e.type,e.attachedToCamera,f,i,h]),v=(0,mr.useMemo)(()=>e.type==="spot"&&f&&i&&!e.attachedToCamera?I_(i,h):null,[e.type,e.attachedToCamera,f,i,h]);return(0,mr.useEffect)(()=>{let y=s.current??l.current;if(!y)return;let[S,_,k]=B_(e,f,i);y.target.position.set(S,_,k),y.target.updateMatrixWorld()},[e,f,i]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,Yn.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:b?.position??h,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,"shadow-camera-left":-(b?.extent??8),"shadow-camera-right":b?.extent??8,"shadow-camera-top":b?.extent??8,"shadow-camera-bottom":-(b?.extent??8)}):e.type==="point"?(0,Yn.jsx)("pointLight",{ref:c,color:e.color,intensity:e.intensity,position:h,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,Yn.jsx)("spotLight",{ref:l,color:e.color,intensity:e.intensity,position:h,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":v?.near??.5,"shadow-camera-far":v?.far??40}):e.type==="hemisphere"?(0,Yn.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function sd({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:r=0,environmentConfig:i,modelBounds:o,objectBindings:a,nodeRefs:s}){let c=e??k_,l=t??N_,d=i?.shadowLight,u=_g([5,10,5],r);return(0,Yn.jsxs)(Yn.Fragment,{children:[(0,Yn.jsx)("ambientLight",{intensity:c.ambient.intensity,color:c.ambient.color}),c.lights.map(m=>(0,Yn.jsx)(vg,{light:m,shadows:l,shadowsEnabled:n,environmentRotation:r,modelBounds:o,objectBindings:a,nodeRefs:s},m.id)),d?.enabled&&(0,Yn.jsx)(vg,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:d.intensity,position:u,attachedToCamera:!1,castShadow:!0,shadowBias:d.bias,visible:!0},shadows:l,shadowsEnabled:n,environmentRotation:0,modelBounds:o,objectBindings:a,nodeRefs:s})]})}var ie=require("react"),Fi=require("@react-three/fiber");var za=require("@react-three/fiber"),Bo=require("three"),li=require("three-stdlib"),Rg=require("three/examples/jsm/loaders/USDLoader.js");var V_=require("@react-three/drei"),z_=require("@react-three/fiber"),U_=require("react"),wg=require("three"),Io=require("three-stdlib");function j_(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=wg.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 c=s.name?i.get(s.name):void 0;c&&!s.map&&(s.map=c,s.needsUpdate=!0)}})}}}var ld="https://assets.react-immersive.liveroom.dev/three-r184/draco/",cd="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function Sg(e,t={},n){let{dracoDecoderPath:r=ld,ktx2TranscoderPath:i=cd,meshopt:o=!0}=t;if(r){let a=new Io.DRACOLoader;a.setDecoderPath(r),e.setDRACOLoader(a)}if(o&&e.setMeshoptDecoder(Io.MeshoptDecoder),i&&n){let a=new Io.KTX2Loader().setTranscoderPath(i).detectSupport(n);e.setKTX2Loader(a)}e.register((a=>j_(a)))}var Mg="KHR_materials_variants",Cg="riMaterialVariants";function Ui(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function F_(e){if(!Ui(e)||!Ui(e.extensions))return[];let t=e.extensions[Mg];if(!Ui(t)||!Array.isArray(t.variants))return[];let n=new Set;return t.variants.map((r,i)=>{let o=Ui(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 Tg(e){let t=e.userData?.gltfExtensions;if(!Ui(t))return[];let n=t[Mg];return!Ui(n)||!Array.isArray(n.mappings)?[]:n.mappings.filter(r=>Ui(r)&&Number.isInteger(r.material)&&Array.isArray(r.variants)&&r.variants.every(Number.isInteger))}function Pg(e,t){if(t<0)return null;let n=e.find(r=>r.variants.includes(t));return n?n.material:null}function Eg(e){let t=e.parser,n=F_(t?.json);if(!(!t||n.length===0))return e.scene.userData[Cg]=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 yl(e){let t=e.userData?.[Cg];return Array.isArray(t)&&t.every(n=>typeof n=="string")?t:[]}var vl=class extends Bo.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=G_(this.options.source),{format:o}=this.options.source;if(o==="obj")return H_(n,i,this.options.source,r);if(o==="fbx"){let c=ud(this,new li.FBXLoader(i)),l=q_(n,this.options.source);l&&c.setResourcePath(l);let d=await c.loadAsync(n,r);return dd(d,"FBXMesh",!1),{scene:d,animations:d.animations??[]}}if(o==="usdz"){let l=await ud(this,new Rg.USDLoader(i)).loadAsync(n,r);return dd(l,"USDZMesh",!1),{scene:l,animations:l.animations??[]}}let a=ud(this,new li.GLTFLoader(i));Sg(a,this.options.decoderConfig,this.options.renderer);let s=await a.loadAsync(n,r);return{scene:s.scene,animations:s.animations??[],materialVariants:Eg(s)}}};Bm(e=>{za.useLoader.clear(vl,e)});function Lg(e,t={},n,r){let i=(0,za.useThree)(s=>s.gl),o=km(e),a=n?{...o,format:n}:o;return(0,za.useLoader)(vl,e,s=>{s.configure({source:a,decoderConfig:t,renderer:i})},r)}async function H_(e,t,n,r){let i=await Ag(e,t,r),o=new li.OBJLoader(t),a=W_(i);if(a){let c=X_(a,e,n);if(c)try{let l=await Ag(c.url,t),u=new li.MTLLoader(t).parse(l,c.basePath);u.preload(),o.setMaterials(u)}catch(l){console.warn(`[react-immersive] Could not load OBJ material ${a}; rendering geometry with fallback materials.`,l)}}let s=o.parse(i);return dd(s,"OBJMesh",!0),{scene:s,animations:[]}}function dd(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 c=s,l=2;for(;r.has(c);)c=`${s}_${l++}`;o.name=c,r.add(c)})}function Ag(e,t,n){let r=new Bo.FileLoader(t);return r.setResponseType("text"),r.loadAsync(e,n)}function ud(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function G_(e){let t=new Bo.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(r=>{if(/^(?:blob:|data:)/i.test(r))return r;let i=_l(Dg(r).split(/[?#]/)[0]),o=n[i];if(o)return o;let a=xl(e.entryPath??""),s=_l(a?`${a}/${i}`:i);return n[s]??r}),t}function W_(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function X_(e,t,n){if(n.resourceUrls&&n.entryPath){let r=_l(`${xl(n.entryPath)}/${Dg(e)}`),i=n.resourceUrls[r];if(!i)return null;let o=xl(r);return{url:i,basePath:o?`${o}/`:""}}try{let r=new URL(e,t).href;return{url:r,basePath:Og(r)}}catch{return null}}function q_(e,t){if(t.resourceUrls&&t.entryPath){let n=xl(t.entryPath);return n?`${n}/`:""}return Og(e)}function Og(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function xl(e){let t=_l(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function _l(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 Dg(e){try{return decodeURI(e)}catch{return e}}var Ve=require("three"),Ug=require("three-stdlib");function Ig(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 zr=require("three");function Bg(e){let t=e._loopCount;return e.loop===zr.LoopPingPong&&(t&1)===1}function Y_(e){return Bg(e)?e.getClip().duration-e.time:e.time}function kg({root:e,clips:t,getClipConfig:n,onChange:r}){let i=new zr.AnimationMixer(e),o=new Map;for(let{clip:E,sourceName:g}of t)o.set(g,i.clipAction(E));let a=new Map,s=new Set,c=new Map,l=1,d=E=>typeof E=="string",u=E=>d(E)?a.has(E)?[E]:[]:[...a.keys()],m=(E,g)=>{let M=cf(n(g));M==="once"?E.setLoop(zr.LoopOnce,1):M==="ping-pong"?E.setLoop(zr.LoopPingPong,1/0):E.setLoop(zr.LoopRepeat,1/0),E.clampWhenFinished=M==="once"},h=E=>{E.action.setEffectiveTimeScale(E.reverse?-E.speed:E.speed)},f=E=>{let g=a.get(E);g&&(g.action.stop(),a.delete(E))},b=(E,g={})=>{let M=o.get(E);if(!M||n(E)?.hidden)return;let A=Number.isFinite(g.fade)&&g.fade>0?g.fade:0,N=g.reverse??!1;if(!g.alongside)for(let[x,R]of[...a])x!==E&&(A>0?(a.delete(x),R.action.fadeOut(A),s.add(R.action)):f(x));s.delete(M)&&M.stop();let z=M.getClip().duration,U=a.get(E),q=()=>{M.reset(),N&&(M.time=z),M.play()};if(!U)q(),A>0&&M.fadeIn(A);else{let x=N?M.time<=0:M.time>=z;U.finished&&x&&q(),M.paused=!1,M.enabled=!0,a.delete(E)}m(M,E),U={action:M,speed:n(E)?.speed??c.get(E)??l,reverse:N,finished:!1},U.speed=Zs(U.speed),h(U),a.set(E,U),r()},v=E=>{for(let g of u(E))a.get(g).action.paused=!0;r()},y=E=>{for(let g of u(E))f(g);if(!d(E)){for(let g of s)g.stop();s.clear()}r()},S=(E,g)=>{let M=Zs(E);d(g)?c.set(g,M):l=M;for(let A of u(g)){let N=a.get(A);c.set(A,M),N.speed=M,h(N)}r()},_=(E,g)=>{for(let M of u(g)){let A=a.get(M),N=A.action.getClip().duration,z=Math.min(Math.max(E,0),N);A.action.time=Bg(A.action)?N-z:z,A.finished&&(A.finished=!1,A.action.paused=!0)}i.update(0),r()},k=()=>{for(let[E,g]of[...a]){let M=n(E);if(M?.hidden){f(E);continue}m(g.action,E),M?.speed!==void 0&&(g.speed=Zs(M.speed),h(g))}r()},T=E=>{for(let g of a.values())g.action===E.action&&(g.finished=!0);r()};return i.addEventListener("finished",T),{play:b,pause:v,stop:y,setSpeed:S,seek:_,getState:()=>{let E=[...a].map(([M,A])=>({clip:M,status:A.finished?"finished":A.action.paused?"paused":"playing",time:Y_(A.action),duration:A.action.getClip().duration,speed:A.speed,reverse:A.reverse})),g=E[E.length-1];return{currentClip:g?.clip??null,isPlaying:E.some(M=>M.status==="playing"),speed:g?.speed??l,time:g?.time??0,duration:g?.duration??0,active:E}},applyClipConfigs:k,isRunning:()=>{if(s.size>0)return!0;for(let{action:E}of a.values())if(!E.paused&&E.enabled)return!0;return!1},update:E=>{i.update(E);for(let g of s)(!g.enabled||g.getEffectiveWeight()<=0)&&(g.stop(),s.delete(g))},dispose:()=>{i.removeEventListener("finished",T),i.stopAllAction(),i.uncacheRoot(e),a.clear(),s.clear()}}}var $n=require("three");function wl(e){if(ef(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new $n.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 $n.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof $n.Color&&n.emissive.copy(t.color)):(t.color instanceof $n.Color&&n.color.copy(t.color),t.map instanceof $n.Texture&&(n.map=t.map),t.emissive instanceof $n.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof $n.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 Sl(e){if(tf(e))return e.clone();let t=new $n.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(Br(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 Ml(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=Br(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=Br(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 Mr=require("three");function Ng(e,t,n,r){let i=lr(t),o=La(n,i),a=nf(r,t),s=rf(r,t),c=of(r,t);return a||s||c?el(e.userData,t,o,n,a??[0,0],s??1,c??0):(tl(e.userData,t),o)}function Kt(e,t,n,r){if(!n){tl(e.userData,t);return}let i=Ks[t];e[i]=Ng(e,t,n,r)}function Cl(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 Mr.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??Mr.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??Mr.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(Br(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(Br(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new Mr.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 Mr.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 Mr.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let r=vt(t,"texture"),i=vt(t,"metalnessMap"),o=vt(t,"roughnessMap"),a=vt(t,"emissiveMap"),s=vt(t,"alphaMap"),c=vt(t,"normalMap"),l=vt(t,"bumpMap"),d=vt(t,"aoMap"),u=vt(t,"displacementMap"),m=vt(t,"clearcoatMap"),h=vt(t,"clearcoatRoughnessMap"),f=vt(t,"clearcoatNormalMap"),b=vt(t,"anisotropyMap"),v=vt(t,"transmissionMap"),y=vt(t,"thicknessMap"),S=vt(t,"sheenColorMap"),_=vt(t,"sheenRoughnessMap"),k=vt(t,"specularIntensityMap"),T=vt(t,"specularColorMap");if(r?(e.map=Ng(e,"texture",r,t),e.color.set(n??"#ffffff")):(tl(e.userData,"texture"),n&&(e.map=null,e.color.set(n))),Kt(e,"metalnessMap",i,t),t?.metalness!==void 0&&(e.metalness=t.metalness),Kt(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),Kt(e,"emissiveMap",a,t),t?.opacity!==void 0&&(e.opacity=t.opacity),Kt(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=sf(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=af(t.side)),Kt(e,"normalMap",c,t),c||t?.normalScale!==void 0){let P=t?.normalScale??Math.abs(Br(e.userData.baseNormalScale).x);e.normalScale.set(P,t?.flipNormalY?-P:P)}if(Kt(e,"bumpMap",l,t),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),Kt(e,"aoMap",d,t),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),Kt(e,"displacementMap",u,t),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),Kt(e,"clearcoatMap",m,t),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),Kt(e,"clearcoatRoughnessMap",h,t),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),Kt(e,"clearcoatNormalMap",f,t),f||t?.clearcoatNormalScale!==void 0){let P=t?.clearcoatNormalScale??Math.abs(Br(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(P,t?.flipClearcoatNormalY?-P:P)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),Kt(e,"sheenColorMap",S,t),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),Kt(e,"sheenRoughnessMap",_,t),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),Kt(e,"anisotropyMap",b,t),t?.transmission!==void 0&&(e.transmission=t.transmission),Kt(e,"transmissionMap",v,t),t?.thickness!==void 0&&(e.thickness=t.thickness),Kt(e,"thicknessMap",y,t),t?.attenuationColor&&e.attenuationColor.set(t.attenuationColor),t?.attenuationDistance!==void 0&&(e.attenuationDistance=t.attenuationDistance),t?.reflectivity!==void 0&&(e.reflectivity=t.reflectivity),t?.specularIntensity!==void 0&&(e.specularIntensity=t.specularIntensity),Kt(e,"specularIntensityMap",k,t),t?.specularColor&&e.specularColor.set(t.specularColor),Kt(e,"specularColorMap",T,t),e.transparent=e.opacity<1||e.transmission>0||e.blending!==Mr.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function Ua(e){return e.material}function Cr(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function Sn(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function Tl(e,t){return Array.isArray(e)?e[t]:e}function pd(e){e.updateMatrixWorld(!0),e.traverse(t=>{let n=t;n.isSkinnedMesh&&(n.skeleton?.update(),n.computeBoundingBox?.(),n.computeBoundingSphere?.())})}var ji=require("react"),Vg=require("@react-three/fiber");function zg(){let e=(0,Vg.useThree)(i=>i.gl.domElement),t=(0,ji.useRef)(void 0),n=(0,ji.useCallback)(i=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=i},[e]),r=(0,ji.useCallback)(()=>{let i=t.current;i!==void 0&&(e.style.cursor=i,t.current=void 0)},[e]);return(0,ji.useEffect)(()=>()=>{r()},[r]),{setCanvasCursor:n,restoreCanvasCursor:r}}var hd=require("react/jsx-runtime");function Pl(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 Dt(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 ko(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===Ve.NormalBlending&&t.alphaToCoverage!==!0;return[Dt(t.map),Dt(t.aoMap),Dt(t.lightMap),Dt(t.bumpMap),Dt(t.normalMap,!0),t.normalMap?t.normalMapType:"",Dt(t.displacementMap),Dt(t.emissiveMap),Dt(t.metalnessMap),Dt(t.roughnessMap),i,Dt(i?t.anisotropyMap:null),n,Dt(n?t.clearcoatMap:null),Dt(n?t.clearcoatNormalMap:null,!0),Dt(n?t.clearcoatRoughnessMap:null),r,Dt(r?t.sheenColorMap:null),Dt(r?t.sheenRoughnessMap:null),Dt(t.specularColorMap),Dt(t.specularIntensityMap),o,Dt(o?t.transmissionMap:null),Dt(o?t.thicknessMap:null),Dt(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,t.side,a].join("|")}var $_={};function md({url:e,objectBindings:t,selectedItem:n,itemMaterials:r,onItemClick:i,onItemHover:o,onItemDoubleClick:a,onItemContextMenu:s,onModelLoaded:c,onAnimationsReady:l,nodeRefsOut:d,onNodeRefsChange:u,materialRefsOut:m,panelHoveredItem:h,sceneConfig:f,zoomOnSelected:b=!0,highlightOnHover:v=!0,decoderConfig:y,modelFormat:S,onLoadProgress:_,explodeFactor:k=0,suspendBindingTransforms:T=!1,pulses:P=$_}){let B=Lg(e,y,S,_),D=(0,Fi.useThree)(F=>F.invalidate),[O,E]=(0,ie.useState)(null),g=(0,ie.useRef)(null),{setCanvasCursor:M,restoreCanvasCursor:A}=zg();(0,ie.useEffect)(()=>{v||(E(null),o?.(null),A())},[v,o,A]);let N=(0,ie.useMemo)(()=>Ug.SkeletonUtils.clone(B.scene),[B.scene]),z=(0,ie.useMemo)(()=>si(N),[N]),U=z.nodesById,q=(0,ie.useMemo)(()=>{let F=new WeakMap;return N.traverse(H=>{rn(H)&&F.set(H,H.material)}),F},[N]),x=B.materialVariants,R=f?.model.materialVariant??null,X=R&&x?x.names.indexOf(R):-1,[Y,K]=(0,ie.useState)(null);(0,ie.useEffect)(()=>{if(R&&X<0&&console.warn(`[react-immersive] The model has no material variant "${R}".`+(x?` Its variants are: ${x.names.join(", ")}.`:" It has no material variants.")),!x||X<0){K(null);return}let F=!1,H=[];return N.traverse(W=>{if(!rn(W)||!q.has(W))return;let Z=Pg(Tg(W),X);Z!==null&&H.push(x.resolveMaterial(Z,W).then(J=>[W,J]))}),Promise.all(H).then(W=>{F||K({scene:N,materials:new Map(W)})}).catch(W=>{F||console.warn(`[react-immersive] Material variant "${R}" failed to load.`,W)}),()=>{F=!0}},[N,q,x,X,R]);let oe=Y?.scene===N?Y.materials:void 0,ae=F=>oe?.get(F)??q.get(F)??Ua(F);(0,ie.useEffect)(()=>{z.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(z.duplicateNames))},[z]);let ne=(0,ie.useMemo)(()=>{let F=new WeakMap;return N.traverse(H=>{F.set(H,{position:H.position.clone(),rotation:H.rotation.clone(),scale:H.scale.clone()})}),F},[N]);(0,ie.useEffect)(()=>{let F=!1,H=null,W=null,Z=window,J=Object.entries(U).filter(([,_t])=>rn(_t)),le=new Ve.Box3,fe=[],Pt=0;N.traverse(_t=>{!rn(_t)||_t.userData[Ii]||(_t.castShadow=!1,_t.receiveShadow=!0)});let Ke=()=>{if(F)return;let _t=new Set,he=le.getSize(new Ve.Vector3),ft=new Ve.Vector3;for(let{name:zt,box:sn}of fe)sn.getSize(ft),ft.x>he.x*.7&&ft.z>he.z*.7&&ft.y>he.y*.4&&_t.add(zt);N.traverse(zt=>{if(!rn(zt)||zt.userData[Ii])return;let sn=Na(zt);zt.castShadow=!sn||!_t.has(sn),zt.receiveShadow=!0}),D()},ht=()=>{F||(Z.requestIdleCallback?H=Z.requestIdleCallback(at,{timeout:100}):W=window.setTimeout(()=>at(),0))},at=_t=>{if(H=null,W=null,F)return;let he=performance.now(),ft=0;for(;Pt<J.length&&!(ft>0&&!(_t?_t.didTimeout?ft<16:_t.timeRemaining()>1:performance.now()-he<8));){let[zt,sn]=J[Pt];Pt+=1,ft+=1;let Jn=new Ve.Box3().setFromObject(sn);Jn.isEmpty()||(fe.push({name:zt,box:Jn}),le.union(Jn))}Pt<J.length?ht():Ke()};return ht(),()=>{F=!0,H!==null&&Z.cancelIdleCallback?.(H),W!==null&&window.clearTimeout(W)}},[D,U,N]),(0,ie.useEffect)(()=>{pd(N)},[N]),(0,ie.useEffect)(()=>{let F=new AbortController;return js(N,F.signal),()=>{F.abort(),Ca(N)}},[N]);let Ie=(0,ie.useMemo)(()=>{let F={};for(let[H,W]of Object.entries(t))F[W.modelObjectId??H]=H;return F},[t]),me=(0,ie.useMemo)(()=>Object.entries(t).map(([F,H])=>`${F}${H.modelObjectId??F}`).sort().join(""),[t]),tt=(0,ie.useMemo)(()=>Object.entries(t).map(([F,H])=>JSON.stringify([F,H.modelObjectId??F,H.transform??null])).sort().join(""),[t]),dt=(0,ie.useRef)(new Map);(0,ie.useEffect)(()=>{let F=new Map,H=new Map;for(let[J,le]of Object.entries(t)){if(!le.transform)continue;let fe=U[le.modelObjectId??J];fe&&(F.set(fe,le.transform),H.set(fe,Ao(fe)))}let W=new Set([...dt.current.keys(),...F.keys()]);for(let J of W){Pl(J,void 0,ne);for(let le of Ao(J))Ro(le)}N.updateMatrixWorld(!0);let Z=new Map;for(let J of H.values())for(let le of J)Z.has(le)||Z.set(le,le.matrixWorld.clone());for(let[J,le]of F)Pl(J,le,ne);dt.current=F,N.updateMatrixWorld(!0);for(let[J,le]of Z)Qs(J,le);D()},[N,U,ne,tt,D]),(0,ie.useEffect)(()=>()=>{for(let F of Ao(N))Ro(F)},[N]);let pe=(0,ie.useMemo)(()=>{let F={};for(let[H,W]of Object.entries(t)){let Z=W.modelObjectId??H,J=U[Z];if(!rn(J))continue;let le=ae(J);le&&(F[H]=Cr(le,fe=>{let Pt=wl(fe),Ke=Sl(Pt??new Ve.MeshStandardMaterial);return Ml(Ke),Ke}))}return F},[U,me,q,oe]);(0,ie.useEffect)(()=>{m&&(m.current=pe)},[pe,m]),(0,ie.useEffect)(()=>()=>{for(let F of Object.values(pe))Sn(F,H=>{bf(H.userData),H.dispose()})},[pe]);let _e=f?.model.shading??"lit",je=f?.model.renderer??"pbr",Bt=f?.wireframe.enabled??!1,te=f?.wireframe.color??"#93c5fd",an=f?.wireframe.opacity??1,nt=(0,ie.useMemo)(()=>{let F={};if(_e!=="unlit")return F;for(let[H,W]of Object.entries(pe))F[H]=Cr(W,Z=>{let J=new Ve.MeshBasicMaterial;return J.color.copy(Z.color),J.map=Z.map,J.alphaMap=Z.alphaMap,J.alphaTest=Z.alphaTest,J.transparent=Z.transparent,J.opacity=Z.opacity,J.side=Z.side,J});return F},[pe,_e]),Qe=(0,ie.useMemo)(()=>{let F={};if(_e!=="normals")return F;for(let[H,W]of Object.entries(pe))F[H]=Cr(W,()=>new Ve.MeshNormalMaterial);return F},[pe,_e]),ze=(0,ie.useMemo)(()=>{let F={};if(_e!=="lit"||je!=="matcap")return F;let H=nl();for(let[W,Z]of Object.entries(pe))F[W]=Cr(Z,J=>{let le=new Ve.MeshMatcapMaterial;return le.matcap=H,le.color.copy(J.color),le.alphaMap=J.alphaMap,le.alphaTest=J.alphaTest,le.side=J.side,le});return F},[pe,_e,je]);(0,ie.useEffect)(()=>()=>{for(let F of Object.values(nt))Sn(F,H=>H.dispose());for(let F of Object.values(Qe))Sn(F,H=>H.dispose());for(let F of Object.values(ze))Sn(F,H=>H.dispose())},[nt,Qe,ze]);let Jt=F=>_e==="normals"?Qe[F]:_e==="unlit"?nt[F]:je==="matcap"?ze[F]:pe[F],Tt=(0,ie.useRef)(c);Tt.current=c,(0,ie.useEffect)(()=>{Tt.current?.(N)},[N]);let kt=(0,ie.useMemo)(()=>{let F={};for(let[H,W]of Object.entries(t)){let Z=W.modelObjectId??H,J=U[Z];J&&(F[H]=J)}return F},[U,me]);(0,ie.useEffect)(()=>(d.current=kt,u?.(),()=>{d.current===kt&&(d.current={})}),[kt,d,u]);let pt=(0,ie.useRef)({});(0,ie.useEffect)(()=>()=>{for(let F of Object.values(pt.current))for(let[H,W]of Object.entries(F))W&&Nr(W,lr(H));pt.current={}},[]);let de=(0,ie.useMemo)(()=>{let F=new Map;for(let[H,W]of Object.entries(t)){let Z=h===W||h?.id===W.id||h?.modelObjectId===W.modelObjectId,J=v&&(O===H||Z),le=J||n===H;(J||le)&&F.set(H,{emissive:J,matcap:le})}return F},[t,v,O,n,h]),Pe=(0,ie.useRef)(de);Pe.current=de,(0,ie.useEffect)(()=>{let F=new Set;for(let[H,W]of Object.entries(t)){F.add(H);let Z=W.modelObjectId??H,J=U[Z];if(!rn(J))continue;J.visible=W.visible!==!1;let le=pe[H];if(!le)continue;if(je!=="uv-checker"){let he=Jt(H);he&&(J.material=he)}if(W.visible===!1)continue;let fe=nt[H],Pt=ze[H],Ke=r[H]??r[W.modelObjectId??H],ht=W.style?.material,at=pt.current[H]??{};for(let he of ii){let ft=vt(ht,he),zt=at[he];if(zt===ft)continue;let sn=lr(he);zt&&Nr(zt,sn),ft?(Lo(ft,sn,D),at[he]=ft):delete at[he]}Object.keys(at).length>0?pt.current[H]=at:delete pt.current[H];let _t=Ke?.hex??ht?.baseColor;Sn(le,(he,ft)=>{let zt=ko(he);Cl(he,ht,_t);let sn=he.userData.reactImmersiveConfiguredEmissive;sn?.isColor?sn.copy(he.emissive):he.userData.reactImmersiveConfiguredEmissive=he.emissive.clone();let Jn=Pe.current.get(H);Jn?.emissive&&he.emissive.add(Di),zt!==ko(he)&&(he.needsUpdate=!0);let xn=Tl(fe,ft);if(xn){let Ji=ko(xn);xn.color.copy(he.color),xn.map=he.map,xn.alphaMap=he.alphaMap,xn.alphaTest=he.alphaTest,xn.transparent=he.transparent,xn.opacity=he.opacity,xn.side=he.side,Ji!==ko(xn)&&(xn.needsUpdate=!0)}let en=Tl(Pt,ft);if(en){let Ji=ko(en);Jn?.matcap?en.color.set(kr.color):en.color.copy(he.color),en.map=he.map,en.alphaMap=he.alphaMap,en.alphaTest=he.alphaTest,en.transparent=he.transparent,en.opacity=he.opacity,en.side=he.side,Ji!==ko(en)&&(en.needsUpdate=!0)}})}for(let H of Object.keys(pt.current))if(!F.has(H)){for(let[W,Z]of Object.entries(pt.current[H]))Z&&Nr(Z,lr(W));delete pt.current[H]}D()},[t,U,pe,nt,Qe,ze,r,_e,je,D]);let Xt=(0,ie.useRef)(new Map);(0,ie.useEffect)(()=>{let F=Xt.current,H=new Set([...F.keys(),...de.keys()]),W=!1;for(let Z of H){let J=F.get(Z),le=de.get(Z),fe=!!J?.emissive!=!!le?.emissive,Pt=!!J?.matcap!=!!le?.matcap;if(!fe&&!Pt)continue;W=!0;let Ke=pe[Z],ht=ze[Z];Ke&&Sn(Ke,(at,_t)=>{let he=at.userData.reactImmersiveConfiguredEmissive;fe&&he?.isColor&&(at.emissive.copy(he),le?.emissive&&at.emissive.add(Di));let ft=Tl(ht,_t);Pt&&ft&&(le?.matcap?ft.color.set(kr.color):ft.color.copy(at.color))})}Xt.current=de,W&&D()},[de,pe,ze,D]),xf({objectBindings:t,nodeMap:U,invalidate:D});let lt=(0,ie.useMemo)(()=>Object.entries(P).map(([F,H])=>({key:F,color:new Ve.Color(H.color),speed:H.speed})),[P]),Nt=(0,ie.useRef)(new Set);(0,ie.useEffect)(()=>{let F=new Set(lt.map(({key:H})=>H));for(let H of Nt.current){if(F.has(H)||!pe[H])continue;let W=Pe.current.get(H)?.emissive;Sn(pe[H],Z=>{let J=Z.userData.reactImmersiveConfiguredEmissive;J?.isColor&&(Z.emissive.copy(J),W&&Z.emissive.add(Di))})}Nt.current=F,D()},[lt,pe,D]),(0,Fi.useFrame)(({clock:F})=>{if(lt.length===0)return;let H=F.getElapsedTime();for(let{key:W,color:Z,speed:J}of lt){let le=pe[W];if(!le)continue;let fe=(1-Math.cos(2*Math.PI*J*H))/2,Pt=Pe.current.get(W)?.emissive;Sn(le,Ke=>{let ht=Ke.userData.reactImmersiveConfiguredEmissive;ht?.isColor&&(Ke.emissive.copy(ht).lerp(Z,fe),Pt&&Ke.emissive.add(Di))})}D()}),(0,ie.useEffect)(()=>{if(je==="uv-checker")return;let F=new Set(Object.values(kt)),H=!1;N.traverse(W=>{if(!rn(W)||F.has(W)||!q.has(W))return;let Z=oe?.get(W)??q.get(W);W.material!==Z&&(W.material=Z,H=!0)}),H&&D()},[N,kt,q,oe,je,D]),(0,ie.useEffect)(()=>{if(je!=="uv-checker")return;let F=yf(),H=[];return N.traverse(W=>{if(!rn(W)||W.userData[Ii])return;let Z=W.material,J=Array.isArray(Z)?Z:[Z],le=!!W.geometry.getAttribute("uv"),fe=J.map((Ke,ht)=>{let at=new Ve.MeshBasicMaterial({color:le?"#ffffff":"#ff00ff",map:le?F:null,side:Ke.side});return at.name=`${W.name||"mesh"}-uv-checker-${ht}`,at.toneMapped=!1,at}),Pt=Array.isArray(Z)?fe:fe[0];W.material=Pt,H.push({node:W,original:Z,diagnostic:Pt})}),D(),()=>{for(let{node:W,original:Z,diagnostic:J}of H){W.material=Z;let le=Array.isArray(J)?J:[J];for(let fe of le)fe.dispose()}D()}},[N,je,D]),(0,ie.useEffect)(()=>{if(!Bt)return;let F=[];for(let[H,W]of Object.entries(t)){let Z=W.modelObjectId??H,J=U[Z];if(!rn(J))continue;let le=new Ve.MeshBasicMaterial({color:te,wireframe:!0,transparent:!0,opacity:an,depthTest:!1,depthWrite:!1,side:Ve.DoubleSide,toneMapped:!1}),fe=J.clone(!1);fe.name="",fe.position.set(0,0,0),fe.quaternion.identity(),fe.scale.set(1,1,1),fe.matrix.identity(),fe.matrixAutoUpdate=!0,fe.material=le,fe.castShadow=!1,fe.receiveShadow=!1,fe.frustumCulled=!1,fe.renderOrder=1,fe.userData={isWireframeOverlay:!0},fe.raycast=()=>{},J.morphTargetInfluences&&(fe.morphTargetInfluences=J.morphTargetInfluences),J.add(fe),F.push({node:J,overlay:fe})}return D(),()=>{for(let{node:H,overlay:W}of F)H.remove(W),W.material.dispose()}},[Bt,te,an,U,t,D]);let Q=(0,ie.useMemo)(()=>Ig(B.animations),[B.animations]),ve=(0,ie.useRef)(l);ve.current=l;let ge=(0,ie.useRef)(f);ge.current=f;let $e=(0,ie.useRef)(null),Xe=(0,ie.useRef)(new Set),De=(0,ie.useRef)(0),Je=F=>{Xe.current.forEach(H=>H(F))};(0,ie.useEffect)(()=>{let F=kg({root:N,clips:Q,getClipConfig:W=>lf(ge.current,W),onChange:()=>{Je(F.getState()),D()}});$e.current=F,ve.current?.({clips:Q.map(({sourceName:W})=>W),clipDetails:Q.map(({sourceName:W,duration:Z})=>({sourceName:W,duration:Z})),play:F.play,pause:F.pause,stop:F.stop,setSpeed:F.setSpeed,seek:F.seek,getState:F.getState,subscribe:W=>(Xe.current.add(W),W(F.getState()),()=>{Xe.current.delete(W)})}),Je(F.getState());let H=ge.current?.animations.autoplayClip;return H&&F.play(H),()=>{F.dispose(),$e.current=null,Je(F.getState())}},[N,Q]),(0,ie.useEffect)(()=>{f?.animations&&$e.current?.applyClipConfigs()},[f?.animations]),(0,Fi.useFrame)((F,H)=>{let W=$e.current;if(W?.isRunning()){if(W.update(H),!T)for(let[Z,J]of dt.current)Pl(Z,J,ne);D(),De.current+=H,De.current>=.066&&(De.current=0,Je(W.getState()),pd(N))}});let ue=(0,ie.useMemo)(()=>(f?.model.rotation??[0,0,0]).map(F=>F*Math.PI/180),[f?.model.rotation]);(0,Fi.useFrame)((F,H)=>{if(!g.current)return;let W=g.current.rotation;W.x=Ve.MathUtils.lerp(W.x,ue[0],1-Math.exp(-5*H)),W.y=Ve.MathUtils.lerp(W.y,ue[1],1-Math.exp(-5*H)),W.z=Ve.MathUtils.lerp(W.z,ue[2],1-Math.exp(-5*H)),Math.abs(W.x-ue[0])<1e-4&&Math.abs(W.y-ue[1])<1e-4&&Math.abs(W.z-ue[2])<1e-4||D()});let Be=(0,ie.useRef)([]),Fe=(0,ie.useRef)(0),Vt=(0,ie.useRef)(0),kn=(0,ie.useMemo)(()=>new Ve.Vector3,[]);(0,ie.useEffect)(()=>{let F=new Map;for(let[Ke,ht]of Object.entries(t)){let at=U[ht.modelObjectId??Ke];at&&F.set(at,ht)}for(let Ke of Be.current)Pl(Ke.node,F.get(Ke.node)?.transform,ne);Vt.current=0,N.updateWorldMatrix(!0,!0);let H=new Ve.Box3().setFromObject(N),W=H.getCenter(new Ve.Vector3),Z=H.getSize(new Ve.Vector3).length()*.5;Fe.current=Number.isFinite(Z)?Z:0;let J=[...F.keys()],le=new Set(J),fe=[],Pt=new Ve.Vector3;for(let Ke of J){if(!Ke.parent)continue;let ht=Ke.parent,at=!1;for(;ht;){if(le.has(ht)){at=!0;break}ht=ht.parent}if(at)continue;let _t=new Ve.Box3().setFromObject(Ke);if(_t.isEmpty())continue;_t.getCenter(Pt);let he=Pt.clone().sub(W);he.lengthSq()<1e-8||(he.normalize(),fe.push({node:Ke,restLocalPos:Ke.position.clone(),restWorldPos:Ke.getWorldPosition(new Ve.Vector3),worldDir:he,parentInverse:new Ve.Matrix4().copy(Ke.parent.matrixWorld).invert()}))}Be.current=fe,D()},[N,U,me,tt,ne,D]),(0,ie.useEffect)(()=>{D()},[k,D]),(0,Fi.useFrame)((F,H)=>{let W=Be.current;if(W.length===0)return;let Z=Math.min(Math.max(k,0),1),J=Vt.current;if(Math.abs(J-Z)<1e-4){if(J===Z)return;Vt.current=Z}else Vt.current=Ve.MathUtils.lerp(J,Z,1-Math.exp(-6*H)),D();let le=Vt.current*Fe.current;for(let fe of W)kn.copy(fe.worldDir).multiplyScalar(le).add(fe.restWorldPos).applyMatrix4(fe.parentInverse),fe.node.position.copy(kn)});let At=F=>{let H=F;for(;H;){let W=Na(H),Z=W?Ie[W]:void 0;if(Z&&t[Z])return[Z,t[Z]];H=H.parent}return null},hn=F=>{let H=At(F);if(!H)return null;let[W,Z]=H;return U[Z.modelObjectId??W]??null},Ar=rl(F=>{let H=At(F);return H&&H[1].selectable!==!1?H[1]:null},s,hn),Nn=F=>{if(Ar.consumeClick())return;let H=At(F.object);if(!H)return;let[,W]=H;W.selectable!==!1&&(F.stopPropagation(),i(W,Oo(F,hn(F.object))))},_i=F=>{let H=At(F.object);if(!H)return;let[,W]=H;if(W.selectable===!1)return;a?.(W,Oo(F,hn(F.object)))&&F.stopPropagation()},ys=F=>{if(!v)return;let H=At(F.object);if(!H)return;let[W,Z]=H;Z.hoverable!==!1&&(F.stopPropagation(),M("pointer"),E(W),o?.(Z))},qt=F=>{v&&(F.stopPropagation(),A(),E(null),o?.(null))},vr=(0,ie.useMemo)(()=>!Sm(N),[N]);return(0,hd.jsx)("group",{ref:g,children:(0,hd.jsx)("primitive",{object:N,...vr?{onClick:Nn,onDoubleClick:_i,...s?{onPointerDown:Ar.onPointerDown}:{},...v?{onPointerOver:ys,onPointerOut:qt}:{}}:{}})})}var Ce=require("react");var rc=require("@react-three/fiber");var bt=require("three");var mt=require("three");function Hg(e){let t={};for(let[n,r]of Object.entries(e))t[r.modelObjectId??n]=n;return t}function gd(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 Gg(e,t){return e||(t?t.modelObjectId??t.id:null)}function Rl(e,t){let n=gd(e);if(!n)return null;let r=t.keyByModelObject[n]??n,i=t.objectBindings[r];return i?{key:r,binding:i}:null}var No=new mt.Vector3,fd=new mt.Vector3,K_=new mt.Matrix4,jg=new mt.Matrix4,El=new mt.Matrix4,Z_=new mt.Matrix4,Al=new mt.Matrix4,Q_=new mt.Matrix4,J_=new mt.Matrix4,ew=new mt.Vector3,tw=new mt.Vector3,ci=new mt.Vector3,Fg=new mt.Quaternion,nw=new mt.Euler;function rw(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}jg.compose(t.position,Fg.setFromEuler(t.rotation),t.scale);let s=n?.rotation;El.compose(ew.fromArray(n?.position??[0,0,0]),Fg.setFromEuler(nw.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),tw.fromArray(n?.scale??[1,1,1])),El.premultiply(r).multiply(Z_.copy(r).invert()),e.parent?.updateWorldMatrix(!0,!1);let c=e.parent?.matrixWorld??K_;if(Al.multiplyMatrices(c,jg).premultiply(El),a&&i){let l=e;for(;l.parent&&!l.userData.ri_name;)l=l.parent;let d=l.userData.ri_center;Array.isArray(d)&&d.length===3?ci.fromArray(d).applyMatrix4(r).applyMatrix4(El):ci.setFromMatrixPosition(Al),ci.sub(i.centre),ci.lengthSq()>1e-8&&(ci.normalize().multiplyScalar(i.factor*i.radius),Al.premultiply(J_.makeTranslation(ci.x,ci.y,ci.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(Q_.copy(c).invert(),Al),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function Ll(e,t){if(!rn(e)&&!e.userData.riLogicalObject)return;let n=Rl(e,t);if(!n)return;let r=Wg(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){rw(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),fd.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let c=s.userData.ri_center;Array.isArray(c)&&c.length===3?No.fromArray(c).applyMatrix4(e.matrixWorld).sub(a.centre):No.copy(fd).sub(a.centre),No.lengthSq()>1e-8&&(No.normalize().multiplyScalar(a.factor*a.radius).add(fd),e.parent&&e.parent.worldToLocal(No),e.position.copy(No))}e.updateMatrix(),e.updateWorldMatrix(!0,!1)}function Vo(e,t){e.traverse(n=>Ll(n,t))}function Wg(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function iw(e,t,n,r){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,r])}function ow(e){if(e.textures){for(let t of ii){let n=e.textures[t];n&&Nr(n,lr(t))}e.textures=void 0}}function aw(e,t,n){let r=e.textures??{};for(let i of ii){let o=vt(t,i),a=r[i];if(a===o)continue;let s=lr(i);a&&Nr(a,s),o?(Lo(o,s,n),r[i]=o):delete r[i]}e.textures=Object.keys(r).length>0?r:void 0}function sw(e,t){if(t.shadingMode==="normals")return Cr(e,()=>new mt.MeshNormalMaterial);if(t.shadingMode==="unlit")return Cr(e,n=>{let r=new mt.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=nl();return Cr(e,r=>{let i=new mt.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 lw(e,t){if(!rn(e))return;let r=Wg(e);r.original??(r.original=Ua(e));let i=Rl(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,Ll(e,t);let s=t.itemMaterials?.[o]?.hex??t.itemMaterials?.[a.modelObjectId??o]?.hex,c=t.highlightOnHover!==!1&&o===t.hoveredKey,l=iw(a,s,t,c);if(r.signature===l&&r.display){e.material=r.display;return}let d=a.style?.material;if(aw(r,d,t.invalidate),!r.physical){let u=r.original??Ua(e);if(!u)return;r.physical=Cr(u,m=>{let h=wl(m),f=Sl(h??new mt.MeshStandardMaterial);return Ml(f),f})}Sn(r.physical,u=>{Cl(u,d,s??d?.baseColor),c&&(u.emissive.add(Di),u.color.lerp(hf,mf)),u.needsUpdate=!0}),r.display&&r.display!==r.physical&&Sn(r.display,u=>u.dispose()),r.display=sw(r.physical,t),r.signature=l,e.material=r.display}function Xg(e,t){e.traverse(n=>lw(n,t))}function bd(e){e.traverse(t=>{if(!rn(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&&Sn(n.display,r=>r.dispose()),n.physical&&Sn(n.physical,r=>r.dispose()),ow(n),delete t.userData.riVisuals)})}var Yg=new bt.Matrix4().makeRotationX(Math.PI/2),qg=Yg.clone().invert();function cw(e){let t=new bt.Vector3(e[0],e[1],e[2]),n=new bt.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 bt.Box3(t.clone().sub(n),t.clone().add(n))}function uw(e){let t=e.getCenter(new bt.Vector3),n=e.getSize(new bt.Vector3).multiplyScalar(.5);return[t.x,t.y,t.z,n.x,0,0,0,n.y,0,0,0,n.z]}var Ol=class{constructor(){this.group=new bt.Group;this.objects=new Map;this.geometry=new bt.BoxGeometry(1,1,1);this.material=new bt.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 bt.Box3(new bt.Vector3(...n.minimum),new bt.Vector3(...n.maximum)).applyMatrix4(qg),i=new bt.Group;i.name=n.name,i.userData.ri_name=n.name,i.userData.riLogicalObject=!0,i.userData.ri_center=r.getCenter(new bt.Vector3).toArray();let o=new bt.Mesh(this.geometry,this.material);o.visible=!1,o.raycast=()=>{},o.position.copy(r.getCenter(new bt.Vector3)),o.scale.copy(r.getSize(new bt.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 c of this.objects.values())r&&c===a||Ll(c,i);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([c,l])=>`${c}:${l.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[c,l]of this.objects)l.matrix.equals(new bt.Matrix4)||this.transforms.set(c,Yg.clone().multiply(l.matrix).multiply(qg))}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=cw(i.box),a=o.clone(),s=1;for(let l of r.extras?.featureIds??[]){let d=this.transforms.get(l);d&&(a.union(o.clone().applyMatrix4(d)),s=Math.max(s,d.getMaxScaleOnAxis()))}let c=uw(a);r.boundingVolume.box=c,r.geometricError=i.error*s,r.engineData?.boundingVolume?.setObbData(c,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 yd=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),ja=16,vd=1.25,dw=1.5,pw=1.25,hw=500,mw=3e3,$g=5e3,Kg=2e3,fw=.9;function Zg(e){return e.full&&(e.wanting||e.usage>1)}function Qg(e){return e.loosened?mw:hw}function Jg(e){let t=e.factor/pw;return t<=1+1e-6?1:t}function eb(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<fw&&Jg(e)>e.tooFine}function tb(e,t){let{now:n}=t,r=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(Zg(t)){if(n-r.changedAt<Qg(r))return r;let i=Math.max(r.tooFine,r.factor);return r.factor>=ja?r.loosened&&r.tooFine===i?r:{...r,loosened:!0,tooFine:i,changedAt:n}:{factor:Math.min(ja,r.factor*dw),loosened:!0,tooFine:i,raisedAt:n,changedAt:n}}return r.loosened&&!t.wanting?{...r,loosened:!1,changedAt:n}:eb(r,t)&&n-r.raisedAt>=$g&&n-r.changedAt>=Kg?{...r,factor:Jg(r),changedAt:n}:r}function nb(e,t){let{now:n}=t;return Zg(t)?e.factor>=ja&&e.loosened?null:Math.max(0,Qg(e)-(n-e.changedAt)):e.loosened&&!t.wanting?0:eb(e,t)?Math.max(0,$g-(n-e.raisedAt),Kg-(n-e.changedAt)):null}function ab(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function xd(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 Il,Fa=(Il=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)})}},Lu(Il,"pending",new Map),Lu(Il,"session",null),Il),rb=2**30,Wa=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*rb,this.maxBytesSize=.4*rb,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:c,minBytesSize:l,maxBytesSize:d}=this,u=r.length-o.size,m=r.length-a.size,h=Math.max(Math.min(r.length-t,u),0),f=this.cachedBytes-l,b=this.unloadPriorityCallback||this.defaultPriorityCallback,v=!1,y=h>0&&u>0||m&&r.length>n;if(u&&this.cachedBytes>l||m&&this.cachedBytes>d||y){r.sort((D,O)=>{let E=o.has(D);if(E===o.has(O)){let g=a.has(D);return g===a.has(O)?-b(D,O):g?1:-1}else return E?1:-1});let S=Math.max(t*e,h*e),_=Math.ceil(Math.min(S,u,h)),k=Math.max(e*f,e*l),T=Math.min(k,f),P=0,B=0;for(;this.cachedBytes-B>d||r.length-P>n;){let D=r[P],O=c.get(D)||0;if(o.has(D)&&a.has(D)||this.cachedBytes-B-O<d&&r.length-P<=n)break;B+=O,P++}for(;B<T||P<_;){let D=r[P],O=c.get(D)||0;if(o.has(D)||this.cachedBytes-B-O<l&&P>=_)break;B+=O,P++}r.splice(0,P).forEach(D=>{this.cachedBytes-=c.get(D)||0,s.get(D)(D),c.delete(D),i.delete(D),s.delete(D),a.delete(D),o.delete(D)}),v=P<h||B<f&&P<u,v&&(v=P>0)}v&&(this.unloadingHandle=Fa.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){Fa.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},gw=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Tr=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=>{Fa.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 gw),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:c}=t.get(o);t.delete(o);let l;try{l=a(o)}catch(d){c(d),i();continue}l instanceof Promise?l.then(s).catch(c).finally(i):(s(l),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(c){a(c);return}return s instanceof Promise?s.then(o).catch(a):o(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},Vl=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((c,l)=>{c.running||this.originQueues.delete(l)});let i=e===null?null:ab(e),o=this.originQueues.get(i);o||(o=new Tr,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 Wi=6378137,bw=1/298.257223563,wd=6356752314245179e-9,Dl={inView:!1,error:1/0,distanceFromCamera:1/0};function zl(e){return e===4||e===-1}function Ur(e,t){return Ul(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function Ul(e){return!!e.traversal}function Xa(e){let{children:t}=e,n=t.length===0||Ul(t[t.length-1]),r=!e.internal.hasUnrenderableContent||zl(e.internal.loadingState);return n&&r}function Hi(e){return e.traversal.unconditionallyRefine}function Ha(e,t){if(Ul(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,Dl),e.traversal.inFrustum=Dl.inView,e.traversal.error=Dl.error,e.traversal.distanceFromCamera=Dl.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 _d(e,t,n=!1){if(Ha(e,t),n?t.markTileUsed(e):Bl(e),Hi(e)&&Xa(e)){let r=e.children;for(let i=0,o=r.length;i<o;i++)_d(r[i],t,n)}}function sb(e,t){if(Ha(e,t),e.traversal.usedLastFrame&&(Bl(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||Hi(e))&&Xa(e))){let n=e.children;for(let r=0,i=n.length;r<i;r++)sb(n[r],t)}}function Bl(e){e.traversal.used=!0}function yw(e,t){return!(e.traversal.error<=t.errorTarget&&!Hi(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!Xa(e))}function lb(e,t){let{frameCount:n}=t,{children:r}=e;for(let i=0,o=r.length;i<o;i++){let a=r[i];Ur(a,n)&&(a.traversal.active&&(a.traversal.kicked=!0,a.traversal.active=!1),lb(a,t))}}function ib(e){return!Hi(e)&&(!e.internal.hasContent||zl(e.internal.loadingState))}function cb(e,t){if(Ha(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(!yw(e,t)){Bl(e);return}let r=!1,i=!1,o=e.children;for(let a=0,s=o.length;a<s;a++){let c=o[a];cb(c,t),r||(r=Ur(c,t.frameCount)),i||(i=c.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++)_d(o[a],t,!0);return}if(Bl(e),e.refine==="REPLACE"&&r&&(t.loadSiblings||t.loadAncestors))for(let a=0,s=o.length;a<s;a++)_d(o[a],t)}function ub(e,t){let n=t.frameCount;if(!Ur(e,n))return;let r=e.children,i=!1;for(let a=0,s=r.length;a<s;a++){let c=r[a];i||(i=Ur(c,n))}if(!i)e.traversal.isLeaf=!0;else{for(let s=0,c=r.length;s<c;s++)ub(r[s],t);let a=!0;for(let s=0,c=r.length;s<c;s++){let l=r[s];if(Ur(l,n)){let d=!Hi(l),u=!l.internal.hasContent||zl(l.internal.loadingState);d&&u||l.traversal.allChildrenLoaded||(a=!1)}}e.traversal.allChildrenLoaded=a}let o=!0;for(let a=0,s=r.length;a<s;a++){let c=r[a];Ur(c,t.frameCount)&&!c.traversal.allUsedChildrenProcessed&&(o=!1)}e.traversal.allUsedChildrenProcessed=o&&Xa(e)}function db(e,t){if(!Ur(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!Hi(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!Hi(e)&&(e.traversal.active=!0,Xa(e)&&e.internal.hasContent&&!zl(e.internal.loadingState)))for(let i=0,o=n.length;i<o;i++)sb(n[i],t);return}let r=n.length>0;for(let i=0,o=n.length;i<o;i++){let a=n[i];db(a,t),Ur(a,t.frameCount)&&!(a.traversal.active&&ib(a))&&!a.traversal.allChildrenReady&&(r=!1)}e.traversal.allChildrenReady=r,e.refine==="REPLACE"&&!r&&e.traversal.wasSetActive&&ib(e)&&(e.traversal.active=!0,lb(e,t))}function pb(e,t){Ha(e,t);let n=Ur(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||Ul(e)&&e.traversal.usedLastFrame){let r=!1,i=!1;n?(r=e.traversal.active,i=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):Ha(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 c=o[a];pb(c,t)}}}function vw(e,t){cb(e,t),ub(e,t),db(e,t),pb(e,t)}function xw(e){let t=null;return()=>{t===null&&(t=Fa.requestAnimationFrame(()=>{t=null,e()}))}}function _w(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 c=s.length-1;c>=0;c--)r.push(s[c]),r.push(a),r.push(i+1);n&&n(a,o,i)}}var ob=Symbol("PLUGIN_REGISTERED"),ui={inView:!0,error:0,distance:1/0},ww=(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},Sw=(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,Mw=(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,zo=(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?Sw(e,t):ww(e,t)},Sd=new Wa;Sd.unloadPriorityCallback=Mw;var Ga=new Vl;Ga.maxJobsPerOrigin=25,Ga.priorityCallback=zo;var kl=new Tr;kl.maxJobs=5,kl.priorityCallback=zo;var Nl=new Tr;Nl.maxJobs=25,Nl.priorityCallback=(e,t)=>{let n=e.parent,r=t.parent;return n===r?0:n?r?zo(n,r):-1:1};var Md=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 Tr){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=Sd,this.downloadQueue=Ga,this.parseQueue=kl,this.processNodeQueue=Nl,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=xw(()=>{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[ob]===!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[ob]=!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&&_w(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(l=>l.loadRootTileset&&l.loadRootTileset()).then(l=>{let d=this.rootURL;d!==null&&this.invokeAllPlugins(u=>d=u.preprocessURL?u.preprocessURL(d,null):d),this.rootLoadingState=4,this.rootTileset=l,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:l,url:d}),this.dispatchEvent({type:"load-root-tileset",tileset:l,url:d})}).catch(l=>{this.rootLoadingState=-1,console.error(l),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:l,url:this.rootURL})})),!r)return;let s=null;if(this.invokeAllPlugins(l=>{if(l.doTilesNeedUpdate){let d=l.doTilesNeedUpdate();s=s===null?d:!!(s||d)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),n.inFrustum=0,n.used=0,n.active=0,n.visible=0,n.tilesProcessed=0,this.frameCount++,t.forEach(l=>e.markUnused(l)),t.clear(),this.prepareForTraversal(),vw(r,this),this.removeUnusedPendingTiles();let c=this.queuedTiles;c.sort(e.unloadPriorityCallback);for(let l=0,d=c.length;l<d&&!e.isFull();l++)this.requestTileContents(c[l]);c.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&&(ui.inView=!0,ui.error=0,ui.distance=1/0,s.calculateTileViewError(e,ui)&&(i===null&&(i=!0),i&&(i=ui.inView),ui.inView&&(a=Math.min(a,ui.distance),o=Math.max(o,ui.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=xd(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(m=>r=m.preprocessURL?m.preprocessURL(r,e):r);let i=this.stats,o=this.lruCache,a=this.downloadQueue,s=this.parseQueue,c=this.loadingTiles,l=xd(r),d=new AbortController,u=d.signal;if(o.add(e,m=>{d.abort(),t?m.children.length=0:this.invokeAllPlugins(h=>{h.disposeTile&&h.disposeTile(m)}),i.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),i.inCacheSinceLoad--),m.internal.loadingState===1?i.queued--:m.internal.loadingState===2?i.downloading--:m.internal.loadingState===3?i.parsing--:m.internal.loadingState===4&&i.loaded--,m.internal.loadingState=0,s.remove(m),a.remove(m),c.delete(m)}))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,c.add(e),a.add(r,e,m=>{if(u.aborted)return Promise.resolve();e.internal.loadingState=2,i.downloading++,i.queued--;let h=this.invokeOnePlugin(f=>f.fetchData&&f.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}}),h}).then(m=>{if(!u.aborted){if(!(m instanceof Response))return m;if(m.ok)return l==="json"?m.json():m.arrayBuffer();throw Error(`Failed to load model with error code ${m.status}`)}}).then(m=>{if(!u.aborted)return i.downloading--,i.parsing++,e.internal.loadingState=3,s.add(e,h=>u.aborted?Promise.resolve():l==="json"&&m.root?(this.preprocessTileset(m,r,e),e.children.push(m.root),n=m,t=!0,Promise.resolve()):this.invokeOnePlugin(f=>f.parseTile&&f.parseTile(m,h,l,r,u)))}).then(()=>{if(u.aborted)return;i.parsing--,i.loaded++,e.internal.loadingState=4,c.delete(e),o.setLoaded(e,!0);let m=this.getBytesUsed(e);if(o.getMemoryUsage(e)===0&&m>0&&o.isFull()){o.remove(e);return}o.setMemoryUsage(e,m),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(m=>{u.aborted||(m.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(m),e.internal.loadingState=-1,c.delete(e),o.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:m,url:r})))})}};function Gi(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 Cw=new TextDecoder;function hb(e){return Cw.decode(e)}function jl(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var Uo=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=jl(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function Cd(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,c=n*a;switch(i){case"BYTE":s=new Int8Array(e,t,c);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,c);break;case"SHORT":s=new Int16Array(e,t,c);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,c);break;case"INT":s=new Int32Array(e,t,c);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,c);break;case"FLOAT":s=new Float32Array(e,t,c);break;case"DOUBLE":s=new Float64Array(e,t,c);break;default:throw Error(`FeatureTable : Feature component type not provided for "${o}".`)}return s}var qa=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(hb(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:c}=this,l=o.byteOffset||0,d=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 m=s+l,h=Cd(a,m,t,d,u,e);if(m+h.byteLength>s+c)throw Error("FeatureTable: Feature data read outside binary body length.");return h}}getBuffer(e,t){let{buffer:n,binOffset:r}=this;return n.slice(r+e,r+e+t)}},Tw=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 Cd(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 c=0;c<e;c++)s+=this.parentCounts[c];for(let c=0;c<n;c++){let l=this.parentIds[s+c];l!==e&&this.getDataFromId(l,t)}}let 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}},Fl=class extends qa{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 Tw(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)}},Td=class extends Uo{parse(e){let t=new DataView(e),n=Gi(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),c=t.getUint32(24,!0),l=new qa(e.slice(28,28+o+a),0,o,a),d=28+o+a,u=new Fl(e.slice(d,d+s+c),l.getData("BATCH_LENGTH"),0,s,c),m=d+s+c;return{version:r,featureTable:l,batchTable:u,glbBytes:new Uint8Array(e,m,i-m)}}},Pd=class extends Uo{parse(e){let t=new DataView(e),n=Gi(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),c=t.getUint32(24,!0),l=t.getUint32(28,!0),d=new qa(e.slice(32,32+o+a),0,o,a),u=32+o+a,m=new Fl(e.slice(u,u+s+c),d.getData("INSTANCES_LENGTH"),0,s,c),h=u+s+c,f=new Uint8Array(e,h,i-h),b=null,v=null,y=null;if(l)b=f,v=Promise.resolve();else{let S=this.resolveExternalURL(hb(f));y=jl(S),v=fetch(S,this.fetchOptions).then(_=>{if(!_.ok)throw Error(`I3DMLoaderBase : Failed to load file "${S}" with status ${_.status} : ${_.statusText}`);return _.arrayBuffer()}).then(_=>{b=new Uint8Array(_)})}return v.then(()=>({version:r,featureTable:d,batchTable:m,glbBytes:b,gltfWorkingPath:y}))}},Ed=class extends Uo{parse(e){let t=new DataView(e),n=Gi(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),c=t.getUint32(24,!0),l=new qa(e.slice(28,28+o+a),0,o,a),d=28+o+a,u=new Fl(e.slice(d,d+s+c),l.getData("BATCH_LENGTH")||l.getData("POINTS_LENGTH"),0,s,c);return Promise.resolve({version:r,featureTable:l,batchTable:u})}},Ad=class extends Uo{parse(e){let t=new DataView(e),n=Gi(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 c=0;c<o;c++){let l=new DataView(e,s,12),d=Gi(l),u=l.getUint32(4,!0),m=l.getUint32(8,!0),h=new Uint8Array(e,s,m);a.push({type:d,buffer:h,version:u}),s+=m}return{version:r,tiles:a}}};var G=require("three"),Zl=require("three/addons/loaders/GLTFLoader.js"),Ab=require("three/addons/utils/BufferGeometryUtils.js"),zd=class extends Td{constructor(e=G.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new G.Matrix4}parse(e){let t=super.parse(e),n=t.glbBytes.slice().buffer;return new Promise((r,i)=>{let o=this.manager,a=this.fetchOptions,s=o.getHandler("path.gltf")||new Zl.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 c=this.workingPath;!/[\\/]$/.test(c)&&c.length&&(c+="/");let l=this.adjustmentTransform;s.parse(n,c,d=>{let{batchTable:u,featureTable:m}=t,{scene:h}=d,f=m.getData("RTC_CENTER",1,"FLOAT","VEC3");f&&(h.position.x+=f[0],h.position.y+=f[1],h.position.z+=f[2]),d.scene.updateMatrix(),d.scene.matrix.multiply(l),d.scene.matrix.decompose(d.scene.position,d.scene.quaternion,d.scene.scale),d.batchTable=u,d.featureTable=m,h.batchTable=u,h.featureTable=m,r(d)},i)})}};function Pw(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 Ya=new G.Vector2;function Ew(e,t,n=new G.Vector3){Ya.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(Ya.x,Ya.y,1-Math.abs(Ya.x)-Math.abs(Ya.y));let r=G.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 mb={RGB:"color",POSITION:"position"},Ud=class extends Ed{constructor(e=G.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:r}=t,i=new G.PointsMaterial,o=n.header.extensions,a=new G.Vector3,s;if(o&&o["3DTILES_draco_point_compression"]){let{byteOffset:d,byteLength:u,properties:m}=o["3DTILES_draco_point_compression"],h=this.manager.getHandler("draco.drc");if(h==null)throw Error("PNTSLoader: dracoLoader not available.");let f={};for(let y in m)if(y in mb&&y in m){let S=mb[y];f[S]=m[y]}let b={attributeIDs:f,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},v=n.getBuffer(d,u);s=await h.decodeGeometry(v,b),s.attributes.color&&(i.vertexColors=!0)}else{let d=n.getData("POINTS_LENGTH"),u=n.getData("POSITION",d,"FLOAT","VEC3"),m=n.getData("NORMAL",d,"FLOAT","VEC3"),h=n.getData("NORMAL",d,"UNSIGNED_BYTE","VEC2"),f=n.getData("RGB",d,"UNSIGNED_BYTE","VEC3"),b=n.getData("RGBA",d,"UNSIGNED_BYTE","VEC4"),v=n.getData("RGB565",d,"UNSIGNED_SHORT","SCALAR"),y=n.getData("CONSTANT_RGBA",d,"UNSIGNED_BYTE","VEC4"),S=n.getData("POSITION_QUANTIZED",d,"UNSIGNED_SHORT","VEC3"),_=n.getData("QUANTIZED_VOLUME_SCALE",d,"FLOAT","VEC3"),k=n.getData("QUANTIZED_VOLUME_OFFSET",d,"FLOAT","VEC3");if(s=new G.BufferGeometry,S){let T=new Float32Array(d*3);for(let P=0;P<d;P++)for(let B=0;B<3;B++){let D=3*P+B;T[D]=S[D]/65535*_[B]}a.x=k[0],a.y=k[1],a.z=k[2],s.setAttribute("position",new G.BufferAttribute(T,3,!1))}else s.setAttribute("position",new G.BufferAttribute(u,3,!1));if(m!==null)s.setAttribute("normal",new G.BufferAttribute(m,3,!1));else if(h!==null){let T=new Float32Array(d*3),P=new G.Vector3;for(let B=0;B<d;B++){let D=h[B*2],O=h[B*2+1],E=Ew(D,O,P);T[B*3]=E.x,T[B*3+1]=E.y,T[B*3+2]=E.z}s.setAttribute("normal",new G.BufferAttribute(T,3,!1))}if(b!==null)s.setAttribute("color",new G.BufferAttribute(b,4,!0)),i.vertexColors=!0,i.transparent=!0,i.depthWrite=!1;else if(f!==null)s.setAttribute("color",new G.BufferAttribute(f,3,!0)),i.vertexColors=!0;else if(v!==null){let T=new Uint8Array(d*3);for(let P=0;P<d;P++){let B=Pw(v[P]);for(let D=0;D<3;D++){let O=3*P+D;T[O]=B[D]}}s.setAttribute("color",new G.BufferAttribute(T,3,!0)),i.vertexColors=!0}else if(y!==null){i.color=new G.Color(y[0],y[1],y[2]);let T=y[3]/255;T<1&&(i.opacity=T,i.transparent=!0,i.depthWrite=!1)}}let c=new G.Points(s,i);c.position.copy(a),t.scene=c,t.scene.featureTable=n,t.scene.batchTable=r;let l=n.getData("RTC_CENTER",1,"FLOAT","VEC3");return l&&(t.scene.position.x+=l[0],t.scene.position.y+=l[1],t.scene.position.z+=l[2]),t})}};function Aw(e){let{x:t,y:n,z:r}=e;e.x=r,e.y=t,e.z=n}function Rw(e){return-e+Math.PI/2}var fb=new G.Spherical,di=new G.Vector3,yn=new G.Vector3,Rd=new G.Vector3,Kn=new G.Matrix4,Pr=new G.Matrix4,Ld=new G.Sphere,Mn=new G.Euler,gb=new G.Vector3,bb=new G.Vector3,yb=new G.Vector3,$a=new G.Vector3,Hl=new G.Ray,Lw=1e-12,Ow=.1;var jd=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new G.Vector3(e,t,n)}intersectRay(e,t){return Kn.makeScale(...this.radius).invert(),Ld.center.set(0,0,0),Ld.radius=1,Hl.copy(e).applyMatrix4(Kn),Hl.intersectSphere(Ld,t)?(Kn.makeScale(...this.radius),t.applyMatrix4(Kn),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,gb,bb,yb),this.getCartographicToPosition(e,t,n,$a),r.makeBasis(gb,bb,yb).setPosition($a)}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,Kn),Mn.set(i,o,-r,"ZXY"),a.makeRotationFromEuler(Mn).premultiply(Kn),s===1?(Mn.set(Math.PI/2,0,0,"XYZ"),Pr.makeRotationFromEuler(Mn),a.multiply(Pr)):s===2&&(Mn.set(-Math.PI/2,0,Math.PI,"XYZ"),Pr.makeRotationFromEuler(Mn),a.multiply(Pr)),a}getCartographicFromObjectFrame(e,t,n=2){return n===1?(Mn.set(-Math.PI/2,0,0,"XYZ"),Pr.makeRotationFromEuler(Mn).premultiply(e)):n===2?(Mn.set(-Math.PI/2,0,Math.PI,"XYZ"),Pr.makeRotationFromEuler(Mn).premultiply(e)):Pr.copy(e),$a.setFromMatrixPosition(Pr),this.getPositionToCartographic($a,t),this.getEastNorthUpFrame(t.lat,t.lon,0,Kn).invert(),Pr.premultiply(Kn),Mn.setFromRotationMatrix(Pr,"ZXY"),t.azimuth=-Mn.z,t.elevation=Mn.x,t.roll=Mn.y,t}getEastNorthUpAxes(e,t,n,r,i,o=$a){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,di);let i=this.radius;yn.copy(di),yn.x*=i.x**2,yn.y*=i.y**2,yn.z*=i.z**2;let o=Math.sqrt(di.dot(yn));return yn.divideScalar(o),r.copy(yn).addScaledVector(di,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,yn),this.getPositionToNormal(yn,di);let n=Rd.subVectors(e,yn);return t.lon=Math.atan2(di.y,di.x),t.lat=Math.asin(di.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return fb.set(1,Rw(e),t),n.setFromSpherical(fb).normalize(),Aw(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,c=e.z*e.z*o,l=a+s+c,d=Math.sqrt(1/l),u=yn.copy(e).multiplyScalar(d);if(l<Ow)return isFinite(d)?t.copy(u):null;let m=Rd.set(u.x*r*2,u.y*i*2,u.z*o*2),h=(1-d)*e.length()/(.5*m.length()),f=0,b,v,y,S,_,k,T,P,B,D,O;do{h-=f,y=1/(1+h*r),S=1/(1+h*i),_=1/(1+h*o),k=y*y,T=S*S,P=_*_,B=k*y,D=T*S,O=P*_,b=a*k+s*T+c*P-1,v=a*B*r+s*D*i+c*O*o;let E=-2*v;f=b/E}while(Math.abs(b)>Lw);return t.set(e.x*y,e.y*S,e.z*_)}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*G.MathUtils.DEG2RAD,i=Math.sin(r)**2;return t/Math.sqrt(1-n*i)}getPositionElevation(e){this.getPositionToSurfacePoint(e,yn);let t=Rd.subVectors(e,yn);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(Kn.makeScale(...this.radius).invert(),Hl.copy(e).applyMatrix4(Kn),yn.set(0,0,0),Hl.closestPointToPoint(yn,t).normalize(),Kn.makeScale(...this.radius),t.applyMatrix4(Kn))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},es=new jd(Wi,Wi,wd);es.name="WGS84 Earth";var Gl=new G.Vector3,jo=new G.Vector3,Fo=new G.Vector3,Od=new G.Vector3,Wl=new G.Quaternion,Xl=new G.Vector3,Ho=new G.Matrix4,vb=new G.Matrix4,xb=new G.Vector3,_b=new G.Matrix4,Dd=new G.Quaternion,Id={};function wb(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 Fd=class extends Pd{constructor(e=G.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new G.Matrix4,this.ellipsoid=es.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,c=this.manager,l=c.getHandler("path.gltf")||new Zl.GLTFLoader(c);s.credentials==="include"&&s.mode==="cors"&&l.setCrossOrigin("use-credentials"),"credentials"in s&&l.setWithCredentials(s.credentials==="include"),s.headers&&l.setRequestHeader(s.headers);let d=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(d)||(d+="/");let u=this.adjustmentTransform;l.parse(i,d,m=>{let h=n.getData("INSTANCES_LENGTH"),f=n.getData("POSITION",h,"FLOAT","VEC3"),b=n.getData("POSITION_QUANTIZED",h,"UNSIGNED_SHORT","VEC3"),v=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),y=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),S=n.getData("NORMAL_UP",h,"FLOAT","VEC3"),_=n.getData("NORMAL_RIGHT",h,"FLOAT","VEC3"),k=n.getData("NORMAL_UP_OCT32P",h,"UNSIGNED_SHORT","VEC2"),T=n.getData("NORMAL_RIGHT_OCT32P",h,"UNSIGNED_SHORT","VEC2"),P=n.getData("SCALE_NON_UNIFORM",h,"FLOAT","VEC3"),B=n.getData("SCALE",h,"FLOAT","SCALAR"),D=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),O=n.getData("EAST_NORTH_UP");if(!f&&b){f=new Float32Array(h*3);for(let A=0;A<h;A++)f[A*3+0]=v[0]+b[A*3+0]/65535*y[0],f[A*3+1]=v[1]+b[A*3+1]/65535*y[1],f[A*3+2]=v[2]+b[A*3+2]/65535*y[2]}let E=new G.Vector3;for(let A=0;A<h;A++)E.x+=f[A*3+0]/h,E.y+=f[A*3+1]/h,E.z+=f[A*3+2]/h;let g=[],M=[];m.scene.updateMatrixWorld(),m.scene.traverse(A=>{if(A.isMesh){M.push(A);let{geometry:N,material:z}=A,U=new G.InstancedMesh(N,z,h);U.position.copy(E),D&&(U.position.x+=D[0],U.position.y+=D[1],U.position.z+=D[2]),g.push(U)}});for(let A=0;A<h;A++){Od.set(f[A*3+0]-E.x,f[A*3+1]-E.y,f[A*3+2]-E.z),Wl.identity(),S&&_?(jo.set(S[A*3+0],S[A*3+1],S[A*3+2]),Fo.set(_[A*3+0],_[A*3+1],_[A*3+2]),Gl.crossVectors(Fo,jo).normalize(),Ho.makeBasis(Fo,jo,Gl),Wl.setFromRotationMatrix(Ho)):k&&T&&(wb(k[A*2+0],k[A*2+1],65535,jo),wb(T[A*2+0],T[A*2+1],65535,Fo),Gl.crossVectors(Fo,jo).normalize(),Ho.makeBasis(Fo,jo,Gl),Wl.setFromRotationMatrix(Ho)),Xl.set(1,1,1),P&&Xl.set(P[A*3+0],P[A*3+1],P[A*3+2]),B&&Xl.multiplyScalar(B[A]);for(let N=0,z=g.length;N<z;N++){let U=g[N];Dd.copy(Wl),O&&(U.updateMatrixWorld(),xb.copy(Od).applyMatrix4(U.matrixWorld),this.ellipsoid.getPositionToCartographic(xb,Id),this.ellipsoid.getEastNorthUpFrame(Id.lat,Id.lon,_b),Dd.setFromRotationMatrix(_b)),Ho.compose(Od,Dd,Xl).multiply(u);let q=M[N];vb.multiplyMatrices(Ho,q.matrixWorld),U.setMatrixAt(A,vb)}}m.scene.clear(),m.scene.add(...g),m.batchTable=r,m.featureTable=n,m.scene.batchTable=r,m.scene.featureTable=n,o(m)},a)})})}},Rb=class extends Ad{constructor(e=G.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new G.Matrix4,this.ellipsoid=es.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:c}=t.tiles[a];switch(s){case"b3dm":{let l=c.slice(),d=new zd(n);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions,d.adjustmentTransform.copy(i);let u=d.parse(l.buffer);o.push(u);break}case"pnts":{let l=c.slice(),d=new Ud(n);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions;let u=d.parse(l.buffer);o.push(u);break}case"i3dm":{let l=c.slice(),d=new Fd(n);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions,d.ellipsoid.copy(r),d.adjustmentTransform.copy(i);let u=d.parse(l.buffer);o.push(u);break}}}return Promise.all(o).then(a=>{let s=new G.Group;return a.forEach(c=>{s.add(c.scene)}),{tiles:a,scene:s}})}},Ka=new G.Matrix4,Dw=class extends G.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new G.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?Ka.copy(this.matrix):Ka.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=Ka.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(Ka),this.matrixWorldInverse.copy(Ka).invert();let i=this.children;for(let c=0,l=i.length;c<l;c++)i[c].updateMatrixWorld();let{tilesRenderer:o}=this,{activeTiles:a,visibleTiles:s}=o;a.forEach(c=>{s.has(c)||c.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},Iw=new G.Ray;function Bw(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 kw(e){return"traversal"in e}function Lb(e,t,n,r,i=null){if(!kw(t))return;let{group:o,activeTiles:a}=e,{boundingVolume:s}=t.engineData;if(i===null&&(i=Iw,i.copy(n.ray).applyMatrix4(o.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(i))return;a.has(t)&&Bw(t,n,e,r);let c=t.children;for(let l=0,d=c.length;l<d;l++)Lb(e,c[l],n,r,i)}var ql=new G.Vector3,Yl=new G.Vector3,Cn=new G.Vector3,$l=new G.Ray,Nd=class{constructor(e=new G.Box3,t=new G.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new G.Matrix4,this.points=Array(8).fill().map(()=>new G.Vector3),this.planes=[,,,,,,].fill().map(()=>new G.Plane)}copy(e){return this.box.copy(e.box),this.transform.copy(e.transform),this.update(),this}clone(){return new this.constructor().copy(this)}clampPoint(e,t){return t.copy(e).applyMatrix4(this.inverseTransform).clamp(this.box.min,this.box.max).applyMatrix4(this.transform)}distanceToPoint(e){return this.clampPoint(e,Cn).distanceTo(e)}containsPoint(e){return Cn.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(Cn)}intersectsRay(e){return $l.copy(e).applyMatrix4(this.inverseTransform),$l.intersectsBox(this.box)}intersectRay(e,t){return $l.copy(e).applyMatrix4(this.inverseTransform),$l.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 c=-1;c<=1;c+=2)for(let l=-1;l<=1;l+=2)e[a].set(s<0?i.x:o.x,c<0?i.y:o.y,l<0?i.z:o.z).applyMatrix4(n),a++;this.updatePlanes()}updatePlanes(){ql.copy(this.box.min).applyMatrix4(this.transform),Yl.copy(this.box.max).applyMatrix4(this.transform),Cn.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(Cn,ql),this.planes[1].setFromNormalAndCoplanarPoint(Cn,Yl).negate(),Cn.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(Cn,ql),this.planes[3].setFromNormalAndCoplanarPoint(Cn,Yl).negate(),Cn.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(Cn,ql),this.planes[5].setFromNormalAndCoplanarPoint(Cn,Yl).negate()}intersectsSphere(e){return this.clampPoint(e.center,Cn),Cn.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 c=n[s],l=o.distanceToPoint(c);a=a<l?l: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 c=t[s],l=o.distanceToPoint(c);a=a<l?l:a}if(a<0)return!1}return!0}},Ja=Math.PI,Bd=Ja/2,Za=new G.Vector3,Xi=new G.Vector3,fr=new G.Vector3,be=new G.Vector3,vn=new G.Matrix4,Nw=new G.Box3,Sb=new G.Matrix4;function pi(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function Mb(e){return e.x!==e.y}var Ob=class extends jd{constructor(e=1,t=1,n=1,r=-Bd,i=Bd,o=0,a=2*Ja,s=0,c=0){super(e,t,n),this.latStart=r,this.latEnd=i,this.lonStart=o,this.lonEnd=a,this.heightStart=s,this.heightEnd=c}getBoundingBox(e,t){Mb(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:n,latEnd:r,lonStart:i,lonEnd:o,heightStart:a,heightEnd:s}=this,c=(n+r)*.5,l=(i+o)*.5,d=n>0,u=r<0,m;m=d?n:u?r:0;let{min:h,max:f}=e;h.setScalar(1/0),f.setScalar(-1/0),o-i<=Ja?(this.getCartographicToNormal(c,l,fr),Xi.set(0,0,1),Za.crossVectors(Xi,fr).normalize(),Xi.crossVectors(fr,Za).normalize(),t.makeBasis(Za,Xi,fr),vn.copy(t).invert(),this.getCartographicToPosition(m,i,s,be).applyMatrix4(vn),f.x=Math.abs(be.x),h.x=-f.x,this.getCartographicToPosition(r,i,s,be).applyMatrix4(vn),f.y=be.y,this.getCartographicToPosition(r,l,s,be).applyMatrix4(vn),f.y=Math.max(be.y,f.y),this.getCartographicToPosition(n,i,s,be).applyMatrix4(vn),h.y=be.y,this.getCartographicToPosition(n,l,s,be).applyMatrix4(vn),h.y=Math.min(be.y,h.y),this.getCartographicToPosition(c,l,s,be).applyMatrix4(vn),f.z=be.z,this.getCartographicToPosition(n,i,a,be).applyMatrix4(vn),h.z=be.z,this.getCartographicToPosition(r,i,a,be).applyMatrix4(vn),h.z=Math.min(be.z,h.z)):(this.getCartographicToPosition(m,l,s,fr),fr.z=0,fr.length()<1e-10?fr.set(1,0,0):fr.normalize(),Xi.set(0,0,1),Za.crossVectors(fr,Xi).normalize(),t.makeBasis(Za,Xi,fr),vn.copy(t).invert(),this.getCartographicToPosition(m,l+Bd,s,be).applyMatrix4(vn),f.x=Math.abs(be.x),h.x=-f.x,this.getCartographicToPosition(r,0,u?a:s,be).applyMatrix4(vn),f.y=be.y,this.getCartographicToPosition(n,0,d?a:s,be).applyMatrix4(vn),h.y=be.y,this.getCartographicToPosition(m,l,s,be).applyMatrix4(vn),f.z=be.z,this.getCartographicToPosition(m,o,s,be).applyMatrix4(vn),h.z=be.z),e.getCenter(be),e.min.sub(be).multiplyScalar(1.0000000000001),e.max.sub(be).multiplyScalar(1.0000000000001),be.applyMatrix4(t),t.setPosition(be)}getBoundingSphere(e){Mb(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(Nw,Sb),e.center.setFromMatrixPosition(Sb),e.radius=0;let{latStart:t,latEnd:n,lonStart:r,lonEnd:i,heightStart:o,heightEnd:a}=this,s=(t+n)*.5,c=(r+i)*.5,l=t>0,d=n<0,u;u=l?t:d?n:0,this.getCartographicToPosition(u,r,a,be),pi(be,e),this.getCartographicToPosition(n,r,a,be),pi(be,e),this.getCartographicToPosition(n,c,a,be),pi(be,e),this.getCartographicToPosition(t,r,a,be),pi(be,e),this.getCartographicToPosition(t,c,a,be),pi(be,e),this.getCartographicToPosition(s,c,a,be),pi(be,e),this.getCartographicToPosition(t,r,o,be),pi(be,e),i-r>Ja&&(this.getCartographicToPosition(u,c+Ja,a,be),pi(be,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},jr=new G.Vector3,Fr=new G.Vector3,Hr=new G.Vector3,Cb=new G.Vector3,Tb=new G.Vector3,Vw=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,Cb)&&(i=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(Cb)),r&&r.intersectRay(e,Tb)&&(o=r.containsPoint(e.origin)?0:e.origin.distanceToSquared(Tb));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 Nd;jr.set(e[3],e[4],e[5]),Fr.set(e[6],e[7],e[8]),Hr.set(e[9],e[10],e[11]);let r=jr.length(),i=Fr.length(),o=Hr.length();jr.normalize(),Fr.normalize(),Hr.normalize(),r===0&&jr.crossVectors(Fr,Hr),i===0&&Fr.crossVectors(jr,Hr),o===0&&Hr.crossVectors(jr,Fr),n.transform.set(jr.x,Fr.x,Hr.x,e[0],jr.y,Fr.y,Hr.y,e[1],jr.z,Fr.z,Hr.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 G.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 Ob(...e.radius,n,i,t,r,o,a),c=new Nd;s.getBoundingBox(c.box,c.transform),c.update(),this.region=s,this.regionObb=c}},zw=new G.Matrix3;function Uw(e,t,n,r){let i=zw.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 jw=class extends G.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new G.Vector3)}setFromProjectionMatrix(...e){return super.setFromProjectionMatrix(...e),this.calculateFrustumPoints(),this}calculateFrustumPoints(){let{planes:e,points:t}=this;[[e[0],e[3],e[4]],[e[1],e[3],e[4]],[e[0],e[2],e[4]],[e[1],e[2],e[4]],[e[0],e[3],e[5]],[e[1],e[3],e[5]],[e[0],e[2],e[5]],[e[1],e[2],e[5]]].forEach((n,r)=>{Uw(n[0],n[1],n[2],t[r])})}};var Vd=0;function Pb(e,t,n,r){try{return G.TextureUtils.getByteLength(e,t,n,r)}catch{return Vd}}function Fw(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??Vd;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+=Pb(s.width,s.height,t,n);return a}if(!r)return Vd;let o=Pb(r.width,r.height,t,n);return o*=e.generateMipmaps?4/3:1,o}function Hw(e){let t=new Set,n=0;return e.traverse(r=>{if(r.geometry&&!t.has(r.geometry)&&(n+=(0,Ab.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+=Fw(a),t.add(a))}}}),n}var Db=Symbol("INITIAL_FRUSTUM_CULLED"),Kl=new G.Matrix4,Qa=new G.Vector3,kd=new G.Vector2,Gw=new G.Vector3(1,0,0),Ww=new G.Vector3(0,1,0),Xw=()=>null;function Eb(e,t){e.traverse(n=>{n.frustumCulled=n[Db]&&t})}var Hd=class extends Md{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{Eb(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new Dw(this),this.ellipsoid=es.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new G.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new G.LoadingManager,this._listeners={}}addEventListener(e,t){G.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return G.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){G.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){G.EventDispatcher.prototype.dispatchEvent.call(this,e)}getBoundingBox(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getAABB(e),!0):!1}getOrientedBoundingBox(e,t){if(!this.root)return!1;let n=this.root.engineData.boundingVolume;return n?(n.getOBB(e,t),!0):!1}getBoundingSphere(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getSphere(e),!0):!1}forEachLoadedModel(e){this.traverse(t=>{let n=t.engineData&&t.engineData.scene;n&&e(n,t)},null,!1)}raycast(e,t){if(this.root)if(this.accelerateRaycast)Lb(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 G.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(kd),this.setResolution(e,kd.x,kd.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(Ww,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(Gw,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 jw,isOrthographic:!1,sseDenominator:-1,position:new G.Vector3,invScale:-1,pixelSize:0});Qa.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(Qa.x-Qa.y,Qa.x-Qa.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],c=s.frustum,l=s.position,d=n.get(a);(d.width===0||d.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 m=2/u[0],h=2/u[5];s.pixelSize=Math.max(h/d.height,m/d.width)}else s.sseDenominator=2/u[5]/d.height;Kl.copy(e.matrixWorld),Kl.premultiply(a.matrixWorldInverse),Kl.premultiply(a.projectionMatrix),c.setFromProjectionMatrix(Kl,a.coordinateSystem,a.reversedDepth),l.set(0,0,0),l.applyMatrix4(a.matrixWorld),l.applyMatrix4(e.matrixWorldInverse)}}update(){if(super.update(),this.cameras.length===0&&this.root){let e=!1;this.invokeAllPlugins(t=>e||(e=!!(t!==this&&t.calculateTileViewError))),e===!1&&console.warn("TilesRenderer: no cameras defined. Cannot update 3d tiles.")}}preprocessNode(e,t,n=null){super.preprocessNode(e,t,n);let r=new G.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 G.Matrix4().copy(r).invert(),o=new Vw;"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=Xw}async parseTile(e,t,n,r,i){let o=t.engineData,a=jl(r),s=this.fetchOptions,c=this.manager,l=null,d=o.transform,u=this._upRotationMatrix,m=(Gi(e)||n).toLowerCase();switch(m){case"b3dm":{let _=new zd(c);_.workingPath=a,_.fetchOptions=s,_.adjustmentTransform.copy(u),l=_.parse(e);break}case"pnts":{let _=new Ud(c);_.workingPath=a,_.fetchOptions=s,l=_.parse(e);break}case"i3dm":{let _=new Fd(c);_.workingPath=a,_.fetchOptions=s,_.adjustmentTransform.copy(u),_.ellipsoid.copy(this.ellipsoid),l=_.parse(e);break}case"cmpt":{let _=new Rb(c);_.workingPath=a,_.fetchOptions=s,_.adjustmentTransform.copy(u),_.ellipsoid.copy(this.ellipsoid),l=_.parse(e).then(k=>k.scene);break}case"gltf":case"glb":{let _=c.getHandler("path.gltf")||c.getHandler("path.glb")||new Zl.GLTFLoader(c);_.setWithCredentials(s.credentials==="include"),_.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&_.setCrossOrigin("use-credentials");let k=_.resourcePath||_.path||a;!/[\\/]$/.test(k)&&k.length&&(k+="/"),l=_.parseAsync(e,k).then(T=>{T.scene=T.scene||new G.Group;let{scene:P}=T;return P.updateMatrix(),P.matrix.multiply(u).decompose(P.position,P.quaternion,P.scale),T});break}default:l=this.invokeOnePlugin(_=>_.parseToMesh&&_.parseToMesh(e,t,n,r,i));break}let h=await l;if(h===null)throw Error(`TilesRenderer: Content type "${m}" not supported.`);let f,b;h.isObject3D?(f=h,b=null):(f=h.scene,b=h),f.updateMatrix(),f.matrix.premultiply(d),f.matrix.decompose(f.position,f.quaternion,f.scale),await this.invokeAllPlugins(_=>_.processTileModel&&_.processTileModel(f,t)),f.traverse(_=>{_[Db]=_.frustumCulled,_.userData.tile=t}),Eb(f,!this.autoDisableRendererCulling);let v=[],y=[],S=[];if(f.traverse(_=>{if(_.geometry&&y.push(_.geometry),_.material){let k=_.material;v.push(_.material);for(let T in k){let P=k[T];P&&P.isTexture&&S.push(P)}}}),i.aborted){for(let _=0,k=S.length;_<k;_++){let T=S[_];T.image instanceof ImageBitmap&&T.image.close(),T.dispose()}return}o.materials=v,o.geometry=y,o.textures=S,o.scene=f,o.metadata=b}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 c=i[a];c.image instanceof ImageBitmap&&c.image.close(),c.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,Hw(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,c=1/0,l=0,d=1/0;for(let u=0,m=r.length;u<m;u++){let h=i[u],f,b;if(h.isOrthographic){let y=h.pixelSize;f=e.geometricError/y,b=1/0}else{let y=h.sseDenominator;b=o.distanceToPoint(h.position),f=b===0?1/0:e.geometricError/(b*y)}let v=i[u].frustum;o.intersectsFrustum(v)&&(a=!0,s=Math.max(s,f),c=Math.min(c,b)),l=Math.max(l,f),d=Math.min(d,b)}a?(t.inView=!0,t.error=s,t.distanceFromCamera=c):(t.inView=!1,t.error=l,t.distanceFromCamera=d)}dispose(){super.dispose(),this.group.removeFromParent()}};var $=require("three"),Yb=require("three/addons/loaders/GLTFLoader.js"),Xd=require("three/addons/postprocessing/Pass.js");var kE=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var Ib=new Tr;Ib.maxJobs=10,Ib.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)?zo(n,r):a?1:-1};var Bb=new $.Vector3;function ts(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,r=new $.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 c=$.MathUtils.clamp(e.getComponent(a,s),n,1);r.setComponent(a,s,c)}return r}function qw(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 $.BufferAttribute(new t(i.count*i.itemSize),i.itemSize,!1),a=i.itemSize,s=i.count;n.computeBoundingBox();let c=n.boundingBox,{min:l,max:d}=c,u=2**(8*t.BYTES_PER_ELEMENT-1)-1,m=-u;for(let h=0;h<s;h++)for(let f=0;f<a;f++){let b=f===0?"x":f===1?"y":"z",v=l[b],y=d[b],S=$.MathUtils.mapLinear(i.getComponent(h,f),v,y,m,u);o.setComponent(h,f,S)}c.getCenter(Bb).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(Bb),e.scale.x*=.5*(d.x-l.x)/u,e.scale.y*=.5*(d.y-l.y)/u,e.scale.z*=.5*(d.z-l.z)/u,r.position=o,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var qd=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:c,normalType:l,positionType:d}=this._options;e.traverse(u=>{if(u.material&&r){let m=u.material;for(let h in m){let f=m[h];f&&f.isTexture&&f.generateMipmaps&&(f.generateMipmaps=!1,f.minFilter=$.LinearFilter)}}if(u.geometry){let m=u.geometry,h=m.attributes;if(o){let{uv:f,uv1:b,uv2:v,uv3:y}=h;f&&(h.uv=ts(f,c)),b&&(h.uv1=ts(b,c)),v&&(h.uv2=ts(v,c)),y&&(h.uv3=ts(y,c))}if(n&&!h.normals&&m.computeVertexNormals(),a&&h.normals&&(h.normals=ts(h.normals,l)),s&&qw(u,d),i&&m.index){let f=h.position.count,b=m.index,v=f>65535?Uint32Array:f>255?Uint16Array:Uint8Array;if(!(b.array instanceof v)){let y=new v(m.index.count);y.set(b.array);let S=new $.BufferAttribute(y,1);m.setIndex(S)}}}})}};function Zt(e,t,n){return e&&t in e?e[t]:n}function $b(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function Yw(e){return/^FLOAT/.test(e)}function os(e){return/^VEC/.test(e)}function as(e){return/^MAT/.test(e)}function Kb(e,t,n,r=null){return as(n)||os(n)?r.fromArray(e,t):e[t]}function Gd(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new $.Vector2;case"VEC3":return new $.Vector3;case"VEC4":return new $.Vector4;case"MAT2":return new $.Matrix2;case"MAT3":return new $.Matrix3;case"MAT4":return new $.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function kb(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 is(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 $w(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]=Ql(e,t[n])}else t=Ql(e,t);return t}function Ql(e,t=null){let n=e.default,r=e.type;if(t||(t=Gd(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(as(r))t.fromArray(n);else if(os(r))t.fromArray(n);else return n}function Kw(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=Ql(e,a)),a}function o(a){if(as(r)){let s=a.elements;for(let c=0,l=n.length;c<l;c++)if(n[c]!==s[c])return!1;return!0}else if(os(r)){for(let s=0,c=n.length;s<c;s++)if(n[s]!==a.getComponent(s))return!1;return!0}else return n===a}}function Zw(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 Qw(e,t){let{type:n,componentType:r,scale:i,offset:o,normalized:a}=e;if(Array.isArray(t))for(let u=0,m=t.length;u<m;u++)t[u]=s(t[u]);else t=s(t);return t;function s(u){return u=as(n)?l(u):os(n)?c(u):d(u),u}function c(u){return u.x=d(u.x),u.y=d(u.y),"z"in u&&(u.z=d(u.z)),"w"in u&&(u.w=d(u.w)),u}function l(u){let m=u.elements;for(let h=0,f=m.length;h<f;h++)m[h]=d(m[h]);return u}function d(u){return a&&(u=Zw(r,u)),(a||Yw(r))&&(u=u*i+o),u}}function Yd(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++)kb(e.type,t[r])||(t[r]=Gd(e))}else kb(e.type,t)||(t=Gd(e));return t}function Jl(e,t){for(let n in t)n in e||delete t[n];for(let n in e){let r=e[n];t[n]=Yd(r,t[n])}}function Jw(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 tc=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=Zt(t,"scale",1),this.max=Zt(t,"max",1/0),this.min=Zt(t,"min",-1/0),this.required=t.required||!1,this.noData=Zt(t,"noData",null),this.default=Zt(t,"default",null),this.semantic=Zt(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=Zt(n,"offset",this.offset),this.scale=Zt(n,"scale",this.scale),this.max=Zt(n,"max",this.max),this.min=Zt(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=Zt(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return Yd(this,e,t)}resolveDefaultElement(e){return Ql(this,e)}resolveDefault(e){return $w(this,e)}resolveNoData(e){return Kw(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 $b(this.type)?Qw(this,e):e}},$d=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=tc){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}},e1=class extends tc{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},t1=class extends $d{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(e1)}getData(e,t,n={}){let r=this.properties;Jl(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(as(o)){let s=r.elements;for(let c=s.length;0<c;)s[0]=a.getComponent(t,0)}else if(os(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}},n1=class extends tc{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=Jw(this.type),this.arrayOffsets=Zt(n,"arrayOffsets",null),this.stringOffsets=Zt(n,"stringOffsets",null),this.arrayOffsetType=Zt(n,"arrayOffsetType","UINT32"),this.stringOffsetType=Zt(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:r,arrayOffsetType:i}=this,o=new(is(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(is(i))(e[r])[n]}else this.array&&(n*=this.count);return n}},r1=class extends $d{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(n1)}getData(e,t={}){let n=this.properties;Jl(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,c=s[i.values],l=new(is(o,a))(c),d=i.getIndexOffsetFromId(s,t);if($b(a)||a==="ENUM")return Kb(l,(d+n)*i.valueLength,a,r);if(a==="STRING"){let u=d+n,m=0;if(i.stringOffsets!==null){let{stringOffsets:f,stringOffsetType:b}=i,v=new(is(b))(s[f]);m=v[u+1]-v[u],u=v[u]}let h=new Uint8Array(l.buffer,u,m);r=new TextDecoder().decode(h)}else if(a==="BOOLEAN"){let u=d+n,m=Math.floor(u/8),h=u%8;r=(l[m]>>h&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,c=n.length;s<c;s++)n[s]=this._readValueAtIndex(e,t,s,n[s]);else n=this._readValueAtIndex(e,t,0,n);return n=r.adjustValueScaleOffset(n),n=r.resolveEnumsToStrings(n),n=r.resolveNoData(n),n}},ns=new $.Box2,Nb=class{constructor(){this._renderer=new $.WebGLRenderer,this._target=new $.WebGLRenderTarget(1,1),this._texTarget=new $.WebGLRenderTarget,this._quad=new Xd.FullScreenQuad(new $.ShaderMaterial({blending:$.CustomBlending,blendDst:$.ZeroFactor,blendSrc:$.OneFactor,uniforms:{map:{value:null},pixel:{value:new $.Vector2}},vertexShader:`
|
|
3673
|
+
`,Ch=class extends Hc.Effect{constructor(t=1){super("ExposureEffect",$C,{blendFunction:Hc.BlendFunction.NORMAL,uniforms:new Map([["exposure",new Av.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},Ev=(0,Ca.forwardRef)(function({exposure:t},n){let r=(0,Ca.useMemo)(()=>new Ch(t),[]);return r.exposure=t,(0,Ca.useImperativeHandle)(n,()=>r,[r]),(0,Rv.jsx)("primitive",{object:r,dispose:null})});var Do=require("@react-three/fiber"),Ov=lc(require("@react-three/postprocessing")),Lv=require("postprocessing"),ir=require("three"),rr=require("react"),Iv=require("react/jsx-runtime"),KC=Ov.LensFlareEffect;function Dv({config:e}){let t=(0,Do.useThree)(u=>u.camera),n=(0,Do.useThree)(u=>u.raycaster),r=(0,Do.useThree)(u=>u.scene),i=(0,Do.useThree)(u=>u.viewport),o=(0,rr.useRef)(null),a=(0,rr.useRef)(new ir.Vector3),s=(0,rr.useRef)(new ir.Vector2),l=(0,rr.useMemo)(()=>new ir.Vector3(...e.lensPosition),[e.lensPosition]),c=(0,rr.useMemo)(()=>new ir.Color(e.colorGain??"#141414"),[e.colorGain]),d=(0,rr.useMemo)(()=>new ir.Vector2(0,0),[]),p=(0,rr.useMemo)(()=>new KC({blendFunction:Lv.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:l,screenRes:d,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:c,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[c,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,l,d]);return(0,rr.useEffect)(()=>(o.current=p,()=>{p.dispose(),o.current=null}),[p]),(0,rr.useEffect)(()=>{let u=p.uniforms.get("screenRes");u&&(u.value.x=i.width,u.value.y=i.height)},[p,i]),(0,Do.useFrame)((u,h)=>{let m=o.current;if(!m)return;let b=m.uniforms.get("lensPosition"),f=m.uniforms.get("opacity");if(!b||!f)return;let g=1;if(a.current.copy(l).project(t),a.current.z>1)return;b.value.x=a.current.x,b.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 ir.Mesh&&(x.material.uniforms?._transmission?.value>.2||x.material._transmission&&x.material._transmission>.2?g=.2:x.material.transparent&&(g=x.material.opacity))),f.value=ir.MathUtils.damp(f.value,g,12,h)}),(0,Iv.jsx)("primitive",{object:p,dispose:null})}var Th=require("@react-three/fiber"),Bv=require("postprocessing"),Xc=require("react");var Ta=require("postprocessing"),st=require("three"),ZC=`
|
|
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
|
+
}`,QC=`
|
|
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
|
+
}`,JC=`
|
|
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
|
+
}`,Wc=class extends Ta.Effect{constructor(n,r,i,o,a={}){super("SelectionOutlineEffect",JC,{blendFunction:Ta.BlendFunction.SCREEN,uniforms:new Map([["selectionMask",new st.Uniform(null)],["visibleMask",new st.Uniform(null)],["texelSize",new st.Uniform(new st.Vector2)],["outlineColor",new st.Uniform(new st.Color(a.visibleEdgeColor??2278750))],["edgeStrength",new st.Uniform(a.edgeStrength??3)]])});this.scene=n;this.camera=r;this.getObjects=i;this.layer=o;this.maskTarget=new st.WebGLRenderTarget(1,1,{minFilter:st.NearestFilter,magFilter:st.NearestFilter});this.visibleTarget=new st.WebGLRenderTarget(1,1,{minFilter:st.NearestFilter,magFilter:st.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 st.ShaderMaterial({name:"SelectionOutline.IDs",vertexShader:ZC,fragmentShader:QC,uniforms:{objectId:new st.Uniform(new st.Vector3),onlySelected:new st.Uniform(!1)},blending:st.NoBlending,toneMapped:!1,clipping:!0}),this.maskPass=new Ta.RenderPass(n,r,this.maskMaterial),this.maskPass.skipShadowMapUpdate=!0,this.maskPass.ignoreBackground=!0,this.maskPass.clearPass.overrideClearColor=new st.Color(0),this.maskPass.clearPass.overrideClearAlpha=0}update(n){let r=eT(this.scene,this.getObjects()),i=[],o=this.camera.layers.mask;try{this.scene.traverseVisible(a=>{if(!(a instanceof st.Mesh))return;let s=r.get(a)??0,l=a.onBeforeRender;a.onBeforeRender=function(...c){l.apply(this,c);let d=c[4];d instanceof st.ShaderMaterial&&d.uniforms.objectId&&(d.uniforms.objectId.value.set((s&255)/255,(s>>>8&255)/255,(s>>>16&255)/255),d.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 eT(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 st.Mesh&&r.set(o,s);for(let l of o.children)i(l,s)};return i(e,0),r}var Nv=require("react/jsx-runtime");function kv({objects:e,layer:t,options:n}){let r=(0,Th.useThree)(a=>a.scene),i=(0,Th.useThree)(a=>a.camera),o=(0,Xc.useMemo)(()=>new Bv.EffectPass(i,new Wc(r,i,()=>e.current,t,n)),[r,i,e,t,n]);return(0,Xc.useEffect)(()=>()=>o.dispose(),[o]),(0,Nv.jsx)("primitive",{object:o,dispose:null})}function Vv(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 zv(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 qc=require("@react-three/postprocessing"),On=require("postprocessing"),Uv=require("three");function jv(e){return e==="linear"?On.ToneMappingMode.LINEAR:e==="reinhard"?On.ToneMappingMode.REINHARD:On.ToneMappingMode.ACES_FILMIC}function Yc(e){switch(e){case"verySmall":return On.KernelSize.VERY_SMALL;case"small":return On.KernelSize.SMALL;case"medium":return On.KernelSize.MEDIUM;case"large":return On.KernelSize.LARGE;case"veryLarge":return On.KernelSize.VERY_LARGE;case"huge":return On.KernelSize.HUGE}}function Fv(e){switch(e){case"constantMild":return On.GlitchMode.CONSTANT_MILD;case"constantWild":return On.GlitchMode.CONSTANT_WILD;default:return On.GlitchMode.SPORADIC}}function Ph(e){let t=new Uv.Color(e);return[t.r,t.g,t.b,1]}function Gv(e){return e==="radial"?qc.RampType.Radial:e==="mirroredLinear"?qc.RampType.MirroredLinear:qc.RampType.Linear}var $e=require("react/jsx-runtime"),Io={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new or.Color(ui.color).getHex(),hiddenEdgeColor:new or.Color(ui.color).multiplyScalar(.35).getHex(),kernelSize:pi.KernelSize.VERY_SMALL,blur:!1,xRay:!1},tT={edgeStrength:3};function nT(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var Bs=[],rT=(0,St.memo)(function({sceneConfig:t,selectedObjectRef:n,selectedObjectOutlineColor:r,highlightOnHover:i=!1,disabled:o=!1,onOutlineEffect:a,hasMultiSelection:s,multiOutlineObjects:l}){let c=(0,Pa.useThree)(v=>v.scene),d=(0,Pa.useThree)(v=>v.gl),p=(0,St.useRef)(null),u=t?.postProcessing,h=n??null,m=u?.outline.enabled===!0,b=m||i,f=(0,St.useMemo)(()=>new or.Color(r??"#22c55e").getHex(),[r]),g=(0,St.useMemo)(()=>({...tT,blendFunction:pi.BlendFunction.SCREEN,visibleEdgeColor:f}),[f]),y=2;for(;y===u?.outline.selectionLayer||y===u?.selectiveBloom.selectionLayer;)y+=1;let[x,_]=(0,St.useState)(()=>d.xr?.isPresenting??!1);(0,St.useEffect)(()=>{let v=d.xr;if(!v)return;let A=()=>_(!0),E=()=>_(!1);return v.addEventListener("sessionstart",A),v.addEventListener("sessionend",E),_(v.isPresenting),()=>{v.removeEventListener("sessionstart",A),v.removeEventListener("sessionend",E)}},[d]);let L=c.children.filter(v=>v.isLight),w=(0,St.useMemo)(()=>new or.Vector2(u?.chromaticAberration.offsetX??.002,u?.chromaticAberration.offsetY??.002),[u?.chromaticAberration.offsetX,u?.chromaticAberration.offsetY]),R=(0,St.useMemo)(()=>new or.Color(u?.outline.visibleEdgeColor??"#ffffff").getHex(),[u?.outline.visibleEdgeColor]),C=(0,St.useMemo)(()=>new or.Color(u?.outline.hiddenEdgeColor??"#22090a").getHex(),[u?.outline.hiddenEdgeColor]),P=(0,St.useMemo)(()=>Ph(u?.ramp.startColor??"#000000"),[u?.ramp.startColor]),S=(0,St.useMemo)(()=>Ph(u?.ramp.endColor??"#ffffff"),[u?.ramp.endColor]);return!u||x||o?null:(0,$e.jsxs)($e.Fragment,{children:[u.godRays.enabled===!0&&(0,$e.jsxs)("mesh",{ref:p,position:u.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,$e.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,$e.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,$e.jsxs)(Pe.EffectComposer,{multisampling:0,enableNormalPass:u.ssao.enabled===!0,autoClear:!1,children:[u.smaa.enabled===!0&&(0,$e.jsx)(Pe.SMAA,{}),u.ssao.enabled===!0&&(0,$e.jsx)(Pe.SSAO,{samples:u.ssao.samples,rings:u.ssao.rings,intensity:u.ssao.intensity,radius:u.ssao.radius,bias:u.ssao.bias,luminanceInfluence:u.ssao.luminanceInfluence,fade:u.ssao.fade,minRadiusScale:u.ssao.minRadiusScale,worldDistanceThreshold:u.ssao.worldDistanceThreshold,worldDistanceFalloff:u.ssao.worldDistanceFalloff,worldProximityThreshold:u.ssao.worldProximityThreshold,worldProximityFalloff:u.ssao.worldProximityFalloff}),u.autofocus.enabled===!0&&(0,$e.jsx)(Pe.Autofocus,{focusDistance:u.autofocus.focusDistance,focusRange:u.autofocus.focusRange,focalLength:u.autofocus.focalLength,bokehScale:u.autofocus.bokehScale,target:u.autofocus.target,mouse:u.autofocus.mouse,debug:u.autofocus.debug||void 0,manual:u.autofocus.manual,smoothTime:u.autofocus.smoothTime}),u.autofocus.enabled!==!0&&u.depthOfField.enabled===!0&&(0,$e.jsx)(Pe.DepthOfField,{focusDistance:u.depthOfField.focusDistance,focusRange:u.depthOfField.focusRange,focalLength:u.depthOfField.focalLength,bokehScale:u.depthOfField.bokehScale}),u.bloom.enabled===!0&&(0,$e.jsx)(Pe.Bloom,{intensity:u.bloom.intensity,luminanceThreshold:u.bloom.luminanceThreshold,luminanceSmoothing:u.bloom.luminanceSmoothing,mipmapBlur:u.bloom.mipmapBlur,radius:u.bloom.radius,levels:u.bloom.levels}),u.selectiveBloom.enabled===!0&&(0,$e.jsx)(Pe.SelectiveBloom,{selection:h??void 0,lights:L,selectionLayer:u.selectiveBloom.selectionLayer,intensity:u.selectiveBloom.intensity,luminanceThreshold:u.selectiveBloom.luminanceThreshold,luminanceSmoothing:u.selectiveBloom.luminanceSmoothing,kernelSize:Yc(u.selectiveBloom.kernelSize),mipmapBlur:u.selectiveBloom.mipmapBlur,inverted:u.selectiveBloom.inverted,ignoreBackground:u.selectiveBloom.ignoreBackground}),b&&(0,$e.jsx)(Pe.Outline,{ref:a,selection:Bs,selectionLayer:u.outline.selectionLayer,blendFunction:pi.BlendFunction.SCREEN,edgeStrength:m?u.outline.edgeStrength:Io.edgeStrength,pulseSpeed:m?u.outline.pulseSpeed:Io.pulseSpeed,visibleEdgeColor:m?R:Io.visibleEdgeColor,hiddenEdgeColor:m?C:Io.hiddenEdgeColor,kernelSize:m?Yc(u.outline.kernelSize):Io.kernelSize,blur:m?u.outline.blur:Io.blur,xRay:m?u.outline.xRay:Io.xRay}),s&&(0,$e.jsx)(kv,{objects:l,layer:y,options:g}),u.chromaticAberration.enabled===!0&&(0,$e.jsx)(Pe.ChromaticAberration,{offset:w,radialModulation:u.chromaticAberration.radialModulation,modulationOffset:u.chromaticAberration.modulationOffset}),u.colorAverage.enabled===!0&&(0,$e.jsx)(Pe.ColorAverage,{}),u.dotScreen.enabled===!0&&(0,$e.jsx)(Pe.DotScreen,{angle:u.dotScreen.angle,scale:u.dotScreen.scale}),u.glitch.enabled===!0&&(0,$e.jsx)(Pe.Glitch,{mode:Fv(u.glitch.mode),delay:new or.Vector2(u.glitch.delay[0],u.glitch.delay[1]),duration:new or.Vector2(u.glitch.duration[0],u.glitch.duration[1]),strength:new or.Vector2(u.glitch.strength[0],u.glitch.strength[1]),chromaticAberrationOffset:new or.Vector2(u.glitch.chromaticAberrationOffset[0],u.glitch.chromaticAberrationOffset[1]),columns:u.glitch.columns,ratio:u.glitch.ratio,active:!0}),u.grid.enabled===!0&&(0,$e.jsx)(Pe.Grid,{scale:u.grid.scale,lineWidth:u.grid.lineWidth}),u.lensflare.enabled===!0&&(0,$e.jsx)(Dv,{config:u.lensflare}),u.godRays.enabled===!0&&(0,$e.jsx)(Pe.GodRays,{sun:p,samples:u.godRays.samples,density:u.godRays.density,decay:u.godRays.decay,weight:u.godRays.weight,exposure:u.godRays.exposure,clampMax:u.godRays.clampMax,blur:u.godRays.blur,kernelSize:Yc(u.godRays.kernelSize)}),u.noise.enabled===!0&&(0,$e.jsx)(Pe.Noise,{premultiply:u.noise.premultiply,opacity:u.noise.opacity,blendFunction:pi.BlendFunction.ADD}),u.brightnessContrast.enabled===!0&&(0,$e.jsx)(Pe.BrightnessContrast,{brightness:u.brightnessContrast.brightness,contrast:u.brightnessContrast.contrast}),u.hueSaturation.enabled===!0&&(0,$e.jsx)(Pe.HueSaturation,{hue:u.hueSaturation.hue,saturation:u.hueSaturation.saturation}),u.toneMapping.enabled===!0&&(0,$e.jsx)(Ev,{exposure:u.toneMapping.exposure}),u.vignette.enabled===!0&&(0,$e.jsx)(Pe.Vignette,{eskil:u.vignette.eskil,offset:u.vignette.offset,darkness:u.vignette.darkness,blendFunction:pi.BlendFunction.NORMAL}),u.toneMapping.enabled===!0&&(0,$e.jsx)(Pe.ToneMapping,{mode:jv(u.toneMapping.mode),resolution:u.toneMapping.resolution,whitePoint:u.toneMapping.whitePoint,middleGrey:u.toneMapping.middleGrey,minLuminance:u.toneMapping.minLuminance,averageLuminance:u.toneMapping.averageLuminance,adaptationRate:u.toneMapping.adaptationRate}),u.sepia.enabled===!0&&(0,$e.jsx)(Pe.Sepia,{intensity:u.sepia.intensity,blendFunction:pi.BlendFunction.NORMAL}),u.scanline.enabled===!0&&(0,$e.jsx)(Pe.Scanline,{density:u.scanline.density,blendFunction:pi.BlendFunction.OVERLAY}),u.pixelation.enabled===!0&&(0,$e.jsx)(Pe.Pixelation,{granularity:u.pixelation.granularity}),u.ramp.enabled===!0&&(0,$e.jsx)(Pe.Ramp,{rampType:Gv(u.ramp.rampType),rampStart:u.ramp.rampStart,rampEnd:u.ramp.rampEnd,startColor:P,endColor:S,opacity:u.ramp.rampMask?1:u.ramp.opacity??.5,rampBias:u.ramp.rampBias,rampGain:u.ramp.rampGain,rampMask:u.ramp.rampMask,rampInvert:u.ramp.rampInvert})]})]})});function iT(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function Hv({hoveredObjectRef:e,selectedObjectRefs:t,...n}){let r=(0,Pa.useThree)(p=>p.scene),i=(0,Pa.useThree)(p=>p.camera),o=(0,Pa.useThree)(p=>p.invalidate),[a,s]=(0,St.useState)(null),l=(0,St.useRef)(Bs);l.current=t??Bs;let c=(0,St.useCallback)(p=>s(p),[]);(0,St.useLayoutEffect)(()=>{if(a)return zv(a,i)},[a,i]);let d=(0,St.useRef)({effect:null,objects:Bs});return(0,St.useEffect)(()=>{if(!a)return;let u=n.sceneConfig?.postProcessing?.outline.enabled===!0?nT(r):e&&Vv(e)?[e]:Bs;d.current.effect===a&&iT(d.current.objects,u)||(d.current={effect:a,objects:u},a.selection.set(u),o())}),(0,St.useEffect)(()=>{o()},[t,o]),(0,$e.jsx)(rT,{...n,onOutlineEffect:c,hasMultiSelection:l.current.length>0,multiOutlineObjects:l})}var Ft=require("react/jsx-runtime"),oT=1.5;function Ah({children:e,camera:t,backgroundColor:n,shadows:r=!0,sceneConfig:i,selectedObjectRef:o,selectedObjectRefs:a,selectedObjectOutlineColor:s,hoveredObjectRef:l,highlightOnHover:c,renderMode:d="demand",maxDpr:p=2,xrStore:u,rendererCaptureRef:h,preserveDrawingBuffer:m=!1,reduceGpuLoad:b,suspended:f=!1,paused:g=!1,onRendererCreated:y,backend:x="webgl"}){let _=x==="webgpu",L=b??Ms(),w=L?Math.min(p,oT):p,R=r&&!L,C=(0,Pr.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]),P=(0,Pr.useMemo)(()=>{if(n)return n;let F=i?.background;if(F?.enabled){if(F.type==="color")return F.color;if(F.type==="image"&&F.imageUrl.trim()||F.type==="environment")return null}return"#1c1c1d"},[n,i]),S=(0,Pr.useMemo)(()=>{let F=i?.postProcessing;return F?!!(F.glitch.enabled||F.noise.enabled||F.lensflare.enabled&&F.lensflare.animated):!1},[i?.postProcessing]),[v,A]=(0,Pr.useState)(!1),E=i?.environment,B=i?.groundShadows,N=(0,Pr.useMemo)(()=>{if(!E)return null;if(E.source==="custom"){let F=E.customEnvironmentUrl.trim();return yv(F)?{files:F}:null}return{preset:E.preset}},[E]),I=(0,Ft.jsxs)(Ft.Fragment,{children:[(0,Ft.jsx)(Ob,{captureRef:h}),(0,Ft.jsx)(Lb,{}),(0,Ft.jsx)(Pv,{cameraConfig:t}),(0,Ft.jsx)(Mv,{active:S}),(0,Ft.jsx)(Cv,{color:P}),N?(0,Ft.jsx)(ya,{onError:F=>console.warn("Failed to load environment map:",F),children:(0,Ft.jsx)(Pr.Suspense,{fallback:null,children:(0,Ft.jsx)(Wv.Environment,{...N,environmentIntensity:E?.intensity??.25,backgroundIntensity:E?.intensity??.25,background:i?.background.enabled===!0&&i.background.type==="environment"})})}):null,(0,Ft.jsx)(Tv,{rotation:E?.rotation??0}),u&&(0,Ft.jsx)(_v,{onPresentingChange:A}),B?.enabled&&B.mode==="shadowCatcher"&&!v&&!_&&(0,Ft.jsx)(Sv,{position:[0,B.height,0],scale:B.size,opacity:B.intensity,blur:B.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,Ft.jsx)(Hv,{sceneConfig:i,selectedObjectRef:o,selectedObjectRefs:a,selectedObjectOutlineColor:s,hoveredObjectRef:l,highlightOnHover:c,disabled:L||_}),_?(0,Ft.jsx)(sT,{toneMapping:i?.postProcessing.toneMapping}):null]});return(0,Ft.jsx)(ks.Canvas,{frameloop:f||g&&!v?"never":d,onCreated:({gl:F})=>y?.(F),dpr:[1,w],shadows:R?"percentage":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:C,camera:t??{fov:50},gl:_?Sb:{preserveDrawingBuffer:m,toneMapping:hi.NoToneMapping,toneMappingExposure:1},flat:_||void 0,children:u&&!_?(0,Ft.jsxs)(Xv.XR,{store:u,children:[(0,Ft.jsx)(wv,{renderMode:d,suspended:f}),I]}):I})}var aT={linear:hi.LinearToneMapping,reinhard:hi.ReinhardToneMapping,aces:hi.ACESFilmicToneMapping};function sT({toneMapping:e}){let t=(0,ks.useThree)(a=>a.gl),n=(0,ks.useThree)(a=>a.invalidate),r=e?.enabled===!0,i=e?.mode??"aces",o=e?.exposure??1;return(0,Pr.useEffect)(()=>{t.toneMapping=r?aT[i]:hi.NoToneMapping,t.toneMappingExposure=r?o:1,n()},[t,n,r,i,o]),null}var Kc=require("@react-three/drei"),Ns=require("three"),mi=require("react");var $c=e=>e*Math.PI/180;function qv(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:$c(e?.minPolarAngle??0),maxPolarAngle:$c(e?.maxPolarAngle??180),minAzimuthAngle:$c(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:$c(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}var Eh=new WeakSet;function Yv(e,t){t?Eh.add(e):Eh.delete(e)}function Aa(e,t){return Eh.has(e)?0:t}var Rh=require("react/jsx-runtime");function Oh({controlsRef:e,onCameraChange:t,cameraLimits:n,controllerType:r="orbit",onPointerLockExit:i,reducedMotion:o=!1}){let a=r==="orbit",s=(0,mi.useRef)(null);return(0,mi.useEffect)(()=>{if(!a)return s.current?.lock(),()=>{s.current?.unlock()}},[a]),(0,mi.useEffect)(()=>{a&&document.pointerLockElement&&document.exitPointerLock()},[a]),(0,mi.useEffect)(()=>{if(a)return;let l=()=>{document.pointerLockElement||i?.()};return document.addEventListener("pointerlockchange",l),()=>{document.removeEventListener("pointerlockchange",l)}},[a,i]),(0,mi.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let l=e.current;l&&Yv(l,o)},[a,e,o]),(0,mi.useEffect)(()=>{if(!a||!t||!e||typeof e!="object"||!("current"in e))return;let l=e.current;if(!l)return;let c=()=>{t(l.camera,l)};return l.addEventListener("update",c),()=>{l.removeEventListener("update",c)}},[a,e,t]),(0,mi.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let l=e.current;if(!l)return;let c=qv(n);l.minDistance=c.minDistance,l.maxDistance=c.maxDistance,l.minPolarAngle=c.minPolarAngle,l.maxPolarAngle=c.maxPolarAngle,l.minAzimuthAngle=c.minAzimuthAngle,l.maxAzimuthAngle=c.maxAzimuthAngle,l.boundaryEnclosesCamera=c.boundaryEnclosesCamera,l.boundaryFriction=c.boundaryFriction,l.setBoundary(c.panBoundary?new Ns.Box3(new Ns.Vector3(...c.panBoundary[0]),new Ns.Vector3(...c.panBoundary[1])):void 0)},[a,e,n?.minDistance,n?.maxDistance,n?.minPolarAngle,n?.maxPolarAngle,n?.minAzimuthAngle,n?.maxAzimuthAngle,n?.boundaryEnclosesCamera,n?.boundaryFriction,n?.panBoundary]),a?(0,Rh.jsx)(Kc.CameraControls,{ref:e,makeDefault:!0,smoothTime:o?0:.3,dollyToCursor:!0}):(0,Rh.jsx)(Kc.PointerLockControls,{ref:s,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}var Ar=require("react"),zs=require("@react-three/fiber"),Qv=require("three");var Zc=require("three"),Lh=Symbol("react-immersive.model-node-id");function lT(e,t){Object.defineProperty(e,Lh,{value:t,configurable:!0})}function fi(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)=>{lT(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 d=[];c.forEach((p,u)=>{let h=`${l} [${u+1}]`,m=h,b=2;for(;o.has(m)||a.has(m);)m=`${h}.${b++}`;s(p,m),d.push(m)}),i.set(l,d)}return{nodesById:n,idByNode:r,duplicateNames:i}}function Vs(e){return e[Lh]??e.name??null}function $v(e,t){let n=t.replace(/\.[^./\\]+$/,"");e.traverse(r=>{r.name&&(r.name=Zc.PropertyBinding.sanitizeNodeName(`${n}_${r.name}`))})}function Kv(e,t){let n=t.replace(/\.[^./\\]+$/,""),r=e.clone();for(let i of r.tracks){let a=Zc.PropertyBinding.parseTrackName(i.name).nodeName??"",s=Zc.PropertyBinding.sanitizeNodeName(`${n}_${a}`);i.name=s+i.name.slice(a.length)}return r}function $r(e,t){let n=null,r=[];return e.traverse(i=>{i[Lh]===t&&(n=i),i.name===t&&r.push(i)}),n??(r.length===1?r[0]:null)}var ar=require("react/jsx-runtime");function Jv(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 cT(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 uT(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 dT(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var pT={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}]},hT={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function Zv({light:e,shadows:t,shadowsEnabled:n,environmentRotation:r,modelBounds:i,objectBindings:o,nodeRefs:a}){let s=(0,Ar.useRef)(null),l=(0,Ar.useRef)(null),c=(0,Ar.useRef)(null),d=(0,zs.useThree)(g=>g.camera),p=(0,zs.useThree)(g=>g.scene),u=(0,Ar.useMemo)(()=>new Qv.Vector3,[]),h=(0,Ar.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:Jv(e.position,r),[e.position,e.attachedToCamera,e.attachment,r]);(0,zs.useFrame)(()=>{let g=s.current??l.current??c.current;if(!g)return;if(e.attachedToCamera){g.position.copy(d.position);return}let y=e.attachment;if(!y)return;let x=o?Xt(o,y.objectId):null,L=(x?o?.[x]:void 0)?.modelObjectId??y.objectId,w=(x?a?.current[x]:void 0)??$r(p,L);w&&(u.fromArray(y.offset),w.localToWorld(u),g.position.copy(u))});let m=n&&t.enabled&&e.castShadow,b=(0,Ar.useMemo)(()=>e.type==="directional"&&m&&i&&!e.attachedToCamera?cT(i,h):null,[e.type,e.attachedToCamera,m,i,h]),f=(0,Ar.useMemo)(()=>e.type==="spot"&&m&&i&&!e.attachedToCamera?uT(i,h):null,[e.type,e.attachedToCamera,m,i,h]);return(0,Ar.useEffect)(()=>{let g=s.current??c.current;if(!g)return;let[y,x,_]=dT(e,m,i);g.target.position.set(y,x,_),g.target.updateMatrixWorld()},[e,m,i]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,ar.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:b?.position??h,castShadow:m,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":b?.near??.5,"shadow-camera-far":b?.far??40,"shadow-camera-left":-(b?.extent??8),"shadow-camera-right":b?.extent??8,"shadow-camera-top":b?.extent??8,"shadow-camera-bottom":-(b?.extent??8)}):e.type==="point"?(0,ar.jsx)("pointLight",{ref:l,color:e.color,intensity:e.intensity,position:h,distance:e.distance,decay:e.decay,castShadow:m,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,ar.jsx)("spotLight",{ref:c,color:e.color,intensity:e.intensity,position:h,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:m,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":f?.near??.5,"shadow-camera-far":f?.far??40}):e.type==="hemisphere"?(0,ar.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function Dh({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:r=0,environmentConfig:i,modelBounds:o,objectBindings:a,nodeRefs:s}){let l=e??pT,c=t??hT,d=i?.shadowLight,p=Jv([5,10,5],r);return(0,ar.jsxs)(ar.Fragment,{children:[(0,ar.jsx)("ambientLight",{intensity:l.ambient.intensity,color:l.ambient.color}),l.lights.map(u=>(0,ar.jsx)(Zv,{light:u,shadows:c,shadowsEnabled:n,environmentRotation:r,modelBounds:o,objectBindings:a,nodeRefs:s},u.id)),d?.enabled&&(0,ar.jsx)(Zv,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:d.intensity,position:p,attachedToCamera:!1,castShadow:!0,shadowBias:d.bias,visible:!0},shadows:c,shadowsEnabled:n,environmentRotation:0,modelBounds:o,objectBindings:a,nodeRefs:s})]})}var oe=require("react"),zo=require("@react-three/fiber");var Us=require("@react-three/fiber"),Bo=require("three"),Xi=require("three-stdlib"),lx=require("three/examples/jsm/loaders/USDLoader.js");var mT=require("@react-three/drei"),fT=require("@react-three/fiber"),gT=require("react"),ex=require("three");var Ea=require("three-stdlib");function bT(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=ex.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 Ih="https://assets.react-immersive.liveroom.dev/three-r184/draco/",Bh="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function yT(e,t){if(!Yr(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 tx(e,t={},n){let{dracoDecoderPath:r=Ih,ktx2TranscoderPath:i=Bh,meshopt:o=!0}=t;if(r){let a=new Ea.DRACOLoader;a.setDecoderPath(r),e.setDRACOLoader(a)}if(o&&e.setMeshoptDecoder(Ea.MeshoptDecoder),i&&n){let a=yT(new Ea.KTX2Loader().setTranscoderPath(i),n);e.setKTX2Loader(a)}e.register((a=>bT(a)))}var kh="KHR_materials_variants",nx="riMaterialVariants",rx="riMaterialVariantGroups";function bn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function vT(e){if(!bn(e)||!bn(e.extensions))return[];let t=e.extensions[kh];if(!bn(t)||!Array.isArray(t.variants))return[];let n=new Set;return t.variants.map((r,i)=>{let o=bn(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 ix(e){let t=e.userData?.gltfExtensions;if(!bn(t))return[];let n=t[kh];return!bn(n)||!Array.isArray(n.mappings)?[]:n.mappings.filter(r=>bn(r)&&Number.isInteger(r.material)&&Array.isArray(r.variants)&&r.variants.every(Number.isInteger))}function ox(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 xT=/^\s*(.+?)\s*(?::|\s\/\s)\s*(.+?)\s*$/;function wT(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 _T(e){if(!bn(e))return;let t=bn(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=>wT(r).toString(16).padStart(2,"0")).join("")}`}function MT(e,t){if(t.length===0)return[];let n=bn(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((h,m)=>{(bn(h)&&Array.isArray(h.primitives)?h.primitives:[]).forEach((f,g)=>{if(!bn(f))return;let y=bn(f.extensions)?f.extensions[kh]:void 0;if(!bn(y)||!Array.isArray(y.mappings))return;let x=bn(f.attributes)?f.attributes.POSITION:void 0,_=typeof x=="number"?i[x]:void 0,L=bn(_)&&typeof _.count=="number"?_.count:1;for(let w of y.mappings)if(!(!bn(w)||!Number.isInteger(w.material)||!Array.isArray(w.variants)))for(let R of w.variants){if(!Number.isInteger(R)||!a[R])continue;a[R].add(`${m}/${g}`);let C=s[R],P=w.material;C.set(P,(C.get(P)??0)+L)}})});let l=t.map((h,m)=>{let b=null;for(let[g,y]of s[m])(b===null||y>(s[m].get(b)??0))&&(b=g);let f=b===null?void 0:_T(o[b]);return{name:h,label:h,...f?{swatch:f}:{}}}),c=t.map(()=>-1),d=[],p=new Map;return t.forEach((h,m)=>{let b=xT.exec(h);if(!b)return;let[,f,g]=b;p.has(f)||(p.set(f,d.length),d.push({name:f,members:[]})),c[m]=p.get(f),d[c[m]].members.push(m),l[m].label=g}),t.map((h,m)=>m).filter(h=>c[h]<0).sort((h,m)=>+(a[h].size===0)-+(a[m].size===0)).forEach(h=>{let m=d.map((g,y)=>({group:g,groupIndex:y})).filter(({group:g})=>g.name===null&&g.members.some(y=>a[h].size===0||a[y].size===0?!1:[...a[h]].some(x=>a[y].has(x)))).map(({groupIndex:g})=>g);if(m.length===0&&a[h].size===0){let g=d.findIndex(y=>y.name===null);g>=0&&m.push(g)}if(m.length===0){c[h]=d.length,d.push({name:null,members:[h]});return}let[b,...f]=m;for(let g of f){for(let y of d[g].members)c[y]=b;d[b].members.push(...d[g].members),d[g].members=[]}c[h]=b,d[b].members.push(h)}),d.filter(h=>h.members.length>0).sort((h,m)=>Math.min(...h.members)-Math.min(...m.members)).map(h=>({name:h.name,variants:[...h.members].sort((m,b)=>m-b).map(m=>l[m])}))}function Qc(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 Ra(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 ax(e){let t=e.parser,n=vT(t?.json);if(!(!t||n.length===0))return e.scene.userData[nx]=n,e.scene.userData[rx]=MT(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 Nh(e){let t=e.userData?.[nx];return Array.isArray(t)&&t.every(n=>typeof n=="string")?t:[]}function Jc(e){let t=e.userData?.[rx];if(Array.isArray(t))return t;let n=Nh(e);return n.length>0?[{name:null,variants:n.map(r=>({name:r,label:r}))}]:[]}function Vh(e,t){let{materialVariant:n,...r}=e;return{...r,activeVariants:t}}var tu=class extends Bo.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=TT(this.options.source),{format:o}=this.options.source;if(o==="obj")return ST(n,i,this.options.source,r);if(o==="fbx"){let l=zh(this,new Xi.FBXLoader(i)),c=ET(n,this.options.source);c&&l.setResourcePath(c);let d=await l.loadAsync(n,r);return eu(d,"FBXMesh",!1),{scene:d,animations:d.animations??[]}}if(o==="stl"||o==="ply"){let l=await CT(n,i,r),c=ry(this.options.source.entryPath??n,o==="stl"?"STL model":"PLY model"),d=o==="stl"?iy(l,c):oy(l,c);return eu(d,o==="stl"?"STLMesh":"PLYMesh",!0),{scene:d,animations:[]}}if(o==="usdz"){let c=await zh(this,new lx.USDLoader(i)).loadAsync(n,r);return eu(c,"USDZMesh",!1),{scene:c,animations:c.animations??[]}}let a=zh(this,new Xi.GLTFLoader(i));tx(a,this.options.decoderConfig,this.options.renderer);let s=await a.loadAsync(n,r);return{scene:s.scene,animations:s.animations??[],materialVariants:ax(s)}}};Kb(e=>{Us.useLoader.clear(tu,e)});function js(e,t={},n,r){let i=(0,Us.useThree)(s=>s.gl),o=Zb(e),a=n?{...o,format:n}:o;return(0,Us.useLoader)(tu,e,s=>{s.configure({source:a,decoderConfig:t,renderer:i})},r)}async function ST(e,t,n,r){let i=await sx(e,t,r),o=new Xi.OBJLoader(t),a=PT(i);if(a){let l=AT(a,e,n);if(l)try{let c=await sx(l.url,t),p=new Xi.MTLLoader(t).parse(c,l.basePath);p.preload(),o.setMaterials(p)}catch(c){console.warn(`[react-immersive] Could not load OBJ material ${a}; rendering geometry with fallback materials.`,c)}}let s=o.parse(i);return eu(s,"OBJMesh",!0),{scene:s,animations:[]}}function eu(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 sx(e,t,n){let r=new Bo.FileLoader(t);return r.setResponseType("text"),r.loadAsync(e,n)}function CT(e,t,n){let r=new Bo.FileLoader(t);return r.setResponseType("arraybuffer"),r.loadAsync(e,n)}function zh(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function TT(e){let t=new Bo.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(r=>{if(/^(?:blob:|data:)/i.test(r))return r;let i=ru(ux(r).split(/[?#]/)[0]),o=n[i];if(o)return o;let a=nu(e.entryPath??""),s=ru(a?`${a}/${i}`:i);return n[s]??r}),t}function PT(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function AT(e,t,n){if(n.resourceUrls&&n.entryPath){let r=ru(`${nu(n.entryPath)}/${ux(e)}`),i=n.resourceUrls[r];if(!i)return null;let o=nu(r);return{url:i,basePath:o?`${o}/`:""}}try{let r=new URL(e,t).href;return{url:r,basePath:cx(r)}}catch{return null}}function ET(e,t){if(t.resourceUrls&&t.entryPath){let n=nu(t.entryPath);return n?`${n}/`:""}return cx(e)}function cx(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function nu(e){let t=ru(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function ru(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 ux(e){try{return decodeURI(e)}catch{return e}}var Kr=require("three");function Oa(e){return new Kr.Matrix4().set(1,e[0],e[1],0,0,1,e[2],0,0,0,1,0,0,0,0,1)}function ko(e,t){e.matrixAutoUpdate=!t,e.updateMatrix(),t&&(e.matrix.makeRotationFromQuaternion(e.quaternion).multiply(Oa(t)).scale(e.scale).setPosition(e.position),e.matrixWorldNeedsUpdate=!0)}function dx(e,t,n){let r=new Kr.Vector3().setFromMatrixColumn(e,0),i=new Kr.Vector3().setFromMatrixColumn(e,1),o=new Kr.Vector3().setFromMatrixColumn(e,2),a=(m,b)=>{let f=m*(b<0?-1:1);return Math.abs(f-b)<1e-10?b:f},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 c=a(i.length(),t.y);if(Math.abs(c)<1e-12)return{rotation:n.clone(),scale:t.clone(),shear:void 0};i.divideScalar(c);let d=r.dot(o);o.addScaledVector(r,-d);let p=i.dot(o);o.addScaledVector(i,-p);let u=a(o.length(),t.z);if(Math.abs(u)<1e-12)return{rotation:n.clone(),scale:t.clone(),shear:void 0};o.divideScalar(u);let h=[l/c,d/u,p/u].map(m=>Math.abs(m)<1e-10?0:m);return{rotation:new Kr.Quaternion().setFromRotationMatrix(new Kr.Matrix4().makeBasis(r,i,o)).normalize(),scale:new Kr.Vector3(s,c,u),shear:h.some(Boolean)?h:void 0}}var sr=require("react");function px(e,t,n){let[r,i]=(0,sr.useState)({}),o=(0,sr.useRef)(new Map),[a,s]=(0,sr.useState)(0),l=(0,sr.useRef)(t);l.current=t;let c=(0,sr.useRef)(n);c.current=n;let d=(0,sr.useCallback)((p,u)=>{l.current?.some(h=>h.url===p)&&i(h=>h[p]===u?h:{...h,[p]:u})},[]);return(0,sr.useEffect)(()=>{let p=new Set(t?.map(h=>h.url)),u=!1;for(let[h,m]of o.current)p.has(h)&&r[h]===m&&m.parent===e||(m.removeFromParent(),o.current.delete(h),u=!0);for(let[h,m]of Object.entries(r))!p.has(h)||o.current.get(h)===m||(e.add(m),o.current.set(h,m),u=!0,c.current?.(h,m));i(h=>{let m=Object.entries(h).filter(([b])=>p.has(b));return m.length===Object.keys(h).length?h:Object.fromEntries(m)}),u&&s(h=>h+1)},[e,t,r]),(0,sr.useEffect)(()=>()=>{o.current.forEach(p=>p.removeFromParent()),o.current.clear()},[]),{rootsByUrl:r,revision:a,onSourceReady:d}}var qt=require("three");function Fs(e){e.updateWorldMatrix(!0,!0);let t=new qt.Matrix4().copy(e.matrixWorld).invert(),n=new qt.Box3,r=new qt.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 qt.Matrix4().multiplyMatrices(t,o.matrixWorld);r.copy(a.geometry.boundingBox).applyMatrix4(s),n.union(r),i=!0}),i?n:null}function No(e){let t=Fs(e);return t?t.getCenter(new qt.Vector3):new qt.Vector3}function hx(e,t="XYZ"){return new qt.Quaternion().setFromEuler(new qt.Euler(e[0],e[1],e[2],t))}function RT(e,t,n,r,i="XYZ",o){let a=new qt.Vector3(...r).multiply(new qt.Vector3(...n));o&&a.applyMatrix4(Oa(o)),a.applyQuaternion(hx(t,i));let s=a.add(new qt.Vector3(...e));return[s.x,s.y,s.z]}function iu(e,t,n,r="XYZ",i){return{point:[...e],offset:RT([0,0,0],t,n,e,r,i)}}function Gs(e,t,n,r,i="XYZ",o){if(!r)return e;let a=new qt.Vector3(...r.point).multiply(new qt.Vector3(...n));return o&&a.applyMatrix4(Oa(o)),a.applyQuaternion(hx(t,i)),new qt.Vector3(...e).add(new qt.Vector3(...r.offset)).sub(a).toArray()}var We=require("three"),Uh=require("three-stdlib");function mx(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 gi=require("three");function fx(e){let t=e._loopCount;return e.loop===gi.LoopPingPong&&(t&1)===1}function OT(e){return fx(e)?e.getClip().duration-e.time:e.time}function gx({root:e,clips:t,getClipConfig:n,onChange:r}){let i=new gi.AnimationMixer(e),o=new Map;for(let{clip:S,sourceName:v}of t)o.set(v,i.clipAction(S));let a=new Map,s=new Set,l=new Map,c=1,d=S=>typeof S=="string",p=S=>d(S)?a.has(S)?[S]:[]:[...a.keys()],u=(S,v)=>{let A=Oy(n(v));A==="once"?S.setLoop(gi.LoopOnce,1):A==="ping-pong"?S.setLoop(gi.LoopPingPong,1/0):S.setLoop(gi.LoopRepeat,1/0),S.clampWhenFinished=A==="once"},h=S=>{S.action.setEffectiveTimeScale(S.reverse?-S.speed:S.speed)},m=S=>{let v=a.get(S);v&&(v.action.stop(),a.delete(S))},b=(S,v={})=>{let A=o.get(S);if(!A||n(S)?.hidden)return;let E=Number.isFinite(v.fade)&&v.fade>0?v.fade:0,B=v.reverse??!1;if(!v.alongside)for(let[O,T]of[...a])O!==S&&(E>0?(a.delete(O),T.action.fadeOut(E),s.add(T.action)):m(O));s.delete(A)&&A.stop();let N=A.getClip().duration,I=a.get(S),F=()=>{A.reset(),B&&(A.time=N),A.play()};if(!I)F(),E>0&&A.fadeIn(E);else{let O=B?A.time<=0:A.time>=N;I.finished&&O&&F(),A.paused=!1,A.enabled=!0,a.delete(S)}u(A,S),I={action:A,speed:n(S)?.speed??l.get(S)??c,reverse:B,finished:!1},I.speed=Ec(I.speed),h(I),a.set(S,I),r()},f=S=>{for(let v of p(S))a.get(v).action.paused=!0;r()},g=S=>{for(let v of p(S))m(v);if(!d(S)){for(let v of s)v.stop();s.clear()}r()},y=(S,v)=>{let A=Ec(S);d(v)?l.set(v,A):c=A;for(let E of p(v)){let B=a.get(E);l.set(E,A),B.speed=A,h(B)}r()},x=(S,v)=>{for(let A of p(v)){let E=a.get(A),B=E.action.getClip().duration,N=Math.min(Math.max(S,0),B);E.action.time=fx(E.action)?B-N:N,E.finished&&(E.finished=!1,E.action.paused=!0)}i.update(0),r()},_=()=>{for(let[S,v]of[...a]){let A=n(S);if(A?.hidden){m(S);continue}u(v.action,S),A?.speed!==void 0&&(v.speed=Ec(A.speed),h(v))}r()},L=S=>{for(let v of a.values())v.action===S.action&&(v.finished=!0);r()};return i.addEventListener("finished",L),{play:b,pause:f,stop:g,setSpeed:y,seek:x,getState:()=>{let S=[...a].map(([A,E])=>({clip:A,status:E.finished?"finished":E.action.paused?"paused":"playing",time:OT(E.action),duration:E.action.getClip().duration,speed:E.speed,reverse:E.reverse})),v=S[S.length-1];return{currentClip:v?.clip??null,isPlaying:S.some(A=>A.status==="playing"),speed:v?.speed??c,time:v?.time??0,duration:v?.duration??0,active:S}},applyClipConfigs:_,isRunning:()=>{if(s.size>0)return!0;for(let{action:S}of a.values())if(!S.paused&&S.enabled)return!0;return!1},update:S=>{i.update(S);for(let v of s)(!v.enabled||v.getEffectiveWeight()<=0)&&(v.stop(),s.delete(v))},dispose:()=>{i.removeEventListener("finished",L),i.stopAllAction(),i.uncacheRoot(e),a.clear(),s.clear()}}}var lr=require("three");function ou(e){if(My(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new lr.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 lr.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof lr.Color&&n.emissive.copy(t.color)):(t.color instanceof lr.Color&&n.color.copy(t.color),t.map instanceof lr.Texture&&(n.map=t.map),t.emissive instanceof lr.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof lr.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 au(e){if(Sy(e))return e.clone();let t=new lr.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(li(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 su(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=li(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=li(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 Zr=require("three");function bx(e,t,n,r){let i=Sr(t),o=Os(n,i),a=Cy(r,t),s=Ty(r,t),l=Py(r,t);return a||s||l?Dc(e.userData,t,o,n,a??[0,0],s??1,l??0):(Ic(e.userData,t),o)}function cn(e,t,n,r){if(!n){Ic(e.userData,t);return}let i=Ac[t];e[i]=bx(e,t,n,r)}function lu(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 Zr.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??Zr.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??Zr.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(li(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(li(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new Zr.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 Zr.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 Zr.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let r=Ot(t,"texture"),i=Ot(t,"metalnessMap"),o=Ot(t,"roughnessMap"),a=Ot(t,"emissiveMap"),s=Ot(t,"alphaMap"),l=Ot(t,"normalMap"),c=Ot(t,"bumpMap"),d=Ot(t,"aoMap"),p=Ot(t,"displacementMap"),u=Ot(t,"clearcoatMap"),h=Ot(t,"clearcoatRoughnessMap"),m=Ot(t,"clearcoatNormalMap"),b=Ot(t,"anisotropyMap"),f=Ot(t,"transmissionMap"),g=Ot(t,"thicknessMap"),y=Ot(t,"sheenColorMap"),x=Ot(t,"sheenRoughnessMap"),_=Ot(t,"specularIntensityMap"),L=Ot(t,"specularColorMap");if(r?(e.map=bx(e,"texture",r,t),e.color.set(n??"#ffffff"),e.vertexColors=!1):(Ic(e.userData,"texture"),n&&(e.map=null,e.color.set(n),e.vertexColors=!1)),cn(e,"metalnessMap",i,t),t?.metalness!==void 0&&(e.metalness=t.metalness),cn(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),cn(e,"emissiveMap",a,t),t?.opacity!==void 0&&(e.opacity=t.opacity),cn(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=Ey(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=Ay(t.side)),cn(e,"normalMap",l,t),l||t?.normalScale!==void 0){let w=t?.normalScale??Math.abs(li(e.userData.baseNormalScale).x);e.normalScale.set(w,t?.flipNormalY?-w:w)}if(cn(e,"bumpMap",c,t),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),cn(e,"aoMap",d,t),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),cn(e,"displacementMap",p,t),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),cn(e,"clearcoatMap",u,t),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),cn(e,"clearcoatRoughnessMap",h,t),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),cn(e,"clearcoatNormalMap",m,t),m||t?.clearcoatNormalScale!==void 0){let w=t?.clearcoatNormalScale??Math.abs(li(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(w,t?.flipClearcoatNormalY?-w:w)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),cn(e,"sheenColorMap",y,t),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),cn(e,"sheenRoughnessMap",x,t),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),cn(e,"anisotropyMap",b,t),t?.transmission!==void 0&&(e.transmission=t.transmission),cn(e,"transmissionMap",f,t),t?.thickness!==void 0&&(e.thickness=t.thickness),cn(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),cn(e,"specularIntensityMap",_,t),t?.specularColor&&e.specularColor.set(t.specularColor),cn(e,"specularColorMap",L,t),e.transparent=e.opacity<1||e.transmission>0||e.blending!==Zr.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function Hs(e){return e.material}function Qr(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function Nn(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function cu(e,t){return Array.isArray(e)?e[t]:e}var cr=require("three");var yx=new WeakMap,vx=new cr.Vector3,LT=new cr.Vector3,DT=new cr.Vector3,IT=new cr.Box3,xx=new cr.Matrix4;function La(e){return"data"in e?e.data.version:e.version}function BT(e){var l;let{geometry:t,skeleton:n}=e,r=t.getAttribute("position"),i=t.getAttribute("skinIndex"),o=t.getAttribute("skinWeight"),a=yx.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]===La(r)&&a.versions[1]===La(i)&&a.versions[2]===La(o)&&a.inverses.length===n.boneInverses.length&&a.inverses.every((c,d)=>c.equals(n.boneInverses[d])))return a;let s={geometry:t,position:r,indices:i,weights:o,skeleton:n,versions:[La(r),La(i),La(o)],bindMatrix:e.bindMatrix.clone(),inverses:n.boneInverses.map(c=>c.clone()),bones:[],weightDeviation:0};e:for(let c=0;c<r.count;c++){vx.fromBufferAttribute(r,c).applyMatrix4(e.bindMatrix);let d=0;for(let u=0;u<4;u++){let h=o.getComponent(c,u);if(h===0)continue;let m=i.getComponent(c,u);if(!Number.isFinite(h)||h<0||!Number.isInteger(m)||!n.bones[m]||!s.inverses[m]){s.bones=null;break e}d+=h,((l=s.bones)[m]??(l[m]=new cr.Box3)).expandByPoint(LT.copy(vx).applyMatrix4(s.inverses[m]))}let p=Math.abs(d-1);if(p>1e-4){s.bones=null;break}s.weightDeviation=Math.max(s.weightDeviation,p)}return yx.set(e,s),s}function uu(e,{precise:t=!1,updateFallbacks:n=!0}={}){e.updateMatrixWorld(!0),e.traverse(r=>{if(!En(r))return;let i=r;if(!i.skeleton)return;let o=Es(i);o&&i.bindMatrixInverse.copy(o);let s=!!i.geometry.morphAttributes.position?.length?null:BT(i);if(!t&&!s?.bones&&!n&&i.boundingBox&&i.boundingSphere)return;let l=i.boundingBox??(i.boundingBox=new cr.Box3),c=i.boundingSphere??(i.boundingSphere=new cr.Sphere);if(l.makeEmpty(),t||!s?.bones){let d=i.geometry.getAttribute("position");for(let p=0;p<d.count;p++)l.expandByPoint(i.getVertexPosition(p,DT))}else{for(let d=0;d<s.bones.length;d++){let p=s.bones[d];p&&(xx.multiplyMatrices(i.bindMatrixInverse,i.skeleton.bones[d].matrixWorld),l.union(IT.copy(p).applyMatrix4(xx)))}if(!l.isEmpty()){let d=l.min,p=l.max,u=i.bindMatrixInverse.elements,h=Math.max(1,Math.abs(d.x),Math.abs(d.y),Math.abs(d.z),Math.abs(p.x),Math.abs(p.y),Math.abs(p.z)),m=Math.max(Math.abs(d.x-u[12]),Math.abs(p.x-u[12]),Math.abs(d.y-u[13]),Math.abs(p.y-u[13]),Math.abs(d.z-u[14]),Math.abs(p.z-u[14]));l.expandByScalar(s.weightDeviation*m+h*1e-10)}}l.getBoundingSphere(c)})}var Vo=require("react"),wx=require("@react-three/fiber");function _x(){let e=(0,wx.useThree)(i=>i.gl.domElement),t=(0,Vo.useRef)(void 0),n=(0,Vo.useCallback)(i=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=i},[e]),r=(0,Vo.useCallback)(()=>{let i=t.current;i!==void 0&&(e.style.cursor=i,t.current=void 0)},[e]);return(0,Vo.useEffect)(()=>()=>{r()},[r]),{setCanvasCursor:n,restoreCanvasCursor:r}}var Uo=require("react/jsx-runtime");function du(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(Gs(t?.position??r.position.toArray(),[e.rotation.x,e.rotation.y,e.rotation.z],e.scale.toArray(),t?.pivot,r.rotation.order,t?.shear)),ko(e,t?.shear))}function Yt(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 Da(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===We.NormalBlending&&t.alphaToCoverage!==!0;return[Yt(t.map),Yt(t.aoMap),Yt(t.lightMap),Yt(t.bumpMap),Yt(t.normalMap,!0),t.normalMap?t.normalMapType:"",Yt(t.displacementMap),Yt(t.emissiveMap),Yt(t.metalnessMap),Yt(t.roughnessMap),i,Yt(i?t.anisotropyMap:null),n,Yt(n?t.clearcoatMap:null),Yt(n?t.clearcoatNormalMap:null,!0),Yt(n?t.clearcoatRoughnessMap:null),r,Yt(r?t.sheenColorMap:null),Yt(r?t.sheenRoughnessMap:null),Yt(t.specularColorMap),Yt(t.specularIntensityMap),o,Yt(o?t.transmissionMap:null),Yt(o?t.thicknessMap:null),Yt(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,!!t.vertexColors,t.side,a].join("|")}var kT={};function Ws({url:e,objectBindings:t,selectedItem:n,itemMaterials:r,interactive:i=!0,onItemClick:o,onItemHover:a,onItemDoubleClick:s,onItemContextMenu:l,onModelLoaded:c,onAnimationsReady:d,nodeRefsOut:p,onNodeRefsChange:u,materialRefsOut:h,panelHoveredItem:m,sceneConfig:b,zoomOnSelected:f=!0,highlightOnHover:g=!0,decoderConfig:y,modelFormat:x,onLoadProgress:_,explodeFactor:L=0,suspendBindingTransforms:w=!1,originalNodePoses:R,mergeModels:C,onMergeModelLoaded:P,onMergeModelError:S,pulses:v=kT}){let A=js(e,y,x,_),E=(0,zo.useThree)(V=>V.invalidate),[B,N]=(0,oe.useState)(null),I=(0,oe.useRef)(null),{setCanvasCursor:F,restoreCanvasCursor:O}=_x();(0,oe.useEffect)(()=>{(!i||!g)&&(N(null),a?.(null),O())},[i,g,a,O]);let T=(0,oe.useMemo)(()=>Uh.SkeletonUtils.clone(A.scene),[A.scene]),{revision:z,onSourceReady:q}=px(T,C,P),Z=(0,oe.useRef)(new Map),[J,le]=(0,oe.useState)(0),H=(0,oe.useCallback)((V,U,j)=>{q(V,U),Z.current.get(V)!==j&&(Z.current.set(V,j),le(Y=>Y+1))},[q]);(0,oe.useEffect)(()=>{let V=new Set(C?.map(j=>j.url)),U=!1;for(let j of Z.current.keys())V.has(j)||(Z.current.delete(j),U=!0);U&&le(j=>j+1)},[C]);let X=(0,oe.useMemo)(()=>fi(T),[T,z]),te=X.nodesById,{originalMaterials:he,ownMeshes:Ee}=(0,oe.useMemo)(()=>{let V=new WeakMap,U=new WeakSet;return T.traverse(j=>{ln(j)&&(V.set(j,j.material),U.add(j))}),{originalMaterials:V,ownMeshes:U}},[T]);(0,oe.useMemo)(()=>{T.traverse(V=>{ln(V)&&!he.has(V)&&he.set(V,V.material)})},[T,z,he]);let $=A.materialVariants,we=(b?Ra(b.model):[]).join(`
|
|
3721
|
+
`),[Xe,ie]=(0,oe.useState)(null);(0,oe.useEffect)(()=>{let V=we?we.split(`
|
|
3722
|
+
`):[],U=[];for(let Y of V){let me=$?$.names.indexOf(Y):-1;if(me>=0){U.push(me);continue}console.warn(`[react-immersive] The model has no material variant "${Y}".`+($?` Its variants are: ${$.names.join(", ")}.`:" It has no material variants."))}if(!$||U.length===0){ie(null);return}let j=!1,ee=[];return T.traverse(Y=>{if(!ln(Y)||!Ee.has(Y))return;let me=ox(ix(Y),U);me!==null&&ee.push($.resolveMaterial(me,Y).then(ge=>[Y,ge]))}),Promise.all(ee).then(Y=>{j||ie({scene:T,materials:new Map(Y)})}).catch(Y=>{j||console.warn(`[react-immersive] Material variants "${V.join('", "')}" failed to load.`,Y)}),()=>{j=!0}},[T,Ee,$,we]);let bt=Xe?.scene===T?Xe.materials:void 0,et=V=>bt?.get(V)??he.get(V)??Hs(V);(0,oe.useEffect)(()=>{X.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(X.duplicateNames))},[X]);let rt=(0,oe.useMemo)(()=>new WeakMap,[T]),ce=(0,oe.useMemo)(()=>{let V=new WeakMap;if(T.traverse(U=>{let j=rt.get(U);j||(j={position:U.position.clone(),rotation:U.rotation.clone(),scale:U.scale.clone()},rt.set(U,j)),V.set(U,{position:j.position.clone(),rotation:j.rotation.clone(),scale:j.scale.clone()})}),R)for(let[U,j]of Object.entries(R)){let ee=te[U],Y=ee&&V.get(ee);Y&&(Y.position.fromArray(j.position),j.rotation&&Y.rotation.set(j.rotation[0],j.rotation[1],j.rotation[2],Y.rotation.order),j.scale&&Y.scale.fromArray(j.scale))}return V},[T,te,R,rt]);(0,oe.useEffect)(()=>{let V=!1,U=null,j=null,ee=window,Y=Object.entries(te).filter(([,ht])=>ln(ht)),me=new We.Box3,ge=[],Et=0;T.traverse(ht=>{!ln(ht)||ht.userData[Ao]||(ht.castShadow=!1,ht.receiveShadow=!0)});let at=()=>{if(V)return;let ht=new Set,yn=me.getSize(new We.Vector3),ue=new We.Vector3;for(let{name:Gt,box:Sn}of ge)Sn.getSize(ue),ue.x>yn.x*.7&&ue.z>yn.z*.7&&ue.y>yn.y*.4&&ht.add(Gt);T.traverse(Gt=>{if(!ln(Gt)||Gt.userData[Ao])return;let Sn=Vs(Gt);Gt.castShadow=!Sn||!ht.has(Sn),Gt.receiveShadow=!0}),E()},jt=()=>{V||(ee.requestIdleCallback?U=ee.requestIdleCallback(Rt,{timeout:100}):j=window.setTimeout(()=>Rt(),0))},Rt=ht=>{if(U=null,j=null,V)return;let yn=performance.now(),ue=0;for(;Et<Y.length&&!(ue>0&&!(ht?ht.didTimeout?ue<16:ht.timeRemaining()>1:performance.now()-yn<8));){let[Gt,Sn]=Y[Et];Et+=1,ue+=1;let Hn=new We.Box3().setFromObject(Sn);Hn.isEmpty()||(ge.push({name:Gt,box:Hn}),me.union(Hn))}Et<Y.length?jt():at()};return jt(),()=>{V=!0,U!==null&&ee.cancelIdleCallback?.(U),j!==null&&window.clearTimeout(j)}},[E,te,T]),(0,oe.useEffect)(()=>{uu(T,{precise:!0})},[T,z]),(0,oe.useEffect)(()=>{let V=new AbortController;return dc(T,V.signal),()=>{V.abort(),ws(T)}},[T,z]);let Te=(0,oe.useMemo)(()=>{let V={};for(let[U,j]of Object.entries(t))V[j.modelObjectId??U]=U;return V},[t]),tt=(0,oe.useMemo)(()=>Object.entries(t).map(([V,U])=>`${V}${U.modelObjectId??V}`).sort().join(""),[t]),At=(0,oe.useMemo)(()=>Object.entries(t).map(([V,U])=>JSON.stringify([V,U.modelObjectId??V,U.transform??null])).sort().join(""),[t]),Lt=(0,oe.useRef)(new Map);(0,oe.useEffect)(()=>{let V=new Map,U=new Map;for(let[Y,me]of Object.entries(t)){if(!me.transform)continue;let ge=te[me.modelObjectId??Y];ge&&(V.set(ge,me.transform),U.set(ge,Wi(ge)))}let j=new Set([...Lt.current.keys(),...V.keys()]);for(let Y of j){du(Y,void 0,ce);for(let me of Wi(Y))ci(me)}T.updateMatrixWorld(!0);let ee=new Map;for(let Y of U.values())for(let me of Y)ee.has(me)||ee.set(me,me.matrixWorld.clone());for(let[Y,me]of V)du(Y,me,ce);Lt.current=V,T.updateMatrixWorld(!0);for(let[Y,me]of ee)_a(Y,me);E()},[T,te,ce,At,E]),(0,oe.useEffect)(()=>()=>{for(let V of Wi(T))ci(V)},[T]);let pe=(0,oe.useMemo)(()=>{let V={};for(let[U,j]of Object.entries(t)){let ee=j.modelObjectId??U,Y=te[ee];if(!ln(Y))continue;let me=et(Y);me&&(V[U]=Qr(me,ge=>{let Et=ou(ge),at=au(Et??new We.MeshStandardMaterial);return su(at),at}))}return V},[te,tt,he,bt]);(0,oe.useEffect)(()=>(h&&(h.current=pe),()=>{h?.current===pe&&(h.current={})}),[pe,h]),(0,oe.useEffect)(()=>()=>{for(let V of Object.values(pe))Nn(V,U=>{Vy(U.userData),U.dispose()})},[pe]);let be=b?.model.shading??"lit",Le=b?.model.renderer??"pbr",Ke=b?.wireframe.enabled??!1,ft=b?.wireframe.color??"#93c5fd",ne=b?.wireframe.opacity??1,fe=(0,oe.useMemo)(()=>{let V={};if(be!=="unlit")return V;for(let[U,j]of Object.entries(pe))V[U]=Qr(j,ee=>{let Y=new We.MeshBasicMaterial;return Y.color.copy(ee.color),Y.map=ee.map,Y.alphaMap=ee.alphaMap,Y.alphaTest=ee.alphaTest,Y.transparent=ee.transparent,Y.opacity=ee.opacity,Y.side=ee.side,Y});return V},[pe,be]),ye=(0,oe.useMemo)(()=>{let V={};if(be!=="normals")return V;for(let[U,j]of Object.entries(pe))V[U]=Qr(j,()=>new We.MeshNormalMaterial);return V},[pe,be]),ke=(0,oe.useMemo)(()=>{let V={};if(be!=="lit"||Le!=="matcap")return V;let U=Bc();for(let[j,ee]of Object.entries(pe))V[j]=Qr(ee,Y=>{let me=new We.MeshMatcapMaterial;return me.matcap=U,me.color.copy(Y.color),me.alphaMap=Y.alphaMap,me.alphaTest=Y.alphaTest,me.side=Y.side,me});return V},[pe,be,Le]);(0,oe.useEffect)(()=>()=>{for(let V of Object.values(fe))Nn(V,U=>U.dispose());for(let V of Object.values(ye))Nn(V,U=>U.dispose());for(let V of Object.values(ke))Nn(V,U=>U.dispose())},[fe,ye,ke]);let wt=V=>be==="normals"?ye[V]:be==="unlit"?fe[V]:Le==="matcap"?ke[V]:pe[V],it=(0,oe.useRef)(c);it.current=c,(0,oe.useEffect)(()=>{it.current?.(T)},[T]);let ot=(0,oe.useMemo)(()=>{let V={};for(let[U,j]of Object.entries(t)){let ee=j.modelObjectId??U,Y=te[ee];Y&&(V[U]=Y)}return V},[te,tt]);(0,oe.useEffect)(()=>(p.current=ot,u?.(),()=>{p.current===ot&&(p.current={})}),[ot,p,u]);let xe=(0,oe.useRef)({});(0,oe.useEffect)(()=>()=>{for(let V of Object.values(xe.current))for(let[U,j]of Object.entries(V))j&&di(j,Sr(U));xe.current={}},[]);let Ve=(0,oe.useRef)(new Map);(0,oe.useEffect)(()=>()=>{Ve.current.clear()},[]);let je=(0,oe.useMemo)(()=>{let V=new Map;for(let[U,j]of Object.entries(t)){let ee=m===j||m?.id===j.id||m?.modelObjectId===j.modelObjectId,Y=g&&(B===U||ee),me=Y||n===U;(Y||me)&&V.set(U,{emissive:Y,matcap:me})}return V},[t,g,B,n,m]),en=(0,oe.useRef)(je);en.current=je,(0,oe.useEffect)(()=>{let V=new Set;for(let[U,j]of Object.entries(t)){V.add(U);let ee=j.modelObjectId??U,Y=te[ee];if(!ln(Y))continue;if(j.removed){Y.parent&&(Ve.current.set(Y,Y.parent),Y.parent.remove(Y),T.dispatchEvent({type:"childremoved",child:Y}));continue}let me=Ve.current.get(Y);me&&(Y.parent||(me.add(Y),T.dispatchEvent({type:"childadded",child:Y})),Ve.current.delete(Y)),Y.visible=j.visible!==!1;let ge=pe[U];if(!ge)continue;if(Le!=="uv-checker"){let ue=wt(U);ue&&(Y.material=ue)}if(j.visible===!1)continue;let Et=fe[U],at=ke[U],jt=r[U]??r[j.modelObjectId??U],Rt=j.style?.material,ht=xe.current[U]??{};for(let ue of Hi){let Gt=Ot(Rt,ue),Sn=ht[ue];if(Sn===Gt)continue;let Hn=Sr(ue);Sn&&di(Sn,Hn),Gt?(Ma(Gt,Hn,E),ht[ue]=Gt):delete ht[ue]}Object.keys(ht).length>0?xe.current[U]=ht:delete xe.current[U];let yn=jt?.hex??Rt?.baseColor;Nn(ge,(ue,Gt)=>{let Sn=Da(ue);lu(ue,Rt,yn);let Hn=ue.userData.reactImmersiveConfiguredEmissive;Hn?.isColor?Hn.copy(ue.emissive):ue.userData.reactImmersiveConfiguredEmissive=ue.emissive.clone();let ea=en.current.get(U);ea?.emissive&&ue.emissive.add(Po),Sn!==Da(ue)&&(ue.needsUpdate=!0);let Cn=cu(Et,Gt);if(Cn){let ts=Da(Cn);Cn.color.copy(ue.color),Cn.map=ue.map,Cn.vertexColors=ue.vertexColors,Cn.alphaMap=ue.alphaMap,Cn.alphaTest=ue.alphaTest,Cn.transparent=ue.transparent,Cn.opacity=ue.opacity,Cn.side=ue.side,ts!==Da(Cn)&&(Cn.needsUpdate=!0)}let fn=cu(at,Gt);if(fn){let ts=Da(fn);ea?.matcap?fn.color.set(ui.color):fn.color.copy(ue.color),fn.map=ue.map,fn.vertexColors=ue.vertexColors,fn.alphaMap=ue.alphaMap,fn.alphaTest=ue.alphaTest,fn.transparent=ue.transparent,fn.opacity=ue.opacity,fn.side=ue.side,ts!==Da(fn)&&(fn.needsUpdate=!0)}})}for(let U of Object.keys(xe.current))if(!V.has(U)){for(let[j,ee]of Object.entries(xe.current[U]))ee&&di(ee,Sr(j));delete xe.current[U]}E()},[t,te,pe,fe,ye,ke,r,be,Le,E]);let fr=(0,oe.useRef)(new Map);(0,oe.useEffect)(()=>{let V=fr.current,U=new Set([...V.keys(),...je.keys()]),j=!1;for(let ee of U){let Y=V.get(ee),me=je.get(ee),ge=!!Y?.emissive!=!!me?.emissive,Et=!!Y?.matcap!=!!me?.matcap;if(!ge&&!Et)continue;j=!0;let at=pe[ee],jt=ke[ee];at&&Nn(at,(Rt,ht)=>{let yn=Rt.userData.reactImmersiveConfiguredEmissive;ge&&yn?.isColor&&(Rt.emissive.copy(yn),me?.emissive&&Rt.emissive.add(Po));let ue=cu(jt,ht);Et&&ue&&(me?.matcap?ue.color.set(ui.color):ue.color.copy(Rt.color))})}fr.current=je,j&&E()},[je,pe,ke,E]),jy({objectBindings:t,nodeMap:te,invalidate:E});let Dt=(0,oe.useMemo)(()=>Object.entries(v).map(([V,U])=>({key:V,color:new We.Color(U.color),speed:U.speed})),[v]),Ut=(0,oe.useRef)(new Set);(0,oe.useEffect)(()=>{let V=new Set(Dt.map(({key:U})=>U));for(let U of Ut.current){if(V.has(U)||!pe[U])continue;let j=en.current.get(U)?.emissive;Nn(pe[U],ee=>{let Y=ee.userData.reactImmersiveConfiguredEmissive;Y?.isColor&&(ee.emissive.copy(Y),j&&ee.emissive.add(Po))})}Ut.current=V,E()},[Dt,pe,E]),(0,zo.useFrame)(({clock:V})=>{if(Dt.length===0)return;let U=V.getElapsedTime();for(let{key:j,color:ee,speed:Y}of Dt){let me=pe[j];if(!me)continue;let ge=(1-Math.cos(2*Math.PI*Y*U))/2,Et=en.current.get(j)?.emissive;Nn(me,at=>{let jt=at.userData.reactImmersiveConfiguredEmissive;jt?.isColor&&(at.emissive.copy(jt).lerp(ee,ge),Et&&at.emissive.add(Po))})}E()}),(0,oe.useEffect)(()=>{if(Le==="uv-checker")return;let V=new Set(Object.values(ot)),U=!1;T.traverse(j=>{if(!ln(j)||V.has(j)||!he.has(j))return;let ee=bt?.get(j)??he.get(j);j.material!==ee&&(j.material=ee,U=!0)}),U&&E()},[T,ot,he,bt,Le,E]),(0,oe.useEffect)(()=>{if(Le!=="uv-checker")return;let V=zy(),U=[];return T.traverse(j=>{if(!ln(j)||j.userData[Ao])return;let ee=j.material,Y=Array.isArray(ee)?ee:[ee],me=!!j.geometry.getAttribute("uv"),ge=Y.map((at,jt)=>{let Rt=new We.MeshBasicMaterial({color:me?"#ffffff":"#ff00ff",map:me?V:null,side:at.side});return Rt.name=`${j.name||"mesh"}-uv-checker-${jt}`,Rt.toneMapped=!1,Rt}),Et=Array.isArray(ee)?ge:ge[0];j.material=Et,U.push({node:j,original:ee,diagnostic:Et})}),E(),()=>{for(let{node:j,original:ee,diagnostic:Y}of U){j.material=ee;let me=Array.isArray(Y)?Y:[Y];for(let ge of me)ge.dispose()}E()}},[T,Le,E,z]),(0,oe.useEffect)(()=>{if(!Ke)return;let V=[];for(let[U,j]of Object.entries(t)){let ee=j.modelObjectId??U,Y=te[ee];if(!ln(Y))continue;let me=new We.MeshBasicMaterial({color:ft,wireframe:!0,transparent:!0,opacity:ne,depthTest:!1,depthWrite:!1,side:We.DoubleSide,toneMapped:!1}),ge=Y.clone(!1);ge.name="",ge.position.set(0,0,0),ge.quaternion.identity(),ge.scale.set(1,1,1),ge.matrix.identity(),ge.matrixAutoUpdate=!0,ge.material=me,ge.castShadow=!1,ge.receiveShadow=!1,ge.frustumCulled=!1,ge.renderOrder=1,ge.userData={isWireframeOverlay:!0},ge.raycast=()=>{},Y.morphTargetInfluences&&(ge.morphTargetInfluences=Y.morphTargetInfluences),Y.add(ge),V.push({node:Y,overlay:ge})}return E(),()=>{for(let{node:U,overlay:j}of V)U.remove(j),j.material.dispose()}},[Ke,ft,ne,te,t,E]);let Bn=(0,oe.useMemo)(()=>{let V=Array.from(Z.current.values()).flat();return mx([...A.animations,...V])},[A.animations,J]),Fn=(0,oe.useRef)(d);Fn.current=d;let Br=(0,oe.useRef)(b);Br.current=b;let gr=(0,oe.useRef)(null),It=(0,oe.useRef)(null),Gn=(0,oe.useRef)(new Set),Ai=(0,oe.useRef)(0),kr=V=>{Gn.current.forEach(U=>U(V))};(0,oe.useEffect)(()=>{let V=gx({root:T,clips:Bn,getClipConfig:j=>Ry(Br.current,j),onChange:()=>{kr(V.getState()),uu(T),E()}});gr.current=V,It.current={clips:Bn.map(({sourceName:j})=>j),clipDetails:Bn.map(({sourceName:j,duration:ee})=>({sourceName:j,duration:ee})),play:V.play,pause:V.pause,stop:V.stop,setSpeed:V.setSpeed,seek:V.seek,getState:V.getState,subscribe:j=>(Gn.current.add(j),j(V.getState()),()=>{Gn.current.delete(j)})},kr(V.getState());let U=Br.current?.animations.autoplayClip;return U&&V.play(U),()=>{V.dispose(),gr.current=null,It.current=null,kr(V.getState())}},[T,Bn]);let Za=!!d;(0,oe.useEffect)(()=>{Za&&It.current&&Fn.current?.(It.current)},[T,Bn,Za,i]),(0,oe.useEffect)(()=>{b?.animations&&gr.current?.applyClipConfigs()},[b?.animations]),(0,zo.useFrame)((V,U)=>{let j=gr.current;if(j?.isRunning()){if(j.update(U),!w)for(let[ee,Y]of Lt.current)du(ee,Y,ce);Ai.current+=U,uu(T,{updateFallbacks:Ai.current>=.066}),E(),Ai.current>=.066&&(Ai.current=0,kr(j.getState()))}});let ni=(0,oe.useMemo)(()=>(b?.model.rotation??[0,0,0]).map(V=>V*Math.PI/180),[b?.model.rotation]);(0,zo.useFrame)((V,U)=>{if(!I.current)return;let j=I.current.rotation;j.x=We.MathUtils.lerp(j.x,ni[0],1-Math.exp(-5*U)),j.y=We.MathUtils.lerp(j.y,ni[1],1-Math.exp(-5*U)),j.z=We.MathUtils.lerp(j.z,ni[2],1-Math.exp(-5*U)),Math.abs(j.x-ni[0])<1e-4&&Math.abs(j.y-ni[1])<1e-4&&Math.abs(j.z-ni[2])<1e-4||E()});let Qa=(0,oe.useRef)([]),Dl=(0,oe.useRef)(0),uo=(0,oe.useRef)(0),Ja=(0,oe.useMemo)(()=>new We.Vector3,[]);(0,oe.useEffect)(()=>{let V=new Map;for(let[at,jt]of Object.entries(t)){let Rt=te[jt.modelObjectId??at];Rt&&V.set(Rt,jt)}for(let at of Qa.current)du(at.node,V.get(at.node)?.transform,ce);uo.current=0,T.updateWorldMatrix(!0,!0);let U=new We.Box3().setFromObject(T),j=U.getCenter(new We.Vector3),ee=U.getSize(new We.Vector3).length()*.5;Dl.current=Number.isFinite(ee)?ee:0;let Y=[...V.keys()],me=new Set(Y),ge=[],Et=new We.Vector3;for(let at of Y){if(!at.parent)continue;let jt=at.parent,Rt=!1;for(;jt;){if(me.has(jt)){Rt=!0;break}jt=jt.parent}if(Rt)continue;let ht=new We.Box3().setFromObject(at);if(ht.isEmpty())continue;ht.getCenter(Et);let yn=Et.clone().sub(j);yn.lengthSq()<1e-8||(yn.normalize(),ge.push({node:at,restLocalPos:at.position.clone(),restWorldPos:at.getWorldPosition(new We.Vector3),worldDir:yn,parentInverse:new We.Matrix4().copy(at.parent.matrixWorld).invert()}))}Qa.current=ge,E()},[T,te,tt,At,ce,E]),(0,oe.useEffect)(()=>{E()},[L,E]),(0,zo.useFrame)((V,U)=>{let j=Qa.current;if(j.length===0)return;let ee=Math.min(Math.max(L,0),1),Y=uo.current;if(Math.abs(Y-ee)<1e-4){if(Y===ee)return;uo.current=ee}else uo.current=We.MathUtils.lerp(Y,ee,1-Math.exp(-6*U)),E();let me=uo.current*Dl.current;for(let ge of j)Ja.copy(ge.worldDir).multiplyScalar(me).add(ge.restWorldPos).applyMatrix4(ge.parentInverse),ge.node.position.copy(Ja),ge.node.matrixAutoUpdate||(ge.node.matrix.setPosition(ge.node.position),ge.node.matrixWorldNeedsUpdate=!0)});let Ei=V=>{let U=V;for(;U;){let j=Vs(U),ee=j?Te[j]:void 0;if(ee&&t[ee])return[ee,t[ee]];U=U.parent}return null},es=V=>{let U=Ei(V);if(!U)return null;let[j,ee]=U;return te[ee.modelObjectId??j]??null},Il=kc(V=>{let U=Ei(V);return U&&U[1].selectable!==!1?U[1]:null},i?l:void 0,es),Wd=V=>{if(Il.consumeClick())return;let U=Ei(V.object);if(!U)return;let[,j]=U;j.selectable!==!1&&(V.stopPropagation(),o(j,Sa(V,es(V.object))))},Nr=V=>{let U=Ei(V.object);if(!U)return;let[,j]=U;if(j.selectable===!1)return;s?.(j,Sa(V,es(V.object)))&&V.stopPropagation()},Vr=V=>{if(!g)return;let U=Ei(V.object);if(!U)return;let[j,ee]=U;ee.hoverable!==!1&&(V.stopPropagation(),F("pointer"),N(j),a?.(ee))},Bl=V=>{g&&(V.stopPropagation(),O(),N(null),a?.(null))},po=(0,oe.useMemo)(()=>!mb(T),[T,z]);return(0,Uo.jsxs)("group",{ref:I,children:[(0,Uo.jsx)("primitive",{object:T,...i&&po?{onClick:Wd,onDoubleClick:Nr,...l?{onPointerDown:Il.onPointerDown}:{},...g?{onPointerOver:Vr,onPointerOut:Bl}:{}}:{}}),C?.map(V=>(0,Uo.jsx)(Xr,{onLoadError:U=>S?.(V.url,U),children:(0,Uo.jsx)(oe.Suspense,{fallback:null,children:(0,Uo.jsx)(NT,{url:V.url,namePrefix:V.namePrefix,decoderConfig:y,onReady:H})})},V.url))]})}function NT({url:e,namePrefix:t,decoderConfig:n,onReady:r}){let i=js(e,n),o=(0,oe.useMemo)(()=>{let l=Uh.SkeletonUtils.clone(i.scene);return $v(l,t),l},[i.scene,t]),a=(0,oe.useMemo)(()=>i.animations.map(l=>Kv(l,t)),[i.animations,t]),s=(0,oe.useRef)(r);return s.current=r,(0,oe.useEffect)(()=>{s.current(e,o,a)},[e,o,a]),null}var Ia=require("react");var Xs=require("react/jsx-runtime");function VT({url:e,decoderConfig:t,onModelLoaded:n}){let{scene:r}=js(e,t),i=(0,Ia.useRef)(n);return i.current=n,(0,Ia.useEffect)(()=>{i.current?.(r)},[r]),(0,Xs.jsx)("primitive",{object:r})}function Mx({url:e,decoderConfig:t,onLoadError:n,onModelLoaded:r}){return(0,Xs.jsx)(Xr,{onLoadError:i=>n?.(e,i),children:(0,Xs.jsx)(Ia.Suspense,{fallback:null,children:(0,Xs.jsx)(VT,{url:e,decoderConfig:t,onModelLoaded:r})})})}var qi=require("react");var pu=require("react/jsx-runtime"),zT={};function Sx({entry:e,isActive:t,decoderConfig:n,itemMaterials:r,sceneConfig:i,zoomOnSelected:o,highlightOnHover:a,explodeFactor:s,suspendBindingTransforms:l,onLoadProgress:c,onAnimationsReady:d,onModelAnimationsReady:p,onLoadError:u,onModelLoaded:h,selectedItem:m,panelHoveredItem:b,onItemClick:f,onItemDoubleClick:g,onItemContextMenu:y,onItemHover:x,nodeRefsOut:_,onNodeRefsChange:L,materialRefsOut:w,onMergeModelLoaded:R,onMergeModelError:C,pulses:P}){let S=(0,qi.useRef)({}),v=(0,qi.useRef)({}),A=(0,qi.useCallback)(()=>{},[]),E=(0,qi.useCallback)(N=>{t&&d?.(N),p?.(e.url,N)},[t,d,p,e.url]),B=!!d||!!p;return(0,pu.jsx)(Xr,{onLoadError:N=>u?.(e.url,N),children:(0,pu.jsx)(qi.Suspense,{fallback:null,children:(0,pu.jsx)(Ws,{url:e.url,interactive:t,objectBindings:e.objectBindings,selectedItem:t?m:null,itemMaterials:t?r:zT,onItemClick:t?f:A,onItemDoubleClick:t?g:void 0,onItemContextMenu:t?y:void 0,onItemHover:t?x:void 0,onModelLoaded:h?N=>h(e.url,N):void 0,onAnimationsReady:B?E:void 0,nodeRefsOut:t?_:S,onNodeRefsChange:t?L:void 0,materialRefsOut:w??v,panelHoveredItem:t?b:void 0,sceneConfig:t?i:e.sceneConfig??i,zoomOnSelected:t&&o,highlightOnHover:t&&!!a,decoderConfig:n,onLoadProgress:t?c:void 0,explodeFactor:s,suspendBindingTransforms:t?l:!1,originalNodePoses:e.originalNodePoses,mergeModels:e.mergeModels,onMergeModelLoaded:R,onMergeModelError:C,pulses:t?P:void 0})})})}var Ie=require("react");var ju=require("@react-three/fiber");var Ct=require("three");var xt=require("three");function Ax(e){let t={};for(let[n,r]of Object.entries(e))t[r.modelObjectId??n]=n;return t}function Gh(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 Ex(e,t){return e||(t?t.modelObjectId??t.id:null)}function mu(e,t){let n=Gh(e);if(!n)return null;let r=t.keyByModelObject[n]??n,i=t.objectBindings[r];return i?{key:r,binding:i}:null}var Ba=new xt.Vector3,jh=new xt.Vector3,UT=new xt.Matrix4,Cx=new xt.Matrix4,qs=new xt.Matrix4,jT=new xt.Matrix4,hu=new xt.Matrix4,FT=new xt.Matrix4,GT=new xt.Matrix4,Tx=new xt.Vector3,Px=new xt.Vector3,Yi=new xt.Vector3,Fh=new xt.Quaternion,HT=new xt.Euler;function WT(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}Cx.compose(t.position,Fh.setFromEuler(t.rotation),t.scale);let s=n?.rotation;qs.compose(Tx.fromArray(Gs(n?.position??[0,0,0],s??[0,0,0],n?.scale??[1,1,1],n?.pivot,"XYZ",n?.shear)),Fh.setFromEuler(HT.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),Px.fromArray(n?.scale??[1,1,1])),n?.shear&&qs.makeRotationFromQuaternion(Fh).multiply(Oa(n.shear)).scale(Px).setPosition(Tx),qs.premultiply(r).multiply(jT.copy(r).invert()),e.parent?.updateWorldMatrix(!0,!1);let l=e.parent?.matrixWorld??UT;if(hu.multiplyMatrices(l,Cx).premultiply(qs),a&&i){let c=e;for(;c.parent&&!c.userData.ri_name;)c=c.parent;let d=c.userData.ri_center;Array.isArray(d)&&d.length===3?Yi.fromArray(d).applyMatrix4(r).applyMatrix4(qs):Yi.setFromMatrixPosition(hu),Yi.sub(i.centre),Yi.lengthSq()>1e-8&&(Yi.normalize().multiplyScalar(i.factor*i.radius),hu.premultiply(GT.makeTranslation(Yi.x,Yi.y,Yi.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(FT.copy(l).invert(),hu),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function fu(e,t){if(!ln(e)&&!e.userData.riLogicalObject)return;let n=mu(e,t);if(!n)return;let r=Rx(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){WT(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(Gs(e.position.toArray(),[e.rotation.x,e.rotation.y,e.rotation.z],e.scale.toArray(),o?.pivot,i.rotation.order,o?.shear)),ko(e,o?.shear);let a=t.explode;if(a&&a.factor>0&&a.radius>0){e.updateWorldMatrix(!0,!1),jh.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?Ba.fromArray(l).applyMatrix4(e.matrixWorld).sub(a.centre):Ba.copy(jh).sub(a.centre),Ba.lengthSq()>1e-8&&(Ba.normalize().multiplyScalar(a.factor*a.radius).add(jh),e.parent&&e.parent.worldToLocal(Ba),e.position.copy(Ba))}ko(e,o?.shear),e.updateWorldMatrix(!0,!1)}function ka(e,t){e.traverse(n=>fu(n,t))}function Rx(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function XT(e,t,n,r){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,r])}function qT(e){if(e.textures){for(let t of Hi){let n=e.textures[t];n&&di(n,Sr(t))}e.textures=void 0}}function YT(e,t,n){let r=e.textures??{};for(let i of Hi){let o=Ot(t,i),a=r[i];if(a===o)continue;let s=Sr(i);a&&di(a,s),o?(Ma(o,s,n),r[i]=o):delete r[i]}e.textures=Object.keys(r).length>0?r:void 0}function $T(e,t){if(t.shadingMode==="normals")return Qr(e,()=>new xt.MeshNormalMaterial);if(t.shadingMode==="unlit")return Qr(e,n=>{let r=new xt.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=Bc();return Qr(e,r=>{let i=new xt.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 KT(e,t){if(!ln(e))return;let r=Rx(e);r.original??(r.original=Hs(e));let i=mu(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,fu(e,t);let s=t.itemMaterials?.[o]?.hex??t.itemMaterials?.[a.modelObjectId??o]?.hex,l=t.highlightOnHover!==!1&&o===t.hoveredKey,c=XT(a,s,t,l);if(r.signature===c&&r.display){e.material=r.display;return}let d=a.style?.material;if(YT(r,d,t.invalidate),!r.physical){let p=r.original??Hs(e);if(!p)return;r.physical=Qr(p,u=>{let h=ou(u),m=au(h??new xt.MeshStandardMaterial);return su(m),m})}Nn(r.physical,p=>{lu(p,d,s??d?.baseColor),l&&(p.emissive.add(Po),p.color.lerp(Iy,By)),p.needsUpdate=!0}),r.display&&r.display!==r.physical&&Nn(r.display,p=>p.dispose()),r.display=$T(r.physical,t),r.signature=c,e.material=r.display}function Ox(e,t){e.traverse(n=>KT(n,t))}function Hh(e){e.traverse(t=>{if(!ln(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&&Nn(n.display,r=>r.dispose()),n.physical&&Nn(n.physical,r=>r.dispose()),qT(n),delete t.userData.riVisuals)})}var Dx=new Ct.Matrix4().makeRotationX(Math.PI/2),Lx=Dx.clone().invert();function ZT(e){let t=new Ct.Vector3(e[0],e[1],e[2]),n=new Ct.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 Ct.Box3(t.clone().sub(n),t.clone().add(n))}function QT(e){let t=e.getCenter(new Ct.Vector3),n=e.getSize(new Ct.Vector3).multiplyScalar(.5);return[t.x,t.y,t.z,n.x,0,0,0,n.y,0,0,0,n.z]}var gu=class{constructor(){this.group=new Ct.Group;this.objects=new Map;this.geometry=new Ct.BoxGeometry(1,1,1);this.material=new Ct.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 Ct.Box3(new Ct.Vector3(...n.minimum),new Ct.Vector3(...n.maximum)).applyMatrix4(Lx),i=new Ct.Group;i.name=n.name,i.userData.ri_name=n.name,i.userData.riLogicalObject=!0,i.userData.ri_center=r.getCenter(new Ct.Vector3).toArray();let o=new Ct.Mesh(this.geometry,this.material);o.visible=!1,o.raycast=()=>{},o.position.copy(r.getCenter(new Ct.Vector3)),o.scale.copy(r.getSize(new Ct.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||fu(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 Ct.Matrix4)||this.transforms.set(l,Dx.clone().multiply(c.matrix).multiply(Lx))}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=ZT(i.box),a=o.clone(),s=1;for(let c of r.extras?.featureIds??[]){let d=this.transforms.get(c);d&&(a.union(o.clone().applyMatrix4(d)),s=Math.max(s,d.getMaxScaleOnAxis()))}let l=QT(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 Wh=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),Ys=16,Xh=1.25,JT=1.5,eP=1.25,tP=500,nP=3e3,Ix=5e3,Bx=2e3,rP=.9;function kx(e){return e.full&&(e.wanting||e.usage>1)}function Nx(e){return e.loosened?nP:tP}function Vx(e){let t=e.factor/eP;return t<=1+1e-6?1:t}function zx(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<rP&&Vx(e)>e.tooFine}function Ux(e,t){let{now:n}=t,r=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(kx(t)){if(n-r.changedAt<Nx(r))return r;let i=Math.max(r.tooFine,r.factor);return r.factor>=Ys?r.loosened&&r.tooFine===i?r:{...r,loosened:!0,tooFine:i,changedAt:n}:{factor:Math.min(Ys,r.factor*JT),loosened:!0,tooFine:i,raisedAt:n,changedAt:n}}return r.loosened&&!t.wanting?{...r,loosened:!1,changedAt:n}:zx(r,t)&&n-r.raisedAt>=Ix&&n-r.changedAt>=Bx?{...r,factor:Vx(r),changedAt:n}:r}function jx(e,t){let{now:n}=t;return kx(t)?e.factor>=Ys&&e.loosened?null:Math.max(0,Nx(e)-(n-e.changedAt)):e.loosened&&!t.wanting?0:zx(e,t)?Math.max(0,Ix-(n-e.raisedAt),Bx-(n-e.changedAt)):null}function Wx(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 yu,$s=(yu=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)})}},Zp(yu,"pending",new Map),Zp(yu,"session",null),yu),Fx=2**30,Qs=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*Fx,this.maxBytesSize=.4*Fx,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:d}=this,p=r.length-o.size,u=r.length-a.size,h=Math.max(Math.min(r.length-t,p),0),m=this.cachedBytes-c,b=this.unloadPriorityCallback||this.defaultPriorityCallback,f=!1,g=h>0&&p>0||u&&r.length>n;if(p&&this.cachedBytes>c||u&&this.cachedBytes>d||g){r.sort((C,P)=>{let S=o.has(C);if(S===o.has(P)){let v=a.has(C);return v===a.has(P)?-b(C,P):v?1:-1}else return S?1:-1});let y=Math.max(t*e,h*e),x=Math.ceil(Math.min(y,p,h)),_=Math.max(e*m,e*c),L=Math.min(_,m),w=0,R=0;for(;this.cachedBytes-R>d||r.length-w>n;){let C=r[w],P=l.get(C)||0;if(o.has(C)&&a.has(C)||this.cachedBytes-R-P<d&&r.length-w<=n)break;R+=P,w++}for(;R<L||w<x;){let C=r[w],P=l.get(C)||0;if(o.has(C)||this.cachedBytes-R-P<c&&w>=x)break;R+=P,w++}r.splice(0,w).forEach(C=>{this.cachedBytes-=l.get(C)||0,s.get(C)(C),l.delete(C),i.delete(C),s.delete(C),a.delete(C),o.delete(C)}),f=w<h||R<m&&w<p,f&&(f=w>0)}f&&(this.unloadingHandle=$s.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){$s.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},iP=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Jr=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=>{$s.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 iP),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(d){l(d),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))}},_u=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:Wx(e),o=this.originQueues.get(i);o||(o=new Jr,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 Go=6378137,oP=1/298.257223563,$h=6356752314245179e-9,bu={inView:!1,error:1/0,distanceFromCamera:1/0};function Mu(e){return e===4||e===-1}function bi(e,t){return Su(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function Su(e){return!!e.traversal}function Js(e){let{children:t}=e,n=t.length===0||Su(t[t.length-1]),r=!e.internal.hasUnrenderableContent||Mu(e.internal.loadingState);return n&&r}function jo(e){return e.traversal.unconditionallyRefine}function Ks(e,t){if(Su(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,bu),e.traversal.inFrustum=bu.inView,e.traversal.error=bu.error,e.traversal.distanceFromCamera=bu.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 Yh(e,t,n=!1){if(Ks(e,t),n?t.markTileUsed(e):vu(e),jo(e)&&Js(e)){let r=e.children;for(let i=0,o=r.length;i<o;i++)Yh(r[i],t,n)}}function Xx(e,t){if(Ks(e,t),e.traversal.usedLastFrame&&(vu(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||jo(e))&&Js(e))){let n=e.children;for(let r=0,i=n.length;r<i;r++)Xx(n[r],t)}}function vu(e){e.traversal.used=!0}function aP(e,t){return!(e.traversal.error<=t.errorTarget&&!jo(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!Js(e))}function qx(e,t){let{frameCount:n}=t,{children:r}=e;for(let i=0,o=r.length;i<o;i++){let a=r[i];bi(a,n)&&(a.traversal.active&&(a.traversal.kicked=!0,a.traversal.active=!1),qx(a,t))}}function Gx(e){return!jo(e)&&(!e.internal.hasContent||Mu(e.internal.loadingState))}function Yx(e,t){if(Ks(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(!aP(e,t)){vu(e);return}let r=!1,i=!1,o=e.children;for(let a=0,s=o.length;a<s;a++){let l=o[a];Yx(l,t),r||(r=bi(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++)Yh(o[a],t,!0);return}if(vu(e),e.refine==="REPLACE"&&r&&(t.loadSiblings||t.loadAncestors))for(let a=0,s=o.length;a<s;a++)Yh(o[a],t)}function $x(e,t){let n=t.frameCount;if(!bi(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=bi(l,n))}if(!i)e.traversal.isLeaf=!0;else{for(let s=0,l=r.length;s<l;s++)$x(r[s],t);let a=!0;for(let s=0,l=r.length;s<l;s++){let c=r[s];if(bi(c,n)){let d=!jo(c),p=!c.internal.hasContent||Mu(c.internal.loadingState);d&&p||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];bi(l,t.frameCount)&&!l.traversal.allUsedChildrenProcessed&&(o=!1)}e.traversal.allUsedChildrenProcessed=o&&Js(e)}function Kx(e,t){if(!bi(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!jo(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!jo(e)&&(e.traversal.active=!0,Js(e)&&e.internal.hasContent&&!Mu(e.internal.loadingState)))for(let i=0,o=n.length;i<o;i++)Xx(n[i],t);return}let r=n.length>0;for(let i=0,o=n.length;i<o;i++){let a=n[i];Kx(a,t),bi(a,t.frameCount)&&!(a.traversal.active&&Gx(a))&&!a.traversal.allChildrenReady&&(r=!1)}e.traversal.allChildrenReady=r,e.refine==="REPLACE"&&!r&&e.traversal.wasSetActive&&Gx(e)&&(e.traversal.active=!0,qx(e,t))}function Zx(e,t){Ks(e,t);let n=bi(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||Su(e)&&e.traversal.usedLastFrame){let r=!1,i=!1;n?(r=e.traversal.active,i=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):Ks(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];Zx(l,t)}}}function sP(e,t){Yx(e,t),$x(e,t),Kx(e,t),Zx(e,t)}function lP(e){let t=null;return()=>{t===null&&(t=$s.requestAnimationFrame(()=>{t=null,e()}))}}function cP(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 Hx=Symbol("PLUGIN_REGISTERED"),$i={inView:!0,error:0,distance:1/0},uP=(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},dP=(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,pP=(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,Na=(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?dP(e,t):uP(e,t)},Kh=new Qs;Kh.unloadPriorityCallback=pP;var Zs=new _u;Zs.maxJobsPerOrigin=25,Zs.priorityCallback=Na;var xu=new Jr;xu.maxJobs=5,xu.priorityCallback=Na;var wu=new Jr;wu.maxJobs=25,wu.priorityCallback=(e,t)=>{let n=e.parent,r=t.parent;return n===r?0:n?r?Na(n,r):-1:1};var Zh=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 Jr){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=Kh,this.downloadQueue=Zs,this.parseQueue=xu,this.processNodeQueue=wu,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=lP(()=>{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[Hx]===!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[Hx]=!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&&cP(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 d=this.rootURL;d!==null&&this.invokeAllPlugins(p=>d=p.preprocessURL?p.preprocessURL(d,null):d),this.rootLoadingState=4,this.rootTileset=c,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:c,url:d}),this.dispatchEvent({type:"load-root-tileset",tileset:c,url:d})}).catch(c=>{this.rootLoadingState=-1,console.error(c),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:c,url:this.rootURL})})),!r)return;let s=null;if(this.invokeAllPlugins(c=>{if(c.doTilesNeedUpdate){let d=c.doTilesNeedUpdate();s=s===null?d:!!(s||d)}}),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(),sP(r,this),this.removeUnusedPendingTiles();let l=this.queuedTiles;l.sort(e.unloadPriorityCallback);for(let c=0,d=l.length;c<d&&!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&&($i.inView=!0,$i.error=0,$i.distance=1/0,s.calculateTileViewError(e,$i)&&(i===null&&(i=!0),i&&(i=$i.inView),$i.inView&&(a=Math.min(a,$i.distance),o=Math.max(o,$i.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(u=>r=u.preprocessURL?u.preprocessURL(r,e):r);let i=this.stats,o=this.lruCache,a=this.downloadQueue,s=this.parseQueue,l=this.loadingTiles,c=qh(r),d=new AbortController,p=d.signal;if(o.add(e,u=>{d.abort(),t?u.children.length=0:this.invokeAllPlugins(h=>{h.disposeTile&&h.disposeTile(u)}),i.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),i.inCacheSinceLoad--),u.internal.loadingState===1?i.queued--:u.internal.loadingState===2?i.downloading--:u.internal.loadingState===3?i.parsing--:u.internal.loadingState===4&&i.loaded--,u.internal.loadingState=0,s.remove(u),a.remove(u),l.delete(u)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),o.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),i.inCacheSinceLoad++,i.inCache++,i.queued++,e.internal.loadingState=1,l.add(e),a.add(r,e,u=>{if(p.aborted)return Promise.resolve();e.internal.loadingState=2,i.downloading++,i.queued--;let h=this.invokeOnePlugin(m=>m.fetchData&&m.fetchData(r,{...this.fetchOptions,signal:p}));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}}),h}).then(u=>{if(!p.aborted){if(!(u instanceof Response))return u;if(u.ok)return c==="json"?u.json():u.arrayBuffer();throw Error(`Failed to load model with error code ${u.status}`)}}).then(u=>{if(!p.aborted)return i.downloading--,i.parsing++,e.internal.loadingState=3,s.add(e,h=>p.aborted?Promise.resolve():c==="json"&&u.root?(this.preprocessTileset(u,r,e),e.children.push(u.root),n=u,t=!0,Promise.resolve()):this.invokeOnePlugin(m=>m.parseTile&&m.parseTile(u,h,c,r,p)))}).then(()=>{if(p.aborted)return;i.parsing--,i.loaded++,e.internal.loadingState=4,l.delete(e),o.setLoaded(e,!0);let u=this.getBytesUsed(e);if(o.getMemoryUsage(e)===0&&u>0&&o.isFull()){o.remove(e);return}o.setMemoryUsage(e,u),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:n,url:r}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:r})}).catch(u=>{p.aborted||(u.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(u),e.internal.loadingState=-1,l.delete(e),o.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:u,url:r})))})}};function Fo(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 hP=new TextDecoder;function Qx(e){return hP.decode(e)}function Cu(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var Va=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=Cu(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function Qh(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 el=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(Qx(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,d=o.type||r,p=o.componentType||n;if("type"in o&&r&&o.type!==r)throw Error("FeatureTable: Specified type does not match expected type.");let u=s+c,h=Qh(a,u,t,d,p,e);if(u+h.byteLength>s+l)throw Error("FeatureTable: Feature data read outside binary body length.");return h}}getBuffer(e,t){let{buffer:n,binOffset:r}=this;return n.slice(r+e,r+e+t)}},mP=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 Qh(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}},Tu=class extends el{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 mP(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)}},Jh=class extends Va{parse(e){let t=new DataView(e),n=Fo(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 el(e.slice(28,28+o+a),0,o,a),d=28+o+a,p=new Tu(e.slice(d,d+s+l),c.getData("BATCH_LENGTH"),0,s,l),u=d+s+l;return{version:r,featureTable:c,batchTable:p,glbBytes:new Uint8Array(e,u,i-u)}}},em=class extends Va{parse(e){let t=new DataView(e),n=Fo(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),d=new el(e.slice(32,32+o+a),0,o,a),p=32+o+a,u=new Tu(e.slice(p,p+s+l),d.getData("INSTANCES_LENGTH"),0,s,l),h=p+s+l,m=new Uint8Array(e,h,i-h),b=null,f=null,g=null;if(c)b=m,f=Promise.resolve();else{let y=this.resolveExternalURL(Qx(m));g=Cu(y),f=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=>{b=new Uint8Array(x)})}return f.then(()=>({version:r,featureTable:d,batchTable:u,glbBytes:b,gltfWorkingPath:g}))}},tm=class extends Va{parse(e){let t=new DataView(e),n=Fo(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 el(e.slice(28,28+o+a),0,o,a),d=28+o+a,p=new Tu(e.slice(d,d+s+l),c.getData("BATCH_LENGTH")||c.getData("POINTS_LENGTH"),0,s,l);return Promise.resolve({version:r,featureTable:c,batchTable:p})}},nm=class extends Va{parse(e){let t=new DataView(e),n=Fo(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),d=Fo(c),p=c.getUint32(4,!0),u=c.getUint32(8,!0),h=new Uint8Array(e,s,u);a.push({type:d,buffer:h,version:p}),s+=u}return{version:r,tiles:a}}};var G=require("three"),Bu=require("three/addons/loaders/GLTFLoader.js"),m0=require("three/addons/utils/BufferGeometryUtils.js"),pm=class extends Jh{constructor(e=G.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new G.Matrix4}parse(e){let t=super.parse(e),n=t.glbBytes.slice().buffer;return new Promise((r,i)=>{let o=this.manager,a=this.fetchOptions,s=o.getHandler("path.gltf")||new Bu.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,d=>{let{batchTable:p,featureTable:u}=t,{scene:h}=d,m=u.getData("RTC_CENTER",1,"FLOAT","VEC3");m&&(h.position.x+=m[0],h.position.y+=m[1],h.position.z+=m[2]),d.scene.updateMatrix(),d.scene.matrix.multiply(c),d.scene.matrix.decompose(d.scene.position,d.scene.quaternion,d.scene.scale),d.batchTable=p,d.featureTable=u,h.batchTable=p,h.featureTable=u,r(d)},i)})}};function fP(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 tl=new G.Vector2;function gP(e,t,n=new G.Vector3){tl.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(tl.x,tl.y,1-Math.abs(tl.x)-Math.abs(tl.y));let r=G.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 Jx={RGB:"color",POSITION:"position"},hm=class extends tm{constructor(e=G.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:r}=t,i=new G.PointsMaterial,o=n.header.extensions,a=new G.Vector3,s;if(o&&o["3DTILES_draco_point_compression"]){let{byteOffset:d,byteLength:p,properties:u}=o["3DTILES_draco_point_compression"],h=this.manager.getHandler("draco.drc");if(h==null)throw Error("PNTSLoader: dracoLoader not available.");let m={};for(let g in u)if(g in Jx&&g in u){let y=Jx[g];m[y]=u[g]}let b={attributeIDs:m,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},f=n.getBuffer(d,p);s=await h.decodeGeometry(f,b),s.attributes.color&&(i.vertexColors=!0)}else{let d=n.getData("POINTS_LENGTH"),p=n.getData("POSITION",d,"FLOAT","VEC3"),u=n.getData("NORMAL",d,"FLOAT","VEC3"),h=n.getData("NORMAL",d,"UNSIGNED_BYTE","VEC2"),m=n.getData("RGB",d,"UNSIGNED_BYTE","VEC3"),b=n.getData("RGBA",d,"UNSIGNED_BYTE","VEC4"),f=n.getData("RGB565",d,"UNSIGNED_SHORT","SCALAR"),g=n.getData("CONSTANT_RGBA",d,"UNSIGNED_BYTE","VEC4"),y=n.getData("POSITION_QUANTIZED",d,"UNSIGNED_SHORT","VEC3"),x=n.getData("QUANTIZED_VOLUME_SCALE",d,"FLOAT","VEC3"),_=n.getData("QUANTIZED_VOLUME_OFFSET",d,"FLOAT","VEC3");if(s=new G.BufferGeometry,y){let L=new Float32Array(d*3);for(let w=0;w<d;w++)for(let R=0;R<3;R++){let C=3*w+R;L[C]=y[C]/65535*x[R]}a.x=_[0],a.y=_[1],a.z=_[2],s.setAttribute("position",new G.BufferAttribute(L,3,!1))}else s.setAttribute("position",new G.BufferAttribute(p,3,!1));if(u!==null)s.setAttribute("normal",new G.BufferAttribute(u,3,!1));else if(h!==null){let L=new Float32Array(d*3),w=new G.Vector3;for(let R=0;R<d;R++){let C=h[R*2],P=h[R*2+1],S=gP(C,P,w);L[R*3]=S.x,L[R*3+1]=S.y,L[R*3+2]=S.z}s.setAttribute("normal",new G.BufferAttribute(L,3,!1))}if(b!==null)s.setAttribute("color",new G.BufferAttribute(b,4,!0)),i.vertexColors=!0,i.transparent=!0,i.depthWrite=!1;else if(m!==null)s.setAttribute("color",new G.BufferAttribute(m,3,!0)),i.vertexColors=!0;else if(f!==null){let L=new Uint8Array(d*3);for(let w=0;w<d;w++){let R=fP(f[w]);for(let C=0;C<3;C++){let P=3*w+C;L[P]=R[C]}}s.setAttribute("color",new G.BufferAttribute(L,3,!0)),i.vertexColors=!0}else if(g!==null){i.color=new G.Color(g[0],g[1],g[2]);let L=g[3]/255;L<1&&(i.opacity=L,i.transparent=!0,i.depthWrite=!1)}}let l=new G.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 bP(e){let{x:t,y:n,z:r}=e;e.x=r,e.y=t,e.z=n}function yP(e){return-e+Math.PI/2}var e0=new G.Spherical,Ki=new G.Vector3,Ln=new G.Vector3,rm=new G.Vector3,ur=new G.Matrix4,ei=new G.Matrix4,im=new G.Sphere,Vn=new G.Euler,t0=new G.Vector3,n0=new G.Vector3,r0=new G.Vector3,nl=new G.Vector3,Pu=new G.Ray,vP=1e-12,xP=.1;var mm=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new G.Vector3(e,t,n)}intersectRay(e,t){return ur.makeScale(...this.radius).invert(),im.center.set(0,0,0),im.radius=1,Pu.copy(e).applyMatrix4(ur),Pu.intersectSphere(im,t)?(ur.makeScale(...this.radius),t.applyMatrix4(ur),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,t0,n0,r0),this.getCartographicToPosition(e,t,n,nl),r.makeBasis(t0,n0,r0).setPosition(nl)}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,ur),Vn.set(i,o,-r,"ZXY"),a.makeRotationFromEuler(Vn).premultiply(ur),s===1?(Vn.set(Math.PI/2,0,0,"XYZ"),ei.makeRotationFromEuler(Vn),a.multiply(ei)):s===2&&(Vn.set(-Math.PI/2,0,Math.PI,"XYZ"),ei.makeRotationFromEuler(Vn),a.multiply(ei)),a}getCartographicFromObjectFrame(e,t,n=2){return n===1?(Vn.set(-Math.PI/2,0,0,"XYZ"),ei.makeRotationFromEuler(Vn).premultiply(e)):n===2?(Vn.set(-Math.PI/2,0,Math.PI,"XYZ"),ei.makeRotationFromEuler(Vn).premultiply(e)):ei.copy(e),nl.setFromMatrixPosition(ei),this.getPositionToCartographic(nl,t),this.getEastNorthUpFrame(t.lat,t.lon,0,ur).invert(),ei.premultiply(ur),Vn.setFromRotationMatrix(ei,"ZXY"),t.azimuth=-Vn.z,t.elevation=Vn.x,t.roll=Vn.y,t}getEastNorthUpAxes(e,t,n,r,i,o=nl){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,Ki);let i=this.radius;Ln.copy(Ki),Ln.x*=i.x**2,Ln.y*=i.y**2,Ln.z*=i.z**2;let o=Math.sqrt(Ki.dot(Ln));return Ln.divideScalar(o),r.copy(Ln).addScaledVector(Ki,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,Ln),this.getPositionToNormal(Ln,Ki);let n=rm.subVectors(e,Ln);return t.lon=Math.atan2(Ki.y,Ki.x),t.lat=Math.asin(Ki.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return e0.set(1,yP(e),t),n.setFromSpherical(e0).normalize(),bP(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,d=Math.sqrt(1/c),p=Ln.copy(e).multiplyScalar(d);if(c<xP)return isFinite(d)?t.copy(p):null;let u=rm.set(p.x*r*2,p.y*i*2,p.z*o*2),h=(1-d)*e.length()/(.5*u.length()),m=0,b,f,g,y,x,_,L,w,R,C,P;do{h-=m,g=1/(1+h*r),y=1/(1+h*i),x=1/(1+h*o),_=g*g,L=y*y,w=x*x,R=_*g,C=L*y,P=w*x,b=a*_+s*L+l*w-1,f=a*R*r+s*C*i+l*P*o;let S=-2*f;m=b/S}while(Math.abs(b)>vP);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*G.MathUtils.DEG2RAD,i=Math.sin(r)**2;return t/Math.sqrt(1-n*i)}getPositionElevation(e){this.getPositionToSurfacePoint(e,Ln);let t=rm.subVectors(e,Ln);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(ur.makeScale(...this.radius).invert(),Pu.copy(e).applyMatrix4(ur),Ln.set(0,0,0),Pu.closestPointToPoint(Ln,t).normalize(),ur.makeScale(...this.radius),t.applyMatrix4(ur))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},sl=new mm(Go,Go,$h);sl.name="WGS84 Earth";var Au=new G.Vector3,za=new G.Vector3,Ua=new G.Vector3,om=new G.Vector3,Eu=new G.Quaternion,Ru=new G.Vector3,ja=new G.Matrix4,i0=new G.Matrix4,o0=new G.Vector3,a0=new G.Matrix4,am=new G.Quaternion,sm={};function s0(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 fm=class extends em{constructor(e=G.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new G.Matrix4,this.ellipsoid=sl.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 Bu.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 d=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(d)||(d+="/");let p=this.adjustmentTransform;c.parse(i,d,u=>{let h=n.getData("INSTANCES_LENGTH"),m=n.getData("POSITION",h,"FLOAT","VEC3"),b=n.getData("POSITION_QUANTIZED",h,"UNSIGNED_SHORT","VEC3"),f=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),g=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),y=n.getData("NORMAL_UP",h,"FLOAT","VEC3"),x=n.getData("NORMAL_RIGHT",h,"FLOAT","VEC3"),_=n.getData("NORMAL_UP_OCT32P",h,"UNSIGNED_SHORT","VEC2"),L=n.getData("NORMAL_RIGHT_OCT32P",h,"UNSIGNED_SHORT","VEC2"),w=n.getData("SCALE_NON_UNIFORM",h,"FLOAT","VEC3"),R=n.getData("SCALE",h,"FLOAT","SCALAR"),C=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),P=n.getData("EAST_NORTH_UP");if(!m&&b){m=new Float32Array(h*3);for(let E=0;E<h;E++)m[E*3+0]=f[0]+b[E*3+0]/65535*g[0],m[E*3+1]=f[1]+b[E*3+1]/65535*g[1],m[E*3+2]=f[2]+b[E*3+2]/65535*g[2]}let S=new G.Vector3;for(let E=0;E<h;E++)S.x+=m[E*3+0]/h,S.y+=m[E*3+1]/h,S.z+=m[E*3+2]/h;let v=[],A=[];u.scene.updateMatrixWorld(),u.scene.traverse(E=>{if(E.isMesh){A.push(E);let{geometry:B,material:N}=E,I=new G.InstancedMesh(B,N,h);I.position.copy(S),C&&(I.position.x+=C[0],I.position.y+=C[1],I.position.z+=C[2]),v.push(I)}});for(let E=0;E<h;E++){om.set(m[E*3+0]-S.x,m[E*3+1]-S.y,m[E*3+2]-S.z),Eu.identity(),y&&x?(za.set(y[E*3+0],y[E*3+1],y[E*3+2]),Ua.set(x[E*3+0],x[E*3+1],x[E*3+2]),Au.crossVectors(Ua,za).normalize(),ja.makeBasis(Ua,za,Au),Eu.setFromRotationMatrix(ja)):_&&L&&(s0(_[E*2+0],_[E*2+1],65535,za),s0(L[E*2+0],L[E*2+1],65535,Ua),Au.crossVectors(Ua,za).normalize(),ja.makeBasis(Ua,za,Au),Eu.setFromRotationMatrix(ja)),Ru.set(1,1,1),w&&Ru.set(w[E*3+0],w[E*3+1],w[E*3+2]),R&&Ru.multiplyScalar(R[E]);for(let B=0,N=v.length;B<N;B++){let I=v[B];am.copy(Eu),P&&(I.updateMatrixWorld(),o0.copy(om).applyMatrix4(I.matrixWorld),this.ellipsoid.getPositionToCartographic(o0,sm),this.ellipsoid.getEastNorthUpFrame(sm.lat,sm.lon,a0),am.setFromRotationMatrix(a0)),ja.compose(om,am,Ru).multiply(p);let F=A[B];i0.multiplyMatrices(ja,F.matrixWorld),I.setMatrixAt(E,i0)}}u.scene.clear(),u.scene.add(...v),u.batchTable=r,u.featureTable=n,u.scene.batchTable=r,u.scene.featureTable=n,o(u)},a)})})}},f0=class extends nm{constructor(e=G.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new G.Matrix4,this.ellipsoid=sl.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(),d=new pm(n);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions,d.adjustmentTransform.copy(i);let p=d.parse(c.buffer);o.push(p);break}case"pnts":{let c=l.slice(),d=new hm(n);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions;let p=d.parse(c.buffer);o.push(p);break}case"i3dm":{let c=l.slice(),d=new fm(n);d.workingPath=this.workingPath,d.fetchOptions=this.fetchOptions,d.ellipsoid.copy(r),d.adjustmentTransform.copy(i);let p=d.parse(c.buffer);o.push(p);break}}}return Promise.all(o).then(a=>{let s=new G.Group;return a.forEach(l=>{s.add(l.scene)}),{tiles:a,scene:s}})}},rl=new G.Matrix4,wP=class extends G.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new G.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?rl.copy(this.matrix):rl.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=rl.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(rl),this.matrixWorldInverse.copy(rl).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)}},_P=new G.Ray;function MP(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 SP(e){return"traversal"in e}function g0(e,t,n,r,i=null){if(!SP(t))return;let{group:o,activeTiles:a}=e,{boundingVolume:s}=t.engineData;if(i===null&&(i=_P,i.copy(n.ray).applyMatrix4(o.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(i))return;a.has(t)&&MP(t,n,e,r);let l=t.children;for(let c=0,d=l.length;c<d;c++)g0(e,l[c],n,r,i)}var Ou=new G.Vector3,Lu=new G.Vector3,zn=new G.Vector3,Du=new G.Ray,um=class{constructor(e=new G.Box3,t=new G.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new G.Matrix4,this.points=Array(8).fill().map(()=>new G.Vector3),this.planes=[,,,,,,].fill().map(()=>new G.Plane)}copy(e){return this.box.copy(e.box),this.transform.copy(e.transform),this.update(),this}clone(){return new this.constructor().copy(this)}clampPoint(e,t){return t.copy(e).applyMatrix4(this.inverseTransform).clamp(this.box.min,this.box.max).applyMatrix4(this.transform)}distanceToPoint(e){return this.clampPoint(e,zn).distanceTo(e)}containsPoint(e){return zn.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(zn)}intersectsRay(e){return Du.copy(e).applyMatrix4(this.inverseTransform),Du.intersectsBox(this.box)}intersectRay(e,t){return Du.copy(e).applyMatrix4(this.inverseTransform),Du.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(){Ou.copy(this.box.min).applyMatrix4(this.transform),Lu.copy(this.box.max).applyMatrix4(this.transform),zn.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(zn,Ou),this.planes[1].setFromNormalAndCoplanarPoint(zn,Lu).negate(),zn.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(zn,Ou),this.planes[3].setFromNormalAndCoplanarPoint(zn,Lu).negate(),zn.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(zn,Ou),this.planes[5].setFromNormalAndCoplanarPoint(zn,Lu).negate()}intersectsSphere(e){return this.clampPoint(e.center,zn),zn.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}},al=Math.PI,lm=al/2,il=new G.Vector3,Ho=new G.Vector3,Er=new G.Vector3,Me=new G.Vector3,Dn=new G.Matrix4,CP=new G.Box3,l0=new G.Matrix4;function Zi(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function c0(e){return e.x!==e.y}var b0=class extends mm{constructor(e=1,t=1,n=1,r=-lm,i=lm,o=0,a=2*al,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){c0(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,d=n>0,p=r<0,u;u=d?n:p?r:0;let{min:h,max:m}=e;h.setScalar(1/0),m.setScalar(-1/0),o-i<=al?(this.getCartographicToNormal(l,c,Er),Ho.set(0,0,1),il.crossVectors(Ho,Er).normalize(),Ho.crossVectors(Er,il).normalize(),t.makeBasis(il,Ho,Er),Dn.copy(t).invert(),this.getCartographicToPosition(u,i,s,Me).applyMatrix4(Dn),m.x=Math.abs(Me.x),h.x=-m.x,this.getCartographicToPosition(r,i,s,Me).applyMatrix4(Dn),m.y=Me.y,this.getCartographicToPosition(r,c,s,Me).applyMatrix4(Dn),m.y=Math.max(Me.y,m.y),this.getCartographicToPosition(n,i,s,Me).applyMatrix4(Dn),h.y=Me.y,this.getCartographicToPosition(n,c,s,Me).applyMatrix4(Dn),h.y=Math.min(Me.y,h.y),this.getCartographicToPosition(l,c,s,Me).applyMatrix4(Dn),m.z=Me.z,this.getCartographicToPosition(n,i,a,Me).applyMatrix4(Dn),h.z=Me.z,this.getCartographicToPosition(r,i,a,Me).applyMatrix4(Dn),h.z=Math.min(Me.z,h.z)):(this.getCartographicToPosition(u,c,s,Er),Er.z=0,Er.length()<1e-10?Er.set(1,0,0):Er.normalize(),Ho.set(0,0,1),il.crossVectors(Er,Ho).normalize(),t.makeBasis(il,Ho,Er),Dn.copy(t).invert(),this.getCartographicToPosition(u,c+lm,s,Me).applyMatrix4(Dn),m.x=Math.abs(Me.x),h.x=-m.x,this.getCartographicToPosition(r,0,p?a:s,Me).applyMatrix4(Dn),m.y=Me.y,this.getCartographicToPosition(n,0,d?a:s,Me).applyMatrix4(Dn),h.y=Me.y,this.getCartographicToPosition(u,c,s,Me).applyMatrix4(Dn),m.z=Me.z,this.getCartographicToPosition(u,o,s,Me).applyMatrix4(Dn),h.z=Me.z),e.getCenter(Me),e.min.sub(Me).multiplyScalar(1.0000000000001),e.max.sub(Me).multiplyScalar(1.0000000000001),Me.applyMatrix4(t),t.setPosition(Me)}getBoundingSphere(e){c0(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(CP,l0),e.center.setFromMatrixPosition(l0),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,d=n<0,p;p=c?t:d?n:0,this.getCartographicToPosition(p,r,a,Me),Zi(Me,e),this.getCartographicToPosition(n,r,a,Me),Zi(Me,e),this.getCartographicToPosition(n,l,a,Me),Zi(Me,e),this.getCartographicToPosition(t,r,a,Me),Zi(Me,e),this.getCartographicToPosition(t,l,a,Me),Zi(Me,e),this.getCartographicToPosition(s,l,a,Me),Zi(Me,e),this.getCartographicToPosition(t,r,o,Me),Zi(Me,e),i-r>al&&(this.getCartographicToPosition(p,l+al,a,Me),Zi(Me,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},yi=new G.Vector3,vi=new G.Vector3,xi=new G.Vector3,u0=new G.Vector3,d0=new G.Vector3,TP=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,u0)&&(i=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(u0)),r&&r.intersectRay(e,d0)&&(o=r.containsPoint(e.origin)?0:e.origin.distanceToSquared(d0));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 um;yi.set(e[3],e[4],e[5]),vi.set(e[6],e[7],e[8]),xi.set(e[9],e[10],e[11]);let r=yi.length(),i=vi.length(),o=xi.length();yi.normalize(),vi.normalize(),xi.normalize(),r===0&&yi.crossVectors(vi,xi),i===0&&vi.crossVectors(yi,xi),o===0&&xi.crossVectors(yi,vi),n.transform.set(yi.x,vi.x,xi.x,e[0],yi.y,vi.y,xi.y,e[1],yi.z,vi.z,xi.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 G.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 b0(...e.radius,n,i,t,r,o,a),l=new um;s.getBoundingBox(l.box,l.transform),l.update(),this.region=s,this.regionObb=l}},PP=new G.Matrix3;function AP(e,t,n,r){let i=PP.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 EP=class extends G.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new G.Vector3)}setFromProjectionMatrix(...e){return super.setFromProjectionMatrix(...e),this.calculateFrustumPoints(),this}calculateFrustumPoints(){let{planes:e,points:t}=this;[[e[0],e[3],e[4]],[e[1],e[3],e[4]],[e[0],e[2],e[4]],[e[1],e[2],e[4]],[e[0],e[3],e[5]],[e[1],e[3],e[5]],[e[0],e[2],e[5]],[e[1],e[2],e[5]]].forEach((n,r)=>{AP(n[0],n[1],n[2],t[r])})}};var dm=0;function p0(e,t,n,r){try{return G.TextureUtils.getByteLength(e,t,n,r)}catch{return dm}}function RP(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??dm;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+=p0(s.width,s.height,t,n);return a}if(!r)return dm;let o=p0(r.width,r.height,t,n);return o*=e.generateMipmaps?4/3:1,o}function OP(e){let t=new Set,n=0;return e.traverse(r=>{if(r.geometry&&!t.has(r.geometry)&&(n+=(0,m0.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+=RP(a),t.add(a))}}}),n}var y0=Symbol("INITIAL_FRUSTUM_CULLED"),Iu=new G.Matrix4,ol=new G.Vector3,cm=new G.Vector2,LP=new G.Vector3(1,0,0),DP=new G.Vector3(0,1,0),IP=()=>null;function h0(e,t){e.traverse(n=>{n.frustumCulled=n[y0]&&t})}var gm=class extends Zh{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{h0(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new wP(this),this.ellipsoid=sl.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new G.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new G.LoadingManager,this._listeners={}}addEventListener(e,t){G.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return G.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){G.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){G.EventDispatcher.prototype.dispatchEvent.call(this,e)}getBoundingBox(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getAABB(e),!0):!1}getOrientedBoundingBox(e,t){if(!this.root)return!1;let n=this.root.engineData.boundingVolume;return n?(n.getOBB(e,t),!0):!1}getBoundingSphere(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getSphere(e),!0):!1}forEachLoadedModel(e){this.traverse(t=>{let n=t.engineData&&t.engineData.scene;n&&e(n,t)},null,!1)}raycast(e,t){if(this.root)if(this.accelerateRaycast)g0(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 G.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(cm),this.setResolution(e,cm.x,cm.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(DP,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(LP,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 EP,isOrthographic:!1,sseDenominator:-1,position:new G.Vector3,invScale:-1,pixelSize:0});ol.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(ol.x-ol.y,ol.x-ol.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,d=n.get(a);(d.width===0||d.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let p=a.projectionMatrix.elements;if(s.isOrthographic=p[15]===1,s.isOrthographic){let u=2/p[0],h=2/p[5];s.pixelSize=Math.max(h/d.height,u/d.width)}else s.sseDenominator=2/p[5]/d.height;Iu.copy(e.matrixWorld),Iu.premultiply(a.matrixWorldInverse),Iu.premultiply(a.projectionMatrix),l.setFromProjectionMatrix(Iu,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 G.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 G.Matrix4().copy(r).invert(),o=new TP;"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=IP}async parseTile(e,t,n,r,i){let o=t.engineData,a=Cu(r),s=this.fetchOptions,l=this.manager,c=null,d=o.transform,p=this._upRotationMatrix,u=(Fo(e)||n).toLowerCase();switch(u){case"b3dm":{let x=new pm(l);x.workingPath=a,x.fetchOptions=s,x.adjustmentTransform.copy(p),c=x.parse(e);break}case"pnts":{let x=new hm(l);x.workingPath=a,x.fetchOptions=s,c=x.parse(e);break}case"i3dm":{let x=new fm(l);x.workingPath=a,x.fetchOptions=s,x.adjustmentTransform.copy(p),x.ellipsoid.copy(this.ellipsoid),c=x.parse(e);break}case"cmpt":{let x=new f0(l);x.workingPath=a,x.fetchOptions=s,x.adjustmentTransform.copy(p),x.ellipsoid.copy(this.ellipsoid),c=x.parse(e).then(_=>_.scene);break}case"gltf":case"glb":{let x=l.getHandler("path.gltf")||l.getHandler("path.glb")||new Bu.GLTFLoader(l);x.setWithCredentials(s.credentials==="include"),x.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&x.setCrossOrigin("use-credentials");let _=x.resourcePath||x.path||a;!/[\\/]$/.test(_)&&_.length&&(_+="/"),c=x.parseAsync(e,_).then(L=>{L.scene=L.scene||new G.Group;let{scene:w}=L;return w.updateMatrix(),w.matrix.multiply(p).decompose(w.position,w.quaternion,w.scale),L});break}default:c=this.invokeOnePlugin(x=>x.parseToMesh&&x.parseToMesh(e,t,n,r,i));break}let h=await c;if(h===null)throw Error(`TilesRenderer: Content type "${u}" not supported.`);let m,b;h.isObject3D?(m=h,b=null):(m=h.scene,b=h),m.updateMatrix(),m.matrix.premultiply(d),m.matrix.decompose(m.position,m.quaternion,m.scale),await this.invokeAllPlugins(x=>x.processTileModel&&x.processTileModel(m,t)),m.traverse(x=>{x[y0]=x.frustumCulled,x.userData.tile=t}),h0(m,!this.autoDisableRendererCulling);let f=[],g=[],y=[];if(m.traverse(x=>{if(x.geometry&&g.push(x.geometry),x.material){let _=x.material;f.push(x.material);for(let L in _){let w=_[L];w&&w.isTexture&&y.push(w)}}}),i.aborted){for(let x=0,_=y.length;x<_;x++){let L=y[x];L.image instanceof ImageBitmap&&L.image.close(),L.dispose()}return}o.materials=f,o.geometry=g,o.textures=y,o.scene=m,o.metadata=b}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,OP(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,d=1/0;for(let p=0,u=r.length;p<u;p++){let h=i[p],m,b;if(h.isOrthographic){let g=h.pixelSize;m=e.geometricError/g,b=1/0}else{let g=h.sseDenominator;b=o.distanceToPoint(h.position),m=b===0?1/0:e.geometricError/(b*g)}let f=i[p].frustum;o.intersectsFrustum(f)&&(a=!0,s=Math.max(s,m),l=Math.min(l,b)),c=Math.max(c,m),d=Math.min(d,b)}a?(t.inView=!0,t.error=s,t.distanceFromCamera=l):(t.inView=!1,t.error=c,t.distanceFromCamera=d)}dispose(){super.dispose(),this.group.removeFromParent()}};var Q=require("three"),D0=require("three/addons/loaders/GLTFLoader.js"),vm=require("three/addons/postprocessing/Pass.js");var HI=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var v0=new Jr;v0.maxJobs=10,v0.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)?Na(n,r):a?1:-1};var x0=new Q.Vector3;function ll(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,r=new Q.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=Q.MathUtils.clamp(e.getComponent(a,s),n,1);r.setComponent(a,s,l)}return r}function BP(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 Q.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:d}=l,p=2**(8*t.BYTES_PER_ELEMENT-1)-1,u=-p;for(let h=0;h<s;h++)for(let m=0;m<a;m++){let b=m===0?"x":m===1?"y":"z",f=c[b],g=d[b],y=Q.MathUtils.mapLinear(i.getComponent(h,m),f,g,u,p);o.setComponent(h,m,y)}l.getCenter(x0).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(x0),e.scale.x*=.5*(d.x-c.x)/p,e.scale.y*=.5*(d.y-c.y)/p,e.scale.z*=.5*(d.z-c.z)/p,r.position=o,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var xm=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:d}=this._options;e.traverse(p=>{if(p.material&&r){let u=p.material;for(let h in u){let m=u[h];m&&m.isTexture&&m.generateMipmaps&&(m.generateMipmaps=!1,m.minFilter=Q.LinearFilter)}}if(p.geometry){let u=p.geometry,h=u.attributes;if(o){let{uv:m,uv1:b,uv2:f,uv3:g}=h;m&&(h.uv=ll(m,l)),b&&(h.uv1=ll(b,l)),f&&(h.uv2=ll(f,l)),g&&(h.uv3=ll(g,l))}if(n&&!h.normals&&u.computeVertexNormals(),a&&h.normals&&(h.normals=ll(h.normals,c)),s&&BP(p,d),i&&u.index){let m=h.position.count,b=u.index,f=m>65535?Uint32Array:m>255?Uint16Array:Uint8Array;if(!(b.array instanceof f)){let g=new f(u.index.count);g.set(b.array);let y=new Q.BufferAttribute(g,1);u.setIndex(y)}}}})}};function un(e,t,n){return e&&t in e?e[t]:n}function I0(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function kP(e){return/^FLOAT/.test(e)}function pl(e){return/^VEC/.test(e)}function hl(e){return/^MAT/.test(e)}function B0(e,t,n,r=null){return hl(n)||pl(n)?r.fromArray(e,t):e[t]}function bm(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new Q.Vector2;case"VEC3":return new Q.Vector3;case"VEC4":return new Q.Vector4;case"MAT2":return new Q.Matrix2;case"MAT3":return new Q.Matrix3;case"MAT4":return new Q.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function w0(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 dl(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 NP(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]=ku(e,t[n])}else t=ku(e,t);return t}function ku(e,t=null){let n=e.default,r=e.type;if(t||(t=bm(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(hl(r))t.fromArray(n);else if(pl(r))t.fromArray(n);else return n}function VP(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=ku(e,a)),a}function o(a){if(hl(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(pl(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 zP(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 UP(e,t){let{type:n,componentType:r,scale:i,offset:o,normalized:a}=e;if(Array.isArray(t))for(let p=0,u=t.length;p<u;p++)t[p]=s(t[p]);else t=s(t);return t;function s(p){return p=hl(n)?c(p):pl(n)?l(p):d(p),p}function l(p){return p.x=d(p.x),p.y=d(p.y),"z"in p&&(p.z=d(p.z)),"w"in p&&(p.w=d(p.w)),p}function c(p){let u=p.elements;for(let h=0,m=u.length;h<m;h++)u[h]=d(u[h]);return p}function d(p){return a&&(p=zP(r,p)),(a||kP(r))&&(p=p*i+o),p}}function wm(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++)w0(e.type,t[r])||(t[r]=bm(e))}else w0(e.type,t)||(t=bm(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]=wm(r,t[n])}}function jP(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 zu=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=un(t,"scale",1),this.max=un(t,"max",1/0),this.min=un(t,"min",-1/0),this.required=t.required||!1,this.noData=un(t,"noData",null),this.default=un(t,"default",null),this.semantic=un(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=un(n,"offset",this.offset),this.scale=un(n,"scale",this.scale),this.max=un(n,"max",this.max),this.min=un(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=un(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return wm(this,e,t)}resolveDefaultElement(e){return ku(this,e)}resolveDefault(e){return NP(this,e)}resolveNoData(e){return VP(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 I0(this.type)?UP(this,e):e}},_m=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=zu){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}},FP=class extends zu{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},GP=class extends _m{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(FP)}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(hl(o)){let s=r.elements;for(let l=s.length;0<l;)s[0]=a.getComponent(t,0)}else if(pl(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}},HP=class extends zu{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=jP(this.type),this.arrayOffsets=un(n,"arrayOffsets",null),this.stringOffsets=un(n,"stringOffsets",null),this.arrayOffsetType=un(n,"arrayOffsetType","UINT32"),this.stringOffsetType=un(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:r,arrayOffsetType:i}=this,o=new(dl(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(dl(i))(e[r])[n]}else this.array&&(n*=this.count);return n}},WP=class extends _m{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(HP)}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(dl(o,a))(l),d=i.getIndexOffsetFromId(s,t);if(I0(a)||a==="ENUM")return B0(c,(d+n)*i.valueLength,a,r);if(a==="STRING"){let p=d+n,u=0;if(i.stringOffsets!==null){let{stringOffsets:m,stringOffsetType:b}=i,f=new(dl(b))(s[m]);u=f[p+1]-f[p],p=f[p]}let h=new Uint8Array(c.buffer,p,u);r=new TextDecoder().decode(h)}else if(a==="BOOLEAN"){let p=d+n,u=Math.floor(p/8),h=p%8;r=(c[u]>>h&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}},cl=new Q.Box2,_0=class{constructor(){this._renderer=new Q.WebGLRenderer,this._target=new Q.WebGLRenderTarget(1,1),this._texTarget=new Q.WebGLRenderTarget,this._quad=new vm.FullScreenQuad(new Q.ShaderMaterial({blending:Q.CustomBlending,blendDst:Q.ZeroFactor,blendSrc:Q.OneFactor,uniforms:{map:{value:null},pixel:{value:new Q.Vector2}},vertexShader:`
|
|
3674
3723
|
void main() {
|
|
3675
3724
|
|
|
3676
3725
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
@@ -3685,9 +3734,11 @@ ${l.id}`,u=Qm(l),m=i.get(d);m&&(m.node!==c||m.signature!==u)&&(Wu(m),m=void 0),m
|
|
|
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;ns.min.copy(t),ns.max.copy(t),ns.max.x+=1,ns.max.y+=1,r.initRenderTarget(i),r.copyTextureToTexture(e,i.texture,ns,n,0)}},mi=new class{constructor(){let e=null;Object.getOwnPropertyNames(Nb.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new Nb),e[t](...n)))})}},Vb=new $.Vector2,zb=new $.Vector2,Ub=new $.Vector2;function i1(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function Zb(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 Qb(e,t,n,r,i){let[o,a,s]=r,c=i1(e,t);Vb.fromBufferAttribute(c,o),zb.fromBufferAttribute(c,a),Ub.fromBufferAttribute(c,s),i.set(0,0,0).addScaledVector(Vb,n.x).addScaledVector(zb,n.y).addScaledVector(Ub,n.z)}function Jb(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 jb=new $.Vector2,Fb=new $.Vector2,Hb=new $.Vector2,o1=class extends tc{constructor(e,t,n=null){super(e,t,n),this.channels=Zt(n,"channels",[0]),this.index=Zt(n,"index",null),this.texCoord=Zt(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 Kb(e,t*this.valueLength,r,n)}},a1=class extends $d{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(o1)}getData(e,t,n,r={}){let i=this.properties;Jl(i,r);let o=Object.keys(i),a=o.map(s=>r[s]);return this.getPropertyValuesAtTexel(o,e,t,n,a),o.forEach((s,c)=>r[s]=a[c]),r}async getDataAsync(e,t,n,r={}){let i=this.properties;Jl(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,c)=>r[s]=a[c]),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,mi.increaseSizeTo(i.length);let o=this.data,a=this.definition.properties,s=this.properties,c=Zb(r,t);for(let u=0,m=e.length;u<m;u++){let h=e[u];if(!a[h])continue;let f=s[h],b=o[f.index];Qb(r,f.texCoord,n,c,jb),Jb(jb,b.image.width,b.image.height,Fb),Hb.set(u,0),mi.renderPixelToTarget(b,Fb,Hb)}let l=new Uint8Array(e.length*4);if(this._asyncRead)return mi.readDataAsync(l).then(()=>(d.call(this),i));return mi.readData(l),d.call(this),i;function d(){for(let u=0,m=e.length;u<m;u++){let h=e[u],f=s[h],b=f.type;if(i[u]=Yd(f,i[u]),!f)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!a[h]){i[u]=f.resolveDefault(i);continue}let v=f.valueLength*(f.count||1),y=f.channels.map(k=>l[4*u+k]),S=f.componentType,_=new(is(S,b))(v);if(new Uint8Array(_.buffer).set(y),f.array){let k=i[u];for(let T=0,P=k.length;T<P;T++)k[T]=f.readDataFromBuffer(_,T,k[T])}else i[u]=f.readDataFromBuffer(_,0,i[u]);i[u]=f.adjustValueScaleOffset(i[u]),i[u]=f.resolveEnumsToStrings(i[u]),i[u]=f.resolveNoData(i[u])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Wd=class{constructor(e,t,n,r=null,i=null){let{schema:o,propertyTables:a=[],propertyTextures:s=[],propertyAttributes:c=[]}=e,{enums:l,classes:d}=o,u=a.map(f=>new r1(f,d,l,n)),m=[],h=[];r&&(r.propertyTextures&&(m=r.propertyTextures.map(f=>new a1(s[f],d,l,t))),r.propertyAttributes&&(h=r.propertyAttributes.map(f=>new t1(c[f],d,l)))),this.schema=o,this.tableAccessors=u,this.textureAccessors=m,this.attributeAccessors=h,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())}},rs="EXT_structural_metadata";function s1(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 l1(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:c}=i[o];r[a]===null&&(r[a]=e.getDependency("bufferView",a)),r[s]===null&&(r[s]=e.getDependency("bufferView",s)),r[c]===null&&(r[c]=e.getDependency("bufferView",c))}}),Promise.all(r)}var ey=class{constructor(e){this.parser=e,this.name=rs}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(rs))return;let r=null,i=t.json.extensions[rs];if(i.schemaUri){let{manager:c,path:l,requestHeader:d,crossOrigin:u}=t.options,m=new URL(i.schemaUri,l).toString(),h=new $.FileLoader(c);h.setCrossOrigin(u),h.setResponseType("json"),h.setRequestHeader(d),r=h.loadAsync(m).then(f=>{i={...i,schema:f}})}let[o,a]=await Promise.all([s1(t,i.propertyTextures),l1(t,i.propertyTables),r]),s=new Wd(i,o,a);e.userData.structuralMetadata=s,e.traverse(c=>{if(t.associations.has(c)){let{meshes:l,primitives:d}=t.associations.get(c),u=t.json.meshes[l]?.primitives[d];if(u&&u.extensions&&u.extensions[rs]){let m=u.extensions[rs];c.userData.structuralMetadata=new Wd(i,o,a,m,c)}else c.userData.structuralMetadata=s}})}},Gb=new $.Vector2,Wb=new $.Vector2,Xb=new $.Vector2;function c1(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var ty=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;mi.increaseSizeTo(a);let s=Zb(n,e),c=s[c1(t)];for(let u=0,m=i.length;u<m;u++){let h=i[u],f="nullFeatureId"in h?h.nullFeatureId:null;if("texture"in h){let b=r[h.texture.index];Qb(n,h.texture.texCoord,t,s,Gb),Jb(Gb,b.image.width,b.image.height,Wb),Xb.set(u,0),mi.renderPixelToTarget(r[h.texture.index],Wb,Xb)}else if("attribute"in h){let b=n.getAttribute(`_feature_id_${h.attribute}`).getX(c);b!==f&&(o[u]=b)}else{let b=c;b!==f&&(o[u]=b)}}let l=new Uint8Array(a*4);if(this._asyncRead)return mi.readDataAsync(l).then(()=>(d(),o));return mi.readData(l),d(),o;function d(){let u=new Uint32Array(1);for(let m=0,h=i.length;m<h;m++){let f=i[m],b="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let{channels:v}=f.texture,y=v.map(_=>l[4*m+_]);new Uint8Array(u.buffer).set(y);let S=u[0];S!==b&&(o[m]=S)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},ec="EXT_mesh_features";function qb(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[ec]&&n(r,a.extensions[ec])}})}var ny=class{constructor(e){this.parser=e,this.name=ec}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(ec))return;let r=t.json.textures?.length||0,i=Array(r).fill(null);qb(e,t,(a,{featureIds:s})=>{s.forEach(c=>{if(c.texture&&i[c.texture.index]===null){let l=c.texture.index;i[l]=t.loadTexture(l)}})});let o=await Promise.all(i);qb(e,t,(a,s)=>{a.userData.meshFeatures=new ty(a.geometry,o,s)})}},ry=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])}}},Kd=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 Yb.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 ry),this.metadata&&(t.register(()=>new ey),t.register(()=>new ny)),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:NE}=$.MathUtils;var VE=new Xd.FullScreenQuad(new $.MeshBasicMaterial),u1=new $.DataTexture(new Uint8Array([255,255,255,255]),1,1);u1.needsUpdate=!0;var d1=0,p1=1,h1=2,m1=3,f1=4,g1=5,b1=6,y1=7,v1=8,x1=9,_1=10,w1=11,zE=Object.freeze({NONE:d1,SCREEN_ERROR:p1,GEOMETRIC_ERROR:h1,DISTANCE:m1,DEPTH:f1,RELATIVE_DEPTH:g1,IS_LEAF:b1,RANDOM_COLOR:y1,RANDOM_NODE_COLOR:v1,CUSTOM_COLOR:x1,LOAD_ORDER:_1,INDEXED_COLOR:w1});var UE=Math.PI/4,jE=3/5;var hi={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var FE=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 HE={[hi.NONE]:16777215,[hi.NOT_READY]:7829367,[hi.NO_FIT]:2250239,[hi.DEPTH]:4473924,[hi.OCCUPANCY]:65535,[hi.SPACING]:16776960,[hi.ANGLE]:16711680,[hi.FACING]:16711935};var GE=Math.PI/180;var WE=Wi*Math.PI*2;var XE=Wi*Math.PI*2;var sy=require("three/examples/jsm/loaders/DRACOLoader.js"),ly=require("three/examples/jsm/loaders/KTX2Loader.js"),cy=require("three/examples/jsm/libs/meshopt_decoder.module.js"),In=require("three");var ss=require("three");function iy(e){return!!e&&!e.isInterleavedBufferAttribute}function oy(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,ss.MathUtils.clamp(e.getComponent(i,o),n,r));return t}function S1(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 nc=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;iy(i)&&!(i.array instanceof Int16Array)&&(r.attributes.normal=oy(i,new ss.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];!iy(a)||a.array instanceof Uint16Array||!S1(a)||(r.attributes[o]=oy(a,new ss.BufferAttribute(new Uint16Array(a.count*a.itemSize),a.itemSize,!0),0,1))}})}};var ls=require("react/jsx-runtime"),M1=0,ay=4,C1=6,T1=12,P1=4;function E1(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 Zd({url:e,rotation:t=[0,0,0],errorTarget:n=64,cacheSize:r=800,memoryBudgetMB:i=800,decoderConfig:o,objectBindings:a,itemMaterials:s,sceneConfig:c,selectedItem:l,panelHoveredItem:d,highlightOnHover:u=!0,onItemClick:m,onItemHover:h,onItemDoubleClick:f,onItemContextMenu:b,onObjectCatalog:v,onTilesetBounds:y,onModelLoaded:S,onLoadError:_,nodeRefsOut:k,onNodeRefsChange:T,materialRefsOut:P,explodeFactor:B=0,suspendBindingTransforms:D=!1}){let{camera:O,gl:E,invalidate:g}=(0,rc.useThree)(),M=(0,Ce.useRef)(null),[A,N]=(0,Ce.useState)(null),z=(0,Ce.useRef)({onItemClick:m,onItemHover:h,onItemDoubleClick:f,onObjectCatalog:v,onTilesetBounds:y,onModelLoaded:S,onLoadError:_,onNodeRefsChange:T});z.current={onItemClick:m,onItemHover:h,onItemDoubleClick:f,onObjectCatalog:v,onTilesetBounds:y,onModelLoaded:S,onLoadError:_,onNodeRefsChange:T};let U=(0,Ce.useRef)(!0),[q,x]=(0,Ce.useState)(null),R=(0,Ce.useRef)(null);R.current=q;let X=(0,Ce.useRef)([]),Y=(0,Ce.useRef)(!1);(0,Ce.useEffect)(()=>{let Q=new Ol;return x(Q),()=>Q.dispose()},[e]);let K=(0,Ce.useRef)(null),oe=(0,Ce.useRef)(0),ae=(0,Ce.useRef)(!1),ne=i*1024*1024,Ie=(0,Ce.useRef)(!1),me=(0,Ce.useRef)(yd),tt=(0,Ce.useRef)(null),dt=(0,Ce.useRef)(null),pe=(0,Ce.useRef)(null);(0,Ce.useEffect)(()=>()=>{pe.current!==null&&clearTimeout(pe.current)},[]);let _e=o?.dracoDecoderPath??ld,je=o?.ktx2TranscoderPath??cd,Bt=o?.meshopt??!0,[te,an]=(0,Ce.useState)(null);(0,Ce.useEffect)(()=>{ae.current=!1,Ie.current=!1;let Q=new Hd(e);Q.loadAncestors=!0;let ve=new Vl;ve.priorityCallback=Q.downloadQueue.priorityCallback,ve.maxJobsPerOrigin=T1;let ge=new Tr;ge.priorityCallback=Q.parseQueue.priorityCallback,ge.maxJobs=C1;let $e=new Tr;$e.priorityCallback=Q.processNodeQueue.priorityCallback,$e.maxJobs=Q.processNodeQueue.maxJobs;let Xe=new Wa;Xe.unloadPriorityCallback=Q.lruCache.unloadPriorityCallback,Q.downloadQueue=ve,Q.parseQueue=ge,Q.processNodeQueue=$e,Q.lruCache=Xe;let De=_e?new sy.DRACOLoader().setDecoderPath(_e).setWorkerLimit(P1):null,Je=je?new ly.KTX2Loader().setTranscoderPath(je).detectSupport(E):null;return Q.registerPlugin(new Kd({dracoLoader:De,ktxLoader:Je,meshoptDecoder:Bt?cy.MeshoptDecoder:null,autoDispose:!1})),Q.registerPlugin(new qd({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),Q.registerPlugin(new nc),an(Q),window.__riTiles=Q,()=>{Q.forEachLoadedModel(ue=>Ca(ue)),Q.dispose(),De?.dispose(),Je?.dispose(),an(ue=>ue===Q?null:ue)}},[_e,E,je,Bt,e]),(0,Ce.useEffect)(()=>{te&&(me.current=yd,tt.current=null,te.errorTarget=n,te.lruCache.maxSize=r,te.lruCache.minSize=Math.max(1,Math.floor(r*.75)),te.lruCache.maxBytesSize=ne,te.lruCache.minBytesSize=ne*.75,g())},[r,n,g,ne,te]);let nt=(0,Ce.useMemo)(()=>{let Q=a??{};return{objectBindings:Q,keyByModelObject:Hg(Q),itemMaterials:s,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:l??null,hoveredKey:Gg(A,d),highlightOnHover:u,suspendTransforms:D,placementFrame:te?.group.matrixWorld,invalidate:g}},[A,u,g,s,a,d,c,l,D,te]),Qe=(0,Ce.useCallback)(()=>{if(!te)return;let Q=kt.current,ve=Y.current?R.current?.nodesByBinding(Q)??{}:{},ge={};te.group.traverse(Je=>{if(!Je.isMesh)return;let ue=gd(Je);if(!ue)return;let Be=Q.keyByModelObject[ue]??ue;if(!Q.objectBindings[Be])return;ve[Be]||(ve[Be]=Je);let Fe=Je.material;Fe&&(ge[Be]=Fe)});let $e=k?.current??{},Xe=Object.keys($e),De=Xe.length!==Object.keys(ve).length||Xe.some(Je=>$e[Je]!==ve[Je]);k&&(k.current=ve),P&&(P.current=ge),(De||!k)&&z.current.onNodeRefsChange?.()},[P,k,te]),ze=(0,Ce.useCallback)(Q=>Rl(Q,nt),[nt]),Jt=(0,Ce.useCallback)(Q=>Xg(Q,nt),[nt]),Tt=(0,Ce.useRef)(Jt);Tt.current=Jt;let kt=(0,Ce.useRef)(nt);kt.current=nt;let pt=(0,Ce.useCallback)(()=>{let Q=K.current,ve=oe.current;return!Q||ve<=0?kt.current:{...kt.current,explode:{factor:ve,centre:Q.centre,radius:Q.radius}}},[]);(0,Ce.useEffect)(()=>{te&&(Jt(te.group),U.current=!0,te.forEachLoadedModel(Q=>{Jt(Q),Vo(Q,pt())}),g())},[Jt,g,pt,te]),(0,Ce.useEffect)(()=>{let Q=E1(e);if(!Q)return;let ve=!1;return fetch(Q).then(ge=>ge.ok?ge.json():null).then(ge=>{ve||!ge?.objects||(X.current=ge.objects,Y.current=ge.bindingFrame==="gltf-identity-v2",Y.current&&R.current?.setCatalog(ge.objects),U.current=!0,z.current.onObjectCatalog?.(ge.objects),g())}).catch(()=>{}),()=>{ve=!0}},[e,g,q]),(0,Ce.useEffect)(()=>{if(!te)return;let Q=!1,ve=()=>g(),ge=ue=>{ue.scene&&(ue.scene.traverse(Be=>{let Fe=Be.material;for(let Vt of Array.isArray(Fe)?Fe:Fe?[Fe]:[])Vt.transparent&&Vt.side===In.DoubleSide&&(Vt.forceSinglePass=!0)}),Tt.current(ue.scene),Vo(ue.scene,pt()),js(ue.scene)),U.current=!0,Q||(Q=!0,z.current.onModelLoaded?.(te.group)),g()},$e=ue=>{z.current.onLoadError?.(ue.error)},Xe=ue=>{ue.scene&&(bd(ue.scene),Ca(ue.scene)),U.current=!0};te.setCamera(O),te.setResolutionFromRenderer(O,E),te.addEventListener("needs-update",ve),te.addEventListener("load-model",ge),te.addEventListener("load-error",$e),te.addEventListener("dispose-model",Xe);let De=()=>{U.current=!0,g()};te.addEventListener("tile-visibility-change",De);let Je=()=>{let ue=te.root;ue&&!ue.content?.uri&&ue.refine==="REPLACE"&&(ue.refine="ADD",g())};return te.addEventListener("load-root-tileset",Je),g(),()=>{te.removeEventListener("needs-update",ve),te.removeEventListener("load-model",ge),te.removeEventListener("load-error",$e),te.removeEventListener("dispose-model",Xe),te.removeEventListener("tile-visibility-change",De),te.removeEventListener("load-root-tileset",Je),bd(te.group),te.deleteCamera(O),k&&(k.current={}),P&&(P.current={})}},[O,E,g,P,k,pt,te]);let de=rl(Q=>ze(Q)?.binding??null,b),Pe=(0,Ce.useCallback)(Q=>{if(de.consumeClick())return;let ve=ze(Q.object);ve&&(Q.stopPropagation(),z.current.onItemClick?.(ve.binding))},[ze,de,m]),Xt=(0,Ce.useCallback)(Q=>{let ve=ze(Q.object);if(!ve)return;z.current.onItemDoubleClick?.(ve.binding,Oo(Q))&&Q.stopPropagation()},[ze]),lt=(0,Ce.useCallback)(Q=>{let ve=ze(Q.object),ge=ve?.key??null;ge!==M.current&&(M.current=ge,N(ge),z.current.onItemHover?.(ve?.binding??null))},[ze]),Nt=(0,Ce.useCallback)(()=>{M.current!==null&&(M.current=null,N(null),z.current.onItemHover?.(null))},[]);return(0,Ce.useEffect)(()=>{g()},[g,te]),(0,rc.useFrame)((Q,ve)=>{if(!te)return;if(te.setResolutionFromRenderer(O,E),Y.current&&q){let qt=q.sync(pt(),l,D);q.updateBounds(te.root),D&&te.forEachLoadedModel(vr=>Vo(vr,qt))}if(te.update(),!ae.current){let qt=new In.Box3;if(te.getBoundingBox(qt)){ae.current=!0,te.group.updateMatrixWorld(),qt.applyMatrix4(te.group.matrixWorld);let vr=qt.getBoundingSphere(new In.Sphere);K.current={centre:vr.center.clone(),radius:qt.getSize(new In.Vector3).length()*.5},z.current.onTilesetBounds?.(qt),g()}}U.current&&(U.current=!1,Qe());let ge=Math.min(Math.max(B,0),1),$e=oe.current;Math.abs($e-ge)>1e-4?(oe.current=In.MathUtils.lerp($e,ge,1-Math.exp(-6*ve)),Vo(te.group,pt()),g()):$e!==ge&&(oe.current=ge,Vo(te.group,pt()),g());let Xe=te,De=te.lruCache,Je=De.isFull(),ue=me.current,Be=ue.loosened&&tt.current?tt.current:{bytes:De.maxBytesSize,items:De.maxSize},Fe=0;for(let qt of De.usedSet??[])Fe+=De.bytesMap?.get(qt)??0;let Vt=!1,kn=te;for(let qt of kn.usedSet??[]){let vr=qt.internal?.loadingState??ay;if(qt.traversal?.used&&qt.internal?.hasContent&&vr>=M1&&vr<ay){Vt=!0;break}}let At=dt.current??(dt.current={world:new In.Matrix4,projection:new In.Matrix4}),hn=!At.world.equals(O.matrixWorld)||!At.projection.equals(O.projectionMatrix);hn&&(At.world.copy(O.matrixWorld),At.projection.copy(O.projectionMatrix));let Ar={full:Je,wanting:Vt,moved:hn,usage:Math.max(Fe/Math.max(1,Be.bytes),(De.usedSet?.size??0)/Math.max(1,Be.items)),now:performance.now()},Nn=tb(ue,Ar);Nn!==ue&&(Nn.loosened&&(!ue.loosened||Nn.raisedAt!==ue.raisedAt)?(ue.loosened||(tt.current=Be),De.maxBytesSize=Math.max(Be.bytes,De.cachedBytes??0)*vd,De.maxSize=Math.ceil(Math.max(Be.items,De.itemSet?.size??0)*vd)):!Nn.loosened&&ue.loosened&&tt.current&&(De.maxBytesSize=tt.current.bytes,De.maxSize=tt.current.items,tt.current=null),me.current=Nn,te.errorTarget=n*Nn.factor,g()),!Ie.current&&Je&&Ar.wanting&&Nn.factor>=ja&&(Ie.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 _i=nb(Nn,Ar);_i===0?g():_i!==null&&pe.current===null&&(pe.current=setTimeout(()=>{pe.current=null,g()},_i)),((Xe.stats?.downloading??0)>0||(Xe.stats?.parsing??0)>0||Xe.loadProgress!==void 0&&Xe.loadProgress<1&&!Je)&&g()}),te?(0,ls.jsxs)("group",{rotation:t,children:[q?(0,ls.jsx)("primitive",{object:q.group}):null,(0,ls.jsx)("primitive",{object:te.group,onClick:Pe,onDoubleClick:Xt,onPointerDown:b?de.onPointerDown:void 0,onPointerMove:lt,onPointerOut:Nt})]}):null}var ic=require("three");var A1=new ic.Matrix4().makeRotationX(Math.PI/2);function uy(e){e.updateMatrixWorld(!0);let t=new ic.Matrix4().copy(e.matrixWorld).invert().premultiply(A1),n=new ic.Matrix4,r=[];for(let[i,o]of Object.entries(si(e).nodesById)){let a=o;if(!a.isMesh||!a.geometry||!o.name)continue;let s=a.geometry;s.boundingBox||s.computeBoundingBox();let c=s.boundingBox.clone().applyMatrix4(n.multiplyMatrices(t,o.matrixWorld)),l=s.index?s.index.count:s.getAttribute("position")?.count??0;r.push({name:i,triangles:Math.floor(l/3),minimum:c.min.toArray(),maximum:c.max.toArray()})}return r.sort((i,o)=>i.name.localeCompare(o.name))}var Oe=require("react"),Qd=require("@react-three/drei"),qi=require("@react-three/fiber"),Er=require("three");var un=require("react/jsx-runtime"),R1=.02;function dy(e,t){let n=(0,Oe.useRef)(null),r=(0,qi.useThree)(l=>l.scene),i=(0,Oe.useRef)(null),o=(0,Oe.useMemo)(()=>new Er.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),a=(0,Oe.useMemo)(()=>new Er.Vector3,[]),s=(0,Oe.useMemo)(()=>new Er.Vector3,[]),c=(0,Oe.useMemo)(()=>new Er.Vector3,[]);return(0,Oe.useEffect)(()=>{i.current=null},[e.anchorNodeName]),(0,qi.useFrame)(({camera:l})=>{let d=n.current,u=d?.parent;if(!d||!u)return;let m=i.current;if(e.anchorNodeName&&(!m||!m.parent)&&(m=Vr(r,e.anchorNodeName),i.current=m),m?(m.updateWorldMatrix(!0,!1),a.copy(o).applyMatrix4(m.matrixWorld)):(a.copy(o),u.localToWorld(a)),t){let h=t.current.get(e.id);h||(h=new Er.Vector3,t.current.set(e.id,h)),h.copy(a)}c.copy(l.position).sub(a),c.lengthSq()>0?(c.normalize(),s.copy(a).addScaledVector(c,R1)):s.copy(a),u.worldToLocal(s),d.position.copy(s)}),n}function L1({annotation:e,occluders:t,worldPositionsRef:n,onClick:r,onHover:i,showAnnotationOnHover:o}){let[a,s]=(0,Oe.useState)(!1),c=dy(e,n),[l,d]=(0,Oe.useState)(!1),[u,m]=(0,Oe.useState)(1),h=(0,Oe.useRef)(null),f=(0,Oe.useRef)(null),b=(0,Oe.useRef)(null);(0,Oe.useEffect)(()=>()=>{h.current&&(clearTimeout(h.current),h.current=null),b.current&&(clearTimeout(b.current),b.current=null)},[]);let v=T=>{T.stopPropagation(),T.preventDefault(),h.current&&(clearTimeout(h.current),h.current=null),h.current=window.setTimeout(()=>{r?.(e),h.current=null},10)},y=T=>{T.stopPropagation(),d(!0),m(100),b.current&&(clearTimeout(b.current),b.current=null),i?.(e),o&&r?.(e)},S=T=>{T.stopPropagation(),d(!1),m(1),b.current&&clearTimeout(b.current),b.current=window.setTimeout(()=>{i?.(null),o&&i?.(null),b.current=null},50)},_=T=>{T.stopPropagation();let P=T.currentTarget;P.dataset.pointerX=String(T.clientX),P.dataset.pointerY=String(T.clientY)},k=T=>{T.stopPropagation();let P=T.currentTarget,B=parseFloat(P.dataset.pointerX||"0"),D=parseFloat(P.dataset.pointerY||"0"),O=T.clientX-B,E=T.clientY-D;Math.sqrt(O*O+E*E)<10&&v(T)};return(0,un.jsx)("group",{ref:c,children:(0,un.jsx)(Qd.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,un.jsx)("div",{ref:f,className:`ri-annotationMarker ${l?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:a?"none":"flex"},onPointerDown:_,onPointerUp:k,onPointerEnter:y,onPointerLeave:S,onDoubleClick:T=>{T.stopPropagation(),r?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:(0,un.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function O1({annotation:e,occluders:t,popupRef:n,onClose:r,hideCloseButton:i=!1}){let[o,a]=(0,Oe.useState)(!1),s=dy(e),c=(0,un.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:o?"none":"block"},onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[(0,un.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,un.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!i&&(0,un.jsx)("button",{onClick:l=>{l.stopPropagation(),r?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&(0,un.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return(0,un.jsx)("group",{ref:s,children:(0,un.jsx)(Qd.Html,{occlude:t,onOcclude:a,pointerEvents:o?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:o?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function Jd({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:r,canvasRootRef:i,worldPositionsRef:o,modelLoaded:a,onAnnotationClick:s,onAnnotationHover:c,onCloseAnnotation:l,hideCloseButton:d=!1,showAnnotationOnHover:u=!1}){let m=(0,qi.useThree)(z=>z.invalidate),h=(0,qi.useThree)(z=>z.scene),[f,b]=(0,Oe.useState)(null),[v,y]=(0,Oe.useState)(!1),S=(0,Oe.useRef)(null),_=(0,Oe.useRef)(null),k=(0,Oe.useRef)(null),T=(0,Oe.useMemo)(()=>{let z=[];return h.traverse(U=>{let q=U;q.isMesh&&!q.isSkinnedMesh&&z.push({current:U})}),z},[h,e,a]),P=(0,Oe.useCallback)(()=>{m();let z=()=>{m(),_.current=window.requestAnimationFrame(()=>{m(),_.current=null})};_.current=window.requestAnimationFrame(z)},[m]);(0,Oe.useEffect)(()=>{P()},[e,P]),(0,Oe.useEffect)(()=>{P()},[n,P]),(0,Oe.useEffect)(()=>()=>{_.current!==null&&window.cancelAnimationFrame(_.current),k.current&&clearTimeout(k.current)},[]);let B=v?f:n||f,D=(0,Oe.useMemo)(()=>B?e.find(z=>z.id===B.id)??B:null,[B,e]),O=(0,Oe.useCallback)(z=>{if(v&&f?.id===z.id){y(!1),b(null),l?.();return}y(!0),b(z),s?.(z)},[v,f,s,l]),E=(0,Oe.useCallback)(z=>{c?.(z),u&&!v&&(k.current&&(clearTimeout(k.current),k.current=null),z?b(z):k.current=window.setTimeout(()=>{b(null),l?.(),k.current=null},100))},[v,c,u,l]),g=(0,Oe.useCallback)(()=>{y(!1),b(null),l?.()},[l]),M=(0,Oe.useCallback)(z=>{let U=z.target;if(U.closest?.(".ri-annotationMarker")||U.closest?.(".ri-viewAnnotationPopup")||U.closest?.(".annotation-html-wrapper"))return;let q=i.current;q&&q.contains(U)&&(y(!1),b(null),l?.())},[i,l]),A=(0,Oe.useCallback)(z=>{z.key==="Escape"&&v&&(y(!1),b(null),l?.())},[v,l]);(0,Oe.useEffect)(()=>{let z=i.current;return z&&(z.addEventListener("click",M),z.addEventListener("pointerdown",M)),document.addEventListener("keydown",A),()=>{z&&(z.removeEventListener("click",M),z.removeEventListener("pointerdown",M)),document.removeEventListener("keydown",A)}},[i,M,A]);let N=(0,Oe.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(z=>z*Math.PI/180),[t?.model.rotation]);return(0,Oe.useEffect)(()=>{m()},[m,N]),(0,qi.useFrame)((z,U)=>{if(!S.current)return;S.current.rotation.x=Er.MathUtils.lerp(S.current.rotation.x,N[0],1-Math.exp(-5*U)),S.current.rotation.y=Er.MathUtils.lerp(S.current.rotation.y,N[1],1-Math.exp(-5*U)),S.current.rotation.z=Er.MathUtils.lerp(S.current.rotation.z,N[2],1-Math.exp(-5*U));let{rotation:q}=S.current;Math.abs(q.x-N[0])+Math.abs(q.y-N[1])+Math.abs(q.z-N[2])>1e-4&&m()}),(0,un.jsxs)("group",{ref:S,children:[e.map(z=>{let U=`${z.worldPosition.join(",")}-${z.title}-${z.id}`;return(0,un.jsx)(L1,{annotation:z,occluders:T,worldPositionsRef:o,onClick:O,onHover:E,showAnnotationOnHover:u},U)}),D?(0,un.jsx)(O1,{annotation:D,occluders:T,popupRef:r,onClose:g,hideCloseButton:d},`popup-${D.id}`):null]})}var Gr=require("react"),gr=require("@react-three/drei"),It=require("three");var Me=require("react/jsx-runtime"),Yi="#22d3ee",D1="#facc15";function Go(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function py(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function fi({position:e,children:t}){return(0,Me.jsx)(gr.Html,{center:!0,position:e,zIndexRange:[20,0],style:{pointerEvents:"none"},children:(0,Me.jsx)("div",{className:"ri-measureLabel",children:t})})}function hy({positions:e,triangles:t}){let n=(0,Gr.useMemo)(()=>{let r=new It.Vector3(...e[0]),i=new It.BufferGeometry;return i.setAttribute("position",new It.Float32BufferAttribute(e.flatMap(o=>new It.Vector3(...o).sub(r).toArray()),3)),i.setIndex(t.flat()),i},[e,t]);return(0,Gr.useEffect)(()=>()=>n.dispose(),[n]),(0,Me.jsx)("mesh",{position:e[0],geometry:n,raycast:()=>{},renderOrder:100,children:(0,Me.jsx)("meshBasicMaterial",{color:Yi,side:It.DoubleSide,transparent:!0,opacity:.18,depthWrite:!1})})}var I1=[[0,1,2]];function B1({positions:e}){let t=sl(e);if(t===null)return null;let n=new It.Vector3(...e[1]),r=new It.Vector3(...e[0]).sub(n),i=new It.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 It.Vector3(0,1,0):new It.Vector3(1,0,0)),a.normalize();let s=t*Math.PI/180,c=Array.from({length:33},(d,u)=>r.clone().applyAxisAngle(a,s*u/32).multiplyScalar(o).add(n).toArray()),l=r.clone().applyAxisAngle(a,s/2).multiplyScalar(o*1.4).add(n).toArray();return(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsx)(gr.Line,{points:c,color:Yi,lineWidth:2}),(0,Me.jsxs)(fi,{position:l,children:[t.toFixed(2),"\xB0"]})]})}function k1({box:e,unit:t}){let n=(0,Gr.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,Gr.useMemo)(()=>{let[s,c,l]=e.size,d=new It.BoxGeometry(s||1e-4,c||1e-4,l||1e-4),u=new It.EdgesGeometry(d);return d.dispose(),u},[e.size]);(0,Gr.useEffect)(()=>()=>{r.dispose()},[r]);let[i,o,a]=e.size;return(0,Me.jsxs)("group",{position:n,children:[(0,Me.jsx)("lineSegments",{geometry:r,children:(0,Me.jsx)("lineBasicMaterial",{color:D1})}),(0,Me.jsxs)(fi,{position:[0,-o/2,a/2],children:["W ",Go(i,t)]}),(0,Me.jsxs)(fi,{position:[-i/2,0,a/2],children:["H ",Go(o,t)]}),(0,Me.jsxs)(fi,{position:[i/2,-o/2,0],children:["D ",Go(a,t)]})]})}function ep({points:e,unit:t,box:n,showDimensions:r,tool:i="distance",areaClosed:o=!1,snapPreview:a}){let s=(0,Gr.useMemo)(()=>e.map(d=>d.position),[e]),c=(0,Gr.useMemo)(()=>i==="area"&&o?ll(s):null,[i,o,s]),l=i==="pointToPlane"&&e.length===2?Nf(e[0],e[1].position):null;return(0,Me.jsxs)("group",{children:[e.map(d=>(0,Me.jsx)(gr.Html,{center:!0,position:d.position,zIndexRange:[15,0],style:{pointerEvents:"none"},children:(0,Me.jsx)("div",{className:`ri-measureDot${d.snapped?" ri-measureDot--snapped":""}`})},d.id)),i==="distance"&&e.slice(1).map((d,u)=>{let m=e[u].position,h=d.position,f=new It.Vector3(...m).distanceTo(new It.Vector3(...h));return(0,Me.jsxs)("group",{children:[(0,Me.jsx)(gr.Line,{points:[m,h],color:Yi,lineWidth:2}),(0,Me.jsx)(fi,{position:py(m,h),children:Go(f,t)})]},`${e[u].id}-${d.id}`)}),(i==="angle"||i==="area")&&s.length>=2&&(0,Me.jsx)(gr.Line,{points:o?[...s,s[0]]:s,color:Yi,lineWidth:2}),i==="angle"&&(0,Me.jsx)(B1,{positions:s}),c&&!("error"in c)&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsx)(hy,{positions:s,triangles:c.triangles}),(0,Me.jsx)(fi,{position:c.center,children:Go(c.area,t?`${t}\xB2`:"")})]}),i==="pointToPlane"&&e[0]?.faceVertices&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsx)(hy,{positions:e[0].faceVertices,triangles:I1}),(0,Me.jsx)(gr.Line,{points:[...e[0].faceVertices,e[0].faceVertices[0]],color:Yi,lineWidth:1}),e.length===1&&(0,Me.jsx)(fi,{position:e[0].position,children:"Reference plane"})]}),l&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsx)(gr.Line,{points:[e[1].position,l.projection],color:Yi,lineWidth:2}),(0,Me.jsx)(gr.Line,{points:[e[0].position,l.projection],color:Yi,lineWidth:1,dashed:!0}),(0,Me.jsx)(fi,{position:py(e[1].position,l.projection),children:Go(l.distance,t)})]}),a&&(0,Me.jsxs)(gr.Html,{center:!0,position:a.position,zIndexRange:[20,0],style:{pointerEvents:"none"},children:[(0,Me.jsx)("div",{className:"ri-measureSnapTarget"}),(0,Me.jsx)("div",{className:"ri-measureSnapLabel",children:a.snapped==="vertex"?"Vertex":"Edge"})]}),r&&n?(0,Me.jsx)(k1,{box:n,unit:t}):null]})}var gi=require("lucide-react"),oc=require("react"),ot=require("react/jsx-runtime");function tp(e){let t=(0,oc.useRef)(null);(0,oc.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,ot.jsxs)("div",{ref:t,className:"ri-measureTools",style:{top:e.top},children:[(0,ot.jsxs)("div",{className:"ri-measureToolbarRow",children:[(0,ot.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,ot.jsx)(gi.PencilRuler,{size:16})}),(0,ot.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,ot.jsx)(gi.RulerDimensionLine,{size:16})}),e.active&&(0,ot.jsxs)(ot.Fragment,{children:[(0,ot.jsxs)("select",{className:"ri-measureSelect","aria-label":"Measurement tool",value:n,disabled:e.disabled,onChange:a=>e.onTool(a.target.value),children:[(0,ot.jsx)("option",{value:"distance",children:"Distance"}),(0,ot.jsx)("option",{value:"angle",children:"Angle"}),(0,ot.jsx)("option",{value:"area",children:"Area"}),(0,ot.jsx)("option",{value:"pointToPlane",children:"Point to plane"})]}),(0,ot.jsxs)("select",{className:"ri-measureSelect","aria-label":"Measurement snapping",value:e.snap,disabled:e.disabled,onChange:a=>e.onSnap(a.target.value),children:[(0,ot.jsx)("option",{value:"none",children:"No snapping"}),(0,ot.jsx)("option",{value:"auto",children:"Snap: auto"}),(0,ot.jsx)("option",{value:"vertex",children:"Snap: vertex"}),(0,ot.jsx)("option",{value:"edge",children:"Snap: edge"})]})]}),r>0&&(0,ot.jsxs)(ot.Fragment,{children:[(0,ot.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onUndo,disabled:e.disabled,title:"Undo measurement point",children:(0,ot.jsx)(gi.Undo2,{size:16})}),(0,ot.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onClear,disabled:e.disabled,title:"Clear measurements",children:(0,ot.jsx)(gi.Eraser,{size:16})})]}),e.active&&n==="area"&&!i&&(0,ot.jsx)("button",{type:"button",className:"ri-measureFinish",onClick:e.onFinishArea,disabled:e.disabled||r<3,children:"Finish area"})]}),e.active&&(0,ot.jsx)("div",{className:`ri-measureHint${e.error?" ri-measureHint--error":""}`,role:"status",children:e.error??o})]})}var Ye=require("react"),$i=require("@react-three/xr"),by=require("@react-three/fiber"),cs=require("three"),br=require("react/jsx-runtime"),N1=1,my=1,V1=.1,z1=10;function U1(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:N1/s,offset:[-o,-e.min[1],-a]}}function fy(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function gy(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var j1=(0,Ye.forwardRef)(function({box:t,scaleMode:n,children:r,onARStateChange:i},o){let a=(0,Ye.useRef)(null),s=(0,Ye.useRef)(null),c=(0,Ye.useRef)(null),l=(0,$i.useXR)(U=>U.session!=null),d=(0,$i.useXR)(U=>U.mode==="immersive-ar"),u=(0,Ye.useMemo)(()=>t?U1(t,n):null,[t,n]),m=(0,Ye.useRef)(new cs.Vector3(0,0,-my)),h=(0,Ye.useRef)(1),f=(0,Ye.useRef)(0),b=(0,Ye.useRef)(!0),v=(0,Ye.useRef)(!1),y=(0,Ye.useMemo)(()=>new cs.Matrix4,[]),S=(0,Ye.useRef)(new cs.Vector3),_=(0,Ye.useRef)(!1),k=(0,Ye.useRef)(null),T=(0,Ye.useRef)(!1),P=(0,Ye.useRef)(0),B=(0,Ye.useRef)(0),D=(0,Ye.useRef)(1),O=(0,Ye.useRef)(0),E=(0,Ye.useCallback)(()=>{if(!i||!d)return;let U={canPlace:_.current,isPlacementMode:b.current,isModelPlaced:v.current},q=k.current;q&&q.canPlace===U.canPlace&&q.isPlacementMode===U.isPlacementMode&&q.isModelPlaced===U.isModelPlaced||(k.current=U,i(U))},[d,i]),g=(0,Ye.useCallback)(()=>!d||!_.current?!1:(m.current.copy(S.current),v.current=!0,b.current=!1,E(),!0),[E,d]),M=(0,Ye.useCallback)(()=>{d&&(b.current=!0,E())},[E,d]),A=(0,Ye.useCallback)(()=>{let U=g();return!U&&d&&(b.current=!1,E()),U},[E,d,g]),N=(0,Ye.useCallback)(()=>{d&&(b.current=!1,E())},[E,d]);(0,Ye.useImperativeHandle)(o,()=>({placeCurrent:g,startPlacementMode:M,finishPlacementMode:A,cancelPlacementMode:N}),[N,A,g,M]),(0,Ye.useEffect)(()=>{if(!l){m.current.set(0,0,-my),h.current=1,f.current=0,_.current=!1,T.current=!1,b.current=!0,v.current=!1,k.current=null;return}d&&(_.current=!1,T.current=!1,b.current=!0,v.current=!1,k.current=null,E())},[E,l,d]),(0,$i.useXRHitTest)((U,q)=>{if(!d||U.length===0){_.current&&(_.current=!1,E());return}q(y,U[0])&&(S.current.setFromMatrixPosition(y),_.current||(_.current=!0,E()))},"viewer"),(0,$i.useXRInputSourceEvent)("all","select",()=>{!d||T.current||!b.current||g()},[d,g]),(0,Ye.useEffect)(()=>{if(!d)return;let U=R=>{R.touches.length===2&&(T.current=!0,P.current=fy(R.touches),B.current=gy(R.touches),D.current=h.current,O.current=f.current)},q=R=>{if(!T.current||R.touches.length!==2)return;R.preventDefault();let X=fy(R.touches);if(P.current>0){let K=X/P.current;h.current=Math.min(z1,Math.max(V1,D.current*K))}let Y=gy(R.touches);f.current=O.current-(Y-B.current)},x=R=>{R.touches.length===0&&requestAnimationFrame(()=>{T.current=!1})};return window.addEventListener("touchstart",U),window.addEventListener("touchmove",q,{passive:!1}),window.addEventListener("touchend",x),window.addEventListener("touchcancel",x),()=>{window.removeEventListener("touchstart",U),window.removeEventListener("touchmove",q),window.removeEventListener("touchend",x),window.removeEventListener("touchcancel",x)}},[d]),(0,by.useFrame)(()=>{let U=a.current,q=s.current;if(!U||!q)return;!l||!u?(U.visible=!0,U.position.set(0,0,0),U.rotation.set(0,0,0),q.scale.setScalar(1)):(U.visible=!d||v.current,U.position.copy(m.current),U.rotation.set(0,f.current,0),q.scale.setScalar(u.scale*h.current));let x=c.current;if(x){let R=d&&b.current&&_.current;x.visible=R,R&&x.position.copy(S.current)}});let z=l&&u?u.offset:[0,0,0];return(0,br.jsxs)(br.Fragment,{children:[(0,br.jsxs)("mesh",{ref:c,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,br.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,br.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,br.jsx)("group",{ref:a,children:(0,br.jsx)("group",{ref:s,children:(0,br.jsx)("group",{position:z,children:r})})})]})}),yy=j1;var sc=require("react");var F1="ri:license-grant:v1",H1={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},vy=new Map;function _y(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function xy(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return _y(t.padEnd(Math.ceil(t.length/4)*4,"="))}function G1(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 ac(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 np(e,t){return`${F1}:${t}:${e}`}function W1(e,t){let n=vy.get(e);if(n)return n;let r=crypto.subtle.importKey("spki",_y(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return vy.set(e,r),r}async function rp(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[r,i,o,a,...s]=e.split("."),c=H1[i];if(r!=="ri1"||!c||!o||!a||s.length>0)return null;let l=JSON.parse(new TextDecoder().decode(xy(o)));if(!G1(l)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await W1(i,c),xy(a),new TextEncoder().encode(`${r}.${i}.${o}`)))return null;let u=Math.floor(Date.now()/1e3),m=l.expiresAt-l.issuedAt;return l.licenseKeyHash!==t||l.domain!==n||l.expiresAt<=u||l.issuedAt>u+300||m<=0||m>43200?null:{environment:l.environment,tier:l.tier,expiresAt:l.expiresAt}}catch{return null}}async function wy(e,t,n){try{return await rp(e,await ac(t),n)}catch{return null}}async function Sy(e,t,n){try{let r=await ac(t);return await rp(e,r,n)?(localStorage.setItem(np(r,n),e),!0):!1}catch{return!1}}async function My(e,t){try{let n=await ac(e),r=np(n,t),i=localStorage.getItem(r);if(!i)return null;let o=await rp(i,n,t);return o||localStorage.removeItem(r),o}catch{return null}}async function ip(e,t){try{let n=await ac(e);localStorage.removeItem(np(n,t))}catch{}}var X1=["localhost","127.0.0.1","0.0.0.0"],q1=e=>X1.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),Ty="https://react-immersive.liveroom.dev/api/validate-license",Y1=()=>typeof window<"u",$1=300*1e3,K1=5e3,Z1=400,ap=new Map,op=new Map,bi=class extends Error{},Py=async(e,t,n)=>{let r=await My(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},Cy=async(e,t,n)=>{let r=await Py(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})},Q1=e=>e instanceof bi||e instanceof TypeError,J1=()=>new Promise(e=>setTimeout(e,Z1)),eS=e=>e==="development"||e==="production",tS=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&&!eS(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},nS=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},rS=(e,t,n)=>`${n}::${e}::${t}`,iS=e=>{let t=ap.get(e);return t?Date.now()-t.timestamp>$1?(ap.delete(e),null):t.result:null},oS=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),aS=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function sS(e,t,n,r){let i=rS(e,t,r),o=iS(i);if(o)return o;let a=op.get(i);if(a)return a;let s=(async()=>{for(let c=0;c<2;c+=1)try{return await lS(e,t,n,i,r)}catch(l){if(!Q1(l))throw l;if(c===0){let d=await Py(e,t,n);if(d)return d;await J1();continue}return Cy(e,t,n)}return Cy(e,t,n)})().finally(()=>{op.delete(i)});return op.set(i,s),s}async function lS(e,t,n,r,i){let o=new AbortController,a=setTimeout(()=>o.abort(),K1),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(d){throw o.signal.aborted?new bi("License validation timed out"):d}finally{clearTimeout(a)}let c;try{c=await s.json()}catch{throw new bi(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new bi(`License server error (${s.status})`);let d=nS(c)??`License validation failed${s.status?` (${s.status})`:""}`;return await ip(e,t),aS(d,n)}if(!tS(c))throw new bi("License server returned an unexpected payload");let l=oS(c,n);if(l.status==="valid"&&i!==Ty){let d=c.offlineGrant?await wy(c.offlineGrant,e,t):null;if(!d)throw new bi("License validation endpoint did not return a verifiable signed grant");l={...l,environment:d.environment,tier:d.tier}}return l.status==="valid"?(ap.set(r,{result:l,timestamp:Date.now()}),c.offlineGrant&&(await Sy(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await ip(e,t),l}var Ey=(e,t=Ty)=>{let[n,r]=(0,sc.useState)({status:"checking",isLocalDomain:!1});return(0,sc.useEffect)(()=>{if(!Y1())return;let i=!1,o=d=>{i||r(d)},a=e.trim(),s=window.location.hostname.toLowerCase(),c=q1(s);return o({status:"checking",isLocalDomain:c}),a?((async()=>{try{o(await sS(a,s,c,t))}catch(d){let u=d instanceof TypeError?"Could not reach license server":d instanceof Error?d.message:"License validation failed";o({status:"invalid",reason:u,isLocalDomain:c})}})(),()=>{i=!0}):(o({status:"invalid",reason:"No license key provided",isLocalDomain:c}),()=>{i=!0})},[e,t]),n};var wt=require("react");var Qt=require("react/jsx-runtime"),cS={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},uS={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"},lc=({direction:e})=>{let t=cS[e],n=uS[e];return(0,Qt.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,Qt.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,Qt.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Wr=16,dS={"bottom-left":{bottom:Wr,left:Wr,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Wr,right:Wr,top:"auto",left:"auto",transform:"none"},"top-left":{top:Wr,left:Wr,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Wr,right:Wr,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:Wr,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},pS=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:r=.001,rotateSensitivity:i=.01,position:o="center-bottom"})=>{let a=(0,wt.useRef)(null),[s,c]=(0,wt.useState)({x:0,y:0}),l=(0,wt.useRef)(!1),d=(0,wt.useRef)({x:0,y:0}),u=(0,wt.useRef)(void 0),m=(0,wt.useRef)(void 0),h=(0,wt.useRef)(null),f=(0,wt.useRef)(0),b=()=>e.current,v=(A,N,z)=>{let U=Math.hypot(A,N);if(U>z){let q=z/U;return{x:A*q,y:N*q}}return{x:A,y:N}},y=A=>{let z=Math.abs(A);return z<.12?0:Math.sign(A)*((z-.12)/(1-.12))},S=(0,wt.useCallback)(()=>{let A=()=>{let{x:N,y:z}=d.current,U=y(N),q=y(z);if(t&&(U!==0||q!==0)){let x=b();x&&x.rotate(-U*i,-q*i,!0)}u.current=requestAnimationFrame(A)};u.current=requestAnimationFrame(A)},[t,i]),_=(0,wt.useCallback)(()=>{u.current&&cancelAnimationFrame(u.current)},[]),k=(0,wt.useCallback)((A,N)=>{if(!a.current||!l.current)return;let z=a.current.getBoundingClientRect(),U=z.left+z.width/2,q=z.top+z.height/2,x=z.width/2-18,R=A-U,X=N-q,Y=v(R,X,x);c(Y),d.current={x:Y.x/x,y:Y.y/x}},[]),T=(0,wt.useCallback)(A=>{if(!t)return;A.preventDefault(),A.stopPropagation(),l.current=!0,S();let N="touches"in A?A.touches[0]:A;k(N.clientX,N.clientY)},[t,S,k]),P=(0,wt.useCallback)(A=>{if(!l.current)return;A.preventDefault();let N="touches"in A?A.touches[0]:A;k(N.clientX,N.clientY)},[k]),B=(0,wt.useCallback)(()=>{l.current=!1,c({x:0,y:0}),d.current={x:0,y:0},_()},[_]),D=r*10,O=(0,wt.useCallback)(A=>{t&&b()?.forward(A*D,!0)},[t,D]),E=(0,wt.useCallback)(A=>{t&&b()?.truck(A*D,0,!0)},[t,D]),g=(0,wt.useCallback)((A,N,z)=>{if(!t)return;m.current&&cancelAnimationFrame(m.current),h.current={control:A,amount:N,action:z},f.current=0,z(N);let U=q=>{if(!h.current)return;if(f.current===0){f.current=q,m.current=requestAnimationFrame(U);return}if(q-f.current>200){let{amount:R,action:X}=h.current;X(R),f.current=q}m.current=requestAnimationFrame(U)};m.current=requestAnimationFrame(U)},[t]),M=(0,wt.useCallback)(A=>{h.current?.control===A&&(m.current&&(cancelAnimationFrame(m.current),m.current=void 0),h.current=null,f.current=0)},[]);return(0,wt.useEffect)(()=>(window.addEventListener("mousemove",P),window.addEventListener("mouseup",B),window.addEventListener("touchmove",P,{passive:!1}),window.addEventListener("touchend",B),window.addEventListener("touchcancel",B),()=>{window.removeEventListener("mousemove",P),window.removeEventListener("mouseup",B),window.removeEventListener("touchmove",P),window.removeEventListener("touchend",B),window.removeEventListener("touchcancel",B),_(),m.current&&cancelAnimationFrame(m.current)}),[P,B,_]),t?(0,Qt.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...dS[o]},children:(0,Qt.jsxs)("div",{className:"mc__dpad",children:[(0,Qt.jsx)("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>g("up",1,O),onMouseUp:()=>M("up"),onMouseLeave:()=>M("up"),onTouchStart:A=>{A.preventDefault(),g("up",1,O)},onTouchEnd:()=>M("up"),onTouchCancel:()=>M("up"),children:(0,Qt.jsx)(lc,{direction:"up"})}),(0,Qt.jsxs)("div",{className:"mc__middle-row",children:[(0,Qt.jsx)("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>g("left",-1,E),onMouseUp:()=>M("left"),onMouseLeave:()=>M("left"),onTouchStart:A=>{A.preventDefault(),g("left",-1,E)},onTouchEnd:()=>M("left"),onTouchCancel:()=>M("left"),children:(0,Qt.jsx)(lc,{direction:"left"})}),(0,Qt.jsx)("div",{ref:a,className:"mc__joystick",onMouseDown:T,onTouchStart:T,children:(0,Qt.jsx)("div",{className:"mc__knob",style:{transform:`translate(${s.x}px, ${s.y}px)`}})}),(0,Qt.jsx)("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>g("right",1,E),onMouseUp:()=>M("right"),onMouseLeave:()=>M("right"),onTouchStart:A=>{A.preventDefault(),g("right",1,E)},onTouchEnd:()=>M("right"),onTouchCancel:()=>M("right"),children:(0,Qt.jsx)(lc,{direction:"right"})})]}),(0,Qt.jsx)("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>g("down",-1,O),onMouseUp:()=>M("down"),onMouseLeave:()=>M("down"),onTouchStart:A=>{A.preventDefault(),g("down",-1,O)},onTouchEnd:()=>M("down"),onTouchCancel:()=>M("down"),children:(0,Qt.jsx)(lc,{direction:"down"})})]})}):null},Ay=pS;var yt=require("react"),lp=require("three");var sp=new WeakSet;function Wo(e){sp.add(e)}function Ry(e){let t=sp.has(e);return t&&sp.delete(e),t}function Ly(e){return[e.x,e.y,e.z]}function Xr(e,t){let n=new lp.Vector3,r=new lp.Vector3;return t.getPosition(n),t.getTarget(r),{position:Ly(n),target:Ly(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 hS(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 us(e,t,n=.6){let r=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=r}}function cc(e={}){let t=(0,yt.useRef)(e);t.current=e;let n=(0,yt.useRef)(null),[r,i]=(0,yt.useState)(null),[o,a]=(0,yt.useState)(()=>({...e.presets})),s=(0,yt.useRef)(o);s.current=o;let c=(0,yt.useCallback)(O=>{i(E=>hS(E,O)?E:O)},[]),l=(0,yt.useCallback)(O=>{c(O)},[c]),d=(0,yt.useRef)(null),u=(0,yt.useRef)(null),m=(0,yt.useRef)(null),h=(0,yt.useCallback)(O=>{n.current=O;let E=Xr(O.raw.controls.camera,O.raw.controls);c(E),O.raw.scene!==u.current&&(u.current=O.raw.scene,d.current=null,m.current=null),O.homeCameraState&&!d.current&&(d.current=O.homeCameraState);let{initialPosition:g,initialTarget:M,initialTransition:A=!1}=t.current;if((g||M)&&O.raw.scene&&(g||O.homeCameraState)&&m.current!==O.raw.controls){m.current=O.raw.controls,O.homeCameraState||Wo(O.raw.controls);let N=g??E.position,z=M??E.target;O.raw.controls.setLookAt(N[0],N[1],N[2],z[0],z[1],z[2],A).then(()=>{if(n.current?.raw.controls!==O.raw.controls)return;let U=Xr(O.raw.controls.camera,O.raw.controls);d.current={position:U.position,target:U.target},c(U)}).catch(()=>{})}},[c]),f=(0,yt.useCallback)(async()=>{let O=n.current,E=O?.raw.controls;if(!E)return!1;try{let g=d.current;return g?await us(E,()=>E.setLookAt(g.position[0],g.position[1],g.position[2],g.target[0],g.target[1],g.target[2],!0)):O?.raw.scene?await us(E,()=>E.fitToBox(O.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await us(E,()=>E.reset(!0)),!0}catch{return!1}},[]),b=(0,yt.useCallback)(async()=>{let O=n.current;if(!O?.raw.controls||!O.raw.scene)return!1;try{return await us(O.raw.controls,()=>O.raw.controls.fitToBox(O.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),v=(0,yt.useCallback)(async O=>{let E=n.current;if(!E?.raw.controls)return!1;let g=Ot(E.objectBindings,O);if(!g)return!1;let M=E.raw.nodes[g];if(!M)return!1;try{return await us(E.raw.controls,()=>E.raw.controls.fitToBox(M,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),y=(0,yt.useCallback)(async(O,E=!0)=>{let g=n.current?.raw.controls;if(!g)return!1;try{return n.current?.homeCameraState||Wo(g),await g.setTarget(O[0],O[1],O[2],E),c(Xr(g.camera,g)),!0}catch{return!1}},[c]),S=(0,yt.useCallback)(async(O,E=!0)=>{let g=n.current?.raw.controls;if(!g)return!1;try{n.current?.homeCameraState||Wo(g);let M=[g.setLookAt(O.position[0],O.position[1],O.position[2],O.target[0],O.target[1],O.target[2],E)];O.azimuthAngle!=null&&O.polarAngle!=null&&M.push(g.rotateTo(O.azimuthAngle,O.polarAngle,E)),await Promise.all(M);let A=g.camera,N=!1;return O.fov!=null&&"fov"in A&&typeof A.fov=="number"&&(A.fov=O.fov,N=!0),O.zoom!=null&&"zoom"in A&&typeof A.zoom=="number"&&(A.zoom=O.zoom,N=!0),N&&"updateProjectionMatrix"in A&&A.updateProjectionMatrix(),c(Xr(A,g)),!0}catch{return!1}},[c]),_=(0,yt.useCallback)((O,E=!0)=>S(O,E),[S]),k=(0,yt.useCallback)((O,E,g=!0)=>S({position:O,target:E},g),[S]),T=(0,yt.useCallback)(async(O,E,g=!0)=>{let M=n.current?.raw.controls;if(!M)return!1;try{return n.current?.homeCameraState||Wo(M),await M.rotateTo(O*Math.PI/180,E*Math.PI/180,g),c(Xr(M.camera,M)),!0}catch{return!1}},[c]),P=(0,yt.useCallback)(async(O,E=!0)=>{let g=n.current?.raw.controls;if(!g)return!1;try{return n.current?.homeCameraState||Wo(g),await g.dollyTo(O,E),c(Xr(g.camera,g)),!0}catch{return!1}},[c]),B=(0,yt.useCallback)(O=>{let E=n.current?.raw.controls,g=O.trim();if(!E||!g)return null;let M=Xr(E.camera,E);return s.current={...s.current,[g]:M},a(A=>({...A,[g]:M})),c(M),M},[c]),D=(0,yt.useCallback)((O,E=!0)=>{let g=s.current[O];return g?S(g,E):Promise.resolve(!1)},[S]);return{cameraState:r,cameraPresets:o,resetView:f,focusObject:v,fitScene:b,setCameraTarget:y,setCameraState:_,lookAt:k,orbitTo:T,dollyTo:P,savePreset:B,goToPreset:D,handleCameraChange:l,handleViewerReady:h}}var ds=require("three");function uc(e){return[e.x,e.y,e.z]}function Oy(e){let t=new ds.Box3().setFromObject(e),n=0;return e.traverse(r=>{r.isMesh&&(n+=1)}),{bounds:{min:uc(t.min),max:uc(t.max),center:uc(t.getCenter(new ds.Vector3)),size:uc(t.getSize(new ds.Vector3))},objectCount:n,materialVariants:yl(e)}}function mS(e){return typeof e=="object"&&!Array.isArray(e)}function fS(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:(e.type??"other")===t.type}function dn(e,t){if(mS(t))return Object.entries(e).filter(([,i])=>fS(i,t)).map(([i])=>i);let r=(typeof t=="string"?[t]:t).map(i=>Ot(e,i)).filter(i=>i!==null);return[...new Set(r)]}function dc(e,t){return dn(e,t).map(n=>e[n]).filter(n=>n!==void 0)}var gS="#ff3b30",bS=Object.freeze({}),Dy=e=>e;function yS(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function vS(e,t){let n=e.metadata;for(let r of t.split(".")){if(!yS(n))return;n=n[r]}return n}function xS(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 vS(e,t.metadata)===t.equals}function _S(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 cp=e=>`#${e.map(t=>Math.round(t).toString(16).padStart(2,"0")).join("")}`;function up(e,t){let n=e.map(([c,l])=>({at:c,rgb:_S(l)})).filter(c=>Number.isFinite(c.at)&&c.rgb!==null).sort((c,l)=>c.at-l.at);if(n.length===0||!Number.isFinite(t))return null;if(t<=n[0].at)return cp(n[0].rgb);let r=n[n.length-1];if(t>=r.at)return cp(r.rgb);let i=n.findIndex(c=>c.at>=t),o=n[i-1],a=n[i],s=a.at===o.at?1:(t-o.at)/(a.at-o.at);return cp(o.rgb.map((c,l)=>c+(a.rgb[l]-c)*s))}function pc(e,t){if(!t?.length)return{bindings:e,pulses:bS,sourceOf:Dy};let n=new Map,r={};for(let a of t){let s=a.target?dn(e,a.target):Object.keys(e),c=a.when?Array.isArray(a.when)?a.when:[a.when]:[];for(let l of s){let d=e[l];if(!c.every(m=>xS(d,m)))continue;let u={...a.material};if(a.colorScale){let m=d.metrics?.[a.colorScale.metric],h=typeof m=="number"?up(a.colorScale.stops,m):null;h&&(u={...u,[a.colorScale.channel??"baseColor"]:h})}if(a.pulse){let m=a.pulse===!0?{}:a.pulse;r[l]={color:m.color??gS,speed:m.speed!==void 0&&m.speed>0?m.speed:1};let h=u.emissiveIntensity??n.get(l)?.emissiveIntensity??d.style?.material?.emissiveIntensity;h!==void 0&&h>0||(u.emissiveIntensity=1)}Object.keys(u).length>0&&n.set(l,{...n.get(l),...u})}}if(n.size===0)return{bindings:e,pulses:r,sourceOf:Dy};let i={...e},o=new WeakMap;for(let[a,s]of n){let c=e[a],l={...c,style:{...c.style,material:{...c.style?.material,...s}}};i[a]=l,o.set(l,c)}return{bindings:i,pulses:r,sourceOf:a=>o.get(a)??a}}var wS=.12,Iy=new Set;function ps(e,t){return t?new Set(dn(e,t.target)):Iy}function hc(e,t){let n=ps(e.bindings,t);if(!t||n.size===0)return{...e,setAside:Iy};let r=Math.min(Math.max(t.ghostOpacity??wS,0),1),i={...e.bindings},o=new WeakMap,a=new Set;for(let[s,c]of Object.entries(e.bindings)){if(n.has(s))continue;a.add(s);let l=t.mode==="hide"?{...c,visible:!1}:{...c,style:{...c.style,material:{...c.style?.material,opacity:Math.min(c.style?.material?.opacity??1,r)}}};i[s]=l,o.set(l,e.sourceOf(c))}return{bindings:i,pulses:e.pulses,sourceOf:s=>o.get(s)??e.sourceOf(s),setAside:a}}var Ny=require("react");var ky=require("react"),dp=require("@react-three/fiber"),By=new WeakMap;function mc(e){let t=(0,dp.useThree)(r=>r.get),n=(0,dp.useThree)(r=>r.setEvents);(0,ky.useEffect)(()=>{if(!e)return;let r=By.get(t);if(!r){let o=new Set;r=o,By.set(t,o);let a=t().events.filter;n({filter:(s,c)=>{let l=a?a(s,c):s;return o.size===0?l:l.filter(d=>{for(let u of o)if(!u(d))return!1;return!0})}})}r.add(e);let i=r;return()=>{i.delete(e)}},[e,t,n])}function pp({setAside:e,nodeRefs:t}){let n=(0,Ny.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[c,l]of Object.entries(o))s.set(l,e.has(c));r={refs:o,bound:s}}let{bound:a}=r;for(let s=i.object;s;s=s.parent){let c=a.get(s);if(c!==void 0)return!c}return!0}},[e,t]);return mc(n),null}var Tn=require("react"),Hy=require("@react-three/drei"),Xo=require("@react-three/fiber"),Ki=require("three");var hp=require("three"),fc={x:0,y:1,z:2},Vy=e=>Math.min(Math.max(e,0),1);function mp(e,t){let n=fc[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)*Vy(o)}function zy(e,t,n){let r=mp(t,n);if(r===null)return!1;let i=new hp.Vector3;return i.setComponent(fc[n.axis],n.flip?1:-1),e.normal.copy(i),e.constant=n.flip?-r:r,!0}function Uy(e,t,n,r){let i=fc[r],o=new hp.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 c=t.clone().sub(e.origin).dot(a)/s;return Number.isFinite(c)?e.origin.getComponent(i)+e.direction.getComponent(i)*c:null}function jy(e,t,n){let r=fc[t],i=e.max[r]-e.min[r];return i>0?Vy((n-e.min[r])/i):null}var Zi=require("react/jsx-runtime"),SS={x:0,y:1,z:2},Fy="#22d3ee";function fp({section:e,box:t,modelRef:n,showHandle:r,onPositionChange:i,onDraggingChange:o}){let a=(0,Xo.useThree)(b=>b.gl),s=(0,Xo.useThree)(b=>b.raycaster),c=(0,Xo.useThree)(b=>b.invalidate),l=(0,Tn.useMemo)(()=>new Ki.Plane,[]),d=(0,Tn.useMemo)(()=>[l],[l]),u=e.enabled&&t!==null&&zy(l,t,e),m=(0,Tn.useRef)(new Map),h=()=>{for(let[b,v]of m.current)b.clippingPlanes=v.clippingPlanes,b.side=v.side,b.needsUpdate=!0;m.current.clear()};(0,Tn.useEffect)(()=>{if(u)return a.localClippingEnabled=!0,c(),()=>{h(),c()}},[u,a,c]),(0,Tn.useEffect)(()=>{u&&c()},[u,e.axis,e.position,e.flip,t,c]),(0,Xo.useFrame)(()=>{let b=n.current;if(!u||!b)return;let v=m.current;b.traverse(y=>{let S=y.material;if(S)for(let _ of Array.isArray(S)?S:[S]){let k=v.get(_);if(_.clippingPlanes===d&&_.side===Ki.DoubleSide)continue;let T=_.side===Ki.DoubleSide&&k?k.side:_.side;v.set(_,{clippingPlanes:k?k.clippingPlanes:_.clippingPlanes,side:T}),_.clippingPlanes=d,_.clipShadows=!0,_.side=Ki.DoubleSide,_.needsUpdate=!0}})});let f=(0,Tn.useMemo)(()=>u?b=>!!b.object.userData.riSectionHandle||l.distanceToPoint(b.point)>=-1e-4:null,[u,l]);return mc(f),(0,Tn.useEffect)(()=>{if(!u)return;let b=s,v=b.firstHitOnly;return b.firstHitOnly=!1,()=>{b.firstHitOnly=v}},[u,s]),!u||!r||!t?null:(0,Zi.jsx)(MS,{section:e,box:t,onPositionChange:i,onDraggingChange:o})}function MS({section:e,box:t,onPositionChange:n,onDraggingChange:r}){let[i,o]=(0,Tn.useState)(!1),[a,s]=(0,Tn.useState)(!1),c=(0,Tn.useRef)(null),l=SS[e.axis],d=mp(t,e)??0,u=[0,1,2].map(y=>(t.max[y]-t.min[y])*1.08||.01),m=[0,1,2].map(y=>(t.min[y]+t.max[y])/2);m[l]=d;let[h,f]=e.axis==="x"?[u[2],u[1]]:e.axis==="y"?[u[0],u[2]]:[u[0],u[1]],b=e.axis==="x"?[0,Math.PI/2,0]:e.axis==="y"?[-Math.PI/2,0,0]:[0,0,0],v=y=>{a&&(y.target?.releasePointerCapture?.(y.pointerId),c.current=null,s(!1),r(!1))};return(0,Zi.jsxs)("mesh",{ref:y=>{y&&(Gs(y),y.userData.riSectionHandle=!0)},position:m,rotation:b,renderOrder:2,onPointerOver:y=>{y.stopPropagation(),o(!0)},onPointerOut:()=>o(!1),onPointerDown:y=>{y.stopPropagation(),y.target?.setPointerCapture?.(y.pointerId),c.current={point:y.point.clone(),direction:y.ray.direction.clone(),coordinate:y.point.getComponent(l),cut:d},s(!0),r(!0)},onPointerMove:y=>{let S=c.current;if(!a||!S)return;y.stopPropagation();let _=Uy(y.ray,S.point,S.direction,e.axis);if(_===null)return;let k=jy(t,e.axis,S.cut+(_-S.coordinate));k!==null&&n(k)},onPointerUp:v,onPointerCancel:v,onClick:y=>y.stopPropagation(),children:[(0,Zi.jsx)("planeGeometry",{args:[h,f]}),(0,Zi.jsx)("meshBasicMaterial",{color:Fy,transparent:!0,opacity:a?.22:i?.16:.08,side:Ki.DoubleSide,depthWrite:!1,toneMapped:!1}),(0,Zi.jsx)(Hy.Edges,{color:Fy,renderOrder:3})]})}var Gy=require("react-colorful"),yi=require("react/jsx-runtime"),gp=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:r,inline:i=!1})=>(0,yi.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,yi.jsx)("p",{className:"ri-popoverLabel",children:"Color"}),(0,yi.jsx)(Gy.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:o=>r(a=>({...a,[e.objectId]:{...a[e.objectId],hex:o}}))}),(0,yi.jsxs)("div",{className:"ri-inlineRow",children:[(0,yi.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,yi.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});var et=require("react/jsx-runtime"),bp=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:r,inline:i=!1,offset:o,rotationDegrees:a,onOffsetChange:s,onRotationChange:c,isPositioning:l=!1,onEndPositioning:d})=>(0,et.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,et.jsx)("div",{className:"ri-popoverHeader",children:(0,et.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),(0,et.jsxs)("div",{className:"ri-materialBody",children:[t?(0,et.jsx)("div",{className:"ri-previewFrame",children:(0,et.jsx)("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):(0,et.jsxs)("div",{className:"ri-emptyState",children:[(0,et.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,et.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,et.jsx)("span",{style:{fontSize:12},children:"No texture applied"})]}),(0,et.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&(0,et.jsx)("button",{onClick:()=>r(e.objectId),className:"ri-removeButton",children:"Remove texture"}),(0,et.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}),t&&(s||c)&&(0,et.jsxs)("div",{className:"ri-texturePosition",children:[(0,et.jsx)("p",{className:"ri-texturePositionLabel",children:"Texture position"}),(0,et.jsxs)("div",{className:"ri-texturePositionGrid",children:[(0,et.jsxs)("label",{className:"ri-texturePositionField",children:[(0,et.jsx)("span",{children:"Offset X"}),(0,et.jsx)("input",{type:"number",step:.01,value:o?.[0]??0,onChange:u=>s?.(e.objectId,0,Number(u.target.value))})]}),(0,et.jsxs)("label",{className:"ri-texturePositionField",children:[(0,et.jsx)("span",{children:"Offset Y"}),(0,et.jsx)("input",{type:"number",step:.01,value:o?.[1]??0,onChange:u=>s?.(e.objectId,1,Number(u.target.value))})]})]}),(0,et.jsxs)("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[(0,et.jsx)("span",{children:"Rotation"}),(0,et.jsxs)("div",{className:"ri-texturePositionSliderRow",children:[(0,et.jsx)("input",{type:"range",min:0,max:360,step:1,value:a??0,onChange:u=>c?.(e.objectId,Number(u.target.value))}),(0,et.jsx)("input",{type:"number",min:0,max:360,step:1,value:Math.round(a??0),onChange:u=>c?.(e.objectId,Number(u.target.value))})]})]}),l?(0,et.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:d,title:"Confirm this texture position and exit positioning mode",children:"Done positioning"}):(0,et.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 Zn=require("react");var it=require("react/jsx-runtime");function Wy({entries:e}){return(0,it.jsx)(it.Fragment,{children:e.map(([t,n])=>{let r=n!==null&&typeof n=="object",i=r?Object.entries(n):[];return r&&i.length>0?(0,it.jsxs)("div",{className:"left-panel__data-group",children:[(0,it.jsx)("span",{className:"left-panel__data-key",children:t}),(0,it.jsx)("div",{className:"left-panel__data-children",children:(0,it.jsx)(Wy,{entries:i})})]},t):(0,it.jsxs)("div",{className:"left-panel__data-row",children:[(0,it.jsx)("span",{className:"left-panel__data-key",children:t}),(0,it.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:r?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function CS({content:e}){let t=e!=null,[n,r]=(0,Zn.useState)(t),[i,o]=(0,Zn.useState)(t),a=(0,Zn.useRef)(e);return t&&(a.current=e),(0,Zn.useEffect)(()=>{if(t){r(!0);return}if(n){o(!1);let s=setTimeout(()=>r(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,Zn.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>o(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,it.jsx)("div",{className:`left-panel__action-extra${i?" left-panel__action-extra--open":""}`,children:(0,it.jsx)("div",{className:"left-panel__action-extra-inner",children:e??a.current})}):null}function yp({isOpen:e,selectedObject:t,currentAction:n,onClose:r,onAction:i,renderActionExtra:o}){let[a,s]=(0,Zn.useState)(t);(0,Zn.useEffect)(()=>{t&&s(t)},[t]);let c=t??a,l=c?Object.entries(c).filter(([d])=>d!=="actions"&&d!=="decals"):[];return(0,it.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:c&&(0,it.jsxs)(it.Fragment,{children:[(0,it.jsxs)("div",{className:"left-panel__header",children:[(0,it.jsx)("p",{className:"left-panel__title",children:c.label}),(0,it.jsx)("button",{onClick:r,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),l.length>0&&(0,it.jsx)("div",{className:"left-panel__data",children:(0,it.jsx)(Wy,{entries:l})}),(0,it.jsx)("hr",{className:"left-panel__divider"}),c.actions&&c.actions.length>0&&(0,it.jsxs)(it.Fragment,{children:[(0,it.jsx)("div",{className:"left-panel__actions-label",children:"Actions"}),(0,it.jsx)("div",{className:"left-panel__actions-list",children:c.actions.map((d,u)=>{let m=n?.action.id===d.id&&(n.binding===c||n.binding?.id===c.id||n.binding?.modelObjectId===c.modelObjectId||n.objectId===c.id||n.objectId===c.modelObjectId),h=o?.(d.id);return(0,it.jsxs)(Zn.Fragment,{children:[(0,it.jsx)("button",{onClick:f=>i({objectId:c.modelObjectId||c.id||"",action:d,binding:c,screenX:f.clientX,screenY:f.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${d.id}`,m?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":d.id,"data-label":d.label,children:d.label}),(0,it.jsx)(CS,{content:h})]},u)})})]})]})})}var hs=require("react"),gc=require("lucide-react");var Xy=require("react");var pn=require("react/jsx-runtime");function qy({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:r,searchValue:i,onSearchChange:o,searchPlaceholder:a,children:s,isOpen:c,onToggle:l,openButtonIcon:d,closeButtonIcon:u,closeButtonAriaLabel:m}){let[h,f]=(0,Xy.useState)(!1),b=c!==void 0?c:h,v=y=>{c===void 0&&f(y),l?.(y)};return(0,pn.jsxs)("div",{className:`ri-sidepanel-wrap ${b?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!b&&(0,pn.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>v(!0),"aria-label":t,title:"Open panel",children:[d,e?(0,pn.jsx)("span",{children:e}):null]}),(0,pn.jsxs)("div",{className:`ri-sidepanel ${b?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!b,children:[(0,pn.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,pn.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,pn.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,pn.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>v(!1),"aria-label":m,title:"Close",children:u??(0,pn.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,pn.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,pn.jsx)("p",{className:"ri-sidepanel__title",children:r})]}),(0,pn.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,pn.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:a,value:i,onChange:y=>o(y.target.value)})}),(0,pn.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var Qn=require("react/jsx-runtime");function vp({objectBindings:e,onAction:t,onFocus:n,onHover:r,isOpen:i,onToggle:o,isolatedKeys:a=null,onIsolate:s}){let[c,l]=(0,hs.useState)(null),[d,u]=(0,hs.useState)(""),m=(0,hs.useMemo)(()=>Object.entries(e).filter(([h,f])=>{let b=d.toLowerCase();return h.toLowerCase().includes(b)||(f.label??"").toLowerCase().includes(b)}),[e,d]);return(0,Qn.jsx)(qy,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:(0,Qn.jsx)(gc.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${m.length} visible entries`,searchValue:d,onSearchChange:u,searchPlaceholder:"Search nodes, labels",isOpen:i,onToggle:o,closeButtonAriaLabel:"Close scene objects panel",children:m.map(([h,f])=>{let b=f.visible!==!1,v=c===h,y=a?.has(h)??!1;return(0,Qn.jsxs)("div",{onClick:()=>n(f),onMouseEnter:()=>{l(h),r?.(f)},onMouseLeave:()=>{l(null),r?.(null)},className:`ri-sidepanel__row${v?" ri-sidepanel__row--hovered":""}${a!==null&&!y?" ri-sidepanel__row--setAside":""}`,children:[(0,Qn.jsx)("span",{className:`ri-sidepanel__label${v?" ri-sidepanel__label--hovered":""}`,children:f.label??h}),s?(0,Qn.jsx)("button",{type:"button",onClick:_=>{_.stopPropagation(),s(f)},className:`ri-sidepanel__isolate-btn${y?" ri-sidepanel__isolate-btn--active":""}`,title:y?"Show all":"Isolate","aria-label":`${y?"Show all":"Isolate"} ${f.label??h}`,"aria-pressed":y,children:(0,Qn.jsx)(gc.Focus,{width:14,height:14,"aria-hidden":"true"})}):null,(0,Qn.jsx)("button",{type:"button",onClick:_=>{_.stopPropagation(),t?.({objectId:h,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:f})},className:"ri-sidepanel__vis-btn",title:b?"Hide":"Show",children:(0,Qn.jsx)("span",{className:`ri-sidepanel__checkbox${b?" ri-sidepanel__checkbox--checked":""}`,children:b&&(0,Qn.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,Qn.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},h)})})}var se=require("lucide-react");var bc=require("react"),TS=(0,bc.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var yc=()=>(0,bc.useContext)(TS);var vi=require("react/jsx-runtime");function Yy({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,vi.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[i&&(0,vi.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,vi.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a,children:(0,vi.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${a}%`}})}),(0,vi.jsxs)("span",{className:"bb-loadingProgress__label",children:[a,"%"]})]}),(0,vi.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}function PS(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 ES(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 xp(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 $y(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 vc(e){let t=xp(e);return{id:PS(e),modelObjectId:e,type:t,label:ES(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:$y(t),metrics:{},metadata:{}}}function Ky(e){return Object.fromEntries(e.map(t=>[t,vc(t)]))}function xc(e){let t=new Set,n={};for(let r of e){let i=vc(r),o=i.id||"object",a=o;for(let c=2;t.has(a);c++)a=`${o}-${c}`;t.add(a),i.id=a;let s=(i.actions??[]).filter(c=>Pa.includes(c.id));i.actions=s.length>0?s:$y("other"),n[r]=i}return n}function Zy(e){let{nodesById:t}=si(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 ye=require("react"),Sc=require("@react-three/fiber"),Mc=require("@react-three/drei"),We=require("three");var Qy="data:image/png;base64,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";var Jy="data:image/png;base64,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";var ev="data:image/png;base64,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";var Te=require("react/jsx-runtime"),_p=-100,wp=100,cv=.03,OS=.03,DS=.03,tv=.5,IS=Qy,BS=Jy,kS=ev,NS=Math.PI/4,nv=.4,qo=64,rv=cv*3,Sp="#4d7dff",iv="#ffcc00",ov=.02,VS=new We.Vector3(0,1,0),_c=32,av="#ff9d3d",wc=4;function Mp(e){let t=new Float32Array((qo+1)*3);for(let n=0;n<=qo;n++){let r=n/qo*Math.PI*2,i=Math.cos(r)*nv,o=Math.sin(r)*nv,a=0,s=0,c=0;e==="x"?(s=i,c=o):e==="y"?(a=i,c=o):(a=i,s=o),t[n*3]=a,t[n*3+1]=s,t[n*3+2]=c}return t}function zS(e){let t=Math.abs(e.y)<.99?new We.Vector3(0,1,0):new We.Vector3(1,0,0),n=new We.Vector3().crossVectors(e,t).normalize(),r=new We.Vector3().crossVectors(e,n).normalize();return[n,r]}function sv(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}var Yo=null,Tp=new Set;function Cp(e){Yo!==e&&(Yo=e,Tp.forEach(t=>t()))}function US(e){return Tp.add(e),()=>Tp.delete(e)}function lv(){return Yo}function uv({light:e,position:t,rotation:n=[0,0,0],color:r,intensity:i,visible:o,onPositionChange:a,onRotationChange:s,onDraggingChange:c}){let{activeTab:l,activeSubTab:d,setActiveTab:u,setActiveSubTab:m}=yc(),{camera:h,gl:f,raycaster:b,invalidate:v}=(0,Sc.useThree)(),y=(0,ye.useRef)(null),S=(0,ye.useRef)(null),_=(0,ye.useRef)(null),k=(0,ye.useRef)(null),T=(0,ye.useRef)(null),P=(0,ye.useRef)(null),B=(0,ye.useRef)(null),D=(0,ye.useRef)(null),O=(0,ye.useRef)(null),E=(0,ye.useRef)(null),g=(0,ye.useRef)(null),M=(0,ye.useMemo)(()=>new We.Matrix4,[]),A=(0,ye.useMemo)(()=>new We.Quaternion,[]),N=(0,ye.useMemo)(()=>new We.Vector3(1,1,1),[]),z=(0,ye.useRef)([0,0,0]),U=(0,ye.useRef)([0,0,0]),q=(0,ye.useRef)(!1),x=(0,ye.useRef)(null),R=(0,ye.useRef)(null),X=(0,ye.useRef)(null),Y=(0,ye.useRef)(c);(0,ye.useEffect)(()=>{Y.current=c},[c]);let K=(0,ye.useMemo)(()=>new We.Vector3(t[0],t[1],t[2]),[t]),oe=(0,ye.useMemo)(()=>new We.Euler(n[0],n[1],n[2]),[n]),ae=(0,ye.useMemo)(()=>new Float32Array(6),[]),ne=(0,ye.useMemo)(()=>Mp("x"),[]),Ie=(0,ye.useMemo)(()=>Mp("y"),[]),me=(0,ye.useMemo)(()=>Mp("z"),[]),tt=(0,ye.useMemo)(()=>new Float32Array((_c+1)*3),[]),dt=(0,ye.useMemo)(()=>new Float32Array(wc*2*3),[]),pe=e?.type==="point",_e=e?.type==="spot",je=pe?BS:_e?kS:IS,Bt=pe?OS:_e?DS:cv,te=(0,ye.useMemo)(()=>new We.TextureLoader().load(je),[je]),an=(0,ye.useSyncExternalStore)(US,lv,lv),nt=!!e&&an===e.id,Qe=(0,ye.useRef)(new We.Vector3),ze=(0,ye.useRef)(new We.Euler);(0,ye.useEffect)(()=>{q.current||(Qe.current.copy(K),ze.current.copy(oe),v())},[K,oe,v]),(0,ye.useEffect)(()=>{e&&Yo===e.id&&!o&&Cp(null)},[e?.id,o]),(0,ye.useEffect)(()=>()=>{e&&Yo===e.id&&Cp(null),X.current!==null&&(cancelAnimationFrame(X.current),X.current=null)},[e?.id]);let Jt=(0,ye.useCallback)(()=>{if(q.current||!nt)return;let de=Qe.current,Pe=new We.Quaternion().setFromEuler(ze.current);M.compose(de,Pe,N)},[M,N,nt]);(0,Sc.useFrame)(()=>{if(y.current&&y.current.position.copy(Qe.current),Jt(),_.current){_.current.lookAt(h.position);let de=h,Pe;de.isOrthographicCamera?Pe=Bt/de.zoom:Pe=h.position.distanceTo(Qe.current)*Bt,_.current.scale.setScalar(Pe)}if(B.current){let de=h,Pe;de.isOrthographicCamera?Pe=rv/de.zoom:Pe=h.position.distanceTo(Qe.current)*rv,B.current.scale.setScalar(Pe)}if(T.current){let de=T.current.getAttribute("position"),Pe=de.array;Pe[0]=0,Pe[1]=0,Pe[2]=0,Pe[3]=Qe.current.x,Pe[4]=Qe.current.y,Pe[5]=Qe.current.z,de.needsUpdate=!0,T.current.computeBoundingSphere()}if(P.current){let de=Qe.current,Pe=de.length();P.current.visible=Pe>tv,Pe>1e-6&&(P.current.position.copy(de).multiplyScalar(.5),P.current.scale.set(1,Pe,1),P.current.quaternion.setFromUnitVectors(VS,de.clone().normalize()))}if(k.current&&(k.current.visible=Qe.current.length()>tv),_e&&D.current&&O.current&&E.current){let de=Qe.current,Pe=de.length();if(Pe>1e-6){D.current.visible=!0;let Xt=de.clone().negate().normalize(),lt=Pe,Nt=e?.angle??Math.PI/6,Q=lt*Math.tan(Nt),ve=de.clone().add(Xt.clone().multiplyScalar(lt)),[ge,$e]=zS(Xt),Xe=O.current.getAttribute("position"),De=Xe.array;for(let Be=0;Be<=_c;Be++){let Fe=Be/_c*Math.PI*2,Vt=ve.x+(ge.x*Math.cos(Fe)+$e.x*Math.sin(Fe))*Q,kn=ve.y+(ge.y*Math.cos(Fe)+$e.y*Math.sin(Fe))*Q,At=ve.z+(ge.z*Math.cos(Fe)+$e.z*Math.sin(Fe))*Q;De[Be*3]=Vt,De[Be*3+1]=kn,De[Be*3+2]=At}Xe.needsUpdate=!0,O.current.computeBoundingSphere();let Je=E.current.getAttribute("position"),ue=Je.array;for(let Be=0;Be<wc;Be++){let Fe=Be/wc*Math.PI*2,Vt=ve.x+(ge.x*Math.cos(Fe)+$e.x*Math.sin(Fe))*Q,kn=ve.y+(ge.y*Math.cos(Fe)+$e.y*Math.sin(Fe))*Q,At=ve.z+(ge.z*Math.cos(Fe)+$e.z*Math.sin(Fe))*Q,hn=Be*6;ue[hn]=de.x,ue[hn+1]=de.y,ue[hn+2]=de.z,ue[hn+3]=Vt,ue[hn+4]=kn,ue[hn+5]=At}Je.needsUpdate=!0,E.current.computeBoundingSphere()}else D.current.visible=!1}});let Tt=(0,ye.useCallback)(()=>{X.current!==null&&(cancelAnimationFrame(X.current),X.current=null),z.current=t,U.current=[n[0],n[1],n[2]],q.current=!0,x.current=null,R.current=null,Y.current?.(!0)},[t,n]),kt=(0,ye.useCallback)((de,Pe,Xt,lt)=>{let Nt=new We.Vector3(z.current[0],z.current[1],z.current[2]),Q=new We.Vector3,ve=new We.Quaternion,ge=new We.Vector3;lt.decompose(Q,ve,ge);let $e=Nt.clone().applyMatrix4(lt),Xe=[Math.min(Math.max($e.x,_p),wp),Math.min(Math.max($e.y,_p),wp),Math.min(Math.max($e.z,_p),wp)],De=new We.Quaternion().setFromEuler(new We.Euler(U.current[0],U.current[1],U.current[2],"XYZ")),Je=new We.Quaternion().copy(ve).multiply(De),ue=new We.Euler().setFromQuaternion(Je,"XYZ"),Be=[ue.x,ue.y,ue.z];Qe.current.set(Xe[0],Xe[1],Xe[2]),ze.current.set(Be[0],Be[1],Be[2]),x.current=Xe,R.current=Be;let Fe=new We.Quaternion().setFromEuler(ze.current);M.compose(Qe.current,Fe,N),v()},[M,N,v]),pt=(0,ye.useCallback)(()=>{q.current=!1;let de=x.current,Pe=R.current;x.current=null,R.current=null;let Xt=de&&!sv(de,z.current),lt=Pe&&!sv(Pe,U.current);Xt&&a&&a(de),lt&&s&&s(Pe),Xt||lt?X.current=requestAnimationFrame(()=>{X.current=null,Y.current?.(!1)}):Y.current?.(!1)},[a,s]);return(0,ye.useEffect)(()=>{let de=lt=>{let Nt=f.domElement.getBoundingClientRect();return new We.Vector2((lt.clientX-Nt.left)/Nt.width*2-1,-((lt.clientY-Nt.top)/Nt.height)*2+1)},Pe=lt=>!!lt.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Xt=lt=>{if(Pe(lt))return;let Nt=de(lt);b.setFromCamera(Nt,h);let Q=[];if(S.current&&Q.push(S.current),_.current&&Q.push(_.current),Q.length===0)return;if(b.intersectObjects(Q,!1).length>0){let ge=e?.id??null;Yo!==ge&&(Cp(ge),u?.("scene"),m?.("Lighting")),lt.preventDefault(),lt.stopPropagation()}};return f.domElement.addEventListener("pointerdown",Xt),()=>{f.domElement.removeEventListener("pointerdown",Xt)}},[h,b,f,e,u,m]),l!=="scene"||d!=="Lighting"||!e||!o||e.type==="none"||e.type==="hemisphere"?null:(0,Te.jsxs)("group",{ref:de=>{de&&Gs(de)},children:[(0,Te.jsxs)("group",{ref:y,children:[(0,Te.jsx)("sprite",{ref:_,children:(0,Te.jsx)("spriteMaterial",{map:te,transparent:!0,opacity:.9,blending:We.AdditiveBlending,depthWrite:!1,rotation:_e?NS:0},je)}),(0,Te.jsx)(Mc.Sphere,{ref:S,args:[.25,16,16],children:(0,Te.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),pe&&(0,Te.jsxs)("group",{ref:B,children:[(0,Te.jsxs)("lineLoop",{renderOrder:999,children:[(0,Te.jsx)("bufferGeometry",{children:(0,Te.jsx)("bufferAttribute",{attach:"attributes-position",args:[ne,3],count:qo+1})}),(0,Te.jsx)("lineBasicMaterial",{color:Sp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Te.jsxs)("lineLoop",{renderOrder:999,children:[(0,Te.jsx)("bufferGeometry",{children:(0,Te.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ie,3],count:qo+1})}),(0,Te.jsx)("lineBasicMaterial",{color:Sp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Te.jsxs)("lineLoop",{renderOrder:999,children:[(0,Te.jsx)("bufferGeometry",{children:(0,Te.jsx)("bufferAttribute",{attach:"attributes-position",args:[me,3],count:qo+1})}),(0,Te.jsx)("lineBasicMaterial",{color:Sp,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!pe&&!_e&&(0,Te.jsxs)(Te.Fragment,{children:[(0,Te.jsxs)("mesh",{ref:P,children:[(0,Te.jsx)("cylinderGeometry",{args:[ov,ov,1,8,1,!0]}),(0,Te.jsx)("meshBasicMaterial",{color:iv,transparent:!0,opacity:.05,blending:We.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Te.jsxs)("line",{ref:k,children:[(0,Te.jsx)("bufferGeometry",{ref:T,children:(0,Te.jsx)("bufferAttribute",{attach:"attributes-position",args:[ae,3],count:2})}),(0,Te.jsx)("lineBasicMaterial",{color:iv,transparent:!0,opacity:.7,blending:We.AdditiveBlending})]})]}),_e&&(0,Te.jsxs)("group",{ref:D,children:[(0,Te.jsxs)("lineLoop",{renderOrder:999,children:[(0,Te.jsx)("bufferGeometry",{ref:O,children:(0,Te.jsx)("bufferAttribute",{attach:"attributes-position",args:[tt,3],count:_c+1})}),(0,Te.jsx)("lineBasicMaterial",{color:av,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Te.jsxs)("lineSegments",{renderOrder:999,children:[(0,Te.jsx)("bufferGeometry",{ref:E,children:(0,Te.jsx)("bufferAttribute",{attach:"attributes-position",args:[dt,3],count:wc*2})}),(0,Te.jsx)("lineBasicMaterial",{color:av,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),nt&&a&&(0,Te.jsx)(Mc.PivotControls,{ref:g,matrix:M,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Tt,onDrag:kt,onDragEnd:pt})]})}var ut=require("react"),pv=require("@react-three/drei"),Cc=require("@react-three/fiber"),Gt=require("three");var yr=require("three");function dv(e){e.updateWorldMatrix(!0,!0);let t=new yr.Matrix4().copy(e.matrixWorld).invert(),n=new yr.Box3,r=new yr.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 yr.Matrix4().multiplyMatrices(t,o.matrixWorld);r.copy(a.geometry.boundingBox).applyMatrix4(s),n.union(r),i=!0}),i?n.getCenter(new yr.Vector3):new yr.Vector3}var Pp=require("react/jsx-runtime");function Ep({node:e,space:t,onTransformChange:n,onDraggingChange:r}){let i=(0,Cc.useThree)(g=>g.invalidate),o=(0,ut.useMemo)(()=>dv(e),[e]),a=(0,ut.useMemo)(()=>new Gt.Matrix4,[]),s=(0,ut.useRef)(!1),c=(0,ut.useRef)(new Gt.Matrix4),l=(0,ut.useRef)(new Gt.Matrix4),d=(0,ut.useRef)(null),u=(0,ut.useRef)(0),m=(0,ut.useRef)([]),h=(0,ut.useRef)(null),f=(0,ut.useRef)(r);f.current=r;let b=(0,ut.useMemo)(()=>new Gt.Vector3,[]),v=(0,ut.useMemo)(()=>new Gt.Quaternion,[]),y=(0,ut.useMemo)(()=>new Gt.Vector3,[]),S=(0,ut.useMemo)(()=>new Gt.Quaternion,[]),_=(0,ut.useMemo)(()=>new Gt.Vector3(1,1,1),[]),k=(0,ut.useMemo)(()=>new Gt.Quaternion,[]),T=(0,ut.useMemo)(()=>new Gt.Vector3,[]),P=(0,ut.useMemo)(()=>new Gt.Vector3,[]),B=(0,ut.useRef)([0,0,0]),D=(0,ut.useCallback)(()=>{s.current||(e.updateWorldMatrix(!0,!1),b.copy(o).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(v),S.copy(v),t==="world"&&S.identity(),a.compose(b,S,_))},[b,a,S,_,e,o,t,v]);(0,ut.useLayoutEffect)(()=>(D(),()=>{let g=h.current!==null;g&&(cancelAnimationFrame(h.current),h.current=null),(s.current||g)&&(s.current=!1,f.current(!1));for(let M of m.current)Ro(M);m.current=[]}),[D]),(0,Cc.useFrame)(()=>D());let O=(0,ut.useCallback)(()=>{h.current!==null&&(cancelAnimationFrame(h.current),h.current=null),e.updateWorldMatrix(!0,!0),m.current=[];for(let g of Ao(e))df(g)||(Qs(g,g.matrixWorld),m.current.push(g));e.updateWorldMatrix(!0,!1),b.copy(o).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(v),e.getWorldScale(y),c.current.compose(b,v,y),l.current.copy(a),B.current=[e.rotation.x,e.rotation.y,e.rotation.z],d.current=null,s.current=!0,r(!0)},[b,a,e,r,o,v,y]),E=(0,ut.useCallback)((g,M)=>{let A=c.current.clone().premultiply(M),N=l.current.clone().premultiply(M);A.decompose(T,v,P);let z=T.clone();N.decompose(b,S,_),t==="world"&&S.identity(),a.compose(b,S,_),g.decompose(T,k,P);let U=new Gt.Euler().setFromQuaternion(k,e.rotation.order),[q,x,R]=B.current,X=[q+U.x,x+U.y,R+U.z],Y=new Gt.Quaternion().setFromEuler(new Gt.Euler(X[0],X[1],X[2],e.rotation.order)),oe=(e.parent?.matrixWorld||new Gt.Matrix4).clone().invert(),ae=z.clone().applyMatrix4(oe),ne=o.clone().multiply(e.scale).applyQuaternion(Y),Ie=ae.clone().sub(ne),me=[Ie.x,Ie.y,Ie.z];e.position.set(me[0],me[1],me[2]),e.rotation.set(X[0],X[1],X[2],e.rotation.order),e.updateMatrixWorld(!0),i(),d.current={position:me,rotation:X}},[b,k,a,S,_,i,e,o,T,P,t,v]);return(0,Pp.jsx)("group",{children:(0,Pp.jsx)(pv.PivotControls,{matrix:a,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:O,onDrag:(g,M,A,N)=>E(M,N),onDragEnd:()=>{s.current=!1;let g=d.current;if(d.current=null,g)n(g),h.current=requestAnimationFrame(()=>{h.current=null,r(!1)});else if(m.current.length>0){for(let M of m.current)Ro(M);e.updateMatrixWorld(!0),i(),r(!1)}else r(!1);m.current=[]}})})}var L=require("react/jsx-runtime");function jS(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],c=new Ze.Vector3,l=s[0],d=1/0;for(let h of s){c.fromBufferAttribute(o,h);let f=c.distanceToSquared(a);f<d&&(d=f,l=h)}let u=r.getComponent(l,0),m=i.getComponent(l,0);for(let h=1;h<4;h++){let f=i.getComponent(l,h);f>m&&(m=f,u=r.getComponent(l,h))}return t.skeleton.bones[u]??null}function FS(e){let t=jS(e)??e.object,n=Na(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 HS(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let r=Vr(t,e.anchorNodeName);return r?(r.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(r.matrixWorld),!0):!1}function GS({annotation:e,enabled:t,controlsRef:n,offsetRef:r}){let i=(0,$o.useThree)(m=>m.scene),o=(0,C.useRef)(null),a=(0,C.useRef)(!1),s=(0,C.useMemo)(()=>new Ze.Vector3,[]),c=(0,C.useMemo)(()=>new Ze.Vector3,[]),l=(0,C.useMemo)(()=>new Ze.Vector3,[]),d=e?.anchorNodeName,u=e?.anchorLocalPosition;return(0,C.useEffect)(()=>{o.current=null,a.current=!1},[d,e?.id]),(0,$o.useFrame)(()=>{let m=n.current,h=r.current;if(!t||!m||!h||!d||!u){a.current=!1;return}let f=o.current;if((!f||!f.parent)&&(f=Vr(i,d),o.current=f),!f){a.current=!1;return}f.updateWorldMatrix(!0,!1),s.set(u[0],u[1],u[2]).applyMatrix4(f.matrixWorld),!(a.current&&s.distanceToSquared(c)<1e-8)&&(c.copy(s),a.current=!0,l.copy(s).add(h),m.setLookAt(l.x,l.y,l.z,s.x,s.y,s.z,!0))}),null}function WS(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 XS=.2,hv=Object.freeze({});function qS({enabled:e,speed:t,controlsRef:n}){let r=(0,$o.useThree)(i=>i.invalidate);return(0,$o.useFrame)((i,o)=>{!e||!n.current||(n.current.rotate(o*XS*t,0,!1),r())}),null}function YS(e,t,n){let r=t?.camera;if(!(r instanceof Ze.PerspectiveCamera))return null;let o=(e instanceof Ze.Box3?e:new Ze.Box3().setFromObject(e)).getSize(new Ze.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 $S(e,t){let n=e.camera;if(!(n instanceof Ze.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 mv(e,t,n=.6){let r=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=r}}function Ap(e){let t=Lm(),n=Im(e);return(0,L.jsx)(KS,{...Um(e),contextRecovery:t,engagement:n},t.generation)}function KS({contextRecovery:e,engagement:t,modelUrl:n,tilesetUrl:r,tilesErrorTarget:i=8,tilesCacheSize:o=800,onObjectCatalog:a,modelFormat:s,licenseKey:c,licenseValidationUrl:l,objectBindings:d="auto",selectedObject:u,panelHoveredObject:m,onObjectBindingsChange:h,onObjectSelect:f,onObjectHover:b,onObjectDoubleClick:v,onObjectContextMenu:y,decalMove:S,onObjectEditLeaseChange:_,onSceneLoaded:k,onModelLoaded:T,onLoadError:P,onProgress:B,onCameraControllerChange:D,cameraControllerType:O,onAction:E,onHiddenObjectsChange:g,onCameraChange:M,onViewerReady:A,onTextureUpload:N,onAnimationsReady:z,onAnnotationsChange:U,activeAnnotation:q,onActiveAnnotationChange:x,camera:R,cameraLimits:X,backgroundColor:Y,shadows:K=!0,showObjectBindingDataPanel:oe=!0,customObjectBindingDataPanel:ae,customSceneObjectsPanel:ne,showSceneObjectsPanel:Ie=!0,showDownloadButton:me=!0,downloadFilename:tt="model",showResetButton:dt=!0,showFullscreenButton:pe=!1,showLoadingOverlay:_e=!0,showMouseController:je=!1,mouseControllerPosition:Bt="center-bottom",mouseControllerOpacity:te=1,moveSensitivity:an=.08,zoomSensitivity:nt=1,sceneConfig:Qe,onSceneConfigChange:ze,disableZoom:Jt=!1,zoomOnSelected:Tt=!0,highlightOnHover:kt=!0,enableCameraControls:pt=!0,onAutoFit:de,refitOnResize:Pe=!0,renderMode:Xt="demand",maxDpr:lt=2,preserveDrawingBuffer:Nt=!1,performanceProfile:Q="auto",dracoDecoderPath:ve,ktx2TranscoderPath:ge,meshopt:$e=!0,showMeasureTools:Xe=!1,showUvCheckerButton:De=!1,showExplodeControls:Je=!1,showMaterialVariants:ue=!0,showSectionTools:Be=!1,isolation:Fe,onIsolationChange:Vt,showIsolateControls:kn=!1,cinematic:At,measurementUnit:hn="m",enableXR:Ar=!1,usdzUrl:Nn,arScaleMode:_i="normalized",mobileHandoffUrl:ys,showAnnotationNavigation:qt=!0,showAnnotationOnHover:vr=!1,moveModeEnabled:F=!1,objectTransformSpace:H="world",enableKeyboardNavigation:W=!1,showViewGizmo:Z=!1,overlay:J,unsafe_sceneChildren:le,autoRotate:fe,autoRotateSpeed:Pt,onTexturePositioningChange:Ke,endTexturePositioningRef:ht,texturePositioning:at}){(0,C.useEffect)(()=>()=>t.interrupt(),[t]);let _t=(0,C.useRef)(t);_t.current=t;let he=d==="auto",ft=he?hv:d,{isInsideEditor:zt,activeTab:sn,activeSubTab:Jn}=yc(),xn=zt&&sn==="scene"&&Jn==="Lighting",en=Ey(c,l),[Ji,Uv]=(0,C.useState)({}),[Wc,kp]=(0,C.useState)(void 0),[Xc,Np]=(0,C.useState)(void 0),He=(0,C.useMemo)(()=>{let p=Uu(Qe??Ni,Ji);return Wc!==void 0&&(p={...p,model:{...p.model,materialVariant:Wc}}),Xc!==void 0&&(p={...p,section:{...ki,...p.section,...Xc}}),p},[Qe,Ji,Wc,Xc]),eo=(0,C.useRef)(He);eo.current=He,(0,C.useEffect)(()=>{t.setMaterialVariant(He.model.materialVariant??null)},[He.model.materialVariant,t]);let jv=Qe?.model.materialVariant;(0,C.useEffect)(()=>{kp(void 0)},[jv,n]);let Fv=JSON.stringify(Qe?.section??null);(0,C.useEffect)(()=>{Np(void 0)},[Fv,n]);let Zo=(0,C.useCallback)(p=>{if(ze){let w=eo.current;ze({...w,section:{...ki,...w.section,...p}});return}Np(w=>({...w,...p}))},[ze]),[Vp,Hv]=(0,C.useState)(!1),Gv=(0,C.useCallback)(p=>{if(t.chooseVariant(p,eo.current.model.materialVariant??null),ze){let w=eo.current;ze({...w,model:{...w.model,materialVariant:p}});return}kp(p)},[ze,t]),vs=(0,C.useCallback)(p=>{if(ze){ze(Uu(eo.current,p));return}Uv(w=>{let I={...w};for(let[j,V]of Object.entries(p))I[j]={...w[j],...V};return I})},[ze]),[qc,Yc]=(0,C.useState)(null),[$c,Qo]=(0,C.useState)(null),[Wv,Rr]=(0,C.useState)(null),Yr=(0,C.useRef)(0),[Jo,er]=(0,C.useState)(null),[Xv,zp]=(0,C.useState)(null),ea=He.model.renderer==="uv-checker",to=De?Xv??ea:ea,wi=(0,C.useMemo)(()=>{let p=to?"uv-checker":ea?"pbr":He.model.renderer;return p===He.model.renderer?He:{...He,model:{...He.model,renderer:p}}},[ea,He,to]);(0,C.useEffect)(()=>{zp(null)},[n,He.model.renderer,De,r]);let qv=(0,C.useMemo)(()=>{if(Y)return Y;let p=He.background;return p.enabled&&p.type==="color"?p.color:"#1c1c1d"},[Y,He]),Up=(0,C.useMemo)(()=>({dracoDecoderPath:ve,ktx2TranscoderPath:ge,meshopt:$e}),[ve,ge,$e]),Yv=(0,C.useMemo)(()=>Gf(Q),[Q]),Ue=(0,C.useRef)(null),[$v,Kv]=(0,C.useState)("orbit"),[Zv,jp]=(0,C.useState)(!1),$r=O!==void 0?O:$v,ta=(0,C.useCallback)(p=>{jp(!1),p!==$r&&(Kv(p),D?.(p))},[$r,D]),[xs,Fp]=(0,C.useState)(!1),[Ee,na]=(0,C.useState)(null),ra=!!(at||Ke||ht),Hp=(0,C.useRef)(Ke);Hp.current=Ke,(0,C.useEffect)(()=>{Hp.current?.(Ee)},[Ee]),(0,C.useEffect)(()=>{if(ht)return ht.current=()=>na(null),()=>{ht.current=null}},[]),(0,C.useEffect)(()=>{Ue.current&&(Ue.current.dollySpeed=Math.max(nt,0))},[nt]),(0,C.useEffect)(()=>{Ue.current&&(Ue.current.enabled=pt&&!xs&&!Vp&&!Ee)},[pt,xs,Vp,Ee]);let Kc=(0,C.useRef)(null),Gp=(0,C.useRef)(new Map),Wp=(0,C.useRef)(null),Xp=(0,C.useRef)(null),Vn=(0,C.useRef)(null),no=(0,C.useRef)({});(0,C.useEffect)(()=>()=>{for(let p of Object.values(no.current))URL.revokeObjectURL(p)},[]);let mn=(0,C.useRef)({}),[,Qv]=(0,C.useState)(0),qp=(0,C.useCallback)(()=>{Qv(p=>p+1)},[]),_s=(0,C.useRef)({}),Yp=(0,C.useRef)(null),tr=Am(pe),xr=(0,C.useRef)(null),[Kr,Jv]=(0,C.useState)(null),ex=(0,C.useCallback)(p=>{xr.current=p,Jv(p)},[]),ws=(0,C.useRef)(new Set),Si=(0,C.useRef)(null);(0,C.useEffect)(()=>{let p=Kr;if(!p||!W||!pt||F)return;let w=new Set(["w","a","s","d"," ","c"]),I=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),j=0,V=ce=>ce.code==="Space"?" ":ce.key.toLowerCase(),ee=()=>{ws.current.clear(),j=0,Si.current!==null&&(cancelAnimationFrame(Si.current),Si.current=null)},re=ce=>{let Ae=Ue.current,Re=ws.current;if(!Ae||Re.size===0){Si.current=null,j=0;return}let Et=j?Math.min((ce-j)/1e3,.05):1/60;j=ce;let Lt=Math.max(Ae.distance*.75,.01)*Et;Re.has("w")&&Ae.forward(Lt,!1),Re.has("s")&&Ae.forward(-Lt,!1),Re.has("a")&&Ae.truck(-Lt,0,!1),Re.has("d")&&Ae.truck(Lt,0,!1),Re.has(" ")&&Ae.truck(0,Lt,!1),Re.has("c")&&Ae.truck(0,-Lt,!1),Si.current=requestAnimationFrame(re)},Se=ce=>{if(ce.target!==p){ee();return}if(I.has(ce.key)){let Re=Ue.current;if(!Re)return;ce.preventDefault();let Et=Math.PI/90,Lt=Math.max(Re.distance*.05,.01);ce.key==="ArrowUp"?ce.shiftKey?Re.forward(Lt,!0):Re.rotate(0,-Et,!0):ce.key==="ArrowDown"?ce.shiftKey?Re.forward(-Lt,!0):Re.rotate(0,Et,!0):ce.key==="ArrowLeft"?Re.rotate(-Et,0,!0):Re.rotate(Et,0,!0);return}let Ae=V(ce);w.has(Ae)&&(ce.preventDefault(),ws.current.add(Ae),Si.current===null&&(Si.current=requestAnimationFrame(re)))},Le=ce=>{ws.current.delete(V(ce))};return p.addEventListener("keydown",Se),p.addEventListener("keyup",Le),p.addEventListener("blur",ee),()=>{p.removeEventListener("keydown",Se),p.removeEventListener("keyup",Le),p.removeEventListener("blur",ee),ee()}},[Kr,pt,W,F]);let Zc=(0,C.useRef)(null),[tx,$p]=(0,C.useState)(ft),[ro,Ss]=(0,C.useState)({}),[Kp,Qc]=(0,C.useState)(null),[Jc,Zp]=(0,C.useState)(null),[nx,rx]=(0,C.useState)(null),[ix,ox]=(0,C.useState)(null),[nr,Qp]=(0,C.useState)(null),[ax,Jp]=(0,C.useState)({}),tn=(0,C.useRef)(null),Ms=(0,C.useRef)(null),eu=(0,C.useRef)(0),eh=(0,C.useRef)(null),[sx,lx]=(0,C.useState)(0),Zr=(0,C.useRef)(!1),ia=(0,C.useRef)(!1),tu=(0,C.useRef)(!!R);tu.current=!!R;let Lr=(0,C.useRef)(null),[oa,aa]=(0,C.useState)(!!n),[io,sa]=(0,C.useState)(!n||!!de||!!R),[rr,th]=(0,C.useState)(!1),[nh,rh]=(0,C.useState)([]),[ih,nu]=(0,C.useState)(!1),[cx,ru]=(0,C.useState)(null),[oh,la]=(0,C.useState)(!1),[ah,ux]=(0,C.useState)(0),iu=(0,C.useRef)(""),sh=(0,C.useRef)(""),[lh,ch]=(0,C.useState)(!1),[uh,dx]=(0,C.useState)(null),[px,dh]=(0,C.useState)(!1),[ca,ph]=(0,C.useState)({total:0,missing:0}),[hx,hh]=(0,C.useState)("Loading model..."),[mx,ou]=(0,C.useState)(null),ln=(0,C.useRef)({}),ua=(0,C.useCallback)(()=>{let p=Ue.current;if(!p||Lr.current)return;let w=p.getPosition(new Ze.Vector3),I=p.getTarget(new Ze.Vector3);Lr.current={position:[w.x,w.y,w.z],target:[I.x,I.y,I.z]}},[]),[da,Cs]=(0,C.useState)(!1),[Ts,mh]=(0,C.useState)(0),[au,fh]=(0,C.useState)(!1);(0,C.useEffect)(()=>{mh(0),fh(!1)},[n,r]);let Mi=(0,C.useMemo)(()=>{let p=He.cinematic,w=p?.enabled?{waypoints:p.waypoints,duration:p.duration,loop:p.loop,autoPlay:p.autoPlay}:null;return At===void 0?w&&(w.waypoints?.length??0)>=2?w:null:At===!1?null:At===!0?w??{}:{...w??{},...At}},[At,He]),[Ci,Pn]=(0,C.useState)(!1),[fx,Ti]=(0,C.useState)(!1),su=(0,C.useRef)(!1);(0,C.useEffect)(()=>{Pn(!1),Ti(!1),su.current=!1},[n,r]),(0,C.useEffect)(()=>{!Mi?.autoPlay||su.current||rr&&io&&!oa&&(su.current=!0,Pn(!0),Ti(!1))},[Mi,rr,io,oa]);let gx=(0,C.useCallback)(()=>{Pn(!1),Ti(!0)},[]),{captureVideo:lu,cancelVideo:cu,isRecording:gh,recording:Rt,progress:bx,onProgress:yx}=Em({rendererCaptureRef:Vn,controlsRef:Ue,cinematicConfig:Mi,ready:e.status==="ready"&&rr&&io&&!oa,modelUrl:`${n}|${r??""}`,onCaptureStart:gx});(0,C.useEffect)(()=>{e.status==="lost"&&(t.interrupt(),cu(),Pn(!1),Ue.current?.stop())},[e.status,cu,t]);let{xrStore:Pi,presenterRef:vx,arSupported:uu,vrSupported:bh,quickLookSupported:yh,resolvedMobileHandoffUrl:Ps,isMobileHandoffOpen:vh,arOverlay:xx,openMobileHandoff:_x,closeMobileHandoff:xh,openQuickLook:wx,handleARStateChange:Sx}=$f({enableXR:Ar,usdzUrl:Nn,mobileHandoffUrl:ys,engagement:t}),[_r,_h]=(0,C.useState)(()=>Qe?.annotations??[]);(0,C.useEffect)(()=>{if(_r.length>0){let p=_r.reduce((w,I)=>Math.max(w,I.id),0);Rs.current=p}else Rs.current=0},[_r]);let[_n,Es]=(0,C.useState)(null),[Qr,As]=(0,C.useState)({title:"",description:""}),Rs=(0,C.useRef)(0),[Mx,wh]=(0,C.useState)(null),[zn,oo]=(0,C.useState)(-1),[Sh,Ls]=(0,C.useState)(!1),ao=(0,C.useRef)(null),St=(0,C.useMemo)(()=>[..._r].sort((p,w)=>p.id-w.id),[_r]),ir=He.section??ki,Mh=ue&&rr&&nh.length>1,Ch=dt||me||pe&&tr.supported||qt&&St.length>0,Os=(0,C.useMemo)(()=>zn<0||zn>=St.length?null:St[zn],[zn,St]),wr=(0,C.useCallback)(p=>{if(q!==void 0){x?.(p);return}wh(p?{annotation:p}:null)},[q,x]),so=(0,C.useCallback)(p=>{let w=Ue.current,I=tn.current;if(!w)return;let j=new Ze.Vector3,V=Gp.current.get(p.id);V?j.copy(V):I&&HS(p,I,j)||j.set(p.worldPosition[0],p.worldPosition[1],p.worldPosition[2]),Kc.current=null;let ee=w.smoothTime;w.smoothTime=.6;let re=p.worldNormal;if(I){let Se=new Ze.Box3().setFromObject(I),Le=new Ze.Vector3;Se.getCenter(Le);let ce=new Ze.Vector3;Se.getSize(ce);let Ae=ce.length()*.2,Re;re?Re=new Ze.Vector3(re[0],re[1],re[2]):Re=j.clone().sub(Le),Re.lengthSq()<1e-6&&Re.set(0,0,1),Re.normalize();let Et=Math.max(Ae*.6,.3),Lt=j.clone().add(Re.multiplyScalar(Et));w.setPosition(Lt.x,Lt.y,Lt.z,!0),p.anchorNodeName&&p.anchorLocalPosition&&(Kc.current=Lt.clone().sub(j))}w.setTarget(j.x,j.y,j.z,!0),ao.current&&clearTimeout(ao.current),ao.current=setTimeout(()=>{w.smoothTime=ee,ao.current=null},800),wr(p)},[wr]),Cx=(0,C.useCallback)(()=>{St.length!==0&&(t.startTour(St.length),Cs(!0),oo(0),so(St[0]))},[St,so,t]),Tx=(0,C.useCallback)(()=>{if(St.length===0||zn<0)return;Ls(!0);let p=(zn-1+St.length)%St.length;oo(p),so(St[p]),setTimeout(()=>Ls(!1),500)},[zn,St,so]),Px=(0,C.useCallback)(()=>{if(St.length===0||zn<0)return;if(zn===St.length-1){if(t.completeTour(),Cs(!1),oo(-1),wr(null),Ue.current&&Lr.current){let w=Lr.current;Ue.current.setLookAt(w.position[0],w.position[1],w.position[2],w.target[0],w.target[1],w.target[2],!0)}return}Ls(!0);let p=zn+1;oo(p),so(St[p]),setTimeout(()=>Ls(!1),500)},[zn,St,so,wr,t]),Ex=(0,C.useCallback)(()=>{if(t.stopTour(),Cs(!1),oo(-1),wr(null),Ue.current&&Lr.current){let p=Lr.current;Ue.current.setLookAt(p.position[0],p.position[1],p.position[2],p.target[0],p.target[1],p.target[2],!0)}},[wr,t]);(0,C.useEffect)(()=>{_t.current.stopTour("annotations-changed"),oo(-1),Cs(!1)},[St.length]),(0,C.useEffect)(()=>()=>{ao.current&&clearTimeout(ao.current)},[]),(0,C.useEffect)(()=>{Os&&da&&wr(Os)},[Os,wr,da]),(0,C.useEffect)(()=>{if(Qe?.annotations===void 0)return;let p=Qe.annotations.map(w=>({...w,localPosition:w.localPosition??w.worldPosition}));_h(p)},[Qe?.annotations]);let pa=(0,C.useCallback)(()=>{if(q!==void 0){x?.(null);return}wh(null)},[q,x]),ha=q!==void 0?q:Mx?.annotation??null,ma=(0,C.useMemo)(()=>ha?_r.find(w=>w.id===ha.id)??null:null,[ha,_r]);(0,C.useEffect)(()=>{ha&&!ma&&pa()},[ha,ma,pa]);let fa=!he&&h!==void 0,we=fa?ft:tx;ln.current=we,(0,C.useEffect)(()=>{if(!Ee)return;let p=we[Ee.objectKey]?.style?.material?.[Ee.textureKey]?.path;(!ra||!p)&&na(null)},[we,ra,Ee]);let du=(0,C.useRef)({}),[Ds,Ax]=(0,C.useState)({});(0,C.useEffect)(()=>{let p={...Ds},w=!1,I=new Set;for(let[j,V]of Object.entries(we)){I.add(j);let ee=V.style?.material,re=du.current[j]??{},Se={};for(let ce of ii){let Ae=ee?.[ce]?.path;Ae&&(Se[ce]=Ae,Ae!==re[ce]&&(p[j]!==ce&&(w=!0),p[j]=ce))}let Le=p[j];if(Le&&!Se[Le]){let ce=ii.find(Ae=>!!Se[Ae]);ce?p[j]=ce:delete p[j],w=!0}du.current[j]=Se}for(let j of Object.keys(p))I.has(j)||(delete p[j],delete du.current[j],w=!0);w&&Ax(p)},[we]);let Rx=(0,C.useMemo)(()=>Object.entries(we).map(([p,w])=>JSON.stringify([p,w.modelObjectId,w.transform??null])).sort().join(""),[we]),{measureMode:lo,measureModeRef:Th,measurePoints:Ph,measurementTool:Eh,areaClosed:Ah,measurementError:Lx,selectMeasurementTool:Ox,undoMeasurementPoint:Dx,finishMeasureArea:Ix,snapMode:Bx,setSnapMode:kx,snapPreview:Nx,handleMeasurePointerMove:Vx,clearSnapPreview:Rh,showDimensions:Lh,measureBox:pu,modelBounds:zx,refreshBounds:Oh,clearMeasurements:Ux,toggleMeasureMode:jx,toggleDimensions:Fx,handleMeasurePointerDown:Hx,handleMeasureClick:Gx}=jf({canvasAreaRef:xr,controlsRef:Ue,sceneRef:tn,modelUrl:`${n}|${r??""}`,modelRotation:He.model.rotation,bindingTransformSignature:Rx,modelLoaded:rr,enabled:Xe&&!Rt}),[Wx,Xx]=(0,C.useState)(34),{isDownloading:hu,downloadMenuOpen:qx,uvExportError:Dh,toggleDownloadMenu:Yx,handleDownloadMesh:$x,handleDownloadScreenshot:Kx,handleDownloadUvLayout:Zx,handleDownloadVideo:Ih,videoFormat:mu,setVideoFormat:Qx,videoExportError:Bh}=kf({sceneRef:tn,materialRefs:_s,rendererCaptureRef:Vn,objectBindings:we,downloadFilename:tt,captureVideo:lu}),kh=(0,C.useMemo)(()=>Object.fromEntries(Object.entries(we).filter(([,p])=>p.visible===!1).map(([p])=>[p,!0])),[we]),Or=(0,C.useMemo)(()=>{let p=new WeakMap,w=new Map,I=new Map;for(let[j,V]of Object.entries(we))p.set(V,j),w.has(V.id)||w.set(V.id,j),I.has(V.modelObjectId)||I.set(V.modelObjectId,j);return{byReference:p,byId:w,byModelObjectId:I}},[we]),En=(0,C.useCallback)(p=>p?Or.byReference.get(p)??Or.byModelObjectId.get(p.modelObjectId)??Or.byId.get(p.id)??null:null,[Or]),fu=u!==void 0,ga=fu?u??null:ix,fn=En(ga);(0,C.useEffect)(()=>{t.setSelectedPart(fn)},[fn,t]);let gu=fn?mn.current[fn]??null:null,Jx=fn?Ds[fn]:void 0,Nh=En(kt?m??Jc??nx:null),e0=Nh?mn.current[Nh]??null:null,Vh=(0,C.useCallback)(p=>{rx(p),b?.(p)},[b]),zh=oe&&ga!==null&&fn!==null,ba=(fn?we[fn]:null)??ga,ya=ba&&(ba.modelObjectId||ba.id)||null,co=ya?ax[ya]??null:null;(0,C.useEffect)(()=>{fa||$p(ft)},[fa,ft]),(0,C.useEffect)(()=>{g?.(kh)},[kh,g]);let uo=(0,C.useCallback)((p,w)=>{if($r==="pointerLock"){ta("orbit");return}p&&w?t.viewPart({objectId:p.id,objectKey:En(p)??(p.modelObjectId||p.id),label:p.label,source:w}):p||t.setSelectedPart(null),fu||ox(p),f?.(p)},[$r,ta,fu,f,En,t]),Un=(0,C.useCallback)(p=>{fa||$p(p),h?.(p)},[fa,h]),Uh=(0,C.useRef)(null),Is=(0,C.useCallback)(p=>{if(!he)return;let w=`${n}
|
|
3689
|
-
${r??""}`,I=Uh.current===w?ln.current:hv;Uh.current=w;let j=xc(p);for(let V of Object.keys(j))I[V]&&(j[V]=I[V]);Un(j)},[he,n,r,Un]),Bs=(0,C.useRef)({}),po=(0,C.useCallback)(p=>{let w=Gm(mn.current[p]),I=ln.current[p]?.style?.material,j=I?.emissive??w.color,V=I?.emissiveIntensity??w.intensity;return{color:j,intensity:V,on:j!=="#000000"&&V>0}},[]),va=(0,C.useCallback)((p,w)=>{let I=ln.current,j=I[p];j&&Un({...I,[p]:{...j,style:{...j.style,material:{...j.style?.material,...w}}}})},[Un]),bu=p=>p==="#000000"?"#ffffff":p,t0=(0,C.useCallback)(p=>{let w=fn;if(!w||!p)return;let I=ln.current[w];I&&Un({...ln.current,[w]:{...I,transform:{...I.transform,...p}}})},[Un,fn]),or=(0,C.useCallback)((p,w)=>we[p]?p:w?En(w):Or.byId.get(p)??Or.byModelObjectId.get(p)??null,[we,En,Or]),gn=(0,C.useCallback)((p,w)=>{let I=or(p),j=I?we[I]:void 0;!I||!j||Un({...we,[I]:{...j,style:w(j.style)}})},[or,we,Un]),An=(0,C.useCallback)(()=>{if(nr){let p=ro[nr.objectId]?.hex;p!==void 0&&(gn(nr.objectId,w=>({...w,material:{...w?.material,baseColor:p}})),Ss(w=>({...w,[nr.objectId]:{}})))}Qp(null)},[nr,ro,gn]),jh=(0,C.useCallback)(()=>{uo(null),Qc(null),An()},[uo,An]),yu=(0,C.useCallback)((p,w,I,j,V)=>{let ee=Yp.current,re=xr.current,Se=Ue.current?.camera;if(!ee)return{objectId:p,x:24,y:24};let Le=ee.getBoundingClientRect(),ce=12,Ae=Le.width-w-ce,Re=Le.height-I-ce,Et=Math.max(ce,(Le.width-w)/2),Lt=Math.max(ce,(Le.height-I)/2),xo=or(p,j),_a=xo?mn.current[xo]:null,Sr=(_o,Li)=>Li<=ce?ce:Math.min(Math.max(_o,ce),Li);if(re&&Se&&_a){let _o=re.getBoundingClientRect(),Li=new Ze.Vector3;new Ze.Box3().setFromObject(_a).getCenter(Li),Li.project(Se);let A0=(Li.x+1)/2*_o.width+(_o.left-Le.left),R0=(1-Li.y)/2*_o.height+(_o.top-Le.top);return{objectId:p,x:Sr(A0+24,Ae),y:Sr(R0-I/2,Re)}}let Au=typeof V?.screenX=="number"?V.screenX-Le.left:Et,Ru=typeof V?.screenY=="number"?V.screenY-Le.top:Lt;return{objectId:p,x:Sr(Au,Ae),y:Sr(Ru,Re)}},[or]),ks=(0,C.useCallback)(p=>{let{objectId:w,action:I,binding:j}=p;switch(Qc(p),I.id){case"toggle-visibility":{let V=w;j?.modelObjectId&&(V=Or.byModelObjectId.get(j.modelObjectId)??V);let ee=we[V],re=ee?.visible===!1;ee&&Un({...we,[V]:{...ee,visible:re}});break}case"change-color":An(),Jp(V=>{if(!(w in V))return V;let ee={...V};return delete ee[w],ee}),Ss(V=>{let ee=or(w,j)??w,re=V[w]?.hex,Se=we[ee]?.style?.material?.baseColor;return{...V,[w]:{...V[w],hex:re??Se??"#ffffff"}}}),Qp(yu(w,225,250,j,p));break;case"change-material":An(),Jp(V=>{if(w in V){let ee={...V};return delete ee[w],ee}return{...V,[w]:yu(w,300,320,j,p)}});break;case"add-text":case"add-image":{An();let V=I.id;Yr.current++,Rr(null),er(null),Qo(ee=>ee?.objectId===w&&ee.kind===V?null:{objectId:w,kind:V,activeId:null});break}case"toggle-light":case"change-light-color":case"set-brightness":{let V=or(w,j);if(!V)break;let ee=Hm(eo.current,we,V);if(I.id==="toggle-light"){if(ee.length>0){let ce=!ee.some(Ae=>Ae.visible);vs(Object.fromEntries(ee.map(Ae=>[Ae.id,{visible:ce}])));break}let Le=po(V);Le.on?(Bs.current[V]=Le.intensity,va(V,{emissiveIntensity:0})):va(V,{emissive:bu(Le.color),emissiveIntensity:Bs.current[V]??1});break}let re=I.id,Se=ee.length>0?null:po(V);Yc(Le=>Le?.objectId===w&&Le.kind===re?null:{objectId:w,kind:re,target:Se?{type:"glow",objectKey:V,baseIntensity:Se.on?Se.intensity:Bs.current[V]??1}:{type:"lights",lightIds:ee.map(ce=>ce.id),baseIntensity:Object.fromEntries(ee.map(ce=>[ce.id,ce.intensity]))},percent:Se&&!Se.on?0:100});break}default:break}E?.(p)},[Un,va,vs,po,we,yu,E,An,or,Or]);(0,C.useEffect)(()=>{if(nr)return window.addEventListener("pointerdown",An),()=>window.removeEventListener("pointerdown",An)},[nr,An]),(0,C.useEffect)(()=>{if(!ma)return;let p=w=>{if(Zc.current&&!Zc.current.contains(w.target)){if(w.target.closest?.(".ri-annotationMarker"))return;pa()}};return document.addEventListener("mousedown",p),document.addEventListener("touchstart",p),()=>{document.removeEventListener("mousedown",p),document.removeEventListener("touchstart",p)}},[ma,pa]),(0,C.useEffect)(()=>{if(!_n)return;let p=w=>{let I=w.target;if(I.closest?.(".ri-annotationPopup")||I.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let j=xr.current;!j||!j.contains(I)||(Es(null),As({title:"",description:""}))};return document.addEventListener("mousedown",p,!0),document.addEventListener("touchstart",p,!0),()=>{document.removeEventListener("mousedown",p,!0),document.removeEventListener("touchstart",p,!0)}},[_n]);let Fh=(0,C.useCallback)((p,w)=>{let I=no.current[p];I&&URL.revokeObjectURL(I),w.startsWith("blob:")?no.current[p]=w:delete no.current[p],gn(p,j=>({...j,material:{...j?.material,texture:{path:w}}}))},[gn]),n0=p=>{let w=p.target.files?.[0],I=Xp.current;if(!w||!I)return;let j=or(I);j&&(N?N(w,j).then(V=>Fh(j,V),V=>console.error("onTextureUpload failed:",V)):Fh(j,URL.createObjectURL(w)),p.target.value="")},Hh=p=>{Xp.current=p,Wp.current?.click()},Gh=p=>{let w=or(p);if(!w)return;gn(w,j=>j?.material?.texture?{...j,material:{...j.material,texture:void 0}}:j);let I=no.current[w];I&&(URL.revokeObjectURL(I),delete no.current[w])},ho=!!at,ar=typeof at=="object"?at:void 0,r0=(0,C.useCallback)((p,w,I)=>{if(ar?.onOffsetChange){ar.onOffsetChange(p,w,I);return}gn(p,j=>{let V=j?.material?.texture;if(!V?.path)return j;let ee=V.offset??[0,0],re=[ee[0],ee[1]];return re[w]=I,{...j,material:{...j?.material,texture:{...V,offset:re}}}})},[gn,ar]),i0=(0,C.useCallback)((p,w)=>{if(ar?.onRotationChange){ar.onRotationChange(p,w);return}gn(p,I=>{let j=I?.material?.texture;if(!j?.path)return I;let V=(w%360+360)%360;return{...I,material:{...I?.material,texture:{...j,rotation:V*Math.PI/180}}}})},[gn,ar]),o0=(0,C.useCallback)(()=>{na(null),ar?.onEndPositioning?.()},[ar]),vu=(0,C.useRef)(A);vu.current=A;let sr=(0,C.useCallback)(()=>{let p=Ue.current;!p||!vu.current||vu.current({objectBindings:ln.current,homeCameraState:Lr.current,captureImage:w=>gh()?Promise.reject(new Error("Wait for video export to finish before capturing an image.")):Xs(Vn.current,w),captureVideo:lu,invalidate:()=>Vn.current?.invalidate(),raw:{controls:p,scene:tn.current,nodes:mn.current}})},[lu,gh]),mo=(0,C.useCallback)(async(p=!1)=>{let w=Ue.current,I=Ms.current??tn.current;if(!w||!I)return!1;try{if(p){let j=(I instanceof Ze.Box3?I:new Ze.Box3().setFromObject(I)).getBoundingSphere(new Ze.Sphere),V=j.center.clone(),re=w.getPosition(new Ze.Vector3).clone().sub(w.getTarget(new Ze.Vector3));re.lengthSq()<1e-6&&re.set(0,0,1),re.normalize();let Se=Math.max(j.radius*10,20),Le=V.clone().add(re.multiplyScalar(Se));await w.setLookAt(Le.x,Le.y,Le.z,V.x,V.y,V.z,!1)}return sa(!0),await mv(w,()=>w.fitToBox(I,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(j=>{let V=performance.now(),ee=()=>{w.active===!1||performance.now()-V>8e3?(w.dispatchEvent({type:"update"}),Vn.current?.invalidate(),j()):(Vn.current?.invalidate(),setTimeout(ee,100))};setTimeout(ee,100)}),Zr.current=!0,ua(),sr(),!0}catch(j){return console.error("Fit scene error:",j),!1}},[ua,sr]);(0,C.useEffect)(()=>{if(Zr.current=!1,ia.current=!1,Lr.current=null,tn.current=null,Ms.current=null,th(!1),rh([]),nu(!1),ru(null),la(!1),iu.current="",ph({total:0,missing:0}),hh("Loading model..."),ou(null),!n){aa(!1),sa(!0);return}aa(!0),sa(!!de||tu.current);let p=!1,w=null,I=V=>{w=setTimeout(j,V)},j=()=>{if(p||Zr.current||ia.current)return;let V=Ms.current??tn.current;if(!Ue.current||!V){I(100);return}if(eu.current=YS(V,Ue.current,X?.maxDistance)??eu.current,Ry(Ue.current)){Zr.current=!0,ua(),sr(),aa(!1),sa(!0),Vn.current?.invalidate();return}ia.current=!0,(de?de():tu.current?Promise.resolve(!0):mo(!0)).then(re=>{Zr.current=re!==!1,Zr.current?(ua(),sr(),aa(!1)):p||I(100)}).catch(()=>{Zr.current=!1,p||I(100)}).finally(()=>{ia.current=!1})};return I(50),()=>{p=!0,w&&clearTimeout(w)}},[ua,X?.maxDistance,mo,n,sr,de,r]),(0,C.useEffect)(()=>{if(!Pe)return;let p=Kr;if(!p)return;let w=null,I=new ResizeObserver(()=>{!Zr.current||ia.current||(w&&clearTimeout(w),w=setTimeout(()=>{mo()},150))});return I.observe(p),()=>{I.disconnect(),w&&clearTimeout(w)}},[Kr,mo,Pe]);let Wh=(0,C.useCallback)(p=>{if(Th.current||(Pn(!1),An(),Qc(null),uo(p,"canvas"),Jt||!Tt))return;let w=Ue.current,I=En(p),j=I?mn.current[I]:null;w&&p.cameraState?.position&&p.cameraState?.target?(w.setPosition(p.cameraState.position[0],p.cameraState.position[1],p.cameraState.position[2],!0),w.setTarget(p.cameraState.target[0],p.cameraState.target[1],p.cameraState.target[2],!0)):w&&j&&w.fitToBox(j,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[uo,An,En,Jt,Tt]),Xh=(0,C.useCallback)(p=>{if(!ra)return!1;let w=En(p);if(!w)return!1;let I=Ds[w];return I?(bo.current=!1,Ri.current=null,na({objectKey:w,textureKey:I}),!0):!1},[ra,En,Ds]),xu=(0,C.useRef)(!1),Ei=(0,C.useCallback)((p,w)=>{let I=ln.current,j=I[p];if(!j)return;let V=w(j.decals??[]);Un({...I,[p]:{...j,decals:V.length>0?V:void 0}})},[Un,we]),a0=(0,C.useMemo)(()=>{if(!Jo)return null;let{objectKey:p,decalId:w}=Jo,I=we[p],j=I?.decals?.find(V=>V.id===w);return j?{objectId:I.modelObjectId??p,decal:j,onCancel:()=>er(null),onCommit:V=>{Ei(p,ee=>ee.map(re=>re.id===w?{...re,...V}:re)),er(null)}}:null},[Jo,we,Ei]),fo=S??a0,_u=(0,C.useCallback)((p,w)=>{Yr.current++;let I=ln.current[p],j=mn.current[I?.modelObjectId??p],V=Mf(j,Ue.current?.camera);if(!V)return Rr("Could not find a surface on this object for the decal."),!1;let ee={...w,...V};return Ei(p,re=>[...re,ee]),Rr(null),Qo(re=>re&&{...re,activeId:ee.id}),er({objectKey:p,decalId:ee.id}),!0},[Ei]),Ns=(0,C.useCallback)(p=>{let w=ln.current[p],I=mn.current[w?.modelObjectId??p]?.geometry;if(!I)return .2;I.boundingBox||I.computeBoundingBox();let j=I.boundingBox?.getSize(new Ze.Vector3),V=j?Math.max(j.x,j.y,j.z):0;return V>0&&Number.isFinite(V)?V/3:.2},[]),qh=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,Yh=(0,C.useRef)([]);(0,C.useEffect)(()=>()=>{for(let p of Yh.current)URL.revokeObjectURL(p)},[]);let s0=(0,C.useCallback)(async(p,w,I)=>{let j=++Yr.current;er(null);let V;if(N){if(V=await N(I,p),j!==Yr.current)return}else V=URL.createObjectURL(I),Yh.current.push(V);_u(w,{id:qh(),image:V,size:Ns(w)})},[Ns,N,_u]);(0,C.useEffect)(()=>{Yr.current++,Rr(null),er(null)},[ya,n]);let $h=(0,C.useMemo)(()=>pc(we,wi.styleRules),[we,wi.styleRules]),[l0,Kh]=(0,C.useState)(null);(0,C.useEffect)(()=>{Kh(null)},[n]);let go=Fe!==void 0?Fe:l0,wu=(0,C.useCallback)(p=>{Fe===void 0&&Kh(p),Vt?.(p)},[Fe,Vt]),Ai=(0,C.useMemo)(()=>hc($h,go),[$h,go]),Dr=(0,C.useMemo)(()=>Ai.setAside.size>0?ps(we,go):null,[Ai,we,go]),c0=(0,C.useCallback)(p=>{let w=En(p),I=w!==null&&Dr?.size===1&&Dr.has(w);wu(I?null:{...go,target:p.id})},[wu,go,Dr]),{sourceOf:Jr}=Ai,Zh=(0,C.useCallback)(p=>{let w=Jr(p);Wh(w)},[Wh,Jr]),Qh=(0,C.useCallback)(p=>Vh(p&&Jr(p)),[Vh,Jr]),Jh=(0,C.useCallback)((p,w)=>{let I=Jr(p);return v?.({binding:I,...w})===!0?(xu.current=!0,!0):Xh(I)},[v,Xh,Jr]),em=(0,C.useMemo)(()=>y?(p,w)=>y({binding:Jr(p),...w}):void 0,[y,Jr]),tm=(0,C.useCallback)(p=>{if(uo(p,"panel"),Jt)return;let w=Ue.current,I=En(p),j=I?mn.current[I]:null;if(!w||!j)return;let V=p.cameraState;V?.position&&V?.target?(w.setPosition(V.position[0],V.position[1],V.position[2],!0),w.setTarget(V.target[0],V.target[1],V.target[2],!0)):w.fitToBox(j,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[uo,En,Jt]);(0,C.useEffect)(()=>{sr()},[sr,we]);let nm=(0,C.useCallback)((p,w)=>{$S(w,eu.current),M?.(Xr(p,w)),sr()},[sr,M]),u0=(0,C.useCallback)(p=>{eh.current=new Set(p.map(w=>w.name)),lx(w=>w+1),Is(p.map(w=>w.name)),a?.(p)},[Is,a]),d0=(0,C.useCallback)(p=>{Ms.current=p,Vn.current?.invalidate()},[]),rm=(0,C.useCallback)(p=>{tn.current=p,Oh(p),ph(WS(p));let w=Ou(p);dx(w>Ma?w:null),dh(!1),ou(null),w>Ma&&hh(`Preparing large model (${Math.round(w/1e6)}M triangles) \u2014 the first display can take a while on this device...`),th(!0),rh(yl(p)),nu(!1),ru(null),ch(!1),r||(a&&a(uy(p)),Is(Zy(p))),k?.(p),T?.(Oy(p)),sr()},[Is,sr,T,a,k,Oh,r]),im=(0,C.useCallback)(p=>{aa(!1),sa(!0),nu(!0),ru(p),P?.(p)},[P]),p0=(0,C.useCallback)(p=>{p.lengthComputable&&p.total>0&&ou(p.loaded/p.total*100),B?.(p)},[B]),om=(0,C.useCallback)((p,w,I)=>{if(!ze)return;let j={...He,lighting:{...He.lighting,lights:He.lighting.lights.map(V=>V.id===p?{...V,position:w,...I?{rotation:I}:{}}:V)}};ze(j)},[He,ze]);(0,C.useEffect)(()=>{let p=tn.current;if(!rr||!p){la(!1);return}let w=Object.entries(we);if(w.length===0){la(!1);return}let I=r?eh.current:new Set(Object.keys(si(p).nodesById));if(!I||I.size===0){la(!1);return}let j=w.map(([ee,re])=>re.modelObjectId??ee).filter(ee=>!I.has(ee));la(j.length>0),ux(j.length);let V=j.join(`
|
|
3690
|
-
|
|
3691
|
-
`);if(p.length>0&&w!==sh.current){let I=p.slice(0,10).join(", "),j=p.length>10?` and ${p.length-10} more`:"";console.warn(`[react-immersive] ${p.length} action button(s) do nothing because ModelViewer has no onAction handler: ${I}${j}. ModelViewer itself handles ${Pa.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}sh.current=w},[we,zt,E]);let Su=(0,C.useCallback)(async()=>{if(de){await de();return}let p=Ue.current;if(!p)return;let w=Lr.current;try{w?await mv(p,()=>p.setLookAt(w.position[0],w.position[1],w.position[2],w.target[0],w.target[1],w.target[2],!0)):await mo()}catch(I){console.error("Reset camera error:",I)}},[de,mo]),hM=(0,C.useCallback)(()=>{Ti(!1),Pn(!0)},[]),mM=(0,C.useCallback)(()=>{Pn(!1)},[]),h0=(0,C.useCallback)(()=>{Pn(!1),Ti(!0),setTimeout(()=>{Su()},100)},[Su]),m0=(0,C.useCallback)((p,w)=>{nm(p,w)},[nm]),am=1,f0=4,g0=.0015,b0=.1,y0=8,Ri=(0,C.useRef)(null),bo=(0,C.useRef)(!1),Mu=(0,C.useRef)([0,0]),Vs=(0,C.useRef)([0,0]),zs=(0,C.useRef)(1),jn=(0,C.useRef)(null),Us=(0,C.useCallback)((p,w)=>{let I=Ee;if(!I)return;let j=ln.current[I.objectKey]?.style?.material?.[I.textureKey],V=j?.path;if(!V)return;let ee=j?.rotation??0,re=lr(I.textureKey),Se=La(V,re),Le=_s.current[I.objectKey],ce=Array.isArray(Le)?Le:Le?[Le]:[],Ae=Ks[I.textureKey];for(let Re of ce){let Et=Re;Ae in Et&&(Et[Ae]=el(Et.userData,I.textureKey,Se,V,p,w,ee))}Vn.current?.invalidate()},[Ee]),v0=(0,C.useCallback)(p=>{if(!Ee)return;p.currentTarget.setPointerCapture?.(p.pointerId),Ri.current={x:p.clientX,y:p.clientY},bo.current=!1;let w=ln.current[Ee.objectKey]?.style?.material?.[Ee.textureKey];if(Mu.current=w?.offset??[0,0],Vs.current=Mu.current,zs.current=w?.scale??1,jn.current===null){let I=()=>{Vn.current?.invalidate(),jn.current=requestAnimationFrame(I)};jn.current=requestAnimationFrame(I)}},[Ee]),Cu=(0,C.useCallback)(p=>{if(!Ee||!Ri.current)return;let w=xr.current,I=w?.clientWidth||1,j=w?.clientHeight||1,V=p.clientX-Ri.current.x,ee=p.clientY-Ri.current.y;if(!bo.current&&Math.hypot(V,ee)<f0)return;bo.current=!0;let re=-(V/I)*am,Se=ee/j*am,[Le,ce]=Mu.current,Ae=[Le+re,ce+Se];Vs.current=Ae,Us(Ae,zs.current),gn(Ee.objectKey,Re=>({...Re,material:{...Re?.material,[Ee.textureKey]:{...Re?.material?.[Ee.textureKey],path:ln.current[Ee.objectKey]?.style?.material?.[Ee.textureKey]?.path,offset:Ae}}}))},[Ee,Us,gn]),xa=(0,C.useCallback)(p=>{if(!Ee)return;p.target?.releasePointerCapture?.(p.pointerId),jn.current!==null&&(cancelAnimationFrame(jn.current),jn.current=null);let w=bo.current,I=Ee;if(w){gn(I.objectKey,j=>({...j,material:{...j?.material,[I.textureKey]:{...j?.material?.[I.textureKey],path:ln.current[I.objectKey]?.style?.material?.[I.textureKey]?.path,offset:Vs.current}}})),Ri.current=null,bo.current=!1;return}Ri.current=null,na(null)},[Ee,gn]);(0,C.useEffect)(()=>{if(!Ee)return jn.current!==null&&(cancelAnimationFrame(jn.current),jn.current=null),()=>{jn.current!==null&&(cancelAnimationFrame(jn.current),jn.current=null)}},[Ee]),(0,C.useEffect)(()=>{let p=Kr;if(!(!p||!Ee))return p.addEventListener("pointermove",Cu),p.addEventListener("pointerup",xa),p.addEventListener("pointercancel",xa),()=>{p.removeEventListener("pointermove",Cu),p.removeEventListener("pointerup",xa),p.removeEventListener("pointercancel",xa)}},[Kr,Ee,Cu,xa]);let Tu=(0,C.useCallback)(p=>{if(!Ee)return;p.preventDefault();let w=Ee,I=Math.exp(-p.deltaY*g0),j=Math.min(y0,Math.max(b0,zs.current*I));zs.current=j,Us(Vs.current,j),gn(w.objectKey,V=>({...V,material:{...V?.material,[w.textureKey]:{...V?.material?.[w.textureKey],path:ln.current[w.objectKey]?.style?.material?.[w.textureKey]?.path,scale:j}}}))},[Ee,Us,gn]);(0,C.useEffect)(()=>{let p=Kr;if(!(!p||!Ee))return p.addEventListener("wheel",Tu,{passive:!1}),()=>p.removeEventListener("wheel",Tu)},[Kr,Ee,Tu]);let x0=(0,C.useCallback)(p=>{if(Th.current)return;if(xu.current){xu.current=!1;return}let w=sn==="scene"&&Jn==="Annotations";if(p.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let j=xr.current,V=Ue.current,ee=V?.camera,re=tn.current;if(!j||!V||!ee||!re||!w&&!V.enabled)return;let Se=j.getBoundingClientRect(),Le=(p.clientX-Se.left)/Se.width*2-1,ce=-((p.clientY-Se.top)/Se.height)*2+1,Ae=new Ze.Raycaster;Ae.setFromCamera(new Ze.Vector2(Le,ce),ee);let Re=Ae.intersectObject(re,!0);if(Re.length===0)return;if(!w){let{x:Sr,y:Au,z:Ru}=Re[0].point;V.setOrbitPoint(Sr,Au,Ru);return}let Et=Re[0],Lt=Et.point,xo=re.worldToLocal(Et.point.clone()),_a=[0,0,1];if(Et.face){let Sr=Et.face.normal.clone().transformDirection(Et.object.matrixWorld).normalize();_a=[Sr.x,Sr.y,Sr.z]}Es({worldPosition:[Lt.x,Lt.y,Lt.z],localPosition:[xo.x,xo.y,xo.z],worldNormal:_a,anchor:FS(Et),screenX:p.clientX-Se.left,screenY:p.clientY-Se.top}),As({title:"",description:""})},[sn,Jn]),sm=(0,C.useCallback)(()=>{if(!_n||!Qr.title.trim())return;Rs.current+=1;let w={id:Rs.current,worldPosition:_n.worldPosition,localPosition:_n.localPosition,worldNormal:_n.worldNormal,anchorNodeName:_n.anchor?.anchorNodeName,anchorLocalPosition:_n.anchor?.anchorLocalPosition,title:Qr.title.trim(),description:Qr.description},I=[..._r,w];_h(I),U?.(I),Es(null)},[_n,Qr,_r,U]),Pu=(0,C.useCallback)(()=>Es(null),[]),_0=(0,C.useCallback)(p=>{wr(p)},[wr]);if(en.status==="checking")return(0,L.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,L.jsx)(Fs,{title:"Verifying License",message:"Checking your license key..."})});if(en.status==="invalid")return(0,L.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,L.jsx)(Fs,{tone:"error",title:"Invalid License",message:en.isLocalDomain?en.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let ei=co?or(co.objectId):null,Eu=ei?we[ei]?.style?.material?.texture?.path:void 0,lm=Eu?gf(Eu)??Eu:void 0,cm=ho?ar?.offset??(ei?we[ei]?.style?.material?.texture?.offset:void 0):void 0,um=ho?ar?.rotationDegrees??(ei?((we[ei]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,dm=ho?ar?.isPositioning??!!(ei&&Ee?.objectKey===ei&&Ee?.textureKey==="texture"):!1,pm=ho?r0:void 0,hm=ho?i0:void 0,mm=ho?o0:void 0,w0=xr.current?.offsetWidth??600,S0=xr.current?.offsetHeight??400,M0=350,C0=290,T0=_n?Math.min(_n.screenX+12,w0-M0-8):0,P0=_n?Math.min(_n.screenY,S0-C0-8):0,E0=_e&&!!n&&!ih&&!rr,yo=Ar&&(Pi&&(uu||bh)||yh||!!Ps),fm=(yo?1:0)+(De?1:0),vo=p=>16+p*42+(Xe&&p>fm?Math.max(0,Wx-34):0);return(0,L.jsxs)("div",{className:"ri-viewer",ref:tr.rootRef,style:{background:qv},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:Yp,inert:e.status!=="ready",children:[ae?ae({isOpen:zh,selectedObject:ba,currentAction:Kp,onClose:jh,onAction:ks}):(0,L.jsx)(yp,{isOpen:zh,selectedObject:ba,currentAction:Kp,onClose:jh,onAction:ks,renderActionExtra:p=>{if(p==="change-color"&&nr)return(0,L.jsx)(gp,{inline:!0,colorPicker:nr,onClose:An,itemMaterials:ro,setItemMaterials:Ss});if((p==="change-light-color"||p==="set-brightness")&&qc?.kind===p&&qc.objectId===ya){let w=qc,I=w.target,j=I.type==="lights"?He.lighting.lights.find(V=>V.id===I.lightIds[0])?.color??"#ffffff":bu(po(I.objectKey).color);return(0,L.jsx)(Xm,{kind:w.kind,color:j,brightness:w.percent,onColorChange:V=>{if(I.type==="lights"){vs(Object.fromEntries(I.lightIds.map(re=>[re,{color:V}])));return}let ee=po(I.objectKey);va(I.objectKey,{emissive:V,emissiveIntensity:ee.intensity>0?ee.intensity:Bs.current[I.objectKey]??1})},onBrightnessChange:V=>{if(Yc({...w,percent:V}),I.type==="lights"){vs(Object.fromEntries(I.lightIds.map(ee=>[ee,{intensity:(I.baseIntensity[ee]??0)*(V/100)}])));return}va(I.objectKey,{emissive:bu(po(I.objectKey).color),emissiveIntensity:I.baseIntensity*(V/100)})},onClose:()=>Yc(null)})}if((p==="add-text"||p==="add-image")&&$c?.kind===p&&$c.objectId===ya){let w=$c,I=or(w.objectId);if(!I)return null;let j=p==="add-image";return(0,L.jsx)($m,{kind:p,decals:(we[I]?.decals??[]).filter(V=>!!V.image===j),activeId:w.activeId,error:Wv,moving:Jo?.objectKey===I&&Jo.decalId===w.activeId,defaultSize:Ns(I),onSelect:V=>{Yr.current++,Rr(null),er(null),Qo({...w,activeId:V})},onAddText:(V,ee)=>_u(I,{id:qh(),text:V,color:ee,size:Ns(I)}),onAddImage:V=>{s0(w.objectId,I,V)},onChange:(V,ee)=>Ei(I,re=>re.map(Se=>Se.id===V?{...Se,...ee}:Se)),onNudge:(V,ee)=>{let re=ln.current[I],Se=re?.decals?.find(Ae=>Ae.id===V);if(!Se)return;let Le=mn.current[re.modelObjectId??I],ce=Cf(Le,Ue.current?.camera,Se,ee);if(!ce){Rr("No visible surface in that direction. Try another arrow or rotate the view.");return}Rr(null),er(null),Ei(I,Ae=>Ae.map(Re=>Re.id===V?{...Re,...ce}:Re))},onMove:V=>{Yr.current++,we[I]?.decals?.find(re=>re.id===V)&&(Rr(null),er(re=>re?.objectKey===I&&re.decalId===V?null:{objectKey:I,decalId:V}))},onRemove:V=>{er(null),Ei(I,ee=>ee.filter(re=>re.id!==V)),Qo({...w,activeId:null})},onClose:()=>{Yr.current++,Rr(null),er(null),Qo(null)}})}return p==="change-material"&&co?(0,L.jsx)(bp,{inline:!0,triggerFileUpload:Hh,materialPopup:co,textureUrl:lm,clearTexture:Gh,offset:cm,rotationDegrees:um,onOffsetChange:pm,onRotationChange:hm,isPositioning:dm,onEndPositioning:mm}):null}}),(0,L.jsxs)("div",{className:`ri-canvasArea ${lo?"ri-canvasArea--measuring":""} ${io?"":"ri-canvasArea--positioning"} ${F?"ri-canvasArea--moveMode":""}`,ref:ex,tabIndex:W?0:void 0,onDoubleClick:x0,onPointerDown:p=>{if(W&&xr.current?.focus({preventScroll:!0}),Ee){v0(p);return}Hx(p)},onClick:Ee?void 0:Gx,onPointerMove:Vx,onPointerLeave:Rh,onWheel:Rh,children:[ra&&!r&&(Ee||Jx)&&(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:Ee?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:Ee?"Drag to move \xB7 Scroll to zoom \xB7 Click elsewhere to finish":"Double-click to move or zoom"}),oh&&!lh&&(0,L.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,L.jsx)(se.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,L.jsx)("span",{children:ah===1?"1 object binding doesn't match this model":`${ah} object bindings don't match this model`}),(0,L.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:p=>{p.stopPropagation(),ch(!0)},"aria-label":"Dismiss",children:(0,L.jsx)(se.X,{size:12})})]}),uh!==null&&!px&&(0,L.jsxs)("div",{className:`ri-largeModelBanner ${oh&&!lh?"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(uh/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:p=>{p.stopPropagation(),dh(!0)},"aria-label":"Dismiss",children:(0,L.jsx)(se.X,{size:12})})]}),wi.model.renderer==="uv-checker"&&ca.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:[ca.missing===ca.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${ca.missing} of ${ca.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),(0,L.jsx)("input",{ref:Wp,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:n0}),(0,L.jsx)(Co,{onError:e.fail,children:(0,L.jsxs)(rd,{onRendererCreated:e.onRendererCreated,suspended:e.status!=="ready",camera:R,backgroundColor:Y,shadows:K&&He.shadows.enabled,sceneConfig:wi,selectedObjectRef:gu,hoveredObjectRef:e0,highlightOnHover:kt,renderMode:Xt,maxDpr:lt,reduceGpuLoad:Yv,xrStore:Pi,rendererCaptureRef:Vn,preserveDrawingBuffer:Nt,children:[(0,L.jsx)(sd,{lightingConfig:He.lighting,shadowConfig:He.shadows,shadowsEnabled:K,environmentRotation:He.environment.rotation,environmentConfig:He.environment,modelBounds:zx,objectBindings:we,nodeRefs:mn}),xn&&He.lighting.lights.map(p=>!p.visible||p.type==="none"||p.type==="hemisphere"||p.attachment?null:(0,L.jsx)(uv,{light:p,position:p.position,rotation:p.rotation,color:p.color,intensity:p.intensity,visible:p.visible,onPositionChange:w=>om(p.id,w,p.rotation),onRotationChange:w=>om(p.id,p.position,w),onDraggingChange:Fp},p.id)),(0,L.jsx)(pp,{setAside:Ai.setAside,nodeRefs:mn}),(0,L.jsx)(fp,{section:He.section??ki,box:pu,modelRef:tn,showHandle:Be,onPositionChange:p=>Zo({position:p}),onDraggingChange:Hv}),(0,L.jsx)(od,{controlsRef:Ue,onCameraChange:m0,cameraLimits:X,controllerType:$r,onPointerLockExit:()=>ta("orbit")}),(0,L.jsx)(qS,{enabled:Rt||lo||fo||$r==="pointerLock"?!1:fe??He.model.autoRotate??!1,speed:Pt??He.model.autoRotateSpeed??1,controlsRef:Ue}),Z&&!Rt&&(0,L.jsx)(Tc.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{Ue.current?.update(0),Vn.current?.invalidate()},children:(0,L.jsx)(Tc.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),F&&gu&&fn&&(0,L.jsx)(Ep,{node:gu,space:H,onTransformChange:t0,onDraggingChange:p=>{Fp(p),ga&&_?.(ga,p)}},fn),fo&&(0,L.jsx)(Sf,{target:fo,nodes:mn,controls:Ue}),(0,L.jsx)(Hs,{onLoadError:im,children:(0,L.jsx)(C.Suspense,{fallback:null,children:(()=>{let p=(0,L.jsxs)(L.Fragment,{children:[r?(0,L.jsx)(Zd,{url:r,rotation:wi.model.rotation,errorTarget:i,cacheSize:o,decoderConfig:Up,objectBindings:Ai.bindings,itemMaterials:ro,sceneConfig:wi,selectedItem:fn,panelHoveredItem:m??Jc,highlightOnHover:kt,onItemClick:Zh,onItemHover:Qh,onItemDoubleClick:Jh,onItemContextMenu:em,onObjectCatalog:u0,onTilesetBounds:d0,onModelLoaded:rm,onLoadError:im,nodeRefsOut:mn,onNodeRefsChange:qp,materialRefsOut:_s,explodeFactor:Ts,suspendBindingTransforms:xs}):(0,L.jsx)(md,{url:n,modelFormat:s,objectBindings:Ai.bindings,selectedItem:fn,itemMaterials:ro,onItemClick:Zh,onItemDoubleClick:Jh,onItemContextMenu:em,onItemHover:Qh,onModelLoaded:rm,onAnimationsReady:z,nodeRefsOut:mn,onNodeRefsChange:qp,materialRefsOut:_s,panelHoveredItem:m??Jc,sceneConfig:wi,zoomOnSelected:Tt,highlightOnHover:kt,decoderConfig:Up,onLoadProgress:p0,explodeFactor:Ts,suspendBindingTransforms:xs,pulses:Ai.pulses}),(0,L.jsx)(Jd,{annotations:_r,sceneConfig:He,activeAnnotation:ma,popupRef:Zc,canvasRootRef:xr,worldPositionsRef:Gp,modelLoaded:rr,onAnnotationClick:_0,onCloseAnnotation:pa,hideCloseButton:da,showAnnotationOnHover:vr}),(0,L.jsx)(GS,{annotation:Os,enabled:da&&!Rt,controlsRef:Ue,offsetRef:Kc}),Rt?(0,L.jsx)(Ys,{controlsRef:Ue,sceneRef:tn,config:Rt.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:Rt.onStarted,onFinished:Rt.onFinished,onProgress:yx},"video-export"):Mi&&(0,L.jsx)(Ys,{controlsRef:Ue,sceneRef:tn,config:Mi,playing:Ci&&!lo,resetOnPlay:fx,onFinished:()=>{Pn(!1),Ti(!1)},onUserInteract:()=>{Pn(!1)}},"cinematic-preview"),Xe&&(0,L.jsx)(ep,{points:Ph,unit:hn,box:pu,showDimensions:Lh,tool:Eh,areaClosed:Ah,snapPreview:lo?Nx:null})]});return Pi?(0,L.jsx)(yy,{ref:vx,box:pu,scaleMode:_i,onARStateChange:Sx,children:p}):p})()})},r??n),le&&(0,L.jsx)(C.Suspense,{fallback:null,children:le})]})}),J&&(0,L.jsx)("div",{className:"ri-overlay",children:J}),_e&&n&&ih&&(()=>{let p=Nm(cx,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:p.title})]}),(0,L.jsx)("p",{className:"ri-loadError__detail",children:p.detail}),(0,L.jsx)("p",{className:"ri-loadError__source",children:r||n}),p.technical&&(0,L.jsx)("p",{className:"ri-loadError__technical",children:p.technical})]})})})(),(0,L.jsx)(Yy,{visible:E0,message:hx,progress:mx??void 0}),yo&&(0,L.jsxs)("div",{className:"ri-xrTools",style:{top:`${vo(0)}px`},children:[!uu&&yh&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:wx,title:"View this model in AR with Apple Quick Look",children:[(0,L.jsx)(se.Box,{size:16}),"View in AR"]}),Ps&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:_x,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":vh,children:[(0,L.jsx)(se.QrCode,{size:16}),(0,L.jsx)("span",{children:"Open on phone"})]}),Pi&&uu&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>Pi.enterAR().catch(p=>{console.error("Failed to enter AR session:",p)}),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"})]}),Pi&&bh&&(0,L.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>Pi.enterVR().catch(p=>{console.error("Failed to enter VR session:",p)}),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"})]})]}),xx,vh&&Ps&&(0,L.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:p=>{p.target===p.currentTarget&&xh()},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:xh,"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)(fv.QRCodeSVG,{value:Ps,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),De&&(0,L.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${vo(yo?1:0)}px`},children:(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${to?"ri-measureButton--active":""}`,onClick:()=>zp(p=>!(p??ea)),title:to?"Disable UV checker":"Enable UV checker","aria-label":to?"Disable UV checker":"Enable UV checker","aria-pressed":to,children:(0,L.jsx)(se.Grid3X3,{size:16})})}),Xe&&(0,L.jsx)(tp,{top:vo(fm),active:lo,disabled:!!Rt,tool:Eh,snap:Bx,pointCount:Ph.length,areaClosed:Ah,error:Lx,showDimensions:Lh,onToggle:()=>{Pn(!1),jx()},onTool:Ox,onSnap:kx,onUndo:Dx,onClear:Ux,onFinishArea:Ix,onDimensions:Fx,onHeight:Xx}),Je&&(0,L.jsxs)("div",{className:"ri-explodeTools",style:{top:`${vo((yo?1:0)+(De?1:0)+(Xe?1:0))}px`},children:[(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${au||Ts>0?"ri-measureButton--active":""}`,onClick:()=>fh(p=>!p),title:"Exploded view","aria-pressed":au,children:(0,L.jsx)(se.Expand,{size:16})}),au&&(0,L.jsx)("div",{className:"ri-explodeSlider",onPointerDown:p=>p.stopPropagation(),children:(0,L.jsx)("input",{type:"range",min:0,max:100,value:Math.round(Ts*100),onChange:p=>mh(Number(p.target.value)/100),"aria-label":"Explode amount"})})]}),Be&&(0,L.jsxs)("div",{className:"ri-sectionTools",style:{top:`${vo((yo?1:0)+(De?1:0)+(Xe?1:0)+(Je?1:0))}px`},children:[(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${ir.enabled?"ri-measureButton--active":""}`,onClick:()=>Zo({enabled:!ir.enabled}),title:ir.enabled?"Remove section cut":"Section cut","aria-label":"Section cut","aria-pressed":ir.enabled,children:(0,L.jsx)(se.Slice,{size:16})}),ir.enabled&&(0,L.jsxs)("div",{className:"ri-sectionPanel",onPointerDown:p=>p.stopPropagation(),children:[(0,L.jsx)("div",{className:"ri-sectionAxes",role:"group","aria-label":"Section axis",children:Zf.map(p=>(0,L.jsx)("button",{type:"button",className:`ri-sectionAxis ${ir.axis===p?"ri-sectionAxis--active":""}`,"aria-pressed":ir.axis===p,onClick:()=>Zo({axis:p}),children:p.toUpperCase()},p))}),(0,L.jsx)("input",{type:"range",min:0,max:100,value:Math.round(ir.position*100),onChange:p=>Zo({position:Number(p.target.value)/100}),"aria-label":"Section position"}),(0,L.jsx)("button",{type:"button",className:`ri-sectionAxis ${ir.flip?"ri-sectionAxis--active":""}`,"aria-pressed":ir.flip,"aria-label":"Keep the other side",title:"Keep the other side",onClick:()=>Zo({flip:!ir.flip}),children:(0,L.jsx)(se.FlipVertical2,{size:14})})]})]}),Mi&&(0,L.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${vo((yo?1:0)+(De?1:0)+(Xe?1:0)+(Je?1:0)+(Be?1:0))}px`},children:[(0,L.jsx)("button",{type:"button",className:`ri-measureButton ${Ci?"ri-measureButton--active":""}`,disabled:!!Rt||lo,onClick:()=>{Ci?Pn(!1):(Ti(!1),Pn(!0))},title:Ci?"Pause cinematic":"Play cinematic","aria-pressed":Ci,children:Ci?(0,L.jsx)(se.Pause,{size:16}):(0,L.jsx)(se.Play,{size:16})}),Ci&&(0,L.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:h0,title:"Stop cinematic and reset camera",children:(0,L.jsx)(se.Square,{size:16})})]}),Rt&&(0,L.jsx)("div",{className:"ri-recordingOverlay",onPointerDown:p=>p.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 ",bx,"%"]}),(0,L.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:cu,children:"Cancel"})]})}),(Mh||fo||kn&&Dr)&&(0,L.jsxs)("div",{className:`ri-bottomStack ${Ch?"ri-bottomStack--aboveButtons":""}`,children:[fo&&(0,L.jsxs)("div",{className:"ri-isolationPill",role:"status",onPointerDown:p=>p.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:fo.onCancel,children:"Cancel"})]}),kn&&Dr&&(0,L.jsxs)("div",{className:"ri-isolationPill",onPointerDown:p=>p.stopPropagation(),children:[(0,L.jsx)("span",{className:"ri-isolationPill__label",children:Dr.size===1?`Isolated: ${(()=>{let[p]=Dr;return we[p]?.label??p})()}`:`Isolated: ${Dr.size} objects`}),(0,L.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:()=>wu(null),children:"Show all"})]}),Mh&&(0,L.jsx)("div",{className:"ri-variantPicker",role:"group","aria-label":"Material variants",onPointerDown:p=>p.stopPropagation(),children:nh.map(p=>{let w=He.model.materialVariant===p;return(0,L.jsx)("button",{type:"button",className:`ri-variantPicker__option ${w?"ri-variantPicker__option--active":""}`,"aria-pressed":w,onClick:()=>Gv(p),children:p},p)})})]}),Ch&&(0,L.jsxs)("div",{className:"ri-buttonContainer",children:[(0,L.jsx)("div",{className:"ri-tourControls",children:qt&&St.length>0&&(0,L.jsx)(L.Fragment,{children:da?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)("button",{className:"ri-tourButton",onClick:Tx,disabled:Sh||St.length===0||zn<=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:Ex,title:"Stop guided tour",children:(0,L.jsx)(se.Square,{size:16})}),(0,L.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:Px,disabled:Sh||St.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:Cx,disabled:St.length===0,title:"Start guided tour",children:"Guided Tour"})})}),(0,L.jsxs)("div",{className:"mv-rightControls",children:[pe&&tr.supported&&(0,L.jsxs)("div",{className:"mv-fullscreenWrapper",children:[tr.error&&(0,L.jsx)("div",{className:"mv-fullscreenError",role:"alert",children:tr.error}),(0,L.jsx)("button",{type:"button",className:"mv-fullscreenButton",onClick:()=>{tr.toggle()},disabled:tr.pending||!!Rt,title:tr.active?"Exit fullscreen":"Enter fullscreen","aria-label":tr.active?"Exit fullscreen":"Enter fullscreen","aria-pressed":tr.active,children:tr.active?(0,L.jsx)(se.Minimize,{}):(0,L.jsx)(se.Maximize,{})})]}),dt&&(0,L.jsx)("button",{className:"mv-resetButton",onClick:Su,disabled:!!Rt,title:"Reset camera view",children:(0,L.jsx)(se.RotateCcw,{})}),(0,L.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:p=>p.stopPropagation(),children:[Zv&&(0,L.jsxs)("div",{className:"mv-controllersMenu",children:[(0,L.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${$r==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>ta("orbit"),children:"Orbit Control"}),(0,L.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${$r==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>ta("pointerLock"),children:"Point Lock"})]}),(0,L.jsx)("button",{className:"mv-controllersButton",onClick:()=>jp(p=>!p),title:"Camera controller","aria-label":"Camera controller settings",disabled:!!Rt,children:(0,L.jsx)(se.Orbit,{size:15})})]}),me&&(0,L.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:p=>p.stopPropagation(),children:[qx&&(0,L.jsxs)("div",{className:"mv-downloadMenu",children:[(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:$x,disabled:hu||!!Rt||!tn.current,children:[(0,L.jsx)(se.Box,{size:14}),"Download GLB"]}),(0,L.jsx)("div",{className:"mv-downloadMenuDivider"}),Nt&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:Kx,disabled:!!Rt||!tn.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:Zx,disabled:!!Rt||!tn.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:mu,onChange:p=>Qx(p.target.value),children:[(0,L.jsx)("option",{value:"auto",children:"Auto"}),(0,L.jsx)("option",{value:"webm",disabled:!Oi("webm"),children:"WebM"}),(0,L.jsx)("option",{value:"mp4",disabled:!Oi("mp4"),children:"MP4"})]})]}),(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{Ih("turntable")},disabled:!!Rt||!rr||!io||oa||!Oi(mu),children:[(0,L.jsx)(se.Play,{size:14}),"Record turntable video"]}),Mi&&(0,L.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{Ih("cinematic")},disabled:!!Rt||!rr||!io||oa||!Oi(mu),children:[(0,L.jsx)(se.Play,{size:14}),"Record cinematic video"]}),!Oi()&&(0,L.jsx)("div",{className:"mv-downloadMenuNotice",role:"status",children:"Video recording is not supported in this browser."}),Bh&&(0,L.jsx)("div",{className:"mv-downloadMenuNotice",role:"alert",children:Bh}),Dh&&(0,L.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:Dh})]}),(0,L.jsx)("button",{className:"mv-downloadButton",onClick:Yx,disabled:hu||!!Rt||!tn.current,title:"Download options",children:hu?(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"]})})]})]})]}),_n&&(0,L.jsxs)("div",{className:"ri-annotationPopup",style:{left:T0,top:P0},onPointerDown:p=>p.stopPropagation(),onClick:p=>p.stopPropagation(),children:[(0,L.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:Qr.title,onChange:p=>As(w=>({...w,title:p.target.value})),onKeyDown:p=>{p.key==="Enter"&&sm(),p.key==="Escape"&&Pu()}}),(0,L.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:Qr.description,onChange:p=>As(w=>({...w,description:p.target.value})),onKeyDown:p=>{p.key==="Escape"&&Pu()},rows:5}),(0,L.jsxs)("div",{className:"ri-annotationActions",children:[(0,L.jsx)("button",{onClick:sm,className:`ri-annotationOkBtn ${Qr.title.trim()?"":"disabled"}`,disabled:!Qr.title.trim(),children:"OK"}),(0,L.jsx)("button",{onClick:Pu,className:"ri-annotationCancelBtn",children:"Cancel"}),(0,L.jsx)("div",{className:"ri-annotationIcons"})]})]})]}),ae&&nr&&(0,L.jsx)(gp,{colorPicker:nr,onClose:An,itemMaterials:ro,setItemMaterials:Ss}),ae&&co&&(0,L.jsx)(bp,{triggerFileUpload:Hh,materialPopup:co,textureUrl:lm,clearTexture:Gh,offset:cm,rotationDegrees:um,onOffsetChange:pm,onRotationChange:hm,isPositioning:dm,onEndPositioning:mm})]}),Ie&&(0,L.jsx)("div",{className:"ri-viewerRight",inert:e.status!=="ready",children:ne?ne({objectBindings:we,onAction:ks,onFocus:tm,onHover:Zp}):(0,L.jsx)(vp,{objectBindings:we,onAction:ks,onFocus:tm,onHover:Zp,isolatedKeys:Dr,onIsolate:kn?c0:void 0})}),je&&(0,L.jsx)(Ay,{controlsRef:Ue,enabled:e.status==="ready",opacity:te,moveSensitivity:an,position:Bt})]})}var gv={licenseValidationUrl:!0,onObjectEditLeaseChange:!0,onSceneLoaded:!0,onTexturePositioningChange:!0,endTexturePositioningRef:!0};function bv(e,t){let n={...e};for(let r of Object.keys(t))delete n[r];return n}var vv=require("react"),ZS={"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"},Rp=new Set,QS=1e3;function yv(e){return getComputedStyle(document.documentElement).getPropertyValue(`--ri-styles-${e}`).trim()!==""}function xv(e,t){(0,vv.useEffect)(()=>{if(process.env.NODE_ENV==="production"||Rp.has(e)||yv(e))return;let n,r=()=>{n=setTimeout(()=>{Rp.has(e)||yv(e)||(Rp.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;cl.min.copy(t),cl.max.copy(t),cl.max.x+=1,cl.max.y+=1,r.initRenderTarget(i),r.copyTextureToTexture(e,i.texture,cl,n,0)}},Ji=new class{constructor(){let e=null;Object.getOwnPropertyNames(_0.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new _0),e[t](...n)))})}},M0=new Q.Vector2,S0=new Q.Vector2,C0=new Q.Vector2;function XP(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function k0(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 N0(e,t,n,r,i){let[o,a,s]=r,l=XP(e,t);M0.fromBufferAttribute(l,o),S0.fromBufferAttribute(l,a),C0.fromBufferAttribute(l,s),i.set(0,0,0).addScaledVector(M0,n.x).addScaledVector(S0,n.y).addScaledVector(C0,n.z)}function V0(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 T0=new Q.Vector2,P0=new Q.Vector2,A0=new Q.Vector2,qP=class extends zu{constructor(e,t,n=null){super(e,t,n),this.channels=un(n,"channels",[0]),this.index=un(n,"index",null),this.texCoord=un(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 B0(e,t*this.valueLength,r,n)}},YP=class extends _m{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(qP)}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,Ji.increaseSizeTo(i.length);let o=this.data,a=this.definition.properties,s=this.properties,l=k0(r,t);for(let p=0,u=e.length;p<u;p++){let h=e[p];if(!a[h])continue;let m=s[h],b=o[m.index];N0(r,m.texCoord,n,l,T0),V0(T0,b.image.width,b.image.height,P0),A0.set(p,0),Ji.renderPixelToTarget(b,P0,A0)}let c=new Uint8Array(e.length*4);if(this._asyncRead)return Ji.readDataAsync(c).then(()=>(d.call(this),i));return Ji.readData(c),d.call(this),i;function d(){for(let p=0,u=e.length;p<u;p++){let h=e[p],m=s[h],b=m.type;if(i[p]=wm(m,i[p]),!m)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!a[h]){i[p]=m.resolveDefault(i);continue}let f=m.valueLength*(m.count||1),g=m.channels.map(_=>c[4*p+_]),y=m.componentType,x=new(dl(y,b))(f);if(new Uint8Array(x.buffer).set(g),m.array){let _=i[p];for(let L=0,w=_.length;L<w;L++)_[L]=m.readDataFromBuffer(x,L,_[L])}else i[p]=m.readDataFromBuffer(x,0,i[p]);i[p]=m.adjustValueScaleOffset(i[p]),i[p]=m.resolveEnumsToStrings(i[p]),i[p]=m.resolveNoData(i[p])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},ym=class{constructor(e,t,n,r=null,i=null){let{schema:o,propertyTables:a=[],propertyTextures:s=[],propertyAttributes:l=[]}=e,{enums:c,classes:d}=o,p=a.map(m=>new WP(m,d,c,n)),u=[],h=[];r&&(r.propertyTextures&&(u=r.propertyTextures.map(m=>new YP(s[m],d,c,t))),r.propertyAttributes&&(h=r.propertyAttributes.map(m=>new GP(l[m],d,c)))),this.schema=o,this.tableAccessors=p,this.textureAccessors=u,this.attributeAccessors=h,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())}},ul="EXT_structural_metadata";function $P(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 KP(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 z0=class{constructor(e){this.parser=e,this.name=ul}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(ul))return;let r=null,i=t.json.extensions[ul];if(i.schemaUri){let{manager:l,path:c,requestHeader:d,crossOrigin:p}=t.options,u=new URL(i.schemaUri,c).toString(),h=new Q.FileLoader(l);h.setCrossOrigin(p),h.setResponseType("json"),h.setRequestHeader(d),r=h.loadAsync(u).then(m=>{i={...i,schema:m}})}let[o,a]=await Promise.all([$P(t,i.propertyTextures),KP(t,i.propertyTables),r]),s=new ym(i,o,a);e.userData.structuralMetadata=s,e.traverse(l=>{if(t.associations.has(l)){let{meshes:c,primitives:d}=t.associations.get(l),p=t.json.meshes[c]?.primitives[d];if(p&&p.extensions&&p.extensions[ul]){let u=p.extensions[ul];l.userData.structuralMetadata=new ym(i,o,a,u,l)}else l.userData.structuralMetadata=s}})}},E0=new Q.Vector2,R0=new Q.Vector2,O0=new Q.Vector2;function ZP(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var U0=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;Ji.increaseSizeTo(a);let s=k0(n,e),l=s[ZP(t)];for(let p=0,u=i.length;p<u;p++){let h=i[p],m="nullFeatureId"in h?h.nullFeatureId:null;if("texture"in h){let b=r[h.texture.index];N0(n,h.texture.texCoord,t,s,E0),V0(E0,b.image.width,b.image.height,R0),O0.set(p,0),Ji.renderPixelToTarget(r[h.texture.index],R0,O0)}else if("attribute"in h){let b=n.getAttribute(`_feature_id_${h.attribute}`).getX(l);b!==m&&(o[p]=b)}else{let b=l;b!==m&&(o[p]=b)}}let c=new Uint8Array(a*4);if(this._asyncRead)return Ji.readDataAsync(c).then(()=>(d(),o));return Ji.readData(c),d(),o;function d(){let p=new Uint32Array(1);for(let u=0,h=i.length;u<h;u++){let m=i[u],b="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let{channels:f}=m.texture,g=f.map(x=>c[4*u+x]);new Uint8Array(p.buffer).set(g);let y=p[0];y!==b&&(o[u]=y)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Vu="EXT_mesh_features";function L0(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[Vu]&&n(r,a.extensions[Vu])}})}var j0=class{constructor(e){this.parser=e,this.name=Vu}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Vu))return;let r=t.json.textures?.length||0,i=Array(r).fill(null);L0(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);L0(e,t,(a,s)=>{a.userData.meshFeatures=new U0(a.geometry,o,s)})}},F0=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])}}},Mm=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 D0.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 F0),this.metadata&&(t.register(()=>new z0),t.register(()=>new j0)),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:WI}=Q.MathUtils;var XI=new vm.FullScreenQuad(new Q.MeshBasicMaterial),QP=new Q.DataTexture(new Uint8Array([255,255,255,255]),1,1);QP.needsUpdate=!0;var JP=0,eA=1,tA=2,nA=3,rA=4,iA=5,oA=6,aA=7,sA=8,lA=9,cA=10,uA=11,qI=Object.freeze({NONE:JP,SCREEN_ERROR:eA,GEOMETRIC_ERROR:tA,DISTANCE:nA,DEPTH:rA,RELATIVE_DEPTH:iA,IS_LEAF:oA,RANDOM_COLOR:aA,RANDOM_NODE_COLOR:sA,CUSTOM_COLOR:lA,LOAD_ORDER:cA,INDEXED_COLOR:uA});var YI=Math.PI/4,$I=3/5;var Qi={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var KI=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 ZI={[Qi.NONE]:16777215,[Qi.NOT_READY]:7829367,[Qi.NO_FIT]:2250239,[Qi.DEPTH]:4473924,[Qi.OCCUPANCY]:65535,[Qi.SPACING]:16776960,[Qi.ANGLE]:16711680,[Qi.FACING]:16711935};var QI=Math.PI/180;var JI=Go*Math.PI*2;var e3=Go*Math.PI*2;var X0=require("three/examples/jsm/loaders/DRACOLoader.js"),q0=require("three/examples/jsm/loaders/KTX2Loader.js"),Y0=require("three/examples/jsm/libs/meshopt_decoder.module.js"),Kn=require("three");var ml=require("three");function G0(e){return!!e&&!e.isInterleavedBufferAttribute}function H0(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,ml.MathUtils.clamp(e.getComponent(i,o),n,r));return t}function dA(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 Uu=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;G0(i)&&!(i.array instanceof Int16Array)&&(r.attributes.normal=H0(i,new ml.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];!G0(a)||a.array instanceof Uint16Array||!dA(a)||(r.attributes[o]=H0(a,new ml.BufferAttribute(new Uint16Array(a.count*a.itemSize),a.itemSize,!0),0,1))}})}};var fl=require("react/jsx-runtime"),pA=0,W0=4,hA=6,mA=12,fA=4;function gA(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 Sm({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:d,highlightOnHover:p=!0,onItemClick:u,onItemHover:h,onItemDoubleClick:m,onItemContextMenu:b,onObjectCatalog:f,onTilesetBounds:g,onModelLoaded:y,onLoadError:x,nodeRefsOut:_,onNodeRefsChange:L,materialRefsOut:w,explodeFactor:R=0,suspendBindingTransforms:C=!1}){let{camera:P,gl:S,invalidate:v}=(0,ju.useThree)(),A=(0,Ie.useRef)(null),[E,B]=(0,Ie.useState)(null),N=(0,Ie.useRef)({onItemClick:u,onItemHover:h,onItemDoubleClick:m,onObjectCatalog:f,onTilesetBounds:g,onModelLoaded:y,onLoadError:x,onNodeRefsChange:L});N.current={onItemClick:u,onItemHover:h,onItemDoubleClick:m,onObjectCatalog:f,onTilesetBounds:g,onModelLoaded:y,onLoadError:x,onNodeRefsChange:L};let I=(0,Ie.useRef)(!0),[F,O]=(0,Ie.useState)(null),T=(0,Ie.useRef)(null);T.current=F;let z=(0,Ie.useRef)([]),q=(0,Ie.useRef)(!1);(0,Ie.useEffect)(()=>{let ne=new gu;return O(ne),()=>ne.dispose()},[e]);let Z=(0,Ie.useRef)(null),J=(0,Ie.useRef)(0),le=(0,Ie.useRef)(!1),H=i*1024*1024,X=(0,Ie.useRef)(!1),te=(0,Ie.useRef)(Wh),he=(0,Ie.useRef)(null),Ee=(0,Ie.useRef)(null),$=(0,Ie.useRef)(null);(0,Ie.useEffect)(()=>()=>{$.current!==null&&clearTimeout($.current)},[]);let se=o?.dracoDecoderPath??Ih,we=o?.ktx2TranscoderPath??Bh,Xe=o?.meshopt??!0,[ie,bt]=(0,Ie.useState)(null);(0,Ie.useEffect)(()=>{le.current=!1,X.current=!1;let ne=new gm(e);ne.loadAncestors=!0;let fe=new _u;fe.priorityCallback=ne.downloadQueue.priorityCallback,fe.maxJobsPerOrigin=mA;let ye=new Jr;ye.priorityCallback=ne.parseQueue.priorityCallback,ye.maxJobs=hA;let ke=new Jr;ke.priorityCallback=ne.processNodeQueue.priorityCallback,ke.maxJobs=ne.processNodeQueue.maxJobs;let wt=new Qs;wt.unloadPriorityCallback=ne.lruCache.unloadPriorityCallback,ne.downloadQueue=fe,ne.parseQueue=ye,ne.processNodeQueue=ke,ne.lruCache=wt;let it=se?new X0.DRACOLoader().setDecoderPath(se).setWorkerLimit(fA):null,ot=we?new q0.KTX2Loader().setTranscoderPath(we).detectSupport(S):null;return ne.registerPlugin(new Mm({dracoLoader:it,ktxLoader:ot,meshoptDecoder:Xe?Y0.MeshoptDecoder:null,autoDispose:!1})),ne.registerPlugin(new xm({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),ne.registerPlugin(new Uu),bt(ne),window.__riTiles=ne,()=>{ne.forEachLoadedModel(xe=>ws(xe)),ne.dispose(),it?.dispose(),ot?.dispose(),bt(xe=>xe===ne?null:xe)}},[se,S,we,Xe,e]),(0,Ie.useEffect)(()=>{ie&&(te.current=Wh,he.current=null,ie.errorTarget=n,ie.lruCache.maxSize=r,ie.lruCache.minSize=Math.max(1,Math.floor(r*.75)),ie.lruCache.maxBytesSize=H,ie.lruCache.minBytesSize=H*.75,v())},[r,n,v,H,ie]);let et=(0,Ie.useMemo)(()=>{let ne=a??{};return{objectBindings:ne,keyByModelObject:Ax(ne),itemMaterials:s,shadingMode:l?.model.shading??"lit",rendererMode:l?.model.renderer??"pbr",selectedKey:c??null,hoveredKey:Ex(E,d),highlightOnHover:p,suspendTransforms:C,placementFrame:ie?.group.matrixWorld,invalidate:v}},[E,p,v,s,a,d,l,c,C,ie]),rt=(0,Ie.useCallback)(()=>{if(!ie)return;let ne=At.current,fe=q.current?T.current?.nodesByBinding(ne)??{}:{},ye={};ie.group.traverse(ot=>{if(!ot.isMesh)return;let xe=Gh(ot);if(!xe)return;let Ve=ne.keyByModelObject[xe]??xe;if(!ne.objectBindings[Ve])return;fe[Ve]||(fe[Ve]=ot);let je=ot.material;je&&(ye[Ve]=je)});let ke=_?.current??{},wt=Object.keys(ke),it=wt.length!==Object.keys(fe).length||wt.some(ot=>ke[ot]!==fe[ot]);_&&(_.current=fe),w&&(w.current=ye),(it||!_)&&N.current.onNodeRefsChange?.()},[w,_,ie]),ce=(0,Ie.useCallback)(ne=>mu(ne,et),[et]),Te=(0,Ie.useCallback)(ne=>Ox(ne,et),[et]),tt=(0,Ie.useRef)(Te);tt.current=Te;let At=(0,Ie.useRef)(et);At.current=et;let Lt=(0,Ie.useCallback)(()=>{let ne=Z.current,fe=J.current;return!ne||fe<=0?At.current:{...At.current,explode:{factor:fe,centre:ne.centre,radius:ne.radius}}},[]);(0,Ie.useEffect)(()=>{ie&&(Te(ie.group),I.current=!0,ie.forEachLoadedModel(ne=>{Te(ne),ka(ne,Lt())}),v())},[Te,v,Lt,ie]),(0,Ie.useEffect)(()=>{let ne=gA(e);if(!ne)return;let fe=!1;return fetch(ne).then(ye=>ye.ok?ye.json():null).then(ye=>{fe||!ye?.objects||(z.current=ye.objects,q.current=ye.bindingFrame==="gltf-identity-v2",q.current&&T.current?.setCatalog(ye.objects),I.current=!0,N.current.onObjectCatalog?.(ye.objects),v())}).catch(()=>{}),()=>{fe=!0}},[e,v,F]),(0,Ie.useEffect)(()=>{if(!ie)return;let ne=!1,fe=()=>v(),ye=xe=>{xe.scene&&(xe.scene.traverse(Ve=>{let je=Ve.material;for(let en of Array.isArray(je)?je:je?[je]:[])en.transparent&&en.side===Kn.DoubleSide&&(en.forceSinglePass=!0)}),tt.current(xe.scene),ka(xe.scene,Lt()),dc(xe.scene)),I.current=!0,ne||(ne=!0,N.current.onModelLoaded?.(ie.group)),v()},ke=xe=>{N.current.onLoadError?.(xe.error)},wt=xe=>{xe.scene&&(Hh(xe.scene),ws(xe.scene)),I.current=!0};ie.setCamera(P),ie.setResolutionFromRenderer(P,S),ie.addEventListener("needs-update",fe),ie.addEventListener("load-model",ye),ie.addEventListener("load-error",ke),ie.addEventListener("dispose-model",wt);let it=()=>{I.current=!0,v()};ie.addEventListener("tile-visibility-change",it);let ot=()=>{let xe=ie.root;xe&&!xe.content?.uri&&xe.refine==="REPLACE"&&(xe.refine="ADD",v())};return ie.addEventListener("load-root-tileset",ot),v(),()=>{ie.removeEventListener("needs-update",fe),ie.removeEventListener("load-model",ye),ie.removeEventListener("load-error",ke),ie.removeEventListener("dispose-model",wt),ie.removeEventListener("tile-visibility-change",it),ie.removeEventListener("load-root-tileset",ot),Hh(ie.group),ie.deleteCamera(P),_&&(_.current={}),w&&(w.current={})}},[P,S,v,w,_,Lt,ie]);let pe=kc(ne=>ce(ne)?.binding??null,b),be=(0,Ie.useCallback)(ne=>{if(pe.consumeClick())return;let fe=ce(ne.object);fe&&(ne.stopPropagation(),N.current.onItemClick?.(fe.binding))},[ce,pe,u]),Le=(0,Ie.useCallback)(ne=>{let fe=ce(ne.object);if(!fe)return;N.current.onItemDoubleClick?.(fe.binding,Sa(ne))&&ne.stopPropagation()},[ce]),Ke=(0,Ie.useCallback)(ne=>{let fe=ce(ne.object),ye=fe?.key??null;ye!==A.current&&(A.current=ye,B(ye),N.current.onItemHover?.(fe?.binding??null))},[ce]),ft=(0,Ie.useCallback)(()=>{A.current!==null&&(A.current=null,B(null),N.current.onItemHover?.(null))},[]);return(0,Ie.useEffect)(()=>{v()},[v,ie]),(0,ju.useFrame)((ne,fe)=>{if(!ie)return;if(ie.setResolutionFromRenderer(P,S),q.current&&F){let It=F.sync(Lt(),c,C);F.updateBounds(ie.root),C&&ie.forEachLoadedModel(Gn=>ka(Gn,It))}if(ie.update(),!le.current){let It=new Kn.Box3;if(ie.getBoundingBox(It)){le.current=!0,ie.group.updateMatrixWorld(),It.applyMatrix4(ie.group.matrixWorld);let Gn=It.getBoundingSphere(new Kn.Sphere);Z.current={centre:Gn.center.clone(),radius:It.getSize(new Kn.Vector3).length()*.5},N.current.onTilesetBounds?.(It),v()}}I.current&&(I.current=!1,rt());let ye=Math.min(Math.max(R,0),1),ke=J.current;Math.abs(ke-ye)>1e-4?(J.current=Kn.MathUtils.lerp(ke,ye,1-Math.exp(-6*fe)),ka(ie.group,Lt()),v()):ke!==ye&&(J.current=ye,ka(ie.group,Lt()),v());let wt=ie,it=ie.lruCache,ot=it.isFull(),xe=te.current,Ve=xe.loosened&&he.current?he.current:{bytes:it.maxBytesSize,items:it.maxSize},je=0;for(let It of it.usedSet??[])je+=it.bytesMap?.get(It)??0;let en=!1,fr=ie;for(let It of fr.usedSet??[]){let Gn=It.internal?.loadingState??W0;if(It.traversal?.used&&It.internal?.hasContent&&Gn>=pA&&Gn<W0){en=!0;break}}let Dt=Ee.current??(Ee.current={world:new Kn.Matrix4,projection:new Kn.Matrix4}),Ut=!Dt.world.equals(P.matrixWorld)||!Dt.projection.equals(P.projectionMatrix);Ut&&(Dt.world.copy(P.matrixWorld),Dt.projection.copy(P.projectionMatrix));let Bn={full:ot,wanting:en,moved:Ut,usage:Math.max(je/Math.max(1,Ve.bytes),(it.usedSet?.size??0)/Math.max(1,Ve.items)),now:performance.now()},Fn=Ux(xe,Bn);Fn!==xe&&(Fn.loosened&&(!xe.loosened||Fn.raisedAt!==xe.raisedAt)?(xe.loosened||(he.current=Ve),it.maxBytesSize=Math.max(Ve.bytes,it.cachedBytes??0)*Xh,it.maxSize=Math.ceil(Math.max(Ve.items,it.itemSet?.size??0)*Xh)):!Fn.loosened&&xe.loosened&&he.current&&(it.maxBytesSize=he.current.bytes,it.maxSize=he.current.items,he.current=null),te.current=Fn,ie.errorTarget=n*Fn.factor,v()),!X.current&&ot&&Bn.wanting&&Fn.factor>=Ys&&(X.current=!0,console.warn("[react-immersive] The tile memory budget is full even at the coarsest level of detail, so the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB."));let Br=jx(Fn,Bn);Br===0?v():Br!==null&&$.current===null&&($.current=setTimeout(()=>{$.current=null,v()},Br)),((wt.stats?.downloading??0)>0||(wt.stats?.parsing??0)>0||wt.loadProgress!==void 0&&wt.loadProgress<1&&!ot)&&v()}),ie?(0,fl.jsxs)("group",{rotation:t,children:[F?(0,fl.jsx)("primitive",{object:F.group}):null,(0,fl.jsx)("primitive",{object:ie.group,onClick:be,onDoubleClick:Le,onPointerDown:b?pe.onPointerDown:void 0,onPointerMove:Ke,onPointerOut:ft})]}):null}var Fu=require("three");var bA=new Fu.Matrix4().makeRotationX(Math.PI/2);function $0(e){e.updateMatrixWorld(!0);let t=new Fu.Matrix4().copy(e.matrixWorld).invert().premultiply(bA),n=new Fu.Matrix4,r=[];for(let[i,o]of Object.entries(fi(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 Ae=require("react"),Am=require("@react-three/drei"),Xo=require("@react-three/fiber"),Rr=require("three");var Cm=require("three");function Tm(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 Pm(e){return e.category?.trim()??""}function K0(e,t){if(t===null)return e;let n=new Set(t.map(r=>r.trim()));return e.filter(r=>n.has(Pm(r)))}function Z0(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 Gu(e){return!!e&&[e.position,e.target].every(t=>Array.isArray(t)&&t.length===3&&t.every(Number.isFinite))}function Fa(e){let t=e.camera;return{position:e.getPosition(new Cm.Vector3,!1).toArray(),target:e.getTarget(new Cm.Vector3,!1).toArray(),azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle,fov:"fov"in t?Number(t.fov):null,zoom:t.zoom}}function gl(e,t){Gu(t)&&(e.setLookAt(...t.position,...t.target,!0),Number.isFinite(t.azimuthAngle)&&Number.isFinite(t.polarAngle)&&e.rotateTo(t.azimuthAngle,t.polarAngle,!0),Wo(e,t))}function Wo(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 Kt=require("react/jsx-runtime"),yA=.02;function Q0(e,t,n=!1){let r=(0,Ae.useRef)(null),[i,o]=(0,Ae.useState)(!0),a=(0,Ae.useRef)(!0),s=(0,Ae.useMemo)(()=>new Rr.Vector3,[]),l=(0,Xo.useThree)(m=>m.scene),c=(0,Ae.useRef)(null),d=(0,Ae.useMemo)(()=>new Rr.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),p=(0,Ae.useMemo)(()=>new Rr.Vector3,[]),u=(0,Ae.useMemo)(()=>new Rr.Vector3,[]),h=(0,Ae.useMemo)(()=>new Rr.Vector3,[]);return(0,Ae.useEffect)(()=>{c.current=null},[e.anchorNodeName]),(0,Xo.useFrame)(({camera:m})=>{let b=r.current,f=b?.parent;if(!b||!f)return;let g=c.current;if(e.anchorNodeName&&(!g||!g.parent)&&(g=$r(l,e.anchorNodeName),c.current=g),g?(g.updateWorldMatrix(!0,!1),p.copy(d).applyMatrix4(g.matrixWorld)):(p.copy(d),f.localToWorld(p)),t){let x=t.current.get(e.id);x||(x=new Rr.Vector3,t.current.set(e.id,x)),x.copy(p)}m.getWorldPosition(s);let y=!n||Z0(e,s.distanceTo(p));y!==a.current&&(a.current=y,o(y)),h.copy(s).sub(p),h.lengthSq()>0?(h.normalize(),u.copy(p).addScaledVector(h,yA)):u.copy(p),f.worldToLocal(u),b.position.copy(u)}),{anchorRef:r,inRange:i}}function vA({annotation:e,occluders:t,worldPositionsRef:n,onClick:r,onHover:i,showAnnotationOnHover:o}){let a=ve(),[s,l]=(0,Ae.useState)(!1),{anchorRef:c,inRange:d}=Q0(e,n,!0),p=s||!d,[u,h]=(0,Ae.useState)(!1),[m,b]=(0,Ae.useState)(1),f=(0,Ae.useRef)(null),g=(0,Ae.useRef)(null),y=(0,Ae.useRef)(null);(0,Ae.useEffect)(()=>{d||(f.current&&clearTimeout(f.current),u&&(h(!1),i?.(null)))},[d,u,i]),(0,Ae.useEffect)(()=>()=>{f.current&&(clearTimeout(f.current),f.current=null),y.current&&(clearTimeout(y.current),y.current=null)},[]);let x=C=>{C.stopPropagation(),C.preventDefault(),f.current&&(clearTimeout(f.current),f.current=null),f.current=window.setTimeout(()=>{r?.(e),f.current=null},10)},_=C=>{C.stopPropagation(),h(!0),b(100),y.current&&(clearTimeout(y.current),y.current=null),i?.(e)},L=C=>{C.stopPropagation(),h(!1),b(1),y.current&&clearTimeout(y.current),y.current=window.setTimeout(()=>{i?.(null),o&&i?.(null),y.current=null},50)},w=C=>{C.stopPropagation();let P=C.currentTarget;P.dataset.pointerX=String(C.clientX),P.dataset.pointerY=String(C.clientY)},R=C=>{C.stopPropagation();let P=C.currentTarget,S=parseFloat(P.dataset.pointerX||"0"),v=parseFloat(P.dataset.pointerY||"0"),A=C.clientX-S,E=C.clientY-v;Math.sqrt(A*A+E*E)<10&&x(C)};return(0,Kt.jsx)("group",{ref:c,children:(0,Kt.jsx)(Am.Html,{center:!0,occlude:t,onOcclude:l,pointerEvents:p?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:p?"none":"auto",zIndex:m},className:"annotation-html-wrapper",transparent:!0,children:(0,Kt.jsx)("div",{ref:g,className:`ri-annotationMarker ${u?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:p?"none":"flex"},onPointerDown:w,onPointerUp:R,onPointerEnter:_,onPointerLeave:L,onDoubleClick:C=>{C.stopPropagation(),r?.(e)},role:"button",tabIndex:0,"aria-label":a("annotationMarker",{id:e.id,title:e.title}),onKeyDown:C=>{(C.key==="Enter"||C.key===" ")&&(C.preventDefault(),C.stopPropagation(),r?.(e))},children:(0,Kt.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function xA({annotation:e,occluders:t,popupRef:n,onClose:r,hideCloseButton:i=!1}){let o=ve(),[a,s]=(0,Ae.useState)(!1),{anchorRef:l}=Q0(e),c=(0,Kt.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:a?"none":"block"},onPointerDown:d=>d.stopPropagation(),onClick:d=>d.stopPropagation(),children:[(0,Kt.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,Kt.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!i&&(0,Kt.jsx)("button",{onClick:d=>{d.stopPropagation(),r?.()},className:"ri-viewAnnotationClose","aria-label":o("closeAnnotation"),children:"\xD7"})]}),e.category&&(0,Kt.jsx)("span",{className:"ri-annotationCategory",children:e.category}),e.description&&(0,Kt.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description}),e.images?.map((d,p)=>{let u=Tm(d.src);return u?(0,Kt.jsx)("img",{className:"ri-annotationImage",src:u,alt:d.alt??"",loading:"lazy"},`${u}-${p}`):null}),e.links?.map((d,p)=>{let u=Tm(d.href);return u?(0,Kt.jsx)("a",{className:"ri-annotationLink",href:u,target:"_blank",rel:"noopener noreferrer",children:d.label||o("learnMore")},`${u}-${p}`):null})]});return(0,Kt.jsx)("group",{ref:l,children:(0,Kt.jsx)(Am.Html,{occlude:t,onOcclude:s,pointerEvents:a?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:a?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function Hu({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:r,canvasRootRef:i,worldPositionsRef:o,modelLoaded:a,onAnnotationClick:s,onAnnotationHover:l,onCloseAnnotation:c,hideCloseButton:d=!1,showAnnotationOnHover:p=!1}){let u=(0,Xo.useThree)(I=>I.invalidate),h=(0,Xo.useThree)(I=>I.scene),[m,b]=(0,Ae.useState)(null),[f,g]=(0,Ae.useState)(!1),y=(0,Ae.useRef)(null);(0,Ae.useEffect)(()=>{y.current!==null&&n===null&&(b(null),g(!1)),y.current=n?.id??null},[n]);let x=(0,Ae.useRef)(null),_=(0,Ae.useRef)(null),L=(0,Ae.useRef)(null),w=(0,Ae.useMemo)(()=>{let I=[];return h.traverse(F=>{let O=F;O.isMesh&&!O.isSkinnedMesh&&I.push({current:F})}),I},[h,e,a]),R=(0,Ae.useCallback)(()=>{u();let I=()=>{u(),_.current=window.requestAnimationFrame(()=>{u(),_.current=null})};_.current=window.requestAnimationFrame(I)},[u]);(0,Ae.useEffect)(()=>{R()},[e,R]),(0,Ae.useEffect)(()=>{R()},[n,R]),(0,Ae.useEffect)(()=>()=>{_.current!==null&&window.cancelAnimationFrame(_.current),L.current&&clearTimeout(L.current)},[]);let C=n||m,P=(0,Ae.useMemo)(()=>C?e.find(I=>I.id===C.id)??null:null,[C,e]),S=(0,Ae.useCallback)(I=>{if(f&&m?.id===I.id){g(!1),b(null),c?.();return}g(!0),b(I),s?.(I)},[f,m,s,c]),v=(0,Ae.useCallback)(I=>{l?.(I),p&&!f&&(L.current&&(clearTimeout(L.current),L.current=null),I?b(I):L.current=window.setTimeout(()=>{b(null),c?.(),L.current=null},100))},[f,l,p,c]),A=(0,Ae.useCallback)(()=>{g(!1),b(null),c?.()},[c]),E=(0,Ae.useCallback)(I=>{let F=I.target;if(F.closest?.(".ri-annotationMarker")||F.closest?.(".ri-viewAnnotationPopup")||F.closest?.(".annotation-html-wrapper"))return;let O=i.current;O&&O.contains(F)&&(g(!1),b(null),c?.())},[i,c]),B=(0,Ae.useCallback)(I=>{I.key==="Escape"&&f&&(g(!1),b(null),c?.())},[f,c]);(0,Ae.useEffect)(()=>{let I=i.current;return I&&(I.addEventListener("click",E),I.addEventListener("pointerdown",E)),document.addEventListener("keydown",B),()=>{I&&(I.removeEventListener("click",E),I.removeEventListener("pointerdown",E)),document.removeEventListener("keydown",B)}},[i,E,B]);let N=(0,Ae.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(I=>I*Math.PI/180),[t?.model.rotation]);return(0,Ae.useEffect)(()=>{u()},[u,N]),(0,Xo.useFrame)((I,F)=>{if(!x.current)return;x.current.rotation.x=Rr.MathUtils.lerp(x.current.rotation.x,N[0],1-Math.exp(-5*F)),x.current.rotation.y=Rr.MathUtils.lerp(x.current.rotation.y,N[1],1-Math.exp(-5*F)),x.current.rotation.z=Rr.MathUtils.lerp(x.current.rotation.z,N[2],1-Math.exp(-5*F));let{rotation:O}=x.current;Math.abs(O.x-N[0])+Math.abs(O.y-N[1])+Math.abs(O.z-N[2])>1e-4&&u()}),(0,Kt.jsxs)("group",{ref:x,children:[e.map(I=>{let F=`${I.worldPosition.join(",")}-${I.title}-${I.id}`;return(0,Kt.jsx)(vA,{annotation:I,occluders:w,worldPositionsRef:o,onClick:S,onHover:v,showAnnotationOnHover:p},F)}),P?(0,Kt.jsx)(xA,{annotation:P,occluders:w,popupRef:r,onClose:A,hideCloseButton:d},`popup-${P.id}`):null]})}var _i=require("react"),qu=require("@react-three/drei");var Xu=require("react"),J0=require("@react-three/drei"),ew=require("@react-three/fiber"),Or=require("three");var Wu=require("react/jsx-runtime");function eo(e){return(0,ew.useThree)(n=>Yr(n.gl))?(0,Wu.jsx)(wA,{...e}):(0,Wu.jsx)(J0.Line,{points:e.points,color:e.color,lineWidth:e.lineWidth,dashed:e.dashed})}function wA({points:e,color:t,dashed:n=!1}){let r=(0,Xu.useMemo)(()=>{let i=new Or.BufferGeometry().setFromPoints(e.map(s=>s instanceof Or.Vector3?s:new Or.Vector3(...s))),o=n?new Or.LineDashedMaterial({color:t,dashSize:.02,gapSize:.02}):new Or.LineBasicMaterial({color:t}),a=new Or.Line(i,o);return n&&a.computeLineDistances(),a},[e,t,n]);return(0,Xu.useEffect)(()=>()=>{r.geometry.dispose(),r.material.dispose()},[r]),(0,Wu.jsx)("primitive",{object:r})}var $t=require("three");var Se=require("react/jsx-runtime"),to="#22d3ee",_A="#facc15";function qo(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function tw(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function MA(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 wi({position:e,children:t}){return(0,Se.jsx)(qu.Html,{center:!0,position:e,zIndexRange:[20,0],style:{pointerEvents:"none"},children:(0,Se.jsx)("div",{className:"ri-measureLabel",children:t})})}function nw({positions:e,triangles:t}){let n=(0,_i.useMemo)(()=>{let r=new $t.Vector3(...e[0]),i=new $t.BufferGeometry;return i.setAttribute("position",new $t.Float32BufferAttribute(e.flatMap(o=>new $t.Vector3(...o).sub(r).toArray()),3)),i.setIndex(t.flat()),i},[e,t]);return(0,_i.useEffect)(()=>()=>n.dispose(),[n]),(0,Se.jsx)("mesh",{position:e[0],geometry:n,raycast:()=>{},renderOrder:100,children:(0,Se.jsx)("meshBasicMaterial",{color:to,side:$t.DoubleSide,transparent:!0,opacity:.18,depthWrite:!1})})}var SA=[[0,1,2]];function CA({positions:e}){let t=Uc(e);if(t===null)return null;let n=new $t.Vector3(...e[1]),r=new $t.Vector3(...e[0]).sub(n),i=new $t.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 $t.Vector3(0,1,0):new $t.Vector3(1,0,0)),a.normalize();let s=t*Math.PI/180,l=Array.from({length:33},(d,p)=>r.clone().applyAxisAngle(a,s*p/32).multiplyScalar(o).add(n).toArray()),c=r.clone().applyAxisAngle(a,s/2).multiplyScalar(o*1.4).add(n).toArray();return(0,Se.jsxs)(Se.Fragment,{children:[(0,Se.jsx)(eo,{points:l,color:to,lineWidth:2}),(0,Se.jsxs)(wi,{position:c,children:[t.toFixed(2),"\xB0"]})]})}function TA({box:e,unit:t}){let n=(0,_i.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,_i.useMemo)(()=>{let[s,l,c]=e.size,d=new $t.BoxGeometry(s||1e-4,l||1e-4,c||1e-4),p=new $t.EdgesGeometry(d);return d.dispose(),p},[e.size]);(0,_i.useEffect)(()=>()=>{r.dispose()},[r]);let[i,o,a]=e.size;return(0,Se.jsxs)("group",{position:n,children:[(0,Se.jsx)("lineSegments",{geometry:r,children:(0,Se.jsx)("lineBasicMaterial",{color:_A})}),(0,Se.jsxs)(wi,{position:[0,-o/2,a/2],children:["W ",qo(i,t)]}),(0,Se.jsxs)(wi,{position:[-i/2,0,a/2],children:["H ",qo(o,t)]}),(0,Se.jsxs)(wi,{position:[i/2,-o/2,0],children:["D ",qo(a,t)]})]})}function Yu({points:e,unit:t,box:n,showDimensions:r,tool:i="distance",areaClosed:o=!1,snapPreview:a}){let s=(0,_i.useMemo)(()=>e.map(d=>d.position),[e]),l=(0,_i.useMemo)(()=>i==="area"&&o?jc(s):null,[i,o,s]),c=i==="pointToPlane"&&e.length===2?nv(e[0],e[1].position):null;return(0,Se.jsxs)("group",{children:[i!=="wrap"&&i!=="wrapHorizontal"&&e.map(d=>(0,Se.jsx)(qu.Html,{center:!0,position:d.position,zIndexRange:[15,0],style:{pointerEvents:"none"},children:(0,Se.jsx)("div",{className:`ri-measureDot${d.snapped?" ri-measureDot--snapped":""}`})},d.id)),i==="distance"&&e.slice(1).map((d,p)=>{let u=e[p].position,h=d.position,m=new $t.Vector3(...u).distanceTo(new $t.Vector3(...h));return(0,Se.jsxs)("group",{children:[(0,Se.jsx)(eo,{points:[u,h],color:to,lineWidth:2}),(0,Se.jsx)(wi,{position:tw(u,h),children:qo(m,t)})]},`${e[p].id}-${d.id}`)}),(i==="angle"||i==="area")&&s.length>=2&&(0,Se.jsx)(eo,{points:o?[...s,s[0]]:s,color:to,lineWidth:2}),i==="angle"&&(0,Se.jsx)(CA,{positions:s}),l&&!("error"in l)&&(0,Se.jsxs)(Se.Fragment,{children:[(0,Se.jsx)(nw,{positions:s,triangles:l.triangles}),(0,Se.jsx)(wi,{position:l.center,children:qo(l.area,t?`${t}\xB2`:"")})]}),i==="pointToPlane"&&e[0]?.faceVertices&&(0,Se.jsxs)(Se.Fragment,{children:[(0,Se.jsx)(nw,{positions:e[0].faceVertices,triangles:SA}),(0,Se.jsx)(eo,{points:[...e[0].faceVertices,e[0].faceVertices[0]],color:to,lineWidth:1}),e.length===1&&(0,Se.jsx)(wi,{position:e[0].position,children:"Reference plane"})]}),c&&(0,Se.jsxs)(Se.Fragment,{children:[(0,Se.jsx)(eo,{points:[e[1].position,c.projection],color:to,lineWidth:2}),(0,Se.jsx)(eo,{points:[e[0].position,c.projection],color:to,lineWidth:1,dashed:!0}),(0,Se.jsx)(wi,{position:tw(e[1].position,c.projection),children:qo(c.distance,t)})]}),(i==="wrap"||i==="wrapHorizontal")&&s.length>=3&&(0,Se.jsxs)(Se.Fragment,{children:[(0,Se.jsx)(eo,{points:[...s,s[0]],color:to,lineWidth:2}),(0,Se.jsx)(wi,{position:MA(s),children:qo(Mh(s,!0),t)})]}),a&&(0,Se.jsxs)(qu.Html,{center:!0,position:a.position,zIndexRange:[20,0],style:{pointerEvents:"none"},children:[(0,Se.jsx)("div",{className:"ri-measureSnapTarget"}),(0,Se.jsx)("div",{className:"ri-measureSnapLabel",children:a.snapped==="vertex"?"Vertex":"Edge"})]}),r&&n?(0,Se.jsx)(TA,{box:n,unit:t}):null]})}var no=require("lucide-react"),$u=require("react"),lt=require("react/jsx-runtime");function Em(e){let t=ve(),n=(0,$u.useRef)(null);(0,$u.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,lt.jsxs)("div",{ref:n,className:"ri-measureTools",style:{top:e.top},children:[(0,lt.jsxs)("div",{className:"ri-measureToolbarRow",children:[(0,lt.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,lt.jsx)(no.PencilRuler,{size:16})}),(0,lt.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,lt.jsx)(no.RulerDimensionLine,{size:16})}),e.active&&(0,lt.jsxs)(lt.Fragment,{children:[(0,lt.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementTool"),value:r,disabled:e.disabled,onChange:s=>e.onTool(s.target.value),children:[(0,lt.jsx)("option",{value:"distance",children:t("distance")}),(0,lt.jsx)("option",{value:"angle",children:t("angle")}),(0,lt.jsx)("option",{value:"area",children:t("area")}),(0,lt.jsx)("option",{value:"pointToPlane",children:t("pointToPlane")}),(0,lt.jsx)("option",{value:"wrap",children:t("wrap")}),(0,lt.jsx)("option",{value:"wrapHorizontal",children:t("wrapHorizontal")})]}),(0,lt.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementSnapping"),value:e.snap,disabled:e.disabled,onChange:s=>e.onSnap(s.target.value),children:[(0,lt.jsx)("option",{value:"none",children:t("noSnapping")}),(0,lt.jsx)("option",{value:"auto",children:t("snapAuto")}),(0,lt.jsx)("option",{value:"vertex",children:t("snapVertex")}),(0,lt.jsx)("option",{value:"edge",children:t("snapEdge")})]})]}),i>0&&(0,lt.jsxs)(lt.Fragment,{children:[(0,lt.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onUndo,disabled:e.disabled,title:t("undoMeasurementPoint"),children:(0,lt.jsx)(no.Undo2,{size:16})}),(0,lt.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onClear,disabled:e.disabled,title:t("clearMeasurements"),children:(0,lt.jsx)(no.Eraser,{size:16})})]}),e.active&&r==="area"&&!o&&(0,lt.jsx)("button",{type:"button",className:"ri-measureFinish",onClick:e.onFinishArea,disabled:e.disabled||i<3,children:t("finishArea")})]}),e.active&&(0,lt.jsx)("div",{className:`ri-measureHint${e.error?" ri-measureHint--error":""}`,role:"status",children:e.error?t.message(e.error):a})]})}var Je=require("react"),Yo=require("@react-three/xr"),aw=require("@react-three/fiber"),bl=require("three"),Lr=require("react/jsx-runtime"),PA=1,rw=1,AA=.1,EA=10;function RA(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:PA/s,offset:[-o,-e.min[1],-a]}}function iw(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function ow(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var OA=(0,Je.forwardRef)(function({box:t,scaleMode:n,children:r,onARStateChange:i},o){let a=(0,Je.useRef)(null),s=(0,Je.useRef)(null),l=(0,Je.useRef)(null),c=(0,Yo.useXR)(I=>I.session!=null),d=(0,Yo.useXR)(I=>I.mode==="immersive-ar"),p=(0,Je.useMemo)(()=>t?RA(t,n):null,[t,n]),u=(0,Je.useRef)(new bl.Vector3(0,0,-rw)),h=(0,Je.useRef)(1),m=(0,Je.useRef)(0),b=(0,Je.useRef)(!0),f=(0,Je.useRef)(!1),g=(0,Je.useMemo)(()=>new bl.Matrix4,[]),y=(0,Je.useRef)(new bl.Vector3),x=(0,Je.useRef)(!1),_=(0,Je.useRef)(null),L=(0,Je.useRef)(!1),w=(0,Je.useRef)(0),R=(0,Je.useRef)(0),C=(0,Je.useRef)(1),P=(0,Je.useRef)(0),S=(0,Je.useCallback)(()=>{if(!i||!d)return;let I={canPlace:x.current,isPlacementMode:b.current,isModelPlaced:f.current},F=_.current;F&&F.canPlace===I.canPlace&&F.isPlacementMode===I.isPlacementMode&&F.isModelPlaced===I.isModelPlaced||(_.current=I,i(I))},[d,i]),v=(0,Je.useCallback)(()=>!d||!x.current?!1:(u.current.copy(y.current),f.current=!0,b.current=!1,S(),!0),[S,d]),A=(0,Je.useCallback)(()=>{d&&(b.current=!0,S())},[S,d]),E=(0,Je.useCallback)(()=>{let I=v();return!I&&d&&(b.current=!1,S()),I},[S,d,v]),B=(0,Je.useCallback)(()=>{d&&(b.current=!1,S())},[S,d]);(0,Je.useImperativeHandle)(o,()=>({placeCurrent:v,startPlacementMode:A,finishPlacementMode:E,cancelPlacementMode:B}),[B,E,v,A]),(0,Je.useEffect)(()=>{if(!c){u.current.set(0,0,-rw),h.current=1,m.current=0,x.current=!1,L.current=!1,b.current=!0,f.current=!1,_.current=null;return}d&&(x.current=!1,L.current=!1,b.current=!0,f.current=!1,_.current=null,S())},[S,c,d]),(0,Yo.useXRHitTest)((I,F)=>{if(!d||I.length===0){x.current&&(x.current=!1,S());return}F(g,I[0])&&(y.current.setFromMatrixPosition(g),x.current||(x.current=!0,S()))},"viewer"),(0,Yo.useXRInputSourceEvent)("all","select",()=>{!d||L.current||!b.current||v()},[d,v]),(0,Je.useEffect)(()=>{if(!d)return;let I=T=>{T.touches.length===2&&(L.current=!0,w.current=iw(T.touches),R.current=ow(T.touches),C.current=h.current,P.current=m.current)},F=T=>{if(!L.current||T.touches.length!==2)return;T.preventDefault();let z=iw(T.touches);if(w.current>0){let Z=z/w.current;h.current=Math.min(EA,Math.max(AA,C.current*Z))}let q=ow(T.touches);m.current=P.current-(q-R.current)},O=T=>{T.touches.length===0&&requestAnimationFrame(()=>{L.current=!1})};return window.addEventListener("touchstart",I),window.addEventListener("touchmove",F,{passive:!1}),window.addEventListener("touchend",O),window.addEventListener("touchcancel",O),()=>{window.removeEventListener("touchstart",I),window.removeEventListener("touchmove",F),window.removeEventListener("touchend",O),window.removeEventListener("touchcancel",O)}},[d]),(0,aw.useFrame)(()=>{let I=a.current,F=s.current;if(!I||!F)return;!c||!p?(I.visible=!0,I.position.set(0,0,0),I.rotation.set(0,0,0),F.scale.setScalar(1)):(I.visible=!d||f.current,I.position.copy(u.current),I.rotation.set(0,m.current,0),F.scale.setScalar(p.scale*h.current));let O=l.current;if(O){let T=d&&b.current&&x.current;O.visible=T,T&&O.position.copy(y.current)}});let N=c&&p?p.offset:[0,0,0];return(0,Lr.jsxs)(Lr.Fragment,{children:[(0,Lr.jsxs)("mesh",{ref:l,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,Lr.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,Lr.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,Lr.jsx)("group",{ref:a,children:(0,Lr.jsx)("group",{ref:s,children:(0,Lr.jsx)("group",{position:N,children:r})})})]})}),sw=OA;var Zu=require("react");var LA="ri:license-grant:v1",DA={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},lw=new Map;function uw(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function cw(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return uw(t.padEnd(Math.ceil(t.length/4)*4,"="))}function IA(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 Ku(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 Rm(e,t){return`${LA}:${t}:${e}`}function BA(e,t){let n=lw.get(e);if(n)return n;let r=crypto.subtle.importKey("spki",uw(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return lw.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=DA[i];if(r!=="ri1"||!l||!o||!a||s.length>0)return null;let c=JSON.parse(new TextDecoder().decode(cw(o)));if(!IA(c)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await BA(i,l),cw(a),new TextEncoder().encode(`${r}.${i}.${o}`)))return null;let p=Math.floor(Date.now()/1e3),u=c.expiresAt-c.issuedAt;return c.licenseKeyHash!==t||c.domain!==n||c.expiresAt<=p||c.issuedAt>p+300||u<=0||u>43200?null:{environment:c.environment,tier:c.tier,expiresAt:c.expiresAt}}catch{return null}}async function dw(e,t,n){try{return await Om(e,await Ku(t),n)}catch{return null}}async function pw(e,t,n){try{let r=await Ku(t);return await Om(e,r,n)?(localStorage.setItem(Rm(r,n),e),!0):!1}catch{return!1}}async function hw(e,t){try{let n=await Ku(e),r=Rm(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 Lm(e,t){try{let n=await Ku(e);localStorage.removeItem(Rm(n,t))}catch{}}var kA=["localhost","127.0.0.1","0.0.0.0"],NA=e=>kA.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),gw="https://react-immersive.liveroom.dev/api/validate-license",bw=()=>typeof window<"u",VA=300*1e3,zA=5e3,UA=400,Im=new Map,Dm=new Map,ro=class extends Error{},yw=async(e,t,n)=>{let r=await hw(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},mw=async(e,t,n)=>{let r=await yw(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})},jA=e=>e instanceof ro||e instanceof TypeError,FA=()=>new Promise(e=>setTimeout(e,UA)),GA=e=>e==="development"||e==="production",HA=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&&!GA(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},WA=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},vw=(e,t,n)=>`${n}::${e}::${t}`,xw=e=>{let t=Im.get(e);return t?Date.now()-t.timestamp>VA?(Im.delete(e),null):t.result:null},XA=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),qA=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function YA(e,t,n,r){let i=vw(e,t,r),o=xw(i);if(o)return o;let a=Dm.get(i);if(a)return a;let s=(async()=>{for(let l=0;l<2;l+=1)try{return await $A(e,t,n,i,r)}catch(c){if(!jA(c))throw c;if(l===0){let d=await yw(e,t,n);if(d)return d;await FA();continue}return mw(e,t,n)}return mw(e,t,n)})().finally(()=>{Dm.delete(i)});return Dm.set(i,s),s}async function $A(e,t,n,r,i){let o=new AbortController,a=setTimeout(()=>o.abort(),zA),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(d){throw o.signal.aborted?new ro("License validation timed out"):d}finally{clearTimeout(a)}let l;try{l=await s.json()}catch{throw new ro(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new ro(`License server error (${s.status})`);let d=WA(l)??`License validation failed${s.status?` (${s.status})`:""}`;return await Lm(e,t),qA(d,n)}if(!HA(l))throw new ro("License server returned an unexpected payload");let c=XA(l,n);if(c.status==="valid"&&i!==gw){let d=l.offlineGrant?await dw(l.offlineGrant,e,t):null;if(!d)throw new ro("License validation endpoint did not return a verifiable signed grant");c={...c,environment:d.environment,tier:d.tier}}return c.status==="valid"?(Im.set(r,{result:c,timestamp:Date.now()}),l.offlineGrant&&(await pw(l.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await Lm(e,t),c}var fw=(e,t)=>{let n=e.trim();return!bw()||!n?null:xw(vw(n,window.location.hostname.toLowerCase(),t))},ww=(e,t=gw)=>{let[n,r]=(0,Zu.useState)(()=>fw(e,t)??{status:"checking",isLocalDomain:!1});return(0,Zu.useEffect)(()=>{if(!bw())return;let i=!1,o=p=>{i||r(p)},a=e.trim(),s=window.location.hostname.toLowerCase(),l=NA(s),c=fw(e,t);return c?(o(c),()=>{i=!0}):(o({status:"checking",isLocalDomain:l}),a?((async()=>{try{o(await YA(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 Bt=require("react");var dn=require("react/jsx-runtime"),KA={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},ZA={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"},Qu=({direction:e})=>{let t=KA[e],n=ZA[e];return(0,dn.jsxs)("svg",{"aria-hidden":"true",className:"mc__arrow-icon",focusable:"false",viewBox:"0 0 24 24",width:t.width,height:t.height,fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{display:"block",width:`${t.width}px`,height:`${t.height}px`,pointerEvents:"none",padding:0,margin:0,overflow:"visible"},children:[(0,dn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,dn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Mi=16,QA={"bottom-left":{bottom:Mi,left:Mi,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Mi,right:Mi,top:"auto",left:"auto",transform:"none"},"top-left":{top:Mi,left:Mi,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Mi,right:Mi,bottom:"auto",left:"auto",transform:"none"},center:{top:"50%",left:"50%",bottom:"auto",right:"auto",transform:"translate(-50%, -50%)"},"center-bottom":{bottom:-10,left:"50%",top:"auto",right:"auto",transform:"translateX(-50%)"},"center-top":{top:Mi,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},JA=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:r=.001,rotateSensitivity:i=.01,position:o="center-bottom"})=>{let a=ve(),s=(0,Bt.useRef)(null),[l,c]=(0,Bt.useState)({x:0,y:0}),d=(0,Bt.useRef)(!1),p=(0,Bt.useRef)({x:0,y:0}),u=(0,Bt.useRef)(void 0),h=(0,Bt.useRef)(void 0),m=(0,Bt.useRef)(null),b=(0,Bt.useRef)(0),f=()=>e.current,g=(B,N,I)=>{let F=Math.hypot(B,N);if(F>I){let O=I/F;return{x:B*O,y:N*O}}return{x:B,y:N}},y=B=>{let I=Math.abs(B);return I<.12?0:Math.sign(B)*((I-.12)/(1-.12))},x=(0,Bt.useCallback)(()=>{let B=()=>{let{x:N,y:I}=p.current,F=y(N),O=y(I);if(t&&(F!==0||O!==0)){let T=f();T&&T.rotate(-F*i,-O*i,!0)}u.current=requestAnimationFrame(B)};u.current=requestAnimationFrame(B)},[t,i]),_=(0,Bt.useCallback)(()=>{u.current&&cancelAnimationFrame(u.current)},[]),L=(0,Bt.useCallback)((B,N)=>{if(!s.current||!d.current)return;let I=s.current.getBoundingClientRect(),F=I.left+I.width/2,O=I.top+I.height/2,T=I.width/2-18,z=B-F,q=N-O,Z=g(z,q,T);c(Z),p.current={x:Z.x/T,y:Z.y/T}},[]),w=(0,Bt.useCallback)(B=>{if(!t)return;B.preventDefault(),B.stopPropagation(),d.current=!0,x();let N="touches"in B?B.touches[0]:B;L(N.clientX,N.clientY)},[t,x,L]),R=(0,Bt.useCallback)(B=>{if(!d.current)return;B.preventDefault();let N="touches"in B?B.touches[0]:B;L(N.clientX,N.clientY)},[L]),C=(0,Bt.useCallback)(()=>{d.current=!1,c({x:0,y:0}),p.current={x:0,y:0},_()},[_]),P=r*10,S=(0,Bt.useCallback)(B=>{t&&f()?.forward(B*P,!0)},[t,P]),v=(0,Bt.useCallback)(B=>{t&&f()?.truck(B*P,0,!0)},[t,P]),A=(0,Bt.useCallback)((B,N,I)=>{if(!t)return;h.current&&cancelAnimationFrame(h.current),m.current={control:B,amount:N,action:I},b.current=0,I(N);let F=O=>{if(!m.current)return;if(b.current===0){b.current=O,h.current=requestAnimationFrame(F);return}if(O-b.current>200){let{amount:z,action:q}=m.current;q(z),b.current=O}h.current=requestAnimationFrame(F)};h.current=requestAnimationFrame(F)},[t]),E=(0,Bt.useCallback)(B=>{m.current?.control===B&&(h.current&&(cancelAnimationFrame(h.current),h.current=void 0),m.current=null,b.current=0)},[]);return(0,Bt.useEffect)(()=>(window.addEventListener("mousemove",R),window.addEventListener("mouseup",C),window.addEventListener("touchmove",R,{passive:!1}),window.addEventListener("touchend",C),window.addEventListener("touchcancel",C),()=>{window.removeEventListener("mousemove",R),window.removeEventListener("mouseup",C),window.removeEventListener("touchmove",R),window.removeEventListener("touchend",C),window.removeEventListener("touchcancel",C),_(),h.current&&cancelAnimationFrame(h.current)}),[R,C,_]),t?(0,dn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...QA[o]},children:(0,dn.jsxs)("div",{className:"mc__dpad",children:[(0,dn.jsx)("button",{"aria-label":a("moveForward"),className:"mc__arrow mc__arrow--up",onMouseDown:()=>A("up",1,S),onMouseUp:()=>E("up"),onMouseLeave:()=>E("up"),onTouchStart:B=>{B.preventDefault(),A("up",1,S)},onTouchEnd:()=>E("up"),onTouchCancel:()=>E("up"),children:(0,dn.jsx)(Qu,{direction:"up"})}),(0,dn.jsxs)("div",{className:"mc__middle-row",children:[(0,dn.jsx)("button",{"aria-label":a("moveLeft"),className:"mc__arrow mc__arrow--left",onMouseDown:()=>A("left",-1,v),onMouseUp:()=>E("left"),onMouseLeave:()=>E("left"),onTouchStart:B=>{B.preventDefault(),A("left",-1,v)},onTouchEnd:()=>E("left"),onTouchCancel:()=>E("left"),children:(0,dn.jsx)(Qu,{direction:"left"})}),(0,dn.jsx)("div",{ref:s,className:"mc__joystick",onMouseDown:w,onTouchStart:w,children:(0,dn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${l.x}px, ${l.y}px)`}})}),(0,dn.jsx)("button",{"aria-label":a("moveRight"),className:"mc__arrow mc__arrow--right",onMouseDown:()=>A("right",1,v),onMouseUp:()=>E("right"),onMouseLeave:()=>E("right"),onTouchStart:B=>{B.preventDefault(),A("right",1,v)},onTouchEnd:()=>E("right"),onTouchCancel:()=>E("right"),children:(0,dn.jsx)(Qu,{direction:"right"})})]}),(0,dn.jsx)("button",{"aria-label":a("moveBackward"),className:"mc__arrow mc__arrow--down",onMouseDown:()=>A("down",-1,S),onMouseUp:()=>E("down"),onMouseLeave:()=>E("down"),onTouchStart:B=>{B.preventDefault(),A("down",-1,S)},onTouchEnd:()=>E("down"),onTouchCancel:()=>E("down"),children:(0,dn.jsx)(Qu,{direction:"down"})})]})}):null},_w=JA;var Tt=require("react"),km=require("three");var Bm=new WeakSet;function Ga(e){Bm.add(e)}function Mw(e){let t=Bm.has(e);return t&&Bm.delete(e),t}var dr=require("three");function Sw(e,t){let n=Fa(e);if(!(e.camera instanceof dr.PerspectiveCamera)||!t)return n;let r=t instanceof dr.Box3?t:new dr.Box3().setFromObject(t);return r.isEmpty()||(n.framing={aspect:e.camera.aspect,min:r.min.toArray(),max:r.max.toArray()}),n}function Ju(e,t){let n=t.camera,r=e.framing;if(!(n instanceof dr.PerspectiveCamera)||!r||!(n.aspect>0)||Math.abs(n.aspect-r.aspect)<1e-6)return[...e.position];let i=new dr.Vector3(...e.position),o=new dr.Vector3(...e.target),a=i.clone().sub(o).normalize(),s=new dr.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 c=0;for(let d of[r.min[0],r.max[0]])for(let p of[r.min[1],r.max[1]])for(let u of[r.min[2],r.max[2]]){let h=new dr.Vector3(d,p,u).sub(i).applyMatrix4(s);c=Math.max(c,Math.abs(h.x)/(l*n.aspect)+h.z,Math.abs(h.y)/l+h.z)}return i.addScaledVector(a,c*1.02).toArray()}function Cw(e){return[e.x,e.y,e.z]}function Si(e,t){let n=new km.Vector3,r=new km.Vector3;return t.getPosition(n),t.getTarget(r),{position:Cw(n),target:Cw(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 eE(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 yl(e,t,n=.6){let r=e.smoothTime;e.smoothTime=Aa(e,n);try{return await t()}finally{e.smoothTime=r}}function ed(e={}){let t=(0,Tt.useRef)(e);t.current=e;let n=(0,Tt.useRef)(null),[r,i]=(0,Tt.useState)(null),[o,a]=(0,Tt.useState)(()=>({...e.presets})),s=(0,Tt.useRef)(o);s.current=o;let l=(0,Tt.useCallback)(P=>{i(S=>eE(S,P)?S:P)},[]),c=(0,Tt.useCallback)(P=>{l(P)},[l]),d=(0,Tt.useRef)(null),p=(0,Tt.useRef)(null),u=(0,Tt.useRef)(null),h=(0,Tt.useCallback)(P=>{n.current=P;let S=Si(P.raw.controls.camera,P.raw.controls);l(S),P.raw.scene!==p.current&&(p.current=P.raw.scene,d.current=null,u.current=null),P.homeCameraState&&!d.current&&(d.current=P.homeCameraState);let{initialPosition:v,initialTarget:A,initialTransition:E=!1}=t.current;if((v||A)&&P.raw.scene&&(v||P.homeCameraState)&&u.current!==P.raw.controls){u.current=P.raw.controls,P.homeCameraState||Ga(P.raw.controls);let B=v??S.position,N=A??S.target;P.raw.controls.setLookAt(B[0],B[1],B[2],N[0],N[1],N[2],E).then(()=>{if(n.current?.raw.controls!==P.raw.controls)return;let I=Si(P.raw.controls.camera,P.raw.controls);d.current={position:I.position,target:I.target},l(I)}).catch(()=>{})}},[l]),m=(0,Tt.useCallback)(async()=>{let P=n.current,S=P?.raw.controls;if(!S)return!1;try{let v=d.current;if(v){Wo(S,v);let A=Ju(v,S);await yl(S,()=>S.setLookAt(A[0],A[1],A[2],v.target[0],v.target[1],v.target[2],!0))}else P?.raw.scene?await yl(S,()=>S.fitToBox(P.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await yl(S,()=>S.reset(!0));return!0}catch{return!1}},[]),b=(0,Tt.useCallback)(async()=>{let P=n.current;if(!P?.raw.controls||!P.raw.scene)return!1;try{return await yl(P.raw.controls,()=>P.raw.controls.fitToBox(P.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),f=(0,Tt.useCallback)(async P=>{let S=n.current;if(!S?.raw.controls)return!1;let v=Xt(S.objectBindings,P);if(!v)return!1;let A=S.raw.nodes[v];if(!A)return!1;try{return await yl(S.raw.controls,()=>S.raw.controls.fitToBox(A,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),g=(0,Tt.useCallback)(async(P,S=!0)=>{let v=n.current?.raw.controls;if(!v)return!1;try{return n.current?.homeCameraState||Ga(v),await v.setTarget(P[0],P[1],P[2],S),l(Si(v.camera,v)),!0}catch{return!1}},[l]),y=(0,Tt.useCallback)(async(P,S=!0)=>{let v=n.current?.raw.controls;if(!v)return!1;try{n.current?.homeCameraState||Ga(v);let A=[v.setLookAt(P.position[0],P.position[1],P.position[2],P.target[0],P.target[1],P.target[2],S)];P.azimuthAngle!=null&&P.polarAngle!=null&&A.push(v.rotateTo(P.azimuthAngle,P.polarAngle,S)),await Promise.all(A);let E=v.camera,B=!1;return P.fov!=null&&"fov"in E&&typeof E.fov=="number"&&(E.fov=P.fov,B=!0),P.zoom!=null&&"zoom"in E&&typeof E.zoom=="number"&&(E.zoom=P.zoom,B=!0),B&&"updateProjectionMatrix"in E&&E.updateProjectionMatrix(),l(Si(E,v)),!0}catch{return!1}},[l]),x=(0,Tt.useCallback)((P,S=!0)=>y(P,S),[y]),_=(0,Tt.useCallback)((P,S,v=!0)=>y({position:P,target:S},v),[y]),L=(0,Tt.useCallback)(async(P,S,v=!0)=>{let A=n.current?.raw.controls;if(!A)return!1;try{return n.current?.homeCameraState||Ga(A),await A.rotateTo(P*Math.PI/180,S*Math.PI/180,v),l(Si(A.camera,A)),!0}catch{return!1}},[l]),w=(0,Tt.useCallback)(async(P,S=!0)=>{let v=n.current?.raw.controls;if(!v)return!1;try{return n.current?.homeCameraState||Ga(v),await v.dollyTo(P,S),l(Si(v.camera,v)),!0}catch{return!1}},[l]),R=(0,Tt.useCallback)(P=>{let S=n.current?.raw.controls,v=P.trim();if(!S||!v)return null;let A=Si(S.camera,S);return s.current={...s.current,[v]:A},a(E=>({...E,[v]:A})),l(A),A},[l]),C=(0,Tt.useCallback)((P,S=!0)=>{let v=s.current[P];return v?y(v,S):Promise.resolve(!1)},[y]);return{cameraState:r,cameraPresets:o,resetView:m,focusObject:f,fitScene:b,setCameraTarget:g,setCameraState:x,lookAt:_,orbitTo:L,dollyTo:w,savePreset:R,goToPreset:C,handleCameraChange:c,handleViewerReady:h}}var vl=require("three");function td(e){return[e.x,e.y,e.z]}function Tw(e){let t=new vl.Box3().setFromObject(e),n=0;return e.traverse(r=>{r.isMesh&&(n+=1)}),{bounds:{min:td(t.min),max:td(t.max),center:td(t.getCenter(new vl.Vector3)),size:td(t.getSize(new vl.Vector3))},objectCount:n,materialVariants:Nh(e),materialVariantGroups:Jc(e)}}function tE(e){return typeof e=="object"&&!Array.isArray(e)}function nE(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 wn(e,t){if(tE(t))return Object.entries(e).filter(([,i])=>nE(i,t)).map(([i])=>i);let r=(typeof t=="string"?[t]:t).map(i=>Xt(e,i)).filter(i=>i!==null);return[...new Set(r)]}function nd(e,t){return wn(e,t).map(n=>e[n]).filter(n=>n!==void 0)}var rE="#ff3b30",iE=Object.freeze({}),Pw=e=>e;function oE(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function aE(e,t){let n=e.metadata;for(let r of t.split(".")){if(!oE(n))return;n=n[r]}return n}function sE(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 aE(e,t.metadata)===t.equals}function lE(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 Nm=e=>`#${e.map(t=>Math.round(t).toString(16).padStart(2,"0")).join("")}`;function Vm(e,t){let n=e.map(([l,c])=>({at:l,rgb:lE(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 Nm(n[0].rgb);let r=n[n.length-1];if(t>=r.at)return Nm(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 Nm(o.rgb.map((l,c)=>l+(a.rgb[c]-l)*s))}function rd(e,t){if(!t?.length)return{bindings:e,pulses:iE,sourceOf:Pw};let n=new Map,r={};for(let a of t){let s=a.target?wn(e,a.target):Object.keys(e),l=a.when?Array.isArray(a.when)?a.when:[a.when]:[];for(let c of s){let d=e[c];if(!l.every(u=>sE(d,u)))continue;let p={...a.material};if(a.colorScale){let u=d.metrics?.[a.colorScale.metric],h=typeof u=="number"?Vm(a.colorScale.stops,u):null;h&&(p={...p,[a.colorScale.channel??"baseColor"]:h})}if(a.pulse){let u=a.pulse===!0?{}:a.pulse;r[c]={color:u.color??rE,speed:u.speed!==void 0&&u.speed>0?u.speed:1};let h=p.emissiveIntensity??n.get(c)?.emissiveIntensity??d.style?.material?.emissiveIntensity;h!==void 0&&h>0||(p.emissiveIntensity=1)}Object.keys(p).length>0&&n.set(c,{...n.get(c),...p})}}if(n.size===0)return{bindings:e,pulses:r,sourceOf:Pw};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 cE=.12,Aw=new Set;function xl(e,t){return t?new Set(wn(e,t.target)):Aw}function id(e,t){let n=xl(e.bindings,t);if(!t||n.size===0)return{...e,setAside:Aw};let r=Math.min(Math.max(t.ghostOpacity??cE,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 Ow=require("react");var Rw=require("react"),zm=require("@react-three/fiber"),Ew=new WeakMap;function od(e){let t=(0,zm.useThree)(r=>r.get),n=(0,zm.useThree)(r=>r.setEvents);(0,Rw.useEffect)(()=>{if(!e)return;let r=Ew.get(t);if(!r){let o=new Set;r=o,Ew.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(d=>{for(let p of o)if(!p(d))return!1;return!0})}})}r.add(e);let i=r;return()=>{i.delete(e)}},[e,t,n])}function Um({setAside:e,nodeRefs:t}){let n=(0,Ow.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 od(n),null}var Un=require("react"),Nw=require("@react-three/drei"),Ha=require("@react-three/fiber"),$o=require("three");var jm=require("three"),ad={x:0,y:1,z:2},Lw=e=>Math.min(Math.max(e,0),1);function Fm(e,t){let n=ad[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)*Lw(o)}function Dw(e,t,n){let r=Fm(t,n);if(r===null)return!1;let i=new jm.Vector3;return i.setComponent(ad[n.axis],n.flip?1:-1),e.normal.copy(i),e.constant=n.flip?-r:r,!0}function Iw(e,t,n,r){let i=ad[r],o=new jm.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 Bw(e,t,n){let r=ad[t],i=e.max[r]-e.min[r];return i>0?Lw((n-e.min[r])/i):null}var Ko=require("react/jsx-runtime"),uE={x:0,y:1,z:2},kw="#22d3ee";function Gm({section:e,box:t,modelRef:n,showHandle:r,onPositionChange:i,onDraggingChange:o}){let a=(0,Ha.useThree)(b=>b.gl),s=(0,Ha.useThree)(b=>b.raycaster),l=(0,Ha.useThree)(b=>b.invalidate),c=(0,Un.useMemo)(()=>new $o.Plane,[]),d=(0,Un.useMemo)(()=>[c],[c]),p=e.enabled&&t!==null&&Dw(c,t,e),u=(0,Un.useRef)(new Map),h=()=>{for(let[b,f]of u.current)b.clippingPlanes=f.clippingPlanes,b.side=f.side,b.needsUpdate=!0;u.current.clear()};(0,Un.useEffect)(()=>{if(p)return a.localClippingEnabled=!0,l(),()=>{h(),l()}},[p,a,l]),(0,Un.useEffect)(()=>{p&&l()},[p,e.axis,e.position,e.flip,t,l]),(0,Ha.useFrame)(()=>{let b=n.current;if(!p||!b)return;let f=u.current;b.traverse(g=>{let y=g.material;if(y)for(let x of Array.isArray(y)?y:[y]){let _=f.get(x);if(x.clippingPlanes===d&&x.side===$o.DoubleSide)continue;let L=x.side===$o.DoubleSide&&_?_.side:x.side;f.set(x,{clippingPlanes:_?_.clippingPlanes:x.clippingPlanes,side:L}),x.clippingPlanes=d,x.clipShadows=!0,x.side=$o.DoubleSide,x.needsUpdate=!0}})});let m=(0,Un.useMemo)(()=>p?b=>!!b.object.userData.riSectionHandle||c.distanceToPoint(b.point)>=-1e-4:null,[p,c]);return od(m),(0,Un.useEffect)(()=>{if(!p)return;let b=s,f=b.firstHitOnly;return b.firstHitOnly=!1,()=>{b.firstHitOnly=f}},[p,s]),!p||!r||!t?null:(0,Ko.jsx)(dE,{section:e,box:t,onPositionChange:i,onDraggingChange:o})}function dE({section:e,box:t,onPositionChange:n,onDraggingChange:r}){let[i,o]=(0,Un.useState)(!1),[a,s]=(0,Un.useState)(!1),l=(0,Un.useRef)(null),c=uE[e.axis],d=Fm(t,e)??0,p=[0,1,2].map(g=>(t.max[g]-t.min[g])*1.08||.01),u=[0,1,2].map(g=>(t.min[g]+t.max[g])/2);u[c]=d;let[h,m]=e.axis==="x"?[p[2],p[1]]:e.axis==="y"?[p[0],p[2]]:[p[0],p[1]],b=e.axis==="x"?[0,Math.PI/2,0]:e.axis==="y"?[-Math.PI/2,0,0]:[0,0,0],f=g=>{a&&(g.target?.releasePointerCapture?.(g.pointerId),l.current=null,s(!1),r(!1))};return(0,Ko.jsxs)("mesh",{ref:g=>{g&&(mc(g),g.userData.riSectionHandle=!0)},position:u,rotation:b,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(c),cut:d},s(!0),r(!0)},onPointerMove:g=>{let y=l.current;if(!a||!y)return;g.stopPropagation();let x=Iw(g.ray,y.point,y.direction,e.axis);if(x===null)return;let _=Bw(t,e.axis,y.cut+(x-y.coordinate));_!==null&&n(_)},onPointerUp:f,onPointerCancel:f,onClick:g=>g.stopPropagation(),children:[(0,Ko.jsx)("planeGeometry",{args:[h,m]}),(0,Ko.jsx)("meshBasicMaterial",{color:kw,transparent:!0,opacity:a?.22:i?.16:.08,side:$o.DoubleSide,depthWrite:!1,toneMapped:!1}),(0,Ko.jsx)(Nw.Edges,{color:kw,renderOrder:3})]})}var Vw=require("react-colorful"),io=require("react/jsx-runtime"),Hm=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:r,inline:i=!1})=>{let o=ve();return(0,io.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,io.jsx)("p",{className:"ri-popoverLabel",children:o("color")}),(0,io.jsx)(Vw.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>r(s=>({...s,[e.objectId]:{...s[e.objectId],hex:a}}))}),(0,io.jsxs)("div",{className:"ri-inlineRow",children:[(0,io.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,io.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:o("done")})]})]})};var nt=require("react/jsx-runtime"),Wm=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:r,canPlaceImage:i=!0,inline:o=!1,offset:a,rotationDegrees:s,onOffsetChange:l,onRotationChange:c,isPositioning:d=!1,onEndPositioning:p})=>{let u=ve();return(0,nt.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:h=>h.stopPropagation(),children:[(0,nt.jsx)("div",{className:"ri-popoverHeader",children:(0,nt.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:u("material")})}),(0,nt.jsxs)("div",{className:"ri-materialBody",children:[t?(0,nt.jsx)("div",{className:"ri-previewFrame",children:(0,nt.jsx)("img",{src:t,alt:u("texturePreview"),className:"ri-previewImage"})}):(0,nt.jsxs)("div",{className:"ri-emptyState",children:[(0,nt.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,nt.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,nt.jsx)("span",{style:{fontSize:12},children:u("noTextureApplied")})]}),i?(0,nt.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:u(t?"replaceImage":"uploadImage")}):(0,nt.jsx)("p",{className:"ri-formatHint",children:u("noTextureCoordinates")}),t&&(0,nt.jsx)("button",{onClick:()=>r(e.objectId),className:"ri-removeButton",children:u("removeTexture")}),i?(0,nt.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}):null,t&&(l||c)&&(0,nt.jsxs)("div",{className:"ri-texturePosition",children:[(0,nt.jsx)("p",{className:"ri-texturePositionLabel",children:u("texturePosition")}),(0,nt.jsxs)("div",{className:"ri-texturePositionGrid",children:[(0,nt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,nt.jsx)("span",{children:u("offsetX")}),(0,nt.jsx)("input",{type:"number",step:.01,value:a?.[0]??0,onChange:h=>l?.(e.objectId,0,Number(h.target.value))})]}),(0,nt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,nt.jsx)("span",{children:u("offsetY")}),(0,nt.jsx)("input",{type:"number",step:.01,value:a?.[1]??0,onChange:h=>l?.(e.objectId,1,Number(h.target.value))})]})]}),(0,nt.jsxs)("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[(0,nt.jsx)("span",{children:u("rotation")}),(0,nt.jsxs)("div",{className:"ri-texturePositionSliderRow",children:[(0,nt.jsx)("input",{type:"range",min:0,max:360,step:1,value:s??0,onChange:h=>c?.(e.objectId,Number(h.target.value))}),(0,nt.jsx)("input",{type:"number",min:0,max:360,step:1,value:Math.round(s??0),onChange:h=>c?.(e.objectId,Number(h.target.value))})]})]}),d?(0,nt.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:p,title:u("confirmTexturePosition"),children:u("donePositioning")}):(0,nt.jsx)("p",{className:"ri-texturePositionHint",children:u("textureOffsetHint")})]})]})]})};var pr=require("react");var dt=require("react/jsx-runtime");function zw({entries:e}){return(0,dt.jsx)(dt.Fragment,{children:e.map(([t,n])=>{let r=n!==null&&typeof n=="object",i=r?Object.entries(n):[];return r&&i.length>0?(0,dt.jsxs)("div",{className:"left-panel__data-group",children:[(0,dt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,dt.jsx)("div",{className:"left-panel__data-children",children:(0,dt.jsx)(zw,{entries:i})})]},t):(0,dt.jsxs)("div",{className:"left-panel__data-row",children:[(0,dt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,dt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:r?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function pE({content:e}){let t=e!=null,[n,r]=(0,pr.useState)(t),[i,o]=(0,pr.useState)(t),a=(0,pr.useRef)(e);return t&&(a.current=e),(0,pr.useEffect)(()=>{if(t){r(!0);return}if(n){o(!1);let s=setTimeout(()=>r(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,pr.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>o(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,dt.jsx)("div",{className:`left-panel__action-extra${i?" left-panel__action-extra--open":""}`,children:(0,dt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??a.current})}):null}function Xm({isOpen:e,selectedObject:t,currentAction:n,onClose:r,onAction:i,renderActionExtra:o,translateDefaultActions:a=!1}){let s=ve(),[l,c]=(0,pr.useState)(t);(0,pr.useEffect)(()=>{t&&c(t)},[t]);let d=t??l,p=d?Object.entries(d).filter(([u])=>u!=="actions"&&u!=="decals"):[];return(0,dt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:d&&(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsxs)("div",{className:"left-panel__header",children:[(0,dt.jsx)("p",{className:"left-panel__title",children:d.label}),(0,dt.jsx)("button",{onClick:r,className:"left-panel__close-btn","aria-label":s("closePanel"),children:"\u2715"})]}),p.length>0&&(0,dt.jsx)("div",{className:"left-panel__data",children:(0,dt.jsx)(zw,{entries:p})}),(0,dt.jsx)("hr",{className:"left-panel__divider"}),d.actions&&d.actions.length>0&&(0,dt.jsxs)(dt.Fragment,{children:[(0,dt.jsx)("div",{className:"left-panel__actions-label",children:s("actions")}),(0,dt.jsx)("div",{className:"left-panel__actions-list",children:d.actions.map((u,h)=>{let m=n?.action.id===u.id&&(n.binding===d||n.binding?.id===d.id||n.binding?.modelObjectId===d.modelObjectId||n.objectId===d.id||n.objectId===d.modelObjectId),b=o?.(u.id);return(0,dt.jsxs)(pr.Fragment,{children:[(0,dt.jsx)("button",{onClick:f=>i({objectId:d.modelObjectId||d.id||"",action:u,binding:d,screenX:f.clientX,screenY:f.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${u.id}`,m?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":u.id,"data-label":u.label,children:a?s.message(u.label):u.label}),(0,dt.jsx)(pE,{content:b})]},h)})})]})]})})}var wl=require("react"),sd=require("lucide-react");var Uw=require("react");var _n=require("react/jsx-runtime");function jw({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:r,searchValue:i,onSearchChange:o,searchPlaceholder:a,children:s,isOpen:l,onToggle:c,openButtonIcon:d,closeButtonIcon:p,closeButtonAriaLabel:u}){let h=ve(),[m,b]=(0,Uw.useState)(!1),f=l!==void 0?l:m,g=y=>{l===void 0&&b(y),c?.(y)};return(0,_n.jsxs)("div",{className:`ri-sidepanel-wrap ${f?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!f&&(0,_n.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>g(!0),"aria-label":t,title:h("openPanel"),children:[d,e?(0,_n.jsx)("span",{children:e}):null]}),(0,_n.jsxs)("div",{className:`ri-sidepanel ${f?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!f,children:[(0,_n.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,_n.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,_n.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,_n.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>g(!1),"aria-label":u,title:h("close"),children:p??(0,_n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,_n.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,_n.jsx)("p",{className:"ri-sidepanel__title",children:r})]}),(0,_n.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,_n.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:a,value:i,onChange:y=>o(y.target.value)})}),(0,_n.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var hr=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=ve(),[c,d]=(0,wl.useState)(null),[p,u]=(0,wl.useState)(""),h=(0,wl.useMemo)(()=>Object.entries(e).filter(([m,b])=>{let f=p.toLowerCase();return m.toLowerCase().includes(f)||(b.label??"").toLowerCase().includes(f)}),[e,p]);return(0,hr.jsx)(jw,{openButtonLabel:"",openButtonAriaLabel:l("openSceneObjectsPanel"),openButtonIcon:(0,hr.jsx)(sd.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:l("sceneObjects"),title:l("visibleEntries",{count:h.length}),searchValue:p,onSearchChange:u,searchPlaceholder:l("searchNodesLabels"),isOpen:i,onToggle:o,closeButtonAriaLabel:l("closeSceneObjectsPanel"),children:h.map(([m,b])=>{let f=b.visible!==!1,g=c===m,y=a?.has(m)??!1;return(0,hr.jsxs)("div",{onClick:()=>n(b),onMouseEnter:()=>{d(m),r?.(b)},onMouseLeave:()=>{d(null),r?.(null)},className:`ri-sidepanel__row${g?" ri-sidepanel__row--hovered":""}${a!==null&&!y?" ri-sidepanel__row--setAside":""}`,children:[(0,hr.jsx)("button",{type:"button",className:`ri-sidepanel__label ri-sidepanel__labelButton${g?" ri-sidepanel__label--hovered":""}`,onFocus:()=>{d(m),r?.(b)},onBlur:()=>{d(null),r?.(null)},children:b.label??m}),s?(0,hr.jsx)("button",{type:"button",onClick:_=>{_.stopPropagation(),s(b)},className:`ri-sidepanel__isolate-btn${y?" ri-sidepanel__isolate-btn--active":""}`,title:l(y?"showAll":"isolate"),"aria-label":l(y?"showAllObject":"isolateObject",{name:b.label??m}),"aria-pressed":y,children:(0,hr.jsx)(sd.Focus,{width:14,height:14,"aria-hidden":"true"})}):null,(0,hr.jsx)("button",{type:"button",onClick:_=>{_.stopPropagation(),t?.({objectId:m,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:b})},className:"ri-sidepanel__vis-btn",title:l(f?"hide":"show"),"aria-label":l(f?"hideObject":"showObject",{name:b.label??m}),children:(0,hr.jsx)("span",{className:`ri-sidepanel__checkbox${f?" ri-sidepanel__checkbox--checked":""}`,children:f&&(0,hr.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,hr.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},m)})})}var Dr=require("react");function Fw(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 Gw(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 Hw(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 c=((o+l)%e.length+e.length)%e.length;if(e[c].label.toLocaleLowerCase().startsWith(s))return c}return null}var oo=require("react/jsx-runtime"),hE=600;function Ww({objects:e,selectedKey:t,onHighlight:n,onSelect:r,onClearSelection:i}){let o=ve(),a=(0,Dr.useId)(),[s,l]=(0,Dr.useState)(!1),[c,d]=(0,Dr.useState)(null),p=(0,Dr.useRef)({query:"",at:0}),u=c?e.findIndex(_=>_.key===c):-1,h=u>=0?e[u]:null;(0,Dr.useEffect)(()=>{t&&e.some(_=>_.key===t)&&d(t)},[t,e]);let m=s?h?.binding??null:null,b=(0,Dr.useRef)(n);b.current=n,(0,Dr.useEffect)(()=>{if(s)return b.current(m),()=>b.current(null)},[s,m]);let f=_=>{_!==null&&e[_]&&d(e[_].key)},g=_=>{let L=h?u:-1,w=Gw(_.key,Math.max(L,0),e.length);if(w!==null){_.preventDefault(),f(L<0&&_.key!=="End"?0:w);return}if(_.key==="Enter"||_.key===" "){if(!h)return;_.preventDefault(),r(h.binding);return}if(_.key==="Escape"){if(!t)return;_.preventDefault(),_.stopPropagation(),i();return}if(_.key.length===1&&_.key!==" "&&!_.ctrlKey&&!_.metaKey&&!_.altKey){let R=Date.now(),C=p.current;C.query=R-C.at>hE?_.key:C.query+_.key,C.at=R,_.preventDefault(),f(Hw(e,L,C.query))}};if(e.length===0)return null;let y=`${a}-option`,x=`${a}-hint`;return(0,oo.jsxs)("div",{className:`ri-objectNavigator${s?" ri-objectNavigator--focused":""}`,children:[(0,oo.jsx)("div",{role:"listbox",tabIndex:0,className:"ri-objectNavigator__list","aria-label":o("objectNavigator"),"aria-describedby":x,"aria-activedescendant":h?y:void 0,onFocus:()=>{l(!0),h||d(e[0].key)},onBlur:()=>l(!1),onKeyDown:g,children:h?(0,oo.jsxs)("div",{id:y,role:"option","aria-selected":h.key===t,"aria-setsize":e.length,"aria-posinset":u+1,className:`ri-objectNavigator__option${h.key===t?" ri-objectNavigator__option--selected":""}`,children:[(0,oo.jsx)("span",{className:"ri-objectNavigator__name",children:h.label}),(0,oo.jsx)("span",{className:"ri-objectNavigator__position","aria-hidden":"true",children:o("objectNavigatorPosition",{position:u+1,count:e.length})})]}):null}),(0,oo.jsx)("div",{id:x,className:"ri-objectNavigator__hint",children:o("objectNavigatorHint")})]})}var Xw=require("react"),qw="(prefers-reduced-motion: reduce)";function mE(e){if(typeof window>"u"||!window.matchMedia)return()=>{};let t=window.matchMedia(qw);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}var fE=()=>typeof window<"u"&&!!window.matchMedia?.(qw).matches;function Yw(e="user"){let t=(0,Xw.useSyncExternalStore)(mE,fE,()=>!1);return e==="always"?!0:e==="never"?!1:t}var uM=require("lucide-react");var ld=require("react"),gE=(0,ld.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var cd=()=>(0,ld.useContext)(gE);var ao=require("react/jsx-runtime");function $w({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,ao.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[i&&(0,ao.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,ao.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a,children:(0,ao.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${a}%`}})}),(0,ao.jsxs)("span",{className:"bb-loadingProgress__label",children:[a,"%"]})]}),n!=="success"&&(0,ao.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}function bE(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 yE(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 Ym(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 Kw(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 ud(e,t=!0){let n=Ym(e);return{id:bE(e),modelObjectId:e,type:n,label:yE(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:Kw(n,t),metrics:{},metadata:{}}}function Zw(e,t){return Object.fromEntries(e.map(n=>[n,ud(n,!t?.has(n))]))}function dd(e,t){let n=new Set,r={};for(let i of e){let o=ud(i,!t?.has(i)),a=o.id||"object",s=a;for(let c=2;n.has(s);c++)s=`${a}-${c}`;n.add(s),o.id=s;let l=(o.actions??[]).filter(c=>Ts.includes(c.id));o.actions=l.length>0?l:Kw("other",!t?.has(i)),r[i]=o}return r}function Qw(e){let t=new Set;for(let[n,r]of Object.entries(fi(e).nodesById))Pc(r)||t.add(n);return t}function Jw(e){let{nodesById:t}=fi(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 Ce=require("react"),md=require("@react-three/fiber"),fd=require("@react-three/drei"),Qe=require("three");var e_="data:image/png;base64,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";var t_="data:image/png;base64,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";var n_="data:image/png;base64,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";var Be=require("react/jsx-runtime"),$m=-100,Km=100,d_=.03,_E=.03,ME=.03,r_=.5,SE=e_,CE=t_,TE=n_,PE=Math.PI/4,i_=.4,Wa=64,o_=d_*3,Zm="#4d7dff",a_="#ffcc00",s_=.02,AE=new Qe.Vector3(0,1,0),pd=32,l_="#ff9d3d",hd=4;function Qm(e){let t=new Float32Array((Wa+1)*3);for(let n=0;n<=Wa;n++){let r=n/Wa*Math.PI*2,i=Math.cos(r)*i_,o=Math.sin(r)*i_,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 EE(e){let t=Math.abs(e.y)<.99?new Qe.Vector3(0,1,0):new Qe.Vector3(1,0,0),n=new Qe.Vector3().crossVectors(e,t).normalize(),r=new Qe.Vector3().crossVectors(e,n).normalize();return[n,r]}function c_(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 Xa=null,ef=new Set;function Jm(e){Xa!==e&&(Xa=e,ef.forEach(t=>t()))}function RE(e){return ef.add(e),()=>ef.delete(e)}function u_(){return Xa}function p_({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:d,setActiveTab:p,setActiveSubTab:u}=cd(),{camera:h,gl:m,raycaster:b,invalidate:f}=(0,md.useThree)(),g=(0,Ce.useRef)(null),y=(0,Ce.useRef)(null),x=(0,Ce.useRef)(null),_=(0,Ce.useRef)(null),L=(0,Ce.useRef)(null),w=(0,Ce.useRef)(null),R=(0,Ce.useRef)(null),C=(0,Ce.useRef)(null),P=(0,Ce.useRef)(null),S=(0,Ce.useRef)(null),v=(0,Ce.useRef)(null),A=(0,Ce.useMemo)(()=>new Qe.Matrix4,[]),E=(0,Ce.useMemo)(()=>new Qe.Quaternion,[]),B=(0,Ce.useMemo)(()=>new Qe.Vector3(1,1,1),[]),N=(0,Ce.useRef)([0,0,0]),I=(0,Ce.useRef)([0,0,0]),F=(0,Ce.useRef)(!1),O=(0,Ce.useRef)(null),T=(0,Ce.useRef)(null),z=(0,Ce.useRef)(null),q=(0,Ce.useRef)(l);(0,Ce.useEffect)(()=>{q.current=l},[l]);let Z=(0,Ce.useMemo)(()=>new Qe.Vector3(t[0],t[1],t[2]),[t]),J=(0,Ce.useMemo)(()=>new Qe.Euler(n[0],n[1],n[2]),[n]),le=(0,Ce.useMemo)(()=>new Float32Array(6),[]),H=(0,Ce.useMemo)(()=>Qm("x"),[]),X=(0,Ce.useMemo)(()=>Qm("y"),[]),te=(0,Ce.useMemo)(()=>Qm("z"),[]),he=(0,Ce.useMemo)(()=>new Float32Array((pd+1)*3),[]),Ee=(0,Ce.useMemo)(()=>new Float32Array(hd*2*3),[]),$=e?.type==="point",se=e?.type==="spot",we=$?CE:se?TE:SE,Xe=$?_E:se?ME:d_,ie=(0,Ce.useMemo)(()=>new Qe.TextureLoader().load(we),[we]),bt=(0,Ce.useSyncExternalStore)(RE,u_,u_),et=!!e&&bt===e.id,rt=(0,Ce.useRef)(new Qe.Vector3),ce=(0,Ce.useRef)(new Qe.Euler);(0,Ce.useEffect)(()=>{F.current||(rt.current.copy(Z),ce.current.copy(J),f())},[Z,J,f]),(0,Ce.useEffect)(()=>{e&&Xa===e.id&&!o&&Jm(null)},[e?.id,o]),(0,Ce.useEffect)(()=>()=>{e&&Xa===e.id&&Jm(null),z.current!==null&&(cancelAnimationFrame(z.current),z.current=null)},[e?.id]);let Te=(0,Ce.useCallback)(()=>{if(F.current||!et)return;let pe=rt.current,be=new Qe.Quaternion().setFromEuler(ce.current);A.compose(pe,be,B)},[A,B,et]);(0,md.useFrame)(()=>{if(g.current&&g.current.position.copy(rt.current),Te(),x.current){x.current.lookAt(h.position);let pe=h,be;pe.isOrthographicCamera?be=Xe/pe.zoom:be=h.position.distanceTo(rt.current)*Xe,x.current.scale.setScalar(be)}if(R.current){let pe=h,be;pe.isOrthographicCamera?be=o_/pe.zoom:be=h.position.distanceTo(rt.current)*o_,R.current.scale.setScalar(be)}if(L.current){let pe=L.current.getAttribute("position"),be=pe.array;be[0]=0,be[1]=0,be[2]=0,be[3]=rt.current.x,be[4]=rt.current.y,be[5]=rt.current.z,pe.needsUpdate=!0,L.current.computeBoundingSphere()}if(w.current){let pe=rt.current,be=pe.length();w.current.visible=be>r_,be>1e-6&&(w.current.position.copy(pe).multiplyScalar(.5),w.current.scale.set(1,be,1),w.current.quaternion.setFromUnitVectors(AE,pe.clone().normalize()))}if(_.current&&(_.current.visible=rt.current.length()>r_),se&&C.current&&P.current&&S.current){let pe=rt.current,be=pe.length();if(be>1e-6){C.current.visible=!0;let Le=pe.clone().negate().normalize(),Ke=be,ft=e?.angle??Math.PI/6,ne=Ke*Math.tan(ft),fe=pe.clone().add(Le.clone().multiplyScalar(Ke)),[ye,ke]=EE(Le),wt=P.current.getAttribute("position"),it=wt.array;for(let Ve=0;Ve<=pd;Ve++){let je=Ve/pd*Math.PI*2,en=fe.x+(ye.x*Math.cos(je)+ke.x*Math.sin(je))*ne,fr=fe.y+(ye.y*Math.cos(je)+ke.y*Math.sin(je))*ne,Dt=fe.z+(ye.z*Math.cos(je)+ke.z*Math.sin(je))*ne;it[Ve*3]=en,it[Ve*3+1]=fr,it[Ve*3+2]=Dt}wt.needsUpdate=!0,P.current.computeBoundingSphere();let ot=S.current.getAttribute("position"),xe=ot.array;for(let Ve=0;Ve<hd;Ve++){let je=Ve/hd*Math.PI*2,en=fe.x+(ye.x*Math.cos(je)+ke.x*Math.sin(je))*ne,fr=fe.y+(ye.y*Math.cos(je)+ke.y*Math.sin(je))*ne,Dt=fe.z+(ye.z*Math.cos(je)+ke.z*Math.sin(je))*ne,Ut=Ve*6;xe[Ut]=pe.x,xe[Ut+1]=pe.y,xe[Ut+2]=pe.z,xe[Ut+3]=en,xe[Ut+4]=fr,xe[Ut+5]=Dt}ot.needsUpdate=!0,S.current.computeBoundingSphere()}else C.current.visible=!1}});let tt=(0,Ce.useCallback)(()=>{z.current!==null&&(cancelAnimationFrame(z.current),z.current=null),N.current=t,I.current=[n[0],n[1],n[2]],F.current=!0,O.current=null,T.current=null,q.current?.(!0)},[t,n]),At=(0,Ce.useCallback)((pe,be,Le,Ke)=>{let ft=new Qe.Vector3(N.current[0],N.current[1],N.current[2]),ne=new Qe.Vector3,fe=new Qe.Quaternion,ye=new Qe.Vector3;Ke.decompose(ne,fe,ye);let ke=ft.clone().applyMatrix4(Ke),wt=[Math.min(Math.max(ke.x,$m),Km),Math.min(Math.max(ke.y,$m),Km),Math.min(Math.max(ke.z,$m),Km)],it=new Qe.Quaternion().setFromEuler(new Qe.Euler(I.current[0],I.current[1],I.current[2],"XYZ")),ot=new Qe.Quaternion().copy(fe).multiply(it),xe=new Qe.Euler().setFromQuaternion(ot,"XYZ"),Ve=[xe.x,xe.y,xe.z];rt.current.set(wt[0],wt[1],wt[2]),ce.current.set(Ve[0],Ve[1],Ve[2]),O.current=wt,T.current=Ve;let je=new Qe.Quaternion().setFromEuler(ce.current);A.compose(rt.current,je,B),f()},[A,B,f]),Lt=(0,Ce.useCallback)(()=>{F.current=!1;let pe=O.current,be=T.current;O.current=null,T.current=null;let Le=pe&&!c_(pe,N.current),Ke=be&&!c_(be,I.current);Le&&a&&a(pe),Ke&&s&&s(be),Le||Ke?z.current=requestAnimationFrame(()=>{z.current=null,q.current?.(!1)}):q.current?.(!1)},[a,s]);return(0,Ce.useEffect)(()=>{let pe=Ke=>{let ft=m.domElement.getBoundingClientRect();return new Qe.Vector2((Ke.clientX-ft.left)/ft.width*2-1,-((Ke.clientY-ft.top)/ft.height)*2+1)},be=Ke=>!!Ke.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Le=Ke=>{if(be(Ke))return;let ft=pe(Ke);b.setFromCamera(ft,h);let ne=[];if(y.current&&ne.push(y.current),x.current&&ne.push(x.current),ne.length===0)return;if(b.intersectObjects(ne,!1).length>0){let ye=e?.id??null;Xa!==ye&&(Jm(ye),p?.("scene"),u?.("Lighting")),Ke.preventDefault(),Ke.stopPropagation()}};return m.domElement.addEventListener("pointerdown",Le),()=>{m.domElement.removeEventListener("pointerdown",Le)}},[h,b,m,e,p,u]),c!=="scene"||d!=="Lighting"||!e||!o||e.type==="none"||e.type==="hemisphere"?null:(0,Be.jsxs)("group",{ref:pe=>{pe&&mc(pe)},children:[(0,Be.jsxs)("group",{ref:g,children:[(0,Be.jsx)("sprite",{ref:x,children:(0,Be.jsx)("spriteMaterial",{map:ie,transparent:!0,opacity:.9,blending:Qe.AdditiveBlending,depthWrite:!1,rotation:se?PE:0},we)}),(0,Be.jsx)(fd.Sphere,{ref:y,args:[.25,16,16],children:(0,Be.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),$&&(0,Be.jsxs)("group",{ref:R,children:[(0,Be.jsxs)("lineLoop",{renderOrder:999,children:[(0,Be.jsx)("bufferGeometry",{children:(0,Be.jsx)("bufferAttribute",{attach:"attributes-position",args:[H,3],count:Wa+1})}),(0,Be.jsx)("lineBasicMaterial",{color:Zm,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Be.jsxs)("lineLoop",{renderOrder:999,children:[(0,Be.jsx)("bufferGeometry",{children:(0,Be.jsx)("bufferAttribute",{attach:"attributes-position",args:[X,3],count:Wa+1})}),(0,Be.jsx)("lineBasicMaterial",{color:Zm,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Be.jsxs)("lineLoop",{renderOrder:999,children:[(0,Be.jsx)("bufferGeometry",{children:(0,Be.jsx)("bufferAttribute",{attach:"attributes-position",args:[te,3],count:Wa+1})}),(0,Be.jsx)("lineBasicMaterial",{color:Zm,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!$&&!se&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsxs)("mesh",{ref:w,children:[(0,Be.jsx)("cylinderGeometry",{args:[s_,s_,1,8,1,!0]}),(0,Be.jsx)("meshBasicMaterial",{color:a_,transparent:!0,opacity:.05,blending:Qe.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Be.jsxs)("line",{ref:_,children:[(0,Be.jsx)("bufferGeometry",{ref:L,children:(0,Be.jsx)("bufferAttribute",{attach:"attributes-position",args:[le,3],count:2})}),(0,Be.jsx)("lineBasicMaterial",{color:a_,transparent:!0,opacity:.7,blending:Qe.AdditiveBlending})]})]}),se&&(0,Be.jsxs)("group",{ref:C,children:[(0,Be.jsxs)("lineLoop",{renderOrder:999,children:[(0,Be.jsx)("bufferGeometry",{ref:P,children:(0,Be.jsx)("bufferAttribute",{attach:"attributes-position",args:[he,3],count:pd+1})}),(0,Be.jsx)("lineBasicMaterial",{color:l_,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Be.jsxs)("lineSegments",{renderOrder:999,children:[(0,Be.jsx)("bufferGeometry",{ref:S,children:(0,Be.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ee,3],count:hd*2})}),(0,Be.jsx)("lineBasicMaterial",{color:l_,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),et&&a&&(0,Be.jsx)(fd.PivotControls,{ref:v,matrix:A,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:tt,onDrag:At,onDragEnd:Lt})]})}var Oe=require("react"),gd=require("@react-three/drei"),qa=require("@react-three/fiber"),mt=require("three"),h_=require("lucide-react");var so=require("react/jsx-runtime"),OE=.01,tf=.5;function nf({node:e,space:t,moveEnabled:n,scaleEnabled:r,onTransformChange:i,onDraggingChange:o,transform:a}){let s=(0,qa.useThree)($=>$.invalidate),l=(0,qa.useThree)($=>$.camera),c=(0,qa.useThree)($=>$.size),d=(0,Oe.useMemo)(()=>No(e),[e]),p=(0,Oe.useMemo)(()=>new mt.Vector3,[e]);a?.pivot?p.fromArray(a.pivot.point):p.copy(d);let u=(0,Oe.useMemo)(()=>{let $=Fs(e);if(!$)return[p.clone().add(new mt.Vector3(tf,tf,tf))];let se=[];for(let we of[$.min.x,$.max.x])for(let Xe of[$.min.y,$.max.y])for(let ie of[$.min.z,$.max.z])se.push(new mt.Vector3(we,Xe,ie));return se},[e,p]),h=(0,Oe.useMemo)(()=>new mt.Vector3,[]),m=(0,Oe.useMemo)(()=>new mt.Vector3,[]),b=(0,Oe.useRef)(null),f=(0,Oe.useMemo)(()=>new mt.Matrix4,[]),g=(0,Oe.useRef)(!1),y=(0,Oe.useRef)(new mt.Matrix4),x=(0,Oe.useRef)(new mt.Matrix4),_=(0,Oe.useRef)(null),L=(0,Oe.useRef)([]),w=(0,Oe.useRef)(null),R=(0,Oe.useRef)(o);R.current=o;let C=(0,Oe.useMemo)(()=>new mt.Vector3,[]),P=(0,Oe.useMemo)(()=>new mt.Quaternion,[]),S=(0,Oe.useMemo)(()=>new mt.Vector3,[]),v=(0,Oe.useMemo)(()=>new mt.Quaternion,[]),A=(0,Oe.useMemo)(()=>new mt.Vector3(1,1,1),[]),E=(0,Oe.useMemo)(()=>new mt.Quaternion,[]),B=(0,Oe.useMemo)(()=>new mt.Vector3,[]),N=(0,Oe.useMemo)(()=>new mt.Vector3,[]),I=(0,Oe.useRef)([0,0,0]),F=(0,Oe.useRef)(new mt.Vector3(1,1,1)),O=(0,Oe.useRef)({point:[0,0,0],offset:[0,0,0]}),T=(0,Oe.useCallback)(()=>{g.current||(e.updateWorldMatrix(!0,!1),C.copy(p).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(P),v.copy(P),t==="world"&&v.identity(),f.compose(C,v,A))},[C,f,v,A,e,p,t,P]),z=(0,Oe.useCallback)(()=>{e.updateWorldMatrix(!0,!1);let $=1/0;for(let se of u){h.copy(se).applyMatrix4(e.matrixWorld);let we=h.distanceToSquared(l.position);we<$&&($=we,m.copy(h))}b.current?.position.copy(m)},[l,m,u,e,h]);(0,Oe.useLayoutEffect)(()=>(T(),z(),()=>{let $=w.current!==null;$&&(cancelAnimationFrame(w.current),w.current=null),(g.current||$)&&(g.current=!1,R.current(!1));for(let se of L.current)ci(se);L.current=[]}),[T]),(0,qa.useFrame)(()=>{T(),z()});let q=(0,Oe.useCallback)(()=>{w.current!==null&&(cancelAnimationFrame(w.current),w.current=null),e.updateWorldMatrix(!0,!0),L.current=[];for(let $ of Wi(e))Oc($)||(_a($,$.matrixWorld),L.current.push($));e.updateWorldMatrix(!0,!1),C.copy(p).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(P),e.getWorldScale(S),y.current.compose(C,P,S),x.current.copy(f),I.current=[e.rotation.x,e.rotation.y,e.rotation.z],F.current.copy(e.scale),O.current=a?.pivot??iu(p.toArray(),I.current,e.scale.toArray(),e.rotation.order),_.current=null,g.current=!0,o(!0)},[C,f,e,o,p,P,S,a?.pivot]),Z=(0,Oe.useCallback)(($,se)=>{let we=y.current.clone().premultiply(se),Xe=x.current.clone().premultiply(se);we.decompose(B,P,N);let ie=B.clone();Xe.decompose(C,v,A),t==="world"&&v.identity(),f.compose(C,v,A),$.decompose(B,E,N);let bt=new mt.Euler().setFromQuaternion(E,e.rotation.order),[et,rt,ce]=I.current,Te=[et+bt.x,rt+bt.y,ce+bt.z],tt=new mt.Quaternion().setFromEuler(new mt.Euler(Te[0],Te[1],Te[2],e.rotation.order));e.scale.copy(F.current);let Lt=(e.parent?.matrixWorld||new mt.Matrix4).clone().invert(),pe=ie.clone().applyMatrix4(Lt),be=p.clone().multiply(e.scale).applyQuaternion(tt),Le=pe.clone().sub(be);e.position.copy(Le),e.rotation.set(Te[0],Te[1],Te[2],e.rotation.order),e.updateMatrixWorld(!0),s();let Ke=O.current,ft=pe.clone().sub(new mt.Vector3(...Ke.offset)),ne=[ft.x,ft.y,ft.z];_.current={position:ne,rotation:Te,pivot:Ke}},[C,E,f,v,A,s,e,p,B,N,t,P]),J=(0,Oe.useCallback)(()=>{g.current=!1;let $=_.current;if(_.current=null,$)i($),w.current=requestAnimationFrame(()=>{w.current=null,o(!1)});else if(L.current.length>0){for(let se of L.current)ci(se);e.updateMatrixWorld(!0),s(),o(!1)}else o(!1);L.current=[]},[s,e,o,i]),le=(0,Oe.useRef)(null),H=(0,Oe.useCallback)($=>{let se=$.clone().project(l);return{x:c.left+(se.x*.5+.5)*c.width,y:c.top+(-se.y*.5+.5)*c.height}},[l,c]),X=(0,Oe.useCallback)(($,se)=>{let we=Math.max(OE,Number.isFinite($)?$:1);e.scale.copy(F.current).multiplyScalar(we);let ie=(e.parent?.matrixWorld||new mt.Matrix4).clone().invert(),bt=se.clone().applyMatrix4(ie),et=new mt.Quaternion().setFromEuler(e.rotation),rt=p.clone().multiply(e.scale).applyQuaternion(et),ce=bt.clone().sub(rt);e.position.set(ce.x,ce.y,ce.z),e.updateMatrixWorld(!0),z(),s(),_.current={position:bt.clone().sub(new mt.Vector3(...O.current.offset)).toArray(),scale:e.scale.toArray(),pivot:O.current}},[s,e,p,z]),te=(0,Oe.useCallback)($=>{if(!r)return;$.stopPropagation(),$.preventDefault(),$.currentTarget.setPointerCapture($.pointerId),q();let se=C.clone(),we=H(se),Xe=Math.max(1,Math.hypot($.clientX-we.x,$.clientY-we.y));le.current={pointerId:$.pointerId,centerScreen:we,startDistance:Xe,pivotWorld:se}},[q,C,H,r]),he=(0,Oe.useCallback)($=>{let se=le.current;if(!se||$.pointerId!==se.pointerId)return;$.stopPropagation();let we=Math.hypot($.clientX-se.centerScreen.x,$.clientY-se.centerScreen.y);X(we/se.startDistance,se.pivotWorld)},[X]),Ee=(0,Oe.useCallback)($=>{let se=le.current;!se||$.pointerId!==se.pointerId||($.stopPropagation(),$.currentTarget.hasPointerCapture($.pointerId)&&$.currentTarget.releasePointerCapture($.pointerId),le.current=null,J())},[J]);return(0,Oe.useEffect)(()=>{r||le.current&&(le.current=null,J())},[r,J]),(0,so.jsxs)("group",{children:[(0,so.jsx)(gd.PivotControls,{matrix:f,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:q,onDrag:($,se,we,Xe)=>Z(se,Xe),onDragEnd:J}),r&&(0,so.jsx)("group",{ref:b,children:(0,so.jsx)(gd.Html,{portal:void 0,zIndexRange:[10,0],style:{pointerEvents:"none",transition:"opacity 0.2s"},children:(0,so.jsx)("div",{onPointerDown:te,onPointerMove:he,onPointerUp:Ee,onPointerCancel:Ee,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,so.jsx)(h_.Maximize2,{size:13,color:"#ffffff"})})})})]})}var ze=require("react"),bd=require("@react-three/drei"),Ya=require("@react-three/fiber"),Mn=require("three"),f_=require("lucide-react");var _l=require("three");function rf(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 m_(e){return rf(e).map(({key:t,node:n,transform:r})=>{n.updateWorldMatrix(!0,!0);let i=r?.pivot?.point??No(n).toArray(),o=r?.pivot??iu(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 _l.Vector3(...o.point).applyMatrix4(n.matrixWorld)}})}function of(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 _l.Matrix4).invert(),s=a.clone().multiply(t).multiply(r.startWorld),{rotation:l,scale:c,shear:d}=dx(s,r.startScale.clone().multiplyScalar(n),r.startQuaternion),p=r.pivotWorld.clone().applyMatrix4(t).applyMatrix4(a);return i.position.setFromMatrixPosition(s),i.quaternion.copy(l),i.scale.copy(c),ko(i,d),i.updateMatrixWorld(!0),{key:r.key,transform:{position:p.clone().sub(new _l.Vector3(...o.offset)).toArray(),rotation:[i.rotation.x,i.rotation.y,i.rotation.z],scale:c.toArray(),pivot:o,shear:d}}})}var lo=require("react/jsx-runtime"),LE=.01;function af({entries:e,referenceNode:t,space:n,moveEnabled:r,scaleEnabled:i,onTransformChange:o,onDraggingChange:a}){let s=(0,Ya.useThree)(H=>H.invalidate),l=(0,Ya.useThree)(H=>H.camera),c=(0,Ya.useThree)(H=>H.size),d=(0,ze.useRef)(e);d.current=e;let p=(0,ze.useRef)([]);(e.length!==p.current.length||e.some((H,X)=>H.key!==p.current[X].key||H.node!==p.current[X].node))&&(p.current=e);let u=p.current,h=(0,ze.useMemo)(()=>rf(u).map(({node:H})=>H),[u]),m=t??e[e.length-1]?.node,b=(0,ze.useMemo)(()=>new Mn.Vector3,[]),f=(0,ze.useMemo)(()=>new Mn.Quaternion,[]),g=(0,ze.useMemo)(()=>new Mn.Matrix4,[]),y=(0,ze.useMemo)(()=>new Mn.Vector3(1,1,1),[]),x=(0,ze.useMemo)(()=>new Mn.Vector3,[]),_=(0,ze.useRef)(null),L=(0,ze.useMemo)(()=>h.flatMap(H=>{let X=Fs(H);if(!X)return[{node:H,point:No(H).addScalar(.5)}];let te=[];for(let he of[X.min.x,X.max.x])for(let Ee of[X.min.y,X.max.y])for(let $ of[X.min.z,X.max.z])te.push({node:H,point:new Mn.Vector3(he,Ee,$)});return te}),[h]),w=(0,ze.useRef)(!1),R=(0,ze.useRef)(new Mn.Matrix4),C=(0,ze.useRef)([]),P=(0,ze.useRef)(null),S=(0,ze.useRef)([]),v=(0,ze.useRef)(null),A=(0,ze.useRef)(null),E=(0,ze.useRef)(a);E.current=a;let B=(0,ze.useRef)(o);B.current=o;let N=(0,ze.useCallback)(()=>{if(!w.current){b.set(0,0,0);for(let H of h)H.updateWorldMatrix(!0,!1),b.add(No(H).applyMatrix4(H.matrixWorld));h.length&&b.divideScalar(h.length),f.identity(),n==="local"&&m&&(m.updateWorldMatrix(!0,!1),m.getWorldQuaternion(f)),g.compose(b,f,y)}},[b,g,f,h,m,n,y]),I=(0,ze.useCallback)(()=>{let H=1/0,X=new Mn.Vector3;for(let{node:te,point:he}of L){te.updateWorldMatrix(!0,!1),X.copy(he).applyMatrix4(te.matrixWorld);let Ee=X.distanceToSquared(l.position);Ee<H&&(H=Ee,x.copy(X))}_.current?.position.copy(x)},[l,L,x]),F=(0,ze.useCallback)(()=>{let H=A.current;A.current=null,H?.target.hasPointerCapture(H.pointerId)&&H.target.releasePointerCapture(H.pointerId)},[]);(0,ze.useLayoutEffect)(()=>{N(),I()},[N,I]),(0,ze.useLayoutEffect)(()=>()=>{F();let H=v.current!==null;if(H&&(cancelAnimationFrame(v.current),v.current=null),w.current)for(let X of C.current)X.node.matrixAutoUpdate=X.startMatrixAutoUpdate,X.node.matrix.copy(X.startMatrix),X.node.position.copy(X.startPosition),X.node.quaternion.copy(X.startQuaternion),X.node.scale.copy(X.startScale),X.node.updateMatrixWorld(!0);(w.current||H)&&(w.current=!1,P.current=null,E.current(!1),s());for(let X of S.current)ci(X);S.current=[]},[u,s,F]),(0,Ya.useFrame)(()=>{N(),I()});let O=(0,ze.useCallback)(()=>{v.current!==null&&(cancelAnimationFrame(v.current),v.current=null),N(),C.current=m_(d.current),S.current=[];for(let{node:H}of C.current)for(let X of Wi(H))Oc(X)||(_a(X,X.matrixWorld),S.current.push(X));R.current.copy(g),P.current=null,w.current=!0,E.current(!0)},[g,N]),T=(0,ze.useCallback)((H,X)=>{if(!w.current)return;R.current.clone().premultiply(X).decompose(b,f,new Mn.Vector3),n==="world"&&f.identity(),g.compose(b,f,y),P.current=of(C.current,X),I(),s()},[b,g,f,s,n,I,y]),z=(0,ze.useCallback)(()=>{if(!w.current)return;w.current=!1,F();let H=P.current;if(P.current=null,H?.length)v.current=requestAnimationFrame(()=>{v.current=null,E.current(!1)}),B.current(H);else{for(let X of S.current)ci(X);s(),E.current(!1)}S.current=[]},[s,F]);(0,ze.useEffect)(()=>{(!i&&A.current||!r&&w.current&&!A.current)&&z()},[i,r,z]);let q=(0,ze.useCallback)(H=>{let X=H.clone().project(l);return{x:c.left+(X.x*.5+.5)*c.width,y:c.top+(-X.y*.5+.5)*c.height}},[l,c]),Z=(0,ze.useCallback)(H=>{if(!i)return;H.stopPropagation(),H.preventDefault(),H.currentTarget.setPointerCapture(H.pointerId),O();let X=q(b);A.current={pointerId:H.pointerId,target:H.currentTarget,centerScreen:X,startDistance:Math.max(1,Math.hypot(H.clientX-X.x,H.clientY-X.y))}},[O,b,q,i]),J=(0,ze.useCallback)(H=>{let X=A.current;if(!X||H.pointerId!==X.pointerId)return;H.stopPropagation();let te=Math.hypot(H.clientX-X.centerScreen.x,H.clientY-X.centerScreen.y),he=Math.max(LE,te/X.startDistance),Ee=new Mn.Vector3().setFromMatrixPosition(R.current),$=new Mn.Matrix4().makeTranslation(...Ee.toArray()).multiply(new Mn.Matrix4().makeScale(he,he,he)).multiply(new Mn.Matrix4().makeTranslation(...Ee.clone().negate().toArray()));P.current=of(C.current,$,he),I(),s()},[s,I]),le=(0,ze.useCallback)(H=>{H.pointerId===A.current?.pointerId&&(H.stopPropagation(),z())},[z]);return(0,lo.jsxs)("group",{children:[(0,lo.jsx)(bd.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:O,onDrag:(H,X,te,he)=>T(X,he),onDragEnd:z}),i&&(0,lo.jsx)("group",{ref:_,children:(0,lo.jsx)(bd.Html,{children:(0,lo.jsx)("div",{onPointerDown:Z,onPointerMove:J,onPointerUp:le,onPointerCancel:le,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,lo.jsx)(f_.Maximize2,{size:13,color:"#ffffff"})})})})]})}var g_=require("three");function DE(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 g_.Vector3,c=s[0],d=1/0;for(let h of s){l.fromBufferAttribute(o,h);let m=l.distanceToSquared(a);m<d&&(d=m,c=h)}let p=r.getComponent(c,0),u=i.getComponent(c,0);for(let h=1;h<4;h++){let m=i.getComponent(c,h);m>u&&(u=m,p=r.getComponent(c,h))}return t.skeleton.bones[p]??null}function b_(e){let t=DE(e)??e.object,n=Vs(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 y_(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let r=$r(t,e.anchorNodeName);return r?(r.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(r.matrixWorld),!0):!1}var Ci=require("react"),vd=require("@react-three/fiber"),yd=require("three");function xd({annotation:e,enabled:t,controlsRef:n,offsetRef:r}){let i=(0,vd.useThree)(u=>u.scene),o=(0,Ci.useRef)(null),a=(0,Ci.useRef)(!1),s=(0,Ci.useMemo)(()=>new yd.Vector3,[]),l=(0,Ci.useMemo)(()=>new yd.Vector3,[]),c=(0,Ci.useMemo)(()=>new yd.Vector3,[]),d=e?.anchorNodeName,p=e?.anchorLocalPosition;return(0,Ci.useEffect)(()=>{o.current=null,a.current=!1},[d,e?.id]),(0,vd.useFrame)(()=>{let u=n.current,h=r.current;if(!t||!u||!h||!d||!p){a.current=!1;return}let m=o.current;if((!m||!m.parent)&&(m=$r(i,d),o.current=m),!m){a.current=!1;return}m.updateWorldMatrix(!0,!1),s.set(p[0],p[1],p[2]).applyMatrix4(m.matrixWorld),!(a.current&&s.distanceToSquared(l)<1e-8)&&(l.copy(s),a.current=!0,c.copy(s).add(h),u.setLookAt(c.x,c.y,c.z,s.x,s.y,s.z,!0))}),null}var Ne=require("react"),Zo=require("three");function v_({sceneAnnotations:e,controlledAnnotationCategories:t,onAnnotationCategoriesChange:n,showAnnotationFilters:r,initialCategories:i,controlledActiveAnnotation:o,onActiveAnnotationChange:a,onAnnotationsChange:s,controlsRef:l,sceneRef:c,annotationWorldPositionsRef:d,tourCameraOffsetRef:p,initialCameraStateRef:u,engagement:h,engagementRef:m}){let[b,f]=(0,Ne.useState)(!1),[g,y]=(0,Ne.useState)(()=>e??[]);(0,Ne.useEffect)(()=>{if(g.length>0){let ce=g.reduce((Te,tt)=>Math.max(Te,tt.id),0);R.current=ce}else R.current=0},[g]);let[x,_]=(0,Ne.useState)(null),[L,w]=(0,Ne.useState)({title:"",description:""}),R=(0,Ne.useRef)(0),[C,P]=(0,Ne.useState)(null),[S,v]=(0,Ne.useState)(-1),[A,E]=(0,Ne.useState)(!1),B=(0,Ne.useRef)(null),[N,I]=(0,Ne.useState)(()=>i),F=t===void 0?N:t,O=(0,Ne.useMemo)(()=>K0(g,F),[g,F]),T=(0,Ne.useMemo)(()=>[...new Set(g.map(Pm))].sort(),[g]),z=r&&T.some(Boolean),q=ce=>{t===void 0&&I(ce),n?.(ce)},Z=(0,Ne.useMemo)(()=>[...O].sort((ce,Te)=>ce.id-Te.id),[O]),J=(0,Ne.useMemo)(()=>JSON.stringify([F?.map(ce=>ce.trim()).sort()??null,Z]),[F,Z]),le=(0,Ne.useMemo)(()=>S<0||S>=Z.length?null:Z[S],[S,Z]),H=(0,Ne.useCallback)(ce=>{if(o!==void 0){a?.(ce);return}P(ce?{annotation:ce}:null)},[o,a]),X=(0,Ne.useRef)(null),te=(0,Ne.useCallback)(ce=>{let Te=l.current,tt=c.current;if(!Te)return;let At=new Zo.Vector3,Lt=d.current.get(ce.id);Lt?At.copy(Lt):tt&&y_(ce,tt,At)||At.set(ce.worldPosition[0],ce.worldPosition[1],ce.worldPosition[2]),p.current=null;let pe=Te.smoothTime;Te.smoothTime=Aa(Te,.6);let be=ce.worldNormal;if(Gu(ce.cameraView))gl(Te,ce.cameraView);else{if(tt){let Le=new Zo.Box3().setFromObject(tt),Ke=new Zo.Vector3;Le.getCenter(Ke);let ft=new Zo.Vector3;Le.getSize(ft);let ne=ft.length()*.2,fe;be?fe=new Zo.Vector3(be[0],be[1],be[2]):fe=At.clone().sub(Ke),fe.lengthSq()<1e-6&&fe.set(0,0,1),fe.normalize();let ye=Math.max(ne*.6,.3),ke=At.clone().add(fe.multiplyScalar(ye));Te.setPosition(ke.x,ke.y,ke.z,!0),ce.anchorNodeName&&ce.anchorLocalPosition&&(p.current=ke.clone().sub(At))}Te.setTarget(At.x,At.y,At.z,!0),X.current&&Wo(Te,X.current)}B.current&&clearTimeout(B.current),B.current=setTimeout(()=>{Te.smoothTime=pe,B.current=null},800),H(ce)},[H]),he=(0,Ne.useCallback)(()=>{Z.length!==0&&(l.current&&(X.current=Fa(l.current)),h.startTour(Z.length),f(!0),v(0),te(Z[0]))},[Z,te,h]),Ee=(0,Ne.useCallback)(()=>{if(Z.length===0||S<0)return;E(!0);let ce=(S-1+Z.length)%Z.length;v(ce),te(Z[ce]),setTimeout(()=>E(!1),500)},[S,Z,te]),$=(0,Ne.useCallback)(()=>{if(Z.length===0||S<0)return;if(S===Z.length-1){if(h.completeTour(),f(!1),v(-1),H(null),l.current&&u.current){let Te=u.current;gl(l.current,{...X.current,...Te}),X.current=null}return}E(!0);let ce=S+1;v(ce),te(Z[ce]),setTimeout(()=>E(!1),500)},[S,Z,te,H,h]),se=(0,Ne.useCallback)(()=>{if(h.stopTour(),f(!1),v(-1),H(null),l.current&&u.current){let ce=u.current;gl(l.current,{...X.current,...ce}),X.current=null}},[H,h]);(0,Ne.useEffect)(()=>{m.current.stopTour("annotations-changed"),X.current&&l.current&&(gl(l.current,{...X.current,...u.current??{}}),X.current=null),p.current=null,v(-1),f(!1)},[J]),(0,Ne.useEffect)(()=>()=>{B.current&&clearTimeout(B.current)},[]),(0,Ne.useEffect)(()=>{le&&b&&X.current&&H(le)},[le,H,b]),(0,Ne.useEffect)(()=>{if(e===void 0)return;let ce=e.map(Te=>({...Te,localPosition:Te.localPosition??Te.worldPosition}));y(ce)},[e]);let we=(0,Ne.useCallback)(()=>{if(o!==void 0){a?.(null);return}P(null)},[o,a]),Xe=o!==void 0?o:C?.annotation??null,ie=(0,Ne.useMemo)(()=>Xe?O.find(Te=>Te.id===Xe.id)??null:null,[Xe,O]);(0,Ne.useEffect)(()=>{Xe&&!ie&&we()},[Xe,ie,we]);let bt=(0,Ne.useCallback)(()=>{if(!x||!L.title.trim())return;R.current+=1;let Te={id:R.current,worldPosition:x.worldPosition,localPosition:x.localPosition,worldNormal:x.worldNormal,anchorNodeName:x.anchor?.anchorNodeName,anchorLocalPosition:x.anchor?.anchorLocalPosition,title:L.title.trim(),description:L.description},tt=[...g,Te];y(tt),s?.(tt),_(null)},[x,L,g,s]),et=(0,Ne.useCallback)(()=>_(null),[]),rt=(0,Ne.useCallback)(ce=>{Gu(ce.cameraView)?te(ce):H(ce)},[H,te]);return{annotations:g,pendingAnnotation:x,setPendingAnnotation:_,annotationForm:L,setAnnotationForm:w,currentAnnotationIndex:S,isNavigating:A,localAnnotationCategories:N,selectedAnnotationCategories:F,visibleAnnotations:O,availableAnnotationCategories:T,annotationFiltersVisible:z,changeAnnotationCategories:q,sortedAnnotations:Z,currentAnnotation:le,setActiveAnnotation:H,focusAnnotation:te,startGuidedTour:he,goToPreviousAnnotation:Ee,goToNextAnnotation:$,stopGuidedTour:se,closeViewingAnnotation:we,activeAnnotation:Xe,activeViewingAnnotation:ie,isGuidedTourActive:b,handleAnnotationOk:bt,handleAnnotationCancel:et,handleAnnotationMarkerClick:rt}}var mr=require("react"),M_=require("three");var Zt=require("three");function x_(e,t){if(!(e instanceof Zt.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 Zt.Box3,i=new Zt.Vector3;if(En(e)){let w=e;w.computeBoundingBox(),w.computeBoundingSphere();for(let R=0;R<n.count;R++)r.expandByPoint(e.getVertexPosition(R,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 Zt.Vector3),a=t.getWorldPosition(new Zt.Vector3),s=t.getWorldDirection(new Zt.Vector3),l=t.isOrthographicCamera,c=new Zt.Raycaster,d=w=>{if(l){let C=a.distanceTo(o)+r.getSize(i).length()+1;c.set(w.clone().addScaledVector(s,-C),s)}else c.set(a,w.clone().sub(a).normalize());let R=c.intersectObject(e,!1)[0];return R?Eo({...R,ray:c.ray},e):null},p=d(o);if(p)return p;let u=e.geometry.index,h=u?.count??n.count,m=new Zt.Vector3,b=new Zt.Vector3,f=new Zt.Vector3,g=new Zt.Vector3,y=new Zt.Vector3,x=new Zt.Vector3,_=null,L=1/0;for(let w=0;w+2<h;w+=3){if(e.getVertexPosition(u?u.getX(w):w,m).applyMatrix4(e.matrixWorld),e.getVertexPosition(u?u.getX(w+1):w+1,b).applyMatrix4(e.matrixWorld),e.getVertexPosition(u?u.getX(w+2):w+2,f).applyMatrix4(e.matrixWorld),g.copy(m).add(b).add(f).multiplyScalar(1/3),Zt.Triangle.getNormal(m,b,f,y),l?x.copy(s).negate():x.copy(a).sub(g),y.dot(x)<=0)continue;let R=g.distanceToSquared(o);R<L&&(L=R,_=g.clone())}return _?d(_):null}var Qt=require("three");function w_(e,t,n,r){if(!(e instanceof Qt.Mesh)||!t)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let i=new Qt.Vector3().fromArray(n.position);if(En(e)){let c=e;c.computeBoundingBox(),c.computeBoundingSphere();let d=c.geometry.getAttribute("position");if(!d)return null;let p=c.geometry.index,u=p?.count??d.count,h=new Qt.Triangle,m=new Qt.Vector3,b=new Qt.Vector3,f=1/0,g=null;for(let y=0;y+2<u;y+=3){let x=[0,1,2].map(L=>p?p.getX(y+L):y+L);h.a.fromBufferAttribute(d,x[0]),h.b.fromBufferAttribute(d,x[1]),h.c.fromBufferAttribute(d,x[2]),h.closestPointToPoint(i,m);let _=m.distanceToSquared(i);if(!(_>=f||!h.getBarycoord(m,b))&&(f=_,g=new Qt.Vector3().addScaledVector(c.getVertexPosition(x[0],new Qt.Vector3),b.x).addScaledVector(c.getVertexPosition(x[1],new Qt.Vector3),b.y).addScaledVector(c.getVertexPosition(x[2],new Qt.Vector3),b.z),f<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 Qt.Vector2(r==="left"?-.0035:r==="right"?.0035:0,r==="down"?-.0035:r==="up"?.0035:0),a=new Qt.Raycaster,s=n.size*.01,l=new Qt.Vector3().fromArray(n.position);for(let c=1;c>=1/1024;c/=2){a.setFromCamera(new Qt.Vector2(i.x,i.y).addScaledVector(o,c),t);let d=a.intersectObject(e,!1)[0];if(d){let p=Eo({...d,ray:a.ray},e);if(new Qt.Vector3().fromArray(p.position).distanceTo(l)<=s)return p}}return null}var __=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function S_({currentObjectBindings:e,currentObjectBindingsRef:t,applyObjectBindings:n,nodeRefsMap:r,controlsRef:i,decalMove:o,decalDragging:a,setDecalDragging:s,setDecalError:l,setDecalControl:c,decalRequestRef:d,onTextureUpload:p,currentPanelObjectId:u,modelUrl:h}){let m=(0,mr.useCallback)((w,R)=>{let C=t.current,P=C[w];if(!P)return;let S=R(P.decals??[]);n({...C,[w]:{...P,decals:S.length>0?S:void 0}})},[n,e]),b=(0,mr.useMemo)(()=>{if(!a)return null;let{objectKey:w,decalId:R}=a,C=e[w],P=C?.decals?.find(S=>S.id===R);return P?{objectId:C.modelObjectId??w,decal:P,onCancel:()=>s(null),onCommit:S=>{m(w,v=>v.map(A=>A.id===R?{...A,...S}:A)),s(null)}}:null},[a,e,m]),f=o??b,g=(0,mr.useCallback)((w,R)=>{d.current++;let C=t.current[w],P=r.current[C?.modelObjectId??w],S=x_(P,i.current?.camera);if(!S)return l("Could not find a surface on this object for the decal."),!1;let v={...R,...S};return m(w,A=>[...A,v]),l(null),c(A=>A&&{...A,activeId:v.id}),s({objectKey:w,decalId:v.id}),!0},[m]),y=(0,mr.useCallback)(w=>{let R=t.current[w],C=r.current[R?.modelObjectId??w]?.geometry;if(!C)return .2;C.boundingBox||C.computeBoundingBox();let P=C.boundingBox?.getSize(new M_.Vector3),S=P?Math.max(P.x,P.y,P.z):0;return S>0&&Number.isFinite(S)?S/3:.2},[]),x=(0,mr.useRef)([]);(0,mr.useEffect)(()=>()=>{for(let w of x.current)URL.revokeObjectURL(w)},[]);let _=(0,mr.useCallback)(async(w,R,C)=>{let P=++d.current;s(null);let S;if(p){if(S=await p(C,w),P!==d.current)return}else S=URL.createObjectURL(C),x.current.push(S);g(R,{id:__(),image:S,size:y(R)})},[y,p,g]);return(0,mr.useEffect)(()=>{d.current++,l(null),s(null)},[u,h]),{editDecals:m,activeDecalMove:f,addCenteredDecal:g,decalSizeFor:y,startImageDecal:_,decalControlHandlers:(w,R)=>({onSelect:C=>{d.current++,l(null),s(null),c({...w,activeId:C})},onAddText:(C,P)=>g(R,{id:__(),text:C,color:P,size:y(R)}),onAddImage:C=>{_(w.objectId,R,C)},onChange:(C,P)=>m(R,S=>S.map(v=>v.id===C?{...v,...P}:v)),onNudge:(C,P)=>{let S=t.current[R],v=S?.decals?.find(B=>B.id===C);if(!v)return;let A=r.current[S.modelObjectId??R],E=w_(A,i.current?.camera,v,P);if(!E){l("No visible surface in that direction. Try another arrow or rotate the view.");return}l(null),s(null),m(R,B=>B.map(N=>N.id===C?{...N,...E}:N))},onMove:C=>{d.current++,e[R]?.decals?.find(S=>S.id===C)&&(l(null),s(S=>S?.objectKey===R&&S.decalId===C?null:{objectKey:R,decalId:C}))},onRemove:C=>{s(null),m(R,P=>P.filter(S=>S.id!==C)),c({...w,activeId:null})},onClose:()=>{d.current++,l(null),s(null),c(null)}})}}var Ml=require("react");function C_({canvasAreaElement:e,controlsRef:t,enabled:n}){let r=(0,Ml.useRef)(new Set),i=(0,Ml.useRef)(null);(0,Ml.useEffect)(()=>{let o=e;if(!o||!n)return;let a=new Set(["w","a","s","d"," ","c"]),s=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),l=0,c=m=>m.code==="Space"?" ":m.key.toLowerCase(),d=()=>{r.current.clear(),l=0,i.current!==null&&(cancelAnimationFrame(i.current),i.current=null)},p=m=>{let b=t.current,f=r.current;if(!b||f.size===0){i.current=null,l=0;return}let g=l?Math.min((m-l)/1e3,.05):1/60;l=m;let y=Math.max(b.distance*.75,.01)*g;f.has("w")&&b.forward(y,!1),f.has("s")&&b.forward(-y,!1),f.has("a")&&b.truck(-y,0,!1),f.has("d")&&b.truck(y,0,!1),f.has(" ")&&b.truck(0,y,!1),f.has("c")&&b.truck(0,-y,!1),i.current=requestAnimationFrame(p)},u=m=>{if(m.target!==o){d();return}if(s.has(m.key)){let f=t.current;if(!f)return;m.preventDefault();let g=Math.PI/90,y=Math.max(f.distance*.05,.01);m.key==="ArrowUp"?m.shiftKey?f.forward(y,!0):f.rotate(0,-g,!0):m.key==="ArrowDown"?m.shiftKey?f.forward(-y,!0):f.rotate(0,g,!0):m.key==="ArrowLeft"?f.rotate(-g,0,!0):f.rotate(g,0,!0);return}let b=c(m);a.has(b)&&(m.preventDefault(),r.current.add(b),i.current===null&&(i.current=requestAnimationFrame(p)))},h=m=>{r.current.delete(c(m))};return o.addEventListener("keydown",u),o.addEventListener("keyup",h),o.addEventListener("blur",d),()=>{o.removeEventListener("keydown",u),o.removeEventListener("keyup",h),o.removeEventListener("blur",d),d()}},[e,t,n])}var pn=require("react");var T_=1,IE=4,BE=.0015,kE=.1,NE=8;function P_({moveZoomTarget:e,setMoveZoomTarget:t,currentObjectBindingsRef:n,materialRefsOut:r,rendererCaptureRef:i,canvasAreaRef:o,canvasAreaElement:a,applyBindingStyle:s}){let l=(0,pn.useRef)(null),c=(0,pn.useRef)(!1),d=(0,pn.useRef)([0,0]),p=(0,pn.useRef)([0,0]),u=(0,pn.useRef)(1),h=(0,pn.useRef)(null),m=(0,pn.useCallback)((_,L)=>{let w=e;if(!w)return;let R=n.current[w.objectKey]?.style?.material?.[w.textureKey],C=R?.path;if(!C)return;let P=R?.rotation??0,S=Sr(w.textureKey),v=Os(C,S),A=r.current[w.objectKey],E=Array.isArray(A)?A:A?[A]:[],B=Ac[w.textureKey];for(let N of E){let I=N;B in I&&(I[B]=Dc(I.userData,w.textureKey,v,C,_,L,P))}i.current?.invalidate()},[e]),b=(0,pn.useCallback)(_=>{if(!e)return;_.currentTarget.setPointerCapture?.(_.pointerId),l.current={x:_.clientX,y:_.clientY},c.current=!1;let L=n.current[e.objectKey]?.style?.material?.[e.textureKey];if(d.current=L?.offset??[0,0],p.current=d.current,u.current=L?.scale??1,h.current===null){let w=()=>{i.current?.invalidate(),h.current=requestAnimationFrame(w)};h.current=requestAnimationFrame(w)}},[e]),f=(0,pn.useCallback)(_=>{if(!e||!l.current)return;let L=o.current,w=L?.clientWidth||1,R=L?.clientHeight||1,C=_.clientX-l.current.x,P=_.clientY-l.current.y;if(!c.current&&Math.hypot(C,P)<IE)return;c.current=!0;let S=-(C/w)*T_,v=P/R*T_,[A,E]=d.current,B=[A+S,E+v];p.current=B,m(B,u.current),s(e.objectKey,N=>({...N,material:{...N?.material,[e.textureKey]:{...N?.material?.[e.textureKey],path:n.current[e.objectKey]?.style?.material?.[e.textureKey]?.path,offset:B}}}))},[e,m,s]),g=(0,pn.useCallback)(_=>{if(!e)return;_.target?.releasePointerCapture?.(_.pointerId),h.current!==null&&(cancelAnimationFrame(h.current),h.current=null);let L=c.current,w=e;if(L){s(w.objectKey,R=>({...R,material:{...R?.material,[w.textureKey]:{...R?.material?.[w.textureKey],path:n.current[w.objectKey]?.style?.material?.[w.textureKey]?.path,offset:p.current}}})),l.current=null,c.current=!1;return}l.current=null,t(null)},[e,s]);(0,pn.useEffect)(()=>{if(!e)return h.current!==null&&(cancelAnimationFrame(h.current),h.current=null),()=>{h.current!==null&&(cancelAnimationFrame(h.current),h.current=null)}},[e]),(0,pn.useEffect)(()=>{let _=a;if(!(!_||!e))return _.addEventListener("pointermove",f),_.addEventListener("pointerup",g),_.addEventListener("pointercancel",g),()=>{_.removeEventListener("pointermove",f),_.removeEventListener("pointerup",g),_.removeEventListener("pointercancel",g)}},[a,e,f,g]);let y=(0,pn.useCallback)(_=>{if(!e)return;_.preventDefault();let L=e,w=Math.exp(-_.deltaY*BE),R=Math.min(NE,Math.max(kE,u.current*w));u.current=R,m(p.current,R),s(L.objectKey,C=>({...C,material:{...C?.material,[L.textureKey]:{...C?.material?.[L.textureKey],path:n.current[L.objectKey]?.style?.material?.[L.textureKey]?.path,scale:R}}}))},[e,m,s]);return(0,pn.useEffect)(()=>{let _=a;if(!(!_||!e))return _.addEventListener("wheel",y,{passive:!1}),()=>_.removeEventListener("wheel",y)},[a,e,y]),{beginMoveZoom:(0,pn.useCallback)(_=>{c.current=!1,l.current=null,t(_)},[t]),handleMoveZoomPointerDown:b}}var wd=require("@react-three/fiber"),VE=.2;function sf({enabled:e,speed:t,controlsRef:n}){let r=(0,wd.useThree)(i=>i.invalidate);return(0,wd.useFrame)((i,o)=>{!e||!n.current||(n.current.rotate(o*VE*t,0,!1),r())}),null}var Ir=require("lucide-react");var pt=require("react/jsx-runtime");function A_({count:e,onDismiss:t}){let n=ve();return(0,pt.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,pt.jsx)(Ir.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,pt.jsx)("span",{children:n(e===1?"bindingMismatchOne":"bindingMismatchMany",{count:e})}),(0,pt.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:r=>{r.stopPropagation(),t()},"aria-label":n("dismiss"),children:(0,pt.jsx)(Ir.X,{size:12})})]})}function E_({triangles:e,offset:t,onDismiss:n}){let r=ve();return(0,pt.jsxs)("div",{className:`ri-largeModelBanner ${t?"ri-largeModelBanner--offset":""}`,children:[(0,pt.jsx)(Ir.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,pt.jsx)("span",{children:r("largeModelWarning",{millions:Math.round(e/1e6)})}),(0,pt.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:i=>{i.stopPropagation(),n()},"aria-label":r("dismiss"),children:(0,pt.jsx)(Ir.X,{size:12})})]})}function R_({missing:e,total:t}){let n=ve();return(0,pt.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,pt.jsx)(Ir.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,pt.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 O_({failure:e,source:t}){return(0,pt.jsx)("div",{className:"ri-loadError",role:"alert",children:(0,pt.jsxs)("div",{className:"ri-loadError__card",children:[(0,pt.jsxs)("div",{className:"ri-loadError__header",children:[(0,pt.jsx)(Ir.AlertTriangle,{size:16,"aria-hidden":"true"}),(0,pt.jsx)("span",{className:"ri-loadError__title",children:e.title})]}),(0,pt.jsx)("p",{className:"ri-loadError__detail",children:e.detail}),(0,pt.jsx)("p",{className:"ri-loadError__source",children:t}),e.technical&&(0,pt.jsx)("p",{className:"ri-loadError__technical",children:e.technical})]})})}function L_({rebuilding:e,onReload:t}){let n=ve();return(0,pt.jsx)("div",{className:"ri-contextRecovery",role:"alert",children:(0,pt.jsxs)("div",{className:"ri-contextRecovery__card",children:[(0,pt.jsx)(Ir.AlertTriangle,{size:24,"aria-hidden":"true"}),(0,pt.jsx)("h2",{children:n(e?"contextRestoringTitle":"contextLostTitle")}),(0,pt.jsx)("p",{children:n(e?"contextRestoringMessage":"contextLostMessage")}),(0,pt.jsxs)("button",{type:"button",onClick:t,disabled:e,children:[(0,pt.jsx)(Ir.RotateCcw,{size:16,"aria-hidden":"true"}),n("reloadViewer")]})]})})}var Sl=require("react");function D_({applyBindingStyle:e,resolveObjectKey:t,onTextureUpload:n,fileInputRef:r,pendingObjectId:i,createdBlobUrls:o,texturePositioning:a,setMoveZoomTarget:s}){let l=(0,Sl.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,_=>({..._,material:{..._?.material,texture:{path:y}}}))},[e]),c=g=>{let y=g.target.files?.[0],x=i.current;if(!y||!x)return;let _=t(x);_&&(n?n(y,_).then(L=>l(_,L),L=>console.error("onTextureUpload failed:",L)):l(_,URL.createObjectURL(y)),g.target.value="")},d=g=>{i.current=g,r.current?.click()},p=g=>{let y=t(g);if(!y)return;e(y,_=>_?.material?.texture?{..._,material:{..._.material,texture:void 0}}:_);let x=o.current[y];x&&(URL.revokeObjectURL(x),delete o.current[y])},u=!!a,h=typeof a=="object"?a:void 0,m=(0,Sl.useCallback)((g,y,x)=>{if(h?.onOffsetChange){h.onOffsetChange(g,y,x);return}e(g,_=>{let L=_?.material?.texture;if(!L?.path)return _;let w=L.offset??[0,0],R=[w[0],w[1]];return R[y]=x,{..._,material:{..._?.material,texture:{...L,offset:R}}}})},[e,h]),b=(0,Sl.useCallback)((g,y)=>{if(h?.onRotationChange){h.onRotationChange(g,y);return}e(g,x=>{let _=x?.material?.texture;if(!_?.path)return x;let L=(y%360+360)%360;return{...x,material:{...x?.material,texture:{..._,rotation:L*Math.PI/180}}}})},[e,h]),f=(0,Sl.useCallback)(()=>{s(null),h?.onEndPositioning?.()},[h]);return{handleFileChange:c,triggerFileUpload:d,clearTexture:p,texturePositioningEnabled:u,texturePositioningOverrides:h,setMaterialTextureOffset:m,setMaterialTextureRotation:b,endMaterialTexturePositioning:f}}function I_({materialPopup:e,resolveObjectKey:t,currentObjectBindings:n,nodeRefsMap:r,moveZoomTarget:i,texturePositioningEnabled:o,texturePositioningOverrides:a,setMaterialTextureOffset:s,setMaterialTextureRotation:l,endMaterialTexturePositioning:c}){let d=e?t(e.objectId):null,p=d?n[d]?.style?.material?.texture?.path:void 0,u=p?Ny(p)??p:void 0,h=Pc(d?r.current[d]:null),m=o?a?.offset??(d?n[d]?.style?.material?.texture?.offset:void 0):void 0,b=o?a?.rotationDegrees??(d?((n[d]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,f=o?a?.isPositioning??!!(d&&i?.objectKey===d&&i?.textureKey==="texture"):!1;return{materialTextureUrl:u,materialTargetTakesImage:h,materialTextureOffset:m,materialTextureRotationDegrees:b,isMaterialTexturePositioning:f,materialTextureOnOffsetChange:o?s:void 0,materialTextureOnRotationChange:o?l:void 0,materialTextureOnEndPositioning:o?c:void 0}}var $a=require("react");var _d=e=>e==="#000000"?"#ffffff":e;function B_({nodeRefsMap:e,currentObjectBindingsRef:t,applyObjectBindings:n}){let r=(0,$a.useRef)({}),i=(0,$a.useCallback)(a=>{let s=hy(e.current[a]),l=t.current[a]?.style?.material,c=l?.emissive??s.color,d=l?.emissiveIntensity??s.intensity;return{color:c,intensity:d,on:c!=="#000000"&&d>0}},[]),o=(0,$a.useCallback)((a,s)=>{let l=t.current,c=l[a];c&&n({...l,[a]:{...c,style:{...c.style,material:{...c.style?.material,...s}}}})},[n]);return{glowMemoryRef:r,readObjectGlow:i,applyGlow:o}}function k_({setCurrentAction:e,bindingKeyIndex:t,currentObjectBindings:n,applyObjectBindings:r,resolveObjectKey:i,closeColorPicker:o,setColorPicker:a,setMaterialPopupsByObject:s,setItemMaterials:l,getPopoverPosition:c,decalRequestRef:d,setDecalError:p,setDecalDragging:u,setDecalControl:h,resolvedSceneConfigRef:m,applyLightPatches:b,readObjectGlow:f,applyGlow:g,glowMemoryRef:y,setLightControl:x,onAction:_}){return(0,$a.useCallback)(L=>{let{objectId:w,action:R,binding:C}=L;switch(e(L),R.id){case"toggle-visibility":{let P=w;C?.modelObjectId&&(P=t.byModelObjectId.get(C.modelObjectId)??P);let S=n[P],v=S?.visible===!1;S&&r({...n,[P]:{...S,visible:v}});break}case"change-color":o(),s(P=>{if(!(w in P))return P;let S={...P};return delete S[w],S}),l(P=>{let S=i(w,C)??w,v=P[w]?.hex,A=n[S]?.style?.material?.baseColor;return{...P,[w]:{...P[w],hex:v??A??"#ffffff"}}}),a(c(w,225,250,C,L));break;case"change-material":o(),s(P=>{if(w in P){let S={...P};return delete S[w],S}return{...P,[w]:c(w,300,320,C,L)}});break;case"add-text":case"add-image":{o();let P=R.id;d.current++,p(null),u(null),h(S=>S?.objectId===w&&S.kind===P?null:{objectId:w,kind:P,activeId:null});break}case"toggle-light":case"change-light-color":case"set-brightness":{let P=i(w,C);if(!P)break;let S=py(m.current,n,P);if(R.id==="toggle-light"){if(S.length>0){let B=!S.some(N=>N.visible);b(Object.fromEntries(S.map(N=>[N.id,{visible:B}])));break}let E=f(P);E.on?(y.current[P]=E.intensity,g(P,{emissiveIntensity:0})):g(P,{emissive:_d(E.color),emissiveIntensity:y.current[P]??1});break}let v=R.id,A=S.length>0?null:f(P);x(E=>E?.objectId===w&&E.kind===v?null:{objectId:w,kind:v,target:A?{type:"glow",objectKey:P,baseIntensity:A.on?A.intensity:y.current[P]??1}:{type:"lights",lightIds:S.map(B=>B.id),baseIntensity:Object.fromEntries(S.map(B=>[B.id,B.intensity]))},percent:A&&!A.on?0:100});break}default:break}_?.(L)},[r,g,b,f,n,c,_,o,i,t])}var N_=require("react"),kt=require("lucide-react");var re=require("react/jsx-runtime");function V_({categories:e,selected:t,disabled:n,onChange:r}){let i=ve();return(0,re.jsxs)("div",{className:"ri-annotationFilters",role:"group","aria-label":i("annotationCategories"),onPointerDown:o=>o.stopPropagation(),children:[(0,re.jsx)("span",{children:i("annotations")}),(0,re.jsx)("button",{type:"button","aria-pressed":t===null,disabled:n,onClick:()=>r(null),children:i("all")}),e.map(o=>(0,re.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 z_({onCancel:e}){let t=ve();return(0,re.jsxs)("div",{className:"ri-isolationPill",role:"status",onPointerDown:n=>n.stopPropagation(),children:[(0,re.jsx)("span",{className:"ri-isolationPill__label",children:t("decalDragHint")}),(0,re.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:e,children:t("cancel")})]})}function U_({label:e,onShowAll:t}){let n=ve();return(0,re.jsxs)("div",{className:"ri-isolationPill",onPointerDown:r=>r.stopPropagation(),children:[(0,re.jsx)("span",{className:"ri-isolationPill__label",children:e}),(0,re.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("showAll")})]})}function j_({groups:e,activeVariants:t,onSelect:n}){let r=ve();return(0,re.jsx)(re.Fragment,{children:e.map((i,o)=>(0,re.jsxs)("div",{className:"ri-variantPicker",role:"group","aria-label":i.name??r("materialVariants"),onPointerDown:a=>a.stopPropagation(),children:[i.name?(0,re.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,re.jsxs)("button",{type:"button",className:`ri-variantPicker__option ${s?"ri-variantPicker__option--active":""}`,"aria-pressed":s,onClick:()=>n(a.name),children:[a.swatch?(0,re.jsx)("span",{className:"ri-variantPicker__swatch",style:{background:a.swatch},"aria-hidden":"true"}):null,a.label]},a.name)})]},i.name??`group-${o}`))})}function F_({count:e,active:t,index:n,navigating:r,onStart:i,onPrevious:o,onNext:a,onStop:s}){let l=ve();return t?(0,re.jsxs)(re.Fragment,{children:[(0,re.jsxs)("button",{className:"ri-tourButton",onClick:o,disabled:r||e===0||n<=0,title:l("previousAnnotation"),children:[(0,re.jsx)(kt.ChevronLeft,{size:16}),(0,re.jsx)("span",{children:l("previous")})]}),(0,re.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:s,title:l("stopGuidedTour"),children:(0,re.jsx)(kt.Square,{size:16})}),(0,re.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:a,disabled:r||e===0,title:l("nextAnnotation"),children:[(0,re.jsx)("span",{children:l("next")}),(0,re.jsx)(kt.ChevronRight,{size:16})]})]}):(0,re.jsx)("button",{className:"ri-navButtonSingle",onClick:i,disabled:e===0,title:l("startGuidedTour"),children:l("guidedTour")})}function G_({fullscreen:e,disabled:t}){let n=ve();return(0,re.jsxs)("div",{className:"mv-fullscreenWrapper",children:[e.error&&(0,re.jsx)("div",{className:"mv-fullscreenError",role:"alert",children:n.message(e.error)}),(0,re.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,re.jsx)(kt.Minimize,{}):(0,re.jsx)(kt.Maximize,{})})]})}function H_({open:e,current:t,disabled:n,onSelect:r,onToggle:i}){let o=ve();return(0,re.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:a=>a.stopPropagation(),children:[e&&(0,re.jsxs)("div",{className:"mv-controllersMenu",children:[(0,re.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("orbit"),children:o("orbitControl")}),(0,re.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("pointerLock"),children:o("pointLock")})]}),(0,re.jsx)("button",{className:"mv-controllersButton",onClick:i,title:o("cameraController"),"aria-label":o("cameraControllerSettings"),disabled:n,children:(0,re.jsx)(kt.Orbit,{size:15})})]})}function W_({menu:e,recording:t,hasScene:n,canCaptureImage:r,canRecord:i,hasCinematic:o}){let a=ve(),s=(0,N_.useId)(),{isDownloading:l,downloadMenuOpen:c,uvExportError:d,toggleDownloadMenu:p,handleDownloadMesh:u,handleDownloadScreenshot:h,handleDownloadUvLayout:m,handleDownloadVideo:b,videoFormat:f,setVideoFormat:g,videoExportError:y}=e;return(0,re.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:x=>x.stopPropagation(),children:[c&&(0,re.jsxs)("div",{className:"mv-downloadMenu",children:[(0,re.jsxs)("button",{className:"mv-downloadMenuItem",onClick:u,disabled:l||t||!n,"aria-describedby":s,children:[(0,re.jsx)(kt.Box,{size:14}),a("downloadGLB")]}),(0,re.jsx)("p",{className:"mv-downloadMenuDescription",id:s,children:a("downloadGLBDescription")}),(0,re.jsx)("div",{className:"mv-downloadMenuDivider"}),r&&(0,re.jsxs)(re.Fragment,{children:[(0,re.jsxs)("button",{className:"mv-downloadMenuItem",onClick:h,disabled:t||!n,children:[(0,re.jsx)(kt.Camera,{size:14}),a("downloadPNG")]}),(0,re.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,re.jsxs)("button",{className:"mv-downloadMenuItem",onClick:m,disabled:t||!n,children:[(0,re.jsx)(kt.FileImage,{size:14}),a("downloadUVLayout")]}),(0,re.jsx)("div",{className:"mv-downloadMenuDivider"}),(0,re.jsxs)("label",{className:"mv-downloadMenuItem",children:[a("videoFormat"),(0,re.jsxs)("select",{"aria-label":a("videoFormat"),value:f,onChange:x=>g(x.target.value),children:[(0,re.jsx)("option",{value:"auto",children:a("auto")}),(0,re.jsx)("option",{value:"webm",disabled:!ai("webm"),children:"WebM"}),(0,re.jsx)("option",{value:"mp4",disabled:!ai("mp4"),children:"MP4"}),(0,re.jsx)("option",{value:"gif",disabled:!ai("gif"),children:"GIF"})]})]}),(0,re.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{b("turntable")},disabled:t||!i||!ai(f),children:[(0,re.jsx)(kt.Play,{size:14}),a("recordTurntableVideo")]}),o&&(0,re.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{b("cinematic")},disabled:t||!i||!ai(f),children:[(0,re.jsx)(kt.Play,{size:14}),a("recordCinematicVideo")]}),!ai()&&!ai("gif")&&(0,re.jsx)("div",{className:"mv-downloadMenuNotice",role:"status",children:a("videoUnsupported")}),y&&(0,re.jsx)("div",{className:"mv-downloadMenuNotice",role:"alert",children:a.message(y)}),d&&(0,re.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:a.message(d)})]}),(0,re.jsx)("button",{className:"mv-downloadButton",onClick:p,disabled:l||t||!n,title:a("downloadOptions"),children:l?(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)("span",{className:"mv-downloadButton__spinner"}),a("exporting")]}):(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(kt.Download,{size:15}),a("download")]})})]})}function X_({x:e,y:t,form:n,setForm:r,onOk:i,onCancel:o}){let a=ve();return(0,re.jsxs)("div",{className:"ri-annotationPopup",style:{left:e,top:t},onPointerDown:s=>s.stopPropagation(),onClick:s=>s.stopPropagation(),children:[(0,re.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,re.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,re.jsxs)("div",{className:"ri-annotationActions",children:[(0,re.jsx)("button",{onClick:i,className:`ri-annotationOkBtn ${n.title.trim()?"":"disabled"}`,disabled:!n.title.trim(),children:a("ok")}),(0,re.jsx)("button",{onClick:o,className:"ri-annotationCancelBtn",children:a("cancel")}),(0,re.jsx)("div",{className:"ri-annotationIcons"})]})]})}var q_=require("qrcode.react"),Pt=require("lucide-react");var _e=require("react/jsx-runtime");function Y_({top:e,xrStore:t,arSupported:n,vrSupported:r,quickLookSupported:i,mobileHandoffUrl:o,mobileHandoffOpen:a,onQuickLook:s,onOpenMobileHandoff:l}){let c=ve();return(0,_e.jsxs)("div",{className:"ri-xrTools",style:{top:`${e}px`},children:[!n&&i&&(0,_e.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:s,title:c("viewThisModelInARWithAppleQuickLook"),children:[(0,_e.jsx)(Pt.Box,{size:16}),c("viewInAR")]}),o&&(0,_e.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:l,title:c("openThisExperienceOnAPhoneForAR"),"aria-haspopup":"dialog","aria-expanded":a,children:[(0,_e.jsx)(Pt.QrCode,{size:16}),(0,_e.jsx)("span",{children:c("openOnPhone")})]}),t&&n&&(0,_e.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>t.enterAR().catch(d=>{console.error("Failed to enter AR session:",d)}),title:c("viewThisModelInYourSpace"),children:[(0,_e.jsx)(Pt.Smartphone,{size:16}),(0,_e.jsx)("span",{children:c("enterAR")})]}),t&&r&&(0,_e.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>t.enterVR().catch(d=>{console.error("Failed to enter VR session:",d)}),title:c("viewThisModelInVR"),children:[(0,_e.jsx)(Pt.RectangleGoggles,{size:16}),(0,_e.jsx)("span",{children:c("enterVR")})]})]})}function $_({url:e,onClose:t}){let n=ve();return(0,_e.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:r=>{r.target===r.currentTarget&&t()},children:(0,_e.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,_e.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:t,"aria-label":n("closePhoneHandoff"),children:(0,_e.jsx)(Pt.X,{size:18})}),(0,_e.jsx)(Pt.Smartphone,{size:22,"aria-hidden":"true"}),(0,_e.jsx)("h2",{id:"ri-mobileHandoffTitle",children:n("viewInAR")}),(0,_e.jsx)("p",{children:n("arScanCode")}),(0,_e.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,_e.jsx)(q_.QRCodeSVG,{value:e,size:208,level:"M",marginSize:4,title:n("qrCodeToOpenThisModelOnAPhone")})})]})})}function K_({top:e,active:t,onToggle:n}){let r=ve();return(0,_e.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${e}px`},children:(0,_e.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,_e.jsx)(Pt.Grid3X3,{size:16})})})}function Z_({top:e,open:t,factor:n,onToggleOpen:r,onFactorChange:i}){let o=ve();return(0,_e.jsxs)("div",{className:"ri-explodeTools",style:{top:`${e}px`},children:[(0,_e.jsx)("button",{type:"button",className:`ri-measureButton ${t||n>0?"ri-measureButton--active":""}`,onClick:r,title:o("explodedView"),"aria-pressed":t,children:(0,_e.jsx)(Pt.Expand,{size:16})}),t&&(0,_e.jsx)("div",{className:"ri-explodeSlider",onPointerDown:a=>a.stopPropagation(),children:(0,_e.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 Q_({top:e,section:t,onChange:n}){let r=ve();return(0,_e.jsxs)("div",{className:"ri-sectionTools",style:{top:`${e}px`},children:[(0,_e.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,_e.jsx)(Pt.Slice,{size:16})}),t.enabled&&(0,_e.jsxs)("div",{className:"ri-sectionPanel",onPointerDown:i=>i.stopPropagation(),children:[(0,_e.jsx)("div",{className:"ri-sectionAxes",role:"group","aria-label":r("sectionAxis"),children:vv.map(i=>(0,_e.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,_e.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,_e.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,_e.jsx)(Pt.FlipVertical2,{size:14})})]})]})}function J_({top:e,playing:t,disabled:n,onPlay:r,onPause:i,onStop:o}){let a=ve();return(0,_e.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${e}px`},children:[(0,_e.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,_e.jsx)(Pt.Pause,{size:16}):(0,_e.jsx)(Pt.Play,{size:16})}),t&&(0,_e.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:o,title:a("stopCinematicAndResetCamera"),children:(0,_e.jsx)(Pt.Square,{size:16})})]})}function eM({progress:e,onCancel:t}){let n=ve();return(0,_e.jsx)("div",{className:"ri-recordingOverlay",onPointerDown:r=>r.stopPropagation(),children:(0,_e.jsxs)("div",{className:"ri-isolationPill",role:"status","aria-live":"polite",children:[(0,_e.jsx)("span",{className:"ri-isolationPill__label",children:n("recordingVideo",{progress:e})}),(0,_e.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("cancel")})]})})}function tM(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 hn=require("three");function nM(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 rM(e,t,n){let r=t?.camera;if(!(r instanceof hn.PerspectiveCamera))return null;let o=(e instanceof hn.Box3?e:new hn.Box3().setFromObject(e)).getSize(new hn.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 iM(e,t){let n=e.camera;if(!(n instanceof hn.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 Md={paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5},Cl={kind:"model"};function oM(e,t){let n=new hn.Box3().setFromObject(t);return n.isEmpty()?!1:(n.expandByScalar(n.getSize(new hn.Vector3).length()*.05),n.containsPoint(e.getTarget(new hn.Vector3)))}function aM(e,t){return e.getTarget(new hn.Vector3).distanceTo(t)<=Math.max(e.distance,1)*.001}async function lf(e,t,n=.6){let r=e.smoothTime;e.smoothTime=Aa(e,n);try{return await t()}finally{e.smoothTime=r}}async function sM(e,t,{flyIn:n,onStart:r,invalidate:i}){if(n){let o=(t instanceof hn.Box3?t:new hn.Box3().setFromObject(t)).getBoundingSphere(new hn.Sphere),a=o.center.clone(),l=e.getPosition(new hn.Vector3).clone().sub(e.getTarget(new hn.Vector3));l.lengthSq()<1e-6&&l.set(0,0,1),l.normalize();let c=Math.max(o.radius*10,20),d=a.clone().add(l.multiplyScalar(c));await e.setLookAt(d.x,d.y,d.z,a.x,a.y,a.z,!1)}r(),await lf(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 lM=require("react");function cM({enabled:e,canvasAreaElement:t,fitAttemptedRef:n,fitInFlightRef:r,controlsRef:i,cameraFramingRef:o,nodeRefsMap:a,fitScene:s}){(0,lM.useEffect)(()=>{if(!e)return;let l=t;if(!l)return;let c=null,d=new ResizeObserver(()=>{!n.current||r.current||(c&&clearTimeout(c),c=setTimeout(()=>{let p=i.current,u=o.current;if(u.kind==="view"&&p){if(aM(p,u.target))return}else if(u.kind==="object"&&p){let h=a.current[u.key];if(h&&oM(p,h)){p.fitToBox(h,!0,Md).catch(()=>{});return}}s()},150))});return d.observe(l),()=>{d.disconnect(),c&&clearTimeout(c)}},[t,s,e])}var K=require("react/jsx-runtime");function cf(e){let n=e.split(/[?#]/)[0].split("/");return(n[n.length-1]||e).replace(/\.[^./]+$/,"")||e}var zE=Object.freeze({});function uf(e){let t=cy(e),n=Sc(t.modelUrl,t.tilesetUrl),r=(0,D.useRef)(n);r.current=n;let i=(0,D.useRef)(null),o=(0,D.useRef)(null),a=(0,D.useCallback)(()=>{let b=o.current;b&&(i.current=b.snapshot())},[]),s=Bb(a),l=$b(e),[c,d]=(0,D.useState)(null);(0,D.useEffect)(()=>()=>{c&&URL.revokeObjectURL(c)},[c]);let p=()=>{a();let b=r.current;o.current?.captureFrame().then(f=>{f&&(b===r.current?d(f):URL.revokeObjectURL(f))})};oi(()=>{i.current=null,d(null)},[n]);let u=(0,D.useRef)(null),h=Hb({loading:t.loading,reveal:t.reveal,rootRef:u,onPark:p}),{release:m}=s;return(0,D.useEffect)(()=>{h.live||m()},[h.live,m]),(0,K.jsx)(uc,{labels:e.labels,children:(0,K.jsx)("div",{className:"ri-viewerSlot",ref:u,children:h.live?(0,K.jsx)(UE,{...t,contextRecovery:s,engagement:l,resumeRef:i,viewerHandleRef:o,offscreen:!h.visible,frame:c},s.generation):(0,K.jsx)(Mc,{className:"ri-viewer",background:Ss(t.backgroundColor,t.sceneConfig),poster:c??t.poster,onReveal:h.awaitingReveal?h.reveal:void 0})})})}function UE({labels:e,contextRecovery:t,engagement:n,modelUrl:r,tilesetUrl:i,tilesErrorTarget:o=8,tilesCacheSize:a=800,onObjectCatalog:s,modelFormat:l,licenseKey:c,licenseValidationUrl:d,objectBindings:p="auto",selectedObject:u,multiSelectedKeys:h,selectedObjectRefs:m,selectedObjectOutlineColor:b,panelHoveredObject:f,onObjectBindingsChange:g,onObjectSelect:y,onObjectHover:x,onObjectDoubleClick:_,onDecalDoubleClick:L,onObjectContextMenu:w,decalMove:R,onObjectEditLeaseChange:C,onSelectionClear:P,onSceneLoaded:S,onModelLoaded:v,onLoadError:A,onProgress:E,onCameraControllerChange:B,cameraControllerType:N,onAction:I,onHiddenObjectsChange:F,onCameraChange:O,onViewerReady:T,onTextureUpload:z,onAnimationsReady:q,onModelAnimationsReady:Z,onAnnotationsChange:J,activeAnnotation:le,onActiveAnnotationChange:H,camera:X,cameraLimits:te,backgroundColor:he,shadows:Ee=!0,showObjectBindingDataPanel:$=!0,customObjectBindingDataPanel:se,customSceneObjectsPanel:we,showSceneObjectsPanel:Xe=!0,showDownloadButton:ie=!0,downloadFilename:bt="model",showResetButton:et=!0,showFullscreenButton:rt=!1,showLoadingOverlay:ce=!0,showMouseController:Te=!1,mouseControllerPosition:tt="center-bottom",mouseControllerOpacity:At=1,moveSensitivity:Lt=.08,zoomSensitivity:pe=1,sceneConfig:be,onSceneConfigChange:Le,disableZoom:Ke=!1,zoomOnSelected:ft=!0,highlightOnHover:ne=!0,enableCameraControls:fe=!0,onAutoFit:ye,refitOnResize:ke=!0,renderMode:wt="demand",maxDpr:it=2,preserveDrawingBuffer:ot=!1,webgpu:xe=!1,performanceProfile:Ve="auto",dracoDecoderPath:je,ktx2TranscoderPath:en,meshopt:fr=!0,showMeasureTools:Dt=!1,showUvCheckerButton:Ut=!1,showExplodeControls:Bn=!1,showMaterialVariants:Fn=!0,showObjectNavigator:Br=!0,showSectionTools:gr=!1,isolation:It,onIsolationChange:Gn,showIsolateControls:Ai=!1,cinematic:kr,measurementUnit:Za="m",enableXR:ni=!1,usdzUrl:Qa,arScaleMode:Dl="normalized",mobileHandoffUrl:uo,showAnnotationNavigation:Ja=!0,showAnnotationOnHover:Ei=!1,showAnnotationFilters:es=!0,annotationCategories:Il,onAnnotationCategoriesChange:Wd,moveModeEnabled:Nr=!1,scaleModeEnabled:Vr=!1,objectTransformSpace:Bl="world",enableKeyboardNavigation:po=!1,reducedMotion:V="user",showViewGizmo:U=!1,overlay:j,unsafe_sceneChildren:ee,autoRotate:Y,autoRotateSpeed:me,onTexturePositioningChange:ge,endTexturePositioningRef:Et,texturePositioning:at,extraModelUrls:jt,onExtraModelError:Rt,onExtraModelLoaded:ht,originalNodePoses:yn,models:ue,mergeModels:Gt,onMergeModelLoaded:Sn,onMergeModelError:Hn,poster:ea,resumeRef:Cn,viewerHandleRef:fn,offscreen:ts,frame:yf,onModelChange:vf}){let vn=ve(),xf=Sc(r,i),[tn]=(0,D.useState)(()=>Cn.current?.model===xf?Cn.current:null),ns=Yw(V);(0,D.useEffect)(()=>()=>n.interrupt(),[n]);let wf=(0,D.useRef)(n);wf.current=n;let{autoBindings:Xd,controlled:_f,currentBindings:Re,applyBindings:br,bindingsForModel:qd,modelEdits:VM}=vb({modelUrl:r,tilesetUrl:i,models:ue,objectBindings:p,onChange:g,initialBindings:tn?.objectBindings,initialModelEdits:tn?.modelBindingEdits}),{isInsideEditor:Yd,activeTab:$d,activeSubTab:Kd}=cd(),zM=Yd&&$d==="scene"&&Kd==="Lighting",kl=ww(c,d),[Zd,UM]=(0,D.useState)(()=>tn?.lightEdits??{}),[Nl,Mf]=(0,D.useState)(tn?.variantEdit),[Vl,Sf]=(0,D.useState)(tn?.sectionEdit),qe=(0,D.useMemo)(()=>{let M=dh(be??Oo,Zd);return Nl!==void 0&&(M={...M,model:Vh(M.model,Nl)}),Vl!==void 0&&(M={...M,section:{...Ro,...M.section,...Vl}}),M},[be,Zd,Nl,Vl]),rs=(0,D.useRef)(qe);rs.current=qe;let Qd=(0,D.useMemo)(()=>Ra(qe.model),[qe.model]);(0,D.useEffect)(()=>{n.setActiveVariants(Qd)},[Qd,n]);let jM=be?Ra(be.model).join(`
|
|
3738
|
+
`):"";oi(()=>{Mf(void 0)},[jM,r]);let FM=JSON.stringify(be?.section??null);oi(()=>{Sf(void 0)},[FM,r]);let Cf=(0,D.useCallback)(M=>{if(Le){let k=rs.current;Le({...k,section:{...Ro,...k.section,...M}});return}Sf(k=>({...k,...M}))},[Le]),[Tf,GM]=(0,D.useState)(!1),Pf=(0,D.useRef)([]),HM=(0,D.useCallback)(M=>{let k=rs.current,W=Ra(k.model),ae=Pf.current,de=ae.find(Ye=>Ye.variants.some(_t=>_t.name===M)),ct=W.find(Ye=>de?de.variants.some(_t=>_t.name===Ye):Ye===M)??null,Ge=W.includes(M)?W.filter(Ye=>Ye!==M):Qc(W,M,ae);if(n.chooseVariant(Ge.includes(M)?M:null,ct,de?.name??null),Le){Le({...k,model:Vh(k.model,Ge)});return}Mf(Ge)},[Le,n]),Jd=(0,D.useCallback)(M=>{if(Le){Le(dh(rs.current,M));return}UM(k=>{let W={...k};for(let[ae,de]of Object.entries(M))W[ae]={...k[ae],...de};return W})},[Le]),[ep,tp]=(0,D.useState)(null),[np,Af]=(0,D.useState)(null),[Ef,Rf]=(0,D.useState)(null),Of=(0,D.useRef)(0),[rp,Lf]=(0,D.useState)(null),[Df,If]=(0,D.useState)(tn?.uvCheckerOverride??null),is=qe.model.renderer==="uv-checker",ip=Ut?Df??is:is,Ri=(0,D.useMemo)(()=>{let M=ip?"uv-checker":is?"pbr":qe.model.renderer;return M===qe.model.renderer?qe:{...qe,model:{...qe.model,renderer:M}}},[is,qe,ip]);oi(()=>{If(null)},[r,qe.model.renderer,Ut,i]);let Bf=(0,D.useMemo)(()=>Ss(he,qe),[he,qe]),zl=(0,D.useMemo)(()=>({dracoDecoderPath:je,ktx2TranscoderPath:en,meshopt:fr}),[je,en,fr]),WM=(0,D.useMemo)(()=>Ub(Ve),[Ve]),Fe=(0,D.useRef)(null),[kf,XM]=(0,D.useState)(()=>tn&&tn.cameraControllerType!=="pointerLock"?tn.cameraControllerType:"orbit"),[qM,Nf]=(0,D.useState)(!1),ho=N!==void 0?N:kf,Ul=(0,D.useCallback)(M=>{Nf(!1),M!==ho&&(XM(M),B?.(M))},[ho,B]),[os,Vf]=(0,D.useState)(!1),zf=(0,D.useRef)({dragging:!1,endedAt:-1/0}),Uf=(0,D.useCallback)(M=>{zf.current={dragging:M,endedAt:M?-1/0:performance.now()},Vf(M)},[]),[Tn,as]=(0,D.useState)(null),ss=!!(at||ge||Et),jf=(0,D.useRef)(ge);jf.current=ge,(0,D.useEffect)(()=>{jf.current?.(Tn)},[Tn]),(0,D.useEffect)(()=>{if(Et)return Et.current=()=>as(null),()=>{Et.current=null}},[]),(0,D.useEffect)(()=>{Fe.current&&(Fe.current.dollySpeed=Math.max(pe,0))},[pe]),(0,D.useEffect)(()=>{Fe.current&&(Fe.current.enabled=fe&&!os&&!Tf&&!Tn)},[fe,os,Tf,Tn]);let op=(0,D.useRef)(null),ap=(0,D.useRef)(new Map),Ff=(0,D.useRef)(null),YM=(0,D.useRef)(null),Qn=(0,D.useRef)(null),Gf=(0,D.useRef)({});(0,D.useEffect)(()=>()=>{for(let M of Object.values(Gf.current))URL.revokeObjectURL(M)},[]);let nn=(0,D.useRef)({}),ta=(0,D.useRef)(Cl),[$M,KM]=(0,D.useState)(0),sp=(0,D.useCallback)(()=>{KM(M=>M+1)},[]),na=(0,D.useRef)({}),rn=!!(ue&&ue.length>=1&&!i),jl=(0,D.useRef)(ue);jl.current=ue;let Fl=(0,D.useRef)(new Map),{scenesByUrlRef:ra,cameraHomesByUrlRef:Oi,materialRefsByUrlRef:ZM,getMaterialRefsForUrl:QM}=yb(rn,ue),Gl=(0,D.useRef)(null),Hf=(0,D.useRef)(null),Hl=Eb(rt),yr=(0,D.useRef)(null),[lp,JM]=(0,D.useState)(null),eS=(0,D.useCallback)(M=>{yr.current=M,JM(M)},[]);C_({canvasAreaElement:lp,controlsRef:Fe,enabled:po&&fe&&!Nr&&!Vr});let Wl=(0,D.useRef)(null),[mo,Xl]=(0,D.useState)({}),[Wf,cp]=(0,D.useState)(null),[ql,up]=(0,D.useState)(null),[tS,nS]=(0,D.useState)(null),[rS,iS]=(0,D.useState)(null),[vr,Xf]=(0,D.useState)(null),[oS,aS]=(0,D.useState)({}),Ht=(0,D.useRef)(null),ia=(0,D.useRef)(null),dp=(0,D.useRef)(0),qf=(0,D.useRef)(null),[sS,lS]=(0,D.useState)(0),zr=(0,D.useRef)(!1),ls=(0,D.useRef)(!1),pp=(0,D.useRef)(null),hp=(0,D.useRef)(!!X);hp.current=!!X;let xr=(0,D.useRef)(null),Yl=(0,D.useRef)(tn?.camera?{camera:tn.camera,home:tn.home}:null),[$l,fo]=(0,D.useState)(!!r),[go,bo]=(0,D.useState)(!r||!!ye||!!X),[Pn,Yf]=(0,D.useState)(!1),[mp,$f]=(0,D.useState)([]),[fp,gp]=(0,D.useState)(!1),[Kf,bp]=(0,D.useState)(null),[Zf,oa]=(0,D.useState)(!1),[cS,uS]=(0,D.useState)(0),yp=(0,D.useRef)(""),Qf=(0,D.useRef)(new Set),Jf=(0,D.useRef)(""),[eg,tg]=(0,D.useState)(!1),vp=(0,D.useRef)(new Set),[dS,pS]=(0,D.useState)(0),[xp,hS]=(0,D.useState)(null),[mS,ng]=(0,D.useState)(!1),[wp,rg]=(0,D.useState)({total:0,missing:0}),[fS,ig]=(0,D.useState)("loadingModel"),[gS,_p]=(0,D.useState)(null),Ur=(0,D.useRef)({}),aa=(0,D.useCallback)(()=>{let M=Fe.current;if(!M||xr.current)return;xr.current=Sw(M,ia.current??Ht.current);let k=pp.current;k?.usesSlots&&(Oi.current[k.url]=xr.current)},[Oi]),[cs,og]=(0,D.useState)(()=>tn?.explodeFactor??0),[bS,ag]=(0,D.useState)(!1);oi(()=>{og(0),ag(!1)},[r,i]);let jr=(0,D.useMemo)(()=>{let M=qe.cinematic,k=M?.enabled?{waypoints:M.waypoints,duration:M.duration,loop:M.loop,autoPlay:M.autoPlay}:null;return kr===void 0?k&&(k.waypoints?.length??0)>=2?k:null:kr===!1?null:kr===!0?k??{}:{...k??{},...kr}},[kr,qe]),[Mp,An]=(0,D.useState)(!1),[sg,Li]=(0,D.useState)(!1),Sp=(0,D.useRef)(!1);(0,D.useEffect)(()=>{An(!1),Li(!1),Sp.current=!1},[r,i]),(0,D.useEffect)(()=>{if(!(!jr?.autoPlay||Sp.current)&&Pn&&go&&!$l){if(Sp.current=!0,ns)return;An(!0),Li(!1)}},[jr,Pn,go,$l,ns]);let yS=(0,D.useCallback)(()=>{An(!1),Li(!0)},[]),{captureVideo:Cp,cancelVideo:Tp,isRecording:lg,recording:Vt,progress:vS,onProgress:cg}=Ab({rendererCaptureRef:Qn,controlsRef:Fe,cinematicConfig:jr,ready:t.status==="ready"&&Pn&&go&&!$l,modelUrl:`${r}|${i??""}`,onCaptureStart:yS});(0,D.useEffect)(()=>{t.status==="lost"&&(n.interrupt(),Tp(),An(!1),Fe.current?.stop())},[t.status,Tp,n]);let{xrStore:xS,presenterRef:wS,arSupported:ug,vrSupported:dg,quickLookSupported:pg,resolvedMobileHandoffUrl:Kl,isMobileHandoffOpen:hg,arOverlay:_S,openMobileHandoff:MS,closeMobileHandoff:SS,openQuickLook:CS,handleARStateChange:TS}=bv({enableXR:ni,usdzUrl:Qa,mobileHandoffUrl:uo,engagement:n}),sa=Mb(xe),mg=(0,D.useRef)(sa);mg.current=sa;let yo=sa==="webgpu",Zl=yo?null:xS,fg=gr||qe.section?.enabled===!0;(0,D.useEffect)(()=>{if(!yo)return;let M=[fg&&"the section cut",(Nr||Vr)&&"the transform gizmo"].filter(Boolean);M.length!==0&&console.info(`[react-immersive] With WebGPU, ${M.join(" and ")} ${M.length>1?"aren't":"isn't"} available; ${M.length>1?"they need":"it needs"} WebGL.`)},[yo,fg,Nr,Vr]);let{annotations:o2,pendingAnnotation:vo,setPendingAnnotation:gg,annotationForm:PS,setAnnotationForm:Pp,currentAnnotationIndex:AS,isNavigating:ES,localAnnotationCategories:RS,selectedAnnotationCategories:OS,visibleAnnotations:bg,availableAnnotationCategories:LS,annotationFiltersVisible:Ap,changeAnnotationCategories:DS,sortedAnnotations:Ep,currentAnnotation:yg,setActiveAnnotation:a2,focusAnnotation:s2,startGuidedTour:IS,goToPreviousAnnotation:BS,goToNextAnnotation:kS,stopGuidedTour:NS,closeViewingAnnotation:Ql,activeAnnotation:l2,activeViewingAnnotation:Jl,isGuidedTourActive:us,handleAnnotationOk:VS,handleAnnotationCancel:zS,handleAnnotationMarkerClick:vg}=v_({sceneAnnotations:be?.annotations,controlledAnnotationCategories:Il,onAnnotationCategoriesChange:Wd,showAnnotationFilters:es,initialCategories:tn?.annotationCategories??null,controlledActiveAnnotation:le,onActiveAnnotationChange:H,onAnnotationsChange:J,controlsRef:Fe,sceneRef:Ht,annotationWorldPositionsRef:ap,tourCameraOffsetRef:op,initialCameraStateRef:xr,engagement:n,engagementRef:wf}),US=qe.section??Ro,xg=Fn&&Pn&&mp.length>0;Pf.current=mp;let wg=et||ie||rt&&Hl.supported||Ja&&Ep.length>0;Ur.current=Re,(0,D.useEffect)(()=>{if(!Tn)return;let M=Re[Tn.objectKey]?.style?.material?.[Tn.textureKey]?.path;(!ss||!M)&&as(null)},[Re,ss,Tn]);let Rp=(0,D.useRef)({}),[ec,jS]=(0,D.useState)({});(0,D.useEffect)(()=>{let M={...ec},k=!1,W=new Set;for(let[ae,de]of Object.entries(Re)){W.add(ae);let ct=de.style?.material,Ge=Rp.current[ae]??{},Ye={};for(let Wt of Hi){let Mr=ct?.[Wt]?.path;Mr&&(Ye[Wt]=Mr,Mr!==Ge[Wt]&&(M[ae]!==Wt&&(k=!0),M[ae]=Wt))}let _t=M[ae];if(_t&&!Ye[_t]){let Wt=Hi.find(Mr=>!!Ye[Mr]);Wt?M[ae]=Wt:delete M[ae],k=!0}Rp.current[ae]=Ye}for(let ae of Object.keys(M))W.has(ae)||(delete M[ae],delete Rp.current[ae],k=!0);k&&jS(M)},[Re]);let FS=(0,D.useMemo)(()=>Object.entries(Re).map(([M,k])=>JSON.stringify([M,k.modelObjectId,k.transform??null])).sort().join(""),[Re]),{measureMode:ri,measureModeRef:_g,measurePoints:Op,measurementTool:Lp,areaClosed:Dp,measurementError:GS,selectMeasurementTool:HS,undoMeasurementPoint:WS,finishMeasureArea:XS,snapMode:qS,setSnapMode:YS,snapPreview:Mg,handleMeasurePointerMove:$S,clearSnapPreview:Sg,showDimensions:Ip,measureBox:tc,modelBounds:KS,refreshBounds:Cg,clearMeasurements:ZS,toggleMeasureMode:QS,toggleDimensions:JS,handleMeasurePointerDown:e1,handleMeasureClick:t1}=dv({canvasAreaRef:yr,controlsRef:Fe,sceneRef:Ht,modelUrl:`${r}|${i??""}`,modelRotation:qe.model.rotation,bindingTransformSignature:FS,modelLoaded:Pn,enabled:Dt&&!Vt}),n1=(0,D.useCallback)(()=>{if(!ue||ue.length<2)return null;let M=ue.map(k=>{let W=ra.current[k.url];if(!W)return null;let ae=k.url===r?na.current:ZM.current[k.url]?.current??{};return{scene:W,objectBindings:qd(k),matRefs:ae}}).filter(k=>k!==null);return M.length>0?M:null},[ue,r,qd]),r1=(0,D.useCallback)(()=>{if(!ue||ue.length<2)return null;let M=ue.map(k=>{let W=ra.current[k.url];return W?{scene:W,label:k.label||cf(k.url)}:null}).filter(k=>k!==null);return M.length>0?M:null},[ue]),[i1,o1]=(0,D.useState)(34),a1=ev({sceneRef:Ht,materialRefs:na,rendererCaptureRef:Qn,objectBindings:Re,downloadFilename:bt,getAllLoadedModels:n1,getAllLoadedModelUvSources:r1,captureVideo:Cp}),Tg=(0,D.useMemo)(()=>Object.fromEntries(Object.entries(Re).filter(([,M])=>M.visible===!1).map(([M])=>[M,!0])),[Re]),Di=(0,D.useMemo)(()=>{let M=new WeakMap,k=new Map,W=new Map;for(let[ae,de]of Object.entries(Re))M.set(de,ae),k.has(de.id)||k.set(de.id,ae),W.has(de.modelObjectId)||W.set(de.modelObjectId,ae);return{byReference:M,byId:k,byModelObjectId:W}},[Re]),wr=(0,D.useCallback)(M=>M?Di.byReference.get(M)??Di.byModelObjectId.get(M.modelObjectId)??Di.byId.get(M.id)??null:null,[Di]),Bp=u!==void 0,xo=Bp?u??null:rS,yt=wr(xo);(0,D.useEffect)(()=>{n.setSelectedPart(yt)},[yt,n]);let wo=yt?nn.current[yt]??null:null,s1=yt?ec[yt]:void 0,Pg=wr(ne?f??ql??tS:null),l1=Pg?nn.current[Pg]??null:null,kp=m??(h?h.map(M=>nn.current[M]).filter(Boolean):null),nc=(0,D.useMemo)(()=>{let M=kp??(wo&&Re[yt??""]?.transform?.shear?[wo]:null);if(!M?.length)return null;let k=new Set(M),W=Object.entries(nn.current).filter(([,ae])=>k.has(ae)).map(([ae,de])=>({key:ae,node:de,transform:Re[ae]?.transform}));return W.length>1||W.some(({transform:ae})=>ae?.shear)?W:null},[kp,Re,wo,yt]),Ag=(0,D.useCallback)(M=>{nS(M),x?.(M)},[x]),Eg=$&&xo!==null&&yt!==null,_o=(yt?Re[yt]:null)??xo,ds=_o&&(_o.modelObjectId||_o.id)||null,ps=ds?oS[ds]??null:null,[c1,Rg]=(0,D.useState)(""),Og=(0,D.useRef)(null);(0,D.useEffect)(()=>{let M=Og.current;if(M!==yt)if(Og.current=yt,yt){let k=_o?.label||xo?.label||yt;Rg(vn("objectSelected",{name:k}))}else M&&Rg(vn("selectionCleared"))},[yt,_o,xo,vn]),(0,D.useEffect)(()=>{F?.(Tg)},[Tg,F]);let la=(0,D.useCallback)((M,k)=>{if(ho==="pointerLock"){Ul("orbit");return}M&&k?n.viewPart({objectId:M.id,objectKey:wr(M)??(M.modelObjectId||M.id),label:M.label,source:k}):M||n.setSelectedPart(null),Bp||iS(M),y?.(M)},[ho,Ul,Bp,y,wr,n]),Lg=(0,D.useRef)(tn?.objectBindings?`${r}
|
|
3739
|
+
${i??""}`:null),rc=(0,D.useCallback)((M,k)=>{if(!Xd)return;let W=`${r}
|
|
3740
|
+
${i??""}`,ae=Lg.current===W?Ur.current:zE;Lg.current=W;let de=dd(M,k);for(let ct of Object.keys(de))ae[ct]&&(de[ct]=ae[ct]);br(de)},[Xd,r,i,br]),{glowMemoryRef:Dg,readObjectGlow:ic,applyGlow:Np}=B_({nodeRefsMap:nn,currentObjectBindingsRef:Ur,applyObjectBindings:br}),u1=(0,D.useCallback)(M=>{let k=yt;if(!k||!M)return;let W=Ur.current[k];W&&br({...Ur.current,[k]:{...W,transform:{...W.transform,...M}}})},[br,yt]),d1=(0,D.useCallback)(M=>{let k=Ur.current,W={...k};for(let{key:ae,transform:de}of M){let ct=k[ae];ct&&(W[ae]={...ct,transform:{...ct.transform,...de}})}br(W)},[br]),Ii=(0,D.useCallback)((M,k)=>Re[M]?M:k?wr(k):Di.byId.get(M)??Di.byModelObjectId.get(M)??null,[Re,wr,Di]),oc=(0,D.useCallback)((M,k)=>{let W=Ii(M),ae=W?Re[W]:void 0;!W||!ae||br({...Re,[W]:{...ae,style:k(ae.style)}})},[Ii,Re,br]),Fr=(0,D.useCallback)(()=>{if(vr){let M=mo[vr.objectId]?.hex;M!==void 0&&(oc(vr.objectId,k=>({...k,material:{...k?.material,baseColor:M}})),Xl(k=>({...k,[vr.objectId]:{}})))}Xf(null)},[vr,mo,oc]),Vp=(0,D.useCallback)(()=>{la(null),cp(null),Fr()},[la,Fr]),p1=(0,D.useCallback)((M,k,W,ae,de)=>{let ct=Hf.current,Ge=yr.current,Ye=Fe.current?.camera;if(!ct)return{objectId:M,x:24,y:24};let _t=ct.getBoundingClientRect(),Wt=12,Mr=_t.width-k-Wt,Co=_t.height-W-Wt,ki=Math.max(Wt,(_t.width-k)/2),ms=Math.max(Wt,(_t.height-W)/2),pa=Ii(M,ae),fs=pa?nn.current[pa]:null,er=(Hr,Wr)=>Wr<=Wt?Wt:Math.min(Math.max(Hr,Wt),Wr);if(Ge&&Ye&&fs){let Hr=Ge.getBoundingClientRect(),Wr=new ti.Vector3;new ti.Box3().setFromObject(fs).getCenter(Wr),Wr.project(Ye);let $p=(Wr.x+1)/2*Hr.width+(Hr.left-_t.left),Ni=(1-Wr.y)/2*Hr.height+(Hr.top-_t.top);return{objectId:M,x:er($p+24,Mr),y:er(Ni-W/2,Co)}}let Gr=typeof de?.screenX=="number"?de.screenX-_t.left:ki,gs=typeof de?.screenY=="number"?de.screenY-_t.top:ms;return{objectId:M,x:er(Gr,Mr),y:er(gs,Co)}},[Ii]),ac=k_({setCurrentAction:cp,bindingKeyIndex:Di,currentObjectBindings:Re,applyObjectBindings:br,resolveObjectKey:Ii,closeColorPicker:Fr,setColorPicker:Xf,setMaterialPopupsByObject:aS,setItemMaterials:Xl,getPopoverPosition:p1,decalRequestRef:Of,setDecalError:Rf,setDecalDragging:Lf,setDecalControl:Af,resolvedSceneConfigRef:rs,applyLightPatches:Jd,readObjectGlow:ic,applyGlow:Np,glowMemoryRef:Dg,setLightControl:tp,onAction:I});(0,D.useEffect)(()=>{if(vr)return window.addEventListener("pointerdown",Fr),()=>window.removeEventListener("pointerdown",Fr)},[vr,Fr]),(0,D.useEffect)(()=>{if(!Jl)return;let M=k=>{if(Wl.current&&!Wl.current.contains(k.target)){if(k.target.closest?.(".ri-annotationMarker"))return;Ql()}};return document.addEventListener("mousedown",M),document.addEventListener("touchstart",M),()=>{document.removeEventListener("mousedown",M),document.removeEventListener("touchstart",M)}},[Jl,Ql]),(0,D.useEffect)(()=>{if(!vo)return;let M=k=>{let W=k.target;if(W.closest?.(".ri-annotationPopup")||W.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let ae=yr.current;!ae||!ae.contains(W)||(gg(null),Pp({title:"",description:""}))};return document.addEventListener("mousedown",M,!0),document.addEventListener("touchstart",M,!0),()=>{document.removeEventListener("mousedown",M,!0),document.removeEventListener("touchstart",M,!0)}},[vo]);let{handleFileChange:h1,triggerFileUpload:Ig,clearTexture:Bg,texturePositioningEnabled:m1,texturePositioningOverrides:f1,setMaterialTextureOffset:g1,setMaterialTextureRotation:b1,endMaterialTexturePositioning:y1}=D_({applyBindingStyle:oc,resolveObjectKey:Ii,onTextureUpload:z,fileInputRef:Ff,pendingObjectId:YM,createdBlobUrls:Gf,texturePositioning:at,setMoveZoomTarget:as}),zp=(0,D.useRef)(T);zp.current=T;let Jn=(0,D.useCallback)(()=>{let M=Fe.current;!M||!zp.current||zp.current({objectBindings:Ur.current,homeCameraState:xr.current,captureImage:k=>lg()?Promise.reject(new Error("Wait for video export to finish before capturing an image.")):bc(Qn.current,k),captureVideo:Cp,invalidate:()=>Qn.current?.invalidate(),rendererBackend:mg.current??"webgl",raw:{controls:M,scene:Ht.current,nodes:nn.current}})},[Cp,lg]),hs=(0,D.useCallback)(async(M=!1)=>{let k=Fe.current,W=ia.current??Ht.current;if(!k||!W)return!1;ta.current=Cl;try{return await sM(k,W,{flyIn:M,onStart:()=>bo(!0),invalidate:()=>Qn.current?.invalidate()}),(ia.current??Ht.current)!==W?!1:(zr.current=!0,aa(),Jn(),!0)}catch(ae){return console.error("Fit scene error:",ae),!1}},[aa,Jn]);(0,D.useEffect)(()=>{let M={url:r,usesSlots:rn},k=nM(pp.current,M,(jl.current??[]).map(Ge=>Ge.url),ra.current,Oi.current);if(pp.current=M,zr.current=!1,ls.current=!1,xr.current=rn?Oi.current[r]??null:null,Ht.current=null,ia.current=null,Yf(!1),$f([]),gp(!1),bp(null),oa(!1),yp.current="",Qf.current=new Set,vp.current=new Set,rg({total:0,missing:0}),ig("loadingModel"),_p(null),tn?.model!==Sc(r,i)&&(Yl.current=null),!r){fo(!1),bo(!0);return}if(rn&&Fl.current.has(r)){fo(!1),bo(!0);return}fo(!k),bo(k||!!ye||hp.current);let W=!1,ae=null,de=Ge=>{ae=setTimeout(ct,Ge)},ct=()=>{if(W||zr.current||ls.current||rn&&Fl.current.has(r))return;let Ge=ia.current??Ht.current;if(!Fe.current||!Ge){de(100);return}dp.current=rM(Ge,Fe.current,te?.maxDistance)??dp.current;let Ye=Yl.current;if(Ye){Yl.current=null,Xb(Fe.current,Ye.camera),zr.current=!0,Ye.home?(xr.current=Ye.home,rn&&(Oi.current[r]=Ye.home)):aa(),Jn(),fo(!1),bo(!0),Qn.current?.invalidate();return}if(Mw(Fe.current)||k){zr.current=!0,aa(),Jn(),fo(!1),bo(!0),Qn.current?.invalidate();return}ls.current=!0,(ye?ye():hp.current?Promise.resolve(!0):hs(!0)).then(Wt=>{W||(zr.current=Wt!==!1,zr.current?(aa(),Jn(),fo(!1)):W||de(100))}).catch(()=>{zr.current=!1,W||de(100)}).finally(()=>{W||(ls.current=!1)})};return de(50),()=>{W=!0,ae&&clearTimeout(ae)}},[aa,Oi,te?.maxDistance,hs,r,Jn,ye,tn,i,rn]),cM({enabled:ke,canvasAreaElement:lp,fitAttemptedRef:zr,fitInFlightRef:ls,controlsRef:Fe,cameraFramingRef:ta,nodeRefsMap:nn,fitScene:hs});let sc=(0,D.useCallback)(M=>{let k=Fe.current;if(!k)return;let W=M.cameraState;if(W?.position&&W?.target){let[ct,Ge,Ye]=W.position,_t=new ti.Vector3(...W.target);k.setPosition(ct,Ge,Ye,!0),k.setTarget(_t.x,_t.y,_t.z,!0),ta.current={kind:"view",target:_t};return}let ae=wr(M),de=ae?nn.current[ae]:null;!ae||!de||(k.fitToBox(de,!0,Md).catch(()=>{}),ta.current={kind:"object",key:ae})},[wr]);(0,D.useEffect)(()=>{yt||(ta.current=Cl)},[yt]);let Up=(0,D.useCallback)((M,k="canvas")=>{if(_g.current)return;let W=zf.current;W.dragging||performance.now()-W.endedAt<150||(An(!1),Fr(),cp(null),la(M,k),!(Ke||!ft)&&sc(M))},[la,Fr,sc,Ke,ft]),{beginMoveZoom:kg,handleMoveZoomPointerDown:v1}=P_({moveZoomTarget:Tn,setMoveZoomTarget:as,currentObjectBindingsRef:Ur,materialRefsOut:na,rendererCaptureRef:Qn,canvasAreaRef:yr,canvasAreaElement:lp,applyBindingStyle:oc}),Ng=(0,D.useCallback)(M=>{if(!ss)return!1;let k=wr(M);if(!k)return!1;let W=ec[k];return W?(kg({objectKey:k,textureKey:W}),!0):!1},[ss,wr,ec,kg]),jp=(0,D.useRef)(!1),{editDecals:u2,activeDecalMove:ca,addCenteredDecal:d2,decalSizeFor:x1,startImageDecal:p2,decalControlHandlers:w1}=S_({currentObjectBindings:Re,currentObjectBindingsRef:Ur,applyObjectBindings:br,nodeRefsMap:nn,controlsRef:Fe,decalMove:R,decalDragging:rp,setDecalDragging:Lf,setDecalError:Rf,setDecalControl:Af,decalRequestRef:Of,onTextureUpload:z,currentPanelObjectId:ds,modelUrl:r}),Vg=(0,D.useMemo)(()=>rd(Re,Ri.styleRules),[Re,Ri.styleRules]),[zg,Ug]=(0,D.useState)(()=>tn?.isolation??null);oi(()=>{Ug(null)},[r]);let ua=It!==void 0?It:zg,Fp=(0,D.useCallback)(M=>{It===void 0&&Ug(M),Gn?.(M)},[It,Gn]),_r=(0,D.useMemo)(()=>id(Vg,ua),[Vg,ua]),ii=(0,D.useMemo)(()=>_r.setAside.size>0?xl(Re,ua):null,[_r,Re,ua]),_1=(0,D.useCallback)(M=>{let k=wr(M),W=k!==null&&ii?.size===1&&ii.has(k);Fp(W?null:{...ua,target:M.id})},[Fp,ua,ii]),{sourceOf:Bi}=_r,M1=(0,D.useMemo)(()=>Br?Fw(Re,_r):[],[Br,Re,_r]),Gp=(0,D.useCallback)(M=>{let k=Bi(M);Up(k)},[Up,Bi]),Hp=(0,D.useCallback)(M=>Ag(M&&Bi(M)),[Ag,Bi]),Wp=(0,D.useCallback)((M,k)=>{let W=Bi(M);return _?.({binding:W,...k})===!0?(jp.current=!0,!0):Ng(W)},[_,Ng,Bi]),Xp=(0,D.useMemo)(()=>w?(M,k)=>w({binding:Bi(M),...k}):void 0,[w,Bi]),jg=(0,D.useCallback)(M=>{la(M,"panel"),!Ke&&sc(M)},[la,sc,Ke]);(0,D.useEffect)(()=>{Jn()},[Jn,Re,$M]);let Fg=(0,D.useCallback)((M,k)=>{iM(k,dp.current),O?.(Si(M,k)),Jn()},[Jn,O]),S1=(0,D.useCallback)(M=>{qf.current=new Set(M.map(k=>k.name)),lS(k=>k+1),rc(M.map(k=>k.name)),s?.(M)},[rc,s]),C1=(0,D.useCallback)(M=>{ia.current=M,Qn.current?.invalidate()},[]),da=(0,D.useCallback)(M=>{Ht.current=M,Cg(M),rg(tM(M));let k=Qp(M);hS(k>xs?k:null),ng(!1),_p(null),k>xs&&ig("preparingLargeModel"),Yf(!0),$f(Jc(M)),gp(!1),bp(null),tg(!1),i||(s&&s($0(M)),rc(Jw(M),Qw(M))),S?.(M),v?.(Tw(M)),Jn()},[rc,Jn,v,s,S,Cg,i]),qp=(0,D.useCallback)(M=>{fo(!1),bo(!0),gp(!0),bp(M),A?.(M)},[A]),{reportError:Gg,clearError:Hg}=bb({enabled:rn,activeUrl:r,models:ue,errorsRef:Fl,activeFailed:fp,activeError:Kf,onActiveError:qp,onExtraError:Rt}),T1=(0,D.useCallback)((M,k)=>{!rn||!jl.current?.some(W=>W.url===M)||(delete ra.current[M],delete Oi.current[M],Gg(M,k))},[rn,Gg,Oi]),P1=(0,D.useCallback)((M,k)=>{!rn||!jl.current?.some(W=>W.url===M)||(Hg(M),ra.current[M]=k,M===r&&(Gl.current!==M||Ht.current!==k)&&(Gl.current=M,da(k)),ht?.(M,k))},[rn,r,da,ht,Hg]);(0,D.useEffect)(()=>{if(!rn||Fl.current.has(r))return;let M=ra.current[r];M&&(Gl.current===r&&Ht.current===M||(Gl.current=r,da(M)))},[rn,r,Pn,da]);let Wg=(0,D.useCallback)((M,k)=>{vp.current.add(M),pS(W=>W+1),Sn?.(M,k)},[Sn]),Xg=rn&&ue?ue.find(M=>M.url===r)?.mergeModels:Gt,qg=(0,D.useMemo)(()=>new Set((Xg??[]).map(M=>M.url)),[Xg]),Yg=(0,D.useCallback)(M=>{M.lengthComputable&&M.total>0&&_p(M.loaded/M.total*100),E?.(M)},[E]),$g=(0,D.useCallback)((M,k,W)=>{if(!Le)return;let ae={...qe,lighting:{...qe.lighting,lights:qe.lighting.lights.map(de=>de.id===M?{...de,position:k,...W?{rotation:W}:{}}:de)}};Le(ae)},[qe,Le]);(0,D.useEffect)(()=>{let M=Ht.current;if(!Pn||!M){oa(!1);return}if(Array.from(qg).some(Ge=>!vp.current.has(Ge))){oa(!1);return}let W=Object.entries(Re).filter(([,Ge])=>!Ge.removed);if(W.length===0){oa(!1);return}let ae=i?qf.current:(()=>{let Ge=Qf.current;for(let Ye of Object.keys(fi(M).nodesById))Ge.add(Ye);return Ge})();if(!ae||ae.size===0){oa(!1);return}let de=W.map(([Ge,Ye])=>Ye.modelObjectId??Ge).filter(Ge=>!ae.has(Ge));oa(de.length>0),uS(de.length);let ct=de.join(`
|
|
3741
|
+
`);if(de.length>0&&ct!==yp.current){let Ge=de.slice(0,10).map(_t=>`"${_t}"`).join(", "),Ye=de.length>10?` and ${de.length-10} more`:"";console.warn(`[react-immersive] ${de.length} object binding(s) point at nodes this model doesn't have, so they can't be selected: ${Ge}${Ye}. Each binding's modelObjectId (or its key) must match a node name; log onObjectCatalog to see this model's names.`)}yp.current=ct},[Pn,Re,sS,i,qg,dS]),(0,D.useEffect)(()=>{if(I||Yd)return;let M=[];for(let[W,ae]of Object.entries(Re))for(let de of ae.actions??[])Ts.includes(de.id)||M.push(`"${de.id}" on "${ae.label??W}"`);let k=M.join(`
|
|
3742
|
+
`);if(M.length>0&&k!==Jf.current){let W=M.slice(0,10).join(", "),ae=M.length>10?` and ${M.length-10} more`:"";console.warn(`[react-immersive] ${M.length} action button(s) do nothing because ModelViewer has no onAction handler: ${W}${ae}. ModelViewer itself handles ${Ts.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}Jf.current=k},[Re,Yd,I]);let Yp=(0,D.useCallback)(async()=>{if(Fe.current&&xr.current&&Wo(Fe.current,xr.current),ye){await ye();return}let M=Fe.current;if(!M)return;let k=xr.current;try{if(k){ta.current=Cl;let W=Ju(k,M);await lf(M,()=>M.setLookAt(W[0],W[1],W[2],k.target[0],k.target[1],k.target[2],!0))}else await hs()}catch(W){console.error("Reset camera error:",W)}},[ye,hs]),h2=(0,D.useCallback)(()=>{Li(!1),An(!0)},[]),m2=(0,D.useCallback)(()=>{An(!1)},[]),A1=(0,D.useCallback)(()=>{An(!1),Li(!0),setTimeout(()=>{Yp()},100)},[Yp]),E1=(0,D.useCallback)((M,k)=>{Fg(M,k)},[Fg]),R1=(0,D.useCallback)(M=>{if(_g.current)return;if(jp.current){jp.current=!1;return}let k=$d==="scene"&&Kd==="Annotations";if(M.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let ae=yr.current,de=Fe.current,ct=de?.camera,Ge=Ht.current;if(!ae||!de||!ct||!Ge||!k&&!de.enabled)return;let Ye=ae.getBoundingClientRect(),_t=(M.clientX-Ye.left)/Ye.width*2-1,Wt=-((M.clientY-Ye.top)/Ye.height)*2+1,Mr=new ti.Raycaster;Mr.setFromCamera(new ti.Vector2(_t,Wt),ct);let Co=Mr.intersectObject(Ge,!0);if(Co.length===0)return;if(!k&&L){let er=Co[0].point,Gr=null;for(let[gs,Hr]of Object.entries(Ur.current)){if(!Hr.decals?.length)continue;let Wr=nn.current[gs];if(!Wr)continue;let $p=Wr.worldToLocal(er.clone());for(let Ni of Hr.decals){if(!Ni.position)continue;let Kp=$p.distanceTo(new ti.Vector3(Ni.position[0],Ni.position[1],Ni.position[2]));Kp<=Ni.size/2&&(!Gr||Kp<Gr.distance)&&(Gr={binding:Hr,id:Ni.id,distance:Kp})}}if(Gr){as(null),L(Gr.binding,Gr.id);return}}if(!k){let{x:er,y:Gr,z:gs}=Co[0].point;de.setOrbitPoint(er,Gr,gs);return}let ki=Co[0],ms=ki.point,pa=Ge.worldToLocal(ki.point.clone()),fs=[0,0,1];if(ki.face){let er=ki.face.normal.clone().transformDirection(ki.object.matrixWorld).normalize();fs=[er.x,er.y,er.z]}gg({worldPosition:[ms.x,ms.y,ms.z],localPosition:[pa.x,pa.y,pa.z],worldNormal:fs,anchor:b_(ki),screenX:M.clientX-Ye.left,screenY:M.clientY-Ye.top}),Pp({title:"",description:""})},[$d,Kd,L]);if((0,D.useEffect)(()=>{fn.current={snapshot:()=>{let M=Fe.current,k=Yl.current;return{model:xf,camera:zr.current&&M?Fa(M):k?.camera,home:xr.current??k?.home,lightEdits:Zd,variantEdit:Nl,sectionEdit:Vl,isolation:zg,objectBindings:_f||rn?void 0:Re,modelBindingEdits:_f?void 0:VM,explodeFactor:cs,cameraControllerType:kf,uvCheckerOverride:Df,annotationCategories:RS}},captureFrame:()=>{let M=Qn.current;return!M||t.status!=="ready"||!Pn||!go?Promise.resolve(null):Ib(M)}}}),(0,D.useEffect)(()=>()=>{fn.current=null},[fn]),kl.status==="checking"){let M=yf??ea;return M?(0,K.jsx)("div",{className:"ri-viewer ri-viewerPlaceholder",style:{background:Bf},children:(0,K.jsx)(_c,{src:M})}):(0,K.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,K.jsx)(pc,{title:vn("verifyingLicense"),message:vn("checkingYourLicenseKey")})})}if(kl.status==="invalid")return(0,K.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,K.jsx)(pc,{tone:"error",title:vn("invalidLicense"),message:kl.isLocalDomain?kl.reason??vn("licenseHasBeenRevokedOrHasExpired"):vn("failedToLoadPleaseContactTheSiteAdministrator")})});let{materialTextureUrl:Kg,materialTargetTakesImage:Zg,materialTextureOffset:Qg,materialTextureRotationDegrees:Jg,isMaterialTexturePositioning:eb,materialTextureOnOffsetChange:tb,materialTextureOnRotationChange:nb,materialTextureOnEndPositioning:rb}=I_({materialPopup:ps,resolveObjectKey:Ii,currentObjectBindings:Re,nodeRefsMap:nn,moveZoomTarget:Tn,texturePositioningEnabled:m1,texturePositioningOverrides:f1,setMaterialTextureOffset:g1,setMaterialTextureRotation:b1,endMaterialTexturePositioning:y1}),O1=yr.current?.offsetWidth??600,L1=yr.current?.offsetHeight??400,D1=350,I1=290,B1=vo?Math.min(vo.screenX+12,O1-D1-8):0,k1=vo?Math.min(vo.screenY,L1-I1-8):0,N1=ce&&!!r&&!fp&&!Pn,Mo=ni&&(Zl&&(ug||dg)||pg||!!Kl),ib=(Mo?1:0)+(Ut?1:0),So=M=>16+M*42+(Dt&&M>ib?Math.max(0,i1-34):0);return(0,K.jsxs)("div",{className:"ri-viewer",ref:Hl.rootRef,style:{background:Bf},"data-reduced-motion":ns?"":void 0,children:[(0,K.jsx)("div",{className:"ri-visuallyHidden",role:"status","aria-atomic":"true",children:c1}),t.status!=="ready"&&(0,K.jsx)(L_,{rebuilding:t.status==="rebuilding",onReload:t.reload}),(0,K.jsxs)("div",{className:"ri-viewerLeft",ref:Hf,inert:t.status!=="ready",children:[se?se({isOpen:Eg,selectedObject:_o,currentAction:Wf,onClose:Vp,onAction:ac}):(0,K.jsx)(Xm,{translateDefaultActions:Xd,isOpen:Eg,selectedObject:_o,currentAction:Wf,onClose:Vp,onAction:ac,renderActionExtra:M=>{if(M==="change-color"&&vr)return(0,K.jsx)(Hm,{inline:!0,colorPicker:vr,onClose:Fr,itemMaterials:mo,setItemMaterials:Xl});if((M==="change-light-color"||M==="set-brightness")&&ep?.kind===M&&ep.objectId===ds){let k=ep,W=k.target,ae=W.type==="lights"?qe.lighting.lights.find(de=>de.id===W.lightIds[0])?.color??"#ffffff":_d(ic(W.objectKey).color);return(0,K.jsx)(fy,{kind:k.kind,color:ae,brightness:k.percent,onColorChange:de=>{if(W.type==="lights"){Jd(Object.fromEntries(W.lightIds.map(Ge=>[Ge,{color:de}])));return}let ct=ic(W.objectKey);Np(W.objectKey,{emissive:de,emissiveIntensity:ct.intensity>0?ct.intensity:Dg.current[W.objectKey]??1})},onBrightnessChange:de=>{if(tp({...k,percent:de}),W.type==="lights"){Jd(Object.fromEntries(W.lightIds.map(ct=>[ct,{intensity:(W.baseIntensity[ct]??0)*(de/100)}])));return}Np(W.objectKey,{emissive:_d(ic(W.objectKey).color),emissiveIntensity:W.baseIntensity*(de/100)})},onClose:()=>tp(null)})}if((M==="add-text"||M==="add-image")&&np?.kind===M&&np.objectId===ds){let k=np,W=Ii(k.objectId);if(!W)return null;let ae=M==="add-image";return(0,K.jsx)(yy,{kind:M,decals:(Re[W]?.decals??[]).filter(de=>!!de.image===ae),activeId:k.activeId,error:Ef?vn.message(Ef):null,moving:rp?.objectKey===W&&rp.decalId===k.activeId,defaultSize:x1(W),...w1(k,W)})}return M==="change-material"&&ps?(0,K.jsx)(Wm,{inline:!0,triggerFileUpload:Ig,materialPopup:ps,textureUrl:Kg,clearTexture:Bg,canPlaceImage:Zg,offset:Qg,rotationDegrees:Jg,onOffsetChange:tb,onRotationChange:nb,isPositioning:eb,onEndPositioning:rb}):null}}),(0,K.jsxs)("div",{className:`ri-canvasArea ${ri?"ri-canvasArea--measuring":""} ${go?"":"ri-canvasArea--positioning"} ${Nr||Vr?"ri-canvasArea--moveMode":""}`,ref:eS,tabIndex:po?0:void 0,role:po?"group":void 0,"aria-label":po?vn("cameraKeyboardHelp"):void 0,onDoubleClick:R1,onPointerDown:M=>{if(po&&yr.current?.focus({preventScroll:!0}),Tn){v1(M);return}e1(M)},onClick:Tn?void 0:t1,onPointerMove:$S,onPointerLeave:Sg,onWheel:Sg,children:[Pn&&!ri&&t.status==="ready"?(0,K.jsx)(Ww,{objects:M1,selectedKey:yt,onHighlight:up,onSelect:M=>Up(M,"keyboard"),onClearSelection:()=>{Vp(),P?.()}}):null,ss&&!i&&(Tn||s1)&&(0,K.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:Tn?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:vn(Tn?"texturePositioningHint":"texturePositioningStartHint")}),Zf&&!eg&&(0,K.jsx)(A_,{count:cS,onDismiss:()=>tg(!0)}),xp!==null&&!mS&&(0,K.jsx)(E_,{triangles:xp,offset:Zf&&!eg,onDismiss:()=>ng(!0)}),Ri.model.renderer==="uv-checker"&&wp.missing>0&&(0,K.jsx)(R_,{missing:wp.missing,total:wp.total}),(0,K.jsx)("input",{ref:Ff,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:h1}),(0,K.jsx)(ya,{onError:t.fail,children:sa?(0,K.jsxs)(Ah,{backend:sa,onRendererCreated:t.onRendererCreated,suspended:t.status!=="ready",paused:ts&&!Vt,camera:X,backgroundColor:he,shadows:Ee&&qe.shadows.enabled,sceneConfig:Ri,selectedObjectRef:wo,selectedObjectRefs:kp,selectedObjectOutlineColor:b,hoveredObjectRef:l1,highlightOnHover:ne,renderMode:wt,maxDpr:it,reduceGpuLoad:WM,xrStore:Zl,rendererCaptureRef:Qn,preserveDrawingBuffer:ot,children:[(0,K.jsx)(Dh,{lightingConfig:qe.lighting,shadowConfig:qe.shadows,shadowsEnabled:Ee,environmentRotation:qe.environment.rotation,environmentConfig:qe.environment,modelBounds:KS,objectBindings:Re,nodeRefs:nn}),zM&&qe.lighting.lights.map(M=>!M.visible||M.type==="none"||M.type==="hemisphere"||M.attachment?null:(0,K.jsx)(p_,{light:M,position:M.position,rotation:M.rotation,color:M.color,intensity:M.intensity,visible:M.visible,onPositionChange:k=>$g(M.id,k,M.rotation),onRotationChange:k=>$g(M.id,M.position,k),onDraggingChange:Vf},M.id)),(0,K.jsx)(Um,{setAside:_r.setAside,nodeRefs:nn}),!yo&&(0,K.jsx)(Gm,{section:qe.section??Ro,box:tc,modelRef:Ht,showHandle:gr,onPositionChange:M=>Cf({position:M}),onDraggingChange:GM}),(0,K.jsx)(Oh,{controlsRef:Fe,onCameraChange:E1,cameraLimits:te,controllerType:ho,onPointerLockExit:()=>Ul("orbit"),reducedMotion:ns}),(0,K.jsx)(sf,{enabled:Vt||ri||ca||ns||ho==="pointerLock"?!1:Y??qe.model.autoRotate??!1,speed:me??qe.model.autoRotateSpeed??1,controlsRef:Fe}),U&&!Vt&&(0,K.jsx)(Sd.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{Fe.current?.update(0),Qn.current?.invalidate()},children:(0,K.jsx)(Sd.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),(Nr||Vr)&&!yo&&!nc&&wo&&yt&&(0,K.jsx)(nf,{node:wo,space:Bl,moveEnabled:Nr,scaleEnabled:Vr,onTransformChange:u1,transform:Re[yt]?.transform,onDraggingChange:M=>{Uf(M),xo&&C?.(xo,M)}},yt),(Nr||Vr)&&!yo&&nc&&(0,K.jsx)(af,{entries:nc,referenceNode:wo,space:Bl,moveEnabled:Nr,scaleEnabled:Vr,onTransformChange:d1,onDraggingChange:M=>{Uf(M);for(let k of nc){let W=Re[k.key];W&&C?.(W,M)}}}),ca&&(0,K.jsx)(Hy,{target:ca,nodes:nn,controls:Fe}),(()=>{let M=rn&&ue?(0,K.jsxs)(K.Fragment,{children:[ue.map(k=>(0,K.jsx)(Sx,{entry:{...k,objectBindings:k.url===r?_r.bindings:qd(k)},isActive:k.url===r,pulses:_r.pulses,decoderConfig:zl,itemMaterials:mo,sceneConfig:Ri,zoomOnSelected:ft,highlightOnHover:ne,explodeFactor:cs,suspendBindingTransforms:os,onLoadProgress:Yg,onAnimationsReady:q,onModelAnimationsReady:Z,onLoadError:T1,onModelLoaded:P1,selectedItem:yt,panelHoveredItem:f??ql,onItemClick:Gp,onItemDoubleClick:Wp,onItemContextMenu:Xp,onItemHover:Hp,nodeRefsOut:nn,onNodeRefsChange:sp,materialRefsOut:k.url===r?na:QM(k.url),onMergeModelLoaded:Wg,onMergeModelError:Hn},k.url)),(0,K.jsx)(Hu,{annotations:bg,sceneConfig:qe,activeAnnotation:Jl,popupRef:Wl,canvasRootRef:yr,worldPositionsRef:ap,modelLoaded:Pn,onAnnotationClick:vg,onCloseAnnotation:Ql,hideCloseButton:us,showAnnotationOnHover:Ei}),(0,K.jsx)(xd,{annotation:yg,enabled:us&&!Vt,controlsRef:Fe,offsetRef:op}),Vt?(0,K.jsx)(ba,{controlsRef:Fe,sceneRef:Ht,config:Vt.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:Vt.onStarted,onFinished:Vt.onFinished,onProgress:cg},"video-export"):jr&&(0,K.jsx)(ba,{controlsRef:Fe,sceneRef:Ht,config:jr,playing:Mp&&!ri,resetOnPlay:sg,onFinished:()=>{An(!1),Li(!1)},onUserInteract:()=>{An(!1)}},"cinematic-preview"),Dt&&(0,K.jsx)(Yu,{points:Op,unit:Za,box:tc,showDimensions:Ip,tool:Lp,areaClosed:Dp,snapPreview:ri?Mg:null})]}):(0,K.jsx)(Xr,{onLoadError:qp,children:(0,K.jsxs)(D.Suspense,{fallback:null,children:[i?(0,K.jsx)(Sm,{url:i,rotation:Ri.model.rotation,errorTarget:o,cacheSize:a,decoderConfig:zl,objectBindings:_r.bindings,itemMaterials:mo,sceneConfig:Ri,selectedItem:yt,panelHoveredItem:f??ql,highlightOnHover:ne,onItemClick:Gp,onItemHover:Hp,onItemDoubleClick:Wp,onItemContextMenu:Xp,onObjectCatalog:S1,onTilesetBounds:C1,onModelLoaded:da,onLoadError:qp,nodeRefsOut:nn,onNodeRefsChange:sp,materialRefsOut:na,explodeFactor:cs,suspendBindingTransforms:os}):(0,K.jsx)(Ws,{url:r,modelFormat:l,objectBindings:_r.bindings,selectedItem:yt,itemMaterials:mo,onItemClick:Gp,onItemDoubleClick:Wp,onItemContextMenu:Xp,onItemHover:Hp,onModelLoaded:da,onAnimationsReady:q,nodeRefsOut:nn,onNodeRefsChange:sp,materialRefsOut:na,panelHoveredItem:f??ql,sceneConfig:Ri,zoomOnSelected:ft,highlightOnHover:ne,decoderConfig:zl,onLoadProgress:Yg,explodeFactor:cs,suspendBindingTransforms:os,originalNodePoses:yn,mergeModels:Gt,onMergeModelLoaded:Wg,onMergeModelError:Hn,pulses:_r.pulses}),jt?.map(k=>(0,K.jsx)(Mx,{url:k,decoderConfig:zl,onLoadError:Rt,onModelLoaded:ht?W=>ht(k,W):void 0},k)),(0,K.jsx)(Hu,{annotations:bg,sceneConfig:qe,activeAnnotation:Jl,popupRef:Wl,canvasRootRef:yr,worldPositionsRef:ap,modelLoaded:Pn,onAnnotationClick:vg,onCloseAnnotation:Ql,hideCloseButton:us,showAnnotationOnHover:Ei}),(0,K.jsx)(xd,{annotation:yg,enabled:us&&!Vt,controlsRef:Fe,offsetRef:op}),Vt?(0,K.jsx)(ba,{controlsRef:Fe,sceneRef:Ht,config:Vt.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:Vt.onStarted,onFinished:Vt.onFinished,onProgress:cg},"video-export"):jr&&(0,K.jsx)(ba,{controlsRef:Fe,sceneRef:Ht,config:jr,playing:Mp&&!ri,resetOnPlay:sg,onFinished:()=>{An(!1),Li(!1)},onUserInteract:()=>{An(!1)}},"cinematic-preview"),Dt&&(0,K.jsx)(Yu,{points:Op,unit:Za,box:tc,showDimensions:Ip,tool:Lp,areaClosed:Dp,snapPreview:ri?Mg:null})]})},i??r);return Zl?(0,K.jsx)(sw,{ref:wS,box:tc,scaleMode:Dl,onARStateChange:TS,children:M}):M})(),ee&&(0,K.jsx)(D.Suspense,{fallback:null,children:ee})]}):null}),(0,K.jsx)(_c,{src:yf??ea,hidden:Pn&&go}),j&&(0,K.jsx)("div",{className:"ri-overlay",children:j}),ce&&r&&fp&&(0,K.jsx)(O_,{failure:ay(Kf,i||r,i?void 0:l,e),source:i||r}),(0,K.jsx)($w,{visible:N1,message:vn(fS,{millions:Math.round((xp??0)/1e6)}),progress:gS??void 0}),Mo&&(0,K.jsx)(Y_,{top:So(0),xrStore:Zl,arSupported:ug,vrSupported:dg,quickLookSupported:pg,mobileHandoffUrl:Kl,mobileHandoffOpen:hg,onQuickLook:CS,onOpenMobileHandoff:MS}),_S,hg&&Kl&&(0,K.jsx)($_,{url:Kl,onClose:SS}),Ut&&(0,K.jsx)(K_,{top:So(Mo?1:0),active:ip,onToggle:()=>If(M=>!(M??is))}),Dt&&(0,K.jsx)(Em,{top:So(ib),active:ri,disabled:!!Vt,tool:Lp,snap:qS,pointCount:Op.length,areaClosed:Dp,error:GS,showDimensions:Ip,onToggle:()=>{An(!1),QS()},onTool:HS,onSnap:YS,onUndo:WS,onClear:ZS,onFinishArea:XS,onDimensions:JS,onHeight:o1}),Bn&&(0,K.jsx)(Z_,{top:So((Mo?1:0)+(Ut?1:0)+(Dt?1:0)),open:bS,factor:cs,onToggleOpen:()=>ag(M=>!M),onFactorChange:og}),gr&&!yo&&(0,K.jsx)(Q_,{top:So((Mo?1:0)+(Ut?1:0)+(Dt?1:0)+(Bn?1:0)),section:US,onChange:Cf}),jr&&(0,K.jsx)(J_,{top:So((Mo?1:0)+(Ut?1:0)+(Dt?1:0)+(Bn?1:0)+(gr?1:0)),playing:Mp,disabled:!!Vt||ri,onPlay:()=>{Li(!1),An(!0)},onPause:()=>An(!1),onStop:A1}),Vt&&(0,K.jsx)(eM,{progress:vS,onCancel:Tp}),rn&&ue&&ue.length>1&&vf&&(0,K.jsx)("div",{className:"ri-modelSwitcher",style:{top:`${So((Mo?1:0)+(Ut?1:0)+(Dt?1:0)+(Bn?1:0)+(gr?1:0)+(jr?1:0))}px`},role:"group","aria-label":"Switch model",children:ue.map(M=>(0,K.jsx)("button",{type:"button",className:`ri-modelSwitcherButton ${M.url===r?"ri-modelSwitcherButton--active":""}`,onClick:()=>vf?.(M.url),title:`Switch to ${M.label||cf(M.url)}`,"aria-pressed":M.url===r,children:M.label||cf(M.url)},M.url))}),(Ap||xg||ca||Ai&&ii)&&(0,K.jsxs)("div",{className:`ri-bottomStack ${wg?"ri-bottomStack--aboveButtons":""} ${Ap?"ri-bottomStack--annotationFilters":""}`,children:[Ap&&(0,K.jsx)(V_,{categories:LS,selected:OS,disabled:!!Vt,onChange:DS}),ca&&(0,K.jsx)(z_,{onCancel:ca.onCancel}),Ai&&ii&&(0,K.jsx)(U_,{label:ii.size===1?vn("isolatedObject",{name:(()=>{let[M]=ii;return Re[M]?.label??M})()}):vn("isolatedObjects",{count:ii.size}),onShowAll:()=>Fp(null)}),xg&&(0,K.jsx)(j_,{groups:mp,activeVariants:Qd,onSelect:HM})]}),wg&&(0,K.jsxs)("div",{className:"ri-buttonContainer",children:[(0,K.jsx)("div",{className:"ri-tourControls",children:Ja&&Ep.length>0&&(0,K.jsx)(F_,{count:Ep.length,active:us,index:AS,navigating:ES,onStart:IS,onPrevious:BS,onNext:kS,onStop:NS})}),(0,K.jsxs)("div",{className:"mv-rightControls",children:[rt&&Hl.supported&&(0,K.jsx)(G_,{fullscreen:Hl,disabled:!!Vt}),et&&(0,K.jsx)("button",{className:"mv-resetButton",onClick:Yp,disabled:!!Vt,title:vn("resetCameraView"),children:(0,K.jsx)(uM.RotateCcw,{})}),(0,K.jsx)(H_,{open:qM,current:ho,disabled:!!Vt,onSelect:Ul,onToggle:()=>Nf(M=>!M)}),ie&&(0,K.jsx)(W_,{menu:a1,recording:!!Vt,hasScene:!!Ht.current,canCaptureImage:ot||sa==="webgpu",canRecord:Pn&&go&&!$l,hasCinematic:!!jr})]})]}),vo&&(0,K.jsx)(X_,{x:B1,y:k1,form:PS,setForm:Pp,onOk:VS,onCancel:zS})]}),se&&vr&&(0,K.jsx)(Hm,{colorPicker:vr,onClose:Fr,itemMaterials:mo,setItemMaterials:Xl}),se&&ps&&(0,K.jsx)(Wm,{triggerFileUpload:Ig,materialPopup:ps,textureUrl:Kg,clearTexture:Bg,canPlaceImage:Zg,offset:Qg,rotationDegrees:Jg,onOffsetChange:tb,onRotationChange:nb,isPositioning:eb,onEndPositioning:rb})]}),Xe&&(0,K.jsx)("div",{className:"ri-viewerRight",inert:t.status!=="ready",children:we?we({objectBindings:Re,onAction:ac,onFocus:jg,onHover:up}):(0,K.jsx)(qm,{objectBindings:Re,onAction:ac,onFocus:jg,onHover:up,isolatedKeys:ii,onIsolate:Ai?_1:void 0})}),Te&&(0,K.jsx)(_w,{controlsRef:Fe,enabled:t.status==="ready",opacity:At,moveSensitivity:Lt,position:tt})]})}var dM={licenseValidationUrl:!0,onObjectEditLeaseChange:!0,onSelectionClear:!0,onSceneLoaded:!0,onTexturePositioningChange:!0,endTexturePositioningRef:!0};function pM(e,t){let n={...e};for(let r of Object.keys(t))delete n[r];return n}var mM=require("react"),jE={"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"},df=new Set,FE=1e3;function hM(e){return getComputedStyle(document.documentElement).getPropertyValue(`--ri-styles-${e}`).trim()!==""}function fM(e,t){(0,mM.useEffect)(()=>{if(process.env.NODE_ENV==="production"||df.has(e)||hM(e))return;let n,r=()=>{n=setTimeout(()=>{df.has(e)||hM(e)||(df.add(e),console.warn(`[react-immersive] ${t}'s styles aren't loaded, so it renders unstyled. Import them once, in your app's root:
|
|
3692
3743
|
|
|
3693
|
-
import "${ZS[e]}";`))},QS)};return document.readyState==="complete"?(r(),()=>clearTimeout(n)):(window.addEventListener("load",r,{once:!0}),()=>{window.removeEventListener("load",r),clearTimeout(n)})},[e,t])}var _v=require("react/jsx-runtime");function Lp(e){return xv("model-viewer","ModelViewer"),(0,_v.jsx)(Ap,{...bv(e,gv)})}var xi=require("react");var st=require("react");function Op(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ms(e,t){if(!Op(t))return t;let n=Op(e)?{...e}:{};for(let r of Object.keys(t)){let i=t[r];n[r]=Op(i)?ms(n[r],i):i}return n}function JS(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!="string"}function Qi(e,t,n){let r=JS(t)?t:[{ids:t,patch:n??{}}],i=e;for(let o of r)for(let a of dn(i,o.ids)){let s=i[a];if(!s)continue;let c=ms(s,o.patch);i===e&&(i={...e}),i[a]=c}return i}function Pc(e){return{style:{material:e}}}var wv={baseColor:"texture",metalness:"metalnessMap",roughness:"roughnessMap",emissive:"emissiveMap",alpha:"alphaMap",normal:"normalMap",bump:"bumpMap",ao:"aoMap",displacement:"displacementMap",clearcoat:"clearcoatMap",clearcoatRoughness:"clearcoatRoughnessMap",clearcoatNormal:"clearcoatNormalMap",anisotropy:"anisotropyMap",transmission:"transmissionMap",thickness:"thicknessMap",sheenColor:"sheenColorMap",sheenRoughness:"sheenRoughnessMap",specularIntensity:"specularIntensityMap",specularColor:"specularColorMap"};function Sv(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n&&typeof n=="object"?{...n}:n]))}function eM(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function Ec(e){let[t,n]=(0,st.useState)(e),r=(0,st.useCallback)((g,M)=>{n(A=>M===void 0?Qi(A,g):Qi(A,g,M))},[]),i=(0,st.useCallback)((g,M)=>r(g,Pc(M)),[r]),o=(0,st.useCallback)((g,M)=>i(g,{baseColor:M}),[i]),a=(0,st.useCallback)((g,M,A="baseColor")=>{let N=wv[A],z=typeof M=="string"?{path:M}:M;r(g,{style:{material:{[N]:z}}})},[r]),s=(0,st.useCallback)((g,M="baseColor")=>{let A=wv[M];r(g,{style:{material:{[A]:void 0}}})},[r]),c=(0,st.useCallback)((g,M)=>{n(A=>{let N=Ot(A,g);if(!N)return A;let z=Sv(A[N]?.style?.material),U=dn(A,M);if(U.length===0)return A;let q=A;for(let x of U){let R=A[x];R&&(q===A&&(q={...A}),q[x]={...R,style:{...R.style,material:Sv(z)}})}return q})},[]),l=(0,st.useCallback)(g=>r(g,{style:{material:void 0}}),[r]),d=(0,st.useCallback)((g,M)=>r(g,{transform:M}),[r]),u=(0,st.useCallback)(g=>r(g,{transform:void 0}),[r]),m=(0,st.useCallback)((g,M)=>r(g,{metadata:M}),[r]),h=(0,st.useCallback)((g,M)=>{n(A=>{let N=A;for(let z of dn(A,g)){let U=A[z],q=M(U.decals??[]);N===A&&(N={...A}),N[z]={...U,decals:q.length>0?q:void 0}}return N})},[]),f=(0,st.useCallback)((g,M)=>{let A=M.id??`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;return h(g,N=>[...N.filter(z=>z.id!==A),{...M,id:A}]),A},[h]),b=(0,st.useCallback)((g,M,A)=>h(g,N=>N.map(z=>z.id===M?{...z,...A}:z)),[h]),v=(0,st.useCallback)((g,M)=>h(g,A=>A.filter(N=>N.id!==M)),[h]),y=(0,st.useCallback)(g=>dc(t,g),[t]),S=(0,st.useCallback)(g=>dn(t,g).map(M=>t[M]?.id??M),[t]),_=(0,st.useCallback)(g=>{let M=Ot(t,g);return M?t[M]?.style?.material??null:null},[t]),k=(0,st.useCallback)(g=>r(g,{visible:!1}),[r]),T=(0,st.useCallback)(g=>r(g,{visible:!0}),[r]),P=(0,st.useCallback)(g=>{n(M=>{let A=dn(M,g).reduce((N,z)=>{let U=M[z];return U&&N.push({ids:z,patch:{visible:U.visible===!1}}),N},[]);return Qi(M,A)})},[n]),B=(0,st.useCallback)(()=>{n(g=>Qi(g,Object.keys(g),{visible:!0}))},[n]),D=(0,st.useMemo)(()=>eM(t),[t]),O=(0,st.useMemo)(()=>Object.keys(D).map(g=>t[g]?.id??g),[D,t]),E=(0,st.useCallback)(g=>{let M=Ot(t,g);return M?t[M]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:n,updateObjectBindings:r,setMaterial:i,setBaseColor:o,setTexture:a,clearTexture:s,copyMaterial:c,resetMaterial:l,getMaterial:_,setTransform:d,resetTransform:u,updateMetadata:m,addDecal:f,updateDecal:b,removeDecal:v,selectObjectBindings:y,selectObjectBindingIds:S,hiddenObjects:D,hiddenObjectIds:O,hideObject:k,showObject:T,toggleObjectVisibility:P,isObjectHidden:E,clearHiddenObjects:B}}var Wt=require("react");function Ac(e,t){return ms(e,t)}var tM={type:"point",color:"#ffffff",intensity:1,position:[0,0,0],distance:0,decay:2,attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0};function Rc(e){return{...tM,...e}}function Lc(e){let t=(0,Wt.useRef)(null),[n,r]=(0,Wt.useState)(()=>{let y=typeof e=="function"?e():e;return t.current=y,y}),i=(0,Wt.useCallback)(y=>{r(S=>{let _=typeof y=="function"?y(S):y;return Ac(S,_)})},[]),o=(0,Wt.useCallback)(()=>{let y=t.current;y&&r(y)},[]),a=(0,Wt.useCallback)((y,S)=>{i(_=>({lighting:{lights:_.lighting.lights.map(k=>k.id===y?{...k,...S}:k)}}))},[i]),s=(0,Wt.useCallback)(y=>{i(S=>S.lighting.lights.some(_=>_.id===y.id)?{}:{lighting:{lights:[...S.lighting.lights,Rc(y)]}})},[i]),c=(0,Wt.useCallback)(y=>{i(S=>({lighting:{lights:S.lighting.lights.filter(_=>_.id!==y)}}))},[i]),l=(0,Wt.useCallback)((y,S)=>a(y,{intensity:S}),[a]),d=(0,Wt.useCallback)((y,S)=>a(y,{color:S}),[a]),u=(0,Wt.useCallback)(y=>a(y,{visible:!0}),[a]),m=(0,Wt.useCallback)(y=>a(y,{visible:!1}),[a]),h=(0,Wt.useCallback)(y=>{i(S=>({lighting:{lights:S.lighting.lights.map(_=>_.id===y?{..._,visible:!_.visible}:_)}}))},[i]),f=(0,Wt.useCallback)((y,S)=>a(y,{attachment:S,attachedToCamera:!1}),[a]),b=(0,Wt.useCallback)(y=>a(y,{attachment:void 0}),[a]),v=(0,Wt.useMemo)(()=>({items:n.lighting.lights,get:y=>n.lighting.lights.find(S=>S.id===y),add:s,update:a,remove:c,setIntensity:l,setColor:d,show:u,hide:m,toggle:h,attach:f,detach:b}),[n.lighting.lights,s,a,c,l,d,u,m,h,f,b]);return{sceneConfig:n,setSceneConfig:r,updateSceneConfig:i,resetSceneConfig:o,lights:v}}var Oc=require("react");function Dc({bindings:e,scene:t,camera:n,animations:r,isolation:i,onAction:o}){let{objectBindings:a,updateObjectBindings:s,showObject:c,hideObject:l,toggleObjectVisibility:d}=e,u=t?.updateSceneConfig,m=n?.focusObject,h=n?.fitScene,f=n?.resetView,b=n?.setCameraTarget,v=n?.setCameraState,y=r?.play,S=r?.pause,_=r?.stop,k=r?.setSpeed,T=r?.seek,P=i?.handleIsolationChange,B=(0,Oc.useCallback)(E=>{let g=Ot(a,E);return g?a[g]?.actions??[]:[]},[a]),D=(0,Oc.useCallback)(async E=>{for(let g of E.action.effects??[]){if("objectBindings"in g){s(g.target,g.objectBindings);continue}if("sceneConfig"in g){u?.(g.sceneConfig);continue}if("isolation"in g){P?.(g.isolation);continue}if("visibility"in g){g.visibility==="show"?c(g.target):g.visibility==="hide"?l(g.target):d(g.target);continue}if("camera"in g){let A=g.camera;A.type==="focus-object"?await m?.(A.objectId??E.objectId):A.type==="fit-scene"?await h?.():A.type==="reset"?await f?.():A.type==="set-target"?await b?.(A.target,A.transition??!0):await v?.(A.state,A.transition??!0);continue}let M=g.animation;if(M.type==="play"){let{type:A,clip:N,...z}=M;y?.(N,z)}else M.type==="pause"?S?.(M.clip):M.type==="stop"?_?.(M.clip):M.type==="set-speed"?k?.(M.speed,M.clip):T?.(M.time,M.clip)}await o?.(E)},[h,m,l,o,S,y,f,T,k,v,b,P,c,_,d,s,u]),O=(0,Oc.useCallback)(async(E,g)=>{let M=Ot(a,E);if(!M)return null;let A=a[M],N=A?.actions?.find(U=>U.id===g);if(!A||!N)return null;let z={objectId:M,action:N,binding:A};return await D(z),z},[D,a]);return{getActionsForObject:B,handleAction:D,runAction:O}}var on=require("react"),Mv={currentClip:null,isPlaying:!1,speed:1,time:0,duration:0,active:[]};function Ic(){let e=(0,on.useRef)(null),t=(0,on.useRef)(null),[n,r]=(0,on.useState)([]),[i,o]=(0,on.useState)([]),[a,s]=(0,on.useState)(Mv);(0,on.useEffect)(()=>()=>{t.current?.()},[]);let c=(0,on.useCallback)(b=>{t.current?.(),e.current=b,r(b.clips),o(b.clipDetails??b.clips.map(v=>({sourceName:v,duration:0}))),s(b.getState?.()??Mv),t.current=b.subscribe?.(s)??null},[]),l=(0,on.useCallback)(b=>{let v=e.current;v&&(b(v),!v.subscribe&&v.getState&&s(v.getState()))},[]),d=(0,on.useCallback)((b,v)=>l(y=>y.play(b,v)),[l]),u=(0,on.useCallback)(b=>l(v=>v.pause(b)),[l]),m=(0,on.useCallback)(b=>l(v=>v.stop(b)),[l]),h=(0,on.useCallback)((b,v)=>l(y=>y.setSpeed(b,v)),[l]),f=(0,on.useCallback)((b,v)=>l(y=>y.seek?.(b,v)),[l]);return{clips:n,clipDetails:i,...a,play:d,pause:u,stop:m,setSpeed:h,seek:f,handleAnimationsReady:c}}var qr=require("react");function nM(e){return typeof e=="function"?e:e?.handleViewerReady??null}function Bc(...e){let t=(0,qr.useRef)(null),n=(0,qr.useRef)(e);n.current=e;let r=(0,qr.useCallback)(c=>{t.current=c;let l=new Set;for(let d of n.current){let u=nM(d);u&&!l.has(u)&&(l.add(u),u(c))}},[]),i=(0,qr.useCallback)(()=>t.current,[]),o=(0,qr.useCallback)(c=>{let l=t.current;return l?l.captureImage(c):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),a=(0,qr.useCallback)(()=>{let c=t.current;return c?(c.invalidate(),!0):!1},[]),s=(0,qr.useCallback)(c=>{let l=t.current;return l?l.captureVideo(c):Promise.reject(new Error("ModelViewer is not ready yet."))},[]);return{handleViewerReady:r,getViewer:i,captureImage:o,captureVideo:s,invalidate:a}}var ke=require("react"),Ko=require("three");var Bp=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],kc=1;function Nc(e){return typeof e=="string"?[e]:e}function Vc(e,t=0,n=1){return Math.min(n,Math.max(t,e))}function Dp(e,t){return e+Math.random()*(t-e)}function Cv([e,t],n){return e+(t-e)*n}function Ip([e,t],n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n,e[2]+(t[2]-e[2])*n]}function Tv(e,t){let n=Vc(e);switch(t){case"ease-in":return n*n;case"ease-out":return 1-(1-n)*(1-n);case"ease-in-out":return n<.5?2*n*n:1-Math.pow(-2*n+2,2)/2;default:return n}}function rM(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(n=>n instanceof Ko.Material):[]}function iM(e){let t={opacity:e.opacity,transparent:e.transparent};e.color&&(t.baseColor=`#${e.color.getHexString()}`),e.emissive&&(t.emissive=`#${e.emissive.getHexString()}`);for(let n of Bp){let r=e[n];typeof r=="number"&&(t[n]=r)}return t}function Pv(e,t){t.baseColor!==void 0&&e.color&&e.color.set(t.baseColor),t.emissive!==void 0&&e.emissive&&e.emissive.set(t.emissive);for(let n of Bp){let r=t[n];r!==void 0&&typeof e[n]=="number"&&(e[n]=r)}t.transparent!==void 0&&(e.transparent=t.transparent),e.needsUpdate=!0}function oM(e){return{position:[e.position.x,e.position.y,e.position.z],rotation:[e.rotation.x,e.rotation.y,e.rotation.z],scale:[e.scale.x,e.scale.y,e.scale.z],visible:e.visible}}function aM(e,t){if(t.position&&e.position.set(...t.position),t.rotation&&e.rotation.set(...t.rotation),t.scale!==void 0){let n=typeof t.scale=="number"?[t.scale,t.scale,t.scale]:t.scale;e.scale.set(...n)}t.visible!==void 0&&(e.visible=t.visible),e.updateMatrix(),e.updateMatrixWorld(!0)}function zc(e={}){let t=(0,ke.useRef)(e);t.current=e;let n=(0,ke.useRef)(null),r=(0,ke.useRef)(null),i=(0,ke.useRef)(null),o=(0,ke.useRef)(new Map),a=(0,ke.useRef)(new Map),s=(0,ke.useRef)(new Map),c=(0,ke.useRef)(new Map),l=(0,ke.useCallback)(x=>{let R=n.current;if(!R)return null;let X=Ot(R.objectBindings,x);return R.raw.nodes[x]??(X?R.raw.nodes[X]:null)??(R.raw.scene?Vr(R.raw.scene,x):null)??null},[]),d=(0,ke.useCallback)(x=>{let R=n.current;return R?typeof x=="object"&&!Array.isArray(x)?dn(R.objectBindings,x):Nc(x).map(X=>Ot(R.objectBindings,X)??X):typeof x=="string"?[x]:Array.isArray(x)?x:[]},[]),u=(0,ke.useCallback)(()=>{n.current?.invalidate()},[]),m=(0,ke.useCallback)((x,R)=>{let X=!1;for(let Y of d(x)){let K=l(Y);if(K)for(let oe of rM(K))s.current.has(oe)||s.current.set(oe,iM(oe)),Pv(oe,R),X=!0}return X},[l,d]),h=(0,ke.useCallback)((x,R)=>{let X=m(x,R);return X&&u(),X},[u,m]),f=(0,ke.useCallback)((x,R)=>{let X=!1;for(let Y of d(x)){let K=l(Y);K&&(c.current.has(K)||c.current.set(K,oM(K)),aM(K,R),X=!0)}return X},[l,d]),b=(0,ke.useCallback)((x,R)=>{let X=f(x,R);return X&&u(),X},[u,f]),v=(0,ke.useCallback)(x=>{let R=l(x);if(!R)return null;R.updateWorldMatrix(!0,!1);let X=R.getWorldPosition(new Ko.Vector3);return[X.x,X.y,X.z]},[l]),y=(0,ke.useCallback)(x=>{let R=a.current.get(x);return R?(R.light.removeFromParent(),R.light.dispose(),a.current.delete(x),u(),!0):!1},[u]),S=(0,ke.useCallback)(x=>{let R=l(x.target);if(!R)return!1;let X=a.current.get(x.id),Y=X?.light??new Ko.PointLight;return X&&X.target!==x.target&&Y.removeFromParent(),Y.name=`react-immersive-runtime-light:${x.id}`,Y.color.set(x.color??"#ffffff"),Y.intensity=x.intensity??1,Y.distance=x.distance??0,Y.decay=x.decay??2,Y.castShadow=x.castShadow??!1,Y.position.set(...x.offset??[0,0,0]),Y.parent!==R&&R.add(Y),a.current.set(x.id,{light:Y,target:x.target}),u(),!0},[u,l]),_=(0,ke.useCallback)((x,R)=>{let X=a.current.get(x);if(!X)return!1;if(R.target&&R.target!==X.target){let Y=l(R.target);if(!Y)return!1;X.light.removeFromParent(),Y.add(X.light),X.target=R.target}return R.color!==void 0&&X.light.color.set(R.color),R.intensity!==void 0&&(X.light.intensity=R.intensity),R.distance!==void 0&&(X.light.distance=R.distance),R.decay!==void 0&&(X.light.decay=R.decay),R.offset!==void 0&&X.light.position.set(...R.offset),R.castShadow!==void 0&&(X.light.castShadow=R.castShadow),u(),!0},[u,l]),k=(0,ke.useCallback)((x,R)=>{let X=Y=>R[Y%R.length]??0;for(let Y of x.materials??[])d(Y.targets).forEach((K,oe)=>{let ae=X(oe),ne={};for(let Ie of Bp){let me=Y.values[Ie];me&&(ne[Ie]=Cv(me,ae))}m(K,ne)});for(let Y of x.transforms??[])d(Y.targets).forEach((K,oe)=>{let ae=X(oe),ne={};Y.values.position&&(ne.position=Ip(Y.values.position,ae)),Y.values.rotation&&(ne.rotation=Ip(Y.values.rotation,ae)),Y.values.scale&&(ne.scale=Ip(Y.values.scale,ae)),f(K,ne)});for(let Y of x.lights??[])Nc(Y.lights).forEach((K,oe)=>{let ae=a.current.get(K);ae&&(ae.light.intensity=Cv(Y.intensity,X(oe)))})},[d,m,f]),T=(0,ke.useRef)(()=>{}),P=(0,ke.useRef)(()=>{});P.current=x=>{i.current=null;let R=!1;for(let[X,Y]of o.current){Y.startedAt===null&&(Y.startedAt=x);let K=Y.lastFrameAt??x;Y.lastFrameAt=x;let oe=Y.override&&Y.override.until>x?Y.override.level:null;Y.override&&oe===null&&(Y.override=null);let ae=Y.update(x,x-Y.startedAt,Math.min(100,x-K),oe);R=!0,ae||(o.current.delete(X),Y.onComplete?.())}R&&u(),o.current.size>0&&T.current()},T.current=()=>{i.current!==null||typeof requestAnimationFrame>"u"||(i.current=requestAnimationFrame(x=>P.current(x)))};let B=(0,ke.useCallback)(x=>(o.current.set(x.id,x),T.current(),x.id),[]),D=(0,ke.useCallback)((x,R={})=>{let X=R.id??`transition-${kc++}`,Y=Math.max(1,R.duration??400),K=R.easing??"ease-in-out";return B({id:X,startedAt:null,lastFrameAt:null,override:null,onComplete:R.onComplete,update:(oe,ae,ne,Ie)=>{let me=Ie??Tv(ae/Y,K);return k(x,[me]),ae<Y}})},[k,B]),O=(0,ke.useCallback)((x,R={})=>{let X=R.id??`pulse-${kc++}`,Y=Math.max(1,R.duration??1e3),K=R.minLevel??0,oe=R.maxLevel??1,ae=R.repeat??1/0,ne=R.synchronized??!0,Ie=Math.max(1,...[...x.materials??[],...x.transforms??[]].map(me=>d(me.targets).length),...(x.lights??[]).map(me=>Nc(me.lights).length));return B({id:X,startedAt:null,lastFrameAt:null,override:null,onComplete:R.onComplete,update:(me,tt,dt,pe)=>{let _e=tt/Y,je=Array.from({length:ne?1:Ie},(Bt,te)=>{if(pe!==null)return pe;let an=_e+(ne?0:te/Ie),nt=.5-Math.cos(an%1*Math.PI*2)/2;return K+(oe-K)*nt});return k(x,je),ae===1/0||_e<ae}})},[k,B,d]),E=(0,ke.useCallback)((x,R={})=>{let X=R.id??`timeline-${kc++}`,Y=R.repeat??1,K=x.map(ae=>({...ae,duration:Math.max(1,ae.duration),hold:Math.max(0,ae.hold??0)})),oe=Math.max(1,K.reduce((ae,ne)=>ae+ne.duration+ne.hold,0));return B({id:X,startedAt:null,lastFrameAt:null,override:null,onComplete:R.onComplete,update:(ae,ne,Ie,me)=>{if(K.length===0||Y<=0)return!1;let tt=ne/oe;if(Y!==1/0&&tt>=Y){for(let _e of K)k(_e.channels,[1]);return!1}let dt=ne%oe,pe=0;for(let _e of K){let je=pe+_e.duration,Bt=je+_e.hold;if(dt>=je){k(_e.channels,[me??1]),pe=Bt;continue}if(dt>=pe){let te=me??Tv((dt-pe)/_e.duration,_e.easing??"ease-in-out");k(_e.channels,[te]);break}}return!0}})},[k,B]),g=(0,ke.useCallback)((x,R={})=>{let X=R.id??`flicker-${kc++}`,Y=R.synchronized??!0,K=R.minLevel??.15,oe=R.maxLevel??1,ae=R.interval??[45,160],ne=typeof ae=="number"?[ae,ae]:ae,Ie=[Math.max(1,Math.min(...ne)),Math.max(1,Math.max(...ne))],me=Vc(R.response??.7,.01,1),tt=Vc(R.blackoutChance??.08),dt=Vc(R.flashChance??.12),pe=R.flashLevel??1.15,_e=Math.max(1,...[...x.materials??[],...x.transforms??[]].map(nt=>d(nt.targets).length),...(x.lights??[]).map(nt=>Nc(nt.lights).length)),je=Y?1:_e,Bt=Array.from({length:je},()=>K),te=Array.from({length:je},()=>K),an=Array.from({length:je},()=>0);return B({id:X,startedAt:null,lastFrameAt:null,override:null,onComplete:R.onComplete,update:(nt,Qe,ze,Jt)=>{for(let Tt=0;Tt<je;Tt+=1){if(Jt!==null)te[Tt]=Jt;else if(nt>=an[Tt]){let pt=Math.random();te[Tt]=pt<tt?Dp(0,Math.min(.04,K)):pt<tt+dt?pe:Dp(K,oe),an[Tt]=nt+Dp(...Ie)}let kt=1-Math.pow(1-me,Math.max(1,ze)/16.67);Bt[Tt]+=(te[Tt]-Bt[Tt])*kt}return k(x,Bt),R.duration===void 0||Qe<R.duration}})},[k,B,d]),M=(0,ke.useCallback)((x,R,X)=>{let Y=o.current.get(x);if(!Y)return!1;let K=typeof performance>"u"?Date.now():performance.now();return Y.override={level:R,until:K+Math.max(0,X)},T.current(),!0},[]),A=(0,ke.useCallback)(x=>o.current.delete(x),[]),N=(0,ke.useCallback)(()=>{o.current.clear(),i.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(i.current),i.current=null)},[]),z=(0,ke.useCallback)(()=>{for(let[x,R]of s.current)Pv(x,R);s.current.clear();for(let[x,R]of c.current)x.position.set(...R.position),x.rotation.set(...R.rotation),x.scale.set(...R.scale),x.visible=R.visible,x.updateMatrix(),x.updateMatrixWorld(!0);c.current.clear();for(let x of a.current.values())x.light.removeFromParent(),x.light.dispose();a.current.clear(),u()},[u]),U=(0,ke.useCallback)(()=>{N(),z()},[z,N]),q=(0,ke.useCallback)(x=>{r.current&&r.current!==x.raw.scene&&z(),n.current=x,r.current=x.raw.scene,t.current.onViewerReady?.(x)},[z]);return(0,ke.useEffect)(()=>()=>{U(),n.current=null,r.current=null},[U]),{handleViewerReady:q,setMaterial:h,setTransform:b,getWorldPosition:v,addPointLight:S,updatePointLight:_,removePointLight:y,transition:D,timeline:E,pulse:O,flicker:g,overrideEffect:M,stopEffect:A,stopAllEffects:N,resetRuntime:U}}var Uc=require("react");function jc(){let[e,t]=(0,Uc.useState)(null),n=(0,Uc.useCallback)(r=>{t(r)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:n}}var fs=require("react");function Fc(e=null){let[t,n]=(0,fs.useState)(e),r=(0,fs.useCallback)((o,a)=>n({...a,target:o}),[]),i=(0,fs.useCallback)(()=>n(null),[]);return{isolation:t,isolate:r,clearIsolation:i,handleIsolationChange:n}}var Bn=require("react");function Hc(){let[e,t]=(0,Bn.useState)(!0),[n,r]=(0,Bn.useState)(!1),[i,o]=(0,Bn.useState)(null),[a,s]=(0,Bn.useState)(null),[c,l]=(0,Bn.useState)(0),[d,u]=(0,Bn.useState)([]),[m,h]=(0,Bn.useState)([]),f=(0,Bn.useCallback)(S=>{s(S.bounds),l(S.objectCount),u(S.materialVariants),o(null),t(!1),r(!0)},[]),b=(0,Bn.useCallback)(S=>h(S),[]),v=(0,Bn.useCallback)(S=>{o(S),s(null),l(0),u([]),h([]),t(!1),r(!1)},[]),y=(0,Bn.useCallback)(()=>{t(!0),r(!1),o(null),s(null),l(0),u([]),h([])},[]);return{isLoading:e,isReady:n,error:i,bounds:a,objectCount:c,materialVariants:d,objects:m,handleModelLoaded:f,handleObjectCatalog:b,handleLoadError:v,resetModelState:y}}var gs=require("react");function Gc(e=null){let[t,n]=(0,gs.useState)(e),r=(0,gs.useCallback)(o=>{n(o)},[n]),i=(0,gs.useCallback)(()=>{n(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:n,handleObjectSelect:r,clearSelection:i}}var sM={};function Ev(e={}){let t=(0,xi.useRef)(e);t.current=e;let n=(0,xi.useRef)(e.bindings===void 0||e.bindings==="auto"),r=Ec(()=>{let D=t.current.bindings;return D===void 0||D==="auto"?sM:typeof D=="function"?D():D}),i=Lc(()=>{let D=t.current.sceneConfig;return D===void 0?Ni:typeof D=="function"?D():D}),o=Gc(),a=jc(),s=cc(e.camera),c=Hc(),l=Ic(),d=Fc(),u=zc(),m=Bc(s,u),h=Dc({bindings:r,scene:i,camera:s,animations:l,isolation:d,onAction:e.onAction}),{setObjectBindings:f}=r,{handleObjectCatalog:b}=c,v=(0,xi.useCallback)(D=>{b(D),n.current&&f(O=>{let E=xc(D.map(g=>g.name));for(let g of Object.keys(E))O[g]&&(E[g]=O[g]);return E})},[b,f]),{handleObjectSelect:y}=o,S=(0,xi.useCallback)(D=>{y(D),t.current.onObjectSelect?.(D)},[y]),{handleHoveredObject:_}=a,k=(0,xi.useCallback)(D=>{_(D),t.current.onObjectHover?.(D)},[_]),{handleLoadError:T}=c,P=(0,xi.useCallback)(D=>{T(D),t.current.onLoadError?.(D)},[T]),B=e.sceneConfig!==void 0||i.sceneConfig!==Ni;return{props:{objectBindings:r.objectBindings,onObjectBindingsChange:f,selectedObject:o.selectedObjectBinding,onObjectSelect:S,onObjectHover:k,onCameraChange:s.handleCameraChange,onViewerReady:m.handleViewerReady,onModelLoaded:c.handleModelLoaded,onLoadError:P,onObjectCatalog:v,onAnimationsReady:l.handleAnimationsReady,onAction:h.handleAction,onSceneConfigChange:i.setSceneConfig,isolation:d.isolation,onIsolationChange:d.handleIsolationChange,...B?{sceneConfig:i.sceneConfig}:{}},bindings:r,selection:o,hover:a,camera:s,model:c,animations:l,actions:h,scene:i,isolation:d,effects:u,connection:m}}var Av=require("react");function Rv(e,t){return(0,Av.useMemo)(()=>{if(!t)return null;let n=e[t];return n||(Object.values(e).find(r=>r.id===t||r.modelObjectId===t)??null)},[e,t])}var Lv=require("react");function Ov(e){return(0,Lv.useMemo)(()=>Object.values(e).map(t=>t.modelObjectId),[e])}function Dv(e){return e}var Ct=require("react");function kv(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function bs(e){return typeof e=="number"&&Number.isFinite(e)}function Iv(e){return Array.isArray(e)&&e.length===3&&e.every(bs)}function lM(e){return!kv(e)||!Iv(e.position)||!Iv(e.target)||e.fov!==null&&!bs(e.fov)||!bs(e.zoom)||e.zoom<=0||e.azimuthAngle!==void 0&&!bs(e.azimuthAngle)||e.polarAngle!==void 0&&!bs(e.polarAngle)?null:{position:e.position,target:e.target,fov:e.fov,zoom:e.zoom,azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle}}function cM(e){if(!kv(e))return null;let t;if(e.camera!==void 0){let i=lM(e.camera);if(!i)return null;t=i}let n;if(e.hidden!==void 0){if(!Array.isArray(e.hidden)||!e.hidden.every(i=>typeof i=="string"))return null;n=e.hidden}let r;if(e.selected===null||typeof e.selected=="string")r=e.selected;else if(e.selected!==void 0)return null;return{camera:t,hidden:n,selected:r}}function Bv(e,t,n){let r=Object.values(t).filter(i=>i.visible===!1).map(i=>i.id);return{camera:e??void 0,hidden:r,selected:n?.id??null}}function Nv({cameraState:e,setCameraState:t,objectBindings:n,onObjectBindingsChange:r,selectedObjectBinding:i,setSelectedObjectBinding:o,paramKey:a="view",debounceMs:s=400,autoSync:c=!0}){let l=(0,Ct.useRef)(null),d=(0,Ct.useRef)(null),u=(0,Ct.useRef)(null),m=(0,Ct.useRef)(null),h=(0,Ct.useRef)(null),f=(0,Ct.useCallback)(()=>{h.current!==null&&(window.clearTimeout(h.current),h.current=null),u.current=null,m.current=null},[]),b=(0,Ct.useCallback)(()=>{let O=Bv(e,n,i);return`${a}=${encodeURIComponent(JSON.stringify(O))}`},[e,n,i,a]),v=(0,Ct.useCallback)(()=>{let O=new URL(window.location.href);return O.hash=b(),O.toString()},[b]),y=(0,Ct.useCallback)(O=>{let E=new URL(window.location.href);E.hash=O,window.history.replaceState(null,"",E.toString()),d.current=O,l.current=new URLSearchParams(E.hash.slice(1)).get(a)},[a]),S=(0,Ct.useCallback)(()=>{f(),y(b())},[b,f,y]),_=(0,Ct.useRef)({cameraState:e,objectBindings:n,selectedObjectBinding:i});_.current={cameraState:e,objectBindings:n,selectedObjectBinding:i};let[k,T]=(0,Ct.useState)(!1);(0,Ct.useEffect)(()=>{if(!c||!k){f();return}let O=_.current,E=Bv(O.cameraState,O.objectBindings,O.selectedObjectBinding),g=`${a}=${encodeURIComponent(JSON.stringify(E))}`;if(g===d.current){f();return}g===u.current&&s===m.current||(f(),u.current=g,m.current=s,h.current=window.setTimeout(()=>{h.current=null,u.current=null,m.current=null,y(g)},Math.max(0,s)))},[c,e,f,s,n,a,k,i,y]),(0,Ct.useEffect)(()=>f,[f]);let P=(0,Ct.useRef)(null),B=(0,Ct.useRef)(null),D=(0,Ct.useCallback)(async()=>{T(!0);let O=window.location.hash.startsWith("#")?window.location.hash.slice(1):window.location.hash,E=new URLSearchParams(O).get(a);if(!E)return P.current=null,!1;if(E===l.current||E===P.current||E===B.current)return!1;let g;try{g=JSON.parse(E)}catch{return!1}let M=cM(g);if(!M)return!1;B.current=E;try{if(M.camera&&await t(M.camera,!1),M.hidden){let A=new Set(M.hidden);r(Object.fromEntries(Object.entries(n).map(([N,z])=>[N,{...z,visible:!A.has(z.id)}])))}if(M.selected!==void 0){let A=M.selected?Ot(n,M.selected):null;o(A?n[A]:null)}return P.current=E,!0}finally{B.current===E&&(B.current=null)}},[n,r,a,t,o]);return(0,Ct.useEffect)(()=>{let O=()=>{D().catch(()=>{})};return window.addEventListener("hashchange",O),()=>{window.removeEventListener("hashchange",O)}},[D]),{getShareUrl:v,syncUrl:S,restoreFromUrl:D}}var Vv=["front","back","double"],zv=["normal","additive"];0&&(module.exports={ACTION_CATALOG,DEFAULT_SCENE_CONFIG,DEFAULT_SECTION_CONFIG,MATERIAL_BLENDING_MODES,MATERIAL_SIDES,MODEL_VIEWER_PRESETS,ModelViewer,applyIsolation,applyStyleRules,buildBindingsFromNodes,colorScaleValue,createDefaultBinding,defineObjectBindings,findCatalogAction,inferType,isolatedBindingKeys,material,patchBindings,patchSceneConfig,sceneLight,selectBindingKeys,selectBindings,useObjectBinding,useObjectBindingIds,useObjectBindings,useSceneConfig,useShareableViewerState,useViewer,useViewerActions,useViewerAnimations,useViewerCamera,useViewerConnection,useViewerEffects,useViewerHover,useViewerIsolation,useViewerModel,useViewerSelection});
|
|
3744
|
+
import "${jE[e]}";`))},FE)};return document.readyState==="complete"?(r(),()=>clearTimeout(n)):(window.addEventListener("load",r,{once:!0}),()=>{window.removeEventListener("load",r),clearTimeout(n)})},[e,t])}var gM=require("react/jsx-runtime");function Qo(e){return fM("model-viewer","ModelViewer"),(0,gM.jsx)(uf,{...pM(e,dM)})}var Zn=require("react");var Tl=require("three"),Cd=1e-6;function bM(){let e=[null,null],t=0,n=!1,r=new Tl.Vector3,i=new Tl.Vector3,o=new Tl.Vector3,a=new Tl.Vector3,s=(c,d)=>{let p=e[c],u=e[d];if(!p||!u)return;p.controls.getPosition(r,!1),p.controls.getTarget(o,!1),u.controls.getPosition(i,!1),u.controls.getTarget(a,!1);let h=p.controls.camera.zoom;if(!(r.distanceToSquared(i)<Cd&&o.distanceToSquared(a)<Cd&&Math.abs(h-u.controls.camera.zoom)<Cd)){n=!0;try{Math.abs(h-u.controls.camera.zoom)>=Cd&&u.controls.zoomTo(h,!1),u.controls.setLookAt(r.x,r.y,r.z,o.x,o.y,o.z,!1)}finally{n=!1}u.invalidate()}},l=c=>{n||(c===t?s(c,1-c):s(t,c))};return{attach(c,d,p){let u=e[c];if(u?.controls===d){u.invalidate=p;return}u?.detach();let h=()=>l(c),m=()=>{t=c};d.addEventListener("update",h),d.addEventListener("controlstart",m),e[c]={controls:d,invalidate:p,detach:()=>{d.removeEventListener("update",h),d.removeEventListener("controlstart",m)}},s(t,1-t)},get leader(){return t},detach(){e.forEach(c=>c?.detach()),e[0]=e[1]=null}}}var Ti=require("react/jsx-runtime"),Td=.05,yM=.2,Pl=e=>Math.min(Math.max(Number.isFinite(e)?e:.5,0),1);function vM({split:e,onSplitChange:t,labels:n,containerRef:r,beforeAction:i}){let o=ve(),a=p=>{let u=r.current?.getBoundingClientRect();u&&u.width>0&&t(Pl((p-u.left)/u.width))},s=p=>{p.preventDefault(),p.stopPropagation(),p.currentTarget.setPointerCapture(p.pointerId),p.currentTarget.focus(),a(p.clientX)},l=p=>{p.currentTarget.hasPointerCapture(p.pointerId)&&a(p.clientX)},c=p=>{let u={ArrowLeft:e-Td,ArrowDown:e-Td,ArrowRight:e+Td,ArrowUp:e+Td,PageDown:e-yM,PageUp:e+yM,Home:0,End:1}[p.key];u!==void 0&&(p.preventDefault(),p.stopPropagation(),t(Pl(u)))},d=Math.round(e*100);return(0,Ti.jsxs)(Ti.Fragment,{children:[(0,Ti.jsxs)("span",{className:"ri-compare__label ri-compare__label--before",hidden:e<.08,children:[n[0],i]}),(0,Ti.jsx)("span",{className:"ri-compare__label ri-compare__label--after",hidden:e>.92,children:n[1]}),(0,Ti.jsx)("div",{className:"ri-compare__divider",role:"slider",tabIndex:0,"aria-label":o("compareDivider"),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":d,"aria-valuetext":o("compareDividerValue",{before:n[0],after:n[1],percent:d,rest:100-d}),onPointerDown:s,onPointerMove:l,onKeyDown:c,children:(0,Ti.jsx)("span",{className:"ri-compare__handle","aria-hidden":"true"})})]})}var In=require("react/jsx-runtime");function pf(e){return(0,In.jsx)(uc,{labels:e.labels,children:(0,In.jsx)(GE,{...e})})}function GE({before:e,after:t,layout:n="slider",split:r,onSplitChange:i,reveal:o="auto",...a}){let s=ve(),[l,c]=(0,Zn.useState)(o==="auto");(0,Zn.useEffect)(()=>{o==="auto"&&c(!0)},[o]);let[d,p]=(0,Zn.useState)(.5),u=Pl(r??d),h=(0,Zn.useCallback)(L=>{let w=Pl(L);r===void 0&&p(w),i?.(w)},[r,i]),m=(0,Zn.useMemo)(()=>bM(),[]);(0,Zn.useEffect)(()=>()=>m.detach(),[m]);let b=[e,t],f=(0,Zn.useMemo)(()=>[0,1].map(L=>w=>{m.attach(L,w.raw.controls,w.invalidate)}),[m]),g=b.map((L,w)=>{let{label:R,...C}=L,P={preset:"minimal",...a,...C},S=C.onViewerReady??a.onViewerReady;return{...P,onViewerReady:v=>{f[w](v),S?.(v)}}}),y=[e.label??s("compareBefore"),t.label??s("compareAfter")];(!g[0].modelUrl||!g[1].modelUrl)&&console.error("[react-immersive] CompareViewer needs a modelUrl, shared or on each side.");let x=(0,Zn.useRef)(null);if(!l)return(0,In.jsx)(Mc,{className:"ri-compare",background:Ss(a.backgroundColor,a.sceneConfig),poster:a.poster??t.poster??e.poster,onReveal:()=>c(!0)});if(n==="side-by-side")return(0,In.jsx)("div",{className:"ri-compare ri-compare--sideBySide",children:g.map((L,w)=>(0,In.jsxs)("div",{className:"ri-compare__pane",children:[(0,In.jsx)(Qo,{...L}),(0,In.jsx)("span",{className:"ri-compare__label",children:y[w]})]},w))});let _=`${u*100}%`;return(0,In.jsxs)("div",{ref:x,className:"ri-compare ri-compare--slider",style:{"--ri-compare-split":_},children:[(0,In.jsx)("div",{className:"ri-compare__layer",children:(0,In.jsx)(Qo,{...g[0]})}),(0,In.jsx)("div",{className:"ri-compare__layer ri-compare__layer--after",children:(0,In.jsx)(Qo,{...g[1]})}),(0,In.jsx)(vM,{split:u,onSplitChange:h,labels:[y[0],y[1]],containerRef:x})]})}var co=require("react");var gt=require("react");function hf(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Al(e,t){if(!hf(t))return t;let n=hf(e)?{...e}:{};for(let r of Object.keys(t)){let i=t[r];n[r]=hf(i)?Al(n[r],i):i}return n}function HE(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!="string"}function Jo(e,t,n){let r=HE(t)?t:[{ids:t,patch:n??{}}],i=e;for(let o of r)for(let a of wn(i,o.ids)){let s=i[a];if(!s)continue;let l=Al(s,o.patch);i===e&&(i={...e}),i[a]=l}return i}function Pd(e){return{style:{material:e}}}var xM={baseColor:"texture",metalness:"metalnessMap",roughness:"roughnessMap",emissive:"emissiveMap",alpha:"alphaMap",normal:"normalMap",bump:"bumpMap",ao:"aoMap",displacement:"displacementMap",clearcoat:"clearcoatMap",clearcoatRoughness:"clearcoatRoughnessMap",clearcoatNormal:"clearcoatNormalMap",anisotropy:"anisotropyMap",transmission:"transmissionMap",thickness:"thicknessMap",sheenColor:"sheenColorMap",sheenRoughness:"sheenRoughnessMap",specularIntensity:"specularIntensityMap",specularColor:"specularColorMap"};function wM(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n&&typeof n=="object"?{...n}:n]))}function WE(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function Ad(e){let[t,n]=(0,gt.useState)(e),r=(0,gt.useCallback)((v,A)=>{n(E=>A===void 0?Jo(E,v):Jo(E,v,A))},[]),i=(0,gt.useCallback)((v,A)=>r(v,Pd(A)),[r]),o=(0,gt.useCallback)((v,A)=>i(v,{baseColor:A}),[i]),a=(0,gt.useCallback)((v,A,E="baseColor")=>{let B=xM[E],N=typeof A=="string"?{path:A}:A;r(v,{style:{material:{[B]:N}}})},[r]),s=(0,gt.useCallback)((v,A="baseColor")=>{let E=xM[A];r(v,{style:{material:{[E]:void 0}}})},[r]),l=(0,gt.useCallback)((v,A)=>{n(E=>{let B=Xt(E,v);if(!B)return E;let N=wM(E[B]?.style?.material),I=wn(E,A);if(I.length===0)return E;let F=E;for(let O of I){let T=E[O];T&&(F===E&&(F={...E}),F[O]={...T,style:{...T.style,material:wM(N)}})}return F})},[]),c=(0,gt.useCallback)(v=>r(v,{style:{material:void 0}}),[r]),d=(0,gt.useCallback)((v,A)=>r(v,{transform:A}),[r]),p=(0,gt.useCallback)(v=>r(v,{transform:void 0}),[r]),u=(0,gt.useCallback)((v,A)=>r(v,{metadata:A}),[r]),h=(0,gt.useCallback)((v,A)=>{n(E=>{let B=E;for(let N of wn(E,v)){let I=E[N],F=A(I.decals??[]);B===E&&(B={...E}),B[N]={...I,decals:F.length>0?F:void 0}}return B})},[]),m=(0,gt.useCallback)((v,A)=>{let E=A.id??`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;return h(v,B=>[...B.filter(N=>N.id!==E),{...A,id:E}]),E},[h]),b=(0,gt.useCallback)((v,A,E)=>h(v,B=>B.map(N=>N.id===A?{...N,...E}:N)),[h]),f=(0,gt.useCallback)((v,A)=>h(v,E=>E.filter(B=>B.id!==A)),[h]),g=(0,gt.useCallback)(v=>nd(t,v),[t]),y=(0,gt.useCallback)(v=>wn(t,v).map(A=>t[A]?.id??A),[t]),x=(0,gt.useCallback)(v=>{let A=Xt(t,v);return A?t[A]?.style?.material??null:null},[t]),_=(0,gt.useCallback)(v=>r(v,{visible:!1}),[r]),L=(0,gt.useCallback)(v=>r(v,{visible:!0}),[r]),w=(0,gt.useCallback)(v=>{n(A=>{let E=wn(A,v).reduce((B,N)=>{let I=A[N];return I&&B.push({ids:N,patch:{visible:I.visible===!1}}),B},[]);return Jo(A,E)})},[n]),R=(0,gt.useCallback)(()=>{n(v=>Jo(v,Object.keys(v),{visible:!0}))},[n]),C=(0,gt.useMemo)(()=>WE(t),[t]),P=(0,gt.useMemo)(()=>Object.keys(C).map(v=>t[v]?.id??v),[C,t]),S=(0,gt.useCallback)(v=>{let A=Xt(t,v);return A?t[A]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:n,updateObjectBindings:r,setMaterial:i,setBaseColor:o,setTexture:a,clearTexture:s,copyMaterial:l,resetMaterial:c,getMaterial:x,setTransform:d,resetTransform:p,updateMetadata:u,addDecal:m,updateDecal:b,removeDecal:f,selectObjectBindings:g,selectObjectBindingIds:y,hiddenObjects:C,hiddenObjectIds:P,hideObject:_,showObject:L,toggleObjectVisibility:w,isObjectHidden:S,clearHiddenObjects:R}}var Jt=require("react");function Ed(e,t){return Al(e,t)}var XE={type:"point",color:"#ffffff",intensity:1,position:[0,0,0],distance:0,decay:2,attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0};function Rd(e){return{...XE,...e}}function Od(e){let t=(0,Jt.useRef)(null),[n,r]=(0,Jt.useState)(()=>{let g=typeof e=="function"?e():e;return t.current=g,g}),i=(0,Jt.useCallback)(g=>{r(y=>{let x=typeof g=="function"?g(y):g;return Ed(y,x)})},[]),o=(0,Jt.useCallback)(()=>{let g=t.current;g&&r(g)},[]),a=(0,Jt.useCallback)((g,y)=>{i(x=>({lighting:{lights:x.lighting.lights.map(_=>_.id===g?{..._,...y}:_)}}))},[i]),s=(0,Jt.useCallback)(g=>{i(y=>y.lighting.lights.some(x=>x.id===g.id)?{}:{lighting:{lights:[...y.lighting.lights,Rd(g)]}})},[i]),l=(0,Jt.useCallback)(g=>{i(y=>({lighting:{lights:y.lighting.lights.filter(x=>x.id!==g)}}))},[i]),c=(0,Jt.useCallback)((g,y)=>a(g,{intensity:y}),[a]),d=(0,Jt.useCallback)((g,y)=>a(g,{color:y}),[a]),p=(0,Jt.useCallback)(g=>a(g,{visible:!0}),[a]),u=(0,Jt.useCallback)(g=>a(g,{visible:!1}),[a]),h=(0,Jt.useCallback)(g=>{i(y=>({lighting:{lights:y.lighting.lights.map(x=>x.id===g?{...x,visible:!x.visible}:x)}}))},[i]),m=(0,Jt.useCallback)((g,y)=>a(g,{attachment:y,attachedToCamera:!1}),[a]),b=(0,Jt.useCallback)(g=>a(g,{attachment:void 0}),[a]),f=(0,Jt.useMemo)(()=>({items:n.lighting.lights,get:g=>n.lighting.lights.find(y=>y.id===g),add:s,update:a,remove:l,setIntensity:c,setColor:d,show:p,hide:u,toggle:h,attach:m,detach:b}),[n.lighting.lights,s,a,l,c,d,p,u,h,m,b]);return{sceneConfig:n,setSceneConfig:r,updateSceneConfig:i,resetSceneConfig:o,lights:f}}var Ld=require("react");function Dd({bindings:e,scene:t,camera:n,animations:r,isolation:i,onAction:o}){let{objectBindings:a,updateObjectBindings:s,showObject:l,hideObject:c,toggleObjectVisibility:d}=e,p=t?.updateSceneConfig,u=n?.focusObject,h=n?.fitScene,m=n?.resetView,b=n?.setCameraTarget,f=n?.setCameraState,g=r?.play,y=r?.pause,x=r?.stop,_=r?.setSpeed,L=r?.seek,w=i?.handleIsolationChange,R=(0,Ld.useCallback)(S=>{let v=Xt(a,S);return v?a[v]?.actions??[]:[]},[a]),C=(0,Ld.useCallback)(async S=>{for(let v of S.action.effects??[]){if("objectBindings"in v){s(v.target,v.objectBindings);continue}if("sceneConfig"in v){p?.(v.sceneConfig);continue}if("isolation"in v){w?.(v.isolation);continue}if("visibility"in v){v.visibility==="show"?l(v.target):v.visibility==="hide"?c(v.target):d(v.target);continue}if("camera"in v){let E=v.camera;E.type==="focus-object"?await u?.(E.objectId??S.objectId):E.type==="fit-scene"?await h?.():E.type==="reset"?await m?.():E.type==="set-target"?await b?.(E.target,E.transition??!0):await f?.(E.state,E.transition??!0);continue}let A=v.animation;if(A.type==="play"){let{type:E,clip:B,...N}=A;g?.(B,N)}else A.type==="pause"?y?.(A.clip):A.type==="stop"?x?.(A.clip):A.type==="set-speed"?_?.(A.speed,A.clip):L?.(A.time,A.clip)}await o?.(S)},[h,u,c,o,y,g,m,L,_,f,b,w,l,x,d,s,p]),P=(0,Ld.useCallback)(async(S,v)=>{let A=Xt(a,S);if(!A)return null;let E=a[A],B=E?.actions?.find(I=>I.id===v);if(!E||!B)return null;let N={objectId:A,action:B,binding:E};return await C(N),N},[C,a]);return{getActionsForObject:R,handleAction:C,runAction:P}}var mn=require("react"),mf={currentClip:null,isPlaying:!1,speed:1,time:0,duration:0,active:[]};function Id(){let e=(0,mn.useRef)(null),t=(0,mn.useRef)(null),[n,r]=(0,mn.useState)([]),[i,o]=(0,mn.useState)([]),[a,s]=(0,mn.useState)(mf);(0,mn.useEffect)(()=>()=>{t.current?.()},[]);let l=(0,mn.useCallback)(f=>{t.current?.(),e.current=f,r(f.clips),o(f.clipDetails??f.clips.map(g=>({sourceName:g,duration:0}))),s(f.getState?.()??mf),t.current=f.subscribe?.(s)??null},[]),c=(0,mn.useCallback)(()=>{t.current?.(),t.current=null,e.current=null,r([]),o([]),s(mf)},[]),d=(0,mn.useCallback)(f=>{let g=e.current;g&&(f(g),!g.subscribe&&g.getState&&s(g.getState()))},[]),p=(0,mn.useCallback)((f,g)=>d(y=>y.play(f,g)),[d]),u=(0,mn.useCallback)(f=>d(g=>g.pause(f)),[d]),h=(0,mn.useCallback)(f=>d(g=>g.stop(f)),[d]),m=(0,mn.useCallback)((f,g)=>d(y=>y.setSpeed(f,g)),[d]),b=(0,mn.useCallback)((f,g)=>d(y=>y.seek?.(f,g)),[d]);return{clips:n,clipDetails:i,...a,play:p,pause:u,stop:h,setSpeed:m,seek:b,handleAnimationsReady:l,clearAnimations:c}}var Pi=require("react");function qE(e){return typeof e=="function"?e:e?.handleViewerReady??null}function Bd(...e){let t=(0,Pi.useRef)(null),n=(0,Pi.useRef)(e);n.current=e;let r=(0,Pi.useCallback)(l=>{t.current=l;let c=new Set;for(let d of n.current){let p=qE(d);p&&!c.has(p)&&(c.add(p),p(l))}},[]),i=(0,Pi.useCallback)(()=>t.current,[]),o=(0,Pi.useCallback)(l=>{let c=t.current;return c?c.captureImage(l):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),a=(0,Pi.useCallback)(()=>{let l=t.current;return l?(l.invalidate(),!0):!1},[]),s=(0,Pi.useCallback)(l=>{let c=t.current;return c?c.captureVideo(l):Promise.reject(new Error("ModelViewer is not ready yet."))},[]);return{handleViewerReady:r,getViewer:i,captureImage:o,captureVideo:s,invalidate:a}}var Ue=require("react"),Ka=require("three");var bf=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],kd=1;function Nd(e){return typeof e=="string"?[e]:e}function Vd(e,t=0,n=1){return Math.min(n,Math.max(t,e))}function ff(e,t){return e+Math.random()*(t-e)}function _M([e,t],n){return e+(t-e)*n}function gf([e,t],n){return[e[0]+(t[0]-e[0])*n,e[1]+(t[1]-e[1])*n,e[2]+(t[2]-e[2])*n]}function MM(e,t){let n=Vd(e);switch(t){case"ease-in":return n*n;case"ease-out":return 1-(1-n)*(1-n);case"ease-in-out":return n<.5?2*n*n:1-Math.pow(-2*n+2,2)/2;default:return n}}function YE(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(n=>n instanceof Ka.Material):[]}function $E(e){let t={opacity:e.opacity,transparent:e.transparent};e.color&&(t.baseColor=`#${e.color.getHexString()}`),e.emissive&&(t.emissive=`#${e.emissive.getHexString()}`);for(let n of bf){let r=e[n];typeof r=="number"&&(t[n]=r)}return t}function SM(e,t){t.baseColor!==void 0&&e.color&&e.color.set(t.baseColor),t.emissive!==void 0&&e.emissive&&e.emissive.set(t.emissive);for(let n of bf){let r=t[n];r!==void 0&&typeof e[n]=="number"&&(e[n]=r)}t.transparent!==void 0&&(e.transparent=t.transparent),e.needsUpdate=!0}function KE(e){return{position:[e.position.x,e.position.y,e.position.z],rotation:[e.rotation.x,e.rotation.y,e.rotation.z],scale:[e.scale.x,e.scale.y,e.scale.z],visible:e.visible}}function ZE(e,t){if(t.position&&e.position.set(...t.position),t.rotation&&e.rotation.set(...t.rotation),t.scale!==void 0){let n=typeof t.scale=="number"?[t.scale,t.scale,t.scale]:t.scale;e.scale.set(...n)}t.visible!==void 0&&(e.visible=t.visible),e.updateMatrix(),e.updateMatrixWorld(!0)}function zd(e={}){let t=(0,Ue.useRef)(e);t.current=e;let n=(0,Ue.useRef)(null),r=(0,Ue.useRef)(null),i=(0,Ue.useRef)(null),o=(0,Ue.useRef)(new Map),a=(0,Ue.useRef)(new Map),s=(0,Ue.useRef)(new Map),l=(0,Ue.useRef)(new Map),c=(0,Ue.useCallback)(O=>{let T=n.current;if(!T)return null;let z=Xt(T.objectBindings,O);return T.raw.nodes[O]??(z?T.raw.nodes[z]:null)??(T.raw.scene?$r(T.raw.scene,O):null)??null},[]),d=(0,Ue.useCallback)(O=>{let T=n.current;return T?typeof O=="object"&&!Array.isArray(O)?wn(T.objectBindings,O):Nd(O).map(z=>Xt(T.objectBindings,z)??z):typeof O=="string"?[O]:Array.isArray(O)?O:[]},[]),p=(0,Ue.useCallback)(()=>{n.current?.invalidate()},[]),u=(0,Ue.useCallback)((O,T)=>{let z=!1;for(let q of d(O)){let Z=c(q);if(Z)for(let J of YE(Z))s.current.has(J)||s.current.set(J,$E(J)),SM(J,T),z=!0}return z},[c,d]),h=(0,Ue.useCallback)((O,T)=>{let z=u(O,T);return z&&p(),z},[p,u]),m=(0,Ue.useCallback)((O,T)=>{let z=!1;for(let q of d(O)){let Z=c(q);Z&&(l.current.has(Z)||l.current.set(Z,KE(Z)),ZE(Z,T),z=!0)}return z},[c,d]),b=(0,Ue.useCallback)((O,T)=>{let z=m(O,T);return z&&p(),z},[p,m]),f=(0,Ue.useCallback)(O=>{let T=c(O);if(!T)return null;T.updateWorldMatrix(!0,!1);let z=T.getWorldPosition(new Ka.Vector3);return[z.x,z.y,z.z]},[c]),g=(0,Ue.useCallback)(O=>{let T=a.current.get(O);return T?(T.light.removeFromParent(),T.light.dispose(),a.current.delete(O),p(),!0):!1},[p]),y=(0,Ue.useCallback)(O=>{let T=c(O.target);if(!T)return!1;let z=a.current.get(O.id),q=z?.light??new Ka.PointLight;return z&&z.target!==O.target&&q.removeFromParent(),q.name=`react-immersive-runtime-light:${O.id}`,q.color.set(O.color??"#ffffff"),q.intensity=O.intensity??1,q.distance=O.distance??0,q.decay=O.decay??2,q.castShadow=O.castShadow??!1,q.position.set(...O.offset??[0,0,0]),q.parent!==T&&T.add(q),a.current.set(O.id,{light:q,target:O.target}),p(),!0},[p,c]),x=(0,Ue.useCallback)((O,T)=>{let z=a.current.get(O);if(!z)return!1;if(T.target&&T.target!==z.target){let q=c(T.target);if(!q)return!1;z.light.removeFromParent(),q.add(z.light),z.target=T.target}return T.color!==void 0&&z.light.color.set(T.color),T.intensity!==void 0&&(z.light.intensity=T.intensity),T.distance!==void 0&&(z.light.distance=T.distance),T.decay!==void 0&&(z.light.decay=T.decay),T.offset!==void 0&&z.light.position.set(...T.offset),T.castShadow!==void 0&&(z.light.castShadow=T.castShadow),p(),!0},[p,c]),_=(0,Ue.useCallback)((O,T)=>{let z=q=>T[q%T.length]??0;for(let q of O.materials??[])d(q.targets).forEach((Z,J)=>{let le=z(J),H={};for(let X of bf){let te=q.values[X];te&&(H[X]=_M(te,le))}u(Z,H)});for(let q of O.transforms??[])d(q.targets).forEach((Z,J)=>{let le=z(J),H={};q.values.position&&(H.position=gf(q.values.position,le)),q.values.rotation&&(H.rotation=gf(q.values.rotation,le)),q.values.scale&&(H.scale=gf(q.values.scale,le)),m(Z,H)});for(let q of O.lights??[])Nd(q.lights).forEach((Z,J)=>{let le=a.current.get(Z);le&&(le.light.intensity=_M(q.intensity,z(J)))})},[d,u,m]),L=(0,Ue.useRef)(()=>{}),w=(0,Ue.useRef)(()=>{});w.current=O=>{i.current=null;let T=!1;for(let[z,q]of o.current){q.startedAt===null&&(q.startedAt=O);let Z=q.lastFrameAt??O;q.lastFrameAt=O;let J=q.override&&q.override.until>O?q.override.level:null;q.override&&J===null&&(q.override=null);let le=q.update(O,O-q.startedAt,Math.min(100,O-Z),J);T=!0,le||(o.current.delete(z),q.onComplete?.())}T&&p(),o.current.size>0&&L.current()},L.current=()=>{i.current!==null||typeof requestAnimationFrame>"u"||(i.current=requestAnimationFrame(O=>w.current(O)))};let R=(0,Ue.useCallback)(O=>(o.current.set(O.id,O),L.current(),O.id),[]),C=(0,Ue.useCallback)((O,T={})=>{let z=T.id??`transition-${kd++}`,q=Math.max(1,T.duration??400),Z=T.easing??"ease-in-out";return R({id:z,startedAt:null,lastFrameAt:null,override:null,onComplete:T.onComplete,update:(J,le,H,X)=>{let te=X??MM(le/q,Z);return _(O,[te]),le<q}})},[_,R]),P=(0,Ue.useCallback)((O,T={})=>{let z=T.id??`pulse-${kd++}`,q=Math.max(1,T.duration??1e3),Z=T.minLevel??0,J=T.maxLevel??1,le=T.repeat??1/0,H=T.synchronized??!0,X=Math.max(1,...[...O.materials??[],...O.transforms??[]].map(te=>d(te.targets).length),...(O.lights??[]).map(te=>Nd(te.lights).length));return R({id:z,startedAt:null,lastFrameAt:null,override:null,onComplete:T.onComplete,update:(te,he,Ee,$)=>{let se=he/q,we=Array.from({length:H?1:X},(Xe,ie)=>{if($!==null)return $;let bt=se+(H?0:ie/X),et=.5-Math.cos(bt%1*Math.PI*2)/2;return Z+(J-Z)*et});return _(O,we),le===1/0||se<le}})},[_,R,d]),S=(0,Ue.useCallback)((O,T={})=>{let z=T.id??`timeline-${kd++}`,q=T.repeat??1,Z=O.map(le=>({...le,duration:Math.max(1,le.duration),hold:Math.max(0,le.hold??0)})),J=Math.max(1,Z.reduce((le,H)=>le+H.duration+H.hold,0));return R({id:z,startedAt:null,lastFrameAt:null,override:null,onComplete:T.onComplete,update:(le,H,X,te)=>{if(Z.length===0||q<=0)return!1;let he=H/J;if(q!==1/0&&he>=q){for(let se of Z)_(se.channels,[1]);return!1}let Ee=H%J,$=0;for(let se of Z){let we=$+se.duration,Xe=we+se.hold;if(Ee>=we){_(se.channels,[te??1]),$=Xe;continue}if(Ee>=$){let ie=te??MM((Ee-$)/se.duration,se.easing??"ease-in-out");_(se.channels,[ie]);break}}return!0}})},[_,R]),v=(0,Ue.useCallback)((O,T={})=>{let z=T.id??`flicker-${kd++}`,q=T.synchronized??!0,Z=T.minLevel??.15,J=T.maxLevel??1,le=T.interval??[45,160],H=typeof le=="number"?[le,le]:le,X=[Math.max(1,Math.min(...H)),Math.max(1,Math.max(...H))],te=Vd(T.response??.7,.01,1),he=Vd(T.blackoutChance??.08),Ee=Vd(T.flashChance??.12),$=T.flashLevel??1.15,se=Math.max(1,...[...O.materials??[],...O.transforms??[]].map(et=>d(et.targets).length),...(O.lights??[]).map(et=>Nd(et.lights).length)),we=q?1:se,Xe=Array.from({length:we},()=>Z),ie=Array.from({length:we},()=>Z),bt=Array.from({length:we},()=>0);return R({id:z,startedAt:null,lastFrameAt:null,override:null,onComplete:T.onComplete,update:(et,rt,ce,Te)=>{for(let tt=0;tt<we;tt+=1){if(Te!==null)ie[tt]=Te;else if(et>=bt[tt]){let Lt=Math.random();ie[tt]=Lt<he?ff(0,Math.min(.04,Z)):Lt<he+Ee?$:ff(Z,J),bt[tt]=et+ff(...X)}let At=1-Math.pow(1-te,Math.max(1,ce)/16.67);Xe[tt]+=(ie[tt]-Xe[tt])*At}return _(O,Xe),T.duration===void 0||rt<T.duration}})},[_,R,d]),A=(0,Ue.useCallback)((O,T,z)=>{let q=o.current.get(O);if(!q)return!1;let Z=typeof performance>"u"?Date.now():performance.now();return q.override={level:T,until:Z+Math.max(0,z)},L.current(),!0},[]),E=(0,Ue.useCallback)(O=>o.current.delete(O),[]),B=(0,Ue.useCallback)(()=>{o.current.clear(),i.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(i.current),i.current=null)},[]),N=(0,Ue.useCallback)(()=>{for(let[O,T]of s.current)SM(O,T);s.current.clear();for(let[O,T]of l.current)O.position.set(...T.position),O.rotation.set(...T.rotation),O.scale.set(...T.scale),O.visible=T.visible,O.updateMatrix(),O.updateMatrixWorld(!0);l.current.clear();for(let O of a.current.values())O.light.removeFromParent(),O.light.dispose();a.current.clear(),p()},[p]),I=(0,Ue.useCallback)(()=>{B(),N()},[N,B]),F=(0,Ue.useCallback)(O=>{r.current&&r.current!==O.raw.scene&&N(),n.current=O,r.current=O.raw.scene,t.current.onViewerReady?.(O)},[N]);return(0,Ue.useEffect)(()=>()=>{I(),n.current=null,r.current=null},[I]),{handleViewerReady:F,setMaterial:h,setTransform:b,getWorldPosition:f,addPointLight:y,updatePointLight:x,removePointLight:g,transition:C,timeline:S,pulse:P,flicker:v,overrideEffect:A,stopEffect:E,stopAllEffects:B,resetRuntime:I}}var Ud=require("react");function jd(){let[e,t]=(0,Ud.useState)(null),n=(0,Ud.useCallback)(r=>{t(r)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:n}}var El=require("react");function Fd(e=null){let[t,n]=(0,El.useState)(e),r=(0,El.useCallback)((o,a)=>n({...a,target:o}),[]),i=(0,El.useCallback)(()=>n(null),[]);return{isolation:t,isolate:r,clearIsolation:i,handleIsolationChange:n}}var jn=require("react");function Gd(){let[e,t]=(0,jn.useState)(!0),[n,r]=(0,jn.useState)(!1),[i,o]=(0,jn.useState)(null),[a,s]=(0,jn.useState)(null),[l,c]=(0,jn.useState)(0),[d,p]=(0,jn.useState)([]),[u,h]=(0,jn.useState)([]),[m,b]=(0,jn.useState)([]),f=(0,jn.useCallback)(_=>{s(_.bounds),c(_.objectCount),p(_.materialVariants),h(_.materialVariantGroups),o(null),t(!1),r(!0)},[]),g=(0,jn.useCallback)(_=>b(_),[]),y=(0,jn.useCallback)(_=>{o(_),s(null),c(0),p([]),h([]),b([]),t(!1),r(!1)},[]),x=(0,jn.useCallback)(()=>{t(!0),r(!1),o(null),s(null),c(0),p([]),h([]),b([])},[]);return{isLoading:e,isReady:n,error:i,bounds:a,objectCount:l,materialVariants:d,materialVariantGroups:u,objects:m,handleModelLoaded:f,handleObjectCatalog:g,handleLoadError:y,resetModelState:x}}var Rl=require("react");function Hd(e=null){let[t,n]=(0,Rl.useState)(e),r=(0,Rl.useCallback)(o=>{n(o)},[n]),i=(0,Rl.useCallback)(()=>{n(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:n,handleObjectSelect:r,clearSelection:i}}var QE={};function CM(e={}){let t=(0,co.useRef)(e);t.current=e;let n=(0,co.useRef)(e.bindings===void 0||e.bindings==="auto"),r=Ad(()=>{let C=t.current.bindings;return C===void 0||C==="auto"?QE:typeof C=="function"?C():C}),i=Od(()=>{let C=t.current.sceneConfig;return C===void 0?Oo:typeof C=="function"?C():C}),o=Hd(),a=jd(),s=ed(e.camera),l=Gd(),c=Id(),d=Fd(),p=zd(),u=Bd(s,p),h=Dd({bindings:r,scene:i,camera:s,animations:c,isolation:d,onAction:e.onAction}),{setObjectBindings:m}=r,{handleObjectCatalog:b}=l,f=(0,co.useCallback)(C=>{b(C),n.current&&m(P=>{let S=dd(C.map(v=>v.name));for(let v of Object.keys(S))P[v]&&(S[v]=P[v]);return S})},[b,m]),{handleObjectSelect:g}=o,y=(0,co.useCallback)(C=>{g(C),t.current.onObjectSelect?.(C)},[g]),{handleHoveredObject:x}=a,_=(0,co.useCallback)(C=>{x(C),t.current.onObjectHover?.(C)},[x]),{handleLoadError:L}=l,w=(0,co.useCallback)(C=>{L(C),t.current.onLoadError?.(C)},[L]),R=e.sceneConfig!==void 0||i.sceneConfig!==Oo;return{props:{objectBindings:r.objectBindings,onObjectBindingsChange:m,selectedObject:o.selectedObjectBinding,onObjectSelect:y,onObjectHover:_,onCameraChange:s.handleCameraChange,onViewerReady:u.handleViewerReady,onModelLoaded:l.handleModelLoaded,onLoadError:w,onObjectCatalog:f,onAnimationsReady:c.handleAnimationsReady,onAction:h.handleAction,onSceneConfigChange:i.setSceneConfig,isolation:d.isolation,onIsolationChange:d.handleIsolationChange,...R?{sceneConfig:i.sceneConfig}:{}},bindings:r,selection:o,hover:a,camera:s,model:l,animations:c,actions:h,scene:i,isolation:d,effects:p,connection:u}}var TM=require("react");function PM(e,t){return(0,TM.useMemo)(()=>{if(!t)return null;let n=e[t];return n||(Object.values(e).find(r=>r.id===t||r.modelObjectId===t)??null)},[e,t])}var AM=require("react");function EM(e){return(0,AM.useMemo)(()=>Object.values(e).map(t=>t.modelObjectId),[e])}function RM(e){return e}var Nt=require("react");function DM(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ol(e){return typeof e=="number"&&Number.isFinite(e)}function OM(e){return Array.isArray(e)&&e.length===3&&e.every(Ol)}function JE(e){return!DM(e)||!OM(e.position)||!OM(e.target)||e.fov!==null&&!Ol(e.fov)||!Ol(e.zoom)||e.zoom<=0||e.azimuthAngle!==void 0&&!Ol(e.azimuthAngle)||e.polarAngle!==void 0&&!Ol(e.polarAngle)?null:{position:e.position,target:e.target,fov:e.fov,zoom:e.zoom,azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle}}function e2(e){if(!DM(e))return null;let t;if(e.camera!==void 0){let i=JE(e.camera);if(!i)return null;t=i}let n;if(e.hidden!==void 0){if(!Array.isArray(e.hidden)||!e.hidden.every(i=>typeof i=="string"))return null;n=e.hidden}let r;if(e.selected===null||typeof e.selected=="string")r=e.selected;else if(e.selected!==void 0)return null;return{camera:t,hidden:n,selected:r}}function LM(e,t,n){let r=Object.values(t).filter(i=>i.visible===!1).map(i=>i.id);return{camera:e??void 0,hidden:r,selected:n?.id??null}}function t2(e,t){if((!!e.hidden?.length||!!e.selected)&&Object.keys(t).length===0)return null;let r={};if(e.hidden){let i=new Set(e.hidden);r.bindings=Object.fromEntries(Object.entries(t).map(([o,a])=>[o,{...a,visible:!i.has(a.id)}]))}if(e.selected!==void 0){let i=e.selected?Xt(t,e.selected):null;r.selected=i?t[i]:null}return r}function IM({cameraState:e,setCameraState:t,objectBindings:n,onObjectBindingsChange:r,selectedObjectBinding:i,setSelectedObjectBinding:o,paramKey:a="view",debounceMs:s=400,autoSync:l=!0}){let c=(0,Nt.useRef)(null),d=(0,Nt.useRef)(null),p=(0,Nt.useRef)(null),u=(0,Nt.useRef)(null),h=(0,Nt.useRef)(null),m=(0,Nt.useCallback)(()=>{h.current!==null&&(window.clearTimeout(h.current),h.current=null),p.current=null,u.current=null},[]),b=(0,Nt.useCallback)(()=>{let S=LM(e,n,i);return`${a}=${encodeURIComponent(JSON.stringify(S))}`},[e,n,i,a]),f=(0,Nt.useCallback)(()=>{let S=new URL(window.location.href);return S.hash=b(),S.toString()},[b]),g=(0,Nt.useCallback)(S=>{let v=new URL(window.location.href);v.hash=S,window.history.replaceState(null,"",v.toString()),d.current=S,c.current=new URLSearchParams(v.hash.slice(1)).get(a)},[a]),y=(0,Nt.useCallback)(()=>{m(),g(b())},[b,m,g]),x=(0,Nt.useRef)({cameraState:e,objectBindings:n,selectedObjectBinding:i});x.current={cameraState:e,objectBindings:n,selectedObjectBinding:i};let[_,L]=(0,Nt.useState)(!1);(0,Nt.useEffect)(()=>{if(!l||!_){m();return}let S=x.current,v=LM(S.cameraState,S.objectBindings,S.selectedObjectBinding),A=`${a}=${encodeURIComponent(JSON.stringify(v))}`;if(A===d.current){m();return}A===p.current&&s===u.current||(m(),p.current=A,u.current=s,h.current=window.setTimeout(()=>{h.current=null,p.current=null,u.current=null,g(A)},Math.max(0,s)))},[l,e,m,s,n,a,_,i,g]),(0,Nt.useEffect)(()=>m,[m]);let w=(0,Nt.useRef)(null),R=(0,Nt.useRef)(null),C=(0,Nt.useRef)(null),P=(0,Nt.useCallback)(async()=>{let S=N=>(L(!0),N),v=window.location.hash.startsWith("#")?window.location.hash.slice(1):window.location.hash,A=new URLSearchParams(v).get(a);if(!A)return w.current=null,S(!1);if(A===R.current)return!1;if(A===c.current||A===w.current)return S(!1);let E;try{E=JSON.parse(A)}catch{return S(!1)}let B=e2(E);if(!B)return S(!1);R.current=A;try{B.camera&&C.current!==A&&(await t(B.camera,!1),C.current=A);let N=t2(B,n);return N?(N.bindings&&r(N.bindings),N.selected!==void 0&&o(N.selected),w.current=A,S(!0)):!1}finally{R.current===A&&(R.current=null)}},[n,r,a,t,o]);return(0,Nt.useEffect)(()=>{let S=()=>{P().catch(()=>{})};return window.addEventListener("hashchange",S),()=>{window.removeEventListener("hashchange",S)}},[P]),{getShareUrl:f,syncUrl:y,restoreFromUrl:P}}var Ll=require("react"),n2={};function BM(e){let[t,n]=(0,Ll.useState)(e),[r,i]=(0,Ll.useState)(e[0]?.url??""),o=(0,Ll.useCallback)(a=>{n(s=>s.map(l=>l.url===r?{...l,objectBindings:a}:l))},[r]);return{modelUrl:r,models:t,onModelChange:i,objectBindings:n2,onObjectBindingsChange:o}}var kM=["front","back","double"],NM=["normal","additive"];0&&(module.exports={ACTION_CATALOG,CompareViewer,DEFAULT_MODEL_VIEWER_LABELS,DEFAULT_SCENE_CONFIG,DEFAULT_SECTION_CONFIG,MATERIAL_BLENDING_MODES,MATERIAL_SIDES,MODEL_VIEWER_PRESETS,ModelViewer,applyIsolation,applyStyleRules,buildBindingsFromNodes,chooseMaterialVariant,colorScaleValue,createDefaultBinding,defineObjectBindings,findCatalogAction,inferType,isolatedBindingKeys,material,patchBindings,patchSceneConfig,sceneLight,selectBindingKeys,selectBindings,useObjectBinding,useObjectBindingIds,useObjectBindings,useSceneConfig,useShareableViewerState,useViewer,useViewerActions,useViewerAnimations,useViewerCamera,useViewerConnection,useViewerEffects,useViewerHover,useViewerIsolation,useViewerModel,useViewerModels,useViewerSelection});
|