@liveroom-tech/react-immersive 6.0.1 → 6.1.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.
Files changed (67) hide show
  1. package/README.md +26 -2
  2. package/dist/AnimationsTab-NUJTEMZ5.mjs +1 -0
  3. package/dist/AnnotationsTab-OHRVWRKI.mjs +1 -0
  4. package/dist/CinematicTab-IJAY2BS6.mjs +1 -0
  5. package/dist/ConfigureTab-UQRRATCY.mjs +6 -0
  6. package/dist/RulesTab-YVBZGJZX.mjs +1 -0
  7. package/dist/SequencesTab-IC5LWQ6N.css +1 -0
  8. package/dist/SequencesTab-RPJAG26Z.mjs +1 -0
  9. package/dist/binding-builder.css +1 -1
  10. package/dist/binding-builder.d.mts +3 -3
  11. package/dist/binding-builder.d.ts +3 -3
  12. package/dist/binding-builder.js +76 -23
  13. package/dist/binding-builder.mjs +1 -1
  14. package/dist/chunk-2DV2UCQH.mjs +1 -0
  15. package/dist/chunk-37YITTIK.mjs +1 -0
  16. package/dist/chunk-5FLX45O5.mjs +2 -0
  17. package/dist/chunk-6CTCV2Q5.mjs +1 -0
  18. package/dist/chunk-7JCFNZJM.mjs +1 -0
  19. package/dist/chunk-7OWHW66D.mjs +1 -0
  20. package/dist/chunk-AL6UIGWP.mjs +1 -0
  21. package/dist/chunk-BNKTI3CY.mjs +1 -0
  22. package/dist/chunk-CCBFMNAU.mjs +1 -0
  23. package/dist/chunk-E24EFHB5.mjs +1 -0
  24. package/dist/chunk-EV6THDXD.mjs +1 -0
  25. package/dist/chunk-F5QSXMME.mjs +1 -0
  26. package/dist/chunk-FGAJ2UT7.mjs +1 -0
  27. package/dist/chunk-FXV4CLAK.mjs +1 -0
  28. package/dist/chunk-GV4ZRXL6.mjs +1 -0
  29. package/dist/chunk-KHN55ZM7.mjs +3 -0
  30. package/dist/chunk-LX3GXQNU.mjs +1 -0
  31. package/dist/chunk-OPZJDP7T.mjs +1 -0
  32. package/dist/chunk-OREKYGO3.mjs +83 -0
  33. package/dist/chunk-PBVBZYOG.mjs +47 -0
  34. package/dist/chunk-T6AYLPCC.mjs +1 -0
  35. package/dist/hosted.css +1 -1
  36. package/dist/hosted.d.mts +22 -6
  37. package/dist/hosted.d.ts +22 -6
  38. package/dist/hosted.js +75 -22
  39. package/dist/hosted.mjs +1 -1
  40. package/dist/index.css +1 -1
  41. package/dist/index.d.mts +66 -6
  42. package/dist/index.d.ts +66 -6
  43. package/dist/index.js +69 -21
  44. package/dist/index.mjs +1 -1
  45. package/dist/{modelFileResolver-Co7j1tdQ.d.mts → modelFileResolver-BEW_95id.d.mts} +52 -7
  46. package/dist/{modelFileResolver-Co7j1tdQ.d.ts → modelFileResolver-BEW_95id.d.ts} +52 -7
  47. package/dist/{modelViewerProps-BibuMND7.d.ts → modelViewerProps-C7saa0i2.d.mts} +173 -3
  48. package/dist/{modelViewerProps-Ce4-wb57.d.mts → modelViewerProps-CbK_4uZj.d.ts} +173 -3
  49. package/dist/{publicProps-BaJHCDa_.d.mts → publicProps-NKTiohZO.d.mts} +1 -1
  50. package/dist/{publicProps-CP18d_mt.d.ts → publicProps-z7cJhUH8.d.ts} +1 -1
  51. package/dist/simple-model-viewer.css +1 -1
  52. package/dist/simple-model-viewer.d.mts +25 -3
  53. package/dist/simple-model-viewer.d.ts +25 -3
  54. package/dist/simple-model-viewer.js +49 -3
  55. package/dist/simple-model-viewer.mjs +1 -1
  56. package/dist/utils.d.mts +47 -4
  57. package/dist/utils.d.ts +47 -4
  58. package/dist/utils.js +2 -2
  59. package/dist/utils.mjs +1 -1
  60. package/package.json +5 -1
  61. package/dist/chunk-2JFUMJUP.mjs +0 -1
  62. package/dist/chunk-4JMJALRO.mjs +0 -2
  63. package/dist/chunk-OTSCPJWF.mjs +0 -1
  64. package/dist/chunk-P2JZ5Z7I.mjs +0 -1
  65. package/dist/chunk-UGPR4EPP.mjs +0 -81
  66. package/dist/chunk-V7WZUWJ5.mjs +0 -1
  67. package/dist/chunk-VQGYZOMX.mjs +0 -3
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";"use client";var KA=Object.create;var jl=Object.defineProperty;var ZA=Object.getOwnPropertyDescriptor;var QA=Object.getOwnPropertyNames;var JA=Object.getPrototypeOf,eE=Object.prototype.hasOwnProperty;var tE=(e,t,n)=>t in e?jl(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var nE=(e,t)=>()=>(e&&(t=e(e=0)),t);var tx=(e,t)=>{for(var n in t)jl(e,n,{get:t[n],enumerable:!0})},nx=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of QA(t))!eE.call(e,i)&&i!==n&&jl(e,i,{get:()=>t[i],enumerable:!(r=ZA(t,i))||r.enumerable});return e};var Ul=(e,t,n)=>(n=e!=null?KA(JA(e)):{},nx(t||!e||!e.__esModule?jl(n,"default",{value:e,enumerable:!0}):n,e)),rE=e=>nx(jl({},"__esModule",{value:!0}),e);var ph=(e,t,n)=>tE(e,typeof t!="symbol"?t+"":t,n);var y0={};tx(y0,{bvhWorkerCode:()=>UE});var UE,v0=nE(()=>{"use strict";UE=`(()=>{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 MR=Object.create;var uc=Object.defineProperty;var _R=Object.getOwnPropertyDescriptor;var CR=Object.getOwnPropertyNames;var TR=Object.getPrototypeOf,PR=Object.prototype.hasOwnProperty;var AR=(e,t,n)=>t in e?uc(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var ER=(e,t)=>()=>(e&&(t=e(e=0)),t);var Zx=(e,t)=>{for(var n in t)uc(e,n,{get:t[n],enumerable:!0})},Qx=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of CR(t))!PR.call(e,i)&&i!==n&&uc(e,i,{get:()=>t[i],enumerable:!(r=_R(t,i))||r.enumerable});return e};var dc=(e,t,n)=>(n=e!=null?MR(TR(e)):{},Qx(t||!e||!e.__esModule?uc(n,"default",{value:e,enumerable:!0}):n,e)),RR=e=>Qx(uc({},"__esModule",{value:!0}),e);var Zh=(e,t,n)=>AR(e,typeof t!="symbol"?t+"":t,n);var Tw={};Zx(Tw,{bvhWorkerCode:()=>_O});var _O,Pw=ER(()=>{"use strict";_O=`(()=>{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,19 +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 QL={};tx(QL,{ACTION_CATALOG:()=>sc,AssetDiagnosticsPanel:()=>Yb,CompareViewer:()=>Fb,DEFAULT_MODEL_VIEWER_LABELS:()=>ad,DEFAULT_SCENE_CONFIG:()=>dr,DEFAULT_SECTION_CONFIG:()=>Tr,MATERIAL_BLENDING_MODES:()=>DT,MATERIAL_SIDES:()=>OT,MAX_VIEWER_STATE_BYTES:()=>Wi,MEASUREMENT_UNITS:()=>La,MODEL_VIEWER_PRESETS:()=>Xh,ModelViewer:()=>ss,SEQUENCE_EASINGS:()=>yh,SEQUENCE_OBJECT_PROPERTIES:()=>bh,applyIsolation:()=>um,applyStyleRules:()=>cm,buildBindingsFromNodes:()=>U1,calibrateMeasurements:()=>md,chooseMaterialVariant:()=>sp,collectObjectHierarchy:()=>LT,colorScaleValue:()=>gb,compareViewerConfigurations:()=>Dm,copyBindingStyle:()=>IT,createARHandoffUrl:()=>vd,createDefaultBinding:()=>fm,defineObjectBindings:()=>TT,exportConfiguredUSDZ:()=>Sd,findCatalogAction:()=>mw,groundAsset:()=>Nx,inferType:()=>_b,inspectAsset:()=>Md,isolatedBindingKeys:()=>Jc,material:()=>Im,measurementResult:()=>Ba,measurementScale:()=>Ia,measurementValue:()=>ka,measurementsToCsv:()=>hd,parseAssetTransform:()=>Lo,parseMeasurements:()=>Gi,parseSectionConfig:()=>Bs,parseSelectionSets:()=>gd,parseSequences:()=>Ro,parseViewerState:()=>Ti,pasteBindingStyle:()=>kT,patchBindings:()=>cs,patchSceneConfig:()=>Bm,prepareViewerState:()=>Io,readARHandoffUrl:()=>xd,sampleSequenceTrack:()=>Qu,sceneLight:()=>Nm,sectionSnapshot:()=>ql,selectBindingKeys:()=>An,selectBindings:()=>lm,serializeMeasurements:()=>fd,serializeViewerState:()=>Na,snapAssetToGrid:()=>Bx,upsertSequenceKeyframe:()=>lx,useObjectBinding:()=>MT,useObjectBindingIds:()=>CT,useObjectBindings:()=>km,useSceneConfig:()=>Vm,useShareableViewerState:()=>AT,useViewer:()=>wT,useViewerActions:()=>Um,useViewerAnimations:()=>zm,useViewerCamera:()=>td,useViewerConnection:()=>Fm,useViewerEffects:()=>qm,useViewerHover:()=>$m,useViewerIsolation:()=>Ym,useViewerModel:()=>Km,useViewerModels:()=>RT,useViewerSelection:()=>Zm,useViewerSequences:()=>NT});module.exports=rE(QL);var Ca=require("react"),Ku=require("@react-three/fiber"),Ts=require("three");var $u=require("three"),mh=Symbol("react-immersive.model-node-id");function iE(e,t){Object.defineProperty(e,mh,{value:t,configurable:!0})}function cr(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)=>{iE(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 f=`${l} [${u+1}]`,m=f,v=2;for(;o.has(m)||a.has(m);)m=`${f}.${v++}`;s(p,m),d.push(m)}),i.set(l,d)}return{nodesById:n,idByNode:r,duplicateNames:i}}function ur(e){return e[mh]??e.name??null}function rx(e,t){let n=t.replace(/\.[^./\\]+$/,"");e.traverse(r=>{r.name&&(r.name=$u.PropertyBinding.sanitizeNodeName(`${n}_${r.name}`))})}function ix(e,t){let n=t.replace(/\.[^./\\]+$/,""),r=e.clone();for(let i of r.tracks){let a=$u.PropertyBinding.parseTrackName(i.name).nodeName??"",s=$u.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[mh]===t&&(n=i),i.name===t&&r.push(i)}),n??(r.length===1?r[0]:null)}var ox="riEditorGizmo";function Cs(e){return e.userData[ox]=!0,e}function Yu(e){let t=[];return e.traverse(n=>{n.visible&&n.userData[ox]&&(n.visible=!1,t.push(n))}),()=>{for(let n of t)n.visible=!0}}var sx=require("react/jsx-runtime");function ax({source:e,highlights:t}){let n=(0,Ku.useThree)(a=>a.invalidate),r=(0,Ca.useMemo)(()=>new Ts.Group,[]),i=(0,Ca.useMemo)(()=>t.map(a=>{let s=new Ts.Box3Helper(new Ts.Box3,a.color);s.raycast=()=>{};let l=s.material;return l.depthTest=!1,l.transparent=!0,l.opacity=.85,s.renderOrder=1e3,Cs(s),{helper:s,id:a.objectId}}),[t]);(0,Ca.useEffect)(()=>{for(let{helper:a}of i)r.add(a);return n(),()=>{for(let{helper:a}of i)r.remove(a),a.geometry.dispose(),a.material.dispose();n()}},[r,i,n]);let o=(0,Ca.useRef)(null);return(0,Ku.useFrame)(()=>{let a=e.current;if(!a){r.visible=!1;return}r.visible=!0,(o.current?.root!==a||o.current.helpers!==i)&&(o.current={root:a,helpers:i,nodes:cr(a).nodesById});let s=o.current.nodes;for(let{helper:l,id:c}of i){let d=s[c];l.visible=!!d,d&&l.box.setFromObject(d)}}),(0,sx.jsx)("primitive",{object:r})}var gh=require("three"),bh=["position","rotation","scale","visible","baseColor","emissive","opacity","roughness","metalness","emissiveIntensity"],yh=["linear","ease-in","ease-out","ease-in-out","step"],oE=new Set(["position","rotation","scale"]),aE=new Set(["baseColor","emissive"]),Ta=e=>typeof e=="string"&&e.length>0&&e.length<=256,Aa=e=>typeof e=="number"&&Number.isFinite(e),fh=e=>Array.isArray(e)&&e.length===3&&e.every(Aa);function zl(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Pa(e){throw new Error(`Invalid sequences: ${e}`)}function sE(e){return e.kind==="object"?JSON.stringify([e.kind,e.objectId,e.property]):e.kind==="clip"?JSON.stringify([e.kind,e.clip]):"camera"}function lE(e,t){if(t.kind==="camera")return zl(e)&&fh(e.position)&&fh(e.target)&&(e.fov===null||Aa(e.fov)&&e.fov>0&&e.fov<180)&&Aa(e.zoom)&&e.zoom>0;if(t.kind==="clip")return Aa(e)&&e>=0;let n=t.property;return oE.has(n)?fh(e)&&(n!=="scale"||e.every(r=>r!==0)):aE.has(n)?typeof e=="string"&&/^#[\da-f]{6}$/i.test(e):n==="visible"?typeof e=="boolean":Aa(e)&&e>=0&&(n==="emissiveIntensity"||e<=1)}function Ro(e){(!Array.isArray(e)||e.length>64)&&Pa("expected up to 64 sequences.");let t=new Set,n=0;return e.map(r=>{(!zl(r)||!Ta(r.id)||t.has(r.id)||!(typeof r.name=="string"&&Ta(r.name.trim()))||!Aa(r.duration)||r.duration<.1||r.duration>3600||typeof r.loop!="boolean"||typeof r.autoPlay!="boolean"||!Array.isArray(r.tracks)||r.tracks.length>128)&&Pa("each sequence needs a unique id, name, 0.1\u20133600 second duration, loop/autoplay flags and up to 128 tracks."),t.add(r.id);let i=new Set,o=new Set,a=r.tracks.map(s=>{(!zl(s)||!Ta(s.id)||i.has(s.id)||!(typeof s.name=="string"&&Ta(s.name.trim()))||!zl(s.target)||!Array.isArray(s.keyframes)||s.keyframes.length>2048||s.muted!==void 0&&typeof s.muted!="boolean")&&Pa("invalid or duplicate track."),i.add(s.id);let l;s.target.kind==="camera"?l={kind:"camera"}:s.target.kind==="clip"&&Ta(s.target.clip)?l={kind:"clip",clip:s.target.clip}:s.target.kind==="object"&&Ta(s.target.objectId)&&bh.includes(s.target.property)?l={kind:"object",objectId:s.target.objectId,property:s.target.property}:Pa("unknown track target or property.");let c=sE(l);o.has(c)&&Pa("only one track may own each target property in a sequence."),o.add(c);let d=new Set,p=new Set,u=s.keyframes.map(f=>{++n>2e4&&Pa("too many keyframes."),(!zl(f)||!Ta(f.id)||d.has(f.id)||!Aa(f.time)||f.time<0||f.time>r.duration||p.has(f.time)||f.easing!==void 0&&!yh.includes(f.easing)||!lE(f.value,l))&&Pa("keyframes need unique ids/times, valid values and times inside the sequence."),d.add(f.id),p.add(f.time);let m=f.value,v=l.kind==="camera"?{position:[...m.position],target:[...m.target],fov:m.fov,zoom:m.zoom}:Array.isArray(f.value)?[...f.value]:f.value;return{id:f.id,time:f.time,value:v,...f.easing?{easing:f.easing}:{}}}).sort((f,m)=>f.time-m.time);return{id:s.id,name:s.name.trim(),target:l,keyframes:u,...s.muted!==void 0?{muted:s.muted}:{}}});return{id:r.id,name:r.name.trim(),duration:r.duration,loop:r.loop,autoPlay:r.autoPlay,tracks:a}})}function cE(e,t="ease-in-out"){let n=Math.max(0,Math.min(1,e));return t==="step"?0:t==="ease-in"?n*n:t==="ease-out"?1-(1-n)**2:t==="ease-in-out"?n*n*(3-2*n):n}var Zu=(e,t,n)=>e+(t-e)*n,hh=(e,t,n)=>e.map((r,i)=>Zu(r,t[i],n));function Qu(e,t){if(e.muted||!e.keyframes.length||!Number.isFinite(t))return null;let n=e.keyframes;if(t<n[0].time)return null;let r=n[0],i;for(let l of n)if(l.time<=t)r=l;else{i=l;break}if(!i||typeof r.value=="boolean")return structuredClone(r.value);let o=cE((t-r.time)/(i.time-r.time),r.easing);if(typeof r.value=="number"&&typeof i.value=="number")return Zu(r.value,i.value,o);if(typeof r.value=="string"&&typeof i.value=="string")return`#${new gh.Color(r.value).lerp(new gh.Color(i.value),o).getHexString()}`;if(Array.isArray(r.value)&&Array.isArray(i.value))return hh(r.value,i.value,o);let a=r.value,s=i.value;return{position:hh(a.position,s.position,o),target:hh(a.target,s.target,o),fov:a.fov!==null&&s.fov!==null?Zu(a.fov,s.fov,o):a.fov,zoom:Zu(a.zoom,s.zoom,o)}}function lx(e,t){return{...e,keyframes:[...e.keyframes.filter(n=>n.id!==t.id&&Math.abs(n.time-t.time)>1e-6),t].sort((n,r)=>n.time-r.time)}}function cx(e){let t=[],n="",r=null,i=null,o=0,a="stopped",s=!1,l=[],c=0,d=!1,p=!1,u={sequenceId:null,time:0,duration:0,status:a,previewing:s,ready:!1,issues:[]},f=new Set,m=()=>t.find(w=>w.id===i),v=()=>{u={sequenceId:i,time:o,duration:m()?.duration??0,status:a,previewing:s,ready:!!r,issues:l},f.forEach(w=>w())},g=()=>{r?.restore(),o=0,a="stopped",s=!1,v(),r?.invalidate()},b=w=>t.some(T=>T.id===w)?(i===w||(r?.restore(),i=w,o=0,a="stopped",s=!1,l=r?.inspect(m())??[],v(),r?.invalidate()),!0):!1,h=w=>{if(w&&!b(w))return!1;let T=m();return!r||!T?.tracks.some(x=>!x.muted&&x.keyframes.length)?!1:(e?.(),p=!0,o>=T.duration&&(o=0),a="playing",s=!0,l=r.inspect(T),v(),r.invalidate(),!0)},y=()=>{if(!r||!d||p)return;let w=t.find(T=>T.autoPlay);w&&h(w.id)};return{getState:()=>u,subscribe:w=>(f.add(w),()=>{f.delete(w)}),select:b,play:h,stop:g,pause:()=>{a==="playing"&&(a="paused",v())},seek:w=>{let T=m();return!r||!T||!Number.isFinite(w)?!1:(e?.(),o=Math.max(0,Math.min(T.duration,w)),s=!0,a!=="playing"&&(a="paused"),l=r.inspect(T),v(),r.invalidate(),!0)},capture:w=>r?.capture(w)??null,configure:(w,T)=>{d=T;try{let x=Ro(w??[]),D=JSON.stringify(x);if(n===D){y();return}r?.restore(),t=x,n=D,m()||(i=t[0]?.id??null,o=0,s=!1),o=Math.min(o,m()?.duration??0),a=s?"paused":"stopped",l=m()?r?.inspect(m())??[]:[],v(),r?.invalidate(),y()}catch(x){g(),t=[],n="",i=null,l=[x instanceof Error?x.message:"Invalid sequence configuration."],v()}},connect:w=>{r?.restore(),r=w,w||(a="stopped",s=!1,o=0),l=m()?r?.inspect(m())??[]:[],v(),y()},advance:w=>{let T=m();if(!T||!r||a!=="playing"||!Number.isFinite(w)||w<0)return;let x=Math.min(w,.1);o+=x,c+=x,o>=T.duration&&(T.loop?o%=T.duration:(o=T.duration,a="finished")),(c>=1/30||a==="finished")&&(c=0,v())},frame:()=>{let w=m();return s&&w?{sequence:w,time:o,playing:a==="playing"}:null},destroy:()=>{r?.restore(),r=null,a="stopped",s=!1,o=0,v()}}}var zi=require("react"),od=require("@react-three/fiber");var Th=require("three");var zt=require("react"),_h=require("three");function sn(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)}var vh=new WeakSet;function Ps(e){vh.add(e)}function ux(e){let t=vh.has(e);return t&&vh.delete(e),t}var xh=new WeakSet;function dx(e,t){t?xh.add(e):xh.delete(e)}function As(e,t){return xh.has(e)?0:t}var Cr=require("three");var wh=require("three");function Sh(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 Mh(e){return e.category?.trim()??""}function px(e,t){if(t===null)return e;let n=new Set(t.map(r=>r.trim()));return e.filter(r=>n.has(Mh(r)))}function mx(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 Ju(e){return!!e&&[e.position,e.target].every(t=>Array.isArray(t)&&t.length===3&&t.every(Number.isFinite))}function Es(e){let t=e.camera;return{position:e.getPosition(new wh.Vector3,!1).toArray(),target:e.getTarget(new wh.Vector3,!1).toArray(),azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle,fov:"fov"in t?Number(t.fov):null,zoom:t.zoom}}function Fl(e,t){Ju(t)&&(e.setLookAt(...t.position,...t.target,!0),Number.isFinite(t.azimuthAngle)&&Number.isFinite(t.polarAngle)&&e.rotateTo(t.azimuthAngle,t.polarAngle,!0),Ea(e,t))}function Ea(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"})}function fx(e,t){let n=Es(e);if(!(e.camera instanceof Cr.PerspectiveCamera)||!t)return n;let r=t instanceof Cr.Box3?t:new Cr.Box3().setFromObject(t);return r.isEmpty()||(n.framing={aspect:e.camera.aspect,min:r.min.toArray(),max:r.max.toArray()}),n}function ed(e,t){let n=t.camera,r=e.framing;if(!(n instanceof Cr.PerspectiveCamera)||!r||!(n.aspect>0)||Math.abs(n.aspect-r.aspect)<1e-6)return[...e.position];let i=new Cr.Vector3(...e.position),o=new Cr.Vector3(...e.target),a=i.clone().sub(o).normalize(),s=new Cr.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 f=new Cr.Vector3(d,p,u).sub(i).applyMatrix4(s);c=Math.max(c,Math.abs(f.x)/(l*n.aspect)+f.z,Math.abs(f.y)/l+f.z)}return i.addScaledVector(a,c*1.02).toArray()}function hx(e){return[e.x,e.y,e.z]}function Qr(e,t){let n=new _h.Vector3,r=new _h.Vector3;return t.getPosition(n),t.getTarget(r),{position:hx(n),target:hx(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 uE(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 Hl(e,t,n=.6){let r=e.smoothTime;e.smoothTime=As(e,n);try{return await t()}finally{e.smoothTime=r}}function td(e={}){let t=(0,zt.useRef)(e);t.current=e;let n=(0,zt.useRef)(null),[r,i]=(0,zt.useState)(null),[o,a]=(0,zt.useState)(()=>({...e.presets})),s=(0,zt.useRef)(o);s.current=o;let l=(0,zt.useCallback)(S=>{i(M=>uE(M,S)?M:S)},[]),c=(0,zt.useCallback)(S=>{l(S)},[l]),d=(0,zt.useRef)(null),p=(0,zt.useRef)(null),u=(0,zt.useRef)(null),f=(0,zt.useCallback)(S=>{n.current=S;let M=Qr(S.raw.controls.camera,S.raw.controls);l(M),S.raw.scene!==p.current&&(p.current=S.raw.scene,d.current=null,u.current=null),S.homeCameraState&&!d.current&&(d.current=S.homeCameraState);let{initialPosition:_,initialTarget:C,initialTransition:E=!1}=t.current;if((_||C)&&S.raw.scene&&(_||S.homeCameraState)&&u.current!==S.raw.controls){u.current=S.raw.controls,S.homeCameraState||Ps(S.raw.controls);let L=_??M.position,k=C??M.target;S.raw.controls.setLookAt(L[0],L[1],L[2],k[0],k[1],k[2],E).then(()=>{if(n.current?.raw.controls!==S.raw.controls)return;let B=Qr(S.raw.controls.camera,S.raw.controls);d.current={position:B.position,target:B.target},l(B)}).catch(()=>{})}},[l]),m=(0,zt.useCallback)(async()=>{let S=n.current,M=S?.raw.controls;if(!M)return!1;try{let _=d.current;if(_){Ea(M,_);let C=ed(_,M);await Hl(M,()=>M.setLookAt(C[0],C[1],C[2],_.target[0],_.target[1],_.target[2],!0))}else S?.raw.scene?await Hl(M,()=>M.fitToBox(S.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Hl(M,()=>M.reset(!0));return!0}catch{return!1}},[]),v=(0,zt.useCallback)(async()=>{let S=n.current;if(!S?.raw.controls||!S.raw.scene)return!1;try{return await Hl(S.raw.controls,()=>S.raw.controls.fitToBox(S.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),g=(0,zt.useCallback)(async S=>{let M=n.current;if(!M?.raw.controls)return!1;let _=sn(M.objectBindings,S);if(!_)return!1;let C=M.raw.nodes[_];if(!C)return!1;try{return await Hl(M.raw.controls,()=>M.raw.controls.fitToBox(C,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),b=(0,zt.useCallback)(async(S,M=!0)=>{let _=n.current?.raw.controls;if(!_)return!1;try{return n.current?.homeCameraState||Ps(_),await _.setTarget(S[0],S[1],S[2],M),l(Qr(_.camera,_)),!0}catch{return!1}},[l]),h=(0,zt.useCallback)(async(S,M=!0)=>{let _=n.current?.raw.controls;if(!_)return!1;try{n.current?.homeCameraState||Ps(_);let C=[_.setLookAt(S.position[0],S.position[1],S.position[2],S.target[0],S.target[1],S.target[2],M)];S.azimuthAngle!=null&&S.polarAngle!=null&&C.push(_.rotateTo(S.azimuthAngle,S.polarAngle,M)),await Promise.all(C);let E=_.camera,L=!1;return S.fov!=null&&"fov"in E&&typeof E.fov=="number"&&(E.fov=S.fov,L=!0),S.zoom!=null&&"zoom"in E&&typeof E.zoom=="number"&&(E.zoom=S.zoom,L=!0),L&&"updateProjectionMatrix"in E&&E.updateProjectionMatrix(),l(Qr(E,_)),!0}catch{return!1}},[l]),y=(0,zt.useCallback)((S,M=!0)=>h(S,M),[h]),w=(0,zt.useCallback)((S,M,_=!0)=>h({position:S,target:M},_),[h]),T=(0,zt.useCallback)(async(S,M,_=!0)=>{let C=n.current?.raw.controls;if(!C)return!1;try{return n.current?.homeCameraState||Ps(C),await C.rotateTo(S*Math.PI/180,M*Math.PI/180,_),l(Qr(C.camera,C)),!0}catch{return!1}},[l]),x=(0,zt.useCallback)(async(S,M=!0)=>{let _=n.current?.raw.controls;if(!_)return!1;try{return n.current?.homeCameraState||Ps(_),await _.dollyTo(S,M),l(Qr(_.camera,_)),!0}catch{return!1}},[l]),D=(0,zt.useCallback)(S=>{let M=n.current?.raw.controls,_=S.trim();if(!M||!_)return null;let C=Qr(M.camera,M);return s.current={...s.current,[_]:C},a(E=>({...E,[_]:C})),l(C),C},[l]),A=(0,zt.useCallback)((S,M=!0)=>{let _=s.current[S];return _?h(_,M):Promise.resolve(!1)},[h]);return{cameraState:r,cameraPresets:o,resetView:m,focusObject:g,fitScene:v,setCameraTarget:b,setCameraState:y,lookAt:w,orbitTo:T,dollyTo:x,savePreset:D,goToPreset:A,handleCameraChange:c,handleViewerReady:f}}var nd=require("three");function Kt(e){return e.isSkinnedMesh===!0}function Si(e){let t=[];return e.traverse(n=>{Kt(n)&&t.push(n)}),t}var Ra="reactImmersiveSkinFreeze";function Rs(e){return!!e.userData[Ra]}function Oo(e,t,n=[t]){let r=e.userData,i=new nd.Matrix4().copy(t).invert(),o=r[Ra];if(o){o.frozenInverse.copy(i),o.restWorldTransforms=n.map(s=>s.clone()),e.bindMatrixInverse.copy(i);return}let a={frozenInverse:i,restWorldTransforms:n.map(s=>s.clone()),previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(i),e.onBeforeRender=function(s,l,c,d,p,u){a.previousOnBeforeRender.call(this,s,l,c,d,p,u),e.bindMatrixInverse.copy(a.frozenInverse)},r[Ra]=a}function Oa(e){return e.userData[Ra]?.frozenInverse??null}function gx(e){return e.userData[Ra]?.restWorldTransforms??null}function Jr(e){let t=e.userData,n=t[Ra];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[Ra],e.updateMatrixWorld(!0))}function rd(e){let t=e,n=Oa(e);n&&t.bindMatrixInverse.copy(n),t.skeleton?.update?.();let r=t.geometry.clone(),i=r.getAttribute("position");if(i){let o=new nd.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 bx(e){return e.matrixWorld.clone()}var Mi=require("three");function Os(e){return new Mi.Matrix4().set(1,e[0],e[1],0,0,1,e[2],0,0,0,1,0,0,0,0,1)}function _i(e,t){e.matrixAutoUpdate=!t,e.updateMatrix(),t&&(e.matrix.makeRotationFromQuaternion(e.quaternion).multiply(Os(t)).scale(e.scale).setPosition(e.position),e.matrixWorldNeedsUpdate=!0)}function id(e,t,n){let r=new Mi.Vector3().setFromMatrixColumn(e,0),i=new Mi.Vector3().setFromMatrixColumn(e,1),o=new Mi.Vector3().setFromMatrixColumn(e,2),a=(m,v)=>{let g=m*(v<0?-1:1);return Math.abs(g-v)<1e-10?v:g},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 f=[l/c,d/u,p/u].map(m=>Math.abs(m)<1e-10?0:m);return{rotation:new Mi.Quaternion().setFromRotationMatrix(new Mi.Matrix4().makeBasis(r,i,o)).normalize(),scale:new Mi.Vector3(s,c,u),shear:f.some(Boolean)?f:void 0}}var Ch=e=>e==="baseColor"?"color":e;function yx(e){let t=new Set;return e.traverse(n=>{let r=n;if(r.isMesh)for(let i of Array.isArray(r.material)?r.material:[r.material])i&&t.add(i)}),[...t]}function vx({root:e,controls:t,animations:n,invalidate:r}){let i=new Map,o=new Map,a=new Map,s=new Set,l=new Map,c=null,d="",p=h=>e()?_r(e(),h):null,u=h=>{if(h.kind==="camera"){let D=t();if(!D)return null;let A=Qr(D.camera,D);return{position:A.position,target:A.target,fov:A.fov,zoom:A.zoom}}if(h.kind==="clip"){let D=n();return D?.clips.includes(h.clip)?D.getState?.().active.find(A=>A.clip===h.clip)?.time??0:null}let y=p(h.objectId);if(!y)return null;let w=h.property;if(w==="position"||w==="rotation"||w==="scale")return[y[w].x,y[w].y,y[w].z];if(w==="visible")return y.visible;let T=yx(y).find(D=>D[Ch(w)]!==void 0),x=T?T[Ch(w)]:void 0;return x?.isColor?`#${x.getHexString()}`:typeof x=="number"?x:null},f=h=>{let y=t();y&&(y.stop(),y.setLookAt(...h.position,...h.target,!1),h.fov!==null&&"fov"in y.camera&&(y.camera.fov=h.fov,y.camera.updateProjectionMatrix()),y.zoomTo(h.zoom,!1),y.update(0))},m=h=>{if(i.has(h))return;h.updateWorldMatrix(!0,!0);let y=h.matrixAutoUpdate?void 0:id(h.matrix,h.scale,h.quaternion).shear;i.set(h,{position:h.position.toArray(),rotation:[h.rotation.x,h.rotation.y,h.rotation.z],scale:h.scale.toArray(),matrix:h.matrix.clone(),auto:h.matrixAutoUpdate,shear:y});for(let w of Si(h))Rs(w)||(Oo(w,w.matrixWorld),s.add(w))},v=(h,y)=>{let w=n();w?.stop(h),y&&w&&(w.play(h,{alongside:!0,reverse:y.reverse}),w.setSpeed(y.speed,h),w.seek?.(y.time,h),y.status!=="playing"&&w.pause(h))};return{capture:u,restore:()=>{for(let[h,y]of l)v(h,y);l.clear();for(let[h,y]of i)h.position.fromArray(y.position),h.rotation.set(...y.rotation),h.scale.fromArray(y.scale),h.matrix.copy(y.matrix),h.matrixAutoUpdate=y.auto,h.matrixWorldNeedsUpdate=!0;i.clear(),o.forEach((h,y)=>y.visible=h),o.clear(),a.forEach((h,y)=>{h.forEach((w,T)=>{w instanceof Th.Color?y[T].copy(w):y[T]=w}),y.needsUpdate=!0}),a.clear(),s.forEach(Jr),s.clear(),c&&f(c),c=null,d="",e()?.updateWorldMatrix(!0,!0),r()},inspect:h=>h.tracks.filter(y=>!y.muted&&y.keyframes.length&&u(y.target)===null).map(y=>`Unavailable target: ${y.name}.`),invalidate:r,apply:({sequence:h,time:y,playing:w})=>{let T=h.tracks.map(A=>({track:A,value:Qu(A,y)})).filter(A=>A.value!==null);for(let[A,S]of l)T.some(({track:M})=>M.target.kind==="clip"&&M.target.clip===A)||(v(A,S),l.delete(A));for(let{track:A}of T)if(A.target.kind==="object"&&["position","rotation","scale"].includes(A.target.property)){let S=p(A.target.objectId);S&&m(S)}let x=new Map([...a.keys()].map(A=>[A,A.transparent]));o.forEach((A,S)=>S.visible=A),i.forEach((A,S)=>{S.position.fromArray(A.position),S.rotation.set(...A.rotation),S.scale.fromArray(A.scale),_i(S,A.shear)}),a.forEach((A,S)=>A.forEach((M,_)=>{M instanceof Th.Color?S[_].copy(M):S[_]=M}));let D=n();for(let{track:A,value:S}of T){if(A.target.kind!=="clip"||!D?.seek||!D.clips.includes(A.target.clip))continue;let M=A.target.clip;l.has(M)||(l.set(M,D.getState?.().active.find(_=>_.clip===M)),D.play(M,{alongside:!0}),D.pause(M)),D.seek(S,M)}for(let{track:A,value:S}of T){let M=A.target;if(M.kind==="clip")continue;if(M.kind==="camera"){c||(c=u(M));let E=JSON.stringify(S);(w||E!==d)&&(f(S),d=E);continue}let _=p(M.objectId);if(!_)continue;let C=M.property;if(C==="visible")o.has(_)||o.set(_,_.visible),_.visible=S;else if(C==="position"||C==="rotation"||C==="scale")C==="rotation"?_.rotation.set(...S):_[C].fromArray(S),_i(_,i.get(_)?.shear);else for(let E of yx(_)){let L=Ch(C),k=E[L];if(k===void 0)continue;let B=a.get(E);if(B||(B=new Map,a.set(E,B)),x.has(E)||x.set(E,E.transparent),B.has(L)||B.set(L,k?.isColor?k.clone():k),k?.isColor?k.set(S):E[L]=S,C==="opacity"){B.has("transparent")||B.set("transparent",E.transparent);let j=S<1||B.get("transparent")===!0;E.transparent=j}}}c&&!T.some(({track:A})=>A.target.kind==="camera")&&(f(c),d=""),x.forEach((A,S)=>{A!==S.transparent&&(S.needsUpdate=!0)}),e()?.updateWorldMatrix(!0,!0)}}}function xx({controller:e,source:t,controls:n,animations:r,ready:i,sequences:o,autoPlay:a,authoredRevision:s}){let l=(0,od.useThree)(p=>p.invalidate),c=(0,zi.useRef)({source:t,controls:n,animations:r});c.current={source:t,controls:n,animations:r};let d=(0,zi.useMemo)(()=>vx({root:()=>c.current.source.current,controls:()=>c.current.controls.current,animations:()=>c.current.animations.current,invalidate:l}),[e,l]);return(0,zi.useLayoutEffect)(()=>(l(),()=>d.restore()),[d,s,o,l]),(0,zi.useLayoutEffect)(()=>{e.configure(o,a)},[e,o,a]),(0,zi.useLayoutEffect)(()=>(e.connect(i?d:null),()=>e.connect(null)),[e,d,i]),(0,zi.useLayoutEffect)(()=>{let p=n.current,u=()=>e.pause();return p?.addEventListener("controlstart",u),()=>p?.removeEventListener("controlstart",u)},[e,n,i]),(0,od.useFrame)((p,u)=>{if(!i)return;e.advance(u);let f=e.frame();f&&d.apply(f),f?.playing&&l()}),null}var Cx=require("react"),Ls=require("lucide-react");var Ds=require("react");var ad={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",sequencePlayer:"Sequence player",sequenceSelect:"Sequence",sequencePlay:"Play sequence",sequencePause:"Pause sequence",sequenceStop:"Stop and restore scene",sequencePlayhead:"Sequence playhead",sequenceTime:"Sequence time",sequenceIssues:"Unavailable sequence targets",arConfiguredButton:"AR handoff",arConfiguredTitle:"Take this configuration to AR",arConfiguredDescription:"Your current materials, visible models and placements are included.",arSnapshotStale:"Updating AR to include your latest changes\u2026",arPreparing:"Preparing your scene\u2026",arRefresh:"Refresh AR",arRetry:"Try again",arExportDetails:"Export details",arPrepare:"Prepare AR",arPrepareAgain:"Prepare again",arDownloadUSDZ:"Download USDZ for iPhone/iPad",arScanConfigured:"Scan to open this configuration on your phone.",arOpenConfiguredLink:"Open configuration link",viewInAR:"View in AR",openThisExperienceOnAPhoneForAR:"Open this experience on a phone for AR",openOnPhone:"Open on phone",viewThisModelInYourSpace:"View this model in your space",viewThisModelInVR:"View this model in VR",closePhoneHandoff:"Close phone handoff",arScanCode:"Scan the code and choose AR.",qrCodeToOpenThisModelOnAPhone:"QR code to open this model on a phone",disableUVChecker:"Disable UV checker",enableUVChecker:"Enable UV checker",explodedView:"Exploded view",explodeAmount:"Explode amount",removeSectionCut:"Remove section cut",sectionCut:"Section cut",sectionAxis:"Section axis",sectionPosition:"Section position",keepTheOtherSide:"Keep the other side",pauseCinematic:"Pause cinematic",playCinematic:"Play cinematic",stopCinematicAndResetCamera:"Stop cinematic and reset camera",cancel:"Cancel",annotationCategories:"Annotation categories",annotations:"Annotations",all:"All",uncategorized:"Uncategorized",decalDragHint:"Drag the decal on the object. Release to save; Escape to cancel.",showAll:"Show all",materialVariants:"Material variants",startGuidedTour:"Start guided tour",guidedTour:"Guided Tour",previousAnnotation:"Previous annotation",previous:"Prev",stopGuidedTour:"Stop guided tour",nextAnnotation:"Next annotation",next:"Next",exitFullscreen:"Exit fullscreen",enterFullscreen:"Enter fullscreen",resetCameraView:"Reset camera view",orbitControl:"Orbit Control",pointLock:"Point Lock",cameraController:"Camera controller",cameraControllerSettings:"Camera controller settings",downloadGLB:"Download GLB",downloadGLBDescription:"All visible models, material edits and animations in one file. No annotations or separate editor model slots. Duplicate mesh names may change on reimport.",downloadCombinedGLB:"Download as one GLB",downloadSeparateGLBs:"Download separate GLBs",downloadSeparateGLBsDescription:"One GLB file per model",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",savedMeasurements:"Saved measurements ({count})",noSavedMeasurements:"No saved measurements yet. Pick points in the preview, then save a measurement here.",measurementFiles:"Import / export",measurementSourceUnit:"Model units",measurementDisplayUnit:"Display units",measurementName:"Measurement name",measurementNamePlaceholder:"e.g. Door width",saveMeasurement:"Save measurement",knownMeasurementDistance:"Known distance",calibrationUnit:"Calibration unit",calibrateMeasurement:"Calibrate",measurementCalibrationHint:"Pick two distance points, enter their known length, then calibrate.",measurementCalibratedScale:"Calibrated: 1 model unit = {scale} m",resetMeasurementCalibration:"Reset calibration",showSavedMeasurement:"Show {name}",renameSavedMeasurement:"Rename {name}",deleteSavedMeasurement:"Delete {name}",exportMeasurementJson:"Export JSON",exportMeasurementCsv:"Export CSV",importMeasurementJson:"Import JSON",measurementReady:"Ready",measurementApproximate:"Approximate LOD",measurementModelChanged:"Different model",measurementObjectMissing:"Object unavailable",measurementGeometryChanged:"Geometry changed \u2014 measure again",measurementPoseChanged:"Pose changed \u2014 measure again",measurementObjectHidden:"Object hidden",measurementInvalid:"Invalid measurement",measurementWaiting:"Waiting for model",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 Gl(e,t,n={}){return(e?.[t]??ad[t]).replace(/\{(\w+)\}/g,(i,o)=>Object.prototype.hasOwnProperty.call(n,o)?String(n[o]):i)}var dE=new Map(Object.entries(ad).map(([e,t])=>[t,e]));function wx(e,t){let n=dE.get(t);return n?Gl(e,n):t}var Mx=require("react/jsx-runtime"),Sx=(0,Ds.createContext)(void 0);function sd({labels:e,children:t}){return(0,Mx.jsx)(Sx.Provider,{value:e,children:t})}function _e(){let e=(0,Ds.useContext)(Sx);return(0,Ds.useMemo)(()=>Object.assign((t,n)=>Gl(e,t,n),{message:t=>wx(e,t)}),[e])}var xn=require("react/jsx-runtime"),pE={sequenceId:null,time:0,duration:0,status:"stopped",previewing:!1,ready:!1,issues:[]},_x=()=>pE,mE=()=>()=>{};function Tx(e){return(0,Cx.useSyncExternalStore)(e?.subscribe??mE,e?.getState??_x,_x)}function fE({controls:e,duration:t,showScrubber:n=!0,hasTracks:r=!0}){let i=_e(),o=Tx(e),a=o.status==="playing";return(0,xn.jsxs)("div",{className:"ri-sequenceTransport",children:[(0,xn.jsx)("button",{type:"button",onClick:()=>a?e?.pause():e?.play(),disabled:!o.ready||!t||!r,"aria-label":i(a?"sequencePause":"sequencePlay"),title:i(a?"sequencePause":"sequencePlay"),children:(0,xn.jsx)("span",{"aria-hidden":"true",children:a?(0,xn.jsx)(Ls.Pause,{size:15}):(0,xn.jsx)(Ls.Play,{size:15})})}),(0,xn.jsx)("button",{type:"button",onClick:()=>e?.stop(),disabled:!o.previewing,"aria-label":i("sequenceStop"),title:i("sequenceStop"),children:(0,xn.jsx)(Ls.Square,{size:14,"aria-hidden":"true"})}),n&&(0,xn.jsx)("input",{"aria-label":i("sequencePlayhead"),type:"range",min:0,max:t||1,step:.01,value:Math.min(o.time,t),disabled:!o.ready||!t,onChange:s=>{e?.pause(),e?.seek(Number(s.target.value))}}),(0,xn.jsxs)("output",{"aria-label":i("sequenceTime"),children:[o.time.toFixed(2)," / ",t.toFixed(2),"s"]})]})}function Px({controls:e,sequences:t}){let n=_e(),r=Tx(e);return t.length?(0,xn.jsxs)("section",{className:"ri-sequencePlayer","aria-label":n("sequencePlayer"),onPointerDown:i=>i.stopPropagation(),children:[(0,xn.jsx)("select",{"aria-label":n("sequenceSelect"),value:r.sequenceId??"",onChange:i=>e.select(i.target.value),children:t.map(i=>(0,xn.jsx)("option",{value:i.id,children:i.name},i.id))}),(0,xn.jsx)(fE,{controls:e,duration:r.duration,hasTracks:t.find(i=>i.id===r.sequenceId)?.tracks.some(i=>!i.muted&&i.keyframes.length>0)??!1}),!!r.issues.length&&(0,xn.jsxs)("details",{children:[(0,xn.jsx)("summary",{children:n("sequenceIssues")}),r.issues.map(i=>(0,xn.jsx)("p",{children:i},i))]})]}):null}var Xi=require("react");var Zt=require("three"),Is=new Map,Fi={color:"#93c5fd",intensity:.07},Da=new Zt.Color(Fi.color).multiplyScalar(Fi.intensity),Ax=new Zt.Color(Fi.color),Ex=.28,Rx=new Map;function Do(e){return Rx.get(e)}function hE(e,t){let n=++e.loadGeneration;e.loaded=!1,e.failed=!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&&(e.failed=!0,console.warn(`Failed to load texture: ${t}`),r())})}function ld(e,t){return`${t}|${e}`}function Wl(e,t=Zt.NoColorSpace,n){let r=ld(e,t),i=Is.get(r);if(i)return n&&!i.loaded&&i.pending.push(n),i.texture;let o=Rx.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,Is.set(r,a),hE(a,o),a.texture}function ks(e,t=Zt.NoColorSpace,n){let r=Wl(e,t,n);return Is.get(ld(e,t)).refCount+=1,r}function Hi(e,t=Zt.NoColorSpace){let n=Is.get(ld(e,t));n&&(n.refCount-=1,n.refCount<=0&&(n.loadGeneration+=1,n.pending=[],n.texture.dispose(),Is.delete(ld(e,t))))}function cd(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 ud(e,t){let n=e.offsetTextures,r=n?.[t];r&&(r.texture.dispose(),delete n[t])}function Ox(e){let t=e.offsetTextures;if(t){for(let n of Object.values(t))n.texture.dispose();delete e.offsetTextures}}var Ph=null;function dd(){if(Ph)return Ph;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,Ph=i,i}var Ah=null;function Dx(){if(Ah)return Ah;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 h=1;h<4;h+=1){let y=h*n/4;o.beginPath(),o.moveTo(c+y,d),o.lineTo(c+y,d+n),o.moveTo(c,d+y),o.lineTo(c+n,d+y),o.stroke()}o.strokeStyle="#09090b",o.lineWidth=7,o.strokeRect(c,d,n,n);let u=c+n*.23,f=d+n*.72,m=c+n*.72,v=d+n*.23;o.lineCap="round",o.lineJoin="round",o.beginPath(),o.moveTo(u,f),o.lineTo(m,v),o.lineTo(m-n*.2,v),o.moveTo(m,v),o.lineTo(m,v+n*.2),o.stroke();let g=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 b=String(g).padStart(2,"0");o.strokeText(b,c+n/2,d+n*.82),o.fillText(b,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,Ah=a,a}function Lx(e){for(let t of Is.values())if(t.texture.source===e.source&&(!t.loaded||t.failed))return!0;return!1}function Ix(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var Tr={enabled:!1,axis:"y",position:.5,flip:!1},gE={clips:[],autoplayClip:null},bE={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}},dr={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:bE,animations:gE,annotations:[]};var qi=require("fflate");function Bs(e){let t=d=>{throw new Error(`Invalid section: ${d}`)},n=d=>d&&typeof d=="object"&&!Array.isArray(d)?d:t("expected an object"),r=d=>typeof d=="string"&&d.trim().length>0&&d.length<=200?d:t("expected a nonempty name or id (up to 200 characters)"),i=d=>typeof d=="number"&&Number.isFinite(d)&&d>=0&&d<=1?d:t("position must be between 0 and 1"),o=d=>!Array.isArray(d)||d.length!==3||!d.every(p=>typeof p=="number"&&Number.isFinite(p))||Math.hypot(...d)<1e-8?t("normal must be a finite, nonzero vector"):[...d],a=d=>{let p=n(d);return!["x","y","z"].includes(p.axis)||typeof p.enabled!="boolean"||typeof p.flip!="boolean"?t("invalid plane"):{enabled:p.enabled,axis:p.axis,position:i(p.position),flip:p.flip,...p.normal!==void 0?{normal:o(p.normal)}:{}}},s=d=>{let p=n(d),u=a(p);if(p.mode!==void 0){if(!["plane","planes","box"].includes(p.mode))return t("invalid mode");u.mode=p.mode}if(p.planes!==void 0){if(!Array.isArray(p.planes)||p.planes.length>6)return t("at most six planes are supported");let f=new Set;u.planes=p.planes.map(m=>{let v=n(m),g=r(v.id);return f.has(g)?t("duplicate plane id"):(f.add(g),{...a(v),id:g,name:r(v.name)})})}if(p.activePlaneId!==void 0&&(u.activePlaneId=r(p.activePlaneId)),p.invertBox!==void 0){if(typeof p.invertBox!="boolean")return t("invalid box inversion");u.invertBox=p.invertBox}if(p.box!==void 0){let f=n(p.box),m=b=>!Array.isArray(b)||b.length!==3?t("invalid box bounds"):b.map(i),v=m(f.min),g=m(f.max);if(v.some((b,h)=>b>=g[h]))return t("box minimum must be below its maximum on every axis");u.box={min:v,max:g}}return u},l=n(e),c=s(l);if(l.presets!==void 0){if(!Array.isArray(l.presets)||l.presets.length>32)return t("at most 32 presets are supported");let d=new Set;c.presets=l.presets.map(p=>{let u=n(p),f=r(u.id);return d.has(f)?t("duplicate preset id"):(d.add(f),{id:f,name:r(u.name),settings:s(u.settings)})})}return c}function ql(e){let{presets:t,...n}=Bs(e);return n}function kx(e){try{return Bs(e)}catch{return Tr}}var pr=require("three");function Ae(e){return e.id??e.url}function Lo(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Expected an asset transform object.");let t={};for(let n of["position","rotation","scale"]){let r=e[n];if(r!==void 0){if(!Array.isArray(r)||r.length!==3||!r.every(i=>typeof i=="number"&&Number.isFinite(i))||n==="scale"&&r.some(i=>i===0))throw new Error(`Invalid asset ${n}: expected three finite ${n==="scale"?"nonzero ":""}numbers.`);t[n]=[...r]}}return t}function Bx(e,t){if(!Number.isFinite(t)||t<=0)throw new Error("Grid size must be positive.");let n=Lo(e),[r,i,o]=n.position??[0,0,0];return{...n,position:[Math.round(r/t)*t,i,Math.round(o/t)*t]}}function Nx(e,t){let n=Lo(e),r=n.position??[0,0,0],i=new pr.Matrix4().compose(new pr.Vector3(...r),new pr.Quaternion().setFromEuler(new pr.Euler(...n.rotation??[0,0,0])),new pr.Vector3(...n.scale??[1,1,1])),o=new pr.Box3(new pr.Vector3(...t.min),new pr.Vector3(...t.max)).applyMatrix4(i);if(!Number.isFinite(o.min.y))throw new Error("Cannot place an asset with empty bounds.");return{...n,position:[r[0],r[1]-o.min.y,r[2]]}}var Xe=require("three");function Ns(e){if(e.length!==3)return null;let t=new Xe.Vector3(...e[0]).sub(new Xe.Vector3(...e[1])),n=new Xe.Vector3(...e[2]).sub(new Xe.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 pd(e,t){if(!e.normal)return null;let n=new Xe.Vector3(...e.normal);if(n.lengthSq()===0)return null;n.normalize();let r=new Xe.Vector3(...t),i=r.clone().sub(new Xe.Vector3(...e.position)).dot(n);return{distance:Math.abs(i),projection:r.addScaledVector(n,-i).toArray()}}function Vs(e){if(e.length<3)return{error:"Pick at least three points to finish the area."};let t=new Xe.Vector3(...e[0]),n=e.map(g=>new Xe.Vector3(...g).sub(t)),r=Math.max(...n.map(g=>g.length()));if(r===0)return{error:"Area points must be distinct."};let i=new Xe.Vector3;for(let g=1;g<n.length-1;g+=1){let b=n[g].clone().cross(n[g+1]);b.lengthSq()>i.lengthSq()&&i.copy(b)}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(g=>Math.abs(g.dot(i))>o))return{error:"Area points must lie on one plane."};let a=n.find(g=>g.length()>r*1e-10).clone().normalize(),s=i.clone().cross(a).normalize(),l=n.map(g=>new Xe.Vector2(g.dot(a),g.dot(s))),c=(g,b,h)=>(b.x-g.x)*(h.y-g.y)-(b.y-g.y)*(h.x-g.x),d=r*r*1e-10,p=(g,b,h)=>Math.abs(c(g,b,h))<=d&&h.x>=Math.min(g.x,b.x)-r*1e-10&&h.x<=Math.max(g.x,b.x)+r*1e-10&&h.y>=Math.min(g.y,b.y)-r*1e-10&&h.y<=Math.max(g.y,b.y)+r*1e-10;for(let g=0;g<l.length;g+=1){let b=l[g],h=l[(g+1)%l.length];if(b.distanceTo(h)<=r*1e-10)return{error:"Area points must be distinct."};for(let y=g+1;y<l.length;y+=1){if(y===g+1||g===0&&y===l.length-1)continue;let w=l[y],T=l[(y+1)%l.length],x=c(b,h,w),D=c(b,h,T),A=c(w,T,b),S=c(w,T,h);if(x*D<0&&A*S<0||p(b,h,w)||p(b,h,T)||p(w,T,b)||p(w,T,h))return{error:"Area edges must not cross or touch each other."}}}let u=0,f=0,m=0;for(let g=0;g<l.length;g+=1){let b=l[g],h=l[(g+1)%l.length],y=b.x*h.y-h.x*b.y;u+=y,f+=(b.x+h.x)*y,m+=(b.y+h.y)*y}if(Math.abs(u)<=d)return{error:"The polygon has no measurable area."};let v=t.clone().addScaledVector(a,f/(3*u)).addScaledVector(s,m/(3*u));return{area:Math.abs(u)/2,center:v.toArray(),triangles:Xe.ShapeUtils.triangulateShape(l,[])}}function Xl(e,t){if(e.length<2)return 0;let n=0;for(let r=1;r<e.length;r+=1)n+=new Xe.Vector3(...e[r]).distanceTo(new Xe.Vector3(...e[r-1]));return t&&(n+=new Xe.Vector3(...e[e.length-1]).distanceTo(new Xe.Vector3(...e[0]))),n}var yE=1e-5;function vE(e,t){let n=e.getAttribute("position"),r=e.getIndex(),i=n.count,o=Math.max(t,1e-9),a=(m,v,g)=>`${Math.round(m/o)}_${Math.round(v/o)}_${Math.round(g/o)}`,s=new Int32Array(i),l=[],c=new Map;for(let m=0;m<i;m+=1){let v=n.getX(m),g=n.getY(m),b=n.getZ(m),h=a(v,g,b),y=c.get(h);y===void 0&&(y=l.length,l.push(new Xe.Vector3(v,g,b)),c.set(h,y)),s[m]=y}let d=l.map(()=>new Map),p=(m,v)=>{if(m===v)return;let g=l[m].distanceTo(l[v]);d[m].has(v)||d[m].set(v,g),d[v].has(m)||d[v].set(m,g)},u=(r?r.count:i)/3,f=m=>r?r.getX(m):m;for(let m=0;m<u;m+=1)p(s[f(m*3)],s[f(m*3+1)]),p(s[f(m*3+1)],s[f(m*3+2)]),p(s[f(m*3+2)],s[f(m*3)]);return{weldedId:s,weldedPosition:l,neighbors:d}}function xE(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 wE(e){let n=(Math.abs(e.y)<.9?new Xe.Vector3(0,1,0):new Xe.Vector3(1,0,0)).clone().cross(e).normalize(),r=e.clone().cross(n).normalize();return[n,r]}function SE(e,t,n){let[r,i]=wE(t),o=0,a=0,s=0;for(let v of n){let g=v.clone().sub(e),b=g.dot(r),h=g.dot(i);o+=b*b,a+=b*h,s+=h*h}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,f=0;Math.abs(a)>1e-12?(u=p-s,f=a):s>o&&(u=0,f=1);let m=Math.hypot(u,f)||1;return r.clone().multiplyScalar(u/m).add(i.clone().multiplyScalar(f/m)).normalize()}function ME(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 Xe.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 f=c(l(u*3)),m=c(l(u*3+1)),v=c(l(u*3+2)),g=d(f),b=d(m),h=d(v),y=[],w=(T,x,D,A)=>{x>0!=A>0&&y.push(T.clone().lerp(D,x/(x-A)))};w(f,g,m,b),w(m,b,v,h),w(v,h,f,g),y.length===2&&p.push([y[0],y[1]])}return p}function _E(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 f=r(u),m=i.get(f);return m===void 0&&(m=o.length,o.push(u),i.set(f,m)),m},s=[],l=u=>{for(;s.length<=u;)s.push(new Map)};for(let[u,f]of e){let m=a(u),v=a(f);m!==v&&(l(m),l(v),s[m].set(v,(s[m].get(v)??0)+1),s[v].set(m,(s[v].get(m)??0)+1))}let c=(u,f)=>u<f?`${u}_${f}`:`${f}_${u}`,d=new Set,p=[];for(let u=0;u<s.length;u+=1)for(let f of s[u]?.keys()??[]){if(d.has(c(u,f)))continue;let m=[u],v=u,g=f;d.add(c(v,g));let b=0;for(;g!==u&&g>=0&&b<s.length+4;){m.push(g);let h=[...s[g].keys()].filter(w=>w!==v),y;if(h.length<=1)y=h[0];else{let w=o[g].clone().sub(o[v]).normalize(),T=-1/0;for(let x of h){let D=o[x].clone().sub(o[g]).normalize(),A=w.dot(D);A>T&&(T=A,y=x)}}if(y===void 0){g=-1;break}d.add(c(g,y)),v=g,g=y,b+=1}g===u&&m.length>=3&&p.push(m.map(h=>o[h]))}return p}function Vx(e,t){let n=1/0;for(let r of e)n=Math.min(n,r.distanceTo(t));return n}function CE(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 jx(e,t,n,r,i){let o=ME(e,t,r,i);if(o.length===0)return{error:"Couldn't trace a loop around this point."};let a=_E(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=Vx(s,r);for(let d of a.slice(1)){let p=Vx(d,r);p<l&&(l=p,s=d)}let c=CE(s,r).map(d=>d.toArray());return{points:c,length:Xl(c,!0)}}function Ux(e){if(!(e.object instanceof Xe.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 Xe.Float32BufferAttribute(new Float32Array(o.count*3),3),s=new Xe.Vector3;for(let l=0;l<o.count;l++)t.getVertexPosition(l,s),a.setXYZ(l,s.x,s.y,s.z);n=new Xe.BufferGeometry().setAttribute("position",a).setIndex(n.getIndex())}let r=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let o=new Xe.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*yE}}function zx(e,t=6){let n=Ux(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=Hx(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}=vE(i,a),u=i.getAttribute("position"),f=e.point.clone().applyMatrix4(o.clone().invert()),m=[r.a,r.b,r.c],v=m[0],g=1/0;for(let x of m){let A=new Xe.Vector3(u.getX(x),u.getY(x),u.getZ(x)).distanceTo(f);A<g&&(g=A,v=x)}let b=c[v],h=d[b].clone().applyMatrix4(o),y=xE(p,b,t),w=[];for(let x of y.keys())w.push(d[x].clone().applyMatrix4(o));if(w.length<6)return{error:"Not enough surface detail near this point to trace a loop. Try a different spot."};let T=SE(h,l,w);return jx(i,o,a,e.point.clone(),T)}function Fx(e,t=new Xe.Vector3(0,1,0)){let n=Ux(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."}:jx(r,i,o,e.point.clone(),a)}function Hx(e){if(!(e.object instanceof Xe.Mesh)||!e.face)return null;let t=e.object,n=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let r=new Xe.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 Xe.Vector3).applyMatrix4(n))}function Gx(e){if(!(e.object instanceof Xe.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 Wx(e,t,n,r,i,o=12){let a=Hx(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 f=new Xe.Vector4(u.x,u.y,u.z,1).applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix);return f.w<=0||f.z/f.w<-1||f.z/f.w>1?null:{screen:new Xe.Vector2((f.x/f.w+1)*r.width/2,(1-f.y/f.w)*r.height/2),w:f.w}},d=a.map(c),p=o;if((i==="vertex"||i==="auto")&&(d.forEach((u,f)=>{let m=u?.screen.distanceTo(n)??1/0;m<=p&&(p=m,l.position=a[f].toArray(),l.snapped="vertex")}),l.snapped))return l;if(i==="edge"||i==="auto")for(let u=0;u<3;u+=1){let f=(u+1)%3,m=d[u],v=d[f];if(!m||!v)continue;let g=v.screen.clone().sub(m.screen);if(g.lengthSq()===0)continue;let b=Math.max(0,Math.min(1,n.clone().sub(m.screen).dot(g)/g.lengthSq())),h=m.screen.clone().addScaledVector(g,b).distanceTo(n);if(h<=p){p=h;let y=b*m.w/((1-b)*v.w+b*m.w);l.position=a[u].clone().lerp(a[f],y).toArray(),l.snapped="edge"}}return l}var La=["m","cm","mm","in","ft"],Eh={m:1,cm:.01,mm:.001,in:.0254,ft:.3048},TE=["distance","angle","area","pointToPlane","wrap","wrapHorizontal"];function $l(e){return La.includes(e)}function Ia(e={},t="m"){let n=e.displayUnit??t,r=e.metersPerUnit??Eh[e.sourceUnit??"m"];if(!Number.isFinite(r)||r<=0)throw new Error("Measurement scale must be a positive finite number.");return{displayUnit:n,metersPerUnit:r,factor:$l(n)?r/Eh[n]:1}}function Yl(e){try{return new URL(e,typeof window<"u"?window.location?.href:void 0).href}catch{return e}}function md(e,t,n,r={}){if(!$l(n)||!Number.isFinite(e)||e<=0||!Number.isFinite(t)||t<=0)throw new Error("Calibration needs two distinct points and a positive known distance.");let i=t*Eh[n]/e;if(!Number.isFinite(i)||i<=0)throw new Error("Calibration scale is outside the supported range.");return{...r,metersPerUnit:i}}function ka(e,t){let n=t.map(r=>r.position);if(e==="angle"){let r=Ns(n);return r===null?null:{value:r,dimension:0}}if(e==="area"){let r=Vs(n);return"error"in r?null:{value:r.area,dimension:2}}if(e==="pointToPlane"){let r=t.length===2?pd(t[0],t[1].position):null;return r?{value:r.distance,dimension:1}:null}return t.length<(e==="distance"?2:3)?null:{value:Xl(n,e!=="distance"),dimension:1}}function Ba(e,t={},n="m",r=e.points,i=e.approximate?"approximate":"ready"){let o=ka(e.tool,r),{factor:a,displayUnit:s}=Ia(t,n),l=i==="ready"||i==="approximate",c=l&&o?o.value*a**o.dimension:null;return{id:e.id,status:l?o&&c!==null&&Number.isFinite(c)?i:"invalid":i,rawValue:l&&o&&Number.isFinite(o.value)?o.value:null,value:c!==null&&Number.isFinite(c)?c:null,unit:e.tool==="angle"?"\xB0":e.tool==="area"?`${s}\xB2`:s}}function Gi(e){function t(){throw new Error("Invalid measurements: expected settings and valid named measurements with finite points.")}let n=s=>!!s&&typeof s=="object"&&!Array.isArray(s),r=s=>Array.isArray(s)&&s.length===3&&s.every(l=>typeof l=="number"&&Number.isFinite(l));typeof e=="string"&&(e.length>5*1024*1024&&t(),e=JSON.parse(e)),(!n(e)||e.version!==void 0&&e.version!==1||!n(e.settings)||!Array.isArray(e.items)||e.items.length>256)&&t();let i={};for(let s of["sourceUnit","displayUnit"])e.settings[s]!==void 0&&($l(e.settings[s])||t(),i[s]=e.settings[s]);e.settings.metersPerUnit!==void 0&&((typeof e.settings.metersPerUnit!="number"||!Number.isFinite(e.settings.metersPerUnit)||e.settings.metersPerUnit<=0)&&t(),i.metersPerUnit=e.settings.metersPerUnit);let o=new Set,a=e.items.map(s=>{(!n(s)||typeof s.id!="string"||!s.id||o.has(s.id)||typeof s.name!="string"||!s.name.trim()||typeof s.modelId!="string"||!s.modelId||!TE.includes(s.tool)||!Array.isArray(s.points)||s.points.length>8192||typeof s.createdAt!="string"||!Number.isFinite(Date.parse(s.createdAt)))&&t(),o.add(s.id),s.tilesetUrl!==void 0&&s.tilesetUrl!==null&&typeof s.tilesetUrl!="string"&&t(),(s.visible!==void 0&&typeof s.visible!="boolean"||s.approximate!==void 0&&typeof s.approximate!="boolean")&&t();let l=new Set,c=s.points.map(p=>{if((!n(p)||typeof p.id!="number"||!Number.isFinite(p.id)||!r(p.position))&&t(),l.has(p.id)&&t(),l.add(p.id),p.normal!==void 0&&!r(p.normal)&&t(),p.faceVertices!==void 0&&(!Array.isArray(p.faceVertices)||p.faceVertices.length!==3||!p.faceVertices.every(r))&&t(),p.snapped!==void 0&&!["vertex","edge"].includes(p.snapped)&&t(),p.anchor!==void 0){let f=p.anchor;(!n(f)||typeof f.nodeId!="string"||!f.nodeId||!r(f.localPosition)||typeof f.geometrySignature!="string"||typeof f.poseSignature!="string")&&t(),f.localNormal!==void 0&&!r(f.localNormal)&&t(),f.localFaceVertices!==void 0&&(!Array.isArray(f.localFaceVertices)||f.localFaceVertices.length!==3||!f.localFaceVertices.every(r))&&t(),f.instanceId!==void 0&&(!Number.isInteger(f.instanceId)||f.instanceId<0)&&t()}let u=p.anchor;return{id:p.id,position:[...p.position],...p.normal?{normal:[...p.normal]}:{},...p.faceVertices?{faceVertices:p.faceVertices.map(f=>[...f])}:{},...p.snapped?{snapped:p.snapped}:{},...u?{anchor:{nodeId:u.nodeId,localPosition:[...u.localPosition],geometrySignature:u.geometrySignature,poseSignature:u.poseSignature,...u.localNormal?{localNormal:[...u.localNormal]}:{},...u.localFaceVertices?{localFaceVertices:u.localFaceVertices.map(f=>[...f])}:{},...u.instanceId!==void 0?{instanceId:u.instanceId}:{}}}:{}}}),d={id:s.id,name:s.name,modelId:s.modelId,tool:s.tool,points:c,createdAt:s.createdAt,...s.tilesetUrl!==void 0?{tilesetUrl:s.tilesetUrl}:{},...s.visible!==void 0?{visible:s.visible}:{},...s.approximate!==void 0?{approximate:s.approximate}:{}};return ka(d.tool,c)||t(),d});return{settings:i,items:a}}function fd(e){return JSON.stringify({version:1,...Gi(e)},null,2)}function hd(e,t,n="m"){let r=Gi(e),i=new Map(t?.map(a=>[a.id,a])),o=a=>{let s=String(a??"");return/^[=+@-]/.test(s)&&(s=`'${s}`),`"${s.replace(/"/g,'""')}"`};return[["id","name","modelId","type","status","value","unit","createdAt"],...r.items.map(a=>{let s=i.get(a.id)??Ba(a,r.settings,n);return[a.id,a.name,a.modelId,a.tool,s.status,s.value,s.unit,a.createdAt]})].map(a=>a.map(o).join(",")).join(`\r
3665
- `)}function gd(e){if(!Array.isArray(e)||e.length>128)throw new Error("Invalid selections: expected up to 128 named selection sets.");let t=new Set;return e.map(n=>{if(!n||typeof n!="object"||typeof n.id!="string"||!n.id||t.has(n.id)||typeof n.name!="string"||!n.name.trim()||n.name.length>200||!Array.isArray(n.objectIds)||n.objectIds.length>1e5||n.objectIds.some(r=>typeof r!="string"||!r))throw new Error("Invalid selections: each set needs a unique id, a name, and model object ids.");return t.add(n.id),{id:n.id,name:n.name.trim(),objectIds:[...new Set(n.objectIds)]}})}var Wi=5*1024*1024,PE=["activeModelId","modelUrl","modelFormat","tilesetUrl","models","mergeModels","sceneConfig","isolation","multiSelectedKeys","activeAnnotation","annotationCategories","backgroundColor","shadows","cinematic","cameraControllerType","objectTransformSpace","arScaleMode","usdzUrl","measurements","measurementSettings","measurementUnit","measurementModelId"];function we(e,t){throw new Error(`Invalid viewer state at ${e}: ${t}`)}function Qt(e,t){(!e||typeof e!="object"||Array.isArray(e))&&we(t,"expected an object.")}function Kl(e,t){(!Array.isArray(e)||!e.every(n=>typeof n=="string"))&&we(t,"expected strings.")}function Pr(e,t,n){(!Array.isArray(e)||e.length!==t||!e.every(r=>typeof r=="number"&&Number.isFinite(r)))&&we(n,`expected ${t} finite numbers.`)}function AE(e){let t=new Set,n=0;function r(i,o,a){if((++n>2e5||a>64)&&we(o,"configuration is too complex."),i===null||typeof i=="string"||typeof i=="boolean"||typeof i=="number"&&Number.isFinite(i))return i;(typeof i!="object"||!i)&&we(o,"expected JSON data (finite numbers, no functions)."),t.has(i)&&we(o,"cyclic data."),!Array.isArray(i)&&Object.getPrototypeOf(i)!==Object.prototype&&Object.getPrototypeOf(i)!==null&&we(o,"expected plain JSON data."),t.add(i);let s=Array.isArray(i)?[]:{};for(let[l,c]of Object.entries(i))["__proto__","constructor","prototype"].includes(l)&&we(`${o}.${l}`,"reserved property."),c!==void 0?s[l]=r(c,`${o}.${l}`,a+1):Array.isArray(i)&&we(o,"undefined array entry.");return t.delete(i),s}return r(e,"state",0)}function Ci(e,t,n,r,i=!1,o){let a=e[t];if(a==null||a==="")return;typeof a!="string"&&we(n,"expected a URL.");let s=i?Do(a)??a:a;if(s.trim().startsWith("blob:")){if(i&&o){o.set(a,{source:s,path:n});return}we(n,i?"this image is temporary. Use getStateAsync() for JSON or createShareUrl() to include it.":"upload this model/environment asset to a durable URL before saving or sharing.")}if(s!==a&&(a=s,e[t]=s),i&&/^data:image\//i.test(a))return;let l;try{l=new URL(a,r??"https://relative.invalid/")}catch{we(n,"invalid asset URL.")}["http:","https:"].includes(l.protocol)||we(n,"use an HTTP(S) asset URL."),r&&(e[t]=l.href)}function EE(e,t){Qt(e,t),Pr(e.position,3,`${t}.position`),Pr(e.target,3,`${t}.target`),(typeof e.zoom!="number"||e.zoom<=0)&&we(t,"zoom must be positive."),e.fov!==null&&(typeof e.fov!="number"||e.fov<=0||e.fov>=180)&&we(t,"fov must be null or between 0 and 180.");for(let n of["azimuthAngle","polarAngle"])e[n]!==void 0&&typeof e[n]!="number"&&we(t,`${n} must be a number.`)}function $x(e,t,n,r){Qt(e,t),(typeof e.id!="number"||typeof e.title!="string"||typeof e.description!="string")&&we(t,"expected an annotation id, title and description.");for(let i of["worldPosition","localPosition"])Pr(e[i],3,`${t}.${i}`);e.images!==void 0&&(Array.isArray(e.images)||we(t,"images must be an array."),e.images.forEach(i=>{Qt(i,t),Ci(i,"src",t,n,!0,r)})),e.links!==void 0&&(Array.isArray(e.links)||we(t,"links must be an array."),e.links.forEach(i=>{Qt(i,t),Ci(i,"href",t,n,!1,r)}))}function Yx(e,t){Qt(e,t),e.waypoints!==void 0&&(Array.isArray(e.waypoints)||we(t,"expected waypoints."),e.waypoints.forEach(n=>{Qt(n,t),Pr(n.position,3,t),Pr(n.target,3,t)}));for(let n of["enabled","loop","autoPlay"])e[n]!==void 0&&typeof e[n]!="boolean"&&we(t,`${n} must be boolean.`);e.duration!==void 0&&(typeof e.duration!="number"||e.duration<=0)&&we(t,"duration must be positive.")}function Rh(e,t,n){if(t!==null)if(Array.isArray(t))Array.isArray(e)||we(n,"expected an array."),t.length&&e.forEach(r=>Rh(r,t[0],n));else if(typeof t=="object"){Qt(e,n);for(let[r,i]of Object.entries(t))Rh(e[r],i,`${n}.${r}`)}else typeof e!=typeof t&&we(n,`expected ${typeof t}.`)}function qx(e,t,n,r){if(Rh(e,dr,t),e.measurements!==void 0&&(e.measurements=Gi(e.measurements)),e.sequences!==void 0&&(e.sequences=Ro(e.sequences)),e.selectionSets!==void 0&&(e.selectionSets=gd(e.selectionSets)),Pr(e.model.rotation,3,`${t}.model.rotation`),e.lighting.lights.forEach(i=>Pr(i.position,3,`${t}.lighting.lights`)),e.annotations.forEach(i=>$x(i,`${t}.annotations`,n,r)),e.animations.autoplayClip!==null&&typeof e.animations.autoplayClip!="string"&&we(t,"invalid autoplay clip."),e.animations.clips.forEach(i=>{Qt(i,t),(typeof i.sourceName!="string"||typeof i.displayName!="string"||typeof i.hidden!="boolean"||typeof i.speed!="number"||!["repeat","once","ping-pong"].includes(i.loopMode))&&we(t,"invalid animation clip settings.")}),e.cinematic!==void 0&&Yx(e.cinematic,`${t}.cinematic`),e.styleRules!==void 0&&!Array.isArray(e.styleRules)&&we(t,"styleRules must be an array."),Ci(e.environment,"customEnvironmentUrl",`${t}.environment`,n,!1,r),Ci(e.background,"imageUrl",`${t}.background`,n,!0,r),e.model.activeVariants!==void 0&&Kl(e.model.activeVariants,t),e.section!==void 0)try{e.section=Bs(e.section)}catch(i){we(`${t}.section`,i.message)}}function Kx(e,t,n,r){Qt(e,t);for(let[i,o]of Object.entries(e)){let a=`${t}.${i}`;Qt(o,a),(typeof o.id!="string"||typeof o.modelObjectId!="string")&&we(a,"expected binding id and modelObjectId.");for(let s of["label","group","type","status"])o[s]!==void 0&&typeof o[s]!="string"&&we(a,`${s} must be a string.`);o.tags!==void 0&&Kl(o.tags,a),o.metadata!==void 0&&Qt(o.metadata,`${a}.metadata`),o.metrics!==void 0&&(Qt(o.metrics,a),Object.values(o.metrics).some(s=>typeof s!="number")&&we(a,"metrics must be numbers.")),o.actions!==void 0&&(Array.isArray(o.actions)||we(a,"actions must be an array."),o.actions.forEach(s=>{Qt(s,a),(typeof s.id!="string"||typeof s.label!="string"||s.type!=="command"||s.effects!==void 0&&!Array.isArray(s.effects))&&we(a,"invalid action.")}));for(let s of["visible","removed","selectable","hoverable"])o[s]!==void 0&&typeof o[s]!="boolean"&&we(a,`${s} must be boolean.`);if(o.transform!==void 0){Qt(o.transform,a);for(let s of["position","rotation","scale","shear"])o.transform[s]!==void 0&&Pr(o.transform[s],3,`${a}.transform.${s}`);o.transform.pivot!==void 0&&(Qt(o.transform.pivot,a),Pr(o.transform.pivot.point,3,a),Pr(o.transform.pivot.offset,3,a))}if(o.style!==void 0&&(Qt(o.style,a),o.style.material!==void 0)){Qt(o.style.material,a);for(let[s,l]of Object.entries(o.style.material))l&&typeof l=="object"&&!Array.isArray(l)&&"path"in l&&Ci(l,"path",`${a}.style.material.${s}.path`,n,!0,r)}o.decals!==void 0&&(Array.isArray(o.decals)||we(a,"decals must be an array."),o.decals.forEach(s=>{Qt(s,a),(typeof s.id!="string"||typeof s.size!="number"||s.size<=0)&&we(a,"invalid decal."),Pr(s.position,3,a),Pr(s.normal,3,a),Ci(s,"image",a,n,!0,r)}))}}function Xx(e,t,n,r){Array.isArray(e)||we(t,"expected merge sources."),e.forEach(i=>{Qt(i,t),(typeof i.url!="string"||!i.url||typeof i.namePrefix!="string")&&we(t,"expected source URL and prefix."),Ci(i,"url",t,n,!1,r)})}function RE(e,t,n){Qt(e,"configuration");let r=Object.fromEntries(PE.filter(i=>e[i]!==void 0).map(i=>[i,e[i]]));(typeof r.modelUrl!="string"||!r.modelUrl)&&we("configuration.modelUrl","expected the active model URL.");for(let i of["modelUrl","tilesetUrl","usdzUrl"])Ci(r,i,`configuration.${i}`,t,!1,n);if(r.sceneConfig!==void 0&&qx(r.sceneConfig,"configuration.sceneConfig",t,n),r.mergeModels!==void 0&&Xx(r.mergeModels,"configuration.mergeModels",t,n),r.models!==void 0){(!Array.isArray(r.models)||r.models.length===0)&&we("configuration.models","expected model entries.");let i=new Set,o=new Set;r.models.forEach(a=>{Qt(a,"model"),(typeof a.url!="string"||!a.url)&&we("model.url","expected a URL."),Ci(a,"url","model.url",t,!1,n),a.id!==void 0&&(typeof a.id!="string"||!a.id.trim())&&we("model.id","expected a nonempty instance ID.");let s=Ae({id:a.id,url:a.url});o.has(s)&&we("configuration.models","instance identities must be unique; assign IDs when reusing a URL."),o.add(s),a.transform!==void 0&&(a.transform=Lo(a.transform)),a.visible!==void 0&&typeof a.visible!="boolean"&&we("model.visible","expected boolean."),i.add(a.url),Kx(a.objectBindings,"model.objectBindings",t,n),a.sceneConfig!==void 0&&qx(a.sceneConfig,"model.sceneConfig",t,n),a.mergeModels!==void 0&&Xx(a.mergeModels,"model.mergeModels",t,n)}),r.activeModelId!==void 0&&(typeof r.activeModelId!="string"||!o.has(r.activeModelId))&&we("configuration.activeModelId","active instance is not in models."),r.activeModelId!==void 0&&r.models.find(a=>Ae(a)===r.activeModelId)?.url!==r.modelUrl&&we("configuration.modelUrl","source does not match the active instance."),i.has(r.modelUrl)||we("configuration.modelUrl","active model is not in models.")}if(r.multiSelectedKeys!==void 0&&Kl(r.multiSelectedKeys,"configuration.multiSelectedKeys"),r.annotationCategories!==void 0&&r.annotationCategories!==null&&Kl(r.annotationCategories,"configuration.annotationCategories"),r.activeAnnotation!==void 0&&r.activeAnnotation!==null&&$x(r.activeAnnotation,"configuration.activeAnnotation",t,n),r.measurements!==void 0||r.measurementSettings!==void 0){let i=Gi({items:r.measurements??[],settings:r.measurementSettings??{}});r.measurements!==void 0&&(r.measurements=i.items),r.measurementSettings!==void 0&&(r.measurementSettings=i.settings)}r.measurementModelId!==void 0&&typeof r.measurementModelId!="string"&&we("configuration.measurementModelId","expected a stable id."),r.measurementUnit!==void 0&&typeof r.measurementUnit!="string"&&we("configuration.measurementUnit","expected a unit label.");for(let i of["backgroundColor"])r[i]!==void 0&&typeof r[i]!="string"&&we(i,"expected a string.");r.shadows!==void 0&&typeof r.shadows!="boolean"&&we("shadows","expected boolean.");for(let[i,o]of Object.entries({modelFormat:["glb","gltf","obj","fbx","usdz","stl","ply"],cameraControllerType:["orbit","pointerLock"],objectTransformSpace:["world","local"],arScaleMode:["normalized","real-world"]}))r[i]!==void 0&&!o.includes(r[i])&&we(i,"unsupported value.");if(r.cinematic!==void 0&&Yx(r.cinematic,"cinematic"),r.isolation!==void 0&&r.isolation!==null){let{target:i,mode:o,ghostOpacity:a}=r.isolation;typeof i=="string"||Array.isArray(i)&&i.every(s=>typeof s=="string")||i&&typeof i=="object"&&["group","tag","type"].some(s=>typeof i[s]=="string")||we("configuration.isolation","invalid target."),o!==void 0&&!["ghost","hide"].includes(o)&&we("configuration.isolation","invalid mode."),a!==void 0&&(typeof a!="number"||a<0||a>1)&&we("configuration.isolation","opacity must be between 0 and 1.")}return r}function Zx(e,t,n,r){if(!(!e||typeof e!="object"))for(let[i,o]of Object.entries(e))i!=="metadata"&&(typeof o=="string"&&["url","modelUrl","tilesetUrl","usdzUrl","path","image","src","href","imageUrl","customEnvironmentUrl"].includes(i)?Ci(e,i,`${t}.${i}`,n,["path","image","src","imageUrl"].includes(i),r):Zx(o,`${t}.${i}`,n,r))}function Qx(e,t,n){typeof e=="string"&&(new TextEncoder().encode(e).length>Wi&&we("state","exceeds the 5 MiB limit."),e=JSON.parse(e));let r=AE(e);Qt(r,"state"),new TextEncoder().encode(JSON.stringify(r)).length>Wi&&we("state","exceeds the 5 MiB limit."),r.version!==void 0&&r.version!==1&&we("version","unsupported version."),r.version===void 0&&(r.objectBindings!==void 0||r.configuration!==void 0)&&we("version","full configurations require version 1.");let i={};return r.version!==void 0&&(i.version=1),r.camera!==void 0&&(EE(r.camera,"camera"),i.camera=r.camera),r.hidden!==void 0&&(Kl(r.hidden,"hidden"),i.hidden=r.hidden),r.selected!==void 0&&(r.selected!==null&&typeof r.selected!="string"&&we("selected","expected an object id or null."),i.selected=r.selected),r.objectBindings!==void 0&&(Kx(r.objectBindings,"objectBindings",t,n),i.objectBindings=r.objectBindings),r.configuration!==void 0&&(i.configuration=RE(r.configuration,t,n)),Zx(i,"state",t,n),new TextEncoder().encode(JSON.stringify(i)).length>Wi&&we("state","exceeds the 5 MiB limit."),i}function Na(e,t){return JSON.stringify(Ti(e,t))}function Ti(e,t){return Qx(e,t)}async function Io(e,t){let n=new Map,r=Qx(e,t,n),i=new Map,o=new Map;for(let[s,{source:l,path:c}]of n){let d=i.get(l);d||(d=(async()=>{let p;try{p=await fetch(l)}catch{we(c,"this temporary image is no longer available. Reload or reselect it before saving.")}p.ok||we(c,"could not read the temporary image. Reload or reselect it before saving.");let u=await p.blob();u.size>Wi*3/4&&we(c,"embedded image exceeds the 5 MiB configuration limit. Use a hosted image URL.");let f=new Uint8Array(await u.arrayBuffer()),m=u.type.split(";")[0].toLowerCase(),v=m.startsWith("image/")?m:OE(f);v||we(c,"temporary asset is not a supported image. Use a hosted asset URL.");let g="";for(let b=0;b<f.length;b+=32768)g+=String.fromCharCode(...f.subarray(b,b+32768));return`data:${v};base64,${btoa(g)}`})(),i.set(l,d)),o.set(s,await d)}function a(s){if(!(!s||typeof s!="object"))for(let[l,c]of Object.entries(s))l!=="metadata"&&(["path","image","src","imageUrl"].includes(l)&&typeof c=="string"&&o.has(c)?s[l]=o.get(c):a(c))}return a(r),Ti(r,t)}function OE(e){let t=(n,r)=>String.fromCharCode(...e.subarray(n,r));if(e[0]===137&&t(1,4)==="PNG")return"image/png";if(e[0]===255&&e[1]===216&&e[2]===255)return"image/jpeg";if(t(0,3)==="GIF")return"image/gif";if(t(0,4)==="RIFF"&&t(8,12)==="WEBP")return"image/webp";if(t(4,8)==="ftyp"&&["avif","avis"].includes(t(8,12)))return"image/avif";if(/<svg[\s>]/i.test(new TextDecoder().decode(e.subarray(0,1024))))return"image/svg+xml"}var Oh="ri-ar",Dh="ri-ar-id",Jx=4096,DE=2200,LE=(0,qi.strToU8)(JSON.stringify(dr)).byteLength;function e0(e){return e==="localhost"||e.endsWith(".localhost")||/^127\./.test(e)||e==="[::1]"||e==="0.0.0.0"}function t0(e){if(typeof e=="string"&&/^https?:\/\//i.test(e)&&e0(new URL(e).hostname))throw new Error("An asset URL points to this computer. Use model and texture URLs reachable from the phone.");if(e&&typeof e=="object")for(let t of Object.values(e))t0(t)}function bd(e){return e&&typeof e=="object"?e:void 0}function yd(e,t){let n=new URL(e,t);if(!["https:","http:"].includes(n.protocol))throw new Error("AR handoff requires an HTTP(S) URL.");return n.toString()}function n0(e,t="",n=2048){let r=new Set,i=o=>{if(typeof o=="string")return Do(o)??o;if(o===null||typeof o!="object")return o;if(r.has(o))throw new Error("AR configuration cannot contain cycles.");r.add(o);let a=Array.isArray(o)?o.map(i):Object.fromEntries(Object.keys(o).sort().map(s=>[s,i(o[s])]));return r.delete(o),a};return JSON.stringify([t,n,i({...e,camera:void 0})])}function r0(e,t){if(JSON.stringify(e)!==JSON.stringify(t))return e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)?Object.fromEntries(Object.entries(e).map(([n,r])=>[n,r0(r,t[n])]).filter(([,n])=>n!==void 0)):e}function i0(e,t,n=0){if(n>64)throw new Error("AR configuration is too deeply nested.");if(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)){let r=e,i=t;return Object.fromEntries([...new Set([...Object.keys(i),...Object.keys(r)])].map(o=>[o,Object.prototype.hasOwnProperty.call(r,o)?i0(r[o],i[o],n+1):i[o]]))}return e}function o0(e,t){let n=structuredClone(e);if(n.configuration){n.configuration.sceneConfig&&(n.configuration.sceneConfig=t(n.configuration.sceneConfig));for(let r of n.configuration.models??[])r.sceneConfig&&(r.sceneConfig=t(r.sceneConfig))}return n}function Zl(e){e?.throwIfAborted()}async function vd(e,t,n,r){Zl(r);let i=new URL(yd(t));if(e0(i.hostname))throw new Error("Phone links need a viewer URL reachable from your phone. Download the USDZ for local uploads, or provide a public viewer URL.");let o=await Io(e,i.toString());Zl(r),t0(o);let a=new URLSearchParams(i.hash.slice(1));if(a.delete(Oh),a.delete(Dh),a.delete("view"),a.delete("viewId"),a.delete("view-id"),n){let s=await n.save(o);if(Zl(r),typeof s!="string"||!s||s.length>512)throw new Error("AR storage returned an invalid configuration ID.");a.set(Dh,s)}else{let s=(0,qi.zlibSync)((0,qi.strToU8)(JSON.stringify({ar:1,state:o0(o,c=>r0(c,dr)??{})})),{level:9});if(s.byteLength>Jx)throw new Error("This configuration needs an AR storage adapter to share on a phone. The USDZ download is still available.");let l="";for(let c of s)l+=String.fromCharCode(c);a.set(Oh,btoa(l).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""))}if(i.hash=a.toString(),i.toString().length>DE)throw new Error("This configuration is too large for a reliable QR code. Use an AR storage adapter or download the USDZ.");return i.toString()}async function xd(e,t,n){let r=new URL(e),i=new URLSearchParams(r.hash.slice(1)),o=i.get(Dh),a=i.get(Oh);if(o!==null&&a!==null)throw new Error("AR link contains conflicting configurations.");if(o===null&&a===null)return null;Zl(n);let s;if(o!==null){if(!t)throw new Error("This AR link requires the application's configuration storage adapter.");if(!o||o.length>512)throw new Error("Invalid AR configuration ID.");s=await t.load(o)}else{if(!a||a.length>Math.ceil(Jx*4/3)||!/^[\w-]+$/.test(a))throw new Error("Invalid or oversized AR link.");let c=atob(a.replace(/-/g,"+").replace(/_/g,"/")),d=Uint8Array.from(c,f=>f.charCodeAt(0)),p=(0,qi.unzlibSync)(d);if(p.byteLength>Wi)throw new Error("AR configuration exceeds the 5 MiB limit.");let u=JSON.parse((0,qi.strFromU8)(p));if(u?.ar===1&&u.state){let f=u.state.configuration,m=(f?.sceneConfig?1:0)+(Array.isArray(f?.models)?f.models.filter(v=>v?.sceneConfig).length:0);if(p.byteLength+m*LE>Wi)throw new Error("Expanded AR configuration exceeds the 5 MiB limit.");s=o0(u.state,v=>i0(v,dr))}else s=u}Zl(n);let l=Ti(s,r.toString());if(l.version!==1||!l.configuration)throw new Error("AR handoff requires a complete versioned viewer configuration.");return l}function a0(e,t){if(!e?.configuration)return e;let n=e.configuration,r=n.models?.find(o=>Ae(o)===t||o.url===t);if(!r)return e;let i=n.activeModelId??n.modelUrl;return{...e,objectBindings:r.objectBindings,configuration:{...n,models:n.models?.map(o=>Ae(o)===i?{...o,sceneConfig:n.sceneConfig,objectBindings:e.objectBindings??o.objectBindings}:o),activeModelId:Ae(r),modelUrl:r.url,sceneConfig:r.sceneConfig??n.sceneConfig}}}function s0(e){let[t,n]=(0,Xi.useState)(null),[r,i]=(0,Xi.useState)(null),o=bd(e.arHandoff),a=!!e.arHandoff&&o?.autoRestore!==!1,s=o?.storage,l=`${e.modelUrl}
3666
- ${e.activeModelId??""}`,c=(0,Xi.useRef)(l);c.current=l;let d=(0,Xi.useRef)(l);if((0,Xi.useEffect)(()=>{l!==d.current&&(d.current=l,n(null))},[l]),(0,Xi.useEffect)(()=>{if(!a||typeof window>"u"){n(null),i(null);return}let u,f=()=>{u?.abort(),u=new AbortController;let m=u.signal,v=c.current;i(null),xd(window.location.href,s,m).then(g=>{!m.aborted&&c.current===v&&n(g)}).catch(g=>{!m.aborted&&c.current===v&&(n(null),i(g instanceof Error?g.message:"Could not restore the AR configuration."))})};return f(),window.addEventListener("hashchange",f),()=>{u?.abort(),window.removeEventListener("hashchange",f)}},[a,s]),!t?.configuration)return{props:e,error:r};let p=t.configuration;return{error:r,props:{...e,...p,objectBindings:t.objectBindings??e.objectBindings,onObjectBindingsChange:u=>{n(f=>f?.configuration?{...f,objectBindings:u,configuration:{...f.configuration,models:f.configuration.models?.map(m=>Ae(m)===(f.configuration?.activeModelId??f.configuration?.modelUrl)?{...m,objectBindings:u}:m)}}:f),e.onObjectBindingsChange?.(u)},onSceneConfigChange:u=>{n(f=>f?.configuration?{...f,configuration:{...f.configuration,sceneConfig:u}}:f),e.onSceneConfigChange?.(u)},onIsolationChange:u=>{n(f=>f?.configuration?{...f,configuration:{...f.configuration,isolation:u}}:f),e.onIsolationChange?.(u)},onActiveModelChange:u=>{n(f=>a0(f,u)),e.onActiveModelChange?.(u)},onModelChange:u=>{n(f=>a0(f,u)),e.onModelChange?.(u)}}}}var mn=require("react");var Lh=new WeakMap;function Ih(e,t){t?Lh.set(e,t):Lh.delete(e)}function wd(e){e.traverse(t=>{let n=Lh.get(t);if(n)throw new Error(n)})}var Dt=require("three");function IE(e,t={}){t.signal?.throwIfAborted();let n=new Dt.Group,r=new Dt.Group;n.add(r);let i=new Set,o=[],a=[],s=[],l=new Map,c=0,d=0,p=()=>{o.forEach(u=>u.dispose()),a.forEach(u=>u.dispose()),s.forEach(u=>u.dispose())};try{for(let{scene:g,objectBindings:b={},materialOverrides:h={}}of e){wd(g),g.updateWorldMatrix(!0,!0);let y=new Map(Object.entries(b).map(([w,T])=>[T.modelObjectId??w,w]));g.traverse(w=>{let T=w;if(!T.isMesh||!T.geometry)return;for(let _=w;_;_=_.parent){let C=ur(_)??_.name??_.uuid;if(!_.visible||b[y.get(C)??C]?.visible===!1||b[y.get(C)??C]?.removed)return}let x=ur(T)??T.name??T.uuid,D=h[y.get(x)??x]??T.material;if(!D)throw new Error(`Material for ${x} is not ready. Wait for the model to finish loading.`);let A=Array.isArray(D)?D:[D],S=T.isInstancedMesh?T.count:1;if(T.userData.riDecal&&Kt(T)&&T.parent){let _=Oa(T.parent);_&&T.bindMatrixInverse.copy(_)}let M=Kt(T)?rd(T):T.geometry.clone();try{if(!Kt(T)&&T.morphTargetInfluences?.some(E=>E!==0)){let E=M.getAttribute("position"),L=new Dt.Vector3;for(let k=0;k<E.count;k++)T.getVertexPosition(k,L),E.setXYZ(k,L.x,L.y,L.z);M.morphAttributes={},M.computeVertexNormals()}if(!M.getAttribute("position"))throw new Error(`Mesh ${x} has no positions.`);let _=M.index?.count??M.getAttribute("position").count,C=Array.isArray(D)?M.groups:[{start:0,count:_,materialIndex:0}];if(!C.length)throw new Error(`Mesh ${x} has multiple materials without geometry groups.`);for(let E=0;E<S;E++){let L=T.matrixWorld.clone();if(T.isInstancedMesh){let k=new Dt.Matrix4;T.getMatrixAt(E,k),L.multiply(k)}for(let k of C){let B=A[k.materialIndex??0];if(!B)throw new Error(`A material group on ${x} is missing its material.`);if(!B.visible)continue;let j=B;if(!j.isMeshStandardMaterial||j.wireframe||j.vertexColors)throw new Error(`AR snapshot cannot preserve ${B.type}${j.wireframe?" wireframe":j.vertexColors?" vertex colors":""} on ${x}. Use a PBR material or provide arHandoff.createUSDZ.`);let R=Math.max(k.start,M.drawRange.start),O=Math.min(_,k.start+k.count,M.drawRange.start+M.drawRange.count);if(O<=R)continue;if(R%3||(O-R)%3)throw new Error(`Mesh ${x} has an incomplete triangle range.`);let N=new Dt.BufferGeometry;o.push(N);let H=Array.from({length:O-R},(G,J)=>M.index?M.index.getX(R+J):R+J);if(L.determinant()<0)for(let G=0;G<H.length;G+=3)[H[G+1],H[G+2]]=[H[G+2],H[G+1]];for(let[G,J]of Object.entries(M.attributes)){let ee=new Float32Array(H.length*J.itemSize);for(let fe=0;fe<H.length;fe++)for(let K=0;K<J.itemSize;K++)ee[fe*J.itemSize+K]=J.getComponent(H[fe],K);N.setAttribute(G,new Dt.BufferAttribute(ee,J.itemSize))}N.setIndex(H.map((G,J)=>J)),N.applyMatrix4(L);let Y=N.getAttribute("position");for(let G=0;G<Y.count;G++)if(![Y.getX(G),Y.getY(G),Y.getZ(G)].every(Number.isFinite))throw new Error(`Mesh ${x} contains invalid coordinates.`);N.getAttribute("normal")||N.computeVertexNormals();let ue=j.clone();a.push(ue);let be=j.userData.reactImmersiveConfiguredEmissive;if(be?.isColor&&ue.emissive.copy(be),ue.side===Dt.DoubleSide){let G=N.toNonIndexed();o.push(G);let J=G.getAttribute("position").count,ee=new Dt.BufferGeometry;o.push(ee);for(let[fe,K]of Object.entries(G.attributes)){let oe=new Float32Array(J*K.itemSize*2);for(let ae=0;ae<J;ae++)for(let pe=0;pe<K.itemSize;pe++){oe[ae*K.itemSize+pe]=K.getComponent(ae,pe);let De=Math.floor(ae/3)*3+(2-ae%3);oe[(J+ae)*K.itemSize+pe]=K.getComponent(De,pe)*(fe==="normal"?-1:1)}ee.setAttribute(fe,new Dt.BufferAttribute(oe,K.itemSize))}ue.side=Dt.FrontSide,N.copy(ee)}else if(ue.side!==Dt.FrontSide){let G=N.getIndex();for(let ee=0;ee<G.count;ee+=3){let fe=G.getX(ee+1);G.setX(ee+1,G.getX(ee+2)),G.setX(ee+2,fe)}let J=N.getAttribute("normal");for(let ee=0;ee<J.count;ee++)J.setXYZ(ee,-J.getX(ee),-J.getY(ee),-J.getZ(ee));ue.side=Dt.FrontSide}if(T.isInstancedMesh&&T.instanceColor){let G=new Dt.Color;T.getColorAt(E,G),ue.color.multiply(G)}for(let[G,J]of Object.entries(ue)){if(!J?.isTexture)continue;let ee=J;if(Lx(ee)||!ee.image||ee.image.complete===!1)throw new Error(`Texture on ${x} is not ready. Wait for image loading or replace failed textures before preparing AR.`);let fe=l.get(ee);if(fe||(fe=ee.clone(),l.set(ee,fe),s.push(fe)),ue[G]=fe,!N.getAttribute(fe.channel?`uv${fe.channel}`:"uv"))throw new Error(`Texture on ${x} needs UV coordinates missing from this geometry.`)}if(T.userData.riDecal){N.computeBoundingBox();let G=Math.max(1e-6,N.boundingBox.getSize(new Dt.Vector3).length()*1e-4),J=N.getAttribute("position"),ee=N.getAttribute("normal");for(let fe=0;fe<J.count;fe++)J.setXYZ(fe,J.getX(fe)+ee.getX(fe)*G,J.getY(fe)+ee.getY(fe)*G,J.getZ(fe)+ee.getZ(fe)*G)}let X=new Dt.Mesh(N,ue);X.name=`AR_${c++}`,r.add(X),d+=(N.index?.count??N.getAttribute("position").count)/3,(ue.clearcoat||ue.transmission||ue.iridescence||ue.anisotropy)&&i.add("Advanced PBR effects may look different in Quick Look.")}}}finally{M.dispose()}})}if(!c||!d)throw new Error("There is no visible model geometry to send to AR.");let u=new Dt.Box3().setFromObject(r),f=u.getSize(new Dt.Vector3),m=u.getCenter(new Dt.Vector3),v=t.scaleMode==="real-world"?1:1/Math.max(f.x,f.y,f.z,1e-9);return r.position.set(-m.x*v,-u.min.y*v,-m.z*v),r.scale.setScalar(v),n.updateMatrixWorld(!0),i.add("USDZ is a static snapshot. Viewer lighting, background, post-processing, annotations and measurement overlays stay in the web viewer."),{root:n,meshCount:c,triangleCount:d,scale:v,warnings:[...i],textures:s,dispose:p}}catch(u){throw p(),u}}async function Sd(e,t={}){let n=t.maxTextureSize??2048;if(!Number.isInteger(n)||n<256||n>4096)throw new Error("AR maxTextureSize must be an integer from 256 to 4096.");let r=IE(e,t),i=[];try{let{USDZExporter:o}=await import("three/examples/jsm/exporters/USDZExporter.js");t.signal?.throwIfAborted();for(let s of r.textures){if(!s.isCompressedTexture)continue;let{decompress:l}=await import("three/examples/jsm/utils/WebGLTextureUtils.js"),c=l(s,n);i.push(c),r.root.traverse(d=>{let p=d.material;if(p)for(let u of Object.keys(p))p[u]===s&&(p[u]=c)})}let a=await new o().parseAsync(r.root,{onlyVisible:!0,quickLookCompatible:!0,maxTextureSize:n});return t.signal?.throwIfAborted(),{blob:new Blob([new Uint8Array(a)],{type:"model/vnd.usdz+zip"}),meshCount:r.meshCount,triangleCount:r.triangleCount,scale:r.scale,warnings:r.warnings}}catch(o){throw t.signal?.aborted?o:new Error(`Could not prepare the configured USDZ: ${o instanceof Error?o.message:"export failed"}. Textures must allow cross-origin canvas access.`)}finally{r.dispose(),i.forEach(o=>o.dispose())}}function l0({enabled:e,options:t,state:n,getSources:r,baseUrl:i,revision:o=""}){let a,s=!1;try{a=e?n0(n,t?.assetVersion,t?.maxTextureSize)+(i??"")+o:"disabled"}catch{s=!0,a="invalid-configuration"+(t?.assetVersion??"")+o}let[l,c]=(0,mn.useState)(!1),[d,p]=(0,mn.useState)(!1),[u,f]=(0,mn.useState)(null),m=(0,mn.useRef)(null),v=(0,mn.useRef)(!1),g=(0,mn.useRef)(null),b=(0,mn.useRef)(null),h=(0,mn.useRef)({key:a,state:n,options:t,getSources:r,baseUrl:i,enabled:e,invalidConfiguration:s});h.current={key:a,state:n,options:t,getSources:r,baseUrl:i,enabled:e,invalidConfiguration:s};let y=(0,mn.useCallback)(()=>{g.current&&URL.revokeObjectURL(g.current),g.current=null},[]);(0,mn.useEffect)(()=>{m.current?.abort(),v.current=!1,p(!1),y(),f(S=>e&&S?{key:S.key,invalidated:!0,warnings:[]}:null),e||c(!1)},[a,e,y]),(0,mn.useEffect)(()=>()=>{m.current?.abort(),y()},[y]);let w=e&&!u?.invalidated&&u?.key===a,T=w&&!!(u.usdzUrl||u.phoneUrl),x=d?"preparing":e?u&&!w?"stale":w?T?"ready":"error":"idle":"idle";(0,mn.useEffect)(()=>{h.current.options?.onStatusChange?.(x)},[x]);let D=(0,mn.useCallback)(()=>{m.current?.abort(),v.current&&(f(null),y()),v.current=!1,p(!1),c(!1)},[y]),A=(0,mn.useCallback)(async()=>{let S=h.current;if(!S.enabled)return;m.current?.abort(),y(),f(null),p(!0),v.current=!0;let M=new AbortController;m.current=M;let _=()=>!M.signal.aborted&&h.current.key===S.key&&h.current.enabled,C=O=>{_()&&f(N=>({...N?.key===S.key&&!N.invalidated?N:{key:S.key,warnings:[]},...O}))},E;try{if(S.invalidConfiguration)throw new Error("Invalid configuration");E=structuredClone(S.state)}catch{let O=new Error("Configuration contains data that cannot be copied for AR. Use JSON-compatible binding metadata.");v.current=!1,p(!1),C({exportError:O.message}),S.options?.onError?.(O);return}let L,k={configurationKey:S.key,state:E,signal:M.signal,exportUSDZ:()=>L??(L=Promise.resolve().then(()=>Sd(S.getSources(),{scaleMode:S.state.configuration?.arScaleMode,maxTextureSize:S.options?.maxTextureSize,signal:M.signal})))},B=[],j=async()=>{try{let O=S.options?.createUSDZ?await S.options.createUSDZ(k):(await k.exportUSDZ()).blob,N=L?await L.then(Y=>Y.warnings,()=>[]):[];if(!_())return;let H;if(typeof O=="string")H=yd(O,window.location.href);else if(O instanceof Blob&&O.size>0)H=URL.createObjectURL(O),g.current=H;else throw new Error("The USDZ adapter returned an empty asset.");C({usdzUrl:H,warnings:N})}catch(O){let N=O instanceof Error?O.message:String(O);B.push(N),C({exportError:N})}},R=async()=>{try{let O=S.options?.createMobileUrl?await S.options.createMobileUrl(k):await Io(k.state,window.location.href).then(H=>vd(H,S.baseUrl||window.location.href,S.options?.storage,M.signal));if(!_())return;let N=yd(O,window.location.href);if(N.length>2200)throw new Error("The phone link is too long for a reliable QR code.");C({phoneUrl:N})}catch(O){let N=O instanceof Error?O.message:String(O);!S.options?.createMobileUrl&&N.includes("durable URL")&&(N="QR sharing isn\u2019t available for local uploads. Download the USDZ and send it to your phone."),!S.options?.createMobileUrl&&(N.includes("reachable from your phone")||N.includes("asset URL points to this computer"))&&(N="QR sharing needs a viewer page and model files your phone can reach. Use an online viewer, or download the USDZ."),B.push(N),C({linkError:N})}};await Promise.all([j(),R()]),_()&&(v.current=!1,p(!1),B.length&&S.options?.onError?.(new Error(B.join(`
3667
- `))))},[y]);return(0,mn.useEffect)(()=>{if(!e||!l){b.current=null;return}T||d||b.current===a||(b.current=a,A())},[e,l,a,T,d,A]),{open:e&&l,show:()=>c(!0),close:D,prepare:A,status:x,busy:d,prepared:w?u:null}}var js=require("react"),d0=require("qrcode.react"),Pi=require("lucide-react");function kh(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function Ql(){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 c0(){return kh()||Ql()}function kE(){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=kh();return t||o||r&&n||r&&i}function Jl(){if(!kE())return!1;if(kh())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function u0(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return Jl()}}var bt=require("react/jsx-runtime");function p0({handoff:e,filename:t,onQuickLook:n}){let r=_e(),i=(0,js.useId)(),o=(0,js.useRef)(null),a=e.close;(0,js.useEffect)(()=>{let l=document.activeElement;o.current?.focus();let c=d=>{if(d.key==="Escape"&&(d.preventDefault(),a()),d.key!=="Tab")return;let p=Array.from(o.current.querySelectorAll("button:not(:disabled), a[href], summary")),u=p[0],f=p[p.length-1];d.shiftKey&&(document.activeElement===u||document.activeElement===o.current)?(d.preventDefault(),f?.focus()):!d.shiftKey&&(document.activeElement===f||document.activeElement===o.current)&&(d.preventDefault(),u?.focus())};return document.addEventListener("keydown",c),()=>{document.removeEventListener("keydown",c),l?.focus()}},[a]);let s=e.prepared;return(0,bt.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:l=>{l.target===l.currentTarget&&a()},children:(0,bt.jsxs)("section",{ref:o,tabIndex:-1,className:"ri-mobileHandoffDialog ri-configuredARDialog",role:"dialog","aria-modal":"true","aria-labelledby":i,"aria-busy":e.busy&&!s?.phoneUrl&&!s?.usdzUrl,children:[(0,bt.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:a,"aria-label":r("closePhoneHandoff"),children:(0,bt.jsx)(Pi.X,{size:18})}),(0,bt.jsx)(Pi.Smartphone,{size:22,"aria-hidden":"true"}),(0,bt.jsx)("h2",{id:i,children:r("arConfiguredTitle")}),(0,bt.jsx)("p",{children:r("arConfiguredDescription")}),(0,bt.jsx)("div",{role:"status","aria-live":"polite",className:"ri-configuredARProgress",children:(e.busy||e.status==="idle"||e.status==="stale")&&(0,bt.jsxs)("p",{children:[(0,bt.jsx)(Pi.LoaderCircle,{size:16,"aria-hidden":"true"}),r("arPreparing")]})}),s?.phoneUrl&&(0,bt.jsxs)(bt.Fragment,{children:[(0,bt.jsx)("p",{children:r("arScanConfigured")}),(0,bt.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,bt.jsx)(d0.QRCodeSVG,{value:s.phoneUrl,size:208,level:"M",marginSize:4,title:r("qrCodeToOpenThisModelOnAPhone")})}),(0,bt.jsx)("a",{href:s.phoneUrl,target:"_blank",rel:"noopener noreferrer",children:r("arOpenConfiguredLink")})]}),s?.usdzUrl&&(0,bt.jsxs)("div",{className:"ri-configuredARActions",children:[Ql()&&(0,bt.jsxs)("a",{rel:"ar",className:"ri-configuredARLaunch",href:s.usdzUrl,onClick:n,children:[(0,bt.jsx)("img",{alt:"",width:"1",height:"1",src:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="}),r("viewInAR")]}),(0,bt.jsxs)("a",{href:s.usdzUrl,download:`${t}-configured.usdz`,children:[(0,bt.jsx)(Pi.Download,{size:14}),r("arDownloadUSDZ")]})]}),s?.exportError&&(0,bt.jsx)("p",{role:"alert",children:s.exportError}),s?.linkError&&(0,bt.jsx)("p",{role:"status",children:s.linkError}),!e.busy&&(e.status==="ready"||e.status==="error")&&(0,bt.jsxs)("button",{type:"button",className:"ri-configuredARRefresh",onClick:()=>{e.prepare()},children:[(0,bt.jsx)(Pi.RefreshCw,{size:14,"aria-hidden":"true"}),e.status==="error"?r("arRetry"):r("arRefresh")]}),!!s?.warnings.length&&(0,bt.jsxs)("details",{className:"ri-configuredARDetails",children:[(0,bt.jsx)("summary",{children:r("arExportDetails")}),s.warnings.map(l=>(0,bt.jsx)("p",{className:"ri-configuredARNote",children:l},l))]})]})})}var Va=require("three"),BE=new Set(["KHR_binary_glTF","KHR_draco_mesh_compression","KHR_lights_punctual","KHR_materials_clearcoat","KHR_materials_dispersion","KHR_materials_ior","KHR_materials_sheen","KHR_materials_specular","KHR_materials_transmission","KHR_materials_iridescence","KHR_materials_anisotropy","KHR_materials_unlit","KHR_materials_volume","KHR_texture_basisu","KHR_texture_transform","KHR_mesh_quantization","KHR_materials_emissive_strength","KHR_materials_variants","EXT_materials_bump","EXT_texture_webp","EXT_texture_avif","EXT_meshopt_compression","EXT_mesh_gpu_instancing"]),m0=new WeakMap;function ec(e,t){m0.set(e,structuredClone(t))}function Us(e){let t=m0.get(e);return t?structuredClone(t):void 0}function ja(e){if(/^(blob|data):/i.test(e))return"Local resource";let t=e.split(/[?#]/,1)[0].replace(/\\/g,"/");return t.slice(t.lastIndexOf("/")+1).slice(0,300)||"Resource"}function Bh(e){return/^(blob|data):/i.test(e)?"Local resource":e.split(/[?#]/,1)[0].replace(/\\/g,"/").replace(/^[a-z][a-z0-9+.-]*:\/\/[^/]*/i,"").replace(/^\/+/,"").slice(0,500)||"Resource"}function f0(e){let t=n=>typeof n=="number"&&Number.isFinite(n)&&n>=0?n:null;return{...e.format?{format:e.format}:{},...e.name?{name:ja(e.name)}:{},sourceBytes:t(e.sourceBytes),loadDurationMs:t(e.loadDurationMs),extensionsUsed:[...new Set(e.extensionsUsed??[])].sort(),extensionsRequired:[...new Set(e.extensionsRequired??[])].sort(),failedResources:[...new Set((e.failedResources??[]).map(Bh))].slice(0,50)}}function h0(e){let t=new Set(e.extensionsRequired);return[...new Set([...e.extensionsUsed??[],...t])].sort().map(n=>({name:n,required:t.has(n),recognized:BE.has(n)}))}function NE(e,t){let n=e.image,r=c=>typeof c=="number"&&Number.isSafeInteger(c)&&c>0?c:null,i=r(n?.naturalWidth??n?.width),o=r(n?.naturalHeight??n?.height),a=!!e.isCompressedTexture,s=e.mipmaps.reduce((c,d)=>c+(d.data?.byteLength??0),0),l=i&&o?Math.ceil(i*o*4*(e.generateMipmaps?4/3:1)):null;return{name:e.name?ja(e.name):t,width:i,height:o,compressed:a,estimatedBytes:a?s||null:l!==null&&Number.isSafeInteger(l)?l:null}}function Md(e,t={}){let n=f0({...Us(e),...t.source}),r=[],i=new Set,o=new Map,a=new Set,s=new Map,l=new Map,c=new Set,d=new Map,p=0,u=0,f=0,m=0,v=0,g=(S,M)=>{let _=d.get(S)??{count:0,names:[]};_.count++,_.names.length<20&&_.names.push(M||"Unnamed object"),d.set(S,_)},b=S=>{let M=S?.array??S?.data?.array;M?.buffer&&!c.has(M.buffer)&&(c.add(M.buffer),v+=M.buffer.byteLength)};e.traverse(S=>{let M=S;if(!M.isMesh||!M.geometry)return;p++,u+=M.isInstancedMesh?Number.isSafeInteger(M.count)?Math.max(0,M.count??0):0:1;let _=M.geometry,C=_.getAttribute("position"),E=_.getAttribute("uv"),L=M.material?Array.isArray(M.material)?M.material:[M.material]:[];if(!o.has(_)){let B=!!C&&(!Number.isSafeInteger(C.count)||C.count<0);for(let j=0;!B&&C&&j<C.count;j++)if(!Number.isFinite(C.getX(j))||!Number.isFinite(C.getY(j))||!Number.isFinite(C.getZ(j))){B=!0;break}o.set(_,B)}if(o.get(_)&&g("invalid-positions",S.name),C?.count||g("empty-geometry",S.name),E||g("missing-uv",S.name),_.getAttribute("normal")||g("missing-normals",S.name),_.boundingBox&&[..._.boundingBox.min.toArray(),..._.boundingBox.max.toArray()].some(B=>!Number.isFinite(B))&&g("invalid-bounds",S.name),!i.has(_)){i.add(_),f+=Number.isSafeInteger(C?.count)?Math.max(0,C?.count??0):0;let B=_.index?.count??C?.count??0;m+=Number.isSafeInteger(B)?Math.floor(Math.max(0,B)/3):0,Object.values(_.attributes).forEach(b),Object.values(_.morphAttributes).flat().forEach(b),b(_.index)}let k=!1;for(let B of L){a.add(B);let j=s.get(B);if(!j){j=Object.values(B).filter(R=>!!R&&R.isTexture===!0),s.set(B,j);for(let R of j)l.has(R)||l.set(R,`Texture ${l.size+1}`)}for(let R of j){let O=R.channel??0;_.getAttribute(O===0?"uv":`uv${O}`)||(k=!0)}}k&&g("textured-missing-uv",S.name)});let h=(S,M,_,C,E)=>{let L=d.get(S);L&&r.push({code:S,severity:M,title:_,detail:C,suggestion:E,count:L.count,objects:L.names})};h("empty-geometry","error","Empty mesh geometry","Some meshes have no position data.","Remove empty meshes or export their geometry again."),h("invalid-positions","error","Invalid vertex coordinates","Some vertices contain non-finite coordinates.","Repair NaN or infinite vertex positions in the source application, then re-export."),h("invalid-bounds","error","Invalid geometry bounds","Some cached bounds contain non-finite values.","Repair invalid coordinates in the source application and re-export."),h("textured-missing-uv","warning","Textures have no matching UV coordinates","A texture references a UV channel that its mesh does not contain.","Unwrap the affected meshes and export the UV channel used by each texture."),h("missing-uv","info","Meshes without UVs","Solid colors can work without UVs; image textures and surface decals need them.","Add a UV map before applying image textures or decals."),h("missing-normals","info","Meshes without normals","Some loaded meshes lack vertex normals; generated shading may differ from the source.","Export vertex normals to preserve hard edges and smooth surfaces."),p||r.push({code:"no-meshes",severity:"warning",title:"No mesh geometry found",detail:"This scene contains no loaded meshes.",suggestion:"Check that meshes were included in the export. Streamed scenes may still be loading."});let y=[...l].map(([S,M])=>NE(S,M)),w=y.filter(S=>(S.width??0)>4096||(S.height??0)>4096);w.length&&r.push({code:"large-textures",severity:"warning",title:"Large texture dimensions",detail:"Some textures exceed 4096 pixels on one side.",suggestion:"Resize textures for the visible detail needed; use KTX2/Basis where appropriate.",count:w.length,objects:w.slice(0,20).map(S=>S.name)}),m>1e6&&r.push({code:"high-triangle-count",severity:"warning",title:"High geometry count",detail:"The loaded geometry contains more than one million unique triangles.",suggestion:"Simplify hidden detail, create lower-detail exports, or use streamed assets for large scenes."}),a.size>100&&r.push({code:"many-materials",severity:"warning",title:"Many material definitions",detail:"More than 100 materials can increase rendering work.",suggestion:"Reuse materials and atlas compatible textures; inspect runtime draw calls to confirm the cost."});let T=h0(n);for(let S of T.filter(M=>!M.recognized))r.push({code:"unrecognized-extension",severity:S.required?"error":"warning",title:`${S.required?"Required":"Optional"} extension not recognized`,detail:S.name,suggestion:"Export with extensions supported by the bundled loader, or verify the asset's fallback appearance."});n.failedResources?.length&&r.push({code:"failed-resources",severity:"error",title:"Some resources failed to load",detail:"The model may be missing textures or other referenced resources.",suggestion:"Include sidecar files in the ZIP, correct their paths, and check HTTP access and CORS.",count:n.failedResources.length,objects:n.failedResources.slice(0,20)});let x=null,D=[...o.values()].some(Boolean)?new Va.Box3:new Va.Box3().setFromObject(e);!D.isEmpty()&&[...D.min.toArray(),...D.max.toArray(),...D.getSize(new Va.Vector3).toArray()].every(Number.isFinite)&&(x={min:D.min.toArray(),max:D.max.toArray(),center:D.getCenter(new Va.Vector3).toArray(),size:D.getSize(new Va.Vector3).toArray()}),t.scope==="resident-tiles"&&r.unshift({code:"partial-stream",severity:"info",title:"Loaded tiles only",detail:"Geometry and texture counts cover the current resident tiles, not the entire source asset.",suggestion:"Use the live cache/detail statistics to inspect streaming pressure. Rescan after moving the camera."});let A=S=>S.code==="partial-stream"?-1:S.severity==="error"?0:S.severity==="warning"?1:2;return r.sort((S,M)=>A(S)-A(M)),{version:1,status:"ready",scope:t.scope??"asset",source:n,units:n.format==="glb"||n.format==="gltf"?"meters (glTF convention)":"unknown",bounds:x,statistics:{meshes:p,instances:u,geometries:i.size,materials:a.size,textures:l.size,vertices:f,triangles:m,geometryBytes:v,estimatedTextureBytes:y.reduce((S,M)=>S+(M.estimatedBytes??0),0),unknownTextureSizes:y.filter(S=>S.estimatedBytes===null).length,meshesWithoutUvs:d.get("missing-uv")?.count??0,meshesWithoutNormals:d.get("missing-normals")?.count??0},textures:y,extensions:T,issues:r}}function g0(e={}){return{version:1,status:"failed",scope:"asset",source:f0(e),units:"unknown",bounds:null,statistics:null,textures:[],extensions:h0(e),issues:[{code:"load-failed",severity:"error",title:"Asset could not be loaded",detail:"Geometry and textures could not be inspected.",suggestion:"Check the file format, required decoders, sidecar paths, HTTP access and CORS, then reload the asset."}]}}var Nh=require("fflate");var VE;function b0(e){VE=e}var Vh=1024*1024,Hk=128*Vh;var Gk=128*Vh,Wk=256*Vh;var jE=new Map;function jh(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 tc(e){return jE.get(e)??{format:jh(e)}}var I=require("react");var Fs=require("three"),ko=require("three-mesh-bvh"),x0=!1,zs=new WeakMap,nc=new WeakMap;function zE(){x0||(Fs.Mesh.prototype.raycast=ko.acceleratedRaycast,x0=!0)}function FE(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;!r||!r.attributes?.position||t.add(r)}),[...t]}function w0(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 rc=12e6;function S0(e){return Uh(e)>rc}function Uh(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;r?.attributes?.position&&t.add(r)}),w0([...t])}function HE(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=ko.MeshBVH.deserialize(p,t,{setIndex:!1});p.index&&(t.index?t.index.array=p.index:t.setIndex(new Fs.BufferAttribute(p.index,1,!1))),t.boundingBox=u.getBoundingBox(new Fs.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 GE(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await Promise.resolve().then(()=>(v0(),y0)),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 WE(e,t){if(t)try{return await HE(t,e)}catch{}let n=ko.computeBoundsTree.call(e);return e.boundsTree=void 0,await new Promise(r=>setTimeout(r,0)),n}async function qE(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&&zs.delete(e)}),t.buildPromise}async function _d(e,t){if(t?.aborted)return;let n=nc.get(e);if(!n){if(n=FE(e),w0(n)>rc){nc.set(e,[]);return}nc.set(e,n);for(let i of n){let o=zs.get(i)??{references:0};o.references+=1,zs.set(i,o)}}if(n.length===0)return;zE();let r=await GE();if(t?.aborted){r?.dispose();return}try{for(let i of n){if(t?.aborted)return;let o=zs.get(i);o&&await qE(i,o,()=>WE(i,r?.worker))}}finally{r?.dispose()}}function ic(e){let t=nc.get(e);if(t){nc.delete(e);for(let n of t){let r=zs.get(n);r&&(r.references=Math.max(0,r.references-1),!(r.references>0)&&(r.ownedTree&&n.boundsTree===r.ownedTree&&(ko.disposeBoundsTree.call(n),n.boundsTree=void 0),r.ownedTree=void 0,r.buildPromise||zs.delete(n)))}}}var Em=require("@react-three/drei"),Bi=require("three");var M0=require("lucide-react");var Bo=require("react/jsx-runtime");function Cd({title:e,message:t,tone:n="default"}){return(0,Bo.jsxs)("div",{className:`ri-license-overlay${n==="error"?" ri-license-overlay--error":""}`,children:[(0,Bo.jsxs)("div",{className:"ri-license-overlay__header",children:[n==="error"?(0,Bo.jsx)(M0.AlertTriangle,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):(0,Bo.jsx)("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),(0,Bo.jsx)("span",{className:"ri-license-overlay__title",children:e})]}),(0,Bo.jsx)("p",{className:"ri-license-overlay__message",children:t})]})}var _0=require("react"),Ai=class extends _0.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 No=require("react");function C0({enabled:e,activeUrl:t,models:n,errorsRef:r,activeFailed:i,activeError:o,onActiveError:a,onExtraError:s}){let[l,c]=(0,No.useState)(0),d=(0,No.useCallback)((u,f)=>{r.current.set(u,f),c(m=>m+1),u!==t&&s?.(u,f)},[t,r,s]),p=(0,No.useCallback)(u=>{r.current.delete(u)&&c(f=>f+1)},[r]);return(0,No.useEffect)(()=>{let u=new Set(e?n?.map(Ae):[]);for(let f of r.current.keys())u.has(f)||r.current.delete(f)},[e,n,r]),(0,No.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 Ei=require("react");function T0(e,t){let n=(0,Ei.useRef)({}),r=(0,Ei.useRef)({}),i=(0,Ei.useRef)({}),o=(0,Ei.useRef)(0),a=(0,Ei.useCallback)(s=>{var l;return(l=i.current)[s]??(l[s]={current:{}})},[]);return(0,Ei.useEffect)(()=>{let s=new Set(e?t?.map(Ae):[]);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,Ei.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 Vo=require("react");var Td=require("react");function $i(e,t){let n=(0,Td.useRef)(t);(0,Td.useEffect)(()=>{let r=n.current;n.current=t,t.some((i,o)=>!Object.is(i,r[o]))&&e()},t)}var XE={};function P0({modelUrl:e,activeModelId:t,tilesetUrl:n,models:r,objectBindings:i="auto",onChange:o,initialBindings:a,initialModelEdits:s}){let l=t??e,c=!!(r?.length&&!n),d=i==="auto"&&!c,p=!d&&o!==void 0,u=i==="auto"?XE:i,[f,m]=(0,Vo.useState)(()=>a??u),[v,g]=(0,Vo.useState)(()=>{let T=new Map(s),x=c?r?.find(D=>Ae(D)===l):void 0;return x&&a&&s===void 0&&T.set(l,{source:x.objectBindings,bindings:a}),T});$i(()=>{p||m(u)},[p,u]),(0,Vo.useEffect)(()=>{let T=new Map(c?r?.map(x=>[Ae(x),x.objectBindings]):[]);g(x=>{let D=[...x].filter(([A,S])=>!p&&T.get(A)===S.source);return D.length===x.size?x:new Map(D)})},[c,r,p]);let b=(0,Vo.useCallback)(T=>{let x=p?void 0:v.get(Ae(T));return x?.source===T.objectBindings?x.bindings:T.objectBindings},[p,v]),h=c?r?.find(T=>Ae(T)===l):void 0,y=h?b(h):p?u:f,w=(0,Vo.useCallback)(T=>{p||(h?g(x=>new Map(x).set(Ae(h),{source:h.objectBindings,bindings:T})):m(T)),o?.(T)},[p,h,o]);return{autoBindings:d,controlled:p,currentBindings:y,applyBindings:w,bindingsForModel:b,modelEdits:v}}var Hs=require("three");var Pd=require("react");function Ar(e){return!!e?.isWebGPURenderer}var A0;function $E(){return A0??(A0=(async()=>{let e=typeof navigator>"u"?void 0:navigator.gpu;if(!e)return!1;try{return!!await e.requestAdapter()}catch{return!1}})()),A0}var E0=!1;function R0(e){let[t,n]=(0,Pd.useState)(null);return(0,Pd.useEffect)(()=>{if(!e)return;let r=!1;return $E().then(i=>{r||(!i&&!E0&&(E0=!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 O0(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 Ad(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:n,scene:r,camera:i,invalidate:o}=e,a=Ar(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 Hs.Vector2),c=n.getPixelRatio(),d=i instanceof Hs.PerspectiveCamera?i.aspect:null,p=r.background,u=t.width??l.x,f=t.height??l.y,m=u!==l.x||f!==l.y,v=Yu(r);s&&(r.background=null),m&&(n.setPixelRatio(1),n.setSize(u,f,!1),i instanceof Hs.PerspectiveCamera&&(i.aspect=u/f,i.updateProjectionMatrix()));let g=()=>{v(),s&&(r.background=p),m&&(n.setPixelRatio(c),n.setSize(l.x,l.y,!1),i instanceof Hs.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(b){return Promise.reject(b)}finally{g()}return o(),new Promise((b,h)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let y,w;try{y=n.domElement.toDataURL("image/png")}catch(T){w=T}g(),w?h(w):b(y)})})})}var mr=require("react"),Hh=require("three");var Ft=require("react"),Ed=require("@react-three/fiber"),wn=require("three");function zh(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 YE=1.2;function Gs({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,Ed.useThree)(R=>R.invalidate),f=(0,Ft.useMemo)(()=>n.waypoints??[],[n.waypoints]),m=f.length>=2,v=n.loop??!0,g=zh(n),b=(0,Ft.useMemo)(()=>f.map(R=>[...R.position,...R.target,R.azimuthAngle??"",R.polarAngle??"",R.segmentDuration??""].join(",")).join(";"),[f]),h=(0,Ft.useMemo)(()=>{let R=[];if(f.length<2)return R;let O=0;for(let N=0;N<f.length-1;N++)O+=f[N].segmentDuration??3.5,R.push(O);return v&&f.length>1&&(O+=f[f.length-1].segmentDuration??3.5,R.push(O)),R},[f,v]),y=(0,Ft.useMemo)(()=>R=>{if(f.length<2||h.length===0)return R/g;let O=h[h.length-1],N=v?R%g:Math.min(R,g),H=g>0?N/g*O:0;for(let Y=0;Y<h.length;Y++)if(H<=h[Y]){let ue=Y===0?0:h[Y-1],be=h[Y]-ue,X=be>0?(H-ue)/be:0,G=v?f.length:f.length-1,J=Y/G,ee=1/G;return J+X*ee}return 1},[f.length,h,g,v]),w=(0,Ft.useMemo)(()=>m?{position:new wn.CatmullRomCurve3(f.map(R=>new wn.Vector3(...R.position)),v,"catmullrom",.5),target:new wn.CatmullRomCurve3(f.map(R=>new wn.Vector3(...R.target)),v,"catmullrom",.5)}:null,[b,m,v]),T=(0,Ft.useMemo)(()=>{if(!m||!f.every(O=>Number.isFinite(O.azimuthAngle)&&Number.isFinite(O.polarAngle)))return null;let R=f.map(O=>({azimuth:O.azimuthAngle,polar:O.polarAngle,distance:new wn.Vector3(...O.position).distanceTo(new wn.Vector3(...O.target))}));for(let O=1;O<R.length;O+=1){let N=R[O-1].azimuth,H=R[O].azimuth;R[O].azimuth=H+Math.round((N-H)/(Math.PI*2))*Math.PI*2}return R},[b,m]),x=(0,Ft.useRef)(0),D=(0,Ft.useRef)(0),A=(0,Ft.useRef)(new wn.Vector3),S=(0,Ft.useRef)(new wn.Vector3),M=(0,Ft.useRef)(!1),_=(0,Ft.useRef)(!0),C=(0,Ft.useRef)(0),E=(0,Ft.useRef)(!1),L=(0,Ft.useRef)(null),k=(0,Ft.useMemo)(()=>new wn.Vector3,[]),B=(0,Ft.useMemo)(()=>new wn.Vector3,[]),j=(0,Ft.useMemo)(()=>new wn.Spherical,[]);return(0,Ft.useEffect)(()=>{x.current=0,C.current=0,D.current=0,E.current=!1},[b,v,g]),(0,Ft.useEffect)(()=>{i&&(C.current=0,x.current=0,E.current=!1)},[i]),(0,Ft.useEffect)(()=>{if(!r){M.current=!1,x.current>0&&!i?C.current=x.current:i&&(C.current=0),(x.current>0||E.current)&&s?.();return}x.current>=g&&!v&&(x.current=0,C.current=0,E.current=!1);let R=e.current;if(R&&(R.getPosition(A.current),R.getTarget(S.current)),i||E.current||C.current===0?(x.current=0,C.current=0,E.current=!1):C.current>0&&C.current<g?x.current=C.current:(x.current=0,C.current=0),D.current=0,!m){let O=t.current;if(O){let N=new wn.Box3().setFromObject(O).getBoundingSphere(new wn.Sphere);L.current={center:N.center.clone(),radius:N.radius>0?N.radius:1}}}M.current=!0,_.current=!0,u()},[r,m,e,t,u,g,v,b,i,s]),(0,Ft.useEffect)(()=>{if(!r||!a)return;let R=e.current;if(!R)return;let O=()=>{E.current||a()};return R.addEventListener("controlstart",O),()=>R.removeEventListener("controlstart",O)},[r,e,a]),(0,Ed.useFrame)((R,O)=>{if(!r||!M.current)return;let N=e.current;if(!N)return;let H=_.current;_.current=!1,(!H||!c)&&(x.current+=O,D.current+=O);let Y=(!v||l)&&x.current>=g,ue=Y&&v?0:y(x.current);if(ue=v?ue%1:Math.min(ue,1),w)if(w.target.getPoint(ue,B),T){let X=v?T.length:T.length-1,G=Math.min(ue,1)*X,J=Math.min(Math.floor(G),X-1),ee=(J+1)%T.length,fe=ue>=1?1:G-J,K=fe*fe*(3-2*fe),oe=T[J],ae=T[ee],pe=ae.azimuth+Math.round((oe.azimuth-ae.azimuth)/(Math.PI*2))*Math.PI*2,De=oe.azimuth+(pe-oe.azimuth)*K,te=oe.polar+(ae.polar-oe.polar)*K,Fe=oe.distance+(ae.distance-oe.distance)*K;j.set(Math.max(Fe,1e-6),Math.min(Math.max(te,1e-6),Math.PI-1e-6),De),k.setFromSpherical(j).add(B)}else w.position.getPoint(ue,k);else{let X=L.current;if(!X)return;let G=ue*Math.PI*2,J=X.radius*2.2;k.set(X.center.x+Math.cos(G)*J,X.center.y+X.radius*.6,X.center.z+Math.sin(G)*J),B.copy(X.center)}let be=c?1:Math.min(D.current/YE,1);if(be<1){let X=be*be*(3-2*be);k.lerpVectors(A.current,k,X),B.lerpVectors(S.current,B,X)}if(N.setLookAt(k.x,k.y,k.z,B.x,B.y,B.z,!1),H&&d?.(),p?.(Math.min(x.current/g,1)),Y){M.current=!1,E.current=!0,x.current=0,C.current=0,o?.();return}u()}),null}function D0(){return typeof document<"u"&&typeof HTMLCanvasElement<"u"&&typeof HTMLCanvasElement.prototype.captureStream=="function"}function L0(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,f=0,m=null,v=0,g=0,b=0,h=!1,y=!1,w,T,x,D,A,S,M=new Promise((O,N)=>{A=O,S=N}),_=()=>{clearTimeout(w),clearInterval(T),x!==void 0&&cancelAnimationFrame(x),D!==void 0&&cancelAnimationFrame(D),i?.removeEventListener("abort",E),e.removeEventListener("webglcontextlost",L),l&&(l.pause(),l.srcObject=null),s?.getTracks().forEach(O=>O.stop())},C=(O=new DOMException("Video export cancelled.","AbortError"))=>{h||(h=!0,_(),S(O))},E=()=>C(),L=()=>C(new Error("Video export stopped because the WebGL context was lost.")),k=()=>C(new Error("Video export timed out. Keep the viewer tab visible while recording."));i?.addEventListener("abort",E,{once:!0}),e.addEventListener("webglcontextlost",L),w=setTimeout(k,3e4);let B=(async()=>{if(a=await import("gifenc"),!h&&(s=e.captureStream(n),l=document.createElement("video"),l.muted=!0,l.playsInline=!0,l.srcObject=s,await l.play(),!h)){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(O=>C(O)),j=O=>{if(!m||!d)return;let N=Math.max(2,Math.round((O-v)/10)-b);b+=N,d.writeFrame(m.index,p,u,{palette:m.palette,delay:N*10}),m=null},R=()=>{if(h||!a||!l||!c||!d||l.readyState<2||!l.videoWidth)return;let O=performance.now();if(!(f>0&&O-g<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:N}=c.getImageData(0,0,p,u),H=a.quantize(N,256),Y=a.applyPalette(N,H);f===0&&(v=O),j(O),m={index:Y,palette:H},g=O,f+=1}catch(N){C(N)}}};return{result:M,cancel:C,start(O){h||x!==void 0||(x=requestAnimationFrame(()=>{B.then(()=>{h||(R(),T=setInterval(R,o),clearTimeout(w),w=setTimeout(k,(O+30)*1e3))})}))},finish(){h||y||(y=!0,D=requestAnimationFrame(()=>{B.then(()=>{if(h||(R(),h))return;if(!d||f===0){C(new Error("The browser produced an empty video."));return}j(g+o),d.finish();let O=new Blob([d.bytes()],{type:"image/gif"});h=!0,_(),A(O)})}))}}}var Fh={webm:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"],mp4:["video/mp4;codecs=avc1.42E01E","video/mp4"]};function Yi(e="auto"){return e==="gif"?D0()?"image/gif":null:typeof MediaRecorder>"u"?null:(e==="auto"?[...Fh.webm,...Fh.mp4]:Fh[e]).find(n=>MediaRecorder.isTypeSupported(n))??null}function I0(e,t={}){if(t.format==="gif")return L0(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=Yi(t.format);if(!o||typeof e.captureStream!="function"){let x=t.format&&t.format!=="auto"?` as ${t.format.toUpperCase()}`:"";throw new Error(`Video recording${x} is not supported in this browser.`)}let a,s,l=!1,c=!1,d,p,u,f=[],m,v,g=new Promise((x,D)=>{m=x,v=D}),b=()=>{clearTimeout(d),p!==void 0&&cancelAnimationFrame(p),u!==void 0&&cancelAnimationFrame(u),i?.removeEventListener("abort",y),e.removeEventListener("webglcontextlost",w),s&&(s.ondataavailable=null,s.onstop=null,s.onerror=null),a?.getTracks().forEach(x=>x.stop())},h=(x=new DOMException("Video export cancelled.","AbortError"))=>{if(!l){if(l=!0,b(),s&&s.state!=="inactive")try{s.stop()}catch{}v(x)}},y=()=>h(),w=()=>h(new Error("Video export stopped because the WebGL context was lost.")),T=()=>h(new Error("Video export timed out. Keep the viewer tab visible while recording."));return i?.addEventListener("abort",y,{once:!0}),e.addEventListener("webglcontextlost",w),d=setTimeout(T,3e4),{result:g,cancel:h,start(x){l||p!==void 0||(p=requestAnimationFrame(()=>{if(!l)try{a=e.captureStream(n);let D=new MediaRecorder(a,{mimeType:o,videoBitsPerSecond:r});s=D,D.ondataavailable=({data:A})=>{A.size>0&&f.push(A)},D.onerror=()=>h(new Error("The browser could not encode the video.")),D.onstop=()=>{if(l)return;l=!0,b();let A=new Blob(f,{type:D.mimeType||o});A.size===0?v(new Error("The browser produced an empty video.")):m(A)},D.start(1e3),clearTimeout(d),d=setTimeout(T,(x+30)*1e3)}catch(D){h(D)}}))},finish(){l||c||(c=!0,u=requestAnimationFrame(()=>{if(!l)try{if(!s)throw new Error("Video recording did not start.");s.stop()}catch(x){h(x)}}))}}}function k0(e){let t=(0,mr.useRef)(e);t.current=e;let n=(0,mr.useRef)(null),[r,i]=(0,mr.useState)(null),[o,a]=(0,mr.useState)(0),s=(0,mr.useCallback)(()=>n.current?.cancel(),[]),l=(0,mr.useCallback)(()=>n.current!==null,[]);(0,mr.useEffect)(()=>s,[e.modelUrl,s]);let c=(0,mr.useCallback)(async(p={})=>{let{rendererCaptureRef:u,controlsRef:f,cinematicConfig:m,ready:v,onCaptureStart:g}=t.current,b=u.current,h=f.current;if(!v||!b||!h)throw new Error("Viewer not ready for video export.");if(b.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 y=p.mode??(m?"cinematic":"turntable");if(y==="cinematic"&&!m)throw new Error("Enable a cinematic camera path before recording it.");let w=y==="cinematic"?m:{loop:!0},T=p.duration??(y==="turntable"&&p.format==="gif"?8:zh(w));if(!Number.isFinite(T)||T<=0||T>300)throw new Error("Video duration must be greater than 0 and at most 300 seconds.");let x=I0(b.gl.domElement,p);n.current=x;let D=h.getPosition(new Hh.Vector3),A=h.getTarget(new Hh.Vector3),S=h.enabled,M=Yu(b.scene);h.stop(),h.enabled=!1,a(0),g(),i({config:{...w,duration:T,autoPlay:!1},onStarted:()=>x.start(T),onFinished:x.finish});try{return await x.result}finally{M(),h.enabled=S,h.setLookAt(D.x,D.y,D.z,A.x,A.y,A.z,!1),b.invalidate(),n.current=null,i(null)}},[]),d=(0,mr.useCallback)(p=>{let u=Math.floor(p*100);a(f=>f===u?f:u)},[]);return{captureVideo:c,cancelVideo:s,isRecording:l,recording:r,progress:o,onProgress:d}}var Er=require("react");function B0(e){let[t,n]=(0,Er.useState)(null),[r,i]=(0,Er.useState)(!1),[o,a]=(0,Er.useState)(!1),[s,l]=(0,Er.useState)(!1),[c,d]=(0,Er.useState)(null),p=(0,Er.useRef)(!1);(0,Er.useEffect)(()=>{if(!t||!e){i(!1),a(!1),d(null);return}let f=t.ownerDocument;i(f.fullscreenEnabled===!0&&typeof t.requestFullscreen=="function"&&typeof f.exitFullscreen=="function");let m=()=>{a(f.fullscreenElement===t),d(null)};return m(),f.addEventListener("fullscreenchange",m),()=>f.removeEventListener("fullscreenchange",m)},[t,e]);let u=(0,Er.useCallback)(async()=>{if(!t||!e||!r||p.current)return;let f=t.ownerDocument,m=f.fullscreenElement===t;p.current=!0,l(!0),d(null);try{m?await f.exitFullscreen():await t.requestFullscreen(),a(f.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 Sn=require("react");function N0(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 Rd=require("@react-three/fiber"),Gh=require("react");function V0({captureRef:e}){let{gl:t,scene:n,camera:r,invalidate:i,get:o}=(0,Rd.useThree)();return(0,Gh.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 j0(){let e=(0,Rd.useThree)(n=>n.frameloop),t=(0,Rd.useThree)(n=>n.invalidate);return(0,Gh.useEffect)(()=>{e!=="never"&&t()},[e,t]),null}function U0(e){e.dispose(),"forceContextLoss"in e&&!Ar(e)&&(e.forceContextLoss(),e.forceContextLoss=()=>{})}function z0(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 F0(e){let t=(0,Sn.useRef)(e);t.current=e;let[n,r]=(0,Sn.useState)(null),[i,o]=(0,Sn.useState)(0),[a,s]=(0,Sn.useState)("ready"),l=(0,Sn.useRef)(null),c=(0,Sn.useRef)(!1),d=(0,Sn.useRef)(null),p=(0,Sn.useRef)(null),u=(0,Sn.useCallback)(g=>{p.current?.dispose(),p.current=null,d.current=g,r(g)},[]),f=(0,Sn.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(g=>g+1))},[]),m=(0,Sn.useCallback)(()=>{l.current?.(),l.current=null;let g=d.current;d.current=null,r(null),g&&U0(g)},[]),v=(0,Sn.useCallback)(()=>{c.current=!1,s("lost")},[]);return(0,Sn.useEffect)(()=>()=>{p.current?.dispose(),p.current=null},[]),(0,Sn.useEffect)(()=>{if(!n)return;if(c.current=!1,s("ready"),Ar(n)){let b=n,h=b.onDeviceLost;return b.onDeviceLost=y=>{console.warn("[react-immersive] The WebGPU device was lost.",y),v()},()=>{b.onDeviceLost=h}}let g=N0(n.domElement,{initiallyLost:n.getContext().isContextLost(),onLost:v,onRestored:f});return l.current=g,()=>{g(),l.current===g&&(l.current=null)}},[n,v,f]),{generation:i,status:a,reload:f,fail:v,release:m,onRendererCreated:u}}var Dd=require("react");var oc=require("react"),KE="200px",H0=new Map;function G0(e,t,n){let r=H0.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},H0.set(t,r)}let{observer:i,watchers:o}=r;return o.set(e,n),i.observe(e),()=>{o.delete(e),i.unobserve(e)}}function W0(e){let t=typeof IntersectionObserver<"u",[n,r]=(0,oc.useState)(!t),[i,o]=(0,oc.useState)(!t);return(0,oc.useEffect)(()=>{let a=e.current;if(!a||!t)return;let s=G0(a,KE,r),l=G0(a,"0px",o);return()=>{s(),l()}},[e,t]),{near:n,visible:i}}var jo=require("react");function ZE(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 QE=12,JE=6,Od=new Map,eR=1,Wh=!1,q0;function X0(){Wh||(Wh=!0,queueMicrotask(()=>{Wh=!1,q0??(q0=Jl()?JE:QE);let e=ZE([...Od.values()],q0);for(let t of Od.values()){let n=e.has(t.id);n!==t.live&&(t.live=n,t.onLiveChange(n))}}))}function $0({managed:e,wanted:t,visible:n,onPark:r}){let[i,o]=(0,jo.useState)(!1),a=(0,jo.useRef)(r);a.current=r;let s=(0,jo.useRef)(null);return(0,jo.useEffect)(()=>{if(!e)return;let l={id:eR++,wanted:!1,visible:!1,live:!1,since:performance.now(),onLiveChange:c=>{c||a.current?.(),o(c)}};return Od.set(l.id,l),s.current=l,()=>{Od.delete(l.id),s.current=null,o(!1),X0()}},[e]),(0,jo.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,X0())},[e,t,n]),e?i:t}function Y0({loading:e="lazy",reveal:t="auto",rootRef:n,onPark:r}){let{near:i,visible:o}=W0(n),[a,s]=(0,Dd.useState)(t==="auto");return(0,Dd.useEffect)(()=>{t==="auto"&&s(!0)},[t]),{live:$0({managed:e==="lazy",wanted:a&&(e==="eager"||i),visible:o,onPark:r}),visible:o,awaitingReveal:!a,reveal:()=>s(!0)}}var K0=require("lucide-react");var Ua=require("react/jsx-runtime");function Ld({src:e,hidden:t=!1}){return e?(0,Ua.jsx)("img",{className:`ri-poster${t?" ri-poster--hidden":""}`,src:e,alt:"","aria-hidden":"true",draggable:!1,decoding:"async"}):null}function Id({className:e,background:t,poster:n,onReveal:r}){let i=_e();return(0,Ua.jsxs)("div",{className:`${e} ri-viewerPlaceholder`,style:{background:t},children:[(0,Ua.jsx)(Ld,{src:n}),r?(0,Ua.jsxs)("button",{type:"button",className:"ri-revealButton",onClick:r,children:[(0,Ua.jsx)(K0.Box,{size:16,"aria-hidden":"true"}),i("viewIn3D")]}):null]})}function ac(e,t){if(e)return e;let n=t?.background;return n?.enabled&&n.type==="color"?n.color:"#1c1c1d"}function kd(e,t){return t||e}async function Z0(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 Q0=require("react"),Ws=class extends Q0.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 qs=require("react");function J0({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 _=n();return!!(_.onEngagement||_.debugEngagement)},d=_=>Math.max(0,Math.round(r()-_)),p=_=>{let{onEngagement:C,debugEngagement:E}=n();if(!C&&!E)return;let L={..._,sessionId:o,timestamp:i(),elapsedMs:d(l),modelUrl:e,tilesetUrl:t};E&&a(L);try{Promise.resolve(C?.(L)).catch(s)}catch(k){s(k)}},u=null,f=null,m="[]",v=null,g=null,b=_=>{u=_},h=_=>{!c()||u===_.objectKey||(u=_.objectKey,p({type:"part-viewed",..._}))},y=(_,C,E=null)=>{let L=JSON.stringify([E,C,_]);!c()||_===C||L===f||(f=L,p({type:"variant-chosen",variant:_,previousVariant:C,group:E}))},w=_=>{let C=JSON.stringify(_);C!==m&&(m=C,f=null)},T=()=>{!c()||v!==null||(v=r(),p({type:"ar-started"}))},x=(_="session-ended")=>{if(v===null)return;let C=d(v);v=null,p({type:"ar-ended",durationMs:C,reason:_})},D=(_="stopped")=>{if(!g)return;let{startedAt:C,annotationCount:E}=g;g=null,p({type:"tour-stopped",annotationCount:E,durationMs:d(C),reason:_})};return{setSelectedPart:b,viewPart:h,setActiveVariants:w,chooseVariant:y,startAR:T,endAR:x,startTour:_=>{!c()||_<=0||(D("restarted"),g={startedAt:r(),annotationCount:_},p({type:"tour-started",annotationCount:_}))},stopTour:D,completeTour:()=>{if(!g)return;let{startedAt:_,annotationCount:C}=g;g=null,p({type:"tour-completed",annotationCount:C,durationMs:d(_)})},interrupt:()=>{x("interrupted"),D("interrupted")},requestARLaunch:_=>p({type:"ar-launch-requested",channel:_})}}function ew(e){let t=(0,qs.useRef)(e);t.current=e;let n=!!(e.onEngagement||e.debugEngagement),r=(0,qs.useMemo)(()=>J0({modelUrl:e.modelUrl,tilesetUrl:e.tilesetUrl,getOptions:()=>t.current}),[e.modelUrl,e.tilesetUrl,n]);return(0,qs.useEffect)(()=>()=>r.interrupt(),[r]),r}var fr=require("three"),nw=require("three/examples/jsm/loaders/STLLoader.js"),rw=require("three/examples/jsm/loaders/PLYLoader.js"),tR=12106948,iw="This PLY file is a point cloud: it has vertices but no faces.",Bd=class extends Error{constructor(){super(iw),this.name="PointCloudError"}};function ow(e){return e instanceof Bd||e instanceof Error&&e.message.includes(iw)}function aw(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 qh(e){return new fr.MeshStandardMaterial({color:e?16777215:tR,vertexColors:e,metalness:0,roughness:.6})}function tw(e,t,n){let r=e.itemSize;return new fr.Float32BufferAttribute(e.array.slice(t*r,(t+n)*r),r)}function sw(e,t){let n=new nw.STLLoader().parse(e),r=!!n.hasColors,i=new fr.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 fr.BufferGeometry;u.setAttribute("position",tw(l,d.start,d.count)),c&&u.setAttribute("normal",tw(c,d.start,d.count));let f=new fr.Mesh(u,qh(!1));f.name=s[p]?.trim()||`${t} ${p+1}`,i.add(f)}),n.dispose(),i}n.clearGroups();let o=qh(r);r&&n.alpha!==void 0&&n.alpha<1&&(o.opacity=n.alpha,o.transparent=!0);let a=new fr.Mesh(n,o);return a.name=t,i.add(a),i}function nR(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 lw(e,t){if(!nR(e))throw new Bd;let n=new rw.PLYLoader().parse(e);n.getAttribute("normal")||n.computeVertexNormals();let r=new fr.Mesh(n,qh(!!n.getAttribute("color")));r.name=t;let i=new fr.Group;return i.add(r),i}var rR={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ",stl:"STL",ply:"PLY"},iR=/\.(glb|gltf|obj|fbx|usdz|stl|ply|zip)$/i;function oR(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 cw(e,t,n,r){let i=e instanceof Error?e.message:e==null?"":String(e),o=(u,f)=>Gl(r,u,f),a=o("loadErrorTitle"),s=i||null;if(ow(e))return{title:a,detail:o("loadErrorPointCloud"),technical:s};let l=oR(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=rR[n??jh(t)],p=iR.test(c);return{title:a,detail:p||n?o(n?"loadErrorInvalidExplicitFormat":"loadErrorInvalidFile",{format:d}):o("loadErrorMissingFormat",{format:d}),technical:s}}var uw={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1,showMaterialVariants:!1},Xh=Object.freeze({minimal:Object.freeze({...uw}),showcase:Object.freeze({...uw,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})}),aR=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function dw(e){let t={};for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t}function sR({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,showSequenceControls:t?.sequences,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,arHandoff:o?.arHandoff,dracoDecoderPath:a?.draco,ktx2TranscoderPath:a?.ktx2,meshopt:a?.meshopt}}function pw(e){let t={...e};for(let n of aR)delete t[n];return{...e.preset?Xh[e.preset]:void 0,...dw(t),...dw(sR(e))}}var sc=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 mw(e){return sc.find(t=>t.id===e)}var lc=sc.filter(e=>e.handling==="viewer").map(e=>e.id),eB=new Set(["","New Action",...sc.map(e=>e.label)]);var fw=require("three");function hw(e,t,n){let r=t[n]?.modelObjectId;return e.lighting.lights.filter(i=>{let o=i.attachment?.objectId;return o?sn(t,o)===n||o===r:!1})}function $h(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 gw(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 fw.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 bw=require("react-colorful"),Mn=require("react/jsx-runtime");function yw({kind:e,color:t,brightness:n,onColorChange:r,onBrightnessChange:i,onClose:o}){return(0,Mn.jsx)("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:a=>a.stopPropagation(),children:e==="change-light-color"?(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsx)("p",{className:"ri-popoverLabel",children:"Light color"}),(0,Mn.jsx)(bw.HexColorPicker,{color:t,onChange:r}),(0,Mn.jsxs)("div",{className:"ri-inlineRow",children:[(0,Mn.jsx)("span",{className:"ri-colorCode",children:t}),(0,Mn.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]}):(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsx)("p",{className:"ri-popoverLabel",children:"Brightness"}),(0,Mn.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,Mn.jsxs)("div",{className:"ri-inlineRow",children:[(0,Mn.jsxs)("span",{className:"ri-colorCode",children:[n,"%"]}),(0,Mn.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]})})}var cc=require("react");var Uo=require("lucide-react"),Xs=require("react");function vw(e){let t=!1,n,r=()=>{t||(e(),t||(n=setTimeout(r,70)))};return e(),n=setTimeout(r,300),()=>{t=!0,clearTimeout(n)}}var Ki=require("react/jsx-runtime");function xw({onNudge:e}){let t=_e(),n=(0,Xs.useRef)(e);n.current=e;let r=(0,Xs.useRef)(null),i=(0,Xs.useRef)(null),o=()=>{r.current?.(),r.current=null,i.current=null};return(0,Xs.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,Ki.jsxs)("div",{className:"ri-decalPosition",children:[(0,Ki.jsxs)("div",{children:[(0,Ki.jsx)("div",{className:"ri-decalPosition__label",children:t("position")}),(0,Ki.jsx)("div",{className:"ri-decalPosition__hint",children:t("decalNudgeHint")})]}),(0,Ki.jsx)("div",{className:"ri-decalPosition__pad",role:"group","aria-label":t("decalNudgeControls"),children:[["up",Uo.ArrowUp],["left",Uo.ArrowLeft],["right",Uo.ArrowRight],["down",Uo.ArrowDown]].map(([a,s])=>(0,Ki.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=vw(()=>n.current(a)))},onClick:l=>{l.detail===0&&n.current(a)},children:(0,Ki.jsx)(s,{size:16})},a))})]})}var lt=require("react/jsx-runtime"),lR=e=>Math.round(e*180/Math.PI);function ww({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:f}){let m=_e(),[v,g]=(0,cc.useState)(""),[b,h]=(0,cc.useState)("#ffffff"),y=(0,cc.useRef)(null),w=t.find(x=>x.id===n)??null;return(0,lt.jsxs)("div",{className:"ri-popover ri-popover--inline ri-decalControl",onPointerDown:x=>x.stopPropagation(),children:[e==="add-text"?(0,lt.jsxs)(lt.Fragment,{children:[(0,lt.jsx)("p",{className:"ri-popoverLabel",children:m("text")}),(0,lt.jsxs)("div",{className:"ri-decalControl__row",children:[(0,lt.jsx)("input",{className:"ri-decalControl__input",value:v,placeholder:m("yourText"),"aria-label":m("textToAdd"),onChange:x=>g(x.target.value)}),(0,lt.jsx)("input",{type:"color",className:"ri-decalControl__color",value:b,"aria-label":m("textColour"),onChange:x=>h(x.target.value)})]}),(0,lt.jsx)("button",{type:"button",className:"ri-uploadButton",disabled:!v.trim(),onClick:()=>{s(v.trim(),b)&&g("")},children:m("addText")})]}):(0,lt.jsxs)(lt.Fragment,{children:[(0,lt.jsx)("p",{className:"ri-popoverLabel",children:m("image")}),(0,lt.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:()=>y.current?.click(),children:m("chooseImage")}),(0,lt.jsx)("input",{ref:y,type:"file",accept:"image/png,image/jpeg,image/webp,image/svg+xml",className:"ri-hiddenInput","aria-label":m("imageToAdd"),onChange:x=>{let D=x.target.files?.[0];x.target.value="",D&&l(D)}})]}),r?(0,lt.jsx)("div",{className:"ri-decalControl__hint",role:"alert",children:r}):null,t.length>0?(0,lt.jsx)("div",{className:"ri-decalControl__list",role:"group","aria-label":m("added"),children:t.map((x,D)=>(0,lt.jsx)("button",{type:"button",className:`ri-decalControl__chip ${x.id===n?"ri-decalControl__chip--active":""}`,"aria-pressed":x.id===n,onClick:()=>a(x.id),children:x.image?m("decalImage",{index:D+1}):x.text||m("decalText",{index:D+1})},x.id))}):null,w?(0,lt.jsxs)("div",{className:"ri-decalControl__editor",children:[(0,lt.jsx)(xw,{onNudge:x=>p(w.id,x)}),w.image?null:(0,lt.jsxs)("div",{className:"ri-decalControl__row",children:[(0,lt.jsx)("input",{className:"ri-decalControl__input",value:w.text??"","aria-label":m("text"),onChange:x=>c(w.id,{text:x.target.value})}),(0,lt.jsx)("input",{type:"color",className:"ri-decalControl__color",value:w.color??"#ffffff","aria-label":m("colour"),onChange:x=>c(w.id,{color:x.target.value})})]}),(0,lt.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,lt.jsx)("span",{children:m("size")}),(0,lt.jsx)("input",{type:"range",min:o/10,max:o*4,step:o/50,value:w.size,"aria-label":m("size"),onChange:x=>c(w.id,{size:Number(x.target.value)})})]}),(0,lt.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,lt.jsx)("span",{children:m("turn")}),(0,lt.jsx)("input",{type:"range",min:-180,max:180,step:1,value:lR(w.rotation??0),"aria-label":m("rotation"),onChange:x=>c(w.id,{rotation:Number(x.target.value)*Math.PI/180})})]}),(0,lt.jsxs)("div",{className:"ri-inlineRow",children:[(0,lt.jsx)("button",{type:"button",className:"ri-secondaryButton","aria-pressed":i,title:m("dragTheDecalAcrossTheObjectsSurface"),onClick:()=>d(w.id),children:m("move")}),(0,lt.jsx)("button",{type:"button",className:"ri-removeButton",onClick:()=>u(w.id),children:m("remove")})]})]}):null,(0,lt.jsxs)("div",{className:"ri-inlineRow",children:[(0,lt.jsx)("span",{className:"ri-colorCode",children:t.length===0?m("noneAddedYet"):m("decalAdded",{count:t.length})}),(0,lt.jsx)("button",{type:"button",className:"ri-secondaryButton",onClick:f,children:m("done")})]})]})}var Hd=require("react"),Vw=require("@react-three/fiber"),ni=require("three");var Bt=require("three"),cR=.5,uc=4;function uR(e,t=0){let n=new Bt.Vector3(...e);n.lengthSq()<1e-12&&n.set(0,0,1),n.normalize();let r=new Bt.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 dR(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 Sw(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(dR(s,l,(n-s.position[t])/d))}}return o}function Nd(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)*cR,f={x:d/2,y:p/2,z:u/2},m=new Bt.Matrix4().makeRotationFromEuler(uR(t.normal,t.rotation)).setPosition(...t.position),v=m.clone().invert(),g=(k,B)=>{let j=null;if(l){j=new Map;for(let R=0;R<uc;R++){let O=s.getComponent(k,R);if(O<=0)continue;let N=a.getComponent(k,R);j.set(N,(j.get(N)??0)+O)}}return{position:B.clone(),normal:o?new Bt.Vector3().fromBufferAttribute(o,k):new Bt.Vector3,bones:j}},b=[],h=[],y=[],w=[],T=[],x=new Bt.Vector3,D=new Bt.Vector3,A=new Bt.Vector3,S=k=>{if(y.push(.5+k.position.x/d,.5-k.position.y/p),x.copy(k.position).applyMatrix4(m),b.push(x.x,x.y,x.z),h.push(k.normal.x,k.normal.y,k.normal.z),!k.bones)return;let B=[...k.bones].sort((R,O)=>O[1]-R[1]).slice(0,uc),j=B.reduce((R,[,O])=>R+O,0)||1;for(let R=0;R<uc;R++)w.push(B[R]?.[0]??0),T.push((B[R]?.[1]??0)/j)},M=["x","y","z"],_=[new Bt.Vector3,new Bt.Vector3,new Bt.Vector3],C=[0,0,0],E=(c?c.count:i.count)/3;for(let k=0;k<E;k++){for(let R=0;R<3;R++){let O=k*3+R;C[R]=c?c.getX(O):O,_[R].fromBufferAttribute(i,C[R]).applyMatrix4(v)}if(M.some(R=>_[0][R]>f[R]&&_[1][R]>f[R]&&_[2][R]>f[R]||_[0][R]<-f[R]&&_[1][R]<-f[R]&&_[2][R]<-f[R]))continue;let B=_.map((R,O)=>g(C[O],R));if(!o){D.copy(B[1].position).sub(B[0].position),A.copy(B[2].position).sub(B[0].position);let R=D.cross(A).transformDirection(m);for(let O of B)O.normal.copy(R)}let j=B;for(let R of M)if(j=Sw(j,R,f[R],!0),j=Sw(j,R,-f[R],!1),j.length<3)break;for(let R=1;R+1<j.length;R++)S(j[0]),S(j[R]),S(j[R+1])}if(b.length===0)return null;let L=new Bt.BufferGeometry;return L.setAttribute("position",new Bt.Float32BufferAttribute(b,3)),L.setAttribute("normal",new Bt.Float32BufferAttribute(h,3)),L.setAttribute("uv",new Bt.Float32BufferAttribute(y,2)),l&&(L.setAttribute("skinIndex",new Bt.Uint16BufferAttribute(w,uc)),L.setAttribute("skinWeight",new Bt.Float32BufferAttribute(T,uc))),L}function _w(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 Mw=256,Yh=24;function Cw(e){let t=`${e.fontWeight??"bold"} ${Mw-Yh*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)+Yh*2,8),4096),n.height=Mw,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-Yh);let o=new Bt.CanvasTexture(n);return o.flipY=!1,o.colorSpace=Bt.SRGBColorSpace,{texture:o,aspect:n.width/n.height}}var dc=require("react"),hr=require("three");var In=require("three");function Vd(e){let t=!0;return e?.traverse(n=>{let r=n.isMesh?n.geometry:null;r&&!r.getAttribute("uv")&&(t=!1)}),t}function Tw(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function Pw(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function _n(e){return!!(e&&"isMesh"in e&&e.isMesh)}var zo=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],jd={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"},pR=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function ei(e){return pR.has(e)?In.SRGBColorSpace:In.NoColorSpace}function Xt(e,t){return e?.[t]?.path}function Aw(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 Ew(e,t){let n=e?.[t]?.scale;if(!(!Number.isFinite(n)||!n))return n===1?void 0:n}function Rw(e,t){let n=e?.[t]?.rotation;if(!(!Number.isFinite(n)||!n))return n}function Ow(e){return e==="back"?In.BackSide:e==="double"?In.DoubleSide:In.FrontSide}function Dw(e){return e==="additive"?In.AdditiveBlending:In.NormalBlending}function Zi(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 In.Vector2(r.x,r.y)}return new In.Vector2(t,n)}function Ud(e){return Number.isFinite(e)&&e>0?e:1}function Lw(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function Iw(e){return e?.loopMode??"repeat"}var za="riDecal",Qh="riDecalId";function Kh(){return new hr.BufferGeometry().setAttribute("position",new hr.Float32BufferAttribute([],3))}function kw(e){let t=e.image;return t?.width&&t.height?t.width/t.height:1}function Zh(e){e.disposed=!0,e.node.remove(e.mesh),e.mesh.geometry.dispose(),e.mesh.material.dispose(),e.imagePath&&Hi(e.imagePath,hr.SRGBColorSpace),e.ownTexture?.dispose()}function mR(e,t,n,r){let i=new hr.MeshStandardMaterial({transparent:!0,polygonOffset:!0,polygonOffsetFactor:-4,depthWrite:!1,metalness:0,roughness:.7}),o=Kt(e)&&e.skeleton?e:null,a=o?new hr.SkinnedMesh(Kh(),i):new hr.Mesh(Kh(),i);if(o){let c=a;c.bind(o.skeleton,o.bindMatrix),c.frustumCulled=!1,c.onBeforeRender=()=>{let d=Oa(o);d&&c.bindMatrixInverse.copy(d)}}a.userData[za]=!0,a.userData[Qh]=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=Nd(e,t,c);a.geometry.dispose(),a.geometry=d??Kh(),a.visible=d!==null};if(t.image){s.imagePath=t.image;let c=ks(t.image,hr.SRGBColorSpace,()=>{s.disposed||(l(kw(c)),i.needsUpdate=!0,r())});i.map=c,l(kw(c))}else{let{texture:c,aspect:d}=Cw(t);s.ownTexture=c,i.map=c,l(d)}return e.add(a),s}function Bw({objectBindings:e,nodeMap:t,invalidate:n}){let r=(0,dc.useRef)(new Map);(0,dc.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(_n(l))for(let c of s.decals){if(!c.image&&!c.text)continue;let d=`${a}
3668
- ${c.id}`,p=_w(c),u=i.get(d);u&&(u.node!==l||u.signature!==p)&&(Zh(u),u=void 0),u||(u=mR(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)||(Zh(s),i.delete(a));n()},[e,t,n]),(0,dc.useEffect)(()=>{let i=r.current;return()=>{for(let o of i.values())Zh(o);i.clear()}},[])}var Rr=require("react"),ti=require("three"),fR=500,hR=10,gR=5;function zd(e,t,n){let r=(0,Rr.useRef)({resolve:e,onContextMenu:t,anchorOf:n});r.current={resolve:e,onContextMenu:t,anchorOf:n};let i=(0,Rr.useRef)(null),o=(0,Rr.useRef)(!1),a=(0,Rr.useRef)(null),s=(0,Rr.useCallback)(()=>{let p=i.current;p?.timer&&clearTimeout(p.timer),i.current=null,a.current?.(),a.current=null},[]),l=(0,Rr.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,Rr.useCallback)(p=>{let u=p.nativeEvent,f=u.pointerType!=="touch"&&u.button===2,m=u.pointerType==="touch"&&u.button===0;if(!r.current.onContextMenu||!f&&!m)return;let v=r.current.resolve(p.object);if(v===null)return;s();let g={target:v,kind:f?"right":"touch",pointerId:u.pointerId,pointer:$s(p,r.current.anchorOf?.(p.object)),timer:m?setTimeout(l,fR):null};i.current=g;let b=f?gR:hR,h=x=>Math.hypot(x.clientX-g.pointer.clientX,x.clientY-g.pointer.clientY)>b,y=x=>{x.pointerId===g.pointerId&&h(x)&&s()},w=x=>{x.pointerId===g.pointerId&&(g.kind==="right"&&!h(x)?l():s())},T=x=>{x.pointerId!==g.pointerId&&s()};window.addEventListener("pointermove",y),window.addEventListener("pointerup",w),window.addEventListener("pointercancel",s),window.addEventListener("pointerdown",T),a.current=()=>{window.removeEventListener("pointermove",y),window.removeEventListener("pointerup",w),window.removeEventListener("pointercancel",s),window.removeEventListener("pointerdown",T)}},[s,l]);(0,Rr.useEffect)(()=>s,[s]);let d=(0,Rr.useCallback)(()=>o.current?(o.current=!1,!0):!1,[]);return{onPointerDown:c,consumeClick:d}}function bR(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,f]=[n.a,n.b,n.c].map(m=>t.getVertexPosition(m,new ti.Vector3));if(i=ti.Triangle.getBarycoord(t.worldToLocal(e.point.clone()),p,u,f,new ti.Vector3),!i)return null}let[o,a,s]=[n.a,n.b,n.c].map(p=>new ti.Vector3().fromBufferAttribute(r,p)),l=new ti.Vector3().addScaledVector(o,i.x).addScaledVector(a,i.y).addScaledVector(s,i.z),c=new ti.Triangle(o,a,s).getNormal(new ti.Vector3);return n.normal.clone().transformDirection(t.matrixWorld).dot(e.ray.direction)>0&&c.negate(),{position:[l.x,l.y,l.z],normal:[c.x,c.y,c.z]}}function Fa(e,t){if(t.updateWorldMatrix(!0,!1),e.object===t&&t.isSkinnedMesh===!0){let i=bR(e,t);if(i)return i}let n=t.worldToLocal(e.point.clone()),r=e.face?e.face.normal.clone().transformDirection(e.object.matrixWorld):e.ray.direction.clone().negate();return r.dot(e.ray.direction)>0&&r.negate(),r.transformDirection(new ti.Matrix4().copy(t.matrixWorld).invert()),{position:[n.x,n.y,n.z],normal:[r.x,r.y,r.z]}}function $s(e,t){let n=e.nativeEvent;return{clientX:n.clientX,clientY:n.clientY,pointerType:"pointerType"in n?n.pointerType:"mouse",...t?{surface:Fa(e,t)}:{}}}var Fd=require("three");function Nw(e,t){let n=[];if(Kt(e)){let r=e;r.computeBoundingSphere(),r.computeBoundingBox(),Fd.SkinnedMesh.prototype.raycast.call(r,t,n)}else Fd.Mesh.prototype.raycast.call(e,t,n);return n.sort((r,i)=>r.distance-i.distance)[0]}function jw({target:e,nodes:t,controls:n}){let{camera:r,gl:i,invalidate:o}=(0,Vw.useThree)(),a=(0,Hd.useRef)(e);return a.current=e,(0,Hd.useEffect)(()=>{let s=i.domElement,l=new ni.Raycaster,c=new ni.Vector2,d=s.style.cursor,p=s.style.touchAction;s.style.cursor="grab",s.style.touchAction="none";let u=0,f=null,m=null,v=(D,A=new ni.Vector2)=>{let S=s.getBoundingClientRect();c.set((D.clientX-S.left-A.x)/S.width*2-1,-((D.clientY-S.top-A.y)/S.height)*2+1),l.setFromCamera(c,r)},g=D=>{if(!m)return;v(D,m.offset),m.node.updateWorldMatrix(!0,!1);let A=l.intersectObject(m.node,!1)[0];if(!A)return;let S=Fa({...A,ray:l.ray},m.node),M=Nd(m.node,{...m.decal,...S},m.aspect);M&&(m.mesh.geometry!==m.geometry&&m.mesh.geometry.dispose(),m.mesh.geometry=M,m.surface=S,o())},b=D=>{if(!m)return;cancelAnimationFrame(u),u=0,f=null;let A=m;m=null,A.mesh.geometry!==A.geometry&&(D&&A.surface?A.geometry.dispose():(A.mesh.geometry.dispose(),A.mesh.geometry=A.geometry)),A.controller&&(A.controller.enabled=A.controlsEnabled),s.hasPointerCapture(A.pointerId)&&s.releasePointerCapture(A.pointerId),s.style.cursor="grab",o();let S=()=>{window.removeEventListener("click",M,!0),window.removeEventListener("pointerdown",S,!0),clearTimeout(_)},M=C=>{C.target===s&&(C.preventDefault(),C.stopImmediatePropagation()),S()},_=setTimeout(S,300);window.addEventListener("click",M,!0),window.addEventListener("pointerdown",S,!0),D&&A.surface&&a.current.onCommit(A.surface)},h=D=>{if(D.button!==0||m)return;let A=a.current,S=t.current[A.objectId];if(!(S instanceof ni.Mesh)||!S.visible)return;let M=S.children.find(R=>R.userData[za]&&R.userData[Qh]===A.decal.id);if(!M?.visible)return;S.updateWorldMatrix(!0,!0),v(D);let _=Nw(M,l),C=l.intersectObject(S,!1)[0];if(!_||!C||_.distance>C.distance+1e-4)return;let E=new ni.Vector3;if(Kt(M)){let R=new ni.Vector3,O=M.geometry.getAttribute("position").count;if(!O)return;for(let N=0;N<O;N++)E.add(M.getVertexPosition(N,R));E.divideScalar(O).applyMatrix4(M.matrixWorld)}else E.fromArray(A.decal.position).applyMatrix4(S.matrixWorld);E.project(r);let L=s.getBoundingClientRect(),k=new ni.Vector2(D.clientX-(L.left+(E.x+1)/2*L.width),D.clientY-(L.top+(1-E.y)/2*L.height)),B=M.material.map?.image,j=n.current;m={pointerId:D.pointerId,node:S,mesh:M,geometry:M.geometry,decal:A.decal,surface:null,offset:k,aspect:B?.width&&B.height?B.width/B.height:1,controller:j,controlsEnabled:j?.enabled??!1},j&&(j.enabled=!1),D.preventDefault(),D.stopImmediatePropagation(),s.setPointerCapture(D.pointerId),s.style.cursor="grabbing"},y=D=>{!m||D.pointerId!==m.pointerId||(D.preventDefault(),D.stopImmediatePropagation(),f=D,u||(u=requestAnimationFrame(()=>{u=0,f&&g(f)})))},w=D=>{!m||D.pointerId!==m.pointerId||(D.preventDefault(),D.stopImmediatePropagation(),f&&g(f),b(!0))},T=()=>b(!1),x=D=>{D.key==="Escape"&&(b(!1),a.current.onCancel())};return s.addEventListener("pointerdown",h,!0),window.addEventListener("pointermove",y,{capture:!0,passive:!1}),window.addEventListener("pointerup",w,!0),window.addEventListener("pointercancel",T),window.addEventListener("blur",T),window.addEventListener("keydown",x),s.addEventListener("lostpointercapture",T),()=>{b(!1),s.style.cursor=d,s.style.touchAction=p,s.removeEventListener("pointerdown",h,!0),window.removeEventListener("pointermove",y,!0),window.removeEventListener("pointerup",w,!0),window.removeEventListener("pointercancel",T),window.removeEventListener("blur",T),window.removeEventListener("keydown",x),s.removeEventListener("lostpointercapture",T)}},[r,i,o,t,n,e.objectId,e.decal]),null}var $n=require("react");var kn=require("three"),Gd=require("three-stdlib");function Ri(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)}}var Jh=new WeakMap;function eg(e){e.traverse(t=>{if(Jh.has(t))return;let n=t.morphTargetInfluences;Jh.set(t,{position:t.position.clone(),quaternion:t.quaternion.clone(),scale:t.scale.clone(),morphTargetInfluences:n?[...n]:void 0})})}function Uw(e){return Jh.get(e)}var yR="reactImmersiveSkinFreeze",vR=new Set(["position","quaternion","scale","morphTargetInfluences"]);function Wd({sources:e,downloadFilename:t,filenameSuffix:n="",onComplete:r}){let i=new kn.Group,o=[];try{for(let s of e){let l=xR(s,e.length>1);i.add(l.root),o.push(...l.animations)}}catch(s){console.error("GLB export failed:",s),r();return}new Gd.GLTFExporter().parse(i,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";Ri(l,`${t}${n}${c}`),r()},s=>{console.error("GLTFExporter error:",s),r()},{binary:!0,onlyVisible:!0,animations:o})}function xR({scene:e,objectBindings:t,matRefs:n,label:r},i){let o=new kn.Group;o.name=r??e.name??"";let a=new Map;for(let[h,y]of Object.entries(t))a.set(y.modelObjectId??h,h);let s=h=>{let y=h.name||h.uuid;return a.get(y)??y},l=h=>{let y=t[s(h)];return y?y.visible===!1:h.visible===!1};for(let h=e;h;h=h.parent)if(l(h))return{root:o,animations:[]};e.updateWorldMatrix(!0,!0);let c=Gd.SkeletonUtils.clone(e),d=new Map,p=[],u=[];e.traverse(h=>p.push(h)),c.traverse(h=>u.push(h)),p.forEach((h,y)=>d.set(h,u[y]));let f=[];for(let h=e.parent;h;h=h.parent)f.unshift(h);let m=o;for(let h of f){let y=tg(h);m.add(y),m=y}m.add(c);let v=[],g=new Set;for(let h of p){let y=d.get(h);if(h.userData?.isWireframeOverlay){v.push(y);continue}delete y.userData[yR];let w=y;if(w.isMesh){let T=n[s(h)];T&&(w.material=T)}(l(h)||h.parent&&g.has(h.parent))&&g.add(h),y.visible=!0}v.forEach(h=>h.removeFromParent());for(let h of g){let y=d.get(h);if(qd(y,o)){if(!MR(y)){y.removeFromParent();continue}if(y.isMesh){let w=tg(y);w.name=y.name,w.userData=y.userData;for(let T of[...y.children])w.add(T);y.parent.add(w),y.removeFromParent(),d.set(h,w)}}}let b=_R(e,o,d,i&&r?`${r}: `:"");return b.length===0?SR(p,d,o):wR(p,d,o,b),{root:o,animations:b}}function tg(e){let t=new kn.Group;return t.position.copy(e.position),t.quaternion.copy(e.quaternion),t.scale.copy(e.scale),t.matrix.copy(e.matrix),t.matrixAutoUpdate=e.matrixAutoUpdate,t}function wR(e,t,n,r){let i=r.map(o=>[...o.tracks]);for(let o of e){let a=gx(o),s=t.get(o);if(!a||!Kt(s)||!qd(s,n))continue;let l=s,c=new Set;for(let v of l.skeleton.bones)for(let g=v;g&&(c.add(g),g!==n);g=g.parent);let d=new Map,p=v=>{let g=v.isBone?v.clone(!1):tg(v);d.set(v.uuid,g);for(let b of v.children)c.has(b)&&g.add(p(b));return g},u=p(n),f=new kn.Group,m=f;for(let v of[...a].reverse()){let g=new kn.Group;v.decompose(g.position,g.quaternion,g.scale);let b=new kn.Group;b.scale.set(1/g.scale.x,1/g.scale.y,1/g.scale.z);let h=new kn.Group;h.quaternion.copy(g.quaternion).invert();let y=new kn.Group;y.position.copy(g.position).negate(),m.add(b),b.add(h),h.add(y),m=y}m.add(u),l.add(f),l.skeleton.bones=l.skeleton.bones.map(v=>d.get(v.uuid)),r.forEach((v,g)=>{for(let b of i[g]){let h=kn.PropertyBinding.parseTrackName(b.name);if(h.propertyName==="morphTargetInfluences")continue;let y=d.get(h.nodeName);if(!y)continue;let w=b.clone();w.name=zw(y.uuid,h),v.tracks.push(w)}})}}function SR(e,t,n){n.updateWorldMatrix(!0,!0);for(let r of e){let i=t.get(r);if(!Kt(r)||!Kt(i)||!i.parent||!qd(i,n))continue;let o=i,a=new kn.Mesh(rd(r),o.material);a.name=o.name,a.userData=o.userData,a.matrix.copy(i.parent.matrixWorld).invert().multiply(bx(r)),a.matrixAutoUpdate=!1,a.matrix.decompose(a.position,a.quaternion,a.scale);let s=i.parent;s.children.splice(s.children.indexOf(i),1,a),a.parent=s,i.parent=null,a.updateMatrixWorld(!0);for(let l of[...i.children])a.attach(l)}}function MR(e){let t=!1;return e.traverse(n=>{n.isBone&&(t=!0)}),t}function qd(e,t){for(let n=e;n;n=n.parent)if(n===t)return!0;return!1}function _R(e,t,n,r){let i=[];for(let o of e.animations??[]){let a=[];for(let s of o.tracks){let l=kn.PropertyBinding.parseTrackName(s.name);if(!vR.has(l.propertyName))continue;let c=kn.PropertyBinding.findNode(e,l.nodeName);if(l.objectName){if(l.objectName!=="bones"||!c||!Kt(c))continue;c=c.skeleton.getBoneByName(l.objectIndex)??null,l.objectName="",l.objectIndex=""}let d=c?n.get(c):void 0;if(!d||!qd(d,t)||l.propertyName==="morphTargetInfluences"&&!d.morphTargetInfluences)continue;CR(c,d,l.propertyName);let p=s.clone();p.name=zw(d.uuid,l),a.push(p)}a.length!==0&&i.push(new kn.AnimationClip(`${r}${o.name}`,o.duration,a,o.blendMode))}return i}function CR(e,t,n){let r=Uw(e);r&&(n==="position"?t.position.copy(r.position):n==="quaternion"?t.quaternion.copy(r.quaternion):n==="scale"?t.scale.copy(r.scale):n==="morphTargetInfluences"&&r.morphTargetInfluences&&t.morphTargetInfluences?.length===r.morphTargetInfluences.length&&(t.morphTargetInfluences=[...r.morphTargetInfluences]))}function zw(e,t){let n=t.objectName?`.${t.objectName}${t.objectIndex!==void 0?`[${t.objectIndex}]`:""}`:"",r=t.propertyIndex!==void 0?`[${t.propertyIndex}]`:"";return`${e}${n}.${t.propertyName}${r}`}var Xw=require("fflate");var Fw=require("fflate");function Hw(e,t=6){return new Promise((n,r)=>{(0,Fw.zip)(e,{level:t},(i,o)=>{i?r(i):n(o)})})}var pc=2048,Gw=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function Ww(e){return e.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&apos;")}function ig(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function $w(e){return ig(e,"model")}function ng(e,t){return e.index?Math.round(e.index.getX(t)):t}function TR(e,t,n){let r=ng(e,n),i=ng(e,n+1),o=ng(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 qw(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function rg(e,t,n,r){let i,o;r?(i=t.index,o=n.index):(i=qw(t),o=qw(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 PR(e,t,n){rg(e,t[0],t[1],n),rg(e,t[1],t[2],n),rg(e,t[2],t[0],n)}function AR(e,t){return Array.isArray(e)?e[t]??null:e}function ER(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 f=u.materialIndex??0,m=AR(a.material,f);if(!m)continue;let v=t.get(m.uuid);v||(r+=1,v={name:m.name||`Material ${r}`,layers:new Map},t.set(m.uuid,v));let g=v.layers.get(a.uuid);g||(g={name:c,color:Gw[i%Gw.length],edges:new Map},i+=1,v.layers.set(a.uuid,g));let b=Math.max(0,u.start),h=Math.min(d,b+u.count);for(let y=b;y+2<h;y+=3){let w=TR(s,l,y);w&&PR(g.edges,w,!!s.index)}}}),[...t.values()].filter(o=>[...o.layers.values()].some(a=>a.edges.size>0))}function Xd(e){return(e*pc).toFixed(2)}function RR(e){return`M${Xd(e.start.u)} ${Xd(1-e.start.v)}L${Xd(e.end.u)} ${Xd(1-e.end.v)}`}function OR(e){let t=Ww(e.name),n=[...e.layers.values()].filter(r=>r.edges.size>0).map((r,i)=>{let o=Ww(r.name),a=`${ig(r.name,"mesh")}-${i+1}`,s=[...r.edges.values()],l=s.filter(p=>p.count===1),d=(l.length>0?l:s).map(RR).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 G2={};Zx(G2,{ACTION_CATALOG:()=>Nc,AssetDiagnosticsPanel:()=>jy,CompareViewer:()=>Iy,DEFAULT_MODEL_VIEWER_LABELS:()=>Nd,DEFAULT_SCENE_CONFIG:()=>nr,DEFAULT_SECTION_CONFIG:()=>Nr,MATERIAL_BLENDING_MODES:()=>ZP,MATERIAL_SIDES:()=>KP,MAX_VIEWER_STATE_BYTES:()=>fo,MEASUREMENT_UNITS:()=>Ka,MODEL_VIEWER_PRESETS:()=>jg,ModelViewer:()=>Cs,ProductOptions:()=>Eu,SEQUENCE_EASINGS:()=>ig,SEQUENCE_OBJECT_PROPERTIES:()=>rg,applyIsolation:()=>ef,applyProductOptions:()=>es,applyStyleRules:()=>Qm,buildBindingsFromNodes:()=>iT,calibrateMeasurements:()=>Hd,chooseMaterialVariant:()=>el,collectObjectHierarchy:()=>QP,colorScaleValue:()=>ay,compareViewerConfigurations:()=>wf,copyBindingStyle:()=>JP,createARHandoffUrl:()=>ap,createDefaultBinding:()=>of,decodeProductSelections:()=>Jd,defaultProductSelections:()=>zi,defineObjectBindings:()=>WP,encodeProductSelections:()=>Cc,evaluateProductConfiguration:()=>Vn,exportConfiguredUSDZ:()=>cp,findCatalogAction:()=>TS,formatProductPrice:()=>_c,generateProductSkus:()=>Q0,groundAsset:()=>k0,inferType:()=>fy,inspectAsset:()=>up,isolatedBindingKeys:()=>Ru,material:()=>Yd,measurementResult:()=>Ja,measurementScale:()=>Za,measurementValue:()=>Qa,measurementsToCsv:()=>qd,parseAssetTransform:()=>Zo,parseMeasurements:()=>co,parseProductConfiguration:()=>rp,parseProductDefinition:()=>Mc,parseSceneProduct:()=>tp,parseSectionConfig:()=>Zs,parseSelectionSets:()=>Xd,parseSequences:()=>$o,parseViewerState:()=>Fi,pasteBindingStyle:()=>eA,patchBindings:()=>uo,patchSceneConfig:()=>_f,prepareViewerState:()=>Qo,productCheckoutUrl:()=>Qd,productDefinitionWarnings:()=>J0,productOptionStates:()=>ep,productPriceFromDefinition:()=>Zd,readARHandoffUrl:()=>sp,resolveProductSelections:()=>tl,sampleSequenceTrack:()=>Ed,sceneLight:()=>Cf,sectionSnapshot:()=>bc,selectBindingKeys:()=>pn,selectBindings:()=>$d,serializeMeasurements:()=>Wd,serializeProductConfiguration:()=>np,serializeViewerState:()=>ts,snapAssetToGrid:()=>I0,upsertSequenceKeyframe:()=>o0,useObjectBinding:()=>FP,useObjectBindingIds:()=>HP,useObjectBindings:()=>Mf,useProductConfigurator:()=>Jm,useSceneConfig:()=>Tf,useShareableViewerState:()=>XP,useViewer:()=>UP,useViewerActions:()=>Af,useViewerAnimations:()=>Ef,useViewerCamera:()=>Dd,useViewerConnection:()=>Rf,useViewerEffects:()=>kf,useViewerHover:()=>Bf,useViewerIsolation:()=>Nf,useViewerModel:()=>Vf,useViewerModels:()=>YP,useViewerSelection:()=>jf,useViewerSequences:()=>nA});module.exports=RR(G2);var Fa=require("react"),Pd=require("@react-three/fiber"),zs=require("three");var Cd=require("three"),Qh=Symbol("react-immersive.model-node-id");function OR(e,t){Object.defineProperty(e,Qh,{value:t,configurable:!0})}function gr(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)=>{OR(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 u=[];c.forEach((p,d)=>{let m=`${l} [${d+1}]`,f=m,b=2;for(;o.has(f)||a.has(f);)f=`${m}.${b++}`;s(p,f),u.push(f)}),i.set(l,u)}return{nodesById:n,idByNode:r,duplicateNames:i}}function br(e){return e[Qh]??e.name??null}function Jx(e,t){let n=t.replace(/\.[^./\\]+$/,"");e.traverse(r=>{r.name&&(r.name=Cd.PropertyBinding.sanitizeNodeName(`${n}_${r.name}`))})}function e0(e,t){let n=t.replace(/\.[^./\\]+$/,""),r=e.clone();for(let i of r.tracks){let a=Cd.PropertyBinding.parseTrackName(i.name).nodeName??"",s=Cd.PropertyBinding.sanitizeNodeName(`${n}_${a}`);i.name=s+i.name.slice(a.length)}return r}function Lr(e,t){let n=null,r=[];return e.traverse(i=>{i[Qh]===t&&(n=i),i.name===t&&r.push(i)}),n??(r.length===1?r[0]:null)}var t0="riEditorGizmo",Jh=new WeakMap;function Xo(e){return e.userData[t0]=!0,e}function n0(e,t){let n=Jh.get(e);return n||(n=new Set,Jh.set(e,n)),n.add(t),()=>{n.delete(t)}}function Td(e){let t=[],n=r=>{r.visible=!1,t.push(r)};return e.traverse(r=>{r.visible&&r.userData[t0]&&n(r)}),Jh.get(e)?.forEach(r=>{r.visible&&n(r)}),()=>{for(let r of t)r.visible=!0}}var i0=require("react/jsx-runtime");function r0({source:e,highlights:t}){let n=(0,Pd.useThree)(a=>a.invalidate),r=(0,Fa.useMemo)(()=>new zs.Group,[]),i=(0,Fa.useMemo)(()=>t.map(a=>{let s=new zs.Box3Helper(new zs.Box3,a.color);s.raycast=()=>{};let l=s.material;return l.depthTest=!1,l.transparent=!0,l.opacity=.85,s.renderOrder=1e3,Xo(s),{helper:s,id:a.objectId}}),[t]);(0,Fa.useEffect)(()=>{for(let{helper:a}of i)r.add(a);return n(),()=>{for(let{helper:a}of i)r.remove(a),a.geometry.dispose(),a.material.dispose();n()}},[r,i,n]);let o=(0,Fa.useRef)(null);return(0,Pd.useFrame)(()=>{let a=e.current;if(!a){r.visible=!1;return}r.visible=!0,(o.current?.root!==a||o.current.helpers!==i)&&(o.current={root:a,helpers:i,nodes:gr(a).nodesById});let s=o.current.nodes;for(let{helper:l,id:c}of i){let u=s[c];l.visible=!!u,u&&l.box.setFromObject(u)}}),(0,i0.jsx)("primitive",{object:r})}var ng=require("three"),rg=["position","rotation","scale","visible","baseColor","emissive","opacity","roughness","metalness","emissiveIntensity"],ig=["linear","ease-in","ease-out","ease-in-out","step"],DR=new Set(["position","rotation","scale"]),IR=new Set(["baseColor","emissive"]),Ga=e=>typeof e=="string"&&e.length>0&&e.length<=256,Wa=e=>typeof e=="number"&&Number.isFinite(e),eg=e=>Array.isArray(e)&&e.length===3&&e.every(Wa);function pc(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Ha(e){throw new Error(`Invalid sequences: ${e}`)}function kR(e){return e.kind==="object"?JSON.stringify([e.kind,e.objectId,e.property]):e.kind==="clip"?JSON.stringify([e.kind,e.clip]):"camera"}function LR(e,t){if(t.kind==="camera")return pc(e)&&eg(e.position)&&eg(e.target)&&(e.fov===null||Wa(e.fov)&&e.fov>0&&e.fov<180)&&Wa(e.zoom)&&e.zoom>0;if(t.kind==="clip")return Wa(e)&&e>=0;let n=t.property;return DR.has(n)?eg(e)&&(n!=="scale"||e.every(r=>r!==0)):IR.has(n)?typeof e=="string"&&/^#[\da-f]{6}$/i.test(e):n==="visible"?typeof e=="boolean":Wa(e)&&e>=0&&(n==="emissiveIntensity"||e<=1)}function $o(e){(!Array.isArray(e)||e.length>64)&&Ha("expected up to 64 sequences.");let t=new Set,n=0;return e.map(r=>{(!pc(r)||!Ga(r.id)||t.has(r.id)||!(typeof r.name=="string"&&Ga(r.name.trim()))||!Wa(r.duration)||r.duration<.1||r.duration>3600||typeof r.loop!="boolean"||typeof r.autoPlay!="boolean"||!Array.isArray(r.tracks)||r.tracks.length>128)&&Ha("each sequence needs a unique id, name, 0.1\u20133600 second duration, loop/autoplay flags and up to 128 tracks."),t.add(r.id);let i=new Set,o=new Set,a=r.tracks.map(s=>{(!pc(s)||!Ga(s.id)||i.has(s.id)||!(typeof s.name=="string"&&Ga(s.name.trim()))||!pc(s.target)||!Array.isArray(s.keyframes)||s.keyframes.length>2048||s.muted!==void 0&&typeof s.muted!="boolean")&&Ha("invalid or duplicate track."),i.add(s.id);let l;s.target.kind==="camera"?l={kind:"camera"}:s.target.kind==="clip"&&Ga(s.target.clip)?l={kind:"clip",clip:s.target.clip}:s.target.kind==="object"&&Ga(s.target.objectId)&&rg.includes(s.target.property)?l={kind:"object",objectId:s.target.objectId,property:s.target.property}:Ha("unknown track target or property.");let c=kR(l);o.has(c)&&Ha("only one track may own each target property in a sequence."),o.add(c);let u=new Set,p=new Set,d=s.keyframes.map(m=>{++n>2e4&&Ha("too many keyframes."),(!pc(m)||!Ga(m.id)||u.has(m.id)||!Wa(m.time)||m.time<0||m.time>r.duration||p.has(m.time)||m.easing!==void 0&&!ig.includes(m.easing)||!LR(m.value,l))&&Ha("keyframes need unique ids/times, valid values and times inside the sequence."),u.add(m.id),p.add(m.time);let f=m.value,b=l.kind==="camera"?{position:[...f.position],target:[...f.target],fov:f.fov,zoom:f.zoom}:Array.isArray(m.value)?[...m.value]:m.value;return{id:m.id,time:m.time,value:b,...m.easing?{easing:m.easing}:{}}}).sort((m,f)=>m.time-f.time);return{id:s.id,name:s.name.trim(),target:l,keyframes:d,...s.muted!==void 0?{muted:s.muted}:{}}});return{id:r.id,name:r.name.trim(),duration:r.duration,loop:r.loop,autoPlay:r.autoPlay,tracks:a}})}function BR(e,t="ease-in-out"){let n=Math.max(0,Math.min(1,e));return t==="step"?0:t==="ease-in"?n*n:t==="ease-out"?1-(1-n)**2:t==="ease-in-out"?n*n*(3-2*n):n}var Ad=(e,t,n)=>e+(t-e)*n,tg=(e,t,n)=>e.map((r,i)=>Ad(r,t[i],n));function Ed(e,t){if(e.muted||!e.keyframes.length||!Number.isFinite(t))return null;let n=e.keyframes;if(t<n[0].time)return null;let r=n[0],i;for(let l of n)if(l.time<=t)r=l;else{i=l;break}if(!i||typeof r.value=="boolean")return structuredClone(r.value);let o=BR((t-r.time)/(i.time-r.time),r.easing);if(typeof r.value=="number"&&typeof i.value=="number")return Ad(r.value,i.value,o);if(typeof r.value=="string"&&typeof i.value=="string")return`#${new ng.Color(r.value).lerp(new ng.Color(i.value),o).getHexString()}`;if(Array.isArray(r.value)&&Array.isArray(i.value))return tg(r.value,i.value,o);let a=r.value,s=i.value;return{position:tg(a.position,s.position,o),target:tg(a.target,s.target,o),fov:a.fov!==null&&s.fov!==null?Ad(a.fov,s.fov,o):a.fov,zoom:Ad(a.zoom,s.zoom,o)}}function o0(e,t){return{...e,keyframes:[...e.keyframes.filter(n=>n.id!==t.id&&Math.abs(n.time-t.time)>1e-6),t].sort((n,r)=>n.time-r.time)}}function a0(e){let t=[],n="",r=null,i=null,o=0,a="stopped",s=!1,l=[],c=0,u=!1,p=!1,d={sequenceId:null,time:0,duration:0,status:a,previewing:s,ready:!1,issues:[]},m=new Set,f=()=>t.find(x=>x.id===i),b=()=>{d={sequenceId:i,time:o,duration:f()?.duration??0,status:a,previewing:s,ready:!!r,issues:l},m.forEach(x=>x())},g=()=>{r?.restore(),o=0,a="stopped",s=!1,b(),r?.invalidate()},y=x=>t.some(P=>P.id===x)?(i===x||(r?.restore(),i=x,o=0,a="stopped",s=!1,l=r?.inspect(f())??[],b(),r?.invalidate()),!0):!1,h=x=>{if(x&&!y(x))return!1;let P=f();return!r||!P?.tracks.some(w=>!w.muted&&w.keyframes.length)?!1:(e?.(),p=!0,o>=P.duration&&(o=0),a="playing",s=!0,l=r.inspect(P),b(),r.invalidate(),!0)},v=()=>{if(!r||!u||p)return;let x=t.find(P=>P.autoPlay);x&&h(x.id)};return{getState:()=>d,subscribe:x=>(m.add(x),()=>{m.delete(x)}),select:y,play:h,stop:g,pause:()=>{a==="playing"&&(a="paused",b())},seek:x=>{let P=f();return!r||!P||!Number.isFinite(x)?!1:(e?.(),o=Math.max(0,Math.min(P.duration,x)),s=!0,a!=="playing"&&(a="paused"),l=r.inspect(P),b(),r.invalidate(),!0)},capture:x=>r?.capture(x)??null,configure:(x,P)=>{u=P;try{let w=$o(x??[]),D=JSON.stringify(w);if(n===D){v();return}r?.restore(),t=w,n=D,f()||(i=t[0]?.id??null,o=0,s=!1),o=Math.min(o,f()?.duration??0),a=s?"paused":"stopped",l=f()?r?.inspect(f())??[]:[],b(),r?.invalidate(),v()}catch(w){g(),t=[],n="",i=null,l=[w instanceof Error?w.message:"Invalid sequence configuration."],b()}},connect:x=>{r?.restore(),r=x,x||(a="stopped",s=!1,o=0),l=f()?r?.inspect(f())??[]:[],b(),v()},advance:x=>{let P=f();if(!P||!r||a!=="playing"||!Number.isFinite(x)||x<0)return;let w=Math.min(x,.1);o+=w,c+=w,o>=P.duration&&(P.loop?o%=P.duration:(o=P.duration,a="finished")),(c>=1/30||a==="finished")&&(c=0,b())},frame:()=>{let x=f();return s&&x?{sequence:x,time:o,playing:a==="playing"}:null},destroy:()=>{r?.restore(),r=null,a="stopped",s=!1,o=0,b()}}}var ao=require("react"),Bd=require("@react-three/fiber");var pg=require("three");var Ht=require("react"),ug=require("three");function dn(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)}var og=new WeakSet;function Fs(e){og.add(e)}function s0(e){let t=og.has(e);return t&&og.delete(e),t}var ag=new WeakSet;function l0(e,t){t?ag.add(e):ag.delete(e)}function Gs(e,t){return ag.has(e)?0:t}var Br=require("three");var sg=require("three");function lg(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 cg(e){return e.category?.trim()??""}function c0(e,t){if(t===null)return e;let n=new Set(t.map(r=>r.trim()));return e.filter(r=>n.has(cg(r)))}function u0(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 Rd(e){return!!e&&[e.position,e.target].every(t=>Array.isArray(t)&&t.length===3&&t.every(Number.isFinite))}function Hs(e){let t=e.camera;return{position:e.getPosition(new sg.Vector3,!1).toArray(),target:e.getTarget(new sg.Vector3,!1).toArray(),azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle,fov:"fov"in t?Number(t.fov):null,zoom:t.zoom}}function mc(e,t){Rd(t)&&(e.setLookAt(...t.position,...t.target,!0),Number.isFinite(t.azimuthAngle)&&Number.isFinite(t.polarAngle)&&e.rotateTo(t.azimuthAngle,t.polarAngle,!0),qa(e,t))}function qa(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"})}function d0(e,t){let n=Hs(e);if(!(e.camera instanceof Br.PerspectiveCamera)||!t)return n;let r=t instanceof Br.Box3?t:new Br.Box3().setFromObject(t);return r.isEmpty()||(n.framing={aspect:e.camera.aspect,min:r.min.toArray(),max:r.max.toArray()}),n}function Od(e,t){let n=t.camera,r=e.framing;if(!(n instanceof Br.PerspectiveCamera)||!r||!(n.aspect>0)||Math.abs(n.aspect-r.aspect)<1e-6)return[...e.position];let i=new Br.Vector3(...e.position),o=new Br.Vector3(...e.target),a=i.clone().sub(o).normalize(),s=new Br.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 u of[r.min[0],r.max[0]])for(let p of[r.min[1],r.max[1]])for(let d of[r.min[2],r.max[2]]){let m=new Br.Vector3(u,p,d).sub(i).applyMatrix4(s);c=Math.max(c,Math.abs(m.x)/(l*n.aspect)+m.z,Math.abs(m.y)/l+m.z)}return i.addScaledVector(a,c*1.02).toArray()}function p0(e){return[e.x,e.y,e.z]}function mi(e,t){let n=new ug.Vector3,r=new ug.Vector3;return t.getPosition(n),t.getTarget(r),{position:p0(n),target:p0(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 NR(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 fc(e,t,n=.6){let r=e.smoothTime;e.smoothTime=Gs(e,n);try{return await t()}finally{e.smoothTime=r}}function Dd(e={}){let t=(0,Ht.useRef)(e);t.current=e;let n=(0,Ht.useRef)(null),[r,i]=(0,Ht.useState)(null),[o,a]=(0,Ht.useState)(()=>({...e.presets})),s=(0,Ht.useRef)(o);s.current=o;let l=(0,Ht.useCallback)(S=>{i(_=>NR(_,S)?_:S)},[]),c=(0,Ht.useCallback)(S=>{l(S)},[l]),u=(0,Ht.useRef)(null),p=(0,Ht.useRef)(null),d=(0,Ht.useRef)(null),m=(0,Ht.useCallback)(S=>{n.current=S;let _=mi(S.raw.controls.camera,S.raw.controls);l(_),S.raw.scene!==p.current&&(p.current=S.raw.scene,u.current=null,d.current=null),S.homeCameraState&&!u.current&&(u.current=S.homeCameraState);let{initialPosition:M,initialTarget:C,initialTransition:T=!1}=t.current;if((M||C)&&S.raw.scene&&(M||S.homeCameraState)&&d.current!==S.raw.controls){d.current=S.raw.controls,S.homeCameraState||Fs(S.raw.controls);let I=M??_.position,L=C??_.target;S.raw.controls.setLookAt(I[0],I[1],I[2],L[0],L[1],L[2],T).then(()=>{if(n.current?.raw.controls!==S.raw.controls)return;let B=mi(S.raw.controls.camera,S.raw.controls);u.current={position:B.position,target:B.target},l(B)}).catch(()=>{})}},[l]),f=(0,Ht.useCallback)(async()=>{let S=n.current,_=S?.raw.controls;if(!_)return!1;try{let M=u.current;if(M){qa(_,M);let C=Od(M,_);await fc(_,()=>_.setLookAt(C[0],C[1],C[2],M.target[0],M.target[1],M.target[2],!0))}else S?.raw.scene?await fc(_,()=>_.fitToBox(S.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await fc(_,()=>_.reset(!0));return!0}catch{return!1}},[]),b=(0,Ht.useCallback)(async()=>{let S=n.current;if(!S?.raw.controls||!S.raw.scene)return!1;try{return await fc(S.raw.controls,()=>S.raw.controls.fitToBox(S.raw.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),g=(0,Ht.useCallback)(async S=>{let _=n.current;if(!_?.raw.controls)return!1;let M=dn(_.objectBindings,S);if(!M)return!1;let C=_.raw.nodes[M];if(!C)return!1;try{return await fc(_.raw.controls,()=>_.raw.controls.fitToBox(C,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),y=(0,Ht.useCallback)(async(S,_=!0)=>{let M=n.current?.raw.controls;if(!M)return!1;try{return n.current?.homeCameraState||Fs(M),await M.setTarget(S[0],S[1],S[2],_),l(mi(M.camera,M)),!0}catch{return!1}},[l]),h=(0,Ht.useCallback)(async(S,_=!0)=>{let M=n.current?.raw.controls;if(!M)return!1;try{n.current?.homeCameraState||Fs(M);let C=[M.setLookAt(S.position[0],S.position[1],S.position[2],S.target[0],S.target[1],S.target[2],_)];S.azimuthAngle!=null&&S.polarAngle!=null&&C.push(M.rotateTo(S.azimuthAngle,S.polarAngle,_)),await Promise.all(C);let T=M.camera,I=!1;return S.fov!=null&&"fov"in T&&typeof T.fov=="number"&&(T.fov=S.fov,I=!0),S.zoom!=null&&"zoom"in T&&typeof T.zoom=="number"&&(T.zoom=S.zoom,I=!0),I&&"updateProjectionMatrix"in T&&T.updateProjectionMatrix(),l(mi(T,M)),!0}catch{return!1}},[l]),v=(0,Ht.useCallback)((S,_=!0)=>h(S,_),[h]),x=(0,Ht.useCallback)((S,_,M=!0)=>h({position:S,target:_},M),[h]),P=(0,Ht.useCallback)(async(S,_,M=!0)=>{let C=n.current?.raw.controls;if(!C)return!1;try{return n.current?.homeCameraState||Fs(C),await C.rotateTo(S*Math.PI/180,_*Math.PI/180,M),l(mi(C.camera,C)),!0}catch{return!1}},[l]),w=(0,Ht.useCallback)(async(S,_=!0)=>{let M=n.current?.raw.controls;if(!M)return!1;try{return n.current?.homeCameraState||Fs(M),await M.dollyTo(S,_),l(mi(M.camera,M)),!0}catch{return!1}},[l]),D=(0,Ht.useCallback)(S=>{let _=n.current?.raw.controls,M=S.trim();if(!_||!M)return null;let C=mi(_.camera,_);return s.current={...s.current,[M]:C},a(T=>({...T,[M]:C})),l(C),C},[l]),E=(0,Ht.useCallback)((S,_=!0)=>{let M=s.current[S];return M?h(M,_):Promise.resolve(!1)},[h]);return{cameraState:r,cameraPresets:o,resetView:f,focusObject:g,fitScene:b,setCameraTarget:y,setCameraState:v,lookAt:x,orbitTo:P,dollyTo:w,savePreset:D,goToPreset:E,handleCameraChange:c,handleViewerReady:m}}var Id=require("three");function tn(e){return e.isSkinnedMesh===!0}function Vi(e){let t=[];return e.traverse(n=>{tn(n)&&t.push(n)}),t}var Xa="reactImmersiveSkinFreeze";function Ws(e){return!!e.userData[Xa]}function Yo(e,t,n=[t]){let r=e.userData,i=new Id.Matrix4().copy(t).invert(),o=r[Xa];if(o){o.frozenInverse.copy(i),o.restWorldTransforms=n.map(l=>l.clone()),e.bindMatrixInverse.copy(i);return}let a={frozenInverse:i,restWorldTransforms:n.map(l=>l.clone()),previousOnBeforeRender:e.onBeforeRender,previousUpdateMatrixWorld:Object.prototype.hasOwnProperty.call(e,"updateMatrixWorld")?e.updateMatrixWorld:void 0};e.bindMatrixInverse.copy(i);let s=e.updateMatrixWorld;e.updateMatrixWorld=function(l){s.call(this,l),e.bindMatrixInverse.copy(a.frozenInverse)},e.onBeforeRender=function(l,c,u,p,d,m){a.previousOnBeforeRender.call(this,l,c,u,p,d,m),e.bindMatrixInverse.copy(a.frozenInverse)},r[Xa]=a}function $a(e){return e.userData[Xa]?.frozenInverse??null}function m0(e){return e.userData[Xa]?.restWorldTransforms??null}function fi(e){let t=e.userData,n=t[Xa];n&&(e.onBeforeRender=n.previousOnBeforeRender,n.previousUpdateMatrixWorld?e.updateMatrixWorld=n.previousUpdateMatrixWorld:delete e.updateMatrixWorld,delete t[Xa],e.updateMatrixWorld(!0))}function kd(e){let t=e,n=$a(e);n&&t.bindMatrixInverse.copy(n),t.skeleton?.update?.();let r=t.geometry.clone(),i=r.getAttribute("position");if(i){let o=new Id.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 f0(e){return e.matrixWorld.clone()}var ji=require("three");function qs(e){return new ji.Matrix4().set(1,e[0],e[1],0,0,1,e[2],0,0,0,1,0,0,0,0,1)}function Ui(e,t){e.matrixAutoUpdate=!t,e.updateMatrix(),t&&(e.matrix.makeRotationFromQuaternion(e.quaternion).multiply(qs(t)).scale(e.scale).setPosition(e.position),e.matrixWorldNeedsUpdate=!0)}function Ld(e,t,n){let r=new ji.Vector3().setFromMatrixColumn(e,0),i=new ji.Vector3().setFromMatrixColumn(e,1),o=new ji.Vector3().setFromMatrixColumn(e,2),a=(f,b)=>{let g=f*(b<0?-1:1);return Math.abs(g-b)<1e-10?b:g},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 u=r.dot(o);o.addScaledVector(r,-u);let p=i.dot(o);o.addScaledVector(i,-p);let d=a(o.length(),t.z);if(Math.abs(d)<1e-12)return{rotation:n.clone(),scale:t.clone(),shear:void 0};o.divideScalar(d);let m=[l/c,u/d,p/d].map(f=>Math.abs(f)<1e-10?0:f);return{rotation:new ji.Quaternion().setFromRotationMatrix(new ji.Matrix4().makeBasis(r,i,o)).normalize(),scale:new ji.Vector3(s,c,d),shear:m.some(Boolean)?m:void 0}}var dg=e=>e==="baseColor"?"color":e;function h0(e){let t=new Set;return e.traverse(n=>{let r=n;if(r.isMesh)for(let i of Array.isArray(r.material)?r.material:[r.material])i&&t.add(i)}),[...t]}function g0({root:e,controls:t,animations:n,invalidate:r}){let i=new Map,o=new Map,a=new Map,s=new Set,l=new Map,c=null,u="",p=h=>e()?Lr(e(),h):null,d=h=>{if(h.kind==="camera"){let D=t();if(!D)return null;let E=mi(D.camera,D);return{position:E.position,target:E.target,fov:E.fov,zoom:E.zoom}}if(h.kind==="clip"){let D=n();return D?.clips.includes(h.clip)?D.getState?.().active.find(E=>E.clip===h.clip)?.time??0:null}let v=p(h.objectId);if(!v)return null;let x=h.property;if(x==="position"||x==="rotation"||x==="scale")return[v[x].x,v[x].y,v[x].z];if(x==="visible")return v.visible;let P=h0(v).find(D=>D[dg(x)]!==void 0),w=P?P[dg(x)]:void 0;return w?.isColor?`#${w.getHexString()}`:typeof w=="number"?w:null},m=h=>{let v=t();v&&(v.stop(),v.setLookAt(...h.position,...h.target,!1),h.fov!==null&&"fov"in v.camera&&(v.camera.fov=h.fov,v.camera.updateProjectionMatrix()),v.zoomTo(h.zoom,!1),v.update(0))},f=h=>{if(i.has(h))return;h.updateWorldMatrix(!0,!0);let v=h.matrixAutoUpdate?void 0:Ld(h.matrix,h.scale,h.quaternion).shear;i.set(h,{position:h.position.toArray(),rotation:[h.rotation.x,h.rotation.y,h.rotation.z],scale:h.scale.toArray(),matrix:h.matrix.clone(),auto:h.matrixAutoUpdate,shear:v});for(let x of Vi(h))Ws(x)||(Yo(x,x.matrixWorld),s.add(x))},b=(h,v)=>{let x=n();x?.stop(h),v&&x&&(x.play(h,{alongside:!0,reverse:v.reverse}),x.setSpeed(v.speed,h),x.seek?.(v.time,h),v.status!=="playing"&&x.pause(h))};return{capture:d,restore:()=>{for(let[h,v]of l)b(h,v);l.clear();for(let[h,v]of i)h.position.fromArray(v.position),h.rotation.set(...v.rotation),h.scale.fromArray(v.scale),h.matrix.copy(v.matrix),h.matrixAutoUpdate=v.auto,h.matrixWorldNeedsUpdate=!0;i.clear(),o.forEach((h,v)=>v.visible=h),o.clear(),a.forEach((h,v)=>{h.forEach((x,P)=>{x instanceof pg.Color?v[P].copy(x):v[P]=x}),v.needsUpdate=!0}),a.clear(),s.forEach(fi),s.clear(),c&&m(c),c=null,u="",e()?.updateWorldMatrix(!0,!0),r()},inspect:h=>h.tracks.filter(v=>!v.muted&&v.keyframes.length&&d(v.target)===null).map(v=>`Unavailable target: ${v.name}.`),invalidate:r,apply:({sequence:h,time:v,playing:x})=>{let P=h.tracks.map(E=>({track:E,value:Ed(E,v)})).filter(E=>E.value!==null);for(let[E,S]of l)P.some(({track:_})=>_.target.kind==="clip"&&_.target.clip===E)||(b(E,S),l.delete(E));for(let{track:E}of P)if(E.target.kind==="object"&&["position","rotation","scale"].includes(E.target.property)){let S=p(E.target.objectId);S&&f(S)}let w=new Map([...a.keys()].map(E=>[E,E.transparent]));o.forEach((E,S)=>S.visible=E),i.forEach((E,S)=>{S.position.fromArray(E.position),S.rotation.set(...E.rotation),S.scale.fromArray(E.scale),Ui(S,E.shear)}),a.forEach((E,S)=>E.forEach((_,M)=>{_ instanceof pg.Color?S[M].copy(_):S[M]=_}));let D=n();for(let{track:E,value:S}of P){if(E.target.kind!=="clip"||!D?.seek||!D.clips.includes(E.target.clip))continue;let _=E.target.clip;l.has(_)||(l.set(_,D.getState?.().active.find(M=>M.clip===_)),D.play(_,{alongside:!0}),D.pause(_)),D.seek(S,_)}for(let{track:E,value:S}of P){let _=E.target;if(_.kind==="clip")continue;if(_.kind==="camera"){c||(c=d(_));let T=JSON.stringify(S);(x||T!==u)&&(m(S),u=T);continue}let M=p(_.objectId);if(!M)continue;let C=_.property;if(C==="visible")o.has(M)||o.set(M,M.visible),M.visible=S;else if(C==="position"||C==="rotation"||C==="scale")C==="rotation"?M.rotation.set(...S):M[C].fromArray(S),Ui(M,i.get(M)?.shear);else for(let T of h0(M)){let I=dg(C),L=T[I];if(L===void 0)continue;let B=a.get(T);if(B||(B=new Map,a.set(T,B)),w.has(T)||w.set(T,T.transparent),B.has(I)||B.set(I,L?.isColor?L.clone():L),L?.isColor?L.set(S):T[I]=S,C==="opacity"){B.has("transparent")||B.set("transparent",T.transparent);let N=S<1||B.get("transparent")===!0;T.transparent=N}}}c&&!P.some(({track:E})=>E.target.kind==="camera")&&(m(c),u=""),w.forEach((E,S)=>{E!==S.transparent&&(S.needsUpdate=!0)}),e()?.updateWorldMatrix(!0,!0)}}}function b0({controller:e,source:t,controls:n,animations:r,ready:i,sequences:o,autoPlay:a,authoredRevision:s}){let l=(0,Bd.useThree)(p=>p.invalidate),c=(0,ao.useRef)({source:t,controls:n,animations:r});c.current={source:t,controls:n,animations:r};let u=(0,ao.useMemo)(()=>g0({root:()=>c.current.source.current,controls:()=>c.current.controls.current,animations:()=>c.current.animations.current,invalidate:l}),[e,l]);return(0,ao.useLayoutEffect)(()=>(l(),()=>u.restore()),[u,s,o,l]),(0,ao.useLayoutEffect)(()=>{e.configure(o,a)},[e,o,a]),(0,ao.useLayoutEffect)(()=>(e.connect(i?u:null),()=>e.connect(null)),[e,u,i]),(0,ao.useLayoutEffect)(()=>{let p=n.current,d=()=>e.pause();return p?.addEventListener("controlstart",d),()=>p?.removeEventListener("controlstart",d)},[e,n,i]),(0,Bd.useFrame)((p,d)=>{if(!i)return;e.advance(d);let m=e.frame();m&&u.apply(m),m?.playing&&l()}),null}var S0=require("react"),$s=require("lucide-react");var Xs=require("react");var Nd={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",sequencePlayer:"Sequence player",sequenceSelect:"Sequence",sequencePlay:"Play sequence",sequencePause:"Pause sequence",sequenceStop:"Stop and restore scene",sequencePlayhead:"Sequence playhead",sequenceTime:"Sequence time",sequenceIssues:"Unavailable sequence targets",arConfiguredButton:"AR handoff",arConfiguredTitle:"Take this configuration to AR",arConfiguredDescription:"Your current materials, visible models and placements are included.",arSnapshotStale:"Updating AR to include your latest changes\u2026",arPreparing:"Preparing your scene\u2026",arRefresh:"Refresh AR",arRetry:"Try again",arExportDetails:"Export details",arPrepare:"Prepare AR",arPrepareAgain:"Prepare again",arDownloadUSDZ:"Download USDZ for iPhone/iPad",arScanConfigured:"Scan to open this configuration on your phone.",arOpenConfiguredLink:"Open configuration link",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:"Pointer lock",cameraController:"Camera controller",cameraControllerSettings:"Camera controller settings",downloadGLB:"Download GLB",downloadGLBDescription:"All visible models, material edits and animations in one file. No annotations or separate editor model slots. Duplicate mesh names may change on reimport.",downloadCombinedGLB:"Download as one GLB",downloadSeparateGLBs:"Download separate GLBs",downloadSeparateGLBsDescription:"One GLB file per model",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",savedMeasurements:"Saved measurements ({count})",noSavedMeasurements:"No saved measurements yet. Pick points in the preview, then save a measurement here.",measurementFiles:"Import / export",measurementSourceUnit:"Model units",measurementDisplayUnit:"Display units",measurementName:"Name",measurementNamePlaceholder:"e.g. Door width",saveMeasurement:"Save",knownMeasurementDistance:"Known length",calibrationUnit:"Calibration unit",calibrateMeasurement:"Calibrate",measurementCalibrationHint:"Pick two distance points, enter their known length, then calibrate.",measurementCalibratedScale:"Calibrated: 1 model unit = {scale} m",resetMeasurementCalibration:"Reset calibration",showSavedMeasurement:"Show {name}",renameSavedMeasurement:"Rename {name}",deleteSavedMeasurement:"Delete {name}",exportMeasurementJson:"Export JSON",exportMeasurementCsv:"Export CSV",importMeasurementJson:"Import JSON",measurementReady:"Ready",measurementApproximate:"Approximate LOD",measurementModelChanged:"Different model",measurementObjectMissing:"Object unavailable",measurementGeometryChanged:"Geometry changed \u2014 measure again",measurementPoseChanged:"Pose changed \u2014 measure again",measurementObjectHidden:"Object hidden",measurementInvalid:"Invalid measurement",measurementWaiting:"Waiting for model",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 color",addText:"Add text",image:"Image",chooseImage:"Choose image",imageToAdd:"Image to add",added:"Added",colour:"Color",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",productOptions:"Options",productOptionsFor:"{product} options",productReset:"Reset",productOptional:"optional",productNone:"None",productAlsoChanges:"Also changes: {changes}",productUnavailable:"Currently unavailable.",productQuantity:"Quantity",productCheckingPrice:"Checking price and availability\u2026",productTotal:"Total",productAddToCart:"Add to cart",productAddingToCart:"Adding\u2026",productRequestQuote:"Request quote",productRequestingQuote:"Requesting\u2026",productRefresh:"Refresh",productBuy:"Buy now",productCopyLink:"Copy link",productLinkCopied:"Link copied",productShowOptions:"Show options",productHideOptions:"Hide options",productIssues:"Configuration issues",productRequestDone:"Request completed.",productSaved:"Saved: {id}",sceneSettings:"Scene Settings",background:"Background",backgroundColor:"Background Color",showEnvironmentAsBackground:"Show as background",backgroundBlur:"Background Blur",environmentPreset:"Preset",environmentIntensity:"Intensity",toneMapping:"Tone Mapping",toneMappingAces:"ACES Filmic",toneMappingAgx:"AgX",toneMappingNeutral:"Neutral",toneMappingNone:"None",ground:"Ground",groundShadow:"Ground Shadow",groundShadowOpacity:"Shadow Opacity",floorGrid:"Floor Grid",display:"Display",wireframe:"Wireframe",autoRotateSpeed:"Rotation Speed",fieldOfView:"Field of View",modelInfo:"Model",modelInfoObjects:"Objects",modelInfoTriangles:"Triangles",modelInfoMaterials:"Materials",resetSettings:"Reset Settings",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 hc(e,t,n={}){return(e?.[t]??Nd[t]).replace(/\{(\w+)\}/g,(i,o)=>Object.prototype.hasOwnProperty.call(n,o)?String(n[o]):i)}var VR=new Map(Object.entries(Nd).map(([e,t])=>[t,e]));function y0(e,t){let n=VR.get(t);return n?hc(e,n):t}var x0=require("react/jsx-runtime"),v0=(0,Xs.createContext)(void 0);function Vd({labels:e,children:t}){return(0,x0.jsx)(v0.Provider,{value:e,children:t})}function xe(){let e=(0,Xs.useContext)(v0);return(0,Xs.useMemo)(()=>Object.assign((t,n)=>hc(e,t,n),{message:t=>y0(e,t)}),[e])}var _n=require("react/jsx-runtime"),jR={sequenceId:null,time:0,duration:0,status:"stopped",previewing:!1,ready:!1,issues:[]},w0=()=>jR,UR=()=>()=>{};function M0(e){return(0,S0.useSyncExternalStore)(e?.subscribe??UR,e?.getState??w0,w0)}function zR({controls:e,duration:t,showScrubber:n=!0,hasTracks:r=!0}){let i=xe(),o=M0(e),a=o.status==="playing";return(0,_n.jsxs)("div",{className:"ri-sequenceTransport",children:[(0,_n.jsx)("button",{type:"button",onClick:()=>a?e?.pause():e?.play(),disabled:!o.ready||!t||!r,"aria-label":i(a?"sequencePause":"sequencePlay"),title:i(a?"sequencePause":"sequencePlay"),children:(0,_n.jsx)("span",{"aria-hidden":"true",children:a?(0,_n.jsx)($s.Pause,{size:15}):(0,_n.jsx)($s.Play,{size:15})})}),(0,_n.jsx)("button",{type:"button",onClick:()=>e?.stop(),disabled:!o.previewing,"aria-label":i("sequenceStop"),title:i("sequenceStop"),children:(0,_n.jsx)($s.Square,{size:14,"aria-hidden":"true"})}),n&&(0,_n.jsx)("input",{"aria-label":i("sequencePlayhead"),type:"range",min:0,max:t||1,step:.01,value:Math.min(o.time,t),disabled:!o.ready||!t,onChange:s=>{e?.pause(),e?.seek(Number(s.target.value))}}),(0,_n.jsxs)("output",{"aria-label":i("sequenceTime"),children:[o.time.toFixed(2)," / ",t.toFixed(2),"s"]})]})}function _0({controls:e,sequences:t}){let n=xe(),r=M0(e);return t.length?(0,_n.jsxs)("section",{className:"ri-sequencePlayer","aria-label":n("sequencePlayer"),onPointerDown:i=>i.stopPropagation(),children:[(0,_n.jsx)("select",{"aria-label":n("sequenceSelect"),value:r.sequenceId??"",onChange:i=>e.select(i.target.value),children:t.map(i=>(0,_n.jsx)("option",{value:i.id,children:i.name},i.id))}),(0,_n.jsx)(zR,{controls:e,duration:r.duration,hasTracks:t.find(i=>i.id===r.sequenceId)?.tracks.some(i=>!i.muted&&i.keyframes.length>0)??!1}),!!r.issues.length&&(0,_n.jsxs)("details",{children:[(0,_n.jsx)("summary",{children:n("sequenceIssues")}),r.issues.map(i=>(0,_n.jsx)("p",{children:i},i))]})]}):null}var go=require("react");var nn=require("three"),Ys=new Map,so={color:"#93c5fd",intensity:.07},Ya=new nn.Color(so.color).multiplyScalar(so.intensity),C0=new nn.Color(so.color),T0=.28,P0=new Map;function Ko(e){return P0.get(e)}function FR(e,t){let n=++e.loadGeneration;e.loaded=!1,e.failed=!1;let r=()=>{if(e.loadGeneration!==n)return;e.loaded=!0;let i=e.pending;e.pending=[];for(let o of i)o()};new nn.ImageLoader().load(t,i=>{e.loadGeneration===n&&(e.texture.image=i,e.texture.needsUpdate=!0,r())},void 0,()=>{e.loadGeneration===n&&(e.failed=!0,console.warn(`Failed to load texture: ${t}`),r())})}function jd(e,t){return`${t}|${e}`}function gc(e,t=nn.NoColorSpace,n){let r=jd(e,t),i=Ys.get(r);if(i)return n&&!i.loaded&&i.pending.push(n),i.texture;let o=P0.get(e)??e,a={texture:new nn.Texture,refCount:0,loaded:!1,pending:n?[n]:[],loadGeneration:0};return a.texture.flipY=!1,a.texture.colorSpace=t,Ys.set(r,a),FR(a,o),a.texture}function Ks(e,t=nn.NoColorSpace,n){let r=gc(e,t,n);return Ys.get(jd(e,t)).refCount+=1,r}function lo(e,t=nn.NoColorSpace){let n=Ys.get(jd(e,t));n&&(n.refCount-=1,n.refCount<=0&&(n.loadGeneration+=1,n.pending=[],n.texture.dispose(),Ys.delete(jd(e,t))))}function Ud(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=nn.RepeatWrapping,p.wrapT=nn.RepeatWrapping,p.center.set(.5,.5),p.needsUpdate=!0,c={texture:p,sourcePath:r,base:n},s[t]=c}let u=o>0?o:1;return c.texture.offset.set(i[0],i[1]),c.texture.repeat.set(1/u,1/u),c.texture.rotation=a,c.texture}function zd(e,t){let n=e.offsetTextures,r=n?.[t];r&&(r.texture.dispose(),delete n[t])}function A0(e){let t=e.offsetTextures;if(t){for(let n of Object.values(t))n.texture.dispose();delete e.offsetTextures}}var mg=null;function Fd(){if(mg)return mg;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 nn.CanvasTexture(t);return i.colorSpace=nn.SRGBColorSpace,mg=i,i}var fg=null;function E0(){if(fg)return fg;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,u=s*n,p=(Math.floor(l/2)+Math.floor(s/2))%4;o.fillStyle=r[p],o.fillRect(c,u,n,n),o.strokeStyle="rgba(0, 0, 0, 0.28)",o.lineWidth=2;for(let h=1;h<4;h+=1){let v=h*n/4;o.beginPath(),o.moveTo(c+v,u),o.lineTo(c+v,u+n),o.moveTo(c,u+v),o.lineTo(c+n,u+v),o.stroke()}o.strokeStyle="#09090b",o.lineWidth=7,o.strokeRect(c,u,n,n);let d=c+n*.23,m=u+n*.72,f=c+n*.72,b=u+n*.23;o.lineCap="round",o.lineJoin="round",o.beginPath(),o.moveTo(d,m),o.lineTo(f,b),o.lineTo(f-n*.2,b),o.moveTo(f,b),o.lineTo(f,b+n*.2),o.stroke();let g=s*t+l+1;o.font=`700 ${Math.round(n*.2)}px ui-monospace, SFMono-Regular, Menlo, monospace`,o.fillStyle="#ffffff",o.strokeStyle="rgba(0, 0, 0, 0.85)",o.lineWidth=6;let y=String(g).padStart(2,"0");o.strokeText(y,c+n/2,u+n*.82),o.fillText(y,c+n/2,u+n*.82)}let a=new nn.CanvasTexture(i);return a.colorSpace=nn.SRGBColorSpace,a.wrapS=nn.RepeatWrapping,a.wrapT=nn.RepeatWrapping,a.flipY=!1,a.anisotropy=8,a.needsUpdate=!0,fg=a,a}function R0(e){for(let t of Ys.values())if(t.texture.source===e.source&&(!t.loaded||t.failed))return!0;return!1}function O0(e){let t=e.trim();return t?/\.(hdr|exr|jpg|jpeg|png|webp)(?:[?#].*)?$/i.test(t):!1}var Nr={enabled:!1,axis:"y",position:.5,flip:!1},GR={clips:[],autoplayClip:null},HR={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}},nr={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:HR,animations:GR,annotations:[]};var ho=require("fflate");function Zs(e){let t=u=>{throw new Error(`Invalid section: ${u}`)},n=u=>u&&typeof u=="object"&&!Array.isArray(u)?u:t("expected an object"),r=u=>typeof u=="string"&&u.trim().length>0&&u.length<=200?u:t("expected a nonempty name or id (up to 200 characters)"),i=u=>typeof u=="number"&&Number.isFinite(u)&&u>=0&&u<=1?u:t("position must be between 0 and 1"),o=u=>!Array.isArray(u)||u.length!==3||!u.every(p=>typeof p=="number"&&Number.isFinite(p))||Math.hypot(...u)<1e-8?t("normal must be a finite, nonzero vector"):[...u],a=u=>{let p=n(u);return!["x","y","z"].includes(p.axis)||typeof p.enabled!="boolean"||typeof p.flip!="boolean"?t("invalid plane"):{enabled:p.enabled,axis:p.axis,position:i(p.position),flip:p.flip,...p.normal!==void 0?{normal:o(p.normal)}:{}}},s=u=>{let p=n(u),d=a(p);if(p.mode!==void 0){if(!["plane","planes","box"].includes(p.mode))return t("invalid mode");d.mode=p.mode}if(p.planes!==void 0){if(!Array.isArray(p.planes)||p.planes.length>6)return t("at most six planes are supported");let m=new Set;d.planes=p.planes.map(f=>{let b=n(f),g=r(b.id);return m.has(g)?t("duplicate plane id"):(m.add(g),{...a(b),id:g,name:r(b.name)})})}if(p.activePlaneId!==void 0&&(d.activePlaneId=r(p.activePlaneId)),p.invertBox!==void 0){if(typeof p.invertBox!="boolean")return t("invalid box inversion");d.invertBox=p.invertBox}if(p.box!==void 0){let m=n(p.box),f=y=>!Array.isArray(y)||y.length!==3?t("invalid box bounds"):y.map(i),b=f(m.min),g=f(m.max);if(b.some((y,h)=>y>=g[h]))return t("box minimum must be below its maximum on every axis");d.box={min:b,max:g}}return d},l=n(e),c=s(l);if(l.presets!==void 0){if(!Array.isArray(l.presets)||l.presets.length>32)return t("at most 32 presets are supported");let u=new Set;c.presets=l.presets.map(p=>{let d=n(p),m=r(d.id);return u.has(m)?t("duplicate preset id"):(u.add(m),{id:m,name:r(d.name),settings:s(d.settings)})})}return c}function bc(e){let{presets:t,...n}=Zs(e);return n}function D0(e){try{return Zs(e)}catch{return Nr}}var yr=require("three");function Pe(e){return e.id??e.url}function Zo(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Expected an asset transform object.");let t={};for(let n of["position","rotation","scale"]){let r=e[n];if(r!==void 0){if(!Array.isArray(r)||r.length!==3||!r.every(i=>typeof i=="number"&&Number.isFinite(i))||n==="scale"&&r.some(i=>i===0))throw new Error(`Invalid asset ${n}: expected three finite ${n==="scale"?"nonzero ":""}numbers.`);t[n]=[...r]}}return t}function I0(e,t){if(!Number.isFinite(t)||t<=0)throw new Error("Grid size must be positive.");let n=Zo(e),[r,i,o]=n.position??[0,0,0];return{...n,position:[Math.round(r/t)*t,i,Math.round(o/t)*t]}}function k0(e,t){let n=Zo(e),r=n.position??[0,0,0],i=new yr.Matrix4().compose(new yr.Vector3(...r),new yr.Quaternion().setFromEuler(new yr.Euler(...n.rotation??[0,0,0])),new yr.Vector3(...n.scale??[1,1,1])),o=new yr.Box3(new yr.Vector3(...t.min),new yr.Vector3(...t.max)).applyMatrix4(i);if(!Number.isFinite(o.min.y))throw new Error("Cannot place an asset with empty bounds.");return{...n,position:[r[0],r[1]-o.min.y,r[2]]}}var Ke=require("three");function Qs(e){if(e.length!==3)return null;let t=new Ke.Vector3(...e[0]).sub(new Ke.Vector3(...e[1])),n=new Ke.Vector3(...e[2]).sub(new Ke.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 Gd(e,t){if(!e.normal)return null;let n=new Ke.Vector3(...e.normal);if(n.lengthSq()===0)return null;n.normalize();let r=new Ke.Vector3(...t),i=r.clone().sub(new Ke.Vector3(...e.position)).dot(n);return{distance:Math.abs(i),projection:r.addScaledVector(n,-i).toArray()}}function Js(e){if(e.length<3)return{error:"Pick at least three points to finish the area."};let t=new Ke.Vector3(...e[0]),n=e.map(g=>new Ke.Vector3(...g).sub(t)),r=Math.max(...n.map(g=>g.length()));if(r===0)return{error:"Area points must be distinct."};let i=new Ke.Vector3;for(let g=1;g<n.length-1;g+=1){let y=n[g].clone().cross(n[g+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(g=>Math.abs(g.dot(i))>o))return{error:"Area points must lie on one plane."};let a=n.find(g=>g.length()>r*1e-10).clone().normalize(),s=i.clone().cross(a).normalize(),l=n.map(g=>new Ke.Vector2(g.dot(a),g.dot(s))),c=(g,y,h)=>(y.x-g.x)*(h.y-g.y)-(y.y-g.y)*(h.x-g.x),u=r*r*1e-10,p=(g,y,h)=>Math.abs(c(g,y,h))<=u&&h.x>=Math.min(g.x,y.x)-r*1e-10&&h.x<=Math.max(g.x,y.x)+r*1e-10&&h.y>=Math.min(g.y,y.y)-r*1e-10&&h.y<=Math.max(g.y,y.y)+r*1e-10;for(let g=0;g<l.length;g+=1){let y=l[g],h=l[(g+1)%l.length];if(y.distanceTo(h)<=r*1e-10)return{error:"Area points must be distinct."};for(let v=g+1;v<l.length;v+=1){if(v===g+1||g===0&&v===l.length-1)continue;let x=l[v],P=l[(v+1)%l.length],w=c(y,h,x),D=c(y,h,P),E=c(x,P,y),S=c(x,P,h);if(w*D<0&&E*S<0||p(y,h,x)||p(y,h,P)||p(x,P,y)||p(x,P,h))return{error:"Area edges must not cross or touch each other."}}}let d=0,m=0,f=0;for(let g=0;g<l.length;g+=1){let y=l[g],h=l[(g+1)%l.length],v=y.x*h.y-h.x*y.y;d+=v,m+=(y.x+h.x)*v,f+=(y.y+h.y)*v}if(Math.abs(d)<=u)return{error:"The polygon has no measurable area."};let b=t.clone().addScaledVector(a,m/(3*d)).addScaledVector(s,f/(3*d));return{area:Math.abs(d)/2,center:b.toArray(),triangles:Ke.ShapeUtils.triangulateShape(l,[])}}function yc(e,t){if(e.length<2)return 0;let n=0;for(let r=1;r<e.length;r+=1)n+=new Ke.Vector3(...e[r]).distanceTo(new Ke.Vector3(...e[r-1]));return t&&(n+=new Ke.Vector3(...e[e.length-1]).distanceTo(new Ke.Vector3(...e[0]))),n}var WR=1e-5;function qR(e,t){let n=e.getAttribute("position"),r=e.getIndex(),i=n.count,o=Math.max(t,1e-9),a=(f,b,g)=>`${Math.round(f/o)}_${Math.round(b/o)}_${Math.round(g/o)}`,s=new Int32Array(i),l=[],c=new Map;for(let f=0;f<i;f+=1){let b=n.getX(f),g=n.getY(f),y=n.getZ(f),h=a(b,g,y),v=c.get(h);v===void 0&&(v=l.length,l.push(new Ke.Vector3(b,g,y)),c.set(h,v)),s[f]=v}let u=l.map(()=>new Map),p=(f,b)=>{if(f===b)return;let g=l[f].distanceTo(l[b]);u[f].has(b)||u[f].set(b,g),u[b].has(f)||u[b].set(f,g)},d=(r?r.count:i)/3,m=f=>r?r.getX(f):f;for(let f=0;f<d;f+=1)p(s[m(f*3)],s[m(f*3+1)]),p(s[m(f*3+1)],s[m(f*3+2)]),p(s[m(f*3+2)],s[m(f*3)]);return{weldedId:s,weldedPosition:l,neighbors:u}}function XR(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,u]of e[s]??[])r.has(c)||(r.set(c,l+u),a.push(c))}i=a}return r}function $R(e){let n=(Math.abs(e.y)<.9?new Ke.Vector3(0,1,0):new Ke.Vector3(1,0,0)).clone().cross(e).normalize(),r=e.clone().cross(n).normalize();return[n,r]}function YR(e,t,n){let[r,i]=$R(t),o=0,a=0,s=0;for(let b of n){let g=b.clone().sub(e),y=g.dot(r),h=g.dot(i);o+=y*y,a+=y*h,s+=h*h}let l=o+s,c=o*s-a*a,u=Math.sqrt(Math.max(0,l*l/4-c)),p=l/2+u,d=1,m=0;Math.abs(a)>1e-12?(d=p-s,m=a):s>o&&(d=0,m=1);let f=Math.hypot(d,m)||1;return r.clone().multiplyScalar(d/f).add(i.clone().multiplyScalar(m/f)).normalize()}function KR(e,t,n,r){let i=e.getAttribute("position"),o=e.getIndex(),a=i.count,s=(o?o.count:a)/3,l=d=>o?o.getX(d):d,c=d=>new Ke.Vector3(i.getX(d),i.getY(d),i.getZ(d)).applyMatrix4(t),u=d=>d.clone().sub(n).dot(r),p=[];for(let d=0;d<s;d+=1){let m=c(l(d*3)),f=c(l(d*3+1)),b=c(l(d*3+2)),g=u(m),y=u(f),h=u(b),v=[],x=(P,w,D,E)=>{w>0!=E>0&&v.push(P.clone().lerp(D,w/(w-E)))};x(m,g,f,y),x(f,y,b,h),x(b,h,m,g),v.length===2&&p.push([v[0],v[1]])}return p}function ZR(e,t){let n=Math.max(t,1e-9),r=d=>`${Math.round(d.x/n)}_${Math.round(d.y/n)}_${Math.round(d.z/n)}`,i=new Map,o=[],a=d=>{let m=r(d),f=i.get(m);return f===void 0&&(f=o.length,o.push(d),i.set(m,f)),f},s=[],l=d=>{for(;s.length<=d;)s.push(new Map)};for(let[d,m]of e){let f=a(d),b=a(m);f!==b&&(l(f),l(b),s[f].set(b,(s[f].get(b)??0)+1),s[b].set(f,(s[b].get(f)??0)+1))}let c=(d,m)=>d<m?`${d}_${m}`:`${m}_${d}`,u=new Set,p=[];for(let d=0;d<s.length;d+=1)for(let m of s[d]?.keys()??[]){if(u.has(c(d,m)))continue;let f=[d],b=d,g=m;u.add(c(b,g));let y=0;for(;g!==d&&g>=0&&y<s.length+4;){f.push(g);let h=[...s[g].keys()].filter(x=>x!==b),v;if(h.length<=1)v=h[0];else{let x=o[g].clone().sub(o[b]).normalize(),P=-1/0;for(let w of h){let D=o[w].clone().sub(o[g]).normalize(),E=x.dot(D);E>P&&(P=E,v=w)}}if(v===void 0){g=-1;break}u.add(c(g,v)),b=g,g=v,y+=1}g===d&&f.length>=3&&p.push(f.map(h=>o[h]))}return p}function L0(e,t){let n=1/0;for(let r of e)n=Math.min(n,r.distanceTo(t));return n}function QR(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 B0(e,t,n,r,i){let o=KR(e,t,r,i);if(o.length===0)return{error:"Couldn't trace a loop around this point."};let a=ZR(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=L0(s,r);for(let u of a.slice(1)){let p=L0(u,r);p<l&&(l=p,s=u)}let c=QR(s,r).map(u=>u.toArray());return{points:c,length:yc(c,!0)}}function N0(e){if(!(e.object instanceof Ke.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 Ke.Float32BufferAttribute(new Float32Array(o.count*3),3),s=new Ke.Vector3;for(let l=0;l<o.count;l++)t.getVertexPosition(l,s),a.setXYZ(l,s.x,s.y,s.z);n=new Ke.BufferGeometry().setAttribute("position",a).setIndex(n.getIndex())}let r=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let o=new Ke.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*WR}}function V0(e,t=6){let n=N0(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=U0(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:u,neighbors:p}=qR(i,a),d=i.getAttribute("position"),m=e.point.clone().applyMatrix4(o.clone().invert()),f=[r.a,r.b,r.c],b=f[0],g=1/0;for(let w of f){let E=new Ke.Vector3(d.getX(w),d.getY(w),d.getZ(w)).distanceTo(m);E<g&&(g=E,b=w)}let y=c[b],h=u[y].clone().applyMatrix4(o),v=XR(p,y,t),x=[];for(let w of v.keys())x.push(u[w].clone().applyMatrix4(o));if(x.length<6)return{error:"Not enough surface detail near this point to trace a loop. Try a different spot."};let P=YR(h,l,x);return B0(i,o,a,e.point.clone(),P)}function j0(e,t=new Ke.Vector3(0,1,0)){let n=N0(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."}:B0(r,i,o,e.point.clone(),a)}function U0(e){if(!(e.object instanceof Ke.Mesh)||!e.face)return null;let t=e.object,n=t.matrixWorld.clone();if(e.instanceId!==void 0&&"getMatrixAt"in t){let r=new Ke.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 Ke.Vector3).applyMatrix4(n))}function z0(e){if(!(e.object instanceof Ke.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 F0(e,t,n,r,i,o=12){let a=U0(e),s=a?a[1].clone().sub(a[0]).cross(a[2].clone().sub(a[0])).normalize():null,l={position:e.point.toArray(),...s&&s.lengthSq()>0?{normal:s.toArray()}:{},...a?{faceVertices:a.map(d=>d.toArray())}:{}};if(!a||i==="none")return l;let c=d=>{let m=new Ke.Vector4(d.x,d.y,d.z,1).applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix);return m.w<=0||m.z/m.w<-1||m.z/m.w>1?null:{screen:new Ke.Vector2((m.x/m.w+1)*r.width/2,(1-m.y/m.w)*r.height/2),w:m.w}},u=a.map(c),p=o;if((i==="vertex"||i==="auto")&&(u.forEach((d,m)=>{let f=d?.screen.distanceTo(n)??1/0;f<=p&&(p=f,l.position=a[m].toArray(),l.snapped="vertex")}),l.snapped))return l;if(i==="edge"||i==="auto")for(let d=0;d<3;d+=1){let m=(d+1)%3,f=u[d],b=u[m];if(!f||!b)continue;let g=b.screen.clone().sub(f.screen);if(g.lengthSq()===0)continue;let y=Math.max(0,Math.min(1,n.clone().sub(f.screen).dot(g)/g.lengthSq())),h=f.screen.clone().addScaledVector(g,y).distanceTo(n);if(h<=p){p=h;let v=y*f.w/((1-y)*b.w+y*f.w);l.position=a[d].clone().lerp(a[m],v).toArray(),l.snapped="edge"}}return l}var Ka=["m","cm","mm","in","ft"],hg={m:1,cm:.01,mm:.001,in:.0254,ft:.3048},JR=["distance","angle","area","pointToPlane","wrap","wrapHorizontal"];function vc(e){return Ka.includes(e)}function Za(e={},t="m"){let n=e.displayUnit??t,r=e.metersPerUnit??hg[e.sourceUnit??"m"];if(!Number.isFinite(r)||r<=0)throw new Error("Measurement scale must be a positive finite number.");return{displayUnit:n,metersPerUnit:r,factor:vc(n)?r/hg[n]:1}}function xc(e){try{return new URL(e,typeof window<"u"?window.location?.href:void 0).href}catch{return e}}function Hd(e,t,n,r={}){if(!vc(n)||!Number.isFinite(e)||e<=0||!Number.isFinite(t)||t<=0)throw new Error("Calibration needs two distinct points and a positive known distance.");let i=t*hg[n]/e;if(!Number.isFinite(i)||i<=0)throw new Error("Calibration scale is outside the supported range.");return{...r,metersPerUnit:i}}function Qa(e,t){let n=t.map(r=>r.position);if(e==="angle"){let r=Qs(n);return r===null?null:{value:r,dimension:0}}if(e==="area"){let r=Js(n);return"error"in r?null:{value:r.area,dimension:2}}if(e==="pointToPlane"){let r=t.length===2?Gd(t[0],t[1].position):null;return r?{value:r.distance,dimension:1}:null}return t.length<(e==="distance"?2:3)?null:{value:yc(n,e!=="distance"),dimension:1}}function Ja(e,t={},n="m",r=e.points,i=e.approximate?"approximate":"ready"){let o=Qa(e.tool,r),{factor:a,displayUnit:s}=Za(t,n),l=i==="ready"||i==="approximate",c=l&&o?o.value*a**o.dimension:null;return{id:e.id,status:l?o&&c!==null&&Number.isFinite(c)?i:"invalid":i,rawValue:l&&o&&Number.isFinite(o.value)?o.value:null,value:c!==null&&Number.isFinite(c)?c:null,unit:e.tool==="angle"?"\xB0":e.tool==="area"?`${s}\xB2`:s}}function co(e){function t(){throw new Error("Invalid measurements: expected settings and valid named measurements with finite points.")}let n=s=>!!s&&typeof s=="object"&&!Array.isArray(s),r=s=>Array.isArray(s)&&s.length===3&&s.every(l=>typeof l=="number"&&Number.isFinite(l));typeof e=="string"&&(e.length>5*1024*1024&&t(),e=JSON.parse(e)),(!n(e)||e.version!==void 0&&e.version!==1||!n(e.settings)||!Array.isArray(e.items)||e.items.length>256)&&t();let i={};for(let s of["sourceUnit","displayUnit"])e.settings[s]!==void 0&&(vc(e.settings[s])||t(),i[s]=e.settings[s]);e.settings.metersPerUnit!==void 0&&((typeof e.settings.metersPerUnit!="number"||!Number.isFinite(e.settings.metersPerUnit)||e.settings.metersPerUnit<=0)&&t(),i.metersPerUnit=e.settings.metersPerUnit);let o=new Set,a=e.items.map(s=>{(!n(s)||typeof s.id!="string"||!s.id||o.has(s.id)||typeof s.name!="string"||!s.name.trim()||typeof s.modelId!="string"||!s.modelId||!JR.includes(s.tool)||!Array.isArray(s.points)||s.points.length>8192||typeof s.createdAt!="string"||!Number.isFinite(Date.parse(s.createdAt)))&&t(),o.add(s.id),s.tilesetUrl!==void 0&&s.tilesetUrl!==null&&typeof s.tilesetUrl!="string"&&t(),(s.visible!==void 0&&typeof s.visible!="boolean"||s.approximate!==void 0&&typeof s.approximate!="boolean")&&t();let l=new Set,c=s.points.map(p=>{if((!n(p)||typeof p.id!="number"||!Number.isFinite(p.id)||!r(p.position))&&t(),l.has(p.id)&&t(),l.add(p.id),p.normal!==void 0&&!r(p.normal)&&t(),p.faceVertices!==void 0&&(!Array.isArray(p.faceVertices)||p.faceVertices.length!==3||!p.faceVertices.every(r))&&t(),p.snapped!==void 0&&!["vertex","edge"].includes(p.snapped)&&t(),p.anchor!==void 0){let m=p.anchor;(!n(m)||typeof m.nodeId!="string"||!m.nodeId||!r(m.localPosition)||typeof m.geometrySignature!="string"||typeof m.poseSignature!="string")&&t(),m.localNormal!==void 0&&!r(m.localNormal)&&t(),m.localFaceVertices!==void 0&&(!Array.isArray(m.localFaceVertices)||m.localFaceVertices.length!==3||!m.localFaceVertices.every(r))&&t(),m.instanceId!==void 0&&(!Number.isInteger(m.instanceId)||m.instanceId<0)&&t()}let d=p.anchor;return{id:p.id,position:[...p.position],...p.normal?{normal:[...p.normal]}:{},...p.faceVertices?{faceVertices:p.faceVertices.map(m=>[...m])}:{},...p.snapped?{snapped:p.snapped}:{},...d?{anchor:{nodeId:d.nodeId,localPosition:[...d.localPosition],geometrySignature:d.geometrySignature,poseSignature:d.poseSignature,...d.localNormal?{localNormal:[...d.localNormal]}:{},...d.localFaceVertices?{localFaceVertices:d.localFaceVertices.map(m=>[...m])}:{},...d.instanceId!==void 0?{instanceId:d.instanceId}:{}}}:{}}}),u={id:s.id,name:s.name,modelId:s.modelId,tool:s.tool,points:c,createdAt:s.createdAt,...s.tilesetUrl!==void 0?{tilesetUrl:s.tilesetUrl}:{},...s.visible!==void 0?{visible:s.visible}:{},...s.approximate!==void 0?{approximate:s.approximate}:{}};return Qa(u.tool,c)||t(),u});return{settings:i,items:a}}function Wd(e){return JSON.stringify({version:1,...co(e)},null,2)}function qd(e,t,n="m"){let r=co(e),i=new Map(t?.map(a=>[a.id,a])),o=a=>{let s=String(a??"");return/^[=+@-]/.test(s)&&(s=`'${s}`),`"${s.replace(/"/g,'""')}"`};return[["id","name","modelId","type","status","value","unit","createdAt"],...r.items.map(a=>{let s=i.get(a.id)??Ja(a,r.settings,n);return[a.id,a.name,a.modelId,a.tool,s.status,s.value,s.unit,a.createdAt]})].map(a=>a.map(o).join(",")).join(`\r
3665
+ `)}function Xd(e){if(!Array.isArray(e)||e.length>128)throw new Error("Invalid selections: expected up to 128 named selection sets.");let t=new Set;return e.map(n=>{if(!n||typeof n!="object"||typeof n.id!="string"||!n.id||t.has(n.id)||typeof n.name!="string"||!n.name.trim()||n.name.length>200||!Array.isArray(n.objectIds)||n.objectIds.length>1e5||n.objectIds.some(r=>typeof r!="string"||!r))throw new Error("Invalid selections: each set needs a unique id, a name, and model object ids.");return t.add(n.id),{id:n.id,name:n.name.trim(),objectIds:[...new Set(n.objectIds)]}})}function gg(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function wc(e,t){if(!gg(t))return t;let n=gg(e)?{...e}:{};for(let r of Object.keys(t)){let i=t[r];n[r]=gg(i)?wc(n[r],i):i}return n}function eO(e){return typeof e=="object"&&!Array.isArray(e)}function tO(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 pn(e,t){if(eO(t))return Object.entries(e).filter(([,i])=>tO(i,t)).map(([i])=>i);let r=(typeof t=="string"?[t]:t).map(i=>dn(e,i)).filter(i=>i!==null);return[...new Set(r)]}function $d(e,t){return pn(e,t).map(n=>e[n]).filter(n=>n!==void 0)}function nO(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!="string"}function uo(e,t,n){let r=nO(t)?t:[{ids:t,patch:n??{}}],i=e;for(let o of r)for(let a of pn(i,o.ids)){let s=i[a];if(!s)continue;let l=wc(s,o.patch);i===e&&(i={...e}),i[a]=l}return i}function Yd(e){return{style:{material:e}}}var bg="KHR_materials_variants",G0="riMaterialVariants",H0="riMaterialVariantGroups";function Nn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function rO(e){if(!Nn(e)||!Nn(e.extensions))return[];let t=e.extensions[bg];if(!Nn(t)||!Array.isArray(t.variants))return[];let n=new Set;return t.variants.map((r,i)=>{let o=Nn(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 W0(e){let t=e.userData?.gltfExtensions;if(!Nn(t))return[];let n=t[bg];return!Nn(n)||!Array.isArray(n.mappings)?[]:n.mappings.filter(r=>Nn(r)&&Number.isInteger(r.material)&&Array.isArray(r.variants)&&r.variants.every(Number.isInteger))}function q0(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 iO=/^\s*(.+?)\s*(?::|\s\/\s)\s*(.+?)\s*$/;function oO(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 aO(e){if(!Nn(e))return;let t=Nn(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=>oO(r).toString(16).padStart(2,"0")).join("")}`}function sO(e,t){if(t.length===0)return[];let n=Nn(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((m,f)=>{(Nn(m)&&Array.isArray(m.primitives)?m.primitives:[]).forEach((g,y)=>{if(!Nn(g))return;let h=Nn(g.extensions)?g.extensions[bg]:void 0;if(!Nn(h)||!Array.isArray(h.mappings))return;let v=Nn(g.attributes)?g.attributes.POSITION:void 0,x=typeof v=="number"?i[v]:void 0,P=Nn(x)&&typeof x.count=="number"?x.count:1;for(let w of h.mappings)if(!(!Nn(w)||!Number.isInteger(w.material)||!Array.isArray(w.variants)))for(let D of w.variants){if(!Number.isInteger(D)||!a[D])continue;a[D].add(`${f}/${y}`);let E=s[D],S=w.material;E.set(S,(E.get(S)??0)+P)}})});let l=t.map((m,f)=>{let b=null;for(let[y,h]of s[f])(b===null||h>(s[f].get(b)??0))&&(b=y);let g=b===null?void 0:aO(o[b]);return{name:m,label:m,...g?{swatch:g}:{}}}),c=t.map(()=>-1),u=[],p=new Map;return t.forEach((m,f)=>{let b=iO.exec(m);if(!b)return;let[,g,y]=b;p.has(g)||(p.set(g,u.length),u.push({name:g,members:[]})),c[f]=p.get(g),u[c[f]].members.push(f),l[f].label=y}),t.map((m,f)=>f).filter(m=>c[m]<0).sort((m,f)=>+(a[m].size===0)-+(a[f].size===0)).forEach(m=>{let f=u.map((y,h)=>({group:y,groupIndex:h})).filter(({group:y})=>y.name===null&&y.members.some(h=>a[m].size===0||a[h].size===0?!1:[...a[m]].some(v=>a[h].has(v)))).map(({groupIndex:y})=>y);if(f.length===0&&a[m].size===0){let y=u.findIndex(h=>h.name===null);y>=0&&f.push(y)}if(f.length===0){c[m]=u.length,u.push({name:null,members:[m]});return}let[b,...g]=f;for(let y of g){for(let h of u[y].members)c[h]=b;u[b].members.push(...u[y].members),u[y].members=[]}c[m]=b,u[b].members.push(m)}),u.filter(m=>m.members.length>0).sort((m,f)=>Math.min(...m.members)-Math.min(...f.members)).map(m=>({name:m.name,variants:[...m.members].sort((f,b)=>f-b).map(f=>l[f])}))}function el(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 po(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 X0(e){let t=e.parser,n=rO(t?.json);if(!(!t||n.length===0))return e.scene.userData[G0]=n,e.scene.userData[H0]=sO(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 yg(e){let t=e.userData?.[G0];return Array.isArray(t)&&t.every(n=>typeof n=="string")?t:[]}function Kd(e){let t=e.userData?.[H0];if(Array.isArray(t))return t;let n=yg(e);return n.length>0?[{name:null,variants:n.map(r=>({name:r,label:r}))}]:[]}function vg(e,t){let{materialVariant:n,...r}=e;return{...r,activeVariants:t}}var Y0=new Set(["__proto__","constructor","prototype"]),xg=(e,t)=>e<t?-1:e>t?1:0;function Tt(e){throw new Error(`Invalid product: ${e}`)}var Cn=e=>!!e&&typeof e=="object"&&!Array.isArray(e),Sc=e=>typeof e=="string"&&e.length>0&&e.length<=200&&!Y0.has(e),mo=e=>typeof e=="string"&&e.trim().length>0&&e.length<=500;function K0(e){let t=0;function n(r,i){return(++t>1e5||i>32)&&Tt("definition is too complex."),r===null||typeof r=="string"||typeof r=="boolean"||typeof r=="number"&&Number.isFinite(r)?r:Array.isArray(r)?r.map(o=>n(o,i+1)):(Cn(r)||Tt("expected JSON data."),Object.fromEntries(Object.entries(r).filter(([,o])=>o!==void 0).map(([o,a])=>(Y0.has(o)&&Tt("reserved property name."),[o,n(a,i+1)]))))}return n(e,0)}function lO(e){if(typeof e!="string"||e.length>2048)return!1;try{return["http:","https:"].includes(new URL(e.replace(/\{[a-zA-Z]+\}/g,"x")).protocol)}catch{return!1}}function Mc(e){let t=K0(typeof e=="string"?JSON.parse(e):e);(!Cn(t)||!Sc(t.id)||!mo(t.label)||!Sc(t.revision)||!Array.isArray(t.groups)||!t.groups.length||t.groups.length>64)&&Tt("id, label, revision, and 1\u201364 option groups are required.");let n=new Map;for(let i of t.groups){(!Cn(i)||!Sc(i.id)||n.has(i.id)||!mo(i.label)||i.required!==void 0&&typeof i.required!="boolean"||!Array.isArray(i.options)||!i.options.length||i.options.length>128)&&Tt("groups need unique ids, labels, and 1\u2013128 options.");let o=new Set;n.set(i.id,o);for(let a of i.options)if((!Cn(a)||!Sc(a.id)||o.has(a.id)||!mo(a.label)||a.sku!==void 0&&!mo(a.sku))&&Tt("options need unique ids and labels."),o.add(a.id),a.description!==void 0&&!mo(a.description)&&Tt("an option description must be text."),a.swatch!==void 0&&!(typeof a.swatch=="string"&&/^#[0-9a-f]{3,8}$/i.test(a.swatch))&&Tt("a swatch must be a hex color."),a.priceDeltaMinor!==void 0&&!Number.isSafeInteger(a.priceDeltaMinor)&&Tt("a price change must be a whole number of minor units."),a.variants!==void 0&&(!Array.isArray(a.variants)||a.variants.some(s=>!mo(s)))&&Tt("variant names must be strings."),a.appearance!==void 0){(!Array.isArray(a.appearance)||a.appearance.length>128)&&Tt("invalid appearance edits.");for(let s of a.appearance){Cn(s)||Tt("invalid appearance edit.");let l=s.target;typeof l=="string"&&l||Array.isArray(l)&&l.every(c=>typeof c=="string"&&!!c)||Cn(l)&&Object.keys(l).length===1&&["group","tag","type"].some(c=>typeof l[c]=="string")||Tt("appearance needs an object id, id list, or selector."),s.visible!==void 0&&typeof s.visible!="boolean"&&Tt("visibility must be boolean."),s.material!==void 0&&!Cn(s.material)&&Tt("material must be an object.");for(let c of Object.values(s.material??{}))typeof c=="string"||typeof c=="number"||typeof c=="boolean"||c===null||Cn(c)&&typeof c.path=="string"&&(c.offset===void 0||Array.isArray(c.offset)&&c.offset.length===2&&c.offset.every(u=>typeof u=="number"))||Tt("invalid material field.")}}i.defaultOptionId!==void 0&&!o.has(i.defaultOptionId)&&Tt("a default must name an option in its group."),i.display!==void 0&&!["list","chips","swatches"].includes(i.display)&&Tt("a group's display must be list, chips or swatches.")}t.pricing!==void 0&&!(Cn(t.pricing)&&/^[A-Z]{3}$/.test(t.pricing.currency)&&Number.isSafeInteger(t.pricing.basePriceMinor)&&t.pricing.basePriceMinor>=0)&&Tt("pricing needs a 3-letter currency and a base price of zero or more."),t.checkout!==void 0&&(!Cn(t.checkout)||t.checkout.label!==void 0&&!mo(t.checkout.label)||!lO(t.checkout.urlTemplate))&&Tt("a checkout link needs an http or https URL.");let r=i=>Cn(i)&&typeof i.groupId=="string"&&typeof i.optionId=="string"&&!!n.get(i.groupId)?.has(i.optionId);if(t.rules!==void 0){(!Array.isArray(t.rules)||t.rules.length>2048)&&Tt("invalid rules.");let i=new Set;for(let o of t.rules){(!Cn(o)||!Sc(o.id)||i.has(o.id)||!r(o.when)||o.message!==void 0&&!mo(o.message))&&Tt("rules need unique ids and valid option references."),i.add(o.id),["requires","excludes"].some(a=>Array.isArray(o[a])&&o[a].length>0)||Tt("a rule needs a requires or excludes constraint.");for(let a of["requires","excludes"])o[a]!==void 0&&(!Array.isArray(o[a])||o[a].length>128||!o[a].every(r))&&Tt("rule references must name existing options.")}}if(t.skus!==void 0){(!Array.isArray(t.skus)||t.skus.length>4096)&&Tt("invalid SKU table.");let i=new Set;for(let o of t.skus){(!Cn(o)||!mo(o.sku)||!Cn(o.selections)||Object.keys(o.selections).length!==n.size)&&Tt("SKU mappings need one selection per group.");for(let[s,l]of Object.entries(o.selections))(!n.has(s)||l!==null&&!n.get(s).has(l))&&Tt("SKU mapping references an unknown option.");let a=JSON.stringify(Object.entries(o.selections).sort(([s],[l])=>xg(s,l)));i.has(a)&&Tt("a combination can map to only one SKU."),i.add(a)}}return{id:t.id,label:t.label,revision:t.revision,groups:t.groups.map(i=>({id:i.id,label:i.label,...i.required!==void 0?{required:i.required}:{},...i.defaultOptionId!==void 0?{defaultOptionId:i.defaultOptionId}:{},...i.display!==void 0?{display:i.display}:{},options:i.options.map(o=>({id:o.id,label:o.label,...o.sku!==void 0?{sku:o.sku}:{},...o.description!==void 0?{description:o.description}:{},...o.swatch!==void 0?{swatch:o.swatch}:{},...o.priceDeltaMinor!==void 0?{priceDeltaMinor:o.priceDeltaMinor}:{},...o.variants!==void 0?{variants:o.variants}:{},...o.appearance!==void 0?{appearance:o.appearance.map(a=>({target:a.target,...a.material!==void 0?{material:a.material}:{},...a.visible!==void 0?{visible:a.visible}:{}}))}:{}}))})),...t.rules!==void 0?{rules:t.rules.map(i=>({id:i.id,when:i.when,...i.requires?{requires:i.requires}:{},...i.excludes?{excludes:i.excludes}:{},...i.message?{message:i.message}:{}}))}:{},...t.skus!==void 0?{skus:t.skus.map(i=>({sku:i.sku,selections:i.selections}))}:{},...t.pricing!==void 0?{pricing:{currency:t.pricing.currency,basePriceMinor:t.pricing.basePriceMinor}}:{},...t.checkout!==void 0?{checkout:{urlTemplate:t.checkout.urlTemplate,...t.checkout.label!==void 0?{label:t.checkout.label}:{}}}:{}}}function zi(e){return Object.fromEntries(e.groups.map(t=>[t.id,t.defaultOptionId??null]))}function cO(e,t){let n=[];for(let r of e.groups){if(t[r.id]===null)continue;let i=r.options.find(o=>o.id===t[r.id])?.sku;if(!i)return null;n.push(i)}return n.length?n.join("-"):null}function Vn(e,t=zi(e),n=1){if(!Number.isSafeInteger(n)||n<1||n>9999)throw new Error("Quantity must be an integer from 1 to 9999.");if(!Cn(t)||Object.values(t).some(u=>u!==null&&typeof u!="string"))throw new Error("Product selections must map group ids to option ids or null.");let r=[],i=[...e.groups].sort((u,p)=>xg(u.id,p.id)),o=Object.fromEntries(i.map(u=>[u.id,!Object.prototype.hasOwnProperty.call(t,u.id)||t[u.id]===void 0?u.defaultOptionId??null:t[u.id]]));for(let u of Object.keys(t).sort())e.groups.some(p=>p.id===u)||r.push({code:"unknown-group",groupIds:[u],message:`Unknown option group: ${u}.`});let a=[];for(let u of i){let p=o[u.id],d=u.options.find(m=>m.id===p);p!==null&&!d?r.push({code:"unknown-option",groupIds:[u.id],message:`Unknown choice for ${u.label}: ${p}.`}):u.required&&p===null&&r.push({code:"required",groupIds:[u.id],message:`Choose ${u.label}.`}),d&&a.push({groupId:u.id,optionId:d.id,label:d.label,...d.sku?{sku:d.sku}:{}})}let s=u=>e.groups.find(p=>p.id===u.groupId)?.options.find(p=>p.id===u.optionId)?.label??u.optionId;for(let u of[...e.rules??[]].sort((p,d)=>xg(p.id,d.id)))if(o[u.when.groupId]===u.when.optionId){for(let p of u.requires??[])o[p.groupId]!==p.optionId&&r.push({code:"requires",ruleId:u.id,groupIds:[...new Set([u.when.groupId,p.groupId])],message:u.message??`${s(u.when)} requires ${s(p)}.`});for(let p of u.excludes??[])o[p.groupId]===p.optionId&&r.push({code:"excludes",ruleId:u.id,groupIds:[...new Set([u.when.groupId,p.groupId])],message:u.message??`${s(u.when)} cannot be combined with ${s(p)}.`})}let l=e.skus?.length?e.skus.find(u=>i.every(p=>u.selections[p.id]===o[p.id]))?.sku??null:cO(e,o);e.skus?.length&&!l&&!r.length&&r.push({code:"sku",groupIds:i.map(u=>u.id),message:"This combination has no product SKU."});let c=JSON.stringify({productId:e.id,revision:e.revision,quantity:n,selections:o});return{version:1,productId:e.id,revision:e.revision,key:c,quantity:n,selections:o,sku:l,items:a,valid:!r.length,issues:r}}var Z0=new Set(["requires","excludes"]);function tl(e,t,n,r,i=1){let o={...Vn(e,t,i).selections,[n]:r},a=new Set([JSON.stringify(o)]),s=[o];for(let l=0;l<s.length&&l<2e3;l++){let c=s[l],u=Vn(e,c,i).issues.filter(p=>Z0.has(p.code));if(!u.length)return c;for(let p of new Set(u.flatMap(d=>d.groupIds))){if(p===n)continue;let d=e.groups.find(m=>m.id===p);if(d)for(let m of[...d.options.map(f=>f.id),...d.required?[]:[null]]){let f={...c,[p]:m},b=JSON.stringify(f);a.has(b)||(a.add(b),s.push(f))}}}return null}function uO(e,t,n,r,i){let o=tl(e,t,n,r,i);return o?Object.entries(o).filter(([a,s])=>a!==n&&s!==t[a]&&s!==null).map(([a,s])=>({groupId:a,optionId:s})):null}function Zd(e,t){if(!e.pricing)return null;let n=e.pricing.basePriceMinor;for(let r of t.items)n+=e.groups.find(i=>i.id===r.groupId)?.options.find(i=>i.id===r.optionId)?.priceDeltaMinor??0;return{amountMinor:Math.max(0,n)*t.quantity,currency:e.pricing.currency}}function _c(e,t,n=!1){try{let r=new Intl.NumberFormat(void 0,{style:"currency",currency:t,...n?{signDisplay:"exceptZero"}:{}});return r.format(e/10**(r.resolvedOptions().maximumFractionDigits??2))}catch{return`${e} ${t}`}}function Qd(e,t){let n=e.checkout?.urlTemplate;if(!n||!t.valid||n.includes("{sku}")&&!t.sku)return null;let r={sku:t.sku??"",quantity:String(t.quantity),productId:e.id,revision:e.revision,selections:Cc(t.selections)};return n.replace(/\{([a-zA-Z]+)\}/g,(i,o)=>Object.prototype.hasOwnProperty.call(r,o)?encodeURIComponent(r[o]):i)}function Cc(e){return Object.entries(e).filter(([,t])=>t!==null).map(([t,n])=>`${encodeURIComponent(t)}:${encodeURIComponent(n)}`).join(",")}function Jd(e,t){let n={...zi(t)};for(let r of e.split(",")){let[i,o]=r.split(":");if(!i||!o)continue;let a,s;try{a=decodeURIComponent(i),s=decodeURIComponent(o)}catch{continue}t.groups.find(l=>l.id===a)?.options.some(l=>l.id===s)&&(n[a]=s)}return n}var $0=4096;function Q0(e,t="-"){let n=[{}];for(let o of e.groups){let a=[...o.options.map(s=>s.id),...o.required?[]:[null]];if(n.length*a.length>$0*8)throw new Error("This product has too many combinations to list. Use a pricing service to resolve SKUs instead.");n=n.flatMap(s=>a.map(l=>({...s,[o.id]:l})))}let r={...e,skus:void 0},i=[];for(let o of n){if(Vn(r,o).issues.length)continue;let a=e.groups.flatMap(s=>{let l=o[s.id];return l===null?[]:[s.options.find(c=>c.id===l)?.sku??null]});if(!(!a.length||a.includes(null))&&(i.push({sku:a.join(t),selections:o}),i.length>$0))throw new Error("This product has too many combinations to list. Use a pricing service to resolve SKUs instead.")}return i}function J0(e,t={},n){let r=[],i=zi(e),o=Vn({...e,skus:void 0},i).issues.filter(s=>Z0.has(s.code));for(let s of o)r.push({code:"invalid-default",message:`The default choices conflict: ${s.message}`});e.checkout?.urlTemplate.includes("{sku}")&&!e.skus?.length&&e.groups.some(s=>s.options.some(l=>!l.sku))&&r.push({code:"missing-sku",message:"The buy link uses {sku}, but it won't appear until every option has an SKU."});let a=Object.keys(t).length>0;for(let s of e.groups)for(let l of s.options){let c=`${s.label} \u203A ${l.label}`,u={groupId:s.id,optionId:l.id};if(a)for(let d of l.appearance??[])pn(t,d.target).length||r.push({code:"no-objects",message:`${c} changes objects that aren't in this model.`,...u});if(n)for(let d of l.variants??[])n.includes(d)||r.push({code:"missing-variant",message:`${c} uses a material variant this model doesn't have: ${d}.`,...u});let p={...i,[s.id]:l.id};tl(e,p,s.id,l.id)||r.push({code:"unreachable",message:`The rules leave no way to choose ${c}.`,...u})}return r}function ep(e,t,n,r=1){return t=Vn(e,t,r).selections,e.groups.flatMap(i=>i.options.map(o=>{let s=Vn(e,{...t,[i.id]:o.id},r).issues.filter(u=>u.groupIds.includes(i.id)&&u.code!=="sku").map(u=>u.message),l=n?.options?.find(u=>u.groupId===i.id&&u.optionId===o.id);l?.available===!1&&s.push(l.reason??"Currently unavailable.");let c=s.length&&l?.available!==!1?uO(e,t,i.id,o.id,r):null;return{groupId:i.id,optionId:o.id,selected:t[i.id]===o.id,available:!s.length,...c?{fix:c}:{},reasons:[...new Set(s)]}}))}function tp(e){Cn(e)||Tt("expected a product definition and selections.");let t=Mc(e.definition),n=Vn(t,e.selections??zi(t));return n.issues.some(r=>r.code==="unknown-group"||r.code==="unknown-option")&&Tt("selections reference unknown options."),{definition:t,selections:n.selections}}function np(e){return JSON.stringify({version:1,productId:e.productId,revision:e.revision,quantity:e.quantity,selections:e.selections})}function rp(e,t){let n=K0(typeof e=="string"?JSON.parse(e):e);if(!Cn(n)||n.version!==1||n.productId!==t.id||n.revision!==t.revision)throw new Error("This configuration belongs to a different product or revision.");if(!Cn(n.selections)||!Number.isSafeInteger(n.quantity))throw new Error("Invalid product configuration selections or quantity.");let r=Vn(t,n.selections,n.quantity);if(r.issues.some(i=>i.code==="unknown-group"||i.code==="unknown-option"))throw new Error("This configuration references unknown product options.");return r}function es(e,t,n=[],r=[]){let i=e,o=[...n];if(!t)return{objectBindings:i,activeVariants:o};for(let a of t.definition.groups){let s=a.options.find(l=>l.id===(t.selections[a.id]===void 0?a.defaultOptionId:t.selections[a.id]));if(s){for(let l of s.appearance??[])i=uo(i,l.target,{...l.material!==void 0?{style:{material:l.material}}:{},...l.visible!==void 0?{visible:l.visible}:{}});if(s.variants?.length){let l=new Set(a.options.flatMap(c=>c.variants??[]));o=o.filter(c=>!l.has(c));for(let c of s.variants)o=el(o,c,r)}}}return{objectBindings:i,activeVariants:o}}var fo=5*1024*1024,dO=["activeModelId","modelUrl","modelFormat","tilesetUrl","models","mergeModels","sceneConfig","isolation","multiSelectedKeys","activeAnnotation","annotationCategories","backgroundColor","shadows","cinematic","cameraControllerType","objectTransformSpace","arScaleMode","usdzUrl","measurements","measurementSettings","measurementUnit","measurementModelId"];function we(e,t){throw new Error(`Invalid viewer state at ${e}: ${t}`)}function rn(e,t){(!e||typeof e!="object"||Array.isArray(e))&&we(t,"expected an object.")}function Tc(e,t){(!Array.isArray(e)||!e.every(n=>typeof n=="string"))&&we(t,"expected strings.")}function Vr(e,t,n){(!Array.isArray(e)||e.length!==t||!e.every(r=>typeof r=="number"&&Number.isFinite(r)))&&we(n,`expected ${t} finite numbers.`)}function pO(e){let t=new Set,n=0;function r(i,o,a){if((++n>2e5||a>64)&&we(o,"configuration is too complex."),i===null||typeof i=="string"||typeof i=="boolean"||typeof i=="number"&&Number.isFinite(i))return i;(typeof i!="object"||!i)&&we(o,"expected JSON data (finite numbers, no functions)."),t.has(i)&&we(o,"cyclic data."),!Array.isArray(i)&&Object.getPrototypeOf(i)!==Object.prototype&&Object.getPrototypeOf(i)!==null&&we(o,"expected plain JSON data."),t.add(i);let s=Array.isArray(i)?[]:{};for(let[l,c]of Object.entries(i))["__proto__","constructor","prototype"].includes(l)&&we(`${o}.${l}`,"reserved property."),c!==void 0?s[l]=r(c,`${o}.${l}`,a+1):Array.isArray(i)&&we(o,"undefined array entry.");return t.delete(i),s}return r(e,"state",0)}function hi(e,t,n,r,i=!1,o){let a=e[t];if(a==null||a==="")return;typeof a!="string"&&we(n,"expected a URL.");let s=i?Ko(a)??a:a;if(s.trim().startsWith("blob:")){if(i&&o){o.set(a,{source:s,path:n});return}we(n,i?"this image is temporary. Use getStateAsync() for JSON or createShareUrl() to include it.":"upload this model/environment asset to a durable URL before saving or sharing.")}if(s!==a&&(a=s,e[t]=s),i&&/^data:image\//i.test(a))return;let l;try{l=new URL(a,r??"https://relative.invalid/")}catch{we(n,"invalid asset URL.")}["http:","https:"].includes(l.protocol)||we(n,"use an HTTP(S) asset URL."),r&&(e[t]=l.href)}function mO(e,t){rn(e,t),Vr(e.position,3,`${t}.position`),Vr(e.target,3,`${t}.target`),(typeof e.zoom!="number"||e.zoom<=0)&&we(t,"zoom must be positive."),e.fov!==null&&(typeof e.fov!="number"||e.fov<=0||e.fov>=180)&&we(t,"fov must be null or between 0 and 180.");for(let n of["azimuthAngle","polarAngle"])e[n]!==void 0&&typeof e[n]!="number"&&we(t,`${n} must be a number.`)}function nw(e,t,n,r){rn(e,t),(typeof e.id!="number"||typeof e.title!="string"||typeof e.description!="string")&&we(t,"expected an annotation id, title and description.");for(let i of["worldPosition","localPosition"])Vr(e[i],3,`${t}.${i}`);e.images!==void 0&&(Array.isArray(e.images)||we(t,"images must be an array."),e.images.forEach(i=>{rn(i,t),hi(i,"src",t,n,!0,r)})),e.links!==void 0&&(Array.isArray(e.links)||we(t,"links must be an array."),e.links.forEach(i=>{rn(i,t),hi(i,"href",t,n,!1,r)}))}function rw(e,t){rn(e,t),e.waypoints!==void 0&&(Array.isArray(e.waypoints)||we(t,"expected waypoints."),e.waypoints.forEach(n=>{rn(n,t),Vr(n.position,3,t),Vr(n.target,3,t)}));for(let n of["enabled","loop","autoPlay"])e[n]!==void 0&&typeof e[n]!="boolean"&&we(t,`${n} must be boolean.`);e.duration!==void 0&&(typeof e.duration!="number"||e.duration<=0)&&we(t,"duration must be positive.")}function wg(e,t,n){if(t!==null)if(Array.isArray(t))Array.isArray(e)||we(n,"expected an array."),t.length&&e.forEach(r=>wg(r,t[0],n));else if(typeof t=="object"){rn(e,n);for(let[r,i]of Object.entries(t))wg(e[r],i,`${n}.${r}`)}else typeof e!=typeof t&&we(n,`expected ${typeof t}.`)}function ew(e,t,n,r){if(wg(e,nr,t),e.measurements!==void 0&&(e.measurements=co(e.measurements)),e.sequences!==void 0&&(e.sequences=$o(e.sequences)),e.selectionSets!==void 0&&(e.selectionSets=Xd(e.selectionSets)),e.product!==void 0&&(e.product=tp(e.product),e.product.definition.groups.forEach(i=>i.options.forEach(o=>o.appearance?.forEach(a=>{for(let[s,l]of Object.entries(a.material??{}))l&&typeof l=="object"&&!Array.isArray(l)&&"path"in l&&hi(l,"path",`${t}.product.material.${s}.path`,n,!0,r)})))),Vr(e.model.rotation,3,`${t}.model.rotation`),e.lighting.lights.forEach(i=>Vr(i.position,3,`${t}.lighting.lights`)),e.annotations.forEach(i=>nw(i,`${t}.annotations`,n,r)),e.animations.autoplayClip!==null&&typeof e.animations.autoplayClip!="string"&&we(t,"invalid autoplay clip."),e.animations.clips.forEach(i=>{rn(i,t),(typeof i.sourceName!="string"||typeof i.displayName!="string"||typeof i.hidden!="boolean"||typeof i.speed!="number"||!["repeat","once","ping-pong"].includes(i.loopMode))&&we(t,"invalid animation clip settings.")}),e.cinematic!==void 0&&rw(e.cinematic,`${t}.cinematic`),e.styleRules!==void 0&&!Array.isArray(e.styleRules)&&we(t,"styleRules must be an array."),hi(e.environment,"customEnvironmentUrl",`${t}.environment`,n,!1,r),hi(e.background,"imageUrl",`${t}.background`,n,!0,r),e.model.activeVariants!==void 0&&Tc(e.model.activeVariants,t),e.section!==void 0)try{e.section=Zs(e.section)}catch(i){we(`${t}.section`,i.message)}}function iw(e,t,n,r){rn(e,t);for(let[i,o]of Object.entries(e)){let a=`${t}.${i}`;rn(o,a),(typeof o.id!="string"||typeof o.modelObjectId!="string")&&we(a,"expected binding id and modelObjectId.");for(let s of["label","group","type","status"])o[s]!==void 0&&typeof o[s]!="string"&&we(a,`${s} must be a string.`);o.tags!==void 0&&Tc(o.tags,a),o.metadata!==void 0&&rn(o.metadata,`${a}.metadata`),o.metrics!==void 0&&(rn(o.metrics,a),Object.values(o.metrics).some(s=>typeof s!="number")&&we(a,"metrics must be numbers.")),o.actions!==void 0&&(Array.isArray(o.actions)||we(a,"actions must be an array."),o.actions.forEach(s=>{rn(s,a),(typeof s.id!="string"||typeof s.label!="string"||s.type!=="command"||s.effects!==void 0&&!Array.isArray(s.effects))&&we(a,"invalid action.")}));for(let s of["visible","removed","selectable","hoverable"])o[s]!==void 0&&typeof o[s]!="boolean"&&we(a,`${s} must be boolean.`);if(o.transform!==void 0){rn(o.transform,a);for(let s of["position","rotation","scale","shear"])o.transform[s]!==void 0&&Vr(o.transform[s],3,`${a}.transform.${s}`);o.transform.pivot!==void 0&&(rn(o.transform.pivot,a),Vr(o.transform.pivot.point,3,a),Vr(o.transform.pivot.offset,3,a))}if(o.style!==void 0&&(rn(o.style,a),o.style.material!==void 0)){rn(o.style.material,a);for(let[s,l]of Object.entries(o.style.material))l&&typeof l=="object"&&!Array.isArray(l)&&"path"in l&&hi(l,"path",`${a}.style.material.${s}.path`,n,!0,r)}o.decals!==void 0&&(Array.isArray(o.decals)||we(a,"decals must be an array."),o.decals.forEach(s=>{rn(s,a),(typeof s.id!="string"||typeof s.size!="number"||s.size<=0)&&we(a,"invalid decal."),Vr(s.position,3,a),Vr(s.normal,3,a),hi(s,"image",a,n,!0,r)}))}}function tw(e,t,n,r){Array.isArray(e)||we(t,"expected merge sources."),e.forEach(i=>{rn(i,t),(typeof i.url!="string"||!i.url||typeof i.namePrefix!="string")&&we(t,"expected source URL and prefix."),hi(i,"url",t,n,!1,r)})}function fO(e,t,n){rn(e,"configuration");let r=Object.fromEntries(dO.filter(i=>e[i]!==void 0).map(i=>[i,e[i]]));(typeof r.modelUrl!="string"||!r.modelUrl)&&we("configuration.modelUrl","expected the active model URL.");for(let i of["modelUrl","tilesetUrl","usdzUrl"])hi(r,i,`configuration.${i}`,t,!1,n);if(r.sceneConfig!==void 0&&ew(r.sceneConfig,"configuration.sceneConfig",t,n),r.mergeModels!==void 0&&tw(r.mergeModels,"configuration.mergeModels",t,n),r.models!==void 0){(!Array.isArray(r.models)||r.models.length===0)&&we("configuration.models","expected model entries.");let i=new Set,o=new Set;r.models.forEach(a=>{rn(a,"model"),(typeof a.url!="string"||!a.url)&&we("model.url","expected a URL."),hi(a,"url","model.url",t,!1,n),a.id!==void 0&&(typeof a.id!="string"||!a.id.trim())&&we("model.id","expected a nonempty instance ID.");let s=Pe({id:a.id,url:a.url});o.has(s)&&we("configuration.models","instance identities must be unique; assign IDs when reusing a URL."),o.add(s),a.transform!==void 0&&(a.transform=Zo(a.transform)),a.visible!==void 0&&typeof a.visible!="boolean"&&we("model.visible","expected boolean."),i.add(a.url),iw(a.objectBindings,"model.objectBindings",t,n),a.sceneConfig!==void 0&&ew(a.sceneConfig,"model.sceneConfig",t,n),a.mergeModels!==void 0&&tw(a.mergeModels,"model.mergeModels",t,n)}),r.activeModelId!==void 0&&(typeof r.activeModelId!="string"||!o.has(r.activeModelId))&&we("configuration.activeModelId","active instance is not in models."),r.activeModelId!==void 0&&r.models.find(a=>Pe(a)===r.activeModelId)?.url!==r.modelUrl&&we("configuration.modelUrl","source does not match the active instance."),i.has(r.modelUrl)||we("configuration.modelUrl","active model is not in models.")}if(r.multiSelectedKeys!==void 0&&Tc(r.multiSelectedKeys,"configuration.multiSelectedKeys"),r.annotationCategories!==void 0&&r.annotationCategories!==null&&Tc(r.annotationCategories,"configuration.annotationCategories"),r.activeAnnotation!==void 0&&r.activeAnnotation!==null&&nw(r.activeAnnotation,"configuration.activeAnnotation",t,n),r.measurements!==void 0||r.measurementSettings!==void 0){let i=co({items:r.measurements??[],settings:r.measurementSettings??{}});r.measurements!==void 0&&(r.measurements=i.items),r.measurementSettings!==void 0&&(r.measurementSettings=i.settings)}r.measurementModelId!==void 0&&typeof r.measurementModelId!="string"&&we("configuration.measurementModelId","expected a stable id."),r.measurementUnit!==void 0&&typeof r.measurementUnit!="string"&&we("configuration.measurementUnit","expected a unit label.");for(let i of["backgroundColor"])r[i]!==void 0&&typeof r[i]!="string"&&we(i,"expected a string.");r.shadows!==void 0&&typeof r.shadows!="boolean"&&we("shadows","expected boolean.");for(let[i,o]of Object.entries({modelFormat:["glb","gltf","obj","fbx","usdz","stl","ply"],cameraControllerType:["orbit","pointerLock"],objectTransformSpace:["world","local"],arScaleMode:["normalized","real-world"]}))r[i]!==void 0&&!o.includes(r[i])&&we(i,"unsupported value.");if(r.cinematic!==void 0&&rw(r.cinematic,"cinematic"),r.isolation!==void 0&&r.isolation!==null){let{target:i,mode:o,ghostOpacity:a}=r.isolation;typeof i=="string"||Array.isArray(i)&&i.every(s=>typeof s=="string")||i&&typeof i=="object"&&["group","tag","type"].some(s=>typeof i[s]=="string")||we("configuration.isolation","invalid target."),o!==void 0&&!["ghost","hide"].includes(o)&&we("configuration.isolation","invalid mode."),a!==void 0&&(typeof a!="number"||a<0||a>1)&&we("configuration.isolation","opacity must be between 0 and 1.")}return r}function ow(e,t,n,r){if(!(!e||typeof e!="object"))for(let[i,o]of Object.entries(e))i!=="metadata"&&(typeof o=="string"&&["url","modelUrl","tilesetUrl","usdzUrl","path","image","src","href","imageUrl","customEnvironmentUrl"].includes(i)?hi(e,i,`${t}.${i}`,n,["path","image","src","imageUrl"].includes(i),r):ow(o,`${t}.${i}`,n,r))}function aw(e,t,n){typeof e=="string"&&(new TextEncoder().encode(e).length>fo&&we("state","exceeds the 5 MiB limit."),e=JSON.parse(e));let r=pO(e);rn(r,"state"),new TextEncoder().encode(JSON.stringify(r)).length>fo&&we("state","exceeds the 5 MiB limit."),r.version!==void 0&&r.version!==1&&we("version","unsupported version."),r.version===void 0&&(r.objectBindings!==void 0||r.configuration!==void 0)&&we("version","full configurations require version 1.");let i={};return r.version!==void 0&&(i.version=1),r.camera!==void 0&&(mO(r.camera,"camera"),i.camera=r.camera),r.hidden!==void 0&&(Tc(r.hidden,"hidden"),i.hidden=r.hidden),r.selected!==void 0&&(r.selected!==null&&typeof r.selected!="string"&&we("selected","expected an object id or null."),i.selected=r.selected),r.objectBindings!==void 0&&(iw(r.objectBindings,"objectBindings",t,n),i.objectBindings=r.objectBindings),r.configuration!==void 0&&(i.configuration=fO(r.configuration,t,n)),ow(i,"state",t,n),new TextEncoder().encode(JSON.stringify(i)).length>fo&&we("state","exceeds the 5 MiB limit."),i}function ts(e,t){return JSON.stringify(Fi(e,t))}function Fi(e,t){return aw(e,t)}async function Qo(e,t){let n=new Map,r=aw(e,t,n),i=new Map,o=new Map;for(let[s,{source:l,path:c}]of n){let u=i.get(l);u||(u=(async()=>{let p;try{p=await fetch(l)}catch{we(c,"this temporary image is no longer available. Reload or reselect it before saving.")}p.ok||we(c,"could not read the temporary image. Reload or reselect it before saving.");let d=await p.blob();d.size>fo*3/4&&we(c,"embedded image exceeds the 5 MiB configuration limit. Use a hosted image URL.");let m=new Uint8Array(await d.arrayBuffer()),f=d.type.split(";")[0].toLowerCase(),b=f.startsWith("image/")?f:hO(m);b||we(c,"temporary asset is not a supported image. Use a hosted asset URL.");let g="";for(let y=0;y<m.length;y+=32768)g+=String.fromCharCode(...m.subarray(y,y+32768));return`data:${b};base64,${btoa(g)}`})(),i.set(l,u)),o.set(s,await u)}function a(s){if(!(!s||typeof s!="object"))for(let[l,c]of Object.entries(s))l!=="metadata"&&(["path","image","src","imageUrl"].includes(l)&&typeof c=="string"&&o.has(c)?s[l]=o.get(c):a(c))}return a(r),Fi(r,t)}function hO(e){let t=(n,r)=>String.fromCharCode(...e.subarray(n,r));if(e[0]===137&&t(1,4)==="PNG")return"image/png";if(e[0]===255&&e[1]===216&&e[2]===255)return"image/jpeg";if(t(0,3)==="GIF")return"image/gif";if(t(0,4)==="RIFF"&&t(8,12)==="WEBP")return"image/webp";if(t(4,8)==="ftyp"&&["avif","avis"].includes(t(8,12)))return"image/avif";if(/<svg[\s>]/i.test(new TextDecoder().decode(e.subarray(0,1024))))return"image/svg+xml"}var Sg="ri-ar",Mg="ri-ar-id",sw=4096,gO=2200,bO=(0,ho.strToU8)(JSON.stringify(nr)).byteLength;function lw(e){return e==="localhost"||e.endsWith(".localhost")||/^127\./.test(e)||e==="[::1]"||e==="0.0.0.0"}function cw(e){if(typeof e=="string"&&/^https?:\/\//i.test(e)&&lw(new URL(e).hostname))throw new Error("An asset URL points to this computer. Use model and texture URLs reachable from the phone.");if(e&&typeof e=="object")for(let t of Object.values(e))cw(t)}function ip(e){return e&&typeof e=="object"?e:void 0}function op(e,t){let n=new URL(e,t);if(!["https:","http:"].includes(n.protocol))throw new Error("AR handoff requires an HTTP(S) URL.");return n.toString()}function uw(e,t="",n=2048){let r=new Set,i=o=>{if(typeof o=="string")return Ko(o)??o;if(o===null||typeof o!="object")return o;if(r.has(o))throw new Error("AR configuration cannot contain cycles.");r.add(o);let a=Array.isArray(o)?o.map(i):Object.fromEntries(Object.keys(o).sort().map(s=>[s,i(o[s])]));return r.delete(o),a};return JSON.stringify([t,n,i({...e,camera:void 0})])}function dw(e,t){if(JSON.stringify(e)!==JSON.stringify(t))return e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)?Object.fromEntries(Object.entries(e).map(([n,r])=>[n,dw(r,t[n])]).filter(([,n])=>n!==void 0)):e}function pw(e,t,n=0){if(n>64)throw new Error("AR configuration is too deeply nested.");if(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)){let r=e,i=t;return Object.fromEntries([...new Set([...Object.keys(i),...Object.keys(r)])].map(o=>[o,Object.prototype.hasOwnProperty.call(r,o)?pw(r[o],i[o],n+1):i[o]]))}return e}function mw(e,t){let n=structuredClone(e);if(n.configuration){n.configuration.sceneConfig&&(n.configuration.sceneConfig=t(n.configuration.sceneConfig));for(let r of n.configuration.models??[])r.sceneConfig&&(r.sceneConfig=t(r.sceneConfig))}return n}function Pc(e){e?.throwIfAborted()}async function ap(e,t,n,r){Pc(r);let i=new URL(op(t));if(lw(i.hostname))throw new Error("Phone links need a viewer URL reachable from your phone. Download the USDZ for local uploads, or provide a public viewer URL.");let o=await Qo(e,i.toString());Pc(r),cw(o);let a=new URLSearchParams(i.hash.slice(1));if(a.delete(Sg),a.delete(Mg),a.delete("view"),a.delete("viewId"),a.delete("view-id"),n){let s=await n.save(o);if(Pc(r),typeof s!="string"||!s||s.length>512)throw new Error("AR storage returned an invalid configuration ID.");a.set(Mg,s)}else{let s=(0,ho.zlibSync)((0,ho.strToU8)(JSON.stringify({ar:1,state:mw(o,c=>dw(c,nr)??{})})),{level:9});if(s.byteLength>sw)throw new Error("This configuration needs an AR storage adapter to share on a phone. The USDZ download is still available.");let l="";for(let c of s)l+=String.fromCharCode(c);a.set(Sg,btoa(l).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""))}if(i.hash=a.toString(),i.toString().length>gO)throw new Error("This configuration is too large for a reliable QR code. Use an AR storage adapter or download the USDZ.");return i.toString()}async function sp(e,t,n){let r=new URL(e),i=new URLSearchParams(r.hash.slice(1)),o=i.get(Mg),a=i.get(Sg);if(o!==null&&a!==null)throw new Error("AR link contains conflicting configurations.");if(o===null&&a===null)return null;Pc(n);let s;if(o!==null){if(!t)throw new Error("This AR link requires the application's configuration storage adapter.");if(!o||o.length>512)throw new Error("Invalid AR configuration ID.");s=await t.load(o)}else{if(!a||a.length>Math.ceil(sw*4/3)||!/^[\w-]+$/.test(a))throw new Error("Invalid or oversized AR link.");let c=atob(a.replace(/-/g,"+").replace(/_/g,"/")),u=Uint8Array.from(c,m=>m.charCodeAt(0)),p=(0,ho.unzlibSync)(u);if(p.byteLength>fo)throw new Error("AR configuration exceeds the 5 MiB limit.");let d=JSON.parse((0,ho.strFromU8)(p));if(d?.ar===1&&d.state){let m=d.state.configuration,f=(m?.sceneConfig?1:0)+(Array.isArray(m?.models)?m.models.filter(b=>b?.sceneConfig).length:0);if(p.byteLength+f*bO>fo)throw new Error("Expanded AR configuration exceeds the 5 MiB limit.");s=mw(d.state,b=>pw(b,nr))}else s=d}Pc(n);let l=Fi(s,r.toString());if(l.version!==1||!l.configuration)throw new Error("AR handoff requires a complete versioned viewer configuration.");return l}function fw(e,t){if(!e?.configuration)return e;let n=e.configuration,r=n.models?.find(o=>Pe(o)===t||o.url===t);if(!r)return e;let i=n.activeModelId??n.modelUrl;return{...e,objectBindings:r.objectBindings,configuration:{...n,models:n.models?.map(o=>Pe(o)===i?{...o,sceneConfig:n.sceneConfig,objectBindings:e.objectBindings??o.objectBindings}:o),activeModelId:Pe(r),modelUrl:r.url,sceneConfig:r.sceneConfig??n.sceneConfig}}}function hw(e){let[t,n]=(0,go.useState)(null),[r,i]=(0,go.useState)(null),o=ip(e.arHandoff),a=!!e.arHandoff&&o?.autoRestore!==!1,s=o?.storage,l=`${e.modelUrl}
3666
+ ${e.activeModelId??""}`,c=(0,go.useRef)(l);c.current=l;let u=(0,go.useRef)(l);if((0,go.useEffect)(()=>{l!==u.current&&(u.current=l,n(null))},[l]),(0,go.useEffect)(()=>{if(!a||typeof window>"u"){n(null),i(null);return}let d,m=()=>{d?.abort(),d=new AbortController;let f=d.signal,b=c.current;i(null),sp(window.location.href,s,f).then(g=>{!f.aborted&&c.current===b&&n(g)}).catch(g=>{!f.aborted&&c.current===b&&(n(null),i(g instanceof Error?g.message:"Could not restore the AR configuration."))})};return m(),window.addEventListener("hashchange",m),()=>{d?.abort(),window.removeEventListener("hashchange",m)}},[a,s]),!t?.configuration)return{props:e,error:r};let p=t.configuration;return{error:r,props:{...e,...p,objectBindings:t.objectBindings??e.objectBindings,onObjectBindingsChange:d=>{n(m=>m?.configuration?{...m,objectBindings:d,configuration:{...m.configuration,models:m.configuration.models?.map(f=>Pe(f)===(m.configuration?.activeModelId??m.configuration?.modelUrl)?{...f,objectBindings:d}:f)}}:m),e.onObjectBindingsChange?.(d)},onSceneConfigChange:d=>{n(m=>m?.configuration?{...m,configuration:{...m.configuration,sceneConfig:d}}:m),e.onSceneConfigChange?.(d)},onIsolationChange:d=>{n(m=>m?.configuration?{...m,configuration:{...m.configuration,isolation:d}}:m),e.onIsolationChange?.(d)},onActiveModelChange:d=>{n(m=>fw(m,d)),e.onActiveModelChange?.(d)},onModelChange:d=>{n(m=>fw(m,d)),e.onModelChange?.(d)}}}}var bn=require("react");var _g=new WeakMap;function Cg(e,t){t?_g.set(e,t):_g.delete(e)}function lp(e){e.traverse(t=>{let n=_g.get(t);if(n)throw new Error(n)})}var Bt=require("three");function yO(e,t={}){t.signal?.throwIfAborted();let n=new Bt.Group,r=new Bt.Group;n.add(r);let i=new Set,o=[],a=[],s=[],l=new Map,c=0,u=0,p=()=>{o.forEach(d=>d.dispose()),a.forEach(d=>d.dispose()),s.forEach(d=>d.dispose())};try{for(let{scene:g,objectBindings:y={},materialOverrides:h={}}of e){lp(g),g.updateWorldMatrix(!0,!0);let v=new Map(Object.entries(y).map(([x,P])=>[P.modelObjectId??x,x]));g.traverse(x=>{let P=x;if(!P.isMesh||!P.geometry)return;for(let M=x;M;M=M.parent){let C=br(M)??M.name??M.uuid;if(!M.visible||y[v.get(C)??C]?.visible===!1||y[v.get(C)??C]?.removed)return}let w=br(P)??P.name??P.uuid,D=h[v.get(w)??w]??P.material;if(!D)throw new Error(`Material for ${w} is not ready. Wait for the model to finish loading.`);let E=Array.isArray(D)?D:[D],S=P.isInstancedMesh?P.count:1;if(P.userData.riDecal&&tn(P)&&P.parent){let M=$a(P.parent);M&&P.bindMatrixInverse.copy(M)}let _=tn(P)?kd(P):P.geometry.clone();try{if(!tn(P)&&P.morphTargetInfluences?.some(T=>T!==0)){let T=_.getAttribute("position"),I=new Bt.Vector3;for(let L=0;L<T.count;L++)P.getVertexPosition(L,I),T.setXYZ(L,I.x,I.y,I.z);_.morphAttributes={},_.computeVertexNormals()}if(!_.getAttribute("position"))throw new Error(`Mesh ${w} has no positions.`);let M=_.index?.count??_.getAttribute("position").count,C=Array.isArray(D)?_.groups:[{start:0,count:M,materialIndex:0}];if(!C.length)throw new Error(`Mesh ${w} has multiple materials without geometry groups.`);for(let T=0;T<S;T++){let I=P.matrixWorld.clone();if(P.isInstancedMesh){let L=new Bt.Matrix4;P.getMatrixAt(T,L),I.multiply(L)}for(let L of C){let B=E[L.materialIndex??0];if(!B)throw new Error(`A material group on ${w} is missing its material.`);if(!B.visible)continue;let N=B;if(!N.isMeshStandardMaterial||N.wireframe||N.vertexColors)throw new Error(`AR snapshot cannot preserve ${B.type}${N.wireframe?" wireframe":N.vertexColors?" vertex colors":""} on ${w}. Use a PBR material or provide arHandoff.createUSDZ.`);let R=Math.max(L.start,_.drawRange.start),O=Math.min(M,L.start+L.count,_.drawRange.start+_.drawRange.count);if(O<=R)continue;if(R%3||(O-R)%3)throw new Error(`Mesh ${w} has an incomplete triangle range.`);let V=new Bt.BufferGeometry;o.push(V);let G=Array.from({length:O-R},(U,F)=>_.index?_.index.getX(R+F):R+F);if(I.determinant()<0)for(let U=0;U<G.length;U+=3)[G[U+1],G[U+2]]=[G[U+2],G[U+1]];for(let[U,F]of Object.entries(_.attributes)){let te=new Float32Array(G.length*F.itemSize);for(let se=0;se<G.length;se++)for(let ye=0;ye<F.itemSize;ye++)te[se*F.itemSize+ye]=F.getComponent(G[se],ye);V.setAttribute(U,new Bt.BufferAttribute(te,F.itemSize))}V.setIndex(G.map((U,F)=>F)),V.applyMatrix4(I);let Q=V.getAttribute("position");for(let U=0;U<Q.count;U++)if(![Q.getX(U),Q.getY(U),Q.getZ(U)].every(Number.isFinite))throw new Error(`Mesh ${w} contains invalid coordinates.`);V.getAttribute("normal")||V.computeVertexNormals();let $=N.clone();a.push($);let ne=N.userData.reactImmersiveConfiguredEmissive;if(ne?.isColor&&$.emissive.copy(ne),$.side===Bt.DoubleSide){let U=V.toNonIndexed();o.push(U);let F=U.getAttribute("position").count,te=new Bt.BufferGeometry;o.push(te);for(let[se,ye]of Object.entries(U.attributes)){let K=new Float32Array(F*ye.itemSize*2);for(let re=0;re<F;re++)for(let ce=0;ce<ye.itemSize;ce++){K[re*ye.itemSize+ce]=ye.getComponent(re,ce);let he=Math.floor(re/3)*3+(2-re%3);K[(F+re)*ye.itemSize+ce]=ye.getComponent(he,ce)*(se==="normal"?-1:1)}te.setAttribute(se,new Bt.BufferAttribute(K,ye.itemSize))}$.side=Bt.FrontSide,V.copy(te)}else if($.side!==Bt.FrontSide){let U=V.getIndex();for(let te=0;te<U.count;te+=3){let se=U.getX(te+1);U.setX(te+1,U.getX(te+2)),U.setX(te+2,se)}let F=V.getAttribute("normal");for(let te=0;te<F.count;te++)F.setXYZ(te,-F.getX(te),-F.getY(te),-F.getZ(te));$.side=Bt.FrontSide}if(P.isInstancedMesh&&P.instanceColor){let U=new Bt.Color;P.getColorAt(T,U),$.color.multiply(U)}for(let[U,F]of Object.entries($)){if(!F?.isTexture)continue;let te=F;if(R0(te)||!te.image||te.image.complete===!1)throw new Error(`Texture on ${w} is not ready. Wait for image loading or replace failed textures before preparing AR.`);let se=l.get(te);if(se||(se=te.clone(),l.set(te,se),s.push(se)),$[U]=se,!V.getAttribute(se.channel?`uv${se.channel}`:"uv"))throw new Error(`Texture on ${w} needs UV coordinates missing from this geometry.`)}if(P.userData.riDecal){V.computeBoundingBox();let U=Math.max(1e-6,V.boundingBox.getSize(new Bt.Vector3).length()*1e-4),F=V.getAttribute("position"),te=V.getAttribute("normal");for(let se=0;se<F.count;se++)F.setXYZ(se,F.getX(se)+te.getX(se)*U,F.getY(se)+te.getY(se)*U,F.getZ(se)+te.getZ(se)*U)}let Z=new Bt.Mesh(V,$);Z.name=`AR_${c++}`,r.add(Z),u+=(V.index?.count??V.getAttribute("position").count)/3,($.clearcoat||$.transmission||$.iridescence||$.anisotropy)&&i.add("Advanced PBR effects may look different in Quick Look.")}}}finally{_.dispose()}})}if(!c||!u)throw new Error("There is no visible model geometry to send to AR.");let d=new Bt.Box3().setFromObject(r),m=d.getSize(new Bt.Vector3),f=d.getCenter(new Bt.Vector3),b=t.scaleMode==="real-world"?1:1/Math.max(m.x,m.y,m.z,1e-9);return r.position.set(-f.x*b,-d.min.y*b,-f.z*b),r.scale.setScalar(b),n.updateMatrixWorld(!0),i.add("USDZ is a static snapshot. Viewer lighting, background, post-processing, annotations and measurement overlays stay in the web viewer."),{root:n,meshCount:c,triangleCount:u,scale:b,warnings:[...i],textures:s,dispose:p}}catch(d){throw p(),d}}async function cp(e,t={}){let n=t.maxTextureSize??2048;if(!Number.isInteger(n)||n<256||n>4096)throw new Error("AR maxTextureSize must be an integer from 256 to 4096.");let r=yO(e,t),i=[];try{let{USDZExporter:o}=await import("three/examples/jsm/exporters/USDZExporter.js");t.signal?.throwIfAborted();for(let s of r.textures){if(!s.isCompressedTexture)continue;let{decompress:l}=await import("three/examples/jsm/utils/WebGLTextureUtils.js"),c=l(s,n);i.push(c),r.root.traverse(u=>{let p=u.material;if(p)for(let d of Object.keys(p))p[d]===s&&(p[d]=c)})}let a=await new o().parseAsync(r.root,{onlyVisible:!0,quickLookCompatible:!0,maxTextureSize:n});return t.signal?.throwIfAborted(),{blob:new Blob([new Uint8Array(a)],{type:"model/vnd.usdz+zip"}),meshCount:r.meshCount,triangleCount:r.triangleCount,scale:r.scale,warnings:r.warnings}}catch(o){throw t.signal?.aborted?o:new Error(`Could not prepare the configured USDZ: ${o instanceof Error?o.message:"export failed"}. Textures must allow cross-origin canvas access.`)}finally{r.dispose(),i.forEach(o=>o.dispose())}}function gw({enabled:e,options:t,state:n,getSources:r,baseUrl:i,revision:o=""}){let a,s=!1;try{a=e?uw(n,t?.assetVersion,t?.maxTextureSize)+(i??"")+o:"disabled"}catch{s=!0,a="invalid-configuration"+(t?.assetVersion??"")+o}let[l,c]=(0,bn.useState)(!1),[u,p]=(0,bn.useState)(!1),[d,m]=(0,bn.useState)(null),f=(0,bn.useRef)(null),b=(0,bn.useRef)(!1),g=(0,bn.useRef)(null),y=(0,bn.useRef)(null),h=(0,bn.useRef)({key:a,state:n,options:t,getSources:r,baseUrl:i,enabled:e,invalidConfiguration:s});h.current={key:a,state:n,options:t,getSources:r,baseUrl:i,enabled:e,invalidConfiguration:s};let v=(0,bn.useCallback)(()=>{g.current&&URL.revokeObjectURL(g.current),g.current=null},[]);(0,bn.useEffect)(()=>{f.current?.abort(),b.current=!1,p(!1),v(),m(S=>e&&S?{key:S.key,invalidated:!0,warnings:[]}:null),e||c(!1)},[a,e,v]),(0,bn.useEffect)(()=>()=>{f.current?.abort(),v()},[v]);let x=e&&!d?.invalidated&&d?.key===a,P=x&&!!(d.usdzUrl||d.phoneUrl),w=u?"preparing":e?d&&!x?"stale":x?P?"ready":"error":"idle":"idle";(0,bn.useEffect)(()=>{h.current.options?.onStatusChange?.(w)},[w]);let D=(0,bn.useCallback)(()=>{f.current?.abort(),b.current&&(m(null),v()),b.current=!1,p(!1),c(!1)},[v]),E=(0,bn.useCallback)(async()=>{let S=h.current;if(!S.enabled)return;f.current?.abort(),v(),m(null),p(!0),b.current=!0;let _=new AbortController;f.current=_;let M=()=>!_.signal.aborted&&h.current.key===S.key&&h.current.enabled,C=O=>{M()&&m(V=>({...V?.key===S.key&&!V.invalidated?V:{key:S.key,warnings:[]},...O}))},T;try{if(S.invalidConfiguration)throw new Error("Invalid configuration");T=structuredClone(S.state)}catch{let O=new Error("Configuration contains data that cannot be copied for AR. Use JSON-compatible binding metadata.");b.current=!1,p(!1),C({exportError:O.message}),S.options?.onError?.(O);return}let I,L={configurationKey:S.key,state:T,signal:_.signal,exportUSDZ:()=>I??(I=Promise.resolve().then(()=>cp(S.getSources(),{scaleMode:S.state.configuration?.arScaleMode,maxTextureSize:S.options?.maxTextureSize,signal:_.signal})))},B=[],N=async()=>{try{let O=S.options?.createUSDZ?await S.options.createUSDZ(L):(await L.exportUSDZ()).blob,V=I?await I.then(Q=>Q.warnings,()=>[]):[];if(!M())return;let G;if(typeof O=="string")G=op(O,window.location.href);else if(O instanceof Blob&&O.size>0)G=URL.createObjectURL(O),g.current=G;else throw new Error("The USDZ adapter returned an empty asset.");C({usdzUrl:G,warnings:V})}catch(O){let V=O instanceof Error?O.message:String(O);B.push(V),C({exportError:V})}},R=async()=>{try{let O=S.options?.createMobileUrl?await S.options.createMobileUrl(L):await Qo(L.state,window.location.href).then(G=>ap(G,S.baseUrl||window.location.href,S.options?.storage,_.signal));if(!M())return;let V=op(O,window.location.href);if(V.length>2200)throw new Error("The phone link is too long for a reliable QR code.");C({phoneUrl:V})}catch(O){let V=O instanceof Error?O.message:String(O);!S.options?.createMobileUrl&&V.includes("durable URL")&&(V="QR sharing isn\u2019t available for local uploads. Download the USDZ and send it to your phone."),!S.options?.createMobileUrl&&(V.includes("reachable from your phone")||V.includes("asset URL points to this computer"))&&(V="QR sharing needs a viewer page and model files your phone can reach. Use an online viewer, or download the USDZ."),B.push(V),C({linkError:V})}};await Promise.all([N(),R()]),M()&&(b.current=!1,p(!1),B.length&&S.options?.onError?.(new Error(B.join(`
3667
+ `))))},[v]);return(0,bn.useEffect)(()=>{if(!e||!l){y.current=null;return}P||u||y.current===a||(y.current=a,E())},[e,l,a,P,u,E]),{open:e&&l,show:()=>c(!0),close:D,prepare:E,status:w,busy:u,prepared:x?d:null}}var nl=require("react"),vw=require("qrcode.react"),Gi=require("lucide-react");function Tg(){return typeof navigator>"u"?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function Ac(){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 bw(){return Tg()||Ac()}function vO(){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=Tg();return t||o||r&&n||r&&i}function Ec(){if(!vO())return!1;if(Tg())return!0;let e=navigator.deviceMemory;return!(typeof e=="number"&&e>=8)}function yw(e="auto"){switch(e){case"high":return!1;case"low":return!0;default:return Ec()}}var vt=require("react/jsx-runtime");function xw({handoff:e,filename:t,onQuickLook:n}){let r=xe(),i=(0,nl.useId)(),o=(0,nl.useRef)(null),a=e.close;(0,nl.useEffect)(()=>{let l=document.activeElement;o.current?.focus();let c=u=>{if(u.key==="Escape"&&(u.preventDefault(),a()),u.key!=="Tab")return;let p=Array.from(o.current.querySelectorAll("button:not(:disabled), a[href], summary")),d=p[0],m=p[p.length-1];u.shiftKey&&(document.activeElement===d||document.activeElement===o.current)?(u.preventDefault(),m?.focus()):!u.shiftKey&&(document.activeElement===m||document.activeElement===o.current)&&(u.preventDefault(),d?.focus())};return document.addEventListener("keydown",c),()=>{document.removeEventListener("keydown",c),l?.focus()}},[a]);let s=e.prepared;return(0,vt.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:l=>{l.target===l.currentTarget&&a()},children:(0,vt.jsxs)("section",{ref:o,tabIndex:-1,className:"ri-mobileHandoffDialog ri-configuredARDialog",role:"dialog","aria-modal":"true","aria-labelledby":i,"aria-busy":e.busy&&!s?.phoneUrl&&!s?.usdzUrl,children:[(0,vt.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:a,"aria-label":r("closePhoneHandoff"),children:(0,vt.jsx)(Gi.X,{size:18})}),(0,vt.jsx)(Gi.Smartphone,{size:22,"aria-hidden":"true"}),(0,vt.jsx)("h2",{id:i,children:r("arConfiguredTitle")}),(0,vt.jsx)("p",{children:r("arConfiguredDescription")}),(0,vt.jsx)("div",{role:"status","aria-live":"polite",className:"ri-configuredARProgress",children:(e.busy||e.status==="idle"||e.status==="stale")&&(0,vt.jsxs)("p",{children:[(0,vt.jsx)(Gi.LoaderCircle,{size:16,"aria-hidden":"true"}),r("arPreparing")]})}),s?.phoneUrl&&(0,vt.jsxs)(vt.Fragment,{children:[(0,vt.jsx)("p",{children:r("arScanConfigured")}),(0,vt.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,vt.jsx)(vw.QRCodeSVG,{value:s.phoneUrl,size:208,level:"M",marginSize:4,title:r("qrCodeToOpenThisModelOnAPhone")})}),(0,vt.jsx)("a",{href:s.phoneUrl,target:"_blank",rel:"noopener noreferrer",children:r("arOpenConfiguredLink")})]}),s?.usdzUrl&&(0,vt.jsxs)("div",{className:"ri-configuredARActions",children:[Ac()&&(0,vt.jsxs)("a",{rel:"ar",className:"ri-configuredARLaunch",href:s.usdzUrl,onClick:n,children:[(0,vt.jsx)("img",{alt:"",width:"1",height:"1",src:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="}),r("viewInAR")]}),(0,vt.jsxs)("a",{href:s.usdzUrl,download:`${t}-configured.usdz`,children:[(0,vt.jsx)(Gi.Download,{size:14}),r("arDownloadUSDZ")]})]}),s?.exportError&&(0,vt.jsx)("p",{role:"alert",children:s.exportError}),s?.linkError&&(0,vt.jsx)("p",{role:"status",children:s.linkError}),!e.busy&&(e.status==="ready"||e.status==="error")&&(0,vt.jsxs)("button",{type:"button",className:"ri-configuredARRefresh",onClick:()=>{e.prepare()},children:[(0,vt.jsx)(Gi.RefreshCw,{size:14,"aria-hidden":"true"}),e.status==="error"?r("arRetry"):r("arRefresh")]}),!!s?.warnings.length&&(0,vt.jsxs)("details",{className:"ri-configuredARDetails",children:[(0,vt.jsx)("summary",{children:r("arExportDetails")}),s.warnings.map(l=>(0,vt.jsx)("p",{className:"ri-configuredARNote",children:l},l))]})]})})}var ns=require("three"),xO=new Set(["KHR_binary_glTF","KHR_draco_mesh_compression","KHR_lights_punctual","KHR_materials_clearcoat","KHR_materials_dispersion","KHR_materials_ior","KHR_materials_sheen","KHR_materials_specular","KHR_materials_transmission","KHR_materials_iridescence","KHR_materials_anisotropy","KHR_materials_unlit","KHR_materials_volume","KHR_texture_basisu","KHR_texture_transform","KHR_mesh_quantization","KHR_materials_emissive_strength","KHR_materials_variants","EXT_materials_bump","EXT_texture_webp","EXT_texture_avif","EXT_meshopt_compression","EXT_mesh_gpu_instancing"]),ww=new WeakMap;function Rc(e,t){ww.set(e,structuredClone(t))}function rl(e){let t=ww.get(e);return t?structuredClone(t):void 0}function rs(e){if(/^(blob|data):/i.test(e))return"Local resource";let t=e.split(/[?#]/,1)[0].replace(/\\/g,"/");return t.slice(t.lastIndexOf("/")+1).slice(0,300)||"Resource"}function Pg(e){return/^(blob|data):/i.test(e)?"Local resource":e.split(/[?#]/,1)[0].replace(/\\/g,"/").replace(/^[a-z][a-z0-9+.-]*:\/\/[^/]*/i,"").replace(/^\/+/,"").slice(0,500)||"Resource"}function Sw(e){let t=n=>typeof n=="number"&&Number.isFinite(n)&&n>=0?n:null;return{...e.format?{format:e.format}:{},...e.name?{name:rs(e.name)}:{},sourceBytes:t(e.sourceBytes),loadDurationMs:t(e.loadDurationMs),extensionsUsed:[...new Set(e.extensionsUsed??[])].sort(),extensionsRequired:[...new Set(e.extensionsRequired??[])].sort(),failedResources:[...new Set((e.failedResources??[]).map(Pg))].slice(0,50)}}function Mw(e){let t=new Set(e.extensionsRequired);return[...new Set([...e.extensionsUsed??[],...t])].sort().map(n=>({name:n,required:t.has(n),recognized:xO.has(n)}))}function wO(e,t){let n=e.image,r=c=>typeof c=="number"&&Number.isSafeInteger(c)&&c>0?c:null,i=r(n?.naturalWidth??n?.width),o=r(n?.naturalHeight??n?.height),a=!!e.isCompressedTexture,s=e.mipmaps.reduce((c,u)=>c+(u.data?.byteLength??0),0),l=i&&o?Math.ceil(i*o*4*(e.generateMipmaps?4/3:1)):null;return{name:e.name?rs(e.name):t,width:i,height:o,compressed:a,estimatedBytes:a?s||null:l!==null&&Number.isSafeInteger(l)?l:null}}function up(e,t={}){let n=Sw({...rl(e),...t.source}),r=[],i=new Set,o=new Map,a=new Set,s=new Map,l=new Map,c=new Set,u=new Map,p=0,d=0,m=0,f=0,b=0,g=(S,_)=>{let M=u.get(S)??{count:0,names:[]};M.count++,M.names.length<20&&M.names.push(_||"Unnamed object"),u.set(S,M)},y=S=>{let _=S?.array??S?.data?.array;_?.buffer&&!c.has(_.buffer)&&(c.add(_.buffer),b+=_.buffer.byteLength)};e.traverse(S=>{let _=S;if(!_.isMesh||!_.geometry)return;p++,d+=_.isInstancedMesh?Number.isSafeInteger(_.count)?Math.max(0,_.count??0):0:1;let M=_.geometry,C=M.getAttribute("position"),T=M.getAttribute("uv"),I=_.material?Array.isArray(_.material)?_.material:[_.material]:[];if(!o.has(M)){let B=!!C&&(!Number.isSafeInteger(C.count)||C.count<0);for(let N=0;!B&&C&&N<C.count;N++)if(!Number.isFinite(C.getX(N))||!Number.isFinite(C.getY(N))||!Number.isFinite(C.getZ(N))){B=!0;break}o.set(M,B)}if(o.get(M)&&g("invalid-positions",S.name),C?.count||g("empty-geometry",S.name),T||g("missing-uv",S.name),M.getAttribute("normal")||g("missing-normals",S.name),M.boundingBox&&[...M.boundingBox.min.toArray(),...M.boundingBox.max.toArray()].some(B=>!Number.isFinite(B))&&g("invalid-bounds",S.name),!i.has(M)){i.add(M),m+=Number.isSafeInteger(C?.count)?Math.max(0,C?.count??0):0;let B=M.index?.count??C?.count??0;f+=Number.isSafeInteger(B)?Math.floor(Math.max(0,B)/3):0,Object.values(M.attributes).forEach(y),Object.values(M.morphAttributes).flat().forEach(y),y(M.index)}let L=!1;for(let B of I){a.add(B);let N=s.get(B);if(!N){N=Object.values(B).filter(R=>!!R&&R.isTexture===!0),s.set(B,N);for(let R of N)l.has(R)||l.set(R,`Texture ${l.size+1}`)}for(let R of N){let O=R.channel??0;M.getAttribute(O===0?"uv":`uv${O}`)||(L=!0)}}L&&g("textured-missing-uv",S.name)});let h=(S,_,M,C,T)=>{let I=u.get(S);I&&r.push({code:S,severity:_,title:M,detail:C,suggestion:T,count:I.count,objects:I.names})};h("empty-geometry","error","Empty mesh geometry","Some meshes have no position data.","Remove empty meshes or export their geometry again."),h("invalid-positions","error","Invalid vertex coordinates","Some vertices contain non-finite coordinates.","Repair NaN or infinite vertex positions in the source application, then re-export."),h("invalid-bounds","error","Invalid geometry bounds","Some cached bounds contain non-finite values.","Repair invalid coordinates in the source application and re-export."),h("textured-missing-uv","warning","Textures have no matching UV coordinates","A texture references a UV channel that its mesh does not contain.","Unwrap the affected meshes and export the UV channel used by each texture."),h("missing-uv","info","Meshes without UVs","Solid colors can work without UVs; image textures and surface decals need them.","Add a UV map before applying image textures or decals."),h("missing-normals","info","Meshes without normals","Some loaded meshes lack vertex normals; generated shading may differ from the source.","Export vertex normals to preserve hard edges and smooth surfaces."),p||r.push({code:"no-meshes",severity:"warning",title:"No mesh geometry found",detail:"This scene contains no loaded meshes.",suggestion:"Check that meshes were included in the export. Streamed scenes may still be loading."});let v=[...l].map(([S,_])=>wO(S,_)),x=v.filter(S=>(S.width??0)>4096||(S.height??0)>4096);x.length&&r.push({code:"large-textures",severity:"warning",title:"Large texture dimensions",detail:"Some textures exceed 4096 pixels on one side.",suggestion:"Resize textures for the visible detail needed; use KTX2/Basis where appropriate.",count:x.length,objects:x.slice(0,20).map(S=>S.name)}),f>1e6&&r.push({code:"high-triangle-count",severity:"warning",title:"High geometry count",detail:"The loaded geometry contains more than one million unique triangles.",suggestion:"Simplify hidden detail, create lower-detail exports, or use streamed assets for large scenes."}),a.size>100&&r.push({code:"many-materials",severity:"warning",title:"Many material definitions",detail:"More than 100 materials can increase rendering work.",suggestion:"Reuse materials and atlas compatible textures; inspect runtime draw calls to confirm the cost."});let P=Mw(n);for(let S of P.filter(_=>!_.recognized))r.push({code:"unrecognized-extension",severity:S.required?"error":"warning",title:`${S.required?"Required":"Optional"} extension not recognized`,detail:S.name,suggestion:"Export with extensions supported by the bundled loader, or verify the asset's fallback appearance."});n.failedResources?.length&&r.push({code:"failed-resources",severity:"error",title:"Some resources failed to load",detail:"The model may be missing textures or other referenced resources.",suggestion:"Include sidecar files in the ZIP, correct their paths, and check HTTP access and CORS.",count:n.failedResources.length,objects:n.failedResources.slice(0,20)});let w=null,D=[...o.values()].some(Boolean)?new ns.Box3:new ns.Box3().setFromObject(e);!D.isEmpty()&&[...D.min.toArray(),...D.max.toArray(),...D.getSize(new ns.Vector3).toArray()].every(Number.isFinite)&&(w={min:D.min.toArray(),max:D.max.toArray(),center:D.getCenter(new ns.Vector3).toArray(),size:D.getSize(new ns.Vector3).toArray()}),t.scope==="resident-tiles"&&r.unshift({code:"partial-stream",severity:"info",title:"Loaded tiles only",detail:"Geometry and texture counts cover the current resident tiles, not the entire source asset.",suggestion:"Use the live cache/detail statistics to inspect streaming pressure. Rescan after moving the camera."});let E=S=>S.code==="partial-stream"?-1:S.severity==="error"?0:S.severity==="warning"?1:2;return r.sort((S,_)=>E(S)-E(_)),{version:1,status:"ready",scope:t.scope??"asset",source:n,units:n.format==="glb"||n.format==="gltf"?"meters (glTF convention)":"unknown",bounds:w,statistics:{meshes:p,instances:d,geometries:i.size,materials:a.size,textures:l.size,vertices:m,triangles:f,geometryBytes:b,estimatedTextureBytes:v.reduce((S,_)=>S+(_.estimatedBytes??0),0),unknownTextureSizes:v.filter(S=>S.estimatedBytes===null).length,meshesWithoutUvs:u.get("missing-uv")?.count??0,meshesWithoutNormals:u.get("missing-normals")?.count??0},textures:v,extensions:P,issues:r}}function _w(e={}){return{version:1,status:"failed",scope:"asset",source:Sw(e),units:"unknown",bounds:null,statistics:null,textures:[],extensions:Mw(e),issues:[{code:"load-failed",severity:"error",title:"Asset could not be loaded",detail:"Geometry and textures could not be inspected.",suggestion:"Check the file format, required decoders, sidecar paths, HTTP access and CORS, then reload the asset."}]}}var Ag=require("fflate");var SO;function Cw(e){SO=e}var Eg=1024*1024,q3=128*Eg;var X3=128*Eg,$3=256*Eg;var MO=new Map;function Rg(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 Oc(e){return MO.get(e)??{format:Rg(e)}}var k=require("react"),yP=require("react-dom");var ol=require("three"),Jo=require("three-mesh-bvh"),Aw=!1,il=new WeakMap,Dc=new WeakMap;function CO(){Aw||(ol.Mesh.prototype.raycast=Jo.acceleratedRaycast,Aw=!0)}function TO(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;!r||!r.attributes?.position||t.add(r)}),[...t]}function Ew(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 Ic=12e6;function Rw(e){return Og(e)>Ic}function Og(e){let t=new Set;return e.traverse(n=>{let r=n.geometry;r?.attributes?.position&&t.add(r)}),Ew([...t])}function PO(e,t){return new Promise((n,r)=>{let i=c=>{let u=c.data;if(!u||!u.error&&!u.serialized)return;if(e.removeEventListener("message",i),e.removeEventListener("error",o),u.error){r(new Error(String(u.error)));return}let{serialized:p}=u,d=Jo.MeshBVH.deserialize(p,t,{setIndex:!1});p.index&&(t.index?t.index.array=p.index:t.setIndex(new ol.BufferAttribute(p.index,1,!1))),t.boundingBox=d.getBoundingBox(new ol.Box3),n(d)},o=c=>{e.removeEventListener("message",i),e.removeEventListener("error",o),r(new Error(c.message||"BVH worker error"))};e.addEventListener("message",i),e.addEventListener("error",o);let a=t.index?t.index.array.slice():null,s=t.attributes.position.array.slice(),l=[s,...a?[a]:[]].map(c=>c.buffer);e.postMessage({index:a,position:s,options:{groups:[...t.groups]}},l)})}async function AO(){if(typeof window>"u"||typeof Worker>"u")return null;try{let{bvhWorkerCode:e}=await Promise.resolve().then(()=>(Pw(),Tw)),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 EO(e,t){if(t)try{return await PO(t,e)}catch{}let n=Jo.computeBoundsTree.call(e);return e.boundsTree=void 0,await new Promise(r=>setTimeout(r,0)),n}async function RO(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&&il.delete(e)}),t.buildPromise}async function dp(e,t){if(t?.aborted)return;let n=Dc.get(e);if(!n){if(n=TO(e),Ew(n)>Ic){Dc.set(e,[]);return}Dc.set(e,n);for(let i of n){let o=il.get(i)??{references:0};o.references+=1,il.set(i,o)}}if(n.length===0)return;CO();let r=await AO();if(t?.aborted){r?.dispose();return}try{for(let i of n){if(t?.aborted)return;let o=il.get(i);o&&await RO(i,o,()=>EO(i,r?.worker))}}finally{r?.dispose()}}function kc(e){let t=Dc.get(e);if(t){Dc.delete(e);for(let n of t){let r=il.get(n);r&&(r.references=Math.max(0,r.references-1),!(r.references>0)&&(r.ownedTree&&n.boundsTree===r.ownedTree&&(Jo.disposeBoundsTree.call(n),n.boundsTree=void 0),r.ownedTree=void 0,r.buildPromise||il.delete(n)))}}}var ri=require("three");var Ow=require("lucide-react");var ea=require("react/jsx-runtime");function pp({title:e,message:t,tone:n="default"}){return(0,ea.jsxs)("div",{className:`ri-license-overlay${n==="error"?" ri-license-overlay--error":""}`,children:[(0,ea.jsxs)("div",{className:"ri-license-overlay__header",children:[n==="error"?(0,ea.jsx)(Ow.AlertTriangle,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):(0,ea.jsx)("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),(0,ea.jsx)("span",{className:"ri-license-overlay__title",children:e})]}),(0,ea.jsx)("p",{className:"ri-license-overlay__message",children:t})]})}var Dw=require("react"),Hi=class extends Dw.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 ta=require("react");function Iw({enabled:e,activeUrl:t,models:n,errorsRef:r,activeFailed:i,activeError:o,onActiveError:a,onExtraError:s}){let[l,c]=(0,ta.useState)(0),u=(0,ta.useCallback)((d,m)=>{r.current.set(d,m),c(f=>f+1),d!==t&&s?.(d,m)},[t,r,s]),p=(0,ta.useCallback)(d=>{r.current.delete(d)&&c(m=>m+1)},[r]);return(0,ta.useEffect)(()=>{let d=new Set(e?n?.map(Pe):[]);for(let m of r.current.keys())d.has(m)||r.current.delete(m)},[e,n,r]),(0,ta.useEffect)(()=>{if(!e||!r.current.has(t))return;let d=r.current.get(t);i&&Object.is(o,d)||a(d)},[e,t,n,r,l,i,o,a]),{reportError:u,clearError:p}}var Wi=require("react");function kw(e,t){let n=(0,Wi.useRef)({}),r=(0,Wi.useRef)({}),i=(0,Wi.useRef)({}),o=(0,Wi.useRef)(0),a=(0,Wi.useCallback)(s=>{var l;return(l=i.current)[s]??(l[s]={current:{}})},[]);return(0,Wi.useEffect)(()=>{let s=new Set(e?t?.map(Pe):[]);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,Wi.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 na=require("react");var mp=require("react");function bo(e,t){let n=(0,mp.useRef)(t);(0,mp.useEffect)(()=>{let r=n.current;n.current=t,t.some((i,o)=>!Object.is(i,r[o]))&&e()},t)}var OO={};function Lw({modelUrl:e,activeModelId:t,tilesetUrl:n,models:r,objectBindings:i="auto",onChange:o,initialBindings:a,initialModelEdits:s}){let l=t??e,c=!!(r?.length&&!n),u=i==="auto"&&!c,p=!u&&o!==void 0,d=i==="auto"?OO:i,[m,f]=(0,na.useState)(()=>a??d),[b,g]=(0,na.useState)(()=>{let P=new Map(s),w=c?r?.find(D=>Pe(D)===l):void 0;return w&&a&&s===void 0&&P.set(l,{source:w.objectBindings,bindings:a}),P});bo(()=>{p||f(d)},[p,d]),(0,na.useEffect)(()=>{let P=new Map(c?r?.map(w=>[Pe(w),w.objectBindings]):[]);g(w=>{let D=[...w].filter(([E,S])=>!p&&P.get(E)===S.source);return D.length===w.size?w:new Map(D)})},[c,r,p]);let y=(0,na.useCallback)(P=>{let w=p?void 0:b.get(Pe(P));return w?.source===P.objectBindings?w.bindings:P.objectBindings},[p,b]),h=c?r?.find(P=>Pe(P)===l):void 0,v=h?y(h):p?d:m,x=(0,na.useCallback)(P=>{p||(h?g(w=>new Map(w).set(Pe(h),{source:h.objectBindings,bindings:P})):f(P)),o?.(P)},[p,h,o]);return{autoBindings:u,controlled:p,currentBindings:v,applyBindings:x,bindingsForModel:y,modelEdits:b}}var al=require("three");var fp=require("react");function jr(e){return!!e?.isWebGPURenderer}var Bw;function DO(){return Bw??(Bw=(async()=>{let e=typeof navigator>"u"?void 0:navigator.gpu;if(!e)return!1;try{return!!await e.requestAdapter()}catch{return!1}})()),Bw}var Nw=!1;function Vw(e){let[t,n]=(0,fp.useState)(null);return(0,fp.useEffect)(()=>{if(!e)return;let r=!1;return DO().then(i=>{r||(!i&&!Nw&&(Nw=!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 jw(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 hp(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:n,scene:r,camera:i,invalidate:o}=e,a=jr(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,type:l="image/png",quality:c}=t,u=n.getSize(new al.Vector2),p=n.getPixelRatio(),d=i instanceof al.PerspectiveCamera?i.aspect:null,m=r.background,f=t.width??u.x,b=t.height??u.y,g=f!==u.x||b!==u.y,y=Td(r);s&&(r.background=null),g&&(n.setPixelRatio(1),n.setSize(f,b,!1),i instanceof al.PerspectiveCamera&&(i.aspect=f/b,i.updateProjectionMatrix()));let h=()=>{y(),s&&(r.background=m),g&&(n.setPixelRatio(p),n.setSize(u.x,u.y,!1),i instanceof al.PerspectiveCamera&&d!==null&&(i.aspect=d,i.updateProjectionMatrix())),o()};if(a)try{return n.render(r,i),Promise.resolve(n.domElement.toDataURL(l,c))}catch(v){return Promise.reject(v)}finally{h()}return o(),new Promise((v,x)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let P,w;try{P=n.domElement.toDataURL(l,c)}catch(D){w=D}h(),w?x(w):v(P)})})})}var qi=require("react"),vr=require("three"),zw=require("@react-three/fiber");function Uw(e){return!Number.isFinite(e)||e<=0?1:10**Math.floor(Math.log10(e/10))}var Dg=require("react/jsx-runtime"),IO=`
3668
+ varying vec3 vWorld;
3669
+ void main() {
3670
+ vec4 world = modelMatrix * vec4(position, 1.0);
3671
+ vWorld = world.xyz;
3672
+ gl_Position = projectionMatrix * viewMatrix * world;
3673
+ }
3674
+ `,kO=`
3675
+ uniform float uCell;
3676
+ uniform float uMajor;
3677
+ uniform float uFade;
3678
+ uniform vec3 uLine;
3679
+ uniform vec3 uAxisX;
3680
+ uniform vec3 uAxisZ;
3681
+ uniform bool uLinearTarget;
3682
+ varying vec3 vWorld;
3683
+
3684
+ float lines(vec2 position, float size, vec2 width) {
3685
+ vec2 scaled = position / size;
3686
+ vec2 pixels = width / size;
3687
+ vec2 distanceToLine = abs(fract(scaled - 0.5) - 0.5) / max(pixels, vec2(1e-6));
3688
+ return 1.0 - min(min(distanceToLine.x, distanceToLine.y), 1.0);
3689
+ }
3690
+
3691
+ void main() {
3692
+ vec2 position = vWorld.xz;
3693
+ vec2 width = fwidth(position);
3694
+ float minorFade = 1.0 - smoothstep(0.15, 0.45, max(width.x, width.y) / uCell);
3695
+ float majorFade = 1.0 - smoothstep(0.15, 0.45, max(width.x, width.y) / uMajor);
3696
+ float alpha = max(lines(position, uCell, width) * 0.11 * minorFade,
3697
+ lines(position, uMajor, width) * 0.3 * majorFade);
3698
+ vec3 color = uLine;
3699
+
3700
+ float onX = 1.0 - min(abs(position.y) / max(width.y, 1e-6), 1.0);
3701
+ float onZ = 1.0 - min(abs(position.x) / max(width.x, 1e-6), 1.0);
3702
+ if (onX > 0.0) { color = mix(color, uAxisX, onX); alpha = max(alpha, onX * 0.7); }
3703
+ if (onZ > 0.0) { color = mix(color, uAxisZ, onZ); alpha = max(alpha, onZ * 0.7); }
3704
+
3705
+ alpha *= 1.0 - smoothstep(uFade * 0.15, uFade, distance(cameraPosition, vWorld));
3706
+ if (alpha < 0.004) discard;
3707
+ // Post-processing blends in linear color, where a faint line comes out far
3708
+ // brighter than the same alpha blended on the canvas. Selecting an object
3709
+ // turns that pipeline on, so without this the grid would jump in brightness.
3710
+ gl_FragColor = vec4(color, uLinearTarget ? pow(alpha, 2.2) : alpha);
3711
+ #include <colorspace_fragment>
3712
+ }
3713
+ `,LO=()=>{};function Fw({getTarget:e,revision:t,lineColor:n}){let r=(0,zw.useThree)(u=>u.invalidate),[i,o]=(0,qi.useState)({y:0,size:10}),a=(0,qi.useRef)(null);(0,qi.useEffect)(()=>{a.current&&Xo(a.current)},[]),(0,qi.useEffect)(()=>{let u=e();if(!u)return;let p=u instanceof vr.Box3?u:new vr.Box3().setFromObject(u);if(p.isEmpty())return;let d=p.getSize(new vr.Vector3);o({y:p.min.y,size:Math.max(d.x,d.y,d.z)}),r()},[e,t,r]);let s=(0,qi.useMemo)(()=>new vr.ShaderMaterial({vertexShader:IO,fragmentShader:kO,transparent:!0,depthWrite:!1,side:vr.DoubleSide,uniforms:{uCell:{value:1},uMajor:{value:5},uFade:{value:100},uLinearTarget:{value:!1},uLine:{value:new vr.Color},uAxisX:{value:new vr.Color("#e5484d")},uAxisZ:{value:new vr.Color("#3e8bff")}}}),[]);(0,qi.useEffect)(()=>()=>s.dispose(),[s]);let l=Uw(i.size);s.uniforms.uCell.value=l,s.uniforms.uMajor.value=l*5,s.uniforms.uFade.value=i.size*12,s.uniforms.uLine.value.set(n);let c=i.size*40;return(0,Dg.jsx)("mesh",{ref:a,rotation:[-Math.PI/2,0,0],position:[0,i.y-i.size*5e-4,0],raycast:LO,renderOrder:-1,frustumCulled:!1,material:s,onBeforeRender:u=>{let p=u.getRenderTarget()!==null;s.uniforms.uLinearTarget.value!==p&&(s.uniforms.uLinearTarget.value=p,s.uniformsNeedUpdate=!0)},children:(0,Dg.jsx)("planeGeometry",{args:[c,c]})})}var bp=require("react"),yp=require("@react-three/drei"),Gw=require("@react-three/fiber");var gp=require("react/jsx-runtime");function Hw({onUpdate:e}){let t=(0,Gw.useThree)(r=>r.scene),n=(0,bp.useRef)(null);return(0,bp.useEffect)(()=>{if(n.current)return n0(t,n.current)},[t]),(0,gp.jsx)(yp.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:e,children:(0,gp.jsx)("group",{ref:n,children:(0,gp.jsx)(yp.GizmoViewport,{axisColors:["#e5484d","#46a758","#3e8bff"],labelColor:"white"})})})}var xr=require("react"),Lg=require("three");var Wt=require("react"),vp=require("@react-three/fiber"),Tn=require("three");function Ig(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 BO=1.2;function sl({controlsRef:e,sceneRef:t,config:n,playing:r,resetOnPlay:i=!1,onFinished:o,onUserInteract:a,onStop:s,playOnce:l=!1,startAtPath:c=!1,onStarted:u,onProgress:p}){let d=(0,vp.useThree)(R=>R.invalidate),m=(0,Wt.useMemo)(()=>n.waypoints??[],[n.waypoints]),f=m.length>=2,b=n.loop??!0,g=Ig(n),y=(0,Wt.useMemo)(()=>m.map(R=>[...R.position,...R.target,R.azimuthAngle??"",R.polarAngle??"",R.segmentDuration??""].join(",")).join(";"),[m]),h=(0,Wt.useMemo)(()=>{let R=[];if(m.length<2)return R;let O=0;for(let V=0;V<m.length-1;V++)O+=m[V].segmentDuration??3.5,R.push(O);return b&&m.length>1&&(O+=m[m.length-1].segmentDuration??3.5,R.push(O)),R},[m,b]),v=(0,Wt.useMemo)(()=>R=>{if(m.length<2||h.length===0)return R/g;let O=h[h.length-1],V=b?R%g:Math.min(R,g),G=g>0?V/g*O:0;for(let Q=0;Q<h.length;Q++)if(G<=h[Q]){let $=Q===0?0:h[Q-1],ne=h[Q]-$,Z=ne>0?(G-$)/ne:0,U=b?m.length:m.length-1,F=Q/U,te=1/U;return F+Z*te}return 1},[m.length,h,g,b]),x=(0,Wt.useMemo)(()=>f?{position:new Tn.CatmullRomCurve3(m.map(R=>new Tn.Vector3(...R.position)),b,"catmullrom",.5),target:new Tn.CatmullRomCurve3(m.map(R=>new Tn.Vector3(...R.target)),b,"catmullrom",.5)}:null,[y,f,b]),P=(0,Wt.useMemo)(()=>{if(!f||!m.every(O=>Number.isFinite(O.azimuthAngle)&&Number.isFinite(O.polarAngle)))return null;let R=m.map(O=>({azimuth:O.azimuthAngle,polar:O.polarAngle,distance:new Tn.Vector3(...O.position).distanceTo(new Tn.Vector3(...O.target))}));for(let O=1;O<R.length;O+=1){let V=R[O-1].azimuth,G=R[O].azimuth;R[O].azimuth=G+Math.round((V-G)/(Math.PI*2))*Math.PI*2}return R},[y,f]),w=(0,Wt.useRef)(0),D=(0,Wt.useRef)(0),E=(0,Wt.useRef)(new Tn.Vector3),S=(0,Wt.useRef)(new Tn.Vector3),_=(0,Wt.useRef)(!1),M=(0,Wt.useRef)(!0),C=(0,Wt.useRef)(0),T=(0,Wt.useRef)(!1),I=(0,Wt.useRef)(null),L=(0,Wt.useMemo)(()=>new Tn.Vector3,[]),B=(0,Wt.useMemo)(()=>new Tn.Vector3,[]),N=(0,Wt.useMemo)(()=>new Tn.Spherical,[]);return(0,Wt.useEffect)(()=>{w.current=0,C.current=0,D.current=0,T.current=!1},[y,b,g]),(0,Wt.useEffect)(()=>{i&&(C.current=0,w.current=0,T.current=!1)},[i]),(0,Wt.useEffect)(()=>{if(!r){_.current=!1,w.current>0&&!i?C.current=w.current:i&&(C.current=0),(w.current>0||T.current)&&s?.();return}w.current>=g&&!b&&(w.current=0,C.current=0,T.current=!1);let R=e.current;if(R&&(R.getPosition(E.current),R.getTarget(S.current)),i||T.current||C.current===0?(w.current=0,C.current=0,T.current=!1):C.current>0&&C.current<g?w.current=C.current:(w.current=0,C.current=0),D.current=0,!f){let O=t.current;if(O){let V=new Tn.Box3().setFromObject(O).getBoundingSphere(new Tn.Sphere);I.current={center:V.center.clone(),radius:V.radius>0?V.radius:1}}}_.current=!0,M.current=!0,d()},[r,f,e,t,d,g,b,y,i,s]),(0,Wt.useEffect)(()=>{if(!r||!a)return;let R=e.current;if(!R)return;let O=()=>{T.current||a()};return R.addEventListener("controlstart",O),()=>R.removeEventListener("controlstart",O)},[r,e,a]),(0,vp.useFrame)((R,O)=>{if(!r||!_.current)return;let V=e.current;if(!V)return;let G=M.current;M.current=!1,(!G||!c)&&(w.current+=O,D.current+=O);let Q=(!b||l)&&w.current>=g,$=Q&&b?0:v(w.current);if($=b?$%1:Math.min($,1),x)if(x.target.getPoint($,B),P){let Z=b?P.length:P.length-1,U=Math.min($,1)*Z,F=Math.min(Math.floor(U),Z-1),te=(F+1)%P.length,se=$>=1?1:U-F,ye=se*se*(3-2*se),K=P[F],re=P[te],ce=re.azimuth+Math.round((K.azimuth-re.azimuth)/(Math.PI*2))*Math.PI*2,he=K.azimuth+(ce-K.azimuth)*ye,qe=K.polar+(re.polar-K.polar)*ye,ie=K.distance+(re.distance-K.distance)*ye;N.set(Math.max(ie,1e-6),Math.min(Math.max(qe,1e-6),Math.PI-1e-6),he),L.setFromSpherical(N).add(B)}else x.position.getPoint($,L);else{let Z=I.current;if(!Z)return;let U=$*Math.PI*2,F=Z.radius*2.2;L.set(Z.center.x+Math.cos(U)*F,Z.center.y+Z.radius*.6,Z.center.z+Math.sin(U)*F),B.copy(Z.center)}let ne=c?1:Math.min(D.current/BO,1);if(ne<1){let Z=ne*ne*(3-2*ne);L.lerpVectors(E.current,L,Z),B.lerpVectors(S.current,B,Z)}if(V.setLookAt(L.x,L.y,L.z,B.x,B.y,B.z,!1),G&&u?.(),p?.(Math.min(w.current/g,1)),Q){_.current=!1,T.current=!0,w.current=0,C.current=0,o?.();return}d()}),null}function Ww(){return typeof document<"u"&&typeof HTMLCanvasElement<"u"&&typeof HTMLCanvasElement.prototype.captureStream=="function"}function qw(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,u,p=0,d=0,m=0,f=null,b=0,g=0,y=0,h=!1,v=!1,x,P,w,D,E,S,_=new Promise((O,V)=>{E=O,S=V}),M=()=>{clearTimeout(x),clearInterval(P),w!==void 0&&cancelAnimationFrame(w),D!==void 0&&cancelAnimationFrame(D),i?.removeEventListener("abort",T),e.removeEventListener("webglcontextlost",I),l&&(l.pause(),l.srcObject=null),s?.getTracks().forEach(O=>O.stop())},C=(O=new DOMException("Video export cancelled.","AbortError"))=>{h||(h=!0,M(),S(O))},T=()=>C(),I=()=>C(new Error("Video export stopped because the WebGL context was lost.")),L=()=>C(new Error("Video export timed out. Keep the viewer tab visible while recording."));i?.addEventListener("abort",T,{once:!0}),e.addEventListener("webglcontextlost",I),x=setTimeout(L,3e4);let B=(async()=>{if(a=await import("gifenc"),!h&&(s=e.captureStream(n),l=document.createElement("video"),l.muted=!0,l.playsInline=!0,l.srcObject=s,await l.play(),!h)){if(c=document.createElement("canvas").getContext("2d",{willReadFrequently:!0}),!c)throw new Error("Video recording as GIF is not supported in this browser.");u=a.GIFEncoder()}})().catch(O=>C(O)),N=O=>{if(!f||!u)return;let V=Math.max(2,Math.round((O-b)/10)-y);y+=V,u.writeFrame(f.index,p,d,{palette:f.palette,delay:V*10}),f=null},R=()=>{if(h||!a||!l||!c||!u||l.readyState<2||!l.videoWidth)return;let O=performance.now();if(!(m>0&&O-g<o/2)){p||(p=Math.min(r,l.videoWidth),d=Math.max(1,Math.round(p*l.videoHeight/l.videoWidth)),c.canvas.width=p,c.canvas.height=d);try{c.drawImage(l,0,0,p,d);let{data:V}=c.getImageData(0,0,p,d),G=a.quantize(V,256),Q=a.applyPalette(V,G);m===0&&(b=O),N(O),f={index:Q,palette:G},g=O,m+=1}catch(V){C(V)}}};return{result:_,cancel:C,start(O){h||w!==void 0||(w=requestAnimationFrame(()=>{B.then(()=>{h||(R(),P=setInterval(R,o),clearTimeout(x),x=setTimeout(L,(O+30)*1e3))})}))},finish(){h||v||(v=!0,D=requestAnimationFrame(()=>{B.then(()=>{if(h||(R(),h))return;if(!u||m===0){C(new Error("The browser produced an empty video."));return}N(g+o),u.finish();let O=new Blob([u.bytes()],{type:"image/gif"});h=!0,M(),E(O)})}))}}}var kg={webm:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"],mp4:["video/mp4;codecs=avc1.42E01E","video/mp4"]};function yo(e="auto"){return e==="gif"?Ww()?"image/gif":null:typeof MediaRecorder>"u"?null:(e==="auto"?[...kg.webm,...kg.mp4]:kg[e]).find(n=>MediaRecorder.isTypeSupported(n))??null}function Xw(e,t={}){if(t.format==="gif")return qw(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=yo(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,u,p,d,m=[],f,b,g=new Promise((w,D)=>{f=w,b=D}),y=()=>{clearTimeout(u),p!==void 0&&cancelAnimationFrame(p),d!==void 0&&cancelAnimationFrame(d),i?.removeEventListener("abort",v),e.removeEventListener("webglcontextlost",x),s&&(s.ondataavailable=null,s.onstop=null,s.onerror=null),a?.getTracks().forEach(w=>w.stop())},h=(w=new DOMException("Video export cancelled.","AbortError"))=>{if(!l){if(l=!0,y(),s&&s.state!=="inactive")try{s.stop()}catch{}b(w)}},v=()=>h(),x=()=>h(new Error("Video export stopped because the WebGL context was lost.")),P=()=>h(new Error("Video export timed out. Keep the viewer tab visible while recording."));return i?.addEventListener("abort",v,{once:!0}),e.addEventListener("webglcontextlost",x),u=setTimeout(P,3e4),{result:g,cancel:h,start(w){l||p!==void 0||(p=requestAnimationFrame(()=>{if(!l)try{a=e.captureStream(n);let D=new MediaRecorder(a,{mimeType:o,videoBitsPerSecond:r});s=D,D.ondataavailable=({data:E})=>{E.size>0&&m.push(E)},D.onerror=()=>h(new Error("The browser could not encode the video.")),D.onstop=()=>{if(l)return;l=!0,y();let E=new Blob(m,{type:D.mimeType||o});E.size===0?b(new Error("The browser produced an empty video.")):f(E)},D.start(1e3),clearTimeout(u),u=setTimeout(P,(w+30)*1e3)}catch(D){h(D)}}))},finish(){l||c||(c=!0,d=requestAnimationFrame(()=>{if(!l)try{if(!s)throw new Error("Video recording did not start.");s.stop()}catch(w){h(w)}}))}}}function $w(e){let t=(0,xr.useRef)(e);t.current=e;let n=(0,xr.useRef)(null),[r,i]=(0,xr.useState)(null),[o,a]=(0,xr.useState)(0),s=(0,xr.useCallback)(()=>n.current?.cancel(),[]),l=(0,xr.useCallback)(()=>n.current!==null,[]);(0,xr.useEffect)(()=>s,[e.modelUrl,s]);let c=(0,xr.useCallback)(async(p={})=>{let{rendererCaptureRef:d,controlsRef:m,cinematicConfig:f,ready:b,onCaptureStart:g}=t.current,y=d.current,h=m.current;if(!b||!y||!h)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 v=p.mode??(f?"cinematic":"turntable");if(v==="cinematic"&&!f)throw new Error("Enable a cinematic camera path before recording it.");let x=v==="cinematic"?f:{loop:!0},P=p.duration??(v==="turntable"&&p.format==="gif"?8:Ig(x));if(!Number.isFinite(P)||P<=0||P>300)throw new Error("Video duration must be greater than 0 and at most 300 seconds.");let w=Xw(y.gl.domElement,p);n.current=w;let D=h.getPosition(new Lg.Vector3),E=h.getTarget(new Lg.Vector3),S=h.enabled,_=Td(y.scene);h.stop(),h.enabled=!1,a(0),g(),i({config:{...x,duration:P,autoPlay:!1},onStarted:()=>w.start(P),onFinished:w.finish});try{return await w.result}finally{_(),h.enabled=S,h.setLookAt(D.x,D.y,D.z,E.x,E.y,E.z,!1),y.invalidate(),n.current=null,i(null)}},[]),u=(0,xr.useCallback)(p=>{let d=Math.floor(p*100);a(m=>m===d?m:d)},[]);return{captureVideo:c,cancelVideo:s,isRecording:l,recording:r,progress:o,onProgress:u}}var Ur=require("react");function Yw(e){let[t,n]=(0,Ur.useState)(null),[r,i]=(0,Ur.useState)(!1),[o,a]=(0,Ur.useState)(!1),[s,l]=(0,Ur.useState)(!1),[c,u]=(0,Ur.useState)(null),p=(0,Ur.useRef)(!1);(0,Ur.useEffect)(()=>{if(!t||!e){i(!1),a(!1),u(null);return}let m=t.ownerDocument;i(m.fullscreenEnabled===!0&&typeof t.requestFullscreen=="function"&&typeof m.exitFullscreen=="function");let f=()=>{a(m.fullscreenElement===t),u(null)};return f(),m.addEventListener("fullscreenchange",f),()=>m.removeEventListener("fullscreenchange",f)},[t,e]);let d=(0,Ur.useCallback)(async()=>{if(!t||!e||!r||p.current)return;let m=t.ownerDocument,f=m.fullscreenElement===t;p.current=!0,l(!0),u(null);try{f?await m.exitFullscreen():await t.requestFullscreen(),a(m.fullscreenElement===t)}catch{u(f?"Could not exit fullscreen. Press Escape to exit.":"Could not enter fullscreen. Check your browser or iframe fullscreen permissions and try again.")}finally{p.current=!1,l(!1)}},[t,e,r]);return{rootRef:n,supported:r,active:o,pending:s,error:c,toggle:d}}var Pn=require("react");function Kw(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 xp=require("@react-three/fiber"),Bg=require("react");function Zw({captureRef:e}){let{gl:t,scene:n,camera:r,invalidate:i,get:o}=(0,xp.useThree)();return(0,Bg.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 Qw(){let e=(0,xp.useThree)(n=>n.frameloop),t=(0,xp.useThree)(n=>n.invalidate);return(0,Bg.useEffect)(()=>{e!=="never"&&t()},[e,t]),null}function Jw(e){e.dispose(),"forceContextLoss"in e&&!jr(e)&&(e.forceContextLoss(),e.forceContextLoss=()=>{})}function eS(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 tS(e){let t=(0,Pn.useRef)(e);t.current=e;let[n,r]=(0,Pn.useState)(null),[i,o]=(0,Pn.useState)(0),[a,s]=(0,Pn.useState)("ready"),l=(0,Pn.useRef)(null),c=(0,Pn.useRef)(!1),u=(0,Pn.useRef)(null),p=(0,Pn.useRef)(null),d=(0,Pn.useCallback)(g=>{p.current?.dispose(),p.current=null,u.current=g,r(g)},[]),m=(0,Pn.useCallback)(()=>{c.current||(c.current=!0,t.current?.(),l.current?.(),l.current=null,u.current&&(p.current=u.current),u.current=null,r(null),s("rebuilding"),o(g=>g+1))},[]),f=(0,Pn.useCallback)(()=>{l.current?.(),l.current=null;let g=u.current;u.current=null,r(null),g&&Jw(g)},[]),b=(0,Pn.useCallback)(()=>{c.current=!1,s("lost")},[]);return(0,Pn.useEffect)(()=>()=>{p.current?.dispose(),p.current=null},[]),(0,Pn.useEffect)(()=>{if(!n)return;if(c.current=!1,s("ready"),jr(n)){let y=n,h=y.onDeviceLost;return y.onDeviceLost=v=>{console.warn("[react-immersive] The WebGPU device was lost.",v),b()},()=>{y.onDeviceLost=h}}let g=Kw(n.domElement,{initiallyLost:n.getContext().isContextLost(),onLost:b,onRestored:m});return l.current=g,()=>{g(),l.current===g&&(l.current=null)}},[n,b,m]),{generation:i,status:a,reload:m,fail:b,release:f,onRendererCreated:d}}var Sp=require("react");var Lc=require("react"),NO="200px",nS=new Map;function rS(e,t,n){let r=nS.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},nS.set(t,r)}let{observer:i,watchers:o}=r;return o.set(e,n),i.observe(e),()=>{o.delete(e),i.unobserve(e)}}function iS(e){let t=typeof IntersectionObserver<"u",[n,r]=(0,Lc.useState)(!t),[i,o]=(0,Lc.useState)(!t);return(0,Lc.useEffect)(()=>{let a=e.current;if(!a||!t)return;let s=rS(a,NO,r),l=rS(a,"0px",o);return()=>{s(),l()}},[e,t]),{near:n,visible:i}}var ra=require("react");function VO(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 jO=12,UO=6,wp=new Map,zO=1,Ng=!1,oS;function aS(){Ng||(Ng=!0,queueMicrotask(()=>{Ng=!1,oS??(oS=Ec()?UO:jO);let e=VO([...wp.values()],oS);for(let t of wp.values()){let n=e.has(t.id);n!==t.live&&(t.live=n,t.onLiveChange(n))}}))}function sS({managed:e,wanted:t,visible:n,onPark:r}){let[i,o]=(0,ra.useState)(!1),a=(0,ra.useRef)(r);a.current=r;let s=(0,ra.useRef)(null);return(0,ra.useEffect)(()=>{if(!e)return;let l={id:zO++,wanted:!1,visible:!1,live:!1,since:performance.now(),onLiveChange:c=>{c||a.current?.(),o(c)}};return wp.set(l.id,l),s.current=l,()=>{wp.delete(l.id),s.current=null,o(!1),aS()}},[e]),(0,ra.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,aS())},[e,t,n]),e?i:t}function lS({loading:e="lazy",reveal:t="auto",rootRef:n,onPark:r}){let{near:i,visible:o}=iS(n),[a,s]=(0,Sp.useState)(t==="auto");return(0,Sp.useEffect)(()=>{t==="auto"&&s(!0)},[t]),{live:sS({managed:e==="lazy",wanted:a&&(e==="eager"||i),visible:o,onPark:r}),visible:o,awaitingReveal:!a,reveal:()=>s(!0)}}var cS=require("lucide-react");var is=require("react/jsx-runtime");function Mp({src:e,hidden:t=!1}){return e?(0,is.jsx)("img",{className:`ri-poster${t?" ri-poster--hidden":""}`,src:e,alt:"","aria-hidden":"true",draggable:!1,decoding:"async"}):null}function _p({className:e,background:t,poster:n,onReveal:r}){let i=xe();return(0,is.jsxs)("div",{className:`${e} ri-viewerPlaceholder`,style:{background:t},children:[(0,is.jsx)(Mp,{src:n}),r?(0,is.jsxs)("button",{type:"button",className:"ri-revealButton",onClick:r,children:[(0,is.jsx)(cS.Box,{size:16,"aria-hidden":"true"}),i("viewIn3D")]}):null]})}function Bc(e,t){if(e)return e;let n=t?.background;return n?.enabled&&n.type==="color"?n.color:"#1c1c1d"}function Cp(e,t){return t||e}async function uS(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 dS=require("react"),ll=class extends dS.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 cl=require("react");function pS({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 M=n();return!!(M.onEngagement||M.debugEngagement)},u=M=>Math.max(0,Math.round(r()-M)),p=M=>{let{onEngagement:C,debugEngagement:T}=n();if(!C&&!T)return;let I={...M,sessionId:o,timestamp:i(),elapsedMs:u(l),modelUrl:e,tilesetUrl:t};T&&a(I);try{Promise.resolve(C?.(I)).catch(s)}catch(L){s(L)}},d=null,m=null,f="[]",b=null,g=null,y=M=>{d=M},h=M=>{!c()||d===M.objectKey||(d=M.objectKey,p({type:"part-viewed",...M}))},v=(M,C,T=null)=>{let I=JSON.stringify([T,C,M]);!c()||M===C||I===m||(m=I,p({type:"variant-chosen",variant:M,previousVariant:C,group:T}))},x=M=>{let C=JSON.stringify(M);C!==f&&(f=C,m=null)},P=()=>{!c()||b!==null||(b=r(),p({type:"ar-started"}))},w=(M="session-ended")=>{if(b===null)return;let C=u(b);b=null,p({type:"ar-ended",durationMs:C,reason:M})},D=(M="stopped")=>{if(!g)return;let{startedAt:C,annotationCount:T}=g;g=null,p({type:"tour-stopped",annotationCount:T,durationMs:u(C),reason:M})};return{setSelectedPart:y,viewPart:h,setActiveVariants:x,chooseVariant:v,startAR:P,endAR:w,startTour:M=>{!c()||M<=0||(D("restarted"),g={startedAt:r(),annotationCount:M},p({type:"tour-started",annotationCount:M}))},stopTour:D,completeTour:()=>{if(!g)return;let{startedAt:M,annotationCount:C}=g;g=null,p({type:"tour-completed",annotationCount:C,durationMs:u(M)})},interrupt:()=>{w("interrupted"),D("interrupted")},requestARLaunch:M=>p({type:"ar-launch-requested",channel:M})}}function mS(e){let t=(0,cl.useRef)(e);t.current=e;let n=!!(e.onEngagement||e.debugEngagement),r=(0,cl.useMemo)(()=>pS({modelUrl:e.modelUrl,tilesetUrl:e.tilesetUrl,getOptions:()=>t.current}),[e.modelUrl,e.tilesetUrl,n]);return(0,cl.useEffect)(()=>()=>r.interrupt(),[r]),r}var wr=require("three"),hS=require("three/examples/jsm/loaders/STLLoader.js"),gS=require("three/examples/jsm/loaders/PLYLoader.js"),FO=12106948,bS="This PLY file is a point cloud: it has vertices but no faces.",Tp=class extends Error{constructor(){super(bS),this.name="PointCloudError"}};function yS(e){return e instanceof Tp||e instanceof Error&&e.message.includes(bS)}function vS(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 Vg(e){return new wr.MeshStandardMaterial({color:e?16777215:FO,vertexColors:e,metalness:0,roughness:.6})}function fS(e,t,n){let r=e.itemSize;return new wr.Float32BufferAttribute(e.array.slice(t*r,(t+n)*r),r)}function xS(e,t){let n=new hS.STLLoader().parse(e),r=!!n.hasColors,i=new wr.Group;if(n.groups.length>1){let s=n.userData.groupNames??[],l=n.getAttribute("position"),c=n.getAttribute("normal");return n.groups.forEach((u,p)=>{let d=new wr.BufferGeometry;d.setAttribute("position",fS(l,u.start,u.count)),c&&d.setAttribute("normal",fS(c,u.start,u.count));let m=new wr.Mesh(d,Vg(!1));m.name=s[p]?.trim()||`${t} ${p+1}`,i.add(m)}),n.dispose(),i}n.clearGroups();let o=Vg(r);r&&n.alpha!==void 0&&n.alpha<1&&(o.opacity=n.alpha,o.transparent=!0);let a=new wr.Mesh(n,o);return a.name=t,i.add(a),i}function GO(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 wS(e,t){if(!GO(e))throw new Tp;let n=new gS.PLYLoader().parse(e);n.getAttribute("normal")||n.computeVertexNormals();let r=new wr.Mesh(n,Vg(!!n.getAttribute("color")));r.name=t;let i=new wr.Group;return i.add(r),i}var HO={glb:"GLB",gltf:"glTF",obj:"OBJ",fbx:"FBX",usdz:"USDZ",stl:"STL",ply:"PLY"},WO=/\.(glb|gltf|obj|fbx|usdz|stl|ply|zip)$/i;function qO(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 SS(e,t,n,r){let i=e instanceof Error?e.message:e==null?"":String(e),o=(d,m)=>hc(r,d,m),a=o("loadErrorTitle"),s=i||null;if(yS(e))return{title:a,detail:o("loadErrorPointCloud"),technical:s};let l=qO(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],u=HO[n??Rg(t)],p=WO.test(c);return{title:a,detail:p||n?o(n?"loadErrorInvalidExplicitFormat":"loadErrorInvalidFile",{format:u}):o("loadErrorMissingFormat",{format:u}),technical:s}}var MS={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1,showMaterialVariants:!1},jg=Object.freeze({minimal:Object.freeze({...MS}),showcase:Object.freeze({...MS,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})}),XO=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function _S(e){let t={};for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t}function $O({ui:e,tools:t,controls:n,perf:r,tiles:i,xr:o,decoders:a}){let s=e?.download,l=e?.mouseController,c=t?.measure,u=n?.autoRotate;return{showObjectBindingDataPanel:e?.objectPanel,showSceneObjectsPanel:e?.sceneObjects,showDownloadButton:s===void 0?void 0:s!==!1,downloadFilename:typeof s=="string"?s:void 0,showResetButton:e?.reset,showFullscreenButton:e?.fullscreen,showLoadingOverlay:e?.loadingOverlay,showViewGizmo:e?.viewGizmo,showMouseController:l===void 0?void 0:l!==!1,mouseControllerPosition:typeof l=="object"?l.position:void 0,mouseControllerOpacity:typeof l=="object"?l.opacity:void 0,showAnnotationNavigation:e?.annotationNavigation,showAnnotationOnHover:e?.annotationOnHover,showAnnotationFilters:e?.annotationFilters,highlightOnHover:e?.highlightOnHover,showMaterialVariants:e?.materialVariants,showObjectNavigator:e?.objectNavigator,showMeasureTools:c===void 0?void 0:c!==!1,measurementUnit:typeof c=="object"?c.unit:void 0,showUvCheckerButton:t?.uvChecker,showExplodeControls:t?.explode,showSectionTools:t?.section,showSequenceControls:t?.sequences,showIsolateControls:t?.isolate,texturePositioning:t?.texturePositioning,enableCameraControls:n?.enabled,enableKeyboardNavigation:n?.keyboard,reducedMotion:n?.reducedMotion,disableZoom:n?.zoom===void 0?void 0:!n.zoom,zoomOnSelected:n?.zoomOnSelect,autoRotate:u===void 0?void 0:u!==!1,autoRotateSpeed:typeof u=="number"?u:void 0,refitOnResize:n?.refitOnResize,cameraLimits:n?.limits,moveSensitivity:n?.moveSensitivity,zoomSensitivity:n?.zoomSensitivity,renderMode:r?.renderMode,maxDpr:r?.maxDpr,performanceProfile:r?.profile,preserveDrawingBuffer:r?.preserveDrawingBuffer,webgpu:r?.webgpu,tilesetUrl:i?.url,tilesErrorTarget:i?.errorTarget,tilesCacheSize:i?.cacheSize,enableXR:o?.enabled,usdzUrl:o?.usdzUrl,arScaleMode:o?.scaleMode,mobileHandoffUrl:o?.mobileHandoffUrl,arHandoff:o?.arHandoff,dracoDecoderPath:a?.draco,ktx2TranscoderPath:a?.ktx2,meshopt:a?.meshopt}}function CS(e){let t={...e};for(let n of XO)delete t[n];return{...e.preset?jg[e.preset]:void 0,..._S(t),..._S($O(e))}}var Nc=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 TS(e){return Nc.find(t=>t.id===e)}var Vc=Nc.filter(e=>e.handling==="viewer").map(e=>e.id),pV=new Set(["","New Action",...Nc.map(e=>e.label)]);var PS=require("three");function AS(e,t,n){let r=t[n]?.modelObjectId;return e.lighting.lights.filter(i=>{let o=i.attachment?.objectId;return o?dn(t,o)===n||o===r:!1})}function Ug(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 ES(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 PS.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 RS=require("react-colorful"),An=require("react/jsx-runtime");function OS({kind:e,color:t,brightness:n,onColorChange:r,onBrightnessChange:i,onClose:o}){return(0,An.jsx)("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:a=>a.stopPropagation(),children:e==="change-light-color"?(0,An.jsxs)(An.Fragment,{children:[(0,An.jsx)("p",{className:"ri-popoverLabel",children:"Light color"}),(0,An.jsx)(RS.HexColorPicker,{color:t,onChange:r}),(0,An.jsxs)("div",{className:"ri-inlineRow",children:[(0,An.jsx)("span",{className:"ri-colorCode",children:t}),(0,An.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]}):(0,An.jsxs)(An.Fragment,{children:[(0,An.jsx)("p",{className:"ri-popoverLabel",children:"Brightness"}),(0,An.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,An.jsxs)("div",{className:"ri-inlineRow",children:[(0,An.jsxs)("span",{className:"ri-colorCode",children:[n,"%"]}),(0,An.jsx)("button",{className:"ri-secondaryButton",onClick:o,children:"Done"})]})]})})}var ul=require("react");var Pp=e=>e==="#000000"?"#ffffff":e;function DS({nodeRefsMap:e,currentObjectBindingsRef:t,applyObjectBindings:n}){let r=(0,ul.useRef)({}),i=(0,ul.useCallback)(a=>{let s=ES(e.current[a]),l=t.current[a]?.style?.material,c=l?.emissive??s.color,u=l?.emissiveIntensity??s.intensity;return{color:c,intensity:u,on:c!=="#000000"&&u>0}},[]),o=(0,ul.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 IS({setCurrentAction:e,bindingKeyIndex:t,currentObjectBindings:n,applyObjectBindings:r,resolveObjectKey:i,closeColorPicker:o,setColorPicker:a,setMaterialPopupsByObject:s,setItemMaterials:l,getPopoverPosition:c,decalRequestRef:u,setDecalError:p,setDecalDragging:d,setDecalControl:m,resolvedSceneConfigRef:f,applyLightPatches:b,readObjectGlow:g,applyGlow:y,glowMemoryRef:h,setLightControl:v,onAction:x}){return(0,ul.useCallback)(P=>{let{objectId:w,action:D,binding:E}=P;switch(e(P),D.id){case"toggle-visibility":{let S=w;E?.modelObjectId&&(S=t.byModelObjectId.get(E.modelObjectId)??S);let _=n[S],M=_?.visible===!1;_&&r({...n,[S]:{..._,visible:M}});break}case"change-color":o(),s(S=>{if(!(w in S))return S;let _={...S};return delete _[w],_}),l(S=>{let _=i(w,E)??w,M=S[w]?.hex,C=n[_]?.style?.material?.baseColor;return{...S,[w]:{...S[w],hex:M??C??"#ffffff"}}}),a(c(w,225,250,E,P));break;case"change-material":o(),s(S=>{if(w in S){let _={...S};return delete _[w],_}return{...S,[w]:c(w,300,320,E,P)}});break;case"add-text":case"add-image":{o();let S=D.id;u.current++,p(null),d(null),m(_=>_?.objectId===w&&_.kind===S?null:{objectId:w,kind:S,activeId:null});break}case"toggle-light":case"change-light-color":case"set-brightness":{let S=i(w,E);if(!S)break;let _=AS(f.current,n,S);if(D.id==="toggle-light"){if(_.length>0){let I=!_.some(L=>L.visible);b(Object.fromEntries(_.map(L=>[L.id,{visible:I}])));break}let T=g(S);T.on?(h.current[S]=T.intensity,y(S,{emissiveIntensity:0})):y(S,{emissive:Pp(T.color),emissiveIntensity:h.current[S]??1});break}let M=D.id,C=_.length>0?null:g(S);v(T=>T?.objectId===w&&T.kind===M?null:{objectId:w,kind:M,target:C?{type:"glow",objectKey:S,baseIntensity:C.on?C.intensity:h.current[S]??1}:{type:"lights",lightIds:_.map(I=>I.id),baseIntensity:Object.fromEntries(_.map(I=>[I.id,I.intensity]))},percent:C&&!C.on?0:100});break}default:break}x?.(P)},[r,y,b,g,n,c,x,o,i,t])}var LS=require("react/jsx-runtime");function kS({control:e,lights:t,readObjectGlow:n,applyGlow:r,glowMemoryRef:i,applyLightPatches:o,onControlChange:a}){let s=e.target,l=s.type==="lights"?t.find(c=>c.id===s.lightIds[0])?.color??"#ffffff":Pp(n(s.objectKey).color);return(0,LS.jsx)(OS,{kind:e.kind,color:l,brightness:e.percent,onColorChange:c=>{if(s.type==="lights"){o(Object.fromEntries(s.lightIds.map(p=>[p,{color:c}])));return}let u=n(s.objectKey);r(s.objectKey,{emissive:c,emissiveIntensity:u.intensity>0?u.intensity:i.current[s.objectKey]??1})},onBrightnessChange:c=>{if(a({...e,percent:c}),s.type==="lights"){o(Object.fromEntries(s.lightIds.map(u=>[u,{intensity:(s.baseIntensity[u]??0)*(c/100)}])));return}r(s.objectKey,{emissive:Pp(n(s.objectKey).color),emissiveIntensity:s.baseIntensity*(c/100)})},onClose:()=>a(null)})}var jc=require("react");var ia=require("lucide-react"),dl=require("react");function BS(e){let t=!1,n,r=()=>{t||(e(),t||(n=setTimeout(r,70)))};return e(),n=setTimeout(r,300),()=>{t=!0,clearTimeout(n)}}var vo=require("react/jsx-runtime");function NS({onNudge:e}){let t=xe(),n=(0,dl.useRef)(e);n.current=e;let r=(0,dl.useRef)(null),i=(0,dl.useRef)(null),o=()=>{r.current?.(),r.current=null,i.current=null};return(0,dl.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,vo.jsxs)("div",{className:"ri-decalPosition",children:[(0,vo.jsxs)("div",{children:[(0,vo.jsx)("div",{className:"ri-decalPosition__label",children:t("position")}),(0,vo.jsx)("div",{className:"ri-decalPosition__hint",children:t("decalNudgeHint")})]}),(0,vo.jsx)("div",{className:"ri-decalPosition__pad",role:"group","aria-label":t("decalNudgeControls"),children:[["up",ia.ArrowUp],["left",ia.ArrowLeft],["right",ia.ArrowRight],["down",ia.ArrowDown]].map(([a,s])=>(0,vo.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=BS(()=>n.current(a)))},onClick:l=>{l.detail===0&&n.current(a)},children:(0,vo.jsx)(s,{size:16})},a))})]})}var st=require("react/jsx-runtime"),YO=e=>Math.round(e*180/Math.PI);function VS({kind:e,decals:t,activeId:n,error:r,moving:i,defaultSize:o,onSelect:a,onAddText:s,onAddImage:l,onChange:c,onMove:u,onNudge:p,onRemove:d,onClose:m}){let f=xe(),[b,g]=(0,jc.useState)(""),[y,h]=(0,jc.useState)("#ffffff"),v=(0,jc.useRef)(null),x=t.find(w=>w.id===n)??null;return(0,st.jsxs)("div",{className:"ri-popover ri-popover--inline ri-decalControl",onPointerDown:w=>w.stopPropagation(),children:[e==="add-text"?(0,st.jsxs)(st.Fragment,{children:[(0,st.jsx)("p",{className:"ri-popoverLabel",children:f("text")}),(0,st.jsxs)("div",{className:"ri-decalControl__row",children:[(0,st.jsx)("input",{className:"ri-decalControl__input",value:b,placeholder:f("yourText"),"aria-label":f("textToAdd"),onChange:w=>g(w.target.value)}),(0,st.jsx)("input",{type:"color",className:"ri-decalControl__color",value:y,"aria-label":f("textColour"),onChange:w=>h(w.target.value)})]}),(0,st.jsx)("button",{type:"button",className:"ri-uploadButton",disabled:!b.trim(),onClick:()=>{s(b.trim(),y)&&g("")},children:f("addText")})]}):(0,st.jsxs)(st.Fragment,{children:[(0,st.jsx)("p",{className:"ri-popoverLabel",children:f("image")}),(0,st.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:()=>v.current?.click(),children:f("chooseImage")}),(0,st.jsx)("input",{ref:v,type:"file",accept:"image/png,image/jpeg,image/webp,image/svg+xml",className:"ri-hiddenInput","aria-label":f("imageToAdd"),onChange:w=>{let D=w.target.files?.[0];w.target.value="",D&&l(D)}})]}),r?(0,st.jsx)("div",{className:"ri-decalControl__hint",role:"alert",children:r}):null,t.length>0?(0,st.jsx)("div",{className:"ri-decalControl__list",role:"group","aria-label":f("added"),children:t.map((w,D)=>(0,st.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?f("decalImage",{index:D+1}):w.text||f("decalText",{index:D+1})},w.id))}):null,x?(0,st.jsxs)("div",{className:"ri-decalControl__editor",children:[(0,st.jsx)(NS,{onNudge:w=>p(x.id,w)}),x.image?null:(0,st.jsxs)("div",{className:"ri-decalControl__row",children:[(0,st.jsx)("input",{className:"ri-decalControl__input",value:x.text??"","aria-label":f("text"),onChange:w=>c(x.id,{text:w.target.value})}),(0,st.jsx)("input",{type:"color",className:"ri-decalControl__color",value:x.color??"#ffffff","aria-label":f("colour"),onChange:w=>c(x.id,{color:w.target.value})})]}),(0,st.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,st.jsx)("span",{children:f("size")}),(0,st.jsx)("input",{type:"range",min:o/10,max:o*4,step:o/50,value:x.size,"aria-label":f("size"),onChange:w=>c(x.id,{size:Number(w.target.value)})})]}),(0,st.jsxs)("label",{className:"ri-decalControl__slider",children:[(0,st.jsx)("span",{children:f("turn")}),(0,st.jsx)("input",{type:"range",min:-180,max:180,step:1,value:YO(x.rotation??0),"aria-label":f("rotation"),onChange:w=>c(x.id,{rotation:Number(w.target.value)*Math.PI/180})})]}),(0,st.jsxs)("div",{className:"ri-inlineRow",children:[(0,st.jsx)("button",{type:"button",className:"ri-secondaryButton","aria-pressed":i,title:f("dragTheDecalAcrossTheObjectsSurface"),onClick:()=>u(x.id),children:f("move")}),(0,st.jsx)("button",{type:"button",className:"ri-removeButton",onClick:()=>d(x.id),children:f("remove")})]})]}):null,(0,st.jsxs)("div",{className:"ri-inlineRow",children:[(0,st.jsx)("span",{className:"ri-colorCode",children:t.length===0?f("noneAddedYet"):f("decalAdded",{count:t.length})}),(0,st.jsx)("button",{type:"button",className:"ri-secondaryButton",onClick:m,children:f("done")})]})]})}var kp=require("react"),tM=require("@react-three/fiber"),yi=require("three");var Ut=require("three"),KO=.5,Uc=4;function ZO(e,t=0){let n=new Ut.Vector3(...e);n.lengthSq()<1e-12&&n.set(0,0,1),n.normalize();let r=new Ut.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 QO(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 jS(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 u=l.position[t]-s.position[t];o.push(QO(s,l,(n-s.position[t])/u))}}return o}function Ap(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(),u=Math.max(t.size,1e-6),p=u/(n>0&&Number.isFinite(n)?n:1),d=Math.max(u,p)*KO,m={x:u/2,y:p/2,z:d/2},f=new Ut.Matrix4().makeRotationFromEuler(ZO(t.normal,t.rotation)).setPosition(...t.position),b=f.clone().invert(),g=(L,B)=>{let N=null;if(l){N=new Map;for(let R=0;R<Uc;R++){let O=s.getComponent(L,R);if(O<=0)continue;let V=a.getComponent(L,R);N.set(V,(N.get(V)??0)+O)}}return{position:B.clone(),normal:o?new Ut.Vector3().fromBufferAttribute(o,L):new Ut.Vector3,bones:N}},y=[],h=[],v=[],x=[],P=[],w=new Ut.Vector3,D=new Ut.Vector3,E=new Ut.Vector3,S=L=>{if(v.push(.5+L.position.x/u,.5-L.position.y/p),w.copy(L.position).applyMatrix4(f),y.push(w.x,w.y,w.z),h.push(L.normal.x,L.normal.y,L.normal.z),!L.bones)return;let B=[...L.bones].sort((R,O)=>O[1]-R[1]).slice(0,Uc),N=B.reduce((R,[,O])=>R+O,0)||1;for(let R=0;R<Uc;R++)x.push(B[R]?.[0]??0),P.push((B[R]?.[1]??0)/N)},_=["x","y","z"],M=[new Ut.Vector3,new Ut.Vector3,new Ut.Vector3],C=[0,0,0],T=(c?c.count:i.count)/3;for(let L=0;L<T;L++){for(let R=0;R<3;R++){let O=L*3+R;C[R]=c?c.getX(O):O,M[R].fromBufferAttribute(i,C[R]).applyMatrix4(b)}if(_.some(R=>M[0][R]>m[R]&&M[1][R]>m[R]&&M[2][R]>m[R]||M[0][R]<-m[R]&&M[1][R]<-m[R]&&M[2][R]<-m[R]))continue;let B=M.map((R,O)=>g(C[O],R));if(!o){D.copy(B[1].position).sub(B[0].position),E.copy(B[2].position).sub(B[0].position);let R=D.cross(E).transformDirection(f);for(let O of B)O.normal.copy(R)}let N=B;for(let R of _)if(N=jS(N,R,m[R],!0),N=jS(N,R,-m[R],!1),N.length<3)break;for(let R=1;R+1<N.length;R++)S(N[0]),S(N[R]),S(N[R+1])}if(y.length===0)return null;let I=new Ut.BufferGeometry;return I.setAttribute("position",new Ut.Float32BufferAttribute(y,3)),I.setAttribute("normal",new Ut.Float32BufferAttribute(h,3)),I.setAttribute("uv",new Ut.Float32BufferAttribute(v,2)),l&&(I.setAttribute("skinIndex",new Ut.Uint16BufferAttribute(x,Uc)),I.setAttribute("skinWeight",new Ut.Float32BufferAttribute(P,Uc))),I}function zS(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 US=256,zg=24;function FS(e){let t=`${e.fontWeight??"bold"} ${US-zg*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)+zg*2,8),4096),n.height=US,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-zg);let o=new Ut.CanvasTexture(n);return o.flipY=!1,o.colorSpace=Ut.SRGBColorSpace,{texture:o,aspect:n.width/n.height}}var zc=require("react"),Sr=require("three");var jn=require("three");function Ep(e){let t=!0;return e?.traverse(n=>{let r=n.isMesh?n.geometry:null;r&&!r.getAttribute("uv")&&(t=!1)}),t}function GS(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function HS(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function En(e){return!!(e&&"isMesh"in e&&e.isMesh)}var oa=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],Rp={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"},JO=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function gi(e){return JO.has(e)?jn.SRGBColorSpace:jn.NoColorSpace}function Kt(e,t){return e?.[t]?.path}function WS(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 qS(e,t){let n=e?.[t]?.scale;if(!(!Number.isFinite(n)||!n))return n===1?void 0:n}function XS(e,t){let n=e?.[t]?.rotation;if(!(!Number.isFinite(n)||!n))return n}function $S(e){return e==="back"?jn.BackSide:e==="double"?jn.DoubleSide:jn.FrontSide}function YS(e){return e==="additive"?jn.AdditiveBlending:jn.NormalBlending}function xo(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 jn.Vector2(r.x,r.y)}return new jn.Vector2(t,n)}function Op(e){return Number.isFinite(e)&&e>0?e:1}function KS(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function ZS(e){return e?.loopMode??"repeat"}var os="riDecal",Hg="riDecalId";function Fg(){return new Sr.BufferGeometry().setAttribute("position",new Sr.Float32BufferAttribute([],3))}function QS(e){let t=e.image;return t?.width&&t.height?t.width/t.height:1}function Gg(e){e.disposed=!0,e.node.remove(e.mesh),e.mesh.geometry.dispose(),e.mesh.material.dispose(),e.imagePath&&lo(e.imagePath,Sr.SRGBColorSpace),e.ownTexture?.dispose()}function eD(e,t,n,r){let i=new Sr.MeshStandardMaterial({transparent:!0,polygonOffset:!0,polygonOffsetFactor:-4,depthWrite:!1,metalness:0,roughness:.7}),o=tn(e)&&e.skeleton?e:null,a=o?new Sr.SkinnedMesh(Fg(),i):new Sr.Mesh(Fg(),i);if(o){let c=a;c.bind(o.skeleton,o.bindMatrix),c.frustumCulled=!1,c.onBeforeRender=()=>{let u=$a(o);u&&c.bindMatrixInverse.copy(u)}}a.userData[os]=!0,a.userData[Hg]=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 u=Ap(e,t,c);a.geometry.dispose(),a.geometry=u??Fg(),a.visible=u!==null};if(t.image){s.imagePath=t.image;let c=Ks(t.image,Sr.SRGBColorSpace,()=>{s.disposed||(l(QS(c)),i.needsUpdate=!0,r())});i.map=c,l(QS(c))}else{let{texture:c,aspect:u}=FS(t);s.ownTexture=c,i.map=c,l(u)}return e.add(a),s}function JS({objectBindings:e,nodeMap:t,invalidate:n}){let r=(0,zc.useRef)(new Map);(0,zc.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(En(l))for(let c of s.decals){if(!c.image&&!c.text)continue;let u=`${a}
3714
+ ${c.id}`,p=zS(c),d=i.get(u);d&&(d.node!==l||d.signature!==p)&&(Gg(d),d=void 0),d||(d=eD(l,c,p,n),i.set(u,d)),d.mesh.material.opacity=(c.opacity??1)*(s.style?.material?.opacity??1),o.add(u)}}for(let[a,s]of i)o.has(a)||(Gg(s),i.delete(a));n()},[e,t,n]),(0,zc.useEffect)(()=>{let i=r.current;return()=>{for(let o of i.values())Gg(o);i.clear()}},[])}var zr=require("react"),bi=require("three"),tD=500,nD=10,rD=5;function Dp(e,t,n){let r=(0,zr.useRef)({resolve:e,onContextMenu:t,anchorOf:n});r.current={resolve:e,onContextMenu:t,anchorOf:n};let i=(0,zr.useRef)(null),o=(0,zr.useRef)(!1),a=(0,zr.useRef)(null),s=(0,zr.useCallback)(()=>{let p=i.current;p?.timer&&clearTimeout(p.timer),i.current=null,a.current?.(),a.current=null},[]),l=(0,zr.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,zr.useCallback)(p=>{let d=p.nativeEvent,m=d.pointerType!=="touch"&&d.button===2,f=d.pointerType==="touch"&&d.button===0;if(!r.current.onContextMenu||!m&&!f)return;let b=r.current.resolve(p.object);if(b===null)return;s();let g={target:b,kind:m?"right":"touch",pointerId:d.pointerId,pointer:pl(p,r.current.anchorOf?.(p.object)),timer:f?setTimeout(l,tD):null};i.current=g;let y=m?rD:nD,h=w=>Math.hypot(w.clientX-g.pointer.clientX,w.clientY-g.pointer.clientY)>y,v=w=>{w.pointerId===g.pointerId&&h(w)&&s()},x=w=>{w.pointerId===g.pointerId&&(g.kind==="right"&&!h(w)?l():s())},P=w=>{w.pointerId!==g.pointerId&&s()};window.addEventListener("pointermove",v),window.addEventListener("pointerup",x),window.addEventListener("pointercancel",s),window.addEventListener("pointerdown",P),a.current=()=>{window.removeEventListener("pointermove",v),window.removeEventListener("pointerup",x),window.removeEventListener("pointercancel",s),window.removeEventListener("pointerdown",P)}},[s,l]);(0,zr.useEffect)(()=>s,[s]);let u=(0,zr.useCallback)(()=>o.current?(o.current=!1,!0):!1,[]);return{onPointerDown:c,consumeClick:u}}function iD(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,d,m]=[n.a,n.b,n.c].map(f=>t.getVertexPosition(f,new bi.Vector3));if(i=bi.Triangle.getBarycoord(t.worldToLocal(e.point.clone()),p,d,m,new bi.Vector3),!i)return null}let[o,a,s]=[n.a,n.b,n.c].map(p=>new bi.Vector3().fromBufferAttribute(r,p)),l=new bi.Vector3().addScaledVector(o,i.x).addScaledVector(a,i.y).addScaledVector(s,i.z),c=new bi.Triangle(o,a,s).getNormal(new bi.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 as(e,t){if(t.updateWorldMatrix(!0,!1),e.object===t&&t.isSkinnedMesh===!0){let i=iD(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 bi.Matrix4().copy(t.matrixWorld).invert()),{position:[n.x,n.y,n.z],normal:[r.x,r.y,r.z]}}function pl(e,t){let n=e.nativeEvent;return{clientX:n.clientX,clientY:n.clientY,pointerType:"pointerType"in n?n.pointerType:"mouse",...t?{surface:as(e,t)}:{}}}var Ip=require("three");function eM(e,t){let n=[];if(tn(e)){let r=e;r.computeBoundingSphere(),r.computeBoundingBox(),Ip.SkinnedMesh.prototype.raycast.call(r,t,n)}else Ip.Mesh.prototype.raycast.call(e,t,n);return n.sort((r,i)=>r.distance-i.distance)[0]}function nM({target:e,nodes:t,controls:n}){let{camera:r,gl:i,invalidate:o}=(0,tM.useThree)(),a=(0,kp.useRef)(e);return a.current=e,(0,kp.useEffect)(()=>{let s=i.domElement,l=new yi.Raycaster,c=new yi.Vector2,u=s.style.cursor,p=s.style.touchAction;s.style.cursor="grab",s.style.touchAction="none";let d=0,m=null,f=null,b=(D,E=new yi.Vector2)=>{let S=s.getBoundingClientRect();c.set((D.clientX-S.left-E.x)/S.width*2-1,-((D.clientY-S.top-E.y)/S.height)*2+1),l.setFromCamera(c,r)},g=D=>{if(!f)return;b(D,f.offset),f.node.updateWorldMatrix(!0,!1);let E=l.intersectObject(f.node,!1)[0];if(!E)return;let S=as({...E,ray:l.ray},f.node),_=Ap(f.node,{...f.decal,...S},f.aspect);_&&(f.mesh.geometry!==f.geometry&&f.mesh.geometry.dispose(),f.mesh.geometry=_,f.surface=S,o())},y=D=>{if(!f)return;cancelAnimationFrame(d),d=0,m=null;let E=f;f=null,E.mesh.geometry!==E.geometry&&(D&&E.surface?E.geometry.dispose():(E.mesh.geometry.dispose(),E.mesh.geometry=E.geometry)),E.controller&&(E.controller.enabled=E.controlsEnabled),s.hasPointerCapture(E.pointerId)&&s.releasePointerCapture(E.pointerId),s.style.cursor="grab",o();let S=()=>{window.removeEventListener("click",_,!0),window.removeEventListener("pointerdown",S,!0),clearTimeout(M)},_=C=>{C.target===s&&(C.preventDefault(),C.stopImmediatePropagation()),S()},M=setTimeout(S,300);window.addEventListener("click",_,!0),window.addEventListener("pointerdown",S,!0),D&&E.surface&&a.current.onCommit(E.surface)},h=D=>{if(D.button!==0||f)return;let E=a.current,S=t.current[E.objectId];if(!(S instanceof yi.Mesh)||!S.visible)return;let _=S.children.find(R=>R.userData[os]&&R.userData[Hg]===E.decal.id);if(!_?.visible)return;S.updateWorldMatrix(!0,!0),b(D);let M=eM(_,l),C=l.intersectObject(S,!1)[0];if(!M||!C||M.distance>C.distance+1e-4)return;let T=new yi.Vector3;if(tn(_)){let R=new yi.Vector3,O=_.geometry.getAttribute("position").count;if(!O)return;for(let V=0;V<O;V++)T.add(_.getVertexPosition(V,R));T.divideScalar(O).applyMatrix4(_.matrixWorld)}else T.fromArray(E.decal.position).applyMatrix4(S.matrixWorld);T.project(r);let I=s.getBoundingClientRect(),L=new yi.Vector2(D.clientX-(I.left+(T.x+1)/2*I.width),D.clientY-(I.top+(1-T.y)/2*I.height)),B=_.material.map?.image,N=n.current;f={pointerId:D.pointerId,node:S,mesh:_,geometry:_.geometry,decal:E.decal,surface:null,offset:L,aspect:B?.width&&B.height?B.width/B.height:1,controller:N,controlsEnabled:N?.enabled??!1},N&&(N.enabled=!1),D.preventDefault(),D.stopImmediatePropagation(),s.setPointerCapture(D.pointerId),s.style.cursor="grabbing"},v=D=>{!f||D.pointerId!==f.pointerId||(D.preventDefault(),D.stopImmediatePropagation(),m=D,d||(d=requestAnimationFrame(()=>{d=0,m&&g(m)})))},x=D=>{!f||D.pointerId!==f.pointerId||(D.preventDefault(),D.stopImmediatePropagation(),m&&g(m),y(!0))},P=()=>y(!1),w=D=>{D.key==="Escape"&&(y(!1),a.current.onCancel())};return s.addEventListener("pointerdown",h,!0),window.addEventListener("pointermove",v,{capture:!0,passive:!1}),window.addEventListener("pointerup",x,!0),window.addEventListener("pointercancel",P),window.addEventListener("blur",P),window.addEventListener("keydown",w),s.addEventListener("lostpointercapture",P),()=>{y(!1),s.style.cursor=u,s.style.touchAction=p,s.removeEventListener("pointerdown",h,!0),window.removeEventListener("pointermove",v,!0),window.removeEventListener("pointerup",x,!0),window.removeEventListener("pointercancel",P),window.removeEventListener("blur",P),window.removeEventListener("keydown",w),s.removeEventListener("lostpointercapture",P)}},[r,i,o,t,n,e.objectId,e.decal]),null}var rr=require("react");var Un=require("three"),Lp=require("three-stdlib");function Xi(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)}}var Wg=new WeakMap;function qg(e){e.traverse(t=>{if(Wg.has(t))return;let n=t.morphTargetInfluences;Wg.set(t,{position:t.position.clone(),quaternion:t.quaternion.clone(),scale:t.scale.clone(),morphTargetInfluences:n?[...n]:void 0})})}function rM(e){return Wg.get(e)}var oD="reactImmersiveSkinFreeze",aD=new Set(["position","quaternion","scale","morphTargetInfluences"]);function Bp({sources:e,downloadFilename:t,filenameSuffix:n="",onComplete:r}){let i=new Un.Group,o=[];try{for(let s of e){let l=sD(s,e.length>1);i.add(l.root),o.push(...l.animations)}}catch(s){console.error("GLB export failed:",s),r();return}new Lp.GLTFExporter().parse(i,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";Xi(l,`${t}${n}${c}`),r()},s=>{console.error("GLTFExporter error:",s),r()},{binary:!0,onlyVisible:!0,animations:o})}function sD({scene:e,objectBindings:t,matRefs:n,label:r},i){let o=new Un.Group;o.name=r??e.name??"";let a=new Map;for(let[h,v]of Object.entries(t))a.set(v.modelObjectId??h,h);let s=h=>{let v=h.name||h.uuid;return a.get(v)??v},l=h=>{let v=t[s(h)];return v?v.visible===!1:h.visible===!1};for(let h=e;h;h=h.parent)if(l(h))return{root:o,animations:[]};e.updateWorldMatrix(!0,!0);let c=Lp.SkeletonUtils.clone(e),u=new Map,p=[],d=[];e.traverse(h=>p.push(h)),c.traverse(h=>d.push(h)),p.forEach((h,v)=>u.set(h,d[v]));let m=[];for(let h=e.parent;h;h=h.parent)m.unshift(h);let f=o;for(let h of m){let v=Xg(h);f.add(v),f=v}f.add(c);let b=[],g=new Set;for(let h of p){let v=u.get(h);if(h.userData?.isWireframeOverlay){b.push(v);continue}delete v.userData[oD];let x=v;if(x.isMesh){let P=n[s(h)];P&&(x.material=P)}(l(h)||h.parent&&g.has(h.parent))&&g.add(h),v.visible=!0}b.forEach(h=>h.removeFromParent());for(let h of g){let v=u.get(h);if(Np(v,o)){if(!uD(v)){v.removeFromParent();continue}if(v.isMesh){let x=Xg(v);x.name=v.name,x.userData=v.userData;for(let P of[...v.children])x.add(P);v.parent.add(x),v.removeFromParent(),u.set(h,x)}}}let y=dD(e,o,u,i&&r?`${r}: `:"");return y.length===0?cD(p,u,o):lD(p,u,o,y),{root:o,animations:y}}function Xg(e){let t=new Un.Group;return t.position.copy(e.position),t.quaternion.copy(e.quaternion),t.scale.copy(e.scale),t.matrix.copy(e.matrix),t.matrixAutoUpdate=e.matrixAutoUpdate,t}function lD(e,t,n,r){let i=r.map(o=>[...o.tracks]);for(let o of e){let a=m0(o),s=t.get(o);if(!a||!tn(s)||!Np(s,n))continue;let l=s,c=new Set;for(let b of l.skeleton.bones)for(let g=b;g&&(c.add(g),g!==n);g=g.parent);let u=new Map,p=b=>{let g=b.isBone?b.clone(!1):Xg(b);u.set(b.uuid,g);for(let y of b.children)c.has(y)&&g.add(p(y));return g},d=p(n),m=new Un.Group,f=m;for(let b of[...a].reverse()){let g=new Un.Group;b.decompose(g.position,g.quaternion,g.scale);let y=new Un.Group;y.scale.set(1/g.scale.x,1/g.scale.y,1/g.scale.z);let h=new Un.Group;h.quaternion.copy(g.quaternion).invert();let v=new Un.Group;v.position.copy(g.position).negate(),f.add(y),y.add(h),h.add(v),f=v}f.add(d),l.add(m),l.skeleton.bones=l.skeleton.bones.map(b=>u.get(b.uuid)),r.forEach((b,g)=>{for(let y of i[g]){let h=Un.PropertyBinding.parseTrackName(y.name);if(h.propertyName==="morphTargetInfluences")continue;let v=u.get(h.nodeName);if(!v)continue;let x=y.clone();x.name=iM(v.uuid,h),b.tracks.push(x)}})}}function cD(e,t,n){n.updateWorldMatrix(!0,!0);for(let r of e){let i=t.get(r);if(!tn(r)||!tn(i)||!i.parent||!Np(i,n))continue;let o=i,a=new Un.Mesh(kd(r),o.material);a.name=o.name,a.userData=o.userData,a.matrix.copy(i.parent.matrixWorld).invert().multiply(f0(r)),a.matrixAutoUpdate=!1,a.matrix.decompose(a.position,a.quaternion,a.scale);let s=i.parent;s.children.splice(s.children.indexOf(i),1,a),a.parent=s,i.parent=null,a.updateMatrixWorld(!0);for(let l of[...i.children])a.attach(l)}}function uD(e){let t=!1;return e.traverse(n=>{n.isBone&&(t=!0)}),t}function Np(e,t){for(let n=e;n;n=n.parent)if(n===t)return!0;return!1}function dD(e,t,n,r){let i=[];for(let o of e.animations??[]){let a=[];for(let s of o.tracks){let l=Un.PropertyBinding.parseTrackName(s.name);if(!aD.has(l.propertyName))continue;let c=Un.PropertyBinding.findNode(e,l.nodeName);if(l.objectName){if(l.objectName!=="bones"||!c||!tn(c))continue;c=c.skeleton.getBoneByName(l.objectIndex)??null,l.objectName="",l.objectIndex=""}let u=c?n.get(c):void 0;if(!u||!Np(u,t)||l.propertyName==="morphTargetInfluences"&&!u.morphTargetInfluences)continue;pD(c,u,l.propertyName);let p=s.clone();p.name=iM(u.uuid,l),a.push(p)}a.length!==0&&i.push(new Un.AnimationClip(`${r}${o.name}`,o.duration,a,o.blendMode))}return i}function pD(e,t,n){let r=rM(e);r&&(n==="position"?t.position.copy(r.position):n==="quaternion"?t.quaternion.copy(r.quaternion):n==="scale"?t.scale.copy(r.scale):n==="morphTargetInfluences"&&r.morphTargetInfluences&&t.morphTargetInfluences?.length===r.morphTargetInfluences.length&&(t.morphTargetInfluences=[...r.morphTargetInfluences]))}function iM(e,t){let n=t.objectName?`.${t.objectName}${t.objectIndex!==void 0?`[${t.objectIndex}]`:""}`:"",r=t.propertyIndex!==void 0?`[${t.propertyIndex}]`:"";return`${e}${n}.${t.propertyName}${r}`}var uM=require("fflate");var oM=require("fflate");function aM(e,t=6){return new Promise((n,r)=>{(0,oM.zip)(e,{level:t},(i,o)=>{i?r(i):n(o)})})}var Fc=2048,sM=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function lM(e){return e.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&apos;")}function Kg(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function dM(e){return Kg(e,"model")}function $g(e,t){return e.index?Math.round(e.index.getX(t)):t}function mD(e,t,n){let r=$g(e,n),i=$g(e,n+1),o=$g(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 cM(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function Yg(e,t,n,r){let i,o;r?(i=t.index,o=n.index):(i=cM(t),o=cM(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 fD(e,t,n){Yg(e,t[0],t[1],n),Yg(e,t[1],t[2],n),Yg(e,t[2],t[0],n)}function hD(e,t){return Array.isArray(e)?e[t]??null:e}function gD(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}`,u=s.index?.count??l.count,p=s.groups.length>0?s.groups:[{start:0,count:u,materialIndex:0}];for(let d of p){let m=d.materialIndex??0,f=hD(a.material,m);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 g=b.layers.get(a.uuid);g||(g={name:c,color:sM[i%sM.length],edges:new Map},i+=1,b.layers.set(a.uuid,g));let y=Math.max(0,d.start),h=Math.min(u,y+d.count);for(let v=y;v+2<h;v+=3){let x=mD(s,l,v);x&&fD(g.edges,x,!!s.index)}}}),[...t.values()].filter(o=>[...o.layers.values()].some(a=>a.edges.size>0))}function Vp(e){return(e*Fc).toFixed(2)}function bD(e){return`M${Vp(e.start.u)} ${Vp(1-e.start.v)}L${Vp(e.end.u)} ${Vp(1-e.end.v)}`}function yD(e){let t=lM(e.name),n=[...e.layers.values()].filter(r=>r.edges.size>0).map((r,i)=>{let o=lM(r.name),a=`${Kg(r.name,"mesh")}-${i+1}`,s=[...r.edges.values()],l=s.filter(p=>p.count===1),u=(l.length>0?l:s).map(bD).join("");return[` <g id="${a}" data-mesh="${o}" fill="none" stroke="${r.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${o}</title>`,` <path d="${u}"/>`," </g>"].join(`
3669
3715
  `)}).join(`
3670
- `);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${pc}" height="${pc}" viewBox="0 0 ${pc} ${pc}">`,` <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(`
3671
- `)}function DR(e){let t=[],n=new Set;return e.forEach((r,i)=>{let o=ER(r.scene);if(o.length===0)return;let a=$w(r.label||`model-${i+1}`);o.forEach((s,l)=>{let c=ig(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:OR(s)})})}),t}async function og(e,t="model"){let n=DR(e);if(n.length===0)return n;if(n.length===1)return Ri(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,Xw.strToU8)(o.svg)])),i=await Hw(r);return Ri(new Blob([i],{type:"application/zip"}),`${$w(t)}-uv-layouts.zip`),n}async function Yw(e,t="model"){return og([{scene:e,label:t}],t)}function Kw({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:r,downloadFilename:i,getAllLoadedModels:o,getAllLoadedModelUvSources:a,captureVideo:s,openConfiguredAR:l}){let[c,d]=(0,$n.useState)(!1),[p,u]=(0,$n.useState)(!1),[f,m]=(0,$n.useState)(null),[v,g]=(0,$n.useState)(null),[b,h]=(0,$n.useState)("auto");(0,$n.useEffect)(()=>{if(!p)return;let S=()=>u(!1);return window.addEventListener("pointerdown",S),()=>window.removeEventListener("pointerdown",S)},[p]);let y=(0,$n.useCallback)(()=>{m(null),g(null),u(S=>!S)},[]),w=(0,$n.useCallback)(()=>{let S=o?.()??null;if(S&&S.length>0){u(!1),d(!0),Wd({sources:S,downloadFilename:i,onComplete:()=>d(!1)});return}let M=e.current;M&&(u(!1),d(!0),Wd({sources:[{scene:M,objectBindings:r,matRefs:t.current??{}}],downloadFilename:i,onComplete:()=>d(!1)}))},[i,t,r,e,o]),T=(0,$n.useCallback)(async()=>{let S=o?.()??null;if(!S||S.length===0)return;u(!1),d(!0);let M=new Set;try{for(let _=0;_<S.length;_++){let C=S[_],E=(C.label||`model-${_+1}`).replace(/[\\/:*?"<>|]+/g,"-"),L=E,k=2;for(;M.has(L);)L=`${E}-${k++}`;M.add(L),await new Promise(B=>{Wd({sources:[C],downloadFilename:i,filenameSuffix:`-${L}`,onComplete:B})}),await new Promise(B=>setTimeout(B,300))}}finally{d(!1)}},[i,o]),x=(0,$n.useCallback)(()=>{u(!1),Ad(n.current).then(S=>{let M=document.createElement("a");M.href=S,M.download=`${i}.png`,document.body.appendChild(M),M.click(),document.body.removeChild(M)}).catch(S=>{console.error("Screenshot failed:",S)})},[i,n]),D=(0,$n.useCallback)(async()=>{let S=a?.()??null;try{let M;if(S&&S.length>0)M=await og(S,i);else{let _=e.current;if(!_)return;M=await Yw(_,i)}if(M.length===0){m("This model does not contain UV coordinates.");return}m(null),u(!1)}catch(M){console.error("UV layout export failed:",M),m("Could not create the UV layout archive.")}},[i,e,a]),A=(0,$n.useCallback)(async S=>{u(!1),g(null);try{let M=await s({mode:S,format:b}),_=M.type==="image/gif"?"gif":M.type.startsWith("video/mp4")?"mp4":"webm",C=URL.createObjectURL(M),E=document.createElement("a");E.href=C,E.download=`${i}-${S}.${_}`,document.body.appendChild(E);try{E.click()}finally{E.remove(),setTimeout(()=>URL.revokeObjectURL(C),1e3)}}catch(M){if(M instanceof DOMException&&M.name==="AbortError")return;g(M instanceof Error?M.message:"Could not export the video."),u(!0)}},[s,i,b]);return{openConfiguredAR:l?()=>{u(!1),l()}:void 0,isDownloading:c,downloadMenuOpen:p,uvExportError:f,toggleDownloadMenu:y,handleDownloadMesh:w,handleDownloadSeparateMeshes:T,handleDownloadScreenshot:x,handleDownloadUvLayout:D,handleDownloadVideo:A,videoFormat:b,setVideoFormat:h,videoExportError:v}}var it=require("react"),br=require("three");var $d={tool:"distance",points:[],areaClosed:!1,error:null};function Zw(e,t){if(t.type==="tool")return{...$d,tool:t.tool};if(t.type==="clear")return{...$d,tool:e.tool};if(t.type==="fail")return{...e,error:t.error};if(t.type==="clearError")return{...e,error:null};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=Vs(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&&Ns(i.map(o=>o.position))===null?{...e,error:"Pick a point away from the angle's vertex."}:{...e,points:i,areaClosed:!1,error:null}}var gr=require("three");var Qw=new WeakMap,ag=new WeakMap,LR=0;function sg(e){return ag.has(e)||ag.set(e,++LR),`${ag.get(e)}:${e.version??e.data?.version??0}:${e.count}`}var eS=new ArrayBuffer(8),IR=new Float64Array(eS),Jw=new Uint32Array(eS);function Or(e,t){return IR[0]=t,Math.imul(Math.imul(e^Jw[0],16777619)^Jw[1],16777619)}function tS(e){let t=e.getAttribute("position");if(!t)return"no-position";let n=e.getIndex(),r=[e.getAttribute("skinIndex"),e.getAttribute("skinWeight")].filter(Boolean),i=`${sg(t)}:${n?sg(n):"none"}:${e.morphTargetsRelative}:${[...e.morphAttributes.position??[],...r].map(sg).join(";")}`,o=Qw.get(e);if(o?.position===t&&o.index===n&&o.version===i)return o.signature;let a=e.morphTargetsRelative?Or(2166136261,1):2166136261;for(let l=0;l<t.count;l++)a=Or(a,t.getX(l)),a=Or(a,t.getY(l)),a=Or(a,t.getZ(l));if(n)for(let l=0;l<n.count;l++)a=Or(a,n.getX(l));for(let l of e.morphAttributes.position??[])for(let c=0;c<l.count;c++)a=Or(a,l.getX(c)),a=Or(a,l.getY(c)),a=Or(a,l.getZ(c));for(let l of r)for(let c=0;c<l.count;c++)for(let d=0;d<l.itemSize;d++)a=Or(a,l.getComponent(c,d));let s=`${t.count}:${n?.count??0}:${a>>>0}`;return Qw.set(e,{position:t,index:n,version:i,signature:s}),s}function nS(e){let t=2166136261,n=e.skeleton;if(n){for(let r of[e.bindMatrix,...n.boneInverses])for(let i of r.elements)t=Or(t,i);for(let r of n.bones){r.matrixAutoUpdate&&r.updateMatrix();for(let i of r.matrix.elements)t=Or(t,i)}}for(let r of e.morphTargetInfluences??[])t=Or(t,r);return`${n?"skin":"mesh"}:${t>>>0}`}function rS(e,t){e.updateWorldMatrix(!0,!1);let n=e.matrixWorld.clone();if(t!==void 0){if(!e.isInstancedMesh||t>=e.count)return null;let r=new gr.Matrix4;e.getMatrixAt(t,r),n.multiply(r)}return Math.abs(n.determinant())>1e-15?n:null}function lg(e,t){if(!(t.object instanceof gr.Mesh))return e;let n=ur(t.object),r=rS(t.object,t.instanceId);if(!n||!r)return e;let i=r.clone().invert(),o=a=>new gr.Vector3(...a).applyMatrix4(i).toArray();return{...e,anchor:{nodeId:n,localPosition:o(e.position),geometrySignature:tS(t.object.geometry),poseSignature:nS(t.object),...t.instanceId!==void 0?{instanceId:t.instanceId}:{},...e.normal?{localNormal:new gr.Vector3(...e.normal).applyNormalMatrix(new gr.Matrix3().getNormalMatrix(i)).toArray()}:{},...e.faceVertices?{localFaceVertices:e.faceVertices.map(o)}:{}}}}function Yd(e,t,n,r,i){let o=c=>({measurement:e,points:[],status:c});if(e.modelId!==n||Yl(e.tilesetUrl??"")!==Yl(r??""))return o("model-changed");if(!t)return o("missing-object");let a=i??mc(t),s=[],l=new Map;for(let c of e.points){if(!c.anchor){s.push(c);continue}let d=c.anchor,p=a(d.nodeId);if(!(p instanceof gr.Mesh))return o("missing-object");for(let v=p;v;v=v.parent)if(!v.visible)return o("hidden-object");if(tS(p.geometry)!==d.geometrySignature)return o("geometry-changed");let u=l.get(p);if(u===void 0&&(u=nS(p),l.set(p,u)),u!==d.poseSignature)return o("pose-changed");let f=rS(p,d.instanceId);if(!f)return o("geometry-changed");let m=v=>new gr.Vector3(...v).applyMatrix4(f).toArray();s.push({...c,position:m(d.localPosition),...d.localNormal?{normal:new gr.Vector3(...d.localNormal).applyNormalMatrix(new gr.Matrix3().getNormalMatrix(f)).toArray()}:{},...d.localFaceVertices?{faceVertices:d.localFaceVertices.map(m)}:{}})}return{measurement:e,points:s,status:e.approximate?"approximate":"ready"}}function mc(e){let t=new Map;return e.traverse(n=>{let r=ur(n);r&&t.set(r,t.has(r)?null:n)}),n=>t.get(n)??null}function kR(e){let t=new br.Box3().setFromObject(e),n=new br.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 BR(e){let t=new br.Box3().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new br.Vector3),r=t.getSize(new br.Vector3).length()/2;return!Number.isFinite(r)||r<=0?null:{center:[n.x,n.y,n.z],radius:r}}function iS({canvasAreaRef:e,controlsRef:t,sceneRef:n,modelUrl:r,tilesetUrl:i,measurementModelId:o,savedMeasurements:a,measurementSettings:s,measurementUnit:l,onMeasurementsChange:c,onMeasurementSettingsChange:d,onCollectionChange:p,modelRotation:u,bindingTransformSignature:f,modelLoaded:m,enabled:v}){let[g,b]=(0,it.useState)(!1),[h,y]=(0,it.useReducer)(Zw,$d),[w,T]=(0,it.useState)("none"),[x,D]=(0,it.useState)(null),[A,S]=(0,it.useState)(!1),[M,_]=(0,it.useState)(null),[C,E]=(0,it.useState)(null),L=(0,it.useRef)(!1),k=(0,it.useRef)(0),B=(0,it.useRef)(null),j=(0,it.useRef)(null);L.current=g&&v;let R=(0,it.useCallback)(ve=>{ve.updateMatrixWorld(!0),_(kR(ve)),E(BR(ve))},[]),O=(0,it.useCallback)(()=>{y({type:"clear"}),D(null)},[]),N=(0,it.useCallback)(ve=>{y({type:"tool",tool:ve}),D(null)},[]),H=(0,it.useCallback)(()=>y({type:"undo"}),[]),Y=(0,it.useCallback)(()=>y({type:"finishArea"}),[]),ue=(0,it.useCallback)(()=>b(ve=>!ve),[]),be=(0,it.useCallback)(()=>S(ve=>!ve),[]),X=(0,it.useCallback)(ve=>{!L.current||ve.button!==0||(B.current={x:ve.clientX,y:ve.clientY})},[]),G=(0,it.useCallback)((ve,qe)=>{let he=e.current,de=t.current?.camera,ze=n.current;if(!he||!de||!ze)return null;let Pe=he.getBoundingClientRect();if(!Pe.width||!Pe.height)return null;ze.updateMatrixWorld(!0),de.updateMatrixWorld(!0);let ft=new br.Vector2(ve-Pe.left,qe-Pe.top),At=new br.Raycaster;return At.setFromCamera(new br.Vector2(ft.x/Pe.width*2-1,1-ft.y/Pe.height*2),de),At.intersectObject(ze,!0).find(Gx)??null},[e,t,n]),J=(0,it.useCallback)((ve,qe)=>{let he=e.current,de=t.current?.camera,ze=G(ve,qe);if(!ze||!he||!de)return null;let Pe=he.getBoundingClientRect(),ft=new br.Vector2(ve-Pe.left,qe-Pe.top);return lg(Wx(ze,de,ft,Pe,w),ze)},[e,t,G,w]),ee=(0,it.useCallback)(()=>{j.current!==null&&cancelAnimationFrame(j.current),j.current=null,D(null)},[]),fe=(0,it.useCallback)(ve=>{if(!L.current||w==="none"||ve.buttons!==0||ve.target.closest("button, input, select, label, textarea, .ri-measureTools")){ee();return}j.current!==null&&cancelAnimationFrame(j.current);let{clientX:qe,clientY:he}=ve;j.current=requestAnimationFrame(()=>{j.current=null;let de=J(qe,he);D(de?.snapped?de:null)})},[ee,J,w]),K=(0,it.useCallback)(ve=>{if(!L.current)return;let qe=B.current;if(B.current=null,qe&&Math.hypot(ve.clientX-qe.x,ve.clientY-qe.y)>6||ve.target.closest("button, input, select, label, textarea, .ri-measureTools"))return;if(h.tool==="wrap"||h.tool==="wrapHorizontal"){let ze=G(ve.clientX,ve.clientY);if(!ze)return;let Pe=h.tool==="wrapHorizontal"?Fx(ze):zx(ze);if("error"in Pe){y({type:"fail",error:Pe.error});return}let ft=Pe.points.map((At,se)=>({id:k.current+se+1,...lg({position:At},ze)}));k.current+=ft.length,y({type:"wrapResult",points:ft});return}let de=J(ve.clientX,ve.clientY);de&&(k.current+=1,y({type:"place",point:{...de,id:k.current}}))},[h.tool,J,G]);(0,it.useEffect)(()=>{O(),_(null),E(null)},[r,O]),(0,it.useEffect)(()=>{O()},[u[0],u[1],u[2],f,O]),(0,it.useEffect)(()=>(ee(),ee),[ee,g,w]),(0,it.useEffect)(()=>{v||(b(!1),ee())},[v,ee]),(0,it.useEffect)(()=>{let ve=n.current;!m||!ve||R(ve)},[f,m,R,n]);let[oe,ae]=(0,it.useState)([]),pe=h.points.length>0&&ka(h.tool,h.points)!==null&&(h.tool!=="area"||h.areaClosed),De=h.tool==="distance"&&h.points.length===2,te=(0,it.useCallback)(ve=>{if(!pe)return;if(h.points.length>8192){y({type:"fail",error:"A saved measurement can contain up to 8,192 points. Choose a simpler surface and measure again."});return}if(h.points.some(he=>!he.anchor)){y({type:"fail",error:"This surface has no stable measurement anchor. Give the mesh a unique name and measure again."});return}if(a.length>=256){y({type:"fail",error:"A model can keep up to 256 named measurements."});return}let qe={id:crypto.randomUUID(),name:ve.trim()||`Measurement ${a.length+1}`,modelId:o,...i?{tilesetUrl:i,approximate:!0}:{},tool:h.tool,points:structuredClone(h.points),createdAt:new Date().toISOString()};c([...a,qe]),O()},[pe,a,o,i,h,c,O]),Fe=(0,it.useCallback)((ve,qe)=>{try{if(!De)throw new Error("Pick two distance points before calibrating.");let he=ka("distance",h.points).value;d(md(he,ve,qe,s)),y({type:"clearError"})}catch(he){y({type:"fail",error:he instanceof Error?he.message:String(he)})}},[De,h.points,s,d]),We={settings:s,items:a};return{saveMeasurement:te,canSaveMeasurement:pe,canCalibrate:De,calibrate:Fe,savedResults:oe,setSavedResults:ae,exportMeasurementJson:()=>Ri(new Blob([fd(We)],{type:"application/json"}),"measurements.json"),exportMeasurementCsv:()=>{let ve=n.current?mc(n.current):void 0,qe=a.map(he=>{let de=Yd(he,n.current,o,i,ve);return Ba(he,s,l,de.points,de.status)});Ri(new Blob([hd(We,qe,l)],{type:"text/csv;charset=utf-8"}),"measurements.csv")},importMeasurements:ve=>{try{p(Gi(ve)),O()}catch(qe){y({type:"fail",error:qe instanceof Error?qe.message:String(qe)})}},measureMode:g,measureModeRef:L,measurePoints:h.points,measurementTool:h.tool,areaClosed:h.areaClosed,measurementError:h.error,selectMeasurementTool:N,undoMeasurementPoint:H,finishMeasureArea:Y,snapMode:w,setSnapMode:T,snapPreview:x,handleMeasurePointerMove:fe,clearSnapPreview:ee,showDimensions:A,measureBox:M,modelBounds:C,refreshBounds:R,clearMeasurements:O,toggleMeasureMode:ue,toggleDimensions:be,handleMeasurePointerDown:X,handleMeasureClick:K}}var sS=require("react-dom"),lS=require("@react-three/xr"),cS=require("lucide-react"),Ct=require("react");function oS(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 yr=require("react/jsx-runtime"),aS={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function uS({enableXR:e,configuredHandoff:t=!1,usdzUrl:n,mobileHandoffUrl:r,engagement:i}){let o=_e(),a=(0,Ct.useRef)(null),s=(0,Ct.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let N=navigator.xr;if(!N||typeof N.isSessionSupported!="function"||typeof N.addEventListener!="function")return null;try{return(0,lS.createXRStore)({emulate:!1})}catch{return null}},[e]),[l,c]=(0,Ct.useState)(!1),[d,p]=(0,Ct.useState)(!1),[u,f]=(0,Ct.useState)(!0),[m,v]=(0,Ct.useState)(null),[g,b]=(0,Ct.useState)(!1),[h,y]=(0,Ct.useState)(!1),[w,T]=(0,Ct.useState)(aS),[x,D]=(0,Ct.useState)(!1),A=(0,Ct.useMemo)(()=>e&&(t||!!n?.trim())&&Ql(),[e,n,t]);(0,Ct.useEffect)(()=>{f(c0())},[]);let S=(0,Ct.useCallback)(()=>{if(typeof window>"u")return null;try{let N=new URL(r?.trim()||window.location.href,window.location.href);return N.protocol==="http:"||N.protocol==="https:"?N.toString():null}catch{return null}},[r]);(0,Ct.useEffect)(()=>{if(!e||u){v(null),b(!1);return}v(S())},[e,u,S]),(0,Ct.useEffect)(()=>{if(s)return s.subscribe(N=>y(N.session!=null&&N.mode==="immersive-ar"))},[s]),(0,Ct.useEffect)(()=>{if(s)return oS(s,i)},[s,i]),(0,Ct.useEffect)(()=>{D(!1),T(aS)},[h]),(0,Ct.useEffect)(()=>{if(!e||typeof navigator>"u")return;let N=navigator.xr;if(!N?.isSessionSupported)return;let H=!1;return N.isSessionSupported("immersive-ar").then(Y=>!H&&c(Y)).catch(()=>{}),N.isSessionSupported("immersive-vr").then(Y=>!H&&p(Y)).catch(()=>{}),()=>{H=!0}},[e]);let M=(0,Ct.useCallback)(()=>{let N=S();N&&(i.requestARLaunch("mobile-handoff"),v(N),b(!0))},[S,i]),_=(0,Ct.useCallback)(()=>b(!1),[]),C=(0,Ct.useCallback)(()=>{let N=n?.trim();if(!N)return;i.requestARLaunch("quick-look");let H=document.createElement("a");H.setAttribute("rel","ar"),H.href=N,H.style.display="none";let Y=document.createElement("img");Y.alt="",Y.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",H.appendChild(Y),document.body.appendChild(H),H.click(),H.remove()},[n,i]),E=(0,Ct.useCallback)(N=>{T(N),N.isPlacementMode||D(!1)},[]),L=(0,Ct.useCallback)(N=>{D(!1),N?a.current?.finishPlacementMode():a.current?.cancelPlacementMode()},[]),k=(0,Ct.useCallback)(N=>{N.preventDefault(),D(!0),a.current?.startPlacementMode()},[]);(0,Ct.useEffect)(()=>{if(!x)return;let N=()=>L(!0),H=()=>L(!1);return window.addEventListener("pointerup",N),window.addEventListener("pointercancel",H),()=>{window.removeEventListener("pointerup",N),window.removeEventListener("pointercancel",H)}},[L,x]);let B=w.isModelPlaced?w.isPlacementMode?w.canPlace?o("arReleaseToPlace"):o("arFindSurface"):null:w.canPlace?null:o("arFindSurface"),j=w.isModelPlaced&&!w.isPlacementMode?o("arGestureHint"):null,R=s?.getState().domOverlayRoot??null,O=h&&R?(0,sS.createPortal)((0,yr.jsxs)(yr.Fragment,{children:[j&&(0,yr.jsx)("div",{className:"ri-arHintOverlay",children:(0,yr.jsx)("div",{className:"ri-arHint",children:j})}),(0,yr.jsx)("div",{className:"ri-arOverlay",children:(0,yr.jsxs)("div",{className:"ri-arControls",children:[B&&(0,yr.jsx)("div",{className:"ri-arStatus",children:B}),w.isModelPlaced&&(0,yr.jsxs)("button",{type:"button",className:`ri-arActionButton ${x?"ri-arActionButton--active":""}`,onPointerDown:N=>k(N.nativeEvent),"aria-pressed":x,children:[(0,yr.jsx)(cS.MapPin,{size:14}),o("arRelocate")]}),!w.isModelPlaced&&w.canPlace&&(0,yr.jsx)("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>a.current?.placeCurrent(),children:o("tapToPlace")})]})})]}),R):null;return{xrStore:s,inARSession:h,presenterRef:a,arSupported:l,vrSupported:d,quickLookSupported:A,resolvedMobileHandoffUrl:m,isMobileHandoffOpen:g,arOverlay:O,openMobileHandoff:M,closeMobileHandoff:_,openQuickLook:C,handleARStateChange:E}}var fc=require("react"),Qd=require("@react-three/fiber");var Kd=e=>typeof e=="number"&&Number.isFinite(e)&&e>=0?e:null,Zd=class{constructor(){this.lastFrame=null;this.intervals=[]}frame(t,n){let r=this.lastFrame===null?0:t-this.lastFrame;r>0&&(n==="always"||r<=250)&&this.intervals.length<1e3&&this.intervals.push(r),this.lastFrame=t}sample(t,n,r){let o=n.renderMode!=="never"&&this.lastFrame!==null&&r-this.lastFrame<=250?this.intervals:[],a=o.length?o.reduce((l,c)=>l+c,0)/o.length:null;this.intervals=[];let s=t.info;return{sampledAt:new Date().toISOString(),...structuredClone(n),drawCalls:Kd(n.renderer==="webgpu"?s?.render?.drawCalls:s?.render?.calls),triangles:Kd(s?.render?.triangles),geometries:Kd(s?.memory?.geometries),textures:Kd(s?.memory?.textures),frameIntervalMs:a,fps:a?1e3/a:null,frameSamples:o.length}}};function dS(e=1e3){return Number.isFinite(e)?Math.min(1e4,Math.max(250,e)):1e3}function pS(e){let t=(0,Qd.useThree)(o=>o.get),n=(0,fc.useRef)(e);n.current=e;let r=(0,fc.useRef)(new Zd);(0,Qd.useFrame)(o=>r.current.frame(performance.now(),o.frameloop));let i=dS(e.intervalMs);return(0,fc.useEffect)(()=>{let o=setInterval(()=>{let{gl:a,viewport:s,frameloop:l}=t(),c=n.current,d=r.current.sample(a,{renderer:Ar(a)?"webgpu":"webgl",renderMode:l,quality:{profile:c.profile,reducedGpuLoad:c.reducedGpuLoad,dpr:a.getPixelRatio?.()??s.dpr,shadows:a.shadowMap?.enabled??c.shadows,postProcessing:c.postProcessing},streaming:c.streamingRef?.current??null},performance.now());c.onStats(d)},i);return()=>clearInterval(o)},[t,i]),null}var gc=require("@react-three/fiber"),VS=require("@react-three/drei"),jS=require("@react-three/xr"),Ji=require("three"),ri=require("react");var Fn=require("@react-three/fiber"),mS=require("@react-three/drei"),cg=require("@react-three/xr"),Jd=require("three"),Yn=require("react"),Ha=require("react/jsx-runtime");function fS({renderMode:e,suspended:t=!1}){let{scene:n}=(0,Fn.useThree)(),r=(0,Fn.useThree)(s=>s.setFrameloop),i=(0,cg.useXR)(s=>s.session!=null),o=(0,cg.useXR)(s=>s.mode==="immersive-ar"),a=(0,Yn.useRef)(void 0);return(0,Yn.useEffect)(()=>{r(t?"never":i?"always":e)},[i,e,t,r]),(0,Yn.useEffect)(()=>{o?(a.current=n.background,n.background=null):a.current!==void 0&&(n.background=a.current,a.current=void 0)},[o,n]),(0,Fn.useFrame)(()=>{o&&n.background!==null&&(n.background=null)}),null}function hS({onPresentingChange:e}){let t=(0,Fn.useThree)(i=>i.gl),n=(0,Yn.useRef)(null);(0,Yn.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,Yn.useRef)(0);return(0,Fn.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 gS({active:e}){let t=(0,Fn.useThree)(n=>n.invalidate);return(0,Yn.useEffect)(()=>{e&&t()},[e,t]),(0,Fn.useFrame)(()=>{e&&t()}),null}function bS(e){let t=(0,Fn.useThree)(r=>r.gl),n=(0,Yn.useRef)(t.autoClear);return(0,Fn.useFrame)(()=>{n.current=t.autoClear,t.autoClear=!0},-1),(0,Ha.jsxs)(Ha.Fragment,{children:[(0,Ha.jsx)(mS.ContactShadows,{...e}),(0,Ha.jsx)(NR,{saved:n})]})}function NR({saved:e}){let t=(0,Fn.useThree)(n=>n.gl);return(0,Fn.useFrame)(()=>{t.autoClear=e.current}),null}function yS({color:e}){let{scene:t,invalidate:n}=(0,Fn.useThree)();return(0,Yn.useEffect)(()=>{let r=t.background;return t.background=e?new Jd.Color(e):null,n(),()=>{t.background=r}},[t,e,n]),null}function vS({rotation:e}){let{scene:t,invalidate:n}=(0,Fn.useThree)();return(0,Yn.useLayoutEffect)(()=>{let r=e*Math.PI/180;t.environmentRotation.set(0,r,0),t.backgroundRotation.set(0,r,0)}),(0,Yn.useEffect)(()=>{n()},[e,n]),null}function xS({cameraConfig:e}){let{camera:t,invalidate:n}=(0,Fn.useThree)();return(0,Yn.useEffect)(()=>{if(!(t instanceof Jd.PerspectiveCamera))return;let r=e?.fov;typeof r=="number"&&t.fov!==r&&(t.fov=r,t.updateProjectionMatrix(),n())},[t,e,n]),null}var Zs=require("@react-three/fiber"),je=require("@react-three/postprocessing"),Qi=require("postprocessing"),Ir=require("three"),Ht=require("react");var Ys=require("react"),ep=require("postprocessing"),wS=require("three"),MS=require("react/jsx-runtime"),VR=`
3716
+ `);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${Fc}" height="${Fc}" viewBox="0 0 ${Fc} ${Fc}">`,` <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(`
3717
+ `)}function vD(e){let t=[],n=new Set;return e.forEach((r,i)=>{let o=gD(r.scene);if(o.length===0)return;let a=dM(r.label||`model-${i+1}`);o.forEach((s,l)=>{let c=Kg(s.name,`material-${l+1}`),u=o.length===1?`${a}-uv-layout.svg`:`${a}-uv-${c}-${l+1}.svg`;if(n.has(u)){let p=u.replace(/\.svg$/,""),d=2;for(;n.has(`${p}-${d}.svg`);)d+=1;u=`${p}-${d}.svg`}n.add(u),t.push({filename:u,materialName:s.name,meshCount:[...s.layers.values()].filter(p=>p.edges.size>0).length,svg:yD(s)})})}),t}async function Zg(e,t="model"){let n=vD(e);if(n.length===0)return n;if(n.length===1)return Xi(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,uM.strToU8)(o.svg)])),i=await aM(r);return Xi(new Blob([i],{type:"application/zip"}),`${dM(t)}-uv-layouts.zip`),n}async function pM(e,t="model"){return Zg([{scene:e,label:t}],t)}function mM({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:r,downloadFilename:i,getAllLoadedModels:o,getAllLoadedModelUvSources:a,captureVideo:s,openConfiguredAR:l}){let[c,u]=(0,rr.useState)(!1),[p,d]=(0,rr.useState)(!1),[m,f]=(0,rr.useState)(null),[b,g]=(0,rr.useState)(null),[y,h]=(0,rr.useState)("auto");(0,rr.useEffect)(()=>{if(!p)return;let S=()=>d(!1);return window.addEventListener("pointerdown",S),()=>window.removeEventListener("pointerdown",S)},[p]);let v=(0,rr.useCallback)(()=>{f(null),g(null),d(S=>!S)},[]),x=(0,rr.useCallback)(()=>{let S=o?.()??null;if(S&&S.length>0){d(!1),u(!0),Bp({sources:S,downloadFilename:i,onComplete:()=>u(!1)});return}let _=e.current;_&&(d(!1),u(!0),Bp({sources:[{scene:_,objectBindings:r,matRefs:t.current??{}}],downloadFilename:i,onComplete:()=>u(!1)}))},[i,t,r,e,o]),P=(0,rr.useCallback)(async()=>{let S=o?.()??null;if(!S||S.length===0)return;d(!1),u(!0);let _=new Set;try{for(let M=0;M<S.length;M++){let C=S[M],T=(C.label||`model-${M+1}`).replace(/[\\/:*?"<>|]+/g,"-"),I=T,L=2;for(;_.has(I);)I=`${T}-${L++}`;_.add(I),await new Promise(B=>{Bp({sources:[C],downloadFilename:i,filenameSuffix:`-${I}`,onComplete:B})}),await new Promise(B=>setTimeout(B,300))}}finally{u(!1)}},[i,o]),w=(0,rr.useCallback)(()=>{d(!1),hp(n.current).then(S=>{let _=document.createElement("a");_.href=S,_.download=`${i}.png`,document.body.appendChild(_),_.click(),document.body.removeChild(_)}).catch(S=>{console.error("Screenshot failed:",S)})},[i,n]),D=(0,rr.useCallback)(async()=>{let S=a?.()??null;try{let _;if(S&&S.length>0)_=await Zg(S,i);else{let M=e.current;if(!M)return;_=await pM(M,i)}if(_.length===0){f("This model does not contain UV coordinates.");return}f(null),d(!1)}catch(_){console.error("UV layout export failed:",_),f("Could not create the UV layout archive.")}},[i,e,a]),E=(0,rr.useCallback)(async S=>{d(!1),g(null);try{let _=await s({mode:S,format:y}),M=_.type==="image/gif"?"gif":_.type.startsWith("video/mp4")?"mp4":"webm",C=URL.createObjectURL(_),T=document.createElement("a");T.href=C,T.download=`${i}-${S}.${M}`,document.body.appendChild(T);try{T.click()}finally{T.remove(),setTimeout(()=>URL.revokeObjectURL(C),1e3)}}catch(_){if(_ instanceof DOMException&&_.name==="AbortError")return;g(_ instanceof Error?_.message:"Could not export the video."),d(!0)}},[s,i,y]);return{openConfiguredAR:l?()=>{d(!1),l()}:void 0,isDownloading:c,downloadMenuOpen:p,uvExportError:m,toggleDownloadMenu:v,handleDownloadMesh:x,handleDownloadSeparateMeshes:P,handleDownloadScreenshot:w,handleDownloadUvLayout:D,handleDownloadVideo:E,videoFormat:y,setVideoFormat:h,videoExportError:b}}var jp=require("react"),Qg=80,xD=99,wD=6e3,SD=200;function MD(e,t=0){let n=Math.min(Math.max(e,0),100);return n<100?n/100*Qg:Qg+(xD-Qg)*(1-Math.exp(-t/wD))}function fM(e,t=!1){let n=e!==null&&e>=100&&!t,[r,i]=(0,jp.useState)(0);return(0,jp.useEffect)(()=>{if(!n){i(0);return}let o=performance.now(),a=setInterval(()=>i(performance.now()-o),SD);return()=>clearInterval(a)},[n]),e===null?null:t?100:MD(e,r)}var it=require("react"),_r=require("three");var Up={tool:"distance",points:[],areaClosed:!1,error:null};function hM(e,t){if(t.type==="tool")return{...Up,tool:t.tool};if(t.type==="clear")return{...Up,tool:e.tool};if(t.type==="fail")return{...e,error:t.error};if(t.type==="clearError")return{...e,error:null};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=Js(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&&Qs(i.map(o=>o.position))===null?{...e,error:"Pick a point away from the angle's vertex."}:{...e,points:i,areaClosed:!1,error:null}}var Mr=require("three");var gM=new WeakMap,Jg=new WeakMap,_D=0;function eb(e){return Jg.has(e)||Jg.set(e,++_D),`${Jg.get(e)}:${e.version??e.data?.version??0}:${e.count}`}var yM=new ArrayBuffer(8),CD=new Float64Array(yM),bM=new Uint32Array(yM);function Fr(e,t){return CD[0]=t,Math.imul(Math.imul(e^bM[0],16777619)^bM[1],16777619)}function vM(e){let t=e.getAttribute("position");if(!t)return"no-position";let n=e.getIndex(),r=[e.getAttribute("skinIndex"),e.getAttribute("skinWeight")].filter(Boolean),i=`${eb(t)}:${n?eb(n):"none"}:${e.morphTargetsRelative}:${[...e.morphAttributes.position??[],...r].map(eb).join(";")}`,o=gM.get(e);if(o?.position===t&&o.index===n&&o.version===i)return o.signature;let a=e.morphTargetsRelative?Fr(2166136261,1):2166136261;for(let l=0;l<t.count;l++)a=Fr(a,t.getX(l)),a=Fr(a,t.getY(l)),a=Fr(a,t.getZ(l));if(n)for(let l=0;l<n.count;l++)a=Fr(a,n.getX(l));for(let l of e.morphAttributes.position??[])for(let c=0;c<l.count;c++)a=Fr(a,l.getX(c)),a=Fr(a,l.getY(c)),a=Fr(a,l.getZ(c));for(let l of r)for(let c=0;c<l.count;c++)for(let u=0;u<l.itemSize;u++)a=Fr(a,l.getComponent(c,u));let s=`${t.count}:${n?.count??0}:${a>>>0}`;return gM.set(e,{position:t,index:n,version:i,signature:s}),s}function xM(e){let t=2166136261,n=e.skeleton;if(n){for(let r of[e.bindMatrix,...n.boneInverses])for(let i of r.elements)t=Fr(t,i);for(let r of n.bones){r.matrixAutoUpdate&&r.updateMatrix();for(let i of r.matrix.elements)t=Fr(t,i)}}for(let r of e.morphTargetInfluences??[])t=Fr(t,r);return`${n?"skin":"mesh"}:${t>>>0}`}function wM(e,t){e.updateWorldMatrix(!0,!1);let n=e.matrixWorld.clone();if(t!==void 0){if(!e.isInstancedMesh||t>=e.count)return null;let r=new Mr.Matrix4;e.getMatrixAt(t,r),n.multiply(r)}return Math.abs(n.determinant())>1e-15?n:null}function tb(e,t){if(!(t.object instanceof Mr.Mesh))return e;let n=br(t.object),r=wM(t.object,t.instanceId);if(!n||!r)return e;let i=r.clone().invert(),o=a=>new Mr.Vector3(...a).applyMatrix4(i).toArray();return{...e,anchor:{nodeId:n,localPosition:o(e.position),geometrySignature:vM(t.object.geometry),poseSignature:xM(t.object),...t.instanceId!==void 0?{instanceId:t.instanceId}:{},...e.normal?{localNormal:new Mr.Vector3(...e.normal).applyNormalMatrix(new Mr.Matrix3().getNormalMatrix(i)).toArray()}:{},...e.faceVertices?{localFaceVertices:e.faceVertices.map(o)}:{}}}}function zp(e,t,n,r,i){let o=c=>({measurement:e,points:[],status:c});if(e.modelId!==n||xc(e.tilesetUrl??"")!==xc(r??""))return o("model-changed");if(!t)return o("missing-object");let a=i??Gc(t),s=[],l=new Map;for(let c of e.points){if(!c.anchor){s.push(c);continue}let u=c.anchor,p=a(u.nodeId);if(!(p instanceof Mr.Mesh))return o("missing-object");for(let b=p;b;b=b.parent)if(!b.visible)return o("hidden-object");if(vM(p.geometry)!==u.geometrySignature)return o("geometry-changed");let d=l.get(p);if(d===void 0&&(d=xM(p),l.set(p,d)),d!==u.poseSignature)return o("pose-changed");let m=wM(p,u.instanceId);if(!m)return o("geometry-changed");let f=b=>new Mr.Vector3(...b).applyMatrix4(m).toArray();s.push({...c,position:f(u.localPosition),...u.localNormal?{normal:new Mr.Vector3(...u.localNormal).applyNormalMatrix(new Mr.Matrix3().getNormalMatrix(m)).toArray()}:{},...u.localFaceVertices?{faceVertices:u.localFaceVertices.map(f)}:{}})}return{measurement:e,points:s,status:e.approximate?"approximate":"ready"}}function Gc(e){let t=new Map;return e.traverse(n=>{let r=br(n);r&&t.set(r,t.has(r)?null:n)}),n=>t.get(n)??null}function TD(e){let t=new _r.Box3().setFromObject(e),n=new _r.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 PD(e){let t=new _r.Box3().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new _r.Vector3),r=t.getSize(new _r.Vector3).length()/2;return!Number.isFinite(r)||r<=0?null:{center:[n.x,n.y,n.z],radius:r}}function SM({canvasAreaRef:e,controlsRef:t,sceneRef:n,modelUrl:r,tilesetUrl:i,measurementModelId:o,savedMeasurements:a,measurementSettings:s,measurementUnit:l,onMeasurementsChange:c,onMeasurementSettingsChange:u,onCollectionChange:p,modelRotation:d,bindingTransformSignature:m,modelLoaded:f,enabled:b}){let[g,y]=(0,it.useState)(!1),[h,v]=(0,it.useReducer)(hM,Up),[x,P]=(0,it.useState)("none"),[w,D]=(0,it.useState)(null),[E,S]=(0,it.useState)(!1),[_,M]=(0,it.useState)(null),[C,T]=(0,it.useState)(null),I=(0,it.useRef)(!1),L=(0,it.useRef)(0),B=(0,it.useRef)(null),N=(0,it.useRef)(null);I.current=g&&b;let R=(0,it.useCallback)(be=>{be.updateMatrixWorld(!0),M(TD(be)),T(PD(be))},[]),O=(0,it.useCallback)(()=>{v({type:"clear"}),D(null)},[]),V=(0,it.useCallback)(be=>{v({type:"tool",tool:be}),D(null)},[]),G=(0,it.useCallback)(()=>v({type:"undo"}),[]),Q=(0,it.useCallback)(()=>v({type:"finishArea"}),[]),$=(0,it.useCallback)(()=>y(be=>!be),[]),ne=(0,it.useCallback)(()=>S(be=>!be),[]),Z=(0,it.useCallback)(be=>{!I.current||be.button!==0||(B.current={x:be.clientX,y:be.clientY})},[]),U=(0,it.useCallback)((be,Je)=>{let ve=e.current,de=t.current?.camera,Ne=n.current;if(!ve||!de||!Ne)return null;let Ae=ve.getBoundingClientRect();if(!Ae.width||!Ae.height)return null;Ne.updateMatrixWorld(!0),de.updateMatrixWorld(!0);let mt=new _r.Vector2(be-Ae.left,Je-Ae.top),gt=new _r.Raycaster;return gt.setFromCamera(new _r.Vector2(mt.x/Ae.width*2-1,1-mt.y/Ae.height*2),de),gt.intersectObject(Ne,!0).find(z0)??null},[e,t,n]),F=(0,it.useCallback)((be,Je)=>{let ve=e.current,de=t.current?.camera,Ne=U(be,Je);if(!Ne||!ve||!de)return null;let Ae=ve.getBoundingClientRect(),mt=new _r.Vector2(be-Ae.left,Je-Ae.top);return tb(F0(Ne,de,mt,Ae,x),Ne)},[e,t,U,x]),te=(0,it.useCallback)(()=>{N.current!==null&&cancelAnimationFrame(N.current),N.current=null,D(null)},[]),se=(0,it.useCallback)(be=>{if(!I.current||x==="none"||be.buttons!==0||be.target.closest("button, input, select, label, textarea, .ri-measureTools")){te();return}N.current!==null&&cancelAnimationFrame(N.current);let{clientX:Je,clientY:ve}=be;N.current=requestAnimationFrame(()=>{N.current=null;let de=F(Je,ve);D(de?.snapped?de:null)})},[te,F,x]),ye=(0,it.useCallback)(be=>{if(!I.current)return;let Je=B.current;if(B.current=null,Je&&Math.hypot(be.clientX-Je.x,be.clientY-Je.y)>6||be.target.closest("button, input, select, label, textarea, .ri-measureTools"))return;if(h.tool==="wrap"||h.tool==="wrapHorizontal"){let Ne=U(be.clientX,be.clientY);if(!Ne)return;let Ae=h.tool==="wrapHorizontal"?j0(Ne):V0(Ne);if("error"in Ae){v({type:"fail",error:Ae.error});return}let mt=Ae.points.map((gt,It)=>({id:L.current+It+1,...tb({position:gt},Ne)}));L.current+=mt.length,v({type:"wrapResult",points:mt});return}let de=F(be.clientX,be.clientY);de&&(L.current+=1,v({type:"place",point:{...de,id:L.current}}))},[h.tool,F,U]);(0,it.useEffect)(()=>{O(),M(null),T(null)},[r,O]),(0,it.useEffect)(()=>{O()},[d[0],d[1],d[2],m,O]),(0,it.useEffect)(()=>(te(),te),[te,g,x]),(0,it.useEffect)(()=>{b||(y(!1),te())},[b,te]),(0,it.useEffect)(()=>{let be=n.current;!f||!be||R(be)},[m,f,R,n]);let[K,re]=(0,it.useState)([]),ce=h.points.length>0&&Qa(h.tool,h.points)!==null&&(h.tool!=="area"||h.areaClosed),he=h.tool==="distance"&&h.points.length===2,qe=(0,it.useCallback)(be=>{if(!ce)return;if(h.points.length>8192){v({type:"fail",error:"A saved measurement can contain up to 8,192 points. Choose a simpler surface and measure again."});return}if(h.points.some(ve=>!ve.anchor)){v({type:"fail",error:"This surface has no stable measurement anchor. Give the mesh a unique name and measure again."});return}if(a.length>=256){v({type:"fail",error:"A model can keep up to 256 named measurements."});return}let Je={id:crypto.randomUUID(),name:be.trim()||`Measurement ${a.length+1}`,modelId:o,...i?{tilesetUrl:i,approximate:!0}:{},tool:h.tool,points:structuredClone(h.points),createdAt:new Date().toISOString()};c([...a,Je]),O()},[ce,a,o,i,h,c,O]),ie=(0,it.useCallback)((be,Je)=>{try{if(!he)throw new Error("Pick two distance points before calibrating.");let ve=Qa("distance",h.points).value;u(Hd(ve,be,Je,s)),v({type:"clearError"})}catch(ve){v({type:"fail",error:ve instanceof Error?ve.message:String(ve)})}},[he,h.points,s,u]),tt={settings:s,items:a};return{saveMeasurement:qe,canSaveMeasurement:ce,canCalibrate:he,calibrate:ie,savedResults:K,setSavedResults:re,exportMeasurementJson:()=>Xi(new Blob([Wd(tt)],{type:"application/json"}),"measurements.json"),exportMeasurementCsv:()=>{let be=n.current?Gc(n.current):void 0,Je=a.map(ve=>{let de=zp(ve,n.current,o,i,be);return Ja(ve,s,l,de.points,de.status)});Xi(new Blob([qd(tt,Je,l)],{type:"text/csv;charset=utf-8"}),"measurements.csv")},importMeasurements:be=>{try{p(co(be)),O()}catch(Je){v({type:"fail",error:Je instanceof Error?Je.message:String(Je)})}},measureMode:g,measureModeRef:I,measurePoints:h.points,measurementTool:h.tool,areaClosed:h.areaClosed,measurementError:h.error,selectMeasurementTool:V,undoMeasurementPoint:G,finishMeasureArea:Q,snapMode:x,setSnapMode:P,snapPreview:w,handleMeasurePointerMove:se,clearSnapPreview:te,showDimensions:E,measureBox:_,modelBounds:C,refreshBounds:R,clearMeasurements:O,toggleMeasureMode:$,toggleDimensions:ne,handleMeasurePointerDown:Z,handleMeasureClick:ye}}var CM=require("react-dom"),TM=require("@react-three/xr"),PM=require("lucide-react"),Pt=require("react");function MM(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 Cr=require("react/jsx-runtime"),_M={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function AM({enableXR:e,configuredHandoff:t=!1,usdzUrl:n,mobileHandoffUrl:r,engagement:i}){let o=xe(),a=(0,Pt.useRef)(null),s=(0,Pt.useMemo)(()=>{if(!e||typeof navigator>"u")return null;let V=navigator.xr;if(!V||typeof V.isSessionSupported!="function"||typeof V.addEventListener!="function")return null;try{return(0,TM.createXRStore)({emulate:!1})}catch{return null}},[e]),[l,c]=(0,Pt.useState)(!1),[u,p]=(0,Pt.useState)(!1),[d,m]=(0,Pt.useState)(!0),[f,b]=(0,Pt.useState)(null),[g,y]=(0,Pt.useState)(!1),[h,v]=(0,Pt.useState)(!1),[x,P]=(0,Pt.useState)(_M),[w,D]=(0,Pt.useState)(!1),E=(0,Pt.useMemo)(()=>e&&(t||!!n?.trim())&&Ac(),[e,n,t]);(0,Pt.useEffect)(()=>{m(bw())},[]);let S=(0,Pt.useCallback)(()=>{if(typeof window>"u")return null;try{let V=new URL(r?.trim()||window.location.href,window.location.href);return V.protocol==="http:"||V.protocol==="https:"?V.toString():null}catch{return null}},[r]);(0,Pt.useEffect)(()=>{if(!e||d){b(null),y(!1);return}b(S())},[e,d,S]),(0,Pt.useEffect)(()=>{if(s)return s.subscribe(V=>v(V.session!=null&&V.mode==="immersive-ar"))},[s]),(0,Pt.useEffect)(()=>{if(s)return MM(s,i)},[s,i]),(0,Pt.useEffect)(()=>{D(!1),P(_M)},[h]),(0,Pt.useEffect)(()=>{if(!e||typeof navigator>"u")return;let V=navigator.xr;if(!V?.isSessionSupported)return;let G=!1;return V.isSessionSupported("immersive-ar").then(Q=>!G&&c(Q)).catch(()=>{}),V.isSessionSupported("immersive-vr").then(Q=>!G&&p(Q)).catch(()=>{}),()=>{G=!0}},[e]);let _=(0,Pt.useCallback)(()=>{let V=S();V&&(i.requestARLaunch("mobile-handoff"),b(V),y(!0))},[S,i]),M=(0,Pt.useCallback)(()=>y(!1),[]),C=(0,Pt.useCallback)(()=>{let V=n?.trim();if(!V)return;i.requestARLaunch("quick-look");let G=document.createElement("a");G.setAttribute("rel","ar"),G.href=V,G.style.display="none";let Q=document.createElement("img");Q.alt="",Q.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",G.appendChild(Q),document.body.appendChild(G),G.click(),G.remove()},[n,i]),T=(0,Pt.useCallback)(V=>{P(V),V.isPlacementMode||D(!1)},[]),I=(0,Pt.useCallback)(V=>{D(!1),V?a.current?.finishPlacementMode():a.current?.cancelPlacementMode()},[]),L=(0,Pt.useCallback)(V=>{V.preventDefault(),D(!0),a.current?.startPlacementMode()},[]);(0,Pt.useEffect)(()=>{if(!w)return;let V=()=>I(!0),G=()=>I(!1);return window.addEventListener("pointerup",V),window.addEventListener("pointercancel",G),()=>{window.removeEventListener("pointerup",V),window.removeEventListener("pointercancel",G)}},[I,w]);let B=x.isModelPlaced?x.isPlacementMode?x.canPlace?o("arReleaseToPlace"):o("arFindSurface"):null:x.canPlace?null:o("arFindSurface"),N=x.isModelPlaced&&!x.isPlacementMode?o("arGestureHint"):null,R=s?.getState().domOverlayRoot??null,O=h&&R?(0,CM.createPortal)((0,Cr.jsxs)(Cr.Fragment,{children:[N&&(0,Cr.jsx)("div",{className:"ri-arHintOverlay",children:(0,Cr.jsx)("div",{className:"ri-arHint",children:N})}),(0,Cr.jsx)("div",{className:"ri-arOverlay",children:(0,Cr.jsxs)("div",{className:"ri-arControls",children:[B&&(0,Cr.jsx)("div",{className:"ri-arStatus",children:B}),x.isModelPlaced&&(0,Cr.jsxs)("button",{type:"button",className:`ri-arActionButton ${w?"ri-arActionButton--active":""}`,onPointerDown:V=>L(V.nativeEvent),"aria-pressed":w,children:[(0,Cr.jsx)(PM.MapPin,{size:14}),o("arRelocate")]}),!x.isModelPlaced&&x.canPlace&&(0,Cr.jsx)("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>a.current?.placeCurrent(),children:o("tapToPlace")})]})})]}),R):null;return{xrStore:s,inARSession:h,presenterRef:a,arSupported:l,vrSupported:u,quickLookSupported:E,resolvedMobileHandoffUrl:f,isMobileHandoffOpen:g,arOverlay:O,openMobileHandoff:_,closeMobileHandoff:M,openQuickLook:C,handleARStateChange:T}}var Hc=require("react"),Hp=require("@react-three/fiber");var Fp=e=>typeof e=="number"&&Number.isFinite(e)&&e>=0?e:null,Gp=class{constructor(){this.lastFrame=null;this.intervals=[]}frame(t,n){let r=this.lastFrame===null?0:t-this.lastFrame;r>0&&(n==="always"||r<=250)&&this.intervals.length<1e3&&this.intervals.push(r),this.lastFrame=t}sample(t,n,r){let o=n.renderMode!=="never"&&this.lastFrame!==null&&r-this.lastFrame<=250?this.intervals:[],a=o.length?o.reduce((l,c)=>l+c,0)/o.length:null;this.intervals=[];let s=t.info;return{sampledAt:new Date().toISOString(),...structuredClone(n),drawCalls:Fp(n.renderer==="webgpu"?s?.render?.drawCalls:s?.render?.calls),triangles:Fp(s?.render?.triangles),geometries:Fp(s?.memory?.geometries),textures:Fp(s?.memory?.textures),frameIntervalMs:a,fps:a?1e3/a:null,frameSamples:o.length}}};function EM(e=1e3){return Number.isFinite(e)?Math.min(1e4,Math.max(250,e)):1e3}function RM(e){let t=(0,Hp.useThree)(o=>o.get),n=(0,Hc.useRef)(e);n.current=e;let r=(0,Hc.useRef)(new Gp);(0,Hp.useFrame)(o=>r.current.frame(performance.now(),o.frameloop));let i=EM(e.intervalMs);return(0,Hc.useEffect)(()=>{let o=setInterval(()=>{let{gl:a,viewport:s,frameloop:l}=t(),c=n.current,u=r.current.sample(a,{renderer:jr(a)?"webgpu":"webgl",renderMode:l,quality:{profile:c.profile,reducedGpuLoad:c.reducedGpuLoad,dpr:a.getPixelRatio?.()??s.dpr,shadows:a.shadowMap?.enabled??c.shadows,postProcessing:c.postProcessing},streaming:c.streamingRef?.current??null},performance.now());c.onStats(u)},i);return()=>clearInterval(o)},[t,i]),null}var qc=require("@react-three/fiber"),n_=require("@react-three/drei"),r_=require("@react-three/xr"),So=require("three"),vi=require("react");var Xn=require("@react-three/fiber"),OM=require("@react-three/drei"),nb=require("@react-three/xr"),Wp=require("three"),ir=require("react"),ss=require("react/jsx-runtime");function DM({renderMode:e,suspended:t=!1}){let{scene:n}=(0,Xn.useThree)(),r=(0,Xn.useThree)(s=>s.setFrameloop),i=(0,nb.useXR)(s=>s.session!=null),o=(0,nb.useXR)(s=>s.mode==="immersive-ar"),a=(0,ir.useRef)(void 0);return(0,ir.useEffect)(()=>{r(t?"never":i?"always":e)},[i,e,t,r]),(0,ir.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 IM({onPresentingChange:e}){let t=(0,Xn.useThree)(i=>i.gl),n=(0,ir.useRef)(null);(0,ir.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,ir.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 kM({active:e}){let t=(0,Xn.useThree)(n=>n.invalidate);return(0,ir.useEffect)(()=>{e&&t()},[e,t]),(0,Xn.useFrame)(()=>{e&&t()}),null}function LM(e){let t=(0,Xn.useThree)(r=>r.gl),n=(0,ir.useRef)(t.autoClear);return(0,Xn.useFrame)(()=>{n.current=t.autoClear,t.autoClear=!0},-1),(0,ss.jsxs)(ss.Fragment,{children:[(0,ss.jsx)(OM.ContactShadows,{...e}),(0,ss.jsx)(AD,{saved:n})]})}function AD({saved:e}){let t=(0,Xn.useThree)(n=>n.gl);return(0,Xn.useFrame)(()=>{t.autoClear=e.current}),null}function BM({color:e}){let{scene:t,invalidate:n}=(0,Xn.useThree)();return(0,ir.useLayoutEffect)(()=>(t.background=e?new Wp.Color(e):null,n(),()=>{t.background=null}),[t,e,n]),null}function NM({rotation:e}){let{scene:t,invalidate:n}=(0,Xn.useThree)();return(0,ir.useLayoutEffect)(()=>{let r=e*Math.PI/180;t.environmentRotation.set(0,r,0),t.backgroundRotation.set(0,r,0)}),(0,ir.useEffect)(()=>{n()},[e,n]),null}function VM({cameraConfig:e}){let{camera:t,invalidate:n}=(0,Xn.useThree)();return(0,ir.useEffect)(()=>{if(!(t instanceof Wp.PerspectiveCamera))return;let r=e?.fov;typeof r=="number"&&t.fov!==r&&(t.fov=r,t.updateProjectionMatrix(),n())},[t,e,n]),null}var hl=require("@react-three/fiber"),He=require("@react-three/postprocessing"),wo=require("postprocessing"),Wr=require("three"),qt=require("react");var ml=require("react"),qp=require("postprocessing"),jM=require("three"),zM=require("react/jsx-runtime"),ED=`
3672
3718
  uniform float exposure;
3673
3719
  void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
3674
3720
  outputColor = vec4(inputColor.rgb * exposure, inputColor.a);
3675
3721
  }
3676
- `,ug=class extends ep.Effect{constructor(t=1){super("ExposureEffect",VR,{blendFunction:ep.BlendFunction.NORMAL,uniforms:new Map([["exposure",new wS.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},SS=(0,Ys.forwardRef)(function({exposure:t},n){let r=(0,Ys.useMemo)(()=>new ug(t),[]);return r.exposure=t,(0,Ys.useImperativeHandle)(n,()=>r,[r]),(0,MS.jsx)("primitive",{object:r,dispose:null})});var Ga=require("@react-three/fiber"),_S=Ul(require("@react-three/postprocessing")),CS=require("postprocessing"),Lr=require("three"),Dr=require("react"),PS=require("react/jsx-runtime"),jR=_S.LensFlareEffect;function TS({config:e}){let t=(0,Ga.useThree)(u=>u.camera),n=(0,Ga.useThree)(u=>u.raycaster),r=(0,Ga.useThree)(u=>u.scene),i=(0,Ga.useThree)(u=>u.viewport),o=(0,Dr.useRef)(null),a=(0,Dr.useRef)(new Lr.Vector3),s=(0,Dr.useRef)(new Lr.Vector2),l=(0,Dr.useMemo)(()=>new Lr.Vector3(...e.lensPosition),[e.lensPosition]),c=(0,Dr.useMemo)(()=>new Lr.Color(e.colorGain??"#141414"),[e.colorGain]),d=(0,Dr.useMemo)(()=>new Lr.Vector2(0,0),[]),p=(0,Dr.useMemo)(()=>new jR({blendFunction:CS.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,Dr.useEffect)(()=>(o.current=p,()=>{p.dispose(),o.current=null}),[p]),(0,Dr.useEffect)(()=>{let u=p.uniforms.get("screenRes");u&&(u.value.x=i.width,u.value.y=i.height)},[p,i]),(0,Ga.useFrame)((u,f)=>{let m=o.current;if(!m)return;let v=m.uniforms.get("lensPosition"),g=m.uniforms.get("opacity");if(!v||!g)return;let b=1;if(a.current.copy(l).project(t),a.current.z>1)return;v.value.x=a.current.x,v.value.y=a.current.y,s.current.x=a.current.x,s.current.y=a.current.y,n.setFromCamera(s.current,t);let h=n.intersectObjects(r.children,!0),{object:y}=h[0]||{};y&&(y.userData?.lensflare==="no-occlusion"?b=0:y instanceof Lr.Mesh&&(y.material.uniforms?._transmission?.value>.2||y.material._transmission&&y.material._transmission>.2?b=.2:y.material.transparent&&(b=y.material.opacity))),g.value=Lr.MathUtils.damp(g.value,b,12,f)}),(0,PS.jsx)("primitive",{object:p,dispose:null})}var dg=require("@react-three/fiber"),AS=require("postprocessing"),np=require("react");var Ks=require("postprocessing"),yt=require("three"),UR=`
3722
+ `,rb=class extends qp.Effect{constructor(t=1){super("ExposureEffect",ED,{blendFunction:qp.BlendFunction.NORMAL,uniforms:new Map([["exposure",new jM.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},UM=(0,ml.forwardRef)(function({exposure:t},n){let r=(0,ml.useMemo)(()=>new rb(t),[]);return r.exposure=t,(0,ml.useImperativeHandle)(n,()=>r,[r]),(0,zM.jsx)("primitive",{object:r,dispose:null})});var ls=require("@react-three/fiber"),FM=dc(require("@react-three/postprocessing")),GM=require("postprocessing"),Hr=require("three"),Gr=require("react"),WM=require("react/jsx-runtime"),RD=FM.LensFlareEffect;function HM({config:e}){let t=(0,ls.useThree)(d=>d.camera),n=(0,ls.useThree)(d=>d.raycaster),r=(0,ls.useThree)(d=>d.scene),i=(0,ls.useThree)(d=>d.viewport),o=(0,Gr.useRef)(null),a=(0,Gr.useRef)(new Hr.Vector3),s=(0,Gr.useRef)(new Hr.Vector2),l=(0,Gr.useMemo)(()=>new Hr.Vector3(...e.lensPosition),[e.lensPosition]),c=(0,Gr.useMemo)(()=>new Hr.Color(e.colorGain??"#141414"),[e.colorGain]),u=(0,Gr.useMemo)(()=>new Hr.Vector2(0,0),[]),p=(0,Gr.useMemo)(()=>new RD({blendFunction:GM.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:l,screenRes:u,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain: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,u]);return(0,Gr.useEffect)(()=>(o.current=p,()=>{p.dispose(),o.current=null}),[p]),(0,Gr.useEffect)(()=>{let d=p.uniforms.get("screenRes");d&&(d.value.x=i.width,d.value.y=i.height)},[p,i]),(0,ls.useFrame)((d,m)=>{let f=o.current;if(!f)return;let b=f.uniforms.get("lensPosition"),g=f.uniforms.get("opacity");if(!b||!g)return;let y=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 h=n.intersectObjects(r.children,!0),{object:v}=h[0]||{};v&&(v.userData?.lensflare==="no-occlusion"?y=0:v instanceof Hr.Mesh&&(v.material.uniforms?._transmission?.value>.2||v.material._transmission&&v.material._transmission>.2?y=.2:v.material.transparent&&(y=v.material.opacity))),g.value=Hr.MathUtils.damp(g.value,y,12,m)}),(0,WM.jsx)("primitive",{object:p,dispose:null})}var ib=require("@react-three/fiber"),qM=require("postprocessing"),$p=require("react");var fl=require("postprocessing"),xt=require("three"),OD=`
3677
3723
  #include <common>
3678
3724
  #include <morphtarget_pars_vertex>
3679
3725
  #include <skinning_pars_vertex>
@@ -3687,7 +3733,7 @@ void main() {
3687
3733
  #include <project_vertex>
3688
3734
  #include <logdepthbuf_vertex>
3689
3735
  #include <clipping_planes_vertex>
3690
- }`,zR=`
3736
+ }`,DD=`
3691
3737
  #include <common>
3692
3738
  #include <clipping_planes_pars_fragment>
3693
3739
  #include <logdepthbuf_pars_fragment>
@@ -3698,7 +3744,7 @@ void main() {
3698
3744
  #include <logdepthbuf_fragment>
3699
3745
  if (onlySelected && length(objectId) < 0.001) discard;
3700
3746
  gl_FragColor = vec4(objectId, step(0.001, length(objectId)));
3701
- }`,FR=`
3747
+ }`,ID=`
3702
3748
  uniform sampler2D selectionMask;
3703
3749
  uniform sampler2D visibleMask;
3704
3750
  uniform vec2 texelSize;
@@ -3720,9 +3766,9 @@ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor)
3720
3766
  float edge = max(max(edgeAt(uv, vec2(texelSize.x, 0.0), c, shown), edgeAt(uv, vec2(-texelSize.x, 0.0), c, shown)),
3721
3767
  max(edgeAt(uv, vec2(0.0, texelSize.y), c, shown), edgeAt(uv, vec2(0.0, -texelSize.y), c, shown)));
3722
3768
  outputColor = vec4(outlineColor * edge * edgeStrength, max(inputColor.a, edge));
3723
- }`,tp=class extends Ks.Effect{constructor(n,r,i,o,a={}){super("SelectionOutlineEffect",FR,{blendFunction:Ks.BlendFunction.SCREEN,uniforms:new Map([["selectionMask",new yt.Uniform(null)],["visibleMask",new yt.Uniform(null)],["texelSize",new yt.Uniform(new yt.Vector2)],["outlineColor",new yt.Uniform(new yt.Color(a.visibleEdgeColor??2278750))],["edgeStrength",new yt.Uniform(a.edgeStrength??3)]])});this.scene=n;this.camera=r;this.getObjects=i;this.layer=o;this.maskTarget=new yt.WebGLRenderTarget(1,1,{minFilter:yt.NearestFilter,magFilter:yt.NearestFilter});this.visibleTarget=new yt.WebGLRenderTarget(1,1,{minFilter:yt.NearestFilter,magFilter:yt.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 yt.ShaderMaterial({name:"SelectionOutline.IDs",vertexShader:UR,fragmentShader:zR,uniforms:{objectId:new yt.Uniform(new yt.Vector3),onlySelected:new yt.Uniform(!1)},blending:yt.NoBlending,toneMapped:!1,clipping:!0}),this.maskPass=new Ks.RenderPass(n,r,this.maskMaterial),this.maskPass.skipShadowMapUpdate=!0,this.maskPass.ignoreBackground=!0,this.maskPass.clearPass.overrideClearColor=new yt.Color(0),this.maskPass.clearPass.overrideClearAlpha=0}update(n){let r=HR(this.scene,this.getObjects()),i=[],o=this.camera.layers.mask;try{this.scene.traverseVisible(a=>{if(!(a instanceof yt.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 yt.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 HR(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 yt.Mesh&&r.set(o,s);for(let l of o.children)i(l,s)};return i(e,0),r}var RS=require("react/jsx-runtime");function ES({objects:e,layer:t,options:n}){let r=(0,dg.useThree)(a=>a.scene),i=(0,dg.useThree)(a=>a.camera),o=(0,np.useMemo)(()=>new AS.EffectPass(i,new tp(r,i,()=>e.current,t,n)),[r,i,e,t,n]);return(0,np.useEffect)(()=>()=>o.dispose(),[o]),(0,RS.jsx)("primitive",{object:o,dispose:null})}function OS(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 DS(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 rp=require("@react-three/postprocessing"),Kn=require("postprocessing"),LS=require("three");function IS(e){return e==="linear"?Kn.ToneMappingMode.LINEAR:e==="reinhard"?Kn.ToneMappingMode.REINHARD:Kn.ToneMappingMode.ACES_FILMIC}function ip(e){switch(e){case"verySmall":return Kn.KernelSize.VERY_SMALL;case"small":return Kn.KernelSize.SMALL;case"medium":return Kn.KernelSize.MEDIUM;case"large":return Kn.KernelSize.LARGE;case"veryLarge":return Kn.KernelSize.VERY_LARGE;case"huge":return Kn.KernelSize.HUGE}}function kS(e){switch(e){case"constantMild":return Kn.GlitchMode.CONSTANT_MILD;case"constantWild":return Kn.GlitchMode.CONSTANT_WILD;default:return Kn.GlitchMode.SPORADIC}}function pg(e){let t=new LS.Color(e);return[t.r,t.g,t.b,1]}function BS(e){return e==="radial"?rp.RampType.Radial:e==="mirroredLinear"?rp.RampType.MirroredLinear:rp.RampType.Linear}var pt=require("react/jsx-runtime"),Wa={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new Ir.Color(Fi.color).getHex(),hiddenEdgeColor:new Ir.Color(Fi.color).multiplyScalar(.35).getHex(),kernelSize:Qi.KernelSize.VERY_SMALL,blur:!1,xRay:!1},GR={edgeStrength:3};function WR(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var hc=[],qR=(0,Ht.memo)(function({sceneConfig:t,selectedObjectRef:n,selectedObjectOutlineColor:r,highlightOnHover:i=!1,disabled:o=!1,onOutlineEffect:a,hasMultiSelection:s,multiOutlineObjects:l}){let c=(0,Zs.useThree)(_=>_.scene),d=(0,Zs.useThree)(_=>_.gl),p=(0,Ht.useRef)(null),u=t?.postProcessing,f=n??null,m=u?.outline.enabled===!0,v=m||i,g=(0,Ht.useMemo)(()=>new Ir.Color(r??"#22c55e").getHex(),[r]),b=(0,Ht.useMemo)(()=>({...GR,blendFunction:Qi.BlendFunction.SCREEN,visibleEdgeColor:g}),[g]),h=2;for(;h===u?.outline.selectionLayer||h===u?.selectiveBloom.selectionLayer;)h+=1;let[y,w]=(0,Ht.useState)(()=>d.xr?.isPresenting??!1);(0,Ht.useEffect)(()=>{let _=d.xr;if(!_)return;let C=()=>w(!0),E=()=>w(!1);return _.addEventListener("sessionstart",C),_.addEventListener("sessionend",E),w(_.isPresenting),()=>{_.removeEventListener("sessionstart",C),_.removeEventListener("sessionend",E)}},[d]);let T=c.children.filter(_=>_.isLight),x=(0,Ht.useMemo)(()=>new Ir.Vector2(u?.chromaticAberration.offsetX??.002,u?.chromaticAberration.offsetY??.002),[u?.chromaticAberration.offsetX,u?.chromaticAberration.offsetY]),D=(0,Ht.useMemo)(()=>new Ir.Color(u?.outline.visibleEdgeColor??"#ffffff").getHex(),[u?.outline.visibleEdgeColor]),A=(0,Ht.useMemo)(()=>new Ir.Color(u?.outline.hiddenEdgeColor??"#22090a").getHex(),[u?.outline.hiddenEdgeColor]),S=(0,Ht.useMemo)(()=>pg(u?.ramp.startColor??"#000000"),[u?.ramp.startColor]),M=(0,Ht.useMemo)(()=>pg(u?.ramp.endColor??"#ffffff"),[u?.ramp.endColor]);return!u||y||o?null:(0,pt.jsxs)(pt.Fragment,{children:[u.godRays.enabled===!0&&(0,pt.jsxs)("mesh",{ref:p,position:u.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,pt.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,pt.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,pt.jsxs)(je.EffectComposer,{multisampling:0,enableNormalPass:u.ssao.enabled===!0,autoClear:!1,children:[u.smaa.enabled===!0&&(0,pt.jsx)(je.SMAA,{}),u.ssao.enabled===!0&&(0,pt.jsx)(je.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,pt.jsx)(je.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,pt.jsx)(je.DepthOfField,{focusDistance:u.depthOfField.focusDistance,focusRange:u.depthOfField.focusRange,focalLength:u.depthOfField.focalLength,bokehScale:u.depthOfField.bokehScale}),u.bloom.enabled===!0&&(0,pt.jsx)(je.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,pt.jsx)(je.SelectiveBloom,{selection:f??void 0,lights:T,selectionLayer:u.selectiveBloom.selectionLayer,intensity:u.selectiveBloom.intensity,luminanceThreshold:u.selectiveBloom.luminanceThreshold,luminanceSmoothing:u.selectiveBloom.luminanceSmoothing,kernelSize:ip(u.selectiveBloom.kernelSize),mipmapBlur:u.selectiveBloom.mipmapBlur,inverted:u.selectiveBloom.inverted,ignoreBackground:u.selectiveBloom.ignoreBackground}),v&&(0,pt.jsx)(je.Outline,{ref:a,selection:hc,selectionLayer:u.outline.selectionLayer,blendFunction:Qi.BlendFunction.SCREEN,edgeStrength:m?u.outline.edgeStrength:Wa.edgeStrength,pulseSpeed:m?u.outline.pulseSpeed:Wa.pulseSpeed,visibleEdgeColor:m?D:Wa.visibleEdgeColor,hiddenEdgeColor:m?A:Wa.hiddenEdgeColor,kernelSize:m?ip(u.outline.kernelSize):Wa.kernelSize,blur:m?u.outline.blur:Wa.blur,xRay:m?u.outline.xRay:Wa.xRay}),s&&(0,pt.jsx)(ES,{objects:l,layer:h,options:b}),u.chromaticAberration.enabled===!0&&(0,pt.jsx)(je.ChromaticAberration,{offset:x,radialModulation:u.chromaticAberration.radialModulation,modulationOffset:u.chromaticAberration.modulationOffset}),u.colorAverage.enabled===!0&&(0,pt.jsx)(je.ColorAverage,{}),u.dotScreen.enabled===!0&&(0,pt.jsx)(je.DotScreen,{angle:u.dotScreen.angle,scale:u.dotScreen.scale}),u.glitch.enabled===!0&&(0,pt.jsx)(je.Glitch,{mode:kS(u.glitch.mode),delay:new Ir.Vector2(u.glitch.delay[0],u.glitch.delay[1]),duration:new Ir.Vector2(u.glitch.duration[0],u.glitch.duration[1]),strength:new Ir.Vector2(u.glitch.strength[0],u.glitch.strength[1]),chromaticAberrationOffset:new Ir.Vector2(u.glitch.chromaticAberrationOffset[0],u.glitch.chromaticAberrationOffset[1]),columns:u.glitch.columns,ratio:u.glitch.ratio,active:!0}),u.grid.enabled===!0&&(0,pt.jsx)(je.Grid,{scale:u.grid.scale,lineWidth:u.grid.lineWidth}),u.lensflare.enabled===!0&&(0,pt.jsx)(TS,{config:u.lensflare}),u.godRays.enabled===!0&&(0,pt.jsx)(je.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:ip(u.godRays.kernelSize)}),u.noise.enabled===!0&&(0,pt.jsx)(je.Noise,{premultiply:u.noise.premultiply,opacity:u.noise.opacity,blendFunction:Qi.BlendFunction.ADD}),u.brightnessContrast.enabled===!0&&(0,pt.jsx)(je.BrightnessContrast,{brightness:u.brightnessContrast.brightness,contrast:u.brightnessContrast.contrast}),u.hueSaturation.enabled===!0&&(0,pt.jsx)(je.HueSaturation,{hue:u.hueSaturation.hue,saturation:u.hueSaturation.saturation}),u.toneMapping.enabled===!0&&(0,pt.jsx)(SS,{exposure:u.toneMapping.exposure}),u.vignette.enabled===!0&&(0,pt.jsx)(je.Vignette,{eskil:u.vignette.eskil,offset:u.vignette.offset,darkness:u.vignette.darkness,blendFunction:Qi.BlendFunction.NORMAL}),u.toneMapping.enabled===!0&&(0,pt.jsx)(je.ToneMapping,{mode:IS(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,pt.jsx)(je.Sepia,{intensity:u.sepia.intensity,blendFunction:Qi.BlendFunction.NORMAL}),u.scanline.enabled===!0&&(0,pt.jsx)(je.Scanline,{density:u.scanline.density,blendFunction:Qi.BlendFunction.OVERLAY}),u.pixelation.enabled===!0&&(0,pt.jsx)(je.Pixelation,{granularity:u.pixelation.granularity}),u.ramp.enabled===!0&&(0,pt.jsx)(je.Ramp,{rampType:BS(u.ramp.rampType),rampStart:u.ramp.rampStart,rampEnd:u.ramp.rampEnd,startColor:S,endColor:M,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 XR(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function NS({hoveredObjectRef:e,selectedObjectRefs:t,...n}){let r=(0,Zs.useThree)(p=>p.scene),i=(0,Zs.useThree)(p=>p.camera),o=(0,Zs.useThree)(p=>p.invalidate),[a,s]=(0,Ht.useState)(null),l=(0,Ht.useRef)(hc);l.current=t??hc;let c=(0,Ht.useCallback)(p=>s(p),[]);(0,Ht.useLayoutEffect)(()=>{if(a)return DS(a,i)},[a,i]);let d=(0,Ht.useRef)({effect:null,objects:hc});return(0,Ht.useEffect)(()=>{if(!a)return;let u=n.sceneConfig?.postProcessing?.outline.enabled===!0?WR(r):e&&OS(e)?[e]:hc;d.current.effect===a&&XR(d.current.objects,u)||(d.current={effect:a,objects:u},a.selection.set(u),o())}),(0,Ht.useEffect)(()=>{o()},[t,o]),(0,pt.jsx)(qR,{...n,onOutlineEffect:c,hasMultiSelection:l.current.length>0,multiOutlineObjects:l})}var Jt=require("react/jsx-runtime"),$R=1.5;function mg({runtimeStats:e,children:t,camera:n,backgroundColor:r,shadows:i=!0,sceneConfig:o,selectedObjectRef:a,selectedObjectRefs:s,selectedObjectOutlineColor:l,hoveredObjectRef:c,highlightOnHover:d,renderMode:p="demand",maxDpr:u=2,xrStore:f,rendererCaptureRef:m,preserveDrawingBuffer:v=!1,reduceGpuLoad:g,suspended:b=!1,paused:h=!1,onRendererCreated:y,backend:w="webgl"}){let T=w==="webgpu",x=g??Jl(),D=x?Math.min(u,$R):u,A=i&&!x,S=(0,ri.useMemo)(()=>{if(r)return{background:r};if(!o?.background.enabled)return{background:"transparent"};if(o.background.type==="color")return{background:o.background.color};if(o.background.type==="image"&&o.background.imageUrl.trim()){let R=o.background.imageUrl.trim(),O=Do(R)??R;return{backgroundImage:`url(${JSON.stringify(O)})`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}}return{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}},[r,o]),M=(0,ri.useMemo)(()=>{if(r)return r;let R=o?.background;if(R?.enabled){if(R.type==="color")return R.color;if(R.type==="image"&&R.imageUrl.trim()||R.type==="environment")return null}return"#1c1c1d"},[r,o]),_=(0,ri.useMemo)(()=>{let R=o?.postProcessing;return R?!!(R.glitch.enabled||R.noise.enabled||R.lensflare.enabled&&R.lensflare.animated):!1},[o?.postProcessing]),[C,E]=(0,ri.useState)(!1),L=o?.environment,k=o?.groundShadows,B=(0,ri.useMemo)(()=>{if(!L)return null;if(L.source==="custom"){let R=L.customEnvironmentUrl.trim();return Ix(R)?{files:R}:null}return{preset:L.preset}},[L]),j=(0,Jt.jsxs)(Jt.Fragment,{children:[(0,Jt.jsx)(V0,{captureRef:m}),e&&(0,Jt.jsx)(pS,{...e,reducedGpuLoad:x,shadows:A,postProcessing:!x&&!T}),(0,Jt.jsx)(j0,{}),(0,Jt.jsx)(xS,{cameraConfig:n}),(0,Jt.jsx)(gS,{active:_}),(0,Jt.jsx)(yS,{color:M}),B?(0,Jt.jsx)(Ws,{onError:R=>console.warn("Failed to load environment map:",R),children:(0,Jt.jsx)(ri.Suspense,{fallback:null,children:(0,Jt.jsx)(VS.Environment,{...B,environmentIntensity:L?.intensity??.25,backgroundIntensity:L?.intensity??.25,background:o?.background.enabled===!0&&o.background.type==="environment"})})}):null,(0,Jt.jsx)(vS,{rotation:L?.rotation??0}),f&&(0,Jt.jsx)(hS,{onPresentingChange:E}),k?.enabled&&k.mode==="shadowCatcher"&&!C&&!T&&(0,Jt.jsx)(bS,{position:[0,k.height,0],scale:k.size,opacity:k.intensity,blur:k.borderFade,far:15,resolution:1024,color:"#000000"}),t,(0,Jt.jsx)(NS,{sceneConfig:o,selectedObjectRef:a,selectedObjectRefs:s,selectedObjectOutlineColor:l,hoveredObjectRef:c,highlightOnHover:d,disabled:x||T}),T?(0,Jt.jsx)(KR,{toneMapping:o?.postProcessing.toneMapping}):null]});return(0,Jt.jsx)(gc.Canvas,{frameloop:b||h&&!C?"never":p,onCreated:({gl:R})=>y?.(R),dpr:[1,D],shadows:A?"percentage":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:S,camera:n??{fov:50},gl:T?O0:{preserveDrawingBuffer:v,toneMapping:Ji.NoToneMapping,toneMappingExposure:1},flat:T||void 0,children:f&&!T?(0,Jt.jsxs)(jS.XR,{store:f,children:[(0,Jt.jsx)(fS,{renderMode:p,suspended:b}),j]}):j})}var YR={linear:Ji.LinearToneMapping,reinhard:Ji.ReinhardToneMapping,aces:Ji.ACESFilmicToneMapping};function KR({toneMapping:e}){let t=(0,gc.useThree)(a=>a.gl),n=(0,gc.useThree)(a=>a.invalidate),r=e?.enabled===!0,i=e?.mode??"aces",o=e?.exposure??1;return(0,ri.useEffect)(()=>{t.toneMapping=r?YR[i]:Ji.NoToneMapping,t.toneMappingExposure=r?o:1,n()},[t,n,r,i,o]),null}var ap=require("@react-three/drei"),bc=require("three"),eo=require("react");var op=e=>e*Math.PI/180;function US(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:op(e?.minPolarAngle??0),maxPolarAngle:op(e?.maxPolarAngle??180),minAzimuthAngle:op(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:op(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}var fg=require("react/jsx-runtime");function hg({controlsRef:e,onCameraChange:t,cameraLimits:n,controllerType:r="orbit",onPointerLockExit:i,reducedMotion:o=!1}){let a=r==="orbit",s=(0,eo.useRef)(null);return(0,eo.useEffect)(()=>{if(!a)return s.current?.lock(),()=>{s.current?.unlock()}},[a]),(0,eo.useEffect)(()=>{a&&document.pointerLockElement&&document.exitPointerLock()},[a]),(0,eo.useEffect)(()=>{if(a)return;let l=()=>{document.pointerLockElement||i?.()};return document.addEventListener("pointerlockchange",l),()=>{document.removeEventListener("pointerlockchange",l)}},[a,i]),(0,eo.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let l=e.current;l&&dx(l,o)},[a,e,o]),(0,eo.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,eo.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let l=e.current;if(!l)return;let c=US(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 bc.Box3(new bc.Vector3(...c.panBoundary[0]),new bc.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,fg.jsx)(ap.CameraControls,{ref:e,makeDefault:!0,smoothTime:o?0:.3,dollyToCursor:!0}):(0,fg.jsx)(ap.PointerLockControls,{ref:s,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}var ii=require("react"),yc=require("@react-three/fiber"),FS=require("three");var kr=require("react/jsx-runtime");function HS(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 ZR(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 QR(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 JR(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var e2={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}]},t2={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function zS({light:e,shadows:t,shadowsEnabled:n,environmentRotation:r,modelBounds:i,objectBindings:o,nodeRefs:a}){let s=(0,ii.useRef)(null),l=(0,ii.useRef)(null),c=(0,ii.useRef)(null),d=(0,yc.useThree)(b=>b.camera),p=(0,yc.useThree)(b=>b.scene),u=(0,ii.useMemo)(()=>new FS.Vector3,[]),f=(0,ii.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:HS(e.position,r),[e.position,e.attachedToCamera,e.attachment,r]);(0,yc.useFrame)(()=>{let b=s.current??l.current??c.current;if(!b)return;if(e.attachedToCamera){b.position.copy(d.position);return}let h=e.attachment;if(!h)return;let y=o?sn(o,h.objectId):null,T=(y?o?.[y]:void 0)?.modelObjectId??h.objectId,x=(y?a?.current[y]:void 0)??_r(p,T);x&&(u.fromArray(h.offset),x.localToWorld(u),b.position.copy(u))});let m=n&&t.enabled&&e.castShadow,v=(0,ii.useMemo)(()=>e.type==="directional"&&m&&i&&!e.attachedToCamera?ZR(i,f):null,[e.type,e.attachedToCamera,m,i,f]),g=(0,ii.useMemo)(()=>e.type==="spot"&&m&&i&&!e.attachedToCamera?QR(i,f):null,[e.type,e.attachedToCamera,m,i,f]);return(0,ii.useEffect)(()=>{let b=s.current??c.current;if(!b)return;let[h,y,w]=JR(e,m,i);b.target.position.set(h,y,w),b.target.updateMatrixWorld()},[e,m,i]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,kr.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:v?.position??f,castShadow:m,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":v?.near??.5,"shadow-camera-far":v?.far??40,"shadow-camera-left":-(v?.extent??8),"shadow-camera-right":v?.extent??8,"shadow-camera-top":v?.extent??8,"shadow-camera-bottom":-(v?.extent??8)}):e.type==="point"?(0,kr.jsx)("pointLight",{ref:l,color:e.color,intensity:e.intensity,position:f,distance:e.distance,decay:e.decay,castShadow:m,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,kr.jsx)("spotLight",{ref:c,color:e.color,intensity:e.intensity,position:f,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow: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":g?.near??.5,"shadow-camera-far":g?.far??40}):e.type==="hemisphere"?(0,kr.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function gg({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:r=0,environmentConfig:i,modelBounds:o,objectBindings:a,nodeRefs:s}){let l=e??e2,c=t??t2,d=i?.shadowLight,p=HS([5,10,5],r);return(0,kr.jsxs)(kr.Fragment,{children:[(0,kr.jsx)("ambientLight",{intensity:l.ambient.intensity,color:l.ambient.color}),l.lights.map(u=>(0,kr.jsx)(zS,{light:u,shadows:c,shadowsEnabled:n,environmentRotation:r,modelBounds:o,objectBindings:a,nodeRefs:s},u.id)),d?.enabled&&(0,kr.jsx)(zS,{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 ce=require("react"),Ya=require("@react-three/fiber");var vc=require("@react-three/fiber"),qa=require("three"),Fo=require("three-stdlib"),QS=require("three/examples/jsm/loaders/USDLoader.js");var n2=require("@react-three/drei"),r2=require("@react-three/fiber"),i2=require("react"),GS=require("three");var Qs=require("three-stdlib");function o2(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=GS.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 bg="https://assets.react-immersive.liveroom.dev/three-r184/draco/",yg="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function a2(e,t){if(!Ar(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 WS(e,t={},n){let{dracoDecoderPath:r=bg,ktx2TranscoderPath:i=yg,meshopt:o=!0}=t;if(r){let a=new Qs.DRACOLoader;a.setDecoderPath(r),e.setDRACOLoader(a)}if(o&&e.setMeshoptDecoder(Qs.MeshoptDecoder),i&&n){let a=a2(new Qs.KTX2Loader().setTranscoderPath(i),n);e.setKTX2Loader(a)}e.register((a=>o2(a)))}var vg="KHR_materials_variants",qS="riMaterialVariants",XS="riMaterialVariantGroups";function Bn(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function s2(e){if(!Bn(e)||!Bn(e.extensions))return[];let t=e.extensions[vg];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 $S(e){let t=e.userData?.gltfExtensions;if(!Bn(t))return[];let n=t[vg];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 YS(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 l2=/^\s*(.+?)\s*(?::|\s\/\s)\s*(.+?)\s*$/;function c2(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 u2(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=>c2(r).toString(16).padStart(2,"0")).join("")}`}function d2(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((f,m)=>{(Bn(f)&&Array.isArray(f.primitives)?f.primitives:[]).forEach((g,b)=>{if(!Bn(g))return;let h=Bn(g.extensions)?g.extensions[vg]:void 0;if(!Bn(h)||!Array.isArray(h.mappings))return;let y=Bn(g.attributes)?g.attributes.POSITION:void 0,w=typeof y=="number"?i[y]:void 0,T=Bn(w)&&typeof w.count=="number"?w.count:1;for(let x of h.mappings)if(!(!Bn(x)||!Number.isInteger(x.material)||!Array.isArray(x.variants)))for(let D of x.variants){if(!Number.isInteger(D)||!a[D])continue;a[D].add(`${m}/${b}`);let A=s[D],S=x.material;A.set(S,(A.get(S)??0)+T)}})});let l=t.map((f,m)=>{let v=null;for(let[b,h]of s[m])(v===null||h>(s[m].get(v)??0))&&(v=b);let g=v===null?void 0:u2(o[v]);return{name:f,label:f,...g?{swatch:g}:{}}}),c=t.map(()=>-1),d=[],p=new Map;return t.forEach((f,m)=>{let v=l2.exec(f);if(!v)return;let[,g,b]=v;p.has(g)||(p.set(g,d.length),d.push({name:g,members:[]})),c[m]=p.get(g),d[c[m]].members.push(m),l[m].label=b}),t.map((f,m)=>m).filter(f=>c[f]<0).sort((f,m)=>+(a[f].size===0)-+(a[m].size===0)).forEach(f=>{let m=d.map((b,h)=>({group:b,groupIndex:h})).filter(({group:b})=>b.name===null&&b.members.some(h=>a[f].size===0||a[h].size===0?!1:[...a[f]].some(y=>a[h].has(y)))).map(({groupIndex:b})=>b);if(m.length===0&&a[f].size===0){let b=d.findIndex(h=>h.name===null);b>=0&&m.push(b)}if(m.length===0){c[f]=d.length,d.push({name:null,members:[f]});return}let[v,...g]=m;for(let b of g){for(let h of d[b].members)c[h]=v;d[v].members.push(...d[b].members),d[b].members=[]}c[f]=v,d[v].members.push(f)}),d.filter(f=>f.members.length>0).sort((f,m)=>Math.min(...f.members)-Math.min(...m.members)).map(f=>({name:f.name,variants:[...f.members].sort((m,v)=>m-v).map(m=>l[m])}))}function sp(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 Js(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 KS(e){let t=e.parser,n=s2(t?.json);if(!(!t||n.length===0))return e.scene.userData[qS]=n,e.scene.userData[XS]=d2(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 xg(e){let t=e.userData?.[qS];return Array.isArray(t)&&t.every(n=>typeof n=="string")?t:[]}function lp(e){let t=e.userData?.[XS];if(Array.isArray(t))return t;let n=xg(e);return n.length>0?[{name:null,variants:n.map(r=>({name:r,label:r}))}]:[]}function wg(e,t){let{materialVariant:n,...r}=e;return{...r,activeVariants:t}}var up=class extends qa.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,r,i,o){let a=performance.now(),s={format:this.options.source.format,name:this.options.source.entryPath??ja(n),sourceBytes:this.options.source.sourceBytes??null,failedResources:[]},l=c=>{s.sourceBytes===null&&c.lengthComputable&&c.total>0&&(s.sourceBytes=c.total),i?.(c)};this.loadAsset(n,l,s).then(c=>{s.loadDurationMs=Math.max(0,performance.now()-a),ec(c.scene,s),r(c)}).catch(c=>{s.loadDurationMs=Math.max(0,performance.now()-a),c&&typeof c=="object"&&ec(c,s),o?.(c)})}async loadAsset(n,r,i){let o=f2(this.options.source);o.onError=c=>{let d=Object.entries(this.options.source.resourceUrls??{}).find(([,u])=>u===c)?.[0],p=Bh(d??c);i.failedResources.includes(p)||i.failedResources.push(p)};let{format:a}=this.options.source;if(a==="obj")return p2(n,o,this.options.source,r);if(a==="fbx"){let c=Sg(this,new Fo.FBXLoader(o)),d=b2(n,this.options.source);d&&c.setResourcePath(d);let p=await c.loadAsync(n,r);return cp(p,"FBXMesh",!1),{scene:p,animations:p.animations??[]}}if(a==="stl"||a==="ply"){let c=await m2(n,o,r),d=aw(this.options.source.entryPath??n,a==="stl"?"STL model":"PLY model"),p=a==="stl"?sw(c,d):lw(c,d);return cp(p,a==="stl"?"STLMesh":"PLYMesh",!0),{scene:p,animations:[]}}if(a==="usdz"){let d=await Sg(this,new QS.USDLoader(o)).loadAsync(n,r);return cp(d,"USDZMesh",!1),{scene:d,animations:d.animations??[]}}let s=Sg(this,new Fo.GLTFLoader(o));WS(s,this.options.decoderConfig,this.options.renderer),s.register(c=>{let d=c.json,p=u=>Array.isArray(u)?u.filter(f=>typeof f=="string"):[];return i.extensionsUsed=p(d.extensionsUsed),i.extensionsRequired=p(d.extensionsRequired),{name:"RI_asset_diagnostics",beforeRoot:()=>null}});let l=await s.loadAsync(n,r);return{scene:l.scene,animations:l.animations??[],materialVariants:KS(l)}}};b0(e=>{vc.useLoader.clear(up,e)});function xc(e,t={},n,r){let i=(0,vc.useThree)(s=>s.gl),o=tc(e),a=n?{...o,format:n}:o;return(0,vc.useLoader)(up,e,s=>{s.configure({source:a,decoderConfig:t,renderer:i})},r)}async function p2(e,t,n,r){let i=await ZS(e,t,r),o=new Fo.OBJLoader(t),a=h2(i);if(a){let l=g2(a,e,n);if(l)try{let c=await ZS(l.url,t),p=new Fo.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 cp(s,"OBJMesh",!0),{scene:s,animations:[]}}function cp(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 ZS(e,t,n){let r=new qa.FileLoader(t);return r.setResponseType("text"),r.loadAsync(e,n)}function m2(e,t,n){let r=new qa.FileLoader(t);return r.setResponseType("arraybuffer"),r.loadAsync(e,n)}function Sg(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function f2(e){let t=new qa.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(r=>{if(/^(?:blob:|data:)/i.test(r))return r;let i=pp(eM(r).split(/[?#]/)[0]),o=n[i];if(o)return o;let a=dp(e.entryPath??""),s=pp(a?`${a}/${i}`:i);return n[s]??r}),t}function h2(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function g2(e,t,n){if(n.resourceUrls&&n.entryPath){let r=pp(`${dp(n.entryPath)}/${eM(e)}`),i=n.resourceUrls[r];if(!i)return null;let o=dp(r);return{url:i,basePath:o?`${o}/`:""}}try{let r=new URL(e,t).href;return{url:r,basePath:JS(r)}}catch{return null}}function b2(e,t){if(t.resourceUrls&&t.entryPath){let n=dp(t.entryPath);return n?`${n}/`:""}return JS(e)}function JS(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function dp(e){let t=pp(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function pp(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 eM(e){try{return decodeURI(e)}catch{return e}}var Br=require("react");function tM(e,t,n){let[r,i]=(0,Br.useState)({}),o=(0,Br.useRef)(new Map),[a,s]=(0,Br.useState)(0),l=(0,Br.useRef)(t);l.current=t;let c=(0,Br.useRef)(n);c.current=n;let d=(0,Br.useCallback)((p,u)=>{l.current?.some(f=>f.url===p)&&i(f=>f[p]===u?f:{...f,[p]:u})},[]);return(0,Br.useEffect)(()=>{let p=new Set(t?.map(f=>f.url)),u=!1;for(let[f,m]of o.current)p.has(f)&&r[f]===m&&m.parent===e||(m.removeFromParent(),o.current.delete(f),u=!0);for(let[f,m]of Object.entries(r))!p.has(f)||o.current.get(f)===m||(e.add(m),o.current.set(f,m),u=!0,c.current?.(f,m));i(f=>{let m=Object.entries(f).filter(([v])=>p.has(v));return m.length===Object.keys(f).length?f:Object.fromEntries(m)}),u&&s(f=>f+1)},[e,t,r]),(0,Br.useEffect)(()=>()=>{o.current.forEach(p=>p.removeFromParent()),o.current.clear()},[]),{rootsByUrl:r,revision:a,onSourceReady:d}}var ln=require("three");function wc(e){e.updateWorldMatrix(!0,!0);let t=new ln.Matrix4().copy(e.matrixWorld).invert(),n=new ln.Box3,r=new ln.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 ln.Matrix4().multiplyMatrices(t,o.matrixWorld);r.copy(a.geometry.boundingBox).applyMatrix4(s),n.union(r),i=!0}),i?n:null}function Xa(e){let t=wc(e);return t?t.getCenter(new ln.Vector3):new ln.Vector3}function nM(e,t="XYZ"){return new ln.Quaternion().setFromEuler(new ln.Euler(e[0],e[1],e[2],t))}function y2(e,t,n,r,i="XYZ",o){let a=new ln.Vector3(...r).multiply(new ln.Vector3(...n));o&&a.applyMatrix4(Os(o)),a.applyQuaternion(nM(t,i));let s=a.add(new ln.Vector3(...e));return[s.x,s.y,s.z]}function mp(e,t,n,r="XYZ",i){return{point:[...e],offset:y2([0,0,0],t,n,e,r,i)}}function Sc(e,t,n,r,i="XYZ",o){if(!r)return e;let a=new ln.Vector3(...r.point).multiply(new ln.Vector3(...n));return o&&a.applyMatrix4(Os(o)),a.applyQuaternion(nM(t,i)),new ln.Vector3(...e).add(new ln.Vector3(...r.offset)).sub(a).toArray()}var ct=require("three"),Mg=require("three-stdlib");function rM(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 to=require("three");function iM(e){let t=e._loopCount;return e.loop===to.LoopPingPong&&(t&1)===1}function v2(e){return iM(e)?e.getClip().duration-e.time:e.time}function oM({root:e,clips:t,getClipConfig:n,onChange:r}){let i=new to.AnimationMixer(e),o=new Map;for(let{clip:M,sourceName:_}of t)o.set(_,i.clipAction(M));let a=new Map,s=new Set,l=new Map,c=1,d=M=>typeof M=="string",p=M=>d(M)?a.has(M)?[M]:[]:[...a.keys()],u=(M,_)=>{let C=Iw(n(_));C==="once"?M.setLoop(to.LoopOnce,1):C==="ping-pong"?M.setLoop(to.LoopPingPong,1/0):M.setLoop(to.LoopRepeat,1/0),M.clampWhenFinished=C==="once"},f=M=>{M.action.setEffectiveTimeScale(M.reverse?-M.speed:M.speed)},m=M=>{let _=a.get(M);_&&(_.action.stop(),a.delete(M))},v=(M,_={})=>{let C=o.get(M);if(!C||n(M)?.hidden)return;let E=Number.isFinite(_.fade)&&_.fade>0?_.fade:0,L=_.reverse??!1;if(!_.alongside)for(let[R,O]of[...a])R!==M&&(E>0?(a.delete(R),O.action.fadeOut(E),s.add(O.action)):m(R));s.delete(C)&&C.stop();let k=C.getClip().duration,B=a.get(M),j=()=>{C.reset(),L&&(C.time=k),C.play()};if(!B)j(),E>0&&C.fadeIn(E);else{let R=L?C.time<=0:C.time>=k;B.finished&&R&&j(),C.paused=!1,C.enabled=!0,a.delete(M)}u(C,M),B={action:C,speed:n(M)?.speed??l.get(M)??c,reverse:L,finished:!1},B.speed=Ud(B.speed),f(B),a.set(M,B),r()},g=M=>{for(let _ of p(M))a.get(_).action.paused=!0;r()},b=M=>{for(let _ of p(M))m(_);if(!d(M)){for(let _ of s)_.stop();s.clear()}r()},h=(M,_)=>{let C=Ud(M);d(_)?l.set(_,C):c=C;for(let E of p(_)){let L=a.get(E);l.set(E,C),L.speed=C,f(L)}r()},y=(M,_)=>{for(let C of p(_)){let E=a.get(C),L=E.action.getClip().duration,k=Math.min(Math.max(M,0),L);E.action.time=iM(E.action)?L-k:k,E.finished&&(E.finished=!1,E.action.paused=!0)}i.update(0),r()},w=()=>{for(let[M,_]of[...a]){let C=n(M);if(C?.hidden){m(M);continue}u(_.action,M),C?.speed!==void 0&&(_.speed=Ud(C.speed),f(_))}r()},T=M=>{for(let _ of a.values())_.action===M.action&&(_.finished=!0);r()};return i.addEventListener("finished",T),{play:v,pause:g,stop:b,setSpeed:h,seek:y,getState:()=>{let M=[...a].map(([C,E])=>({clip:C,status:E.finished?"finished":E.action.paused?"paused":"playing",time:v2(E.action),duration:E.action.getClip().duration,speed:E.speed,reverse:E.reverse})),_=M[M.length-1];return{currentClip:_?.clip??null,isPlaying:M.some(C=>C.status==="playing"),speed:_?.speed??c,time:_?.time??0,duration:_?.duration??0,active:M}},applyClipConfigs:w,isRunning:()=>{if(s.size>0)return!0;for(let{action:M}of a.values())if(!M.paused&&M.enabled)return!0;return!1},update:M=>{i.update(M);for(let _ of s)(!_.enabled||_.getEffectiveWeight()<=0)&&(_.stop(),s.delete(_))},dispose:()=>{i.removeEventListener("finished",T),i.stopAllAction(),i.uncacheRoot(e),a.clear(),s.clear()}}}var Nr=require("three");function fp(e){if(Tw(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new Nr.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 Nr.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof Nr.Color&&n.emissive.copy(t.color)):(t.color instanceof Nr.Color&&n.color.copy(t.color),t.map instanceof Nr.Texture&&(n.map=t.map),t.emissive instanceof Nr.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof Nr.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 hp(e){if(Pw(e))return e.clone();let t=new Nr.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(Zi(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 gp(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=Zi(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=Zi(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 Oi=require("three");function aM(e,t,n,r){let i=ei(t),o=Wl(n,i),a=Aw(r,t),s=Ew(r,t),l=Rw(r,t);return a||s||l?cd(e.userData,t,o,n,a??[0,0],s??1,l??0):(ud(e.userData,t),o)}function Cn(e,t,n,r){if(!n){ud(e.userData,t);return}let i=jd[t];e[i]=aM(e,t,n,r)}function bp(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 Oi.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??Oi.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??Oi.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(Zi(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(Zi(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new Oi.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 Oi.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 Oi.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let r=Xt(t,"texture"),i=Xt(t,"metalnessMap"),o=Xt(t,"roughnessMap"),a=Xt(t,"emissiveMap"),s=Xt(t,"alphaMap"),l=Xt(t,"normalMap"),c=Xt(t,"bumpMap"),d=Xt(t,"aoMap"),p=Xt(t,"displacementMap"),u=Xt(t,"clearcoatMap"),f=Xt(t,"clearcoatRoughnessMap"),m=Xt(t,"clearcoatNormalMap"),v=Xt(t,"anisotropyMap"),g=Xt(t,"transmissionMap"),b=Xt(t,"thicknessMap"),h=Xt(t,"sheenColorMap"),y=Xt(t,"sheenRoughnessMap"),w=Xt(t,"specularIntensityMap"),T=Xt(t,"specularColorMap");if(r?(e.map=aM(e,"texture",r,t),e.color.set(n??"#ffffff"),e.vertexColors=!1):(ud(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=Dw(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=Ow(t.side)),Cn(e,"normalMap",l,t),l||t?.normalScale!==void 0){let x=t?.normalScale??Math.abs(Zi(e.userData.baseNormalScale).x);e.normalScale.set(x,t?.flipNormalY?-x:x)}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",f,t),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),Cn(e,"clearcoatNormalMap",m,t),m||t?.clearcoatNormalScale!==void 0){let x=t?.clearcoatNormalScale??Math.abs(Zi(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(x,t?.flipClearcoatNormalY?-x:x)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),Cn(e,"sheenColorMap",h,t),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),Cn(e,"sheenRoughnessMap",y,t),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),Cn(e,"anisotropyMap",v,t),t?.transmission!==void 0&&(e.transmission=t.transmission),Cn(e,"transmissionMap",g,t),t?.thickness!==void 0&&(e.thickness=t.thickness),Cn(e,"thicknessMap",b,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",w,t),t?.specularColor&&e.specularColor.set(t.specularColor),Cn(e,"specularColorMap",T,t),e.transparent=e.opacity<1||e.transmission>0||e.blending!==Oi.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function Mc(e){return e.material}function Di(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function er(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function yp(e,t){return Array.isArray(e)?e[t]:e}var Vr=require("three");var sM=new WeakMap,lM=new Vr.Vector3,x2=new Vr.Vector3,w2=new Vr.Vector3,S2=new Vr.Box3,cM=new Vr.Matrix4;function el(e){return"data"in e?e.data.version:e.version}function M2(e){var l;let{geometry:t,skeleton:n}=e,r=t.getAttribute("position"),i=t.getAttribute("skinIndex"),o=t.getAttribute("skinWeight"),a=sM.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]===el(r)&&a.versions[1]===el(i)&&a.versions[2]===el(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:[el(r),el(i),el(o)],bindMatrix:e.bindMatrix.clone(),inverses:n.boneInverses.map(c=>c.clone()),bones:[],weightDeviation:0};e:for(let c=0;c<r.count;c++){lM.fromBufferAttribute(r,c).applyMatrix4(e.bindMatrix);let d=0;for(let u=0;u<4;u++){let f=o.getComponent(c,u);if(f===0)continue;let m=i.getComponent(c,u);if(!Number.isFinite(f)||f<0||!Number.isInteger(m)||!n.bones[m]||!s.inverses[m]){s.bones=null;break e}d+=f,((l=s.bones)[m]??(l[m]=new Vr.Box3)).expandByPoint(x2.copy(lM).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 sM.set(e,s),s}function vp(e,{precise:t=!1,updateFallbacks:n=!0}={}){e.updateMatrixWorld(!0),e.traverse(r=>{if(!Kt(r))return;let i=r;if(!i.skeleton)return;let o=Oa(i);o&&i.bindMatrixInverse.copy(o);let s=!!i.geometry.morphAttributes.position?.length?null:M2(i);if(!t&&!s?.bones&&!n&&i.boundingBox&&i.boundingSphere)return;let l=i.boundingBox??(i.boundingBox=new Vr.Box3),c=i.boundingSphere??(i.boundingSphere=new Vr.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,w2))}else{for(let d=0;d<s.bones.length;d++){let p=s.bones[d];p&&(cM.multiplyMatrices(i.bindMatrixInverse,i.skeleton.bones[d].matrixWorld),l.union(S2.copy(p).applyMatrix4(cM)))}if(!l.isEmpty()){let d=l.min,p=l.max,u=i.bindMatrixInverse.elements,f=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+f*1e-10)}}l.getBoundingSphere(c)})}var $a=require("react"),uM=require("@react-three/fiber");function dM(){let e=(0,uM.useThree)(i=>i.gl.domElement),t=(0,$a.useRef)(void 0),n=(0,$a.useCallback)(i=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=i},[e]),r=(0,$a.useCallback)(()=>{let i=t.current;i!==void 0&&(e.style.cursor=i,t.current=void 0)},[e]);return(0,$a.useEffect)(()=>()=>{r()},[r]),{setCanvasCursor:n,restoreCanvasCursor:r}}var Ka=require("react/jsx-runtime");function xp(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(Sc(t?.position??r.position.toArray(),[e.rotation.x,e.rotation.y,e.rotation.z],e.scale.toArray(),t?.pivot,r.rotation.order,t?.shear)),_i(e,t?.shear))}function cn(e,t=!1){if(!e||typeof e!="object")return"-";let n=e;return[n.channel??0,t?n.format??"":"",n.isVideoTexture?n.colorSpace??"":""].join(":")}function tl(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===ct.NormalBlending&&t.alphaToCoverage!==!0;return[cn(t.map),cn(t.aoMap),cn(t.lightMap),cn(t.bumpMap),cn(t.normalMap,!0),t.normalMap?t.normalMapType:"",cn(t.displacementMap),cn(t.emissiveMap),cn(t.metalnessMap),cn(t.roughnessMap),i,cn(i?t.anisotropyMap:null),n,cn(n?t.clearcoatMap:null),cn(n?t.clearcoatNormalMap:null,!0),cn(n?t.clearcoatRoughnessMap:null),r,cn(r?t.sheenColorMap:null),cn(r?t.sheenRoughnessMap:null),cn(t.specularColorMap),cn(t.specularIntensityMap),o,cn(o?t.transmissionMap:null),cn(o?t.thicknessMap:null),cn(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,!!t.vertexColors,t.side,a].join("|")}var _2={};function _c({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:f,panelHoveredItem:m,sceneConfig:v,zoomOnSelected:g=!0,highlightOnHover:b=!0,decoderConfig:h,modelFormat:y,onLoadProgress:w,explodeFactor:T=0,suspendBindingTransforms:x=!1,originalNodePoses:D,mergeModels:A,onMergeModelLoaded:S,onMergeModelError:M,pulses:_=_2}){let C=xc(e,h,y,w),E=(0,Ya.useThree)(U=>U.invalidate),[L,k]=(0,ce.useState)(null),B=(0,ce.useRef)(null),{setCanvasCursor:j,restoreCanvasCursor:R}=dM();(0,ce.useEffect)(()=>{(!i||!b)&&(k(null),a?.(null),R())},[i,b,a,R]);let O=(0,ce.useMemo)(()=>{let U=Mg.SkeletonUtils.clone(C.scene),z=Us(C.scene);return z&&ec(U,z),eg(U),U},[C.scene]),{rootsByUrl:N,revision:H,onSourceReady:Y}=tM(O,A,S),ue=(0,ce.useRef)(new Map),[be,X]=(0,ce.useState)(0),G=(0,ce.useCallback)((U,z,F)=>{Y(U,z),ue.current.get(U)!==F&&(ue.current.set(U,F),X(Z=>Z+1))},[Y]);(0,ce.useEffect)(()=>{let U=new Set(A?.map(F=>F.url)),z=!1;for(let F of ue.current.keys())U.has(F)||(ue.current.delete(F),z=!0);z&&X(F=>F+1)},[A]);let J=(0,ce.useMemo)(()=>cr(O),[O,H]),ee=J.nodesById,{originalMaterials:fe,ownMeshes:K}=(0,ce.useMemo)(()=>{let U=new WeakMap,z=new WeakSet;return O.traverse(F=>{_n(F)&&(U.set(F,F.material),z.add(F))}),{originalMaterials:U,ownMeshes:z}},[O]);(0,ce.useMemo)(()=>{O.traverse(U=>{_n(U)&&!fe.has(U)&&fe.set(U,U.material)})},[O,H,fe]);let oe=C.materialVariants,pe=(v?Js(v.model):[]).join(`
3724
- `),[De,te]=(0,ce.useState)(null);(0,ce.useEffect)(()=>{let U=pe?pe.split(`
3725
- `):[],z=[];for(let Z of U){let Se=oe?oe.names.indexOf(Z):-1;if(Se>=0){z.push(Se);continue}console.warn(`[react-immersive] The model has no material variant "${Z}".`+(oe?` Its variants are: ${oe.names.join(", ")}.`:" It has no material variants."))}if(!oe||z.length===0){te(null);return}let F=!1,ne=[];return O.traverse(Z=>{if(!_n(Z)||!K.has(Z))return;let Se=YS($S(Z),z);Se!==null&&ne.push(oe.resolveMaterial(Se,Z).then(Te=>[Z,Te]))}),Promise.all(ne).then(Z=>{F||te({scene:O,key:pe,materials:new Map(Z)})}).catch(Z=>{F||console.warn(`[react-immersive] Material variants "${U.join('", "')}" failed to load.`,Z)}),()=>{F=!0}},[O,K,oe,pe]);let Fe=De?.scene===O?De.materials:void 0,We=U=>Fe?.get(U)??fe.get(U)??Mc(U);(0,ce.useEffect)(()=>{J.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(J.duplicateNames))},[J]);let ge=(0,ce.useMemo)(()=>new WeakMap,[O]),Ce=(0,ce.useMemo)(()=>{let U=new WeakMap;if(O.traverse(z=>{let F=ge.get(z);F||(F={position:z.position.clone(),rotation:z.rotation.clone(),scale:z.scale.clone()},ge.set(z,F)),U.set(z,{position:F.position.clone(),rotation:F.rotation.clone(),scale:F.scale.clone()})}),D)for(let[z,F]of Object.entries(D)){let ne=ee[z],Z=ne&&U.get(ne);Z&&(Z.position.fromArray(F.position),F.rotation&&Z.rotation.set(F.rotation[0],F.rotation[1],F.rotation[2],Z.rotation.order),F.scale&&Z.scale.fromArray(F.scale))}return U},[O,ee,D,ge]);(0,ce.useEffect)(()=>{let U=!1,z=null,F=null,ne=window,Z=Object.entries(ee).filter(([,It])=>_n(It)),Se=new ct.Box3,Te=[],Nt=0;O.traverse(It=>{!_n(It)||It.userData[za]||(It.castShadow=!1,It.receiveShadow=!0)});let wt=()=>{if(U)return;let It=new Set,rn=Se.getSize(new ct.Vector3),Le=new ct.Vector3;for(let{name:dn,box:qn}of Te)qn.getSize(Le),Le.x>rn.x*.7&&Le.z>rn.z*.7&&Le.y>rn.y*.4&&It.add(dn);O.traverse(dn=>{if(!_n(dn)||dn.userData[za])return;let qn=ur(dn);dn.castShadow=!qn||!It.has(qn),dn.receiveShadow=!0}),E()},Ot=()=>{U||(ne.requestIdleCallback?z=ne.requestIdleCallback(St,{timeout:100}):F=window.setTimeout(()=>St(),0))},St=It=>{if(z=null,F=null,U)return;let rn=performance.now(),Le=0;for(;Nt<Z.length&&!(Le>0&&!(It?It.didTimeout?Le<16:It.timeRemaining()>1:performance.now()-rn<8));){let[dn,qn]=Z[Nt];Nt+=1,Le+=1;let ar=new ct.Box3().setFromObject(qn);ar.isEmpty()||(Te.push({name:dn,box:ar}),Se.union(ar))}Nt<Z.length?Ot():wt()};return Ot(),()=>{U=!0,z!==null&&ne.cancelIdleCallback?.(z),F!==null&&window.clearTimeout(F)}},[E,ee,O]),(0,ce.useEffect)(()=>{vp(O,{precise:!0})},[O,H]),(0,ce.useEffect)(()=>{let U=new AbortController;return _d(O,U.signal),()=>{U.abort(),ic(O)}},[O,H]);let Je=(0,ce.useMemo)(()=>{let U={};for(let[z,F]of Object.entries(t))U[F.modelObjectId??z]=z;return U},[t]),ve=(0,ce.useMemo)(()=>Object.entries(t).map(([U,z])=>`${U}${z.modelObjectId??U}`).sort().join(""),[t]),qe=(0,ce.useMemo)(()=>Object.entries(t).map(([U,z])=>JSON.stringify([U,z.modelObjectId??U,z.transform??null])).sort().join(""),[t]),he=(0,ce.useRef)(new Map);(0,ce.useEffect)(()=>{let U=new Map,z=new Map;for(let[Z,Se]of Object.entries(t)){if(!Se.transform)continue;let Te=ee[Se.modelObjectId??Z];Te&&(U.set(Te,Se.transform),z.set(Te,Si(Te)))}let F=new Set([...he.current.keys(),...U.keys()]);for(let Z of F){xp(Z,void 0,Ce);for(let Se of Si(Z))Jr(Se)}O.updateMatrixWorld(!0);let ne=new Map;for(let Z of z.values())for(let Se of Z)if(!ne.has(Se)){let Te=[];for(let Nt=Se;Nt;Nt=Nt.parent)Te.unshift(Nt.matrix.clone());ne.set(Se,{world:Se.matrixWorld.clone(),transforms:Te})}for(let[Z,Se]of U)xp(Z,Se,Ce);he.current=U,O.updateMatrixWorld(!0);for(let[Z,Se]of ne)Oo(Z,Se.world,Se.transforms);E()},[O,ee,Ce,qe,E]),(0,ce.useEffect)(()=>()=>{for(let U of Si(O))Jr(U)},[O]);let de=(0,ce.useMemo)(()=>{let U={};for(let[z,F]of Object.entries(t)){let ne=F.modelObjectId??z,Z=ee[ne];if(!_n(Z))continue;let Se=We(Z);Se&&(U[z]=Di(Se,Te=>{let Nt=fp(Te),wt=hp(Nt??new ct.MeshStandardMaterial);return gp(wt),wt}))}return U},[ee,ve,fe,Fe]);(0,ce.useEffect)(()=>(f&&(f.current=de),()=>{f?.current===de&&(f.current={})}),[de,f]),(0,ce.useEffect)(()=>()=>{for(let U of Object.values(de))er(U,z=>{Ox(z.userData),z.dispose()})},[de]);let ze=v?.model.shading??"lit",Pe=v?.model.renderer??"pbr",ft=v?.wireframe.enabled??!1,At=v?.wireframe.color??"#93c5fd",se=v?.wireframe.opacity??1,Re=(0,ce.useMemo)(()=>{let U={};if(ze!=="unlit")return U;for(let[z,F]of Object.entries(de))U[z]=Di(F,ne=>{let Z=new ct.MeshBasicMaterial;return Z.color.copy(ne.color),Z.map=ne.map,Z.alphaMap=ne.alphaMap,Z.alphaTest=ne.alphaTest,Z.transparent=ne.transparent,Z.opacity=ne.opacity,Z.side=ne.side,Z});return U},[de,ze]),Ee=(0,ce.useMemo)(()=>{let U={};if(ze!=="normals")return U;for(let[z,F]of Object.entries(de))U[z]=Di(F,()=>new ct.MeshNormalMaterial);return U},[de,ze]),nt=(0,ce.useMemo)(()=>{let U={};if(ze!=="lit"||Pe!=="matcap")return U;let z=dd();for(let[F,ne]of Object.entries(de))U[F]=Di(ne,Z=>{let Se=new ct.MeshMatcapMaterial;return Se.matcap=z,Se.color.copy(Z.color),Se.alphaMap=Z.alphaMap,Se.alphaTest=Z.alphaTest,Se.side=Z.side,Se});return U},[de,ze,Pe]);(0,ce.useEffect)(()=>()=>{for(let U of Object.values(Re))er(U,z=>z.dispose());for(let U of Object.values(Ee))er(U,z=>z.dispose());for(let U of Object.values(nt))er(U,z=>z.dispose())},[Re,Ee,nt]);let Qe=U=>ze==="normals"?Ee[U]:ze==="unlit"?Re[U]:Pe==="matcap"?nt[U]:de[U],ut=(0,ce.useRef)(c);ut.current=c,(0,ce.useEffect)(()=>{ut.current?.(O)},[O]);let Ke=(0,ce.useMemo)(()=>{let U={};for(let[z,F]of Object.entries(t)){let ne=F.modelObjectId??z,Z=ee[ne];Z&&(U[z]=Z)}return U},[ee,ve]);(0,ce.useEffect)(()=>(p.current=Ke,u?.(),()=>{p.current===Ke&&(p.current={})}),[Ke,p,u]);let xe=(0,ce.useRef)({});(0,ce.useEffect)(()=>()=>{for(let U of Object.values(xe.current))for(let[z,F]of Object.entries(U))F&&Hi(F,ei(z));xe.current={}},[]);let et=(0,ce.useRef)(new Map);(0,ce.useEffect)(()=>()=>{et.current.clear()},[]);let xt=(0,ce.useMemo)(()=>{let U=new Map;for(let[z,F]of Object.entries(t)){let ne=m===F||m?.id===F.id||m?.modelObjectId===F.modelObjectId,Z=b&&(L===z||ne),Se=Z||n===z;(Z||Se)&&U.set(z,{emissive:Z,matcap:Se})}return U},[t,b,L,n,m]),Dn=(0,ce.useRef)(xt);Dn.current=xt,(0,ce.useEffect)(()=>{let U=new Set;for(let[z,F]of Object.entries(t)){U.add(z);let ne=F.modelObjectId??z,Z=ee[ne];if(!_n(Z))continue;if(F.removed){Z.parent&&(et.current.set(Z,Z.parent),Z.parent.remove(Z),O.dispatchEvent({type:"childremoved",child:Z}));continue}let Se=et.current.get(Z);Se&&(Z.parent||(Se.add(Z),O.dispatchEvent({type:"childadded",child:Z})),et.current.delete(Z)),Z.visible=F.visible!==!1;let Te=de[z];if(!Te)continue;if(Pe!=="uv-checker"){let Le=Qe(z);Le&&(Z.material=Le)}if(F.visible===!1)continue;let Nt=Re[z],wt=nt[z],Ot=r[z]??r[F.modelObjectId??z],St=F.style?.material,It=xe.current[z]??{};for(let Le of zo){let dn=Xt(St,Le),qn=It[Le];if(qn===dn)continue;let ar=ei(Le);qn&&Hi(qn,ar),dn?(ks(dn,ar,E),It[Le]=dn):delete It[Le]}Object.keys(It).length>0?xe.current[z]=It:delete xe.current[z];let rn=Ot?.hex??St?.baseColor;er(Te,(Le,dn)=>{let qn=tl(Le);bp(Le,St,rn);let ar=Le.userData.reactImmersiveConfiguredEmissive;ar?.isColor?ar.copy(Le.emissive):Le.userData.reactImmersiveConfiguredEmissive=Le.emissive.clone();let xl=Dn.current.get(z);xl?.emissive&&Le.emissive.add(Da),qn!==tl(Le)&&(Le.needsUpdate=!0);let Jn=yp(Nt,dn);if(Jn){let vo=tl(Jn);Jn.color.copy(Le.color),Jn.map=Le.map,Jn.vertexColors=Le.vertexColors,Jn.alphaMap=Le.alphaMap,Jn.alphaTest=Le.alphaTest,Jn.transparent=Le.transparent,Jn.opacity=Le.opacity,Jn.side=Le.side,vo!==tl(Jn)&&(Jn.needsUpdate=!0)}let Ln=yp(wt,dn);if(Ln){let vo=tl(Ln);xl?.matcap?Ln.color.set(Fi.color):Ln.color.copy(Le.color),Ln.map=Le.map,Ln.vertexColors=Le.vertexColors,Ln.alphaMap=Le.alphaMap,Ln.alphaTest=Le.alphaTest,Ln.transparent=Le.transparent,Ln.opacity=Le.opacity,Ln.side=Le.side,vo!==tl(Ln)&&(Ln.needsUpdate=!0)}})}for(let z of Object.keys(xe.current))if(!U.has(z)){for(let[F,ne]of Object.entries(xe.current[z]))ne&&Hi(ne,ei(F));delete xe.current[z]}E()},[t,ee,de,Re,Ee,nt,r,ze,Pe,E]);let pi=(0,ce.useRef)(new Map);(0,ce.useEffect)(()=>{let U=pi.current,z=new Set([...U.keys(),...xt.keys()]),F=!1;for(let ne of z){let Z=U.get(ne),Se=xt.get(ne),Te=!!Z?.emissive!=!!Se?.emissive,Nt=!!Z?.matcap!=!!Se?.matcap;if(!Te&&!Nt)continue;F=!0;let wt=de[ne],Ot=nt[ne];wt&&er(wt,(St,It)=>{let rn=St.userData.reactImmersiveConfiguredEmissive;Te&&rn?.isColor&&(St.emissive.copy(rn),Se?.emissive&&St.emissive.add(Da));let Le=yp(Ot,It);Nt&&Le&&(Se?.matcap?Le.color.set(Fi.color):Le.color.copy(St.color))})}pi.current=xt,F&&E()},[xt,de,nt,E]),Bw({objectBindings:t,nodeMap:ee,invalidate:E});let yn=(0,ce.useMemo)(()=>Object.entries(_).map(([U,z])=>({key:U,color:new ct.Color(z.color),speed:z.speed})),[_]),ho=(0,ce.useRef)(new Set);(0,ce.useEffect)(()=>{let U=new Set(yn.map(({key:z})=>z));for(let z of ho.current){if(U.has(z)||!de[z])continue;let F=Dn.current.get(z)?.emissive;er(de[z],ne=>{let Z=ne.userData.reactImmersiveConfiguredEmissive;Z?.isColor&&(ne.emissive.copy(Z),F&&ne.emissive.add(Da))})}ho.current=U,E()},[yn,de,E]),(0,Ya.useFrame)(({clock:U})=>{if(yn.length===0)return;let z=U.getElapsedTime();for(let{key:F,color:ne,speed:Z}of yn){let Se=de[F];if(!Se)continue;let Te=(1-Math.cos(2*Math.PI*Z*z))/2,Nt=Dn.current.get(F)?.emissive;er(Se,wt=>{let Ot=wt.userData.reactImmersiveConfiguredEmissive;Ot?.isColor&&(wt.emissive.copy(Ot).lerp(ne,Te),Nt&&wt.emissive.add(Da))})}E()}),(0,ce.useEffect)(()=>{if(Pe==="uv-checker")return;let U=new Set(Object.values(Ke)),z=!1;O.traverse(F=>{if(!_n(F)||U.has(F)||!fe.has(F))return;let ne=Fe?.get(F)??fe.get(F);F.material!==ne&&(F.material=ne,z=!0)}),z&&E()},[O,Ke,fe,Fe,Pe,E]),(0,ce.useEffect)(()=>{if(Pe!=="uv-checker")return;let U=Dx(),z=[];return O.traverse(F=>{if(!_n(F)||F.userData[za])return;let ne=F.material,Z=Array.isArray(ne)?ne:[ne],Se=!!F.geometry.getAttribute("uv"),Te=Z.map((wt,Ot)=>{let St=new ct.MeshBasicMaterial({color:Se?"#ffffff":"#ff00ff",map:Se?U:null,side:wt.side});return St.name=`${F.name||"mesh"}-uv-checker-${Ot}`,St.toneMapped=!1,St}),Nt=Array.isArray(ne)?Te:Te[0];F.material=Nt,z.push({node:F,original:ne,diagnostic:Nt})}),E(),()=>{for(let{node:F,original:ne,diagnostic:Z}of z){F.material=ne;let Se=Array.isArray(Z)?Z:[Z];for(let Te of Se)Te.dispose()}E()}},[O,Pe,E,H]),(0,ce.useEffect)(()=>{if(!ft)return;let U=[];for(let[z,F]of Object.entries(t)){let ne=F.modelObjectId??z,Z=ee[ne];if(!_n(Z))continue;let Se=new ct.MeshBasicMaterial({color:At,wireframe:!0,transparent:!0,opacity:se,depthTest:!1,depthWrite:!1,side:ct.DoubleSide,toneMapped:!1}),Te=Z.clone(!1);Te.name="",Te.position.set(0,0,0),Te.quaternion.identity(),Te.scale.set(1,1,1),Te.matrix.identity(),Te.matrixAutoUpdate=!0,Te.material=Se,Te.castShadow=!1,Te.receiveShadow=!1,Te.frustumCulled=!1,Te.renderOrder=1,Te.userData={isWireframeOverlay:!0},Te.raycast=()=>{},Z.morphTargetInfluences&&(Te.morphTargetInfluences=Z.morphTargetInfluences),Z.add(Te),U.push({node:Z,overlay:Te})}return E(),()=>{for(let{node:z,overlay:F}of U)z.remove(F),F.material.dispose()}},[ft,At,se,ee,t,E]);let ir=(0,ce.useMemo)(()=>{let U=Array.from(ue.current.values()).flat();return rM([...C.animations,...U])},[C.animations,be]);(0,ce.useEffect)(()=>{O.animations=ir.map(({clip:U})=>U)},[O,ir]);let Vn=(0,ce.useRef)(d);Vn.current=d;let mi=(0,ce.useRef)(v);mi.current=v;let go=(0,ce.useRef)(null),en=(0,ce.useRef)(null),nn=(0,ce.useRef)(new Set),or=(0,ce.useRef)(0),Ni=U=>{nn.current.forEach(z=>z(U))};(0,ce.useEffect)(()=>{let U=oM({root:O,clips:ir,getClipConfig:F=>Lw(mi.current,F),onChange:()=>{Ni(U.getState()),vp(O),E()}});go.current=U,en.current={clips:ir.map(({sourceName:F})=>F),clipDetails:ir.map(({sourceName:F,duration:ne})=>({sourceName:F,duration:ne})),play:U.play,pause:U.pause,stop:U.stop,setSpeed:U.setSpeed,seek:U.seek,getState:U.getState,subscribe:F=>(nn.current.add(F),F(U.getState()),()=>{nn.current.delete(F)})},Ni(U.getState());let z=mi.current?.animations.autoplayClip;return z&&U.play(z),()=>{U.dispose(),go.current=null,en.current=null,Ni(U.getState())}},[O,ir]);let hu=!!d;(0,ce.useEffect)(()=>{hu&&en.current&&Vn.current?.(en.current)},[O,ir,hu,i]),(0,ce.useEffect)(()=>{v?.animations&&go.current?.applyClipConfigs()},[v?.animations]),(0,Ya.useFrame)((U,z)=>{let F=go.current;if(F?.isRunning()){if(F.update(z),!x)for(let[ne,Z]of he.current)xp(ne,Z,Ce);or.current+=z,vp(O,{updateFallbacks:or.current>=.066}),E(),or.current>=.066&&(or.current=0,Ni(F.getState()))}});let Vi=(0,ce.useMemo)(()=>(v?.model.rotation??[0,0,0]).map(U=>U*Math.PI/180),[v?.model.rotation]);(0,Ya.useFrame)((U,z)=>{if(!B.current)return;let F=B.current.rotation;F.x=ct.MathUtils.lerp(F.x,Vi[0],1-Math.exp(-5*z)),F.y=ct.MathUtils.lerp(F.y,Vi[1],1-Math.exp(-5*z)),F.z=ct.MathUtils.lerp(F.z,Vi[2],1-Math.exp(-5*z)),Math.abs(F.x-Vi[0])<1e-4&&Math.abs(F.y-Vi[1])<1e-4&&Math.abs(F.z-Vi[2])<1e-4||E()});let ji=(0,ce.useRef)([]),sa=(0,ce.useRef)(0),bo=(0,ce.useRef)(0),us=(0,ce.useMemo)(()=>new ct.Vector3,[]);(0,ce.useEffect)(()=>{let U=new Map;for(let[wt,Ot]of Object.entries(t)){let St=ee[Ot.modelObjectId??wt];St&&U.set(St,Ot)}for(let wt of ji.current)xp(wt.node,U.get(wt.node)?.transform,Ce);bo.current=0,O.updateWorldMatrix(!0,!0);let z=new ct.Box3().setFromObject(O),F=z.getCenter(new ct.Vector3),ne=z.getSize(new ct.Vector3).length()*.5;sa.current=Number.isFinite(ne)?ne:0;let Z=[...U.keys()],Se=new Set(Z),Te=[],Nt=new ct.Vector3;for(let wt of Z){if(!wt.parent)continue;let Ot=wt.parent,St=!1;for(;Ot;){if(Se.has(Ot)){St=!0;break}Ot=Ot.parent}if(St)continue;let It=new ct.Box3().setFromObject(wt);if(It.isEmpty())continue;It.getCenter(Nt);let rn=Nt.clone().sub(F);rn.lengthSq()<1e-8||(rn.normalize(),Te.push({node:wt,restLocalPos:wt.position.clone(),restWorldPos:wt.getWorldPosition(new ct.Vector3),worldDir:rn,parentInverse:new ct.Matrix4().copy(wt.parent.matrixWorld).invert()}))}ji.current=Te,E()},[O,ee,ve,qe,Ce,E]),(0,ce.useEffect)(()=>{E()},[T,E]),(0,Ya.useFrame)((U,z)=>{let F=ji.current;if(F.length===0)return;let ne=Math.min(Math.max(T,0),1),Z=bo.current;if(Math.abs(Z-ne)<1e-4){if(Z===ne)return;bo.current=ne}else bo.current=ct.MathUtils.lerp(Z,ne,1-Math.exp(-6*z)),E();let Se=bo.current*sa.current;for(let Te of F)us.copy(Te.worldDir).multiplyScalar(Se).add(Te.restWorldPos).applyMatrix4(Te.parentInverse),Te.node.position.copy(us),Te.node.matrixAutoUpdate||(Te.node.matrix.setPosition(Te.node.position),Te.node.matrixWorldNeedsUpdate=!0)});let Gr=U=>{let z=U;for(;z;){let F=ur(z),ne=F?Je[F]:void 0;if(ne&&t[ne])return[ne,t[ne]];z=z.parent}return null},yo=U=>{let z=Gr(U);if(!z)return null;let[F,ne]=z;return ee[ne.modelObjectId??F]??null},vl=zd(U=>{let z=Gr(U);return z&&z[1].selectable!==!1?z[1]:null},i?l:void 0,yo),la=U=>{if(vl.consumeClick())return;let z=Gr(U.object);if(!z)return;let[,F]=z;F.selectable!==!1&&(U.stopPropagation(),o(F,$s(U,yo(U.object))))},gu=U=>{let z=Gr(U.object);if(!z)return;let[,F]=z;if(F.selectable===!1)return;s?.(F,$s(U,yo(U.object)))&&U.stopPropagation()},Qm=U=>{if(!b)return;let z=Gr(U.object);if(!z)return;let[F,ne]=z;ne.hoverable!==!1&&(U.stopPropagation(),j("pointer"),k(F),a?.(ne))},ca=U=>{b&&(U.stopPropagation(),R(),k(null),a?.(null))},ds=(0,ce.useMemo)(()=>!S0(O),[O,H]);return(0,ce.useEffect)(()=>{let U=pe&&(De?.scene!==O||De.key!==pe),z=A?.some(F=>!N[F.url]||N[F.url].parent!==O);return Ih(O,U?"Wait for the selected material variants to finish loading before preparing AR.":z?"Wait for all merged models to finish loading before preparing AR.":Pe!=="pbr"?"Switch the model renderer to PBR before preparing a USDZ snapshot, or provide arHandoff.createUSDZ.":void 0),()=>Ih(O)},[O,De,pe,A,N,H,Pe]),(0,Ka.jsxs)("group",{ref:B,children:[(0,Ka.jsx)("primitive",{object:O,...i&&ds?{onClick:la,onDoubleClick:gu,...l?{onPointerDown:vl.onPointerDown}:{},...b?{onPointerOver:Qm,onPointerOut:ca}:{}}:{}}),A?.map(U=>(0,Ka.jsx)(Ai,{onLoadError:z=>M?.(U.url,z),children:(0,Ka.jsx)(ce.Suspense,{fallback:null,children:(0,Ka.jsx)(C2,{url:U.url,namePrefix:U.namePrefix,decoderConfig:h,onReady:G})})},U.url))]})}function C2({url:e,namePrefix:t,decoderConfig:n,onReady:r}){let i=xc(e,n),o=(0,ce.useMemo)(()=>{let l=Mg.SkeletonUtils.clone(i.scene);return rx(l,t),eg(l),l},[i.scene,t]),a=(0,ce.useMemo)(()=>i.animations.map(l=>ix(l,t)),[i.animations,t]),s=(0,ce.useRef)(r);return s.current=r,(0,ce.useEffect)(()=>{s.current(e,o,a)},[e,o,a]),null}var nl=require("react");var Cc=require("react/jsx-runtime");function T2({url:e,decoderConfig:t,onModelLoaded:n}){let{scene:r}=xc(e,t),i=(0,nl.useRef)(n);return i.current=n,(0,nl.useEffect)(()=>{i.current?.(r)},[r]),(0,Cc.jsx)("primitive",{object:r})}function pM({url:e,decoderConfig:t,onLoadError:n,onModelLoaded:r}){return(0,Cc.jsx)(Ai,{onLoadError:i=>n?.(e,i),children:(0,Cc.jsx)(nl.Suspense,{fallback:null,children:(0,Cc.jsx)(T2,{url:e,decoderConfig:t,onModelLoaded:r})})})}var Ho=require("react");var Tc=require("react/jsx-runtime"),P2={};function mM({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:f,selectedItem:m,panelHoveredItem:v,onItemClick:g,onItemDoubleClick:b,onItemContextMenu:h,onItemHover:y,nodeRefsOut:w,onNodeRefsChange:T,materialRefsOut:x,onMergeModelLoaded:D,onMergeModelError:A,pulses:S}){let M=(0,Ho.useRef)({}),_=(0,Ho.useRef)({}),C=(0,Ho.useCallback)(()=>{},[]),E=(0,Ho.useCallback)(k=>{t&&d?.(k),p?.(Ae(e),k)},[t,d,p,e.url,e.id]),L=!!d||!!p;return(0,Tc.jsx)(Ai,{onLoadError:k=>u?.(Ae(e),k),children:(0,Tc.jsx)(Ho.Suspense,{fallback:null,children:(0,Tc.jsx)("group",{position:e.transform?.position,rotation:e.transform?.rotation,scale:e.transform?.scale,visible:e.visible!==!1,children:(0,Tc.jsx)(_c,{url:e.url,interactive:t&&e.visible!==!1,objectBindings:e.objectBindings,selectedItem:t?m:null,itemMaterials:t?r:P2,onItemClick:t?g:C,onItemDoubleClick:t?b:void 0,onItemContextMenu:t?h:void 0,onItemHover:t?y:void 0,onModelLoaded:f?k=>f(Ae(e),k):void 0,onAnimationsReady:L?E:void 0,nodeRefsOut:t?w:M,onNodeRefsChange:t?T:void 0,materialRefsOut:x??_,panelHoveredItem:t?v: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:D,onMergeModelError:A,pulses:t?S:void 0})})})},e.url)}var $e=require("react");var Yp=require("@react-three/fiber");var Gt=require("three");var Vt=require("three");function bM(e){let t={};for(let[n,r]of Object.entries(e))t[r.modelObjectId??n]=n;return t}function Tg(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 yM(e,t){return e||(t?t.modelObjectId??t.id:null)}function Sp(e,t){let n=Tg(e);if(!n)return null;let r=t.keyByModelObject[n]??n,i=t.objectBindings[r];return i?{key:r,binding:i}:null}var rl=new Vt.Vector3,_g=new Vt.Vector3,A2=new Vt.Matrix4,fM=new Vt.Matrix4,Pc=new Vt.Matrix4,E2=new Vt.Matrix4,wp=new Vt.Matrix4,R2=new Vt.Matrix4,O2=new Vt.Matrix4,hM=new Vt.Vector3,gM=new Vt.Vector3,Go=new Vt.Vector3,Cg=new Vt.Quaternion,D2=new Vt.Euler;function L2(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}fM.compose(t.position,Cg.setFromEuler(t.rotation),t.scale);let s=n?.rotation;Pc.compose(hM.fromArray(Sc(n?.position??[0,0,0],s??[0,0,0],n?.scale??[1,1,1],n?.pivot,"XYZ",n?.shear)),Cg.setFromEuler(D2.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),gM.fromArray(n?.scale??[1,1,1])),n?.shear&&Pc.makeRotationFromQuaternion(Cg).multiply(Os(n.shear)).scale(gM).setPosition(hM),Pc.premultiply(r).multiply(E2.copy(r).invert()),e.parent?.updateWorldMatrix(!0,!1);let l=e.parent?.matrixWorld??A2;if(wp.multiplyMatrices(l,fM).premultiply(Pc),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?Go.fromArray(d).applyMatrix4(r).applyMatrix4(Pc):Go.setFromMatrixPosition(wp),Go.sub(i.centre),Go.lengthSq()>1e-8&&(Go.normalize().multiplyScalar(i.factor*i.radius),wp.premultiply(O2.makeTranslation(Go.x,Go.y,Go.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(R2.copy(l).invert(),wp),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function Mp(e,t){if(!_n(e)&&!e.userData.riLogicalObject)return;let n=Sp(e,t);if(!n)return;let r=vM(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){L2(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(Sc(e.position.toArray(),[e.rotation.x,e.rotation.y,e.rotation.z],e.scale.toArray(),o?.pivot,i.rotation.order,o?.shear)),_i(e,o?.shear);let a=t.explode;if(a&&a.factor>0&&a.radius>0){e.updateWorldMatrix(!0,!1),_g.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?rl.fromArray(l).applyMatrix4(e.matrixWorld).sub(a.centre):rl.copy(_g).sub(a.centre),rl.lengthSq()>1e-8&&(rl.normalize().multiplyScalar(a.factor*a.radius).add(_g),e.parent&&e.parent.worldToLocal(rl),e.position.copy(rl))}_i(e,o?.shear),e.updateWorldMatrix(!0,!1)}function il(e,t){e.traverse(n=>Mp(n,t))}function vM(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function I2(e,t,n,r){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,r])}function k2(e){if(e.textures){for(let t of zo){let n=e.textures[t];n&&Hi(n,ei(t))}e.textures=void 0}}function B2(e,t,n){let r=e.textures??{};for(let i of zo){let o=Xt(t,i),a=r[i];if(a===o)continue;let s=ei(i);a&&Hi(a,s),o?(ks(o,s,n),r[i]=o):delete r[i]}e.textures=Object.keys(r).length>0?r:void 0}function N2(e,t){if(t.shadingMode==="normals")return Di(e,()=>new Vt.MeshNormalMaterial);if(t.shadingMode==="unlit")return Di(e,n=>{let r=new Vt.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=dd();return Di(e,r=>{let i=new Vt.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 V2(e,t){if(!_n(e))return;let r=vM(e);r.original??(r.original=Mc(e));let i=Sp(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,Mp(e,t);let s=t.itemMaterials?.[o]?.hex??t.itemMaterials?.[a.modelObjectId??o]?.hex,l=t.highlightOnHover!==!1&&o===t.hoveredKey,c=I2(a,s,t,l);if(r.signature===c&&r.display){e.material=r.display;return}let d=a.style?.material;if(B2(r,d,t.invalidate),!r.physical){let p=r.original??Mc(e);if(!p)return;r.physical=Di(p,u=>{let f=fp(u),m=hp(f??new Vt.MeshStandardMaterial);return gp(m),m})}er(r.physical,p=>{bp(p,d,s??d?.baseColor),l&&(p.emissive.add(Da),p.color.lerp(Ax,Ex)),p.needsUpdate=!0}),r.display&&r.display!==r.physical&&er(r.display,p=>p.dispose()),r.display=N2(r.physical,t),r.signature=c,e.material=r.display}function xM(e,t){e.traverse(n=>V2(n,t))}function Pg(e){e.traverse(t=>{if(!_n(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&&er(n.display,r=>r.dispose()),n.physical&&er(n.physical,r=>r.dispose()),k2(n),delete t.userData.riVisuals)})}var SM=new Gt.Matrix4().makeRotationX(Math.PI/2),wM=SM.clone().invert();function j2(e){let t=new Gt.Vector3(e[0],e[1],e[2]),n=new Gt.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 Gt.Box3(t.clone().sub(n),t.clone().add(n))}function U2(e){let t=e.getCenter(new Gt.Vector3),n=e.getSize(new Gt.Vector3).multiplyScalar(.5);return[t.x,t.y,t.z,n.x,0,0,0,n.y,0,0,0,n.z]}var _p=class{constructor(){this.group=new Gt.Group;this.objects=new Map;this.geometry=new Gt.BoxGeometry(1,1,1);this.material=new Gt.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 Gt.Box3(new Gt.Vector3(...n.minimum),new Gt.Vector3(...n.maximum)).applyMatrix4(wM),i=new Gt.Group;i.name=n.name,i.userData.ri_name=n.name,i.userData.riLogicalObject=!0,i.userData.ri_center=r.getCenter(new Gt.Vector3).toArray();let o=new Gt.Mesh(this.geometry,this.material);o.visible=!1,o.raycast=()=>{},o.position.copy(r.getCenter(new Gt.Vector3)),o.scale.copy(r.getSize(new Gt.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||Mp(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 Gt.Matrix4)||this.transforms.set(l,SM.clone().multiply(c.matrix).multiply(wM))}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=j2(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=U2(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 Ag=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),Ac=16,Eg=1.25,z2=1.5,F2=1.25,H2=500,G2=3e3,MM=5e3,_M=2e3,W2=.9;function CM(e){return e.full&&(e.wanting||e.usage>1)}function TM(e){return e.loosened?G2:H2}function PM(e){let t=e.factor/F2;return t<=1+1e-6?1:t}function AM(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<W2&&PM(e)>e.tooFine}function EM(e,t){let{now:n}=t,r=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(CM(t)){if(n-r.changedAt<TM(r))return r;let i=Math.max(r.tooFine,r.factor);return r.factor>=Ac?r.loosened&&r.tooFine===i?r:{...r,loosened:!0,tooFine:i,changedAt:n}:{factor:Math.min(Ac,r.factor*z2),loosened:!0,tooFine:i,raisedAt:n,changedAt:n}}return r.loosened&&!t.wanting?{...r,loosened:!1,changedAt:n}:AM(r,t)&&n-r.raisedAt>=MM&&n-r.changedAt>=_M?{...r,factor:PM(r),changedAt:n}:r}function RM(e,t){let{now:n}=t;return CM(t)?e.factor>=Ac&&e.loosened?null:Math.max(0,TM(e)-(n-e.changedAt)):e.loosened&&!t.wanting?0:AM(e,t)?Math.max(0,MM-(n-e.raisedAt),_M-(n-e.changedAt)):null}function IM(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function Rg(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 Tp,Ec=(Tp=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)})}},ph(Tp,"pending",new Map),ph(Tp,"session",null),Tp),OM=2**30,Dc=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*OM,this.maxBytesSize=.4*OM,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,f=Math.max(Math.min(r.length-t,p),0),m=this.cachedBytes-c,v=this.unloadPriorityCallback||this.defaultPriorityCallback,g=!1,b=f>0&&p>0||u&&r.length>n;if(p&&this.cachedBytes>c||u&&this.cachedBytes>d||b){r.sort((A,S)=>{let M=o.has(A);if(M===o.has(S)){let _=a.has(A);return _===a.has(S)?-v(A,S):_?1:-1}else return M?1:-1});let h=Math.max(t*e,f*e),y=Math.ceil(Math.min(h,p,f)),w=Math.max(e*m,e*c),T=Math.min(w,m),x=0,D=0;for(;this.cachedBytes-D>d||r.length-x>n;){let A=r[x],S=l.get(A)||0;if(o.has(A)&&a.has(A)||this.cachedBytes-D-S<d&&r.length-x<=n)break;D+=S,x++}for(;D<T||x<y;){let A=r[x],S=l.get(A)||0;if(o.has(A)||this.cachedBytes-D-S<c&&x>=y)break;D+=S,x++}r.splice(0,x).forEach(A=>{this.cachedBytes-=l.get(A)||0,s.get(A)(A),l.delete(A),i.delete(A),s.delete(A),a.delete(A),o.delete(A)}),g=x<f||D<m&&x<p,g&&(g=x>0)}g&&(this.unloadingHandle=Ec.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){Ec.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},q2=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Li=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=>{Ec.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 q2),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))}},Rp=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:IM(e),o=this.originQueues.get(i);o||(o=new Li,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 Ja=6378137,X2=1/298.257223563,Dg=6356752314245179e-9,Cp={inView:!1,error:1/0,distanceFromCamera:1/0};function Op(e){return e===4||e===-1}function no(e,t){return Dp(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function Dp(e){return!!e.traversal}function Lc(e){let{children:t}=e,n=t.length===0||Dp(t[t.length-1]),r=!e.internal.hasUnrenderableContent||Op(e.internal.loadingState);return n&&r}function Za(e){return e.traversal.unconditionallyRefine}function Rc(e,t){if(Dp(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,Cp),e.traversal.inFrustum=Cp.inView,e.traversal.error=Cp.error,e.traversal.distanceFromCamera=Cp.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 Og(e,t,n=!1){if(Rc(e,t),n?t.markTileUsed(e):Pp(e),Za(e)&&Lc(e)){let r=e.children;for(let i=0,o=r.length;i<o;i++)Og(r[i],t,n)}}function kM(e,t){if(Rc(e,t),e.traversal.usedLastFrame&&(Pp(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||Za(e))&&Lc(e))){let n=e.children;for(let r=0,i=n.length;r<i;r++)kM(n[r],t)}}function Pp(e){e.traversal.used=!0}function $2(e,t){return!(e.traversal.error<=t.errorTarget&&!Za(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!Lc(e))}function BM(e,t){let{frameCount:n}=t,{children:r}=e;for(let i=0,o=r.length;i<o;i++){let a=r[i];no(a,n)&&(a.traversal.active&&(a.traversal.kicked=!0,a.traversal.active=!1),BM(a,t))}}function DM(e){return!Za(e)&&(!e.internal.hasContent||Op(e.internal.loadingState))}function NM(e,t){if(Rc(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(!$2(e,t)){Pp(e);return}let r=!1,i=!1,o=e.children;for(let a=0,s=o.length;a<s;a++){let l=o[a];NM(l,t),r||(r=no(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++)Og(o[a],t,!0);return}if(Pp(e),e.refine==="REPLACE"&&r&&(t.loadSiblings||t.loadAncestors))for(let a=0,s=o.length;a<s;a++)Og(o[a],t)}function VM(e,t){let n=t.frameCount;if(!no(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=no(l,n))}if(!i)e.traversal.isLeaf=!0;else{for(let s=0,l=r.length;s<l;s++)VM(r[s],t);let a=!0;for(let s=0,l=r.length;s<l;s++){let c=r[s];if(no(c,n)){let d=!Za(c),p=!c.internal.hasContent||Op(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];no(l,t.frameCount)&&!l.traversal.allUsedChildrenProcessed&&(o=!1)}e.traversal.allUsedChildrenProcessed=o&&Lc(e)}function jM(e,t){if(!no(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!Za(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!Za(e)&&(e.traversal.active=!0,Lc(e)&&e.internal.hasContent&&!Op(e.internal.loadingState)))for(let i=0,o=n.length;i<o;i++)kM(n[i],t);return}let r=n.length>0;for(let i=0,o=n.length;i<o;i++){let a=n[i];jM(a,t),no(a,t.frameCount)&&!(a.traversal.active&&DM(a))&&!a.traversal.allChildrenReady&&(r=!1)}e.traversal.allChildrenReady=r,e.refine==="REPLACE"&&!r&&e.traversal.wasSetActive&&DM(e)&&(e.traversal.active=!0,BM(e,t))}function UM(e,t){Rc(e,t);let n=no(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||Dp(e)&&e.traversal.usedLastFrame){let r=!1,i=!1;n?(r=e.traversal.active,i=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):Rc(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];UM(l,t)}}}function Y2(e,t){NM(e,t),VM(e,t),jM(e,t),UM(e,t)}function K2(e){let t=null;return()=>{t===null&&(t=Ec.requestAnimationFrame(()=>{t=null,e()}))}}function Z2(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 LM=Symbol("PLUGIN_REGISTERED"),Wo={inView:!0,error:0,distance:1/0},Q2=(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},J2=(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,eO=(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,ol=(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?J2(e,t):Q2(e,t)},Lg=new Dc;Lg.unloadPriorityCallback=eO;var Oc=new Rp;Oc.maxJobsPerOrigin=25,Oc.priorityCallback=ol;var Ap=new Li;Ap.maxJobs=5,Ap.priorityCallback=ol;var Ep=new Li;Ep.maxJobs=25,Ep.priorityCallback=(e,t)=>{let n=e.parent,r=t.parent;return n===r?0:n?r?ol(n,r):-1:1};var Ig=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 Li){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=Lg,this.downloadQueue=Oc,this.parseQueue=Ap,this.processNodeQueue=Ep,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=K2(()=>{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[LM]===!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[LM]=!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&&Z2(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(),Y2(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&&(Wo.inView=!0,Wo.error=0,Wo.distance=1/0,s.calculateTileViewError(e,Wo)&&(i===null&&(i=!0),i&&(i=Wo.inView),Wo.inView&&(a=Math.min(a,Wo.distance),o=Math.max(o,Wo.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=Rg(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=Rg(r),d=new AbortController,p=d.signal;if(o.add(e,u=>{d.abort(),t?u.children.length=0:this.invokeAllPlugins(f=>{f.disposeTile&&f.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 f=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}}),f}).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,f=>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,f,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 Qa(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 tO=new TextDecoder;function zM(e){return tO.decode(e)}function Lp(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var al=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=Lp(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function kg(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 Ic=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(zM(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,f=kg(a,u,t,d,p,e);if(u+f.byteLength>s+l)throw Error("FeatureTable: Feature data read outside binary body length.");return f}}getBuffer(e,t){let{buffer:n,binOffset:r}=this;return n.slice(r+e,r+e+t)}},nO=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 kg(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}},Ip=class extends Ic{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 nO(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)}},Bg=class extends al{parse(e){let t=new DataView(e),n=Qa(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 Ic(e.slice(28,28+o+a),0,o,a),d=28+o+a,p=new Ip(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)}}},Ng=class extends al{parse(e){let t=new DataView(e),n=Qa(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 Ic(e.slice(32,32+o+a),0,o,a),p=32+o+a,u=new Ip(e.slice(p,p+s+l),d.getData("INSTANCES_LENGTH"),0,s,l),f=p+s+l,m=new Uint8Array(e,f,i-f),v=null,g=null,b=null;if(c)v=m,g=Promise.resolve();else{let h=this.resolveExternalURL(zM(m));b=Lp(h),g=fetch(h,this.fetchOptions).then(y=>{if(!y.ok)throw Error(`I3DMLoaderBase : Failed to load file "${h}" with status ${y.status} : ${y.statusText}`);return y.arrayBuffer()}).then(y=>{v=new Uint8Array(y)})}return g.then(()=>({version:r,featureTable:d,batchTable:u,glbBytes:v,gltfWorkingPath:b}))}},Vg=class extends al{parse(e){let t=new DataView(e),n=Qa(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 Ic(e.slice(28,28+o+a),0,o,a),d=28+o+a,p=new Ip(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})}},jg=class extends al{parse(e){let t=new DataView(e),n=Qa(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=Qa(c),p=c.getUint32(4,!0),u=c.getUint32(8,!0),f=new Uint8Array(e,s,u);a.push({type:d,buffer:f,version:p}),s+=u}return{version:r,tiles:a}}};var q=require("three"),Hp=require("three/addons/loaders/GLTFLoader.js"),r_=require("three/addons/utils/BufferGeometryUtils.js"),Yg=class extends Bg{constructor(e=q.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new q.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 Hp.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:f}=d,m=u.getData("RTC_CENTER",1,"FLOAT","VEC3");m&&(f.position.x+=m[0],f.position.y+=m[1],f.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,f.batchTable=p,f.featureTable=u,r(d)},i)})}};function rO(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 kc=new q.Vector2;function iO(e,t,n=new q.Vector3){kc.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(kc.x,kc.y,1-Math.abs(kc.x)-Math.abs(kc.y));let r=q.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 FM={RGB:"color",POSITION:"position"},Kg=class extends Vg{constructor(e=q.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:r}=t,i=new q.PointsMaterial,o=n.header.extensions,a=new q.Vector3,s;if(o&&o["3DTILES_draco_point_compression"]){let{byteOffset:d,byteLength:p,properties:u}=o["3DTILES_draco_point_compression"],f=this.manager.getHandler("draco.drc");if(f==null)throw Error("PNTSLoader: dracoLoader not available.");let m={};for(let b in u)if(b in FM&&b in u){let h=FM[b];m[h]=u[b]}let v={attributeIDs:m,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},g=n.getBuffer(d,p);s=await f.decodeGeometry(g,v),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"),f=n.getData("NORMAL",d,"UNSIGNED_BYTE","VEC2"),m=n.getData("RGB",d,"UNSIGNED_BYTE","VEC3"),v=n.getData("RGBA",d,"UNSIGNED_BYTE","VEC4"),g=n.getData("RGB565",d,"UNSIGNED_SHORT","SCALAR"),b=n.getData("CONSTANT_RGBA",d,"UNSIGNED_BYTE","VEC4"),h=n.getData("POSITION_QUANTIZED",d,"UNSIGNED_SHORT","VEC3"),y=n.getData("QUANTIZED_VOLUME_SCALE",d,"FLOAT","VEC3"),w=n.getData("QUANTIZED_VOLUME_OFFSET",d,"FLOAT","VEC3");if(s=new q.BufferGeometry,h){let T=new Float32Array(d*3);for(let x=0;x<d;x++)for(let D=0;D<3;D++){let A=3*x+D;T[A]=h[A]/65535*y[D]}a.x=w[0],a.y=w[1],a.z=w[2],s.setAttribute("position",new q.BufferAttribute(T,3,!1))}else s.setAttribute("position",new q.BufferAttribute(p,3,!1));if(u!==null)s.setAttribute("normal",new q.BufferAttribute(u,3,!1));else if(f!==null){let T=new Float32Array(d*3),x=new q.Vector3;for(let D=0;D<d;D++){let A=f[D*2],S=f[D*2+1],M=iO(A,S,x);T[D*3]=M.x,T[D*3+1]=M.y,T[D*3+2]=M.z}s.setAttribute("normal",new q.BufferAttribute(T,3,!1))}if(v!==null)s.setAttribute("color",new q.BufferAttribute(v,4,!0)),i.vertexColors=!0,i.transparent=!0,i.depthWrite=!1;else if(m!==null)s.setAttribute("color",new q.BufferAttribute(m,3,!0)),i.vertexColors=!0;else if(g!==null){let T=new Uint8Array(d*3);for(let x=0;x<d;x++){let D=rO(g[x]);for(let A=0;A<3;A++){let S=3*x+A;T[S]=D[A]}}s.setAttribute("color",new q.BufferAttribute(T,3,!0)),i.vertexColors=!0}else if(b!==null){i.color=new q.Color(b[0],b[1],b[2]);let T=b[3]/255;T<1&&(i.opacity=T,i.transparent=!0,i.depthWrite=!1)}}let l=new q.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 oO(e){let{x:t,y:n,z:r}=e;e.x=r,e.y=t,e.z=n}function aO(e){return-e+Math.PI/2}var HM=new q.Spherical,qo=new q.Vector3,Zn=new q.Vector3,Ug=new q.Vector3,jr=new q.Matrix4,Ii=new q.Matrix4,zg=new q.Sphere,tr=new q.Euler,GM=new q.Vector3,WM=new q.Vector3,qM=new q.Vector3,Bc=new q.Vector3,kp=new q.Ray,sO=1e-12,lO=.1;var Zg=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new q.Vector3(e,t,n)}intersectRay(e,t){return jr.makeScale(...this.radius).invert(),zg.center.set(0,0,0),zg.radius=1,kp.copy(e).applyMatrix4(jr),kp.intersectSphere(zg,t)?(jr.makeScale(...this.radius),t.applyMatrix4(jr),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,GM,WM,qM),this.getCartographicToPosition(e,t,n,Bc),r.makeBasis(GM,WM,qM).setPosition(Bc)}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,jr),tr.set(i,o,-r,"ZXY"),a.makeRotationFromEuler(tr).premultiply(jr),s===1?(tr.set(Math.PI/2,0,0,"XYZ"),Ii.makeRotationFromEuler(tr),a.multiply(Ii)):s===2&&(tr.set(-Math.PI/2,0,Math.PI,"XYZ"),Ii.makeRotationFromEuler(tr),a.multiply(Ii)),a}getCartographicFromObjectFrame(e,t,n=2){return n===1?(tr.set(-Math.PI/2,0,0,"XYZ"),Ii.makeRotationFromEuler(tr).premultiply(e)):n===2?(tr.set(-Math.PI/2,0,Math.PI,"XYZ"),Ii.makeRotationFromEuler(tr).premultiply(e)):Ii.copy(e),Bc.setFromMatrixPosition(Ii),this.getPositionToCartographic(Bc,t),this.getEastNorthUpFrame(t.lat,t.lon,0,jr).invert(),Ii.premultiply(jr),tr.setFromRotationMatrix(Ii,"ZXY"),t.azimuth=-tr.z,t.elevation=tr.x,t.roll=tr.y,t}getEastNorthUpAxes(e,t,n,r,i,o=Bc){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,qo);let i=this.radius;Zn.copy(qo),Zn.x*=i.x**2,Zn.y*=i.y**2,Zn.z*=i.z**2;let o=Math.sqrt(qo.dot(Zn));return Zn.divideScalar(o),r.copy(Zn).addScaledVector(qo,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,Zn),this.getPositionToNormal(Zn,qo);let n=Ug.subVectors(e,Zn);return t.lon=Math.atan2(qo.y,qo.x),t.lat=Math.asin(qo.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return HM.set(1,aO(e),t),n.setFromSpherical(HM).normalize(),oO(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=Zn.copy(e).multiplyScalar(d);if(c<lO)return isFinite(d)?t.copy(p):null;let u=Ug.set(p.x*r*2,p.y*i*2,p.z*o*2),f=(1-d)*e.length()/(.5*u.length()),m=0,v,g,b,h,y,w,T,x,D,A,S;do{f-=m,b=1/(1+f*r),h=1/(1+f*i),y=1/(1+f*o),w=b*b,T=h*h,x=y*y,D=w*b,A=T*h,S=x*y,v=a*w+s*T+l*x-1,g=a*D*r+s*A*i+l*S*o;let M=-2*g;m=v/M}while(Math.abs(v)>sO);return t.set(e.x*b,e.y*h,e.z*y)}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*q.MathUtils.DEG2RAD,i=Math.sin(r)**2;return t/Math.sqrt(1-n*i)}getPositionElevation(e){this.getPositionToSurfacePoint(e,Zn);let t=Ug.subVectors(e,Zn);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(jr.makeScale(...this.radius).invert(),kp.copy(e).applyMatrix4(jr),Zn.set(0,0,0),kp.closestPointToPoint(Zn,t).normalize(),jr.makeScale(...this.radius),t.applyMatrix4(jr))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},zc=new Zg(Ja,Ja,Dg);zc.name="WGS84 Earth";var Bp=new q.Vector3,sl=new q.Vector3,ll=new q.Vector3,Fg=new q.Vector3,Np=new q.Quaternion,Vp=new q.Vector3,cl=new q.Matrix4,XM=new q.Matrix4,$M=new q.Vector3,YM=new q.Matrix4,Hg=new q.Quaternion,Gg={};function KM(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 Qg=class extends Ng{constructor(e=q.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new q.Matrix4,this.ellipsoid=zc.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 Hp.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 f=n.getData("INSTANCES_LENGTH"),m=n.getData("POSITION",f,"FLOAT","VEC3"),v=n.getData("POSITION_QUANTIZED",f,"UNSIGNED_SHORT","VEC3"),g=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),b=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),h=n.getData("NORMAL_UP",f,"FLOAT","VEC3"),y=n.getData("NORMAL_RIGHT",f,"FLOAT","VEC3"),w=n.getData("NORMAL_UP_OCT32P",f,"UNSIGNED_SHORT","VEC2"),T=n.getData("NORMAL_RIGHT_OCT32P",f,"UNSIGNED_SHORT","VEC2"),x=n.getData("SCALE_NON_UNIFORM",f,"FLOAT","VEC3"),D=n.getData("SCALE",f,"FLOAT","SCALAR"),A=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),S=n.getData("EAST_NORTH_UP");if(!m&&v){m=new Float32Array(f*3);for(let E=0;E<f;E++)m[E*3+0]=g[0]+v[E*3+0]/65535*b[0],m[E*3+1]=g[1]+v[E*3+1]/65535*b[1],m[E*3+2]=g[2]+v[E*3+2]/65535*b[2]}let M=new q.Vector3;for(let E=0;E<f;E++)M.x+=m[E*3+0]/f,M.y+=m[E*3+1]/f,M.z+=m[E*3+2]/f;let _=[],C=[];u.scene.updateMatrixWorld(),u.scene.traverse(E=>{if(E.isMesh){C.push(E);let{geometry:L,material:k}=E,B=new q.InstancedMesh(L,k,f);B.position.copy(M),A&&(B.position.x+=A[0],B.position.y+=A[1],B.position.z+=A[2]),_.push(B)}});for(let E=0;E<f;E++){Fg.set(m[E*3+0]-M.x,m[E*3+1]-M.y,m[E*3+2]-M.z),Np.identity(),h&&y?(sl.set(h[E*3+0],h[E*3+1],h[E*3+2]),ll.set(y[E*3+0],y[E*3+1],y[E*3+2]),Bp.crossVectors(ll,sl).normalize(),cl.makeBasis(ll,sl,Bp),Np.setFromRotationMatrix(cl)):w&&T&&(KM(w[E*2+0],w[E*2+1],65535,sl),KM(T[E*2+0],T[E*2+1],65535,ll),Bp.crossVectors(ll,sl).normalize(),cl.makeBasis(ll,sl,Bp),Np.setFromRotationMatrix(cl)),Vp.set(1,1,1),x&&Vp.set(x[E*3+0],x[E*3+1],x[E*3+2]),D&&Vp.multiplyScalar(D[E]);for(let L=0,k=_.length;L<k;L++){let B=_[L];Hg.copy(Np),S&&(B.updateMatrixWorld(),$M.copy(Fg).applyMatrix4(B.matrixWorld),this.ellipsoid.getPositionToCartographic($M,Gg),this.ellipsoid.getEastNorthUpFrame(Gg.lat,Gg.lon,YM),Hg.setFromRotationMatrix(YM)),cl.compose(Fg,Hg,Vp).multiply(p);let j=C[L];XM.multiplyMatrices(cl,j.matrixWorld),B.setMatrixAt(E,XM)}}u.scene.clear(),u.scene.add(..._),u.batchTable=r,u.featureTable=n,u.scene.batchTable=r,u.scene.featureTable=n,o(u)},a)})})}},i_=class extends jg{constructor(e=q.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new q.Matrix4,this.ellipsoid=zc.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 Yg(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 Kg(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 Qg(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 q.Group;return a.forEach(l=>{s.add(l.scene)}),{tiles:a,scene:s}})}},Nc=new q.Matrix4,cO=class extends q.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new q.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?Nc.copy(this.matrix):Nc.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=Nc.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(Nc),this.matrixWorldInverse.copy(Nc).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)}},uO=new q.Ray;function dO(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 pO(e){return"traversal"in e}function o_(e,t,n,r,i=null){if(!pO(t))return;let{group:o,activeTiles:a}=e,{boundingVolume:s}=t.engineData;if(i===null&&(i=uO,i.copy(n.ray).applyMatrix4(o.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(i))return;a.has(t)&&dO(t,n,e,r);let l=t.children;for(let c=0,d=l.length;c<d;c++)o_(e,l[c],n,r,i)}var jp=new q.Vector3,Up=new q.Vector3,nr=new q.Vector3,zp=new q.Ray,Xg=class{constructor(e=new q.Box3,t=new q.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new q.Matrix4,this.points=Array(8).fill().map(()=>new q.Vector3),this.planes=[,,,,,,].fill().map(()=>new q.Plane)}copy(e){return this.box.copy(e.box),this.transform.copy(e.transform),this.update(),this}clone(){return new this.constructor().copy(this)}clampPoint(e,t){return t.copy(e).applyMatrix4(this.inverseTransform).clamp(this.box.min,this.box.max).applyMatrix4(this.transform)}distanceToPoint(e){return this.clampPoint(e,nr).distanceTo(e)}containsPoint(e){return nr.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(nr)}intersectsRay(e){return zp.copy(e).applyMatrix4(this.inverseTransform),zp.intersectsBox(this.box)}intersectRay(e,t){return zp.copy(e).applyMatrix4(this.inverseTransform),zp.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(){jp.copy(this.box.min).applyMatrix4(this.transform),Up.copy(this.box.max).applyMatrix4(this.transform),nr.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(nr,jp),this.planes[1].setFromNormalAndCoplanarPoint(nr,Up).negate(),nr.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(nr,jp),this.planes[3].setFromNormalAndCoplanarPoint(nr,Up).negate(),nr.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(nr,jp),this.planes[5].setFromNormalAndCoplanarPoint(nr,Up).negate()}intersectsSphere(e){return this.clampPoint(e.center,nr),nr.distanceToSquared(e.center)<=e.radius*e.radius}intersectsFrustum(e){return this._intersectsPlaneShape(e.planes,e.points)}intersectsOBB(e){return this._intersectsPlaneShape(e.planes,e.points)}_intersectsPlaneShape(e,t){let n=this.points,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}},Uc=Math.PI,Wg=Uc/2,Vc=new q.Vector3,es=new q.Vector3,oi=new q.Vector3,ke=new q.Vector3,Qn=new q.Matrix4,mO=new q.Box3,ZM=new q.Matrix4;function Xo(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function QM(e){return e.x!==e.y}var a_=class extends Zg{constructor(e=1,t=1,n=1,r=-Wg,i=Wg,o=0,a=2*Uc,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){QM(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:f,max:m}=e;f.setScalar(1/0),m.setScalar(-1/0),o-i<=Uc?(this.getCartographicToNormal(l,c,oi),es.set(0,0,1),Vc.crossVectors(es,oi).normalize(),es.crossVectors(oi,Vc).normalize(),t.makeBasis(Vc,es,oi),Qn.copy(t).invert(),this.getCartographicToPosition(u,i,s,ke).applyMatrix4(Qn),m.x=Math.abs(ke.x),f.x=-m.x,this.getCartographicToPosition(r,i,s,ke).applyMatrix4(Qn),m.y=ke.y,this.getCartographicToPosition(r,c,s,ke).applyMatrix4(Qn),m.y=Math.max(ke.y,m.y),this.getCartographicToPosition(n,i,s,ke).applyMatrix4(Qn),f.y=ke.y,this.getCartographicToPosition(n,c,s,ke).applyMatrix4(Qn),f.y=Math.min(ke.y,f.y),this.getCartographicToPosition(l,c,s,ke).applyMatrix4(Qn),m.z=ke.z,this.getCartographicToPosition(n,i,a,ke).applyMatrix4(Qn),f.z=ke.z,this.getCartographicToPosition(r,i,a,ke).applyMatrix4(Qn),f.z=Math.min(ke.z,f.z)):(this.getCartographicToPosition(u,c,s,oi),oi.z=0,oi.length()<1e-10?oi.set(1,0,0):oi.normalize(),es.set(0,0,1),Vc.crossVectors(oi,es).normalize(),t.makeBasis(Vc,es,oi),Qn.copy(t).invert(),this.getCartographicToPosition(u,c+Wg,s,ke).applyMatrix4(Qn),m.x=Math.abs(ke.x),f.x=-m.x,this.getCartographicToPosition(r,0,p?a:s,ke).applyMatrix4(Qn),m.y=ke.y,this.getCartographicToPosition(n,0,d?a:s,ke).applyMatrix4(Qn),f.y=ke.y,this.getCartographicToPosition(u,c,s,ke).applyMatrix4(Qn),m.z=ke.z,this.getCartographicToPosition(u,o,s,ke).applyMatrix4(Qn),f.z=ke.z),e.getCenter(ke),e.min.sub(ke).multiplyScalar(1.0000000000001),e.max.sub(ke).multiplyScalar(1.0000000000001),ke.applyMatrix4(t),t.setPosition(ke)}getBoundingSphere(e){QM(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(mO,ZM),e.center.setFromMatrixPosition(ZM),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,ke),Xo(ke,e),this.getCartographicToPosition(n,r,a,ke),Xo(ke,e),this.getCartographicToPosition(n,l,a,ke),Xo(ke,e),this.getCartographicToPosition(t,r,a,ke),Xo(ke,e),this.getCartographicToPosition(t,l,a,ke),Xo(ke,e),this.getCartographicToPosition(s,l,a,ke),Xo(ke,e),this.getCartographicToPosition(t,r,o,ke),Xo(ke,e),i-r>Uc&&(this.getCartographicToPosition(p,l+Uc,a,ke),Xo(ke,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},ro=new q.Vector3,io=new q.Vector3,oo=new q.Vector3,JM=new q.Vector3,e_=new q.Vector3,fO=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,JM)&&(i=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(JM)),r&&r.intersectRay(e,e_)&&(o=r.containsPoint(e.origin)?0:e.origin.distanceToSquared(e_));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 Xg;ro.set(e[3],e[4],e[5]),io.set(e[6],e[7],e[8]),oo.set(e[9],e[10],e[11]);let r=ro.length(),i=io.length(),o=oo.length();ro.normalize(),io.normalize(),oo.normalize(),r===0&&ro.crossVectors(io,oo),i===0&&io.crossVectors(ro,oo),o===0&&oo.crossVectors(ro,io),n.transform.set(ro.x,io.x,oo.x,e[0],ro.y,io.y,oo.y,e[1],ro.z,io.z,oo.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 q.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 a_(...e.radius,n,i,t,r,o,a),l=new Xg;s.getBoundingBox(l.box,l.transform),l.update(),this.region=s,this.regionObb=l}},hO=new q.Matrix3;function gO(e,t,n,r){let i=hO.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 bO=class extends q.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new q.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)=>{gO(n[0],n[1],n[2],t[r])})}};var $g=0;function t_(e,t,n,r){try{return q.TextureUtils.getByteLength(e,t,n,r)}catch{return $g}}function yO(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??$g;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+=t_(s.width,s.height,t,n);return a}if(!r)return $g;let o=t_(r.width,r.height,t,n);return o*=e.generateMipmaps?4/3:1,o}function vO(e){let t=new Set,n=0;return e.traverse(r=>{if(r.geometry&&!t.has(r.geometry)&&(n+=(0,r_.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+=yO(a),t.add(a))}}}),n}var s_=Symbol("INITIAL_FRUSTUM_CULLED"),Fp=new q.Matrix4,jc=new q.Vector3,qg=new q.Vector2,xO=new q.Vector3(1,0,0),wO=new q.Vector3(0,1,0),SO=()=>null;function n_(e,t){e.traverse(n=>{n.frustumCulled=n[s_]&&t})}var Jg=class extends Ig{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{n_(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new cO(this),this.ellipsoid=zc.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new q.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new q.LoadingManager,this._listeners={}}addEventListener(e,t){q.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return q.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){q.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){q.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)o_(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 q.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(qg),this.setResolution(e,qg.x,qg.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(wO,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(xO,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 bO,isOrthographic:!1,sseDenominator:-1,position:new q.Vector3,invScale:-1,pixelSize:0});jc.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(jc.x-jc.y,jc.x-jc.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let 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],f=2/p[5];s.pixelSize=Math.max(f/d.height,u/d.width)}else s.sseDenominator=2/p[5]/d.height;Fp.copy(e.matrixWorld),Fp.premultiply(a.matrixWorldInverse),Fp.premultiply(a.projectionMatrix),l.setFromProjectionMatrix(Fp,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 q.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 q.Matrix4().copy(r).invert(),o=new fO;"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=SO}async parseTile(e,t,n,r,i){let o=t.engineData,a=Lp(r),s=this.fetchOptions,l=this.manager,c=null,d=o.transform,p=this._upRotationMatrix,u=(Qa(e)||n).toLowerCase();switch(u){case"b3dm":{let y=new Yg(l);y.workingPath=a,y.fetchOptions=s,y.adjustmentTransform.copy(p),c=y.parse(e);break}case"pnts":{let y=new Kg(l);y.workingPath=a,y.fetchOptions=s,c=y.parse(e);break}case"i3dm":{let y=new Qg(l);y.workingPath=a,y.fetchOptions=s,y.adjustmentTransform.copy(p),y.ellipsoid.copy(this.ellipsoid),c=y.parse(e);break}case"cmpt":{let y=new i_(l);y.workingPath=a,y.fetchOptions=s,y.adjustmentTransform.copy(p),y.ellipsoid.copy(this.ellipsoid),c=y.parse(e).then(w=>w.scene);break}case"gltf":case"glb":{let y=l.getHandler("path.gltf")||l.getHandler("path.glb")||new Hp.GLTFLoader(l);y.setWithCredentials(s.credentials==="include"),y.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&y.setCrossOrigin("use-credentials");let w=y.resourcePath||y.path||a;!/[\\/]$/.test(w)&&w.length&&(w+="/"),c=y.parseAsync(e,w).then(T=>{T.scene=T.scene||new q.Group;let{scene:x}=T;return x.updateMatrix(),x.matrix.multiply(p).decompose(x.position,x.quaternion,x.scale),T});break}default:c=this.invokeOnePlugin(y=>y.parseToMesh&&y.parseToMesh(e,t,n,r,i));break}let f=await c;if(f===null)throw Error(`TilesRenderer: Content type "${u}" not supported.`);let m,v;f.isObject3D?(m=f,v=null):(m=f.scene,v=f),m.updateMatrix(),m.matrix.premultiply(d),m.matrix.decompose(m.position,m.quaternion,m.scale),await this.invokeAllPlugins(y=>y.processTileModel&&y.processTileModel(m,t)),m.traverse(y=>{y[s_]=y.frustumCulled,y.userData.tile=t}),n_(m,!this.autoDisableRendererCulling);let g=[],b=[],h=[];if(m.traverse(y=>{if(y.geometry&&b.push(y.geometry),y.material){let w=y.material;g.push(y.material);for(let T in w){let x=w[T];x&&x.isTexture&&h.push(x)}}}),i.aborted){for(let y=0,w=h.length;y<w;y++){let T=h[y];T.image instanceof ImageBitmap&&T.image.close(),T.dispose()}return}o.materials=g,o.geometry=b,o.textures=h,o.scene=m,o.metadata=v}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let n=t.materials,r=t.geometry,i=t.textures,o=t.scene.parent;t.scene.traverse(a=>{a.userData.meshFeatures&&a.userData.meshFeatures.dispose(),a.userData.structuralMetadata&&a.userData.structuralMetadata.dispose()});for(let a=0,s=r.length;a<s;a++)r[a].dispose();for(let a=0,s=n.length;a<s;a++)n[a].dispose();for(let a=0,s=i.length;a<s;a++){let l=i[a];l.image instanceof ImageBitmap&&l.image.close(),l.dispose()}o&&o.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let n=e.engineData.scene;n&&(t?(n.parent=this.group,n.updateMatrixWorld(!0)):n.parent=null)}setTileVisible(e,t){let n=e.engineData.scene,{activeTiles:r,group:i}=this;n&&(t?i.add(n):(i.remove(n),r.has(e)&&(n.parent=i))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let n=this._bytesUsed;return!n.has(e)&&t&&n.set(e,vO(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 f=i[p],m,v;if(f.isOrthographic){let b=f.pixelSize;m=e.geometricError/b,v=1/0}else{let b=f.sseDenominator;v=o.distanceToPoint(f.position),m=v===0?1/0:e.geometricError/(v*b)}let g=i[p].frustum;o.intersectsFrustum(g)&&(a=!0,s=Math.max(s,m),l=Math.min(l,v)),c=Math.max(c,m),d=Math.min(d,v)}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 re=require("three"),S_=require("three/addons/loaders/GLTFLoader.js"),nb=require("three/addons/postprocessing/Pass.js");var Cj=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var l_=new Li;l_.maxJobs=10,l_.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)?ol(n,r):a?1:-1};var c_=new re.Vector3;function Fc(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,r=new re.BufferAttribute(new t(e.count*e.itemSize),e.itemSize,!0),i=e.itemSize,o=e.count;for(let a=0;a<o;a++)for(let s=0;s<i;s++){let l=re.MathUtils.clamp(e.getComponent(a,s),n,1);r.setComponent(a,s,l)}return r}function MO(e,t=Int16Array){let n=e.geometry,r=n.attributes,i=r.position;if(i.isInterleavedBufferAttribute||i.array instanceof t)return i;let o=new re.BufferAttribute(new t(i.count*i.itemSize),i.itemSize,!1),a=i.itemSize,s=i.count;n.computeBoundingBox();let l=n.boundingBox,{min:c,max:d}=l,p=2**(8*t.BYTES_PER_ELEMENT-1)-1,u=-p;for(let f=0;f<s;f++)for(let m=0;m<a;m++){let v=m===0?"x":m===1?"y":"z",g=c[v],b=d[v],h=re.MathUtils.mapLinear(i.getComponent(f,m),g,b,u,p);o.setComponent(f,m,h)}l.getCenter(c_).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(c_),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 rb=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 f in u){let m=u[f];m&&m.isTexture&&m.generateMipmaps&&(m.generateMipmaps=!1,m.minFilter=re.LinearFilter)}}if(p.geometry){let u=p.geometry,f=u.attributes;if(o){let{uv:m,uv1:v,uv2:g,uv3:b}=f;m&&(f.uv=Fc(m,l)),v&&(f.uv1=Fc(v,l)),g&&(f.uv2=Fc(g,l)),b&&(f.uv3=Fc(b,l))}if(n&&!f.normals&&u.computeVertexNormals(),a&&f.normals&&(f.normals=Fc(f.normals,c)),s&&MO(p,d),i&&u.index){let m=f.position.count,v=u.index,g=m>65535?Uint32Array:m>255?Uint16Array:Uint8Array;if(!(v.array instanceof g)){let b=new g(u.index.count);b.set(v.array);let h=new re.BufferAttribute(b,1);u.setIndex(h)}}}})}};function Tn(e,t,n){return e&&t in e?e[t]:n}function M_(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function _O(e){return/^FLOAT/.test(e)}function qc(e){return/^VEC/.test(e)}function Xc(e){return/^MAT/.test(e)}function __(e,t,n,r=null){return Xc(n)||qc(n)?r.fromArray(e,t):e[t]}function eb(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new re.Vector2;case"VEC3":return new re.Vector3;case"VEC4":return new re.Vector4;case"MAT2":return new re.Matrix2;case"MAT3":return new re.Matrix3;case"MAT4":return new re.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function u_(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 Wc(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 CO(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]=Gp(e,t[n])}else t=Gp(e,t);return t}function Gp(e,t=null){let n=e.default,r=e.type;if(t||(t=eb(e)),n===null){switch(r){case"SCALAR":return 0;case"VEC2":return t.set(0,0);case"VEC3":return t.set(0,0,0);case"VEC4":return t.set(0,0,0,0);case"MAT2":return t.identity();case"MAT3":return t.identity();case"MAT4":return t.identity();case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return""}throw Error("ClassProperty: invalid type.")}else if(Xc(r))t.fromArray(n);else if(qc(r))t.fromArray(n);else return n}function TO(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=Gp(e,a)),a}function o(a){if(Xc(r)){let s=a.elements;for(let l=0,c=n.length;l<c;l++)if(n[l]!==s[l])return!1;return!0}else if(qc(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 PO(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 AO(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=Xc(n)?c(p):qc(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 f=0,m=u.length;f<m;f++)u[f]=d(u[f]);return p}function d(p){return a&&(p=PO(r,p)),(a||_O(r))&&(p=p*i+o),p}}function ib(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++)u_(e.type,t[r])||(t[r]=eb(e))}else u_(e.type,t)||(t=eb(e));return t}function Wp(e,t){for(let n in t)n in e||delete t[n];for(let n in e){let r=e[n];t[n]=ib(r,t[n])}}function EO(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 Xp=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=Tn(t,"scale",1),this.max=Tn(t,"max",1/0),this.min=Tn(t,"min",-1/0),this.required=t.required||!1,this.noData=Tn(t,"noData",null),this.default=Tn(t,"default",null),this.semantic=Tn(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=Tn(n,"offset",this.offset),this.scale=Tn(n,"scale",this.scale),this.max=Tn(n,"max",this.max),this.min=Tn(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=Tn(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return ib(this,e,t)}resolveDefaultElement(e){return Gp(this,e)}resolveDefault(e){return CO(this,e)}resolveNoData(e){return TO(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 M_(this.type)?AO(this,e):e}},ob=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=Xp){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}},RO=class extends Xp{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},OO=class extends ob{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(RO)}getData(e,t,n={}){let r=this.properties;Wp(r,n);for(let i in r)n[i]=this.getPropertyValue(i,e,t,n[i]);return n}getPropertyValue(e,t,n,r=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let i=this.properties[e],o=i.type;if(!i)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(r);r=i.shapeToProperty(r);let a=n.getAttribute(i.attribute.toLowerCase());if(Xc(o)){let s=r.elements;for(let l=s.length;0<l;)s[0]=a.getComponent(t,0)}else if(qc(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}},DO=class extends Xp{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=EO(this.type),this.arrayOffsets=Tn(n,"arrayOffsets",null),this.stringOffsets=Tn(n,"stringOffsets",null),this.arrayOffsetType=Tn(n,"arrayOffsetType","UINT32"),this.stringOffsetType=Tn(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:r,arrayOffsetType:i}=this,o=new(Wc(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(Wc(i))(e[r])[n]}else this.array&&(n*=this.count);return n}},LO=class extends ob{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(DO)}getData(e,t={}){let n=this.properties;Wp(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(Wc(o,a))(l),d=i.getIndexOffsetFromId(s,t);if(M_(a)||a==="ENUM")return __(c,(d+n)*i.valueLength,a,r);if(a==="STRING"){let p=d+n,u=0;if(i.stringOffsets!==null){let{stringOffsets:m,stringOffsetType:v}=i,g=new(Wc(v))(s[m]);u=g[p+1]-g[p],p=g[p]}let f=new Uint8Array(c.buffer,p,u);r=new TextDecoder().decode(f)}else if(a==="BOOLEAN"){let p=d+n,u=Math.floor(p/8),f=p%8;r=(c[u]>>f&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}},Hc=new re.Box2,d_=class{constructor(){this._renderer=new re.WebGLRenderer,this._target=new re.WebGLRenderTarget(1,1),this._texTarget=new re.WebGLRenderTarget,this._quad=new nb.FullScreenQuad(new re.ShaderMaterial({blending:re.CustomBlending,blendDst:re.ZeroFactor,blendSrc:re.OneFactor,uniforms:{map:{value:null},pixel:{value:new re.Vector2}},vertexShader:`
3769
+ }`,Xp=class extends fl.Effect{constructor(n,r,i,o,a={}){super("SelectionOutlineEffect",ID,{blendFunction:fl.BlendFunction.SCREEN,uniforms:new Map([["selectionMask",new xt.Uniform(null)],["visibleMask",new xt.Uniform(null)],["texelSize",new xt.Uniform(new xt.Vector2)],["outlineColor",new xt.Uniform(new xt.Color(a.visibleEdgeColor??2278750))],["edgeStrength",new xt.Uniform(a.edgeStrength??3)]])});this.scene=n;this.camera=r;this.getObjects=i;this.layer=o;this.maskTarget=new xt.WebGLRenderTarget(1,1,{minFilter:xt.NearestFilter,magFilter:xt.NearestFilter});this.visibleTarget=new xt.WebGLRenderTarget(1,1,{minFilter:xt.NearestFilter,magFilter:xt.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 xt.ShaderMaterial({name:"SelectionOutline.IDs",vertexShader:OD,fragmentShader:DD,uniforms:{objectId:new xt.Uniform(new xt.Vector3),onlySelected:new xt.Uniform(!1)},blending:xt.NoBlending,toneMapped:!1,clipping:!0}),this.maskPass=new fl.RenderPass(n,r,this.maskMaterial),this.maskPass.skipShadowMapUpdate=!0,this.maskPass.ignoreBackground=!0,this.maskPass.clearPass.overrideClearColor=new xt.Color(0),this.maskPass.clearPass.overrideClearAlpha=0}update(n){let r=kD(this.scene,this.getObjects()),i=[],o=this.camera.layers.mask;try{this.scene.traverseVisible(a=>{if(!(a instanceof xt.Mesh))return;let s=r.get(a)??0,l=a.onBeforeRender;a.onBeforeRender=function(...c){l.apply(this,c);let u=c[4];u instanceof xt.ShaderMaterial&&u.uniforms.objectId&&(u.uniforms.objectId.value.set((s&255)/255,(s>>>8&255)/255,(s>>>16&255)/255),u.uniformsNeedUpdate=!0)},i.push(()=>{a.onBeforeRender=l})}),this.maskMaterial.uniforms.onlySelected.value=!1,this.maskPass.render(n,this.visibleTarget,null);for(let a of r.keys()){let s=a.layers.mask;a.layers.enable(this.layer),i.push(()=>{a.layers.mask=s})}this.camera.layers.set(this.layer),this.maskMaterial.uniforms.onlySelected.value=!0,this.maskPass.render(n,this.maskTarget,null)}finally{this.camera.layers.mask=o;for(let a of i)a()}}setSize(n,r){this.maskTarget.setSize(n,r),this.visibleTarget.setSize(n,r),this.uniforms.get("texelSize").value.set(1/n,1/r)}dispose(){this.maskPass.dispose(),this.maskMaterial.dispose(),this.maskTarget.dispose(),this.visibleTarget.dispose()}};function kD(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 xt.Mesh&&r.set(o,s);for(let l of o.children)i(l,s)};return i(e,0),r}var $M=require("react/jsx-runtime");function XM({objects:e,layer:t,options:n}){let r=(0,ib.useThree)(a=>a.scene),i=(0,ib.useThree)(a=>a.camera),o=(0,$p.useMemo)(()=>new qM.EffectPass(i,new Xp(r,i,()=>e.current,t,n)),[r,i,e,t,n]);return(0,$p.useEffect)(()=>()=>o.dispose(),[o]),(0,$M.jsx)("primitive",{object:o,dispose:null})}function YM(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 KM(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 Yp=require("@react-three/postprocessing"),or=require("postprocessing"),ZM=require("three");function QM(e){return e==="linear"?or.ToneMappingMode.LINEAR:e==="reinhard"?or.ToneMappingMode.REINHARD:or.ToneMappingMode.ACES_FILMIC}function Kp(e){switch(e){case"verySmall":return or.KernelSize.VERY_SMALL;case"small":return or.KernelSize.SMALL;case"medium":return or.KernelSize.MEDIUM;case"large":return or.KernelSize.LARGE;case"veryLarge":return or.KernelSize.VERY_LARGE;case"huge":return or.KernelSize.HUGE}}function JM(e){switch(e){case"constantMild":return or.GlitchMode.CONSTANT_MILD;case"constantWild":return or.GlitchMode.CONSTANT_WILD;default:return or.GlitchMode.SPORADIC}}function ob(e){let t=new ZM.Color(e);return[t.r,t.g,t.b,1]}function e_(e){return e==="radial"?Yp.RampType.Radial:e==="mirroredLinear"?Yp.RampType.MirroredLinear:Yp.RampType.Linear}var ct=require("react/jsx-runtime"),cs={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new Wr.Color(so.color).getHex(),hiddenEdgeColor:new Wr.Color(so.color).multiplyScalar(.35).getHex(),kernelSize:wo.KernelSize.VERY_SMALL,blur:!1,xRay:!1},LD={edgeStrength:3};function BD(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var Wc=[],ND=(0,qt.memo)(function({sceneConfig:t,selectedObjectRef:n,selectedObjectOutlineColor:r,highlightOnHover:i=!1,disabled:o=!1,onOutlineEffect:a,hasMultiSelection:s,multiOutlineObjects:l}){let c=(0,hl.useThree)(M=>M.scene),u=(0,hl.useThree)(M=>M.gl),p=(0,qt.useRef)(null),d=t?.postProcessing,m=n??null,f=d?.outline.enabled===!0,b=f||i,g=(0,qt.useMemo)(()=>new Wr.Color(r??"#22c55e").getHex(),[r]),y=(0,qt.useMemo)(()=>({...LD,blendFunction:wo.BlendFunction.SCREEN,visibleEdgeColor:g}),[g]),h=2;for(;h===d?.outline.selectionLayer||h===d?.selectiveBloom.selectionLayer;)h+=1;let[v,x]=(0,qt.useState)(()=>u.xr?.isPresenting??!1);(0,qt.useEffect)(()=>{let M=u.xr;if(!M)return;let C=()=>x(!0),T=()=>x(!1);return M.addEventListener("sessionstart",C),M.addEventListener("sessionend",T),x(M.isPresenting),()=>{M.removeEventListener("sessionstart",C),M.removeEventListener("sessionend",T)}},[u]);let P=c.children.filter(M=>M.isLight),w=(0,qt.useMemo)(()=>new Wr.Vector2(d?.chromaticAberration.offsetX??.002,d?.chromaticAberration.offsetY??.002),[d?.chromaticAberration.offsetX,d?.chromaticAberration.offsetY]),D=(0,qt.useMemo)(()=>new Wr.Color(d?.outline.visibleEdgeColor??"#ffffff").getHex(),[d?.outline.visibleEdgeColor]),E=(0,qt.useMemo)(()=>new Wr.Color(d?.outline.hiddenEdgeColor??"#22090a").getHex(),[d?.outline.hiddenEdgeColor]),S=(0,qt.useMemo)(()=>ob(d?.ramp.startColor??"#000000"),[d?.ramp.startColor]),_=(0,qt.useMemo)(()=>ob(d?.ramp.endColor??"#ffffff"),[d?.ramp.endColor]);return!d||v||o?null:(0,ct.jsxs)(ct.Fragment,{children:[d.godRays.enabled===!0&&(0,ct.jsxs)("mesh",{ref:p,position:d.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,ct.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,ct.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,ct.jsxs)(He.EffectComposer,{multisampling:0,enableNormalPass:d.ssao.enabled===!0,autoClear:!1,children:[d.smaa.enabled===!0&&(0,ct.jsx)(He.SMAA,{}),d.ssao.enabled===!0&&(0,ct.jsx)(He.SSAO,{samples:d.ssao.samples,rings:d.ssao.rings,intensity:d.ssao.intensity,radius:d.ssao.radius,bias:d.ssao.bias,luminanceInfluence:d.ssao.luminanceInfluence,fade:d.ssao.fade,minRadiusScale:d.ssao.minRadiusScale,worldDistanceThreshold:d.ssao.worldDistanceThreshold,worldDistanceFalloff:d.ssao.worldDistanceFalloff,worldProximityThreshold:d.ssao.worldProximityThreshold,worldProximityFalloff:d.ssao.worldProximityFalloff}),d.autofocus.enabled===!0&&(0,ct.jsx)(He.Autofocus,{focusDistance:d.autofocus.focusDistance,focusRange:d.autofocus.focusRange,focalLength:d.autofocus.focalLength,bokehScale:d.autofocus.bokehScale,target:d.autofocus.target,mouse:d.autofocus.mouse,debug:d.autofocus.debug||void 0,manual:d.autofocus.manual,smoothTime:d.autofocus.smoothTime}),d.autofocus.enabled!==!0&&d.depthOfField.enabled===!0&&(0,ct.jsx)(He.DepthOfField,{focusDistance:d.depthOfField.focusDistance,focusRange:d.depthOfField.focusRange,focalLength:d.depthOfField.focalLength,bokehScale:d.depthOfField.bokehScale}),d.bloom.enabled===!0&&(0,ct.jsx)(He.Bloom,{intensity:d.bloom.intensity,luminanceThreshold:d.bloom.luminanceThreshold,luminanceSmoothing:d.bloom.luminanceSmoothing,mipmapBlur:d.bloom.mipmapBlur,radius:d.bloom.radius,levels:d.bloom.levels}),d.selectiveBloom.enabled===!0&&(0,ct.jsx)(He.SelectiveBloom,{selection:m??void 0,lights:P,selectionLayer:d.selectiveBloom.selectionLayer,intensity:d.selectiveBloom.intensity,luminanceThreshold:d.selectiveBloom.luminanceThreshold,luminanceSmoothing:d.selectiveBloom.luminanceSmoothing,kernelSize:Kp(d.selectiveBloom.kernelSize),mipmapBlur:d.selectiveBloom.mipmapBlur,inverted:d.selectiveBloom.inverted,ignoreBackground:d.selectiveBloom.ignoreBackground}),b&&(0,ct.jsx)(He.Outline,{ref:a,selection:Wc,selectionLayer:d.outline.selectionLayer,blendFunction:wo.BlendFunction.SCREEN,edgeStrength:f?d.outline.edgeStrength:cs.edgeStrength,pulseSpeed:f?d.outline.pulseSpeed:cs.pulseSpeed,visibleEdgeColor:f?D:cs.visibleEdgeColor,hiddenEdgeColor:f?E:cs.hiddenEdgeColor,kernelSize:f?Kp(d.outline.kernelSize):cs.kernelSize,blur:f?d.outline.blur:cs.blur,xRay:f?d.outline.xRay:cs.xRay}),s&&(0,ct.jsx)(XM,{objects:l,layer:h,options:y}),d.chromaticAberration.enabled===!0&&(0,ct.jsx)(He.ChromaticAberration,{offset:w,radialModulation:d.chromaticAberration.radialModulation,modulationOffset:d.chromaticAberration.modulationOffset}),d.colorAverage.enabled===!0&&(0,ct.jsx)(He.ColorAverage,{}),d.dotScreen.enabled===!0&&(0,ct.jsx)(He.DotScreen,{angle:d.dotScreen.angle,scale:d.dotScreen.scale}),d.glitch.enabled===!0&&(0,ct.jsx)(He.Glitch,{mode:JM(d.glitch.mode),delay:new Wr.Vector2(d.glitch.delay[0],d.glitch.delay[1]),duration:new Wr.Vector2(d.glitch.duration[0],d.glitch.duration[1]),strength:new Wr.Vector2(d.glitch.strength[0],d.glitch.strength[1]),chromaticAberrationOffset:new Wr.Vector2(d.glitch.chromaticAberrationOffset[0],d.glitch.chromaticAberrationOffset[1]),columns:d.glitch.columns,ratio:d.glitch.ratio,active:!0}),d.grid.enabled===!0&&(0,ct.jsx)(He.Grid,{scale:d.grid.scale,lineWidth:d.grid.lineWidth}),d.lensflare.enabled===!0&&(0,ct.jsx)(HM,{config:d.lensflare}),d.godRays.enabled===!0&&(0,ct.jsx)(He.GodRays,{sun:p,samples:d.godRays.samples,density:d.godRays.density,decay:d.godRays.decay,weight:d.godRays.weight,exposure:d.godRays.exposure,clampMax:d.godRays.clampMax,blur:d.godRays.blur,kernelSize:Kp(d.godRays.kernelSize)}),d.noise.enabled===!0&&(0,ct.jsx)(He.Noise,{premultiply:d.noise.premultiply,opacity:d.noise.opacity,blendFunction:wo.BlendFunction.ADD}),d.brightnessContrast.enabled===!0&&(0,ct.jsx)(He.BrightnessContrast,{brightness:d.brightnessContrast.brightness,contrast:d.brightnessContrast.contrast}),d.hueSaturation.enabled===!0&&(0,ct.jsx)(He.HueSaturation,{hue:d.hueSaturation.hue,saturation:d.hueSaturation.saturation}),d.toneMapping.enabled===!0&&(0,ct.jsx)(UM,{exposure:d.toneMapping.exposure}),d.vignette.enabled===!0&&(0,ct.jsx)(He.Vignette,{eskil:d.vignette.eskil,offset:d.vignette.offset,darkness:d.vignette.darkness,blendFunction:wo.BlendFunction.NORMAL}),d.toneMapping.enabled===!0&&(0,ct.jsx)(He.ToneMapping,{mode:QM(d.toneMapping.mode),resolution:d.toneMapping.resolution,whitePoint:d.toneMapping.whitePoint,middleGrey:d.toneMapping.middleGrey,minLuminance:d.toneMapping.minLuminance,averageLuminance:d.toneMapping.averageLuminance,adaptationRate:d.toneMapping.adaptationRate}),d.sepia.enabled===!0&&(0,ct.jsx)(He.Sepia,{intensity:d.sepia.intensity,blendFunction:wo.BlendFunction.NORMAL}),d.scanline.enabled===!0&&(0,ct.jsx)(He.Scanline,{density:d.scanline.density,blendFunction:wo.BlendFunction.OVERLAY}),d.pixelation.enabled===!0&&(0,ct.jsx)(He.Pixelation,{granularity:d.pixelation.granularity}),d.ramp.enabled===!0&&(0,ct.jsx)(He.Ramp,{rampType:e_(d.ramp.rampType),rampStart:d.ramp.rampStart,rampEnd:d.ramp.rampEnd,startColor:S,endColor:_,opacity:d.ramp.rampMask?1:d.ramp.opacity??.5,rampBias:d.ramp.rampBias,rampGain:d.ramp.rampGain,rampMask:d.ramp.rampMask,rampInvert:d.ramp.rampInvert})]})]})});function VD(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function t_({hoveredObjectRef:e,selectedObjectRefs:t,...n}){let r=(0,hl.useThree)(p=>p.scene),i=(0,hl.useThree)(p=>p.camera),o=(0,hl.useThree)(p=>p.invalidate),[a,s]=(0,qt.useState)(null),l=(0,qt.useRef)(Wc);l.current=t??Wc;let c=(0,qt.useCallback)(p=>s(p),[]);(0,qt.useLayoutEffect)(()=>{if(a)return KM(a,i)},[a,i]);let u=(0,qt.useRef)({effect:null,objects:Wc});return(0,qt.useEffect)(()=>{if(!a)return;let d=n.sceneConfig?.postProcessing?.outline.enabled===!0?BD(r):e&&YM(e)?[e]:Wc;u.current.effect===a&&VD(u.current.objects,d)||(u.current={effect:a,objects:d},a.selection.set(d),o())}),(0,qt.useEffect)(()=>{o()},[t,o]),(0,ct.jsx)(ND,{...n,onOutlineEffect:c,hasMultiSelection:l.current.length>0,multiOutlineObjects:l})}var on=require("react/jsx-runtime"),jD=1.5;function ab({runtimeStats:e,children:t,camera:n,backgroundColor:r,shadows:i=!0,sceneConfig:o,selectedObjectRef:a,selectedObjectRefs:s,selectedObjectOutlineColor:l,hoveredObjectRef:c,highlightOnHover:u,renderMode:p="demand",maxDpr:d=2,xrStore:m,rendererCaptureRef:f,preserveDrawingBuffer:b=!1,reduceGpuLoad:g,suspended:y=!1,paused:h=!1,onRendererCreated:v,backend:x="webgl"}){let P=x==="webgpu",w=g??Ec(),D=w?Math.min(d,jD):d,E=i&&!w,S=(0,vi.useMemo)(()=>{if(r)return{background:r};if(!o?.background.enabled)return{background:"transparent"};if(o.background.type==="color")return{background:o.background.color};if(o.background.type==="image"&&o.background.imageUrl.trim()){let R=o.background.imageUrl.trim(),O=Ko(R)??R;return{backgroundImage:`url(${JSON.stringify(O)})`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}}return{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}},[r,o]),_=(0,vi.useMemo)(()=>{if(r)return r;let R=o?.background;if(R?.enabled){if(R.type==="color")return R.color;if(R.type==="image"&&R.imageUrl.trim()||R.type==="environment")return null}return"#1c1c1d"},[r,o]),M=(0,vi.useMemo)(()=>{let R=o?.postProcessing;return R?!!(R.glitch.enabled||R.noise.enabled||R.lensflare.enabled&&R.lensflare.animated):!1},[o?.postProcessing]),[C,T]=(0,vi.useState)(!1),I=o?.environment,L=o?.groundShadows,B=(0,vi.useMemo)(()=>{if(!I)return null;if(I.source==="custom"){let R=I.customEnvironmentUrl.trim();return O0(R)?{files:R}:null}return{preset:I.preset}},[I]),N=(0,on.jsxs)(on.Fragment,{children:[(0,on.jsx)(Zw,{captureRef:f}),e&&(0,on.jsx)(RM,{...e,reducedGpuLoad:w,shadows:E,postProcessing:!w&&!P}),(0,on.jsx)(Qw,{}),(0,on.jsx)(VM,{cameraConfig:n}),(0,on.jsx)(kM,{active:M}),(0,on.jsx)(BM,{color:_}),B?(0,on.jsx)(ll,{onError:R=>console.warn("Failed to load environment map:",R),children:(0,on.jsx)(vi.Suspense,{fallback:null,children:(0,on.jsx)(n_.Environment,{...B,environmentIntensity:I?.intensity??.25,backgroundIntensity:I?.intensity??.25,background:o?.background.enabled===!0&&o.background.type==="environment"})})}):null,(0,on.jsx)(NM,{rotation:I?.rotation??0}),m&&(0,on.jsx)(IM,{onPresentingChange:T}),L?.enabled&&L.mode==="shadowCatcher"&&!C&&!P&&(0,on.jsx)(LM,{position:[0,L.height,0],scale:L.size,opacity:L.intensity,blur:L.borderFade,far:15,resolution:1024,color:"#000000"}),t,(0,on.jsx)(t_,{sceneConfig:o,selectedObjectRef:a,selectedObjectRefs:s,selectedObjectOutlineColor:l,hoveredObjectRef:c,highlightOnHover:u,disabled:w||P}),P?(0,on.jsx)(zD,{toneMapping:o?.postProcessing.toneMapping}):null]});return(0,on.jsx)(qc.Canvas,{frameloop:y||h&&!C?"never":p,onCreated:({gl:R})=>v?.(R),dpr:[1,D],shadows:E?"percentage":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:S,camera:n??{fov:50},gl:P?jw:{preserveDrawingBuffer:b,toneMapping:So.NoToneMapping,toneMappingExposure:1},flat:P||void 0,children:m&&!P?(0,on.jsxs)(r_.XR,{store:m,children:[(0,on.jsx)(DM,{renderMode:p,suspended:y}),N]}):N})}var UD={linear:So.LinearToneMapping,reinhard:So.ReinhardToneMapping,aces:So.ACESFilmicToneMapping};function zD({toneMapping:e}){let t=(0,qc.useThree)(a=>a.gl),n=(0,qc.useThree)(a=>a.invalidate),r=e?.enabled===!0,i=e?.mode??"aces",o=e?.exposure??1;return(0,vi.useEffect)(()=>{t.toneMapping=r?UD[i]:So.NoToneMapping,t.toneMappingExposure=r?o:1,n()},[t,n,r,i,o]),null}var Qp=require("@react-three/drei"),Xc=require("three"),Mo=require("react");var Zp=e=>e*Math.PI/180;function i_(e){return{minDistance:e?.minDistance??0,maxDistance:e?.maxDistance??1/0,minPolarAngle:Zp(e?.minPolarAngle??0),maxPolarAngle:Zp(e?.maxPolarAngle??180),minAzimuthAngle:Zp(e?.minAzimuthAngle??-1/0),maxAzimuthAngle:Zp(e?.maxAzimuthAngle??1/0),boundaryEnclosesCamera:e?.boundaryEnclosesCamera??!1,boundaryFriction:e?.boundaryFriction??0,panBoundary:e?.panBoundary}}var sb=require("react/jsx-runtime");function lb({controlsRef:e,onCameraChange:t,cameraLimits:n,controllerType:r="orbit",onPointerLockExit:i,reducedMotion:o=!1}){let a=r==="orbit",s=(0,Mo.useRef)(null);return(0,Mo.useEffect)(()=>{if(!a)return s.current?.lock(),()=>{s.current?.unlock()}},[a]),(0,Mo.useEffect)(()=>{a&&document.pointerLockElement&&document.exitPointerLock()},[a]),(0,Mo.useEffect)(()=>{if(a)return;let l=()=>{document.pointerLockElement||i?.()};return document.addEventListener("pointerlockchange",l),()=>{document.removeEventListener("pointerlockchange",l)}},[a,i]),(0,Mo.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let l=e.current;l&&l0(l,o)},[a,e,o]),(0,Mo.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,Mo.useEffect)(()=>{if(!a||!e||typeof e!="object"||!("current"in e))return;let l=e.current;if(!l)return;let c=i_(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 Xc.Box3(new Xc.Vector3(...c.panBoundary[0]),new Xc.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,sb.jsx)(Qp.CameraControls,{ref:e,makeDefault:!0,smoothTime:o?0:.3,dollyToCursor:!0}):(0,sb.jsx)(Qp.PointerLockControls,{ref:s,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}var xi=require("react"),$c=require("@react-three/fiber"),a_=require("three");var qr=require("react/jsx-runtime");function s_(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 FD(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 GD(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 HD(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var WD={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}]},qD={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function o_({light:e,shadows:t,shadowsEnabled:n,environmentRotation:r,modelBounds:i,objectBindings:o,nodeRefs:a}){let s=(0,xi.useRef)(null),l=(0,xi.useRef)(null),c=(0,xi.useRef)(null),u=(0,$c.useThree)(y=>y.camera),p=(0,$c.useThree)(y=>y.scene),d=(0,xi.useMemo)(()=>new a_.Vector3,[]),m=(0,xi.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:s_(e.position,r),[e.position,e.attachedToCamera,e.attachment,r]);(0,$c.useFrame)(()=>{let y=s.current??l.current??c.current;if(!y)return;if(e.attachedToCamera){y.position.copy(u.position);return}let h=e.attachment;if(!h)return;let v=o?dn(o,h.objectId):null,P=(v?o?.[v]:void 0)?.modelObjectId??h.objectId,w=(v?a?.current[v]:void 0)??Lr(p,P);w&&(d.fromArray(h.offset),w.localToWorld(d),y.position.copy(d))});let f=n&&t.enabled&&e.castShadow,b=(0,xi.useMemo)(()=>e.type==="directional"&&f&&i&&!e.attachedToCamera?FD(i,m):null,[e.type,e.attachedToCamera,f,i,m]),g=(0,xi.useMemo)(()=>e.type==="spot"&&f&&i&&!e.attachedToCamera?GD(i,m):null,[e.type,e.attachedToCamera,f,i,m]);return(0,xi.useEffect)(()=>{let y=s.current??c.current;if(!y)return;let[h,v,x]=HD(e,f,i);y.target.position.set(h,v,x),y.target.updateMatrixWorld()},[e,f,i]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,qr.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:b?.position??m,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":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,qr.jsx)("pointLight",{ref:l,color:e.color,intensity:e.intensity,position:m,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,qr.jsx)("spotLight",{ref:c,color:e.color,intensity:e.intensity,position:m,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:f,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":g?.near??.5,"shadow-camera-far":g?.far??40}):e.type==="hemisphere"?(0,qr.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function cb({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:r=0,environmentConfig:i,modelBounds:o,objectBindings:a,nodeRefs:s}){let l=e??WD,c=t??qD,u=i?.shadowLight,p=s_([5,10,5],r);return(0,qr.jsxs)(qr.Fragment,{children:[(0,qr.jsx)("ambientLight",{intensity:l.ambient.intensity,color:l.ambient.color}),l.lights.map(d=>(0,qr.jsx)(o_,{light:d,shadows:c,shadowsEnabled:n,environmentRotation:r,modelBounds:o,objectBindings:a,nodeRefs:s},d.id)),u?.enabled&&(0,qr.jsx)(o_,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:u.intensity,position:p,attachedToCamera:!1,castShadow:!0,shadowBias:u.bias,visible:!0},shadows:c,shadowsEnabled:n,environmentRotation:0,modelBounds:o,objectBindings:a,nodeRefs:s})]})}var me=require("react"),ms=require("@react-three/fiber");var Yc=require("@react-three/fiber"),us=require("three"),aa=require("three-stdlib"),m_=require("three/examples/jsm/loaders/USDLoader.js");var XD=require("@react-three/drei"),$D=require("@react-three/fiber"),YD=require("react"),u_=require("three");var gl=require("three-stdlib");function KD(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=u_.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 ub="https://assets.react-immersive.liveroom.dev/three-r184/draco/",db="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function ZD(e,t){if(!jr(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}var l_=new Map,c_=new WeakMap;function QD(e){let t=l_.get(e);return t||(t=new gl.DRACOLoader,t.setDecoderPath(e),l_.set(e,t)),t}function JD(e,t){let n=c_.get(t);n||(n=new Map,c_.set(t,n));let r=n.get(e);return r||(r=ZD(new gl.KTX2Loader().setTranscoderPath(e),t),n.set(e,r)),r}function d_(e,t={},n){let{dracoDecoderPath:r=ub,ktx2TranscoderPath:i=db,meshopt:o=!0}=t;r&&e.setDRACOLoader(QD(r)),o&&e.setMeshoptDecoder(gl.MeshoptDecoder),i&&n&&e.setKTX2Loader(JD(i,n)),e.register((a=>KD(a)))}var em=class extends us.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,r,i,o){let a=performance.now(),s={format:this.options.source.format,name:this.options.source.entryPath??rs(n),sourceBytes:this.options.source.sourceBytes??null,failedResources:[]},l=c=>{s.sourceBytes===null&&c.lengthComputable&&c.total>0&&(s.sourceBytes=c.total),i?.(c)};this.loadAsset(n,l,s).then(c=>{s.loadDurationMs=Math.max(0,performance.now()-a),Rc(c.scene,s),r(c)}).catch(c=>{s.loadDurationMs=Math.max(0,performance.now()-a),c&&typeof c=="object"&&Rc(c,s),o?.(c)})}async loadAsset(n,r,i){let o=nI(this.options.source);o.onError=c=>{let u=Object.entries(this.options.source.resourceUrls??{}).find(([,d])=>d===c)?.[0],p=Pg(u??c);i.failedResources.includes(p)||i.failedResources.push(p)};let{format:a}=this.options.source;if(a==="obj")return eI(n,o,this.options.source,r);if(a==="fbx"){let c=pb(this,new aa.FBXLoader(o)),u=oI(n,this.options.source);u&&c.setResourcePath(u);let p=await c.loadAsync(n,r);return Jp(p,"FBXMesh",!1),{scene:p,animations:p.animations??[]}}if(a==="stl"||a==="ply"){let c=await tI(n,o,r),u=vS(this.options.source.entryPath??n,a==="stl"?"STL model":"PLY model"),p=a==="stl"?xS(c,u):wS(c,u);return Jp(p,a==="stl"?"STLMesh":"PLYMesh",!0),{scene:p,animations:[]}}if(a==="usdz"){let u=await pb(this,new m_.USDLoader(o)).loadAsync(n,r);return Jp(u,"USDZMesh",!1),{scene:u,animations:u.animations??[]}}let s=pb(this,new aa.GLTFLoader(o));d_(s,this.options.decoderConfig,this.options.renderer),s.register(c=>{let u=c.json,p=d=>Array.isArray(d)?d.filter(m=>typeof m=="string"):[];return i.extensionsUsed=p(u.extensionsUsed),i.extensionsRequired=p(u.extensionsRequired),{name:"RI_asset_diagnostics",beforeRoot:()=>null}});let l=await s.loadAsync(n,r);return{scene:l.scene,animations:l.animations??[],materialVariants:X0(l)}}};Cw(e=>{Yc.useLoader.clear(em,e)});function Kc(e,t={},n,r){let i=(0,Yc.useThree)(s=>s.gl),o=Oc(e),a=n?{...o,format:n}:o;return(0,Yc.useLoader)(em,e,s=>{s.configure({source:a,decoderConfig:t,renderer:i})},r)}async function eI(e,t,n,r){let i=await p_(e,t,r),o=new aa.OBJLoader(t),a=rI(i);if(a){let l=iI(a,e,n);if(l)try{let c=await p_(l.url,t),p=new aa.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 Jp(s,"OBJMesh",!0),{scene:s,animations:[]}}function Jp(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 p_(e,t,n){let r=new us.FileLoader(t);return r.setResponseType("text"),r.loadAsync(e,n)}function tI(e,t,n){let r=new us.FileLoader(t);return r.setResponseType("arraybuffer"),r.loadAsync(e,n)}function pb(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function nI(e){let t=new us.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(r=>{if(/^(?:blob:|data:)/i.test(r))return r;let i=nm(h_(r).split(/[?#]/)[0]),o=n[i];if(o)return o;let a=tm(e.entryPath??""),s=nm(a?`${a}/${i}`:i);return n[s]??r}),t}function rI(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function iI(e,t,n){if(n.resourceUrls&&n.entryPath){let r=nm(`${tm(n.entryPath)}/${h_(e)}`),i=n.resourceUrls[r];if(!i)return null;let o=tm(r);return{url:i,basePath:o?`${o}/`:""}}try{let r=new URL(e,t).href;return{url:r,basePath:f_(r)}}catch{return null}}function oI(e,t){if(t.resourceUrls&&t.entryPath){let n=tm(t.entryPath);return n?`${n}/`:""}return f_(e)}function f_(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function tm(e){let t=nm(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function nm(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 h_(e){try{return decodeURI(e)}catch{return e}}var Xr=require("react");function g_(e,t,n){let[r,i]=(0,Xr.useState)({}),o=(0,Xr.useRef)(new Map),[a,s]=(0,Xr.useState)(0),l=(0,Xr.useRef)(t);l.current=t;let c=(0,Xr.useRef)(n);c.current=n;let u=(0,Xr.useCallback)((p,d)=>{l.current?.some(m=>m.url===p)&&i(m=>m[p]===d?m:{...m,[p]:d})},[]);return(0,Xr.useEffect)(()=>{let p=new Set(t?.map(m=>m.url)),d=!1;for(let[m,f]of o.current)p.has(m)&&r[m]===f&&f.parent===e||(f.removeFromParent(),o.current.delete(m),d=!0);for(let[m,f]of Object.entries(r))!p.has(m)||o.current.get(m)===f||(e.add(f),o.current.set(m,f),d=!0,c.current?.(m,f));i(m=>{let f=Object.entries(m).filter(([b])=>p.has(b));return f.length===Object.keys(m).length?m:Object.fromEntries(f)}),d&&s(m=>m+1)},[e,t,r]),(0,Xr.useEffect)(()=>()=>{o.current.forEach(p=>p.removeFromParent()),o.current.clear()},[]),{rootsByUrl:r,revision:a,onSourceReady:u}}var mn=require("three");function Zc(e){e.updateWorldMatrix(!0,!0);let t=new mn.Matrix4().copy(e.matrixWorld).invert(),n=new mn.Box3,r=new mn.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 mn.Matrix4().multiplyMatrices(t,o.matrixWorld);r.copy(a.geometry.boundingBox).applyMatrix4(s),n.union(r),i=!0}),i?n:null}function ds(e){let t=Zc(e);return t?t.getCenter(new mn.Vector3):new mn.Vector3}function b_(e,t="XYZ"){return new mn.Quaternion().setFromEuler(new mn.Euler(e[0],e[1],e[2],t))}function aI(e,t,n,r,i="XYZ",o){let a=new mn.Vector3(...r).multiply(new mn.Vector3(...n));o&&a.applyMatrix4(qs(o)),a.applyQuaternion(b_(t,i));let s=a.add(new mn.Vector3(...e));return[s.x,s.y,s.z]}function rm(e,t,n,r="XYZ",i){return{point:[...e],offset:aI([0,0,0],t,n,e,r,i)}}function Qc(e,t,n,r,i="XYZ",o){if(!r)return e;let a=new mn.Vector3(...r.point).multiply(new mn.Vector3(...n));return o&&a.applyMatrix4(qs(o)),a.applyQuaternion(b_(t,i)),new mn.Vector3(...e).add(new mn.Vector3(...r.offset)).sub(a).toArray()}var lt=require("three"),mb=require("three-stdlib");function y_(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 _o=require("three");function v_(e){let t=e._loopCount;return e.loop===_o.LoopPingPong&&(t&1)===1}function sI(e){return v_(e)?e.getClip().duration-e.time:e.time}function x_({root:e,clips:t,getClipConfig:n,onChange:r}){let i=new _o.AnimationMixer(e),o=new Map;for(let{clip:_,sourceName:M}of t)o.set(M,i.clipAction(_));let a=new Map,s=new Set,l=new Map,c=1,u=_=>typeof _=="string",p=_=>u(_)?a.has(_)?[_]:[]:[...a.keys()],d=(_,M)=>{let C=ZS(n(M));C==="once"?_.setLoop(_o.LoopOnce,1):C==="ping-pong"?_.setLoop(_o.LoopPingPong,1/0):_.setLoop(_o.LoopRepeat,1/0),_.clampWhenFinished=C==="once"},m=_=>{_.action.setEffectiveTimeScale(_.reverse?-_.speed:_.speed)},f=_=>{let M=a.get(_);M&&(M.action.stop(),a.delete(_))},b=(_,M={})=>{let C=o.get(_);if(!C||n(_)?.hidden)return;let T=Number.isFinite(M.fade)&&M.fade>0?M.fade:0,I=M.reverse??!1;if(!M.alongside)for(let[R,O]of[...a])R!==_&&(T>0?(a.delete(R),O.action.fadeOut(T),s.add(O.action)):f(R));s.delete(C)&&C.stop();let L=C.getClip().duration,B=a.get(_),N=()=>{C.reset(),I&&(C.time=L),C.play()};if(!B)N(),T>0&&C.fadeIn(T);else{let R=I?C.time<=0:C.time>=L;B.finished&&R&&N(),C.paused=!1,C.enabled=!0,a.delete(_)}d(C,_),B={action:C,speed:n(_)?.speed??l.get(_)??c,reverse:I,finished:!1},B.speed=Op(B.speed),m(B),a.set(_,B),r()},g=_=>{for(let M of p(_))a.get(M).action.paused=!0;r()},y=_=>{for(let M of p(_))f(M);if(!u(_)){for(let M of s)M.stop();s.clear()}r()},h=(_,M)=>{let C=Op(_);u(M)?l.set(M,C):c=C;for(let T of p(M)){let I=a.get(T);l.set(T,C),I.speed=C,m(I)}r()},v=(_,M)=>{for(let C of p(M)){let T=a.get(C),I=T.action.getClip().duration,L=Math.min(Math.max(_,0),I);T.action.time=v_(T.action)?I-L:L,T.finished&&(T.finished=!1,T.action.paused=!0)}i.update(0),r()},x=()=>{for(let[_,M]of[...a]){let C=n(_);if(C?.hidden){f(_);continue}d(M.action,_),C?.speed!==void 0&&(M.speed=Op(C.speed),m(M))}r()},P=_=>{for(let M of a.values())M.action===_.action&&(M.finished=!0);r()};return i.addEventListener("finished",P),{play:b,pause:g,stop:y,setSpeed:h,seek:v,getState:()=>{let _=[...a].map(([C,T])=>({clip:C,status:T.finished?"finished":T.action.paused?"paused":"playing",time:sI(T.action),duration:T.action.getClip().duration,speed:T.speed,reverse:T.reverse})),M=_[_.length-1];return{currentClip:M?.clip??null,isPlaying:_.some(C=>C.status==="playing"),speed:M?.speed??c,time:M?.time??0,duration:M?.duration??0,active:_}},applyClipConfigs:x,isRunning:()=>{if(s.size>0)return!0;for(let{action:_}of a.values())if(!_.paused&&_.enabled)return!0;return!1},update:_=>{i.update(_);for(let M of s)(!M.enabled||M.getEffectiveWeight()<=0)&&(M.stop(),s.delete(M))},dispose:()=>{i.removeEventListener("finished",P),i.stopAllAction(),i.uncacheRoot(e),a.clear(),s.clear()}}}var $r=require("three");function im(e){if(GS(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new $r.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 $r.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof $r.Color&&n.emissive.copy(t.color)):(t.color instanceof $r.Color&&n.color.copy(t.color),t.map instanceof $r.Texture&&(n.map=t.map),t.emissive instanceof $r.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof $r.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 om(e){if(HS(e))return e.clone();let t=new $r.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(xo(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 am(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=xo(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=xo(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 $i=require("three");function w_(e,t,n,r){let i=gi(t),o=gc(n,i),a=WS(r,t),s=qS(r,t),l=XS(r,t);return a||s||l?Ud(e.userData,t,o,n,a??[0,0],s??1,l??0):(zd(e.userData,t),o)}function Rn(e,t,n,r){if(!n){zd(e.userData,t);return}let i=Rp[t];e[i]=w_(e,t,n,r)}function sm(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 $i.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??$i.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??$i.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(xo(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(xo(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new $i.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 $i.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 $i.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let r=Kt(t,"texture"),i=Kt(t,"metalnessMap"),o=Kt(t,"roughnessMap"),a=Kt(t,"emissiveMap"),s=Kt(t,"alphaMap"),l=Kt(t,"normalMap"),c=Kt(t,"bumpMap"),u=Kt(t,"aoMap"),p=Kt(t,"displacementMap"),d=Kt(t,"clearcoatMap"),m=Kt(t,"clearcoatRoughnessMap"),f=Kt(t,"clearcoatNormalMap"),b=Kt(t,"anisotropyMap"),g=Kt(t,"transmissionMap"),y=Kt(t,"thicknessMap"),h=Kt(t,"sheenColorMap"),v=Kt(t,"sheenRoughnessMap"),x=Kt(t,"specularIntensityMap"),P=Kt(t,"specularColorMap");if(r?(e.map=w_(e,"texture",r,t),e.color.set(n??"#ffffff"),e.vertexColors=!1):(zd(e.userData,"texture"),n&&(e.map=null,e.color.set(n),e.vertexColors=!1)),Rn(e,"metalnessMap",i,t),t?.metalness!==void 0&&(e.metalness=t.metalness),Rn(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),Rn(e,"emissiveMap",a,t),t?.opacity!==void 0&&(e.opacity=t.opacity),Rn(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=YS(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=$S(t.side)),Rn(e,"normalMap",l,t),l||t?.normalScale!==void 0){let w=t?.normalScale??Math.abs(xo(e.userData.baseNormalScale).x);e.normalScale.set(w,t?.flipNormalY?-w:w)}if(Rn(e,"bumpMap",c,t),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),Rn(e,"aoMap",u,t),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),Rn(e,"displacementMap",p,t),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),Rn(e,"clearcoatMap",d,t),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),Rn(e,"clearcoatRoughnessMap",m,t),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),Rn(e,"clearcoatNormalMap",f,t),f||t?.clearcoatNormalScale!==void 0){let w=t?.clearcoatNormalScale??Math.abs(xo(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),Rn(e,"sheenColorMap",h,t),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),Rn(e,"sheenRoughnessMap",v,t),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),Rn(e,"anisotropyMap",b,t),t?.transmission!==void 0&&(e.transmission=t.transmission),Rn(e,"transmissionMap",g,t),t?.thickness!==void 0&&(e.thickness=t.thickness),Rn(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),Rn(e,"specularIntensityMap",x,t),t?.specularColor&&e.specularColor.set(t.specularColor),Rn(e,"specularColorMap",P,t),e.transparent=e.opacity<1||e.transmission>0||e.blending!==$i.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function Jc(e){return e.material}function Yi(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function cr(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function lm(e,t){return Array.isArray(e)?e[t]:e}var Yr=require("three");var S_=new WeakMap,M_=new Yr.Vector3,lI=new Yr.Vector3,cI=new Yr.Vector3,uI=new Yr.Box3,__=new Yr.Matrix4;function bl(e){return"data"in e?e.data.version:e.version}function dI(e){var l;let{geometry:t,skeleton:n}=e,r=t.getAttribute("position"),i=t.getAttribute("skinIndex"),o=t.getAttribute("skinWeight"),a=S_.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]===bl(r)&&a.versions[1]===bl(i)&&a.versions[2]===bl(o)&&a.inverses.length===n.boneInverses.length&&a.inverses.every((c,u)=>c.equals(n.boneInverses[u])))return a;let s={geometry:t,position:r,indices:i,weights:o,skeleton:n,versions:[bl(r),bl(i),bl(o)],bindMatrix:e.bindMatrix.clone(),inverses:n.boneInverses.map(c=>c.clone()),bones:[],weightDeviation:0};e:for(let c=0;c<r.count;c++){M_.fromBufferAttribute(r,c).applyMatrix4(e.bindMatrix);let u=0;for(let d=0;d<4;d++){let m=o.getComponent(c,d);if(m===0)continue;let f=i.getComponent(c,d);if(!Number.isFinite(m)||m<0||!Number.isInteger(f)||!n.bones[f]||!s.inverses[f]){s.bones=null;break e}u+=m,((l=s.bones)[f]??(l[f]=new Yr.Box3)).expandByPoint(lI.copy(M_).applyMatrix4(s.inverses[f]))}let p=Math.abs(u-1);if(p>1e-4){s.bones=null;break}s.weightDeviation=Math.max(s.weightDeviation,p)}return S_.set(e,s),s}function cm(e,{precise:t=!1,updateFallbacks:n=!0}={}){e.updateMatrixWorld(!0),e.traverse(r=>{if(!tn(r))return;let i=r;if(!i.skeleton)return;let o=$a(i);o&&i.bindMatrixInverse.copy(o);let s=!!i.geometry.morphAttributes.position?.length?null:dI(i);if(!t&&!s?.bones&&!n&&i.boundingBox&&i.boundingSphere)return;let l=i.boundingBox??(i.boundingBox=new Yr.Box3),c=i.boundingSphere??(i.boundingSphere=new Yr.Sphere);if(l.makeEmpty(),t||!s?.bones){let u=i.geometry.getAttribute("position");for(let p=0;p<u.count;p++)l.expandByPoint(i.getVertexPosition(p,cI))}else{for(let u=0;u<s.bones.length;u++){let p=s.bones[u];p&&(__.multiplyMatrices(i.bindMatrixInverse,i.skeleton.bones[u].matrixWorld),l.union(uI.copy(p).applyMatrix4(__)))}if(!l.isEmpty()){let u=l.min,p=l.max,d=i.bindMatrixInverse.elements,m=Math.max(1,Math.abs(u.x),Math.abs(u.y),Math.abs(u.z),Math.abs(p.x),Math.abs(p.y),Math.abs(p.z)),f=Math.max(Math.abs(u.x-d[12]),Math.abs(p.x-d[12]),Math.abs(u.y-d[13]),Math.abs(p.y-d[13]),Math.abs(u.z-d[14]),Math.abs(p.z-d[14]));l.expandByScalar(s.weightDeviation*f+m*1e-10)}}l.getBoundingSphere(c)})}var ps=require("react"),C_=require("@react-three/fiber");function T_(){let e=(0,C_.useThree)(i=>i.gl.domElement),t=(0,ps.useRef)(void 0),n=(0,ps.useCallback)(i=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=i},[e]),r=(0,ps.useCallback)(()=>{let i=t.current;i!==void 0&&(e.style.cursor=i,t.current=void 0)},[e]);return(0,ps.useEffect)(()=>()=>{r()},[r]),{setCanvasCursor:n,restoreCanvasCursor:r}}var fs=require("react/jsx-runtime");function um(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(Qc(t?.position??r.position.toArray(),[e.rotation.x,e.rotation.y,e.rotation.z],e.scale.toArray(),t?.pivot,r.rotation.order,t?.shear)),Ui(e,t?.shear))}function fn(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 yl(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===lt.NormalBlending&&t.alphaToCoverage!==!0;return[fn(t.map),fn(t.aoMap),fn(t.lightMap),fn(t.bumpMap),fn(t.normalMap,!0),t.normalMap?t.normalMapType:"",fn(t.displacementMap),fn(t.emissiveMap),fn(t.metalnessMap),fn(t.roughnessMap),i,fn(i?t.anisotropyMap:null),n,fn(n?t.clearcoatMap:null),fn(n?t.clearcoatNormalMap:null,!0),fn(n?t.clearcoatRoughnessMap:null),r,fn(r?t.sheenColorMap:null),fn(r?t.sheenRoughnessMap:null),fn(t.specularColorMap),fn(t.specularIntensityMap),o,fn(o?t.transmissionMap:null),fn(o?t.thicknessMap:null),fn(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,!!t.vertexColors,t.side,a].join("|")}var pI={};function eu({url:e,objectBindings:t,selectedItem:n,itemMaterials:r,interactive:i=!0,onItemClick:o,onItemHover:a,onItemDoubleClick:s,onItemContextMenu:l,onModelLoaded:c,onAnimationsReady:u,nodeRefsOut:p,onNodeRefsChange:d,materialRefsOut:m,panelHoveredItem:f,sceneConfig:b,zoomOnSelected:g=!0,highlightOnHover:y=!0,decoderConfig:h,modelFormat:v,onLoadProgress:x,explodeFactor:P=0,suspendBindingTransforms:w=!1,originalNodePoses:D,mergeModels:E,onMergeModelLoaded:S,onMergeModelError:_,pulses:M=pI}){let C=Kc(e,h,v,x),T=(0,ms.useThree)(z=>z.invalidate),[I,L]=(0,me.useState)(null),B=(0,me.useRef)(null),{setCanvasCursor:N,restoreCanvasCursor:R}=T_();(0,me.useEffect)(()=>{(!i||!y)&&(L(null),a?.(null),R())},[i,y,a,R]);let O=(0,me.useMemo)(()=>{let z=mb.SkeletonUtils.clone(C.scene),H=rl(C.scene);return H&&Rc(z,H),qg(z),z},[C.scene]),{rootsByUrl:V,revision:G,onSourceReady:Q}=g_(O,E,S),$=(0,me.useRef)(new Map),[ne,Z]=(0,me.useState)(0),U=(0,me.useCallback)((z,H,W)=>{Q(z,H),$.current.get(z)!==W&&($.current.set(z,W),Z(ee=>ee+1))},[Q]);(0,me.useEffect)(()=>{let z=new Set(E?.map(W=>W.url)),H=!1;for(let W of $.current.keys())z.has(W)||($.current.delete(W),H=!0);H&&Z(W=>W+1)},[E]);let F=(0,me.useMemo)(()=>gr(O),[O,G]),te=F.nodesById,{originalMaterials:se,ownMeshes:ye}=(0,me.useMemo)(()=>{let z=new WeakMap,H=new WeakSet;return O.traverse(W=>{En(W)&&(z.set(W,W.material),H.add(W))}),{originalMaterials:z,ownMeshes:H}},[O]);(0,me.useMemo)(()=>{O.traverse(z=>{En(z)&&!se.has(z)&&se.set(z,z.material)})},[O,G,se]);let K=C.materialVariants,ce=(b?po(b.model):[]).join(`
3770
+ `),[he,qe]=(0,me.useState)(null);(0,me.useEffect)(()=>{let z=ce?ce.split(`
3771
+ `):[],H=[];for(let ee of z){let Se=K?K.names.indexOf(ee):-1;if(Se>=0){H.push(Se);continue}console.warn(`[react-immersive] The model has no material variant "${ee}".`+(K?` Its variants are: ${K.names.join(", ")}.`:" It has no material variants."))}if(!K||H.length===0){qe(null);return}let W=!1,ae=[];return O.traverse(ee=>{if(!En(ee)||!ye.has(ee))return;let Se=q0(W0(ee),H);Se!==null&&ae.push(K.resolveMaterial(Se,ee).then(Ce=>[ee,Ce]))}),Promise.all(ae).then(ee=>{W||qe({scene:O,key:ce,materials:new Map(ee)})}).catch(ee=>{W||console.warn(`[react-immersive] Material variants "${z.join('", "')}" failed to load.`,ee)}),()=>{W=!0}},[O,ye,K,ce]);let ie=he?.scene===O?he.materials:void 0,tt=z=>ie?.get(z)??se.get(z)??Jc(z);(0,me.useEffect)(()=>{F.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(F.duplicateNames))},[F]);let ge=(0,me.useMemo)(()=>new WeakMap,[O]),De=(0,me.useMemo)(()=>{let z=new WeakMap;if(O.traverse(H=>{let W=ge.get(H);W||(W={position:H.position.clone(),rotation:H.rotation.clone(),scale:H.scale.clone()},ge.set(H,W)),z.set(H,{position:W.position.clone(),rotation:W.rotation.clone(),scale:W.scale.clone()})}),D)for(let[H,W]of Object.entries(D)){let ae=te[H],ee=ae&&z.get(ae);ee&&(ee.position.fromArray(W.position),W.rotation&&ee.rotation.set(W.rotation[0],W.rotation[1],W.rotation[2],ee.rotation.order),W.scale&&ee.scale.fromArray(W.scale))}return z},[O,te,D,ge]);(0,me.useEffect)(()=>{let z=!1,H=null,W=null,ae=window,ee=Object.entries(te).filter(([,Vt])=>En(Vt)),Se=new lt.Box3,Ce=[],zt=0;O.traverse(Vt=>{!En(Vt)||Vt.userData[os]||(Vt.castShadow=!1,Vt.receiveShadow=!0)});let St=()=>{if(z)return;let Vt=new Set,Fn=Se.getSize(new lt.Vector3),Le=new lt.Vector3;for(let{name:ln,box:Sn}of Ce)Sn.getSize(Le),Le.x>Fn.x*.7&&Le.z>Fn.z*.7&&Le.y>Fn.y*.4&&Vt.add(ln);O.traverse(ln=>{if(!En(ln)||ln.userData[os])return;let Sn=br(ln);ln.castShadow=!Sn||!Vt.has(Sn),ln.receiveShadow=!0}),T()},Lt=()=>{z||(ae.requestIdleCallback?H=ae.requestIdleCallback(Mt,{timeout:100}):W=window.setTimeout(()=>Mt(),0))},Mt=Vt=>{if(H=null,W=null,z)return;let Fn=performance.now(),Le=0;for(;zt<ee.length&&!(Le>0&&!(Vt?Vt.didTimeout?Le<16:Vt.timeRemaining()>1:performance.now()-Fn<8));){let[ln,Sn]=ee[zt];zt+=1,Le+=1;let Or=new lt.Box3().setFromObject(Sn);Or.isEmpty()||(Ce.push({name:ln,box:Or}),Se.union(Or))}zt<ee.length?Lt():St()};return Lt(),()=>{z=!0,H!==null&&ae.cancelIdleCallback?.(H),W!==null&&window.clearTimeout(W)}},[T,te,O]),(0,me.useEffect)(()=>{cm(O,{precise:!0})},[O,G]),(0,me.useEffect)(()=>{let z=new AbortController;return dp(O,z.signal),()=>{z.abort(),kc(O)}},[O,G]);let Fe=(0,me.useMemo)(()=>{let z={};for(let[H,W]of Object.entries(t))z[W.modelObjectId??H]=H;return z},[t]),be=(0,me.useMemo)(()=>Object.entries(t).map(([z,H])=>`${z}${H.modelObjectId??z}`).sort().join(""),[t]),Je=(0,me.useMemo)(()=>Object.entries(t).map(([z,H])=>JSON.stringify([z,H.modelObjectId??z,H.transform??null])).sort().join(""),[t]),ve=(0,me.useRef)(new Map);(0,me.useEffect)(()=>{let z=new Map,H=new Map;for(let[ee,Se]of Object.entries(t)){if(!Se.transform)continue;let Ce=te[Se.modelObjectId??ee];Ce&&(z.set(Ce,Se.transform),H.set(Ce,Vi(Ce)))}let W=new Set([...ve.current.keys(),...z.keys()]);for(let ee of W){um(ee,void 0,De);for(let Se of Vi(ee))fi(Se)}O.updateMatrixWorld(!0);let ae=new Map;for(let ee of H.values())for(let Se of ee)if(!ae.has(Se)){let Ce=[];for(let zt=Se;zt;zt=zt.parent)Ce.unshift(zt.matrix.clone());ae.set(Se,{world:Se.matrixWorld.clone(),transforms:Ce})}for(let[ee,Se]of z)um(ee,Se,De);ve.current=z,O.updateMatrixWorld(!0);for(let[ee,Se]of ae)Yo(ee,Se.world,Se.transforms);T()},[O,te,De,Je,T]),(0,me.useEffect)(()=>()=>{for(let z of Vi(O))fi(z)},[O]);let de=(0,me.useMemo)(()=>{let z={};for(let[H,W]of Object.entries(t)){let ae=W.modelObjectId??H,ee=te[ae];if(!En(ee))continue;let Se=tt(ee);Se&&(z[H]=Yi(Se,Ce=>{let zt=im(Ce),St=om(zt??new lt.MeshStandardMaterial);return am(St),St}))}return z},[te,be,se,ie]);(0,me.useEffect)(()=>(m&&(m.current=de),()=>{m?.current===de&&(m.current={})}),[de,m]),(0,me.useEffect)(()=>()=>{for(let z of Object.values(de))cr(z,H=>{A0(H.userData),H.dispose()})},[de]);let Ne=b?.model.shading??"lit",Ae=b?.model.renderer??"pbr",mt=b?.wireframe.enabled??!1,gt=b?.wireframe.color??"#93c5fd",It=b?.wireframe.opacity??1,fe=(0,me.useMemo)(()=>{let z={};if(Ne!=="unlit")return z;for(let[H,W]of Object.entries(de))z[H]=Yi(W,ae=>{let ee=new lt.MeshBasicMaterial;return ee.color.copy(ae.color),ee.map=ae.map,ee.alphaMap=ae.alphaMap,ee.alphaTest=ae.alphaTest,ee.transparent=ae.transparent,ee.opacity=ae.opacity,ee.side=ae.side,ee});return z},[de,Ne]),Ee=(0,me.useMemo)(()=>{let z={};if(Ne!=="normals")return z;for(let[H,W]of Object.entries(de))z[H]=Yi(W,()=>new lt.MeshNormalMaterial);return z},[de,Ne]),Oe=(0,me.useMemo)(()=>{let z={};if(Ne!=="lit"||Ae!=="matcap")return z;let H=Fd();for(let[W,ae]of Object.entries(de))z[W]=Yi(ae,ee=>{let Se=new lt.MeshMatcapMaterial;return Se.matcap=H,Se.color.copy(ee.color),Se.alphaMap=ee.alphaMap,Se.alphaTest=ee.alphaTest,Se.side=ee.side,Se});return z},[de,Ne,Ae]);(0,me.useEffect)(()=>()=>{for(let z of Object.values(fe))cr(z,H=>H.dispose());for(let z of Object.values(Ee))cr(z,H=>H.dispose());for(let z of Object.values(Oe))cr(z,H=>H.dispose())},[fe,Ee,Oe]);let nt=z=>Ne==="normals"?Ee[z]:Ne==="unlit"?fe[z]:Ae==="matcap"?Oe[z]:de[z],kt=(0,me.useRef)(c);kt.current=c,(0,me.useEffect)(()=>{kt.current?.(O)},[O]);let Xe=(0,me.useMemo)(()=>{let z={};for(let[H,W]of Object.entries(t)){let ae=W.modelObjectId??H,ee=te[ae];ee&&(z[H]=ee)}return z},[te,be]);(0,me.useEffect)(()=>(p.current=Xe,d?.(),()=>{p.current===Xe&&(p.current={})}),[Xe,p,d]);let ke=(0,me.useRef)({});(0,me.useEffect)(()=>()=>{for(let z of Object.values(ke.current))for(let[H,W]of Object.entries(z))W&&lo(W,gi(H));ke.current={}},[]);let _e=(0,me.useRef)(new Map);(0,me.useEffect)(()=>()=>{_e.current.clear()},[]);let dt=(0,me.useMemo)(()=>{let z=new Map;for(let[H,W]of Object.entries(t)){let ae=f===W||f?.id===W.id||f?.modelObjectId===W.modelObjectId,ee=y&&(I===H||ae),Se=ee||n===H;(ee||Se)&&z.set(H,{emissive:ee,matcap:Se})}return z},[t,y,I,n,f]),an=(0,me.useRef)(dt);an.current=dt,(0,me.useEffect)(()=>{let z=new Set;for(let[H,W]of Object.entries(t)){z.add(H);let ae=W.modelObjectId??H,ee=te[ae];if(!En(ee))continue;if(W.removed){ee.parent&&(_e.current.set(ee,ee.parent),ee.parent.remove(ee),O.dispatchEvent({type:"childremoved",child:ee}));continue}let Se=_e.current.get(ee);Se&&(ee.parent||(Se.add(ee),O.dispatchEvent({type:"childadded",child:ee})),_e.current.delete(ee)),ee.visible=W.visible!==!1;let Ce=de[H];if(!Ce)continue;if(Ae!=="uv-checker"){let Le=nt(H);Le&&(ee.material=Le)}if(W.visible===!1)continue;let zt=fe[H],St=Oe[H],Lt=r[H]??r[W.modelObjectId??H],Mt=W.style?.material,Vt=ke.current[H]??{};for(let Le of oa){let ln=Kt(Mt,Le),Sn=Vt[Le];if(Sn===ln)continue;let Or=gi(Le);Sn&&lo(Sn,Or),ln?(Ks(ln,Or,T),Vt[Le]=ln):delete Vt[Le]}Object.keys(Vt).length>0?ke.current[H]=Vt:delete ke.current[H];let Fn=Lt?.hex??Mt?.baseColor;cr(Ce,(Le,ln)=>{let Sn=yl(Le);sm(Le,Mt,Fn);let Or=Le.userData.reactImmersiveConfiguredEmissive;Or?.isColor?Or.copy(Le.emissive):Le.userData.reactImmersiveConfiguredEmissive=Le.emissive.clone();let Nl=an.current.get(H);Nl?.emissive&&Le.emissive.add(Ya),Sn!==yl(Le)&&(Le.needsUpdate=!0);let Jn=lm(zt,ln);if(Jn){let Vl=yl(Jn);Jn.color.copy(Le.color),Jn.map=Le.map,Jn.vertexColors=Le.vertexColors,Jn.alphaMap=Le.alphaMap,Jn.alphaTest=Le.alphaTest,Jn.transparent=Le.transparent,Jn.opacity=Le.opacity,Jn.side=Le.side,Vl!==yl(Jn)&&(Jn.needsUpdate=!0)}let Gn=lm(St,ln);if(Gn){let Vl=yl(Gn);Nl?.matcap?Gn.color.set(so.color):Gn.color.copy(Le.color),Gn.map=Le.map,Gn.vertexColors=Le.vertexColors,Gn.alphaMap=Le.alphaMap,Gn.alphaTest=Le.alphaTest,Gn.transparent=Le.transparent,Gn.opacity=Le.opacity,Gn.side=Le.side,Vl!==yl(Gn)&&(Gn.needsUpdate=!0)}})}for(let H of Object.keys(ke.current))if(!z.has(H)){for(let[W,ae]of Object.entries(ke.current[H]))ae&&lo(ae,gi(W));delete ke.current[H]}T()},[t,te,de,fe,Ee,Oe,r,Ne,Ae,T]);let Zn=(0,me.useRef)(new Map);(0,me.useEffect)(()=>{let z=Zn.current,H=new Set([...z.keys(),...dt.keys()]),W=!1;for(let ae of H){let ee=z.get(ae),Se=dt.get(ae),Ce=!!ee?.emissive!=!!Se?.emissive,zt=!!ee?.matcap!=!!Se?.matcap;if(!Ce&&!zt)continue;W=!0;let St=de[ae],Lt=Oe[ae];St&&cr(St,(Mt,Vt)=>{let Fn=Mt.userData.reactImmersiveConfiguredEmissive;Ce&&Fn?.isColor&&(Mt.emissive.copy(Fn),Se?.emissive&&Mt.emissive.add(Ya));let Le=lm(Lt,Vt);zt&&Le&&(Se?.matcap?Le.color.set(so.color):Le.color.copy(Mt.color))})}Zn.current=dt,W&&T()},[dt,de,Oe,T]),JS({objectBindings:t,nodeMap:te,invalidate:T});let Qn=(0,me.useMemo)(()=>Object.entries(M).map(([z,H])=>({key:z,color:new lt.Color(H.color),speed:H.speed})),[M]),Ei=(0,me.useRef)(new Set);(0,me.useEffect)(()=>{let z=new Set(Qn.map(({key:H})=>H));for(let H of Ei.current){if(z.has(H)||!de[H])continue;let W=an.current.get(H)?.emissive;cr(de[H],ae=>{let ee=ae.userData.reactImmersiveConfiguredEmissive;ee?.isColor&&(ae.emissive.copy(ee),W&&ae.emissive.add(Ya))})}Ei.current=z,T()},[Qn,de,T]),(0,ms.useFrame)(({clock:z})=>{if(Qn.length===0)return;let H=z.getElapsedTime();for(let{key:W,color:ae,speed:ee}of Qn){let Se=de[W];if(!Se)continue;let Ce=(1-Math.cos(2*Math.PI*ee*H))/2,zt=an.current.get(W)?.emissive;cr(Se,St=>{let Lt=St.userData.reactImmersiveConfiguredEmissive;Lt?.isColor&&(St.emissive.copy(Lt).lerp(ae,Ce),zt&&St.emissive.add(Ya))})}T()}),(0,me.useEffect)(()=>{if(Ae==="uv-checker")return;let z=new Set(Object.values(Xe)),H=!1;O.traverse(W=>{if(!En(W)||z.has(W)||!se.has(W))return;let ae=ie?.get(W)??se.get(W);W.material!==ae&&(W.material=ae,H=!0)}),H&&T()},[O,Xe,se,ie,Ae,T]),(0,me.useEffect)(()=>{if(Ae!=="uv-checker")return;let z=E0(),H=[];return O.traverse(W=>{if(!En(W)||W.userData[os])return;let ae=W.material,ee=Array.isArray(ae)?ae:[ae],Se=!!W.geometry.getAttribute("uv"),Ce=ee.map((St,Lt)=>{let Mt=new lt.MeshBasicMaterial({color:Se?"#ffffff":"#ff00ff",map:Se?z:null,side:St.side});return Mt.name=`${W.name||"mesh"}-uv-checker-${Lt}`,Mt.toneMapped=!1,Mt}),zt=Array.isArray(ae)?Ce:Ce[0];W.material=zt,H.push({node:W,original:ae,diagnostic:zt})}),T(),()=>{for(let{node:W,original:ae,diagnostic:ee}of H){W.material=ae;let Se=Array.isArray(ee)?ee:[ee];for(let Ce of Se)Ce.dispose()}T()}},[O,Ae,T,G]),(0,me.useEffect)(()=>{if(!mt)return;let z=[];for(let[H,W]of Object.entries(t)){let ae=W.modelObjectId??H,ee=te[ae];if(!En(ee))continue;let Se=new lt.MeshBasicMaterial({color:gt,wireframe:!0,transparent:!0,opacity:It,depthTest:!1,depthWrite:!1,side:lt.DoubleSide,toneMapped:!1}),Ce=ee.clone(!1);Ce.name="",Ce.position.set(0,0,0),Ce.quaternion.identity(),Ce.scale.set(1,1,1),Ce.matrix.identity(),Ce.matrixAutoUpdate=!0,Ce.material=Se,Ce.castShadow=!1,Ce.receiveShadow=!1,Ce.frustumCulled=!1,Ce.renderOrder=1,Ce.userData={isWireframeOverlay:!0},Ce.raycast=()=>{},ee.morphTargetInfluences&&(Ce.morphTargetInfluences=ee.morphTargetInfluences),ee.add(Ce),z.push({node:ee,overlay:Ce})}return T(),()=>{for(let{node:H,overlay:W}of z)H.remove(W),W.material.dispose()}},[mt,gt,It,te,t,T]);let Rr=(0,me.useMemo)(()=>{let z=Array.from($.current.values()).flat();return y_([...C.animations,...z])},[C.animations,ne]);(0,me.useEffect)(()=>{O.animations=Rr.map(({clip:z})=>z)},[O,Rr]);let Ri=(0,me.useRef)(u);Ri.current=u;let zn=(0,me.useRef)(b);zn.current=b;let ii=(0,me.useRef)(null),Oi=(0,me.useRef)(null),Zt=(0,me.useRef)(new Set),sn=(0,me.useRef)(0),eo=z=>{Zt.current.forEach(H=>H(z))};(0,me.useEffect)(()=>{let z=x_({root:O,clips:Rr,getClipConfig:W=>KS(zn.current,W),onChange:()=>{eo(z.getState()),cm(O),T()}});ii.current=z,Oi.current={clips:Rr.map(({sourceName:W})=>W),clipDetails:Rr.map(({sourceName:W,duration:ae})=>({sourceName:W,duration:ae})),play:z.play,pause:z.pause,stop:z.stop,setSpeed:z.setSpeed,seek:z.seek,getState:z.getState,subscribe:W=>(Zt.current.add(W),W(z.getState()),()=>{Zt.current.delete(W)})},eo(z.getState());let H=zn.current?.animations.autoplayClip;return H&&z.play(H),()=>{z.dispose(),ii.current=null,Oi.current=null,eo(z.getState())}},[O,Rr]);let Wu=!!u;(0,me.useEffect)(()=>{Wu&&Oi.current&&Ri.current?.(Oi.current)},[O,Rr,Wu,i]),(0,me.useEffect)(()=>{b?.animations&&ii.current?.applyClipConfigs()},[b?.animations]),(0,ms.useFrame)((z,H)=>{let W=ii.current;if(W?.isRunning()){if(W.update(H),!w)for(let[ae,ee]of ve.current)um(ae,ee,De);sn.current+=H,cm(O,{updateFallbacks:sn.current>=.066}),T(),sn.current>=.066&&(sn.current=0,eo(W.getState()))}});let to=(0,me.useMemo)(()=>(b?.model.rotation??[0,0,0]).map(z=>z*Math.PI/180),[b?.model.rotation]);(0,ms.useFrame)((z,H)=>{if(!B.current)return;let W=B.current.rotation;W.x=lt.MathUtils.lerp(W.x,to[0],1-Math.exp(-5*H)),W.y=lt.MathUtils.lerp(W.y,to[1],1-Math.exp(-5*H)),W.z=lt.MathUtils.lerp(W.z,to[2],1-Math.exp(-5*H)),Math.abs(W.x-to[0])<1e-4&&Math.abs(W.y-to[1])<1e-4&&Math.abs(W.z-to[2])<1e-4||T()});let Ma=(0,me.useRef)([]),_a=(0,me.useRef)(0),Bo=(0,me.useRef)(0),Ps=(0,me.useMemo)(()=>new lt.Vector3,[]);(0,me.useEffect)(()=>{let z=new Map;for(let[St,Lt]of Object.entries(t)){let Mt=te[Lt.modelObjectId??St];Mt&&z.set(Mt,Lt)}for(let St of Ma.current)um(St.node,z.get(St.node)?.transform,De);Bo.current=0,O.updateWorldMatrix(!0,!0);let H=new lt.Box3().setFromObject(O),W=H.getCenter(new lt.Vector3),ae=H.getSize(new lt.Vector3).length()*.5;_a.current=Number.isFinite(ae)?ae:0;let ee=[...z.keys()],Se=new Set(ee),Ce=[],zt=new lt.Vector3;for(let St of ee){if(!St.parent)continue;let Lt=St.parent,Mt=!1;for(;Lt;){if(Se.has(Lt)){Mt=!0;break}Lt=Lt.parent}if(Mt)continue;let Vt=new lt.Box3().setFromObject(St);if(Vt.isEmpty())continue;Vt.getCenter(zt);let Fn=zt.clone().sub(W);Fn.lengthSq()<1e-8||(Fn.normalize(),Ce.push({node:St,restLocalPos:St.position.clone(),restWorldPos:St.getWorldPosition(new lt.Vector3),worldDir:Fn,parentInverse:new lt.Matrix4().copy(St.parent.matrixWorld).invert()}))}Ma.current=Ce,T()},[O,te,be,Je,De,T]),(0,me.useEffect)(()=>{T()},[P,T]),(0,ms.useFrame)((z,H)=>{let W=Ma.current;if(W.length===0)return;let ae=Math.min(Math.max(P,0),1),ee=Bo.current;if(Math.abs(ee-ae)<1e-4){if(ee===ae)return;Bo.current=ae}else Bo.current=lt.MathUtils.lerp(ee,ae,1-Math.exp(-6*H)),T();let Se=Bo.current*_a.current;for(let Ce of W)Ps.copy(Ce.worldDir).multiplyScalar(Se).add(Ce.restWorldPos).applyMatrix4(Ce.parentInverse),Ce.node.position.copy(Ps),Ce.node.matrixAutoUpdate||(Ce.node.matrix.setPosition(Ce.node.position),Ce.node.matrixWorldNeedsUpdate=!0)});let oi=z=>{let H=z;for(;H;){let W=br(H),ae=W?Fe[W]:void 0;if(ae&&t[ae])return[ae,t[ae]];H=H.parent}return null},No=z=>{let H=oi(z);if(!H)return null;let[W,ae]=H;return te[ae.modelObjectId??W]??null},Bl=Dp(z=>{let H=oi(z);return H&&H[1].selectable!==!1?H[1]:null},i?l:void 0,No),Ca=z=>{if(Bl.consumeClick())return;let H=oi(z.object);if(!H)return;let[,W]=H;W.selectable!==!1&&(z.stopPropagation(),o(W,pl(z,No(z.object))))},qu=z=>{let H=oi(z.object);if(!H)return;let[,W]=H;if(W.selectable===!1)return;s?.(W,pl(z,No(z.object)))&&z.stopPropagation()},Uf=z=>{if(!y)return;let H=oi(z.object);if(!H)return;let[W,ae]=H;ae.hoverable!==!1&&(z.stopPropagation(),N("pointer"),L(W),a?.(ae))},Ta=z=>{y&&(z.stopPropagation(),R(),L(null),a?.(null))},As=(0,me.useMemo)(()=>!Rw(O),[O,G]);return(0,me.useEffect)(()=>{let z=ce&&(he?.scene!==O||he.key!==ce),H=E?.some(W=>!V[W.url]||V[W.url].parent!==O);return Cg(O,z?"Wait for the selected material variants to finish loading before preparing AR.":H?"Wait for all merged models to finish loading before preparing AR.":Ae!=="pbr"?"Switch the model renderer to PBR before preparing a USDZ snapshot, or provide arHandoff.createUSDZ.":void 0),()=>Cg(O)},[O,he,ce,E,V,G,Ae]),(0,fs.jsxs)("group",{ref:B,children:[(0,fs.jsx)("primitive",{object:O,...i&&As?{onClick:Ca,onDoubleClick:qu,...l?{onPointerDown:Bl.onPointerDown}:{},...y?{onPointerOver:Uf,onPointerOut:Ta}:{}}:{}}),E?.map(z=>(0,fs.jsx)(Hi,{onLoadError:H=>_?.(z.url,H),children:(0,fs.jsx)(me.Suspense,{fallback:null,children:(0,fs.jsx)(mI,{url:z.url,namePrefix:z.namePrefix,decoderConfig:h,onReady:U})})},z.url))]})}function mI({url:e,namePrefix:t,decoderConfig:n,onReady:r}){let i=Kc(e,n),o=(0,me.useMemo)(()=>{let l=mb.SkeletonUtils.clone(i.scene);return Jx(l,t),qg(l),l},[i.scene,t]),a=(0,me.useMemo)(()=>i.animations.map(l=>e0(l,t)),[i.animations,t]),s=(0,me.useRef)(r);return s.current=r,(0,me.useEffect)(()=>{s.current(e,o,a)},[e,o,a]),null}var vl=require("react");var tu=require("react/jsx-runtime");function fI({url:e,decoderConfig:t,onModelLoaded:n}){let{scene:r}=Kc(e,t),i=(0,vl.useRef)(n);return i.current=n,(0,vl.useEffect)(()=>{i.current?.(r)},[r]),(0,tu.jsx)("primitive",{object:r})}function P_({url:e,decoderConfig:t,onLoadError:n,onModelLoaded:r}){return(0,tu.jsx)(Hi,{onLoadError:i=>n?.(e,i),children:(0,tu.jsx)(vl.Suspense,{fallback:null,children:(0,tu.jsx)(fI,{url:e,decoderConfig:t,onModelLoaded:r})})})}var Ki=require("react");var nu=require("react/jsx-runtime"),hI={};function A_({entry:e,isActive:t,decoderConfig:n,itemMaterials:r,sceneConfig:i,zoomOnSelected:o,highlightOnHover:a,explodeFactor:s,suspendBindingTransforms:l,onLoadProgress:c,onAnimationsReady:u,onModelAnimationsReady:p,onLoadError:d,onModelLoaded:m,selectedItem:f,panelHoveredItem:b,onItemClick:g,onItemDoubleClick:y,onItemContextMenu:h,onItemHover:v,nodeRefsOut:x,onNodeRefsChange:P,materialRefsOut:w,onMergeModelLoaded:D,onMergeModelError:E,pulses:S}){let _=(0,Ki.useRef)({}),M=(0,Ki.useRef)({}),C=(0,Ki.useCallback)(()=>{},[]),T=(0,Ki.useMemo)(()=>t?null:es(e.objectBindings,e.sceneConfig?.product,po((e.sceneConfig??i)?.model??{})),[t,e.objectBindings,e.sceneConfig,i]),I=e.sceneConfig?.product&&T?{...e.sceneConfig,model:{...e.sceneConfig.model,activeVariants:T.activeVariants}}:e.sceneConfig??i,L=(0,Ki.useCallback)(N=>{t&&u?.(N),p?.(Pe(e),N)},[t,u,p,e.url,e.id]),B=!!u||!!p;return(0,nu.jsx)(Hi,{onLoadError:N=>d?.(Pe(e),N),children:(0,nu.jsx)(Ki.Suspense,{fallback:null,children:(0,nu.jsx)("group",{position:e.transform?.position,rotation:e.transform?.rotation,scale:e.transform?.scale,visible:e.visible!==!1,children:(0,nu.jsx)(eu,{url:e.url,interactive:t&&e.visible!==!1,objectBindings:t?e.objectBindings:T?.objectBindings??e.objectBindings,selectedItem:t?f:null,itemMaterials:t?r:hI,onItemClick:t?g:C,onItemDoubleClick:t?y:void 0,onItemContextMenu:t?h:void 0,onItemHover:t?v:void 0,onModelLoaded:m?N=>m(Pe(e),N):void 0,onAnimationsReady:B?L:void 0,nodeRefsOut:t?x:_,onNodeRefsChange:t?P:void 0,materialRefsOut:w??M,panelHoveredItem:t?b:void 0,sceneConfig:t?i: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:D,onMergeModelError:E,pulses:t?S:void 0})})})},e.url)}var Ze=require("react");var jm=require("@react-three/fiber");var Xt=require("three");var Gt=require("three");function D_(e){let t={};for(let[n,r]of Object.entries(e))t[r.modelObjectId??n]=n;return t}function gb(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 I_(e,t){return e||(t?t.modelObjectId??t.id:null)}function pm(e,t){let n=gb(e);if(!n)return null;let r=t.keyByModelObject[n]??n,i=t.objectBindings[r];return i?{key:r,binding:i}:null}var xl=new Gt.Vector3,fb=new Gt.Vector3,gI=new Gt.Matrix4,E_=new Gt.Matrix4,ru=new Gt.Matrix4,bI=new Gt.Matrix4,dm=new Gt.Matrix4,yI=new Gt.Matrix4,vI=new Gt.Matrix4,R_=new Gt.Vector3,O_=new Gt.Vector3,sa=new Gt.Vector3,hb=new Gt.Quaternion,xI=new Gt.Euler;function wI(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}E_.compose(t.position,hb.setFromEuler(t.rotation),t.scale);let s=n?.rotation;ru.compose(R_.fromArray(Qc(n?.position??[0,0,0],s??[0,0,0],n?.scale??[1,1,1],n?.pivot,"XYZ",n?.shear)),hb.setFromEuler(xI.set(s?.[0]??0,s?.[1]??0,s?.[2]??0)),O_.fromArray(n?.scale??[1,1,1])),n?.shear&&ru.makeRotationFromQuaternion(hb).multiply(qs(n.shear)).scale(O_).setPosition(R_),ru.premultiply(r).multiply(bI.copy(r).invert()),e.parent?.updateWorldMatrix(!0,!1);let l=e.parent?.matrixWorld??gI;if(dm.multiplyMatrices(l,E_).premultiply(ru),a&&i){let c=e;for(;c.parent&&!c.userData.ri_name;)c=c.parent;let u=c.userData.ri_center;Array.isArray(u)&&u.length===3?sa.fromArray(u).applyMatrix4(r).applyMatrix4(ru):sa.setFromMatrixPosition(dm),sa.sub(i.centre),sa.lengthSq()>1e-8&&(sa.normalize().multiplyScalar(i.factor*i.radius),dm.premultiply(vI.makeTranslation(sa.x,sa.y,sa.z)))}e.matrixAutoUpdate=!1,e.matrix.multiplyMatrices(yI.copy(l).invert(),dm),e.matrixWorldNeedsUpdate=!0,e.updateWorldMatrix(!1,!1)}function mm(e,t){if(!En(e)&&!e.userData.riLogicalObject)return;let n=pm(e,t);if(!n)return;let r=k_(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){wI(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(Qc(e.position.toArray(),[e.rotation.x,e.rotation.y,e.rotation.z],e.scale.toArray(),o?.pivot,i.rotation.order,o?.shear)),Ui(e,o?.shear);let a=t.explode;if(a&&a.factor>0&&a.radius>0){e.updateWorldMatrix(!0,!1),fb.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?xl.fromArray(l).applyMatrix4(e.matrixWorld).sub(a.centre):xl.copy(fb).sub(a.centre),xl.lengthSq()>1e-8&&(xl.normalize().multiplyScalar(a.factor*a.radius).add(fb),e.parent&&e.parent.worldToLocal(xl),e.position.copy(xl))}Ui(e,o?.shear),e.updateWorldMatrix(!0,!1)}function wl(e,t){e.traverse(n=>mm(n,t))}function k_(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function SI(e,t,n,r){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,r])}function MI(e){if(e.textures){for(let t of oa){let n=e.textures[t];n&&lo(n,gi(t))}e.textures=void 0}}function _I(e,t,n){let r=e.textures??{};for(let i of oa){let o=Kt(t,i),a=r[i];if(a===o)continue;let s=gi(i);a&&lo(a,s),o?(Ks(o,s,n),r[i]=o):delete r[i]}e.textures=Object.keys(r).length>0?r:void 0}function CI(e,t){if(t.shadingMode==="normals")return Yi(e,()=>new Gt.MeshNormalMaterial);if(t.shadingMode==="unlit")return Yi(e,n=>{let r=new Gt.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=Fd();return Yi(e,r=>{let i=new Gt.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 TI(e,t){if(!En(e))return;let r=k_(e);r.original??(r.original=Jc(e));let i=pm(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,mm(e,t);let s=t.itemMaterials?.[o]?.hex??t.itemMaterials?.[a.modelObjectId??o]?.hex,l=t.highlightOnHover!==!1&&o===t.hoveredKey,c=SI(a,s,t,l);if(r.signature===c&&r.display){e.material=r.display;return}let u=a.style?.material;if(_I(r,u,t.invalidate),!r.physical){let p=r.original??Jc(e);if(!p)return;r.physical=Yi(p,d=>{let m=im(d),f=om(m??new Gt.MeshStandardMaterial);return am(f),f})}cr(r.physical,p=>{sm(p,u,s??u?.baseColor),l&&(p.emissive.add(Ya),p.color.lerp(C0,T0)),p.needsUpdate=!0}),r.display&&r.display!==r.physical&&cr(r.display,p=>p.dispose()),r.display=CI(r.physical,t),r.signature=c,e.material=r.display}function L_(e,t){e.traverse(n=>TI(n,t))}function bb(e){e.traverse(t=>{if(!En(t))return;let n=t.userData.riVisuals;n&&(n.rest&&(t.matrixAutoUpdate=!0,t.position.copy(n.rest.position),t.rotation.copy(n.rest.rotation),t.scale.copy(n.rest.scale),t.updateMatrix()),n.original&&(t.material=n.original),n.display&&n.display!==n.physical&&cr(n.display,r=>r.dispose()),n.physical&&cr(n.physical,r=>r.dispose()),MI(n),delete t.userData.riVisuals)})}var N_=new Xt.Matrix4().makeRotationX(Math.PI/2),B_=N_.clone().invert();function PI(e){let t=new Xt.Vector3(e[0],e[1],e[2]),n=new Xt.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 Xt.Box3(t.clone().sub(n),t.clone().add(n))}function AI(e){let t=e.getCenter(new Xt.Vector3),n=e.getSize(new Xt.Vector3).multiplyScalar(.5);return[t.x,t.y,t.z,n.x,0,0,0,n.y,0,0,0,n.z]}var fm=class{constructor(){this.group=new Xt.Group;this.objects=new Map;this.geometry=new Xt.BoxGeometry(1,1,1);this.material=new Xt.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 Xt.Box3(new Xt.Vector3(...n.minimum),new Xt.Vector3(...n.maximum)).applyMatrix4(B_),i=new Xt.Group;i.name=n.name,i.userData.ri_name=n.name,i.userData.riLogicalObject=!0,i.userData.ri_center=r.getCenter(new Xt.Vector3).toArray();let o=new Xt.Mesh(this.geometry,this.material);o.visible=!1,o.raycast=()=>{},o.position.copy(r.getCenter(new Xt.Vector3)),o.scale.copy(r.getSize(new Xt.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||mm(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 Xt.Matrix4)||this.transforms.set(l,N_.clone().multiply(c.matrix).multiply(B_))}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=PI(i.box),a=o.clone(),s=1;for(let c of r.extras?.featureIds??[]){let u=this.transforms.get(c);u&&(a.union(o.clone().applyMatrix4(u)),s=Math.max(s,u.getMaxScaleOnAxis()))}let l=AI(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 yb=Object.freeze({factor:1,loosened:!1,tooFine:0,raisedAt:-1/0,changedAt:-1/0}),iu=16,vb=1.25,EI=1.5,RI=1.25,OI=500,DI=3e3,V_=5e3,j_=2e3,II=.9;function U_(e){return e.full&&(e.wanting||e.usage>1)}function z_(e){return e.loosened?DI:OI}function F_(e){let t=e.factor/RI;return t<=1+1e-6?1:t}function G_(e,t){return e.factor>1&&!e.loosened&&!t.full&&!t.wanting&&t.usage<II&&F_(e)>e.tooFine}function H_(e,t){let{now:n}=t,r=t.moved&&e.tooFine>0?{...e,tooFine:0}:e;if(U_(t)){if(n-r.changedAt<z_(r))return r;let i=Math.max(r.tooFine,r.factor);return r.factor>=iu?r.loosened&&r.tooFine===i?r:{...r,loosened:!0,tooFine:i,changedAt:n}:{factor:Math.min(iu,r.factor*EI),loosened:!0,tooFine:i,raisedAt:n,changedAt:n}}return r.loosened&&!t.wanting?{...r,loosened:!1,changedAt:n}:G_(r,t)&&n-r.raisedAt>=V_&&n-r.changedAt>=j_?{...r,factor:F_(r),changedAt:n}:r}function W_(e,t){let{now:n}=t;return U_(t)?e.factor>=iu&&e.loosened?null:Math.max(0,z_(e)-(n-e.changedAt)):e.loosened&&!t.wanting?0:G_(e,t)?Math.max(0,V_-(n-e.raisedAt),j_-(n-e.changedAt)):null}function Y_(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function xb(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 gm,ou=(gm=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)})}},Zh(gm,"pending",new Map),Zh(gm,"session",null),gm),q_=2**30,lu=class{get unloadPriorityCallback(){return this._unloadPriorityCallback}set unloadPriorityCallback(e){e.length===1?(console.warn('LRUCache: "unloadPriorityCallback" function has been changed to take two arguments.'),this._unloadPriorityCallback=(t,n)=>{let r=e(t),i=e(n);return r<i?-1:+(r>i)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*q_,this.maxBytesSize=.4*q_,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:u}=this,p=r.length-o.size,d=r.length-a.size,m=Math.max(Math.min(r.length-t,p),0),f=this.cachedBytes-c,b=this.unloadPriorityCallback||this.defaultPriorityCallback,g=!1,y=m>0&&p>0||d&&r.length>n;if(p&&this.cachedBytes>c||d&&this.cachedBytes>u||y){r.sort((E,S)=>{let _=o.has(E);if(_===o.has(S)){let M=a.has(E);return M===a.has(S)?-b(E,S):M?1:-1}else return _?1:-1});let h=Math.max(t*e,m*e),v=Math.ceil(Math.min(h,p,m)),x=Math.max(e*f,e*c),P=Math.min(x,f),w=0,D=0;for(;this.cachedBytes-D>u||r.length-w>n;){let E=r[w],S=l.get(E)||0;if(o.has(E)&&a.has(E)||this.cachedBytes-D-S<u&&r.length-w<=n)break;D+=S,w++}for(;D<P||w<v;){let E=r[w],S=l.get(E)||0;if(o.has(E)||this.cachedBytes-D-S<c&&w>=v)break;D+=S,w++}r.splice(0,w).forEach(E=>{this.cachedBytes-=l.get(E)||0,s.get(E)(E),l.delete(E),i.delete(E),s.delete(E),a.delete(E),o.delete(E)}),g=w<m||D<f&&w<p,g&&(g=w>0)}g&&(this.unloadingHandle=ou.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){ou.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},kI=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Zi=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=>{ou.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 kI),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(u){l(u),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))}},xm=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:Y_(e),o=this.originQueues.get(i);o||(o=new Zi,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 bs=6378137,LI=1/298.257223563,Sb=6356752314245179e-9,hm={inView:!1,error:1/0,distanceFromCamera:1/0};function wm(e){return e===4||e===-1}function Co(e,t){return Sm(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function Sm(e){return!!e.traversal}function cu(e){let{children:t}=e,n=t.length===0||Sm(t[t.length-1]),r=!e.internal.hasUnrenderableContent||wm(e.internal.loadingState);return n&&r}function hs(e){return e.traversal.unconditionallyRefine}function au(e,t){if(Sm(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,hm),e.traversal.inFrustum=hm.inView,e.traversal.error=hm.error,e.traversal.distanceFromCamera=hm.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 wb(e,t,n=!1){if(au(e,t),n?t.markTileUsed(e):bm(e),hs(e)&&cu(e)){let r=e.children;for(let i=0,o=r.length;i<o;i++)wb(r[i],t,n)}}function K_(e,t){if(au(e,t),e.traversal.usedLastFrame&&(bm(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||hs(e))&&cu(e))){let n=e.children;for(let r=0,i=n.length;r<i;r++)K_(n[r],t)}}function bm(e){e.traversal.used=!0}function BI(e,t){return!(e.traversal.error<=t.errorTarget&&!hs(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!cu(e))}function Z_(e,t){let{frameCount:n}=t,{children:r}=e;for(let i=0,o=r.length;i<o;i++){let a=r[i];Co(a,n)&&(a.traversal.active&&(a.traversal.kicked=!0,a.traversal.active=!1),Z_(a,t))}}function X_(e){return!hs(e)&&(!e.internal.hasContent||wm(e.internal.loadingState))}function Q_(e,t){if(au(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(!BI(e,t)){bm(e);return}let r=!1,i=!1,o=e.children;for(let a=0,s=o.length;a<s;a++){let l=o[a];Q_(l,t),r||(r=Co(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++)wb(o[a],t,!0);return}if(bm(e),e.refine==="REPLACE"&&r&&(t.loadSiblings||t.loadAncestors))for(let a=0,s=o.length;a<s;a++)wb(o[a],t)}function J_(e,t){let n=t.frameCount;if(!Co(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=Co(l,n))}if(!i)e.traversal.isLeaf=!0;else{for(let s=0,l=r.length;s<l;s++)J_(r[s],t);let a=!0;for(let s=0,l=r.length;s<l;s++){let c=r[s];if(Co(c,n)){let u=!hs(c),p=!c.internal.hasContent||wm(c.internal.loadingState);u&&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];Co(l,t.frameCount)&&!l.traversal.allUsedChildrenProcessed&&(o=!1)}e.traversal.allUsedChildrenProcessed=o&&cu(e)}function e1(e,t){if(!Co(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!hs(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!hs(e)&&(e.traversal.active=!0,cu(e)&&e.internal.hasContent&&!wm(e.internal.loadingState)))for(let i=0,o=n.length;i<o;i++)K_(n[i],t);return}let r=n.length>0;for(let i=0,o=n.length;i<o;i++){let a=n[i];e1(a,t),Co(a,t.frameCount)&&!(a.traversal.active&&X_(a))&&!a.traversal.allChildrenReady&&(r=!1)}e.traversal.allChildrenReady=r,e.refine==="REPLACE"&&!r&&e.traversal.wasSetActive&&X_(e)&&(e.traversal.active=!0,Z_(e,t))}function t1(e,t){au(e,t);let n=Co(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||Sm(e)&&e.traversal.usedLastFrame){let r=!1,i=!1;n?(r=e.traversal.active,i=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):au(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];t1(l,t)}}}function NI(e,t){Q_(e,t),J_(e,t),e1(e,t),t1(e,t)}function VI(e){let t=null;return()=>{t===null&&(t=ou.requestAnimationFrame(()=>{t=null,e()}))}}function jI(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 $_=Symbol("PLUGIN_REGISTERED"),la={inView:!0,error:0,distance:1/0},UI=(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},zI=(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,FI=(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,Sl=(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?zI(e,t):UI(e,t)},Mb=new lu;Mb.unloadPriorityCallback=FI;var su=new xm;su.maxJobsPerOrigin=25,su.priorityCallback=Sl;var ym=new Zi;ym.maxJobs=5,ym.priorityCallback=Sl;var vm=new Zi;vm.maxJobs=25,vm.priorityCallback=(e,t)=>{let n=e.parent,r=t.parent;return n===r?0:n?r?Sl(n,r):-1:1};var _b=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 Zi){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=Mb,this.downloadQueue=su,this.parseQueue=ym,this.processNodeQueue=vm,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=VI(()=>{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[$_]===!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[$_]=!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&&jI(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 u=this.rootURL;u!==null&&this.invokeAllPlugins(p=>u=p.preprocessURL?p.preprocessURL(u,null):u),this.rootLoadingState=4,this.rootTileset=c,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:c,url:u}),this.dispatchEvent({type:"load-root-tileset",tileset:c,url:u})}).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 u=c.doTilesNeedUpdate();s=s===null?u:!!(s||u)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),n.inFrustum=0,n.used=0,n.active=0,n.visible=0,n.tilesProcessed=0,this.frameCount++,t.forEach(c=>e.markUnused(c)),t.clear(),this.prepareForTraversal(),NI(r,this),this.removeUnusedPendingTiles();let l=this.queuedTiles;l.sort(e.unloadPriorityCallback);for(let c=0,u=l.length;c<u&&!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&&(la.inView=!0,la.error=0,la.distance=1/0,s.calculateTileViewError(e,la)&&(i===null&&(i=!0),i&&(i=la.inView),la.inView&&(a=Math.min(a,la.distance),o=Math.max(o,la.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=xb(e.content.uri),i=!!(r&&/json$/.test(r));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=i,e.internal.hasRenderableContent=!i}else e.internal.hasContent=!1,e.internal.hasUnrenderableContent=!1,e.internal.hasRenderableContent=!1;n?(e.internal.depth=n.internal.depth+1,e.internal.depthFromRenderedParent=n.internal.depthFromRenderedParent+ +!!e.internal.hasRenderableContent):(e.internal.depth=0,e.internal.depthFromRenderedParent=+!!e.internal.hasRenderableContent),e.traversal={distanceFromCamera:1/0,error:1/0,inFrustum:!1,wasInFrustum:!1,isLeaf:!1,used:!1,usedLastFrame:!1,visible:!1,wasSetVisible:!1,active:!1,wasSetActive:!1,allChildrenReady:!1,allChildrenLoaded:!1,kicked:!1,allUsedChildrenProcessed:!1,lastFrameVisited:-1},n===null?e.refine=e.refine||"REPLACE":e.refine=e.refine||n.refine,e.engineData={scene:null,metadata:null,boundingVolume:null},Object.defineProperty(e,"cached",{get(){return console.warn('TilesRenderer: "tile.cached" field has been renamed to "tile.engineData".'),this.engineData},enumerable:!1,configurable:!0}),this.invokeAllPlugins(r=>{r!==this&&r.preprocessNode&&r.preprocessNode(e,t,n)})}setTileActive(e,t){t?this.activeTiles.add(e):this.activeTiles.delete(e)}setTileVisible(e,t){t?this.visibleTiles.add(e):this.visibleTiles.delete(e),this.dispatchEvent({type:"tile-visibility-change",scene:e.engineData.scene,tile:e,visible:t})}calculateTileViewError(e,t){}removeUnusedPendingTiles(){let{lruCache:e,loadingTiles:t}=this,n=[];for(let r of t)!e.isUsed(r)&&r.internal.loadingState===1&&n.push(r);for(let r=0;r<n.length;r++)e.remove(n[r])}queueTileForDownload(e){e.internal.loadingState!==0||this.lruCache.isFull()||this.queuedTiles.push(e)}markTileUsed(e){this.usedSet.add(e),this.lruCache.markUsed(e)}fetchData(e,t){return fetch(e,t)}ensureChildrenArePreprocessed(e,t=this.stats.tilesProcessed<this.maxTilesProcessed){let n=e.children;if(n.length===0||n[n.length-1].traversal)return;let r=i=>{for(let o=0,a=i.length;o<a;o++){let s=i[o];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),r(n)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,i=>{r(i.children),this._dispatchNeedsUpdateEvent()})}getBytesUsed(e){let t=0;return this.invokeAllPlugins(n=>{n.calculateBytesUsed&&(t+=n.calculateBytesUsed(e,e.engineData.scene)||0)}),t}recalculateBytesUsed(e=null){let{lruCache:t,processedTiles:n}=this;e===null?t.itemSet.forEach(r=>{n.has(r)&&t.setMemoryUsage(r,this.getBytesUsed(r))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,n=null){let[r,i]=e.asset.version.split(".").map(a=>parseInt(a));console.assert(r<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),r===1&&i>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let o=t.replace(/\/[^/]*$/,"");o=new URL(o,window.location.href).toString(),this.preprocessNode(e.root,o,n)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,n=null,r=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(d=>r=d.preprocessURL?d.preprocessURL(r,e):r);let i=this.stats,o=this.lruCache,a=this.downloadQueue,s=this.parseQueue,l=this.loadingTiles,c=xb(r),u=new AbortController,p=u.signal;if(o.add(e,d=>{u.abort(),t?d.children.length=0:this.invokeAllPlugins(m=>{m.disposeTile&&m.disposeTile(d)}),i.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),i.inCacheSinceLoad--),d.internal.loadingState===1?i.queued--:d.internal.loadingState===2?i.downloading--:d.internal.loadingState===3?i.parsing--:d.internal.loadingState===4&&i.loaded--,d.internal.loadingState=0,s.remove(d),a.remove(d),l.delete(d)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),o.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),i.inCacheSinceLoad++,i.inCache++,i.queued++,e.internal.loadingState=1,l.add(e),a.add(r,e,d=>{if(p.aborted)return Promise.resolve();e.internal.loadingState=2,i.downloading++,i.queued--;let m=this.invokeOnePlugin(f=>f.fetchData&&f.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}}),m}).then(d=>{if(!p.aborted){if(!(d instanceof Response))return d;if(d.ok)return c==="json"?d.json():d.arrayBuffer();throw Error(`Failed to load model with error code ${d.status}`)}}).then(d=>{if(!p.aborted)return i.downloading--,i.parsing++,e.internal.loadingState=3,s.add(e,m=>p.aborted?Promise.resolve():c==="json"&&d.root?(this.preprocessTileset(d,r,e),e.children.push(d.root),n=d,t=!0,Promise.resolve()):this.invokeOnePlugin(f=>f.parseTile&&f.parseTile(d,m,c,r,p)))}).then(()=>{if(p.aborted)return;i.parsing--,i.loaded++,e.internal.loadingState=4,l.delete(e),o.setLoaded(e,!0);let d=this.getBytesUsed(e);if(o.getMemoryUsage(e)===0&&d>0&&o.isFull()){o.remove(e);return}o.setMemoryUsage(e,d),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:n,url:r}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:r})}).catch(d=>{p.aborted||(d.name==="AbortError"?o.remove(e):(s.remove(e),a.remove(e),e.internal.loadingState===1?i.queued--:e.internal.loadingState===2?i.downloading--:e.internal.loadingState===3?i.parsing--:e.internal.loadingState===4&&i.loaded--,i.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(d),e.internal.loadingState=-1,l.delete(e),o.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:d,url:r})))})}};function gs(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 GI=new TextDecoder;function n1(e){return GI.decode(e)}function Mm(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var Ml=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=Mm(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function Cb(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 uu=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(n1(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,u=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 d=s+c,m=Cb(a,d,t,u,p,e);if(d+m.byteLength>s+l)throw Error("FeatureTable: Feature data read outside binary body length.");return m}}getBuffer(e,t){let{buffer:n,binOffset:r}=this;return n.slice(r+e,r+e+t)}},HI=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 Cb(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}},_m=class extends uu{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 HI(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)}},Tb=class extends Ml{parse(e){let t=new DataView(e),n=gs(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 uu(e.slice(28,28+o+a),0,o,a),u=28+o+a,p=new _m(e.slice(u,u+s+l),c.getData("BATCH_LENGTH"),0,s,l),d=u+s+l;return{version:r,featureTable:c,batchTable:p,glbBytes:new Uint8Array(e,d,i-d)}}},Pb=class extends Ml{parse(e){let t=new DataView(e),n=gs(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),u=new uu(e.slice(32,32+o+a),0,o,a),p=32+o+a,d=new _m(e.slice(p,p+s+l),u.getData("INSTANCES_LENGTH"),0,s,l),m=p+s+l,f=new Uint8Array(e,m,i-m),b=null,g=null,y=null;if(c)b=f,g=Promise.resolve();else{let h=this.resolveExternalURL(n1(f));y=Mm(h),g=fetch(h,this.fetchOptions).then(v=>{if(!v.ok)throw Error(`I3DMLoaderBase : Failed to load file "${h}" with status ${v.status} : ${v.statusText}`);return v.arrayBuffer()}).then(v=>{b=new Uint8Array(v)})}return g.then(()=>({version:r,featureTable:u,batchTable:d,glbBytes:b,gltfWorkingPath:y}))}},Ab=class extends Ml{parse(e){let t=new DataView(e),n=gs(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 uu(e.slice(28,28+o+a),0,o,a),u=28+o+a,p=new _m(e.slice(u,u+s+l),c.getData("BATCH_LENGTH")||c.getData("POINTS_LENGTH"),0,s,l);return Promise.resolve({version:r,featureTable:c,batchTable:p})}},Eb=class extends Ml{parse(e){let t=new DataView(e),n=gs(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),u=gs(c),p=c.getUint32(4,!0),d=c.getUint32(8,!0),m=new Uint8Array(e,s,d);a.push({type:u,buffer:m,version:p}),s+=d}return{version:r,tiles:a}}};var q=require("three"),Im=require("three/addons/loaders/GLTFLoader.js"),y1=require("three/addons/utils/BufferGeometryUtils.js"),jb=class extends Tb{constructor(e=q.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new q.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 Im.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,u=>{let{batchTable:p,featureTable:d}=t,{scene:m}=u,f=d.getData("RTC_CENTER",1,"FLOAT","VEC3");f&&(m.position.x+=f[0],m.position.y+=f[1],m.position.z+=f[2]),u.scene.updateMatrix(),u.scene.matrix.multiply(c),u.scene.matrix.decompose(u.scene.position,u.scene.quaternion,u.scene.scale),u.batchTable=p,u.featureTable=d,m.batchTable=p,m.featureTable=d,r(u)},i)})}};function WI(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 du=new q.Vector2;function qI(e,t,n=new q.Vector3){du.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(du.x,du.y,1-Math.abs(du.x)-Math.abs(du.y));let r=q.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 r1={RGB:"color",POSITION:"position"},Ub=class extends Ab{constructor(e=q.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:r}=t,i=new q.PointsMaterial,o=n.header.extensions,a=new q.Vector3,s;if(o&&o["3DTILES_draco_point_compression"]){let{byteOffset:u,byteLength:p,properties:d}=o["3DTILES_draco_point_compression"],m=this.manager.getHandler("draco.drc");if(m==null)throw Error("PNTSLoader: dracoLoader not available.");let f={};for(let y in d)if(y in r1&&y in d){let h=r1[y];f[h]=d[y]}let b={attributeIDs:f,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},g=n.getBuffer(u,p);s=await m.decodeGeometry(g,b),s.attributes.color&&(i.vertexColors=!0)}else{let u=n.getData("POINTS_LENGTH"),p=n.getData("POSITION",u,"FLOAT","VEC3"),d=n.getData("NORMAL",u,"FLOAT","VEC3"),m=n.getData("NORMAL",u,"UNSIGNED_BYTE","VEC2"),f=n.getData("RGB",u,"UNSIGNED_BYTE","VEC3"),b=n.getData("RGBA",u,"UNSIGNED_BYTE","VEC4"),g=n.getData("RGB565",u,"UNSIGNED_SHORT","SCALAR"),y=n.getData("CONSTANT_RGBA",u,"UNSIGNED_BYTE","VEC4"),h=n.getData("POSITION_QUANTIZED",u,"UNSIGNED_SHORT","VEC3"),v=n.getData("QUANTIZED_VOLUME_SCALE",u,"FLOAT","VEC3"),x=n.getData("QUANTIZED_VOLUME_OFFSET",u,"FLOAT","VEC3");if(s=new q.BufferGeometry,h){let P=new Float32Array(u*3);for(let w=0;w<u;w++)for(let D=0;D<3;D++){let E=3*w+D;P[E]=h[E]/65535*v[D]}a.x=x[0],a.y=x[1],a.z=x[2],s.setAttribute("position",new q.BufferAttribute(P,3,!1))}else s.setAttribute("position",new q.BufferAttribute(p,3,!1));if(d!==null)s.setAttribute("normal",new q.BufferAttribute(d,3,!1));else if(m!==null){let P=new Float32Array(u*3),w=new q.Vector3;for(let D=0;D<u;D++){let E=m[D*2],S=m[D*2+1],_=qI(E,S,w);P[D*3]=_.x,P[D*3+1]=_.y,P[D*3+2]=_.z}s.setAttribute("normal",new q.BufferAttribute(P,3,!1))}if(b!==null)s.setAttribute("color",new q.BufferAttribute(b,4,!0)),i.vertexColors=!0,i.transparent=!0,i.depthWrite=!1;else if(f!==null)s.setAttribute("color",new q.BufferAttribute(f,3,!0)),i.vertexColors=!0;else if(g!==null){let P=new Uint8Array(u*3);for(let w=0;w<u;w++){let D=WI(g[w]);for(let E=0;E<3;E++){let S=3*w+E;P[S]=D[E]}}s.setAttribute("color",new q.BufferAttribute(P,3,!0)),i.vertexColors=!0}else if(y!==null){i.color=new q.Color(y[0],y[1],y[2]);let P=y[3]/255;P<1&&(i.opacity=P,i.transparent=!0,i.depthWrite=!1)}}let l=new q.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 XI(e){let{x:t,y:n,z:r}=e;e.x=r,e.y=t,e.z=n}function $I(e){return-e+Math.PI/2}var i1=new q.Spherical,ca=new q.Vector3,ar=new q.Vector3,Rb=new q.Vector3,Kr=new q.Matrix4,Qi=new q.Matrix4,Ob=new q.Sphere,ur=new q.Euler,o1=new q.Vector3,a1=new q.Vector3,s1=new q.Vector3,pu=new q.Vector3,Cm=new q.Ray,YI=1e-12,KI=.1;var zb=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new q.Vector3(e,t,n)}intersectRay(e,t){return Kr.makeScale(...this.radius).invert(),Ob.center.set(0,0,0),Ob.radius=1,Cm.copy(e).applyMatrix4(Kr),Cm.intersectSphere(Ob,t)?(Kr.makeScale(...this.radius),t.applyMatrix4(Kr),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,o1,a1,s1),this.getCartographicToPosition(e,t,n,pu),r.makeBasis(o1,a1,s1).setPosition(pu)}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,Kr),ur.set(i,o,-r,"ZXY"),a.makeRotationFromEuler(ur).premultiply(Kr),s===1?(ur.set(Math.PI/2,0,0,"XYZ"),Qi.makeRotationFromEuler(ur),a.multiply(Qi)):s===2&&(ur.set(-Math.PI/2,0,Math.PI,"XYZ"),Qi.makeRotationFromEuler(ur),a.multiply(Qi)),a}getCartographicFromObjectFrame(e,t,n=2){return n===1?(ur.set(-Math.PI/2,0,0,"XYZ"),Qi.makeRotationFromEuler(ur).premultiply(e)):n===2?(ur.set(-Math.PI/2,0,Math.PI,"XYZ"),Qi.makeRotationFromEuler(ur).premultiply(e)):Qi.copy(e),pu.setFromMatrixPosition(Qi),this.getPositionToCartographic(pu,t),this.getEastNorthUpFrame(t.lat,t.lon,0,Kr).invert(),Qi.premultiply(Kr),ur.setFromRotationMatrix(Qi,"ZXY"),t.azimuth=-ur.z,t.elevation=ur.x,t.roll=ur.y,t}getEastNorthUpAxes(e,t,n,r,i,o=pu){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,ca);let i=this.radius;ar.copy(ca),ar.x*=i.x**2,ar.y*=i.y**2,ar.z*=i.z**2;let o=Math.sqrt(ca.dot(ar));return ar.divideScalar(o),r.copy(ar).addScaledVector(ca,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,ar),this.getPositionToNormal(ar,ca);let n=Rb.subVectors(e,ar);return t.lon=Math.atan2(ca.y,ca.x),t.lat=Math.asin(ca.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return i1.set(1,$I(e),t),n.setFromSpherical(i1).normalize(),XI(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,u=Math.sqrt(1/c),p=ar.copy(e).multiplyScalar(u);if(c<KI)return isFinite(u)?t.copy(p):null;let d=Rb.set(p.x*r*2,p.y*i*2,p.z*o*2),m=(1-u)*e.length()/(.5*d.length()),f=0,b,g,y,h,v,x,P,w,D,E,S;do{m-=f,y=1/(1+m*r),h=1/(1+m*i),v=1/(1+m*o),x=y*y,P=h*h,w=v*v,D=x*y,E=P*h,S=w*v,b=a*x+s*P+l*w-1,g=a*D*r+s*E*i+l*S*o;let _=-2*g;f=b/_}while(Math.abs(b)>YI);return t.set(e.x*y,e.y*h,e.z*v)}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*q.MathUtils.DEG2RAD,i=Math.sin(r)**2;return t/Math.sqrt(1-n*i)}getPositionElevation(e){this.getPositionToSurfacePoint(e,ar);let t=Rb.subVectors(e,ar);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(Kr.makeScale(...this.radius).invert(),Cm.copy(e).applyMatrix4(Kr),ar.set(0,0,0),Cm.closestPointToPoint(ar,t).normalize(),Kr.makeScale(...this.radius),t.applyMatrix4(Kr))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},bu=new zb(bs,bs,Sb);bu.name="WGS84 Earth";var Tm=new q.Vector3,_l=new q.Vector3,Cl=new q.Vector3,Db=new q.Vector3,Pm=new q.Quaternion,Am=new q.Vector3,Tl=new q.Matrix4,l1=new q.Matrix4,c1=new q.Vector3,u1=new q.Matrix4,Ib=new q.Quaternion,kb={};function d1(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 Fb=class extends Pb{constructor(e=q.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new q.Matrix4,this.ellipsoid=bu.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 Im.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 u=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(u)||(u+="/");let p=this.adjustmentTransform;c.parse(i,u,d=>{let m=n.getData("INSTANCES_LENGTH"),f=n.getData("POSITION",m,"FLOAT","VEC3"),b=n.getData("POSITION_QUANTIZED",m,"UNSIGNED_SHORT","VEC3"),g=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),y=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),h=n.getData("NORMAL_UP",m,"FLOAT","VEC3"),v=n.getData("NORMAL_RIGHT",m,"FLOAT","VEC3"),x=n.getData("NORMAL_UP_OCT32P",m,"UNSIGNED_SHORT","VEC2"),P=n.getData("NORMAL_RIGHT_OCT32P",m,"UNSIGNED_SHORT","VEC2"),w=n.getData("SCALE_NON_UNIFORM",m,"FLOAT","VEC3"),D=n.getData("SCALE",m,"FLOAT","SCALAR"),E=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),S=n.getData("EAST_NORTH_UP");if(!f&&b){f=new Float32Array(m*3);for(let T=0;T<m;T++)f[T*3+0]=g[0]+b[T*3+0]/65535*y[0],f[T*3+1]=g[1]+b[T*3+1]/65535*y[1],f[T*3+2]=g[2]+b[T*3+2]/65535*y[2]}let _=new q.Vector3;for(let T=0;T<m;T++)_.x+=f[T*3+0]/m,_.y+=f[T*3+1]/m,_.z+=f[T*3+2]/m;let M=[],C=[];d.scene.updateMatrixWorld(),d.scene.traverse(T=>{if(T.isMesh){C.push(T);let{geometry:I,material:L}=T,B=new q.InstancedMesh(I,L,m);B.position.copy(_),E&&(B.position.x+=E[0],B.position.y+=E[1],B.position.z+=E[2]),M.push(B)}});for(let T=0;T<m;T++){Db.set(f[T*3+0]-_.x,f[T*3+1]-_.y,f[T*3+2]-_.z),Pm.identity(),h&&v?(_l.set(h[T*3+0],h[T*3+1],h[T*3+2]),Cl.set(v[T*3+0],v[T*3+1],v[T*3+2]),Tm.crossVectors(Cl,_l).normalize(),Tl.makeBasis(Cl,_l,Tm),Pm.setFromRotationMatrix(Tl)):x&&P&&(d1(x[T*2+0],x[T*2+1],65535,_l),d1(P[T*2+0],P[T*2+1],65535,Cl),Tm.crossVectors(Cl,_l).normalize(),Tl.makeBasis(Cl,_l,Tm),Pm.setFromRotationMatrix(Tl)),Am.set(1,1,1),w&&Am.set(w[T*3+0],w[T*3+1],w[T*3+2]),D&&Am.multiplyScalar(D[T]);for(let I=0,L=M.length;I<L;I++){let B=M[I];Ib.copy(Pm),S&&(B.updateMatrixWorld(),c1.copy(Db).applyMatrix4(B.matrixWorld),this.ellipsoid.getPositionToCartographic(c1,kb),this.ellipsoid.getEastNorthUpFrame(kb.lat,kb.lon,u1),Ib.setFromRotationMatrix(u1)),Tl.compose(Db,Ib,Am).multiply(p);let N=C[I];l1.multiplyMatrices(Tl,N.matrixWorld),B.setMatrixAt(T,l1)}}d.scene.clear(),d.scene.add(...M),d.batchTable=r,d.featureTable=n,d.scene.batchTable=r,d.scene.featureTable=n,o(d)},a)})})}},v1=class extends Eb{constructor(e=q.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new q.Matrix4,this.ellipsoid=bu.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(),u=new jb(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.adjustmentTransform.copy(i);let p=u.parse(c.buffer);o.push(p);break}case"pnts":{let c=l.slice(),u=new Ub(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions;let p=u.parse(c.buffer);o.push(p);break}case"i3dm":{let c=l.slice(),u=new Fb(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.ellipsoid.copy(r),u.adjustmentTransform.copy(i);let p=u.parse(c.buffer);o.push(p);break}}}return Promise.all(o).then(a=>{let s=new q.Group;return a.forEach(l=>{s.add(l.scene)}),{tiles:a,scene:s}})}},mu=new q.Matrix4,ZI=class extends q.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new q.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?mu.copy(this.matrix):mu.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=mu.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(mu),this.matrixWorldInverse.copy(mu).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)}},QI=new q.Ray;function JI(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 ek(e){return"traversal"in e}function x1(e,t,n,r,i=null){if(!ek(t))return;let{group:o,activeTiles:a}=e,{boundingVolume:s}=t.engineData;if(i===null&&(i=QI,i.copy(n.ray).applyMatrix4(o.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(i))return;a.has(t)&&JI(t,n,e,r);let l=t.children;for(let c=0,u=l.length;c<u;c++)x1(e,l[c],n,r,i)}var Em=new q.Vector3,Rm=new q.Vector3,dr=new q.Vector3,Om=new q.Ray,Nb=class{constructor(e=new q.Box3,t=new q.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new q.Matrix4,this.points=Array(8).fill().map(()=>new q.Vector3),this.planes=[,,,,,,].fill().map(()=>new q.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,dr).distanceTo(e)}containsPoint(e){return dr.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(dr)}intersectsRay(e){return Om.copy(e).applyMatrix4(this.inverseTransform),Om.intersectsBox(this.box)}intersectRay(e,t){return Om.copy(e).applyMatrix4(this.inverseTransform),Om.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(){Em.copy(this.box.min).applyMatrix4(this.transform),Rm.copy(this.box.max).applyMatrix4(this.transform),dr.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(dr,Em),this.planes[1].setFromNormalAndCoplanarPoint(dr,Rm).negate(),dr.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(dr,Em),this.planes[3].setFromNormalAndCoplanarPoint(dr,Rm).negate(),dr.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(dr,Em),this.planes[5].setFromNormalAndCoplanarPoint(dr,Rm).negate()}intersectsSphere(e){return this.clampPoint(e.center,dr),dr.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}},gu=Math.PI,Lb=gu/2,fu=new q.Vector3,ys=new q.Vector3,wi=new q.Vector3,je=new q.Vector3,sr=new q.Matrix4,tk=new q.Box3,p1=new q.Matrix4;function ua(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function m1(e){return e.x!==e.y}var w1=class extends zb{constructor(e=1,t=1,n=1,r=-Lb,i=Lb,o=0,a=2*gu,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){m1(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,u=n>0,p=r<0,d;d=u?n:p?r:0;let{min:m,max:f}=e;m.setScalar(1/0),f.setScalar(-1/0),o-i<=gu?(this.getCartographicToNormal(l,c,wi),ys.set(0,0,1),fu.crossVectors(ys,wi).normalize(),ys.crossVectors(wi,fu).normalize(),t.makeBasis(fu,ys,wi),sr.copy(t).invert(),this.getCartographicToPosition(d,i,s,je).applyMatrix4(sr),f.x=Math.abs(je.x),m.x=-f.x,this.getCartographicToPosition(r,i,s,je).applyMatrix4(sr),f.y=je.y,this.getCartographicToPosition(r,c,s,je).applyMatrix4(sr),f.y=Math.max(je.y,f.y),this.getCartographicToPosition(n,i,s,je).applyMatrix4(sr),m.y=je.y,this.getCartographicToPosition(n,c,s,je).applyMatrix4(sr),m.y=Math.min(je.y,m.y),this.getCartographicToPosition(l,c,s,je).applyMatrix4(sr),f.z=je.z,this.getCartographicToPosition(n,i,a,je).applyMatrix4(sr),m.z=je.z,this.getCartographicToPosition(r,i,a,je).applyMatrix4(sr),m.z=Math.min(je.z,m.z)):(this.getCartographicToPosition(d,c,s,wi),wi.z=0,wi.length()<1e-10?wi.set(1,0,0):wi.normalize(),ys.set(0,0,1),fu.crossVectors(wi,ys).normalize(),t.makeBasis(fu,ys,wi),sr.copy(t).invert(),this.getCartographicToPosition(d,c+Lb,s,je).applyMatrix4(sr),f.x=Math.abs(je.x),m.x=-f.x,this.getCartographicToPosition(r,0,p?a:s,je).applyMatrix4(sr),f.y=je.y,this.getCartographicToPosition(n,0,u?a:s,je).applyMatrix4(sr),m.y=je.y,this.getCartographicToPosition(d,c,s,je).applyMatrix4(sr),f.z=je.z,this.getCartographicToPosition(d,o,s,je).applyMatrix4(sr),m.z=je.z),e.getCenter(je),e.min.sub(je).multiplyScalar(1.0000000000001),e.max.sub(je).multiplyScalar(1.0000000000001),je.applyMatrix4(t),t.setPosition(je)}getBoundingSphere(e){m1(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(tk,p1),e.center.setFromMatrixPosition(p1),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,u=n<0,p;p=c?t:u?n:0,this.getCartographicToPosition(p,r,a,je),ua(je,e),this.getCartographicToPosition(n,r,a,je),ua(je,e),this.getCartographicToPosition(n,l,a,je),ua(je,e),this.getCartographicToPosition(t,r,a,je),ua(je,e),this.getCartographicToPosition(t,l,a,je),ua(je,e),this.getCartographicToPosition(s,l,a,je),ua(je,e),this.getCartographicToPosition(t,r,o,je),ua(je,e),i-r>gu&&(this.getCartographicToPosition(p,l+gu,a,je),ua(je,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},To=new q.Vector3,Po=new q.Vector3,Ao=new q.Vector3,f1=new q.Vector3,h1=new q.Vector3,nk=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,f1)&&(i=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(f1)),r&&r.intersectRay(e,h1)&&(o=r.containsPoint(e.origin)?0:e.origin.distanceToSquared(h1));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 Nb;To.set(e[3],e[4],e[5]),Po.set(e[6],e[7],e[8]),Ao.set(e[9],e[10],e[11]);let r=To.length(),i=Po.length(),o=Ao.length();To.normalize(),Po.normalize(),Ao.normalize(),r===0&&To.crossVectors(Po,Ao),i===0&&Po.crossVectors(To,Ao),o===0&&Ao.crossVectors(To,Po),n.transform.set(To.x,Po.x,Ao.x,e[0],To.y,Po.y,Ao.y,e[1],To.z,Po.z,Ao.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 q.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 w1(...e.radius,n,i,t,r,o,a),l=new Nb;s.getBoundingBox(l.box,l.transform),l.update(),this.region=s,this.regionObb=l}},rk=new q.Matrix3;function ik(e,t,n,r){let i=rk.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 ok=class extends q.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new q.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)=>{ik(n[0],n[1],n[2],t[r])})}};var Vb=0;function g1(e,t,n,r){try{return q.TextureUtils.getByteLength(e,t,n,r)}catch{return Vb}}function ak(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??Vb;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+=g1(s.width,s.height,t,n);return a}if(!r)return Vb;let o=g1(r.width,r.height,t,n);return o*=e.generateMipmaps?4/3:1,o}function sk(e){let t=new Set,n=0;return e.traverse(r=>{if(r.geometry&&!t.has(r.geometry)&&(n+=(0,y1.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+=ak(a),t.add(a))}}}),n}var S1=Symbol("INITIAL_FRUSTUM_CULLED"),Dm=new q.Matrix4,hu=new q.Vector3,Bb=new q.Vector2,lk=new q.Vector3(1,0,0),ck=new q.Vector3(0,1,0),uk=()=>null;function b1(e,t){e.traverse(n=>{n.frustumCulled=n[S1]&&t})}var Gb=class extends _b{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{b1(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new ZI(this),this.ellipsoid=bu.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new q.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new q.LoadingManager,this._listeners={}}addEventListener(e,t){q.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return q.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){q.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){q.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)x1(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 q.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(Bb),this.setResolution(e,Bb.x,Bb.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(ck,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(lk,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 ok,isOrthographic:!1,sseDenominator:-1,position:new q.Vector3,invScale:-1,pixelSize:0});hu.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(hu.x-hu.y,hu.x-hu.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,u=n.get(a);(u.width===0||u.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 d=2/p[0],m=2/p[5];s.pixelSize=Math.max(m/u.height,d/u.width)}else s.sseDenominator=2/p[5]/u.height;Dm.copy(e.matrixWorld),Dm.premultiply(a.matrixWorldInverse),Dm.premultiply(a.projectionMatrix),l.setFromProjectionMatrix(Dm,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 q.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 q.Matrix4().copy(r).invert(),o=new nk;"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=uk}async parseTile(e,t,n,r,i){let o=t.engineData,a=Mm(r),s=this.fetchOptions,l=this.manager,c=null,u=o.transform,p=this._upRotationMatrix,d=(gs(e)||n).toLowerCase();switch(d){case"b3dm":{let v=new jb(l);v.workingPath=a,v.fetchOptions=s,v.adjustmentTransform.copy(p),c=v.parse(e);break}case"pnts":{let v=new Ub(l);v.workingPath=a,v.fetchOptions=s,c=v.parse(e);break}case"i3dm":{let v=new Fb(l);v.workingPath=a,v.fetchOptions=s,v.adjustmentTransform.copy(p),v.ellipsoid.copy(this.ellipsoid),c=v.parse(e);break}case"cmpt":{let v=new v1(l);v.workingPath=a,v.fetchOptions=s,v.adjustmentTransform.copy(p),v.ellipsoid.copy(this.ellipsoid),c=v.parse(e).then(x=>x.scene);break}case"gltf":case"glb":{let v=l.getHandler("path.gltf")||l.getHandler("path.glb")||new Im.GLTFLoader(l);v.setWithCredentials(s.credentials==="include"),v.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&v.setCrossOrigin("use-credentials");let x=v.resourcePath||v.path||a;!/[\\/]$/.test(x)&&x.length&&(x+="/"),c=v.parseAsync(e,x).then(P=>{P.scene=P.scene||new q.Group;let{scene:w}=P;return w.updateMatrix(),w.matrix.multiply(p).decompose(w.position,w.quaternion,w.scale),P});break}default:c=this.invokeOnePlugin(v=>v.parseToMesh&&v.parseToMesh(e,t,n,r,i));break}let m=await c;if(m===null)throw Error(`TilesRenderer: Content type "${d}" not supported.`);let f,b;m.isObject3D?(f=m,b=null):(f=m.scene,b=m),f.updateMatrix(),f.matrix.premultiply(u),f.matrix.decompose(f.position,f.quaternion,f.scale),await this.invokeAllPlugins(v=>v.processTileModel&&v.processTileModel(f,t)),f.traverse(v=>{v[S1]=v.frustumCulled,v.userData.tile=t}),b1(f,!this.autoDisableRendererCulling);let g=[],y=[],h=[];if(f.traverse(v=>{if(v.geometry&&y.push(v.geometry),v.material){let x=v.material;g.push(v.material);for(let P in x){let w=x[P];w&&w.isTexture&&h.push(w)}}}),i.aborted){for(let v=0,x=h.length;v<x;v++){let P=h[v];P.image instanceof ImageBitmap&&P.image.close(),P.dispose()}return}o.materials=g,o.geometry=y,o.textures=h,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 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,sk(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,u=1/0;for(let p=0,d=r.length;p<d;p++){let m=i[p],f,b;if(m.isOrthographic){let y=m.pixelSize;f=e.geometricError/y,b=1/0}else{let y=m.sseDenominator;b=o.distanceToPoint(m.position),f=b===0?1/0:e.geometricError/(b*y)}let g=i[p].frustum;o.intersectsFrustum(g)&&(a=!0,s=Math.max(s,f),l=Math.min(l,b)),c=Math.max(c,f),u=Math.min(u,b)}a?(t.inView=!0,t.error=s,t.distanceFromCamera=l):(t.inView=!1,t.error=c,t.distanceFromCamera=u)}dispose(){super.dispose(),this.group.removeFromParent()}};var le=require("three"),N1=require("three/addons/loaders/GLTFLoader.js"),qb=require("three/addons/postprocessing/Pass.js");var HF=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var M1=new Zi;M1.maxJobs=10,M1.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)?Sl(n,r):a?1:-1};var _1=new le.Vector3;function yu(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,r=new le.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=le.MathUtils.clamp(e.getComponent(a,s),n,1);r.setComponent(a,s,l)}return r}function dk(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 le.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:u}=l,p=2**(8*t.BYTES_PER_ELEMENT-1)-1,d=-p;for(let m=0;m<s;m++)for(let f=0;f<a;f++){let b=f===0?"x":f===1?"y":"z",g=c[b],y=u[b],h=le.MathUtils.mapLinear(i.getComponent(m,f),g,y,d,p);o.setComponent(m,f,h)}l.getCenter(_1).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(_1),e.scale.x*=.5*(u.x-c.x)/p,e.scale.y*=.5*(u.y-c.y)/p,e.scale.z*=.5*(u.z-c.z)/p,r.position=o,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var Xb=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:u}=this._options;e.traverse(p=>{if(p.material&&r){let d=p.material;for(let m in d){let f=d[m];f&&f.isTexture&&f.generateMipmaps&&(f.generateMipmaps=!1,f.minFilter=le.LinearFilter)}}if(p.geometry){let d=p.geometry,m=d.attributes;if(o){let{uv:f,uv1:b,uv2:g,uv3:y}=m;f&&(m.uv=yu(f,l)),b&&(m.uv1=yu(b,l)),g&&(m.uv2=yu(g,l)),y&&(m.uv3=yu(y,l))}if(n&&!m.normals&&d.computeVertexNormals(),a&&m.normals&&(m.normals=yu(m.normals,c)),s&&dk(p,u),i&&d.index){let f=m.position.count,b=d.index,g=f>65535?Uint32Array:f>255?Uint16Array:Uint8Array;if(!(b.array instanceof g)){let y=new g(d.index.count);y.set(b.array);let h=new le.BufferAttribute(y,1);d.setIndex(h)}}}})}};function On(e,t,n){return e&&t in e?e[t]:n}function V1(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function pk(e){return/^FLOAT/.test(e)}function Su(e){return/^VEC/.test(e)}function Mu(e){return/^MAT/.test(e)}function j1(e,t,n,r=null){return Mu(n)||Su(n)?r.fromArray(e,t):e[t]}function Hb(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new le.Vector2;case"VEC3":return new le.Vector3;case"VEC4":return new le.Vector4;case"MAT2":return new le.Matrix2;case"MAT3":return new le.Matrix3;case"MAT4":return new le.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function C1(e,t){if(t==null)return!1;switch(e){case"SCALAR":return typeof t=="number"||typeof t=="bigint";case"VEC2":return t.isVector2;case"VEC3":return t.isVector3;case"VEC4":return t.isVector4;case"MAT2":return t.isMatrix2;case"MAT3":return t.isMatrix3;case"MAT4":return t.isMatrix4;case"BOOLEAN":return typeof t=="boolean";case"STRING":return typeof t=="string";case"ENUM":return typeof t=="number"||typeof t=="bigint"}throw Error("ClassProperty: invalid type.")}function wu(e,t=null){switch(e){case"INT8":return Int8Array;case"INT16":return Int16Array;case"INT32":return Int32Array;case"INT64":return BigInt64Array;case"UINT8":return Uint8Array;case"UINT16":return Uint16Array;case"UINT32":return Uint32Array;case"UINT64":return BigUint64Array;case"FLOAT32":return Float32Array;case"FLOAT64":return Float64Array}switch(t){case"BOOLEAN":return Uint8Array;case"STRING":return Uint8Array}throw Error("ClassProperty: invalid type.")}function mk(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]=km(e,t[n])}else t=km(e,t);return t}function km(e,t=null){let n=e.default,r=e.type;if(t||(t=Hb(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(Mu(r))t.fromArray(n);else if(Su(r))t.fromArray(n);else return n}function fk(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=km(e,a)),a}function o(a){if(Mu(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(Su(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 hk(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 gk(e,t){let{type:n,componentType:r,scale:i,offset:o,normalized:a}=e;if(Array.isArray(t))for(let p=0,d=t.length;p<d;p++)t[p]=s(t[p]);else t=s(t);return t;function s(p){return p=Mu(n)?c(p):Su(n)?l(p):u(p),p}function l(p){return p.x=u(p.x),p.y=u(p.y),"z"in p&&(p.z=u(p.z)),"w"in p&&(p.w=u(p.w)),p}function c(p){let d=p.elements;for(let m=0,f=d.length;m<f;m++)d[m]=u(d[m]);return p}function u(p){return a&&(p=hk(r,p)),(a||pk(r))&&(p=p*i+o),p}}function $b(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++)C1(e.type,t[r])||(t[r]=Hb(e))}else C1(e.type,t)||(t=Hb(e));return t}function Lm(e,t){for(let n in t)n in e||delete t[n];for(let n in e){let r=e[n];t[n]=$b(r,t[n])}}function bk(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 Nm=class{constructor(e,t,n=null){this.name=t.name||null,this.description=t.description||null,this.type=t.type,this.componentType=t.componentType||null,this.enumType=t.enumType||null,this.array=t.array||!1,this.count=t.count||0,this.normalized=t.normalized||!1,this.offset=t.offset||0,this.scale=On(t,"scale",1),this.max=On(t,"max",1/0),this.min=On(t,"min",-1/0),this.required=t.required||!1,this.noData=On(t,"noData",null),this.default=On(t,"default",null),this.semantic=On(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=On(n,"offset",this.offset),this.scale=On(n,"scale",this.scale),this.max=On(n,"max",this.max),this.min=On(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=On(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return $b(this,e,t)}resolveDefaultElement(e){return km(this,e)}resolveDefault(e){return mk(this,e)}resolveNoData(e){return fk(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 V1(this.type)?gk(this,e):e}},Yb=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=Nm){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}},yk=class extends Nm{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},vk=class extends Yb{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(yk)}getData(e,t,n={}){let r=this.properties;Lm(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(Mu(o)){let s=r.elements;for(let l=s.length;0<l;)s[0]=a.getComponent(t,0)}else if(Su(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}},xk=class extends Nm{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=bk(this.type),this.arrayOffsets=On(n,"arrayOffsets",null),this.stringOffsets=On(n,"stringOffsets",null),this.arrayOffsetType=On(n,"arrayOffsetType","UINT32"),this.stringOffsetType=On(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:r,arrayOffsetType:i}=this,o=new(wu(i))(e[r]);n=o[t+1]-o[t]}return n}getIndexOffsetFromId(e,t){let n=t;if(this.arrayOffsets){let{arrayOffsets:r,arrayOffsetType:i}=this;n=new(wu(i))(e[r])[n]}else this.array&&(n*=this.count);return n}},wk=class extends Yb{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(xk)}getData(e,t={}){let n=this.properties;Lm(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(wu(o,a))(l),u=i.getIndexOffsetFromId(s,t);if(V1(a)||a==="ENUM")return j1(c,(u+n)*i.valueLength,a,r);if(a==="STRING"){let p=u+n,d=0;if(i.stringOffsets!==null){let{stringOffsets:f,stringOffsetType:b}=i,g=new(wu(b))(s[f]);d=g[p+1]-g[p],p=g[p]}let m=new Uint8Array(c.buffer,p,d);r=new TextDecoder().decode(m)}else if(a==="BOOLEAN"){let p=u+n,d=Math.floor(p/8),m=p%8;r=(c[d]>>m&1)==1}return r}getPropertyValue(e,t,n=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let r=this.properties[e];if(!r)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return r.resolveDefault(n);let i=r.array,o=this.data,a=r.getArrayLengthFromId(o,t);if(n=r.shapeToProperty(n,a),i)for(let s=0,l=n.length;s<l;s++)n[s]=this._readValueAtIndex(e,t,s,n[s]);else n=this._readValueAtIndex(e,t,0,n);return n=r.adjustValueScaleOffset(n),n=r.resolveEnumsToStrings(n),n=r.resolveNoData(n),n}},vu=new le.Box2,T1=class{constructor(){this._renderer=new le.WebGLRenderer,this._target=new le.WebGLRenderTarget(1,1),this._texTarget=new le.WebGLRenderTarget,this._quad=new qb.FullScreenQuad(new le.ShaderMaterial({blending:le.CustomBlending,blendDst:le.ZeroFactor,blendSrc:le.OneFactor,uniforms:{map:{value:null},pixel:{value:new le.Vector2}},vertexShader:`
3726
3772
  void main() {
3727
3773
 
3728
3774
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
@@ -3737,11 +3783,13 @@ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor)
3737
3783
  gl_FragColor = texelFetch( map, pixel, 0 );
3738
3784
 
3739
3785
  }
3740
- `}))}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;Hc.min.copy(t),Hc.max.copy(t),Hc.max.x+=1,Hc.max.y+=1,r.initRenderTarget(i),r.copyTextureToTexture(e,i.texture,Hc,n,0)}},Yo=new class{constructor(){let e=null;Object.getOwnPropertyNames(d_.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new d_),e[t](...n)))})}},p_=new re.Vector2,m_=new re.Vector2,f_=new re.Vector2;function IO(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function C_(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 T_(e,t,n,r,i){let[o,a,s]=r,l=IO(e,t);p_.fromBufferAttribute(l,o),m_.fromBufferAttribute(l,a),f_.fromBufferAttribute(l,s),i.set(0,0,0).addScaledVector(p_,n.x).addScaledVector(m_,n.y).addScaledVector(f_,n.z)}function P_(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 h_=new re.Vector2,g_=new re.Vector2,b_=new re.Vector2,kO=class extends Xp{constructor(e,t,n=null){super(e,t,n),this.channels=Tn(n,"channels",[0]),this.index=Tn(n,"index",null),this.texCoord=Tn(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 __(e,t*this.valueLength,r,n)}},BO=class extends ob{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(kO)}getData(e,t,n,r={}){let i=this.properties;Wp(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;Wp(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,Yo.increaseSizeTo(i.length);let o=this.data,a=this.definition.properties,s=this.properties,l=C_(r,t);for(let p=0,u=e.length;p<u;p++){let f=e[p];if(!a[f])continue;let m=s[f],v=o[m.index];T_(r,m.texCoord,n,l,h_),P_(h_,v.image.width,v.image.height,g_),b_.set(p,0),Yo.renderPixelToTarget(v,g_,b_)}let c=new Uint8Array(e.length*4);if(this._asyncRead)return Yo.readDataAsync(c).then(()=>(d.call(this),i));return Yo.readData(c),d.call(this),i;function d(){for(let p=0,u=e.length;p<u;p++){let f=e[p],m=s[f],v=m.type;if(i[p]=ib(m,i[p]),!m)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!a[f]){i[p]=m.resolveDefault(i);continue}let g=m.valueLength*(m.count||1),b=m.channels.map(w=>c[4*p+w]),h=m.componentType,y=new(Wc(h,v))(g);if(new Uint8Array(y.buffer).set(b),m.array){let w=i[p];for(let T=0,x=w.length;T<x;T++)w[T]=m.readDataFromBuffer(y,T,w[T])}else i[p]=m.readDataFromBuffer(y,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())})}},tb=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 LO(m,d,c,n)),u=[],f=[];r&&(r.propertyTextures&&(u=r.propertyTextures.map(m=>new BO(s[m],d,c,t))),r.propertyAttributes&&(f=r.propertyAttributes.map(m=>new OO(l[m],d,c)))),this.schema=o,this.tableAccessors=p,this.textureAccessors=u,this.attributeAccessors=f,this.object=i,this.textures=t,this.nodeMetadata=r}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let r=Math.min(e.length,t.length);n.length=r;for(let i=0;i<r;i++){let o=this.tableAccessors[e[i]];n[i]=o.getData(t[i],n[i])}}if(Array.isArray(e)!==Array.isArray(n)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return n}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,n)=>n)),Array.isArray(e))return e.map(t=>{let n=this.tableAccessors[t];return{name:n.name,className:n.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,n=[]){let r=this.textureAccessors;n.length=r.length;for(let i=0;i<r.length;i++)n[i]=r[i].getData(e,t,this.object.geometry,n[i]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let r=this.textureAccessors;n.length=r.length;let i=[];for(let o=0;o<r.length;o++){let a=r[o].getDataAsync(e,t,this.object.geometry,n[o]).then(s=>{n[o]=s});i.push(a)}return await Promise.all(i),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let r=0;r<n.length;r++)t[r]=n[r].getData(e,this.object.geometry,t[r]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},Gc="EXT_structural_metadata";function NO(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 VO(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 A_=class{constructor(e){this.parser=e,this.name=Gc}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Gc))return;let r=null,i=t.json.extensions[Gc];if(i.schemaUri){let{manager:l,path:c,requestHeader:d,crossOrigin:p}=t.options,u=new URL(i.schemaUri,c).toString(),f=new re.FileLoader(l);f.setCrossOrigin(p),f.setResponseType("json"),f.setRequestHeader(d),r=f.loadAsync(u).then(m=>{i={...i,schema:m}})}let[o,a]=await Promise.all([NO(t,i.propertyTextures),VO(t,i.propertyTables),r]),s=new tb(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[Gc]){let u=p.extensions[Gc];l.userData.structuralMetadata=new tb(i,o,a,u,l)}else l.userData.structuralMetadata=s}})}},y_=new re.Vector2,v_=new re.Vector2,x_=new re.Vector2;function jO(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var E_=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;Yo.increaseSizeTo(a);let s=C_(n,e),l=s[jO(t)];for(let p=0,u=i.length;p<u;p++){let f=i[p],m="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let v=r[f.texture.index];T_(n,f.texture.texCoord,t,s,y_),P_(y_,v.image.width,v.image.height,v_),x_.set(p,0),Yo.renderPixelToTarget(r[f.texture.index],v_,x_)}else if("attribute"in f){let v=n.getAttribute(`_feature_id_${f.attribute}`).getX(l);v!==m&&(o[p]=v)}else{let v=l;v!==m&&(o[p]=v)}}let c=new Uint8Array(a*4);if(this._asyncRead)return Yo.readDataAsync(c).then(()=>(d(),o));return Yo.readData(c),d(),o;function d(){let p=new Uint32Array(1);for(let u=0,f=i.length;u<f;u++){let m=i[u],v="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let{channels:g}=m.texture,b=g.map(y=>c[4*u+y]);new Uint8Array(p.buffer).set(b);let h=p[0];h!==v&&(o[u]=h)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},qp="EXT_mesh_features";function w_(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[qp]&&n(r,a.extensions[qp])}})}var R_=class{constructor(e){this.parser=e,this.name=qp}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(qp))return;let r=t.json.textures?.length||0,i=Array(r).fill(null);w_(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);w_(e,t,(a,s)=>{a.userData.meshFeatures=new E_(a.geometry,o,s)})}},O_=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])}}},ab=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 S_.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 O_),this.metadata&&(t.register(()=>new A_),t.register(()=>new R_)),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:Tj}=re.MathUtils;var Pj=new nb.FullScreenQuad(new re.MeshBasicMaterial),UO=new re.DataTexture(new Uint8Array([255,255,255,255]),1,1);UO.needsUpdate=!0;var zO=0,FO=1,HO=2,GO=3,WO=4,qO=5,XO=6,$O=7,YO=8,KO=9,ZO=10,QO=11,Aj=Object.freeze({NONE:zO,SCREEN_ERROR:FO,GEOMETRIC_ERROR:HO,DISTANCE:GO,DEPTH:WO,RELATIVE_DEPTH:qO,IS_LEAF:XO,RANDOM_COLOR:$O,RANDOM_NODE_COLOR:YO,CUSTOM_COLOR:KO,LOAD_ORDER:ZO,INDEXED_COLOR:QO});var Ej=Math.PI/4,Rj=3/5;var $o={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var Oj=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 Dj={[$o.NONE]:16777215,[$o.NOT_READY]:7829367,[$o.NO_FIT]:2250239,[$o.DEPTH]:4473924,[$o.OCCUPANCY]:65535,[$o.SPACING]:16776960,[$o.ANGLE]:16711680,[$o.FACING]:16711935};var Lj=Math.PI/180;var Ij=Ja*Math.PI*2;var kj=Ja*Math.PI*2;var k_=require("three/examples/jsm/loaders/DRACOLoader.js"),B_=require("three/examples/jsm/loaders/KTX2Loader.js"),N_=require("three/examples/jsm/libs/meshopt_decoder.module.js"),vr=require("three");var $c=require("three");function D_(e){return!!e&&!e.isInterleavedBufferAttribute}function L_(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,$c.MathUtils.clamp(e.getComponent(i,o),n,r));return t}function JO(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 $p=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;D_(i)&&!(i.array instanceof Int16Array)&&(r.attributes.normal=L_(i,new $c.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];!D_(a)||a.array instanceof Uint16Array||!JO(a)||(r.attributes[o]=L_(a,new $c.BufferAttribute(new Uint16Array(a.count*a.itemSize),a.itemSize,!0),0,1))}})}};var Yc=require("react/jsx-runtime"),eD=0,I_=4,tD=6,nD=12,rD=4;function iD(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 sb({diagnosticsRef:e,url:t,rotation:n=[0,0,0],errorTarget:r=64,cacheSize:i=800,memoryBudgetMB:o=800,decoderConfig:a,objectBindings:s,itemMaterials:l,sceneConfig:c,selectedItem:d,panelHoveredItem:p,highlightOnHover:u=!0,onItemClick:f,onItemHover:m,onItemDoubleClick:v,onItemContextMenu:g,onObjectCatalog:b,onTilesetBounds:h,onModelLoaded:y,onLoadError:w,nodeRefsOut:T,onNodeRefsChange:x,materialRefsOut:D,explodeFactor:A=0,suspendBindingTransforms:S=!1}){let{camera:M,gl:_,invalidate:C}=(0,Yp.useThree)(),E=(0,$e.useRef)(null),[L,k]=(0,$e.useState)(null),B=(0,$e.useRef)({onItemClick:f,onItemHover:m,onItemDoubleClick:v,onObjectCatalog:b,onTilesetBounds:h,onModelLoaded:y,onLoadError:w,onNodeRefsChange:x});B.current={onItemClick:f,onItemHover:m,onItemDoubleClick:v,onObjectCatalog:b,onTilesetBounds:h,onModelLoaded:y,onLoadError:w,onNodeRefsChange:x};let j=(0,$e.useRef)(!0),[R,O]=(0,$e.useState)(null),N=(0,$e.useRef)(null);N.current=R;let H=(0,$e.useRef)([]),Y=(0,$e.useRef)(!1);(0,$e.useEffect)(()=>{let se=new _p;return O(se),()=>se.dispose()},[t]);let ue=(0,$e.useRef)(null),be=(0,$e.useRef)(0),X=(0,$e.useRef)(!1),G=o*1024*1024,J=(0,$e.useRef)(!1),ee=(0,$e.useRef)(Ag),fe=(0,$e.useRef)(null),K=(0,$e.useRef)(null),oe=(0,$e.useRef)(null);(0,$e.useEffect)(()=>()=>{oe.current!==null&&clearTimeout(oe.current)},[]);let ae=a?.dracoDecoderPath??bg,pe=a?.ktx2TranscoderPath??yg,De=a?.meshopt??!0,[te,Fe]=(0,$e.useState)(null);(0,$e.useEffect)(()=>{X.current=!1,J.current=!1;let se=new Jg(t);se.loadAncestors=!0;let Re=new Rp;Re.priorityCallback=se.downloadQueue.priorityCallback,Re.maxJobsPerOrigin=nD;let Ee=new Li;Ee.priorityCallback=se.parseQueue.priorityCallback,Ee.maxJobs=tD;let nt=new Li;nt.priorityCallback=se.processNodeQueue.priorityCallback,nt.maxJobs=se.processNodeQueue.maxJobs;let Qe=new Dc;Qe.unloadPriorityCallback=se.lruCache.unloadPriorityCallback,se.downloadQueue=Re,se.parseQueue=Ee,se.processNodeQueue=nt,se.lruCache=Qe;let ut=ae?new k_.DRACOLoader().setDecoderPath(ae).setWorkerLimit(rD):null,Ke=pe?new B_.KTX2Loader().setTranscoderPath(pe).detectSupport(_):null;return se.registerPlugin(new ab({dracoLoader:ut,ktxLoader:Ke,meshoptDecoder:De?N_.MeshoptDecoder:null,autoDispose:!1})),se.registerPlugin(new rb({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),se.registerPlugin(new $p),Fe(se),window.__riTiles=se,()=>{se.forEachLoadedModel(xe=>ic(xe)),se.dispose(),ut?.dispose(),Ke?.dispose(),Fe(xe=>xe===se?null:xe)}},[ae,_,pe,De,t]),(0,$e.useEffect)(()=>{te&&(ee.current=Ag,fe.current=null,te.errorTarget=r,te.lruCache.maxSize=i,te.lruCache.minSize=Math.max(1,Math.floor(i*.75)),te.lruCache.maxBytesSize=G,te.lruCache.minBytesSize=G*.75,C())},[i,r,C,G,te]);let We=(0,$e.useMemo)(()=>{let se=s??{};return{objectBindings:se,keyByModelObject:bM(se),itemMaterials:l,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:d??null,hoveredKey:yM(L,p),highlightOnHover:u,suspendTransforms:S,placementFrame:te?.group.matrixWorld,invalidate:C}},[L,u,C,l,s,p,c,d,S,te]),ge=(0,$e.useCallback)(()=>{if(!te)return;let se=qe.current,Re=Y.current?N.current?.nodesByBinding(se)??{}:{},Ee={};te.group.traverse(Ke=>{if(!Ke.isMesh)return;let xe=Tg(Ke);if(!xe)return;let et=se.keyByModelObject[xe]??xe;if(!se.objectBindings[et])return;Re[et]||(Re[et]=Ke);let xt=Ke.material;xt&&(Ee[et]=xt)});let nt=T?.current??{},Qe=Object.keys(nt),ut=Qe.length!==Object.keys(Re).length||Qe.some(Ke=>nt[Ke]!==Re[Ke]);T&&(T.current=Re),D&&(D.current=Ee),(ut||!T)&&B.current.onNodeRefsChange?.()},[D,T,te]),Ce=(0,$e.useCallback)(se=>Sp(se,We),[We]),Je=(0,$e.useCallback)(se=>xM(se,We),[We]),ve=(0,$e.useRef)(Je);ve.current=Je;let qe=(0,$e.useRef)(We);qe.current=We;let he=(0,$e.useCallback)(()=>{let se=ue.current,Re=be.current;return!se||Re<=0?qe.current:{...qe.current,explode:{factor:Re,centre:se.centre,radius:se.radius}}},[]);(0,$e.useEffect)(()=>{te&&(Je(te.group),j.current=!0,te.forEachLoadedModel(se=>{Je(se),il(se,he())}),C())},[Je,C,he,te]),(0,$e.useEffect)(()=>{let se=iD(t);if(!se)return;let Re=!1;return fetch(se).then(Ee=>Ee.ok?Ee.json():null).then(Ee=>{Re||!Ee?.objects||(H.current=Ee.objects,Y.current=Ee.bindingFrame==="gltf-identity-v2",Y.current&&N.current?.setCatalog(Ee.objects),j.current=!0,B.current.onObjectCatalog?.(Ee.objects),C())}).catch(()=>{}),()=>{Re=!0}},[t,C,R]),(0,$e.useEffect)(()=>{if(!te)return;let se=!1,Re=()=>C(),Ee=xe=>{xe.scene&&(xe.scene.traverse(et=>{let xt=et.material;for(let Dn of Array.isArray(xt)?xt:xt?[xt]:[])Dn.transparent&&Dn.side===vr.DoubleSide&&(Dn.forceSinglePass=!0)}),ve.current(xe.scene),il(xe.scene,he()),_d(xe.scene)),j.current=!0,se||(se=!0,B.current.onModelLoaded?.(te.group)),C()},nt=xe=>{B.current.onLoadError?.(xe.error)},Qe=xe=>{xe.scene&&(Pg(xe.scene),ic(xe.scene)),j.current=!0};te.setCamera(M),te.setResolutionFromRenderer(M,_),te.addEventListener("needs-update",Re),te.addEventListener("load-model",Ee),te.addEventListener("load-error",nt),te.addEventListener("dispose-model",Qe);let ut=()=>{j.current=!0,C()};te.addEventListener("tile-visibility-change",ut);let Ke=()=>{let xe=te.root;xe&&!xe.content?.uri&&xe.refine==="REPLACE"&&(xe.refine="ADD",C())};return te.addEventListener("load-root-tileset",Ke),C(),()=>{te.removeEventListener("needs-update",Re),te.removeEventListener("load-model",Ee),te.removeEventListener("load-error",nt),te.removeEventListener("dispose-model",Qe),te.removeEventListener("tile-visibility-change",ut),te.removeEventListener("load-root-tileset",Ke),Pg(te.group),te.deleteCamera(M),T&&(T.current={}),D&&(D.current={})}},[M,_,C,D,T,he,te]);let de=zd(se=>Ce(se)?.binding??null,g),ze=(0,$e.useCallback)(se=>{if(de.consumeClick())return;let Re=Ce(se.object);Re&&(se.stopPropagation(),B.current.onItemClick?.(Re.binding))},[Ce,de,f]),Pe=(0,$e.useCallback)(se=>{let Re=Ce(se.object);if(!Re)return;B.current.onItemDoubleClick?.(Re.binding,$s(se))&&se.stopPropagation()},[Ce]),ft=(0,$e.useCallback)(se=>{let Re=Ce(se.object),Ee=Re?.key??null;Ee!==E.current&&(E.current=Ee,k(Ee),B.current.onItemHover?.(Re?.binding??null))},[Ce]),At=(0,$e.useCallback)(()=>{E.current!==null&&(E.current=null,k(null),B.current.onItemHover?.(null))},[]);return(0,$e.useEffect)(()=>{C()},[C,te]),(0,Yp.useFrame)((se,Re)=>{if(!te)return;if(te.setResolutionFromRenderer(M,_),Y.current&&R){let en=R.sync(he(),d,S);R.updateBounds(te.root),S&&te.forEachLoadedModel(nn=>il(nn,en))}if(te.update(),!X.current){let en=new vr.Box3;if(te.getBoundingBox(en)){X.current=!0,te.group.updateMatrixWorld(),en.applyMatrix4(te.group.matrixWorld);let nn=en.getBoundingSphere(new vr.Sphere);ue.current={centre:nn.center.clone(),radius:en.getSize(new vr.Vector3).length()*.5},B.current.onTilesetBounds?.(en),C()}}j.current&&(j.current=!1,ge());let Ee=Math.min(Math.max(A,0),1),nt=be.current;Math.abs(nt-Ee)>1e-4?(be.current=vr.MathUtils.lerp(nt,Ee,1-Math.exp(-6*Re)),il(te.group,he()),C()):nt!==Ee&&(be.current=Ee,il(te.group,he()),C());let Qe=te,ut=te.lruCache,Ke=ut.isFull(),xe=ee.current,et=xe.loosened&&fe.current?fe.current:{bytes:ut.maxBytesSize,items:ut.maxSize},xt=0;for(let en of ut.usedSet??[])xt+=ut.bytesMap?.get(en)??0;let Dn=!1,pi=te;for(let en of pi.usedSet??[]){let nn=en.internal?.loadingState??I_;if(en.traversal?.used&&en.internal?.hasContent&&nn>=eD&&nn<I_){Dn=!0;break}}let yn=K.current??(K.current={world:new vr.Matrix4,projection:new vr.Matrix4}),ho=!yn.world.equals(M.matrixWorld)||!yn.projection.equals(M.projectionMatrix);ho&&(yn.world.copy(M.matrixWorld),yn.projection.copy(M.projectionMatrix));let ir={full:Ke,wanting:Dn,moved:ho,usage:Math.max(xt/Math.max(1,et.bytes),(ut.usedSet?.size??0)/Math.max(1,et.items)),now:performance.now()},Vn=EM(xe,ir);Vn!==xe&&(Vn.loosened&&(!xe.loosened||Vn.raisedAt!==xe.raisedAt)?(xe.loosened||(fe.current=et),ut.maxBytesSize=Math.max(et.bytes,ut.cachedBytes??0)*Eg,ut.maxSize=Math.ceil(Math.max(et.items,ut.itemSet?.size??0)*Eg)):!Vn.loosened&&xe.loosened&&fe.current&&(ut.maxBytesSize=fe.current.bytes,ut.maxSize=fe.current.items,fe.current=null),ee.current=Vn,te.errorTarget=r*Vn.factor,C()),!J.current&&Ke&&ir.wanting&&Vn.factor>=Ac&&(J.current=!0,console.warn("[react-immersive] The tile memory budget is full even at the coarsest level of detail, so the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB.")),e&&(e.current={cachedBytes:ut.cachedBytes??null,budgetBytes:et.bytes,cachedTiles:ut.itemSet?.size??null,downloading:Qe.stats?.downloading??0,parsing:Qe.stats?.parsing??0,cacheFull:Ke,detailFactor:Vn.factor,errorTarget:te.errorTarget});let mi=RM(Vn,ir);mi===0?C():mi!==null&&oe.current===null&&(oe.current=setTimeout(()=>{oe.current=null,C()},mi)),((Qe.stats?.downloading??0)>0||(Qe.stats?.parsing??0)>0||Qe.loadProgress!==void 0&&Qe.loadProgress<1&&!Ke)&&C()}),te?(0,Yc.jsxs)("group",{rotation:n,children:[R?(0,Yc.jsx)("primitive",{object:R.group}):null,(0,Yc.jsx)("primitive",{object:te.group,onClick:ze,onDoubleClick:Pe,onPointerDown:g?de.onPointerDown:void 0,onPointerMove:ft,onPointerOut:At})]}):null}var Kp=require("three");var oD=new Kp.Matrix4().makeRotationX(Math.PI/2);function V_(e){e.updateMatrixWorld(!0);let t=new Kp.Matrix4().copy(e.matrixWorld).invert().premultiply(oD),n=new Kp.Matrix4,r=[];for(let[i,o]of Object.entries(cr(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 Ue=require("react"),lb=require("@react-three/drei"),ts=require("@react-three/fiber"),ai=require("three");var fn=require("react/jsx-runtime"),aD=.02;function j_(e,t,n=!1,r){let i=(0,Ue.useRef)(null),[o,a]=(0,Ue.useState)(!0),s=(0,Ue.useRef)(!0),l=(0,Ue.useMemo)(()=>new ai.Vector3,[]),c=(0,ts.useThree)(g=>g.scene),d=(0,Ue.useRef)(null),p=(0,Ue.useRef)(null),u=(0,Ue.useMemo)(()=>new ai.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),f=(0,Ue.useMemo)(()=>new ai.Vector3,[]),m=(0,Ue.useMemo)(()=>new ai.Vector3,[]),v=(0,Ue.useMemo)(()=>new ai.Vector3,[]);return(0,Ue.useEffect)(()=>{d.current=null},[e.anchorNodeName]),(0,ts.useFrame)(({camera:g})=>{let b=i.current,h=b?.parent;if(!b||!h)return;let y=r?r.current:c;p.current!==y&&(p.current=y,d.current=null);let w=d.current;if(e.anchorNodeName&&(!w||!w.parent)&&(w=y?_r(y,e.anchorNodeName):null,d.current=w),w?(w.updateWorldMatrix(!0,!1),f.copy(u).applyMatrix4(w.matrixWorld)):(f.copy(u),h.localToWorld(f)),t){let x=t.current.get(e.id);x||(x=new ai.Vector3,t.current.set(e.id,x)),x.copy(f)}g.getWorldPosition(l);let T=!n||mx(e,l.distanceTo(f));T!==s.current&&(s.current=T,a(T)),v.copy(l).sub(f),v.lengthSq()>0?(v.normalize(),m.copy(f).addScaledVector(v,aD)):m.copy(f),h.worldToLocal(m),b.position.copy(m)}),{anchorRef:i,inRange:o}}function sD({anchorSceneRef:e,annotation:t,occluders:n,worldPositionsRef:r,onClick:i,onHover:o,showAnnotationOnHover:a}){let s=_e(),[l,c]=(0,Ue.useState)(!1),{anchorRef:d,inRange:p}=j_(t,r,!0,e),u=l||!p,[f,m]=(0,Ue.useState)(!1),[v,g]=(0,Ue.useState)(1),b=(0,Ue.useRef)(null),h=(0,Ue.useRef)(null),y=(0,Ue.useRef)(null);(0,Ue.useEffect)(()=>{p||(b.current&&clearTimeout(b.current),f&&(m(!1),o?.(null)))},[p,f,o]),(0,Ue.useEffect)(()=>()=>{b.current&&(clearTimeout(b.current),b.current=null),y.current&&(clearTimeout(y.current),y.current=null)},[]);let w=S=>{S.stopPropagation(),S.preventDefault(),b.current&&(clearTimeout(b.current),b.current=null),b.current=window.setTimeout(()=>{i?.(t),b.current=null},10)},T=S=>{S.stopPropagation(),m(!0),g(100),y.current&&(clearTimeout(y.current),y.current=null),o?.(t)},x=S=>{S.stopPropagation(),m(!1),g(1),y.current&&clearTimeout(y.current),y.current=window.setTimeout(()=>{o?.(null),a&&o?.(null),y.current=null},50)},D=S=>{S.stopPropagation();let M=S.currentTarget;M.dataset.pointerX=String(S.clientX),M.dataset.pointerY=String(S.clientY)},A=S=>{S.stopPropagation();let M=S.currentTarget,_=parseFloat(M.dataset.pointerX||"0"),C=parseFloat(M.dataset.pointerY||"0"),E=S.clientX-_,L=S.clientY-C;Math.sqrt(E*E+L*L)<10&&w(S)};return(0,fn.jsx)("group",{ref:d,children:(0,fn.jsx)(lb.Html,{center:!0,occlude:n,onOcclude:c,pointerEvents:u?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:u?"none":"auto",zIndex:v},className:"annotation-html-wrapper",transparent:!0,children:(0,fn.jsx)("div",{ref:h,className:`ri-annotationMarker ${f?"ri-annotationMarker--hovered":""}`,title:t.title,style:{display:u?"none":"flex"},onPointerDown:D,onPointerUp:A,onPointerEnter:T,onPointerLeave:x,onDoubleClick:S=>{S.stopPropagation(),i?.(t)},role:"button",tabIndex:0,"aria-label":s("annotationMarker",{id:t.id,title:t.title}),onKeyDown:S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),S.stopPropagation(),i?.(t))},children:(0,fn.jsx)("span",{className:"ri-annotationMarker-id",children:t.id})})})})}function lD({anchorSceneRef:e,annotation:t,occluders:n,popupRef:r,onClose:i,hideCloseButton:o=!1}){let a=_e(),[s,l]=(0,Ue.useState)(!1),{anchorRef:c}=j_(t,void 0,!1,e),d=(0,fn.jsxs)("div",{ref:r,className:"ri-viewAnnotationPopup",style:{display:s?"none":"block"},onPointerDown:p=>p.stopPropagation(),onClick:p=>p.stopPropagation(),children:[(0,fn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,fn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:t.title}),!o&&(0,fn.jsx)("button",{onClick:p=>{p.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":a("closeAnnotation"),children:"\xD7"})]}),t.category&&(0,fn.jsx)("span",{className:"ri-annotationCategory",children:t.category}),t.description&&(0,fn.jsx)("p",{className:"ri-viewAnnotationDescription",children:t.description}),t.images?.map((p,u)=>{let f=Sh(p.src);return f?(0,fn.jsx)("img",{className:"ri-annotationImage",src:f,alt:p.alt??"",loading:"lazy"},`${f}-${u}`):null}),t.links?.map((p,u)=>{let f=Sh(p.href);return f?(0,fn.jsx)("a",{className:"ri-annotationLink",href:f,target:"_blank",rel:"noopener noreferrer",children:p.label||a("learnMore")},`${f}-${u}`):null})]});return(0,fn.jsx)("group",{ref:c,children:(0,fn.jsx)(lb.Html,{occlude:n,onOcclude:l,pointerEvents:s?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:s?"none":"auto",zIndex:1e3},transparent:!0,children:d})})}function Zp({anchorSceneRef:e,annotations:t,sceneConfig:n,activeAnnotation:r,popupRef:i,canvasRootRef:o,worldPositionsRef:a,modelLoaded:s,onAnnotationClick:l,onAnnotationHover:c,onCloseAnnotation:d,hideCloseButton:p=!1,showAnnotationOnHover:u=!1}){let f=(0,ts.useThree)(j=>j.invalidate),m=(0,ts.useThree)(j=>j.scene),[v,g]=(0,Ue.useState)(null),[b,h]=(0,Ue.useState)(!1),y=(0,Ue.useRef)(null);(0,Ue.useEffect)(()=>{y.current!==null&&r===null&&(g(null),h(!1)),y.current=r?.id??null},[r]);let w=(0,Ue.useRef)(null),T=(0,Ue.useRef)(null),x=(0,Ue.useRef)(null),D=(0,Ue.useMemo)(()=>{let j=[];return m.traverse(R=>{let O=R;O.isMesh&&!O.isSkinnedMesh&&j.push({current:R})}),j},[m,t,s]),A=(0,Ue.useCallback)(()=>{f();let j=()=>{f(),T.current=window.requestAnimationFrame(()=>{f(),T.current=null})};T.current=window.requestAnimationFrame(j)},[f]);(0,Ue.useEffect)(()=>{A()},[t,A]),(0,Ue.useEffect)(()=>{A()},[r,A]),(0,Ue.useEffect)(()=>()=>{T.current!==null&&window.cancelAnimationFrame(T.current),x.current&&clearTimeout(x.current)},[]);let S=r||v,M=(0,Ue.useMemo)(()=>S?t.find(j=>j.id===S.id)??null:null,[S,t]),_=(0,Ue.useCallback)(j=>{if(b&&v?.id===j.id){h(!1),g(null),d?.();return}h(!0),g(j),l?.(j)},[b,v,l,d]),C=(0,Ue.useCallback)(j=>{c?.(j),u&&!b&&(x.current&&(clearTimeout(x.current),x.current=null),j?g(j):x.current=window.setTimeout(()=>{g(null),d?.(),x.current=null},100))},[b,c,u,d]),E=(0,Ue.useCallback)(()=>{h(!1),g(null),d?.()},[d]),L=(0,Ue.useCallback)(j=>{let R=j.target;if(R.closest?.(".ri-annotationMarker")||R.closest?.(".ri-viewAnnotationPopup")||R.closest?.(".annotation-html-wrapper"))return;let O=o.current;O&&O.contains(R)&&(h(!1),g(null),d?.())},[o,d]),k=(0,Ue.useCallback)(j=>{j.key==="Escape"&&b&&(h(!1),g(null),d?.())},[b,d]);(0,Ue.useEffect)(()=>{let j=o.current;return j&&(j.addEventListener("click",L),j.addEventListener("pointerdown",L)),document.addEventListener("keydown",k),()=>{j&&(j.removeEventListener("click",L),j.removeEventListener("pointerdown",L)),document.removeEventListener("keydown",k)}},[o,L,k]);let B=(0,Ue.useMemo)(()=>(n?.model.rotation??[0,0,0]).map(j=>j*Math.PI/180),[n?.model.rotation]);return(0,Ue.useEffect)(()=>{f()},[f,B]),(0,ts.useFrame)((j,R)=>{if(!w.current)return;w.current.rotation.x=ai.MathUtils.lerp(w.current.rotation.x,B[0],1-Math.exp(-5*R)),w.current.rotation.y=ai.MathUtils.lerp(w.current.rotation.y,B[1],1-Math.exp(-5*R)),w.current.rotation.z=ai.MathUtils.lerp(w.current.rotation.z,B[2],1-Math.exp(-5*R));let{rotation:O}=w.current;Math.abs(O.x-B[0])+Math.abs(O.y-B[1])+Math.abs(O.z-B[2])>1e-4&&f()}),(0,fn.jsxs)("group",{ref:w,children:[t.map(j=>{let R=`${j.worldPosition.join(",")}-${j.title}-${j.id}`;return(0,fn.jsx)(sD,{anchorSceneRef:e,annotation:j,occluders:D,worldPositionsRef:a,onClick:_,onHover:C,showAnnotationOnHover:u},R)}),M?(0,fn.jsx)(lD,{anchorSceneRef:e,annotation:M,occluders:D,popupRef:i,onClose:E,hideCloseButton:p},`popup-${M.id}`):null]})}var so=require("react"),em=require("@react-three/drei");var Jp=require("react"),U_=require("@react-three/drei"),z_=require("@react-three/fiber"),si=require("three");var Qp=require("react/jsx-runtime");function Ko(e){return(0,z_.useThree)(n=>Ar(n.gl))?(0,Qp.jsx)(cD,{...e}):(0,Qp.jsx)(U_.Line,{points:e.points,color:e.color,lineWidth:e.lineWidth,dashed:e.dashed})}function cD({points:e,color:t,dashed:n=!1}){let r=(0,Jp.useMemo)(()=>{let i=new si.BufferGeometry().setFromPoints(e.map(s=>s instanceof si.Vector3?s:new si.Vector3(...s))),o=n?new si.LineDashedMaterial({color:t,dashSize:.02,gapSize:.02}):new si.LineBasicMaterial({color:t}),a=new si.Line(i,o);return n&&a.computeLineDistances(),a},[e,t,n]);return(0,Jp.useEffect)(()=>()=>{r.geometry.dispose(),r.material.dispose()},[r]),(0,Qp.jsx)("primitive",{object:r})}var un=require("three");var Be=require("react/jsx-runtime"),Zo="#22d3ee",uD="#facc15";function ns(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function F_(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function dD(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 ao({position:e,children:t}){return(0,Be.jsx)(em.Html,{center:!0,position:e,zIndexRange:[20,0],style:{pointerEvents:"none"},children:(0,Be.jsx)("div",{className:"ri-measureLabel",children:t})})}function H_({positions:e,triangles:t}){let n=(0,so.useMemo)(()=>{let r=new un.Vector3(...e[0]),i=new un.BufferGeometry;return i.setAttribute("position",new un.Float32BufferAttribute(e.flatMap(o=>new un.Vector3(...o).sub(r).toArray()),3)),i.setIndex(t.flat()),i},[e,t]);return(0,so.useEffect)(()=>()=>n.dispose(),[n]),(0,Be.jsx)("mesh",{position:e[0],geometry:n,raycast:()=>{},renderOrder:100,children:(0,Be.jsx)("meshBasicMaterial",{color:Zo,side:un.DoubleSide,transparent:!0,opacity:.18,depthWrite:!1})})}var pD=[[0,1,2]];function mD({positions:e}){let t=Ns(e);if(t===null)return null;let n=new un.Vector3(...e[1]),r=new un.Vector3(...e[0]).sub(n),i=new un.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 un.Vector3(0,1,0):new un.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,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(Ko,{points:l,color:Zo,lineWidth:2}),(0,Be.jsxs)(ao,{position:c,children:[t.toFixed(2),"\xB0"]})]})}function fD({box:e,unit:t,scale:n}){let r=(0,so.useMemo)(()=>[(e.min[0]+e.max[0])/2,(e.min[1]+e.max[1])/2,(e.min[2]+e.max[2])/2],[e.min,e.max]),i=(0,so.useMemo)(()=>{let[l,c,d]=e.size,p=new un.BoxGeometry(l||1e-4,c||1e-4,d||1e-4),u=new un.EdgesGeometry(p);return p.dispose(),u},[e.size]);(0,so.useEffect)(()=>()=>{i.dispose()},[i]);let[o,a,s]=e.size;return(0,Be.jsxs)("group",{position:r,children:[(0,Be.jsx)("lineSegments",{geometry:i,children:(0,Be.jsx)("lineBasicMaterial",{color:uD})}),(0,Be.jsxs)(ao,{position:[0,-a/2,s/2],children:["W ",ns(o*n,t)]}),(0,Be.jsxs)(ao,{position:[-o/2,0,s/2],children:["H ",ns(a*n,t)]}),(0,Be.jsxs)(ao,{position:[o/2,-a/2,0],children:["D ",ns(s*n,t)]})]})}function ul({points:e,unit:t,scale:n=1,box:r,showDimensions:i,tool:o="distance",areaClosed:a=!1,snapPreview:s}){let l=(0,so.useMemo)(()=>e.map(p=>p.position),[e]),c=(0,so.useMemo)(()=>o==="area"&&a?Vs(l):null,[o,a,l]),d=o==="pointToPlane"&&e.length===2?pd(e[0],e[1].position):null;return(0,Be.jsxs)("group",{children:[o!=="wrap"&&o!=="wrapHorizontal"&&e.map(p=>(0,Be.jsx)(em.Html,{center:!0,position:p.position,zIndexRange:[15,0],style:{pointerEvents:"none"},children:(0,Be.jsx)("div",{className:`ri-measureDot${p.snapped?" ri-measureDot--snapped":""}`})},p.id)),o==="distance"&&e.slice(1).map((p,u)=>{let f=e[u].position,m=p.position,v=new un.Vector3(...f).distanceTo(new un.Vector3(...m));return(0,Be.jsxs)("group",{children:[(0,Be.jsx)(Ko,{points:[f,m],color:Zo,lineWidth:2}),(0,Be.jsx)(ao,{position:F_(f,m),children:ns(v*n,t)})]},`${e[u].id}-${p.id}`)}),(o==="angle"||o==="area")&&l.length>=2&&(0,Be.jsx)(Ko,{points:a?[...l,l[0]]:l,color:Zo,lineWidth:2}),o==="angle"&&(0,Be.jsx)(mD,{positions:l}),c&&!("error"in c)&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(H_,{positions:l,triangles:c.triangles}),(0,Be.jsx)(ao,{position:c.center,children:ns(c.area*n**2,t?`${t}\xB2`:"")})]}),o==="pointToPlane"&&e[0]?.faceVertices&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(H_,{positions:e[0].faceVertices,triangles:pD}),(0,Be.jsx)(Ko,{points:[...e[0].faceVertices,e[0].faceVertices[0]],color:Zo,lineWidth:1}),e.length===1&&(0,Be.jsx)(ao,{position:e[0].position,children:"Reference plane"})]}),d&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(Ko,{points:[e[1].position,d.projection],color:Zo,lineWidth:2}),(0,Be.jsx)(Ko,{points:[e[0].position,d.projection],color:Zo,lineWidth:1,dashed:!0}),(0,Be.jsx)(ao,{position:F_(e[1].position,d.projection),children:ns(d.distance*n,t)})]}),(o==="wrap"||o==="wrapHorizontal")&&l.length>=3&&(0,Be.jsxs)(Be.Fragment,{children:[(0,Be.jsx)(Ko,{points:[...l,l[0]],color:Zo,lineWidth:2}),(0,Be.jsx)(ao,{position:dD(l),children:ns(Xl(l,!0)*n,t)})]}),s&&(0,Be.jsxs)(em.Html,{center:!0,position:s.position,zIndexRange:[20,0],style:{pointerEvents:"none"},children:[(0,Be.jsx)("div",{className:"ri-measureSnapTarget"}),(0,Be.jsx)("div",{className:"ri-measureSnapLabel",children:s.snapped==="vertex"?"Vertex":"Edge"})]}),i&&r?(0,Be.jsx)(fD,{box:r,unit:t,scale:n}):null]})}var G_={free:0,starter:1,growth:2};function W_(e,t){return G_[e]>=G_[t]}var q_={free:"Free",starter:"Starter",growth:"Growth"};var hD={advancedMaterials:"starter",materialVariants:"starter",customEnvironment:"starter",backgroundImages:"starter",environmentBackground:"free",sectionPlanes:"starter",calibratedMeasurements:"starter",animationConfig:"starter",sceneBundle:"starter",cinematic:"starter",rules:"growth",postLighting:"starter",postSelection:"growth",postStylize:"growth"};function tm(e,t){return W_(e,hD[t])}var lo=require("lucide-react"),ki=require("react"),X_=require("react-dom");var nm=require("react"),gD=(0,nm.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var Qo=()=>(0,nm.useContext)(gD);var me=require("react/jsx-runtime");function cb(e){let t=_e(),{isInsideEditor:n,measurementPanelTarget:r,tier:i}=Qo(),o=n&&!tm(i,"calibratedMeasurements"),a=(0,ki.useRef)(null),[s,l]=(0,ki.useState)(!1),[c,d]=(0,ki.useState)(""),[p,u]=(0,ki.useState)("1"),[f,m]=(0,ki.useState)("m"),v=(0,ki.useRef)(null),g={ready:"measurementReady",approximate:"measurementApproximate","model-changed":"measurementModelChanged","missing-object":"measurementObjectMissing","geometry-changed":"measurementGeometryChanged","pose-changed":"measurementPoseChanged","hidden-object":"measurementObjectHidden",invalid:"measurementInvalid"};(0,ki.useLayoutEffect)(()=>{if(!a.current)return;let x=()=>e.onHeight(a.current?.getBoundingClientRect().height??34),D=new ResizeObserver(x);return D.observe(a.current),x(),()=>D.disconnect()},[e.onHeight]);let{tool:b,pointCount:h,areaClosed:y}=e,w=b==="angle"?[t("angleFirstArmHint"),t("angleVertexHint"),t("angleSecondArmHint"),t("angleNewHint")][h]:b==="area"?t(y?"areaNewHint":"areaCornersHint"):b==="pointToPlane"?[t("pointToPlaneFaceHint"),t("pointToPlanePointHint"),t("pointToPlaneNewHint")][h]:t(b==="wrap"?"wrapHint":b==="wrapHorizontal"?"wrapHorizontalHint":"distanceHint"),T=(0,me.jsxs)("div",{className:`ri-measureLibrary${n?" ri-measureLibrary--sidebar":""}`,onClick:x=>x.stopPropagation(),onPointerDown:x=>x.stopPropagation(),onPointerMove:x=>x.stopPropagation(),onKeyDown:x=>x.stopPropagation(),children:[n&&(0,me.jsxs)("button",{type:"button",className:`ri-measureStart${e.active?" ri-measureStart--active":""}`,disabled:e.disabled,onClick:e.onToggle,"aria-pressed":e.active,children:[(0,me.jsx)(lo.PencilRuler,{size:15}),e.active?t("stopMeasuring"):t("startMeasuring")]}),(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--units",children:[(0,me.jsxs)("label",{children:[t("measurementSourceUnit")," ",(0,me.jsx)("select",{"aria-label":t("measurementSourceUnit"),className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly,value:e.settings.sourceUnit??"m",onChange:x=>e.onSettings({...e.settings,sourceUnit:x.target.value,metersPerUnit:void 0}),children:La.map(x=>(0,me.jsx)("option",{value:x,children:x},x))})]}),(0,me.jsxs)("label",{children:[t("measurementDisplayUnit")," ",(0,me.jsxs)("select",{"aria-label":t("measurementDisplayUnit"),className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly,value:e.displayUnit,onChange:x=>e.onSettings({...e.settings,displayUnit:x.target.value}),children:[!$l(e.displayUnit)&&(0,me.jsx)("option",{value:e.displayUnit,children:e.displayUnit}),La.map(x=>(0,me.jsx)("option",{value:x,children:x},x))]})]})]}),e.active&&(0,me.jsxs)(me.Fragment,{children:[(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--save",children:[(0,me.jsxs)("label",{children:[t("measurementName")," ",(0,me.jsx)("input",{"aria-label":t("measurementName"),className:"ri-measureInput",value:c,onChange:x=>d(x.target.value),placeholder:t("measurementNamePlaceholder")})]}),(0,me.jsx)("button",{type:"button",className:"ri-measureFinish",disabled:e.disabled||e.readOnly||!e.canSave||o,title:o?"Saving measurements requires the Starter plan or higher.":void 0,onClick:()=>{e.onSave(c),d(""),l(!0)},children:t("saveMeasurement")})]}),(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--calibrate",children:[(0,me.jsxs)("label",{children:[t("knownMeasurementDistance")," ",(0,me.jsx)("input",{"aria-label":t("knownMeasurementDistance"),type:"number",min:"0",step:"any",className:"ri-measureInput",value:p,onChange:x=>u(x.target.value)})]}),(0,me.jsx)("select",{"aria-label":t("calibrationUnit"),className:"ri-measureSelect",value:f,onChange:x=>m(x.target.value),children:La.map(x=>(0,me.jsx)("option",{children:x},x))}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly||!e.canCalibrate||o,title:o?"Calibration requires the Starter plan or higher.":void 0,onClick:()=>e.onCalibrate(Number(p),f),children:t("calibrateMeasurement")})]}),(0,me.jsx)("p",{className:"ri-measureLibraryHint",children:t("measurementCalibrationHint")})]}),e.settings.metersPerUnit!==void 0&&(0,me.jsxs)("div",{className:"ri-measureSettingsRow ri-measureSettingsRow--calibration",children:[(0,me.jsx)("span",{children:t("measurementCalibratedScale",{scale:e.settings.metersPerUnit.toPrecision(6)})}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||e.settingsReadOnly,onClick:()=>e.onSettings({...e.settings,metersPerUnit:void 0}),children:t("resetMeasurementCalibration")})]}),e.items.length>0&&(0,me.jsx)("div",{className:"ri-savedMeasurementList",children:e.items.map(x=>{let D=e.results.find(A=>A.id===x.id);return(0,me.jsxs)("div",{className:"ri-savedMeasurementRow",children:[(0,me.jsx)("input",{type:"checkbox","aria-label":t("showSavedMeasurement",{name:x.name}),checked:x.visible!==!1,disabled:e.disabled||e.readOnly,onChange:A=>e.onItems(e.items.map(S=>S.id===x.id?{...S,visible:A.target.checked}:S))}),(0,me.jsx)("input",{"aria-label":t("renameSavedMeasurement",{name:x.name}),className:"ri-measureInput",defaultValue:x.name,disabled:e.disabled||e.readOnly,onBlur:A=>{let S=A.target.value.trim()||x.name;S!==x.name?e.onItems(e.items.map(M=>M.id===x.id?{...M,name:S}:M)):A.target.value=S}},`${x.id}:${x.name}`),(0,me.jsxs)("span",{className:"ri-savedMeasurementValue",children:[D?.value!=null?`${D.value.toFixed(3)} ${D.unit}`:"\u2014",(0,me.jsx)("small",{children:t(D?g[D.status]:"measurementWaiting")})]}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect","aria-label":t("deleteSavedMeasurement",{name:x.name}),disabled:e.disabled||e.readOnly,onClick:()=>e.onItems(e.items.filter(A=>A.id!==x.id)),children:"\xD7"})]},x.id)})}),!e.items.length&&(0,me.jsx)("p",{className:"ri-measureEmpty",children:t("noSavedMeasurements")}),(0,me.jsxs)("details",{className:"ri-measureTransfer",children:[(0,me.jsx)("summary",{children:t("measurementFiles")}),(0,me.jsxs)("div",{className:"ri-measureSettingsRow",children:[(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||!e.items.length,onClick:e.onExportJson,children:t("exportMeasurementJson")}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||!e.items.length,onClick:e.onExportCsv,children:t("exportMeasurementCsv")}),(0,me.jsx)("button",{type:"button",className:"ri-measureSelect",disabled:e.disabled||e.readOnly||e.settingsReadOnly,onClick:()=>v.current?.click(),children:t("importMeasurementJson")}),(0,me.jsx)("input",{ref:v,type:"file",accept:".json,application/json",hidden:!0,onChange:x=>{let D=x.target.files?.[0];if(x.target.value="",!!D){if(D.size>5*1024*1024){e.onImport("{}");return}D.text().then(e.onImport).catch(()=>e.onImport("{}"))}}})]})]}),n&&e.error&&(0,me.jsx)("p",{className:"ri-measureLibraryError",role:"status",children:t.message(e.error)})]});return(0,me.jsxs)(me.Fragment,{children:[(0,me.jsxs)("div",{ref:a,className:"ri-measureTools",style:{top:e.top},children:[(0,me.jsxs)("div",{className:"ri-measureToolbarRow",children:[(0,me.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,me.jsx)(lo.PencilRuler,{size:16})}),(0,me.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,me.jsx)(lo.RulerDimensionLine,{size:16})}),!n&&(0,me.jsx)("button",{type:"button",className:"ri-measureSelect","aria-expanded":s,onClick:()=>l(!s),children:t("savedMeasurements",{count:e.items.length})}),e.active&&(0,me.jsxs)(me.Fragment,{children:[(0,me.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementTool"),value:b,disabled:e.disabled,onChange:x=>e.onTool(x.target.value),children:[(0,me.jsx)("option",{value:"distance",children:t("distance")}),(0,me.jsx)("option",{value:"angle",children:t("angle")}),(0,me.jsx)("option",{value:"area",children:t("area")}),(0,me.jsx)("option",{value:"pointToPlane",children:t("pointToPlane")}),(0,me.jsx)("option",{value:"wrap",children:t("wrap")}),(0,me.jsx)("option",{value:"wrapHorizontal",children:t("wrapHorizontal")})]}),(0,me.jsxs)("select",{className:"ri-measureSelect","aria-label":t("measurementSnapping"),value:e.snap,disabled:e.disabled,onChange:x=>e.onSnap(x.target.value),children:[(0,me.jsx)("option",{value:"none",children:t("noSnapping")}),(0,me.jsx)("option",{value:"auto",children:t("snapAuto")}),(0,me.jsx)("option",{value:"vertex",children:t("snapVertex")}),(0,me.jsx)("option",{value:"edge",children:t("snapEdge")})]})]}),h>0&&(0,me.jsxs)(me.Fragment,{children:[(0,me.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onUndo,disabled:e.disabled,title:t("undoMeasurementPoint"),children:(0,me.jsx)(lo.Undo2,{size:16})}),(0,me.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onClear,disabled:e.disabled,title:t("clearMeasurements"),children:(0,me.jsx)(lo.Eraser,{size:16})})]}),e.active&&b==="area"&&!y&&(0,me.jsx)("button",{type:"button",className:"ri-measureFinish",onClick:e.onFinishArea,disabled:e.disabled||h<3,children:t("finishArea")})]}),!n&&(e.active||s)&&T,(e.active||!n&&e.error)&&(0,me.jsx)("div",{className:`ri-measureHint${e.error?" ri-measureHint--error":""}`,role:"status",children:e.error?t.message(e.error):w})]}),n&&r&&(0,X_.createPortal)(T,r)]})}var Jo=require("react"),$_=require("@react-three/fiber");var Kc=require("react/jsx-runtime");function rm({items:e,sceneRef:t,modelId:n,tilesetUrl:r,settings:i,legacyUnit:o,revision:a,onResults:s}){let[l,c]=(0,Jo.useState)([]),d=(0,Jo.useRef)(""),p=(0,Jo.useCallback)(()=>{let m=e.length&&t.current?mc(t.current):void 0,v=e.map(h=>Yd(h,t.current,n,r,m)),g=v.map(({measurement:h,points:y,status:w})=>Ba(h,i,o,y,w)),b=JSON.stringify([v.map(({measurement:h,points:y,status:w})=>[h.id,h.tool,h.visible,w,y.map(T=>[T.position,T.normal,T.faceVertices])]),g]);d.current!==b&&(d.current=b,c(v),s(g))},[e,t,n,r,i,o,s]);(0,Jo.useEffect)(()=>{p()},[p,a]),(0,$_.useFrame)(()=>{e.length&&p()});let{factor:u,displayUnit:f}=Ia(i,o);return(0,Kc.jsx)(Kc.Fragment,{children:l.filter(({measurement:m,status:v})=>m.visible!==!1&&(v==="ready"||v==="approximate")).map(({measurement:m,points:v})=>(0,Kc.jsx)(ul,{points:v,unit:f,scale:u,box:null,showDimensions:!1,tool:m.tool,areaClosed:m.tool==="area"},m.id))})}var ht=require("react"),rs=require("@react-three/xr"),Q_=require("@react-three/fiber"),Zc=require("three"),li=require("react/jsx-runtime"),bD=1,Y_=1,yD=.1,vD=10;function xD(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:bD/s,offset:[-o,-e.min[1],-a]}}function K_(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function Z_(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var wD=(0,ht.forwardRef)(function({box:t,scaleMode:n,children:r,onARStateChange:i},o){let a=(0,ht.useRef)(null),s=(0,ht.useRef)(null),l=(0,ht.useRef)(null),c=(0,rs.useXR)(B=>B.session!=null),d=(0,rs.useXR)(B=>B.mode==="immersive-ar"),p=(0,ht.useMemo)(()=>t?xD(t,n):null,[t,n]),u=(0,ht.useRef)(new Zc.Vector3(0,0,-Y_)),f=(0,ht.useRef)(1),m=(0,ht.useRef)(0),v=(0,ht.useRef)(!0),g=(0,ht.useRef)(!1),b=(0,ht.useMemo)(()=>new Zc.Matrix4,[]),h=(0,ht.useRef)(new Zc.Vector3),y=(0,ht.useRef)(!1),w=(0,ht.useRef)(null),T=(0,ht.useRef)(!1),x=(0,ht.useRef)(0),D=(0,ht.useRef)(0),A=(0,ht.useRef)(1),S=(0,ht.useRef)(0),M=(0,ht.useCallback)(()=>{if(!i||!d)return;let B={canPlace:y.current,isPlacementMode:v.current,isModelPlaced:g.current},j=w.current;j&&j.canPlace===B.canPlace&&j.isPlacementMode===B.isPlacementMode&&j.isModelPlaced===B.isModelPlaced||(w.current=B,i(B))},[d,i]),_=(0,ht.useCallback)(()=>!d||!y.current?!1:(u.current.copy(h.current),g.current=!0,v.current=!1,M(),!0),[M,d]),C=(0,ht.useCallback)(()=>{d&&(v.current=!0,M())},[M,d]),E=(0,ht.useCallback)(()=>{let B=_();return!B&&d&&(v.current=!1,M()),B},[M,d,_]),L=(0,ht.useCallback)(()=>{d&&(v.current=!1,M())},[M,d]);(0,ht.useImperativeHandle)(o,()=>({placeCurrent:_,startPlacementMode:C,finishPlacementMode:E,cancelPlacementMode:L}),[L,E,_,C]),(0,ht.useEffect)(()=>{if(!c){u.current.set(0,0,-Y_),f.current=1,m.current=0,y.current=!1,T.current=!1,v.current=!0,g.current=!1,w.current=null;return}d&&(y.current=!1,T.current=!1,v.current=!0,g.current=!1,w.current=null,M())},[M,c,d]),(0,rs.useXRHitTest)((B,j)=>{if(!d||B.length===0){y.current&&(y.current=!1,M());return}j(b,B[0])&&(h.current.setFromMatrixPosition(b),y.current||(y.current=!0,M()))},"viewer"),(0,rs.useXRInputSourceEvent)("all","select",()=>{!d||T.current||!v.current||_()},[d,_]),(0,ht.useEffect)(()=>{if(!d)return;let B=O=>{O.touches.length===2&&(T.current=!0,x.current=K_(O.touches),D.current=Z_(O.touches),A.current=f.current,S.current=m.current)},j=O=>{if(!T.current||O.touches.length!==2)return;O.preventDefault();let N=K_(O.touches);if(x.current>0){let Y=N/x.current;f.current=Math.min(vD,Math.max(yD,A.current*Y))}let H=Z_(O.touches);m.current=S.current-(H-D.current)},R=O=>{O.touches.length===0&&requestAnimationFrame(()=>{T.current=!1})};return window.addEventListener("touchstart",B),window.addEventListener("touchmove",j,{passive:!1}),window.addEventListener("touchend",R),window.addEventListener("touchcancel",R),()=>{window.removeEventListener("touchstart",B),window.removeEventListener("touchmove",j),window.removeEventListener("touchend",R),window.removeEventListener("touchcancel",R)}},[d]),(0,Q_.useFrame)(()=>{let B=a.current,j=s.current;if(!B||!j)return;!c||!p?(B.visible=!0,B.position.set(0,0,0),B.rotation.set(0,0,0),j.scale.setScalar(1)):(B.visible=!d||g.current,B.position.copy(u.current),B.rotation.set(0,m.current,0),j.scale.setScalar(p.scale*f.current));let R=l.current;if(R){let O=d&&v.current&&y.current;R.visible=O,O&&R.position.copy(h.current)}});let k=c&&p?p.offset:[0,0,0];return(0,li.jsxs)(li.Fragment,{children:[(0,li.jsxs)("mesh",{ref:l,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,li.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,li.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,li.jsx)("group",{ref:a,children:(0,li.jsx)("group",{ref:s,children:(0,li.jsx)("group",{position:k,children:r})})})]})}),J_=wD;var om=require("react");var SD="ri:license-grant:v1",MD={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},e1=new Map;function n1(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function t1(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return n1(t.padEnd(Math.ceil(t.length/4)*4,"="))}function _D(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 im(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 ub(e,t){return`${SD}:${t}:${e}`}function CD(e,t){let n=e1.get(e);if(n)return n;let r=crypto.subtle.importKey("spki",n1(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return e1.set(e,r),r}async function db(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[r,i,o,a,...s]=e.split("."),l=MD[i];if(r!=="ri1"||!l||!o||!a||s.length>0)return null;let c=JSON.parse(new TextDecoder().decode(t1(o)));if(!_D(c)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await CD(i,l),t1(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 r1(e,t,n){try{return await db(e,await im(t),n)}catch{return null}}async function i1(e,t,n){try{let r=await im(t);return await db(e,r,n)?(localStorage.setItem(ub(r,n),e),!0):!1}catch{return!1}}async function o1(e,t){try{let n=await im(e),r=ub(n,t),i=localStorage.getItem(r);if(!i)return null;let o=await db(i,n,t);return o||localStorage.removeItem(r),o}catch{return null}}async function pb(e,t){try{let n=await im(e);localStorage.removeItem(ub(n,t))}catch{}}var TD=["localhost","127.0.0.1","0.0.0.0"],PD=e=>TD.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),l1="https://react-immersive.liveroom.dev/api/validate-license",c1=()=>typeof window<"u",AD=300*1e3,ED=5e3,RD=400,fb=new Map,mb=new Map,ea=class extends Error{},u1=async(e,t,n)=>{let r=await o1(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},a1=async(e,t,n)=>{let r=await u1(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})},OD=e=>e instanceof ea||e instanceof TypeError,DD=()=>new Promise(e=>setTimeout(e,RD)),LD=e=>e==="development"||e==="production",ID=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&&!LD(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},kD=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},d1=(e,t,n)=>`${n}::${e}::${t}`,p1=e=>{let t=fb.get(e);return t?Date.now()-t.timestamp>AD?(fb.delete(e),null):t.result:null},BD=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),ND=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function VD(e,t,n,r){let i=d1(e,t,r),o=p1(i);if(o)return o;let a=mb.get(i);if(a)return a;let s=(async()=>{for(let l=0;l<2;l+=1)try{return await jD(e,t,n,i,r)}catch(c){if(!OD(c))throw c;if(l===0){let d=await u1(e,t,n);if(d)return d;await DD();continue}return a1(e,t,n)}return a1(e,t,n)})().finally(()=>{mb.delete(i)});return mb.set(i,s),s}async function jD(e,t,n,r,i){let o=new AbortController,a=setTimeout(()=>o.abort(),ED),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 ea("License validation timed out"):d}finally{clearTimeout(a)}let l;try{l=await s.json()}catch{throw new ea(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new ea(`License server error (${s.status})`);let d=kD(l)??`License validation failed${s.status?` (${s.status})`:""}`;return await pb(e,t),ND(d,n)}if(!ID(l))throw new ea("License server returned an unexpected payload");let c=BD(l,n);if(c.status==="valid"&&i!==l1){let d=l.offlineGrant?await r1(l.offlineGrant,e,t):null;if(!d)throw new ea("License validation endpoint did not return a verifiable signed grant");c={...c,environment:d.environment,tier:d.tier}}return c.status==="valid"?(fb.set(r,{result:c,timestamp:Date.now()}),l.offlineGrant&&(await i1(l.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await pb(e,t),c}var s1=(e,t)=>{let n=e.trim();return!c1()||!n?null:p1(d1(n,window.location.hostname.toLowerCase(),t))},m1=(e,t=l1)=>{let[n,r]=(0,om.useState)(()=>s1(e,t)??{status:"checking",isLocalDomain:!1});return(0,om.useEffect)(()=>{if(!c1())return;let i=!1,o=p=>{i||r(p)},a=e.trim(),s=window.location.hostname.toLowerCase(),l=PD(s),c=s1(e,t);return c?(o(c),()=>{i=!0}):(o({status:"checking",isLocalDomain:l}),a?((async()=>{try{o(await VD(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 $t=require("react");var Pn=require("react/jsx-runtime"),UD={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},zD={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"},am=({direction:e})=>{let t=UD[e],n=zD[e];return(0,Pn.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,Pn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,Pn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},co=16,FD={"bottom-left":{bottom:co,left:co,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:co,right:co,top:"auto",left:"auto",transform:"none"},"top-left":{top:co,left:co,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:co,right:co,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:co,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},HD=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:r=.001,rotateSensitivity:i=.01,position:o="center-bottom"})=>{let a=_e(),s=(0,$t.useRef)(null),[l,c]=(0,$t.useState)({x:0,y:0}),d=(0,$t.useRef)(!1),p=(0,$t.useRef)({x:0,y:0}),u=(0,$t.useRef)(void 0),f=(0,$t.useRef)(void 0),m=(0,$t.useRef)(null),v=(0,$t.useRef)(0),g=()=>e.current,b=(L,k,B)=>{let j=Math.hypot(L,k);if(j>B){let R=B/j;return{x:L*R,y:k*R}}return{x:L,y:k}},h=L=>{let B=Math.abs(L);return B<.12?0:Math.sign(L)*((B-.12)/(1-.12))},y=(0,$t.useCallback)(()=>{let L=()=>{let{x:k,y:B}=p.current,j=h(k),R=h(B);if(t&&(j!==0||R!==0)){let O=g();O&&O.rotate(-j*i,-R*i,!0)}u.current=requestAnimationFrame(L)};u.current=requestAnimationFrame(L)},[t,i]),w=(0,$t.useCallback)(()=>{u.current&&cancelAnimationFrame(u.current)},[]),T=(0,$t.useCallback)((L,k)=>{if(!s.current||!d.current)return;let B=s.current.getBoundingClientRect(),j=B.left+B.width/2,R=B.top+B.height/2,O=B.width/2-18,N=L-j,H=k-R,Y=b(N,H,O);c(Y),p.current={x:Y.x/O,y:Y.y/O}},[]),x=(0,$t.useCallback)(L=>{if(!t)return;L.preventDefault(),L.stopPropagation(),d.current=!0,y();let k="touches"in L?L.touches[0]:L;T(k.clientX,k.clientY)},[t,y,T]),D=(0,$t.useCallback)(L=>{if(!d.current)return;L.preventDefault();let k="touches"in L?L.touches[0]:L;T(k.clientX,k.clientY)},[T]),A=(0,$t.useCallback)(()=>{d.current=!1,c({x:0,y:0}),p.current={x:0,y:0},w()},[w]),S=r*10,M=(0,$t.useCallback)(L=>{t&&g()?.forward(L*S,!0)},[t,S]),_=(0,$t.useCallback)(L=>{t&&g()?.truck(L*S,0,!0)},[t,S]),C=(0,$t.useCallback)((L,k,B)=>{if(!t)return;f.current&&cancelAnimationFrame(f.current),m.current={control:L,amount:k,action:B},v.current=0,B(k);let j=R=>{if(!m.current)return;if(v.current===0){v.current=R,f.current=requestAnimationFrame(j);return}if(R-v.current>200){let{amount:N,action:H}=m.current;H(N),v.current=R}f.current=requestAnimationFrame(j)};f.current=requestAnimationFrame(j)},[t]),E=(0,$t.useCallback)(L=>{m.current?.control===L&&(f.current&&(cancelAnimationFrame(f.current),f.current=void 0),m.current=null,v.current=0)},[]);return(0,$t.useEffect)(()=>(window.addEventListener("mousemove",D),window.addEventListener("mouseup",A),window.addEventListener("touchmove",D,{passive:!1}),window.addEventListener("touchend",A),window.addEventListener("touchcancel",A),()=>{window.removeEventListener("mousemove",D),window.removeEventListener("mouseup",A),window.removeEventListener("touchmove",D),window.removeEventListener("touchend",A),window.removeEventListener("touchcancel",A),w(),f.current&&cancelAnimationFrame(f.current)}),[D,A,w]),t?(0,Pn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...FD[o]},children:(0,Pn.jsxs)("div",{className:"mc__dpad",children:[(0,Pn.jsx)("button",{"aria-label":a("moveForward"),className:"mc__arrow mc__arrow--up",onMouseDown:()=>C("up",1,M),onMouseUp:()=>E("up"),onMouseLeave:()=>E("up"),onTouchStart:L=>{L.preventDefault(),C("up",1,M)},onTouchEnd:()=>E("up"),onTouchCancel:()=>E("up"),children:(0,Pn.jsx)(am,{direction:"up"})}),(0,Pn.jsxs)("div",{className:"mc__middle-row",children:[(0,Pn.jsx)("button",{"aria-label":a("moveLeft"),className:"mc__arrow mc__arrow--left",onMouseDown:()=>C("left",-1,_),onMouseUp:()=>E("left"),onMouseLeave:()=>E("left"),onTouchStart:L=>{L.preventDefault(),C("left",-1,_)},onTouchEnd:()=>E("left"),onTouchCancel:()=>E("left"),children:(0,Pn.jsx)(am,{direction:"left"})}),(0,Pn.jsx)("div",{ref:s,className:"mc__joystick",onMouseDown:x,onTouchStart:x,children:(0,Pn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${l.x}px, ${l.y}px)`}})}),(0,Pn.jsx)("button",{"aria-label":a("moveRight"),className:"mc__arrow mc__arrow--right",onMouseDown:()=>C("right",1,_),onMouseUp:()=>E("right"),onMouseLeave:()=>E("right"),onTouchStart:L=>{L.preventDefault(),C("right",1,_)},onTouchEnd:()=>E("right"),onTouchCancel:()=>E("right"),children:(0,Pn.jsx)(am,{direction:"right"})})]}),(0,Pn.jsx)("button",{"aria-label":a("moveBackward"),className:"mc__arrow mc__arrow--down",onMouseDown:()=>C("down",-1,M),onMouseUp:()=>E("down"),onMouseLeave:()=>E("down"),onTouchStart:L=>{L.preventDefault(),C("down",-1,M)},onTouchEnd:()=>E("down"),onTouchCancel:()=>E("down"),children:(0,Pn.jsx)(am,{direction:"down"})})]})}):null},f1=HD;var Qc=require("three");function sm(e){return[e.x,e.y,e.z]}function h1(e){let t=new Qc.Box3().setFromObject(e),n=0;return e.traverse(r=>{r.isMesh&&(n+=1)}),{bounds:{min:sm(t.min),max:sm(t.max),center:sm(t.getCenter(new Qc.Vector3)),size:sm(t.getSize(new Qc.Vector3))},objectCount:n,materialVariants:xg(e),materialVariantGroups:lp(e)}}function GD(e){return typeof e=="object"&&!Array.isArray(e)}function WD(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 An(e,t){if(GD(t))return Object.entries(e).filter(([,i])=>WD(i,t)).map(([i])=>i);let r=(typeof t=="string"?[t]:t).map(i=>sn(e,i)).filter(i=>i!==null);return[...new Set(r)]}function lm(e,t){return An(e,t).map(n=>e[n]).filter(n=>n!==void 0)}var qD="#ff3b30",XD=Object.freeze({}),g1=e=>e;function $D(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function YD(e,t){let n=e.metadata;for(let r of t.split(".")){if(!$D(n))return;n=n[r]}return n}function KD(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 YD(e,t.metadata)===t.equals}function ZD(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 hb=e=>`#${e.map(t=>Math.round(t).toString(16).padStart(2,"0")).join("")}`;function gb(e,t){let n=e.map(([l,c])=>({at:l,rgb:ZD(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 hb(n[0].rgb);let r=n[n.length-1];if(t>=r.at)return hb(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 hb(o.rgb.map((l,c)=>l+(a.rgb[c]-l)*s))}function cm(e,t){if(!t?.length)return{bindings:e,pulses:XD,sourceOf:g1};let n=new Map,r={};for(let a of t){let s=a.target?An(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=>KD(d,u)))continue;let p={...a.material};if(a.colorScale){let u=d.metrics?.[a.colorScale.metric],f=typeof u=="number"?gb(a.colorScale.stops,u):null;f&&(p={...p,[a.colorScale.channel??"baseColor"]:f})}if(a.pulse){let u=a.pulse===!0?{}:a.pulse;r[c]={color:u.color??qD,speed:u.speed!==void 0&&u.speed>0?u.speed:1};let f=p.emissiveIntensity??n.get(c)?.emissiveIntensity??d.style?.material?.emissiveIntensity;f!==void 0&&f>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:g1};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 QD=.12,b1=new Set;function Jc(e,t){return t?new Set(An(e,t.target)):b1}function um(e,t){let n=Jc(e.bindings,t);if(!t||n.size===0)return{...e,setAside:b1};let r=Math.min(Math.max(t.ghostOpacity??QD,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 x1=require("react");var v1=require("react"),bb=require("@react-three/fiber"),y1=new WeakMap;function dm(e){let t=(0,bb.useThree)(r=>r.get),n=(0,bb.useThree)(r=>r.setEvents);(0,v1.useEffect)(()=>{if(!e)return;let r=y1.get(t);if(!r){let o=new Set;r=o,y1.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 yb({setAside:e,nodeRefs:t}){let n=(0,x1.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 dm(n),null}var Nn=require("react"),T1=require("@react-three/drei"),dl=require("@react-three/fiber"),Ur=require("three");var is=require("three"),w1={x:0,y:1,z:2},JD=e=>Math.min(Math.max(e,0),1);function eL(e,t){let n=1/0,r=-1/0;for(let i=0;i<8;i++){let o=new is.Vector3(...e.min);for(let s=0;s<3;s++)i&1<<s&&o.setComponent(s,e.max[s]);let a=o.dot(t);n=Math.min(n,a),r=Math.max(r,a)}return[n,r]}function S1(e,t){if(!e.enabled||t.min.some((r,i)=>!Number.isFinite(r)||!Number.isFinite(t.max[i])||r>t.max[i]))return{cuts:[],intersection:!1};let n=(r,i,o,a,s)=>{let l=s?new is.Vector3(...s).normalize():new is.Vector3().setComponent(w1[i],1),[c,d]=eL(t,l),p=c+(d-c)*JD(o),u=a?1:-1;return{id:r,direction:l,min:c,max:d,coordinate:p,plane:new is.Plane(l.clone().multiplyScalar(u),-p*u)}};if(e.mode==="box"){let r=e.box??{min:[0,0,0],max:[1,1,1]};return{intersection:!!e.invertBox,cuts:["x","y","z"].flatMap((i,o)=>[n(`${i}-min`,i,r.min[o],!e.invertBox),n(`${i}-max`,i,r.max[o],!!e.invertBox)])}}return e.mode==="planes"?{intersection:!1,cuts:(e.planes??[]).filter(r=>r.enabled).map(r=>n(r.id,r.axis,r.position,r.flip,r.normal))}:{intersection:!1,cuts:[n("plane",e.axis,e.position,e.flip,e.normal)]}}function M1(e,t,n){return e.length?t?e.some(r=>r.distanceToPoint(n)>=-1e-4):e.every(r=>r.distanceToPoint(n)>=-1e-4):!0}function pm(e,t,n){if(e.mode==="planes")return{planes:e.planes?.map(r=>r.id===t?{...r,position:n}:r)};if(e.mode==="box"){let r=e.box??{min:[0,0,0],max:[1,1,1]},i=[...r.min],o=[...r.max],a=w1[t[0]];return t.endsWith("min")?i[a]=Math.max(0,Math.min(n,o[a]-.001)):o[a]=Math.min(1,Math.max(n,i[a]+.001)),{box:{min:i,max:o}}}return{position:n}}function _1(e,t,n,r){let i=n.clone().addScaledVector(r,-n.dot(r));if(i.lengthSq()<1e-8)return null;i.normalize();let o=e.direction.dot(i);if(Math.abs(o)<1e-8)return null;let a=t.clone().sub(e.origin).dot(i)/o;return Number.isFinite(a)?e.at(a,new is.Vector3).dot(r):null}var eu=require("three");function C1(){let e=new Map;function t(n){let r=e.get(n);r&&(n.clippingPlanes===r.owned&&(n.clippingPlanes=r.planes,n.clipShadows=r.shadows,n.clipIntersection=r.intersection,n.side===eu.DoubleSide&&(n.side=r.side),n.needsUpdate=!0),e.delete(n))}return{apply(n,r,i){let o=e.get(n);o&&n.clippingPlanes!==o.owned&&(e.delete(n),o=void 0),o||(o={planes:n.clippingPlanes,side:n.side,shadows:n.clipShadows,intersection:n.clipIntersection,owned:r},e.set(n,o)),n.side!==eu.DoubleSide&&(o.side=n.side),!(n.clippingPlanes===r&&n.clipIntersection===i&&n.side===eu.DoubleSide&&n.clipShadows)&&(o.owned=r,n.clippingPlanes=r,n.clipIntersection=i,n.clipShadows=!0,n.side=eu.DoubleSide,n.needsUpdate=!0)},retain(n){for(let r of e.keys())n.has(r)||t(r)},restore(){for(let n of e.keys())t(n)}}}var os=require("react/jsx-runtime");function vb({section:e,box:t,modelRef:n,showHandle:r,onChange:i,onDraggingChange:o}){let a=(0,dl.useThree)(b=>b.gl),s=(0,dl.useThree)(b=>b.raycaster),l=(0,dl.useThree)(b=>b.invalidate),c=(0,Nn.useMemo)(()=>kx(e),[e]),{cuts:d,intersection:p}=(0,Nn.useMemo)(()=>t?S1(c,t):{cuts:[],intersection:!1},[c,t]),u=(0,Nn.useMemo)(()=>d.map(b=>b.plane),[d]),f=u.length>0,m=(0,Nn.useMemo)(()=>C1(),[]);(0,Nn.useEffect)(()=>{if(!f)return;let b=a.localClippingEnabled;return a.localClippingEnabled=!0,l(),()=>{m.restore(),a.localClippingEnabled=b,l()}},[f,a,m,l]),(0,Nn.useEffect)(()=>{l()},[u,p,l]),(0,dl.useFrame)(()=>{if(!f)return;let b=new Set;n.current?.traverse(h=>{let y=h.material;for(let w of y?Array.isArray(y)?y:[y]:[])b.add(w),m.apply(w,u,p)}),m.retain(b)});let v=(0,Nn.useMemo)(()=>f?b=>{if(b.object.userData.riSectionHandle)return!0;let h=b.object;for(;h&&h!==n.current;)h=h.parent;return!h||M1(u,p,b.point)}:null,[f,u,p,n]);dm(v),(0,Nn.useEffect)(()=>{if(!f)return;let b=s,h=b.firstHitOnly;return b.firstHitOnly=!1,()=>{b.firstHitOnly=h}},[f,s]),(0,Nn.useEffect)(()=>()=>o(!1),[o]);let g=d.find(b=>b.id===c.activePlaneId)??(c.mode==="planes"&&c.activePlaneId?null:d[0]);return!f||!r||!t||!g?null:(0,os.jsx)(tL,{cut:g,box:t,onMove:b=>i(pm(c,g.id,b)),onDraggingChange:o},g.id)}function tL({cut:e,box:t,onMove:n,onDraggingChange:r}){let[i,o]=(0,Nn.useState)(!1),[a,s]=(0,Nn.useState)(!1),l=(0,Nn.useRef)(null),c=new Ur.Vector3(...t.min).add(new Ur.Vector3(...t.max)).multiplyScalar(.5);c.addScaledVector(e.direction,e.coordinate-c.dot(e.direction));let d=new Ur.Quaternion().setFromUnitVectors(new Ur.Vector3(0,0,1),e.direction),p=new Ur.Vector3(1,0,0).applyQuaternion(d),u=new Ur.Vector3(0,1,0).applyQuaternion(d),f=new Ur.Vector3(...t.max).sub(new Ur.Vector3(...t.min)),m=g=>Math.max(.01,Math.abs(g.x)*f.x+Math.abs(g.y)*f.y+Math.abs(g.z)*f.z)*1.08;(0,Nn.useEffect)(()=>()=>r(!1),[r]);let v=g=>{l.current&&(g.target?.releasePointerCapture?.(g.pointerId),l.current=null,s(!1),r(!1))};return(0,os.jsxs)("mesh",{ref:g=>{g&&(Cs(g),g.userData.riSectionHandle=!0)},position:c,quaternion:d,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(),view:g.ray.direction.clone(),at:g.point.dot(e.direction),cut:e.coordinate},s(!0),r(!0)},onPointerMove:g=>{let b=l.current;if(!b)return;g.stopPropagation();let h=_1(g.ray,b.point,b.view,e.direction);h!==null&&e.max>e.min&&n(Math.max(0,Math.min(1,(b.cut+h-b.at-e.min)/(e.max-e.min))))},onPointerUp:v,onPointerCancel:v,onClick:g=>g.stopPropagation(),children:[(0,os.jsx)("planeGeometry",{args:[m(p),m(u)]}),(0,os.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:a?.22:i?.16:.08,side:Ur.DoubleSide,depthWrite:!1,toneMapped:!1}),(0,os.jsx)(T1.Edges,{color:"#22d3ee",renderOrder:3})]})}var P1=require("react-colorful"),ta=require("react/jsx-runtime"),xb=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:r,inline:i=!1})=>{let o=_e();return(0,ta.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,ta.jsx)("p",{className:"ri-popoverLabel",children:o("color")}),(0,ta.jsx)(P1.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>r(s=>({...s,[e.objectId]:{...s[e.objectId],hex:a}}))}),(0,ta.jsxs)("div",{className:"ri-inlineRow",children:[(0,ta.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,ta.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:o("done")})]})]})};var gt=require("react/jsx-runtime"),wb=({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=_e();return(0,gt.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:f=>f.stopPropagation(),children:[(0,gt.jsx)("div",{className:"ri-popoverHeader",children:(0,gt.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:u("material")})}),(0,gt.jsxs)("div",{className:"ri-materialBody",children:[t?(0,gt.jsx)("div",{className:"ri-previewFrame",children:(0,gt.jsx)("img",{src:t,alt:u("texturePreview"),className:"ri-previewImage"})}):(0,gt.jsxs)("div",{className:"ri-emptyState",children:[(0,gt.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,gt.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,gt.jsx)("span",{style:{fontSize:12},children:u("noTextureApplied")})]}),i?(0,gt.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:u(t?"replaceImage":"uploadImage")}):(0,gt.jsx)("p",{className:"ri-formatHint",children:u("noTextureCoordinates")}),t&&(0,gt.jsx)("button",{onClick:()=>r(e.objectId),className:"ri-removeButton",children:u("removeTexture")}),i?(0,gt.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}):null,t&&(l||c)&&(0,gt.jsxs)("div",{className:"ri-texturePosition",children:[(0,gt.jsx)("p",{className:"ri-texturePositionLabel",children:u("texturePosition")}),(0,gt.jsxs)("div",{className:"ri-texturePositionGrid",children:[(0,gt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,gt.jsx)("span",{children:u("offsetX")}),(0,gt.jsx)("input",{type:"number",step:.01,value:a?.[0]??0,onChange:f=>l?.(e.objectId,0,Number(f.target.value))})]}),(0,gt.jsxs)("label",{className:"ri-texturePositionField",children:[(0,gt.jsx)("span",{children:u("offsetY")}),(0,gt.jsx)("input",{type:"number",step:.01,value:a?.[1]??0,onChange:f=>l?.(e.objectId,1,Number(f.target.value))})]})]}),(0,gt.jsxs)("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[(0,gt.jsx)("span",{children:u("rotation")}),(0,gt.jsxs)("div",{className:"ri-texturePositionSliderRow",children:[(0,gt.jsx)("input",{type:"range",min:0,max:360,step:1,value:s??0,onChange:f=>c?.(e.objectId,Number(f.target.value))}),(0,gt.jsx)("input",{type:"number",min:0,max:360,step:1,value:Math.round(s??0),onChange:f=>c?.(e.objectId,Number(f.target.value))})]})]}),d?(0,gt.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:p,title:u("confirmTexturePosition"),children:u("donePositioning")}):(0,gt.jsx)("p",{className:"ri-texturePositionHint",children:u("textureOffsetHint")})]})]})]})};var zr=require("react");var Tt=require("react/jsx-runtime");function A1({entries:e}){return(0,Tt.jsx)(Tt.Fragment,{children:e.map(([t,n])=>{let r=n!==null&&typeof n=="object",i=r?Object.entries(n):[];return r&&i.length>0?(0,Tt.jsxs)("div",{className:"left-panel__data-group",children:[(0,Tt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,Tt.jsx)("div",{className:"left-panel__data-children",children:(0,Tt.jsx)(A1,{entries:i})})]},t):(0,Tt.jsxs)("div",{className:"left-panel__data-row",children:[(0,Tt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,Tt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:r?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function nL({content:e}){let t=e!=null,[n,r]=(0,zr.useState)(t),[i,o]=(0,zr.useState)(t),a=(0,zr.useRef)(e);return t&&(a.current=e),(0,zr.useEffect)(()=>{if(t){r(!0);return}if(n){o(!1);let s=setTimeout(()=>r(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,zr.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>o(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,Tt.jsx)("div",{className:`left-panel__action-extra${i?" left-panel__action-extra--open":""}`,children:(0,Tt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??a.current})}):null}function Sb({isOpen:e,selectedObject:t,currentAction:n,onClose:r,onAction:i,renderActionExtra:o,translateDefaultActions:a=!1}){let s=_e(),[l,c]=(0,zr.useState)(t);(0,zr.useEffect)(()=>{t&&c(t)},[t]);let d=t??l,p=d?Object.entries(d).filter(([u])=>u!=="actions"&&u!=="decals"):[];return(0,Tt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:d&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsxs)("div",{className:"left-panel__header",children:[(0,Tt.jsx)("p",{className:"left-panel__title",children:d.label}),(0,Tt.jsx)("button",{onClick:r,className:"left-panel__close-btn","aria-label":s("closePanel"),children:"\u2715"})]}),p.length>0&&(0,Tt.jsx)("div",{className:"left-panel__data",children:(0,Tt.jsx)(A1,{entries:p})}),(0,Tt.jsx)("hr",{className:"left-panel__divider"}),d.actions&&d.actions.length>0&&(0,Tt.jsxs)(Tt.Fragment,{children:[(0,Tt.jsx)("div",{className:"left-panel__actions-label",children:s("actions")}),(0,Tt.jsx)("div",{className:"left-panel__actions-list",children:d.actions.map((u,f)=>{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),v=o?.(u.id);return(0,Tt.jsxs)(zr.Fragment,{children:[(0,Tt.jsx)("button",{onClick:g=>i({objectId:d.modelObjectId||d.id||"",action:u,binding:d,screenX:g.clientX,screenY:g.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,Tt.jsx)(nL,{content:v})]},f)})})]})]})})}var tu=require("react"),mm=require("lucide-react");var E1=require("react");var Hn=require("react/jsx-runtime");function R1({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 f=_e(),[m,v]=(0,E1.useState)(!1),g=l!==void 0?l:m,b=h=>{l===void 0&&v(h),c?.(h)};return(0,Hn.jsxs)("div",{className:`ri-sidepanel-wrap ${g?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!g&&(0,Hn.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>b(!0),"aria-label":t,title:f("openPanel"),children:[d,e?(0,Hn.jsx)("span",{children:e}):null]}),(0,Hn.jsxs)("div",{className:`ri-sidepanel ${g?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!g,children:[(0,Hn.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,Hn.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,Hn.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,Hn.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>b(!1),"aria-label":u,title:f("close"),children:p??(0,Hn.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,Hn.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,Hn.jsx)("p",{className:"ri-sidepanel__title",children:r})]}),(0,Hn.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,Hn.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:a,value:i,onChange:h=>o(h.target.value)})}),(0,Hn.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var Fr=require("react/jsx-runtime");function Mb({objectBindings:e,onAction:t,onFocus:n,onHover:r,isOpen:i,onToggle:o,isolatedKeys:a=null,onIsolate:s}){let l=_e(),[c,d]=(0,tu.useState)(null),[p,u]=(0,tu.useState)(""),f=(0,tu.useMemo)(()=>Object.entries(e).filter(([m,v])=>{let g=p.toLowerCase();return m.toLowerCase().includes(g)||(v.label??"").toLowerCase().includes(g)}),[e,p]);return(0,Fr.jsx)(R1,{openButtonLabel:"",openButtonAriaLabel:l("openSceneObjectsPanel"),openButtonIcon:(0,Fr.jsx)(mm.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:l("sceneObjects"),title:l("visibleEntries",{count:f.length}),searchValue:p,onSearchChange:u,searchPlaceholder:l("searchNodesLabels"),isOpen:i,onToggle:o,closeButtonAriaLabel:l("closeSceneObjectsPanel"),children:f.map(([m,v])=>{let g=v.visible!==!1,b=c===m,h=a?.has(m)??!1;return(0,Fr.jsxs)("div",{onClick:()=>n(v),onMouseEnter:()=>{d(m),r?.(v)},onMouseLeave:()=>{d(null),r?.(null)},className:`ri-sidepanel__row${b?" ri-sidepanel__row--hovered":""}${a!==null&&!h?" ri-sidepanel__row--setAside":""}`,children:[(0,Fr.jsx)("button",{type:"button",className:`ri-sidepanel__label ri-sidepanel__labelButton${b?" ri-sidepanel__label--hovered":""}`,onFocus:()=>{d(m),r?.(v)},onBlur:()=>{d(null),r?.(null)},children:v.label??m}),s?(0,Fr.jsx)("button",{type:"button",onClick:w=>{w.stopPropagation(),s(v)},className:`ri-sidepanel__isolate-btn${h?" ri-sidepanel__isolate-btn--active":""}`,title:l(h?"showAll":"isolate"),"aria-label":l(h?"showAllObject":"isolateObject",{name:v.label??m}),"aria-pressed":h,children:(0,Fr.jsx)(mm.Focus,{width:14,height:14,"aria-hidden":"true"})}):null,(0,Fr.jsx)("button",{type:"button",onClick:w=>{w.stopPropagation(),t?.({objectId:m,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:v})},className:"ri-sidepanel__vis-btn",title:l(g?"hide":"show"),"aria-label":l(g?"hideObject":"showObject",{name:v.label??m}),children:(0,Fr.jsx)("span",{className:`ri-sidepanel__checkbox${g?" ri-sidepanel__checkbox--checked":""}`,children:g&&(0,Fr.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,Fr.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},m)})})}var ci=require("react");function O1(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 D1(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 L1(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 na=require("react/jsx-runtime"),rL=600;function I1({objects:e,selectedKey:t,onHighlight:n,onSelect:r,onClearSelection:i}){let o=_e(),a=(0,ci.useId)(),[s,l]=(0,ci.useState)(!1),[c,d]=(0,ci.useState)(null),p=(0,ci.useRef)({query:"",at:0}),u=c?e.findIndex(w=>w.key===c):-1,f=u>=0?e[u]:null;(0,ci.useEffect)(()=>{t&&e.some(w=>w.key===t)&&d(t)},[t,e]);let m=s?f?.binding??null:null,v=(0,ci.useRef)(n);v.current=n,(0,ci.useEffect)(()=>{if(s)return v.current(m),()=>v.current(null)},[s,m]);let g=w=>{w!==null&&e[w]&&d(e[w].key)},b=w=>{let T=f?u:-1,x=D1(w.key,Math.max(T,0),e.length);if(x!==null){w.preventDefault(),g(T<0&&w.key!=="End"?0:x);return}if(w.key==="Enter"||w.key===" "){if(!f)return;w.preventDefault(),r(f.binding);return}if(w.key==="Escape"){if(!t)return;w.preventDefault(),w.stopPropagation(),i();return}if(w.key.length===1&&w.key!==" "&&!w.ctrlKey&&!w.metaKey&&!w.altKey){let D=Date.now(),A=p.current;A.query=D-A.at>rL?w.key:A.query+w.key,A.at=D,w.preventDefault(),g(L1(e,T,A.query))}};if(e.length===0)return null;let h=`${a}-option`,y=`${a}-hint`;return(0,na.jsxs)("div",{className:`ri-objectNavigator${s?" ri-objectNavigator--focused":""}`,children:[(0,na.jsx)("div",{role:"listbox",tabIndex:0,className:"ri-objectNavigator__list","aria-label":o("objectNavigator"),"aria-describedby":y,"aria-activedescendant":f?h:void 0,onFocus:()=>{l(!0),f||d(e[0].key)},onBlur:()=>l(!1),onKeyDown:b,children:f?(0,na.jsxs)("div",{id:h,role:"option","aria-selected":f.key===t,"aria-setsize":e.length,"aria-posinset":u+1,className:`ri-objectNavigator__option${f.key===t?" ri-objectNavigator__option--selected":""}`,children:[(0,na.jsx)("span",{className:"ri-objectNavigator__name",children:f.label}),(0,na.jsx)("span",{className:"ri-objectNavigator__position","aria-hidden":"true",children:o("objectNavigatorPosition",{position:u+1,count:e.length})})]}):null}),(0,na.jsx)("div",{id:y,className:"ri-objectNavigator__hint",children:o("objectNavigatorHint")})]})}var k1=require("react"),B1="(prefers-reduced-motion: reduce)";function iL(e){if(typeof window>"u"||!window.matchMedia)return()=>{};let t=window.matchMedia(B1);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}var oL=()=>typeof window<"u"&&!!window.matchMedia?.(B1).matches;function N1(e="user"){let t=(0,k1.useSyncExternalStore)(iL,oL,()=>!1);return e==="always"?!0:e==="never"?!1:t}var nT=require("lucide-react");var ra=require("react/jsx-runtime");function V1({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,ra.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[i&&(0,ra.jsxs)("div",{className:"bb-loadingProgressRow",children:[(0,ra.jsx)("div",{className:"bb-loadingProgress",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a,children:(0,ra.jsx)("div",{className:"bb-loadingProgress__bar",style:{width:`${a}%`}})}),(0,ra.jsxs)("span",{className:"bb-loadingProgress__label",children:[a,"%"]})]}),n!=="success"&&(0,ra.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]})}function aL(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 sL(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 _b(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 j1(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 fm(e,t=!0){let n=_b(e);return{id:aL(e),modelObjectId:e,type:n,label:sL(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:j1(n,t),metrics:{},metadata:{}}}function U1(e,t){return Object.fromEntries(e.map(n=>[n,fm(n,!t?.has(n))]))}function hm(e,t){let n=new Set,r={};for(let i of e){let o=fm(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=>lc.includes(c.id));o.actions=l.length>0?l:j1("other",!t?.has(i)),r[i]=o}return r}function z1(e){let t=new Set;for(let[n,r]of Object.entries(cr(e).nodesById))Vd(r)||t.add(n);return t}function F1(e){let{nodesById:t}=cr(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 Ne=require("react"),ym=require("@react-three/fiber"),vm=require("@react-three/drei"),mt=require("three");var H1="data:image/png;base64,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";var G1="data:image/png;base64,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";var W1="data:image/png;base64,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";var Ye=require("react/jsx-runtime"),Cb=-100,Tb=100,eC=.03,dL=.03,pL=.03,q1=.5,mL=H1,fL=G1,hL=W1,gL=Math.PI/4,X1=.4,pl=64,$1=eC*3,Pb="#4d7dff",Y1="#ffcc00",K1=.02,bL=new mt.Vector3(0,1,0),gm=32,Z1="#ff9d3d",bm=4;function Ab(e){let t=new Float32Array((pl+1)*3);for(let n=0;n<=pl;n++){let r=n/pl*Math.PI*2,i=Math.cos(r)*X1,o=Math.sin(r)*X1,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 yL(e){let t=Math.abs(e.y)<.99?new mt.Vector3(0,1,0):new mt.Vector3(1,0,0),n=new mt.Vector3().crossVectors(e,t).normalize(),r=new mt.Vector3().crossVectors(e,n).normalize();return[n,r]}function Q1(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 ml=null,Rb=new Set;function Eb(e){ml!==e&&(ml=e,Rb.forEach(t=>t()))}function vL(e){return Rb.add(e),()=>Rb.delete(e)}function J1(){return ml}function tC({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}=Qo(),{camera:f,gl:m,raycaster:v,invalidate:g}=(0,ym.useThree)(),b=(0,Ne.useRef)(null),h=(0,Ne.useRef)(null),y=(0,Ne.useRef)(null),w=(0,Ne.useRef)(null),T=(0,Ne.useRef)(null),x=(0,Ne.useRef)(null),D=(0,Ne.useRef)(null),A=(0,Ne.useRef)(null),S=(0,Ne.useRef)(null),M=(0,Ne.useRef)(null),_=(0,Ne.useRef)(null),C=(0,Ne.useMemo)(()=>new mt.Matrix4,[]),E=(0,Ne.useMemo)(()=>new mt.Quaternion,[]),L=(0,Ne.useMemo)(()=>new mt.Vector3(1,1,1),[]),k=(0,Ne.useRef)([0,0,0]),B=(0,Ne.useRef)([0,0,0]),j=(0,Ne.useRef)(!1),R=(0,Ne.useRef)(null),O=(0,Ne.useRef)(null),N=(0,Ne.useRef)(null),H=(0,Ne.useRef)(l);(0,Ne.useEffect)(()=>{H.current=l},[l]);let Y=(0,Ne.useMemo)(()=>new mt.Vector3(t[0],t[1],t[2]),[t]),ue=(0,Ne.useMemo)(()=>new mt.Euler(n[0],n[1],n[2]),[n]),be=(0,Ne.useMemo)(()=>new Float32Array(6),[]),X=(0,Ne.useMemo)(()=>Ab("x"),[]),G=(0,Ne.useMemo)(()=>Ab("y"),[]),J=(0,Ne.useMemo)(()=>Ab("z"),[]),ee=(0,Ne.useMemo)(()=>new Float32Array((gm+1)*3),[]),fe=(0,Ne.useMemo)(()=>new Float32Array(bm*2*3),[]),K=e?.type==="point",oe=e?.type==="spot",ae=K?fL:oe?hL:mL,pe=K?dL:oe?pL:eC,De=(0,Ne.useMemo)(()=>new mt.TextureLoader().load(ae),[ae]),te=(0,Ne.useSyncExternalStore)(vL,J1,J1),Fe=!!e&&te===e.id,We=(0,Ne.useRef)(new mt.Vector3),ge=(0,Ne.useRef)(new mt.Euler);(0,Ne.useEffect)(()=>{j.current||(We.current.copy(Y),ge.current.copy(ue),g())},[Y,ue,g]),(0,Ne.useEffect)(()=>{e&&ml===e.id&&!o&&Eb(null)},[e?.id,o]),(0,Ne.useEffect)(()=>()=>{e&&ml===e.id&&Eb(null),N.current!==null&&(cancelAnimationFrame(N.current),N.current=null)},[e?.id]);let Ce=(0,Ne.useCallback)(()=>{if(j.current||!Fe)return;let he=We.current,de=new mt.Quaternion().setFromEuler(ge.current);C.compose(he,de,L)},[C,L,Fe]);(0,ym.useFrame)(()=>{if(b.current&&b.current.position.copy(We.current),Ce(),y.current){y.current.lookAt(f.position);let he=f,de;he.isOrthographicCamera?de=pe/he.zoom:de=f.position.distanceTo(We.current)*pe,y.current.scale.setScalar(de)}if(D.current){let he=f,de;he.isOrthographicCamera?de=$1/he.zoom:de=f.position.distanceTo(We.current)*$1,D.current.scale.setScalar(de)}if(T.current){let he=T.current.getAttribute("position"),de=he.array;de[0]=0,de[1]=0,de[2]=0,de[3]=We.current.x,de[4]=We.current.y,de[5]=We.current.z,he.needsUpdate=!0,T.current.computeBoundingSphere()}if(x.current){let he=We.current,de=he.length();x.current.visible=de>q1,de>1e-6&&(x.current.position.copy(he).multiplyScalar(.5),x.current.scale.set(1,de,1),x.current.quaternion.setFromUnitVectors(bL,he.clone().normalize()))}if(w.current&&(w.current.visible=We.current.length()>q1),oe&&A.current&&S.current&&M.current){let he=We.current,de=he.length();if(de>1e-6){A.current.visible=!0;let ze=he.clone().negate().normalize(),Pe=de,ft=e?.angle??Math.PI/6,At=Pe*Math.tan(ft),se=he.clone().add(ze.clone().multiplyScalar(Pe)),[Re,Ee]=yL(ze),nt=S.current.getAttribute("position"),Qe=nt.array;for(let xe=0;xe<=gm;xe++){let et=xe/gm*Math.PI*2,xt=se.x+(Re.x*Math.cos(et)+Ee.x*Math.sin(et))*At,Dn=se.y+(Re.y*Math.cos(et)+Ee.y*Math.sin(et))*At,pi=se.z+(Re.z*Math.cos(et)+Ee.z*Math.sin(et))*At;Qe[xe*3]=xt,Qe[xe*3+1]=Dn,Qe[xe*3+2]=pi}nt.needsUpdate=!0,S.current.computeBoundingSphere();let ut=M.current.getAttribute("position"),Ke=ut.array;for(let xe=0;xe<bm;xe++){let et=xe/bm*Math.PI*2,xt=se.x+(Re.x*Math.cos(et)+Ee.x*Math.sin(et))*At,Dn=se.y+(Re.y*Math.cos(et)+Ee.y*Math.sin(et))*At,pi=se.z+(Re.z*Math.cos(et)+Ee.z*Math.sin(et))*At,yn=xe*6;Ke[yn]=he.x,Ke[yn+1]=he.y,Ke[yn+2]=he.z,Ke[yn+3]=xt,Ke[yn+4]=Dn,Ke[yn+5]=pi}ut.needsUpdate=!0,M.current.computeBoundingSphere()}else A.current.visible=!1}});let Je=(0,Ne.useCallback)(()=>{N.current!==null&&(cancelAnimationFrame(N.current),N.current=null),k.current=t,B.current=[n[0],n[1],n[2]],j.current=!0,R.current=null,O.current=null,H.current?.(!0)},[t,n]),ve=(0,Ne.useCallback)((he,de,ze,Pe)=>{let ft=new mt.Vector3(k.current[0],k.current[1],k.current[2]),At=new mt.Vector3,se=new mt.Quaternion,Re=new mt.Vector3;Pe.decompose(At,se,Re);let Ee=ft.clone().applyMatrix4(Pe),nt=[Math.min(Math.max(Ee.x,Cb),Tb),Math.min(Math.max(Ee.y,Cb),Tb),Math.min(Math.max(Ee.z,Cb),Tb)],Qe=new mt.Quaternion().setFromEuler(new mt.Euler(B.current[0],B.current[1],B.current[2],"XYZ")),ut=new mt.Quaternion().copy(se).multiply(Qe),Ke=new mt.Euler().setFromQuaternion(ut,"XYZ"),xe=[Ke.x,Ke.y,Ke.z];We.current.set(nt[0],nt[1],nt[2]),ge.current.set(xe[0],xe[1],xe[2]),R.current=nt,O.current=xe;let et=new mt.Quaternion().setFromEuler(ge.current);C.compose(We.current,et,L),g()},[C,L,g]),qe=(0,Ne.useCallback)(()=>{j.current=!1;let he=R.current,de=O.current;R.current=null,O.current=null;let ze=he&&!Q1(he,k.current),Pe=de&&!Q1(de,B.current);ze&&a&&a(he),Pe&&s&&s(de),ze||Pe?N.current=requestAnimationFrame(()=>{N.current=null,H.current?.(!1)}):H.current?.(!1)},[a,s]);return(0,Ne.useEffect)(()=>{let he=Pe=>{let ft=m.domElement.getBoundingClientRect();return new mt.Vector2((Pe.clientX-ft.left)/ft.width*2-1,-((Pe.clientY-ft.top)/ft.height)*2+1)},de=Pe=>!!Pe.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),ze=Pe=>{if(de(Pe))return;let ft=he(Pe);v.setFromCamera(ft,f);let At=[];if(h.current&&At.push(h.current),y.current&&At.push(y.current),At.length===0)return;if(v.intersectObjects(At,!1).length>0){let Re=e?.id??null;ml!==Re&&(Eb(Re),p?.("scene"),u?.("Lighting")),Pe.preventDefault(),Pe.stopPropagation()}};return m.domElement.addEventListener("pointerdown",ze),()=>{m.domElement.removeEventListener("pointerdown",ze)}},[f,v,m,e,p,u]),c!=="scene"||d!=="Lighting"||!e||!o||e.type==="none"||e.type==="hemisphere"?null:(0,Ye.jsxs)("group",{ref:he=>{he&&Cs(he)},children:[(0,Ye.jsxs)("group",{ref:b,children:[(0,Ye.jsx)("sprite",{ref:y,children:(0,Ye.jsx)("spriteMaterial",{map:De,transparent:!0,opacity:.9,blending:mt.AdditiveBlending,depthWrite:!1,rotation:oe?gL:0},ae)}),(0,Ye.jsx)(vm.Sphere,{ref:h,args:[.25,16,16],children:(0,Ye.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),K&&(0,Ye.jsxs)("group",{ref:D,children:[(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[X,3],count:pl+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Pb,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[G,3],count:pl+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Pb,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[J,3],count:pl+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Pb,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!K&&!oe&&(0,Ye.jsxs)(Ye.Fragment,{children:[(0,Ye.jsxs)("mesh",{ref:x,children:[(0,Ye.jsx)("cylinderGeometry",{args:[K1,K1,1,8,1,!0]}),(0,Ye.jsx)("meshBasicMaterial",{color:Y1,transparent:!0,opacity:.05,blending:mt.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Ye.jsxs)("line",{ref:w,children:[(0,Ye.jsx)("bufferGeometry",{ref:T,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[be,3],count:2})}),(0,Ye.jsx)("lineBasicMaterial",{color:Y1,transparent:!0,opacity:.7,blending:mt.AdditiveBlending})]})]}),oe&&(0,Ye.jsxs)("group",{ref:A,children:[(0,Ye.jsxs)("lineLoop",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{ref:S,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[ee,3],count:gm+1})}),(0,Ye.jsx)("lineBasicMaterial",{color:Z1,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Ye.jsxs)("lineSegments",{renderOrder:999,children:[(0,Ye.jsx)("bufferGeometry",{ref:M,children:(0,Ye.jsx)("bufferAttribute",{attach:"attributes-position",args:[fe,3],count:bm*2})}),(0,Ye.jsx)("lineBasicMaterial",{color:Z1,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),Fe&&a&&(0,Ye.jsx)(vm.PivotControls,{ref:_,matrix:C,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Je,onDrag:ve,onDragEnd:qe})]})}var He=require("react"),xm=require("@react-three/drei"),fl=require("@react-three/fiber"),Rt=require("three"),nC=require("lucide-react");var ia=require("react/jsx-runtime"),xL=.01,Ob=.5;function Db({node:e,space:t,moveEnabled:n,scaleEnabled:r,onTransformChange:i,onDraggingChange:o,transform:a}){let s=(0,fl.useThree)(K=>K.invalidate),l=(0,fl.useThree)(K=>K.camera),c=(0,fl.useThree)(K=>K.size),d=(0,He.useMemo)(()=>Xa(e),[e]),p=(0,He.useMemo)(()=>new Rt.Vector3,[e]);a?.pivot?p.fromArray(a.pivot.point):p.copy(d);let u=(0,He.useMemo)(()=>{let K=wc(e);if(!K)return[p.clone().add(new Rt.Vector3(Ob,Ob,Ob))];let oe=[];for(let ae of[K.min.x,K.max.x])for(let pe of[K.min.y,K.max.y])for(let De of[K.min.z,K.max.z])oe.push(new Rt.Vector3(ae,pe,De));return oe},[e,p]),f=(0,He.useMemo)(()=>new Rt.Vector3,[]),m=(0,He.useMemo)(()=>new Rt.Vector3,[]),v=(0,He.useRef)(null),g=(0,He.useMemo)(()=>new Rt.Matrix4,[]),b=(0,He.useRef)(!1),h=(0,He.useRef)(new Rt.Matrix4),y=(0,He.useRef)(new Rt.Matrix4),w=(0,He.useRef)(null),T=(0,He.useRef)([]),x=(0,He.useRef)(null),D=(0,He.useRef)(o);D.current=o;let A=(0,He.useMemo)(()=>new Rt.Vector3,[]),S=(0,He.useMemo)(()=>new Rt.Quaternion,[]),M=(0,He.useMemo)(()=>new Rt.Vector3,[]),_=(0,He.useMemo)(()=>new Rt.Quaternion,[]),C=(0,He.useMemo)(()=>new Rt.Vector3(1,1,1),[]),E=(0,He.useMemo)(()=>new Rt.Quaternion,[]),L=(0,He.useMemo)(()=>new Rt.Vector3,[]),k=(0,He.useMemo)(()=>new Rt.Vector3,[]),B=(0,He.useRef)([0,0,0]),j=(0,He.useRef)(new Rt.Vector3(1,1,1)),R=(0,He.useRef)({point:[0,0,0],offset:[0,0,0]}),O=(0,He.useCallback)(()=>{b.current||(e.updateWorldMatrix(!0,!1),A.copy(p).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(S),_.copy(S),t==="world"&&_.identity(),g.compose(A,_,C))},[A,g,_,C,e,p,t,S]),N=(0,He.useCallback)(()=>{e.updateWorldMatrix(!0,!1);let K=1/0;for(let oe of u){f.copy(oe).applyMatrix4(e.matrixWorld);let ae=f.distanceToSquared(l.position);ae<K&&(K=ae,m.copy(f))}v.current?.position.copy(m)},[l,m,u,e,f]);(0,He.useLayoutEffect)(()=>(O(),N(),()=>{let K=x.current!==null;K&&(cancelAnimationFrame(x.current),x.current=null),(b.current||K)&&(b.current=!1,D.current(!1));for(let oe of T.current)Jr(oe);T.current=[]}),[O]),(0,fl.useFrame)(()=>{O(),N()});let H=(0,He.useCallback)(()=>{x.current!==null&&(cancelAnimationFrame(x.current),x.current=null),e.updateWorldMatrix(!0,!0),T.current=[];for(let K of Si(e))Rs(K)||(Oo(K,K.matrixWorld),T.current.push(K));e.updateWorldMatrix(!0,!1),A.copy(p).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(S),e.getWorldScale(M),h.current.compose(A,S,M),y.current.copy(g),B.current=[e.rotation.x,e.rotation.y,e.rotation.z],j.current.copy(e.scale),R.current=a?.pivot??mp(p.toArray(),B.current,e.scale.toArray(),e.rotation.order),w.current=null,b.current=!0,o(!0)},[A,g,e,o,p,S,M,a?.pivot]),Y=(0,He.useCallback)((K,oe)=>{let ae=h.current.clone().premultiply(oe),pe=y.current.clone().premultiply(oe);ae.decompose(L,S,k);let De=L.clone();pe.decompose(A,_,C),t==="world"&&_.identity(),g.compose(A,_,C),K.decompose(L,E,k);let te=new Rt.Euler().setFromQuaternion(E,e.rotation.order),[Fe,We,ge]=B.current,Ce=[Fe+te.x,We+te.y,ge+te.z],Je=new Rt.Quaternion().setFromEuler(new Rt.Euler(Ce[0],Ce[1],Ce[2],e.rotation.order));e.scale.copy(j.current);let qe=(e.parent?.matrixWorld||new Rt.Matrix4).clone().invert(),he=De.clone().applyMatrix4(qe),de=p.clone().multiply(e.scale).applyQuaternion(Je),ze=he.clone().sub(de);e.position.copy(ze),e.rotation.set(Ce[0],Ce[1],Ce[2],e.rotation.order),e.updateMatrixWorld(!0),s();let Pe=R.current,ft=he.clone().sub(new Rt.Vector3(...Pe.offset)),At=[ft.x,ft.y,ft.z];w.current={position:At,rotation:Ce,pivot:Pe}},[A,E,g,_,C,s,e,p,L,k,t,S]),ue=(0,He.useCallback)(()=>{b.current=!1;let K=w.current;if(w.current=null,K)i(K),x.current=requestAnimationFrame(()=>{x.current=null,o(!1)});else if(T.current.length>0){for(let oe of T.current)Jr(oe);e.updateMatrixWorld(!0),s(),o(!1)}else o(!1);T.current=[]},[s,e,o,i]),be=(0,He.useRef)(null),X=(0,He.useCallback)(K=>{let oe=K.clone().project(l);return{x:c.left+(oe.x*.5+.5)*c.width,y:c.top+(-oe.y*.5+.5)*c.height}},[l,c]),G=(0,He.useCallback)((K,oe)=>{let ae=Math.max(xL,Number.isFinite(K)?K:1);e.scale.copy(j.current).multiplyScalar(ae);let De=(e.parent?.matrixWorld||new Rt.Matrix4).clone().invert(),te=oe.clone().applyMatrix4(De),Fe=new Rt.Quaternion().setFromEuler(e.rotation),We=p.clone().multiply(e.scale).applyQuaternion(Fe),ge=te.clone().sub(We);e.position.set(ge.x,ge.y,ge.z),e.updateMatrixWorld(!0),N(),s(),w.current={position:te.clone().sub(new Rt.Vector3(...R.current.offset)).toArray(),scale:e.scale.toArray(),pivot:R.current}},[s,e,p,N]),J=(0,He.useCallback)(K=>{if(!r)return;K.stopPropagation(),K.preventDefault(),K.currentTarget.setPointerCapture(K.pointerId),H();let oe=A.clone(),ae=X(oe),pe=Math.max(1,Math.hypot(K.clientX-ae.x,K.clientY-ae.y));be.current={pointerId:K.pointerId,centerScreen:ae,startDistance:pe,pivotWorld:oe}},[H,A,X,r]),ee=(0,He.useCallback)(K=>{let oe=be.current;if(!oe||K.pointerId!==oe.pointerId)return;K.stopPropagation();let ae=Math.hypot(K.clientX-oe.centerScreen.x,K.clientY-oe.centerScreen.y);G(ae/oe.startDistance,oe.pivotWorld)},[G]),fe=(0,He.useCallback)(K=>{let oe=be.current;!oe||K.pointerId!==oe.pointerId||(K.stopPropagation(),K.currentTarget.hasPointerCapture(K.pointerId)&&K.currentTarget.releasePointerCapture(K.pointerId),be.current=null,ue())},[ue]);return(0,He.useEffect)(()=>{r||be.current&&(be.current=null,ue())},[r,ue]),(0,ia.jsxs)("group",{children:[(0,ia.jsx)(xm.PivotControls,{matrix:g,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:H,onDrag:(K,oe,ae,pe)=>Y(oe,pe),onDragEnd:ue}),r&&(0,ia.jsx)("group",{ref:v,children:(0,ia.jsx)(xm.Html,{portal:void 0,zIndexRange:[10,0],style:{pointerEvents:"none",transition:"opacity 0.2s"},children:(0,ia.jsx)("div",{onPointerDown:J,onPointerMove:ee,onPointerUp:fe,onPointerCancel:fe,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,ia.jsx)(nC.Maximize2,{size:13,color:"#ffffff"})})})})]})}var ot=require("react"),wm=require("@react-three/drei"),hl=require("@react-three/fiber"),Gn=require("three"),iC=require("lucide-react");var nu=require("three");function Lb(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 rC(e){return Lb(e).map(({key:t,node:n,transform:r})=>{n.updateWorldMatrix(!0,!0);let i=r?.pivot?.point??Xa(n).toArray(),o=r?.pivot??mp(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 nu.Vector3(...o.point).applyMatrix4(n.matrixWorld)}})}function Ib(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 nu.Matrix4).invert(),s=a.clone().multiply(t).multiply(r.startWorld),{rotation:l,scale:c,shear:d}=id(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),_i(i,d),i.updateMatrixWorld(!0),{key:r.key,transform:{position:p.clone().sub(new nu.Vector3(...o.offset)).toArray(),rotation:[i.rotation.x,i.rotation.y,i.rotation.z],scale:c.toArray(),pivot:o,shear:d}}})}var oa=require("react/jsx-runtime"),wL=.01;function kb({entries:e,referenceNode:t,space:n,moveEnabled:r,scaleEnabled:i,onTransformChange:o,onDraggingChange:a}){let s=(0,hl.useThree)(X=>X.invalidate),l=(0,hl.useThree)(X=>X.camera),c=(0,hl.useThree)(X=>X.size),d=(0,ot.useRef)(e);d.current=e;let p=(0,ot.useRef)([]);(e.length!==p.current.length||e.some((X,G)=>X.key!==p.current[G].key||X.node!==p.current[G].node))&&(p.current=e);let u=p.current,f=(0,ot.useMemo)(()=>Lb(u).map(({node:X})=>X),[u]),m=t??e[e.length-1]?.node,v=(0,ot.useMemo)(()=>new Gn.Vector3,[]),g=(0,ot.useMemo)(()=>new Gn.Quaternion,[]),b=(0,ot.useMemo)(()=>new Gn.Matrix4,[]),h=(0,ot.useMemo)(()=>new Gn.Vector3(1,1,1),[]),y=(0,ot.useMemo)(()=>new Gn.Vector3,[]),w=(0,ot.useRef)(null),T=(0,ot.useMemo)(()=>f.flatMap(X=>{let G=wc(X);if(!G)return[{node:X,point:Xa(X).addScalar(.5)}];let J=[];for(let ee of[G.min.x,G.max.x])for(let fe of[G.min.y,G.max.y])for(let K of[G.min.z,G.max.z])J.push({node:X,point:new Gn.Vector3(ee,fe,K)});return J}),[f]),x=(0,ot.useRef)(!1),D=(0,ot.useRef)(new Gn.Matrix4),A=(0,ot.useRef)([]),S=(0,ot.useRef)(null),M=(0,ot.useRef)([]),_=(0,ot.useRef)(null),C=(0,ot.useRef)(null),E=(0,ot.useRef)(a);E.current=a;let L=(0,ot.useRef)(o);L.current=o;let k=(0,ot.useCallback)(()=>{if(!x.current){v.set(0,0,0);for(let X of f)X.updateWorldMatrix(!0,!1),v.add(Xa(X).applyMatrix4(X.matrixWorld));f.length&&v.divideScalar(f.length),g.identity(),n==="local"&&m&&(m.updateWorldMatrix(!0,!1),m.getWorldQuaternion(g)),b.compose(v,g,h)}},[v,b,g,f,m,n,h]),B=(0,ot.useCallback)(()=>{let X=1/0,G=new Gn.Vector3;for(let{node:J,point:ee}of T){J.updateWorldMatrix(!0,!1),G.copy(ee).applyMatrix4(J.matrixWorld);let fe=G.distanceToSquared(l.position);fe<X&&(X=fe,y.copy(G))}w.current?.position.copy(y)},[l,T,y]),j=(0,ot.useCallback)(()=>{let X=C.current;C.current=null,X?.target.hasPointerCapture(X.pointerId)&&X.target.releasePointerCapture(X.pointerId)},[]);(0,ot.useLayoutEffect)(()=>{k(),B()},[k,B]),(0,ot.useLayoutEffect)(()=>()=>{j();let X=_.current!==null;if(X&&(cancelAnimationFrame(_.current),_.current=null),x.current)for(let G of A.current)G.node.matrixAutoUpdate=G.startMatrixAutoUpdate,G.node.matrix.copy(G.startMatrix),G.node.position.copy(G.startPosition),G.node.quaternion.copy(G.startQuaternion),G.node.scale.copy(G.startScale),G.node.updateMatrixWorld(!0);(x.current||X)&&(x.current=!1,S.current=null,E.current(!1),s());for(let G of M.current)Jr(G);M.current=[]},[u,s,j]),(0,hl.useFrame)(()=>{k(),B()});let R=(0,ot.useCallback)(()=>{_.current!==null&&(cancelAnimationFrame(_.current),_.current=null),k(),A.current=rC(d.current),M.current=[];for(let{node:X}of A.current)for(let G of Si(X))Rs(G)||(Oo(G,G.matrixWorld),M.current.push(G));D.current.copy(b),S.current=null,x.current=!0,E.current(!0)},[b,k]),O=(0,ot.useCallback)((X,G)=>{if(!x.current)return;D.current.clone().premultiply(G).decompose(v,g,new Gn.Vector3),n==="world"&&g.identity(),b.compose(v,g,h),S.current=Ib(A.current,G),B(),s()},[v,b,g,s,n,B,h]),N=(0,ot.useCallback)(()=>{if(!x.current)return;x.current=!1,j();let X=S.current;if(S.current=null,X?.length)_.current=requestAnimationFrame(()=>{_.current=null,E.current(!1)}),L.current(X);else{for(let G of M.current)Jr(G);s(),E.current(!1)}M.current=[]},[s,j]);(0,ot.useEffect)(()=>{(!i&&C.current||!r&&x.current&&!C.current)&&N()},[i,r,N]);let H=(0,ot.useCallback)(X=>{let G=X.clone().project(l);return{x:c.left+(G.x*.5+.5)*c.width,y:c.top+(-G.y*.5+.5)*c.height}},[l,c]),Y=(0,ot.useCallback)(X=>{if(!i)return;X.stopPropagation(),X.preventDefault(),X.currentTarget.setPointerCapture(X.pointerId),R();let G=H(v);C.current={pointerId:X.pointerId,target:X.currentTarget,centerScreen:G,startDistance:Math.max(1,Math.hypot(X.clientX-G.x,X.clientY-G.y))}},[R,v,H,i]),ue=(0,ot.useCallback)(X=>{let G=C.current;if(!G||X.pointerId!==G.pointerId)return;X.stopPropagation();let J=Math.hypot(X.clientX-G.centerScreen.x,X.clientY-G.centerScreen.y),ee=Math.max(wL,J/G.startDistance),fe=new Gn.Vector3().setFromMatrixPosition(D.current),K=new Gn.Matrix4().makeTranslation(...fe.toArray()).multiply(new Gn.Matrix4().makeScale(ee,ee,ee)).multiply(new Gn.Matrix4().makeTranslation(...fe.clone().negate().toArray()));S.current=Ib(A.current,K,ee),B(),s()},[s,B]),be=(0,ot.useCallback)(X=>{X.pointerId===C.current?.pointerId&&(X.stopPropagation(),N())},[N]);return(0,oa.jsxs)("group",{children:[(0,oa.jsx)(wm.PivotControls,{matrix:b,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:R,onDrag:(X,G,J,ee)=>O(G,ee),onDragEnd:N}),i&&(0,oa.jsx)("group",{ref:w,children:(0,oa.jsx)(wm.Html,{children:(0,oa.jsx)("div",{onPointerDown:Y,onPointerMove:ue,onPointerUp:be,onPointerCancel:be,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,oa.jsx)(iC.Maximize2,{size:13,color:"#ffffff"})})})})]})}var oC=require("three");function SL(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 oC.Vector3,c=s[0],d=1/0;for(let f of s){l.fromBufferAttribute(o,f);let m=l.distanceToSquared(a);m<d&&(d=m,c=f)}let p=r.getComponent(c,0),u=i.getComponent(c,0);for(let f=1;f<4;f++){let m=i.getComponent(c,f);m>u&&(u=m,p=r.getComponent(c,f))}return t.skeleton.bones[p]??null}function aC(e){let t=SL(e)??e.object,n=ur(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 sC(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 uo=require("react"),Mm=require("@react-three/fiber"),Sm=require("three");function _m({annotation:e,enabled:t,controlsRef:n,offsetRef:r}){let i=(0,Mm.useThree)(u=>u.scene),o=(0,uo.useRef)(null),a=(0,uo.useRef)(!1),s=(0,uo.useMemo)(()=>new Sm.Vector3,[]),l=(0,uo.useMemo)(()=>new Sm.Vector3,[]),c=(0,uo.useMemo)(()=>new Sm.Vector3,[]),d=e?.anchorNodeName,p=e?.anchorLocalPosition;return(0,uo.useEffect)(()=>{o.current=null,a.current=!1},[d,e?.id]),(0,Mm.useFrame)(()=>{let u=n.current,f=r.current;if(!t||!u||!f||!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(f),u.setLookAt(c.x,c.y,c.z,s.x,s.y,s.z,!0))}),null}var tt=require("react"),as=require("three");function lC({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:f,engagementRef:m}){let[v,g]=(0,tt.useState)(!1),[b,h]=(0,tt.useState)(()=>e??[]);(0,tt.useEffect)(()=>{if(b.length>0){let ge=b.reduce((Ce,Je)=>Math.max(Ce,Je.id),0);D.current=ge}else D.current=0},[b]);let[y,w]=(0,tt.useState)(null),[T,x]=(0,tt.useState)({title:"",description:""}),D=(0,tt.useRef)(0),[A,S]=(0,tt.useState)(null),[M,_]=(0,tt.useState)(-1),[C,E]=(0,tt.useState)(!1),L=(0,tt.useRef)(null),[k,B]=(0,tt.useState)(()=>i),j=t===void 0?k:t,R=(0,tt.useMemo)(()=>px(b,j),[b,j]),O=(0,tt.useMemo)(()=>[...new Set(b.map(Mh))].sort(),[b]),N=r&&O.some(Boolean),H=ge=>{t===void 0&&B(ge),n?.(ge)},Y=(0,tt.useMemo)(()=>[...R].sort((ge,Ce)=>ge.id-Ce.id),[R]),ue=(0,tt.useMemo)(()=>JSON.stringify([j?.map(ge=>ge.trim()).sort()??null,Y]),[j,Y]),be=(0,tt.useMemo)(()=>M<0||M>=Y.length?null:Y[M],[M,Y]),X=(0,tt.useCallback)(ge=>{if(o!==void 0){a?.(ge);return}S(ge?{annotation:ge}:null)},[o,a]),G=(0,tt.useRef)(null),J=(0,tt.useCallback)(ge=>{let Ce=l.current,Je=c.current;if(!Ce)return;let ve=new as.Vector3,qe=d.current.get(ge.id);qe?ve.copy(qe):Je&&sC(ge,Je,ve)||ve.set(ge.worldPosition[0],ge.worldPosition[1],ge.worldPosition[2]),p.current=null;let he=Ce.smoothTime;Ce.smoothTime=As(Ce,.6);let de=ge.worldNormal;if(Ju(ge.cameraView))Fl(Ce,ge.cameraView);else{if(Je){let ze=new as.Box3().setFromObject(Je),Pe=new as.Vector3;ze.getCenter(Pe);let ft=new as.Vector3;ze.getSize(ft);let At=ft.length()*.2,se;de?se=new as.Vector3(de[0],de[1],de[2]):se=ve.clone().sub(Pe),se.lengthSq()<1e-6&&se.set(0,0,1),se.normalize();let Re=Math.max(At*.6,.3),Ee=ve.clone().add(se.multiplyScalar(Re));Ce.setPosition(Ee.x,Ee.y,Ee.z,!0),ge.anchorNodeName&&ge.anchorLocalPosition&&(p.current=Ee.clone().sub(ve))}Ce.setTarget(ve.x,ve.y,ve.z,!0),G.current&&Ea(Ce,G.current)}L.current&&clearTimeout(L.current),L.current=setTimeout(()=>{Ce.smoothTime=he,L.current=null},800),X(ge)},[X]),ee=(0,tt.useCallback)(()=>{Y.length!==0&&(l.current&&(G.current=Es(l.current)),f.startTour(Y.length),g(!0),_(0),J(Y[0]))},[Y,J,f]),fe=(0,tt.useCallback)(()=>{if(Y.length===0||M<0)return;E(!0);let ge=(M-1+Y.length)%Y.length;_(ge),J(Y[ge]),setTimeout(()=>E(!1),500)},[M,Y,J]),K=(0,tt.useCallback)(()=>{if(Y.length===0||M<0)return;if(M===Y.length-1){if(f.completeTour(),g(!1),_(-1),X(null),l.current&&u.current){let Ce=u.current;Fl(l.current,{...G.current,...Ce}),G.current=null}return}E(!0);let ge=M+1;_(ge),J(Y[ge]),setTimeout(()=>E(!1),500)},[M,Y,J,X,f]),oe=(0,tt.useCallback)(()=>{if(f.stopTour(),g(!1),_(-1),X(null),l.current&&u.current){let ge=u.current;Fl(l.current,{...G.current,...ge}),G.current=null}},[X,f]);(0,tt.useEffect)(()=>{m.current.stopTour("annotations-changed"),G.current&&l.current&&(Fl(l.current,{...G.current,...u.current??{}}),G.current=null),p.current=null,_(-1),g(!1)},[ue]),(0,tt.useEffect)(()=>()=>{L.current&&clearTimeout(L.current)},[]),(0,tt.useEffect)(()=>{be&&v&&G.current&&X(be)},[be,X,v]),(0,tt.useEffect)(()=>{if(e===void 0)return;let ge=e.map(Ce=>({...Ce,localPosition:Ce.localPosition??Ce.worldPosition}));h(ge)},[e]);let ae=(0,tt.useCallback)(()=>{if(o!==void 0){a?.(null);return}S(null)},[o,a]),pe=o!==void 0?o:A?.annotation??null,De=(0,tt.useMemo)(()=>pe?R.find(Ce=>Ce.id===pe.id)??null:null,[pe,R]);(0,tt.useEffect)(()=>{pe&&!De&&ae()},[pe,De,ae]);let te=(0,tt.useCallback)(()=>{if(!y||!T.title.trim())return;D.current+=1;let Ce={id:D.current,worldPosition:y.worldPosition,localPosition:y.localPosition,worldNormal:y.worldNormal,anchorNodeName:y.anchor?.anchorNodeName,anchorLocalPosition:y.anchor?.anchorLocalPosition,title:T.title.trim(),description:T.description},Je=[...b,Ce];h(Je),s?.(Je),w(null)},[y,T,b,s]),Fe=(0,tt.useCallback)(()=>w(null),[]),We=(0,tt.useCallback)(ge=>{Ju(ge.cameraView)?J(ge):X(ge)},[X,J]);return{annotations:b,pendingAnnotation:y,setPendingAnnotation:w,annotationForm:T,setAnnotationForm:x,currentAnnotationIndex:M,isNavigating:C,localAnnotationCategories:k,selectedAnnotationCategories:j,visibleAnnotations:R,availableAnnotationCategories:O,annotationFiltersVisible:N,changeAnnotationCategories:H,sortedAnnotations:Y,currentAnnotation:be,setActiveAnnotation:X,focusAnnotation:J,startGuidedTour:ee,goToPreviousAnnotation:fe,goToNextAnnotation:K,stopGuidedTour:oe,closeViewingAnnotation:ae,activeAnnotation:pe,activeViewingAnnotation:De,isGuidedTourActive:v,handleAnnotationOk:te,handleAnnotationCancel:Fe,handleAnnotationMarkerClick:We}}var Hr=require("react"),pC=require("three");var hn=require("three");function cC(e,t){if(!(e instanceof hn.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 hn.Box3,i=new hn.Vector3;if(Kt(e)){let x=e;x.computeBoundingBox(),x.computeBoundingSphere();for(let D=0;D<n.count;D++)r.expandByPoint(e.getVertexPosition(D,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 hn.Vector3),a=t.getWorldPosition(new hn.Vector3),s=t.getWorldDirection(new hn.Vector3),l=t.isOrthographicCamera,c=new hn.Raycaster,d=x=>{if(l){let A=a.distanceTo(o)+r.getSize(i).length()+1;c.set(x.clone().addScaledVector(s,-A),s)}else c.set(a,x.clone().sub(a).normalize());let D=c.intersectObject(e,!1)[0];return D?Fa({...D,ray:c.ray},e):null},p=d(o);if(p)return p;let u=e.geometry.index,f=u?.count??n.count,m=new hn.Vector3,v=new hn.Vector3,g=new hn.Vector3,b=new hn.Vector3,h=new hn.Vector3,y=new hn.Vector3,w=null,T=1/0;for(let x=0;x+2<f;x+=3){if(e.getVertexPosition(u?u.getX(x):x,m).applyMatrix4(e.matrixWorld),e.getVertexPosition(u?u.getX(x+1):x+1,v).applyMatrix4(e.matrixWorld),e.getVertexPosition(u?u.getX(x+2):x+2,g).applyMatrix4(e.matrixWorld),b.copy(m).add(v).add(g).multiplyScalar(1/3),hn.Triangle.getNormal(m,v,g,h),l?y.copy(s).negate():y.copy(a).sub(b),h.dot(y)<=0)continue;let D=b.distanceToSquared(o);D<T&&(T=D,w=b.clone())}return w?d(w):null}var gn=require("three");function uC(e,t,n,r){if(!(e instanceof gn.Mesh)||!t)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let i=new gn.Vector3().fromArray(n.position);if(Kt(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,f=new gn.Triangle,m=new gn.Vector3,v=new gn.Vector3,g=1/0,b=null;for(let h=0;h+2<u;h+=3){let y=[0,1,2].map(T=>p?p.getX(h+T):h+T);f.a.fromBufferAttribute(d,y[0]),f.b.fromBufferAttribute(d,y[1]),f.c.fromBufferAttribute(d,y[2]),f.closestPointToPoint(i,m);let w=m.distanceToSquared(i);if(!(w>=g||!f.getBarycoord(m,v))&&(g=w,b=new gn.Vector3().addScaledVector(c.getVertexPosition(y[0],new gn.Vector3),v.x).addScaledVector(c.getVertexPosition(y[1],new gn.Vector3),v.y).addScaledVector(c.getVertexPosition(y[2],new gn.Vector3),v.z),g<1e-12))break}if(!b)return null;i.copy(b)}if(i.applyMatrix4(e.matrixWorld).project(t),!Number.isFinite(i.x)||i.z<-1||i.z>1)return null;let o=new gn.Vector2(r==="left"?-.0035:r==="right"?.0035:0,r==="down"?-.0035:r==="up"?.0035:0),a=new gn.Raycaster,s=n.size*.01,l=new gn.Vector3().fromArray(n.position);for(let c=1;c>=1/1024;c/=2){a.setFromCamera(new gn.Vector2(i.x,i.y).addScaledVector(o,c),t);let d=a.intersectObject(e,!1)[0];if(d){let p=Fa({...d,ray:a.ray},e);if(new gn.Vector3().fromArray(p.position).distanceTo(l)<=s)return p}}return null}var dC=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function mC({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:f}){let m=(0,Hr.useCallback)((x,D)=>{let A=t.current,S=A[x];if(!S)return;let M=D(S.decals??[]);n({...A,[x]:{...S,decals:M.length>0?M:void 0}})},[n,e]),v=(0,Hr.useMemo)(()=>{if(!a)return null;let{objectKey:x,decalId:D}=a,A=e[x],S=A?.decals?.find(M=>M.id===D);return S?{objectId:A.modelObjectId??x,decal:S,onCancel:()=>s(null),onCommit:M=>{m(x,_=>_.map(C=>C.id===D?{...C,...M}:C)),s(null)}}:null},[a,e,m]),g=o??v,b=(0,Hr.useCallback)((x,D)=>{d.current++;let A=t.current[x],S=r.current[A?.modelObjectId??x],M=cC(S,i.current?.camera);if(!M)return l("Could not find a surface on this object for the decal."),!1;let _={...D,...M};return m(x,C=>[...C,_]),l(null),c(C=>C&&{...C,activeId:_.id}),s({objectKey:x,decalId:_.id}),!0},[m]),h=(0,Hr.useCallback)(x=>{let D=t.current[x],A=r.current[D?.modelObjectId??x]?.geometry;if(!A)return .2;A.boundingBox||A.computeBoundingBox();let S=A.boundingBox?.getSize(new pC.Vector3),M=S?Math.max(S.x,S.y,S.z):0;return M>0&&Number.isFinite(M)?M/3:.2},[]),y=(0,Hr.useRef)([]);(0,Hr.useEffect)(()=>()=>{for(let x of y.current)URL.revokeObjectURL(x)},[]);let w=(0,Hr.useCallback)(async(x,D,A)=>{let S=++d.current;s(null);let M;if(p){if(M=await p(A,x),S!==d.current)return}else M=URL.createObjectURL(A),y.current.push(M);b(D,{id:dC(),image:M,size:h(D)})},[h,p,b]);return(0,Hr.useEffect)(()=>{d.current++,l(null),s(null)},[u,f]),{editDecals:m,activeDecalMove:g,addCenteredDecal:b,decalSizeFor:h,startImageDecal:w,decalControlHandlers:(x,D)=>({onSelect:A=>{d.current++,l(null),s(null),c({...x,activeId:A})},onAddText:(A,S)=>b(D,{id:dC(),text:A,color:S,size:h(D)}),onAddImage:A=>{w(x.objectId,D,A)},onChange:(A,S)=>m(D,M=>M.map(_=>_.id===A?{..._,...S}:_)),onNudge:(A,S)=>{let M=t.current[D],_=M?.decals?.find(L=>L.id===A);if(!_)return;let C=r.current[M.modelObjectId??D],E=uC(C,i.current?.camera,_,S);if(!E){l("No visible surface in that direction. Try another arrow or rotate the view.");return}l(null),s(null),m(D,L=>L.map(k=>k.id===A?{...k,...E}:k))},onMove:A=>{d.current++,e[D]?.decals?.find(M=>M.id===A)&&(l(null),s(M=>M?.objectKey===D&&M.decalId===A?null:{objectKey:D,decalId:A}))},onRemove:A=>{s(null),m(D,S=>S.filter(M=>M.id!==A)),c({...x,activeId:null})},onClose:()=>{d.current++,l(null),s(null),c(null)}})}}var ru=require("react");function fC({canvasAreaElement:e,controlsRef:t,enabled:n}){let r=(0,ru.useRef)(new Set),i=(0,ru.useRef)(null);(0,ru.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 v=t.current,g=r.current;if(!v||g.size===0){i.current=null,l=0;return}let b=l?Math.min((m-l)/1e3,.05):1/60;l=m;let h=Math.max(v.distance*.75,.01)*b;g.has("w")&&v.forward(h,!1),g.has("s")&&v.forward(-h,!1),g.has("a")&&v.truck(-h,0,!1),g.has("d")&&v.truck(h,0,!1),g.has(" ")&&v.truck(0,h,!1),g.has("c")&&v.truck(0,-h,!1),i.current=requestAnimationFrame(p)},u=m=>{if(m.target!==o){d();return}if(s.has(m.key)){let g=t.current;if(!g)return;m.preventDefault();let b=Math.PI/90,h=Math.max(g.distance*.05,.01);m.key==="ArrowUp"?m.shiftKey?g.forward(h,!0):g.rotate(0,-b,!0):m.key==="ArrowDown"?m.shiftKey?g.forward(-h,!0):g.rotate(0,b,!0):m.key==="ArrowLeft"?g.rotate(-b,0,!0):g.rotate(b,0,!0);return}let v=c(m);a.has(v)&&(m.preventDefault(),r.current.add(v),i.current===null&&(i.current=requestAnimationFrame(p)))},f=m=>{r.current.delete(c(m))};return o.addEventListener("keydown",u),o.addEventListener("keyup",f),o.addEventListener("blur",d),()=>{o.removeEventListener("keydown",u),o.removeEventListener("keyup",f),o.removeEventListener("blur",d),d()}},[e,t,n])}var En=require("react");var hC=1,ML=4,_L=.0015,CL=.1,TL=8;function gC({moveZoomTarget:e,setMoveZoomTarget:t,currentObjectBindingsRef:n,materialRefsOut:r,rendererCaptureRef:i,canvasAreaRef:o,canvasAreaElement:a,applyBindingStyle:s}){let l=(0,En.useRef)(null),c=(0,En.useRef)(!1),d=(0,En.useRef)([0,0]),p=(0,En.useRef)([0,0]),u=(0,En.useRef)(1),f=(0,En.useRef)(null),m=(0,En.useCallback)((w,T)=>{let x=e;if(!x)return;let D=n.current[x.objectKey]?.style?.material?.[x.textureKey],A=D?.path;if(!A)return;let S=D?.rotation??0,M=ei(x.textureKey),_=Wl(A,M),C=r.current[x.objectKey],E=Array.isArray(C)?C:C?[C]:[],L=jd[x.textureKey];for(let k of E){let B=k;L in B&&(B[L]=cd(B.userData,x.textureKey,_,A,w,T,S))}i.current?.invalidate()},[e]),v=(0,En.useCallback)(w=>{if(!e)return;w.currentTarget.setPointerCapture?.(w.pointerId),l.current={x:w.clientX,y:w.clientY},c.current=!1;let T=n.current[e.objectKey]?.style?.material?.[e.textureKey];if(d.current=T?.offset??[0,0],p.current=d.current,u.current=T?.scale??1,f.current===null){let x=()=>{i.current?.invalidate(),f.current=requestAnimationFrame(x)};f.current=requestAnimationFrame(x)}},[e]),g=(0,En.useCallback)(w=>{if(!e||!l.current)return;let T=o.current,x=T?.clientWidth||1,D=T?.clientHeight||1,A=w.clientX-l.current.x,S=w.clientY-l.current.y;if(!c.current&&Math.hypot(A,S)<ML)return;c.current=!0;let M=-(A/x)*hC,_=S/D*hC,[C,E]=d.current,L=[C+M,E+_];p.current=L,m(L,u.current),s(e.objectKey,k=>({...k,material:{...k?.material,[e.textureKey]:{...k?.material?.[e.textureKey],path:n.current[e.objectKey]?.style?.material?.[e.textureKey]?.path,offset:L}}}))},[e,m,s]),b=(0,En.useCallback)(w=>{if(!e)return;w.target?.releasePointerCapture?.(w.pointerId),f.current!==null&&(cancelAnimationFrame(f.current),f.current=null);let T=c.current,x=e;if(T){s(x.objectKey,D=>({...D,material:{...D?.material,[x.textureKey]:{...D?.material?.[x.textureKey],path:n.current[x.objectKey]?.style?.material?.[x.textureKey]?.path,offset:p.current}}})),l.current=null,c.current=!1;return}l.current=null,t(null)},[e,s]);(0,En.useEffect)(()=>{if(!e)return f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null)}},[e]),(0,En.useEffect)(()=>{let w=a;if(!(!w||!e))return w.addEventListener("pointermove",g),w.addEventListener("pointerup",b),w.addEventListener("pointercancel",b),()=>{w.removeEventListener("pointermove",g),w.removeEventListener("pointerup",b),w.removeEventListener("pointercancel",b)}},[a,e,g,b]);let h=(0,En.useCallback)(w=>{if(!e)return;w.preventDefault();let T=e,x=Math.exp(-w.deltaY*_L),D=Math.min(TL,Math.max(CL,u.current*x));u.current=D,m(p.current,D),s(T.objectKey,A=>({...A,material:{...A?.material,[T.textureKey]:{...A?.material?.[T.textureKey],path:n.current[T.objectKey]?.style?.material?.[T.textureKey]?.path,scale:D}}}))},[e,m,s]);return(0,En.useEffect)(()=>{let w=a;if(!(!w||!e))return w.addEventListener("wheel",h,{passive:!1}),()=>w.removeEventListener("wheel",h)},[a,e,h]),{beginMoveZoom:(0,En.useCallback)(w=>{c.current=!1,l.current=null,t(w)},[t]),handleMoveZoomPointerDown:v}}var Cm=require("@react-three/fiber"),PL=.2;function Bb({enabled:e,speed:t,controlsRef:n}){let r=(0,Cm.useThree)(i=>i.invalidate);return(0,Cm.useFrame)((i,o)=>{!e||!n.current||(n.current.rotate(o*PL*t,0,!1),r())}),null}var ui=require("lucide-react");var Pt=require("react/jsx-runtime");function bC({count:e,onDismiss:t}){let n=_e();return(0,Pt.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,Pt.jsx)(ui.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)(ui.X,{size:12})})]})}function yC({triangles:e,offset:t,onDismiss:n}){let r=_e();return(0,Pt.jsxs)("div",{className:`ri-largeModelBanner ${t?"ri-largeModelBanner--offset":""}`,children:[(0,Pt.jsx)(ui.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)(ui.X,{size:12})})]})}function vC({missing:e,total:t}){let n=_e();return(0,Pt.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,Pt.jsx)(ui.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 xC({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)(ui.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 wC({rebuilding:e,onReload:t}){let n=_e();return(0,Pt.jsx)("div",{className:"ri-contextRecovery",role:"alert",children:(0,Pt.jsxs)("div",{className:"ri-contextRecovery__card",children:[(0,Pt.jsx)(ui.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)(ui.RotateCcw,{size:16,"aria-hidden":"true"}),n("reloadViewer")]})]})})}var iu=require("react");function SC({applyBindingStyle:e,resolveObjectKey:t,onTextureUpload:n,fileInputRef:r,pendingObjectId:i,createdBlobUrls:o,texturePositioning:a,setMoveZoomTarget:s}){let l=(0,iu.useCallback)((b,h)=>{let y=o.current[b];y&&URL.revokeObjectURL(y),h.startsWith("blob:")?o.current[b]=h:delete o.current[b],e(b,w=>({...w,material:{...w?.material,texture:{path:h}}}))},[e]),c=b=>{let h=b.target.files?.[0],y=i.current;if(!h||!y)return;let w=t(y);w&&(n?n(h,w).then(T=>l(w,T),T=>console.error("onTextureUpload failed:",T)):l(w,URL.createObjectURL(h)),b.target.value="")},d=b=>{i.current=b,r.current?.click()},p=b=>{let h=t(b);if(!h)return;e(h,w=>w?.material?.texture?{...w,material:{...w.material,texture:void 0}}:w);let y=o.current[h];y&&(URL.revokeObjectURL(y),delete o.current[h])},u=!!a,f=typeof a=="object"?a:void 0,m=(0,iu.useCallback)((b,h,y)=>{if(f?.onOffsetChange){f.onOffsetChange(b,h,y);return}e(b,w=>{let T=w?.material?.texture;if(!T?.path)return w;let x=T.offset??[0,0],D=[x[0],x[1]];return D[h]=y,{...w,material:{...w?.material,texture:{...T,offset:D}}}})},[e,f]),v=(0,iu.useCallback)((b,h)=>{if(f?.onRotationChange){f.onRotationChange(b,h);return}e(b,y=>{let w=y?.material?.texture;if(!w?.path)return y;let T=(h%360+360)%360;return{...y,material:{...y?.material,texture:{...w,rotation:T*Math.PI/180}}}})},[e,f]),g=(0,iu.useCallback)(()=>{s(null),f?.onEndPositioning?.()},[f]);return{handleFileChange:c,triggerFileUpload:d,clearTexture:p,texturePositioningEnabled:u,texturePositioningOverrides:f,setMaterialTextureOffset:m,setMaterialTextureRotation:v,endMaterialTexturePositioning:g}}function MC({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?Do(p)??p:void 0,f=Vd(d?r.current[d]:null),m=o?a?.offset??(d?n[d]?.style?.material?.texture?.offset:void 0):void 0,v=o?a?.rotationDegrees??(d?((n[d]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,g=o?a?.isPositioning??!!(d&&i?.objectKey===d&&i?.textureKey==="texture"):!1;return{materialTextureUrl:u,materialTargetTakesImage:f,materialTextureOffset:m,materialTextureRotationDegrees:v,isMaterialTexturePositioning:g,materialTextureOnOffsetChange:o?s:void 0,materialTextureOnRotationChange:o?l:void 0,materialTextureOnEndPositioning:o?c:void 0}}var gl=require("react");var Tm=e=>e==="#000000"?"#ffffff":e;function _C({nodeRefsMap:e,currentObjectBindingsRef:t,applyObjectBindings:n}){let r=(0,gl.useRef)({}),i=(0,gl.useCallback)(a=>{let s=gw(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,gl.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 CC({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:f,resolvedSceneConfigRef:m,applyLightPatches:v,readObjectGlow:g,applyGlow:b,glowMemoryRef:h,setLightControl:y,onAction:w}){return(0,gl.useCallback)(T=>{let{objectId:x,action:D,binding:A}=T;switch(e(T),D.id){case"toggle-visibility":{let S=x;A?.modelObjectId&&(S=t.byModelObjectId.get(A.modelObjectId)??S);let M=n[S],_=M?.visible===!1;M&&r({...n,[S]:{...M,visible:_}});break}case"change-color":o(),s(S=>{if(!(x in S))return S;let M={...S};return delete M[x],M}),l(S=>{let M=i(x,A)??x,_=S[x]?.hex,C=n[M]?.style?.material?.baseColor;return{...S,[x]:{...S[x],hex:_??C??"#ffffff"}}}),a(c(x,225,250,A,T));break;case"change-material":o(),s(S=>{if(x in S){let M={...S};return delete M[x],M}return{...S,[x]:c(x,300,320,A,T)}});break;case"add-text":case"add-image":{o();let S=D.id;d.current++,p(null),u(null),f(M=>M?.objectId===x&&M.kind===S?null:{objectId:x,kind:S,activeId:null});break}case"toggle-light":case"change-light-color":case"set-brightness":{let S=i(x,A);if(!S)break;let M=hw(m.current,n,S);if(D.id==="toggle-light"){if(M.length>0){let L=!M.some(k=>k.visible);v(Object.fromEntries(M.map(k=>[k.id,{visible:L}])));break}let E=g(S);E.on?(h.current[S]=E.intensity,b(S,{emissiveIntensity:0})):b(S,{emissive:Tm(E.color),emissiveIntensity:h.current[S]??1});break}let _=D.id,C=M.length>0?null:g(S);y(E=>E?.objectId===x&&E.kind===_?null:{objectId:x,kind:_,target:C?{type:"glow",objectKey:S,baseIntensity:C.on?C.intensity:h.current[S]??1}:{type:"lights",lightIds:M.map(L=>L.id),baseIntensity:Object.fromEntries(M.map(L=>[L.id,L.intensity]))},percent:C&&!C.on?0:100});break}default:break}w?.(T)},[r,b,v,g,n,c,w,o,i,t])}var Nb=require("react"),Wt=require("lucide-react");var ie=require("react/jsx-runtime");function TC({categories:e,selected:t,disabled:n,onChange:r}){let i=_e();return(0,ie.jsxs)("div",{className:"ri-annotationFilters",role:"group","aria-label":i("annotationCategories"),onPointerDown:o=>o.stopPropagation(),children:[(0,ie.jsx)("span",{children:i("annotations")}),(0,ie.jsx)("button",{type:"button","aria-pressed":t===null,disabled:n,onClick:()=>r(null),children:i("all")}),e.map(o=>(0,ie.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 PC({onCancel:e}){let t=_e();return(0,ie.jsxs)("div",{className:"ri-isolationPill",role:"status",onPointerDown:n=>n.stopPropagation(),children:[(0,ie.jsx)("span",{className:"ri-isolationPill__label",children:t("decalDragHint")}),(0,ie.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:e,children:t("cancel")})]})}function AC({label:e,onShowAll:t}){let n=_e();return(0,ie.jsxs)("div",{className:"ri-isolationPill",onPointerDown:r=>r.stopPropagation(),children:[(0,ie.jsx)("span",{className:"ri-isolationPill__label",children:e}),(0,ie.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("showAll")})]})}function EC({groups:e,activeVariants:t,onSelect:n}){let r=_e();return(0,ie.jsx)(ie.Fragment,{children:e.map((i,o)=>(0,ie.jsxs)("div",{className:"ri-variantPicker",role:"group","aria-label":i.name??r("materialVariants"),onPointerDown:a=>a.stopPropagation(),children:[i.name?(0,ie.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,ie.jsxs)("button",{type:"button",className:`ri-variantPicker__option ${s?"ri-variantPicker__option--active":""}`,"aria-pressed":s,onClick:()=>n(a.name),children:[a.swatch?(0,ie.jsx)("span",{className:"ri-variantPicker__swatch",style:{background:a.swatch},"aria-hidden":"true"}):null,a.label]},a.name)})]},i.name??`group-${o}`))})}function RC({count:e,active:t,index:n,navigating:r,onStart:i,onPrevious:o,onNext:a,onStop:s}){let l=_e();return t?(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsxs)("button",{className:"ri-tourButton",onClick:o,disabled:r||e===0||n<=0,title:l("previousAnnotation"),children:[(0,ie.jsx)(Wt.ChevronLeft,{size:16}),(0,ie.jsx)("span",{children:l("previous")})]}),(0,ie.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:s,title:l("stopGuidedTour"),children:(0,ie.jsx)(Wt.Square,{size:16})}),(0,ie.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:a,disabled:r||e===0,title:l("nextAnnotation"),children:[(0,ie.jsx)("span",{children:l("next")}),(0,ie.jsx)(Wt.ChevronRight,{size:16})]})]}):(0,ie.jsx)("button",{className:"ri-navButtonSingle",onClick:i,disabled:e===0,title:l("startGuidedTour"),children:l("guidedTour")})}function OC({fullscreen:e,disabled:t}){let n=_e();return(0,ie.jsxs)("div",{className:"mv-fullscreenWrapper",children:[e.error&&(0,ie.jsx)("div",{className:"mv-fullscreenError",role:"alert",children:n.message(e.error)}),(0,ie.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,ie.jsx)(Wt.Minimize,{}):(0,ie.jsx)(Wt.Maximize,{})})]})}function DC({open:e,current:t,disabled:n,onSelect:r,onToggle:i}){let o=_e();return(0,ie.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:a=>a.stopPropagation(),children:[e&&(0,ie.jsxs)("div",{className:"mv-controllersMenu",children:[(0,ie.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("orbit"),children:o("orbitControl")}),(0,ie.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("pointerLock"),children:o("pointLock")})]}),(0,ie.jsx)("button",{className:"mv-controllersButton",onClick:i,title:o("cameraController"),"aria-label":o("cameraControllerSettings"),disabled:n,children:(0,ie.jsx)(Wt.Orbit,{size:15})})]})}function LC({menu:e,recording:t,hasScene:n,canCaptureImage:r,canRecord:i,hasCinematic:o,hasMultipleModels:a=!1}){let s=_e(),l=(0,Nb.useId)(),c=(0,Nb.useId)(),{isDownloading:d,downloadMenuOpen:p,uvExportError:u,toggleDownloadMenu:f,handleDownloadMesh:m,handleDownloadSeparateMeshes:v,handleDownloadScreenshot:g,handleDownloadUvLayout:b,handleDownloadVideo:h,videoFormat:y,setVideoFormat:w,videoExportError:T}=e;return(0,ie.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:x=>x.stopPropagation(),children:[p&&(0,ie.jsxs)("div",{className:"mv-downloadMenu",children:[(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:m,disabled:d||t||!n,"aria-describedby":l,children:[(0,ie.jsx)(Wt.Box,{size:14}),s(a?"downloadCombinedGLB":"downloadGLB")]}),(0,ie.jsx)("p",{className:"mv-downloadMenuDescription",id:l,children:s("downloadGLBDescription")}),e.openConfiguredAR&&(0,ie.jsxs)("button",{type:"button",className:"mv-downloadMenuItem",onClick:e.openConfiguredAR,disabled:t||!n,"aria-haspopup":"dialog",children:[(0,ie.jsx)(Wt.Box,{size:14}),s("arConfiguredButton")]}),a&&(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:v,disabled:d||t||!n,"aria-describedby":c,children:[(0,ie.jsx)(Wt.Box,{size:14}),s("downloadSeparateGLBs")]}),(0,ie.jsx)("p",{className:"mv-downloadMenuDescription",id:c,children:s("downloadSeparateGLBsDescription")})]}),(0,ie.jsx)("div",{className:"mv-downloadMenuDivider"}),r&&(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:g,disabled:t||!n,children:[(0,ie.jsx)(Wt.Camera,{size:14}),s("downloadPNG")]}),(0,ie.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:b,disabled:t||!n,children:[(0,ie.jsx)(Wt.FileImage,{size:14}),s("downloadUVLayout")]}),(0,ie.jsx)("div",{className:"mv-downloadMenuDivider"}),(0,ie.jsxs)("label",{className:"mv-downloadMenuItem",children:[s("videoFormat"),(0,ie.jsxs)("select",{"aria-label":s("videoFormat"),value:y,onChange:x=>w(x.target.value),children:[(0,ie.jsx)("option",{value:"auto",children:s("auto")}),(0,ie.jsx)("option",{value:"webm",disabled:!Yi("webm"),children:"WebM"}),(0,ie.jsx)("option",{value:"mp4",disabled:!Yi("mp4"),children:"MP4"}),(0,ie.jsx)("option",{value:"gif",disabled:!Yi("gif"),children:"GIF"})]})]}),(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{h("turntable")},disabled:t||!i||!Yi(y),children:[(0,ie.jsx)(Wt.Play,{size:14}),s("recordTurntableVideo")]}),o&&(0,ie.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{h("cinematic")},disabled:t||!i||!Yi(y),children:[(0,ie.jsx)(Wt.Play,{size:14}),s("recordCinematicVideo")]}),!Yi()&&!Yi("gif")&&(0,ie.jsx)("div",{className:"mv-downloadMenuNotice",role:"status",children:s("videoUnsupported")}),T&&(0,ie.jsx)("div",{className:"mv-downloadMenuNotice",role:"alert",children:s.message(T)}),u&&(0,ie.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:s.message(u)})]}),(0,ie.jsx)("button",{className:"mv-downloadButton",onClick:f,disabled:d||t||!n,title:s("downloadOptions"),children:d?(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsx)("span",{className:"mv-downloadButton__spinner"}),s("exporting")]}):(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsx)(Wt.Download,{size:15}),s("download")]})})]})}function IC({x:e,y:t,form:n,setForm:r,onOk:i,onCancel:o}){let a=_e();return(0,ie.jsxs)("div",{className:"ri-annotationPopup",style:{left:e,top:t},onPointerDown:s=>s.stopPropagation(),onClick:s=>s.stopPropagation(),children:[(0,ie.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,ie.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,ie.jsxs)("div",{className:"ri-annotationActions",children:[(0,ie.jsx)("button",{onClick:i,className:`ri-annotationOkBtn ${n.title.trim()?"":"disabled"}`,disabled:!n.title.trim(),children:a("ok")}),(0,ie.jsx)("button",{onClick:o,className:"ri-annotationCancelBtn",children:a("cancel")}),(0,ie.jsx)("div",{className:"ri-annotationIcons"})]})]})}var au=require("react");var kC=require("lucide-react");var ou=require("react/jsx-runtime");function BC({requiredTier:e,feature:t}){return(0,ou.jsxs)("div",{className:"bb-tierLock",children:[(0,ou.jsx)(kC.Lock,{size:16}),(0,ou.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",q_[e]," plan or higher."]})]})}var Me=require("react/jsx-runtime");function NC({section:e,onChange:t}){let{isInsideEditor:n,tier:r}=Qo(),i=n&&!tm(r,"sectionPlanes"),[o,a]=(0,au.useState)(""),s=e.mode??"plane",l=e.planes??[],c=l.find(m=>m.id===e.activePlaneId)??l[0],d=s==="planes"?c:e,p=m=>t(s==="planes"?{planes:l.map(v=>v.id===c?.id?{...v,...m}:v)}:m),u={x:0,y:1,z:2},f=()=>globalThis.crypto?.randomUUID?.()??`section-${Date.now()}-${Math.random().toString(36).slice(2)}`;return(0,Me.jsxs)("div",{className:"ri-sectionControls",children:[i?(0,Me.jsx)(BC,{requiredTier:"starter",feature:"Multiple planes and section boxes"}):null,(0,Me.jsxs)("label",{children:["Cut type",(0,Me.jsxs)("select",{value:s,disabled:i,onChange:m=>{let v=m.target.value;t({mode:v,...v==="planes"&&!l.length?{planes:[{id:"cut-1",name:"Plane 1",axis:e.axis,position:e.position,flip:e.flip,enabled:!0,...e.normal?{normal:e.normal}:{}}],activePlaneId:"cut-1"}:{}})},children:[(0,Me.jsx)("option",{value:"plane",children:"Single plane"}),(0,Me.jsx)("option",{value:"planes",children:"Multiple planes"}),(0,Me.jsx)("option",{value:"box",children:"Section box"})]})]}),s==="planes"&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Active plane",(0,Me.jsx)("select",{value:c?.id??"",onChange:m=>t({activePlaneId:m.target.value}),children:l.map(m=>(0,Me.jsxs)("option",{value:m.id,children:[m.name,m.enabled?"":" (off)"]},m.id))})]}),(0,Me.jsxs)("div",{className:"ri-sectionControls__actions",children:[(0,Me.jsx)("button",{type:"button",disabled:l.length>=6,onClick:()=>{let m=f();t({planes:[...l,{id:m,name:`Plane ${l.length+1}`,axis:"x",position:.5,flip:!1,enabled:!0}],activePlaneId:m})},children:"Add plane"}),(0,Me.jsx)("button",{type:"button",disabled:!c,onClick:()=>t({planes:l.filter(m=>m.id!==c?.id),activePlaneId:l.find(m=>m.id!==c?.id)?.id}),children:"Remove plane"})]}),c&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Name",(0,Me.jsx)("input",{value:c.name,maxLength:200,onChange:m=>p({name:m.target.value.trim()||"Plane"})})]}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:c.enabled,onChange:m=>p({enabled:m.target.checked})}),"Enable this plane"]})]})]}),s==="box"?(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Draggable face",(0,Me.jsx)("select",{value:e.activePlaneId?.match(/^[xyz]-(min|max)$/)?e.activePlaneId:"x-min",onChange:m=>t({activePlaneId:m.target.value}),children:["x","y","z"].flatMap(m=>["min","max"].map(v=>(0,Me.jsxs)("option",{value:`${m}-${v}`,children:[m.toUpperCase()," ",v]},`${m}-${v}`)))})]}),(0,Me.jsx)("div",{className:"ri-sectionControls__bounds",children:["x","y","z"].flatMap(m=>["min","max"].map(v=>{let g=(e.box??{min:[0,0,0],max:[1,1,1]})[v][u[m]];return(0,Me.jsxs)("label",{children:[m.toUpperCase()," ",v,(0,Me.jsxs)("output",{children:[Math.round(g*100),"%"]}),(0,Me.jsx)("input",{"aria-label":`${m.toUpperCase()} ${v}`,type:"range",min:"0",max:"1",step:".001",value:g,onChange:b=>t(pm(e,`${m}-${v}`,Number(b.target.value)))})]},m+v)}))}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:!!e.invertBox,onChange:m=>t({invertBox:m.target.checked})}),"Keep outside box"]})]}):d&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Orientation",(0,Me.jsxs)("select",{value:d.normal?"custom":d.axis,onChange:m=>m.target.value==="custom"?p({normal:[1,1,0]}):p({axis:m.target.value,normal:void 0}),children:[(0,Me.jsx)("option",{value:"x",children:"X"}),(0,Me.jsx)("option",{value:"y",children:"Y"}),(0,Me.jsx)("option",{value:"z",children:"Z"}),(0,Me.jsx)("option",{value:"custom",children:"Angled plane"})]})]}),d.normal&&(0,Me.jsx)("div",{className:"ri-sectionControls__vector",children:[0,1,2].map(m=>(0,Me.jsxs)("label",{children:["Normal ","XYZ"[m],(0,Me.jsx)(AL,{label:`Normal ${"XYZ"[m]}`,value:d.normal[m],onChange:v=>{let g=[...d.normal];g[m]=v,Math.hypot(...g)>1e-8&&p({normal:g})}})]},m))}),(0,Me.jsxs)("label",{children:["Position",(0,Me.jsxs)("output",{children:[Math.round(d.position*100),"%"]}),(0,Me.jsx)("input",{type:"range",min:"0",max:"1",step:".001","aria-label":"Section position",value:d.position,onChange:m=>p({position:Number(m.target.value)})})]}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:d.flip,onChange:m=>p({flip:m.target.checked})}),"Keep the other side"]})]}),(0,Me.jsxs)("details",{children:[(0,Me.jsxs)("summary",{children:["Saved section presets (",e.presets?.length??0,")"]}),(0,Me.jsxs)("form",{onSubmit:m=>{m.preventDefault();let v=o.trim();!v||(e.presets?.length??0)>=32||(t({presets:[...e.presets??[],{id:f(),name:v,settings:ql(e)}]}),a(""))},children:[(0,Me.jsxs)("label",{children:["Preset name",(0,Me.jsx)("input",{value:o,maxLength:200,onChange:m=>a(m.target.value)})]}),(0,Me.jsx)("button",{disabled:!o.trim()||(e.presets?.length??0)>=32,children:"Save current section"})]}),e.presets?.map(m=>(0,Me.jsxs)("div",{className:"ri-sectionControls__actions",children:[(0,Me.jsx)("button",{type:"button",onClick:()=>t({...ql(m.settings),normal:m.settings.normal,planes:m.settings.planes,activePlaneId:m.settings.activePlaneId,box:m.settings.box,invertBox:m.settings.invertBox,mode:m.settings.mode}),children:m.name}),(0,Me.jsx)("button",{type:"button","aria-label":`Delete preset ${m.name}`,onClick:()=>t({presets:e.presets?.filter(v=>v.id!==m.id)}),children:"Delete"})]},m.id))]}),(0,Me.jsx)("p",{children:"Visual cuts of the active asset. Multiple planes keep their common region. Presets are saved with your scene."})]})}function AL({label:e,value:t,onChange:n}){let[r,i]=(0,au.useState)(String(t));return(0,au.useEffect)(()=>i(String(t)),[t]),(0,Me.jsx)("input",{type:"number",step:".1","aria-label":e,value:r,onChange:o=>{let a=o.target.value;i(a),a.trim()&&Number.isFinite(Number(a))&&n(Number(a))},onBlur:()=>i(String(t))})}var VC=require("react"),jC=require("qrcode.react"),qt=require("lucide-react");var Ie=require("react/jsx-runtime");function UC({top:e,configuredHandoff:t=!1,xrStore:n,arSupported:r,vrSupported:i,quickLookSupported:o,mobileHandoffUrl:a,mobileHandoffOpen:s,onQuickLook:l,onOpenMobileHandoff:c}){let d=_e();return(0,Ie.jsxs)("div",{className:"ri-xrTools",style:{top:`${e}px`},children:[!r&&o&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:l,title:d("viewThisModelInARWithAppleQuickLook"),children:[(0,Ie.jsx)(qt.Box,{size:16}),d("viewInAR")]}),(a||t&&!o)&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:c,title:d(t?"arConfiguredTitle":"openThisExperienceOnAPhoneForAR"),"aria-haspopup":"dialog","aria-expanded":s,children:[(0,Ie.jsx)(qt.QrCode,{size:16}),(0,Ie.jsx)("span",{children:d(t?"arConfiguredButton":"openOnPhone")})]}),n&&r&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>n.enterAR().catch(p=>{console.error("Failed to enter AR session:",p)}),title:d("viewThisModelInYourSpace"),children:[(0,Ie.jsx)(qt.Smartphone,{size:16}),(0,Ie.jsx)("span",{children:d("enterAR")})]}),n&&i&&(0,Ie.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>n.enterVR().catch(p=>{console.error("Failed to enter VR session:",p)}),title:d("viewThisModelInVR"),children:[(0,Ie.jsx)(qt.RectangleGoggles,{size:16}),(0,Ie.jsx)("span",{children:d("enterVR")})]})]})}function zC({url:e,onClose:t}){let n=_e();return(0,Ie.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:r=>{r.target===r.currentTarget&&t()},children:(0,Ie.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,Ie.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:t,"aria-label":n("closePhoneHandoff"),children:(0,Ie.jsx)(qt.X,{size:18})}),(0,Ie.jsx)(qt.Smartphone,{size:22,"aria-hidden":"true"}),(0,Ie.jsx)("h2",{id:"ri-mobileHandoffTitle",children:n("viewInAR")}),(0,Ie.jsx)("p",{children:n("arScanCode")}),(0,Ie.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,Ie.jsx)(jC.QRCodeSVG,{value:e,size:208,level:"M",marginSize:4,title:n("qrCodeToOpenThisModelOnAPhone")})})]})})}function FC({top:e,active:t,onToggle:n}){let r=_e();return(0,Ie.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${e}px`},children:(0,Ie.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,Ie.jsx)(qt.Grid3X3,{size:16})})})}function HC({top:e,open:t,factor:n,onToggleOpen:r,onFactorChange:i}){let o=_e();return(0,Ie.jsxs)("div",{className:"ri-explodeTools",style:{top:`${e}px`},children:[(0,Ie.jsx)("button",{type:"button",className:`ri-measureButton ${t||n>0?"ri-measureButton--active":""}`,onClick:r,title:o("explodedView"),"aria-pressed":t,children:(0,Ie.jsx)(qt.Expand,{size:16})}),t&&(0,Ie.jsx)("div",{className:"ri-explodeSlider",onPointerDown:a=>a.stopPropagation(),children:(0,Ie.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 GC({top:e,section:t,onChange:n}){let r=_e(),[i,o]=(0,VC.useState)(!1);return(0,Ie.jsxs)("div",{className:"ri-sectionTools",style:{top:`${e}px`},children:[(0,Ie.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,Ie.jsx)(qt.Slice,{size:16})}),t.enabled&&(0,Ie.jsx)("button",{type:"button",className:"ri-measureButton","aria-label":"Section settings",title:"Section settings","aria-expanded":i,onClick:()=>o(a=>!a),children:(0,Ie.jsx)(qt.ChevronDown,{size:14})}),t.enabled&&i&&(0,Ie.jsx)("div",{className:"ri-sectionPanel",onPointerDown:a=>a.stopPropagation(),children:(0,Ie.jsx)(NC,{section:t,onChange:n})})]})}function WC({top:e,playing:t,disabled:n,onPlay:r,onPause:i,onStop:o}){let a=_e();return(0,Ie.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${e}px`},children:[(0,Ie.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,Ie.jsx)(qt.Pause,{size:16}):(0,Ie.jsx)(qt.Play,{size:16})}),t&&(0,Ie.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:o,title:a("stopCinematicAndResetCamera"),children:(0,Ie.jsx)(qt.Square,{size:16})})]})}function qC({progress:e,onCancel:t}){let n=_e();return(0,Ie.jsx)("div",{className:"ri-recordingOverlay",onPointerDown:r=>r.stopPropagation(),children:(0,Ie.jsxs)("div",{className:"ri-isolationPill",role:"status","aria-live":"polite",children:[(0,Ie.jsx)("span",{className:"ri-isolationPill__label",children:n("recordingVideo",{progress:e})}),(0,Ie.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("cancel")})]})})}function XC(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 Rn=require("three");function $C(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 YC(e,t,n){let r=t?.camera;if(!(r instanceof Rn.PerspectiveCamera))return null;let o=(e instanceof Rn.Box3?e:new Rn.Box3().setFromObject(e)).getSize(new Rn.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 KC(e,t){let n=e.camera;if(!(n instanceof Rn.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 Pm={paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5},su={kind:"model"};function ZC(e,t){let n=new Rn.Box3().setFromObject(t);return n.isEmpty()?!1:(n.expandByScalar(n.getSize(new Rn.Vector3).length()*.05),n.containsPoint(e.getTarget(new Rn.Vector3)))}function QC(e,t){return e.getTarget(new Rn.Vector3).distanceTo(t)<=Math.max(e.distance,1)*.001}async function Vb(e,t,n=.6){let r=e.smoothTime;e.smoothTime=As(e,n);try{return await t()}finally{e.smoothTime=r}}async function JC(e,t,{flyIn:n,onStart:r,invalidate:i}){if(n){let o=(t instanceof Rn.Box3?t:new Rn.Box3().setFromObject(t)).getBoundingSphere(new Rn.Sphere),a=o.center.clone(),l=e.getPosition(new Rn.Vector3).clone().sub(e.getTarget(new Rn.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 Vb(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 eT=require("react");function tT({enabled:e,canvasAreaElement:t,fitAttemptedRef:n,fitInFlightRef:r,controlsRef:i,cameraFramingRef:o,nodeRefsMap:a,fitScene:s}){(0,eT.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(QC(p,u.target))return}else if(u.kind==="object"&&p){let f=a.current[u.key];if(f&&ZC(p,f)){p.fitToBox(f,!0,Pm).catch(()=>{});return}}s()},150))});return d.observe(l),()=>{d.disconnect(),c&&clearTimeout(c)}},[t,s,e])}var Q=require("react/jsx-runtime");function Am(e){let n=e.split(/[?#]/)[0].split("/");return(n[n.length-1]||e).replace(/\.[^./]+$/,"")||e}var EL=Object.freeze({}),RL=[],OL={};function jb(e){let t=s0(pw(e)),n=t.props,r=kd(n.activeModelId??Ae(n.models?.find(g=>g.url===n.modelUrl)??{url:n.modelUrl}),n.tilesetUrl),i=(0,I.useRef)(r);i.current=r;let o=(0,I.useRef)(null),a=(0,I.useRef)(null),s=(0,I.useCallback)(()=>{let g=a.current;g&&(o.current=g.snapshot())},[]),l=F0(s),c=ew(e),[d,p]=(0,I.useState)(null);(0,I.useEffect)(()=>()=>{d&&URL.revokeObjectURL(d)},[d]);let u=()=>{s();let g=i.current;a.current?.captureFrame().then(b=>{b&&(g===i.current?p(b):URL.revokeObjectURL(b))})};$i(()=>{o.current=null,p(null)},[r]);let f=(0,I.useRef)(null),m=Y0({loading:n.loading,reveal:n.reveal,rootRef:f,onPark:u}),{release:v}=l;return(0,I.useEffect)(()=>{m.live||v()},[m.live,v]),(0,Q.jsx)(sd,{labels:e.labels,children:(0,Q.jsxs)("div",{className:"ri-viewerSlot",ref:f,children:[t.error&&(0,Q.jsx)("div",{className:"ri-configuredARError",role:"alert",children:t.error}),m.live?(0,Q.jsx)(DL,{...n,contextRecovery:l,engagement:c,resumeRef:o,viewerHandleRef:a,offscreen:!m.visible,frame:d},l.generation):(0,Q.jsx)(Id,{className:"ri-viewer",background:ac(n.backgroundColor,n.sceneConfig),poster:d??n.poster,onReveal:m.awaitingReveal?m.reveal:void 0})]})})}function DL({labels:e,contextRecovery:t,engagement:n,modelUrl:r,tilesetUrl:i,tilesErrorTarget:o=8,tilesCacheSize:a=800,onObjectCatalog:s,modelFormat:l,licenseKey:c,licenseValidationUrl:d,hideLicenseCheckingOverlay:p=!1,objectBindings:u="auto",selectedObject:f,comparisonHighlights:m,multiSelectedKeys:v,selectedObjectRefs:g,selectedObjectOutlineColor:b,panelHoveredObject:h,onObjectBindingsChange:y,onObjectSelect:w,onObjectHover:T,onObjectDoubleClick:x,onDecalDoubleClick:D,onObjectContextMenu:A,decalMove:S,onObjectEditLeaseChange:M,onSelectionClear:_,onSceneLoaded:C,onModelLoaded:E,onAssetDiagnostics:L,onRuntimeStats:k,runtimeStatsIntervalMs:B,onLoadError:j,onProgress:R,onCameraControllerChange:O,cameraControllerType:N,onAction:H,onHiddenObjectsChange:Y,onCameraChange:ue,onViewerReady:be,onTextureUpload:X,onAnimationsReady:G,onSequencesReady:J,showSequenceControls:ee=!0,sequenceAutoPlay:fe=!0,onModelAnimationsReady:K,onAnnotationsChange:oe,activeAnnotation:ae,onActiveAnnotationChange:pe,camera:De,cameraLimits:te,backgroundColor:Fe,shadows:We=!0,showObjectBindingDataPanel:ge=!0,customObjectBindingDataPanel:Ce,customSceneObjectsPanel:Je,showSceneObjectsPanel:ve=!0,showDownloadButton:qe=!0,downloadFilename:he="model",showResetButton:de=!0,showFullscreenButton:ze=!1,showLoadingOverlay:Pe=!0,showMouseController:ft=!1,mouseControllerPosition:At="center-bottom",mouseControllerOpacity:se=1,moveSensitivity:Re=.08,zoomSensitivity:Ee=1,sceneConfig:nt,onSceneConfigChange:Qe,disableZoom:ut=!1,zoomOnSelected:Ke=!0,highlightOnHover:xe=!0,enableCameraControls:et=!0,onAutoFit:xt,refitOnResize:Dn=!0,renderMode:pi="demand",maxDpr:yn=2,preserveDrawingBuffer:ho=!1,webgpu:ir=!1,performanceProfile:Vn="auto",dracoDecoderPath:mi,ktx2TranscoderPath:go,meshopt:en=!0,showMeasureTools:nn=!1,showUvCheckerButton:or=!1,showExplodeControls:Ni=!1,showMaterialVariants:hu=!0,showObjectNavigator:Vi=!0,showSectionTools:ji=!1,isolation:sa,onIsolationChange:bo,showIsolateControls:us=!1,cinematic:Gr,measurementUnit:yo="m",measurements:vl,onMeasurementsChange:la,measurementSettings:gu,measurementModelId:Qm,onMeasurementSettingsChange:ca,enableXR:ds=!1,usdzUrl:U,arScaleMode:z="normalized",mobileHandoffUrl:F,arHandoff:ne,showAnnotationNavigation:Z=!0,showAnnotationOnHover:Se=!1,showAnnotationFilters:Te=!0,annotationCategories:Nt,onAnnotationCategoriesChange:wt,moveModeEnabled:Ot=!1,scaleModeEnabled:St=!1,objectTransformSpace:It="world",enableKeyboardNavigation:rn=!1,reducedMotion:Le="user",showViewGizmo:dn=!1,overlay:qn,unsafe_sceneChildren:ar,autoRotate:xl,autoRotateSpeed:Jn,onTexturePositioningChange:Ln,endTexturePositioningRef:vo,texturePositioning:Kb,extraModelUrls:VT,onExtraModelError:Zb,onExtraModelLoaded:bu,originalNodePoses:jT,models:Et,mergeModels:Jm,onMergeModelLoaded:Qb,onMergeModelError:Jb,poster:ey,resumeRef:ty,viewerHandleRef:ef,offscreen:UT,frame:ny,onModelChange:ry,activeModelId:zT,onActiveModelChange:tf}){let jn=_e(),Ge=zT??Ae(Et?.find(P=>P.url===r)??{url:r}),iy=Et?.find(P=>Ae(P)===Ge)?.visible!==!1,Wr=kd(Ge,i),[pn]=(0,I.useState)(()=>ty.current?.model===Wr?ty.current:null),xo=N1(Le);(0,I.useEffect)(()=>()=>n.interrupt(),[n]);let oy=(0,I.useRef)(n);oy.current=n;let{autoBindings:nf,controlled:ay,currentBindings:Ve,applyBindings:qr,bindingsForModel:ps,modelEdits:FT}=P0({modelUrl:r,activeModelId:Ge,tilesetUrl:i,models:Et,objectBindings:u,onChange:y,initialBindings:pn?.objectBindings,initialModelEdits:pn?.modelBindingEdits}),{isInsideEditor:yu,activeTab:rf,activeSubTab:of,openMeasurementsPanel:HT}=Qo(),GT=yu&&rf==="scene"&&of==="Lighting",vu=m1(c,d),[af,WT]=(0,I.useState)(()=>pn?.lightEdits??{}),[xu,sy]=(0,I.useState)(pn?.variantEdit),[wu,ly]=(0,I.useState)(pn?.sectionEdit),[Su,cy]=(0,I.useState)(()=>pn?.measurementEdits??{}),sf=JSON.stringify(nt?.measurements??null),uy=(0,I.useRef)(new Map);(0,I.useEffect)(()=>{let P=uy.current.get(Wr);uy.current.set(Wr,sf),P!==void 0&&P!==sf&&cy(V=>{let W={...V};return delete W[Wr],W})},[Wr,sf]);let Ze=(0,I.useMemo)(()=>{let P=$h(nt??dr,af);return xu!==void 0&&(P={...P,model:wg(P.model,xu)}),wu!==void 0&&(P={...P,section:{...Tr,...P.section,...wu}}),Su[Wr]&&(P={...P,measurements:Su[Wr]}),P},[nt,af,xu,wu,Su,Wr]),ms=(0,I.useRef)(Ze);ms.current=Ze;let wl=(0,I.useCallback)(P=>{let V=ms.current,W={settings:{},items:[],...V.measurements,...P};Qe?Qe({...V,measurements:W}):cy(le=>({...le,[Wr]:W}))},[Wr,Qe]),dy=(0,I.useCallback)(P=>{la?la(P):wl({items:P})},[la,wl]),py=(0,I.useCallback)(P=>{ca?ca(P):wl({settings:P})},[ca,wl]),Mu=vl??Ze.measurements?.items??RL,Sl=gu??Ze.measurements?.settings??OL,lf=Qm??Yl(Ge),Ml=Ia(Sl,yo),cf=(0,I.useMemo)(()=>Js(Ze.model),[Ze.model]);(0,I.useEffect)(()=>{n.setActiveVariants(cf)},[cf,n]);let qT=nt?Js(nt.model).join(`
3741
- `):"";$i(()=>{sy(void 0)},[qT,Ge,r]);let XT=JSON.stringify(nt?.section??null);$i(()=>{ly(void 0)},[XT,Ge,r]);let my=(0,I.useCallback)(P=>{if(Qe){let V=ms.current;Qe({...V,section:{...Tr,...V.section,...P}});return}ly(V=>({...V,...P}))},[Qe]),[fy,$T]=(0,I.useState)(!1),hy=(0,I.useRef)([]),YT=(0,I.useCallback)(P=>{let V=ms.current,W=Js(V.model),le=hy.current,ye=le.find(dt=>dt.variants.some(Ut=>Ut.name===P)),_t=W.find(dt=>ye?ye.variants.some(Ut=>Ut.name===dt):dt===P)??null,st=W.includes(P)?W.filter(dt=>dt!==P):sp(W,P,le);if(n.chooseVariant(st.includes(P)?P:null,_t,ye?.name??null),Qe){Qe({...V,model:wg(V.model,st)});return}sy(st)},[Qe,n]),uf=(0,I.useCallback)(P=>{if(Qe){Qe($h(ms.current,P));return}WT(V=>{let W={...V};for(let[le,ye]of Object.entries(P))W[le]={...V[le],...ye};return W})},[Qe]),[df,pf]=(0,I.useState)(null),[mf,gy]=(0,I.useState)(null),[by,yy]=(0,I.useState)(null),vy=(0,I.useRef)(0),[ff,xy]=(0,I.useState)(null),[wy,Sy]=(0,I.useState)(pn?.uvCheckerOverride??null),_l=Ze.model.renderer==="uv-checker",hf=or?wy??_l:_l,Un=(0,I.useMemo)(()=>{let P=hf?"uv-checker":_l?"pbr":Ze.model.renderer;return P===Ze.model.renderer?Ze:{...Ze,model:{...Ze.model,renderer:P}}},[_l,Ze,hf]);$i(()=>{Sy(null)},[Ge,r,Ze.model.renderer,or,i]);let My=(0,I.useMemo)(()=>ac(Fe,Ze),[Fe,Ze]),_u=(0,I.useMemo)(()=>({dracoDecoderPath:mi,ktx2TranscoderPath:go,meshopt:en}),[mi,go,en]),KT=(0,I.useMemo)(()=>u0(Vn),[Vn]),rt=(0,I.useRef)(null),[_y,ZT]=(0,I.useState)(()=>pn&&pn.cameraControllerType!=="pointerLock"?pn.cameraControllerType:"orbit"),[QT,Cy]=(0,I.useState)(!1),ua=N!==void 0?N:_y,Cu=(0,I.useCallback)(P=>{Cy(!1),P!==ua&&(ZT(P),O?.(P))},[ua,O]),[Cl,Ty]=(0,I.useState)(!1),Py=(0,I.useRef)({dragging:!1,endedAt:-1/0}),Ay=(0,I.useCallback)(P=>{Py.current={dragging:P,endedAt:P?-1/0:performance.now()},Ty(P)},[]),[Xn,Tl]=(0,I.useState)(null),Pl=!!(Kb||Ln||vo),Ey=(0,I.useRef)(Ln);Ey.current=Ln,(0,I.useEffect)(()=>{Ey.current?.(Xn)},[Xn]),(0,I.useEffect)(()=>{if(vo)return vo.current=()=>Tl(null),()=>{vo.current=null}},[]),(0,I.useEffect)(()=>{rt.current&&(rt.current.dollySpeed=Math.max(Ee,0))},[Ee]),(0,I.useEffect)(()=>{rt.current&&(rt.current.enabled=et&&!Cl&&!fy&&!Xn)},[et,Cl,fy,Xn]);let gf=(0,I.useRef)(null),bf=(0,I.useRef)(new Map),Ry=(0,I.useRef)(null),JT=(0,I.useRef)(null),wr=(0,I.useRef)(null),Oy=(0,I.useRef)({});(0,I.useEffect)(()=>()=>{for(let P of Object.values(Oy.current))URL.revokeObjectURL(P)},[]);let vn=(0,I.useRef)({}),fs=(0,I.useRef)(su),[eP,tP]=(0,I.useState)(0),yf=(0,I.useCallback)(()=>{tP(P=>P+1)},[]),wo=(0,I.useRef)({}),on=!!(Et&&Et.length>=1&&!i),Tu=(0,I.useRef)(Et);Tu.current=Et;let Pu=(0,I.useRef)(new Map),{scenesByUrlRef:da,cameraHomesByUrlRef:So,materialRefsByUrlRef:Dy,getMaterialRefsForUrl:nP}=T0(on,Et),Au=(0,I.useRef)(null),Ly=(0,I.useRef)(null),Eu=B0(ze),Xr=(0,I.useRef)(null),[vf,rP]=(0,I.useState)(null),iP=(0,I.useCallback)(P=>{Xr.current=P,rP(P)},[]);fC({canvasAreaElement:vf,controlsRef:rt,enabled:rn&&et&&!Ot&&!St});let Ru=(0,I.useRef)(null),[pa,Ou]=(0,I.useState)({}),[Iy,xf]=(0,I.useState)(null),[Du,wf]=(0,I.useState)(null),[oP,aP]=(0,I.useState)(null),[sP,lP]=(0,I.useState)(null),[$r,ky]=(0,I.useState)(null),[cP,uP]=(0,I.useState)({}),Mt=(0,I.useRef)(null),Sf=(0,I.useRef)(null),By=(0,I.useRef)(r);By.current=r;let Lu=(0,I.useRef)(null),Mf=(0,I.useRef)(L);Mf.current=L;let hs=(0,I.useRef)(null),_f=(0,I.useRef)(0),Ny=(0,I.useRef)(null),[dP,pP]=(0,I.useState)(0),fi=(0,I.useRef)(!1),Al=(0,I.useRef)(!1),Cf=(0,I.useRef)(null),Tf=(0,I.useRef)(!!De);Tf.current=!!De;let Yr=(0,I.useRef)(null),Iu=(0,I.useRef)(pn?.camera?{camera:pn.camera,home:pn.home}:null),[ku,ma]=(0,I.useState)(!!r),[Mo,fa]=(0,I.useState)(!r||!!xt||!!De),[tn,Vy]=(0,I.useState)(!1),[Pf,jy]=(0,I.useState)([]),[El,Af]=(0,I.useState)(!1),[ha,Ef]=(0,I.useState)(null),[Uy,gs]=(0,I.useState)(!1),[mP,fP]=(0,I.useState)(0),Rf=(0,I.useRef)(""),zy=(0,I.useRef)(new Set),Fy=(0,I.useRef)(""),[Hy,Gy]=(0,I.useState)(!1),Of=(0,I.useRef)(new Set),[Wy,hP]=(0,I.useState)(0),[Df,gP]=(0,I.useState)(null),[bP,qy]=(0,I.useState)(!1),[Lf,Xy]=(0,I.useState)({total:0,missing:0}),[yP,$y]=(0,I.useState)("loadingModel"),[vP,If]=(0,I.useState)(null),hi=(0,I.useRef)({}),bs=(0,I.useCallback)(()=>{let P=rt.current;if(!P||Yr.current)return;Yr.current=fx(P,hs.current??Mt.current);let V=Cf.current;V?.usesSlots&&(So.current[V.url]=Yr.current)},[So]),[ys,Yy]=(0,I.useState)(()=>pn?.explodeFactor??0),[xP,Ky]=(0,I.useState)(!1);$i(()=>{Yy(0),Ky(!1)},[Ge,r,i]);let gi=(0,I.useMemo)(()=>{let P=Ze.cinematic,V=P?.enabled?{waypoints:P.waypoints,duration:P.duration,loop:P.loop,autoPlay:P.autoPlay}:null;return Gr===void 0?V&&(V.waypoints?.length??0)>=2?V:null:Gr===!1?null:Gr===!0?V??{}:{...V??{},...Gr}},[Gr,Ze]),[Rl,zn]=(0,I.useState)(!1),[Zy,_o]=(0,I.useState)(!1),kf=(0,I.useRef)(!1);(0,I.useEffect)(()=>{zn(!1),_o(!1),kf.current=!1},[Ge,r,i]),(0,I.useEffect)(()=>{if(!(!gi?.autoPlay||kf.current)&&tn&&Mo&&!ku){if(kf.current=!0,xo)return;zn(!0),_o(!1)}},[gi,tn,Mo,ku,xo]);let wP=(0,I.useCallback)(()=>{zn(!1),_o(!0)},[]),{captureVideo:Bf,cancelVideo:Nf,isRecording:Qy,recording:jt,progress:SP,onProgress:Jy}=k0({rendererCaptureRef:wr,controlsRef:rt,cinematicConfig:gi,ready:t.status==="ready"&&tn&&Mo&&!ku,modelUrl:`${Ge}|${i??""}`,onCaptureStart:wP});(0,I.useEffect)(()=>{t.status==="lost"&&(n.interrupt(),Nf(),zn(!1),rt.current?.stop())},[t.status,Nf,n]);let{xrStore:MP,inARSession:Vf,presenterRef:_P,arSupported:ev,vrSupported:tv,quickLookSupported:nv,resolvedMobileHandoffUrl:Bu,isMobileHandoffOpen:rv,arOverlay:CP,openMobileHandoff:TP,closeMobileHandoff:PP,openQuickLook:AP,handleARStateChange:EP}=uS({enableXR:ds,usdzUrl:U,mobileHandoffUrl:F,configuredHandoff:!!ne,engagement:n}),bi=(0,I.useMemo)(()=>cx(()=>zn(!1)),[Ge,r]),jf=(0,I.useMemo)(()=>({current:null}),[Ge,r]),iv=(0,I.useRef)(G);iv.current=G;let Uf=(0,I.useRef)(J);Uf.current=J;let ov=(0,I.useCallback)(P=>{jf.current=P,iv.current?.(P)},[jf]),av=(0,I.useMemo)(()=>{try{return Ro(Ze.sequences??[])}catch{return[]}},[Ze.sequences]);(0,I.useEffect)(()=>(Uf.current?.(tn?bi:null),()=>Uf.current?.(null)),[bi,tn]),(0,I.useEffect)(()=>()=>bi.destroy(),[bi]),(0,I.useEffect)(()=>{xo&&bi.pause()},[bi,xo]);let vs=R0(ir),sv=(0,I.useRef)(vs);sv.current=vs;let ga=vs==="webgpu",Nu=ga?null:MP,lv=ji||Ze.section?.enabled===!0;(0,I.useEffect)(()=>{if(!ga)return;let P=[lv&&"the section cut",(Ot||St)&&"the transform gizmo"].filter(Boolean);P.length!==0&&console.info(`[react-immersive] With WebGPU, ${P.join(" and ")} ${P.length>1?"aren't":"isn't"} available; ${P.length>1?"they need":"it needs"} WebGL.`)},[ga,lv,Ot,St]);let{annotations:eI,pendingAnnotation:ba,setPendingAnnotation:cv,annotationForm:RP,setAnnotationForm:zf,currentAnnotationIndex:OP,isNavigating:DP,localAnnotationCategories:LP,selectedAnnotationCategories:IP,visibleAnnotations:uv,availableAnnotationCategories:kP,annotationFiltersVisible:Ff,changeAnnotationCategories:BP,sortedAnnotations:Hf,currentAnnotation:dv,setActiveAnnotation:tI,focusAnnotation:nI,startGuidedTour:NP,goToPreviousAnnotation:VP,goToNextAnnotation:jP,stopGuidedTour:UP,closeViewingAnnotation:Vu,activeAnnotation:rI,activeViewingAnnotation:ju,isGuidedTourActive:Ol,handleAnnotationOk:zP,handleAnnotationCancel:FP,handleAnnotationMarkerClick:pv}=lC({sceneAnnotations:nt?.annotations,controlledAnnotationCategories:Nt,onAnnotationCategoriesChange:wt,showAnnotationFilters:Te,initialCategories:pn?.annotationCategories??null,controlledActiveAnnotation:ae,onActiveAnnotationChange:pe,onAnnotationsChange:oe,controlsRef:rt,sceneRef:Mt,annotationWorldPositionsRef:bf,tourCameraOffsetRef:gf,initialCameraStateRef:Yr,engagement:n,engagementRef:oy}),HP=Ze.section??Tr,mv=hu&&tn&&Pf.length>0;hy.current=Pf;let fv=de||qe||ze&&Eu.supported||Z&&Hf.length>0;hi.current=Ve,(0,I.useEffect)(()=>{if(!Xn)return;let P=Ve[Xn.objectKey]?.style?.material?.[Xn.textureKey]?.path;(!Pl||!P)&&Tl(null)},[Ve,Pl,Xn]);let Gf=(0,I.useRef)({}),[Uu,GP]=(0,I.useState)({});(0,I.useEffect)(()=>{let P={...Uu},V=!1,W=new Set;for(let[le,ye]of Object.entries(Ve)){W.add(le);let _t=ye.style?.material,st=Gf.current[le]??{},dt={};for(let an of zo){let Zr=_t?.[an]?.path;Zr&&(dt[an]=Zr,Zr!==st[an]&&(P[le]!==an&&(V=!0),P[le]=an))}let Ut=P[le];if(Ut&&!dt[Ut]){let an=zo.find(Zr=>!!dt[Zr]);an?P[le]=an:delete P[le],V=!0}Gf.current[le]=dt}for(let le of Object.keys(P))W.has(le)||(delete P[le],delete Gf.current[le],V=!0);V&&GP(P)},[Ve]);let Wf=(0,I.useMemo)(()=>Object.entries(Ve).map(([P,V])=>JSON.stringify([P,V.modelObjectId,V.transform??null])).sort().join(""),[Ve]),{measureMode:sr,measureModeRef:hv,measurePoints:qf,measurementTool:Xf,areaClosed:$f,measurementError:WP,selectMeasurementTool:qP,undoMeasurementPoint:XP,finishMeasureArea:$P,snapMode:YP,setSnapMode:KP,snapPreview:gv,handleMeasurePointerMove:ZP,clearSnapPreview:bv,showDimensions:Yf,measureBox:zu,modelBounds:QP,refreshBounds:yv,clearMeasurements:JP,toggleMeasureMode:eA,toggleDimensions:tA,handleMeasurePointerDown:nA,handleMeasureClick:rA,saveMeasurement:iA,canSaveMeasurement:oA,canCalibrate:aA,calibrate:sA,savedResults:lA,setSavedResults:vv,exportMeasurementJson:cA,exportMeasurementCsv:uA,importMeasurements:dA}=iS({canvasAreaRef:Xr,controlsRef:rt,sceneRef:Mt,modelUrl:Ge,tilesetUrl:i,measurementModelId:lf,savedMeasurements:Mu,measurementSettings:Sl,measurementUnit:yo,onMeasurementsChange:dy,onMeasurementSettingsChange:py,onCollectionChange:P=>{la?.(P.items),ca?.(P.settings),wl(P)},modelRotation:Ze.model.rotation,bindingTransformSignature:Wf,modelLoaded:tn,enabled:nn&&!jt}),pA=(0,I.useCallback)(()=>{if(!Et||Et.length<2)return null;let P=Et.map(V=>{let W=da.current[Ae(V)];if(!W)return null;let le=Ae(V)===Ge?wo.current:Dy.current[Ae(V)]?.current??{};return{scene:W,objectBindings:ps(V),matRefs:le,label:V.label||Am(V.url)}}).filter(V=>V!==null);return P.length>0?P:null},[Et,Ge,r,ps]),mA=(0,I.useCallback)(()=>{if(!Et||Et.length<2)return null;let P=Et.map(V=>{let W=da.current[Ae(V)];return W?{scene:W,label:V.label||Am(V.url)}:null}).filter(V=>V!==null);return P.length>0?P:null},[Et]);(0,I.useEffect)(()=>{(Rl||sr||jt||Vf||t.status!=="ready")&&bi.stop()},[bi,Rl,sr,jt,Vf,t.status]);let fA=(0,I.useCallback)(()=>{if(!tn)throw new Error("Wait for the current model to finish loading before preparing AR.");if(i)throw new Error("Streaming tiles are incomplete model data. Provide arHandoff.createUSDZ to prepare this asset.");let P=on?Et:void 0,V=P?P.filter(W=>W.visible!==!1).map(W=>{let le=Ae(W),ye=da.current[le];if(!ye)throw new Error("Wait for every visible model to finish loading before preparing AR.");return{scene:ye,instanceId:le,objectBindings:ps(W),materialOverrides:le===Ge?wo.current:Dy.current[le]?.current}}):Mt.current?[{scene:Mt.current,objectBindings:Ve,materialOverrides:wo.current}]:[];if(!V.length)throw new Error("Wait for a visible model to finish loading before preparing AR.");for(let W of V)wd(W.scene);return V},[tn,i,on,Et,ps,Ge,Ve]),[hA,gA]=(0,I.useState)(34),xv=(0,I.useRef)(void 0),bA=Kw({openConfiguredAR:ds&&ne?()=>xv.current?.():void 0,sceneRef:Mt,materialRefs:wo,rendererCaptureRef:wr,objectBindings:Ve,downloadFilename:he,getAllLoadedModels:pA,getAllLoadedModelUvSources:mA,captureVideo:Bf}),wv=(0,I.useMemo)(()=>Object.fromEntries(Object.entries(Ve).filter(([,P])=>P.visible===!1).map(([P])=>[P,!0])),[Ve]),Co=(0,I.useMemo)(()=>{let P=new WeakMap,V=new Map,W=new Map;for(let[le,ye]of Object.entries(Ve))P.set(ye,le),V.has(ye.id)||V.set(ye.id,le),W.has(ye.modelObjectId)||W.set(ye.modelObjectId,le);return{byReference:P,byId:V,byModelObjectId:W}},[Ve]),Kr=(0,I.useCallback)(P=>P?Co.byReference.get(P)??Co.byModelObjectId.get(P.modelObjectId)??Co.byId.get(P.id)??null:null,[Co]),Kf=f!==void 0,ya=Kf?f??null:sP,kt=Kr(ya);(0,I.useEffect)(()=>{n.setSelectedPart(kt)},[kt,n]);let va=kt?vn.current[kt]??null:null,yA=kt?Uu[kt]:void 0,Sv=Kr(xe?h??Du??oP:null),vA=Sv?vn.current[Sv]??null:null,Zf=g??(v?v.map(P=>vn.current[P]).filter(Boolean):null),Fu=(0,I.useMemo)(()=>{let P=Zf??(va&&Ve[kt??""]?.transform?.shear?[va]:null);if(!P?.length)return null;let V=new Set(P),W=Object.entries(vn.current).filter(([,le])=>V.has(le)).map(([le,ye])=>({key:le,node:ye,transform:Ve[le]?.transform}));return W.length>1||W.some(({transform:le})=>le?.shear)?W:null},[Zf,Ve,va,kt]),Mv=(0,I.useCallback)(P=>{aP(P),T?.(P)},[T]),_v=ge&&ya!==null&&kt!==null,xa=(kt?Ve[kt]:null)??ya,Dl=xa&&(xa.modelObjectId||xa.id)||null,Ll=Dl?cP[Dl]??null:null,[xA,Cv]=(0,I.useState)(""),Tv=(0,I.useRef)(null);(0,I.useEffect)(()=>{let P=Tv.current;if(P!==kt)if(Tv.current=kt,kt){let V=xa?.label||ya?.label||kt;Cv(jn("objectSelected",{name:V}))}else P&&Cv(jn("selectionCleared"))},[kt,xa,ya,jn]),(0,I.useEffect)(()=>{Y?.(wv)},[wv,Y]);let xs=(0,I.useCallback)((P,V)=>{if(ua==="pointerLock"){Cu("orbit");return}P&&V?n.viewPart({objectId:P.id,objectKey:Kr(P)??(P.modelObjectId||P.id),label:P.label,source:V}):P||n.setSelectedPart(null),Kf||lP(P),w?.(P)},[ua,Cu,Kf,w,Kr,n]),Pv=(0,I.useRef)(pn?.objectBindings?`${r}
3742
- ${i??""}`:null),Hu=(0,I.useCallback)((P,V)=>{if(!nf)return;let W=`${r}
3743
- ${i??""}`,le=Pv.current===W?hi.current:EL;Pv.current=W;let ye=hm(P,V);for(let _t of Object.keys(ye))le[_t]&&(ye[_t]=le[_t]);qr(ye)},[nf,r,i,qr]),{glowMemoryRef:Av,readObjectGlow:Gu,applyGlow:Qf}=_C({nodeRefsMap:vn,currentObjectBindingsRef:hi,applyObjectBindings:qr}),wA=(0,I.useCallback)(P=>{let V=kt;if(!V||!P)return;let W=hi.current[V];W&&qr({...hi.current,[V]:{...W,transform:{...W.transform,...P}}})},[qr,kt]),SA=(0,I.useCallback)(P=>{let V=hi.current,W={...V};for(let{key:le,transform:ye}of P){let _t=V[le];_t&&(W[le]={..._t,transform:{..._t.transform,...ye}})}qr(W)},[qr]),To=(0,I.useCallback)((P,V)=>Ve[P]?P:V?Kr(V):Co.byId.get(P)??Co.byModelObjectId.get(P)??null,[Ve,Kr,Co]),Wu=(0,I.useCallback)((P,V)=>{let W=To(P),le=W?Ve[W]:void 0;!W||!le||qr({...Ve,[W]:{...le,style:V(le.style)}})},[To,Ve,qr]),yi=(0,I.useCallback)(()=>{if($r){let P=pa[$r.objectId]?.hex;P!==void 0&&(Wu($r.objectId,V=>({...V,material:{...V?.material,baseColor:P}})),Ou(V=>({...V,[$r.objectId]:{}})))}ky(null)},[$r,pa,Wu]),Jf=(0,I.useCallback)(()=>{xs(null),xf(null),yi()},[xs,yi]),MA=(0,I.useCallback)((P,V,W,le,ye)=>{let _t=Ly.current,st=Xr.current,dt=rt.current?.camera;if(!_t)return{objectId:P,x:24,y:24};let Ut=_t.getBoundingClientRect(),an=12,Zr=Ut.width-V-an,_a=Ut.height-W-an,Ao=Math.max(an,(Ut.width-V)/2),Bl=Math.max(an,(Ut.height-W)/2),_s=To(P,le),Nl=_s?vn.current[_s]:null,Mr=(xi,wi)=>wi<=an?an:Math.min(Math.max(xi,an),wi);if(st&&dt&&Nl){let xi=st.getBoundingClientRect(),wi=new Bi.Vector3;new Bi.Box3().setFromObject(Nl).getCenter(wi),wi.project(dt);let uh=(wi.x+1)/2*xi.width+(xi.left-Ut.left),Eo=(1-wi.y)/2*xi.height+(xi.top-Ut.top);return{objectId:P,x:Mr(uh+24,Zr),y:Mr(Eo-W/2,_a)}}let vi=typeof ye?.screenX=="number"?ye.screenX-Ut.left:Ao,Vl=typeof ye?.screenY=="number"?ye.screenY-Ut.top:Bl;return{objectId:P,x:Mr(vi,Zr),y:Mr(Vl,_a)}},[To]),qu=CC({setCurrentAction:xf,bindingKeyIndex:Co,currentObjectBindings:Ve,applyObjectBindings:qr,resolveObjectKey:To,closeColorPicker:yi,setColorPicker:ky,setMaterialPopupsByObject:uP,setItemMaterials:Ou,getPopoverPosition:MA,decalRequestRef:vy,setDecalError:yy,setDecalDragging:xy,setDecalControl:gy,resolvedSceneConfigRef:ms,applyLightPatches:uf,readObjectGlow:Gu,applyGlow:Qf,glowMemoryRef:Av,setLightControl:pf,onAction:H});(0,I.useEffect)(()=>{if($r)return window.addEventListener("pointerdown",yi),()=>window.removeEventListener("pointerdown",yi)},[$r,yi]),(0,I.useEffect)(()=>{if(!ju)return;let P=V=>{if(Ru.current&&!Ru.current.contains(V.target)){if(V.target.closest?.(".ri-annotationMarker"))return;Vu()}};return document.addEventListener("mousedown",P),document.addEventListener("touchstart",P),()=>{document.removeEventListener("mousedown",P),document.removeEventListener("touchstart",P)}},[ju,Vu]),(0,I.useEffect)(()=>{if(!ba)return;let P=V=>{let W=V.target;if(W.closest?.(".ri-annotationPopup")||W.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let le=Xr.current;!le||!le.contains(W)||(cv(null),zf({title:"",description:""}))};return document.addEventListener("mousedown",P,!0),document.addEventListener("touchstart",P,!0),()=>{document.removeEventListener("mousedown",P,!0),document.removeEventListener("touchstart",P,!0)}},[ba]);let{handleFileChange:_A,triggerFileUpload:Ev,clearTexture:Rv,texturePositioningEnabled:CA,texturePositioningOverrides:TA,setMaterialTextureOffset:PA,setMaterialTextureRotation:AA,endMaterialTexturePositioning:EA}=SC({applyBindingStyle:Wu,resolveObjectKey:To,onTextureUpload:X,fileInputRef:Ry,pendingObjectId:JT,createdBlobUrls:Oy,texturePositioning:Kb,setMoveZoomTarget:Tl}),eh=(0,I.useRef)(be);eh.current=be;let Sr=(0,I.useCallback)(()=>{let P=rt.current;!P||!eh.current||eh.current({objectBindings:hi.current,homeCameraState:Yr.current,captureImage:V=>Qy()?Promise.reject(new Error("Wait for video export to finish before capturing an image.")):Ad(wr.current,V),captureVideo:Bf,invalidate:()=>wr.current?.invalidate(),rendererBackend:sv.current??"webgl",raw:{controls:P,scene:Mt.current,nodes:vn.current}})},[Bf,Qy]),Il=(0,I.useCallback)(async(P=!1)=>{let V=rt.current,W=hs.current??Mt.current;if(!V||!W)return!1;fs.current=su;try{return await JC(V,W,{flyIn:P,onStart:()=>fa(!0),invalidate:()=>wr.current?.invalidate()}),(hs.current??Mt.current)!==W?!1:(fi.current=!0,bs(),Sr(),!0)}catch(le){return console.error("Fit scene error:",le),!1}},[bs,Sr]);(0,I.useEffect)(()=>{let P={url:Ge,usesSlots:on},V=$C(Cf.current,P,(Tu.current??[]).map(st=>Ae(st)),da.current,So.current);if(Cf.current=P,fi.current=!1,Al.current=!1,Yr.current=on?So.current[Ge]??null:null,Mt.current=null,Sf.current=null,Lu.current=null,hs.current=null,Vy(!1),jy([]),Af(!1),Ef(null),gs(!1),Rf.current="",zy.current=new Set,Of.current=new Set,Xy({total:0,missing:0}),$y("loadingModel"),If(null),pn?.model!==kd(Ge,i)&&(Iu.current=null),!r){ma(!1),fa(!0);return}if(on&&Pu.current.has(Ge)){ma(!1),fa(!0);return}ma(!V),fa(V||!!xt||Tf.current);let W=!1,le=null,ye=st=>{le=setTimeout(_t,st)},_t=()=>{if(W||fi.current||Al.current||on&&Pu.current.has(Ge))return;let st=hs.current??Mt.current;if(!rt.current||!st){ye(100);return}_f.current=YC(st,rt.current,te?.maxDistance)??_f.current;let dt=Iu.current;if(dt){Iu.current=null,Z0(rt.current,dt.camera),fi.current=!0,dt.home?(Yr.current=dt.home,on&&(So.current[Ge]=dt.home)):bs(),Sr(),ma(!1),fa(!0),wr.current?.invalidate();return}if(ux(rt.current)||V){fi.current=!0,bs(),Sr(),ma(!1),fa(!0),wr.current?.invalidate();return}Al.current=!0,(xt?xt():Tf.current?Promise.resolve(!0):Il(!0)).then(an=>{W||(fi.current=an!==!1,fi.current?(bs(),Sr(),ma(!1)):W||ye(100))}).catch(()=>{fi.current=!1,W||ye(100)}).finally(()=>{W||(Al.current=!1)})};return ye(50),()=>{W=!0,le&&clearTimeout(le)}},[bs,So,te?.maxDistance,Il,Ge,r,Sr,xt,pn,i,on]),tT({enabled:Dn,canvasAreaElement:vf,fitAttemptedRef:fi,fitInFlightRef:Al,controlsRef:rt,cameraFramingRef:fs,nodeRefsMap:vn,fitScene:Il});let Xu=(0,I.useCallback)(P=>{let V=rt.current;if(!V)return;let W=P.cameraState;if(W?.position&&W?.target){let[_t,st,dt]=W.position,Ut=new Bi.Vector3(...W.target);V.setPosition(_t,st,dt,!0),V.setTarget(Ut.x,Ut.y,Ut.z,!0),fs.current={kind:"view",target:Ut};return}let le=Kr(P),ye=le?vn.current[le]:null;!le||!ye||(V.fitToBox(ye,!0,Pm).catch(()=>{}),fs.current={kind:"object",key:le})},[Kr]);(0,I.useEffect)(()=>{kt||(fs.current=su)},[kt]);let th=(0,I.useCallback)((P,V="canvas")=>{if(hv.current)return;let W=Py.current;W.dragging||performance.now()-W.endedAt<150||(zn(!1),yi(),xf(null),xs(P,V),!(ut||!Ke)&&Xu(P))},[xs,yi,Xu,ut,Ke]),{beginMoveZoom:Ov,handleMoveZoomPointerDown:RA}=gC({moveZoomTarget:Xn,setMoveZoomTarget:Tl,currentObjectBindingsRef:hi,materialRefsOut:wo,rendererCaptureRef:wr,canvasAreaRef:Xr,canvasAreaElement:vf,applyBindingStyle:Wu}),Dv=(0,I.useCallback)(P=>{if(!Pl)return!1;let V=Kr(P);if(!V)return!1;let W=Uu[V];return W?(Ov({objectKey:V,textureKey:W}),!0):!1},[Pl,Kr,Uu,Ov]),nh=(0,I.useRef)(!1),{editDecals:oI,activeDecalMove:ws,addCenteredDecal:aI,decalSizeFor:OA,startImageDecal:sI,decalControlHandlers:DA}=mC({currentObjectBindings:Ve,currentObjectBindingsRef:hi,applyObjectBindings:qr,nodeRefsMap:vn,controlsRef:rt,decalMove:S,decalDragging:ff,setDecalDragging:xy,setDecalError:yy,setDecalControl:gy,decalRequestRef:vy,onTextureUpload:X,currentPanelObjectId:Dl,modelUrl:Ge}),Lv=(0,I.useMemo)(()=>cm(Ve,Un.styleRules),[Ve,Un.styleRules]),[Iv,kv]=(0,I.useState)(()=>pn?.isolation??null);$i(()=>{kv(null)},[Ge,r]);let wa=sa!==void 0?sa:Iv,rh=(0,I.useCallback)(P=>{sa===void 0&&kv(P),bo?.(P)},[sa,bo]),lr=(0,I.useMemo)(()=>um(Lv,wa),[Lv,wa]),LA=(0,I.useMemo)(()=>({bindings:lr.bindings,model:Un.model,camera:Un.camera,animations:Un.animations}),[lr.bindings,Un.model,Un.camera,Un.animations]),Ss=l0({revision:String(ys),enabled:ds&&!!ne,options:bd(ne),baseUrl:F,state:{version:1,objectBindings:Ve,configuration:{modelUrl:r,modelFormat:l,tilesetUrl:i,activeModelId:Ge,models:Et?.map(P=>({...P,objectBindings:ps(P),sceneConfig:Ae(P)===Ge?Un:P.sceneConfig})),mergeModels:Jm,sceneConfig:Un,arScaleMode:z,isolation:wa,backgroundColor:Fe,shadows:We}},getSources:fA});xv.current=Ss.show;let Ui=(0,I.useMemo)(()=>lr.setAside.size>0?Jc(Ve,wa):null,[lr,Ve,wa]),IA=(0,I.useCallback)(P=>{let V=Kr(P),W=V!==null&&Ui?.size===1&&Ui.has(V);rh(W?null:{...wa,target:P.id})},[rh,wa,Ui]),{sourceOf:Po}=lr,kA=(0,I.useMemo)(()=>Vi?O1(Ve,lr):[],[Vi,Ve,lr]),ih=(0,I.useCallback)(P=>{let V=Po(P);th(V)},[th,Po]),oh=(0,I.useCallback)(P=>Mv(P&&Po(P)),[Mv,Po]),ah=(0,I.useCallback)((P,V)=>{let W=Po(P);return x?.({binding:W,...V})===!0?(nh.current=!0,!0):Dv(W)},[x,Dv,Po]),sh=(0,I.useMemo)(()=>A?(P,V)=>A({binding:Po(P),...V}):void 0,[A,Po]),Bv=(0,I.useCallback)(P=>{xs(P,"panel"),!ut&&Xu(P)},[xs,Xu,ut]);(0,I.useEffect)(()=>{Sr()},[Sr,Ve,eP]);let Nv=(0,I.useCallback)((P,V)=>{KC(V,_f.current),ue?.(Qr(P,V)),Sr()},[Sr,ue]),BA=(0,I.useCallback)(P=>{Ny.current=new Set(P.map(V=>V.name)),pP(V=>V+1),Hu(P.map(V=>V.name)),s?.(P)},[Hu,s]),NA=(0,I.useCallback)(P=>{hs.current=P,wr.current?.invalidate()},[]),Ms=(0,I.useCallback)(P=>{Mt.current=P,yv(P),Xy(XC(P));let V=Uh(P);gP(V>rc?V:null),qy(!1),If(null),V>rc&&$y("preparingLargeModel"),Vy(!0),jy(lp(P)),Af(!1),Ef(null),Gy(!1),i||(s&&s(V_(P)),Hu(F1(P),z1(P))),C?.(P),E?.(h1(P)),Sr()},[Hu,Sr,E,s,C,yv,i]),kl=tn?Mt.current:null,Vv=!!L;(0,I.useEffect)(()=>{if(!Vv)return;if(El){if(Lu.current?.url!==r||Lu.current.error!==ha)return;let V=ha&&typeof ha=="object"?Us(ha):void 0;Mf.current?.(g0({...V,name:V?.name??ja(r),format:V?.format??l??tc(r).format}));return}if(!kl||Mt.current!==kl)return;let P=tc(r);Mf.current?.(Md(kl,{scope:i?"resident-tiles":"asset",source:{...Us(kl),format:i?"3d-tiles":l??P.format,name:P.entryPath??ja(r)}}))},[Vv,kl,r,l,i,Wy,El,ha]);let lh=(0,I.useCallback)(P=>{ma(!1),fa(!0),Af(!0),Ef(P),Lu.current={url:By.current,error:P},j?.(P)},[j]),{reportError:jv,clearError:Uv}=C0({enabled:on,activeUrl:Ge,models:Et,errorsRef:Pu,activeFailed:El,activeError:ha,onActiveError:lh,onExtraError:Zb}),VA=(0,I.useCallback)((P,V)=>{!on||!Tu.current?.some(W=>Ae(W)===P)||(delete da.current[P],delete So.current[P],jv(P,V))},[on,jv,So]),jA=(0,I.useCallback)((P,V)=>{!on||!Tu.current?.some(W=>Ae(W)===P)||(Uv(P),da.current[P]=V,P===Ge&&(Au.current!==P||Mt.current!==V)&&(Au.current=P,Ms(V)),bu?.(P,V))},[on,Ge,r,Ms,bu,Uv]);(0,I.useEffect)(()=>{if(!on||Pu.current.has(Ge))return;let P=da.current[Ge];P&&(Au.current===Ge&&Mt.current===P||(Au.current=Ge,Ms(P)))},[on,Ge,r,tn,Ms]);let zv=(0,I.useCallback)((P,V)=>{Of.current.add(P),hP(W=>W+1),Qb?.(P,V)},[Qb]),Fv=on&&Et?Et.find(P=>Ae(P)===Ge)?.mergeModels:Jm,Hv=(0,I.useMemo)(()=>new Set((Fv??[]).map(P=>P.url)),[Fv]),Gv=(0,I.useCallback)(P=>{P.lengthComputable&&P.total>0&&If(P.loaded/P.total*100),R?.(P)},[R]),Wv=(0,I.useCallback)((P,V,W)=>{if(!Qe)return;let le={...Ze,lighting:{...Ze.lighting,lights:Ze.lighting.lights.map(ye=>ye.id===P?{...ye,position:V,...W?{rotation:W}:{}}:ye)}};Qe(le)},[Ze,Qe]);(0,I.useEffect)(()=>{let P=Mt.current;if(!tn||!P){gs(!1);return}if(Array.from(Hv).some(st=>!Of.current.has(st))){gs(!1);return}let W=Object.entries(Ve).filter(([,st])=>!st.removed);if(W.length===0){gs(!1);return}let le=i?Ny.current:(()=>{let st=zy.current;for(let dt of Object.keys(cr(P).nodesById))st.add(dt);return st})();if(!le||le.size===0){gs(!1);return}let ye=W.map(([st,dt])=>dt.modelObjectId??st).filter(st=>!le.has(st));gs(ye.length>0),fP(ye.length);let _t=ye.join(`
3744
- `);if(ye.length>0&&_t!==Rf.current){let st=ye.slice(0,10).map(Ut=>`"${Ut}"`).join(", "),dt=ye.length>10?` and ${ye.length-10} more`:"";console.warn(`[react-immersive] ${ye.length} object binding(s) point at nodes this model doesn't have, so they can't be selected: ${st}${dt}. Each binding's modelObjectId (or its key) must match a node name; log onObjectCatalog to see this model's names.`)}Rf.current=_t},[tn,Ve,dP,i,Hv,Wy]),(0,I.useEffect)(()=>{if(H||yu)return;let P=[];for(let[W,le]of Object.entries(Ve))for(let ye of le.actions??[])lc.includes(ye.id)||P.push(`"${ye.id}" on "${le.label??W}"`);let V=P.join(`
3745
- `);if(P.length>0&&V!==Fy.current){let W=P.slice(0,10).join(", "),le=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: ${W}${le}. ModelViewer itself handles ${lc.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}Fy.current=V},[Ve,yu,H]);let ch=(0,I.useCallback)(async()=>{if(rt.current&&Yr.current&&Ea(rt.current,Yr.current),xt){await xt();return}let P=rt.current;if(!P)return;let V=Yr.current;try{if(V){fs.current=su;let W=ed(V,P);await Vb(P,()=>P.setLookAt(W[0],W[1],W[2],V.target[0],V.target[1],V.target[2],!0))}else await Il()}catch(W){console.error("Reset camera error:",W)}},[xt,Il]),lI=(0,I.useCallback)(()=>{_o(!1),zn(!0)},[]),cI=(0,I.useCallback)(()=>{zn(!1)},[]),UA=(0,I.useCallback)(()=>{zn(!1),_o(!0),setTimeout(()=>{ch()},100)},[ch]),zA=(0,I.useCallback)((P,V)=>{Nv(P,V)},[Nv]),FA=(0,I.useCallback)(P=>{if(hv.current)return;if(nh.current){nh.current=!1;return}let V=rf==="scene"&&of==="Annotations";if(P.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let le=Xr.current,ye=rt.current,_t=ye?.camera,st=Mt.current;if(!le||!ye||!_t||!st||!V&&!ye.enabled)return;let dt=le.getBoundingClientRect(),Ut=(P.clientX-dt.left)/dt.width*2-1,an=-((P.clientY-dt.top)/dt.height)*2+1,Zr=new Bi.Raycaster;Zr.setFromCamera(new Bi.Vector2(Ut,an),_t);let _a=Zr.intersectObject(st,!0);if(_a.length===0)return;if(!V&&D){let Mr=_a[0].point,vi=null;for(let[Vl,xi]of Object.entries(hi.current)){if(!xi.decals?.length)continue;let wi=vn.current[Vl];if(!wi)continue;let uh=wi.worldToLocal(Mr.clone());for(let Eo of xi.decals){if(!Eo.position)continue;let dh=uh.distanceTo(new Bi.Vector3(Eo.position[0],Eo.position[1],Eo.position[2]));dh<=Eo.size/2&&(!vi||dh<vi.distance)&&(vi={binding:xi,id:Eo.id,distance:dh})}}if(vi){Tl(null),D(vi.binding,vi.id);return}}if(!V){let{x:Mr,y:vi,z:Vl}=_a[0].point;ye.setOrbitPoint(Mr,vi,Vl);return}let Ao=_a[0],Bl=Ao.point,_s=st.worldToLocal(Ao.point.clone()),Nl=[0,0,1];if(Ao.face){let Mr=Ao.face.normal.clone().transformDirection(Ao.object.matrixWorld).normalize();Nl=[Mr.x,Mr.y,Mr.z]}cv({worldPosition:[Bl.x,Bl.y,Bl.z],localPosition:[_s.x,_s.y,_s.z],worldNormal:Nl,anchor:aC(Ao),screenX:P.clientX-dt.left,screenY:P.clientY-dt.top}),zf({title:"",description:""})},[rf,of,D]);if((0,I.useEffect)(()=>{ef.current={snapshot:()=>{let P=rt.current,V=Iu.current;return{model:Wr,camera:fi.current&&P?Es(P):V?.camera,home:Yr.current??V?.home,lightEdits:af,variantEdit:xu,sectionEdit:wu,measurementEdits:Su,isolation:Iv,objectBindings:ay||on?void 0:Ve,modelBindingEdits:ay?void 0:FT,explodeFactor:ys,cameraControllerType:_y,uvCheckerOverride:wy,annotationCategories:LP}},captureFrame:()=>{let P=wr.current;return!P||t.status!=="ready"||!tn||!Mo?Promise.resolve(null):z0(P)}}}),(0,I.useEffect)(()=>()=>{ef.current=null},[ef]),vu.status==="checking"){let P=ny??ey;return P?(0,Q.jsx)("div",{className:"ri-viewer ri-viewerPlaceholder",style:{background:My},children:(0,Q.jsx)(Ld,{src:P})}):(0,Q.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:!p&&(0,Q.jsx)(Cd,{title:jn("verifyingLicense"),message:jn("checkingYourLicenseKey")})})}if(vu.status==="invalid")return(0,Q.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,Q.jsx)(Cd,{tone:"error",title:jn("invalidLicense"),message:vu.isLocalDomain?vu.reason??jn("licenseHasBeenRevokedOrHasExpired"):jn("failedToLoadPleaseContactTheSiteAdministrator")})});let{materialTextureUrl:qv,materialTargetTakesImage:Xv,materialTextureOffset:$v,materialTextureRotationDegrees:Yv,isMaterialTexturePositioning:Kv,materialTextureOnOffsetChange:Zv,materialTextureOnRotationChange:Qv,materialTextureOnEndPositioning:Jv}=MC({materialPopup:Ll,resolveObjectKey:To,currentObjectBindings:Ve,nodeRefsMap:vn,moveZoomTarget:Xn,texturePositioningEnabled:CA,texturePositioningOverrides:TA,setMaterialTextureOffset:PA,setMaterialTextureRotation:AA,endMaterialTexturePositioning:EA}),HA=Xr.current?.offsetWidth??600,GA=Xr.current?.offsetHeight??400,WA=350,qA=290,XA=ba?Math.min(ba.screenX+12,HA-WA-8):0,$A=ba?Math.min(ba.screenY,GA-qA-8):0,YA=Pe&&!!r&&!El&&!tn,Sa=ds&&(Nu&&(ev||tv)||nv||!!ne||!!Bu),ex=(Sa?1:0)+(or?1:0),Ma=P=>16+P*42+(nn&&P>ex?Math.max(0,hA-34):0);return(0,Q.jsxs)("div",{className:"ri-viewer",ref:Eu.rootRef,style:{background:My},"data-reduced-motion":xo?"":void 0,children:[(0,Q.jsx)("div",{className:"ri-visuallyHidden",role:"status","aria-atomic":"true",children:xA}),t.status!=="ready"&&(0,Q.jsx)(wC,{rebuilding:t.status==="rebuilding",onReload:t.reload}),(0,Q.jsxs)("div",{className:"ri-viewerLeft",ref:Ly,inert:t.status!=="ready",children:[Ce?Ce({isOpen:_v,selectedObject:xa,currentAction:Iy,onClose:Jf,onAction:qu}):(0,Q.jsx)(Sb,{translateDefaultActions:nf,isOpen:_v,selectedObject:xa,currentAction:Iy,onClose:Jf,onAction:qu,renderActionExtra:P=>{if(P==="change-color"&&$r)return(0,Q.jsx)(xb,{inline:!0,colorPicker:$r,onClose:yi,itemMaterials:pa,setItemMaterials:Ou});if((P==="change-light-color"||P==="set-brightness")&&df?.kind===P&&df.objectId===Dl){let V=df,W=V.target,le=W.type==="lights"?Ze.lighting.lights.find(ye=>ye.id===W.lightIds[0])?.color??"#ffffff":Tm(Gu(W.objectKey).color);return(0,Q.jsx)(yw,{kind:V.kind,color:le,brightness:V.percent,onColorChange:ye=>{if(W.type==="lights"){uf(Object.fromEntries(W.lightIds.map(st=>[st,{color:ye}])));return}let _t=Gu(W.objectKey);Qf(W.objectKey,{emissive:ye,emissiveIntensity:_t.intensity>0?_t.intensity:Av.current[W.objectKey]??1})},onBrightnessChange:ye=>{if(pf({...V,percent:ye}),W.type==="lights"){uf(Object.fromEntries(W.lightIds.map(_t=>[_t,{intensity:(W.baseIntensity[_t]??0)*(ye/100)}])));return}Qf(W.objectKey,{emissive:Tm(Gu(W.objectKey).color),emissiveIntensity:W.baseIntensity*(ye/100)})},onClose:()=>pf(null)})}if((P==="add-text"||P==="add-image")&&mf?.kind===P&&mf.objectId===Dl){let V=mf,W=To(V.objectId);if(!W)return null;let le=P==="add-image";return(0,Q.jsx)(ww,{kind:P,decals:(Ve[W]?.decals??[]).filter(ye=>!!ye.image===le),activeId:V.activeId,error:by?jn.message(by):null,moving:ff?.objectKey===W&&ff.decalId===V.activeId,defaultSize:OA(W),...DA(V,W)})}return P==="change-material"&&Ll?(0,Q.jsx)(wb,{inline:!0,triggerFileUpload:Ev,materialPopup:Ll,textureUrl:qv,clearTexture:Rv,canPlaceImage:Xv,offset:$v,rotationDegrees:Yv,onOffsetChange:Zv,onRotationChange:Qv,isPositioning:Kv,onEndPositioning:Jv}):null}}),(0,Q.jsxs)("div",{className:`ri-canvasArea ${sr?"ri-canvasArea--measuring":""} ${Mo?"":"ri-canvasArea--positioning"} ${Ot||St?"ri-canvasArea--moveMode":""}`,ref:iP,tabIndex:rn?0:void 0,role:rn?"group":void 0,"aria-label":rn?jn("cameraKeyboardHelp"):void 0,onDoubleClick:FA,onPointerDown:P=>{if(rn&&Xr.current?.focus({preventScroll:!0}),Xn){RA(P);return}nA(P)},onClick:Xn?void 0:rA,onPointerMove:ZP,onPointerLeave:bv,onWheel:bv,children:[tn&&!sr&&t.status==="ready"?(0,Q.jsx)(I1,{objects:kA,selectedKey:kt,onHighlight:wf,onSelect:P=>th(P,"keyboard"),onClearSelection:()=>{Jf(),_?.()}}):null,Pl&&!i&&(Xn||yA)&&(0,Q.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:Xn?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:jn(Xn?"texturePositioningHint":"texturePositioningStartHint")}),Uy&&!Hy&&(0,Q.jsx)(bC,{count:mP,onDismiss:()=>Gy(!0)}),Df!==null&&!bP&&(0,Q.jsx)(yC,{triangles:Df,offset:Uy&&!Hy,onDismiss:()=>qy(!0)}),Un.model.renderer==="uv-checker"&&Lf.missing>0&&(0,Q.jsx)(vC,{missing:Lf.missing,total:Lf.total}),(0,Q.jsx)("input",{ref:Ry,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:_A}),(0,Q.jsx)(Ws,{onError:t.fail,children:vs?(0,Q.jsxs)(mg,{backend:vs,onRendererCreated:t.onRendererCreated,suspended:t.status!=="ready",paused:UT&&!jt,camera:De,backgroundColor:Fe,shadows:We&&Ze.shadows.enabled,sceneConfig:Un,selectedObjectRef:va,selectedObjectRefs:Zf,selectedObjectOutlineColor:b,hoveredObjectRef:vA,highlightOnHover:xe,renderMode:pi,maxDpr:yn,reduceGpuLoad:KT,runtimeStats:k?{onStats:k,intervalMs:B,profile:Vn,streamingRef:Sf}:void 0,xrStore:Nu,rendererCaptureRef:wr,preserveDrawingBuffer:ho,children:[(0,Q.jsx)(gg,{lightingConfig:Ze.lighting,shadowConfig:Ze.shadows,shadowsEnabled:We,environmentRotation:Ze.environment.rotation,environmentConfig:Ze.environment,modelBounds:QP,objectBindings:Ve,nodeRefs:vn}),GT&&Ze.lighting.lights.map(P=>!P.visible||P.type==="none"||P.type==="hemisphere"||P.attachment?null:(0,Q.jsx)(tC,{light:P,position:P.position,rotation:P.rotation,color:P.color,intensity:P.intensity,visible:P.visible,onPositionChange:V=>Wv(P.id,V,P.rotation),onRotationChange:V=>Wv(P.id,P.position,V),onDraggingChange:Ty},P.id)),(0,Q.jsx)(yb,{setAside:lr.setAside,nodeRefs:vn}),!ga&&(0,Q.jsx)(vb,{section:Ze.section??Tr,box:zu,modelRef:Mt,showHandle:ji,onChange:my,onDraggingChange:$T}),(0,Q.jsx)(hg,{controlsRef:rt,onCameraChange:zA,cameraLimits:te,controllerType:ua,onPointerLockExit:()=>Cu("orbit"),reducedMotion:xo}),(0,Q.jsx)(Bb,{enabled:jt||sr||ws||xo||ua==="pointerLock"?!1:xl??Ze.model.autoRotate??!1,speed:Jn??Ze.model.autoRotateSpeed??1,controlsRef:rt}),dn&&!jt&&(0,Q.jsx)(Em.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{rt.current?.update(0),wr.current?.invalidate()},children:(0,Q.jsx)(Em.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),(Ot||St)&&!ga&&!Fu&&va&&kt&&(0,Q.jsx)(Db,{node:va,space:It,moveEnabled:Ot,scaleEnabled:St,onTransformChange:wA,transform:Ve[kt]?.transform,onDraggingChange:P=>{Ay(P),ya&&M?.(ya,P)}},kt),(Ot||St)&&!ga&&Fu&&(0,Q.jsx)(kb,{entries:Fu,referenceNode:va,space:It,moveEnabled:Ot,scaleEnabled:St,onTransformChange:SA,onDraggingChange:P=>{Ay(P);for(let V of Fu){let W=Ve[V.key];W&&M?.(W,P)}}}),ws&&(0,Q.jsx)(jw,{target:ws,nodes:vn,controls:rt}),(()=>{let P=on&&Et?(0,Q.jsxs)(Q.Fragment,{children:[Et.map(V=>(0,Q.jsx)(mM,{entry:{...V,objectBindings:Ae(V)===Ge?lr.bindings:ps(V)},isActive:Ae(V)===Ge,pulses:lr.pulses,decoderConfig:_u,itemMaterials:pa,sceneConfig:Un,zoomOnSelected:Ke,highlightOnHover:xe,explodeFactor:ys,suspendBindingTransforms:Cl,onLoadProgress:Gv,onAnimationsReady:ov,onModelAnimationsReady:K,onLoadError:VA,onModelLoaded:jA,selectedItem:kt,panelHoveredItem:h??Du,onItemClick:ih,onItemDoubleClick:ah,onItemContextMenu:sh,onItemHover:oh,nodeRefsOut:vn,onNodeRefsChange:yf,materialRefsOut:Ae(V)===Ge?wo:nP(Ae(V)),onMergeModelLoaded:zv,onMergeModelError:Jb},Ae(V))),(0,Q.jsx)(Zp,{anchorSceneRef:Mt,annotations:iy?uv:[],sceneConfig:Ze,activeAnnotation:ju,popupRef:Ru,canvasRootRef:Xr,worldPositionsRef:bf,modelLoaded:tn,onAnnotationClick:pv,onCloseAnnotation:Vu,hideCloseButton:Ol,showAnnotationOnHover:Se}),(0,Q.jsx)(_m,{annotation:dv,enabled:Ol&&!jt,controlsRef:rt,offsetRef:gf}),jt?(0,Q.jsx)(Gs,{controlsRef:rt,sceneRef:Mt,config:jt.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:jt.onStarted,onFinished:jt.onFinished,onProgress:Jy},"video-export"):gi&&(0,Q.jsx)(Gs,{controlsRef:rt,sceneRef:Mt,config:gi,playing:Rl&&!sr,resetOnPlay:Zy,onFinished:()=>{zn(!1),_o(!1)},onUserInteract:()=>{zn(!1)}},"cinematic-preview"),nn&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(rm,{items:Mu,sceneRef:Mt,modelId:lf,tilesetUrl:i,settings:Sl,legacyUnit:yo,revision:Wf,onResults:vv}),(0,Q.jsx)(ul,{points:qf,unit:Ml.displayUnit,scale:Ml.factor,box:zu,showDimensions:Yf,tool:Xf,areaClosed:$f,snapPreview:sr?gv:null})]})]}):(0,Q.jsx)(Ai,{onLoadError:lh,children:(0,Q.jsxs)(I.Suspense,{fallback:null,children:[i?(0,Q.jsx)(sb,{diagnosticsRef:k?Sf:void 0,url:i,rotation:Un.model.rotation,errorTarget:o,cacheSize:a,decoderConfig:_u,objectBindings:lr.bindings,itemMaterials:pa,sceneConfig:Un,selectedItem:kt,panelHoveredItem:h??Du,highlightOnHover:xe,onItemClick:ih,onItemHover:oh,onItemDoubleClick:ah,onItemContextMenu:sh,onObjectCatalog:BA,onTilesetBounds:NA,onModelLoaded:Ms,onLoadError:lh,nodeRefsOut:vn,onNodeRefsChange:yf,materialRefsOut:wo,explodeFactor:ys,suspendBindingTransforms:Cl}):(0,Q.jsx)(_c,{url:r,modelFormat:l,objectBindings:lr.bindings,selectedItem:kt,itemMaterials:pa,onItemClick:ih,onItemDoubleClick:ah,onItemContextMenu:sh,onItemHover:oh,onModelLoaded:Ms,onAnimationsReady:ov,nodeRefsOut:vn,onNodeRefsChange:yf,materialRefsOut:wo,panelHoveredItem:h??Du,sceneConfig:Un,zoomOnSelected:Ke,highlightOnHover:xe,decoderConfig:_u,onLoadProgress:Gv,explodeFactor:ys,suspendBindingTransforms:Cl,originalNodePoses:jT,mergeModels:Jm,onMergeModelLoaded:zv,onMergeModelError:Jb,pulses:lr.pulses}),VT?.map(V=>(0,Q.jsx)(pM,{url:V,decoderConfig:_u,onLoadError:Zb,onModelLoaded:bu?W=>bu(V,W):void 0},V)),(0,Q.jsx)(Zp,{anchorSceneRef:Mt,annotations:iy?uv:[],sceneConfig:Ze,activeAnnotation:ju,popupRef:Ru,canvasRootRef:Xr,worldPositionsRef:bf,modelLoaded:tn,onAnnotationClick:pv,onCloseAnnotation:Vu,hideCloseButton:Ol,showAnnotationOnHover:Se}),(0,Q.jsx)(_m,{annotation:dv,enabled:Ol&&!jt,controlsRef:rt,offsetRef:gf}),jt?(0,Q.jsx)(Gs,{controlsRef:rt,sceneRef:Mt,config:jt.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:jt.onStarted,onFinished:jt.onFinished,onProgress:Jy},"video-export"):gi&&(0,Q.jsx)(Gs,{controlsRef:rt,sceneRef:Mt,config:gi,playing:Rl&&!sr,resetOnPlay:Zy,onFinished:()=>{zn(!1),_o(!1)},onUserInteract:()=>{zn(!1)}},"cinematic-preview"),nn&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(rm,{items:Mu,sceneRef:Mt,modelId:lf,tilesetUrl:i,settings:Sl,legacyUnit:yo,revision:Wf,onResults:vv}),(0,Q.jsx)(ul,{points:qf,unit:Ml.displayUnit,scale:Ml.factor,box:zu,showDimensions:Yf,tool:Xf,areaClosed:$f,snapPreview:sr?gv:null})]})]})},i??r);return Nu?(0,Q.jsx)(J_,{ref:_P,box:zu,scaleMode:z,onARStateChange:EP,children:P}):P})(),(0,Q.jsx)(xx,{controller:bi,source:Mt,controls:rt,animations:jf,ready:tn&&Mo,sequences:Ze.sequences,autoPlay:fe&&!xo,authoredRevision:LA}),m&&(0,Q.jsx)(ax,{source:Mt,highlights:m}),ar&&(0,Q.jsx)(I.Suspense,{fallback:null,children:ar})]}):null}),(0,Q.jsx)(Ld,{src:ny??ey,hidden:tn&&Mo}),qn&&(0,Q.jsx)("div",{className:"ri-overlay",children:qn}),Pe&&r&&El&&(0,Q.jsx)(xC,{failure:cw(ha,i||r,i?void 0:l,e),source:i||r}),(0,Q.jsx)(V1,{visible:YA,message:jn(yP,{millions:Math.round((Df??0)/1e6)}),progress:vP??void 0}),Sa&&(0,Q.jsx)(UC,{configuredHandoff:!!ne,top:Ma(0),xrStore:Nu,arSupported:ev,vrSupported:tv,quickLookSupported:nv,mobileHandoffUrl:Bu,mobileHandoffOpen:ne?Ss.open:rv,onQuickLook:ne?Ss.show:AP,onOpenMobileHandoff:ne?Ss.show:TP}),CP,ee&&!yu&&!Vf&&!jt&&!sr&&av.length>0&&(0,Q.jsx)(Px,{controls:bi,sequences:av}),Ss.open&&(0,Q.jsx)(p0,{handoff:Ss,filename:he,onQuickLook:()=>n.requestARLaunch("quick-look")}),!ne&&rv&&Bu&&(0,Q.jsx)(zC,{url:Bu,onClose:PP}),or&&(0,Q.jsx)(FC,{top:Ma(Sa?1:0),active:hf,onToggle:()=>Sy(P=>!(P??_l))}),nn&&(0,Q.jsx)(cb,{top:Ma(ex),active:sr,disabled:!!jt,tool:Xf,snap:YP,pointCount:qf.length,areaClosed:$f,error:WP,showDimensions:Yf,onToggle:()=>{zn(!1),sr||HT?.(),eA()},onTool:qP,onSnap:KP,onUndo:XP,onClear:JP,onFinishArea:$P,onDimensions:tA,onHeight:gA,settings:Sl,displayUnit:Ml.displayUnit,onSettings:py,items:Mu,results:lA,onItems:dy,onSave:iA,canSave:oA,canCalibrate:aA,onCalibrate:sA,onExportJson:cA,onExportCsv:uA,onImport:dA,readOnly:vl!==void 0&&!la,settingsReadOnly:gu!==void 0&&!ca}),Ni&&(0,Q.jsx)(HC,{top:Ma((Sa?1:0)+(or?1:0)+(nn?1:0)),open:xP,factor:ys,onToggleOpen:()=>Ky(P=>!P),onFactorChange:Yy}),ji&&!ga&&(0,Q.jsx)(GC,{top:Ma((Sa?1:0)+(or?1:0)+(nn?1:0)+(Ni?1:0)),section:HP,onChange:my}),gi&&(0,Q.jsx)(WC,{top:Ma((Sa?1:0)+(or?1:0)+(nn?1:0)+(Ni?1:0)+(ji?1:0)),playing:Rl,disabled:!!jt||sr,onPlay:()=>{_o(!1),zn(!0)},onPause:()=>zn(!1),onStop:UA}),jt&&(0,Q.jsx)(qC,{progress:SP,onCancel:Nf}),on&&Et&&Et.length>1&&(ry||tf)&&(0,Q.jsx)("div",{className:"ri-modelSwitcher",style:{top:`${Ma((Sa?1:0)+(or?1:0)+(nn?1:0)+(Ni?1:0)+(ji?1:0)+(gi?1:0))}px`},role:"group","aria-label":"Switch model",children:Et.map(P=>(0,Q.jsx)("button",{type:"button",className:`ri-modelSwitcherButton ${Ae(P)===Ge?"ri-modelSwitcherButton--active":""}`,onClick:()=>tf?tf(Ae(P)):ry?.(P.url),title:`Switch to ${P.label||Am(P.url)}`,"aria-pressed":Ae(P)===Ge,children:P.label||Am(P.url)},Ae(P)))}),(Ff||mv||ws||us&&Ui)&&(0,Q.jsxs)("div",{className:`ri-bottomStack ${fv?"ri-bottomStack--aboveButtons":""} ${Ff?"ri-bottomStack--annotationFilters":""}`,children:[Ff&&(0,Q.jsx)(TC,{categories:kP,selected:IP,disabled:!!jt,onChange:BP}),ws&&(0,Q.jsx)(PC,{onCancel:ws.onCancel}),us&&Ui&&(0,Q.jsx)(AC,{label:Ui.size===1?jn("isolatedObject",{name:(()=>{let[P]=Ui;return Ve[P]?.label??P})()}):jn("isolatedObjects",{count:Ui.size}),onShowAll:()=>rh(null)}),mv&&(0,Q.jsx)(EC,{groups:Pf,activeVariants:cf,onSelect:YT})]}),fv&&(0,Q.jsxs)("div",{className:"ri-buttonContainer",children:[(0,Q.jsx)("div",{className:"ri-tourControls",children:Z&&Hf.length>0&&(0,Q.jsx)(RC,{count:Hf.length,active:Ol,index:OP,navigating:DP,onStart:NP,onPrevious:VP,onNext:jP,onStop:UP})}),(0,Q.jsxs)("div",{className:"mv-rightControls",children:[ze&&Eu.supported&&(0,Q.jsx)(OC,{fullscreen:Eu,disabled:!!jt}),de&&(0,Q.jsx)("button",{className:"mv-resetButton",onClick:ch,disabled:!!jt,title:jn("resetCameraView"),children:(0,Q.jsx)(nT.RotateCcw,{})}),(0,Q.jsx)(DC,{open:QT,current:ua,disabled:!!jt,onSelect:Cu,onToggle:()=>Cy(P=>!P)}),qe&&(0,Q.jsx)(LC,{menu:bA,recording:!!jt,hasScene:!!Mt.current,canCaptureImage:ho||vs==="webgpu",canRecord:tn&&Mo&&!ku,hasCinematic:!!gi,hasMultipleModels:!!(Et&&Et.length>=2)})]})]}),ba&&(0,Q.jsx)(IC,{x:XA,y:$A,form:RP,setForm:zf,onOk:zP,onCancel:FP})]}),Ce&&$r&&(0,Q.jsx)(xb,{colorPicker:$r,onClose:yi,itemMaterials:pa,setItemMaterials:Ou}),Ce&&Ll&&(0,Q.jsx)(wb,{triggerFileUpload:Ev,materialPopup:Ll,textureUrl:qv,clearTexture:Rv,canPlaceImage:Xv,offset:$v,rotationDegrees:Yv,onOffsetChange:Zv,onRotationChange:Qv,isPositioning:Kv,onEndPositioning:Jv})]}),ve&&(0,Q.jsx)("div",{className:"ri-viewerRight",inert:t.status!=="ready",children:Je?Je({objectBindings:Ve,onAction:qu,onFocus:Bv,onHover:wf}):(0,Q.jsx)(Mb,{objectBindings:Ve,onAction:qu,onFocus:Bv,onHover:wf,isolatedKeys:Ui,onIsolate:us?IA:void 0})}),ft&&(0,Q.jsx)(f1,{controlsRef:rt,enabled:t.status==="ready",opacity:se,moveSensitivity:Re,position:At})]})}var rT={licenseValidationUrl:!0,onObjectEditLeaseChange:!0,onSelectionClear:!0,onSceneLoaded:!0,onTexturePositioningChange:!0,endTexturePositioningRef:!0};function iT(e,t){let n={...e};for(let r of Object.keys(t))delete n[r];return n}var aT=require("react"),LL={"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"},Ub=new Set,IL=1e3;function oT(e){return getComputedStyle(document.documentElement).getPropertyValue(`--ri-styles-${e}`).trim()!==""}function sT(e,t){(0,aT.useEffect)(()=>{if(process.env.NODE_ENV==="production"||Ub.has(e)||oT(e))return;let n,r=()=>{n=setTimeout(()=>{Ub.has(e)||oT(e)||(Ub.add(e),console.warn(`[react-immersive] ${t}'s styles aren't loaded, so it renders unstyled. Import them once, in your app's root:
3786
+ `}))}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;vu.min.copy(t),vu.max.copy(t),vu.max.x+=1,vu.max.y+=1,r.initRenderTarget(i),r.copyTextureToTexture(e,i.texture,vu,n,0)}},pa=new class{constructor(){let e=null;Object.getOwnPropertyNames(T1.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new T1),e[t](...n)))})}},P1=new le.Vector2,A1=new le.Vector2,E1=new le.Vector2;function Sk(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function U1(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 z1(e,t,n,r,i){let[o,a,s]=r,l=Sk(e,t);P1.fromBufferAttribute(l,o),A1.fromBufferAttribute(l,a),E1.fromBufferAttribute(l,s),i.set(0,0,0).addScaledVector(P1,n.x).addScaledVector(A1,n.y).addScaledVector(E1,n.z)}function F1(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 R1=new le.Vector2,O1=new le.Vector2,D1=new le.Vector2,Mk=class extends Nm{constructor(e,t,n=null){super(e,t,n),this.channels=On(n,"channels",[0]),this.index=On(n,"index",null),this.texCoord=On(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let r=this.type;if(r==="BOOLEAN"||r==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return j1(e,t*this.valueLength,r,n)}},_k=class extends Yb{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(Mk)}getData(e,t,n,r={}){let i=this.properties;Lm(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;Lm(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,pa.increaseSizeTo(i.length);let o=this.data,a=this.definition.properties,s=this.properties,l=U1(r,t);for(let p=0,d=e.length;p<d;p++){let m=e[p];if(!a[m])continue;let f=s[m],b=o[f.index];z1(r,f.texCoord,n,l,R1),F1(R1,b.image.width,b.image.height,O1),D1.set(p,0),pa.renderPixelToTarget(b,O1,D1)}let c=new Uint8Array(e.length*4);if(this._asyncRead)return pa.readDataAsync(c).then(()=>(u.call(this),i));return pa.readData(c),u.call(this),i;function u(){for(let p=0,d=e.length;p<d;p++){let m=e[p],f=s[m],b=f.type;if(i[p]=$b(f,i[p]),!f)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!a[m]){i[p]=f.resolveDefault(i);continue}let g=f.valueLength*(f.count||1),y=f.channels.map(x=>c[4*p+x]),h=f.componentType,v=new(wu(h,b))(g);if(new Uint8Array(v.buffer).set(y),f.array){let x=i[p];for(let P=0,w=x.length;P<w;P++)x[P]=f.readDataFromBuffer(v,P,x[P])}else i[p]=f.readDataFromBuffer(v,0,i[p]);i[p]=f.adjustValueScaleOffset(i[p]),i[p]=f.resolveEnumsToStrings(i[p]),i[p]=f.resolveNoData(i[p])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Wb=class{constructor(e,t,n,r=null,i=null){let{schema:o,propertyTables:a=[],propertyTextures:s=[],propertyAttributes:l=[]}=e,{enums:c,classes:u}=o,p=a.map(f=>new wk(f,u,c,n)),d=[],m=[];r&&(r.propertyTextures&&(d=r.propertyTextures.map(f=>new _k(s[f],u,c,t))),r.propertyAttributes&&(m=r.propertyAttributes.map(f=>new vk(l[f],u,c)))),this.schema=o,this.tableAccessors=p,this.textureAccessors=d,this.attributeAccessors=m,this.object=i,this.textures=t,this.nodeMetadata=r}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let r=Math.min(e.length,t.length);n.length=r;for(let i=0;i<r;i++){let o=this.tableAccessors[e[i]];n[i]=o.getData(t[i],n[i])}}if(Array.isArray(e)!==Array.isArray(n)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return n}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,n)=>n)),Array.isArray(e))return e.map(t=>{let n=this.tableAccessors[t];return{name:n.name,className:n.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,n=[]){let r=this.textureAccessors;n.length=r.length;for(let i=0;i<r.length;i++)n[i]=r[i].getData(e,t,this.object.geometry,n[i]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let r=this.textureAccessors;n.length=r.length;let i=[];for(let o=0;o<r.length;o++){let a=r[o].getDataAsync(e,t,this.object.geometry,n[o]).then(s=>{n[o]=s});i.push(a)}return await Promise.all(i),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let r=0;r<n.length;r++)t[r]=n[r].getData(e,this.object.geometry,t[r]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},xu="EXT_structural_metadata";function Ck(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 Tk(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 G1=class{constructor(e){this.parser=e,this.name=xu}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(xu))return;let r=null,i=t.json.extensions[xu];if(i.schemaUri){let{manager:l,path:c,requestHeader:u,crossOrigin:p}=t.options,d=new URL(i.schemaUri,c).toString(),m=new le.FileLoader(l);m.setCrossOrigin(p),m.setResponseType("json"),m.setRequestHeader(u),r=m.loadAsync(d).then(f=>{i={...i,schema:f}})}let[o,a]=await Promise.all([Ck(t,i.propertyTextures),Tk(t,i.propertyTables),r]),s=new Wb(i,o,a);e.userData.structuralMetadata=s,e.traverse(l=>{if(t.associations.has(l)){let{meshes:c,primitives:u}=t.associations.get(l),p=t.json.meshes[c]?.primitives[u];if(p&&p.extensions&&p.extensions[xu]){let d=p.extensions[xu];l.userData.structuralMetadata=new Wb(i,o,a,d,l)}else l.userData.structuralMetadata=s}})}},I1=new le.Vector2,k1=new le.Vector2,L1=new le.Vector2;function Pk(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var H1=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;pa.increaseSizeTo(a);let s=U1(n,e),l=s[Pk(t)];for(let p=0,d=i.length;p<d;p++){let m=i[p],f="nullFeatureId"in m?m.nullFeatureId:null;if("texture"in m){let b=r[m.texture.index];z1(n,m.texture.texCoord,t,s,I1),F1(I1,b.image.width,b.image.height,k1),L1.set(p,0),pa.renderPixelToTarget(r[m.texture.index],k1,L1)}else if("attribute"in m){let b=n.getAttribute(`_feature_id_${m.attribute}`).getX(l);b!==f&&(o[p]=b)}else{let b=l;b!==f&&(o[p]=b)}}let c=new Uint8Array(a*4);if(this._asyncRead)return pa.readDataAsync(c).then(()=>(u(),o));return pa.readData(c),u(),o;function u(){let p=new Uint32Array(1);for(let d=0,m=i.length;d<m;d++){let f=i[d],b="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let{channels:g}=f.texture,y=g.map(v=>c[4*d+v]);new Uint8Array(p.buffer).set(y);let h=p[0];h!==b&&(o[d]=h)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Bm="EXT_mesh_features";function B1(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[Bm]&&n(r,a.extensions[Bm])}})}var W1=class{constructor(e){this.parser=e,this.name=Bm}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Bm))return;let r=t.json.textures?.length||0,i=Array(r).fill(null);B1(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);B1(e,t,(a,s)=>{a.userData.meshFeatures=new H1(a.geometry,o,s)})}},q1=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])}}},Kb=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 N1.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 q1),this.metadata&&(t.register(()=>new G1),t.register(()=>new W1)),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:WF}=le.MathUtils;var qF=new qb.FullScreenQuad(new le.MeshBasicMaterial),Ak=new le.DataTexture(new Uint8Array([255,255,255,255]),1,1);Ak.needsUpdate=!0;var Ek=0,Rk=1,Ok=2,Dk=3,Ik=4,kk=5,Lk=6,Bk=7,Nk=8,Vk=9,jk=10,Uk=11,XF=Object.freeze({NONE:Ek,SCREEN_ERROR:Rk,GEOMETRIC_ERROR:Ok,DISTANCE:Dk,DEPTH:Ik,RELATIVE_DEPTH:kk,IS_LEAF:Lk,RANDOM_COLOR:Bk,RANDOM_NODE_COLOR:Nk,CUSTOM_COLOR:Vk,LOAD_ORDER:jk,INDEXED_COLOR:Uk});var $F=Math.PI/4,YF=3/5;var da={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var KF=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 ZF={[da.NONE]:16777215,[da.NOT_READY]:7829367,[da.NO_FIT]:2250239,[da.DEPTH]:4473924,[da.OCCUPANCY]:65535,[da.SPACING]:16776960,[da.ANGLE]:16711680,[da.FACING]:16711935};var QF=Math.PI/180;var JF=bs*Math.PI*2;var e4=bs*Math.PI*2;var K1=require("three/examples/jsm/loaders/DRACOLoader.js"),Z1=require("three/examples/jsm/loaders/KTX2Loader.js"),Q1=require("three/examples/jsm/libs/meshopt_decoder.module.js"),Tr=require("three");var _u=require("three");function X1(e){return!!e&&!e.isInterleavedBufferAttribute}function $1(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,_u.MathUtils.clamp(e.getComponent(i,o),n,r));return t}function zk(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 Vm=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;X1(i)&&!(i.array instanceof Int16Array)&&(r.attributes.normal=$1(i,new _u.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];!X1(a)||a.array instanceof Uint16Array||!zk(a)||(r.attributes[o]=$1(a,new _u.BufferAttribute(new Uint16Array(a.count*a.itemSize),a.itemSize,!0),0,1))}})}};var Cu=require("react/jsx-runtime"),Fk=0,Y1=4,Gk=6,Hk=12,Wk=4;function qk(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 Zb({diagnosticsRef:e,loadingRef:t,url:n,rotation:r=[0,0,0],errorTarget:i=64,cacheSize:o=800,memoryBudgetMB:a=800,decoderConfig:s,objectBindings:l,itemMaterials:c,sceneConfig:u,selectedItem:p,panelHoveredItem:d,highlightOnHover:m=!0,onItemClick:f,onItemHover:b,onItemDoubleClick:g,onItemContextMenu:y,onObjectCatalog:h,onTilesetBounds:v,onModelLoaded:x,onLoadError:P,nodeRefsOut:w,onNodeRefsChange:D,materialRefsOut:E,explodeFactor:S=0,suspendBindingTransforms:_=!1}){let{camera:M,gl:C,invalidate:T}=(0,jm.useThree)(),I=(0,Ze.useRef)(null),[L,B]=(0,Ze.useState)(null),N=(0,Ze.useRef)({onItemClick:f,onItemHover:b,onItemDoubleClick:g,onObjectCatalog:h,onTilesetBounds:v,onModelLoaded:x,onLoadError:P,onNodeRefsChange:D});N.current={onItemClick:f,onItemHover:b,onItemDoubleClick:g,onObjectCatalog:h,onTilesetBounds:v,onModelLoaded:x,onLoadError:P,onNodeRefsChange:D};let R=(0,Ze.useRef)(!0),[O,V]=(0,Ze.useState)(null),G=(0,Ze.useRef)(null);G.current=O;let Q=(0,Ze.useRef)([]),$=(0,Ze.useRef)(!1);(0,Ze.useEffect)(()=>{let fe=new fm;return V(fe),()=>fe.dispose()},[n]);let ne=(0,Ze.useRef)(null),Z=(0,Ze.useRef)(0),U=(0,Ze.useRef)(!1),F=a*1024*1024,te=(0,Ze.useRef)(!1),se=(0,Ze.useRef)(yb),ye=(0,Ze.useRef)(null),K=(0,Ze.useRef)(null),re=(0,Ze.useRef)(null);(0,Ze.useEffect)(()=>()=>{re.current!==null&&clearTimeout(re.current)},[]);let ce=s?.dracoDecoderPath??ub,he=s?.ktx2TranscoderPath??db,qe=s?.meshopt??!0,[ie,tt]=(0,Ze.useState)(null);(0,Ze.useEffect)(()=>{U.current=!1,te.current=!1;let fe=new Gb(n);fe.loadAncestors=!0;let Ee=new xm;Ee.priorityCallback=fe.downloadQueue.priorityCallback,Ee.maxJobsPerOrigin=Hk;let Oe=new Zi;Oe.priorityCallback=fe.parseQueue.priorityCallback,Oe.maxJobs=Gk;let nt=new Zi;nt.priorityCallback=fe.processNodeQueue.priorityCallback,nt.maxJobs=fe.processNodeQueue.maxJobs;let kt=new lu;kt.unloadPriorityCallback=fe.lruCache.unloadPriorityCallback,fe.downloadQueue=Ee,fe.parseQueue=Oe,fe.processNodeQueue=nt,fe.lruCache=kt;let Xe=ce?new K1.DRACOLoader().setDecoderPath(ce).setWorkerLimit(Wk):null,ke=he?new Z1.KTX2Loader().setTranscoderPath(he).detectSupport(C):null;return fe.registerPlugin(new Kb({dracoLoader:Xe,ktxLoader:ke,meshoptDecoder:qe?Q1.MeshoptDecoder:null,autoDispose:!1})),fe.registerPlugin(new Xb({disableMipmaps:!1,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),fe.registerPlugin(new Vm),tt(fe),window.__riTiles=fe,()=>{fe.forEachLoadedModel(_e=>kc(_e)),fe.dispose(),Xe?.dispose(),ke?.dispose(),tt(_e=>_e===fe?null:_e)}},[ce,C,he,qe,n]),(0,Ze.useEffect)(()=>{ie&&(se.current=yb,ye.current=null,ie.errorTarget=i,ie.lruCache.maxSize=o,ie.lruCache.minSize=Math.max(1,Math.floor(o*.75)),ie.lruCache.maxBytesSize=F,ie.lruCache.minBytesSize=F*.75,T())},[o,i,T,F,ie]);let ge=(0,Ze.useMemo)(()=>{let fe=l??{};return{objectBindings:fe,keyByModelObject:D_(fe),itemMaterials:c,shadingMode:u?.model.shading??"lit",rendererMode:u?.model.renderer??"pbr",selectedKey:p??null,hoveredKey:I_(L,d),highlightOnHover:m,suspendTransforms:_,placementFrame:ie?.group.matrixWorld,invalidate:T}},[L,m,T,c,l,d,u,p,_,ie]),De=(0,Ze.useCallback)(()=>{if(!ie)return;let fe=ve.current,Ee=$.current?G.current?.nodesByBinding(fe)??{}:{},Oe={};ie.group.traverse(ke=>{if(!ke.isMesh)return;let _e=gb(ke);if(!_e)return;let dt=fe.keyByModelObject[_e]??_e;if(!fe.objectBindings[dt])return;Ee[dt]||(Ee[dt]=ke);let an=ke.material;an&&(Oe[dt]=an)});let nt=w?.current??{},kt=Object.keys(nt),Xe=kt.length!==Object.keys(Ee).length||kt.some(ke=>nt[ke]!==Ee[ke]);w&&(w.current=Ee),E&&(E.current=Oe),(Xe||!w)&&N.current.onNodeRefsChange?.()},[E,w,ie]),Fe=(0,Ze.useCallback)(fe=>pm(fe,ge),[ge]),be=(0,Ze.useCallback)(fe=>L_(fe,ge),[ge]),Je=(0,Ze.useRef)(be);Je.current=be;let ve=(0,Ze.useRef)(ge);ve.current=ge;let de=(0,Ze.useCallback)(()=>{let fe=ne.current,Ee=Z.current;return!fe||Ee<=0?ve.current:{...ve.current,explode:{factor:Ee,centre:fe.centre,radius:fe.radius}}},[]);(0,Ze.useEffect)(()=>{ie&&(be(ie.group),R.current=!0,ie.forEachLoadedModel(fe=>{be(fe),wl(fe,de())}),T())},[be,T,de,ie]),(0,Ze.useEffect)(()=>{let fe=qk(n);if(!fe)return;let Ee=!1;return fetch(fe).then(Oe=>Oe.ok?Oe.json():null).then(Oe=>{Ee||!Oe?.objects||(Q.current=Oe.objects,$.current=Oe.bindingFrame==="gltf-identity-v2",$.current&&G.current?.setCatalog(Oe.objects),R.current=!0,N.current.onObjectCatalog?.(Oe.objects),T())}).catch(()=>{}),()=>{Ee=!0}},[n,T,O]),(0,Ze.useEffect)(()=>{if(!ie)return;let fe=!1,Ee=()=>T(),Oe=_e=>{_e.scene&&(_e.scene.traverse(dt=>{let an=dt.material;for(let Zn of Array.isArray(an)?an:an?[an]:[])Zn.transparent&&Zn.side===Tr.DoubleSide&&(Zn.forceSinglePass=!0)}),Je.current(_e.scene),wl(_e.scene,de()),dp(_e.scene)),R.current=!0,fe||(fe=!0,N.current.onModelLoaded?.(ie.group)),T()},nt=_e=>{N.current.onLoadError?.(_e.error)},kt=_e=>{_e.scene&&(bb(_e.scene),kc(_e.scene)),R.current=!0};ie.setCamera(M),ie.setResolutionFromRenderer(M,C),ie.addEventListener("needs-update",Ee),ie.addEventListener("load-model",Oe),ie.addEventListener("load-error",nt),ie.addEventListener("dispose-model",kt);let Xe=()=>{R.current=!0,T()};ie.addEventListener("tile-visibility-change",Xe);let ke=()=>{let _e=ie.root;_e&&!_e.content?.uri&&_e.refine==="REPLACE"&&(_e.refine="ADD",T())};return ie.addEventListener("load-root-tileset",ke),T(),()=>{ie.removeEventListener("needs-update",Ee),ie.removeEventListener("load-model",Oe),ie.removeEventListener("load-error",nt),ie.removeEventListener("dispose-model",kt),ie.removeEventListener("tile-visibility-change",Xe),ie.removeEventListener("load-root-tileset",ke),bb(ie.group),ie.deleteCamera(M),w&&(w.current={}),E&&(E.current={})}},[M,C,T,E,w,de,ie]);let Ne=Dp(fe=>Fe(fe)?.binding??null,y),Ae=(0,Ze.useCallback)(fe=>{if(Ne.consumeClick())return;let Ee=Fe(fe.object);Ee&&(fe.stopPropagation(),N.current.onItemClick?.(Ee.binding))},[Fe,Ne,f]),mt=(0,Ze.useCallback)(fe=>{let Ee=Fe(fe.object);if(!Ee)return;N.current.onItemDoubleClick?.(Ee.binding,pl(fe))&&fe.stopPropagation()},[Fe]),gt=(0,Ze.useCallback)(fe=>{let Ee=Fe(fe.object),Oe=Ee?.key??null;Oe!==I.current&&(I.current=Oe,B(Oe),N.current.onItemHover?.(Ee?.binding??null))},[Fe]),It=(0,Ze.useCallback)(()=>{I.current!==null&&(I.current=null,B(null),N.current.onItemHover?.(null))},[]);return(0,Ze.useEffect)(()=>{T()},[T,ie]),(0,jm.useFrame)((fe,Ee)=>{if(!ie)return;if(ie.setResolutionFromRenderer(M,C),$.current&&O){let Zt=O.sync(de(),p,_);O.updateBounds(ie.root),_&&ie.forEachLoadedModel(sn=>wl(sn,Zt))}if(ie.update(),!U.current){let Zt=new Tr.Box3;if(ie.getBoundingBox(Zt)){U.current=!0,ie.group.updateMatrixWorld(),Zt.applyMatrix4(ie.group.matrixWorld);let sn=Zt.getBoundingSphere(new Tr.Sphere);ne.current={centre:sn.center.clone(),radius:Zt.getSize(new Tr.Vector3).length()*.5},N.current.onTilesetBounds?.(Zt),T()}}R.current&&(R.current=!1,De());let Oe=Math.min(Math.max(S,0),1),nt=Z.current;Math.abs(nt-Oe)>1e-4?(Z.current=Tr.MathUtils.lerp(nt,Oe,1-Math.exp(-6*Ee)),wl(ie.group,de()),T()):nt!==Oe&&(Z.current=Oe,wl(ie.group,de()),T());let kt=ie,Xe=ie.lruCache,ke=Xe.isFull(),_e=se.current,dt=_e.loosened&&ye.current?ye.current:{bytes:Xe.maxBytesSize,items:Xe.maxSize},an=0;for(let Zt of Xe.usedSet??[])an+=Xe.bytesMap?.get(Zt)??0;let Zn=!1,Qn=ie;for(let Zt of Qn.usedSet??[]){let sn=Zt.internal?.loadingState??Y1;if(Zt.traversal?.used&&Zt.internal?.hasContent&&sn>=Fk&&sn<Y1){Zn=!0;break}}let Ei=K.current??(K.current={world:new Tr.Matrix4,projection:new Tr.Matrix4}),Rr=!Ei.world.equals(M.matrixWorld)||!Ei.projection.equals(M.projectionMatrix);Rr&&(Ei.world.copy(M.matrixWorld),Ei.projection.copy(M.projectionMatrix));let Ri={full:ke,wanting:Zn,moved:Rr,usage:Math.max(an/Math.max(1,dt.bytes),(Xe.usedSet?.size??0)/Math.max(1,dt.items)),now:performance.now()},zn=H_(_e,Ri);zn!==_e&&(zn.loosened&&(!_e.loosened||zn.raisedAt!==_e.raisedAt)?(_e.loosened||(ye.current=dt),Xe.maxBytesSize=Math.max(dt.bytes,Xe.cachedBytes??0)*vb,Xe.maxSize=Math.ceil(Math.max(dt.items,Xe.itemSet?.size??0)*vb)):!zn.loosened&&_e.loosened&&ye.current&&(Xe.maxBytesSize=ye.current.bytes,Xe.maxSize=ye.current.items,ye.current=null),se.current=zn,ie.errorTarget=i*zn.factor,T()),!te.current&&ke&&Ri.wanting&&zn.factor>=iu&&(te.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.")),e&&(e.current={cachedBytes:Xe.cachedBytes??null,budgetBytes:dt.bytes,cachedTiles:Xe.itemSet?.size??null,downloading:kt.stats?.downloading??0,parsing:kt.stats?.parsing??0,cacheFull:ke,detailFactor:zn.factor,errorTarget:ie.errorTarget});let ii=W_(zn,Ri);ii===0?T():ii!==null&&re.current===null&&(re.current=setTimeout(()=>{re.current=null,T()},ii));let Oi=(kt.stats?.downloading??0)>0||(kt.stats?.parsing??0)>0||kt.loadProgress!==void 0&&kt.loadProgress<1&&!ke;t&&(t.current=Oi),Oi&&T()}),ie?(0,Cu.jsxs)("group",{rotation:r,children:[O?(0,Cu.jsx)("primitive",{object:O.group}):null,(0,Cu.jsx)("primitive",{object:ie.group,onClick:Ae,onDoubleClick:mt,onPointerDown:y?Ne.onPointerDown:void 0,onPointerMove:gt,onPointerOut:It})]}):null}var Um=require("three");var Xk=new Um.Matrix4().makeRotationX(Math.PI/2);function J1(e){e.updateMatrixWorld(!0);let t=new Um.Matrix4().copy(e.matrixWorld).invert().premultiply(Xk),n=new Um.Matrix4,r=[];for(let[i,o]of Object.entries(gr(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 We=require("react"),Qb=require("@react-three/drei"),vs=require("@react-three/fiber"),Si=require("three");var yn=require("react/jsx-runtime"),$k=.02;function eC(e,t,n=!1,r){let i=(0,We.useRef)(null),[o,a]=(0,We.useState)(!0),s=(0,We.useRef)(!0),l=(0,We.useMemo)(()=>new Si.Vector3,[]),c=(0,vs.useThree)(g=>g.scene),u=(0,We.useRef)(null),p=(0,We.useRef)(null),d=(0,We.useMemo)(()=>new Si.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),m=(0,We.useMemo)(()=>new Si.Vector3,[]),f=(0,We.useMemo)(()=>new Si.Vector3,[]),b=(0,We.useMemo)(()=>new Si.Vector3,[]);return(0,We.useEffect)(()=>{u.current=null},[e.anchorNodeName]),(0,vs.useFrame)(({camera:g})=>{let y=i.current,h=y?.parent;if(!y||!h)return;let v=r?r.current:c;p.current!==v&&(p.current=v,u.current=null);let x=u.current;if(e.anchorNodeName&&(!x||!x.parent)&&(x=v?Lr(v,e.anchorNodeName):null,u.current=x),x?(x.updateWorldMatrix(!0,!1),m.copy(d).applyMatrix4(x.matrixWorld)):(m.copy(d),h.localToWorld(m)),t){let w=t.current.get(e.id);w||(w=new Si.Vector3,t.current.set(e.id,w)),w.copy(m)}g.getWorldPosition(l);let P=!n||u0(e,l.distanceTo(m));P!==s.current&&(s.current=P,a(P)),b.copy(l).sub(m),b.lengthSq()>0?(b.normalize(),f.copy(m).addScaledVector(b,$k)):f.copy(m),h.worldToLocal(f),y.position.copy(f)}),{anchorRef:i,inRange:o}}function Yk({anchorSceneRef:e,annotation:t,occluders:n,worldPositionsRef:r,onClick:i,onHover:o,showAnnotationOnHover:a}){let s=xe(),[l,c]=(0,We.useState)(!1),{anchorRef:u,inRange:p}=eC(t,r,!0,e),d=l||!p,[m,f]=(0,We.useState)(!1),[b,g]=(0,We.useState)(1),y=(0,We.useRef)(null),h=(0,We.useRef)(null),v=(0,We.useRef)(null);(0,We.useEffect)(()=>{p||(y.current&&clearTimeout(y.current),m&&(f(!1),o?.(null)))},[p,m,o]),(0,We.useEffect)(()=>()=>{y.current&&(clearTimeout(y.current),y.current=null),v.current&&(clearTimeout(v.current),v.current=null)},[]);let x=S=>{S.stopPropagation(),S.preventDefault(),y.current&&(clearTimeout(y.current),y.current=null),y.current=window.setTimeout(()=>{i?.(t),y.current=null},10)},P=S=>{S.stopPropagation(),f(!0),g(100),v.current&&(clearTimeout(v.current),v.current=null),o?.(t)},w=S=>{S.stopPropagation(),f(!1),g(1),v.current&&clearTimeout(v.current),v.current=window.setTimeout(()=>{o?.(null),a&&o?.(null),v.current=null},50)},D=S=>{S.stopPropagation();let _=S.currentTarget;_.dataset.pointerX=String(S.clientX),_.dataset.pointerY=String(S.clientY)},E=S=>{S.stopPropagation();let _=S.currentTarget,M=parseFloat(_.dataset.pointerX||"0"),C=parseFloat(_.dataset.pointerY||"0"),T=S.clientX-M,I=S.clientY-C;Math.sqrt(T*T+I*I)<10&&x(S)};return(0,yn.jsx)("group",{ref:u,children:(0,yn.jsx)(Qb.Html,{center:!0,occlude:n,onOcclude:c,pointerEvents:d?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:d?"none":"auto",zIndex:b},className:"annotation-html-wrapper",transparent:!0,children:(0,yn.jsx)("div",{ref:h,className:`ri-annotationMarker ${m?"ri-annotationMarker--hovered":""}`,title:t.title,style:{display:d?"none":"flex"},onPointerDown:D,onPointerUp:E,onPointerEnter:P,onPointerLeave:w,onDoubleClick:S=>{S.stopPropagation(),i?.(t)},role:"button",tabIndex:0,"aria-label":s("annotationMarker",{id:t.id,title:t.title}),onKeyDown:S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),S.stopPropagation(),i?.(t))},children:(0,yn.jsx)("span",{className:"ri-annotationMarker-id",children:t.id})})})})}function Kk({anchorSceneRef:e,annotation:t,occluders:n,popupRef:r,onClose:i,hideCloseButton:o=!1}){let a=xe(),[s,l]=(0,We.useState)(!1),{anchorRef:c}=eC(t,void 0,!1,e),u=(0,yn.jsxs)("div",{ref:r,className:"ri-viewAnnotationPopup",style:{display:s?"none":"block"},onPointerDown:p=>p.stopPropagation(),onClick:p=>p.stopPropagation(),children:[(0,yn.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,yn.jsx)("h4",{className:"ri-viewAnnotationTitle",children:t.title}),!o&&(0,yn.jsx)("button",{onClick:p=>{p.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":a("closeAnnotation"),children:"\xD7"})]}),t.category&&(0,yn.jsx)("span",{className:"ri-annotationCategory",children:t.category}),t.description&&(0,yn.jsx)("p",{className:"ri-viewAnnotationDescription",children:t.description}),t.images?.map((p,d)=>{let m=lg(p.src);return m?(0,yn.jsx)("img",{className:"ri-annotationImage",src:m,alt:p.alt??"",loading:"lazy"},`${m}-${d}`):null}),t.links?.map((p,d)=>{let m=lg(p.href);return m?(0,yn.jsx)("a",{className:"ri-annotationLink",href:m,target:"_blank",rel:"noopener noreferrer",children:p.label||a("learnMore")},`${m}-${d}`):null})]});return(0,yn.jsx)("group",{ref:c,children:(0,yn.jsx)(Qb.Html,{occlude:n,onOcclude:l,pointerEvents:s?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:s?"none":"auto",zIndex:1e3},transparent:!0,children:u})})}function zm({anchorSceneRef:e,annotations:t,sceneConfig:n,activeAnnotation:r,popupRef:i,canvasRootRef:o,worldPositionsRef:a,modelLoaded:s,onAnnotationClick:l,onAnnotationHover:c,onCloseAnnotation:u,hideCloseButton:p=!1,showAnnotationOnHover:d=!1}){let m=(0,vs.useThree)(N=>N.invalidate),f=(0,vs.useThree)(N=>N.scene),[b,g]=(0,We.useState)(null),[y,h]=(0,We.useState)(!1),v=(0,We.useRef)(null);(0,We.useEffect)(()=>{v.current!==null&&r===null&&(g(null),h(!1)),v.current=r?.id??null},[r]);let x=(0,We.useRef)(null),P=(0,We.useRef)(null),w=(0,We.useRef)(null),D=(0,We.useMemo)(()=>{let N=[];return f.traverse(R=>{let O=R;O.isMesh&&!O.isSkinnedMesh&&N.push({current:R})}),N},[f,t,s]),E=(0,We.useCallback)(()=>{m();let N=()=>{m(),P.current=window.requestAnimationFrame(()=>{m(),P.current=null})};P.current=window.requestAnimationFrame(N)},[m]);(0,We.useEffect)(()=>{E()},[t,E]),(0,We.useEffect)(()=>{E()},[r,E]),(0,We.useEffect)(()=>()=>{P.current!==null&&window.cancelAnimationFrame(P.current),w.current&&clearTimeout(w.current)},[]);let S=r||b,_=(0,We.useMemo)(()=>S?t.find(N=>N.id===S.id)??null:null,[S,t]),M=(0,We.useCallback)(N=>{if(y&&b?.id===N.id){h(!1),g(null),u?.();return}h(!0),g(N),l?.(N)},[y,b,l,u]),C=(0,We.useCallback)(N=>{c?.(N),d&&!y&&(w.current&&(clearTimeout(w.current),w.current=null),N?g(N):w.current=window.setTimeout(()=>{g(null),u?.(),w.current=null},100))},[y,c,d,u]),T=(0,We.useCallback)(()=>{h(!1),g(null),u?.()},[u]),I=(0,We.useCallback)(N=>{let R=N.target;if(R.closest?.(".ri-annotationMarker")||R.closest?.(".ri-viewAnnotationPopup")||R.closest?.(".annotation-html-wrapper"))return;let O=o.current;O&&O.contains(R)&&(h(!1),g(null),u?.())},[o,u]),L=(0,We.useCallback)(N=>{N.key==="Escape"&&y&&(h(!1),g(null),u?.())},[y,u]);(0,We.useEffect)(()=>{let N=o.current;return N&&(N.addEventListener("click",I),N.addEventListener("pointerdown",I)),document.addEventListener("keydown",L),()=>{N&&(N.removeEventListener("click",I),N.removeEventListener("pointerdown",I)),document.removeEventListener("keydown",L)}},[o,I,L]);let B=(0,We.useMemo)(()=>(n?.model.rotation??[0,0,0]).map(N=>N*Math.PI/180),[n?.model.rotation]);return(0,We.useEffect)(()=>{m()},[m,B]),(0,vs.useFrame)((N,R)=>{if(!x.current)return;x.current.rotation.x=Si.MathUtils.lerp(x.current.rotation.x,B[0],1-Math.exp(-5*R)),x.current.rotation.y=Si.MathUtils.lerp(x.current.rotation.y,B[1],1-Math.exp(-5*R)),x.current.rotation.z=Si.MathUtils.lerp(x.current.rotation.z,B[2],1-Math.exp(-5*R));let{rotation:O}=x.current;Math.abs(O.x-B[0])+Math.abs(O.y-B[1])+Math.abs(O.z-B[2])>1e-4&&m()}),(0,yn.jsxs)("group",{ref:x,children:[t.map(N=>{let R=`${N.worldPosition.join(",")}-${N.title}-${N.id}`;return(0,yn.jsx)(Yk,{anchorSceneRef:e,annotation:N,occluders:D,worldPositionsRef:a,onClick:M,onHover:C,showAnnotationOnHover:d},R)}),_?(0,yn.jsx)(Kk,{anchorSceneRef:e,annotation:_,occluders:D,popupRef:i,onClose:T,hideCloseButton:p},`popup-${_.id}`):null]})}var Ro=require("react"),Hm=require("@react-three/drei");var Gm=require("react"),tC=require("@react-three/drei"),nC=require("@react-three/fiber"),Mi=require("three");var Fm=require("react/jsx-runtime");function ma(e){return(0,nC.useThree)(n=>jr(n.gl))?(0,Fm.jsx)(Zk,{...e}):(0,Fm.jsx)(tC.Line,{points:e.points,color:e.color,lineWidth:e.lineWidth,dashed:e.dashed})}function Zk({points:e,color:t,dashed:n=!1}){let r=(0,Gm.useMemo)(()=>{let i=new Mi.BufferGeometry().setFromPoints(e.map(s=>s instanceof Mi.Vector3?s:new Mi.Vector3(...s))),o=n?new Mi.LineDashedMaterial({color:t,dashSize:.02,gapSize:.02}):new Mi.LineBasicMaterial({color:t}),a=new Mi.Line(i,o);return n&&a.computeLineDistances(),a},[e,t,n]);return(0,Gm.useEffect)(()=>()=>{r.geometry.dispose(),r.material.dispose()},[r]),(0,Fm.jsx)("primitive",{object:r})}var hn=require("three");var Ue=require("react/jsx-runtime"),fa="#22d3ee",Qk="#facc15";function xs(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function rC(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function Jk(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 Eo({position:e,children:t}){return(0,Ue.jsx)(Hm.Html,{center:!0,position:e,zIndexRange:[20,0],style:{pointerEvents:"none"},children:(0,Ue.jsx)("div",{className:"ri-measureLabel",children:t})})}function iC({positions:e,triangles:t}){let n=(0,Ro.useMemo)(()=>{let r=new hn.Vector3(...e[0]),i=new hn.BufferGeometry;return i.setAttribute("position",new hn.Float32BufferAttribute(e.flatMap(o=>new hn.Vector3(...o).sub(r).toArray()),3)),i.setIndex(t.flat()),i},[e,t]);return(0,Ro.useEffect)(()=>()=>n.dispose(),[n]),(0,Ue.jsx)("mesh",{position:e[0],geometry:n,raycast:()=>{},renderOrder:100,children:(0,Ue.jsx)("meshBasicMaterial",{color:fa,side:hn.DoubleSide,transparent:!0,opacity:.18,depthWrite:!1})})}var eL=[[0,1,2]];function tL({positions:e}){let t=Qs(e);if(t===null)return null;let n=new hn.Vector3(...e[1]),r=new hn.Vector3(...e[0]).sub(n),i=new hn.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 hn.Vector3(0,1,0):new hn.Vector3(1,0,0)),a.normalize();let s=t*Math.PI/180,l=Array.from({length:33},(u,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,Ue.jsxs)(Ue.Fragment,{children:[(0,Ue.jsx)(ma,{points:l,color:fa,lineWidth:2}),(0,Ue.jsxs)(Eo,{position:c,children:[t.toFixed(2),"\xB0"]})]})}function nL({box:e,unit:t,scale:n}){let r=(0,Ro.useMemo)(()=>[(e.min[0]+e.max[0])/2,(e.min[1]+e.max[1])/2,(e.min[2]+e.max[2])/2],[e.min,e.max]),i=(0,Ro.useMemo)(()=>{let[l,c,u]=e.size,p=new hn.BoxGeometry(l||1e-4,c||1e-4,u||1e-4),d=new hn.EdgesGeometry(p);return p.dispose(),d},[e.size]);(0,Ro.useEffect)(()=>()=>{i.dispose()},[i]);let[o,a,s]=e.size;return(0,Ue.jsxs)("group",{position:r,children:[(0,Ue.jsx)("lineSegments",{geometry:i,children:(0,Ue.jsx)("lineBasicMaterial",{color:Qk})}),(0,Ue.jsxs)(Eo,{position:[0,-a/2,s/2],children:["W ",xs(o*n,t)]}),(0,Ue.jsxs)(Eo,{position:[-o/2,0,s/2],children:["H ",xs(a*n,t)]}),(0,Ue.jsxs)(Eo,{position:[o/2,-a/2,0],children:["D ",xs(s*n,t)]})]})}function Pl({points:e,unit:t,scale:n=1,box:r,showDimensions:i,tool:o="distance",areaClosed:a=!1,snapPreview:s}){let l=(0,Ro.useMemo)(()=>e.map(p=>p.position),[e]),c=(0,Ro.useMemo)(()=>o==="area"&&a?Js(l):null,[o,a,l]),u=o==="pointToPlane"&&e.length===2?Gd(e[0],e[1].position):null;return(0,Ue.jsxs)("group",{children:[o!=="wrap"&&o!=="wrapHorizontal"&&e.map(p=>(0,Ue.jsx)(Hm.Html,{center:!0,position:p.position,zIndexRange:[15,0],style:{pointerEvents:"none"},children:(0,Ue.jsx)("div",{className:`ri-measureDot${p.snapped?" ri-measureDot--snapped":""}`})},p.id)),o==="distance"&&e.slice(1).map((p,d)=>{let m=e[d].position,f=p.position,b=new hn.Vector3(...m).distanceTo(new hn.Vector3(...f));return(0,Ue.jsxs)("group",{children:[(0,Ue.jsx)(ma,{points:[m,f],color:fa,lineWidth:2}),(0,Ue.jsx)(Eo,{position:rC(m,f),children:xs(b*n,t)})]},`${e[d].id}-${p.id}`)}),(o==="angle"||o==="area")&&l.length>=2&&(0,Ue.jsx)(ma,{points:a?[...l,l[0]]:l,color:fa,lineWidth:2}),o==="angle"&&(0,Ue.jsx)(tL,{positions:l}),c&&!("error"in c)&&(0,Ue.jsxs)(Ue.Fragment,{children:[(0,Ue.jsx)(iC,{positions:l,triangles:c.triangles}),(0,Ue.jsx)(Eo,{position:c.center,children:xs(c.area*n**2,t?`${t}\xB2`:"")})]}),o==="pointToPlane"&&e[0]?.faceVertices&&(0,Ue.jsxs)(Ue.Fragment,{children:[(0,Ue.jsx)(iC,{positions:e[0].faceVertices,triangles:eL}),(0,Ue.jsx)(ma,{points:[...e[0].faceVertices,e[0].faceVertices[0]],color:fa,lineWidth:1}),e.length===1&&(0,Ue.jsx)(Eo,{position:e[0].position,children:"Reference plane"})]}),u&&(0,Ue.jsxs)(Ue.Fragment,{children:[(0,Ue.jsx)(ma,{points:[e[1].position,u.projection],color:fa,lineWidth:2}),(0,Ue.jsx)(ma,{points:[e[0].position,u.projection],color:fa,lineWidth:1,dashed:!0}),(0,Ue.jsx)(Eo,{position:rC(e[1].position,u.projection),children:xs(u.distance*n,t)})]}),(o==="wrap"||o==="wrapHorizontal")&&l.length>=3&&(0,Ue.jsxs)(Ue.Fragment,{children:[(0,Ue.jsx)(ma,{points:[...l,l[0]],color:fa,lineWidth:2}),(0,Ue.jsx)(Eo,{position:Jk(l),children:xs(yc(l,!0)*n,t)})]}),s&&(0,Ue.jsxs)(Hm.Html,{center:!0,position:s.position,zIndexRange:[20,0],style:{pointerEvents:"none"},children:[(0,Ue.jsx)("div",{className:"ri-measureSnapTarget"}),(0,Ue.jsx)("div",{className:"ri-measureSnapLabel",children:s.snapped==="vertex"?"Vertex":"Edge"})]}),i&&r?(0,Ue.jsx)(nL,{box:r,unit:t,scale:n}):null]})}var oC={free:0,starter:1,growth:2};function aC(e,t){return oC[e]>=oC[t]}var sC={free:"Free",starter:"Starter",growth:"Growth"};var rL={advancedMaterials:"starter",materialVariants:"starter",customEnvironment:"starter",backgroundImages:"starter",sectionPlanes:"starter",calibratedMeasurements:"starter",animationConfig:"starter",sceneBundle:"starter",cinematic:"starter",rules:"growth",postLighting:"starter",postSelection:"growth",productCommerce:"starter"};function Wm(e,t){return aC(e,rL[t])}var Pr=require("lucide-react"),Zr=require("react"),lC=require("react-dom");var qm=require("react"),iL=(0,qm.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"model",tier:"free"});var ha=()=>(0,qm.useContext)(iL);var oe=require("react/jsx-runtime");function Jb(e){let t=xe(),{isInsideEditor:n,measurementPanelTarget:r,tier:i}=ha(),o=n&&!Wm(i,"calibratedMeasurements"),a=(0,Zr.useRef)(null),[s,l]=(0,Zr.useState)(!1),[c,u]=(0,Zr.useState)(""),[p,d]=(0,Zr.useState)("1"),[m,f]=(0,Zr.useState)("m"),b=(0,Zr.useRef)(null),g={ready:"measurementReady",approximate:"measurementApproximate","model-changed":"measurementModelChanged","missing-object":"measurementObjectMissing","geometry-changed":"measurementGeometryChanged","pose-changed":"measurementPoseChanged","hidden-object":"measurementObjectHidden",invalid:"measurementInvalid"};(0,Zr.useLayoutEffect)(()=>{if(!a.current)return;let C=()=>e.onHeight(a.current?.getBoundingClientRect().height??34),T=new ResizeObserver(C);return T.observe(a.current),C(),()=>T.disconnect()},[e.onHeight]);let y=n&&e.active&&!r,{onToggle:h}=e;(0,Zr.useEffect)(()=>{y&&h()},[y,h]);let{tool:v,pointCount:x,areaClosed:P}=e,w=v==="angle"?[t("angleFirstArmHint"),t("angleVertexHint"),t("angleSecondArmHint"),t("angleNewHint")][x]:v==="area"?t(P?"areaNewHint":"areaCornersHint"):v==="pointToPlane"?[t("pointToPlaneFaceHint"),t("pointToPlanePointHint"),t("pointToPlaneNewHint")][x]:t(v==="wrap"?"wrapHint":v==="wrapHorizontal"?"wrapHorizontalHint":"distanceHint"),D=n?"ri-measureField":"ri-measureSelect",E=(0,oe.jsxs)("select",{className:D,"aria-label":t("measurementTool"),value:v,disabled:e.disabled,onChange:C=>e.onTool(C.target.value),children:[(0,oe.jsx)("option",{value:"distance",children:t("distance")}),(0,oe.jsx)("option",{value:"angle",children:t("angle")}),(0,oe.jsx)("option",{value:"area",children:t("area")}),(0,oe.jsx)("option",{value:"pointToPlane",children:t("pointToPlane")}),(0,oe.jsx)("option",{value:"wrap",children:t("wrap")}),(0,oe.jsx)("option",{value:"wrapHorizontal",children:t("wrapHorizontal")})]}),S=(0,oe.jsxs)("select",{className:D,"aria-label":t("measurementSnapping"),value:e.snap,disabled:e.disabled,onChange:C=>e.onSnap(C.target.value),children:[(0,oe.jsx)("option",{value:"none",children:t("noSnapping")}),(0,oe.jsx)("option",{value:"auto",children:t("snapAuto")}),(0,oe.jsx)("option",{value:"vertex",children:t("snapVertex")}),(0,oe.jsx)("option",{value:"edge",children:t("snapEdge")})]}),_=e.active&&v==="area"&&!P&&(0,oe.jsx)("button",{type:"button",className:n?"ri-measureAction":"ri-measureFinish",onClick:e.onFinishArea,disabled:e.disabled||x<3,children:t("finishArea")}),M=(0,oe.jsxs)("div",{className:`ri-measureLibrary${n?" ri-measureLibrary--sidebar":""}`,onClick:C=>C.stopPropagation(),onPointerDown:C=>C.stopPropagation(),onPointerMove:C=>C.stopPropagation(),onKeyDown:C=>C.stopPropagation(),children:[n&&(0,oe.jsx)("div",{className:"ri-measureActions",children:(0,oe.jsxs)("button",{type:"button",className:`ri-measureAction ri-measureStart${e.active?" ri-measureStart--active":""}`,disabled:e.disabled,onClick:e.onToggle,"aria-pressed":e.active,children:[(0,oe.jsx)(Pr.PencilRuler,{size:13}),e.active?t("stopMeasuring"):t("startMeasuring")]})}),n&&e.active&&(0,oe.jsxs)(oe.Fragment,{children:[(0,oe.jsxs)("div",{className:"ri-measureRow",children:[(0,oe.jsx)("span",{children:"Tool"}),E]}),(0,oe.jsxs)("div",{className:"ri-measureRow",children:[(0,oe.jsx)("span",{children:"Snapping"}),S]}),!e.error&&(0,oe.jsx)("p",{className:"ri-measureGuide",role:"status",children:w}),(x>0||_)&&(0,oe.jsxs)("div",{className:"ri-measureActions",children:[x>0&&(0,oe.jsxs)(oe.Fragment,{children:[(0,oe.jsxs)("button",{type:"button",className:"ri-measureAction",onClick:e.onUndo,disabled:e.disabled,children:[(0,oe.jsx)(Pr.Undo2,{size:13}),"Undo point"]}),(0,oe.jsxs)("button",{type:"button",className:"ri-measureAction",onClick:e.onClear,disabled:e.disabled,children:[(0,oe.jsx)(Pr.Eraser,{size:13}),"Clear"]})]}),_]})]}),n&&(0,oe.jsxs)("label",{className:"ri-measureRow",children:[(0,oe.jsx)("span",{children:"Bounding box"}),(0,oe.jsx)("input",{type:"checkbox","aria-label":t("toggleBoundingDimensions"),checked:e.showDimensions,disabled:e.disabled,onChange:e.onDimensions})]}),(0,oe.jsxs)("label",{className:"ri-measureRow",children:[(0,oe.jsx)("span",{children:t("measurementSourceUnit")}),(0,oe.jsx)("select",{"aria-label":t("measurementSourceUnit"),className:"ri-measureField",disabled:e.disabled||e.settingsReadOnly,value:e.settings.sourceUnit??"m",onChange:C=>e.onSettings({...e.settings,sourceUnit:C.target.value,metersPerUnit:void 0}),children:Ka.map(C=>(0,oe.jsx)("option",{value:C,children:C},C))})]}),(0,oe.jsxs)("label",{className:"ri-measureRow",children:[(0,oe.jsx)("span",{children:t("measurementDisplayUnit")}),(0,oe.jsxs)("select",{"aria-label":t("measurementDisplayUnit"),className:"ri-measureField",disabled:e.disabled||e.settingsReadOnly,value:e.displayUnit,onChange:C=>e.onSettings({...e.settings,displayUnit:C.target.value}),children:[!vc(e.displayUnit)&&(0,oe.jsx)("option",{value:e.displayUnit,children:e.displayUnit}),Ka.map(C=>(0,oe.jsx)("option",{value:C,children:C},C))]})]}),e.active&&(0,oe.jsxs)(oe.Fragment,{children:[(0,oe.jsxs)("div",{className:"ri-measureRow",children:[(0,oe.jsx)("span",{children:t("measurementName")}),(0,oe.jsxs)("span",{className:"ri-measureCombo",children:[(0,oe.jsx)("input",{"aria-label":t("measurementName"),className:"ri-measureField",value:c,onChange:C=>u(C.target.value),placeholder:t("measurementNamePlaceholder")}),(0,oe.jsx)("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||e.readOnly||!e.canSave||o,title:o?"Saving measurements requires the Starter plan or higher.":void 0,onClick:()=>{e.onSave(c),u(""),l(!0)},children:t("saveMeasurement")})]})]}),(0,oe.jsxs)("div",{className:"ri-measureRow",title:t("measurementCalibrationHint"),children:[(0,oe.jsx)("span",{children:t("knownMeasurementDistance")}),(0,oe.jsxs)("span",{className:"ri-measureCombo",children:[(0,oe.jsx)("input",{"aria-label":t("knownMeasurementDistance"),type:"number",min:"0",step:"any",className:"ri-measureField",value:p,onChange:C=>d(C.target.value)}),(0,oe.jsx)("select",{"aria-label":t("calibrationUnit"),className:"ri-measureField ri-measureField--unit",value:m,onChange:C=>f(C.target.value),children:Ka.map(C=>(0,oe.jsx)("option",{children:C},C))}),(0,oe.jsx)("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||e.settingsReadOnly||!e.canCalibrate||o,title:o?"Calibration requires the Starter plan or higher.":void 0,onClick:()=>e.onCalibrate(Number(p),m),children:t("calibrateMeasurement")})]})]})]}),e.settings.metersPerUnit!==void 0&&(0,oe.jsxs)("div",{className:"ri-measureRow",children:[(0,oe.jsx)("span",{children:t("measurementCalibratedScale",{scale:e.settings.metersPerUnit.toPrecision(6)})}),(0,oe.jsx)("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||e.settingsReadOnly,onClick:()=>e.onSettings({...e.settings,metersPerUnit:void 0}),children:t("resetMeasurementCalibration")})]}),e.items.length>0&&(0,oe.jsx)("div",{className:"ri-savedMeasurementList",children:e.items.map(C=>{let T=e.results.find(I=>I.id===C.id);return(0,oe.jsxs)("div",{className:"ri-savedMeasurementRow",children:[(0,oe.jsx)("input",{type:"checkbox","aria-label":t("showSavedMeasurement",{name:C.name}),checked:C.visible!==!1,disabled:e.disabled||e.readOnly,onChange:I=>e.onItems(e.items.map(L=>L.id===C.id?{...L,visible:I.target.checked}:L))}),(0,oe.jsx)("input",{"aria-label":t("renameSavedMeasurement",{name:C.name}),className:"ri-savedMeasurementName",defaultValue:C.name,disabled:e.disabled||e.readOnly,onBlur:I=>{let L=I.target.value.trim()||C.name;L!==C.name?e.onItems(e.items.map(B=>B.id===C.id?{...B,name:L}:B)):I.target.value=L}},`${C.id}:${C.name}`),(0,oe.jsx)("span",{className:"ri-savedMeasurementValue",title:t(T?g[T.status]:"measurementWaiting"),children:T?.value!=null?`${T.value.toFixed(3)} ${T.unit}`:"\u2014"}),(0,oe.jsx)("button",{type:"button",className:"ri-savedMeasurementDelete","aria-label":t("deleteSavedMeasurement",{name:C.name}),disabled:e.disabled||e.readOnly,onClick:()=>e.onItems(e.items.filter(I=>I.id!==C.id)),children:(0,oe.jsx)(Pr.X,{size:13})})]},C.id)})}),!e.items.length&&(0,oe.jsx)("p",{className:"ri-measureEmpty",children:t("noSavedMeasurements")}),(0,oe.jsxs)("details",{className:"ri-measureTransfer",children:[(0,oe.jsx)("summary",{children:t("measurementFiles")}),(0,oe.jsxs)("div",{className:"ri-measureActions",children:[(0,oe.jsx)("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||!e.items.length,onClick:e.onExportJson,children:t("exportMeasurementJson")}),(0,oe.jsx)("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||!e.items.length,onClick:e.onExportCsv,children:t("exportMeasurementCsv")}),(0,oe.jsx)("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||e.readOnly||e.settingsReadOnly,onClick:()=>b.current?.click(),children:t("importMeasurementJson")}),(0,oe.jsx)("input",{ref:b,type:"file",accept:".json,application/json",hidden:!0,onChange:C=>{let T=C.target.files?.[0];if(C.target.value="",!!T){if(T.size>5*1024*1024){e.onImport("{}");return}T.text().then(e.onImport).catch(()=>e.onImport("{}"))}}})]})]}),n&&e.error&&(0,oe.jsx)("p",{className:"ri-measureLibraryError",role:"status",children:t.message(e.error)})]});return n?r?(0,lC.createPortal)(M,r):null:(0,oe.jsxs)("div",{ref:a,className:"ri-measureTools",style:{top:e.top},children:[(0,oe.jsxs)("div",{className:"ri-measureToolbarRow",children:[(0,oe.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,oe.jsx)(Pr.PencilRuler,{size:16})}),(0,oe.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,oe.jsx)(Pr.RulerDimensionLine,{size:16})}),(0,oe.jsx)("button",{type:"button",className:"ri-measureSelect","aria-expanded":s,onClick:()=>l(!s),children:t("savedMeasurements",{count:e.items.length})}),e.active&&(0,oe.jsxs)(oe.Fragment,{children:[E,S]}),x>0&&(0,oe.jsxs)(oe.Fragment,{children:[(0,oe.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onUndo,disabled:e.disabled,title:t("undoMeasurementPoint"),children:(0,oe.jsx)(Pr.Undo2,{size:16})}),(0,oe.jsx)("button",{type:"button",className:"ri-measureButton",onClick:e.onClear,disabled:e.disabled,title:t("clearMeasurements"),children:(0,oe.jsx)(Pr.Eraser,{size:16})})]}),_]}),(e.active||s)&&M,(e.active||e.error)&&(0,oe.jsx)("div",{className:`ri-measureHint${e.error?" ri-measureHint--error":""}`,role:"status",children:e.error?t.message(e.error):w})]})}var Qr=require("react"),cC=require("@react-three/fiber");var Tu=require("react/jsx-runtime"),oL=100;function Xm({items:e,sceneRef:t,modelId:n,tilesetUrl:r,settings:i,legacyUnit:o,revision:a,onResults:s}){let[l,c]=(0,Qr.useState)([]),u=(0,Qr.useRef)(""),p=(0,Qr.useCallback)(()=>{let y=e.length&&t.current?Gc(t.current):void 0,h=e.map(P=>zp(P,t.current,n,r,y)),v=h.map(({measurement:P,points:w,status:D})=>Ja(P,i,o,w,D)),x=JSON.stringify([h.map(({measurement:P,points:w,status:D})=>[P.id,P.tool,P.visible,D,w.map(E=>[E.position,E.normal,E.faceVertices])]),v]);u.current!==x&&(u.current=x,c(h),s(v))},[e,t,n,r,i,o,s]);(0,Qr.useEffect)(()=>{p()},[p,a]);let d=(0,Qr.useRef)(0),m=(0,Qr.useRef)(null),f=(0,Qr.useRef)(p);f.current=p,(0,Qr.useEffect)(()=>()=>{m.current&&clearTimeout(m.current)},[]),(0,cC.useFrame)(()=>{if(!e.length)return;let y=d.current+oL-performance.now();y<=0?(d.current=performance.now(),p()):m.current??(m.current=setTimeout(()=>{m.current=null,d.current=performance.now(),f.current()},y))});let{factor:b,displayUnit:g}=Za(i,o);return(0,Tu.jsx)(Tu.Fragment,{children:l.filter(({measurement:y,status:h})=>y.visible!==!1&&(h==="ready"||h==="approximate")).map(({measurement:y,points:h})=>(0,Tu.jsx)(Pl,{points:h,unit:g,scale:b,box:null,showDimensions:!1,tool:y.tool,areaClosed:y.tool==="area"},y.id))})}var pt=require("react"),ws=require("@react-three/xr"),mC=require("@react-three/fiber"),Pu=require("three"),_i=require("react/jsx-runtime"),aL=1,uC=1,sL=.1,lL=10;function cL(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:aL/s,offset:[-o,-e.min[1],-a]}}function dC(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function pC(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var uL=(0,pt.forwardRef)(function({box:t,scaleMode:n,children:r,onARStateChange:i},o){let a=(0,pt.useRef)(null),s=(0,pt.useRef)(null),l=(0,pt.useRef)(null),c=(0,ws.useXR)(B=>B.session!=null),u=(0,ws.useXR)(B=>B.mode==="immersive-ar"),p=(0,pt.useMemo)(()=>t?cL(t,n):null,[t,n]),d=(0,pt.useRef)(new Pu.Vector3(0,0,-uC)),m=(0,pt.useRef)(1),f=(0,pt.useRef)(0),b=(0,pt.useRef)(!0),g=(0,pt.useRef)(!1),y=(0,pt.useMemo)(()=>new Pu.Matrix4,[]),h=(0,pt.useRef)(new Pu.Vector3),v=(0,pt.useRef)(!1),x=(0,pt.useRef)(null),P=(0,pt.useRef)(!1),w=(0,pt.useRef)(0),D=(0,pt.useRef)(0),E=(0,pt.useRef)(1),S=(0,pt.useRef)(0),_=(0,pt.useCallback)(()=>{if(!i||!u)return;let B={canPlace:v.current,isPlacementMode:b.current,isModelPlaced:g.current},N=x.current;N&&N.canPlace===B.canPlace&&N.isPlacementMode===B.isPlacementMode&&N.isModelPlaced===B.isModelPlaced||(x.current=B,i(B))},[u,i]),M=(0,pt.useCallback)(()=>!u||!v.current?!1:(d.current.copy(h.current),g.current=!0,b.current=!1,_(),!0),[_,u]),C=(0,pt.useCallback)(()=>{u&&(b.current=!0,_())},[_,u]),T=(0,pt.useCallback)(()=>{let B=M();return!B&&u&&(b.current=!1,_()),B},[_,u,M]),I=(0,pt.useCallback)(()=>{u&&(b.current=!1,_())},[_,u]);(0,pt.useImperativeHandle)(o,()=>({placeCurrent:M,startPlacementMode:C,finishPlacementMode:T,cancelPlacementMode:I}),[I,T,M,C]),(0,pt.useEffect)(()=>{if(!c){d.current.set(0,0,-uC),m.current=1,f.current=0,v.current=!1,P.current=!1,b.current=!0,g.current=!1,x.current=null;return}u&&(v.current=!1,P.current=!1,b.current=!0,g.current=!1,x.current=null,_())},[_,c,u]),(0,ws.useXRHitTest)((B,N)=>{if(!u||B.length===0){v.current&&(v.current=!1,_());return}N(y,B[0])&&(h.current.setFromMatrixPosition(y),v.current||(v.current=!0,_()))},"viewer"),(0,ws.useXRInputSourceEvent)("all","select",()=>{!u||P.current||!b.current||M()},[u,M]),(0,pt.useEffect)(()=>{if(!u)return;let B=O=>{O.touches.length===2&&(P.current=!0,w.current=dC(O.touches),D.current=pC(O.touches),E.current=m.current,S.current=f.current)},N=O=>{if(!P.current||O.touches.length!==2)return;O.preventDefault();let V=dC(O.touches);if(w.current>0){let Q=V/w.current;m.current=Math.min(lL,Math.max(sL,E.current*Q))}let G=pC(O.touches);f.current=S.current-(G-D.current)},R=O=>{O.touches.length===0&&requestAnimationFrame(()=>{P.current=!1})};return window.addEventListener("touchstart",B),window.addEventListener("touchmove",N,{passive:!1}),window.addEventListener("touchend",R),window.addEventListener("touchcancel",R),()=>{window.removeEventListener("touchstart",B),window.removeEventListener("touchmove",N),window.removeEventListener("touchend",R),window.removeEventListener("touchcancel",R)}},[u]),(0,mC.useFrame)(()=>{let B=a.current,N=s.current;if(!B||!N)return;!c||!p?(B.visible=!0,B.position.set(0,0,0),B.rotation.set(0,0,0),N.scale.setScalar(1)):(B.visible=!u||g.current,B.position.copy(d.current),B.rotation.set(0,f.current,0),N.scale.setScalar(p.scale*m.current));let R=l.current;if(R){let O=u&&b.current&&v.current;R.visible=O,O&&R.position.copy(h.current)}});let L=c&&p?p.offset:[0,0,0];return(0,_i.jsxs)(_i.Fragment,{children:[(0,_i.jsxs)("mesh",{ref:l,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,_i.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,_i.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,_i.jsx)("group",{ref:a,children:(0,_i.jsx)("group",{ref:s,children:(0,_i.jsx)("group",{position:L,children:r})})})]})}),fC=uL;var Ym=require("react");var dL="ri:license-grant:v1",pL={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},hC=new Map;function bC(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function gC(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return bC(t.padEnd(Math.ceil(t.length/4)*4,"="))}function mL(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 $m(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 ey(e,t){return`${dL}:${t}:${e}`}function fL(e,t){let n=hC.get(e);if(n)return n;let r=crypto.subtle.importKey("spki",bC(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return hC.set(e,r),r}async function ty(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[r,i,o,a,...s]=e.split("."),l=pL[i];if(r!=="ri1"||!l||!o||!a||s.length>0)return null;let c=JSON.parse(new TextDecoder().decode(gC(o)));if(!mL(c)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await fL(i,l),gC(a),new TextEncoder().encode(`${r}.${i}.${o}`)))return null;let p=Math.floor(Date.now()/1e3),d=c.expiresAt-c.issuedAt;return c.licenseKeyHash!==t||c.domain!==n||c.expiresAt<=p||c.issuedAt>p+300||d<=0||d>43200?null:{environment:c.environment,tier:c.tier,expiresAt:c.expiresAt}}catch{return null}}async function yC(e,t,n){try{return await ty(e,await $m(t),n)}catch{return null}}async function vC(e,t,n){try{let r=await $m(t);return await ty(e,r,n)?(localStorage.setItem(ey(r,n),e),!0):!1}catch{return!1}}async function xC(e,t){try{let n=await $m(e),r=ey(n,t),i=localStorage.getItem(r);if(!i)return null;let o=await ty(i,n,t);return o||localStorage.removeItem(r),o}catch{return null}}async function ny(e,t){try{let n=await $m(e);localStorage.removeItem(ey(n,t))}catch{}}var hL=["localhost","127.0.0.1","0.0.0.0"],gL=e=>hL.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),MC="https://react-immersive.liveroom.dev/api/validate-license",_C=()=>typeof window<"u",bL=300*1e3,yL=5e3,vL=400,iy=new Map,ry=new Map,ga=class extends Error{},CC=async(e,t,n)=>{let r=await xC(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},wC=async(e,t,n)=>{let r=await CC(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})},xL=e=>e instanceof ga||e instanceof TypeError,wL=()=>new Promise(e=>setTimeout(e,vL)),SL=e=>e==="development"||e==="production",ML=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&&!SL(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},_L=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},TC=(e,t,n)=>`${n}::${e}::${t}`,PC=e=>{let t=iy.get(e);return t?Date.now()-t.timestamp>bL?(iy.delete(e),null):t.result:null},CL=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),TL=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function PL(e,t,n,r){let i=TC(e,t,r),o=PC(i);if(o)return o;let a=ry.get(i);if(a)return a;let s=(async()=>{for(let l=0;l<2;l+=1)try{return await AL(e,t,n,i,r)}catch(c){if(!xL(c))throw c;if(l===0){let u=await CC(e,t,n);if(u)return u;await wL();continue}return wC(e,t,n)}return wC(e,t,n)})().finally(()=>{ry.delete(i)});return ry.set(i,s),s}async function AL(e,t,n,r,i){let o=new AbortController,a=setTimeout(()=>o.abort(),yL),s;try{s=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:o.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(u){throw o.signal.aborted?new ga("License validation timed out"):u}finally{clearTimeout(a)}let l;try{l=await s.json()}catch{throw new ga(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new ga(`License server error (${s.status})`);let u=_L(l)??`License validation failed${s.status?` (${s.status})`:""}`;return await ny(e,t),TL(u,n)}if(!ML(l))throw new ga("License server returned an unexpected payload");let c=CL(l,n);if(c.status==="valid"&&i!==MC){let u=l.offlineGrant?await yC(l.offlineGrant,e,t):null;if(!u)throw new ga("License validation endpoint did not return a verifiable signed grant");c={...c,environment:u.environment,tier:u.tier}}return c.status==="valid"?(iy.set(r,{result:c,timestamp:Date.now()}),l.offlineGrant&&(await vC(l.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await ny(e,t),c}var SC=(e,t)=>{let n=e.trim();return!_C()||!n?null:PC(TC(n,window.location.hostname.toLowerCase(),t))},AC=(e,t=MC)=>{let[n,r]=(0,Ym.useState)(()=>SC(e,t)??{status:"checking",isLocalDomain:!1});return(0,Ym.useEffect)(()=>{if(!_C())return;let i=!1,o=p=>{i||r(p)},a=e.trim(),s=window.location.hostname.toLowerCase(),l=gL(s),c=SC(e,t);return c?(o(c),()=>{i=!0}):(o({status:"checking",isLocalDomain:l}),a?((async()=>{try{o(await PL(a,s,l,t))}catch(p){let d=p instanceof TypeError?"Could not reach license server":p instanceof Error?p.message:"License validation failed";o({status:"invalid",reason:d,isLocalDomain:l})}})(),()=>{i=!0}):(o({status:"invalid",reason:"No license key provided",isLocalDomain:l}),()=>{i=!0}))},[e,t]),n};var Qt=require("react");var Dn=require("react/jsx-runtime"),EL={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},RL={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"},Km=({direction:e})=>{let t=EL[e],n=RL[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"})]})},Oo=16,OL={"bottom-left":{bottom:Oo,left:Oo,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Oo,right:Oo,top:"auto",left:"auto",transform:"none"},"top-left":{top:Oo,left:Oo,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Oo,right:Oo,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:Oo,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},DL=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:r=.001,rotateSensitivity:i=.01,position:o="center-bottom"})=>{let a=xe(),s=(0,Qt.useRef)(null),[l,c]=(0,Qt.useState)({x:0,y:0}),u=(0,Qt.useRef)(!1),p=(0,Qt.useRef)({x:0,y:0}),d=(0,Qt.useRef)(void 0),m=(0,Qt.useRef)(void 0),f=(0,Qt.useRef)(null),b=(0,Qt.useRef)(0),g=()=>e.current,y=(I,L,B)=>{let N=Math.hypot(I,L);if(N>B){let R=B/N;return{x:I*R,y:L*R}}return{x:I,y:L}},h=I=>{let B=Math.abs(I);return B<.12?0:Math.sign(I)*((B-.12)/(1-.12))},v=(0,Qt.useCallback)(()=>{let I=()=>{let{x:L,y:B}=p.current,N=h(L),R=h(B);if(t&&(N!==0||R!==0)){let O=g();O&&O.rotate(-N*i,-R*i,!0)}d.current=requestAnimationFrame(I)};d.current=requestAnimationFrame(I)},[t,i]),x=(0,Qt.useCallback)(()=>{d.current&&cancelAnimationFrame(d.current)},[]),P=(0,Qt.useCallback)((I,L)=>{if(!s.current||!u.current)return;let B=s.current.getBoundingClientRect(),N=B.left+B.width/2,R=B.top+B.height/2,O=B.width/2-18,V=I-N,G=L-R,Q=y(V,G,O);c(Q),p.current={x:Q.x/O,y:Q.y/O}},[]),w=(0,Qt.useCallback)(I=>{if(!t)return;I.preventDefault(),I.stopPropagation(),u.current=!0,v();let L="touches"in I?I.touches[0]:I;P(L.clientX,L.clientY)},[t,v,P]),D=(0,Qt.useCallback)(I=>{if(!u.current)return;I.preventDefault();let L="touches"in I?I.touches[0]:I;P(L.clientX,L.clientY)},[P]),E=(0,Qt.useCallback)(()=>{u.current=!1,c({x:0,y:0}),p.current={x:0,y:0},x()},[x]),S=r*10,_=(0,Qt.useCallback)(I=>{t&&g()?.forward(I*S,!0)},[t,S]),M=(0,Qt.useCallback)(I=>{t&&g()?.truck(I*S,0,!0)},[t,S]),C=(0,Qt.useCallback)((I,L,B)=>{if(!t)return;m.current&&cancelAnimationFrame(m.current),f.current={control:I,amount:L,action:B},b.current=0,B(L);let N=R=>{if(!f.current)return;if(b.current===0){b.current=R,m.current=requestAnimationFrame(N);return}if(R-b.current>200){let{amount:V,action:G}=f.current;G(V),b.current=R}m.current=requestAnimationFrame(N)};m.current=requestAnimationFrame(N)},[t]),T=(0,Qt.useCallback)(I=>{f.current?.control===I&&(m.current&&(cancelAnimationFrame(m.current),m.current=void 0),f.current=null,b.current=0)},[]);return(0,Qt.useEffect)(()=>(window.addEventListener("mousemove",D),window.addEventListener("mouseup",E),window.addEventListener("touchmove",D,{passive:!1}),window.addEventListener("touchend",E),window.addEventListener("touchcancel",E),()=>{window.removeEventListener("mousemove",D),window.removeEventListener("mouseup",E),window.removeEventListener("touchmove",D),window.removeEventListener("touchend",E),window.removeEventListener("touchcancel",E),x(),m.current&&cancelAnimationFrame(m.current)}),[D,E,x]),t?(0,Dn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...OL[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:()=>C("up",1,_),onMouseUp:()=>T("up"),onMouseLeave:()=>T("up"),onTouchStart:I=>{I.preventDefault(),C("up",1,_)},onTouchEnd:()=>T("up"),onTouchCancel:()=>T("up"),children:(0,Dn.jsx)(Km,{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:()=>C("left",-1,M),onMouseUp:()=>T("left"),onMouseLeave:()=>T("left"),onTouchStart:I=>{I.preventDefault(),C("left",-1,M)},onTouchEnd:()=>T("left"),onTouchCancel:()=>T("left"),children:(0,Dn.jsx)(Km,{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:()=>C("right",1,M),onMouseUp:()=>T("right"),onMouseLeave:()=>T("right"),onTouchStart:I=>{I.preventDefault(),C("right",1,M)},onTouchEnd:()=>T("right"),onTouchCancel:()=>T("right"),children:(0,Dn.jsx)(Km,{direction:"right"})})]}),(0,Dn.jsx)("button",{"aria-label":a("moveBackward"),className:"mc__arrow mc__arrow--down",onMouseDown:()=>C("down",-1,_),onMouseUp:()=>T("down"),onMouseLeave:()=>T("down"),onTouchStart:I=>{I.preventDefault(),C("down",-1,_)},onTouchEnd:()=>T("down"),onTouchCancel:()=>T("down"),children:(0,Dn.jsx)(Km,{direction:"down"})})]})}):null},EC=DL;var Au=require("three");function Zm(e){return[e.x,e.y,e.z]}function RC(e){let t=new Au.Box3().setFromObject(e),n=0;return e.traverse(r=>{r.isMesh&&(n+=1)}),{bounds:{min:Zm(t.min),max:Zm(t.max),center:Zm(t.getCenter(new Au.Vector3)),size:Zm(t.getSize(new Au.Vector3))},objectCount:n,materialVariants:yg(e),materialVariantGroups:Kd(e)}}var IL="#ff3b30",kL=Object.freeze({}),OC=e=>e;function LL(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function BL(e,t){let n=e.metadata;for(let r of t.split(".")){if(!LL(n))return;n=n[r]}return n}function NL(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 BL(e,t.metadata)===t.equals}function VL(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 oy=e=>`#${e.map(t=>Math.round(t).toString(16).padStart(2,"0")).join("")}`;function ay(e,t){let n=e.map(([l,c])=>({at:l,rgb:VL(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 oy(n[0].rgb);let r=n[n.length-1];if(t>=r.at)return oy(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 oy(o.rgb.map((l,c)=>l+(a.rgb[c]-l)*s))}function Qm(e,t){if(!t?.length)return{bindings:e,pulses:kL,sourceOf:OC};let n=new Map,r={};for(let a of t){let s=a.target?pn(e,a.target):Object.keys(e),l=a.when?Array.isArray(a.when)?a.when:[a.when]:[];for(let c of s){let u=e[c];if(!l.every(d=>NL(u,d)))continue;let p={...a.material};if(a.colorScale){let d=u.metrics?.[a.colorScale.metric],m=typeof d=="number"?ay(a.colorScale.stops,d):null;m&&(p={...p,[a.colorScale.channel??"baseColor"]:m})}if(a.pulse){let d=a.pulse===!0?{}:a.pulse;r[c]={color:d.color??IL,speed:d.speed!==void 0&&d.speed>0?d.speed:1};let m=p.emissiveIntensity??n.get(c)?.emissiveIntensity??u.style?.material?.emissiveIntensity;m!==void 0&&m>0||(p.emissiveIntensity=1)}Object.keys(p).length>0&&n.set(c,{...n.get(c),...p})}}if(n.size===0)return{bindings:e,pulses:r,sourceOf:OC};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 Ar=require("react"),ba=require("lucide-react");var At=require("react");var DC=e=>e instanceof Error?e.message:String(e);function jL(e){if(!e||!Number.isSafeInteger(e.amountMinor)||e.amountMinor<0||!/^[A-Z]{3}$/.test(e.currency)||e.expiresAt!==void 0&&(!Number.isFinite(Date.parse(e.expiresAt))||Date.parse(e.expiresAt)<=Date.now()))throw new Error("The pricing service returned an invalid price.");return{amountMinor:e.amountMinor,currency:e.currency,...e.expiresAt?{expiresAt:e.expiresAt}:{},...e.label?{label:String(e.label)}:{}}}function UL(e,t){let n=new Set;if(!e||typeof e.available!="boolean"||e.message!==void 0&&typeof e.message!="string")throw new Error("The availability service returned invalid data.");if(e.options!==void 0){if(!Array.isArray(e.options))throw new Error("The availability service returned invalid data.");for(let r of e.options){let i=JSON.stringify([r?.groupId,r?.optionId]);if(!r||typeof r.available!="boolean"||r.reason!==void 0&&typeof r.reason!="string"||n.has(i)||!t.groups.some(o=>o.id===r.groupId&&o.options.some(a=>a.id===r.optionId)))throw new Error("The availability service returned invalid data.");n.add(i)}}return{available:e.available,...e.message!==void 0?{message:e.message}:{},...e.options?{options:e.options.map(({groupId:r,optionId:i,available:o,reason:a})=>({groupId:r,optionId:i,available:o,...a!==void 0?{reason:a}:{}}))}:{}}}function Jm(e){let t=JSON.stringify(e.product),n=(0,At.useMemo)(()=>Mc(e.product),[t]),r=JSON.stringify([n.id,n.revision]),[i,o]=(0,At.useState)(()=>({productIdentity:r,selections:e.initialSelections??zi(n)})),a=e.selections??(i.productIdentity===r?i.selections:zi(n)),[s,l]=(0,At.useState)(e.initialQuantity??1),c=JSON.stringify(a),u=(0,At.useMemo)(()=>Vn(n,a,s),[n,c,s]),p=e.adapter,d=p?.key??"",m=`${t}
3787
+ ${u.key}
3788
+ ${d}`;if(p&&(typeof p.key!="string"||!p.key.trim()))throw new Error("A commerce adapter needs a stable key identifying its backend/pricing context.");let[f,b]=(0,At.useState)(0),[g,y]=(0,At.useState)(null),[h,v]=(0,At.useState)(null),[x,P]=(0,At.useState)({identity:m,pending:null,result:null,error:null}),w=(0,At.useRef)(!1),D=(0,At.useRef)(!0),E=(0,At.useRef)(0),S=(0,At.useRef)(null),_=(0,At.useRef)(null),M=(0,At.useRef)({options:e,product:n,base:u,identity:m,commerce:g,adapter:p,optionStates:[]}),C=e.selections!==void 0&&!e.onSelectionsChange,T=g?.identity===m&&g.adapterKey===d?g:null,I=T?.configuration??u,L=(0,At.useMemo)(()=>ep(n,u.selections,T?.availability??void 0,s),[n,u,T?.availability,s]);M.current={options:e,product:n,base:u,identity:m,commerce:g,adapter:p,optionStates:L},(0,At.useEffect)(()=>{P({identity:m,pending:null,result:null,error:null}),v(null)},[m]);let B=(0,At.useCallback)(()=>{w.current=!1,P($=>({...$,error:null,result:null})),b($=>$+1)},[]);(0,At.useEffect)(()=>{let $=new AbortController,ne=++E.current;return w.current=!1,u.valid?(y({identity:m,adapterKey:d,status:"loading",configuration:u,price:null,availability:null,error:null}),(async()=>{try{let Z=structuredClone(u),U={signal:$.signal};if(p?.resolveSku){let se=await p.resolveSku(structuredClone(Z),U);if(se!==null&&(typeof se!="string"||!se.trim()))throw new Error("The SKU service returned an invalid SKU.");Z.sku=se}if($.signal.aborted)return;let[F,te]=await Promise.all([p?.getPrice?Promise.resolve().then(()=>p.getPrice(structuredClone(Z),U)).then(jL):Promise.resolve(null),p?.getAvailability?Promise.resolve().then(()=>p.getAvailability(structuredClone(Z),U)).then(se=>UL(se,n)):Promise.resolve(null)]);if($.signal.aborted||ne!==E.current||M.current.identity!==m||M.current.adapter?.key!==p?.key)return;w.current=!0,y({identity:m,adapterKey:d,status:"ready",configuration:Z,price:F??null,availability:te??null,error:null})}catch(Z){if($.signal.aborted||ne!==E.current||M.current.identity!==m||M.current.adapter?.key!==p?.key)return;y({identity:m,adapterKey:d,status:"error",configuration:u,price:null,availability:null,error:DC(Z)})}})(),()=>$.abort()):(y(null),()=>$.abort())},[m,d,f]),(0,At.useEffect)(()=>{let $=T?.price?.expiresAt;if(!$)return;let ne=Date.parse($)-Date.now(),Z,U=()=>{let F=Date.parse($)-Date.now();if(F>0){Z=setTimeout(U,Math.min(F,2147483647));return}w.current=!1,y(te=>te?.identity===m?{...te,status:"error",error:"The price expired. Refresh it before continuing."}:te)};return Z=setTimeout(U,Math.min(Math.max(ne,0),2147483647)),()=>clearTimeout(Z)},[T?.price?.expiresAt,m]),(0,At.useEffect)(()=>(D.current=!0,()=>{D.current=!1,w.current=!1,E.current++,S.current?.controller.abort()}),[]);let N=(0,At.useCallback)($=>{let ne=M.current;if(ne.options.selections!==void 0&&!ne.options.onSelectionsChange)throw new Error("Selections are controlled; supply onSelectionsChange to edit them.");if(S.current)throw new Error("Wait for the current cart or quote request to finish.");let Z=Vn(ne.product,$,ne.base.quantity);if(Z.issues.some(U=>U.code==="unknown-group"||U.code==="unknown-option"))throw new Error("Selections reference unknown product options.");if(Z.key===ne.base.key){v(null);return}w.current=!1,v(null),b(U=>U+1),ne.options.onSelectionsChange&&ne.options.onSelectionsChange(structuredClone(Z.selections)),ne.options.selections===void 0&&o({productIdentity:JSON.stringify([ne.product.id,ne.product.revision]),selections:Z.selections})},[]),R=(0,At.useCallback)(($,ne)=>{let Z=M.current,U=Z.product.groups.find(se=>se.id===$),F=Z.optionStates.find(se=>se.groupId===$&&se.optionId===ne);if(!U||ne!==null&&!F)throw new Error("Unknown product option.");let te=ne===null?Vn(Z.product,{...Z.base.selections,[$]:null},Z.base.quantity).issues.filter(se=>se.groupIds.includes($)&&se.code!=="sku"):[];return te.length||F&&!F.available?(v(F?.reasons.join(" ")||te.map(se=>se.message).join(" ")),!1):(N({...Z.base.selections,[$]:ne}),!0)},[N]),O=(0,At.useCallback)(($,ne)=>{let Z=M.current,U=tl(Z.product,Z.base.selections,$,ne,Z.base.quantity);return U?(N(U),!0):(v("This choice isn't available with any combination."),!1)},[N]),V=(0,At.useCallback)($=>{if(S.current)throw new Error("Wait for the current cart or quote request to finish.");Vn(M.current.product,M.current.base.selections,$),$!==M.current.base.quantity&&(w.current=!1,l($))},[]),G=(0,At.useCallback)($=>{if(S.current)return S.current.kind===$&&S.current.identity===M.current.identity?S.current.promise:Promise.reject(new Error("Another commerce request is already running."));let ne=M.current,Z=ne.commerce,U=$==="cart"?ne.adapter?.addToCart:ne.adapter?.requestQuote,F=he=>(P({identity:ne.identity,pending:null,result:null,error:he}),Promise.reject(new Error(he)));if(!U)return F("No commerce adapter is configured for this action.");if(!ne.base.valid)return F("Resolve the option conflicts before continuing.");if(!w.current||!Z||Z.identity!==ne.identity||Z.adapterKey!==(ne.adapter?.key??"")||Z.status!=="ready")return F("Wait for current pricing and availability, or retry the service request.");if(Z.availability?.available===!1||Z.availability?.options?.some(he=>!he.available&&ne.base.selections[he.groupId]===he.optionId))return F(Z.availability?.message??"This configuration is currently unavailable.");if($==="cart"&&ne.adapter?.resolveSku&&!Z.configuration.sku)return F("No SKU is available for this configuration.");if(Z.price?.expiresAt&&Date.parse(Z.price.expiresAt)<=Date.now())return B(),F("The price expired. Refresh it before continuing.");let te=structuredClone(Z.configuration),se=Z.price?structuredClone(Z.price):null,ye=new AbortController,K=ne.identity;(_.current?.identity!==K||_.current.kind!==$)&&(_.current={identity:K,kind:$,key:crypto.randomUUID()});let re=_.current.key;P({identity:K,pending:$,result:null,error:null});let ce=Promise.resolve().then(()=>(ye.signal.throwIfAborted(),U(te,{signal:ye.signal,idempotencyKey:re,price:se}))).then(he=>{if(!he||typeof he!="object"||he.id!==void 0&&typeof he.id!="string"||he.message!==void 0&&typeof he.message!="string")throw new Error("The commerce service returned an invalid result.");let qe={...he.id?{id:he.id}:{},...he.message?{message:he.message}:{}};return M.current.identity===K&&!ye.signal.aborted&&P({identity:K,pending:null,result:qe,error:null}),_.current=null,qe}).catch(he=>{throw M.current.identity===K&&!ye.signal.aborted&&P({identity:K,pending:null,result:null,error:DC(he)}),he}).finally(()=>{S.current?.promise===ce&&(S.current=null),D.current&&P(he=>({...he,pending:null}))});return S.current={identity:K,kind:$,promise:ce,controller:ye},ce},[B]),Q=u.valid&&T?.status==="ready"&&w.current&&!S.current&&T.availability?.available!==!1&&!T.availability?.options?.some($=>!$.available&&u.selections[$.groupId]===$.optionId)&&(!T.price?.expiresAt||Date.parse(T.price.expiresAt)>Date.now());return{product:n,configuration:I,optionStates:L,selectOption:R,selectOptionWithFix:O,setSelections:N,reset:()=>N(zi(n)),setQuantity:V,exportConfiguration:()=>np(I),importConfiguration:$=>{let ne=rp($,n);N(ne.selections),V(ne.quantity)},viewerProps:{...e.objectBindings!==void 0?{objectBindings:e.objectBindings}:{},sceneConfig:{...e.sceneConfig??nr,product:{definition:n,selections:u.selections}}},status:T?.status??(u.valid?"loading":"idle"),price:T?.price??(p?.getPrice||!u.valid?null:Zd(n,I)),checkoutUrl:T?.availability?.available===!1?null:Qd(n,I),availability:T?.availability??null,error:h??(x.identity===m?x.error:null)??T?.error??null,readOnly:C,pendingAction:S.current?S.current.kind:null,result:x.identity===m?x.result:null,canAddToCart:!!(Q&&p?.addToCart&&(!p.resolveSku||I.sku)),canRequestQuote:!!(Q&&p?.requestQuote),hasCommerce:!!p,hasCart:!!p?.addToCart,hasQuote:!!p?.requestQuote,addToCart:()=>G("cart"),requestQuote:()=>G("quote"),refresh:B}}var IC=require("react");var Re=require("react/jsx-runtime");function zL(e,t){return t.map(n=>e.groups.find(r=>r.id===n.groupId)?.options.find(r=>r.id===n.optionId)?.label).filter(Boolean).join(", ")}function FL({c:e,group:t,option:n,state:r,name:i,display:o,busy:a}){let s=xe(),l=`${i}-${n.id}-reason`,c=!r.available&&r.fix?.length?r.fix:null,u=!r.available&&!c,p=c?s("productAlsoChanges",{changes:zL(e.product,c)}):r.available?"":r.reasons.join(" "),d=n.priceDeltaMinor&&e.product.pricing?_c(n.priceDeltaMinor,e.product.pricing.currency,!0):"",m=["ri-productChoice",r.selected&&"ri-productChoice--selected",!r.available&&"ri-productChoice--unavailable"].filter(Boolean).join(" "),f=(0,Re.jsx)("input",{type:"radio",name:i,checked:r.selected,disabled:u||a||e.readOnly,"aria-describedby":p?l:void 0,onChange:()=>{c?e.selectOptionWithFix(t.id,n.id):e.selectOption(t.id,n.id)}});return o==="swatches"?(0,Re.jsxs)("label",{className:`${m} ri-productSwatch`,title:[n.label,d,p].filter(Boolean).join(" \xB7 "),children:[f,(0,Re.jsx)("span",{className:"ri-productSwatchChip",style:{background:n.swatch??"var(--ri-ui-field)"},"aria-hidden":"true"}),(0,Re.jsxs)("span",{className:"ri-productVisuallyHidden",children:[n.label,d?` ${d}`:""]}),p?(0,Re.jsx)("span",{id:l,className:"ri-productVisuallyHidden",children:p}):null]}):o==="chips"?(0,Re.jsxs)("label",{className:`${m} ri-productChip`,title:p||void 0,children:[f,(0,Re.jsxs)("span",{children:[n.label,d?(0,Re.jsx)("em",{children:d}):null]}),p?(0,Re.jsx)("span",{id:l,className:"ri-productVisuallyHidden",children:p}):null]}):(0,Re.jsxs)("label",{className:m,children:[f,n.swatch?(0,Re.jsx)("span",{className:"ri-productSwatchChip",style:{background:n.swatch},"aria-hidden":"true"}):null,(0,Re.jsxs)("span",{className:"ri-productChoiceText",children:[(0,Re.jsxs)("span",{className:"ri-productChoiceTitle",children:[(0,Re.jsx)("span",{children:n.label}),d?(0,Re.jsx)("em",{children:d}):null]}),n.description?(0,Re.jsx)("small",{children:n.description}):null,p?(0,Re.jsx)("small",{id:l,children:p}):null]})]})}function Eu({configurator:e,className:t="",showCommerce:n=!0,actions:r}){let i=xe(),o=!!e.pendingAction,a=(0,IC.useId)(),s=e.price?_c(e.price.amountMinor,e.price.currency):"",l=n&&(e.hasCommerce||!!e.product.pricing||!!e.product.checkout);return(0,Re.jsxs)("section",{className:`ri-productOptions ${t}`,"aria-label":i("productOptionsFor",{product:e.product.label}),children:[(0,Re.jsxs)("div",{className:"ri-productHeader",children:[(0,Re.jsx)("strong",{children:e.product.label}),(0,Re.jsx)("button",{type:"button",disabled:o||e.readOnly,onClick:e.reset,children:i("productReset")})]}),e.product.groups.map((c,u)=>{let p=`${a}-${u}`,d=c.display??"list",m=c.options.find(b=>b.id===e.configuration.selections[c.id]),f=c.required?[]:Vn(e.product,{...e.configuration.selections,[c.id]:null},e.configuration.quantity).issues.filter(b=>b.groupIds.includes(c.id)).map(b=>b.message);return(0,Re.jsxs)("fieldset",{disabled:o||e.readOnly,children:[(0,Re.jsxs)("legend",{children:[c.label,c.required?null:(0,Re.jsxs)("small",{children:[" (",i("productOptional"),")"]}),d==="swatches"&&m?(0,Re.jsx)("span",{className:"ri-productLegendValue",children:m.label}):null]}),(0,Re.jsxs)("div",{className:`ri-productChoices ri-productChoices--${d}`,children:[c.required?null:(0,Re.jsxs)("label",{className:`ri-productChoice${d==="swatches"||d==="chips"?" ri-productChip":""}${e.configuration.selections[c.id]===null?" ri-productChoice--selected":""}${f.length?" ri-productChoice--unavailable":""}`,title:f.join(" ")||void 0,children:[(0,Re.jsx)("input",{type:"radio",name:p,checked:e.configuration.selections[c.id]===null,disabled:!!f.length,onChange:()=>e.selectOption(c.id,null)}),(0,Re.jsx)("span",{children:i("productNone")})]}),c.options.map(b=>{let g=e.optionStates.find(y=>y.groupId===c.id&&y.optionId===b.id);return(0,Re.jsx)(FL,{c:e,group:c,option:b,state:g,name:p,display:d,busy:o},b.id)})]})]},c.id)}),e.configuration.issues.length?(0,Re.jsx)("ul",{className:"ri-productIssues","aria-label":i("productIssues"),children:e.configuration.issues.map((c,u)=>(0,Re.jsx)("li",{children:c.message},u))}):null,l?(0,Re.jsxs)("div",{className:"ri-productCommerce",children:[(0,Re.jsxs)("label",{className:"ri-productQuantity",children:[i("productQuantity"),(0,Re.jsx)("input",{type:"number",min:1,max:9999,step:1,value:e.configuration.quantity,disabled:o,onChange:c=>{let u=c.target.valueAsNumber;Number.isSafeInteger(u)&&u>=1&&u<=9999&&e.setQuantity(u)}})]}),e.status==="loading"&&e.hasCommerce?(0,Re.jsx)("p",{role:"status",children:i("productCheckingPrice")}):(0,Re.jsxs)(Re.Fragment,{children:[s?(0,Re.jsxs)("p",{className:"ri-productPrice",children:[s,(0,Re.jsx)("small",{children:e.price?.label??i("productTotal")})]}):null,e.configuration.sku?(0,Re.jsxs)("p",{className:"ri-productSku",children:["SKU: ",e.configuration.sku]}):null,e.availability?.available===!1?(0,Re.jsx)("p",{className:"ri-productIssues",children:e.availability.message??i("productUnavailable")}):null]}),(0,Re.jsxs)("div",{className:"ri-productActions",children:[e.checkoutUrl?(0,Re.jsx)("a",{className:"ri-productPrimary",href:e.checkoutUrl,target:"_blank",rel:"noopener noreferrer",children:e.product.checkout?.label??i("productBuy")}):null,e.hasCart?(0,Re.jsx)("button",{type:"button",className:e.checkoutUrl?void 0:"ri-productPrimary",disabled:!e.canAddToCart,onClick:()=>{e.addToCart().catch(()=>{})},children:e.pendingAction==="cart"?i("productAddingToCart"):i("productAddToCart")}):null,e.hasQuote?(0,Re.jsx)("button",{type:"button",disabled:!e.canRequestQuote,onClick:()=>{e.requestQuote().catch(()=>{})},children:e.pendingAction==="quote"?i("productRequestingQuote"):i("productRequestQuote")}):null,e.hasCommerce?(0,Re.jsx)("button",{type:"button",disabled:o||!e.configuration.valid,onClick:e.refresh,children:i("productRefresh")}):null,r]})]}):r?(0,Re.jsx)("div",{className:"ri-productActions",children:r}):null,e.error?(0,Re.jsx)("p",{className:"ri-productError",role:"alert",children:e.error}):null,e.result?(0,Re.jsx)("p",{className:"ri-productSuccess",role:"status",children:e.result.message??(e.result.id?i("productSaved",{id:e.result.id}):i("productRequestDone"))}):null]})}var Ci=require("react/jsx-runtime");function kC({product:e,options:t,onSelectionsChange:n,top:r=12}){let i=xe(),o={"--ri-product-dock-top":`${r}px`},{adapter:a,urlParam:s,onConfigurationChange:l,defaultClosed:c}=t,u=(0,Ar.useMemo)(()=>{let w=s&&typeof window<"u"?new URLSearchParams(window.location.search).get(s):null;return w?Jd(w,e.definition):e.selections},[]),p=Jm({product:e.definition,initialSelections:u,adapter:a}),{selections:d}=p.configuration,m=JSON.stringify(d),[f,b]=(0,Ar.useState)(()=>!c&&(typeof window>"u"||window.innerWidth>640)),[g,y]=(0,Ar.useState)(!1),h=(0,Ar.useRef)(n);h.current=n,(0,Ar.useEffect)(()=>{h.current(d)},[m]);let v=(0,Ar.useRef)(l);v.current=l,(0,Ar.useEffect)(()=>{v.current?.(p.configuration,p.checkoutUrl)},[p.configuration.key,p.checkoutUrl]);let x=()=>{let w=new URL(window.location.href);return w.searchParams.set(s,Cc(d)),w.href};(0,Ar.useEffect)(()=>{s&&window.history.replaceState(window.history.state,"",x())},[s,m]),(0,Ar.useEffect)(()=>{if(!g)return;let w=setTimeout(()=>y(!1),2e3);return()=>clearTimeout(w)},[g]);let P=!!s&&typeof window<"u"&&window.self===window.top;return f?(0,Ci.jsxs)("div",{className:"ri-productDock",style:o,children:[(0,Ci.jsx)("button",{type:"button",className:"ri-productDockClose",onClick:()=>b(!1),title:i("productHideOptions"),"aria-label":i("productHideOptions"),children:(0,Ci.jsx)(ba.X,{size:14,"aria-hidden":"true"})}),(0,Ci.jsx)(Eu,{configurator:p,actions:P?(0,Ci.jsxs)("button",{type:"button",onClick:()=>{navigator.clipboard.writeText(x()).then(()=>y(!0)).catch(()=>{})},children:[g?(0,Ci.jsx)(ba.Check,{size:13,"aria-hidden":"true"}):(0,Ci.jsx)(ba.Link,{size:13,"aria-hidden":"true"}),i(g?"productLinkCopied":"productCopyLink")]}):void 0})]}):(0,Ci.jsxs)("button",{type:"button",className:"ri-productDockToggle",style:o,onClick:()=>b(!0),title:i("productShowOptions"),children:[(0,Ci.jsx)(ba.SlidersHorizontal,{size:14,"aria-hidden":"true"}),i("productOptions")]})}var GL=.12,LC=new Set;function Ru(e,t){return t?new Set(pn(e,t.target)):LC}function ef(e,t){let n=Ru(e.bindings,t);if(!t||n.size===0)return{...e,setAside:LC};let r=Math.min(Math.max(t.ghostOpacity??GL,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 VC=require("react");var NC=require("react"),sy=require("@react-three/fiber"),BC=new WeakMap;function tf(e){let t=(0,sy.useThree)(r=>r.get),n=(0,sy.useThree)(r=>r.setEvents);(0,NC.useEffect)(()=>{if(!e)return;let r=BC.get(t);if(!r){let o=new Set;r=o,BC.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(u=>{for(let p of o)if(!p(u))return!1;return!0})}})}r.add(e);let i=r;return()=>{i.delete(e)}},[e,t,n])}function ly({setAside:e,nodeRefs:t}){let n=(0,VC.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 tf(n),null}var In=require("react"),HC=require("@react-three/drei"),Al=require("@react-three/fiber"),Jr=require("three");var Ss=require("three"),jC={x:0,y:1,z:2},HL=e=>Math.min(Math.max(e,0),1);function WL(e,t){let n=1/0,r=-1/0;for(let i=0;i<8;i++){let o=new Ss.Vector3(...e.min);for(let s=0;s<3;s++)i&1<<s&&o.setComponent(s,e.max[s]);let a=o.dot(t);n=Math.min(n,a),r=Math.max(r,a)}return[n,r]}function UC(e,t){if(!e.enabled||t.min.some((r,i)=>!Number.isFinite(r)||!Number.isFinite(t.max[i])||r>t.max[i]))return{cuts:[],intersection:!1};let n=(r,i,o,a,s)=>{let l=s?new Ss.Vector3(...s).normalize():new Ss.Vector3().setComponent(jC[i],1),[c,u]=WL(t,l),p=c+(u-c)*HL(o),d=a?1:-1;return{id:r,direction:l,min:c,max:u,coordinate:p,plane:new Ss.Plane(l.clone().multiplyScalar(d),-p*d)}};if(e.mode==="box"){let r=e.box??{min:[0,0,0],max:[1,1,1]};return{intersection:!!e.invertBox,cuts:["x","y","z"].flatMap((i,o)=>[n(`${i}-min`,i,r.min[o],!e.invertBox),n(`${i}-max`,i,r.max[o],!!e.invertBox)])}}return e.mode==="planes"?{intersection:!1,cuts:(e.planes??[]).filter(r=>r.enabled).map(r=>n(r.id,r.axis,r.position,r.flip,r.normal))}:{intersection:!1,cuts:[n("plane",e.axis,e.position,e.flip,e.normal)]}}function zC(e,t,n){return e.length?t?e.some(r=>r.distanceToPoint(n)>=-1e-4):e.every(r=>r.distanceToPoint(n)>=-1e-4):!0}function nf(e,t,n){if(e.mode==="planes")return{planes:e.planes?.map(r=>r.id===t?{...r,position:n}:r)};if(e.mode==="box"){let r=e.box??{min:[0,0,0],max:[1,1,1]},i=[...r.min],o=[...r.max],a=jC[t[0]];return t.endsWith("min")?i[a]=Math.max(0,Math.min(n,o[a]-.001)):o[a]=Math.min(1,Math.max(n,i[a]+.001)),{box:{min:i,max:o}}}return{position:n}}function FC(e,t,n,r){let i=n.clone().addScaledVector(r,-n.dot(r));if(i.lengthSq()<1e-8)return null;i.normalize();let o=e.direction.dot(i);if(Math.abs(o)<1e-8)return null;let a=t.clone().sub(e.origin).dot(i)/o;return Number.isFinite(a)?e.at(a,new Ss.Vector3).dot(r):null}var Ou=require("three");function GC(){let e=new Map;function t(n){let r=e.get(n);r&&(n.clippingPlanes===r.owned&&(n.clippingPlanes=r.planes,n.clipShadows=r.shadows,n.clipIntersection=r.intersection,n.side===Ou.DoubleSide&&(n.side=r.side),n.needsUpdate=!0),e.delete(n))}return{apply(n,r,i){let o=e.get(n);o&&n.clippingPlanes!==o.owned&&(e.delete(n),o=void 0),o||(o={planes:n.clippingPlanes,side:n.side,shadows:n.clipShadows,intersection:n.clipIntersection,owned:r},e.set(n,o)),n.side!==Ou.DoubleSide&&(o.side=n.side),!(n.clippingPlanes===r&&n.clipIntersection===i&&n.side===Ou.DoubleSide&&n.clipShadows)&&(o.owned=r,n.clippingPlanes=r,n.clipIntersection=i,n.clipShadows=!0,n.side=Ou.DoubleSide,n.needsUpdate=!0)},retain(n){for(let r of e.keys())n.has(r)||t(r)},restore(){for(let n of e.keys())t(n)}}}var Ms=require("react/jsx-runtime");function cy({section:e,box:t,modelRef:n,showHandle:r,onChange:i,onDraggingChange:o}){let a=(0,Al.useThree)(h=>h.gl),s=(0,Al.useThree)(h=>h.raycaster),l=(0,Al.useThree)(h=>h.invalidate),c=(0,In.useMemo)(()=>D0(e),[e]),{cuts:u,intersection:p}=(0,In.useMemo)(()=>t?UC(c,t):{cuts:[],intersection:!1},[c,t]),d=(0,In.useMemo)(()=>u.map(h=>h.plane),[u]),m=d.length>0,f=(0,In.useMemo)(()=>GC(),[]);(0,In.useEffect)(()=>{if(!m)return;let h=a.localClippingEnabled;return a.localClippingEnabled=!0,l(),()=>{f.restore(),a.localClippingEnabled=h,l()}},[m,a,f,l]),(0,In.useEffect)(()=>{l()},[d,p,l]);let b=(0,In.useMemo)(()=>new Set,[]);(0,Al.useFrame)(()=>{m&&(b.clear(),n.current?.traverse(h=>{let v=h.material;if(v){if(!Array.isArray(v)){b.add(v),f.apply(v,d,p);return}for(let x of v)b.add(x),f.apply(x,d,p)}}),f.retain(b))});let g=(0,In.useMemo)(()=>m?h=>{if(h.object.userData.riSectionHandle)return!0;let v=h.object;for(;v&&v!==n.current;)v=v.parent;return!v||zC(d,p,h.point)}:null,[m,d,p,n]);tf(g),(0,In.useEffect)(()=>{if(!m)return;let h=s,v=h.firstHitOnly;return h.firstHitOnly=!1,()=>{h.firstHitOnly=v}},[m,s]),(0,In.useEffect)(()=>()=>o(!1),[o]);let y=u.find(h=>h.id===c.activePlaneId)??(c.mode==="planes"&&c.activePlaneId?null:u[0]);return!m||!r||!t||!y?null:(0,Ms.jsx)(qL,{cut:y,box:t,onMove:h=>i(nf(c,y.id,h)),onDraggingChange:o},y.id)}function qL({cut:e,box:t,onMove:n,onDraggingChange:r}){let[i,o]=(0,In.useState)(!1),[a,s]=(0,In.useState)(!1),l=(0,In.useRef)(null),c=new Jr.Vector3(...t.min).add(new Jr.Vector3(...t.max)).multiplyScalar(.5);c.addScaledVector(e.direction,e.coordinate-c.dot(e.direction));let u=new Jr.Quaternion().setFromUnitVectors(new Jr.Vector3(0,0,1),e.direction),p=new Jr.Vector3(1,0,0).applyQuaternion(u),d=new Jr.Vector3(0,1,0).applyQuaternion(u),m=new Jr.Vector3(...t.max).sub(new Jr.Vector3(...t.min)),f=g=>Math.max(.01,Math.abs(g.x)*m.x+Math.abs(g.y)*m.y+Math.abs(g.z)*m.z)*1.08;(0,In.useEffect)(()=>()=>r(!1),[r]);let b=g=>{l.current&&(g.target?.releasePointerCapture?.(g.pointerId),l.current=null,s(!1),r(!1))};return(0,Ms.jsxs)("mesh",{ref:g=>{g&&(Xo(g),g.userData.riSectionHandle=!0)},position:c,quaternion:u,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(),view:g.ray.direction.clone(),at:g.point.dot(e.direction),cut:e.coordinate},s(!0),r(!0)},onPointerMove:g=>{let y=l.current;if(!y)return;g.stopPropagation();let h=FC(g.ray,y.point,y.view,e.direction);h!==null&&e.max>e.min&&n(Math.max(0,Math.min(1,(y.cut+h-y.at-e.min)/(e.max-e.min))))},onPointerUp:b,onPointerCancel:b,onClick:g=>g.stopPropagation(),children:[(0,Ms.jsx)("planeGeometry",{args:[f(p),f(d)]}),(0,Ms.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:a?.22:i?.16:.08,side:Jr.DoubleSide,depthWrite:!1,toneMapped:!1}),(0,Ms.jsx)(HC.Edges,{color:"#22d3ee",renderOrder:3})]})}var WC=require("react-colorful"),ya=require("react/jsx-runtime"),uy=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:r,inline:i=!1})=>{let o=xe();return(0,ya.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,ya.jsx)("p",{className:"ri-popoverLabel",children:o("color")}),(0,ya.jsx)(WC.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>r(s=>({...s,[e.objectId]:{...s[e.objectId],hex:a}}))}),(0,ya.jsxs)("div",{className:"ri-inlineRow",children:[(0,ya.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,ya.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:o("done")})]})]})};var ht=require("react/jsx-runtime"),dy=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:r,canPlaceImage:i=!0,inline:o=!1,offset:a,rotationDegrees:s,onOffsetChange:l,onRotationChange:c,isPositioning:u=!1,onEndPositioning:p})=>{let d=xe();return(0,ht.jsxs)("div",{className:`ri-popover${o?" ri-popover--inline":""}`,style:o?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:m=>m.stopPropagation(),children:[(0,ht.jsx)("div",{className:"ri-popoverHeader",children:(0,ht.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:d("material")})}),(0,ht.jsxs)("div",{className:"ri-materialBody",children:[t?(0,ht.jsx)("div",{className:"ri-previewFrame",children:(0,ht.jsx)("img",{src:t,alt:d("texturePreview"),className:"ri-previewImage"})}):(0,ht.jsxs)("div",{className:"ri-emptyState",children:[(0,ht.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,ht.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,ht.jsx)("span",{style:{fontSize:12},children:d("noTextureApplied")})]}),i?(0,ht.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:d(t?"replaceImage":"uploadImage")}):(0,ht.jsx)("p",{className:"ri-formatHint",children:d("noTextureCoordinates")}),t&&(0,ht.jsx)("button",{onClick:()=>r(e.objectId),className:"ri-removeButton",children:d("removeTexture")}),i?(0,ht.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}):null,t&&(l||c)&&(0,ht.jsxs)("div",{className:"ri-texturePosition",children:[(0,ht.jsx)("p",{className:"ri-texturePositionLabel",children:d("texturePosition")}),(0,ht.jsxs)("div",{className:"ri-texturePositionGrid",children:[(0,ht.jsxs)("label",{className:"ri-texturePositionField",children:[(0,ht.jsx)("span",{children:d("offsetX")}),(0,ht.jsx)("input",{type:"number",step:.01,value:a?.[0]??0,onChange:m=>l?.(e.objectId,0,Number(m.target.value))})]}),(0,ht.jsxs)("label",{className:"ri-texturePositionField",children:[(0,ht.jsx)("span",{children:d("offsetY")}),(0,ht.jsx)("input",{type:"number",step:.01,value:a?.[1]??0,onChange:m=>l?.(e.objectId,1,Number(m.target.value))})]})]}),(0,ht.jsxs)("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[(0,ht.jsx)("span",{children:d("rotation")}),(0,ht.jsxs)("div",{className:"ri-texturePositionSliderRow",children:[(0,ht.jsx)("input",{type:"range",min:0,max:360,step:1,value:s??0,onChange:m=>c?.(e.objectId,Number(m.target.value))}),(0,ht.jsx)("input",{type:"number",min:0,max:360,step:1,value:Math.round(s??0),onChange:m=>c?.(e.objectId,Number(m.target.value))})]})]}),u?(0,ht.jsx)("button",{type:"button",className:"ri-uploadButton",onClick:p,title:d("confirmTexturePosition"),children:d("donePositioning")}):(0,ht.jsx)("p",{className:"ri-texturePositionHint",children:d("textureOffsetHint")})]})]})]})};var ei=require("react");var Et=require("react/jsx-runtime");function qC({entries:e}){return(0,Et.jsx)(Et.Fragment,{children:e.map(([t,n])=>{let r=n!==null&&typeof n=="object",i=r?Object.entries(n):[];return r&&i.length>0?(0,Et.jsxs)("div",{className:"ri-left-panel__data-group",children:[(0,Et.jsx)("span",{className:"ri-left-panel__data-key",children:t}),(0,Et.jsx)("div",{className:"ri-left-panel__data-children",children:(0,Et.jsx)(qC,{entries:i})})]},t):(0,Et.jsxs)("div",{className:"ri-left-panel__data-row",children:[(0,Et.jsx)("span",{className:"ri-left-panel__data-key",children:t}),(0,Et.jsx)("span",{className:`ri-left-panel__data-value ri-left-panel__data-value--${typeof n}`,children:r?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function XL({content:e}){let t=e!=null,[n,r]=(0,ei.useState)(t),[i,o]=(0,ei.useState)(t),a=(0,ei.useRef)(e);return t&&(a.current=e),(0,ei.useEffect)(()=>{if(t){r(!0);return}if(n){o(!1);let s=setTimeout(()=>r(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,ei.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>o(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,Et.jsx)("div",{className:`ri-left-panel__action-extra${i?" ri-left-panel__action-extra--open":""}`,children:(0,Et.jsx)("div",{className:"ri-left-panel__action-extra-inner",children:e??a.current})}):null}function py({isOpen:e,selectedObject:t,currentAction:n,onClose:r,onAction:i,renderActionExtra:o,translateDefaultActions:a=!1}){let s=xe(),[l,c]=(0,ei.useState)(t);(0,ei.useEffect)(()=>{t&&c(t)},[t]);let u=t??l,p=u?Object.entries(u).filter(([d])=>d!=="actions"&&d!=="decals"):[];return(0,Et.jsx)("div",{className:`ri-left-panel ${e?"ri-left-panel--open":"ri-left-panel--closed"}`,children:u&&(0,Et.jsxs)(Et.Fragment,{children:[(0,Et.jsxs)("div",{className:"ri-left-panel__header",children:[(0,Et.jsx)("p",{className:"ri-left-panel__title",children:u.label}),(0,Et.jsx)("button",{onClick:r,className:"ri-left-panel__close-btn","aria-label":s("closePanel"),children:"\u2715"})]}),p.length>0&&(0,Et.jsx)("div",{className:"ri-left-panel__data",children:(0,Et.jsx)(qC,{entries:p})}),(0,Et.jsx)("hr",{className:"ri-left-panel__divider"}),u.actions&&u.actions.length>0&&(0,Et.jsxs)(Et.Fragment,{children:[(0,Et.jsx)("div",{className:"ri-left-panel__actions-label",children:s("actions")}),(0,Et.jsx)("div",{className:"ri-left-panel__actions-list",children:u.actions.map((d,m)=>{let f=n?.action.id===d.id&&(n.binding===u||n.binding?.id===u.id||n.binding?.modelObjectId===u.modelObjectId||n.objectId===u.id||n.objectId===u.modelObjectId),b=o?.(d.id);return(0,Et.jsxs)(ei.Fragment,{children:[(0,Et.jsx)("button",{onClick:g=>i({objectId:u.modelObjectId||u.id||"",action:d,binding:u,screenX:g.clientX,screenY:g.clientY}),className:["ri-left-panel__action-btn",`ri-left-panel__action-btn--${d.id}`,f?"ri-left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":d.id,"data-label":d.label,children:a?s.message(d.label):d.label}),(0,Et.jsx)(XL,{content:b})]},m)})})]})]})})}var Du=require("react"),rf=require("lucide-react");var XC=require("react");var $n=require("react/jsx-runtime");function $C({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:r,searchValue:i,onSearchChange:o,searchPlaceholder:a,children:s,isOpen:l,onToggle:c,openButtonIcon:u,closeButtonIcon:p,closeButtonAriaLabel:d}){let m=xe(),[f,b]=(0,XC.useState)(!1),g=l!==void 0?l:f,y=h=>{l===void 0&&b(h),c?.(h)};return(0,$n.jsxs)("div",{className:`ri-sidepanel-wrap ${g?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!g&&(0,$n.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>y(!0),"aria-label":t,title:m("openPanel"),children:[u,e?(0,$n.jsx)("span",{children:e}):null]}),(0,$n.jsxs)("div",{className:`ri-sidepanel ${g?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!g,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:()=>y(!1),"aria-label":d,title:m("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:h=>o(h.target.value)})}),(0,$n.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var ti=require("react/jsx-runtime");function my({objectBindings:e,onAction:t,onFocus:n,onHover:r,isOpen:i,onToggle:o,isolatedKeys:a=null,onIsolate:s}){let l=xe(),[c,u]=(0,Du.useState)(null),[p,d]=(0,Du.useState)(""),m=(0,Du.useMemo)(()=>Object.entries(e).filter(([f,b])=>{let g=p.toLowerCase();return f.toLowerCase().includes(g)||(b.label??"").toLowerCase().includes(g)}),[e,p]);return(0,ti.jsx)($C,{openButtonLabel:"",openButtonAriaLabel:l("openSceneObjectsPanel"),openButtonIcon:(0,ti.jsx)(rf.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:l("sceneObjects"),title:l("visibleEntries",{count:m.length}),searchValue:p,onSearchChange:d,searchPlaceholder:l("searchNodesLabels"),isOpen:i,onToggle:o,closeButtonAriaLabel:l("closeSceneObjectsPanel"),children:m.map(([f,b])=>{let g=b.visible!==!1,y=c===f,h=a?.has(f)??!1;return(0,ti.jsxs)("div",{onClick:()=>n(b),onMouseEnter:()=>{u(f),r?.(b)},onMouseLeave:()=>{u(null),r?.(null)},className:`ri-sidepanel__row${y?" ri-sidepanel__row--hovered":""}${a!==null&&!h?" ri-sidepanel__row--setAside":""}`,children:[(0,ti.jsx)("button",{type:"button",className:`ri-sidepanel__label ri-sidepanel__labelButton${y?" ri-sidepanel__label--hovered":""}`,onFocus:()=>{u(f),r?.(b)},onBlur:()=>{u(null),r?.(null)},children:b.label??f}),s?(0,ti.jsx)("button",{type:"button",onClick:x=>{x.stopPropagation(),s(b)},className:`ri-sidepanel__isolate-btn${h?" ri-sidepanel__isolate-btn--active":""}`,title:l(h?"showAll":"isolate"),"aria-label":l(h?"showAllObject":"isolateObject",{name:b.label??f}),"aria-pressed":h,children:(0,ti.jsx)(rf.Focus,{width:14,height:14,"aria-hidden":"true"})}):null,(0,ti.jsx)("button",{type:"button",onClick:x=>{x.stopPropagation(),t?.({objectId:f,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:b})},className:"ri-sidepanel__vis-btn",title:l(g?"hide":"show"),"aria-label":l(g?"hideObject":"showObject",{name:b.label??f}),children:(0,ti.jsx)("span",{className:`ri-sidepanel__checkbox${g?" ri-sidepanel__checkbox--checked":""}`,children:g&&(0,ti.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,ti.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},f)})})}var Ti=require("react");function YC(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 KC(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 ZC(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 va=require("react/jsx-runtime"),$L=600;function QC({objects:e,selectedKey:t,onHighlight:n,onSelect:r,onClearSelection:i}){let o=xe(),a=(0,Ti.useId)(),[s,l]=(0,Ti.useState)(!1),[c,u]=(0,Ti.useState)(null),p=(0,Ti.useRef)({query:"",at:0}),d=c?e.findIndex(x=>x.key===c):-1,m=d>=0?e[d]:null;(0,Ti.useEffect)(()=>{t&&e.some(x=>x.key===t)&&u(t)},[t,e]);let f=s?m?.binding??null:null,b=(0,Ti.useRef)(n);b.current=n,(0,Ti.useEffect)(()=>{if(s)return b.current(f),()=>b.current(null)},[s,f]);let g=x=>{x!==null&&e[x]&&u(e[x].key)},y=x=>{let P=m?d:-1,w=KC(x.key,Math.max(P,0),e.length);if(w!==null){x.preventDefault(),g(P<0&&x.key!=="End"?0:w);return}if(x.key==="Enter"||x.key===" "){if(!m)return;x.preventDefault(),r(m.binding);return}if(x.key==="Escape"){if(!t)return;x.preventDefault(),x.stopPropagation(),i();return}if(x.key.length===1&&x.key!==" "&&!x.ctrlKey&&!x.metaKey&&!x.altKey){let D=Date.now(),E=p.current;E.query=D-E.at>$L?x.key:E.query+x.key,E.at=D,x.preventDefault(),g(ZC(e,P,E.query))}};if(e.length===0)return null;let h=`${a}-option`,v=`${a}-hint`;return(0,va.jsxs)("div",{className:`ri-objectNavigator${s?" ri-objectNavigator--focused":""}`,children:[(0,va.jsx)("div",{role:"listbox",tabIndex:0,className:"ri-objectNavigator__list","aria-label":o("objectNavigator"),"aria-describedby":v,"aria-activedescendant":m?h:void 0,onFocus:()=>{l(!0),m||u(e[0].key)},onBlur:()=>l(!1),onKeyDown:y,children:m?(0,va.jsxs)("div",{id:h,role:"option","aria-selected":m.key===t,"aria-setsize":e.length,"aria-posinset":d+1,className:`ri-objectNavigator__option${m.key===t?" ri-objectNavigator__option--selected":""}`,children:[(0,va.jsx)("span",{className:"ri-objectNavigator__name",children:m.label}),(0,va.jsx)("span",{className:"ri-objectNavigator__position","aria-hidden":"true",children:o("objectNavigatorPosition",{position:d+1,count:e.length})})]}):null}),(0,va.jsx)("div",{id:v,className:"ri-objectNavigator__hint",children:o("objectNavigatorHint")})]})}var JC=require("react"),eT="(prefers-reduced-motion: reduce)";function YL(e){if(typeof window>"u"||!window.matchMedia)return()=>{};let t=window.matchMedia(eT);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}var KL=()=>typeof window<"u"&&!!window.matchMedia?.(eT).matches;function tT(e="user"){let t=(0,JC.useSyncExternalStore)(YL,KL,()=>!1);return e==="always"?!0:e==="never"?!1:t}var vP=require("lucide-react");var Ji=require("react/jsx-runtime");function nT({visible:e,title:t,message:n,progress:r}){if(!e)return null;let i=typeof r=="number"&&Number.isFinite(r),o=i?Math.round(Math.min(Math.max(r,0),100)):0;return(0,Ji.jsx)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:(0,Ji.jsxs)("div",{className:"bb-loadingCard",children:[(0,Ji.jsxs)("div",{className:"bb-loadingHeader",children:[(0,Ji.jsx)("span",{className:"bb-loadingTitle",title:t??n,children:t??n}),i?(0,Ji.jsxs)("span",{className:"bb-loadingPercent",children:[o,"%"]}):null]}),(0,Ji.jsx)("div",{className:`bb-loadingProgress ${i?"":"bb-loadingProgress--unknown"}`,role:"progressbar","aria-label":t??n,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":i?o:void 0,children:(0,Ji.jsx)("div",{className:"bb-loadingProgress__bar",style:i?{width:`${o}%`}:void 0})}),t?(0,Ji.jsx)("span",{className:"bb-loadingMessage",children:n}):null]})})}function ZL(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 QL(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 fy(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 rT(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 of(e,t=!0){let n=fy(e);return{id:ZL(e),modelObjectId:e,type:n,label:QL(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:rT(n,t),metrics:{},metadata:{}}}function iT(e,t){return Object.fromEntries(e.map(n=>[n,of(n,!t?.has(n))]))}function af(e,t){let n=new Set,r={};for(let i of e){let o=of(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=>Vc.includes(c.id));o.actions=l.length>0?l:rT("other",!t?.has(i)),r[i]=o}return r}function oT(e){let t=new Set;for(let[n,r]of Object.entries(gr(e).nodesById))Ep(r)||t.add(n);return t}function aT(e){let{nodesById:t}=gr(e),n=[];for(let[r,i]of Object.entries(t)){let o=i;o.isMesh&&o.geometry&&i.name&&n.push(r)}return n.sort((r,i)=>r.localeCompare(i))}var ze=require("react"),cf=require("@react-three/fiber"),uf=require("@react-three/drei"),ut=require("three");var sT="data:image/png;base64,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";var lT="data:image/png;base64,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";var cT="data:image/png;base64,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";var Qe=require("react/jsx-runtime"),hy=-100,gy=100,yT=.03,n2=.03,r2=.03,uT=.5,i2=sT,o2=lT,a2=cT,s2=Math.PI/4,dT=.4,El=64,pT=yT*3,by="#4d7dff",mT="#ffcc00",fT=.02,l2=new ut.Vector3(0,1,0),sf=32,hT="#ff9d3d",lf=4;function yy(e){let t=new Float32Array((El+1)*3);for(let n=0;n<=El;n++){let r=n/El*Math.PI*2,i=Math.cos(r)*dT,o=Math.sin(r)*dT,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 c2(e){let t=Math.abs(e.y)<.99?new ut.Vector3(0,1,0):new ut.Vector3(1,0,0),n=new ut.Vector3().crossVectors(e,t).normalize(),r=new ut.Vector3().crossVectors(e,n).normalize();return[n,r]}function gT(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 Rl=null,xy=new Set;function vy(e){Rl!==e&&(Rl=e,xy.forEach(t=>t()))}function u2(e){return xy.add(e),()=>xy.delete(e)}function bT(){return Rl}function vT({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:u,setActiveTab:p,setActiveSubTab:d}=ha(),{camera:m,gl:f,raycaster:b,invalidate:g}=(0,cf.useThree)(),y=(0,ze.useRef)(null),h=(0,ze.useRef)(null),v=(0,ze.useRef)(null),x=(0,ze.useRef)(null),P=(0,ze.useRef)(null),w=(0,ze.useRef)(null),D=(0,ze.useRef)(null),E=(0,ze.useRef)(null),S=(0,ze.useRef)(null),_=(0,ze.useRef)(null),M=(0,ze.useRef)(null),C=(0,ze.useMemo)(()=>new ut.Matrix4,[]),T=(0,ze.useMemo)(()=>new ut.Quaternion,[]),I=(0,ze.useMemo)(()=>new ut.Vector3(1,1,1),[]),L=(0,ze.useRef)([0,0,0]),B=(0,ze.useRef)([0,0,0]),N=(0,ze.useRef)(!1),R=(0,ze.useRef)(null),O=(0,ze.useRef)(null),V=(0,ze.useRef)(null),G=(0,ze.useRef)(l);(0,ze.useEffect)(()=>{G.current=l},[l]);let Q=(0,ze.useMemo)(()=>new ut.Vector3(t[0],t[1],t[2]),[t]),$=(0,ze.useMemo)(()=>new ut.Euler(n[0],n[1],n[2]),[n]),ne=(0,ze.useMemo)(()=>new Float32Array(6),[]),Z=(0,ze.useMemo)(()=>yy("x"),[]),U=(0,ze.useMemo)(()=>yy("y"),[]),F=(0,ze.useMemo)(()=>yy("z"),[]),te=(0,ze.useMemo)(()=>new Float32Array((sf+1)*3),[]),se=(0,ze.useMemo)(()=>new Float32Array(lf*2*3),[]),ye=e?.type==="point",K=e?.type==="spot",re=ye?o2:K?a2:i2,ce=ye?n2:K?r2:yT,he=(0,ze.useMemo)(()=>new ut.TextureLoader().load(re),[re]),qe=(0,ze.useSyncExternalStore)(u2,bT,bT),ie=!!e&&qe===e.id,tt=(0,ze.useRef)(new ut.Vector3),ge=(0,ze.useRef)(new ut.Euler);(0,ze.useEffect)(()=>{N.current||(tt.current.copy(Q),ge.current.copy($),g())},[Q,$,g]),(0,ze.useEffect)(()=>{e&&Rl===e.id&&!o&&vy(null)},[e?.id,o]),(0,ze.useEffect)(()=>()=>{e&&Rl===e.id&&vy(null),V.current!==null&&(cancelAnimationFrame(V.current),V.current=null)},[e?.id]);let De=(0,ze.useCallback)(()=>{if(N.current||!ie)return;let ve=tt.current,de=new ut.Quaternion().setFromEuler(ge.current);C.compose(ve,de,I)},[C,I,ie]);(0,cf.useFrame)(()=>{if(y.current&&y.current.position.copy(tt.current),De(),v.current){v.current.lookAt(m.position);let ve=m,de;ve.isOrthographicCamera?de=ce/ve.zoom:de=m.position.distanceTo(tt.current)*ce,v.current.scale.setScalar(de)}if(D.current){let ve=m,de;ve.isOrthographicCamera?de=pT/ve.zoom:de=m.position.distanceTo(tt.current)*pT,D.current.scale.setScalar(de)}if(P.current){let ve=P.current.getAttribute("position"),de=ve.array;de[0]=0,de[1]=0,de[2]=0,de[3]=tt.current.x,de[4]=tt.current.y,de[5]=tt.current.z,ve.needsUpdate=!0,P.current.computeBoundingSphere()}if(w.current){let ve=tt.current,de=ve.length();w.current.visible=de>uT,de>1e-6&&(w.current.position.copy(ve).multiplyScalar(.5),w.current.scale.set(1,de,1),w.current.quaternion.setFromUnitVectors(l2,ve.clone().normalize()))}if(x.current&&(x.current.visible=tt.current.length()>uT),K&&E.current&&S.current&&_.current){let ve=tt.current,de=ve.length();if(de>1e-6){E.current.visible=!0;let Ne=ve.clone().negate().normalize(),Ae=de,mt=e?.angle??Math.PI/6,gt=Ae*Math.tan(mt),It=ve.clone().add(Ne.clone().multiplyScalar(Ae)),[fe,Ee]=c2(Ne),Oe=S.current.getAttribute("position"),nt=Oe.array;for(let ke=0;ke<=sf;ke++){let _e=ke/sf*Math.PI*2,dt=It.x+(fe.x*Math.cos(_e)+Ee.x*Math.sin(_e))*gt,an=It.y+(fe.y*Math.cos(_e)+Ee.y*Math.sin(_e))*gt,Zn=It.z+(fe.z*Math.cos(_e)+Ee.z*Math.sin(_e))*gt;nt[ke*3]=dt,nt[ke*3+1]=an,nt[ke*3+2]=Zn}Oe.needsUpdate=!0,S.current.computeBoundingSphere();let kt=_.current.getAttribute("position"),Xe=kt.array;for(let ke=0;ke<lf;ke++){let _e=ke/lf*Math.PI*2,dt=It.x+(fe.x*Math.cos(_e)+Ee.x*Math.sin(_e))*gt,an=It.y+(fe.y*Math.cos(_e)+Ee.y*Math.sin(_e))*gt,Zn=It.z+(fe.z*Math.cos(_e)+Ee.z*Math.sin(_e))*gt,Qn=ke*6;Xe[Qn]=ve.x,Xe[Qn+1]=ve.y,Xe[Qn+2]=ve.z,Xe[Qn+3]=dt,Xe[Qn+4]=an,Xe[Qn+5]=Zn}kt.needsUpdate=!0,_.current.computeBoundingSphere()}else E.current.visible=!1}});let Fe=(0,ze.useCallback)(()=>{V.current!==null&&(cancelAnimationFrame(V.current),V.current=null),L.current=t,B.current=[n[0],n[1],n[2]],N.current=!0,R.current=null,O.current=null,G.current?.(!0)},[t,n]),be=(0,ze.useCallback)((ve,de,Ne,Ae)=>{let mt=new ut.Vector3(L.current[0],L.current[1],L.current[2]),gt=new ut.Vector3,It=new ut.Quaternion,fe=new ut.Vector3;Ae.decompose(gt,It,fe);let Ee=mt.clone().applyMatrix4(Ae),Oe=[Math.min(Math.max(Ee.x,hy),gy),Math.min(Math.max(Ee.y,hy),gy),Math.min(Math.max(Ee.z,hy),gy)],nt=new ut.Quaternion().setFromEuler(new ut.Euler(B.current[0],B.current[1],B.current[2],"XYZ")),kt=new ut.Quaternion().copy(It).multiply(nt),Xe=new ut.Euler().setFromQuaternion(kt,"XYZ"),ke=[Xe.x,Xe.y,Xe.z];tt.current.set(Oe[0],Oe[1],Oe[2]),ge.current.set(ke[0],ke[1],ke[2]),R.current=Oe,O.current=ke;let _e=new ut.Quaternion().setFromEuler(ge.current);C.compose(tt.current,_e,I),g()},[C,I,g]),Je=(0,ze.useCallback)(()=>{N.current=!1;let ve=R.current,de=O.current;R.current=null,O.current=null;let Ne=ve&&!gT(ve,L.current),Ae=de&&!gT(de,B.current);Ne&&a&&a(ve),Ae&&s&&s(de),Ne||Ae?V.current=requestAnimationFrame(()=>{V.current=null,G.current?.(!1)}):G.current?.(!1)},[a,s]);return(0,ze.useEffect)(()=>{let ve=Ae=>{let mt=f.domElement.getBoundingClientRect();return new ut.Vector2((Ae.clientX-mt.left)/mt.width*2-1,-((Ae.clientY-mt.top)/mt.height)*2+1)},de=Ae=>!!Ae.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Ne=Ae=>{if(de(Ae))return;let mt=ve(Ae);b.setFromCamera(mt,m);let gt=[];if(h.current&&gt.push(h.current),v.current&&gt.push(v.current),gt.length===0)return;if(b.intersectObjects(gt,!1).length>0){let fe=e?.id??null;Rl!==fe&&(vy(fe),p?.("scene"),d?.("lighting")),Ae.preventDefault(),Ae.stopPropagation()}};return f.domElement.addEventListener("pointerdown",Ne),()=>{f.domElement.removeEventListener("pointerdown",Ne)}},[m,b,f,e,p,d]),c!=="scene"||u!=="lighting"||!e||!o||e.type==="none"||e.type==="hemisphere"?null:(0,Qe.jsxs)("group",{ref:ve=>{ve&&Xo(ve)},children:[(0,Qe.jsxs)("group",{ref:y,children:[(0,Qe.jsx)("sprite",{ref:v,children:(0,Qe.jsx)("spriteMaterial",{map:he,transparent:!0,opacity:.9,blending:ut.AdditiveBlending,depthWrite:!1,rotation:K?s2:0},re)}),(0,Qe.jsx)(uf.Sphere,{ref:h,args:[.25,16,16],children:(0,Qe.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),ye&&(0,Qe.jsxs)("group",{ref:D,children:[(0,Qe.jsxs)("lineLoop",{renderOrder:999,children:[(0,Qe.jsx)("bufferGeometry",{children:(0,Qe.jsx)("bufferAttribute",{attach:"attributes-position",args:[Z,3],count:El+1})}),(0,Qe.jsx)("lineBasicMaterial",{color:by,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Qe.jsxs)("lineLoop",{renderOrder:999,children:[(0,Qe.jsx)("bufferGeometry",{children:(0,Qe.jsx)("bufferAttribute",{attach:"attributes-position",args:[U,3],count:El+1})}),(0,Qe.jsx)("lineBasicMaterial",{color:by,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Qe.jsxs)("lineLoop",{renderOrder:999,children:[(0,Qe.jsx)("bufferGeometry",{children:(0,Qe.jsx)("bufferAttribute",{attach:"attributes-position",args:[F,3],count:El+1})}),(0,Qe.jsx)("lineBasicMaterial",{color:by,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!ye&&!K&&(0,Qe.jsxs)(Qe.Fragment,{children:[(0,Qe.jsxs)("mesh",{ref:w,children:[(0,Qe.jsx)("cylinderGeometry",{args:[fT,fT,1,8,1,!0]}),(0,Qe.jsx)("meshBasicMaterial",{color:mT,transparent:!0,opacity:.05,blending:ut.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Qe.jsxs)("line",{ref:x,children:[(0,Qe.jsx)("bufferGeometry",{ref:P,children:(0,Qe.jsx)("bufferAttribute",{attach:"attributes-position",args:[ne,3],count:2})}),(0,Qe.jsx)("lineBasicMaterial",{color:mT,transparent:!0,opacity:.7,blending:ut.AdditiveBlending})]})]}),K&&(0,Qe.jsxs)("group",{ref:E,children:[(0,Qe.jsxs)("lineLoop",{renderOrder:999,children:[(0,Qe.jsx)("bufferGeometry",{ref:S,children:(0,Qe.jsx)("bufferAttribute",{attach:"attributes-position",args:[te,3],count:sf+1})}),(0,Qe.jsx)("lineBasicMaterial",{color:hT,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Qe.jsxs)("lineSegments",{renderOrder:999,children:[(0,Qe.jsx)("bufferGeometry",{ref:_,children:(0,Qe.jsx)("bufferAttribute",{attach:"attributes-position",args:[se,3],count:lf*2})}),(0,Qe.jsx)("lineBasicMaterial",{color:hT,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),ie&&a&&(0,Qe.jsx)(uf.PivotControls,{ref:M,matrix:C,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:Fe,onDrag:be,onDragEnd:Je})]})}var $e=require("react"),df=require("@react-three/drei"),Ol=require("@react-three/fiber"),Dt=require("three"),xT=require("lucide-react");var xa=require("react/jsx-runtime"),d2=.01,wy=.5;function Sy({node:e,space:t,moveEnabled:n,gizmoTool:r,scaleEnabled:i,onTransformChange:o,onDraggingChange:a,transform:s}){let l=(0,Ol.useThree)(K=>K.invalidate),c=(0,Ol.useThree)(K=>K.camera),u=(0,Ol.useThree)(K=>K.size),p=(0,$e.useMemo)(()=>ds(e),[e]),d=(0,$e.useMemo)(()=>new Dt.Vector3,[e]);s?.pivot?d.fromArray(s.pivot.point):d.copy(p);let m=(0,$e.useMemo)(()=>{let K=Zc(e);if(!K)return[d.clone().add(new Dt.Vector3(wy,wy,wy))];let re=[];for(let ce of[K.min.x,K.max.x])for(let he of[K.min.y,K.max.y])for(let qe of[K.min.z,K.max.z])re.push(new Dt.Vector3(ce,he,qe));return re},[e,d]),f=(0,$e.useMemo)(()=>new Dt.Vector3,[]),b=(0,$e.useMemo)(()=>new Dt.Vector3,[]),g=(0,$e.useRef)(null),y=(0,$e.useMemo)(()=>new Dt.Matrix4,[]),h=(0,$e.useRef)(!1),v=(0,$e.useRef)(new Dt.Matrix4),x=(0,$e.useRef)(new Dt.Matrix4),P=(0,$e.useRef)(null),w=(0,$e.useRef)([]),D=(0,$e.useRef)(null),E=(0,$e.useRef)(a);E.current=a;let S=(0,$e.useMemo)(()=>new Dt.Vector3,[]),_=(0,$e.useMemo)(()=>new Dt.Quaternion,[]),M=(0,$e.useMemo)(()=>new Dt.Vector3,[]),C=(0,$e.useMemo)(()=>new Dt.Quaternion,[]),T=(0,$e.useMemo)(()=>new Dt.Vector3(1,1,1),[]),I=(0,$e.useMemo)(()=>new Dt.Quaternion,[]),L=(0,$e.useMemo)(()=>new Dt.Vector3,[]),B=(0,$e.useMemo)(()=>new Dt.Vector3,[]),N=(0,$e.useRef)([0,0,0]),R=(0,$e.useRef)(new Dt.Vector3(1,1,1)),O=(0,$e.useRef)({point:[0,0,0],offset:[0,0,0]}),V=(0,$e.useCallback)(()=>{h.current||(e.updateWorldMatrix(!0,!1),S.copy(d).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(_),C.copy(_),t==="world"&&C.identity(),y.compose(S,C,T))},[S,y,C,T,e,d,t,_]),G=(0,$e.useCallback)(()=>{e.updateWorldMatrix(!0,!1);let K=1/0;for(let re of m){f.copy(re).applyMatrix4(e.matrixWorld);let ce=f.distanceToSquared(c.position);ce<K&&(K=ce,b.copy(f))}g.current?.position.copy(b)},[c,b,m,e,f]);(0,$e.useLayoutEffect)(()=>(V(),G(),()=>{let K=D.current!==null;K&&(cancelAnimationFrame(D.current),D.current=null),(h.current||K)&&(h.current=!1,E.current(!1));for(let re of w.current)fi(re);w.current=[]}),[V]),(0,Ol.useFrame)(()=>{V(),G()});let Q=(0,$e.useCallback)(()=>{D.current!==null&&(cancelAnimationFrame(D.current),D.current=null),e.updateWorldMatrix(!0,!0),w.current=[];for(let K of Vi(e))Ws(K)||(Yo(K,K.matrixWorld),w.current.push(K));e.updateWorldMatrix(!0,!1),S.copy(d).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(_),e.getWorldScale(M),v.current.compose(S,_,M),x.current.copy(y),N.current=[e.rotation.x,e.rotation.y,e.rotation.z],R.current.copy(e.scale),O.current=s?.pivot??rm(d.toArray(),N.current,e.scale.toArray(),e.rotation.order),P.current=null,h.current=!0,a(!0)},[S,y,e,a,d,_,M,s?.pivot]),$=(0,$e.useCallback)((K,re)=>{let ce=v.current.clone().premultiply(re),he=x.current.clone().premultiply(re);ce.decompose(L,_,B);let qe=L.clone();he.decompose(S,C,T),t==="world"&&C.identity(),y.compose(S,C,T),K.decompose(L,I,B);let ie=new Dt.Euler().setFromQuaternion(I,e.rotation.order),[tt,ge,De]=N.current,Fe=[tt+ie.x,ge+ie.y,De+ie.z],be=new Dt.Quaternion().setFromEuler(new Dt.Euler(Fe[0],Fe[1],Fe[2],e.rotation.order));e.scale.copy(R.current);let ve=(e.parent?.matrixWorld||new Dt.Matrix4).clone().invert(),de=qe.clone().applyMatrix4(ve),Ne=d.clone().multiply(e.scale).applyQuaternion(be),Ae=de.clone().sub(Ne);e.position.copy(Ae),e.rotation.set(Fe[0],Fe[1],Fe[2],e.rotation.order),e.updateMatrixWorld(!0),l();let mt=O.current,gt=de.clone().sub(new Dt.Vector3(...mt.offset)),It=[gt.x,gt.y,gt.z];P.current={position:It,rotation:Fe,pivot:mt}},[S,I,y,C,T,l,e,d,L,B,t,_]),ne=(0,$e.useCallback)(()=>{h.current=!1;let K=P.current;if(P.current=null,K)o(K),D.current=requestAnimationFrame(()=>{D.current=null,a(!1)});else if(w.current.length>0){for(let re of w.current)fi(re);e.updateMatrixWorld(!0),l(),a(!1)}else a(!1);w.current=[]},[l,e,a,o]),Z=(0,$e.useRef)(null),U=(0,$e.useCallback)(K=>{let re=K.clone().project(c);return{x:u.left+(re.x*.5+.5)*u.width,y:u.top+(-re.y*.5+.5)*u.height}},[c,u]),F=(0,$e.useCallback)((K,re)=>{let ce=Math.max(d2,Number.isFinite(K)?K:1);e.scale.copy(R.current).multiplyScalar(ce);let qe=(e.parent?.matrixWorld||new Dt.Matrix4).clone().invert(),ie=re.clone().applyMatrix4(qe),tt=new Dt.Quaternion().setFromEuler(e.rotation),ge=d.clone().multiply(e.scale).applyQuaternion(tt),De=ie.clone().sub(ge);e.position.set(De.x,De.y,De.z),e.updateMatrixWorld(!0),G(),l(),P.current={position:ie.clone().sub(new Dt.Vector3(...O.current.offset)).toArray(),scale:e.scale.toArray(),pivot:O.current}},[l,e,d,G]),te=(0,$e.useCallback)(K=>{if(!i)return;K.stopPropagation(),K.preventDefault(),K.currentTarget.setPointerCapture(K.pointerId),Q();let re=S.clone(),ce=U(re),he=Math.max(1,Math.hypot(K.clientX-ce.x,K.clientY-ce.y));Z.current={pointerId:K.pointerId,centerScreen:ce,startDistance:he,pivotWorld:re}},[Q,S,U,i]),se=(0,$e.useCallback)(K=>{let re=Z.current;if(!re||K.pointerId!==re.pointerId)return;K.stopPropagation();let ce=Math.hypot(K.clientX-re.centerScreen.x,K.clientY-re.centerScreen.y);F(ce/re.startDistance,re.pivotWorld)},[F]),ye=(0,$e.useCallback)(K=>{let re=Z.current;!re||K.pointerId!==re.pointerId||(K.stopPropagation(),K.currentTarget.hasPointerCapture(K.pointerId)&&K.currentTarget.releasePointerCapture(K.pointerId),Z.current=null,ne())},[ne]);return(0,$e.useEffect)(()=>{i||Z.current&&(Z.current=null,ne())},[i,ne]),(0,xa.jsxs)("group",{children:[(0,xa.jsx)(df.PivotControls,{matrix:y,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#e5484d","#46a758","#3e8bff"],hoveredColor:"#35c0dc",opacity:.95,depthTest:!1,disableAxes:!n||r==="rotate",disableSliders:!n||r==="rotate",disableRotations:!n||r==="move",disableScaling:!0,onDragStart:Q,onDrag:(K,re,ce,he)=>$(re,he),onDragEnd:ne}),i&&(0,xa.jsx)("group",{ref:g,children:(0,xa.jsx)(df.Html,{portal:void 0,zIndexRange:[10,0],style:{pointerEvents:"none",transition:"opacity 0.2s"},children:(0,xa.jsx)("div",{onPointerDown:te,onPointerMove:se,onPointerUp:ye,onPointerCancel:ye,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,xa.jsx)(xT.Maximize2,{size:13,color:"#ffffff"})})})})]})}var ot=require("react"),pf=require("@react-three/drei"),Dl=require("@react-three/fiber"),Yn=require("three"),ST=require("lucide-react");var Iu=require("three");function My(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 wT(e){return My(e).map(({key:t,node:n,transform:r})=>{n.updateWorldMatrix(!0,!0);let i=r?.pivot?.point??ds(n).toArray(),o=r?.pivot??rm(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 Iu.Vector3(...o.point).applyMatrix4(n.matrixWorld)}})}function _y(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 Iu.Matrix4).invert(),s=a.clone().multiply(t).multiply(r.startWorld),{rotation:l,scale:c,shear:u}=Ld(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),Ui(i,u),i.updateMatrixWorld(!0),{key:r.key,transform:{position:p.clone().sub(new Iu.Vector3(...o.offset)).toArray(),rotation:[i.rotation.x,i.rotation.y,i.rotation.z],scale:c.toArray(),pivot:o,shear:u}}})}var wa=require("react/jsx-runtime"),p2=.01;function Cy({entries:e,referenceNode:t,space:n,moveEnabled:r,gizmoTool:i,scaleEnabled:o,onTransformChange:a,onDraggingChange:s}){let l=(0,Dl.useThree)(U=>U.invalidate),c=(0,Dl.useThree)(U=>U.camera),u=(0,Dl.useThree)(U=>U.size),p=(0,ot.useRef)(e);p.current=e;let d=(0,ot.useRef)([]);(e.length!==d.current.length||e.some((U,F)=>U.key!==d.current[F].key||U.node!==d.current[F].node))&&(d.current=e);let m=d.current,f=(0,ot.useMemo)(()=>My(m).map(({node:U})=>U),[m]),b=t??e[e.length-1]?.node,g=(0,ot.useMemo)(()=>new Yn.Vector3,[]),y=(0,ot.useMemo)(()=>new Yn.Quaternion,[]),h=(0,ot.useMemo)(()=>new Yn.Matrix4,[]),v=(0,ot.useMemo)(()=>new Yn.Vector3(1,1,1),[]),x=(0,ot.useMemo)(()=>new Yn.Vector3,[]),P=(0,ot.useRef)(null),w=(0,ot.useMemo)(()=>f.flatMap(U=>{let F=Zc(U);if(!F)return[{node:U,point:ds(U).addScalar(.5)}];let te=[];for(let se of[F.min.x,F.max.x])for(let ye of[F.min.y,F.max.y])for(let K of[F.min.z,F.max.z])te.push({node:U,point:new Yn.Vector3(se,ye,K)});return te}),[f]),D=(0,ot.useRef)(!1),E=(0,ot.useRef)(new Yn.Matrix4),S=(0,ot.useRef)([]),_=(0,ot.useRef)(null),M=(0,ot.useRef)([]),C=(0,ot.useRef)(null),T=(0,ot.useRef)(null),I=(0,ot.useRef)(s);I.current=s;let L=(0,ot.useRef)(a);L.current=a;let B=(0,ot.useCallback)(()=>{if(!D.current){g.set(0,0,0);for(let U of f)U.updateWorldMatrix(!0,!1),g.add(ds(U).applyMatrix4(U.matrixWorld));f.length&&g.divideScalar(f.length),y.identity(),n==="local"&&b&&(b.updateWorldMatrix(!0,!1),b.getWorldQuaternion(y)),h.compose(g,y,v)}},[g,h,y,f,b,n,v]),N=(0,ot.useCallback)(()=>{let U=1/0,F=new Yn.Vector3;for(let{node:te,point:se}of w){te.updateWorldMatrix(!0,!1),F.copy(se).applyMatrix4(te.matrixWorld);let ye=F.distanceToSquared(c.position);ye<U&&(U=ye,x.copy(F))}P.current?.position.copy(x)},[c,w,x]),R=(0,ot.useCallback)(()=>{let U=T.current;T.current=null,U?.target.hasPointerCapture(U.pointerId)&&U.target.releasePointerCapture(U.pointerId)},[]);(0,ot.useLayoutEffect)(()=>{B(),N()},[B,N]),(0,ot.useLayoutEffect)(()=>()=>{R();let U=C.current!==null;if(U&&(cancelAnimationFrame(C.current),C.current=null),D.current)for(let F of S.current)F.node.matrixAutoUpdate=F.startMatrixAutoUpdate,F.node.matrix.copy(F.startMatrix),F.node.position.copy(F.startPosition),F.node.quaternion.copy(F.startQuaternion),F.node.scale.copy(F.startScale),F.node.updateMatrixWorld(!0);(D.current||U)&&(D.current=!1,_.current=null,I.current(!1),l());for(let F of M.current)fi(F);M.current=[]},[m,l,R]),(0,Dl.useFrame)(()=>{B(),N()});let O=(0,ot.useCallback)(()=>{C.current!==null&&(cancelAnimationFrame(C.current),C.current=null),B(),S.current=wT(p.current),M.current=[];for(let{node:U}of S.current)for(let F of Vi(U))Ws(F)||(Yo(F,F.matrixWorld),M.current.push(F));E.current.copy(h),_.current=null,D.current=!0,I.current(!0)},[h,B]),V=(0,ot.useCallback)((U,F)=>{if(!D.current)return;E.current.clone().premultiply(F).decompose(g,y,new Yn.Vector3),n==="world"&&y.identity(),h.compose(g,y,v),_.current=_y(S.current,F),N(),l()},[g,h,y,l,n,N,v]),G=(0,ot.useCallback)(()=>{if(!D.current)return;D.current=!1,R();let U=_.current;if(_.current=null,U?.length)C.current=requestAnimationFrame(()=>{C.current=null,I.current(!1)}),L.current(U);else{for(let F of M.current)fi(F);l(),I.current(!1)}M.current=[]},[l,R]);(0,ot.useEffect)(()=>{(!o&&T.current||!r&&D.current&&!T.current)&&G()},[o,r,G]);let Q=(0,ot.useCallback)(U=>{let F=U.clone().project(c);return{x:u.left+(F.x*.5+.5)*u.width,y:u.top+(-F.y*.5+.5)*u.height}},[c,u]),$=(0,ot.useCallback)(U=>{if(!o)return;U.stopPropagation(),U.preventDefault(),U.currentTarget.setPointerCapture(U.pointerId),O();let F=Q(g);T.current={pointerId:U.pointerId,target:U.currentTarget,centerScreen:F,startDistance:Math.max(1,Math.hypot(U.clientX-F.x,U.clientY-F.y))}},[O,g,Q,o]),ne=(0,ot.useCallback)(U=>{let F=T.current;if(!F||U.pointerId!==F.pointerId)return;U.stopPropagation();let te=Math.hypot(U.clientX-F.centerScreen.x,U.clientY-F.centerScreen.y),se=Math.max(p2,te/F.startDistance),ye=new Yn.Vector3().setFromMatrixPosition(E.current),K=new Yn.Matrix4().makeTranslation(...ye.toArray()).multiply(new Yn.Matrix4().makeScale(se,se,se)).multiply(new Yn.Matrix4().makeTranslation(...ye.clone().negate().toArray()));_.current=_y(S.current,K,se),N(),l()},[l,N]),Z=(0,ot.useCallback)(U=>{U.pointerId===T.current?.pointerId&&(U.stopPropagation(),G())},[G]);return(0,wa.jsxs)("group",{children:[(0,wa.jsx)(pf.PivotControls,{matrix:h,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#e5484d","#46a758","#3e8bff"],hoveredColor:"#35c0dc",opacity:.95,depthTest:!1,disableAxes:!r||i==="rotate",disableSliders:!r||i==="rotate",disableRotations:!r||i==="move",disableScaling:!0,onDragStart:O,onDrag:(U,F,te,se)=>V(F,se),onDragEnd:G}),o&&(0,wa.jsx)("group",{ref:P,children:(0,wa.jsx)(pf.Html,{children:(0,wa.jsx)("div",{onPointerDown:$,onPointerMove:ne,onPointerUp:Z,onPointerCancel:Z,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,wa.jsx)(ST.Maximize2,{size:13,color:"#ffffff"})})})})]})}var MT=require("three");function m2(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 MT.Vector3,c=s[0],u=1/0;for(let m of s){l.fromBufferAttribute(o,m);let f=l.distanceToSquared(a);f<u&&(u=f,c=m)}let p=r.getComponent(c,0),d=i.getComponent(c,0);for(let m=1;m<4;m++){let f=i.getComponent(c,m);f>d&&(d=f,p=r.getComponent(c,m))}return t.skeleton.bones[p]??null}function _T(e){let t=m2(e)??e.object,n=br(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 CT(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let r=Lr(t,e.anchorNodeName);return r?(r.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(r.matrixWorld),!0):!1}var Do=require("react"),ff=require("@react-three/fiber"),mf=require("three");function hf({annotation:e,enabled:t,controlsRef:n,offsetRef:r}){let i=(0,ff.useThree)(d=>d.scene),o=(0,Do.useRef)(null),a=(0,Do.useRef)(!1),s=(0,Do.useMemo)(()=>new mf.Vector3,[]),l=(0,Do.useMemo)(()=>new mf.Vector3,[]),c=(0,Do.useMemo)(()=>new mf.Vector3,[]),u=e?.anchorNodeName,p=e?.anchorLocalPosition;return(0,Do.useEffect)(()=>{o.current=null,a.current=!1},[u,e?.id]),(0,ff.useFrame)(()=>{let d=n.current,m=r.current;if(!t||!d||!m||!u||!p){a.current=!1;return}let f=o.current;if((!f||!f.parent)&&(f=Lr(i,u),o.current=f),!f){a.current=!1;return}f.updateWorldMatrix(!0,!1),s.set(p[0],p[1],p[2]).applyMatrix4(f.matrixWorld),!(a.current&&s.distanceToSquared(l)<1e-8)&&(l.copy(s),a.current=!0,c.copy(s).add(m),d.setLookAt(c.x,c.y,c.z,s.x,s.y,s.z,!0))}),null}var et=require("react"),_s=require("three");function TT({sceneAnnotations:e,controlledAnnotationCategories:t,onAnnotationCategoriesChange:n,showAnnotationFilters:r,initialCategories:i,controlledActiveAnnotation:o,onActiveAnnotationChange:a,onAnnotationsChange:s,controlsRef:l,sceneRef:c,annotationWorldPositionsRef:u,tourCameraOffsetRef:p,initialCameraStateRef:d,engagement:m,engagementRef:f}){let[b,g]=(0,et.useState)(!1),[y,h]=(0,et.useState)(()=>e??[]);(0,et.useEffect)(()=>{if(y.length>0){let ge=y.reduce((De,Fe)=>Math.max(De,Fe.id),0);D.current=ge}else D.current=0},[y]);let[v,x]=(0,et.useState)(null),[P,w]=(0,et.useState)({title:"",description:""}),D=(0,et.useRef)(0),[E,S]=(0,et.useState)(null),[_,M]=(0,et.useState)(-1),[C,T]=(0,et.useState)(!1),I=(0,et.useRef)(null),[L,B]=(0,et.useState)(()=>i),N=t===void 0?L:t,R=(0,et.useMemo)(()=>c0(y,N),[y,N]),O=(0,et.useMemo)(()=>[...new Set(y.map(cg))].sort(),[y]),V=r&&O.some(Boolean),G=ge=>{t===void 0&&B(ge),n?.(ge)},Q=(0,et.useMemo)(()=>[...R].sort((ge,De)=>ge.id-De.id),[R]),$=(0,et.useMemo)(()=>JSON.stringify([N?.map(ge=>ge.trim()).sort()??null,Q]),[N,Q]),ne=(0,et.useMemo)(()=>_<0||_>=Q.length?null:Q[_],[_,Q]),Z=(0,et.useCallback)(ge=>{if(o!==void 0){a?.(ge);return}S(ge?{annotation:ge}:null)},[o,a]),U=(0,et.useRef)(null),F=(0,et.useCallback)(ge=>{let De=l.current,Fe=c.current;if(!De)return;let be=new _s.Vector3,Je=u.current.get(ge.id);Je?be.copy(Je):Fe&&CT(ge,Fe,be)||be.set(ge.worldPosition[0],ge.worldPosition[1],ge.worldPosition[2]),p.current=null;let ve=De.smoothTime;De.smoothTime=Gs(De,.6);let de=ge.worldNormal;if(Rd(ge.cameraView))mc(De,ge.cameraView);else{if(Fe){let Ne=new _s.Box3().setFromObject(Fe),Ae=new _s.Vector3;Ne.getCenter(Ae);let mt=new _s.Vector3;Ne.getSize(mt);let gt=mt.length()*.2,It;de?It=new _s.Vector3(de[0],de[1],de[2]):It=be.clone().sub(Ae),It.lengthSq()<1e-6&&It.set(0,0,1),It.normalize();let fe=Math.max(gt*.6,.3),Ee=be.clone().add(It.multiplyScalar(fe));De.setPosition(Ee.x,Ee.y,Ee.z,!0),ge.anchorNodeName&&ge.anchorLocalPosition&&(p.current=Ee.clone().sub(be))}De.setTarget(be.x,be.y,be.z,!0),U.current&&qa(De,U.current)}I.current&&clearTimeout(I.current),I.current=setTimeout(()=>{De.smoothTime=ve,I.current=null},800),Z(ge)},[Z]),te=(0,et.useCallback)(()=>{Q.length!==0&&(l.current&&(U.current=Hs(l.current)),m.startTour(Q.length),g(!0),M(0),F(Q[0]))},[Q,F,m]),se=(0,et.useCallback)(()=>{if(Q.length===0||_<0)return;T(!0);let ge=(_-1+Q.length)%Q.length;M(ge),F(Q[ge]),setTimeout(()=>T(!1),500)},[_,Q,F]),ye=(0,et.useCallback)(()=>{if(Q.length===0||_<0)return;if(_===Q.length-1){if(m.completeTour(),g(!1),M(-1),Z(null),l.current&&d.current){let De=d.current;mc(l.current,{...U.current,...De}),U.current=null}return}T(!0);let ge=_+1;M(ge),F(Q[ge]),setTimeout(()=>T(!1),500)},[_,Q,F,Z,m]),K=(0,et.useCallback)(()=>{if(m.stopTour(),g(!1),M(-1),Z(null),l.current&&d.current){let ge=d.current;mc(l.current,{...U.current,...ge}),U.current=null}},[Z,m]);(0,et.useEffect)(()=>{f.current.stopTour("annotations-changed"),U.current&&l.current&&(mc(l.current,{...U.current,...d.current??{}}),U.current=null),p.current=null,M(-1),g(!1)},[$]),(0,et.useEffect)(()=>()=>{I.current&&clearTimeout(I.current)},[]),(0,et.useEffect)(()=>{ne&&b&&U.current&&Z(ne)},[ne,Z,b]),(0,et.useEffect)(()=>{if(e===void 0)return;let ge=e.map(De=>({...De,localPosition:De.localPosition??De.worldPosition}));h(ge)},[e]);let re=(0,et.useCallback)(()=>{if(o!==void 0){a?.(null);return}S(null)},[o,a]),ce=o!==void 0?o:E?.annotation??null,he=(0,et.useMemo)(()=>ce?R.find(De=>De.id===ce.id)??null:null,[ce,R]);(0,et.useEffect)(()=>{ce&&!he&&re()},[ce,he,re]);let qe=(0,et.useCallback)(()=>{if(!v||!P.title.trim())return;D.current+=1;let De={id:D.current,worldPosition:v.worldPosition,localPosition:v.localPosition,worldNormal:v.worldNormal,anchorNodeName:v.anchor?.anchorNodeName,anchorLocalPosition:v.anchor?.anchorLocalPosition,title:P.title.trim(),description:P.description},Fe=[...y,De];h(Fe),s?.(Fe),x(null)},[v,P,y,s]),ie=(0,et.useCallback)(()=>x(null),[]),tt=(0,et.useCallback)(ge=>{Rd(ge.cameraView)?F(ge):Z(ge)},[Z,F]);return{annotations:y,pendingAnnotation:v,setPendingAnnotation:x,annotationForm:P,setAnnotationForm:w,currentAnnotationIndex:_,isNavigating:C,localAnnotationCategories:L,selectedAnnotationCategories:N,visibleAnnotations:R,availableAnnotationCategories:O,annotationFiltersVisible:V,changeAnnotationCategories:G,sortedAnnotations:Q,currentAnnotation:ne,setActiveAnnotation:Z,focusAnnotation:F,startGuidedTour:te,goToPreviousAnnotation:se,goToNextAnnotation:ye,stopGuidedTour:K,closeViewingAnnotation:re,activeAnnotation:ce,activeViewingAnnotation:he,isGuidedTourActive:b,handleAnnotationOk:qe,handleAnnotationCancel:ie,handleAnnotationMarkerClick:tt}}var ni=require("react"),RT=require("three");var vn=require("three");function PT(e,t){if(!(e instanceof vn.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 vn.Box3,i=new vn.Vector3;if(tn(e)){let w=e;w.computeBoundingBox(),w.computeBoundingSphere();for(let D=0;D<n.count;D++)r.expandByPoint(e.getVertexPosition(D,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 vn.Vector3),a=t.getWorldPosition(new vn.Vector3),s=t.getWorldDirection(new vn.Vector3),l=t.isOrthographicCamera,c=new vn.Raycaster,u=w=>{if(l){let E=a.distanceTo(o)+r.getSize(i).length()+1;c.set(w.clone().addScaledVector(s,-E),s)}else c.set(a,w.clone().sub(a).normalize());let D=c.intersectObject(e,!1)[0];return D?as({...D,ray:c.ray},e):null},p=u(o);if(p)return p;let d=e.geometry.index,m=d?.count??n.count,f=new vn.Vector3,b=new vn.Vector3,g=new vn.Vector3,y=new vn.Vector3,h=new vn.Vector3,v=new vn.Vector3,x=null,P=1/0;for(let w=0;w+2<m;w+=3){if(e.getVertexPosition(d?d.getX(w):w,f).applyMatrix4(e.matrixWorld),e.getVertexPosition(d?d.getX(w+1):w+1,b).applyMatrix4(e.matrixWorld),e.getVertexPosition(d?d.getX(w+2):w+2,g).applyMatrix4(e.matrixWorld),y.copy(f).add(b).add(g).multiplyScalar(1/3),vn.Triangle.getNormal(f,b,g,h),l?v.copy(s).negate():v.copy(a).sub(y),h.dot(v)<=0)continue;let D=y.distanceToSquared(o);D<P&&(P=D,x=y.clone())}return x?u(x):null}var xn=require("three");function AT(e,t,n,r){if(!(e instanceof xn.Mesh)||!t)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let i=new xn.Vector3().fromArray(n.position);if(tn(e)){let c=e;c.computeBoundingBox(),c.computeBoundingSphere();let u=c.geometry.getAttribute("position");if(!u)return null;let p=c.geometry.index,d=p?.count??u.count,m=new xn.Triangle,f=new xn.Vector3,b=new xn.Vector3,g=1/0,y=null;for(let h=0;h+2<d;h+=3){let v=[0,1,2].map(P=>p?p.getX(h+P):h+P);m.a.fromBufferAttribute(u,v[0]),m.b.fromBufferAttribute(u,v[1]),m.c.fromBufferAttribute(u,v[2]),m.closestPointToPoint(i,f);let x=f.distanceToSquared(i);if(!(x>=g||!m.getBarycoord(f,b))&&(g=x,y=new xn.Vector3().addScaledVector(c.getVertexPosition(v[0],new xn.Vector3),b.x).addScaledVector(c.getVertexPosition(v[1],new xn.Vector3),b.y).addScaledVector(c.getVertexPosition(v[2],new xn.Vector3),b.z),g<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 xn.Vector2(r==="left"?-.0035:r==="right"?.0035:0,r==="down"?-.0035:r==="up"?.0035:0),a=new xn.Raycaster,s=n.size*.01,l=new xn.Vector3().fromArray(n.position);for(let c=1;c>=1/1024;c/=2){a.setFromCamera(new xn.Vector2(i.x,i.y).addScaledVector(o,c),t);let u=a.intersectObject(e,!1)[0];if(u){let p=as({...u,ray:a.ray},e);if(new xn.Vector3().fromArray(p.position).distanceTo(l)<=s)return p}}return null}var ET=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function OT({currentObjectBindings:e,currentObjectBindingsRef:t,applyObjectBindings:n,nodeRefsMap:r,controlsRef:i,decalMove:o,decalDragging:a,setDecalDragging:s,setDecalError:l,setDecalControl:c,decalRequestRef:u,onTextureUpload:p,currentPanelObjectId:d,modelUrl:m}){let f=(0,ni.useCallback)((w,D)=>{let E=t.current,S=E[w];if(!S)return;let _=D(S.decals??[]);n({...E,[w]:{...S,decals:_.length>0?_:void 0}})},[n,e]),b=(0,ni.useMemo)(()=>{if(!a)return null;let{objectKey:w,decalId:D}=a,E=e[w],S=E?.decals?.find(_=>_.id===D);return S?{objectId:E.modelObjectId??w,decal:S,onCancel:()=>s(null),onCommit:_=>{f(w,M=>M.map(C=>C.id===D?{...C,..._}:C)),s(null)}}:null},[a,e,f]),g=o??b,y=(0,ni.useCallback)((w,D)=>{u.current++;let E=t.current[w],S=r.current[E?.modelObjectId??w],_=PT(S,i.current?.camera);if(!_)return l("Could not find a surface on this object for the decal."),!1;let M={...D,..._};return f(w,C=>[...C,M]),l(null),c(C=>C&&{...C,activeId:M.id}),s({objectKey:w,decalId:M.id}),!0},[f]),h=(0,ni.useCallback)(w=>{let D=t.current[w],E=r.current[D?.modelObjectId??w]?.geometry;if(!E)return .2;E.boundingBox||E.computeBoundingBox();let S=E.boundingBox?.getSize(new RT.Vector3),_=S?Math.max(S.x,S.y,S.z):0;return _>0&&Number.isFinite(_)?_/3:.2},[]),v=(0,ni.useRef)([]);(0,ni.useEffect)(()=>()=>{for(let w of v.current)URL.revokeObjectURL(w)},[]);let x=(0,ni.useCallback)(async(w,D,E)=>{let S=++u.current;s(null);let _;if(p){if(_=await p(E,w),S!==u.current)return}else _=URL.createObjectURL(E),v.current.push(_);y(D,{id:ET(),image:_,size:h(D)})},[h,p,y]);return(0,ni.useEffect)(()=>{u.current++,l(null),s(null)},[d,m]),{editDecals:f,activeDecalMove:g,addCenteredDecal:y,decalSizeFor:h,startImageDecal:x,decalControlHandlers:(w,D)=>({onSelect:E=>{u.current++,l(null),s(null),c({...w,activeId:E})},onAddText:(E,S)=>y(D,{id:ET(),text:E,color:S,size:h(D)}),onAddImage:E=>{x(w.objectId,D,E)},onChange:(E,S)=>f(D,_=>_.map(M=>M.id===E?{...M,...S}:M)),onNudge:(E,S)=>{let _=t.current[D],M=_?.decals?.find(I=>I.id===E);if(!M)return;let C=r.current[_.modelObjectId??D],T=AT(C,i.current?.camera,M,S);if(!T){l("No visible surface in that direction. Try another arrow or rotate the view.");return}l(null),s(null),f(D,I=>I.map(L=>L.id===E?{...L,...T}:L))},onMove:E=>{u.current++,e[D]?.decals?.find(_=>_.id===E)&&(l(null),s(_=>_?.objectKey===D&&_.decalId===E?null:{objectKey:D,decalId:E}))},onRemove:E=>{s(null),f(D,S=>S.filter(_=>_.id!==E)),c({...w,activeId:null})},onClose:()=>{u.current++,l(null),s(null),c(null)}})}}var ku=require("react");function DT({canvasAreaElement:e,controlsRef:t,enabled:n}){let r=(0,ku.useRef)(new Set),i=(0,ku.useRef)(null);(0,ku.useEffect)(()=>{let o=e;if(!o||!n)return;let a=new Set(["w","a","s","d"," ","c"]),s=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),l=0,c=f=>f.code==="Space"?" ":f.key.toLowerCase(),u=()=>{r.current.clear(),l=0,i.current!==null&&(cancelAnimationFrame(i.current),i.current=null)},p=f=>{let b=t.current,g=r.current;if(!b||g.size===0){i.current=null,l=0;return}let y=l?Math.min((f-l)/1e3,.05):1/60;l=f;let h=Math.max(b.distance*.75,.01)*y;g.has("w")&&b.forward(h,!1),g.has("s")&&b.forward(-h,!1),g.has("a")&&b.truck(-h,0,!1),g.has("d")&&b.truck(h,0,!1),g.has(" ")&&b.truck(0,h,!1),g.has("c")&&b.truck(0,-h,!1),i.current=requestAnimationFrame(p)},d=f=>{if(f.target!==o){u();return}if(s.has(f.key)){let g=t.current;if(!g)return;f.preventDefault();let y=Math.PI/90,h=Math.max(g.distance*.05,.01);f.key==="ArrowUp"?f.shiftKey?g.forward(h,!0):g.rotate(0,-y,!0):f.key==="ArrowDown"?f.shiftKey?g.forward(-h,!0):g.rotate(0,y,!0):f.key==="ArrowLeft"?g.rotate(-y,0,!0):g.rotate(y,0,!0);return}let b=c(f);a.has(b)&&(f.preventDefault(),r.current.add(b),i.current===null&&(i.current=requestAnimationFrame(p)))},m=f=>{r.current.delete(c(f))};return o.addEventListener("keydown",d),o.addEventListener("keyup",m),o.addEventListener("blur",u),()=>{o.removeEventListener("keydown",d),o.removeEventListener("keyup",m),o.removeEventListener("blur",u),u()}},[e,t,n])}var kn=require("react");var IT=1,f2=4,h2=.0015,g2=.1,b2=8;function kT({moveZoomTarget:e,setMoveZoomTarget:t,currentObjectBindingsRef:n,materialRefsOut:r,rendererCaptureRef:i,canvasAreaRef:o,canvasAreaElement:a,applyBindingStyle:s}){let l=(0,kn.useRef)(null),c=(0,kn.useRef)(!1),u=(0,kn.useRef)([0,0]),p=(0,kn.useRef)([0,0]),d=(0,kn.useRef)(1),m=(0,kn.useRef)(null),f=(0,kn.useCallback)((x,P)=>{let w=e;if(!w)return;let D=n.current[w.objectKey]?.style?.material?.[w.textureKey],E=D?.path;if(!E)return;let S=D?.rotation??0,_=gi(w.textureKey),M=gc(E,_),C=r.current[w.objectKey],T=Array.isArray(C)?C:C?[C]:[],I=Rp[w.textureKey];for(let L of T){let B=L;I in B&&(B[I]=Ud(B.userData,w.textureKey,M,E,x,P,S))}i.current?.invalidate()},[e]),b=(0,kn.useCallback)(x=>{if(!e)return;x.currentTarget.setPointerCapture?.(x.pointerId),l.current={x:x.clientX,y:x.clientY},c.current=!1;let P=n.current[e.objectKey]?.style?.material?.[e.textureKey];if(u.current=P?.offset??[0,0],p.current=u.current,d.current=P?.scale??1,m.current===null){let w=()=>{i.current?.invalidate(),m.current=requestAnimationFrame(w)};m.current=requestAnimationFrame(w)}},[e]),g=(0,kn.useCallback)(x=>{if(!e||!l.current)return;let P=o.current,w=P?.clientWidth||1,D=P?.clientHeight||1,E=x.clientX-l.current.x,S=x.clientY-l.current.y;if(!c.current&&Math.hypot(E,S)<f2)return;c.current=!0;let _=-(E/w)*IT,M=S/D*IT,[C,T]=u.current,I=[C+_,T+M];p.current=I,f(I,d.current),s(e.objectKey,L=>({...L,material:{...L?.material,[e.textureKey]:{...L?.material?.[e.textureKey],path:n.current[e.objectKey]?.style?.material?.[e.textureKey]?.path,offset:I}}}))},[e,f,s]),y=(0,kn.useCallback)(x=>{if(!e)return;x.target?.releasePointerCapture?.(x.pointerId),m.current!==null&&(cancelAnimationFrame(m.current),m.current=null);let P=c.current,w=e;if(P){s(w.objectKey,D=>({...D,material:{...D?.material,[w.textureKey]:{...D?.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,kn.useEffect)(()=>{if(!e)return m.current!==null&&(cancelAnimationFrame(m.current),m.current=null),()=>{m.current!==null&&(cancelAnimationFrame(m.current),m.current=null)}},[e]),(0,kn.useEffect)(()=>{let x=a;if(!(!x||!e))return x.addEventListener("pointermove",g),x.addEventListener("pointerup",y),x.addEventListener("pointercancel",y),()=>{x.removeEventListener("pointermove",g),x.removeEventListener("pointerup",y),x.removeEventListener("pointercancel",y)}},[a,e,g,y]);let h=(0,kn.useCallback)(x=>{if(!e)return;x.preventDefault();let P=e,w=Math.exp(-x.deltaY*h2),D=Math.min(b2,Math.max(g2,d.current*w));d.current=D,f(p.current,D),s(P.objectKey,E=>({...E,material:{...E?.material,[P.textureKey]:{...E?.material?.[P.textureKey],path:n.current[P.objectKey]?.style?.material?.[P.textureKey]?.path,scale:D}}}))},[e,f,s]);return(0,kn.useEffect)(()=>{let x=a;if(!(!x||!e))return x.addEventListener("wheel",h,{passive:!1}),()=>x.removeEventListener("wheel",h)},[a,e,h]),{beginMoveZoom:(0,kn.useCallback)(x=>{c.current=!1,l.current=null,t(x)},[t]),handleMoveZoomPointerDown:b}}var gf=require("@react-three/fiber"),y2=.2;function Ty({enabled:e,speed:t,controlsRef:n}){let r=(0,gf.useThree)(i=>i.invalidate);return(0,gf.useFrame)((i,o)=>{!e||!n.current||(n.current.rotate(o*y2*t,0,!1),r())}),null}var Pi=require("lucide-react");var Rt=require("react/jsx-runtime");function LT({count:e,onDismiss:t}){let n=xe();return(0,Rt.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,Rt.jsx)(Pi.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,Rt.jsx)("span",{children:n(e===1?"bindingMismatchOne":"bindingMismatchMany",{count:e})}),(0,Rt.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:r=>{r.stopPropagation(),t()},"aria-label":n("dismiss"),children:(0,Rt.jsx)(Pi.X,{size:12})})]})}function BT({triangles:e,offset:t,onDismiss:n}){let r=xe();return(0,Rt.jsxs)("div",{className:`ri-largeModelBanner ${t?"ri-largeModelBanner--offset":""}`,children:[(0,Rt.jsx)(Pi.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,Rt.jsx)("span",{children:r("largeModelWarning",{millions:Math.round(e/1e6)})}),(0,Rt.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:i=>{i.stopPropagation(),n()},"aria-label":r("dismiss"),children:(0,Rt.jsx)(Pi.X,{size:12})})]})}function NT({missing:e,total:t}){let n=xe();return(0,Rt.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,Rt.jsx)(Pi.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,Rt.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 VT({failure:e,source:t}){return(0,Rt.jsx)("div",{className:"ri-loadError",role:"alert",children:(0,Rt.jsxs)("div",{className:"ri-loadError__card",children:[(0,Rt.jsxs)("div",{className:"ri-loadError__header",children:[(0,Rt.jsx)(Pi.AlertTriangle,{size:16,"aria-hidden":"true"}),(0,Rt.jsx)("span",{className:"ri-loadError__title",children:e.title})]}),(0,Rt.jsx)("p",{className:"ri-loadError__detail",children:e.detail}),(0,Rt.jsx)("p",{className:"ri-loadError__source",children:t}),e.technical&&(0,Rt.jsx)("p",{className:"ri-loadError__technical",children:e.technical})]})})}function jT({rebuilding:e,onReload:t}){let n=xe();return(0,Rt.jsx)("div",{className:"ri-contextRecovery",role:"alert",children:(0,Rt.jsxs)("div",{className:"ri-contextRecovery__card",children:[(0,Rt.jsx)(Pi.AlertTriangle,{size:24,"aria-hidden":"true"}),(0,Rt.jsx)("h2",{children:n(e?"contextRestoringTitle":"contextLostTitle")}),(0,Rt.jsx)("p",{children:n(e?"contextRestoringMessage":"contextLostMessage")}),(0,Rt.jsxs)("button",{type:"button",onClick:t,disabled:e,children:[(0,Rt.jsx)(Pi.RotateCcw,{size:16,"aria-hidden":"true"}),n("reloadViewer")]})]})})}var Lu=require("react");function UT({applyBindingStyle:e,resolveObjectKey:t,onTextureUpload:n,fileInputRef:r,pendingObjectId:i,createdBlobUrls:o,texturePositioning:a,setMoveZoomTarget:s}){let l=(0,Lu.useCallback)((y,h)=>{let v=o.current[y];v&&URL.revokeObjectURL(v),h.startsWith("blob:")?o.current[y]=h:delete o.current[y],e(y,x=>({...x,material:{...x?.material,texture:{path:h}}}))},[e]),c=y=>{let h=y.target.files?.[0],v=i.current;if(!h||!v)return;let x=t(v);x&&(n?n(h,x).then(P=>l(x,P),P=>console.error("onTextureUpload failed:",P)):l(x,URL.createObjectURL(h)),y.target.value="")},u=y=>{i.current=y,r.current?.click()},p=y=>{let h=t(y);if(!h)return;e(h,x=>x?.material?.texture?{...x,material:{...x.material,texture:void 0}}:x);let v=o.current[h];v&&(URL.revokeObjectURL(v),delete o.current[h])},d=!!a,m=typeof a=="object"?a:void 0,f=(0,Lu.useCallback)((y,h,v)=>{if(m?.onOffsetChange){m.onOffsetChange(y,h,v);return}e(y,x=>{let P=x?.material?.texture;if(!P?.path)return x;let w=P.offset??[0,0],D=[w[0],w[1]];return D[h]=v,{...x,material:{...x?.material,texture:{...P,offset:D}}}})},[e,m]),b=(0,Lu.useCallback)((y,h)=>{if(m?.onRotationChange){m.onRotationChange(y,h);return}e(y,v=>{let x=v?.material?.texture;if(!x?.path)return v;let P=(h%360+360)%360;return{...v,material:{...v?.material,texture:{...x,rotation:P*Math.PI/180}}}})},[e,m]),g=(0,Lu.useCallback)(()=>{s(null),m?.onEndPositioning?.()},[m]);return{handleFileChange:c,triggerFileUpload:u,clearTexture:p,texturePositioningEnabled:d,texturePositioningOverrides:m,setMaterialTextureOffset:f,setMaterialTextureRotation:b,endMaterialTexturePositioning:g}}function zT({materialPopup:e,resolveObjectKey:t,currentObjectBindings:n,nodeRefsMap:r,moveZoomTarget:i,texturePositioningEnabled:o,texturePositioningOverrides:a,setMaterialTextureOffset:s,setMaterialTextureRotation:l,endMaterialTexturePositioning:c}){let u=e?t(e.objectId):null,p=u?n[u]?.style?.material?.texture?.path:void 0,d=p?Ko(p)??p:void 0,m=Ep(u?r.current[u]:null),f=o?a?.offset??(u?n[u]?.style?.material?.texture?.offset:void 0):void 0,b=o?a?.rotationDegrees??(u?((n[u]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,g=o?a?.isPositioning??!!(u&&i?.objectKey===u&&i?.textureKey==="texture"):!1;return{materialTextureUrl:d,materialTargetTakesImage:m,materialTextureOffset:f,materialTextureRotationDegrees:b,isMaterialTexturePositioning:g,materialTextureOnOffsetChange:o?s:void 0,materialTextureOnRotationChange:o?l:void 0,materialTextureOnEndPositioning:o?c:void 0}}var Py=require("react"),$t=require("lucide-react");var ue=require("react/jsx-runtime");function FT({categories:e,selected:t,disabled:n,onChange:r}){let i=xe();return(0,ue.jsxs)("div",{className:"ri-annotationFilters",role:"group","aria-label":i("annotationCategories"),onPointerDown:o=>o.stopPropagation(),children:[(0,ue.jsx)("span",{children:i("annotations")}),(0,ue.jsx)("button",{type:"button","aria-pressed":t===null,disabled:n,onClick:()=>r(null),children:i("all")}),e.map(o=>(0,ue.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 GT({onCancel:e}){let t=xe();return(0,ue.jsxs)("div",{className:"ri-isolationPill",role:"status",onPointerDown:n=>n.stopPropagation(),children:[(0,ue.jsx)("span",{className:"ri-isolationPill__label",children:t("decalDragHint")}),(0,ue.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:e,children:t("cancel")})]})}function HT({label:e,onShowAll:t}){let n=xe();return(0,ue.jsxs)("div",{className:"ri-isolationPill",onPointerDown:r=>r.stopPropagation(),children:[(0,ue.jsx)("span",{className:"ri-isolationPill__label",children:e}),(0,ue.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("showAll")})]})}function WT({groups:e,activeVariants:t,onSelect:n}){let r=xe();return(0,ue.jsx)(ue.Fragment,{children:e.map((i,o)=>(0,ue.jsxs)("div",{className:"ri-variantPicker",role:"group","aria-label":i.name??r("materialVariants"),onPointerDown:a=>a.stopPropagation(),children:[i.name?(0,ue.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,ue.jsxs)("button",{type:"button",className:`ri-variantPicker__option ${s?"ri-variantPicker__option--active":""}`,"aria-pressed":s,onClick:()=>n(a.name),children:[a.swatch?(0,ue.jsx)("span",{className:"ri-variantPicker__swatch",style:{background:a.swatch},"aria-hidden":"true"}):null,a.label]},a.name)})]},i.name??`group-${o}`))})}function qT({count:e,active:t,index:n,navigating:r,onStart:i,onPrevious:o,onNext:a,onStop:s}){let l=xe();return t?(0,ue.jsxs)(ue.Fragment,{children:[(0,ue.jsxs)("button",{className:"ri-tourButton",onClick:o,disabled:r||e===0||n<=0,title:l("previousAnnotation"),children:[(0,ue.jsx)($t.ChevronLeft,{size:16}),(0,ue.jsx)("span",{children:l("previous")})]}),(0,ue.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:s,title:l("stopGuidedTour"),children:(0,ue.jsx)($t.Square,{size:16})}),(0,ue.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:a,disabled:r||e===0,title:l("nextAnnotation"),children:[(0,ue.jsx)("span",{children:l("next")}),(0,ue.jsx)($t.ChevronRight,{size:16})]})]}):(0,ue.jsx)("button",{className:"ri-navButtonSingle",onClick:i,disabled:e===0,title:l("startGuidedTour"),children:l("guidedTour")})}function XT({fullscreen:e,disabled:t}){let n=xe();return(0,ue.jsxs)("div",{className:"mv-fullscreenWrapper",children:[e.error&&(0,ue.jsx)("div",{className:"mv-fullscreenError",role:"alert",children:n.message(e.error)}),(0,ue.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,ue.jsx)($t.Minimize,{}):(0,ue.jsx)($t.Maximize,{})})]})}function $T({open:e,current:t,disabled:n,onSelect:r,onToggle:i}){let o=xe();return(0,ue.jsxs)("div",{className:"mv-controllersWrapper",onPointerDown:a=>a.stopPropagation(),children:[e&&(0,ue.jsxs)("div",{className:"mv-controllersMenu",children:[(0,ue.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("orbit"),children:o("orbitControl")}),(0,ue.jsx)("button",{type:"button",className:`mv-controllersMenuItem ${t==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("pointerLock"),children:o("pointLock")})]}),(0,ue.jsx)("button",{className:"mv-controllersButton",onClick:i,title:o("cameraController"),"aria-label":o("cameraControllerSettings"),disabled:n,children:(0,ue.jsx)($t.Orbit,{size:15})})]})}function YT({menu:e,recording:t,hasScene:n,canCaptureImage:r,canRecord:i,hasCinematic:o,hasMultipleModels:a=!1}){let s=xe(),l=(0,Py.useId)(),c=(0,Py.useId)(),{isDownloading:u,downloadMenuOpen:p,uvExportError:d,toggleDownloadMenu:m,handleDownloadMesh:f,handleDownloadSeparateMeshes:b,handleDownloadScreenshot:g,handleDownloadUvLayout:y,handleDownloadVideo:h,videoFormat:v,setVideoFormat:x,videoExportError:P}=e;return(0,ue.jsxs)("div",{className:"mv-downloadWrapper",onPointerDown:w=>w.stopPropagation(),children:[p&&(0,ue.jsxs)("div",{className:"mv-downloadMenu",children:[(0,ue.jsxs)("button",{className:"mv-downloadMenuItem",onClick:f,disabled:u||t||!n,"aria-describedby":l,children:[(0,ue.jsx)($t.Box,{size:14}),s(a?"downloadCombinedGLB":"downloadGLB")]}),(0,ue.jsx)("p",{className:"mv-downloadMenuDescription",id:l,children:s("downloadGLBDescription")}),e.openConfiguredAR&&(0,ue.jsxs)("button",{type:"button",className:"mv-downloadMenuItem",onClick:e.openConfiguredAR,disabled:t||!n,"aria-haspopup":"dialog",children:[(0,ue.jsx)($t.Box,{size:14}),s("arConfiguredButton")]}),a&&(0,ue.jsxs)(ue.Fragment,{children:[(0,ue.jsxs)("button",{className:"mv-downloadMenuItem",onClick:b,disabled:u||t||!n,"aria-describedby":c,children:[(0,ue.jsx)($t.Box,{size:14}),s("downloadSeparateGLBs")]}),(0,ue.jsx)("p",{className:"mv-downloadMenuDescription",id:c,children:s("downloadSeparateGLBsDescription")})]}),(0,ue.jsx)("div",{className:"mv-downloadMenuDivider"}),r&&(0,ue.jsxs)(ue.Fragment,{children:[(0,ue.jsxs)("button",{className:"mv-downloadMenuItem",onClick:g,disabled:t||!n,children:[(0,ue.jsx)($t.Camera,{size:14}),s("downloadPNG")]}),(0,ue.jsx)("div",{className:"mv-downloadMenuDivider"})]}),(0,ue.jsxs)("button",{className:"mv-downloadMenuItem",onClick:y,disabled:t||!n,children:[(0,ue.jsx)($t.FileImage,{size:14}),s("downloadUVLayout")]}),(0,ue.jsx)("div",{className:"mv-downloadMenuDivider"}),(0,ue.jsxs)("label",{className:"mv-downloadMenuItem",children:[s("videoFormat"),(0,ue.jsxs)("select",{"aria-label":s("videoFormat"),value:v,onChange:w=>x(w.target.value),children:[(0,ue.jsx)("option",{value:"auto",children:s("auto")}),(0,ue.jsx)("option",{value:"webm",disabled:!yo("webm"),children:"WebM"}),(0,ue.jsx)("option",{value:"mp4",disabled:!yo("mp4"),children:"MP4"}),(0,ue.jsx)("option",{value:"gif",disabled:!yo("gif"),children:"GIF"})]})]}),(0,ue.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{h("turntable")},disabled:t||!i||!yo(v),children:[(0,ue.jsx)($t.Play,{size:14}),s("recordTurntableVideo")]}),o&&(0,ue.jsxs)("button",{className:"mv-downloadMenuItem",onClick:()=>{h("cinematic")},disabled:t||!i||!yo(v),children:[(0,ue.jsx)($t.Play,{size:14}),s("recordCinematicVideo")]}),!yo()&&!yo("gif")&&(0,ue.jsx)("div",{className:"mv-downloadMenuNotice",role:"status",children:s("videoUnsupported")}),P&&(0,ue.jsx)("div",{className:"mv-downloadMenuNotice",role:"alert",children:s.message(P)}),d&&(0,ue.jsx)("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:s.message(d)})]}),(0,ue.jsx)("button",{className:"mv-downloadButton",onClick:m,disabled:u||t||!n,title:s("downloadOptions"),children:u?(0,ue.jsxs)(ue.Fragment,{children:[(0,ue.jsx)("span",{className:"mv-downloadButton__spinner"}),s("exporting")]}):(0,ue.jsxs)(ue.Fragment,{children:[(0,ue.jsx)($t.Download,{size:15}),s("download")]})})]})}function KT({x:e,y:t,form:n,setForm:r,onOk:i,onCancel:o}){let a=xe();return(0,ue.jsxs)("div",{className:"ri-annotationPopup",style:{left:e,top:t},onPointerDown:s=>s.stopPropagation(),onClick:s=>s.stopPropagation(),children:[(0,ue.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,ue.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,ue.jsxs)("div",{className:"ri-annotationActions",children:[(0,ue.jsx)("button",{onClick:i,className:`ri-annotationOkBtn ${n.title.trim()?"":"disabled"}`,disabled:!n.title.trim(),children:a("ok")}),(0,ue.jsx)("button",{onClick:o,className:"ri-annotationCancelBtn",children:a("cancel")}),(0,ue.jsx)("div",{className:"ri-annotationIcons"})]})]})}var Nu=require("react");var ZT=require("lucide-react");var Bu=require("react/jsx-runtime");function QT({requiredTier:e,feature:t}){return(0,Bu.jsxs)("div",{className:"bb-tierLock",children:[(0,Bu.jsx)(ZT.Lock,{size:16}),(0,Bu.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",sC[e]," plan or higher."]})]})}var Me=require("react/jsx-runtime");function JT({section:e,onChange:t}){let{isInsideEditor:n,tier:r}=ha(),i=n&&!Wm(r,"sectionPlanes"),[o,a]=(0,Nu.useState)(""),s=e.mode??"plane",l=e.planes??[],c=l.find(f=>f.id===e.activePlaneId)??l[0],u=s==="planes"?c:e,p=f=>t(s==="planes"?{planes:l.map(b=>b.id===c?.id?{...b,...f}:b)}:f),d={x:0,y:1,z:2},m=()=>globalThis.crypto?.randomUUID?.()??`section-${Date.now()}-${Math.random().toString(36).slice(2)}`;return(0,Me.jsxs)("div",{className:"ri-sectionControls",children:[i?(0,Me.jsx)(QT,{requiredTier:"starter",feature:"Multiple planes and section boxes"}):null,(0,Me.jsxs)("label",{children:["Cut type",(0,Me.jsxs)("select",{value:s,disabled:i,onChange:f=>{let b=f.target.value;t({mode:b,...b==="planes"&&!l.length?{planes:[{id:"cut-1",name:"Plane 1",axis:e.axis,position:e.position,flip:e.flip,enabled:!0,...e.normal?{normal:e.normal}:{}}],activePlaneId:"cut-1"}:{}})},children:[(0,Me.jsx)("option",{value:"plane",children:"Single plane"}),(0,Me.jsx)("option",{value:"planes",children:"Multiple planes"}),(0,Me.jsx)("option",{value:"box",children:"Section box"})]})]}),s==="planes"&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Active plane",(0,Me.jsx)("select",{value:c?.id??"",onChange:f=>t({activePlaneId:f.target.value}),children:l.map(f=>(0,Me.jsxs)("option",{value:f.id,children:[f.name,f.enabled?"":" (off)"]},f.id))})]}),(0,Me.jsxs)("div",{className:"ri-sectionControls__actions",children:[(0,Me.jsx)("button",{type:"button",disabled:l.length>=6,onClick:()=>{let f=m();t({planes:[...l,{id:f,name:`Plane ${l.length+1}`,axis:"x",position:.5,flip:!1,enabled:!0}],activePlaneId:f})},children:"Add plane"}),(0,Me.jsx)("button",{type:"button",disabled:!c,onClick:()=>t({planes:l.filter(f=>f.id!==c?.id),activePlaneId:l.find(f=>f.id!==c?.id)?.id}),children:"Remove plane"})]}),c&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Name",(0,Me.jsx)("input",{value:c.name,maxLength:200,onChange:f=>p({name:f.target.value.trim()||"Plane"})})]}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:c.enabled,onChange:f=>p({enabled:f.target.checked})}),"Enable this plane"]})]})]}),s==="box"?(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Draggable face",(0,Me.jsx)("select",{value:e.activePlaneId?.match(/^[xyz]-(min|max)$/)?e.activePlaneId:"x-min",onChange:f=>t({activePlaneId:f.target.value}),children:["x","y","z"].flatMap(f=>["min","max"].map(b=>(0,Me.jsxs)("option",{value:`${f}-${b}`,children:[f.toUpperCase()," ",b]},`${f}-${b}`)))})]}),(0,Me.jsx)("div",{className:"ri-sectionControls__bounds",children:["x","y","z"].flatMap(f=>["min","max"].map(b=>{let g=(e.box??{min:[0,0,0],max:[1,1,1]})[b][d[f]];return(0,Me.jsxs)("label",{children:[f.toUpperCase()," ",b,(0,Me.jsxs)("output",{children:[Math.round(g*100),"%"]}),(0,Me.jsx)("input",{"aria-label":`${f.toUpperCase()} ${b}`,type:"range",min:"0",max:"1",step:".001",value:g,onChange:y=>t(nf(e,`${f}-${b}`,Number(y.target.value)))})]},f+b)}))}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:!!e.invertBox,onChange:f=>t({invertBox:f.target.checked})}),"Keep outside box"]})]}):u&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("label",{children:["Orientation",(0,Me.jsxs)("select",{value:u.normal?"custom":u.axis,onChange:f=>f.target.value==="custom"?p({normal:[1,1,0]}):p({axis:f.target.value,normal:void 0}),children:[(0,Me.jsx)("option",{value:"x",children:"X"}),(0,Me.jsx)("option",{value:"y",children:"Y"}),(0,Me.jsx)("option",{value:"z",children:"Z"}),(0,Me.jsx)("option",{value:"custom",children:"Angled plane"})]})]}),u.normal&&(0,Me.jsx)("div",{className:"ri-sectionControls__vector",children:[0,1,2].map(f=>(0,Me.jsxs)("label",{children:["Normal ","XYZ"[f],(0,Me.jsx)(v2,{label:`Normal ${"XYZ"[f]}`,value:u.normal[f],onChange:b=>{let g=[...u.normal];g[f]=b,Math.hypot(...g)>1e-8&&p({normal:g})}})]},f))}),(0,Me.jsxs)("label",{children:["Position",(0,Me.jsxs)("output",{children:[Math.round(u.position*100),"%"]}),(0,Me.jsx)("input",{type:"range",min:"0",max:"1",step:".001","aria-label":"Section position",value:u.position,onChange:f=>p({position:Number(f.target.value)})})]}),(0,Me.jsxs)("label",{className:"ri-sectionControls__check",children:[(0,Me.jsx)("input",{type:"checkbox",checked:u.flip,onChange:f=>p({flip:f.target.checked})}),"Keep the other side"]})]}),(0,Me.jsxs)("details",{children:[(0,Me.jsxs)("summary",{children:["Saved section presets (",e.presets?.length??0,")"]}),(0,Me.jsxs)("form",{onSubmit:f=>{f.preventDefault();let b=o.trim();!b||(e.presets?.length??0)>=32||(t({presets:[...e.presets??[],{id:m(),name:b,settings:bc(e)}]}),a(""))},children:[(0,Me.jsxs)("label",{children:["Preset name",(0,Me.jsx)("input",{value:o,maxLength:200,onChange:f=>a(f.target.value)})]}),(0,Me.jsx)("button",{disabled:!o.trim()||(e.presets?.length??0)>=32,children:"Save current section"})]}),e.presets?.map(f=>(0,Me.jsxs)("div",{className:"ri-sectionControls__actions",children:[(0,Me.jsx)("button",{type:"button",onClick:()=>t({...bc(f.settings),normal:f.settings.normal,planes:f.settings.planes,activePlaneId:f.settings.activePlaneId,box:f.settings.box,invertBox:f.settings.invertBox,mode:f.settings.mode}),children:f.name}),(0,Me.jsx)("button",{type:"button","aria-label":`Delete preset ${f.name}`,onClick:()=>t({presets:e.presets?.filter(b=>b.id!==f.id)}),children:"Delete"})]},f.id))]}),(0,Me.jsx)("p",{children:"Visual cuts of the active asset. Multiple planes keep their common region. Presets are saved with your scene."})]})}function v2({label:e,value:t,onChange:n}){let[r,i]=(0,Nu.useState)(String(t));return(0,Nu.useEffect)(()=>i(String(t)),[t]),(0,Me.jsx)("input",{type:"number",step:".1","aria-label":e,value:r,onChange:o=>{let a=o.target.value;i(a),a.trim()&&Number.isFinite(Number(a))&&n(Number(a))},onBlur:()=>i(String(t))})}var eP=require("react"),tP=require("qrcode.react"),Yt=require("lucide-react");var Be=require("react/jsx-runtime");function nP({top:e,configuredHandoff:t=!1,xrStore:n,arSupported:r,vrSupported:i,quickLookSupported:o,mobileHandoffUrl:a,mobileHandoffOpen:s,onQuickLook:l,onOpenMobileHandoff:c}){let u=xe();return(0,Be.jsxs)("div",{className:"ri-xrTools",style:{top:`${e}px`},children:[!r&&o&&(0,Be.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:l,title:u("viewThisModelInARWithAppleQuickLook"),children:[(0,Be.jsx)(Yt.Box,{size:16}),u("viewInAR")]}),(a||t&&!o)&&(0,Be.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:c,title:u(t?"arConfiguredTitle":"openThisExperienceOnAPhoneForAR"),"aria-haspopup":"dialog","aria-expanded":s,children:[(0,Be.jsx)(Yt.QrCode,{size:16}),(0,Be.jsx)("span",{children:u(t?"arConfiguredButton":"openOnPhone")})]}),n&&r&&(0,Be.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>n.enterAR().catch(p=>{console.error("Failed to enter AR session:",p)}),title:u("viewThisModelInYourSpace"),children:[(0,Be.jsx)(Yt.Smartphone,{size:16}),(0,Be.jsx)("span",{children:u("enterAR")})]}),n&&i&&(0,Be.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>n.enterVR().catch(p=>{console.error("Failed to enter VR session:",p)}),title:u("viewThisModelInVR"),children:[(0,Be.jsx)(Yt.RectangleGoggles,{size:16}),(0,Be.jsx)("span",{children:u("enterVR")})]})]})}function rP({url:e,onClose:t}){let n=xe();return(0,Be.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:r=>{r.target===r.currentTarget&&t()},children:(0,Be.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,Be.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:t,"aria-label":n("closePhoneHandoff"),children:(0,Be.jsx)(Yt.X,{size:18})}),(0,Be.jsx)(Yt.Smartphone,{size:22,"aria-hidden":"true"}),(0,Be.jsx)("h2",{id:"ri-mobileHandoffTitle",children:n("viewInAR")}),(0,Be.jsx)("p",{children:n("arScanCode")}),(0,Be.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,Be.jsx)(tP.QRCodeSVG,{value:e,size:208,level:"M",marginSize:4,title:n("qrCodeToOpenThisModelOnAPhone")})})]})})}function iP({top:e,active:t,onToggle:n}){let r=xe();return(0,Be.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${e}px`},children:(0,Be.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,Be.jsx)(Yt.Grid3X3,{size:16})})})}function oP({top:e,open:t,factor:n,onToggleOpen:r,onFactorChange:i}){let o=xe();return(0,Be.jsxs)("div",{className:"ri-explodeTools",style:{top:`${e}px`},children:[(0,Be.jsx)("button",{type:"button",className:`ri-measureButton ${t||n>0?"ri-measureButton--active":""}`,onClick:r,title:o("explodedView"),"aria-pressed":t,children:(0,Be.jsx)(Yt.Expand,{size:16})}),t&&(0,Be.jsx)("div",{className:"ri-explodeSlider",onPointerDown:a=>a.stopPropagation(),children:(0,Be.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 aP({top:e,section:t,onChange:n}){let r=xe(),[i,o]=(0,eP.useState)(!1);return(0,Be.jsxs)("div",{className:"ri-sectionTools",style:{top:`${e}px`},children:[(0,Be.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,Be.jsx)(Yt.Slice,{size:16})}),t.enabled&&(0,Be.jsx)("button",{type:"button",className:"ri-measureButton","aria-label":"Section settings",title:"Section settings","aria-expanded":i,onClick:()=>o(a=>!a),children:(0,Be.jsx)(Yt.ChevronDown,{size:14})}),t.enabled&&i&&(0,Be.jsx)("div",{className:"ri-sectionPanel",onPointerDown:a=>a.stopPropagation(),children:(0,Be.jsx)(JT,{section:t,onChange:n})})]})}function sP({top:e,playing:t,disabled:n,onPlay:r,onPause:i,onStop:o}){let a=xe();return(0,Be.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${e}px`},children:[(0,Be.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,Be.jsx)(Yt.Pause,{size:16}):(0,Be.jsx)(Yt.Play,{size:16})}),t&&(0,Be.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:o,title:a("stopCinematicAndResetCamera"),children:(0,Be.jsx)(Yt.Square,{size:16})})]})}function lP({progress:e,onCancel:t}){let n=xe();return(0,Be.jsx)("div",{className:"ri-recordingOverlay",onPointerDown:r=>r.stopPropagation(),children:(0,Be.jsxs)("div",{className:"ri-isolationPill",role:"status","aria-live":"polite",children:[(0,Be.jsx)("span",{className:"ri-isolationPill__label",children:n("recordingVideo",{progress:e})}),(0,Be.jsx)("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("cancel")})]})})}function cP(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 Ln=require("three");function uP(e,t,n,r,i,o=!1){return!!(e?.usesSlots&&t.usesSlots&&e.url!==t.url&&n.includes(e.url)&&n.includes(t.url)&&r[e.url]&&r[t.url]&&(o||i[e.url]&&i[t.url]))}function dP(e,t,n){let r=t?.camera;if(!(r instanceof Ln.PerspectiveCamera))return null;let o=(e instanceof Ln.Box3?e:new Ln.Box3().setFromObject(e)).getSize(new Ln.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 pP(e,t){let n=e.camera;if(!(n instanceof Ln.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 bf={paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5},Vu={kind:"model"};function mP(e,t){let n=new Ln.Box3().setFromObject(t);return n.isEmpty()?!1:(n.expandByScalar(n.getSize(new Ln.Vector3).length()*.05),n.containsPoint(e.getTarget(new Ln.Vector3)))}function fP(e,t){return e.getTarget(new Ln.Vector3).distanceTo(t)<=Math.max(e.distance,1)*.001}async function Ay(e,t,n=.6){let r=e.smoothTime;e.smoothTime=Gs(e,n);try{return await t()}finally{e.smoothTime=r}}async function hP(e,t,{flyIn:n,onStart:r,invalidate:i}){if(n){let o=(t instanceof Ln.Box3?t:new Ln.Box3().setFromObject(t)).getBoundingSphere(new Ln.Sphere),a=o.center.clone(),l=e.getPosition(new Ln.Vector3).clone().sub(e.getTarget(new Ln.Vector3));l.lengthSq()<1e-6&&l.set(0,0,1),l.normalize();let c=Math.max(o.radius*10,20),u=a.clone().add(l.multiplyScalar(c));await e.setLookAt(u.x,u.y,u.z,a.x,a.y,a.z,!1)}r(),await Ay(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 gP=require("react");function bP({enabled:e,canvasAreaElement:t,fitAttemptedRef:n,fitInFlightRef:r,controlsRef:i,cameraFramingRef:o,nodeRefsMap:a,fitScene:s}){(0,gP.useEffect)(()=>{if(!e)return;let l=t;if(!l)return;let c=null,u=new ResizeObserver(()=>{!n.current||r.current||(c&&clearTimeout(c),c=setTimeout(()=>{let p=i.current,d=o.current;if(d.kind==="view"&&p){if(fP(p,d.target))return}else if(d.kind==="object"&&p){let m=a.current[d.key];if(m&&mP(p,m)){p.fitToBox(m,!0,bf).catch(()=>{});return}}s()},150))});return u.observe(l),()=>{u.disconnect(),c&&clearTimeout(c)}},[t,s,e])}var J=require("react/jsx-runtime");function yf(e){let n=e.split(/[?#]/)[0].split("/");return(n[n.length-1]||e).replace(/\.[^./]+$/,"")||e}var x2=Object.freeze({}),w2=[],S2={};function Ey(e){let t=hw(CS(e)),n=t.props,r=Cp(n.activeModelId??Pe(n.models?.find(g=>g.url===n.modelUrl)??{url:n.modelUrl}),n.tilesetUrl),i=(0,k.useRef)(r);i.current=r;let o=(0,k.useRef)(null),a=(0,k.useRef)(null),s=(0,k.useCallback)(()=>{let g=a.current;g&&(o.current=g.snapshot())},[]),l=tS(s),c=mS(e),[u,p]=(0,k.useState)(null);(0,k.useEffect)(()=>()=>{u&&URL.revokeObjectURL(u)},[u]);let d=()=>{s();let g=i.current;a.current?.captureFrame().then(y=>{y&&(g===i.current?p(y):URL.revokeObjectURL(y))})};bo(()=>{o.current=null,p(null)},[r]);let m=(0,k.useRef)(null),f=lS({loading:n.loading,reveal:n.reveal,rootRef:m,onPark:d}),{release:b}=l;return(0,k.useEffect)(()=>{f.live||b()},[f.live,b]),(0,J.jsx)(Vd,{labels:e.labels,children:(0,J.jsxs)("div",{className:"ri-viewerSlot",ref:m,children:[t.error&&(0,J.jsx)("div",{className:"ri-configuredARError",role:"alert",children:t.error}),f.live?(0,J.jsx)(_2,{...n,contextRecovery:l,engagement:c,resumeRef:o,viewerHandleRef:a,offscreen:!f.visible,frame:u},l.generation):(0,J.jsx)(_p,{className:"ri-viewer",background:Bc(n.backgroundColor,n.sceneConfig),poster:u??n.poster,onReveal:f.awaitingReveal?f.reveal:void 0})]})})}var M2={};function _2({labels:e,contextRecovery:t,engagement:n,modelUrl:r,tilesetUrl:i,tilesErrorTarget:o=8,tilesCacheSize:a=800,onObjectCatalog:s,modelFormat:l,licenseKey:c,licenseValidationUrl:u,hideLicenseCheckingOverlay:p=!1,objectBindings:d="auto",selectedObject:m,comparisonHighlights:f,multiSelectedKeys:b,selectedObjectRefs:g,selectedObjectOutlineColor:y,panelHoveredObject:h,onObjectBindingsChange:v,onObjectSelect:x,onObjectHover:P,onObjectDoubleClick:w,onDecalDoubleClick:D,onObjectContextMenu:E,decalMove:S,onObjectEditLeaseChange:_,onSelectionClear:M,onSceneLoaded:C,onModelLoaded:T,onAssetDiagnostics:I,onRuntimeStats:L,runtimeStatsIntervalMs:B,onLoadError:N,onProgress:R,onCameraControllerChange:O,cameraControllerType:V,onAction:G,onHiddenObjectsChange:Q,onCameraChange:$,onViewerReady:ne,onTextureUpload:Z,onAnimationsReady:U,onSequencesReady:F,showSequenceControls:te=!0,sequenceAutoPlay:se=!0,onModelAnimationsReady:ye,onAnnotationsChange:K,activeAnnotation:re,onActiveAnnotationChange:ce,camera:he,cameraLimits:qe,backgroundColor:ie,shadows:tt=!0,showObjectBindingDataPanel:ge=!0,customObjectBindingDataPanel:De,customSceneObjectsPanel:Fe,showSceneObjectsPanel:be=!0,showDownloadButton:Je=!0,downloadFilename:ve="model",showResetButton:de=!0,showFullscreenButton:Ne=!1,showLoadingOverlay:Ae=!0,showMouseController:mt=!1,mouseControllerPosition:gt="center-bottom",mouseControllerOpacity:It=1,moveSensitivity:fe=.08,zoomSensitivity:Ee=1,sceneConfig:Oe,onSceneConfigChange:nt,disableZoom:kt=!1,zoomOnSelected:Xe=!0,highlightOnHover:ke=!0,enableCameraControls:_e=!0,onAutoFit:dt,refitOnResize:an=!0,renderMode:Zn="demand",maxDpr:Qn=2,preserveDrawingBuffer:Ei=!1,webgpu:Rr=!1,performanceProfile:Ri="auto",dracoDecoderPath:zn,ktx2TranscoderPath:ii,meshopt:Oi=!0,showMeasureTools:Zt=!1,showUvCheckerButton:sn=!1,showExplodeControls:eo=!1,showMaterialVariants:Wu=!0,showObjectNavigator:to=!0,showSectionTools:Ma=!1,isolation:_a,onIsolationChange:Bo,showIsolateControls:Ps=!1,cinematic:oi,measurementUnit:No="m",measurements:Bl,onMeasurementsChange:Ca,measurementSettings:qu,measurementModelId:Uf,onMeasurementSettingsChange:Ta,enableXR:As=!1,usdzUrl:z,arScaleMode:H="normalized",mobileHandoffUrl:W,arHandoff:ae,showAnnotationNavigation:ee=!0,showAnnotationOnHover:Se=!1,showAnnotationFilters:Ce=!0,annotationCategories:zt,onAnnotationCategoriesChange:St,moveModeEnabled:Lt=!1,scaleModeEnabled:Mt=!1,gizmoTool:Vt,showFloorGrid:Fn=!1,productOptions:Le,objectTransformSpace:ln="world",enableKeyboardNavigation:Sn=!1,reducedMotion:Or="user",showViewGizmo:Nl=!1,overlay:Jn,unsafe_sceneChildren:Gn,autoRotate:Vl,autoRotateSpeed:rA,onTexturePositioningChange:zf,endTexturePositioningRef:Xu,texturePositioning:Uy,extraModelUrls:iA,onExtraModelError:zy,onExtraModelLoaded:$u,originalNodePoses:oA,models:Ot,mergeModels:Ff,onMergeModelLoaded:Fy,onMergeModelError:Gy,poster:Hy,resumeRef:Wy,viewerHandleRef:Gf,offscreen:aA,frame:qy,onModelChange:Xy,activeModelId:sA,onActiveModelChange:Hf}){let Hn=xe(),Ve=sA??Pe(Ot?.find(A=>A.url===r)??{url:r}),$y=Ot?.find(A=>Pe(A)===Ve)?.visible!==!1,ai=Cp(Ve,i),[gn]=(0,k.useState)(()=>Wy.current?.model===ai?Wy.current:null),Vo=tT(Or);(0,k.useEffect)(()=>()=>n.interrupt(),[n]);let Yy=(0,k.useRef)(n);Yy.current=n;let{autoBindings:Wf,controlled:Ky,currentBindings:Ge,applyBindings:si,bindingsForModel:Pa,modelEdits:lA}=Lw({modelUrl:r,activeModelId:Ve,tilesetUrl:i,models:Ot,objectBindings:d,onChange:v,initialBindings:gn?.objectBindings,initialModelEdits:gn?.modelBindingEdits}),{isInsideEditor:Dr,activeTab:cA,activeSubTab:uA,annotating:Yu,openMeasurementsPanel:dA,xrToolsTarget:Zy}=ha(),pA=Dr&&cA==="scene"&&uA==="lighting",Ku=AC(c,u),[qf,mA]=(0,k.useState)(()=>gn?.lightEdits??{}),[Zu,Qy]=(0,k.useState)(gn?.variantEdit),[Qu,Jy]=(0,k.useState)(gn?.sectionEdit),[Ju,ev]=(0,k.useState)(()=>gn?.measurementEdits??{}),Xf=JSON.stringify(Oe?.measurements??null),tv=(0,k.useRef)(new Map);(0,k.useEffect)(()=>{let A=tv.current.get(ai);tv.current.set(ai,Xf),A!==void 0&&A!==Xf&&ev(j=>{let Y={...j};return delete Y[ai],Y})},[ai,Xf]);let Ye=(0,k.useMemo)(()=>{let A=Ug(Oe??nr,qf);return Zu!==void 0&&(A={...A,model:vg(A.model,Zu)}),Qu!==void 0&&(A={...A,section:{...Nr,...A.section,...Qu}}),Ju[ai]&&(A={...A,measurements:Ju[ai]}),A},[Oe,qf,Zu,Qu,Ju,ai]),Es=(0,k.useRef)(Ye);Es.current=Ye;let jl=(0,k.useCallback)(A=>{let j=Es.current,Y={settings:{},items:[],...j.measurements,...A};nt?nt({...j,measurements:Y}):ev(pe=>({...pe,[ai]:Y}))},[ai,nt]),nv=(0,k.useCallback)(A=>{Ca?Ca(A):jl({items:A})},[Ca,jl]),rv=(0,k.useCallback)(A=>{Ta?Ta(A):jl({settings:A})},[Ta,jl]),ed=Bl??Ye.measurements?.items??w2,Ul=qu??Ye.measurements?.settings??S2,$f=Uf??xc(Ve),zl=Za(Ul,No),Yf=(0,k.useMemo)(()=>po(Ye.model),[Ye.model]);(0,k.useEffect)(()=>{n.setActiveVariants(Yf)},[Yf,n]);let fA=Oe?po(Oe.model).join(`
3789
+ `):"";bo(()=>{Qy(void 0)},[fA,Ve,r]);let hA=JSON.stringify(Oe?.section??null);bo(()=>{Jy(void 0)},[hA,Ve,r]);let iv=(0,k.useCallback)(A=>{if(nt){let j=Es.current;nt({...j,section:{...Nr,...j.section,...A}});return}Jy(j=>({...j,...A}))},[nt]),[ov,gA]=(0,k.useState)(!1),av=(0,k.useRef)([]),bA=(0,k.useCallback)(A=>{let j=Es.current,Y=po(j.model),pe=av.current,Te=pe.find(yt=>yt.variants.some(Ct=>Ct.name===A)),_t=Y.find(yt=>Te?Te.variants.some(Ct=>Ct.name===yt):yt===A)??null,ft=Y.includes(A)?Y.filter(yt=>yt!==A):el(Y,A,pe);if(n.chooseVariant(ft.includes(A)?A:null,_t,Te?.name??null),nt){nt({...j,model:vg(j.model,ft)});return}Qy(ft)},[nt,n]),sv=(0,k.useCallback)(A=>{if(nt){nt(Ug(Es.current,A));return}mA(j=>{let Y={...j};for(let[pe,Te]of Object.entries(A))Y[pe]={...j[pe],...Te};return Y})},[nt]),[Kf,lv]=(0,k.useState)(null),[Zf,cv]=(0,k.useState)(null),[uv,dv]=(0,k.useState)(null),pv=(0,k.useRef)(0),[Qf,mv]=(0,k.useState)(null),[fv,hv]=(0,k.useState)(gn?.uvCheckerOverride??null),Fl=Ye.model.renderer==="uv-checker",Jf=sn?fv??Fl:Fl,lr=(0,k.useMemo)(()=>{let A=Jf?"uv-checker":Fl?"pbr":Ye.model.renderer;return A===Ye.model.renderer?Ye:{...Ye,model:{...Ye.model,renderer:A}}},[Fl,Ye,Jf]);bo(()=>{hv(null)},[Ve,r,Ye.model.renderer,sn,i]);let gv=(0,k.useMemo)(()=>Bc(ie,Ye),[ie,Ye]),td=(0,k.useMemo)(()=>({dracoDecoderPath:zn,ktx2TranscoderPath:ii,meshopt:Oi}),[zn,ii,Oi]),yA=(0,k.useMemo)(()=>yw(Ri),[Ri]),rt=(0,k.useRef)(null),[bv,vA]=(0,k.useState)(()=>gn&&gn.cameraControllerType!=="pointerLock"?gn.cameraControllerType:"orbit"),[xA,yv]=(0,k.useState)(!1),Aa=V!==void 0?V:bv,nd=(0,k.useCallback)(A=>{yv(!1),A!==Aa&&(vA(A),O?.(A))},[Aa,O]),[Gl,vv]=(0,k.useState)(!1),xv=(0,k.useRef)({dragging:!1,endedAt:-1/0}),wv=(0,k.useCallback)(A=>{xv.current={dragging:A,endedAt:A?-1/0:performance.now()},vv(A)},[]),[er,Hl]=(0,k.useState)(null),Wl=!!(Uy||zf||Xu),Sv=(0,k.useRef)(zf);Sv.current=zf,(0,k.useEffect)(()=>{Sv.current?.(er)},[er]),(0,k.useEffect)(()=>{if(Xu)return Xu.current=()=>Hl(null),()=>{Xu.current=null}},[]),(0,k.useEffect)(()=>{rt.current&&(rt.current.dollySpeed=Math.max(Ee,0))},[Ee]),(0,k.useEffect)(()=>{rt.current&&(rt.current.enabled=_e&&!Gl&&!ov&&!er)},[_e,Gl,ov,er]);let eh=(0,k.useRef)(null),th=(0,k.useRef)(new Map),Mv=(0,k.useRef)(null),wA=(0,k.useRef)(null),Ir=(0,k.useRef)(null),_v=(0,k.useRef)({});(0,k.useEffect)(()=>()=>{for(let A of Object.values(_v.current))URL.revokeObjectURL(A)},[]);let Mn=(0,k.useRef)({}),Rs=(0,k.useRef)(Vu),[SA,MA]=(0,k.useState)(0),nh=(0,k.useCallback)(()=>{MA(A=>A+1)},[]),jo=(0,k.useRef)({}),cn=!!(Ot&&Ot.length>=1&&!i),rd=(0,k.useRef)(Ot);rd.current=Ot;let id=(0,k.useRef)(new Map),{scenesByUrlRef:Ea,cameraHomesByUrlRef:li,materialRefsByUrlRef:Cv,getMaterialRefsForUrl:_A}=kw(cn,Ot),od=(0,k.useRef)(null),Tv=(0,k.useRef)(null),ad=Yw(Ne),ci=(0,k.useRef)(null),[rh,CA]=(0,k.useState)(null),TA=(0,k.useCallback)(A=>{ci.current=A,CA(A)},[]);DT({canvasAreaElement:rh,controlsRef:rt,enabled:Sn&&_e&&!Lt&&!Mt});let sd=(0,k.useRef)(null),[Ra,ld]=(0,k.useState)({}),[Pv,ih]=(0,k.useState)(null),[cd,oh]=(0,k.useState)(null),[PA,AA]=(0,k.useState)(null),[EA,RA]=(0,k.useState)(null),[ui,Av]=(0,k.useState)(null),[OA,DA]=(0,k.useState)({}),bt=(0,k.useRef)(null),ah=(0,k.useRef)(null),sh=(0,k.useRef)(!1),Ev=(0,k.useRef)(r);Ev.current=r;let ud=(0,k.useRef)(null),lh=(0,k.useRef)(I);lh.current=I;let Oa=(0,k.useRef)(null),ch=(0,k.useRef)(0),Rv=(0,k.useRef)(null),[IA,kA]=(0,k.useState)(0),Di=(0,k.useRef)(!1),ql=(0,k.useRef)(!1),Xl=(0,k.useRef)(null),uh=(0,k.useRef)(!!he);uh.current=!!he;let di=(0,k.useRef)(null),dd=(0,k.useRef)(gn?.camera?{camera:gn.camera,home:gn.home}:null),[pd,Da]=(0,k.useState)(!!r),[Uo,Ia]=(0,k.useState)(!r||!!dt||!!he),[en,Ov]=(0,k.useState)(!1),[$l,Dv]=(0,k.useState)([]),[Yl,dh]=(0,k.useState)(!1),[ka,ph]=(0,k.useState)(null),[Iv,Os]=(0,k.useState)(!1),[LA,BA]=(0,k.useState)(0),mh=(0,k.useRef)(""),kv=(0,k.useRef)(new Set),Lv=(0,k.useRef)(""),[Bv,Nv]=(0,k.useState)(!1),fh=(0,k.useRef)(new Set),[Vv,NA]=(0,k.useState)(0),[hh,VA]=(0,k.useState)(null),[jA,jv]=(0,k.useState)(!1),[gh,Uv]=(0,k.useState)({total:0,missing:0}),[UA,zv]=(0,k.useState)("loadingModel"),[zA,bh]=(0,k.useState)(null),FA=fM(zA),Ii=(0,k.useRef)({}),Ds=(0,k.useCallback)(()=>{let A=rt.current;if(!A||di.current)return;di.current=d0(A,Oa.current??bt.current);let j=Xl.current;j?.usesSlots&&(li.current[j.url]=di.current)},[li]),[Is,Fv]=(0,k.useState)(()=>gn?.explodeFactor??0),[GA,Gv]=(0,k.useState)(!1);bo(()=>{Fv(0),Gv(!1)},[Ve,r,i]);let ki=(0,k.useMemo)(()=>{let A=Ye.cinematic,j=A?.enabled?{waypoints:A.waypoints,duration:A.duration,loop:A.loop,autoPlay:A.autoPlay}:null;return oi===void 0?j&&(j.waypoints?.length??0)>=2?j:null:oi===!1?null:oi===!0?j??{}:{...j??{},...oi}},[oi,Ye]),[Kl,Wn]=(0,k.useState)(!1),[Hv,zo]=(0,k.useState)(!1),yh=(0,k.useRef)(!1);(0,k.useEffect)(()=>{Wn(!1),zo(!1),yh.current=!1},[Ve,r,i]),(0,k.useEffect)(()=>{if(!(!ki?.autoPlay||yh.current)&&en&&Uo&&!pd){if(yh.current=!0,Vo)return;Wn(!0),zo(!1)}},[ki,en,Uo,pd,Vo]);let HA=(0,k.useCallback)(()=>{Wn(!1),zo(!0)},[]),{captureVideo:vh,cancelVideo:xh,isRecording:Wv,recording:Ft,progress:WA,onProgress:qv}=$w({rendererCaptureRef:Ir,controlsRef:rt,cinematicConfig:ki,ready:t.status==="ready"&&en&&Uo&&!pd,modelUrl:`${Ve}|${i??""}`,onCaptureStart:HA});(0,k.useEffect)(()=>{t.status==="lost"&&(n.interrupt(),xh(),Wn(!1),rt.current?.stop())},[t.status,xh,n]);let{xrStore:qA,inARSession:wh,presenterRef:XA,arSupported:Xv,vrSupported:$v,quickLookSupported:Yv,resolvedMobileHandoffUrl:md,isMobileHandoffOpen:Kv,arOverlay:$A,openMobileHandoff:YA,closeMobileHandoff:KA,openQuickLook:ZA,handleARStateChange:QA}=AM({enableXR:As,usdzUrl:z,mobileHandoffUrl:W,configuredHandoff:!!ae,engagement:n}),Li=(0,k.useMemo)(()=>a0(()=>Wn(!1)),[Ve,r]),Sh=(0,k.useMemo)(()=>({current:null}),[Ve,r]),Zv=(0,k.useRef)(U);Zv.current=U;let Mh=(0,k.useRef)(F);Mh.current=F;let Qv=(0,k.useCallback)(A=>{Sh.current=A,Zv.current?.(A)},[Sh]),Jv=(0,k.useMemo)(()=>{try{return $o(Ye.sequences??[])}catch{return[]}},[Ye.sequences]);(0,k.useEffect)(()=>(Mh.current?.(en?Li:null),()=>Mh.current?.(null)),[Li,en]),(0,k.useEffect)(()=>()=>Li.destroy(),[Li]),(0,k.useEffect)(()=>{Vo&&Li.pause()},[Li,Vo]);let ks=Vw(Rr),ex=(0,k.useRef)(ks);ex.current=ks;let Fo=ks==="webgpu",fd=Fo?null:qA,tx=Ma||Ye.section?.enabled===!0;(0,k.useEffect)(()=>{if(!Fo)return;let A=[tx&&"the section cut",(Lt||Mt)&&"the transform gizmo"].filter(Boolean);A.length!==0&&console.info(`[react-immersive] With WebGPU, ${A.join(" and ")} ${A.length>1?"aren't":"isn't"} available; ${A.length>1?"they need":"it needs"} WebGL.`)},[Fo,tx,Lt,Mt]);let{annotations:W2,pendingAnnotation:La,setPendingAnnotation:nx,annotationForm:JA,setAnnotationForm:_h,currentAnnotationIndex:eE,isNavigating:tE,localAnnotationCategories:nE,selectedAnnotationCategories:rE,visibleAnnotations:rx,availableAnnotationCategories:iE,annotationFiltersVisible:Ch,changeAnnotationCategories:oE,sortedAnnotations:Th,currentAnnotation:ix,setActiveAnnotation:q2,focusAnnotation:X2,startGuidedTour:aE,goToPreviousAnnotation:sE,goToNextAnnotation:lE,stopGuidedTour:cE,closeViewingAnnotation:hd,activeAnnotation:$2,activeViewingAnnotation:gd,isGuidedTourActive:Zl,handleAnnotationOk:uE,handleAnnotationCancel:dE,handleAnnotationMarkerClick:ox}=TT({sceneAnnotations:Oe?.annotations,controlledAnnotationCategories:zt,onAnnotationCategoriesChange:St,showAnnotationFilters:Ce,initialCategories:gn?.annotationCategories??null,controlledActiveAnnotation:re,onActiveAnnotationChange:ce,onAnnotationsChange:K,controlsRef:rt,sceneRef:bt,annotationWorldPositionsRef:th,tourCameraOffsetRef:eh,initialCameraStateRef:di,engagement:n,engagementRef:Yy}),pE=Ye.section??Nr,ax=Wu&&en&&$l.length>0;av.current=$l;let sx=de||Je||Ne&&ad.supported||ee&&Th.length>0;Ii.current=Ge,(0,k.useEffect)(()=>{if(!er)return;let A=Ge[er.objectKey]?.style?.material?.[er.textureKey]?.path;(!Wl||!A)&&Hl(null)},[Ge,Wl,er]);let Ph=(0,k.useRef)({}),[bd,mE]=(0,k.useState)({});(0,k.useEffect)(()=>{let A={...bd},j=!1,Y=new Set;for(let[pe,Te]of Object.entries(Ge)){Y.add(pe);let _t=Te.style?.material,ft=Ph.current[pe]??{},yt={};for(let un of oa){let tr=_t?.[un]?.path;tr&&(yt[un]=tr,tr!==ft[un]&&(A[pe]!==un&&(j=!0),A[pe]=un))}let Ct=A[pe];if(Ct&&!yt[Ct]){let un=oa.find(tr=>!!yt[tr]);un?A[pe]=un:delete A[pe],j=!0}Ph.current[pe]=yt}for(let pe of Object.keys(A))Y.has(pe)||(delete A[pe],delete Ph.current[pe],j=!0);j&&mE(A)},[Ge]);let Ah=(0,k.useMemo)(()=>Object.entries(Ge).map(([A,j])=>JSON.stringify([A,j.modelObjectId,j.transform??null])).sort().join(""),[Ge]),{measureMode:mr,measureModeRef:lx,measurePoints:Eh,measurementTool:Rh,areaClosed:Oh,measurementError:fE,selectMeasurementTool:hE,undoMeasurementPoint:gE,finishMeasureArea:bE,snapMode:yE,setSnapMode:vE,snapPreview:cx,handleMeasurePointerMove:xE,clearSnapPreview:ux,showDimensions:Dh,measureBox:yd,modelBounds:wE,refreshBounds:dx,clearMeasurements:SE,toggleMeasureMode:ME,toggleDimensions:_E,handleMeasurePointerDown:CE,handleMeasureClick:TE,saveMeasurement:PE,canSaveMeasurement:AE,canCalibrate:EE,calibrate:RE,savedResults:OE,setSavedResults:px,exportMeasurementJson:DE,exportMeasurementCsv:IE,importMeasurements:kE}=SM({canvasAreaRef:ci,controlsRef:rt,sceneRef:bt,modelUrl:Ve,tilesetUrl:i,measurementModelId:$f,savedMeasurements:ed,measurementSettings:Ul,measurementUnit:No,onMeasurementsChange:nv,onMeasurementSettingsChange:rv,onCollectionChange:A=>{Ca?.(A.items),Ta?.(A.settings),jl(A)},modelRotation:Ye.model.rotation,bindingTransformSignature:Ah,modelLoaded:en,enabled:Zt&&!Ft}),LE=(0,k.useCallback)(()=>{if(!Ot||Ot.length<2)return null;let A=Ot.map(j=>{let Y=Ea.current[Pe(j)];if(!Y)return null;let pe=Pe(j)===Ve?jo.current:Cv.current[Pe(j)]?.current??{};return{scene:Y,objectBindings:Pa(j),matRefs:pe,label:j.label||yf(j.url)}}).filter(j=>j!==null);return A.length>0?A:null},[Ot,Ve,r,Pa]),BE=(0,k.useCallback)(()=>{if(!Ot||Ot.length<2)return null;let A=Ot.map(j=>{let Y=Ea.current[Pe(j)];return Y?{scene:Y,label:j.label||yf(j.url)}:null}).filter(j=>j!==null);return A.length>0?A:null},[Ot]);(0,k.useEffect)(()=>{(Kl||mr||Ft||wh||t.status!=="ready")&&Li.stop()},[Li,Kl,mr,Ft,wh,t.status]);let Ih=(0,k.useRef)(null),NE=(0,k.useCallback)(()=>{if(!en)throw new Error("Wait for the current model to finish loading before preparing AR.");if(i)throw new Error("Streaming tiles are incomplete model data. Provide arHandoff.createUSDZ to prepare this asset.");let A=cn?Ot:void 0,j=A?A.filter(Y=>Y.visible!==!1).map(Y=>{let pe=Pe(Y),Te=Ea.current[pe];if(!Te)throw new Error("Wait for every visible model to finish loading before preparing AR.");let _t=pe===Ve?Ih.current??Pa(Y):es(Pa(Y),Y.sceneConfig?.product).objectBindings;return{scene:Te,instanceId:pe,objectBindings:_t,materialOverrides:pe===Ve?jo.current:Cv.current[pe]?.current}}):bt.current?[{scene:bt.current,objectBindings:Ih.current??Ge,materialOverrides:jo.current}]:[];if(!j.length)throw new Error("Wait for a visible model to finish loading before preparing AR.");for(let Y of j)lp(Y.scene);return j},[en,i,cn,Ot,Pa,Ve,Ge]),[VE,jE]=(0,k.useState)(34),mx=(0,k.useRef)(void 0),UE=mM({openConfiguredAR:As&&ae?()=>mx.current?.():void 0,sceneRef:bt,materialRefs:jo,rendererCaptureRef:Ir,objectBindings:Ge,downloadFilename:ve,getAllLoadedModels:LE,getAllLoadedModelUvSources:BE,captureVideo:vh}),fx=(0,k.useMemo)(()=>Object.fromEntries(Object.entries(Ge).filter(([,A])=>A.visible===!1).map(([A])=>[A,!0])),[Ge]),Go=(0,k.useMemo)(()=>{let A=new WeakMap,j=new Map,Y=new Map;for(let[pe,Te]of Object.entries(Ge))A.set(Te,pe),j.has(Te.id)||j.set(Te.id,pe),Y.has(Te.modelObjectId)||Y.set(Te.modelObjectId,pe);return{byReference:A,byId:j,byModelObjectId:Y}},[Ge]),pi=(0,k.useCallback)(A=>A?Go.byReference.get(A)??Go.byModelObjectId.get(A.modelObjectId)??Go.byId.get(A.id)??null:null,[Go]),kh=m!==void 0,Ba=kh?m??null:EA,jt=pi(Ba);(0,k.useEffect)(()=>{n.setSelectedPart(jt)},[jt,n]);let Na=jt?Mn.current[jt]??null:null,zE=jt?bd[jt]:void 0,hx=pi(ke?h??cd??PA:null),FE=hx?Mn.current[hx]??null:null,Lh=g??(b?b.map(A=>Mn.current[A]).filter(Boolean):null),vd=(0,k.useMemo)(()=>{let A=Lh??(Na&&Ge[jt??""]?.transform?.shear?[Na]:null);if(!A?.length)return null;let j=new Set(A),Y=Object.entries(Mn.current).filter(([,pe])=>j.has(pe)).map(([pe,Te])=>({key:pe,node:Te,transform:Ge[pe]?.transform}));return Y.length>1||Y.some(({transform:pe})=>pe?.shear)?Y:null},[Lh,Ge,Na,jt]),gx=(0,k.useCallback)(A=>{AA(A),P?.(A)},[P]),bx=ge&&Ba!==null&&jt!==null,Va=(jt?Ge[jt]:null)??Ba,Ql=Va&&(Va.modelObjectId||Va.id)||null,Jl=Ql?OA[Ql]??null:null,[GE,yx]=(0,k.useState)(""),vx=(0,k.useRef)(null);(0,k.useEffect)(()=>{let A=vx.current;if(A!==jt)if(vx.current=jt,jt){let j=Va?.label||Ba?.label||jt;yx(Hn("objectSelected",{name:j}))}else A&&yx(Hn("selectionCleared"))},[jt,Va,Ba,Hn]),(0,k.useEffect)(()=>{Q?.(fx)},[fx,Q]);let Ls=(0,k.useCallback)((A,j)=>{if(Aa==="pointerLock"){nd("orbit");return}A&&j?n.viewPart({objectId:A.id,objectKey:pi(A)??(A.modelObjectId||A.id),label:A.label,source:j}):A||n.setSelectedPart(null),kh||RA(A),x?.(A)},[Aa,nd,kh,x,pi,n]),xx=(0,k.useRef)(gn?.objectBindings?`${r}
3790
+ ${i??""}`:null),xd=(0,k.useCallback)((A,j)=>{if(!Wf)return;let Y=`${r}
3791
+ ${i??""}`,pe=xx.current===Y?Ii.current:x2;xx.current=Y;let Te=af(A,j);for(let _t of Object.keys(Te))pe[_t]&&(Te[_t]=pe[_t]);si(Te)},[Wf,r,i,si]),{glowMemoryRef:wx,readObjectGlow:Sx,applyGlow:Mx}=DS({nodeRefsMap:Mn,currentObjectBindingsRef:Ii,applyObjectBindings:si}),HE=(0,k.useCallback)(A=>{let j=jt;if(!j||!A)return;let Y=Ii.current[j];Y&&si({...Ii.current,[j]:{...Y,transform:{...Y.transform,...A}}})},[si,jt]),WE=(0,k.useCallback)(A=>{let j=Ii.current,Y={...j};for(let{key:pe,transform:Te}of A){let _t=j[pe];_t&&(Y[pe]={..._t,transform:{..._t.transform,...Te}})}si(Y)},[si]),Ho=(0,k.useCallback)((A,j)=>Ge[A]?A:j?pi(j):Go.byId.get(A)??Go.byModelObjectId.get(A)??null,[Ge,pi,Go]),wd=(0,k.useCallback)((A,j)=>{let Y=Ho(A),pe=Y?Ge[Y]:void 0;!Y||!pe||si({...Ge,[Y]:{...pe,style:j(pe.style)}})},[Ho,Ge,si]),Bi=(0,k.useCallback)(()=>{if(ui){let A=Ra[ui.objectId]?.hex;A!==void 0&&(wd(ui.objectId,j=>({...j,material:{...j?.material,baseColor:A}})),ld(j=>({...j,[ui.objectId]:{}})))}Av(null)},[ui,Ra,wd]),Bh=(0,k.useCallback)(()=>{Ls(null),ih(null),Bi()},[Ls,Bi]),qE=(0,k.useCallback)((A,j,Y,pe,Te)=>{let _t=Tv.current,ft=ci.current,yt=rt.current?.camera;if(!_t)return{objectId:A,x:24,y:24};let Ct=_t.getBoundingClientRect(),un=12,tr=Ct.width-j-un,ro=Ct.height-Y-un,ic=Math.max(un,(Ct.width-j)/2),oc=Math.max(un,(Ct.height-Y)/2),ac=Ho(A,pe),Ni=ac?Mn.current[ac]:null,hr=(io,oo)=>oo<=un?un:Math.min(Math.max(io,un),oo);if(ft&&yt&&Ni){let io=ft.getBoundingClientRect(),oo=new ri.Vector3;new ri.Box3().setFromObject(Ni).getCenter(oo),oo.project(yt);let qo=(oo.x+1)/2*io.width+(io.left-Ct.left),cc=(1-oo.y)/2*io.height+(io.top-Ct.top);return{objectId:A,x:hr(qo+24,tr),y:hr(cc-Y/2,ro)}}let sc=typeof Te?.screenX=="number"?Te.screenX-Ct.left:ic,lc=typeof Te?.screenY=="number"?Te.screenY-Ct.top:oc;return{objectId:A,x:hr(sc,tr),y:hr(lc,ro)}},[Ho]),Sd=IS({setCurrentAction:ih,bindingKeyIndex:Go,currentObjectBindings:Ge,applyObjectBindings:si,resolveObjectKey:Ho,closeColorPicker:Bi,setColorPicker:Av,setMaterialPopupsByObject:DA,setItemMaterials:ld,getPopoverPosition:qE,decalRequestRef:pv,setDecalError:dv,setDecalDragging:mv,setDecalControl:cv,resolvedSceneConfigRef:Es,applyLightPatches:sv,readObjectGlow:Sx,applyGlow:Mx,glowMemoryRef:wx,setLightControl:lv,onAction:G});(0,k.useEffect)(()=>{if(ui)return window.addEventListener("pointerdown",Bi),()=>window.removeEventListener("pointerdown",Bi)},[ui,Bi]),(0,k.useEffect)(()=>{if(!gd)return;let A=j=>{if(sd.current&&!sd.current.contains(j.target)){if(j.target.closest?.(".ri-annotationMarker"))return;hd()}};return document.addEventListener("mousedown",A),document.addEventListener("touchstart",A),()=>{document.removeEventListener("mousedown",A),document.removeEventListener("touchstart",A)}},[gd,hd]),(0,k.useEffect)(()=>{if(!La)return;let A=j=>{let Y=j.target;if(Y.closest?.(".ri-annotationPopup")||Y.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let pe=ci.current;!pe||!pe.contains(Y)||(nx(null),_h({title:"",description:""}))};return document.addEventListener("mousedown",A,!0),document.addEventListener("touchstart",A,!0),()=>{document.removeEventListener("mousedown",A,!0),document.removeEventListener("touchstart",A,!0)}},[La]);let{handleFileChange:XE,triggerFileUpload:_x,clearTexture:Cx,texturePositioningEnabled:$E,texturePositioningOverrides:YE,setMaterialTextureOffset:KE,setMaterialTextureRotation:ZE,endMaterialTexturePositioning:QE}=UT({applyBindingStyle:wd,resolveObjectKey:Ho,onTextureUpload:Z,fileInputRef:Mv,pendingObjectId:wA,createdBlobUrls:_v,texturePositioning:Uy,setMoveZoomTarget:Hl}),Nh=(0,k.useRef)(ne);Nh.current=ne;let kr=(0,k.useCallback)(()=>{let A=rt.current;!A||!Nh.current||Nh.current({objectBindings:Ii.current,homeCameraState:di.current,captureImage:j=>Wv()?Promise.reject(new Error("Wait for video export to finish before capturing an image.")):hp(Ir.current,j),isLoadingTiles:()=>sh.current,captureVideo:vh,invalidate:()=>Ir.current?.invalidate(),rendererBackend:ex.current??"webgl",raw:{controls:A,scene:bt.current,nodes:Mn.current}})},[vh,Wv]),ec=(0,k.useCallback)(async(A=!1)=>{let j=rt.current,Y=Oa.current??bt.current;if(!j||!Y)return!1;Rs.current=Vu;try{return await hP(j,Y,{flyIn:A,onStart:()=>Ia(!0),invalidate:()=>Ir.current?.invalidate()}),(Oa.current??bt.current)!==Y?!1:(Di.current=!0,Ds(),kr(),!0)}catch(pe){return console.error("Fit scene error:",pe),!1}},[Ds,kr]);(0,k.useEffect)(()=>{let A={url:Ve,usesSlots:cn},j=uP(Xl.current,A,(rd.current??[]).map(yt=>Pe(yt)),Ea.current,li.current,Dr),Y=Xl.current?li.current[Xl.current.url]:void 0;if(j&&Y&&!li.current[Ve]&&(li.current[Ve]=Y),Xl.current=A,Di.current=!1,ql.current=!1,di.current=cn?li.current[Ve]??null:null,bt.current=null,ah.current=null,sh.current=!1,ud.current=null,Oa.current=null,Ov(!1),Dv([]),dh(!1),ph(null),Os(!1),mh.current="",kv.current=new Set,fh.current=new Set,Uv({total:0,missing:0}),zv("loadingModel"),bh(null),gn?.model!==Cp(Ve,i)&&(dd.current=null),!r){Da(!1),Ia(!0);return}if(cn&&id.current.has(Ve)){Da(!1),Ia(!0);return}Da(!j),Ia(j||!!dt||uh.current);let pe=!1,Te=null,_t=yt=>{Te=setTimeout(ft,yt)},ft=()=>{if(pe||Di.current||ql.current||cn&&id.current.has(Ve))return;let yt=Oa.current??bt.current;if(!rt.current||!yt){_t(100);return}ch.current=dP(yt,rt.current,qe?.maxDistance)??ch.current;let Ct=dd.current;if(Ct){dd.current=null,uS(rt.current,Ct.camera),Di.current=!0,Ct.home?(di.current=Ct.home,cn&&(li.current[Ve]=Ct.home)):Ds(),kr(),Da(!1),Ia(!0),Ir.current?.invalidate();return}if(s0(rt.current)||j){Di.current=!0,Ds(),kr(),Da(!1),Ia(!0),Ir.current?.invalidate();return}ql.current=!0,(dt?dt():uh.current?Promise.resolve(!0):ec(!0)).then(tr=>{pe||(Di.current=tr!==!1,Di.current?(Ds(),kr(),Da(!1)):pe||_t(100))}).catch(()=>{Di.current=!1,pe||_t(100)}).finally(()=>{pe||(ql.current=!1)})};return _t(50),()=>{pe=!0,Te&&clearTimeout(Te)}},[Ds,li,qe?.maxDistance,ec,Ve,Dr,r,kr,dt,gn,i,cn]),bP({enabled:an,canvasAreaElement:rh,fitAttemptedRef:Di,fitInFlightRef:ql,controlsRef:rt,cameraFramingRef:Rs,nodeRefsMap:Mn,fitScene:ec});let Md=(0,k.useCallback)(A=>{let j=rt.current;if(!j)return;let Y=A.cameraState;if(Y?.position&&Y?.target){let[_t,ft,yt]=Y.position,Ct=new ri.Vector3(...Y.target);j.setPosition(_t,ft,yt,!0),j.setTarget(Ct.x,Ct.y,Ct.z,!0),Rs.current={kind:"view",target:Ct};return}let pe=pi(A),Te=pe?Mn.current[pe]:null;!pe||!Te||(j.fitToBox(Te,!0,bf).catch(()=>{}),Rs.current={kind:"object",key:pe})},[pi]);(0,k.useEffect)(()=>{jt||(Rs.current=Vu)},[jt]);let Vh=(0,k.useCallback)((A,j="canvas")=>{if(lx.current)return;let Y=xv.current;Y.dragging||performance.now()-Y.endedAt<150||(Wn(!1),Bi(),ih(null),Ls(A,j),!(kt||!Xe)&&Md(A))},[Ls,Bi,Md,kt,Xe]),{beginMoveZoom:Tx,handleMoveZoomPointerDown:JE}=kT({moveZoomTarget:er,setMoveZoomTarget:Hl,currentObjectBindingsRef:Ii,materialRefsOut:jo,rendererCaptureRef:Ir,canvasAreaRef:ci,canvasAreaElement:rh,applyBindingStyle:wd}),Px=(0,k.useCallback)(A=>{if(!Wl)return!1;let j=pi(A);if(!j)return!1;let Y=bd[j];return Y?(Tx({objectKey:j,textureKey:Y}),!0):!1},[Wl,pi,bd,Tx]),jh=(0,k.useRef)(!1),{editDecals:K2,activeDecalMove:Bs,addCenteredDecal:Z2,decalSizeFor:eR,startImageDecal:Q2,decalControlHandlers:tR}=OT({currentObjectBindings:Ge,currentObjectBindingsRef:Ii,applyObjectBindings:si,nodeRefsMap:Mn,controlsRef:rt,decalMove:S,decalDragging:Qf,setDecalDragging:mv,setDecalError:dv,setDecalControl:cv,decalRequestRef:pv,onTextureUpload:Z,currentPanelObjectId:Ql,modelUrl:Ve}),_d=Le===!0?M2:Le||null,ja=lr.product?JSON.stringify([Ve,lr.product.definition.id,lr.product.definition.revision]):null,[Uh,nR]=(0,k.useState)(null),Ns=(0,k.useMemo)(()=>lr.product&&_d&&Uh?.key===ja?{...lr.product,selections:Uh.selections}:lr.product,[lr.product,_d,Uh,ja]),rR=(0,k.useCallback)(A=>{nR(ja?{key:ja,selections:A}:null)},[ja]),tc=(0,k.useMemo)(()=>es(Ge,Ns,po(lr.model),$l),[Ge,Ns,lr.model,$l]);Ih.current=tc.objectBindings;let qn=(0,k.useMemo)(()=>Ns?{...lr,product:Ns,model:{...lr.model,activeVariants:tc.activeVariants}}:lr,[lr,Ns,tc.activeVariants]),Ax=(0,k.useMemo)(()=>Qm(tc.objectBindings,qn.styleRules),[tc.objectBindings,qn.styleRules]),[Ex,Rx]=(0,k.useState)(()=>gn?.isolation??null);bo(()=>{Rx(null)},[Ve,r]);let Ua=_a!==void 0?_a:Ex,zh=(0,k.useCallback)(A=>{_a===void 0&&Rx(A),Bo?.(A)},[_a,Bo]),fr=(0,k.useMemo)(()=>ef(Ax,Ua),[Ax,Ua]),iR=(0,k.useMemo)(()=>({bindings:fr.bindings,model:qn.model,camera:qn.camera,animations:qn.animations}),[fr.bindings,qn.model,qn.camera,qn.animations]),Vs=gw({revision:String(Is),enabled:As&&!!ae,options:ip(ae),baseUrl:W,state:{version:1,objectBindings:Ge,configuration:{modelUrl:r,modelFormat:l,tilesetUrl:i,activeModelId:Ve,models:Ot?.map(A=>({...A,objectBindings:Pa(A),sceneConfig:Pe(A)===Ve?qn:A.sceneConfig})),mergeModels:Ff,sceneConfig:qn,arScaleMode:H,isolation:Ua,backgroundColor:ie,shadows:tt}},getSources:NE});mx.current=Vs.show;let no=(0,k.useMemo)(()=>fr.setAside.size>0?Ru(Ge,Ua):null,[fr,Ge,Ua]),oR=(0,k.useCallback)(A=>{let j=pi(A),Y=j!==null&&no?.size===1&&no.has(j);zh(Y?null:{...Ua,target:A.id})},[zh,Ua,no]),{sourceOf:Wo}=fr,aR=(0,k.useMemo)(()=>to?YC(Ge,fr):[],[to,Ge,fr]),Fh=(0,k.useCallback)(A=>{let j=Wo(A);Vh(j)},[Vh,Wo]),Gh=(0,k.useCallback)(A=>gx(A&&Wo(A)),[gx,Wo]),Hh=(0,k.useCallback)((A,j)=>{let Y=Wo(A);return w?.({binding:Y,...j})===!0?(jh.current=!0,!0):Px(Y)},[w,Px,Wo]),Wh=(0,k.useMemo)(()=>E?(A,j)=>E({binding:Wo(A),...j}):void 0,[E,Wo]),Ox=(0,k.useCallback)(A=>{Ls(A,"panel"),!kt&&Md(A)},[Ls,Md,kt]);(0,k.useEffect)(()=>{kr()},[kr,Ge,SA]);let Dx=(0,k.useCallback)((A,j)=>{pP(j,ch.current),$?.(mi(A,j)),kr()},[kr,$]),sR=(0,k.useCallback)(A=>{Rv.current=new Set(A.map(j=>j.name)),kA(j=>j+1),xd(A.map(j=>j.name)),s?.(A)},[xd,s]),lR=(0,k.useCallback)(A=>{Oa.current=A,Ir.current?.invalidate()},[]),js=(0,k.useCallback)(A=>{bt.current=A,dx(A),Uv(cP(A));let j=Og(A);VA(j>Ic?j:null),jv(!1),bh(null),j>Ic&&zv("preparingLargeModel"),Ov(!0),Dv(Kd(A)),dh(!1),ph(null),Nv(!1),i||(s&&s(J1(A)),xd(aT(A),oT(A))),C?.(A),T?.(RC(A)),kr()},[xd,kr,T,s,C,dx,i]),cR=(0,k.useCallback)(()=>Oa.current??bt.current,[]),{background:qh}=Ye,uR=qh.enabled&&qh.type==="color"&&new ri.Color(qh.color).getHSL({h:0,s:0,l:0}).l>.5?"#000000":"#ffffff",nc=en?bt.current:null,Ix=!!I;(0,k.useEffect)(()=>{if(!Ix)return;if(Yl){if(ud.current?.url!==r||ud.current.error!==ka)return;let j=ka&&typeof ka=="object"?rl(ka):void 0;lh.current?.(_w({...j,name:j?.name??rs(r),format:j?.format??l??Oc(r).format}));return}if(!nc||bt.current!==nc)return;let A=Oc(r);lh.current?.(up(nc,{scope:i?"resident-tiles":"asset",source:{...rl(nc),format:i?"3d-tiles":l??A.format,name:A.entryPath??rs(r)}}))},[Ix,nc,r,l,i,Vv,Yl,ka]);let Xh=(0,k.useCallback)(A=>{Da(!1),Ia(!0),dh(!0),ph(A),ud.current={url:Ev.current,error:A},N?.(A)},[N]),{reportError:kx,clearError:Lx}=Iw({enabled:cn,activeUrl:Ve,models:Ot,errorsRef:id,activeFailed:Yl,activeError:ka,onActiveError:Xh,onExtraError:zy}),dR=(0,k.useCallback)((A,j)=>{!cn||!rd.current?.some(Y=>Pe(Y)===A)||(delete Ea.current[A],delete li.current[A],kx(A,j))},[cn,kx,li]),pR=(0,k.useCallback)((A,j)=>{!cn||!rd.current?.some(Y=>Pe(Y)===A)||(Lx(A),Ea.current[A]=j,A===Ve&&(od.current!==A||bt.current!==j)&&(od.current=A,js(j)),$u?.(A,j))},[cn,Ve,r,js,$u,Lx]);(0,k.useEffect)(()=>{if(!cn||id.current.has(Ve))return;let A=Ea.current[Ve];A&&(od.current===Ve&&bt.current===A||(od.current=Ve,js(A)))},[cn,Ve,r,en,js]);let Bx=(0,k.useCallback)((A,j)=>{fh.current.add(A),NA(Y=>Y+1),Fy?.(A,j)},[Fy]),Nx=cn&&Ot?Ot.find(A=>Pe(A)===Ve)?.mergeModels:Ff,Vx=(0,k.useMemo)(()=>new Set((Nx??[]).map(A=>A.url)),[Nx]),jx=(0,k.useCallback)(A=>{A.lengthComputable&&A.total>0&&bh(A.loaded/A.total*100),R?.(A)},[R]),Ux=(0,k.useCallback)((A,j,Y)=>{if(!nt)return;let pe={...Ye,lighting:{...Ye.lighting,lights:Ye.lighting.lights.map(Te=>Te.id===A?{...Te,position:j,...Y?{rotation:Y}:{}}:Te)}};nt(pe)},[Ye,nt]);(0,k.useEffect)(()=>{let A=bt.current;if(!en||!A){Os(!1);return}if(Array.from(Vx).some(ft=>!fh.current.has(ft))){Os(!1);return}let Y=Object.entries(Ge).filter(([,ft])=>!ft.removed);if(Y.length===0){Os(!1);return}let pe=i?Rv.current:(()=>{let ft=kv.current;for(let yt of Object.keys(gr(A).nodesById))ft.add(yt);return ft})();if(!pe||pe.size===0){Os(!1);return}let Te=Y.map(([ft,yt])=>yt.modelObjectId??ft).filter(ft=>!pe.has(ft));Os(Te.length>0),BA(Te.length);let _t=Te.join(`
3792
+ `);if(Te.length>0&&_t!==mh.current){let ft=Te.slice(0,10).map(Ct=>`"${Ct}"`).join(", "),yt=Te.length>10?` and ${Te.length-10} more`:"";console.warn(`[react-immersive] ${Te.length} object binding(s) point at nodes this model doesn't have, so they can't be selected: ${ft}${yt}. Each binding's modelObjectId (or its key) must match a node name; log onObjectCatalog to see this model's names.`)}mh.current=_t},[en,Ge,IA,i,Vx,Vv]),(0,k.useEffect)(()=>{if(G||Dr)return;let A=[];for(let[Y,pe]of Object.entries(Ge))for(let Te of pe.actions??[])Vc.includes(Te.id)||A.push(`"${Te.id}" on "${pe.label??Y}"`);let j=A.join(`
3793
+ `);if(A.length>0&&j!==Lv.current){let Y=A.slice(0,10).join(", "),pe=A.length>10?` and ${A.length-10} more`:"";console.warn(`[react-immersive] ${A.length} action button(s) do nothing because ModelViewer has no onAction handler: ${Y}${pe}. ModelViewer itself handles ${Vc.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}Lv.current=j},[Ge,Dr,G]);let $h=(0,k.useCallback)(async()=>{if(rt.current&&di.current&&qa(rt.current,di.current),dt){await dt();return}let A=rt.current;if(!A)return;let j=di.current;try{if(j){Rs.current=Vu;let Y=Od(j,A);await Ay(A,()=>A.setLookAt(Y[0],Y[1],Y[2],j.target[0],j.target[1],j.target[2],!0))}else await ec()}catch(Y){console.error("Reset camera error:",Y)}},[dt,ec]),J2=(0,k.useCallback)(()=>{zo(!1),Wn(!0)},[]),eB=(0,k.useCallback)(()=>{Wn(!1)},[]),mR=(0,k.useCallback)(()=>{Wn(!1),zo(!0),setTimeout(()=>{$h()},100)},[$h]),fR=(0,k.useCallback)((A,j)=>{Dx(A,j)},[Dx]),hR=(0,k.useCallback)(A=>{if(lx.current)return;if(jh.current){jh.current=!1;return}if(A.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let Y=ci.current,pe=rt.current,Te=pe?.camera,_t=bt.current;if(!Y||!pe||!Te||!_t||!Yu&&!pe.enabled)return;let ft=Y.getBoundingClientRect(),yt=(A.clientX-ft.left)/ft.width*2-1,Ct=-((A.clientY-ft.top)/ft.height)*2+1,un=new ri.Raycaster;un.setFromCamera(new ri.Vector2(yt,Ct),Te);let tr=un.intersectObject(_t,!0);if(tr.length===0)return;if(!Yu&&D){let Ni=tr[0].point,hr=null;for(let[sc,lc]of Object.entries(Ii.current)){if(!lc.decals?.length)continue;let io=Mn.current[sc];if(!io)continue;let oo=io.worldToLocal(Ni.clone());for(let qo of lc.decals){if(!qo.position)continue;let cc=oo.distanceTo(new ri.Vector3(qo.position[0],qo.position[1],qo.position[2]));cc<=qo.size/2&&(!hr||cc<hr.distance)&&(hr={binding:lc,id:qo.id,distance:cc})}}if(hr){Hl(null),D(hr.binding,hr.id);return}}if(!Yu){let{x:Ni,y:hr,z:sc}=tr[0].point;pe.setOrbitPoint(Ni,hr,sc);return}let ro=tr[0],ic=ro.point,oc=_t.worldToLocal(ro.point.clone()),ac=[0,0,1];if(ro.face){let Ni=ro.face.normal.clone().transformDirection(ro.object.matrixWorld).normalize();ac=[Ni.x,Ni.y,Ni.z]}nx({worldPosition:[ic.x,ic.y,ic.z],localPosition:[oc.x,oc.y,oc.z],worldNormal:ac,anchor:_T(ro),screenX:A.clientX-ft.left,screenY:A.clientY-ft.top}),_h({title:"",description:""})},[Yu,D]);if((0,k.useEffect)(()=>{Gf.current={snapshot:()=>{let A=rt.current,j=dd.current;return{model:ai,camera:Di.current&&A?Hs(A):j?.camera,home:di.current??j?.home,lightEdits:qf,variantEdit:Zu,sectionEdit:Qu,measurementEdits:Ju,isolation:Ex,objectBindings:Ky||cn?void 0:Ge,modelBindingEdits:Ky?void 0:lA,explodeFactor:Is,cameraControllerType:bv,uvCheckerOverride:fv,annotationCategories:nE}},captureFrame:()=>{let A=Ir.current;return!A||t.status!=="ready"||!en||!Uo?Promise.resolve(null):eS(A)}}}),(0,k.useEffect)(()=>()=>{Gf.current=null},[Gf]),Ku.status==="checking"){let A=qy??Hy;return A?(0,J.jsx)("div",{className:"ri-viewer ri-viewerPlaceholder",style:{background:gv},children:(0,J.jsx)(Mp,{src:A})}):(0,J.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:!p&&(0,J.jsx)(pp,{title:Hn("verifyingLicense"),message:Hn("checkingYourLicenseKey")})})}if(Ku.status==="invalid")return(0,J.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,J.jsx)(pp,{tone:"error",title:Hn("invalidLicense"),message:Ku.isLocalDomain?Ku.reason??Hn("licenseHasBeenRevokedOrHasExpired"):Hn("failedToLoadPleaseContactTheSiteAdministrator")})});let{materialTextureUrl:zx,materialTargetTakesImage:Fx,materialTextureOffset:Gx,materialTextureRotationDegrees:Hx,isMaterialTexturePositioning:Wx,materialTextureOnOffsetChange:qx,materialTextureOnRotationChange:Xx,materialTextureOnEndPositioning:$x}=zT({materialPopup:Jl,resolveObjectKey:Ho,currentObjectBindings:Ge,nodeRefsMap:Mn,moveZoomTarget:er,texturePositioningEnabled:$E,texturePositioningOverrides:YE,setMaterialTextureOffset:KE,setMaterialTextureRotation:ZE,endMaterialTexturePositioning:QE}),gR=ci.current?.offsetWidth??600,bR=ci.current?.offsetHeight??400,yR=350,vR=290,xR=La?Math.min(La.screenX+12,gR-yR-8):0,wR=La?Math.min(La.screenY,bR-vR-8):0,SR=Ae&&!!r&&!Yl&&!en,Yx=As&&(fd&&(Xv||$v)||Yv||!!ae||!!md),Us=Yx&&!Dr,rc=Zt&&!Dr,Yh=Ma&&!Dr,Kx=(Us?1:0)+(sn?1:0),za=A=>(Dr?50:16)+A*42+(rc&&A>Kx?Math.max(0,VE-34):0),Kh=Yx?(0,J.jsx)(nP,{configuredHandoff:!!ae,top:za(0),xrStore:fd,arSupported:Xv,vrSupported:$v,quickLookSupported:Yv,mobileHandoffUrl:md,mobileHandoffOpen:ae?Vs.open:Kv,onQuickLook:ae?Vs.show:ZA,onOpenMobileHandoff:ae?Vs.show:YA}):null;return(0,J.jsxs)("div",{className:"ri-viewer",ref:ad.rootRef,style:{background:gv},"data-reduced-motion":Vo?"":void 0,children:[(0,J.jsx)("div",{className:"ri-visuallyHidden",role:"status","aria-atomic":"true",children:GE}),t.status!=="ready"&&(0,J.jsx)(jT,{rebuilding:t.status==="rebuilding",onReload:t.reload}),(0,J.jsxs)("div",{className:"ri-viewerLeft",ref:Tv,inert:t.status!=="ready",children:[De?De({isOpen:bx,selectedObject:Va,currentAction:Pv,onClose:Bh,onAction:Sd}):(0,J.jsx)(py,{translateDefaultActions:Wf,isOpen:bx,selectedObject:Va,currentAction:Pv,onClose:Bh,onAction:Sd,renderActionExtra:A=>{if(A==="change-color"&&ui)return(0,J.jsx)(uy,{inline:!0,colorPicker:ui,onClose:Bi,itemMaterials:Ra,setItemMaterials:ld});if((A==="change-light-color"||A==="set-brightness")&&Kf?.kind===A&&Kf.objectId===Ql)return(0,J.jsx)(kS,{control:Kf,lights:Ye.lighting.lights,readObjectGlow:Sx,applyGlow:Mx,glowMemoryRef:wx,applyLightPatches:sv,onControlChange:lv});if((A==="add-text"||A==="add-image")&&Zf?.kind===A&&Zf.objectId===Ql){let j=Zf,Y=Ho(j.objectId);if(!Y)return null;let pe=A==="add-image";return(0,J.jsx)(VS,{kind:A,decals:(Ge[Y]?.decals??[]).filter(Te=>!!Te.image===pe),activeId:j.activeId,error:uv?Hn.message(uv):null,moving:Qf?.objectKey===Y&&Qf.decalId===j.activeId,defaultSize:eR(Y),...tR(j,Y)})}return A==="change-material"&&Jl?(0,J.jsx)(dy,{inline:!0,triggerFileUpload:_x,materialPopup:Jl,textureUrl:zx,clearTexture:Cx,canPlaceImage:Fx,offset:Gx,rotationDegrees:Hx,onOffsetChange:qx,onRotationChange:Xx,isPositioning:Wx,onEndPositioning:$x}):null}}),(0,J.jsxs)("div",{className:`ri-canvasArea ${mr?"ri-canvasArea--measuring":""} ${Uo?"":"ri-canvasArea--positioning"} ${Lt||Mt?"ri-canvasArea--moveMode":""}`,ref:TA,tabIndex:Sn?0:void 0,role:Sn?"group":void 0,"aria-label":Sn?Hn("cameraKeyboardHelp"):void 0,onDoubleClick:hR,onPointerDown:A=>{if(Sn&&ci.current?.focus({preventScroll:!0}),er){JE(A);return}CE(A)},onClick:er?void 0:TE,onPointerMove:xE,onPointerLeave:ux,onWheel:ux,children:[en&&!mr&&t.status==="ready"?(0,J.jsx)(QC,{objects:aR,selectedKey:jt,onHighlight:oh,onSelect:A=>Vh(A,"keyboard"),onClearSelection:()=>{Bh(),M?.()}}):null,Wl&&!i&&(er||zE)&&(0,J.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:er?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:Hn(er?"texturePositioningHint":"texturePositioningStartHint")}),Iv&&!Bv&&(0,J.jsx)(LT,{count:LA,onDismiss:()=>Nv(!0)}),hh!==null&&!jA&&(0,J.jsx)(BT,{triangles:hh,offset:Iv&&!Bv,onDismiss:()=>jv(!0)}),qn.model.renderer==="uv-checker"&&gh.missing>0&&(0,J.jsx)(NT,{missing:gh.missing,total:gh.total}),(0,J.jsx)("input",{ref:Mv,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:XE}),(0,J.jsx)(ll,{onError:t.fail,children:ks?(0,J.jsxs)(ab,{backend:ks,onRendererCreated:t.onRendererCreated,suspended:t.status!=="ready",paused:aA&&!Ft,camera:he,backgroundColor:ie,shadows:tt&&Ye.shadows.enabled,sceneConfig:qn,selectedObjectRef:Na,selectedObjectRefs:Lh,selectedObjectOutlineColor:y,hoveredObjectRef:FE,highlightOnHover:ke,renderMode:Zn,maxDpr:Qn,reduceGpuLoad:yA,runtimeStats:L?{onStats:L,intervalMs:B,profile:Ri,streamingRef:ah}:void 0,xrStore:fd,rendererCaptureRef:Ir,preserveDrawingBuffer:Ei,children:[(0,J.jsx)(cb,{lightingConfig:Ye.lighting,shadowConfig:Ye.shadows,shadowsEnabled:tt,environmentRotation:Ye.environment.rotation,environmentConfig:Ye.environment,modelBounds:wE,objectBindings:Ge,nodeRefs:Mn}),pA&&Ye.lighting.lights.map(A=>!A.visible||A.type==="none"||A.type==="hemisphere"||A.attachment?null:(0,J.jsx)(vT,{light:A,position:A.position,rotation:A.rotation,color:A.color,intensity:A.intensity,visible:A.visible,onPositionChange:j=>Ux(A.id,j,A.rotation),onRotationChange:j=>Ux(A.id,A.position,j),onDraggingChange:vv},A.id)),(0,J.jsx)(ly,{setAside:fr.setAside,nodeRefs:Mn}),!Fo&&(0,J.jsx)(cy,{section:Ye.section??Nr,box:yd,modelRef:bt,showHandle:Ma,onChange:iv,onDraggingChange:gA}),(0,J.jsx)(lb,{controlsRef:rt,onCameraChange:fR,cameraLimits:qe,controllerType:Aa,onPointerLockExit:()=>nd("orbit"),reducedMotion:Vo}),(0,J.jsx)(Ty,{enabled:Ft||mr||Bs||Vo||Aa==="pointerLock"?!1:Vl??Ye.model.autoRotate??!1,speed:rA??Ye.model.autoRotateSpeed??1,controlsRef:rt}),Fn&&!Fo&&!Ft&&(0,J.jsx)(Fw,{getTarget:cR,revision:`${Ve}:${en}`,lineColor:uR}),Nl&&!Ft&&(0,J.jsx)(Hw,{onUpdate:()=>{rt.current?.update(0),Ir.current?.invalidate()}}),(Lt||Mt)&&!Fo&&!vd&&Na&&jt&&(0,J.jsx)(Sy,{node:Na,space:ln,moveEnabled:Lt,gizmoTool:Vt,scaleEnabled:Mt,onTransformChange:HE,transform:Ge[jt]?.transform,onDraggingChange:A=>{wv(A),Ba&&_?.(Ba,A)}},jt),(Lt||Mt)&&!Fo&&vd&&(0,J.jsx)(Cy,{entries:vd,referenceNode:Na,space:ln,moveEnabled:Lt,gizmoTool:Vt,scaleEnabled:Mt,onTransformChange:WE,onDraggingChange:A=>{wv(A);for(let j of vd){let Y=Ge[j.key];Y&&_?.(Y,A)}}}),Bs&&(0,J.jsx)(nM,{target:Bs,nodes:Mn,controls:rt}),(()=>{let A=cn&&Ot?(0,J.jsxs)(J.Fragment,{children:[Ot.map(j=>(0,J.jsx)(A_,{entry:{...j,objectBindings:Pe(j)===Ve?fr.bindings:Pa(j)},isActive:Pe(j)===Ve,pulses:fr.pulses,decoderConfig:td,itemMaterials:Ra,sceneConfig:qn,zoomOnSelected:Xe,highlightOnHover:ke,explodeFactor:Is,suspendBindingTransforms:Gl,onLoadProgress:jx,onAnimationsReady:Qv,onModelAnimationsReady:ye,onLoadError:dR,onModelLoaded:pR,selectedItem:jt,panelHoveredItem:h??cd,onItemClick:Fh,onItemDoubleClick:Hh,onItemContextMenu:Wh,onItemHover:Gh,nodeRefsOut:Mn,onNodeRefsChange:nh,materialRefsOut:Pe(j)===Ve?jo:_A(Pe(j)),onMergeModelLoaded:Bx,onMergeModelError:Gy},Pe(j))),(0,J.jsx)(zm,{anchorSceneRef:bt,annotations:$y?rx:[],sceneConfig:Ye,activeAnnotation:gd,popupRef:sd,canvasRootRef:ci,worldPositionsRef:th,modelLoaded:en,onAnnotationClick:ox,onCloseAnnotation:hd,hideCloseButton:Zl,showAnnotationOnHover:Se}),(0,J.jsx)(hf,{annotation:ix,enabled:Zl&&!Ft,controlsRef:rt,offsetRef:eh}),Ft?(0,J.jsx)(sl,{controlsRef:rt,sceneRef:bt,config:Ft.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:Ft.onStarted,onFinished:Ft.onFinished,onProgress:qv},"video-export"):ki&&(0,J.jsx)(sl,{controlsRef:rt,sceneRef:bt,config:ki,playing:Kl&&!mr,resetOnPlay:Hv,onFinished:()=>{Wn(!1),zo(!1)},onUserInteract:()=>{Wn(!1)}},"cinematic-preview"),Zt&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(Xm,{items:ed,sceneRef:bt,modelId:$f,tilesetUrl:i,settings:Ul,legacyUnit:No,revision:Ah,onResults:px}),(0,J.jsx)(Pl,{points:Eh,unit:zl.displayUnit,scale:zl.factor,box:yd,showDimensions:Dh,tool:Rh,areaClosed:Oh,snapPreview:mr?cx:null})]})]}):(0,J.jsx)(Hi,{onLoadError:Xh,children:(0,J.jsxs)(k.Suspense,{fallback:null,children:[i?(0,J.jsx)(Zb,{diagnosticsRef:L?ah:void 0,loadingRef:sh,url:i,rotation:qn.model.rotation,errorTarget:o,cacheSize:a,decoderConfig:td,objectBindings:fr.bindings,itemMaterials:Ra,sceneConfig:qn,selectedItem:jt,panelHoveredItem:h??cd,highlightOnHover:ke,onItemClick:Fh,onItemHover:Gh,onItemDoubleClick:Hh,onItemContextMenu:Wh,onObjectCatalog:sR,onTilesetBounds:lR,onModelLoaded:js,onLoadError:Xh,nodeRefsOut:Mn,onNodeRefsChange:nh,materialRefsOut:jo,explodeFactor:Is,suspendBindingTransforms:Gl}):(0,J.jsx)(eu,{url:r,modelFormat:l,objectBindings:fr.bindings,selectedItem:jt,itemMaterials:Ra,onItemClick:Fh,onItemDoubleClick:Hh,onItemContextMenu:Wh,onItemHover:Gh,onModelLoaded:js,onAnimationsReady:Qv,nodeRefsOut:Mn,onNodeRefsChange:nh,materialRefsOut:jo,panelHoveredItem:h??cd,sceneConfig:qn,zoomOnSelected:Xe,highlightOnHover:ke,decoderConfig:td,onLoadProgress:jx,explodeFactor:Is,suspendBindingTransforms:Gl,originalNodePoses:oA,mergeModels:Ff,onMergeModelLoaded:Bx,onMergeModelError:Gy,pulses:fr.pulses}),iA?.map(j=>(0,J.jsx)(P_,{url:j,decoderConfig:td,onLoadError:zy,onModelLoaded:$u?Y=>$u(j,Y):void 0},j)),(0,J.jsx)(zm,{anchorSceneRef:bt,annotations:$y?rx:[],sceneConfig:Ye,activeAnnotation:gd,popupRef:sd,canvasRootRef:ci,worldPositionsRef:th,modelLoaded:en,onAnnotationClick:ox,onCloseAnnotation:hd,hideCloseButton:Zl,showAnnotationOnHover:Se}),(0,J.jsx)(hf,{annotation:ix,enabled:Zl&&!Ft,controlsRef:rt,offsetRef:eh}),Ft?(0,J.jsx)(sl,{controlsRef:rt,sceneRef:bt,config:Ft.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:Ft.onStarted,onFinished:Ft.onFinished,onProgress:qv},"video-export"):ki&&(0,J.jsx)(sl,{controlsRef:rt,sceneRef:bt,config:ki,playing:Kl&&!mr,resetOnPlay:Hv,onFinished:()=>{Wn(!1),zo(!1)},onUserInteract:()=>{Wn(!1)}},"cinematic-preview"),Zt&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(Xm,{items:ed,sceneRef:bt,modelId:$f,tilesetUrl:i,settings:Ul,legacyUnit:No,revision:Ah,onResults:px}),(0,J.jsx)(Pl,{points:Eh,unit:zl.displayUnit,scale:zl.factor,box:yd,showDimensions:Dh,tool:Rh,areaClosed:Oh,snapPreview:mr?cx:null})]})]})},i??r);return fd?(0,J.jsx)(fC,{ref:XA,box:yd,scaleMode:H,onARStateChange:QA,children:A}):A})(),(0,J.jsx)(b0,{controller:Li,source:bt,controls:rt,animations:Sh,ready:en&&Uo,sequences:Ye.sequences,autoPlay:se&&!Vo,authoredRevision:iR}),f&&(0,J.jsx)(r0,{source:bt,highlights:f}),Gn&&(0,J.jsx)(k.Suspense,{fallback:null,children:Gn})]}):null}),(0,J.jsx)(Mp,{src:qy??Hy,hidden:en&&Uo}),Jn&&(0,J.jsx)("div",{className:"ri-overlay",children:Jn}),Ae&&r&&Yl&&(0,J.jsx)(VT,{failure:SS(ka,i||r,i?void 0:l,e),source:i||r}),(0,J.jsx)(nT,{visible:SR,message:Hn(UA,{millions:Math.round((hh??0)/1e6)}),progress:FA??void 0}),Dr?Zy&&Kh&&(0,yP.createPortal)(Kh,Zy):Kh,$A,te&&!Dr&&!wh&&!Ft&&!mr&&Jv.length>0&&(0,J.jsx)(_0,{controls:Li,sequences:Jv}),Vs.open&&(0,J.jsx)(xw,{handoff:Vs,filename:ve,onQuickLook:()=>n.requestARLaunch("quick-look")}),!ae&&Kv&&md&&(0,J.jsx)(rP,{url:md,onClose:KA}),sn&&(0,J.jsx)(iP,{top:za(Us?1:0),active:Jf,onToggle:()=>hv(A=>!(A??Fl))}),Zt&&(0,J.jsx)(Jb,{top:za(Kx),active:mr,disabled:!!Ft,tool:Rh,snap:yE,pointCount:Eh.length,areaClosed:Oh,error:fE,showDimensions:Dh,onToggle:()=>{Wn(!1),mr||dA?.(),ME()},onTool:hE,onSnap:vE,onUndo:gE,onClear:SE,onFinishArea:bE,onDimensions:_E,onHeight:jE,settings:Ul,displayUnit:zl.displayUnit,onSettings:rv,items:ed,results:OE,onItems:nv,onSave:PE,canSave:AE,canCalibrate:EE,onCalibrate:RE,onExportJson:DE,onExportCsv:IE,onImport:kE,readOnly:Bl!==void 0&&!Ca,settingsReadOnly:qu!==void 0&&!Ta}),eo&&(0,J.jsx)(oP,{top:za((Us?1:0)+(sn?1:0)+(rc?1:0)),open:GA,factor:Is,onToggleOpen:()=>Gv(A=>!A),onFactorChange:Fv}),Yh&&!Fo&&(0,J.jsx)(aP,{top:za((Us?1:0)+(sn?1:0)+(rc?1:0)+(eo?1:0)),section:pE,onChange:iv}),ki&&(0,J.jsx)(sP,{top:za((Us?1:0)+(sn?1:0)+(rc?1:0)+(eo?1:0)+(Yh?1:0)),playing:Kl,disabled:!!Ft||mr,onPlay:()=>{zo(!1),Wn(!0)},onPause:()=>Wn(!1),onStop:mR}),Ft&&(0,J.jsx)(lP,{progress:WA,onCancel:xh}),!Dr&&cn&&Ot&&Ot.length>1&&(Xy||Hf)&&(0,J.jsx)("div",{className:"ri-modelSwitcher",style:{top:`${za((Us?1:0)+(sn?1:0)+(rc?1:0)+(eo?1:0)+(Yh?1:0)+(ki?1:0))}px`},role:"group","aria-label":"Switch model",children:Ot.map(A=>(0,J.jsx)("button",{type:"button",className:`ri-modelSwitcherButton ${Pe(A)===Ve?"ri-modelSwitcherButton--active":""}`,onClick:()=>Hf?Hf(Pe(A)):Xy?.(A.url),title:`Switch to ${A.label||yf(A.url)}`,"aria-pressed":Pe(A)===Ve,children:A.label||yf(A.url)},Pe(A)))}),(Ch||ax||Bs||Ps&&no)&&(0,J.jsxs)("div",{className:`ri-bottomStack ${sx?"ri-bottomStack--aboveButtons":""} ${Ch?"ri-bottomStack--annotationFilters":""}`,children:[Ch&&(0,J.jsx)(FT,{categories:iE,selected:rE,disabled:!!Ft,onChange:oE}),Bs&&(0,J.jsx)(GT,{onCancel:Bs.onCancel}),Ps&&no&&(0,J.jsx)(HT,{label:no.size===1?Hn("isolatedObject",{name:(()=>{let[A]=no;return Ge[A]?.label??A})()}):Hn("isolatedObjects",{count:no.size}),onShowAll:()=>zh(null)}),ax&&(0,J.jsx)(WT,{groups:$l,activeVariants:Yf,onSelect:bA})]}),sx&&(0,J.jsxs)("div",{className:"ri-buttonContainer",children:[(0,J.jsx)("div",{className:"ri-tourControls",children:ee&&Th.length>0&&(0,J.jsx)(qT,{count:Th.length,active:Zl,index:eE,navigating:tE,onStart:aE,onPrevious:sE,onNext:lE,onStop:cE})}),(0,J.jsxs)("div",{className:"mv-rightControls",children:[Ne&&ad.supported&&(0,J.jsx)(XT,{fullscreen:ad,disabled:!!Ft}),de&&(0,J.jsx)("button",{className:"mv-resetButton",onClick:$h,disabled:!!Ft,title:Hn("resetCameraView"),children:(0,J.jsx)(vP.RotateCcw,{})}),(0,J.jsx)($T,{open:xA,current:Aa,disabled:!!Ft,onSelect:nd,onToggle:()=>yv(A=>!A)}),Je&&(0,J.jsx)(YT,{menu:UE,recording:!!Ft,hasScene:!!bt.current,canCaptureImage:Ei||ks==="webgpu",canRecord:en&&Uo&&!pd,hasCinematic:!!ki,hasMultipleModels:!!(Ot&&Ot.length>=2)})]})]}),La&&(0,J.jsx)(KT,{x:xR,y:wR,form:JA,setForm:_h,onOk:uE,onCancel:dE})]}),De&&ui&&(0,J.jsx)(uy,{colorPicker:ui,onClose:Bi,itemMaterials:Ra,setItemMaterials:ld}),De&&Jl&&(0,J.jsx)(dy,{triggerFileUpload:_x,materialPopup:Jl,textureUrl:zx,clearTexture:Cx,canPlaceImage:Fx,offset:Gx,rotationDegrees:Hx,onOffsetChange:qx,onRotationChange:Xx,isPositioning:Wx,onEndPositioning:$x})]}),_d&&Ns&&ja?(0,J.jsx)(kC,{product:lr.product,options:_d,onSelectionsChange:rR,top:be?56:12},ja):null,be&&(0,J.jsx)("div",{className:"ri-viewerRight",inert:t.status!=="ready",children:Fe?Fe({objectBindings:Ge,onAction:Sd,onFocus:Ox,onHover:oh}):(0,J.jsx)(my,{objectBindings:Ge,onAction:Sd,onFocus:Ox,onHover:oh,isolatedKeys:no,onIsolate:Ps?oR:void 0})}),mt&&(0,J.jsx)(EC,{controlsRef:rt,enabled:t.status==="ready",opacity:It,moveSensitivity:fe,position:gt})]})}var xP={licenseValidationUrl:!0,gizmoTool:!0,showFloorGrid:!0,onObjectEditLeaseChange:!0,onSelectionClear:!0,onSceneLoaded:!0,onTexturePositioningChange:!0,endTexturePositioningRef:!0};function wP(e,t){let n={...e};for(let r of Object.keys(t))delete n[r];return n}var MP=require("react"),C2={"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"},Ry=new Set,T2=1e3;function SP(e){return getComputedStyle(document.documentElement).getPropertyValue(`--ri-styles-${e}`).trim()!==""}function _P(e,t){(0,MP.useEffect)(()=>{if(process.env.NODE_ENV==="production"||Ry.has(e)||SP(e))return;let n,r=()=>{n=setTimeout(()=>{Ry.has(e)||SP(e)||(Ry.add(e),console.warn(`[react-immersive] ${t}'s styles aren't loaded, so it renders unstyled. Import them once, in your app's root:
3746
3794
 
3747
- import "${LL[e]}";`))},IL)};return document.readyState==="complete"?(r(),()=>clearTimeout(n)):(window.addEventListener("load",r,{once:!0}),()=>{window.removeEventListener("load",r),clearTimeout(n)})},[e,t])}var lT=require("react/jsx-runtime");function ss(e){return sT("model-viewer","ModelViewer"),(0,lT.jsx)(jb,{...iT(e,rT)})}var lu=require("react"),Oe=require("react/jsx-runtime");function Rm(e){return e===void 0?"Not set":JSON.stringify(e)}function cT({report:e,selected:t,onSelect:n,onClear:r,matchBy:i,onMatchByChange:o,showOutlines:a,onShowOutlinesChange:s}){let[l,c]=(0,lu.useState)(!0),[d,p]=(0,lu.useState)(""),[u,f]=(0,lu.useState)("changes"),[m,v]=(0,lu.useState)("all"),g=e.objects.filter(y=>(u==="all"||(u==="changes"?y.status!=="unchanged":y.status===u))&&(m==="all"||y.changes.some(w=>w.category===m))&&`${y.label} ${y.identity}`.toLowerCase().includes(d.toLowerCase())),b=e.counts.added+e.counts.removed+e.counts.modified,h=()=>{let y=URL.createObjectURL(new Blob([JSON.stringify(e,null,2)],{type:"application/json"})),w=document.createElement("a");w.href=y,w.download="configuration-comparison.json",w.click(),setTimeout(()=>URL.revokeObjectURL(y),1e3)};return(0,Oe.jsxs)("aside",{className:"ri-semanticPanel","aria-label":"Configuration comparison",onPointerDown:y=>y.stopPropagation(),children:[(0,Oe.jsxs)("button",{className:"ri-semanticPanel__heading",type:"button","aria-expanded":l,onClick:()=>c(!l),children:[l?"\u25BE":"\u25B8"," Changes (",b,")"," ",(0,Oe.jsxs)("span",{children:[e.sceneChanges.length," scene \xB7 ",e.counts.ambiguous," ","unmatched"]})]}),l&&(0,Oe.jsxs)("div",{className:"ri-semanticPanel__body",children:[(0,Oe.jsxs)("div",{className:"ri-semanticPanel__counts",children:[(0,Oe.jsxs)("span",{"data-status":"added",children:["+",e.counts.added," added"]}),(0,Oe.jsxs)("span",{"data-status":"removed",children:["\u2212",e.counts.removed," removed"]}),(0,Oe.jsxs)("span",{"data-status":"modified",children:[e.counts.modified," modified"]})]}),(0,Oe.jsxs)("label",{className:"ri-semanticPanel__outlineToggle",children:[(0,Oe.jsx)("input",{type:"checkbox",checked:a,onChange:y=>s(y.target.checked)}),"Show outlines"]}),o&&(0,Oe.jsxs)("details",{children:[(0,Oe.jsx)("summary",{children:"Object matching"}),(0,Oe.jsxs)("label",{children:["Match objects by",(0,Oe.jsxs)("select",{"aria-label":"Match objects by",value:typeof i=="object"?"metadata":i??"modelObjectId",onChange:y=>o(y.target.value==="metadata"?{metadataKey:"partId"}:y.target.value),children:[(0,Oe.jsx)("option",{value:"modelObjectId",children:"Model object ID"}),(0,Oe.jsx)("option",{value:"id",children:"Binding ID"}),(0,Oe.jsx)("option",{value:"metadata",children:"Metadata value"})]})]}),typeof i=="object"&&(0,Oe.jsxs)("label",{children:["Metadata key",(0,Oe.jsx)("input",{"aria-label":"Comparison metadata key",value:i.metadataKey,onChange:y=>o({metadataKey:y.target.value})})]})]}),(0,Oe.jsx)("input",{"aria-label":"Search comparison",placeholder:"Search objects\u2026",value:d,onChange:y=>p(y.target.value)}),(0,Oe.jsxs)("div",{className:"ri-semanticPanel__filters",children:[(0,Oe.jsx)("select",{"aria-label":"Filter comparison status",value:u,onChange:y=>f(y.target.value),children:["changes","all","added","removed","modified","unchanged","ambiguous"].map(y=>(0,Oe.jsx)("option",{children:y},y))}),(0,Oe.jsx)("select",{"aria-label":"Filter change category",value:m,onChange:y=>v(y.target.value),children:["all","identity","appearance","transform","visibility","data","behavior"].map(y=>(0,Oe.jsx)("option",{children:y},y))})]}),(0,Oe.jsxs)("div",{className:"ri-semanticPanel__rows",children:[g.map(y=>(0,Oe.jsxs)("div",{className:"ri-semanticPanel__row","data-status":y.status,children:[(0,Oe.jsxs)("button",{type:"button","aria-pressed":t===y.id,onClick:()=>n(y),children:[(0,Oe.jsx)("span",{children:y.label}),(0,Oe.jsx)("small",{children:y.status})]}),t===y.id&&(0,Oe.jsxs)("div",{className:"ri-semanticPanel__details",children:[y.message&&(0,Oe.jsx)("p",{children:y.message}),y.changes.map(w=>(0,Oe.jsxs)("div",{children:[(0,Oe.jsx)("strong",{children:w.path}),(0,Oe.jsx)("del",{children:Rm(w.before)}),(0,Oe.jsx)("ins",{children:Rm(w.after)})]},w.path)),!y.changes.length&&!y.message&&(0,Oe.jsx)("p",{children:y.status==="unchanged"?"No authored changes.":`Object ${y.status}.`})]})]},y.id)),!g.length&&(0,Oe.jsx)("p",{children:"No matching object changes."})]}),e.sceneChanges.length>0&&(0,Oe.jsxs)("details",{children:[(0,Oe.jsxs)("summary",{children:["Scene settings (",e.sceneChanges.length,")"]}),(0,Oe.jsx)("div",{className:"ri-semanticPanel__details",children:e.sceneChanges.map(y=>(0,Oe.jsxs)("div",{children:[(0,Oe.jsx)("strong",{children:y.path}),(0,Oe.jsx)("del",{children:Rm(y.before)}),(0,Oe.jsx)("ins",{children:Rm(y.after)})]},y.path))})]}),(0,Oe.jsxs)("div",{className:"ri-semanticPanel__filters",children:[(0,Oe.jsx)("button",{type:"button",onClick:h,children:"Save report"}),t&&r&&(0,Oe.jsx)("button",{type:"button",onClick:r,children:"Clear focus"})]}),(0,Oe.jsx)("p",{className:"ri-semanticPanel__hint",children:"Compares authored bindings and settings. Geometry changes inside model files are not detected."})]})]})}var pT={id:"identity",modelObjectId:"identity",label:"identity",type:"identity",group:"identity",tags:"identity",style:"appearance",decals:"appearance",transform:"transform",visible:"visibility",removed:"visibility",status:"visibility",selectable:"behavior",hoverable:"behavior",actions:"behavior",cameraState:"behavior",metadata:"data",metrics:"data"},kL=Object.keys(pT),BL=new Set(["__proto__","prototype","constructor"]);function ls(e,t=new Set){if(e==null||typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number"){if(!Number.isFinite(e))throw new Error("Comparison values must be finite JSON data");return e}if(typeof e!="object"||t.has(e))throw new Error("Comparison values must be acyclic JSON data");t.add(e);let n=Array.isArray(e)?e.map(r=>ls(r,t)):Object.fromEntries(Object.entries(e).filter(([r,i])=>!BL.has(r)&&i!==void 0).map(([r,i])=>[r,ls(i,t)]));return t.delete(e),n}var uT=e=>e&&typeof e=="object"&&!Array.isArray(e)&&!Object.keys(e).length;function dT(e,t){let n=ls(e);n.visible=e.visible??!0,n.selectable=e.selectable??!0,n.hoverable=e.hoverable??!0,n.status=e.status??"normal",n.type=e.type??"other",n.tags=[...new Set(e.tags??[])].sort(),uT(n.transform)&&delete n.transform,n.metadata=Object.fromEntries(Object.entries(e.metadata??{}).filter(([r])=>!t.includes(r)));for(let r of["metrics","style","metadata"])uT(n[r])&&delete n[r];for(let r of["actions","decals"])Array.isArray(n[r])&&!n[r].length&&delete n[r];return n}function Om(e,t,n,r,i,o){if(Object.is(e,t)||typeof e=="number"&&typeof t=="number"&&Math.abs(e-t)<=i)return;let a=s=>!!s&&typeof s=="object"&&!Array.isArray(s);if(a(e)&&a(t)){for(let s of[...new Set([...Object.keys(e),...Object.keys(t)])].sort())Om(e[s],t[s],`${n}.${s}`,r,i,o);return}if(Array.isArray(e)&&Array.isArray(t)&&e.length===t.length){for(let s=0;s<e.length;s++)Om(e[s],t[s],`${n}[${s}]`,r,i,o);return}o.push({path:n,category:r,...e!==void 0?{before:ls(e)}:{},...t!==void 0?{after:ls(t)}:{}})}function Dm(e,t,n={}){let r=n.tolerance??1e-6;if(!Number.isFinite(r)||r<0)throw new Error("Comparison tolerance must be finite and nonnegative");let i=Object.entries(e.objectBindings).filter(([,b])=>!b.removed),o=Object.entries(t.objectBindings).filter(([,b])=>!b.removed),a=new Map(i),s=new Map(o),l=new Set,c=new Set,d=[],p=b=>{let h=n.matchBy??"modelObjectId",y=typeof h=="object"?b.metadata?.[h.metadataKey]:b[h];return typeof y=="string"&&y.length>0||typeof y=="number"?`${typeof y}:${y}`:null};function u(b,h,y){let w=b===void 0?void 0:a.get(b),T=h===void 0?void 0:s.get(h),x=[];if(w||T){let A=w?dT(w,n.ignoreMetadataKeys??[]):{},S=T?dT(T,n.ignoreMetadataKeys??[]):{};for(let M of kL)Om(A[M],S[M],M,pT[M],r,x)}let D=w?T?x.length?"modified":"unchanged":"removed":"added";d.push({id:JSON.stringify([b??null,h??null]),identity:y,label:T?.label??w?.label??T?.modelObjectId??w?.modelObjectId??y,status:D,beforeKey:b,afterKey:h,beforeObjectId:w?.modelObjectId,afterObjectId:T?.modelObjectId,changes:x}),b!==void 0&&l.add(b),h!==void 0&&c.add(h)}let f=new Set;for(let[b,h]of Object.entries(n.mapping??{})){if(!a.has(b)||!s.has(h)||f.has(h))throw new Error("Comparison mapping must reference existing, unique binding keys");f.add(h),u(b,h,`mapped:${b}`)}let m=new Map;for(let[b,h,y]of[[i,l,"a"],[o,c,"b"]])for(let[w,T]of b){if(h.has(w))continue;let x=p(T);if(x===null){d.push({id:JSON.stringify([y,w]),identity:"",label:T.label??T.modelObjectId,status:"ambiguous",...y==="a"?{beforeKey:w,beforeObjectId:T.modelObjectId}:{afterKey:w,afterObjectId:T.modelObjectId},changes:[],message:"Missing match identity. Supply an explicit mapping or another match field."});continue}let D=m.get(x)??{a:[],b:[]};D[y].push(w),m.set(x,D)}for(let[b,h]of m){if(h.a.length<=1&&h.b.length<=1){u(h.a[0],h.b[0],b);continue}for(let y of["a","b"])for(let w of h[y]){let T=(y==="a"?a:s).get(w);d.push({id:JSON.stringify([y,w]),identity:b,label:T.label??T.modelObjectId,status:"ambiguous",...y==="a"?{beforeKey:w,beforeObjectId:T.modelObjectId}:{afterKey:w,afterObjectId:T.modelObjectId},changes:[],message:"Duplicate match identity. Supply an explicit one-to-one mapping."})}}d.sort((b,h)=>b.label.localeCompare(h.label)||b.id.localeCompare(h.id));let v=[];Om(ls(e.sceneConfig??{}),ls(t.sceneConfig??{}),"sceneConfig","scene",r,v);let g={added:0,removed:0,modified:0,unchanged:0,ambiguous:0};for(let b of d)g[b.status]++;return{version:1,objects:d,counts:g,sceneChanges:v}}function zb(e,t,n){let r={added:"#22c55e",removed:"#f87171",modified:"#fbbf24",unchanged:"#94a3b8",ambiguous:"#c084fc"};return e.objects.flatMap(i=>{let o=t==="before"?i.beforeObjectId:i.afterObjectId;return o&&(i.status!=="unchanged"||i.id===n)?[{objectId:o,color:i.id===n?"#22d3ee":r[i.status]}]:[]})}var Yt=require("react");var uu=require("three"),cu=1e-6;function mT(){let e=[null,null],t=0,n=!1,r=new uu.Vector3,i=new uu.Vector3,o=new uu.Vector3,a=new uu.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 f=p.controls.camera.zoom,m=p.controls.camera.fov,v=typeof m=="number"&&typeof u.controls.camera.fov=="number"&&Math.abs(m-u.controls.camera.fov)>=cu;if(!(r.distanceToSquared(i)<cu&&o.distanceToSquared(a)<cu&&Math.abs(f-u.controls.camera.zoom)<cu&&!v)){n=!0;try{v&&(u.controls.camera.fov=m,u.controls.camera.updateProjectionMatrix?.()),Math.abs(f-u.controls.camera.zoom)>=cu&&u.controls.zoomTo(f,!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 f=()=>l(c),m=()=>{t=c};d.addEventListener("update",f),d.addEventListener("controlstart",m),e[c]={controls:d,invalidate:p,detach:()=>{d.removeEventListener("update",f),d.removeEventListener("controlstart",m)}},s(t,1-t)},setLeader(c){t=c},get leader(){return t},detach(){e.forEach(c=>c?.detach()),e[0]=e[1]=null}}}var po=require("react/jsx-runtime"),Lm=.05,fT=.2,du=e=>Math.min(Math.max(Number.isFinite(e)?e:.5,0),1);function hT({split:e,onSplitChange:t,labels:n,containerRef:r,beforeAction:i}){let o=_e(),a=p=>{let u=r.current?.getBoundingClientRect();u&&u.width>0&&t(du((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-Lm,ArrowDown:e-Lm,ArrowRight:e+Lm,ArrowUp:e+Lm,PageDown:e-fT,PageUp:e+fT,Home:0,End:1}[p.key];u!==void 0&&(p.preventDefault(),p.stopPropagation(),t(du(u)))},d=Math.round(e*100);return(0,po.jsxs)(po.Fragment,{children:[(0,po.jsxs)("span",{className:"ri-compare__label ri-compare__label--before",hidden:e<.08,children:[n[0],i]}),(0,po.jsx)("span",{className:"ri-compare__label ri-compare__label--after",hidden:e>.92,children:n[1]}),(0,po.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,po.jsx)("span",{className:"ri-compare__handle","aria-hidden":"true"})})]})}var Wn=require("react/jsx-runtime"),NL=Object.freeze({});function Fb(e){return(0,Wn.jsx)(sd,{labels:e.labels,children:(0,Wn.jsx)(VL,{...e})})}function VL({before:e,after:t,layout:n="slider",split:r,onSplitChange:i,reveal:o="auto",semanticComparison:a=!1,showComparisonOutlines:s,onComparisonOutlinesChange:l,onComparisonChange:c,linkSections:d,...p}){let u=_e(),[f,m]=(0,Yt.useState)(o==="auto");(0,Yt.useEffect)(()=>{o==="auto"&&m(!0)},[o]);let[v,g]=(0,Yt.useState)(.5),[b,h]=(0,Yt.useState)(!0),y=s??b,w=ae=>{s===void 0&&h(ae),l?.(ae)},T=du(r??v),x=(0,Yt.useCallback)(ae=>{let pe=du(ae);r===void 0&&g(pe),i?.(pe)},[r,i]),D=(0,Yt.useRef)([null,null]),[A,S]=(0,Yt.useState)([null,null]),[M,_]=(0,Yt.useState)(null),[C,E]=(0,Yt.useState)(null),L=[{...p,...e},{...p,...t}];(0,Yt.useEffect)(()=>_(null),[L[0].sceneConfig?.section,L[1].sceneConfig?.section]);let k=ae=>{let pe=L[ae].objectBindings;return pe&&typeof pe=="object"?pe:A[ae]?.url===L[ae].modelUrl?A[ae].bindings:NL},B=k(0),j=k(1),R=(0,Yt.useMemo)(()=>a?Dm({objectBindings:B,sceneConfig:L[0].sceneConfig},{objectBindings:j,sceneConfig:L[1].sceneConfig},typeof a=="object"?a:{}):null,[a,B,j,L[0].sceneConfig,L[1].sceneConfig]),O=R?JSON.stringify(R):"",N=(0,Yt.useRef)(null);(0,Yt.useEffect)(()=>{R&&N.current!==O&&(N.current=O,c?.(R))},[R,O,c]);let H=R?.objects.find(ae=>ae.id===C),Y=(0,Yt.useMemo)(()=>R?[zb(R,"before",C),zb(R,"after",C)]:null,[R,C]),ue=(0,Yt.useMemo)(()=>mT(),[]);(0,Yt.useEffect)(()=>()=>ue.detach(),[ue]);let be=[e,t],X=(0,Yt.useMemo)(()=>[0,1].map(ae=>(pe,De)=>{D.current[ae]=pe,S(te=>te[ae]?.bindings===pe.objectBindings&&te[ae]?.url===De?te:te.map((Fe,We)=>We===ae?{url:De,bindings:pe.objectBindings}:Fe)),ue.attach(ae,pe.raw.controls,pe.invalidate)}),[ue]),G=be.map((ae,pe)=>{let{label:De,...te}=ae,Fe={preset:"minimal",...p,...te},We=te.onViewerReady??p.onViewerReady;return{...Fe,...d??!!a?{sceneConfig:{...Fe.sceneConfig,section:M??L[1].sceneConfig?.section??Tr},onSceneConfigChange:ge=>{_(ge.section??Tr),(te.onSceneConfigChange??p.onSceneConfigChange)?.(ge)}}:{},...Y?{comparisonHighlights:y?Y[pe]:void 0,selectedObject:pe===0?H?.beforeKey?B[H.beforeKey]:null:H?.afterKey?j[H.afterKey]:null}:{},onObjectSelect:ge=>{if((te.onObjectSelect??p.onObjectSelect)?.(ge),R){let Ce=R.objects.find(Je=>(pe===0?Je.beforeObjectId:Je.afterObjectId)===ge?.modelObjectId);E(Ce?.id??null)}},onViewerReady:ge=>{X[pe](ge,Fe.modelUrl),We?.(ge)}}}),J=[e.label??u("compareBefore"),t.label??u("compareAfter")];(!G[0].modelUrl||!G[1].modelUrl)&&console.error("[react-immersive] CompareViewer needs a modelUrl, shared or on each side.");let ee=(0,Yt.useRef)(null),K=R?(0,Wn.jsx)(cT,{showOutlines:y,onShowOutlinesChange:w,report:R,selected:C,onSelect:ae=>{E(ae.id);let pe=ae.afterObjectId?1:0,De=D.current[pe],te=pe===1?ae.afterObjectId:ae.beforeObjectId,Fe=te?De?.raw.nodes[te]:null;De&&Fe&&(ue.setLeader(pe),De.raw.controls.fitToBox(Fe,!0),De.invalidate())},onClear:()=>E(null)}):null;if(!f)return(0,Wn.jsx)(Id,{className:"ri-compare",background:ac(p.backgroundColor,p.sceneConfig),poster:p.poster??t.poster??e.poster,onReveal:()=>m(!0)});if(n==="side-by-side")return(0,Wn.jsxs)("div",{className:"ri-compare ri-compare--sideBySide",children:[G.map((ae,pe)=>(0,Wn.jsxs)("div",{className:"ri-compare__pane",children:[(0,Wn.jsx)(ss,{...ae}),(0,Wn.jsx)("span",{className:"ri-compare__label",children:J[pe]})]},pe)),K]});let oe=`${T*100}%`;return(0,Wn.jsxs)("div",{ref:ee,className:"ri-compare ri-compare--slider",style:{"--ri-compare-split":oe},children:[(0,Wn.jsx)("div",{className:"ri-compare__layer",children:(0,Wn.jsx)(ss,{...G[0]})}),(0,Wn.jsx)("div",{className:"ri-compare__layer ri-compare__layer--after",children:(0,Wn.jsx)(ss,{...G[1]})}),K,(0,Wn.jsx)(hT,{split:T,onSplitChange:x,labels:[J[0],J[1]],containerRef:ee})]})}var aa=require("react");var Lt=require("react");function Hb(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function pu(e,t){if(!Hb(t))return t;let n=Hb(e)?{...e}:{};for(let r of Object.keys(t)){let i=t[r];n[r]=Hb(i)?pu(n[r],i):i}return n}function jL(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!="string"}function cs(e,t,n){let r=jL(t)?t:[{ids:t,patch:n??{}}],i=e;for(let o of r)for(let a of An(i,o.ids)){let s=i[a];if(!s)continue;let l=pu(s,o.patch);i===e&&(i={...e}),i[a]=l}return i}function Im(e){return{style:{material:e}}}var gT={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 bT(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n&&typeof n=="object"?{...n}:n]))}function UL(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function km(e){let[t,n]=(0,Lt.useState)(e),r=(0,Lt.useCallback)((_,C)=>{n(E=>C===void 0?cs(E,_):cs(E,_,C))},[]),i=(0,Lt.useCallback)((_,C)=>r(_,Im(C)),[r]),o=(0,Lt.useCallback)((_,C)=>i(_,{baseColor:C}),[i]),a=(0,Lt.useCallback)((_,C,E="baseColor")=>{let L=gT[E],k=typeof C=="string"?{path:C}:C;r(_,{style:{material:{[L]:k}}})},[r]),s=(0,Lt.useCallback)((_,C="baseColor")=>{let E=gT[C];r(_,{style:{material:{[E]:void 0}}})},[r]),l=(0,Lt.useCallback)((_,C)=>{n(E=>{let L=sn(E,_);if(!L)return E;let k=bT(E[L]?.style?.material),B=An(E,C);if(B.length===0)return E;let j=E;for(let R of B){let O=E[R];O&&(j===E&&(j={...E}),j[R]={...O,style:{...O.style,material:bT(k)}})}return j})},[]),c=(0,Lt.useCallback)(_=>r(_,{style:{material:void 0}}),[r]),d=(0,Lt.useCallback)((_,C)=>r(_,{transform:C}),[r]),p=(0,Lt.useCallback)(_=>r(_,{transform:void 0}),[r]),u=(0,Lt.useCallback)((_,C)=>r(_,{metadata:C}),[r]),f=(0,Lt.useCallback)((_,C)=>{n(E=>{let L=E;for(let k of An(E,_)){let B=E[k],j=C(B.decals??[]);L===E&&(L={...E}),L[k]={...B,decals:j.length>0?j:void 0}}return L})},[]),m=(0,Lt.useCallback)((_,C)=>{let E=C.id??`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;return f(_,L=>[...L.filter(k=>k.id!==E),{...C,id:E}]),E},[f]),v=(0,Lt.useCallback)((_,C,E)=>f(_,L=>L.map(k=>k.id===C?{...k,...E}:k)),[f]),g=(0,Lt.useCallback)((_,C)=>f(_,E=>E.filter(L=>L.id!==C)),[f]),b=(0,Lt.useCallback)(_=>lm(t,_),[t]),h=(0,Lt.useCallback)(_=>An(t,_).map(C=>t[C]?.id??C),[t]),y=(0,Lt.useCallback)(_=>{let C=sn(t,_);return C?t[C]?.style?.material??null:null},[t]),w=(0,Lt.useCallback)(_=>r(_,{visible:!1}),[r]),T=(0,Lt.useCallback)(_=>r(_,{visible:!0}),[r]),x=(0,Lt.useCallback)(_=>{n(C=>{let E=An(C,_).reduce((L,k)=>{let B=C[k];return B&&L.push({ids:k,patch:{visible:B.visible===!1}}),L},[]);return cs(C,E)})},[n]),D=(0,Lt.useCallback)(()=>{n(_=>cs(_,Object.keys(_),{visible:!0}))},[n]),A=(0,Lt.useMemo)(()=>UL(t),[t]),S=(0,Lt.useMemo)(()=>Object.keys(A).map(_=>t[_]?.id??_),[A,t]),M=(0,Lt.useCallback)(_=>{let C=sn(t,_);return C?t[C]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:n,updateObjectBindings:r,setMaterial:i,setBaseColor:o,setTexture:a,clearTexture:s,copyMaterial:l,resetMaterial:c,getMaterial:y,setTransform:d,resetTransform:p,updateMetadata:u,addDecal:m,updateDecal:v,removeDecal:g,selectObjectBindings:b,selectObjectBindingIds:h,hiddenObjects:A,hiddenObjectIds:S,hideObject:w,showObject:T,toggleObjectVisibility:x,isObjectHidden:M,clearHiddenObjects:D}}var bn=require("react");function Bm(e,t){return pu(e,t)}var zL={type:"point",color:"#ffffff",intensity:1,position:[0,0,0],distance:0,decay:2,attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0};function Nm(e){return{...zL,...e}}function Vm(e){let t=(0,bn.useRef)(null),[n,r]=(0,bn.useState)(()=>{let b=typeof e=="function"?e():e;return t.current=b,b}),i=(0,bn.useCallback)(b=>{r(h=>{let y=typeof b=="function"?b(h):b;return Bm(h,y)})},[]),o=(0,bn.useCallback)(()=>{let b=t.current;b&&r(b)},[]),a=(0,bn.useCallback)((b,h)=>{i(y=>({lighting:{lights:y.lighting.lights.map(w=>w.id===b?{...w,...h}:w)}}))},[i]),s=(0,bn.useCallback)(b=>{i(h=>h.lighting.lights.some(y=>y.id===b.id)?{}:{lighting:{lights:[...h.lighting.lights,Nm(b)]}})},[i]),l=(0,bn.useCallback)(b=>{i(h=>({lighting:{lights:h.lighting.lights.filter(y=>y.id!==b)}}))},[i]),c=(0,bn.useCallback)((b,h)=>a(b,{intensity:h}),[a]),d=(0,bn.useCallback)((b,h)=>a(b,{color:h}),[a]),p=(0,bn.useCallback)(b=>a(b,{visible:!0}),[a]),u=(0,bn.useCallback)(b=>a(b,{visible:!1}),[a]),f=(0,bn.useCallback)(b=>{i(h=>({lighting:{lights:h.lighting.lights.map(y=>y.id===b?{...y,visible:!y.visible}:y)}}))},[i]),m=(0,bn.useCallback)((b,h)=>a(b,{attachment:h,attachedToCamera:!1}),[a]),v=(0,bn.useCallback)(b=>a(b,{attachment:void 0}),[a]),g=(0,bn.useMemo)(()=>({items:n.lighting.lights,get:b=>n.lighting.lights.find(h=>h.id===b),add:s,update:a,remove:l,setIntensity:c,setColor:d,show:p,hide:u,toggle:f,attach:m,detach:v}),[n.lighting.lights,s,a,l,c,d,p,u,f,m,v]);return{sceneConfig:n,setSceneConfig:r,updateSceneConfig:i,resetSceneConfig:o,lights:g}}var jm=require("react");function Um({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,f=n?.fitScene,m=n?.resetView,v=n?.setCameraTarget,g=n?.setCameraState,b=r?.play,h=r?.pause,y=r?.stop,w=r?.setSpeed,T=r?.seek,x=i?.handleIsolationChange,D=(0,jm.useCallback)(M=>{let _=sn(a,M);return _?a[_]?.actions??[]:[]},[a]),A=(0,jm.useCallback)(async M=>{for(let _ of M.action.effects??[]){if("objectBindings"in _){s(_.target,_.objectBindings);continue}if("sceneConfig"in _){p?.(_.sceneConfig);continue}if("isolation"in _){x?.(_.isolation);continue}if("visibility"in _){_.visibility==="show"?l(_.target):_.visibility==="hide"?c(_.target):d(_.target);continue}if("camera"in _){let E=_.camera;E.type==="focus-object"?await u?.(E.objectId??M.objectId):E.type==="fit-scene"?await f?.():E.type==="reset"?await m?.():E.type==="set-target"?await v?.(E.target,E.transition??!0):await g?.(E.state,E.transition??!0);continue}let C=_.animation;if(C.type==="play"){let{type:E,clip:L,...k}=C;b?.(L,k)}else C.type==="pause"?h?.(C.clip):C.type==="stop"?y?.(C.clip):C.type==="set-speed"?w?.(C.speed,C.clip):T?.(C.time,C.clip)}await o?.(M)},[f,u,c,o,h,b,m,T,w,g,v,x,l,y,d,s,p]),S=(0,jm.useCallback)(async(M,_)=>{let C=sn(a,M);if(!C)return null;let E=a[C],L=E?.actions?.find(B=>B.id===_);if(!E||!L)return null;let k={objectId:C,action:L,binding:E};return await A(k),k},[A,a]);return{getActionsForObject:D,handleAction:A,runAction:S}}var On=require("react"),Gb={currentClip:null,isPlaying:!1,speed:1,time:0,duration:0,active:[]};function zm(){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)(Gb);(0,On.useEffect)(()=>()=>{t.current?.()},[]);let l=(0,On.useCallback)(g=>{t.current?.(),e.current=g,r(g.clips),o(g.clipDetails??g.clips.map(b=>({sourceName:b,duration:0}))),s(g.getState?.()??Gb),t.current=g.subscribe?.(s)??null},[]),c=(0,On.useCallback)(()=>{t.current?.(),t.current=null,e.current=null,r([]),o([]),s(Gb)},[]),d=(0,On.useCallback)(g=>{let b=e.current;b&&(g(b),!b.subscribe&&b.getState&&s(b.getState()))},[]),p=(0,On.useCallback)((g,b)=>d(h=>h.play(g,b)),[d]),u=(0,On.useCallback)(g=>d(b=>b.pause(g)),[d]),f=(0,On.useCallback)(g=>d(b=>b.stop(g)),[d]),m=(0,On.useCallback)((g,b)=>d(h=>h.setSpeed(g,b)),[d]),v=(0,On.useCallback)((g,b)=>d(h=>h.seek?.(g,b)),[d]);return{clips:n,clipDetails:i,...a,play:p,pause:u,stop:f,setSpeed:m,seek:v,handleAnimationsReady:l,clearAnimations:c}}var mo=require("react");function FL(e){return typeof e=="function"?e:e?.handleViewerReady??null}function Fm(...e){let t=(0,mo.useRef)(null),n=(0,mo.useRef)(e);n.current=e;let r=(0,mo.useCallback)(l=>{t.current=l;let c=new Set;for(let d of n.current){let p=FL(d);p&&!c.has(p)&&(c.add(p),p(l))}},[]),i=(0,mo.useCallback)(()=>t.current,[]),o=(0,mo.useCallback)(l=>{let c=t.current;return c?c.captureImage(l):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),a=(0,mo.useCallback)(()=>{let l=t.current;return l?(l.invalidate(),!0):!1},[]),s=(0,mo.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 at=require("react"),bl=require("three");var Xb=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],Hm=1;function Gm(e){return typeof e=="string"?[e]:e}function Wm(e,t=0,n=1){return Math.min(n,Math.max(t,e))}function Wb(e,t){return e+Math.random()*(t-e)}function yT([e,t],n){return e+(t-e)*n}function qb([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 vT(e,t){let n=Wm(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 HL(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(n=>n instanceof bl.Material):[]}function GL(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 Xb){let r=e[n];typeof r=="number"&&(t[n]=r)}return t}function xT(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 Xb){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 WL(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 qL(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 qm(e={}){let t=(0,at.useRef)(e);t.current=e;let n=(0,at.useRef)(null),r=(0,at.useRef)(null),i=(0,at.useRef)(null),o=(0,at.useRef)(new Map),a=(0,at.useRef)(new Map),s=(0,at.useRef)(new Map),l=(0,at.useRef)(new Map),c=(0,at.useCallback)(R=>{let O=n.current;if(!O)return null;let N=sn(O.objectBindings,R);return O.raw.nodes[R]??(N?O.raw.nodes[N]:null)??(O.raw.scene?_r(O.raw.scene,R):null)??null},[]),d=(0,at.useCallback)(R=>{let O=n.current;return O?typeof R=="object"&&!Array.isArray(R)?An(O.objectBindings,R):Gm(R).map(N=>sn(O.objectBindings,N)??N):typeof R=="string"?[R]:Array.isArray(R)?R:[]},[]),p=(0,at.useCallback)(()=>{n.current?.invalidate()},[]),u=(0,at.useCallback)((R,O)=>{let N=!1;for(let H of d(R)){let Y=c(H);if(Y)for(let ue of HL(Y))s.current.has(ue)||s.current.set(ue,GL(ue)),xT(ue,O),N=!0}return N},[c,d]),f=(0,at.useCallback)((R,O)=>{let N=u(R,O);return N&&p(),N},[p,u]),m=(0,at.useCallback)((R,O)=>{let N=!1;for(let H of d(R)){let Y=c(H);Y&&(l.current.has(Y)||l.current.set(Y,WL(Y)),qL(Y,O),N=!0)}return N},[c,d]),v=(0,at.useCallback)((R,O)=>{let N=m(R,O);return N&&p(),N},[p,m]),g=(0,at.useCallback)(R=>{let O=c(R);if(!O)return null;O.updateWorldMatrix(!0,!1);let N=O.getWorldPosition(new bl.Vector3);return[N.x,N.y,N.z]},[c]),b=(0,at.useCallback)(R=>{let O=a.current.get(R);return O?(O.light.removeFromParent(),O.light.dispose(),a.current.delete(R),p(),!0):!1},[p]),h=(0,at.useCallback)(R=>{let O=c(R.target);if(!O)return!1;let N=a.current.get(R.id),H=N?.light??new bl.PointLight;return N&&N.target!==R.target&&H.removeFromParent(),H.name=`react-immersive-runtime-light:${R.id}`,H.color.set(R.color??"#ffffff"),H.intensity=R.intensity??1,H.distance=R.distance??0,H.decay=R.decay??2,H.castShadow=R.castShadow??!1,H.position.set(...R.offset??[0,0,0]),H.parent!==O&&O.add(H),a.current.set(R.id,{light:H,target:R.target}),p(),!0},[p,c]),y=(0,at.useCallback)((R,O)=>{let N=a.current.get(R);if(!N)return!1;if(O.target&&O.target!==N.target){let H=c(O.target);if(!H)return!1;N.light.removeFromParent(),H.add(N.light),N.target=O.target}return O.color!==void 0&&N.light.color.set(O.color),O.intensity!==void 0&&(N.light.intensity=O.intensity),O.distance!==void 0&&(N.light.distance=O.distance),O.decay!==void 0&&(N.light.decay=O.decay),O.offset!==void 0&&N.light.position.set(...O.offset),O.castShadow!==void 0&&(N.light.castShadow=O.castShadow),p(),!0},[p,c]),w=(0,at.useCallback)((R,O)=>{let N=H=>O[H%O.length]??0;for(let H of R.materials??[])d(H.targets).forEach((Y,ue)=>{let be=N(ue),X={};for(let G of Xb){let J=H.values[G];J&&(X[G]=yT(J,be))}u(Y,X)});for(let H of R.transforms??[])d(H.targets).forEach((Y,ue)=>{let be=N(ue),X={};H.values.position&&(X.position=qb(H.values.position,be)),H.values.rotation&&(X.rotation=qb(H.values.rotation,be)),H.values.scale&&(X.scale=qb(H.values.scale,be)),m(Y,X)});for(let H of R.lights??[])Gm(H.lights).forEach((Y,ue)=>{let be=a.current.get(Y);be&&(be.light.intensity=yT(H.intensity,N(ue)))})},[d,u,m]),T=(0,at.useRef)(()=>{}),x=(0,at.useRef)(()=>{});x.current=R=>{i.current=null;let O=!1;for(let[N,H]of o.current){H.startedAt===null&&(H.startedAt=R);let Y=H.lastFrameAt??R;H.lastFrameAt=R;let ue=H.override&&H.override.until>R?H.override.level:null;H.override&&ue===null&&(H.override=null);let be=H.update(R,R-H.startedAt,Math.min(100,R-Y),ue);O=!0,be||(o.current.delete(N),H.onComplete?.())}O&&p(),o.current.size>0&&T.current()},T.current=()=>{i.current!==null||typeof requestAnimationFrame>"u"||(i.current=requestAnimationFrame(R=>x.current(R)))};let D=(0,at.useCallback)(R=>(o.current.set(R.id,R),T.current(),R.id),[]),A=(0,at.useCallback)((R,O={})=>{let N=O.id??`transition-${Hm++}`,H=Math.max(1,O.duration??400),Y=O.easing??"ease-in-out";return D({id:N,startedAt:null,lastFrameAt:null,override:null,onComplete:O.onComplete,update:(ue,be,X,G)=>{let J=G??vT(be/H,Y);return w(R,[J]),be<H}})},[w,D]),S=(0,at.useCallback)((R,O={})=>{let N=O.id??`pulse-${Hm++}`,H=Math.max(1,O.duration??1e3),Y=O.minLevel??0,ue=O.maxLevel??1,be=O.repeat??1/0,X=O.synchronized??!0,G=Math.max(1,...[...R.materials??[],...R.transforms??[]].map(J=>d(J.targets).length),...(R.lights??[]).map(J=>Gm(J.lights).length));return D({id:N,startedAt:null,lastFrameAt:null,override:null,onComplete:O.onComplete,update:(J,ee,fe,K)=>{let oe=ee/H,ae=Array.from({length:X?1:G},(pe,De)=>{if(K!==null)return K;let te=oe+(X?0:De/G),Fe=.5-Math.cos(te%1*Math.PI*2)/2;return Y+(ue-Y)*Fe});return w(R,ae),be===1/0||oe<be}})},[w,D,d]),M=(0,at.useCallback)((R,O={})=>{let N=O.id??`timeline-${Hm++}`,H=O.repeat??1,Y=R.map(be=>({...be,duration:Math.max(1,be.duration),hold:Math.max(0,be.hold??0)})),ue=Math.max(1,Y.reduce((be,X)=>be+X.duration+X.hold,0));return D({id:N,startedAt:null,lastFrameAt:null,override:null,onComplete:O.onComplete,update:(be,X,G,J)=>{if(Y.length===0||H<=0)return!1;let ee=X/ue;if(H!==1/0&&ee>=H){for(let oe of Y)w(oe.channels,[1]);return!1}let fe=X%ue,K=0;for(let oe of Y){let ae=K+oe.duration,pe=ae+oe.hold;if(fe>=ae){w(oe.channels,[J??1]),K=pe;continue}if(fe>=K){let De=J??vT((fe-K)/oe.duration,oe.easing??"ease-in-out");w(oe.channels,[De]);break}}return!0}})},[w,D]),_=(0,at.useCallback)((R,O={})=>{let N=O.id??`flicker-${Hm++}`,H=O.synchronized??!0,Y=O.minLevel??.15,ue=O.maxLevel??1,be=O.interval??[45,160],X=typeof be=="number"?[be,be]:be,G=[Math.max(1,Math.min(...X)),Math.max(1,Math.max(...X))],J=Wm(O.response??.7,.01,1),ee=Wm(O.blackoutChance??.08),fe=Wm(O.flashChance??.12),K=O.flashLevel??1.15,oe=Math.max(1,...[...R.materials??[],...R.transforms??[]].map(Fe=>d(Fe.targets).length),...(R.lights??[]).map(Fe=>Gm(Fe.lights).length)),ae=H?1:oe,pe=Array.from({length:ae},()=>Y),De=Array.from({length:ae},()=>Y),te=Array.from({length:ae},()=>0);return D({id:N,startedAt:null,lastFrameAt:null,override:null,onComplete:O.onComplete,update:(Fe,We,ge,Ce)=>{for(let Je=0;Je<ae;Je+=1){if(Ce!==null)De[Je]=Ce;else if(Fe>=te[Je]){let qe=Math.random();De[Je]=qe<ee?Wb(0,Math.min(.04,Y)):qe<ee+fe?K:Wb(Y,ue),te[Je]=Fe+Wb(...G)}let ve=1-Math.pow(1-J,Math.max(1,ge)/16.67);pe[Je]+=(De[Je]-pe[Je])*ve}return w(R,pe),O.duration===void 0||We<O.duration}})},[w,D,d]),C=(0,at.useCallback)((R,O,N)=>{let H=o.current.get(R);if(!H)return!1;let Y=typeof performance>"u"?Date.now():performance.now();return H.override={level:O,until:Y+Math.max(0,N)},T.current(),!0},[]),E=(0,at.useCallback)(R=>o.current.delete(R),[]),L=(0,at.useCallback)(()=>{o.current.clear(),i.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(i.current),i.current=null)},[]),k=(0,at.useCallback)(()=>{for(let[R,O]of s.current)xT(R,O);s.current.clear();for(let[R,O]of l.current)R.position.set(...O.position),R.rotation.set(...O.rotation),R.scale.set(...O.scale),R.visible=O.visible,R.updateMatrix(),R.updateMatrixWorld(!0);l.current.clear();for(let R of a.current.values())R.light.removeFromParent(),R.light.dispose();a.current.clear(),p()},[p]),B=(0,at.useCallback)(()=>{L(),k()},[k,L]),j=(0,at.useCallback)(R=>{r.current&&r.current!==R.raw.scene&&k(),n.current=R,r.current=R.raw.scene,t.current.onViewerReady?.(R)},[k]);return(0,at.useEffect)(()=>()=>{B(),n.current=null,r.current=null},[B]),{handleViewerReady:j,setMaterial:f,setTransform:v,getWorldPosition:g,addPointLight:h,updatePointLight:y,removePointLight:b,transition:A,timeline:M,pulse:S,flicker:_,overrideEffect:C,stopEffect:E,stopAllEffects:L,resetRuntime:B}}var Xm=require("react");function $m(){let[e,t]=(0,Xm.useState)(null),n=(0,Xm.useCallback)(r=>{t(r)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:n}}var mu=require("react");function Ym(e=null){let[t,n]=(0,mu.useState)(e),r=(0,mu.useCallback)((o,a)=>n({...a,target:o}),[]),i=(0,mu.useCallback)(()=>n(null),[]);return{isolation:t,isolate:r,clearIsolation:i,handleIsolationChange:n}}var rr=require("react");function Km(){let[e,t]=(0,rr.useState)(!0),[n,r]=(0,rr.useState)(!1),[i,o]=(0,rr.useState)(null),[a,s]=(0,rr.useState)(null),[l,c]=(0,rr.useState)(0),[d,p]=(0,rr.useState)([]),[u,f]=(0,rr.useState)([]),[m,v]=(0,rr.useState)([]),g=(0,rr.useCallback)(w=>{s(w.bounds),c(w.objectCount),p(w.materialVariants),f(w.materialVariantGroups),o(null),t(!1),r(!0)},[]),b=(0,rr.useCallback)(w=>v(w),[]),h=(0,rr.useCallback)(w=>{o(w),s(null),c(0),p([]),f([]),v([]),t(!1),r(!1)},[]),y=(0,rr.useCallback)(()=>{t(!0),r(!1),o(null),s(null),c(0),p([]),f([]),v([])},[]);return{isLoading:e,isReady:n,error:i,bounds:a,objectCount:l,materialVariants:d,materialVariantGroups:u,objects:m,handleModelLoaded:g,handleObjectCatalog:b,handleLoadError:h,resetModelState:y}}var fu=require("react");function Zm(e=null){let[t,n]=(0,fu.useState)(e),r=(0,fu.useCallback)(o=>{n(o)},[n]),i=(0,fu.useCallback)(()=>{n(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:n,handleObjectSelect:r,clearSelection:i}}var XL={};function wT(e={}){let t=(0,aa.useRef)(e);t.current=e;let n=(0,aa.useRef)(e.bindings===void 0||e.bindings==="auto"),r=km(()=>{let A=t.current.bindings;return A===void 0||A==="auto"?XL:typeof A=="function"?A():A}),i=Vm(()=>{let A=t.current.sceneConfig;return A===void 0?dr:typeof A=="function"?A():A}),o=Zm(),a=$m(),s=td(e.camera),l=Km(),c=zm(),d=Ym(),p=qm(),u=Fm(s,p),f=Um({bindings:r,scene:i,camera:s,animations:c,isolation:d,onAction:e.onAction}),{setObjectBindings:m}=r,{handleObjectCatalog:v}=l,g=(0,aa.useCallback)(A=>{v(A),n.current&&m(S=>{let M=hm(A.map(_=>_.name));for(let _ of Object.keys(M))S[_]&&(M[_]=S[_]);return M})},[v,m]),{handleObjectSelect:b}=o,h=(0,aa.useCallback)(A=>{b(A),t.current.onObjectSelect?.(A)},[b]),{handleHoveredObject:y}=a,w=(0,aa.useCallback)(A=>{y(A),t.current.onObjectHover?.(A)},[y]),{handleLoadError:T}=l,x=(0,aa.useCallback)(A=>{T(A),t.current.onLoadError?.(A)},[T]),D=e.sceneConfig!==void 0||i.sceneConfig!==dr;return{props:{objectBindings:r.objectBindings,onObjectBindingsChange:m,selectedObject:o.selectedObjectBinding,onObjectSelect:h,onObjectHover:w,onCameraChange:s.handleCameraChange,onViewerReady:u.handleViewerReady,onModelLoaded:l.handleModelLoaded,onLoadError:x,onObjectCatalog:g,onAnimationsReady:c.handleAnimationsReady,onAction:f.handleAction,onSceneConfigChange:i.setSceneConfig,isolation:d.isolation,onIsolationChange:d.handleIsolationChange,...D?{sceneConfig:i.sceneConfig}:{}},bindings:r,selection:o,hover:a,camera:s,model:l,animations:c,actions:f,scene:i,isolation:d,effects:p,connection:u}}var ST=require("react");function MT(e,t){return(0,ST.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 _T=require("react");function CT(e){return(0,_T.useMemo)(()=>Object.values(e).map(t=>t.modelObjectId),[e])}function TT(e){return e}var vt=require("react");function $L(e,t){if(!e.objectBindings&&(!!e.hidden?.length||!!e.selected)&&Object.keys(t).length===0)return null;let r={};if(e.objectBindings)r.bindings=e.objectBindings;else 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.objectBindings??t,o=e.selected?sn(i,e.selected):null;r.selected=o?i[o]:null}return r}function PT(e){return JSON.stringify(e&&{modelUrl:e.modelUrl,activeModelId:e.activeModelId,tilesetUrl:e.tilesetUrl,mergeModels:e.mergeModels,models:e.models?.map(({id:t,url:n,mergeModels:r})=>({id:t,url:n,mergeModels:r}))})}function AT(e){let t=(0,vt.useRef)(e);t.current=e;let n=e.paramKey??"view",r=`${n}Id`,[i,o]=(0,vt.useState)(!1),a=(0,vt.useRef)(null),s=(0,vt.useRef)(null),l=(0,vt.useRef)(null),c=(0,vt.useRef)(null),d=(0,vt.useRef)(null),p=(0,vt.useRef)(null),u=(0,vt.useRef)(null),f=(0,vt.useRef)(null),m=(0,vt.useRef)(!0),v=(0,vt.useCallback)(C=>{let E=C instanceof Error?C:new Error(String(C));t.current.onError?t.current.onError(E):u.current!==E.message&&console.warn("[react-immersive]",E.message),u.current=E.message},[]),g=(0,vt.useCallback)(()=>{d.current!==null&&clearTimeout(d.current),d.current=null},[]);(0,vt.useEffect)(()=>(m.current=!0,()=>{m.current=!1,g()}),[g]);let b=(0,vt.useCallback)(()=>{let C=t.current,E=(C.mode??(C.configuration?"configuration":"view"))==="configuration";return{version:1,camera:C.cameraState??void 0,hidden:Object.values(C.objectBindings).filter(L=>L.visible===!1).map(L=>L.id),selected:C.selectedObjectBinding?.id??null,...E?{objectBindings:C.objectBindings,configuration:C.configuration}:{}}},[]),h=(0,vt.useCallback)(()=>Ti(b(),typeof window>"u"?void 0:window.location.href),[b]),y=(0,vt.useCallback)(()=>Io(b(),typeof window>"u"?void 0:window.location.href),[b]),w=(0,vt.useCallback)((C,E,L=window.location.href)=>{let k=new URL(L),B=new URLSearchParams(k.hash.slice(1));if(B.delete(n),B.delete(r),B.set(E?r:n,C),k.hash=B.toString(),!E&&k.href.length>(t.current.maxUrlLength??65536))throw new Error("Viewer configuration is too large for an inline link. Save JSON instead, or configure storage for createShareUrl(). Uploaded images can make links large.");return k.href},[n,r]),T=(0,vt.useCallback)(()=>w(Na(h()),!1),[h,w]),x=(0,vt.useCallback)(async()=>{let C=window.location.href,E=t.current.storage,L=await y();if(!E)return w(Na(L),!1,C);let k=await E.save(L);if(typeof k!="string"||!k.trim()||k.length>2048)throw new Error("Viewer state storage returned an invalid id.");return w(k,!0,C)},[y,w]),D=(0,vt.useCallback)(()=>{if(g(),a.current||p.current)return;let C=T();window.history.replaceState(null,"",C),c.current=`inline:${new URL(C).hash}`},[g,T]),A=(0,vt.useCallback)(async()=>{let C=a.current;if(!C||s.current||!m.current)return!1;s.current=C,g();try{let E=t.current,L=C.state;if(L.configuration&&!C.configurationApplied){if(!E.onConfigurationChange)throw new Error("Restoring a full viewer configuration requires onConfigurationChange.");return C.configurationApplied=!0,E.onConfigurationChange(L.configuration),!1}if(L.configuration&&PT(E.configuration)!==PT(L.configuration)||E.isReady===!1)return!1;if(L.camera&&!C.cameraApplied){if(!await E.setCameraState(L.camera,!1)||a.current!==C||!m.current)return!1;C.cameraApplied=!0}E=t.current;let k=$L(L,E.objectBindings);return!k||a.current!==C?!1:(k.bindings&&E.onObjectBindingsChange(k.bindings),k.selected!==void 0&&E.setSelectedObjectBinding(k.selected),a.current=null,l.current=C.key,o(!0),!0)}catch(E){throw a.current===C&&(a.current=null),o(!1),E}finally{s.current=null,a.current&&a.current!==C&&m.current&&A().catch(v)}},[g,v]),S=(0,vt.useCallback)(async C=>{let E=Ti(C,window.location.href);g(),f.current=null,p.current=null;let L=new URLSearchParams(window.location.hash.slice(1));return c.current=L.has(n)?`inline:${window.location.hash}`:L.has(r)?`stored:${r}:${L.get(r)}`:null,l.current=null,a.current={key:`manual:${Na(E)}`,origin:"manual",state:E,configurationApplied:!1,cameraApplied:!1},o(!1),A()},[A,g,n,r]),M=(0,vt.useCallback)(async()=>{let C=new URLSearchParams(window.location.hash.slice(1)),E=C.get(n),L=C.get(r),k=E!==null?`inline:${window.location.hash}`:L!==null?`stored:${r}:${L}`:null;if(!k)return f.current=null,p.current=null,a.current?.origin==="manual"?A():(a.current=null,l.current=null,o(!0),!1);if(k===c.current||k===l.current)return a.current?.origin==="manual"?A():!1;if(a.current?.key===k)return A();g(),o(!1),f.current=k,a.current=null;let B=E;if(E===null){let R=t.current.storage;if(!R)throw new Error("This shared link requires a viewer state storage adapter.");(!p.current||p.current.key!==k)&&(p.current={key:k,promise:R.load(L)});let O=p.current;try{B=await O.promise}finally{p.current===O&&(p.current=null)}if(f.current!==k||!m.current)return!1;let N=a.current;if(N?.key===k||l.current===k)return N?A():!1}let j;try{j=Ti(B,window.location.href)}catch(R){throw R}return a.current={key:k,origin:"url",state:j,configurationApplied:!1,cameraApplied:!1},A()},[A,g,r,n]);(0,vt.useEffect)(()=>{a.current&&A().catch(v)}),(0,vt.useEffect)(()=>{let C=()=>{M().catch(v)};return window.addEventListener("hashchange",C),()=>window.removeEventListener("hashchange",C)},[M,v]);let _=null;if(e.autoSync!==!1&&i&&!a.current&&!p.current)try{_=Na(h())}catch{}return(0,vt.useEffect)(()=>{if(e.autoSync===!1||!i||a.current||p.current){g();return}if(_===null){try{h()}catch(C){v(C)}return}return d.current=setTimeout(()=>{d.current=null;try{D()}catch(C){v(C)}},Math.max(0,e.debounceMs??400)),g},[_,e.autoSync,e.debounceMs,i,g,h,D,v]),{getState:h,getStateAsync:y,restoreState:S,getShareUrl:T,createShareUrl:x,syncUrl:D,restoreFromUrl:M}}var di=require("react");var YL={};function ET(){return`asset-${globalThis.crypto.randomUUID()}`}function RT(e){let[t,n]=(0,di.useState)(e),[r,i]=(0,di.useState)(()=>e[0]?Ae(e[0]):""),o=t.find(m=>Ae(m)===r)??t[0],a=o?Ae(o):"",s=(0,di.useCallback)(m=>{n(v=>v.map(g=>Ae(g)===a?{...g,objectBindings:m}:g))},[a]),l=(0,di.useCallback)(m=>{n(v=>v.map(g=>Ae(g)===a?{...g,sceneConfig:m}:g))},[a]),c=(0,di.useCallback)(m=>i(v=>{let g=t.find(b=>b.url===m);return g?Ae(g):v}),[t]),d=(0,di.useCallback)(m=>{let v={...m,id:m.id??ET()};return n(g=>{if(g.some(b=>Ae(b)===v.id))throw new Error("Asset instance ID already exists.");return[...g,v]}),v.id},[]),p=(0,di.useCallback)(m=>{let v=t.find(w=>Ae(w)===m);if(!v)return null;let g=structuredClone(v);g.id=ET(),g.sceneConfig?.measurements&&(g.sceneConfig.measurements.items=g.sceneConfig.measurements.items.map(w=>({...w,modelId:g.id}))),g.label=`${v.label??"Asset"} copy`;let[b,h,y]=v.transform?.position??[0,0,0];return g.transform={...g.transform,position:[b+1,h,y]},n(w=>[...w,g]),g.id},[t]),u=(0,di.useCallback)(m=>{n(v=>v.filter(g=>Ae(g)!==m))},[]),f=(0,di.useCallback)((m,v)=>{let g=Lo(v);n(b=>b.map(h=>Ae(h)===m?{...h,transform:g}:h))},[]);return{modelUrl:o?.url??"",models:t,activeModelId:a,onModelChange:c,onActiveModelChange:i,objectBindings:YL,onObjectBindingsChange:s,sceneConfig:o?.sceneConfig,onSceneConfigChange:l,addModel:d,duplicateModel:p,removeModel:u,updateModelTransform:f}}var OT=["front","back","double"],DT=["normal","additive"];function LT(e){cr(e);let t=[],n=[{node:e,path:"0",parentId:null}];for(;n.length;){let{node:i,path:o,parentId:a}=n.pop(),s=`node:${o}`,l=i.isMesh&&i.name?ur(i):null;t.push({id:s,parentId:a,name:i.name||i.type||"Group",...l?{objectId:l}:{}});for(let c=i.children.length-1;c>=0;c--)n.push({node:i.children[c],path:`${o}/${c}`,parentId:s})}let r=new Set;for(let i=t.length-1;i>=0;i--){let o=t[i];(o.objectId||r.has(o.id))&&(r.add(o.id),o.parentId&&r.add(o.parentId))}return t.filter(i=>r.has(i.id))}function IT(e){return structuredClone(e.style??{})}function kT(e,t,n){let r=An(e,t).filter(o=>!e[o].removed);if(!r.length)return e;let i={...e};for(let o of r)i[o]={...e[o],style:structuredClone(n)};return i}var $=require("react/jsx-runtime"),fo=e=>e.toLocaleString(),yl=e=>e==null?"Unknown":e>=1024*1024?`${(e/1024/1024).toFixed(1)} MiB`:`${(e/1024).toFixed(1)} KiB`,$b=e=>e===null?"Unavailable":fo(e);function Yb({report:e,runtimeStats:t,onRefresh:n,onSelectObject:r}){return(0,$.jsxs)("div",{className:"ri-assetDiagnostics",children:[(0,$.jsxs)("div",{className:"ri-diagnosticsActions",children:[n&&(0,$.jsx)("button",{type:"button",disabled:!e||e.status==="failed",onClick:n,children:"Rescan asset"}),(0,$.jsx)("button",{type:"button",disabled:!e,onClick:()=>{Ri(new Blob([JSON.stringify({asset:e,runtime:t??null},null,2)],{type:"application/json"}),"asset-diagnostics.json")},children:"Download report"})]}),e?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)("div",{className:`ri-diagnosticsSummary ri-diagnosticsSummary--${e.issues.some(i=>i.severity==="error")?"error":e.issues.some(i=>i.severity==="warning")?"warning":"info"}`,children:[(0,$.jsx)("strong",{children:e.status==="failed"?"Asset could not be inspected":e.issues.some(i=>i.severity==="error")?"Issues need attention":e.issues.some(i=>i.severity==="warning")?"Review recommended":"No blocking issues found"}),(0,$.jsxs)("span",{children:[e.issues.filter(i=>i.severity==="error").length," errors \xB7 ",e.issues.filter(i=>i.severity==="warning").length," warnings \xB7 ",e.issues.filter(i=>i.severity==="info").length," notes"]})]}),(0,$.jsxs)("p",{className:"ri-diagnosticsSource",children:[e.source.name??"Loaded asset"," ",(0,$.jsx)("span",{children:e.source.format?.toUpperCase()})]}),(0,$.jsxs)("details",{className:"ri-diagnosticsDetail",children:[(0,$.jsx)("summary",{children:"Asset statistics"}),(0,$.jsxs)("dl",{className:"ri-diagnosticsMetrics",children:[(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Source"}),(0,$.jsx)("dd",{children:e.source.name??"Loaded asset"})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Format"}),(0,$.jsx)("dd",{children:e.source.format?.toUpperCase()??"Unknown"})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Source file size"}),(0,$.jsx)("dd",{children:yl(e.source.sourceBytes)})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Initial asset load"}),(0,$.jsx)("dd",{children:e.source.loadDurationMs==null?"Unknown":`${(e.source.loadDurationMs/1e3).toFixed(2)} s`})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Units"}),(0,$.jsx)("dd",{children:e.units==="unknown"?"Unknown \u2014 verify scale":e.units})]}),e.bounds&&(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Bounds (scene units)"}),(0,$.jsx)("dd",{children:e.bounds.size.map(i=>Number(i.toPrecision(4))).join(" \xD7 ")})]}),e.statistics&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Meshes / instances"}),(0,$.jsxs)("dd",{children:[fo(e.statistics.meshes)," / ",fo(e.statistics.instances)]})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Unique triangles"}),(0,$.jsx)("dd",{children:fo(e.statistics.triangles)})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Unique vertices"}),(0,$.jsx)("dd",{children:fo(e.statistics.vertices)})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Materials / textures"}),(0,$.jsxs)("dd",{children:[fo(e.statistics.materials)," / ",fo(e.statistics.textures)]})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Geometry buffers"}),(0,$.jsx)("dd",{children:yl(e.statistics.geometryBytes)})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Texture memory estimate"}),(0,$.jsxs)("dd",{children:[yl(e.statistics.estimatedTextureBytes),e.statistics.unknownTextureSizes?` + ${e.statistics.unknownTextureSizes} unknown`:""]})]})]})]}),(0,$.jsxs)("p",{className:"ri-diagnosticsNote",children:[e.scope==="resident-tiles"?"Counts cover loaded tiles only. ":"Counts include loaded hidden meshes. ","Buffer sizes and texture memory are estimates, not a GPU memory budget. Units do not verify physical scale."]})]}),(0,$.jsx)("div",{className:"ri-diagnosticsIssues",children:e.issues.map((i,o)=>(0,$.jsxs)("details",{className:`ri-diagnosticsIssue ri-diagnosticsIssue--${i.severity}`,children:[(0,$.jsxs)("summary",{children:[(0,$.jsx)("span",{className:"ri-diagnosticsSeverity",children:i.severity}),i.title,i.count!==void 0&&(0,$.jsx)("span",{className:"ri-diagnosticsCount",children:fo(i.count)})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("p",{children:i.detail}),(0,$.jsx)("p",{className:"ri-diagnosticsFix",children:i.suggestion}),!!i.objects?.length&&(0,$.jsx)("ul",{"aria-label":`Affected objects: ${i.title}`,children:i.objects.map((a,s)=>(0,$.jsx)("li",{children:r&&!["failed-resources","large-textures"].includes(i.code)?(0,$.jsx)("button",{type:"button",onClick:()=>r(a),children:a}):a},`${a}-${s}`))}),i.count&&i.count>(i.objects?.length??0)&&i.objects&&(0,$.jsxs)("small",{children:["Showing the first ",i.objects.length," of ",fo(i.count),"."]})]})]},`${i.code}-${o}`))}),!!e.textures.length&&(0,$.jsxs)("details",{className:"ri-diagnosticsDetail",children:[(0,$.jsxs)("summary",{children:["Texture dimensions (",e.textures.length,")"]}),(0,$.jsx)("ul",{children:e.textures.map((i,o)=>(0,$.jsxs)("li",{children:[(0,$.jsx)("strong",{children:i.name}),(0,$.jsxs)("span",{children:[i.width??"?"," \xD7 ",i.height??"?",i.compressed?" \xB7 compressed":""," \xB7 ",yl(i.estimatedBytes)]})]},o))})]}),!!e.extensions.length&&(0,$.jsxs)("details",{className:"ri-diagnosticsDetail",children:[(0,$.jsxs)("summary",{children:["glTF extensions (",e.extensions.length,")"]}),(0,$.jsx)("ul",{children:e.extensions.map(i=>(0,$.jsxs)("li",{children:[(0,$.jsx)("strong",{children:i.name}),(0,$.jsxs)("span",{children:[i.recognized?"Recognized":"Not recognized",i.required?" \xB7 required":" \xB7 optional"]})]},i.name))}),(0,$.jsx)("p",{className:"ri-diagnosticsNote",children:"Recognized by the bundled loader; compressed formats still require configured decoders and device support."})]})]}):(0,$.jsx)("p",{className:"ri-diagnosticsNote",role:"status",children:"Waiting for the active asset to load\u2026"}),(0,$.jsxs)("details",{className:"ri-diagnosticsDetail ri-diagnosticsRuntimeDetail",children:[(0,$.jsx)("summary",{children:"Runtime statistics \xB7 live"}),(0,$.jsxs)("section",{className:"ri-diagnosticsRuntime","aria-label":"Runtime statistics",children:[(0,$.jsxs)("h4",{children:["Runtime statistics ",(0,$.jsx)("span",{children:"Live \xB7 this canvas"})]}),t?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)("dl",{className:"ri-diagnosticsMetrics",children:[(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Renderer / render loop"}),(0,$.jsxs)("dd",{children:[t.renderer.toUpperCase()," / ",t.renderMode]})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Draw calls (last pass)"}),(0,$.jsx)("dd",{children:$b(t.drawCalls)})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Triangles (last pass)"}),(0,$.jsx)("dd",{children:$b(t.triangles)})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Frame interval / FPS"}),(0,$.jsx)("dd",{children:t.frameIntervalMs===null?"Idle / no active frame sample":`${t.frameIntervalMs.toFixed(1)} ms / ${t.fps?.toFixed(0)}`})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Quality profile"}),(0,$.jsxs)("dd",{children:[t.quality.profile," \xB7 ",t.quality.reducedGpuLoad?"reduced GPU load":"full quality"]})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Pixel ratio"}),(0,$.jsx)("dd",{children:t.quality.dpr.toFixed(2)})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Shadows / post FX"}),(0,$.jsxs)("dd",{children:[t.quality.shadows?"On":"Off"," / ",t.quality.postProcessing?"Allowed":"Skipped"]})]}),t.streaming&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Tile cache / base budget"}),(0,$.jsxs)("dd",{children:[yl(t.streaming.cachedBytes)," / ",yl(t.streaming.budgetBytes)]})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Cached / loading / parsing tiles"}),(0,$.jsxs)("dd",{children:[$b(t.streaming.cachedTiles)," / ",t.streaming.downloading," / ",t.streaming.parsing]})]}),(0,$.jsxs)("div",{children:[(0,$.jsx)("dt",{children:"Detail / error target"}),(0,$.jsxs)("dd",{children:["\xD7",t.streaming.detailFactor.toFixed(1)," / ",t.streaming.errorTarget.toFixed(1)]})]})]})]}),t.streaming&&(t.streaming.cacheFull||t.streaming.detailFactor>1)&&(0,$.jsxs)("p",{className:"ri-diagnosticsPressure",children:[t.streaming.cacheFull?"Tile cache is full. ":"",t.streaming.detailFactor>1?"Detail was reduced by the existing memory-pressure safeguard. ":"","Try smaller textures or a larger cache budget when the device can support it."]}),(0,$.jsx)("p",{className:"ri-diagnosticsNote",children:"Frame intervals describe active frame callbacks, not CPU/GPU execution time. Long demand-loop idle gaps are excluded. Draw counts may reflect a post-processing pass. Sampling does not keep rendering awake."})]}):(0,$.jsx)("p",{className:"ri-diagnosticsNote",children:"Collecting a sample\u2026"})]})]})]})}var xr=require("react"),KL={sequenceId:null,time:0,duration:0,status:"stopped",previewing:!1,ready:!1,issues:[]},ZL=()=>()=>{},BT=()=>KL;function NT(){let[e,t]=(0,xr.useState)(null),n=(0,xr.useSyncExternalStore)(e?.subscribe??ZL,e?.getState??BT,BT);(0,xr.useEffect)(()=>()=>e?.stop(),[e]);let r=(0,xr.useCallback)(i=>t(i),[]);return{controls:e,playback:n,handleSequencesReady:r,play:(0,xr.useCallback)(i=>e?.play(i)??!1,[e]),pause:(0,xr.useCallback)(()=>e?.pause(),[e]),stop:(0,xr.useCallback)(()=>e?.stop(),[e]),seek:(0,xr.useCallback)(i=>e?.seek(i)??!1,[e]),select:(0,xr.useCallback)(i=>e?.select(i)??!1,[e])}}0&&(module.exports={ACTION_CATALOG,AssetDiagnosticsPanel,CompareViewer,DEFAULT_MODEL_VIEWER_LABELS,DEFAULT_SCENE_CONFIG,DEFAULT_SECTION_CONFIG,MATERIAL_BLENDING_MODES,MATERIAL_SIDES,MAX_VIEWER_STATE_BYTES,MEASUREMENT_UNITS,MODEL_VIEWER_PRESETS,ModelViewer,SEQUENCE_EASINGS,SEQUENCE_OBJECT_PROPERTIES,applyIsolation,applyStyleRules,buildBindingsFromNodes,calibrateMeasurements,chooseMaterialVariant,collectObjectHierarchy,colorScaleValue,compareViewerConfigurations,copyBindingStyle,createARHandoffUrl,createDefaultBinding,defineObjectBindings,exportConfiguredUSDZ,findCatalogAction,groundAsset,inferType,inspectAsset,isolatedBindingKeys,material,measurementResult,measurementScale,measurementValue,measurementsToCsv,parseAssetTransform,parseMeasurements,parseSectionConfig,parseSelectionSets,parseSequences,parseViewerState,pasteBindingStyle,patchBindings,patchSceneConfig,prepareViewerState,readARHandoffUrl,sampleSequenceTrack,sceneLight,sectionSnapshot,selectBindingKeys,selectBindings,serializeMeasurements,serializeViewerState,snapAssetToGrid,upsertSequenceKeyframe,useObjectBinding,useObjectBindingIds,useObjectBindings,useSceneConfig,useShareableViewerState,useViewer,useViewerActions,useViewerAnimations,useViewerCamera,useViewerConnection,useViewerEffects,useViewerHover,useViewerIsolation,useViewerModel,useViewerModels,useViewerSelection,useViewerSequences});
3795
+ import "${C2[e]}";`))},T2)};return document.readyState==="complete"?(r(),()=>clearTimeout(n)):(window.addEventListener("load",r,{once:!0}),()=>{window.removeEventListener("load",r),clearTimeout(n)})},[e,t])}var CP=require("react/jsx-runtime");function Cs(e){return _P("model-viewer","ModelViewer"),(0,CP.jsx)(Ey,{...wP(e,xP)})}var ju=require("react"),Il=require("lucide-react"),Ie=require("react/jsx-runtime");function vf(e){return e===void 0?"Not set":JSON.stringify(e)}var Oy={changes:"Changes only",all:"All objects",added:"Added",removed:"Removed",modified:"Modified",unchanged:"Unchanged",ambiguous:"Unmatched"},TP={all:"All categories",identity:"Identity",appearance:"Appearance",transform:"Transform",visibility:"Visibility",data:"Data",behavior:"Behavior"};function PP({change:e}){return(0,Ie.jsxs)("div",{className:"ri-semanticPanel__change",children:[(0,Ie.jsx)("code",{title:e.path,children:e.path}),(0,Ie.jsxs)("span",{children:[(0,Ie.jsx)("del",{title:vf(e.before),children:vf(e.before)}),(0,Ie.jsx)(Il.ArrowRight,{size:11,"aria-hidden":"true"}),(0,Ie.jsx)("ins",{title:vf(e.after),children:vf(e.after)})]})]})}function AP({report:e,selected:t,onSelect:n,onClear:r,matchBy:i,onMatchByChange:o,showOutlines:a,onShowOutlinesChange:s}){let[l,c]=(0,ju.useState)(!0),[u,p]=(0,ju.useState)(""),[d,m]=(0,ju.useState)("changes"),[f,b]=(0,ju.useState)("all"),g=e.objects.filter(h=>(d==="all"||(d==="changes"?h.status!=="unchanged":h.status===d))&&(f==="all"||h.changes.some(v=>v.category===f))&&`${h.label} ${h.identity}`.toLowerCase().includes(u.toLowerCase())),y=()=>{let h=URL.createObjectURL(new Blob([JSON.stringify(e,null,2)],{type:"application/json"})),v=document.createElement("a");v.href=h,v.download="configuration-comparison.json",v.click(),setTimeout(()=>URL.revokeObjectURL(h),1e3)};return(0,Ie.jsxs)("aside",{className:"ri-semanticPanel","aria-label":"Configuration comparison",onPointerDown:h=>h.stopPropagation(),children:[(0,Ie.jsxs)("button",{className:"ri-semanticPanel__heading",type:"button","aria-expanded":l,onClick:()=>c(!l),children:[(0,Ie.jsx)(Il.ChevronRight,{size:13,"aria-hidden":"true",className:l?"ri-semanticPanel__chevron--open":void 0}),"Changes",(0,Ie.jsxs)("span",{className:"ri-semanticPanel__counts",children:[(0,Ie.jsxs)("span",{"data-status":"added",title:`${e.counts.added} added`,children:["+",e.counts.added]}),(0,Ie.jsxs)("span",{"data-status":"removed",title:`${e.counts.removed} removed`,children:["\u2212",e.counts.removed]}),(0,Ie.jsxs)("span",{"data-status":"modified",title:`${e.counts.modified} modified`,children:["~",e.counts.modified]})]})]}),l&&(0,Ie.jsxs)("div",{className:"ri-semanticPanel__body",children:[o&&(0,Ie.jsxs)("details",{children:[(0,Ie.jsx)("summary",{children:"Matching"}),(0,Ie.jsxs)("label",{children:["Match by",(0,Ie.jsxs)("select",{"aria-label":"Match objects by",value:typeof i=="object"?"metadata":i??"modelObjectId",onChange:h=>o(h.target.value==="metadata"?{metadataKey:"partId"}:h.target.value),children:[(0,Ie.jsx)("option",{value:"modelObjectId",children:"Model object ID"}),(0,Ie.jsx)("option",{value:"id",children:"Binding ID"}),(0,Ie.jsx)("option",{value:"metadata",children:"Metadata value"})]})]}),typeof i=="object"&&(0,Ie.jsxs)("label",{children:["Key",(0,Ie.jsx)("input",{"aria-label":"Comparison metadata key",value:i.metadataKey,onChange:h=>o({metadataKey:h.target.value})})]})]}),(0,Ie.jsx)("input",{className:"ri-semanticPanel__search","aria-label":"Search comparison",placeholder:"Filter objects",value:u,onChange:h=>p(h.target.value)}),(0,Ie.jsxs)("div",{className:"ri-semanticPanel__filters",children:[(0,Ie.jsx)("select",{"aria-label":"Filter comparison status",value:d,onChange:h=>m(h.target.value),children:Object.keys(Oy).map(h=>(0,Ie.jsx)("option",{value:h,children:Oy[h]},h))}),(0,Ie.jsx)("select",{"aria-label":"Filter change category",value:f,onChange:h=>b(h.target.value),children:Object.keys(TP).map(h=>(0,Ie.jsx)("option",{value:h,children:TP[h]},h))})]}),(0,Ie.jsxs)("div",{className:"ri-semanticPanel__rows",children:[g.map(h=>(0,Ie.jsxs)("div",{className:"ri-semanticPanel__row","data-status":h.status,children:[(0,Ie.jsxs)("button",{type:"button","aria-pressed":t===h.id,onClick:()=>n(h),children:[(0,Ie.jsx)("span",{children:h.label}),(0,Ie.jsx)("small",{children:Oy[h.status]})]}),t===h.id&&(0,Ie.jsxs)("div",{className:"ri-semanticPanel__details",children:[h.message&&(0,Ie.jsx)("p",{children:h.message}),h.changes.map(v=>(0,Ie.jsx)(PP,{change:v},v.path)),!h.changes.length&&!h.message&&(0,Ie.jsx)("p",{children:h.status==="unchanged"?"No authored changes.":`Object ${h.status}.`})]})]},h.id)),!g.length&&(0,Ie.jsx)("p",{className:"ri-semanticPanel__empty",children:"No matching objects."})]}),e.sceneChanges.length>0&&(0,Ie.jsxs)("details",{children:[(0,Ie.jsxs)("summary",{children:["Scene changes (",e.sceneChanges.length,")"]}),(0,Ie.jsx)("div",{className:"ri-semanticPanel__details",children:e.sceneChanges.map(h=>(0,Ie.jsx)(PP,{change:h},h.path))})]}),(0,Ie.jsxs)("div",{className:"ri-semanticPanel__footer",title:"Compares authored bindings and settings. Geometry changes inside model files are not detected.",children:[(0,Ie.jsxs)("label",{className:"ri-semanticPanel__outlineToggle",children:[(0,Ie.jsx)("input",{type:"checkbox",checked:a,onChange:h=>s(h.target.checked)}),"Outlines"]}),t&&r&&(0,Ie.jsx)("button",{type:"button",onClick:r,children:"Clear focus"}),(0,Ie.jsxs)("button",{type:"button",onClick:y,children:[(0,Ie.jsx)(Il.Download,{size:12,"aria-hidden":"true"}),"Report"]})]})]})]})}var OP={id:"identity",modelObjectId:"identity",label:"identity",type:"identity",group:"identity",tags:"identity",style:"appearance",decals:"appearance",transform:"transform",visible:"visibility",removed:"visibility",status:"visibility",selectable:"behavior",hoverable:"behavior",actions:"behavior",cameraState:"behavior",metadata:"data",metrics:"data"},P2=Object.keys(OP),A2=new Set(["__proto__","prototype","constructor"]);function Ts(e,t=new Set){if(e==null||typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number"){if(!Number.isFinite(e))throw new Error("Comparison values must be finite JSON data");return e}if(typeof e!="object"||t.has(e))throw new Error("Comparison values must be acyclic JSON data");t.add(e);let n=Array.isArray(e)?e.map(r=>Ts(r,t)):Object.fromEntries(Object.entries(e).filter(([r,i])=>!A2.has(r)&&i!==void 0).map(([r,i])=>[r,Ts(i,t)]));return t.delete(e),n}var EP=e=>e&&typeof e=="object"&&!Array.isArray(e)&&!Object.keys(e).length;function RP(e,t){let n=Ts(e);n.visible=e.visible??!0,n.selectable=e.selectable??!0,n.hoverable=e.hoverable??!0,n.status=e.status??"normal",n.type=e.type??"other",n.tags=[...new Set(e.tags??[])].sort(),EP(n.transform)&&delete n.transform,n.metadata=Object.fromEntries(Object.entries(e.metadata??{}).filter(([r])=>!t.includes(r)));for(let r of["metrics","style","metadata"])EP(n[r])&&delete n[r];for(let r of["actions","decals"])Array.isArray(n[r])&&!n[r].length&&delete n[r];return n}function xf(e,t,n,r,i,o){let a=l=>l===void 0||Array.isArray(l)&&l.length===0;if(Object.is(e,t)||a(e)&&a(t)||typeof e=="number"&&typeof t=="number"&&Math.abs(e-t)<=i)return;let s=l=>!!l&&typeof l=="object"&&!Array.isArray(l);if(s(e)&&s(t)){for(let l of[...new Set([...Object.keys(e),...Object.keys(t)])].sort())xf(e[l],t[l],`${n}.${l}`,r,i,o);return}if(Array.isArray(e)&&Array.isArray(t)&&e.length===t.length){for(let l=0;l<e.length;l++)xf(e[l],t[l],`${n}[${l}]`,r,i,o);return}o.push({path:n,category:r,...e!==void 0?{before:Ts(e)}:{},...t!==void 0?{after:Ts(t)}:{}})}function wf(e,t,n={}){let r=n.tolerance??1e-6;if(!Number.isFinite(r)||r<0)throw new Error("Comparison tolerance must be finite and nonnegative");let i=Object.entries(e.objectBindings).filter(([,y])=>!y.removed),o=Object.entries(t.objectBindings).filter(([,y])=>!y.removed),a=new Map(i),s=new Map(o),l=new Set,c=new Set,u=[],p=y=>{let h=n.matchBy??"modelObjectId",v=typeof h=="object"?y.metadata?.[h.metadataKey]:y[h];return typeof v=="string"&&v.length>0||typeof v=="number"?`${typeof v}:${v}`:null};function d(y,h,v){let x=y===void 0?void 0:a.get(y),P=h===void 0?void 0:s.get(h),w=[];if(x||P){let E=x?RP(x,n.ignoreMetadataKeys??[]):{},S=P?RP(P,n.ignoreMetadataKeys??[]):{};for(let _ of P2)xf(E[_],S[_],_,OP[_],r,w)}let D=x?P?w.length?"modified":"unchanged":"removed":"added";u.push({id:JSON.stringify([y??null,h??null]),identity:v,label:P?.label??x?.label??P?.modelObjectId??x?.modelObjectId??v,status:D,beforeKey:y,afterKey:h,beforeObjectId:x?.modelObjectId,afterObjectId:P?.modelObjectId,changes:w}),y!==void 0&&l.add(y),h!==void 0&&c.add(h)}let m=new Set;for(let[y,h]of Object.entries(n.mapping??{})){if(!a.has(y)||!s.has(h)||m.has(h))throw new Error("Comparison mapping must reference existing, unique binding keys");m.add(h),d(y,h,`mapped:${y}`)}let f=new Map;for(let[y,h,v]of[[i,l,"a"],[o,c,"b"]])for(let[x,P]of y){if(h.has(x))continue;let w=p(P);if(w===null){u.push({id:JSON.stringify([v,x]),identity:"",label:P.label??P.modelObjectId,status:"ambiguous",...v==="a"?{beforeKey:x,beforeObjectId:P.modelObjectId}:{afterKey:x,afterObjectId:P.modelObjectId},changes:[],message:"Missing match identity. Supply an explicit mapping or another match field."});continue}let D=f.get(w)??{a:[],b:[]};D[v].push(x),f.set(w,D)}for(let[y,h]of f){if(h.a.length<=1&&h.b.length<=1){d(h.a[0],h.b[0],y);continue}for(let v of["a","b"])for(let x of h[v]){let P=(v==="a"?a:s).get(x);u.push({id:JSON.stringify([v,x]),identity:y,label:P.label??P.modelObjectId,status:"ambiguous",...v==="a"?{beforeKey:x,beforeObjectId:P.modelObjectId}:{afterKey:x,afterObjectId:P.modelObjectId},changes:[],message:"Duplicate match identity. Supply an explicit one-to-one mapping."})}}u.sort((y,h)=>y.label.localeCompare(h.label)||y.id.localeCompare(h.id));let b=[];xf(Ts(e.sceneConfig??{}),Ts(t.sceneConfig??{}),"sceneConfig","scene",r,b);let g={added:0,removed:0,modified:0,unchanged:0,ambiguous:0};for(let y of u)g[y.status]++;return{version:1,objects:u,counts:g,sceneChanges:b}}function Dy(e,t,n){let r={added:"#22c55e",removed:"#f87171",modified:"#fbbf24",unchanged:"#94a3b8",ambiguous:"#c084fc"};return e.objects.flatMap(i=>{let o=t==="before"?i.beforeObjectId:i.afterObjectId;return o&&(i.status!=="unchanged"||i.id===n)?[{objectId:o,color:i.id===n?"#22d3ee":r[i.status]}]:[]})}var Jt=require("react");var zu=require("three"),Uu=1e-6;function DP(){let e=[null,null],t=0,n=!1,r=new zu.Vector3,i=new zu.Vector3,o=new zu.Vector3,a=new zu.Vector3,s=(c,u)=>{let p=e[c],d=e[u];if(!p||!d)return;p.controls.getPosition(r,!1),p.controls.getTarget(o,!1),d.controls.getPosition(i,!1),d.controls.getTarget(a,!1);let m=p.controls.camera.zoom,f=p.controls.camera.fov,b=typeof f=="number"&&typeof d.controls.camera.fov=="number"&&Math.abs(f-d.controls.camera.fov)>=Uu;if(!(r.distanceToSquared(i)<Uu&&o.distanceToSquared(a)<Uu&&Math.abs(m-d.controls.camera.zoom)<Uu&&!b)){n=!0;try{b&&(d.controls.camera.fov=f,d.controls.camera.updateProjectionMatrix?.()),Math.abs(m-d.controls.camera.zoom)>=Uu&&d.controls.zoomTo(m,!1),d.controls.setLookAt(r.x,r.y,r.z,o.x,o.y,o.z,!1)}finally{n=!1}d.invalidate()}},l=c=>{n||(c===t?s(c,1-c):s(t,c))};return{attach(c,u,p){let d=e[c];if(d?.controls===u){d.invalidate=p;return}d?.detach();let m=()=>l(c),f=()=>{t=c};u.addEventListener("update",m),u.addEventListener("controlstart",f),e[c]={controls:u,invalidate:p,detach:()=>{u.removeEventListener("update",m),u.removeEventListener("controlstart",f)}},s(t,1-t)},setLeader(c){t=c},get leader(){return t},detach(){e.forEach(c=>c?.detach()),e[0]=e[1]=null}}}var Io=require("react/jsx-runtime"),Sf=.05,IP=.2,Fu=e=>Math.min(Math.max(Number.isFinite(e)?e:.5,0),1);function kP({split:e,onSplitChange:t,labels:n,containerRef:r,beforeAction:i}){let o=xe(),a=p=>{let d=r.current?.getBoundingClientRect();d&&d.width>0&&t(Fu((p-d.left)/d.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 d={ArrowLeft:e-Sf,ArrowDown:e-Sf,ArrowRight:e+Sf,ArrowUp:e+Sf,PageDown:e-IP,PageUp:e+IP,Home:0,End:1}[p.key];d!==void 0&&(p.preventDefault(),p.stopPropagation(),t(Fu(d)))},u=Math.round(e*100);return(0,Io.jsxs)(Io.Fragment,{children:[(0,Io.jsxs)("span",{className:"ri-compare__label ri-compare__label--before",hidden:e<.08,children:[n[0],i]}),(0,Io.jsx)("span",{className:"ri-compare__label ri-compare__label--after",hidden:e>.92,children:n[1]}),(0,Io.jsx)("div",{className:"ri-compare__divider",role:"slider",tabIndex:0,"aria-label":o("compareDivider"),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":u,"aria-valuetext":o("compareDividerValue",{before:n[0],after:n[1],percent:u,rest:100-u}),onPointerDown:s,onPointerMove:l,onKeyDown:c,children:(0,Io.jsx)("span",{className:"ri-compare__handle","aria-hidden":"true"})})]})}var Kn=require("react/jsx-runtime"),E2=Object.freeze({});function Iy(e){return(0,Kn.jsx)(Vd,{labels:e.labels,children:(0,Kn.jsx)(R2,{...e})})}function R2({before:e,after:t,layout:n="slider",split:r,onSplitChange:i,reveal:o="auto",semanticComparison:a=!1,showComparisonOutlines:s,onComparisonOutlinesChange:l,onComparisonChange:c,linkSections:u,...p}){let d=xe(),[m,f]=(0,Jt.useState)(o==="auto");(0,Jt.useEffect)(()=>{o==="auto"&&f(!0)},[o]);let[b,g]=(0,Jt.useState)(.5),[y,h]=(0,Jt.useState)(!0),v=s??y,x=re=>{s===void 0&&h(re),l?.(re)},P=Fu(r??b),w=(0,Jt.useCallback)(re=>{let ce=Fu(re);r===void 0&&g(ce),i?.(ce)},[r,i]),D=(0,Jt.useRef)([null,null]),[E,S]=(0,Jt.useState)([null,null]),[_,M]=(0,Jt.useState)(null),[C,T]=(0,Jt.useState)(null),I=[{...p,...e},{...p,...t}];(0,Jt.useEffect)(()=>M(null),[I[0].sceneConfig?.section,I[1].sceneConfig?.section]);let L=re=>{let ce=I[re].objectBindings;return ce&&typeof ce=="object"?ce:E[re]?.url===I[re].modelUrl?E[re].bindings:E2},B=L(0),N=L(1),R=(0,Jt.useMemo)(()=>a?wf({objectBindings:B,sceneConfig:I[0].sceneConfig},{objectBindings:N,sceneConfig:I[1].sceneConfig},typeof a=="object"?a:{}):null,[a,B,N,I[0].sceneConfig,I[1].sceneConfig]),O=R?JSON.stringify(R):"",V=(0,Jt.useRef)(null);(0,Jt.useEffect)(()=>{R&&V.current!==O&&(V.current=O,c?.(R))},[R,O,c]);let G=R?.objects.find(re=>re.id===C),Q=(0,Jt.useMemo)(()=>R?[Dy(R,"before",C),Dy(R,"after",C)]:null,[R,C]),$=(0,Jt.useMemo)(()=>DP(),[]);(0,Jt.useEffect)(()=>()=>$.detach(),[$]);let ne=[e,t],Z=(0,Jt.useMemo)(()=>[0,1].map(re=>(ce,he)=>{D.current[re]=ce,S(qe=>qe[re]?.bindings===ce.objectBindings&&qe[re]?.url===he?qe:qe.map((ie,tt)=>tt===re?{url:he,bindings:ce.objectBindings}:ie)),$.attach(re,ce.raw.controls,ce.invalidate)}),[$]),U=ne.map((re,ce)=>{let{label:he,...qe}=re,ie={preset:"minimal",...p,...qe},tt=qe.onViewerReady??p.onViewerReady;return{...ie,...u??!!a?{sceneConfig:{...ie.sceneConfig,section:_??I[1].sceneConfig?.section??Nr},onSceneConfigChange:ge=>{M(ge.section??Nr),(qe.onSceneConfigChange??p.onSceneConfigChange)?.(ge)}}:{},...Q?{comparisonHighlights:v?Q[ce]:void 0,selectedObject:ce===0?G?.beforeKey?B[G.beforeKey]:null:G?.afterKey?N[G.afterKey]:null}:{},onObjectSelect:ge=>{if((qe.onObjectSelect??p.onObjectSelect)?.(ge),R){let De=R.objects.find(Fe=>(ce===0?Fe.beforeObjectId:Fe.afterObjectId)===ge?.modelObjectId);T(De?.id??null)}},onViewerReady:ge=>{Z[ce](ge,ie.modelUrl),tt?.(ge)}}}),F=[e.label??d("compareBefore"),t.label??d("compareAfter")];(!U[0].modelUrl||!U[1].modelUrl)&&console.error("[react-immersive] CompareViewer needs a modelUrl, shared or on each side.");let te=(0,Jt.useRef)(null),ye=R?(0,Kn.jsx)(AP,{showOutlines:v,onShowOutlinesChange:x,report:R,selected:C,onSelect:re=>{T(re.id);let ce=re.afterObjectId?1:0,he=D.current[ce],qe=ce===1?re.afterObjectId:re.beforeObjectId,ie=qe?he?.raw.nodes[qe]:null;he&&ie&&($.setLeader(ce),he.raw.controls.fitToBox(ie,!0),he.invalidate())},onClear:()=>T(null)}):null;if(!m)return(0,Kn.jsx)(_p,{className:"ri-compare",background:Bc(p.backgroundColor,p.sceneConfig),poster:p.poster??t.poster??e.poster,onReveal:()=>f(!0)});if(n==="side-by-side")return(0,Kn.jsxs)("div",{className:"ri-compare ri-compare--sideBySide",children:[U.map((re,ce)=>(0,Kn.jsxs)("div",{className:"ri-compare__pane",children:[(0,Kn.jsx)(Cs,{...re}),(0,Kn.jsx)("span",{className:"ri-compare__label",children:F[ce]})]},ce)),ye]});let K=`${P*100}%`;return(0,Kn.jsxs)("div",{ref:te,className:"ri-compare ri-compare--slider",style:{"--ri-compare-split":K},children:[(0,Kn.jsx)("div",{className:"ri-compare__layer",children:(0,Kn.jsx)(Cs,{...U[0]})}),(0,Kn.jsx)("div",{className:"ri-compare__layer ri-compare__layer--after",children:(0,Kn.jsx)(Cs,{...U[1]})}),ye,(0,Kn.jsx)(kP,{split:P,onSplitChange:w,labels:[F[0],F[1]],containerRef:te})]})}var Sa=require("react");var Nt=require("react");var LP={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 BP(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n&&typeof n=="object"?{...n}:n]))}function O2(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function Mf(e){let[t,n]=(0,Nt.useState)(e),r=(0,Nt.useCallback)((M,C)=>{n(T=>C===void 0?uo(T,M):uo(T,M,C))},[]),i=(0,Nt.useCallback)((M,C)=>r(M,Yd(C)),[r]),o=(0,Nt.useCallback)((M,C)=>i(M,{baseColor:C}),[i]),a=(0,Nt.useCallback)((M,C,T="baseColor")=>{let I=LP[T],L=typeof C=="string"?{path:C}:C;r(M,{style:{material:{[I]:L}}})},[r]),s=(0,Nt.useCallback)((M,C="baseColor")=>{let T=LP[C];r(M,{style:{material:{[T]:void 0}}})},[r]),l=(0,Nt.useCallback)((M,C)=>{n(T=>{let I=dn(T,M);if(!I)return T;let L=BP(T[I]?.style?.material),B=pn(T,C);if(B.length===0)return T;let N=T;for(let R of B){let O=T[R];O&&(N===T&&(N={...T}),N[R]={...O,style:{...O.style,material:BP(L)}})}return N})},[]),c=(0,Nt.useCallback)(M=>r(M,{style:{material:void 0}}),[r]),u=(0,Nt.useCallback)((M,C)=>r(M,{transform:C}),[r]),p=(0,Nt.useCallback)(M=>r(M,{transform:void 0}),[r]),d=(0,Nt.useCallback)((M,C)=>r(M,{metadata:C}),[r]),m=(0,Nt.useCallback)((M,C)=>{n(T=>{let I=T;for(let L of pn(T,M)){let B=T[L],N=C(B.decals??[]);I===T&&(I={...T}),I[L]={...B,decals:N.length>0?N:void 0}}return I})},[]),f=(0,Nt.useCallback)((M,C)=>{let T=C.id??`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;return m(M,I=>[...I.filter(L=>L.id!==T),{...C,id:T}]),T},[m]),b=(0,Nt.useCallback)((M,C,T)=>m(M,I=>I.map(L=>L.id===C?{...L,...T}:L)),[m]),g=(0,Nt.useCallback)((M,C)=>m(M,T=>T.filter(I=>I.id!==C)),[m]),y=(0,Nt.useCallback)(M=>$d(t,M),[t]),h=(0,Nt.useCallback)(M=>pn(t,M).map(C=>t[C]?.id??C),[t]),v=(0,Nt.useCallback)(M=>{let C=dn(t,M);return C?t[C]?.style?.material??null:null},[t]),x=(0,Nt.useCallback)(M=>r(M,{visible:!1}),[r]),P=(0,Nt.useCallback)(M=>r(M,{visible:!0}),[r]),w=(0,Nt.useCallback)(M=>{n(C=>{let T=pn(C,M).reduce((I,L)=>{let B=C[L];return B&&I.push({ids:L,patch:{visible:B.visible===!1}}),I},[]);return uo(C,T)})},[n]),D=(0,Nt.useCallback)(()=>{n(M=>uo(M,Object.keys(M),{visible:!0}))},[n]),E=(0,Nt.useMemo)(()=>O2(t),[t]),S=(0,Nt.useMemo)(()=>Object.keys(E).map(M=>t[M]?.id??M),[E,t]),_=(0,Nt.useCallback)(M=>{let C=dn(t,M);return C?t[C]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:n,updateObjectBindings:r,setMaterial:i,setBaseColor:o,setTexture:a,clearTexture:s,copyMaterial:l,resetMaterial:c,getMaterial:v,setTransform:u,resetTransform:p,updateMetadata:d,addDecal:f,updateDecal:b,removeDecal:g,selectObjectBindings:y,selectObjectBindingIds:h,hiddenObjects:E,hiddenObjectIds:S,hideObject:x,showObject:P,toggleObjectVisibility:w,isObjectHidden:_,clearHiddenObjects:D}}var wn=require("react");function _f(e,t){return wc(e,t)}var D2={type:"point",color:"#ffffff",intensity:1,position:[0,0,0],distance:0,decay:2,attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0};function Cf(e){return{...D2,...e}}function Tf(e){let t=(0,wn.useRef)(null),[n,r]=(0,wn.useState)(()=>{let y=typeof e=="function"?e():e;return t.current=y,y}),i=(0,wn.useCallback)(y=>{r(h=>{let v=typeof y=="function"?y(h):y;return _f(h,v)})},[]),o=(0,wn.useCallback)(()=>{let y=t.current;y&&r(y)},[]),a=(0,wn.useCallback)((y,h)=>{i(v=>({lighting:{lights:v.lighting.lights.map(x=>x.id===y?{...x,...h}:x)}}))},[i]),s=(0,wn.useCallback)(y=>{i(h=>h.lighting.lights.some(v=>v.id===y.id)?{}:{lighting:{lights:[...h.lighting.lights,Cf(y)]}})},[i]),l=(0,wn.useCallback)(y=>{i(h=>({lighting:{lights:h.lighting.lights.filter(v=>v.id!==y)}}))},[i]),c=(0,wn.useCallback)((y,h)=>a(y,{intensity:h}),[a]),u=(0,wn.useCallback)((y,h)=>a(y,{color:h}),[a]),p=(0,wn.useCallback)(y=>a(y,{visible:!0}),[a]),d=(0,wn.useCallback)(y=>a(y,{visible:!1}),[a]),m=(0,wn.useCallback)(y=>{i(h=>({lighting:{lights:h.lighting.lights.map(v=>v.id===y?{...v,visible:!v.visible}:v)}}))},[i]),f=(0,wn.useCallback)((y,h)=>a(y,{attachment:h,attachedToCamera:!1}),[a]),b=(0,wn.useCallback)(y=>a(y,{attachment:void 0}),[a]),g=(0,wn.useMemo)(()=>({items:n.lighting.lights,get:y=>n.lighting.lights.find(h=>h.id===y),add:s,update:a,remove:l,setIntensity:c,setColor:u,show:p,hide:d,toggle:m,attach:f,detach:b}),[n.lighting.lights,s,a,l,c,u,p,d,m,f,b]);return{sceneConfig:n,setSceneConfig:r,updateSceneConfig:i,resetSceneConfig:o,lights:g}}var Pf=require("react");function Af({bindings:e,scene:t,camera:n,animations:r,isolation:i,onAction:o}){let{objectBindings:a,updateObjectBindings:s,showObject:l,hideObject:c,toggleObjectVisibility:u}=e,p=t?.updateSceneConfig,d=n?.focusObject,m=n?.fitScene,f=n?.resetView,b=n?.setCameraTarget,g=n?.setCameraState,y=r?.play,h=r?.pause,v=r?.stop,x=r?.setSpeed,P=r?.seek,w=i?.handleIsolationChange,D=(0,Pf.useCallback)(_=>{let M=dn(a,_);return M?a[M]?.actions??[]:[]},[a]),E=(0,Pf.useCallback)(async _=>{for(let M of _.action.effects??[]){if("objectBindings"in M){s(M.target,M.objectBindings);continue}if("sceneConfig"in M){p?.(M.sceneConfig);continue}if("isolation"in M){w?.(M.isolation);continue}if("visibility"in M){M.visibility==="show"?l(M.target):M.visibility==="hide"?c(M.target):u(M.target);continue}if("camera"in M){let T=M.camera;T.type==="focus-object"?await d?.(T.objectId??_.objectId):T.type==="fit-scene"?await m?.():T.type==="reset"?await f?.():T.type==="set-target"?await b?.(T.target,T.transition??!0):await g?.(T.state,T.transition??!0);continue}let C=M.animation;if(C.type==="play"){let{type:T,clip:I,...L}=C;y?.(I,L)}else C.type==="pause"?h?.(C.clip):C.type==="stop"?v?.(C.clip):C.type==="set-speed"?x?.(C.speed,C.clip):P?.(C.time,C.clip)}await o?.(_)},[m,d,c,o,h,y,f,P,x,g,b,w,l,v,u,s,p]),S=(0,Pf.useCallback)(async(_,M)=>{let C=dn(a,_);if(!C)return null;let T=a[C],I=T?.actions?.find(B=>B.id===M);if(!T||!I)return null;let L={objectId:C,action:I,binding:T};return await E(L),L},[E,a]);return{getActionsForObject:D,handleAction:E,runAction:S}}var Bn=require("react"),ky={currentClip:null,isPlaying:!1,speed:1,time:0,duration:0,active:[]};function Ef(){let e=(0,Bn.useRef)(null),t=(0,Bn.useRef)(null),[n,r]=(0,Bn.useState)([]),[i,o]=(0,Bn.useState)([]),[a,s]=(0,Bn.useState)(ky);(0,Bn.useEffect)(()=>()=>{t.current?.()},[]);let l=(0,Bn.useCallback)(g=>{t.current?.(),e.current=g,r(g.clips),o(g.clipDetails??g.clips.map(y=>({sourceName:y,duration:0}))),s(g.getState?.()??ky),t.current=g.subscribe?.(s)??null},[]),c=(0,Bn.useCallback)(()=>{t.current?.(),t.current=null,e.current=null,r([]),o([]),s(ky)},[]),u=(0,Bn.useCallback)(g=>{let y=e.current;y&&(g(y),!y.subscribe&&y.getState&&s(y.getState()))},[]),p=(0,Bn.useCallback)((g,y)=>u(h=>h.play(g,y)),[u]),d=(0,Bn.useCallback)(g=>u(y=>y.pause(g)),[u]),m=(0,Bn.useCallback)(g=>u(y=>y.stop(g)),[u]),f=(0,Bn.useCallback)((g,y)=>u(h=>h.setSpeed(g,y)),[u]),b=(0,Bn.useCallback)((g,y)=>u(h=>h.seek?.(g,y)),[u]);return{clips:n,clipDetails:i,...a,play:p,pause:d,stop:m,setSpeed:f,seek:b,handleAnimationsReady:l,clearAnimations:c}}var ko=require("react");function I2(e){return typeof e=="function"?e:e?.handleViewerReady??null}function Rf(...e){let t=(0,ko.useRef)(null),n=(0,ko.useRef)(e);n.current=e;let r=(0,ko.useCallback)(l=>{t.current=l;let c=new Set;for(let u of n.current){let p=I2(u);p&&!c.has(p)&&(c.add(p),p(l))}},[]),i=(0,ko.useCallback)(()=>t.current,[]),o=(0,ko.useCallback)(l=>{let c=t.current;return c?c.captureImage(l):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),a=(0,ko.useCallback)(()=>{let l=t.current;return l?(l.invalidate(),!0):!1},[]),s=(0,ko.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 at=require("react"),kl=require("three");var Ny=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],Of=1;function Df(e){return typeof e=="string"?[e]:e}function If(e,t=0,n=1){return Math.min(n,Math.max(t,e))}function Ly(e,t){return e+Math.random()*(t-e)}function NP([e,t],n){return e+(t-e)*n}function By([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 VP(e,t){let n=If(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 k2(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(n=>n instanceof kl.Material):[]}function L2(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 Ny){let r=e[n];typeof r=="number"&&(t[n]=r)}return t}function jP(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 Ny){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 B2(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 N2(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 kf(e={}){let t=(0,at.useRef)(e);t.current=e;let n=(0,at.useRef)(null),r=(0,at.useRef)(null),i=(0,at.useRef)(null),o=(0,at.useRef)(new Map),a=(0,at.useRef)(new Map),s=(0,at.useRef)(new Map),l=(0,at.useRef)(new Map),c=(0,at.useCallback)(R=>{let O=n.current;if(!O)return null;let V=dn(O.objectBindings,R);return O.raw.nodes[R]??(V?O.raw.nodes[V]:null)??(O.raw.scene?Lr(O.raw.scene,R):null)??null},[]),u=(0,at.useCallback)(R=>{let O=n.current;return O?typeof R=="object"&&!Array.isArray(R)?pn(O.objectBindings,R):Df(R).map(V=>dn(O.objectBindings,V)??V):typeof R=="string"?[R]:Array.isArray(R)?R:[]},[]),p=(0,at.useCallback)(()=>{n.current?.invalidate()},[]),d=(0,at.useCallback)((R,O)=>{let V=!1;for(let G of u(R)){let Q=c(G);if(Q)for(let $ of k2(Q))s.current.has($)||s.current.set($,L2($)),jP($,O),V=!0}return V},[c,u]),m=(0,at.useCallback)((R,O)=>{let V=d(R,O);return V&&p(),V},[p,d]),f=(0,at.useCallback)((R,O)=>{let V=!1;for(let G of u(R)){let Q=c(G);Q&&(l.current.has(Q)||l.current.set(Q,B2(Q)),N2(Q,O),V=!0)}return V},[c,u]),b=(0,at.useCallback)((R,O)=>{let V=f(R,O);return V&&p(),V},[p,f]),g=(0,at.useCallback)(R=>{let O=c(R);if(!O)return null;O.updateWorldMatrix(!0,!1);let V=O.getWorldPosition(new kl.Vector3);return[V.x,V.y,V.z]},[c]),y=(0,at.useCallback)(R=>{let O=a.current.get(R);return O?(O.light.removeFromParent(),O.light.dispose(),a.current.delete(R),p(),!0):!1},[p]),h=(0,at.useCallback)(R=>{let O=c(R.target);if(!O)return!1;let V=a.current.get(R.id),G=V?.light??new kl.PointLight;return V&&V.target!==R.target&&G.removeFromParent(),G.name=`react-immersive-runtime-light:${R.id}`,G.color.set(R.color??"#ffffff"),G.intensity=R.intensity??1,G.distance=R.distance??0,G.decay=R.decay??2,G.castShadow=R.castShadow??!1,G.position.set(...R.offset??[0,0,0]),G.parent!==O&&O.add(G),a.current.set(R.id,{light:G,target:R.target}),p(),!0},[p,c]),v=(0,at.useCallback)((R,O)=>{let V=a.current.get(R);if(!V)return!1;if(O.target&&O.target!==V.target){let G=c(O.target);if(!G)return!1;V.light.removeFromParent(),G.add(V.light),V.target=O.target}return O.color!==void 0&&V.light.color.set(O.color),O.intensity!==void 0&&(V.light.intensity=O.intensity),O.distance!==void 0&&(V.light.distance=O.distance),O.decay!==void 0&&(V.light.decay=O.decay),O.offset!==void 0&&V.light.position.set(...O.offset),O.castShadow!==void 0&&(V.light.castShadow=O.castShadow),p(),!0},[p,c]),x=(0,at.useCallback)((R,O)=>{let V=G=>O[G%O.length]??0;for(let G of R.materials??[])u(G.targets).forEach((Q,$)=>{let ne=V($),Z={};for(let U of Ny){let F=G.values[U];F&&(Z[U]=NP(F,ne))}d(Q,Z)});for(let G of R.transforms??[])u(G.targets).forEach((Q,$)=>{let ne=V($),Z={};G.values.position&&(Z.position=By(G.values.position,ne)),G.values.rotation&&(Z.rotation=By(G.values.rotation,ne)),G.values.scale&&(Z.scale=By(G.values.scale,ne)),f(Q,Z)});for(let G of R.lights??[])Df(G.lights).forEach((Q,$)=>{let ne=a.current.get(Q);ne&&(ne.light.intensity=NP(G.intensity,V($)))})},[u,d,f]),P=(0,at.useRef)(()=>{}),w=(0,at.useRef)(()=>{});w.current=R=>{i.current=null;let O=!1;for(let[V,G]of o.current){G.startedAt===null&&(G.startedAt=R);let Q=G.lastFrameAt??R;G.lastFrameAt=R;let $=G.override&&G.override.until>R?G.override.level:null;G.override&&$===null&&(G.override=null);let ne=G.update(R,R-G.startedAt,Math.min(100,R-Q),$);O=!0,ne||(o.current.delete(V),G.onComplete?.())}O&&p(),o.current.size>0&&P.current()},P.current=()=>{i.current!==null||typeof requestAnimationFrame>"u"||(i.current=requestAnimationFrame(R=>w.current(R)))};let D=(0,at.useCallback)(R=>(o.current.set(R.id,R),P.current(),R.id),[]),E=(0,at.useCallback)((R,O={})=>{let V=O.id??`transition-${Of++}`,G=Math.max(1,O.duration??400),Q=O.easing??"ease-in-out";return D({id:V,startedAt:null,lastFrameAt:null,override:null,onComplete:O.onComplete,update:($,ne,Z,U)=>{let F=U??VP(ne/G,Q);return x(R,[F]),ne<G}})},[x,D]),S=(0,at.useCallback)((R,O={})=>{let V=O.id??`pulse-${Of++}`,G=Math.max(1,O.duration??1e3),Q=O.minLevel??0,$=O.maxLevel??1,ne=O.repeat??1/0,Z=O.synchronized??!0,U=Math.max(1,...[...R.materials??[],...R.transforms??[]].map(F=>u(F.targets).length),...(R.lights??[]).map(F=>Df(F.lights).length));return D({id:V,startedAt:null,lastFrameAt:null,override:null,onComplete:O.onComplete,update:(F,te,se,ye)=>{let K=te/G,re=Array.from({length:Z?1:U},(ce,he)=>{if(ye!==null)return ye;let qe=K+(Z?0:he/U),ie=.5-Math.cos(qe%1*Math.PI*2)/2;return Q+($-Q)*ie});return x(R,re),ne===1/0||K<ne}})},[x,D,u]),_=(0,at.useCallback)((R,O={})=>{let V=O.id??`timeline-${Of++}`,G=O.repeat??1,Q=R.map(ne=>({...ne,duration:Math.max(1,ne.duration),hold:Math.max(0,ne.hold??0)})),$=Math.max(1,Q.reduce((ne,Z)=>ne+Z.duration+Z.hold,0));return D({id:V,startedAt:null,lastFrameAt:null,override:null,onComplete:O.onComplete,update:(ne,Z,U,F)=>{if(Q.length===0||G<=0)return!1;let te=Z/$;if(G!==1/0&&te>=G){for(let K of Q)x(K.channels,[1]);return!1}let se=Z%$,ye=0;for(let K of Q){let re=ye+K.duration,ce=re+K.hold;if(se>=re){x(K.channels,[F??1]),ye=ce;continue}if(se>=ye){let he=F??VP((se-ye)/K.duration,K.easing??"ease-in-out");x(K.channels,[he]);break}}return!0}})},[x,D]),M=(0,at.useCallback)((R,O={})=>{let V=O.id??`flicker-${Of++}`,G=O.synchronized??!0,Q=O.minLevel??.15,$=O.maxLevel??1,ne=O.interval??[45,160],Z=typeof ne=="number"?[ne,ne]:ne,U=[Math.max(1,Math.min(...Z)),Math.max(1,Math.max(...Z))],F=If(O.response??.7,.01,1),te=If(O.blackoutChance??.08),se=If(O.flashChance??.12),ye=O.flashLevel??1.15,K=Math.max(1,...[...R.materials??[],...R.transforms??[]].map(ie=>u(ie.targets).length),...(R.lights??[]).map(ie=>Df(ie.lights).length)),re=G?1:K,ce=Array.from({length:re},()=>Q),he=Array.from({length:re},()=>Q),qe=Array.from({length:re},()=>0);return D({id:V,startedAt:null,lastFrameAt:null,override:null,onComplete:O.onComplete,update:(ie,tt,ge,De)=>{for(let Fe=0;Fe<re;Fe+=1){if(De!==null)he[Fe]=De;else if(ie>=qe[Fe]){let Je=Math.random();he[Fe]=Je<te?Ly(0,Math.min(.04,Q)):Je<te+se?ye:Ly(Q,$),qe[Fe]=ie+Ly(...U)}let be=1-Math.pow(1-F,Math.max(1,ge)/16.67);ce[Fe]+=(he[Fe]-ce[Fe])*be}return x(R,ce),O.duration===void 0||tt<O.duration}})},[x,D,u]),C=(0,at.useCallback)((R,O,V)=>{let G=o.current.get(R);if(!G)return!1;let Q=typeof performance>"u"?Date.now():performance.now();return G.override={level:O,until:Q+Math.max(0,V)},P.current(),!0},[]),T=(0,at.useCallback)(R=>o.current.delete(R),[]),I=(0,at.useCallback)(()=>{o.current.clear(),i.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(i.current),i.current=null)},[]),L=(0,at.useCallback)(()=>{for(let[R,O]of s.current)jP(R,O);s.current.clear();for(let[R,O]of l.current)R.position.set(...O.position),R.rotation.set(...O.rotation),R.scale.set(...O.scale),R.visible=O.visible,R.updateMatrix(),R.updateMatrixWorld(!0);l.current.clear();for(let R of a.current.values())R.light.removeFromParent(),R.light.dispose();a.current.clear(),p()},[p]),B=(0,at.useCallback)(()=>{I(),L()},[L,I]),N=(0,at.useCallback)(R=>{r.current&&r.current!==R.raw.scene&&L(),n.current=R,r.current=R.raw.scene,t.current.onViewerReady?.(R)},[L]);return(0,at.useEffect)(()=>()=>{B(),n.current=null,r.current=null},[B]),{handleViewerReady:N,setMaterial:m,setTransform:b,getWorldPosition:g,addPointLight:h,updatePointLight:v,removePointLight:y,transition:E,timeline:_,pulse:S,flicker:M,overrideEffect:C,stopEffect:T,stopAllEffects:I,resetRuntime:B}}var Lf=require("react");function Bf(){let[e,t]=(0,Lf.useState)(null),n=(0,Lf.useCallback)(r=>{t(r)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:n}}var Gu=require("react");function Nf(e=null){let[t,n]=(0,Gu.useState)(e),r=(0,Gu.useCallback)((o,a)=>n({...a,target:o}),[]),i=(0,Gu.useCallback)(()=>n(null),[]);return{isolation:t,isolate:r,clearIsolation:i,handleIsolationChange:n}}var pr=require("react");function Vf(){let[e,t]=(0,pr.useState)(!0),[n,r]=(0,pr.useState)(!1),[i,o]=(0,pr.useState)(null),[a,s]=(0,pr.useState)(null),[l,c]=(0,pr.useState)(0),[u,p]=(0,pr.useState)([]),[d,m]=(0,pr.useState)([]),[f,b]=(0,pr.useState)([]),g=(0,pr.useCallback)(x=>{s(x.bounds),c(x.objectCount),p(x.materialVariants),m(x.materialVariantGroups),o(null),t(!1),r(!0)},[]),y=(0,pr.useCallback)(x=>b(x),[]),h=(0,pr.useCallback)(x=>{o(x),s(null),c(0),p([]),m([]),b([]),t(!1),r(!1)},[]),v=(0,pr.useCallback)(()=>{t(!0),r(!1),o(null),s(null),c(0),p([]),m([]),b([])},[]);return{isLoading:e,isReady:n,error:i,bounds:a,objectCount:l,materialVariants:u,materialVariantGroups:d,objects:f,handleModelLoaded:g,handleObjectCatalog:y,handleLoadError:h,resetModelState:v}}var Hu=require("react");function jf(e=null){let[t,n]=(0,Hu.useState)(e),r=(0,Hu.useCallback)(o=>{n(o)},[n]),i=(0,Hu.useCallback)(()=>{n(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:n,handleObjectSelect:r,clearSelection:i}}var V2={};function UP(e={}){let t=(0,Sa.useRef)(e);t.current=e;let n=(0,Sa.useRef)(e.bindings===void 0||e.bindings==="auto"),r=Mf(()=>{let E=t.current.bindings;return E===void 0||E==="auto"?V2:typeof E=="function"?E():E}),i=Tf(()=>{let E=t.current.sceneConfig;return E===void 0?nr:typeof E=="function"?E():E}),o=jf(),a=Bf(),s=Dd(e.camera),l=Vf(),c=Ef(),u=Nf(),p=kf(),d=Rf(s,p),m=Af({bindings:r,scene:i,camera:s,animations:c,isolation:u,onAction:e.onAction}),{setObjectBindings:f}=r,{handleObjectCatalog:b}=l,g=(0,Sa.useCallback)(E=>{b(E),n.current&&f(S=>{let _=af(E.map(M=>M.name));for(let M of Object.keys(_))S[M]&&(_[M]=S[M]);return _})},[b,f]),{handleObjectSelect:y}=o,h=(0,Sa.useCallback)(E=>{y(E),t.current.onObjectSelect?.(E)},[y]),{handleHoveredObject:v}=a,x=(0,Sa.useCallback)(E=>{v(E),t.current.onObjectHover?.(E)},[v]),{handleLoadError:P}=l,w=(0,Sa.useCallback)(E=>{P(E),t.current.onLoadError?.(E)},[P]),D=e.sceneConfig!==void 0||i.sceneConfig!==nr;return{props:{objectBindings:r.objectBindings,onObjectBindingsChange:f,selectedObject:o.selectedObjectBinding,onObjectSelect:h,onObjectHover:x,onCameraChange:s.handleCameraChange,onViewerReady:d.handleViewerReady,onModelLoaded:l.handleModelLoaded,onLoadError:w,onObjectCatalog:g,onAnimationsReady:c.handleAnimationsReady,onAction:m.handleAction,onSceneConfigChange:i.setSceneConfig,isolation:u.isolation,onIsolationChange:u.handleIsolationChange,...D?{sceneConfig:i.sceneConfig}:{}},bindings:r,selection:o,hover:a,camera:s,model:l,animations:c,actions:m,scene:i,isolation:u,effects:p,connection:d}}var zP=require("react");function FP(e,t){return(0,zP.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 GP=require("react");function HP(e){return(0,GP.useMemo)(()=>Object.values(e).map(t=>t.modelObjectId),[e])}function WP(e){return e}var wt=require("react");function j2(e,t){if(!e.objectBindings&&(!!e.hidden?.length||!!e.selected)&&Object.keys(t).length===0)return null;let r={};if(e.objectBindings)r.bindings=e.objectBindings;else 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.objectBindings??t,o=e.selected?dn(i,e.selected):null;r.selected=o?i[o]:null}return r}function qP(e){return JSON.stringify(e&&{modelUrl:e.modelUrl,activeModelId:e.activeModelId,tilesetUrl:e.tilesetUrl,mergeModels:e.mergeModels,models:e.models?.map(({id:t,url:n,mergeModels:r})=>({id:t,url:n,mergeModels:r}))})}function XP(e){let t=(0,wt.useRef)(e);t.current=e;let n=e.paramKey??"view",r=`${n}Id`,[i,o]=(0,wt.useState)(!1),a=(0,wt.useRef)(null),s=(0,wt.useRef)(null),l=(0,wt.useRef)(null),c=(0,wt.useRef)(null),u=(0,wt.useRef)(null),p=(0,wt.useRef)(null),d=(0,wt.useRef)(null),m=(0,wt.useRef)(null),f=(0,wt.useRef)(!0),b=(0,wt.useCallback)(C=>{let T=C instanceof Error?C:new Error(String(C));t.current.onError?t.current.onError(T):d.current!==T.message&&console.warn("[react-immersive]",T.message),d.current=T.message},[]),g=(0,wt.useCallback)(()=>{u.current!==null&&clearTimeout(u.current),u.current=null},[]);(0,wt.useEffect)(()=>(f.current=!0,()=>{f.current=!1,g()}),[g]);let y=(0,wt.useCallback)(()=>{let C=t.current,T=(C.mode??(C.configuration?"configuration":"view"))==="configuration";return{version:1,camera:C.cameraState??void 0,hidden:Object.values(C.objectBindings).filter(I=>I.visible===!1).map(I=>I.id),selected:C.selectedObjectBinding?.id??null,...T?{objectBindings:C.objectBindings,configuration:C.configuration}:{}}},[]),h=(0,wt.useCallback)(()=>Fi(y(),typeof window>"u"?void 0:window.location.href),[y]),v=(0,wt.useCallback)(()=>Qo(y(),typeof window>"u"?void 0:window.location.href),[y]),x=(0,wt.useCallback)((C,T,I=window.location.href)=>{let L=new URL(I),B=new URLSearchParams(L.hash.slice(1));if(B.delete(n),B.delete(r),B.set(T?r:n,C),L.hash=B.toString(),!T&&L.href.length>(t.current.maxUrlLength??65536))throw new Error("Viewer configuration is too large for an inline link. Save JSON instead, or configure storage for createShareUrl(). Uploaded images can make links large.");return L.href},[n,r]),P=(0,wt.useCallback)(()=>x(ts(h()),!1),[h,x]),w=(0,wt.useCallback)(async()=>{let C=window.location.href,T=t.current.storage,I=await v();if(!T)return x(ts(I),!1,C);let L=await T.save(I);if(typeof L!="string"||!L.trim()||L.length>2048)throw new Error("Viewer state storage returned an invalid id.");return x(L,!0,C)},[v,x]),D=(0,wt.useCallback)(()=>{if(g(),a.current||p.current)return;let C=P();window.history.replaceState(null,"",C),c.current=`inline:${new URL(C).hash}`},[g,P]),E=(0,wt.useCallback)(async()=>{let C=a.current;if(!C||s.current||!f.current)return!1;s.current=C,g();try{let T=t.current,I=C.state;if(I.configuration&&!C.configurationApplied){if(!T.onConfigurationChange)throw new Error("Restoring a full viewer configuration requires onConfigurationChange.");return C.configurationApplied=!0,T.onConfigurationChange(I.configuration),!1}if(I.configuration&&qP(T.configuration)!==qP(I.configuration)||T.isReady===!1)return!1;if(I.camera&&!C.cameraApplied){if(!await T.setCameraState(I.camera,!1)||a.current!==C||!f.current)return!1;C.cameraApplied=!0}T=t.current;let L=j2(I,T.objectBindings);return!L||a.current!==C?!1:(L.bindings&&T.onObjectBindingsChange(L.bindings),L.selected!==void 0&&T.setSelectedObjectBinding(L.selected),a.current=null,l.current=C.key,o(!0),!0)}catch(T){throw a.current===C&&(a.current=null),o(!1),T}finally{s.current=null,a.current&&a.current!==C&&f.current&&E().catch(b)}},[g,b]),S=(0,wt.useCallback)(async C=>{let T=Fi(C,window.location.href);g(),m.current=null,p.current=null;let I=new URLSearchParams(window.location.hash.slice(1));return c.current=I.has(n)?`inline:${window.location.hash}`:I.has(r)?`stored:${r}:${I.get(r)}`:null,l.current=null,a.current={key:`manual:${ts(T)}`,origin:"manual",state:T,configurationApplied:!1,cameraApplied:!1},o(!1),E()},[E,g,n,r]),_=(0,wt.useCallback)(async()=>{let C=new URLSearchParams(window.location.hash.slice(1)),T=C.get(n),I=C.get(r),L=T!==null?`inline:${window.location.hash}`:I!==null?`stored:${r}:${I}`:null;if(!L)return m.current=null,p.current=null,a.current?.origin==="manual"?E():(a.current=null,l.current=null,o(!0),!1);if(L===c.current||L===l.current)return a.current?.origin==="manual"?E():!1;if(a.current?.key===L)return E();g(),o(!1),m.current=L,a.current=null;let B=T;if(T===null){let R=t.current.storage;if(!R)throw new Error("This shared link requires a viewer state storage adapter.");(!p.current||p.current.key!==L)&&(p.current={key:L,promise:R.load(I)});let O=p.current;try{B=await O.promise}finally{p.current===O&&(p.current=null)}if(m.current!==L||!f.current)return!1;let V=a.current;if(V?.key===L||l.current===L)return V?E():!1}let N;try{N=Fi(B,window.location.href)}catch(R){throw R}return a.current={key:L,origin:"url",state:N,configurationApplied:!1,cameraApplied:!1},E()},[E,g,r,n]);(0,wt.useEffect)(()=>{a.current&&E().catch(b)}),(0,wt.useEffect)(()=>{let C=()=>{_().catch(b)};return window.addEventListener("hashchange",C),()=>window.removeEventListener("hashchange",C)},[_,b]);let M=null;if(e.autoSync!==!1&&i&&!a.current&&!p.current)try{M=ts(h())}catch{}return(0,wt.useEffect)(()=>{if(e.autoSync===!1||!i||a.current||p.current){g();return}if(M===null){try{h()}catch(C){b(C)}return}return u.current=setTimeout(()=>{u.current=null;try{D()}catch(C){b(C)}},Math.max(0,e.debounceMs??400)),g},[M,e.autoSync,e.debounceMs,i,g,h,D,b]),{getState:h,getStateAsync:v,restoreState:S,getShareUrl:P,createShareUrl:w,syncUrl:D,restoreFromUrl:_}}var Ai=require("react");var U2={};function $P(){return`asset-${globalThis.crypto.randomUUID()}`}function YP(e){let[t,n]=(0,Ai.useState)(e),[r,i]=(0,Ai.useState)(()=>e[0]?Pe(e[0]):""),o=t.find(f=>Pe(f)===r)??t[0],a=o?Pe(o):"",s=(0,Ai.useCallback)(f=>{n(b=>b.map(g=>Pe(g)===a?{...g,objectBindings:f}:g))},[a]),l=(0,Ai.useCallback)(f=>{n(b=>b.map(g=>Pe(g)===a?{...g,sceneConfig:f}:g))},[a]),c=(0,Ai.useCallback)(f=>i(b=>{let g=t.find(y=>y.url===f);return g?Pe(g):b}),[t]),u=(0,Ai.useCallback)(f=>{let b={...f,id:f.id??$P()};return n(g=>{if(g.some(y=>Pe(y)===b.id))throw new Error("Asset instance ID already exists.");return[...g,b]}),b.id},[]),p=(0,Ai.useCallback)(f=>{let b=t.find(x=>Pe(x)===f);if(!b)return null;let g=structuredClone(b);g.id=$P(),g.sceneConfig?.measurements&&(g.sceneConfig.measurements.items=g.sceneConfig.measurements.items.map(x=>({...x,modelId:g.id}))),g.label=`${b.label??"Asset"} copy`;let[y,h,v]=b.transform?.position??[0,0,0];return g.transform={...g.transform,position:[y+1,h,v]},n(x=>[...x,g]),g.id},[t]),d=(0,Ai.useCallback)(f=>{n(b=>b.filter(g=>Pe(g)!==f))},[]),m=(0,Ai.useCallback)((f,b)=>{let g=Zo(b);n(y=>y.map(h=>Pe(h)===f?{...h,transform:g}:h))},[]);return{modelUrl:o?.url??"",models:t,activeModelId:a,onModelChange:c,onActiveModelChange:i,objectBindings:U2,onObjectBindingsChange:s,sceneConfig:o?.sceneConfig,onSceneConfigChange:l,addModel:u,duplicateModel:p,removeModel:d,updateModelTransform:m}}var KP=["front","back","double"],ZP=["normal","additive"];function QP(e){gr(e);let t=[],n=[{node:e,path:"0",parentId:null}];for(;n.length;){let{node:i,path:o,parentId:a}=n.pop(),s=`node:${o}`,l=i.isMesh&&i.name?br(i):null;t.push({id:s,parentId:a,name:i.name||i.type||"Group",...l?{objectId:l}:{}});for(let c=i.children.length-1;c>=0;c--)n.push({node:i.children[c],path:`${o}/${c}`,parentId:s})}let r=new Set;for(let i=t.length-1;i>=0;i--){let o=t[i];(o.objectId||r.has(o.id))&&(r.add(o.id),o.parentId&&r.add(o.parentId))}return t.filter(i=>r.has(i.id))}function JP(e){return structuredClone(e.style??{})}function eA(e,t,n){let r=pn(e,t).filter(o=>!e[o].removed);if(!r.length)return e;let i={...e};for(let o of r)i[o]={...e[o],style:structuredClone(n)};return i}var X=require("react/jsx-runtime"),Lo=e=>e.toLocaleString(),Ll=e=>e==null?"Unknown":e>=1024*1024?`${(e/1024/1024).toFixed(1)} MiB`:`${(e/1024).toFixed(1)} KiB`,Vy=e=>e===null?"Unavailable":Lo(e);function jy({report:e,runtimeStats:t,onRefresh:n,onSelectObject:r}){return(0,X.jsxs)("div",{className:"ri-assetDiagnostics",children:[(0,X.jsxs)("div",{className:"ri-diagnosticsActions",children:[n&&(0,X.jsx)("button",{type:"button",disabled:!e||e.status==="failed",onClick:n,children:"Rescan asset"}),(0,X.jsx)("button",{type:"button",disabled:!e,onClick:()=>{Xi(new Blob([JSON.stringify({asset:e,runtime:t??null},null,2)],{type:"application/json"}),"asset-diagnostics.json")},children:"Download report"})]}),e?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)("div",{className:`ri-diagnosticsSummary ri-diagnosticsSummary--${e.issues.some(i=>i.severity==="error")?"error":e.issues.some(i=>i.severity==="warning")?"warning":"info"}`,children:[(0,X.jsx)("strong",{children:e.status==="failed"?"Asset could not be inspected":e.issues.some(i=>i.severity==="error")?"Issues need attention":e.issues.some(i=>i.severity==="warning")?"Review recommended":"No blocking issues found"}),(0,X.jsxs)("span",{children:[e.issues.filter(i=>i.severity==="error").length," errors \xB7 ",e.issues.filter(i=>i.severity==="warning").length," warnings \xB7 ",e.issues.filter(i=>i.severity==="info").length," notes"]})]}),(0,X.jsxs)("p",{className:"ri-diagnosticsSource",children:[e.source.name??"Loaded asset"," ",(0,X.jsx)("span",{children:e.source.format?.toUpperCase()})]}),(0,X.jsxs)("details",{className:"ri-diagnosticsDetail",children:[(0,X.jsx)("summary",{children:"Asset statistics"}),(0,X.jsxs)("dl",{className:"ri-diagnosticsMetrics",children:[(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Source"}),(0,X.jsx)("dd",{children:e.source.name??"Loaded asset"})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Format"}),(0,X.jsx)("dd",{children:e.source.format?.toUpperCase()??"Unknown"})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Source file size"}),(0,X.jsx)("dd",{children:Ll(e.source.sourceBytes)})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Initial asset load"}),(0,X.jsx)("dd",{children:e.source.loadDurationMs==null?"Unknown":`${(e.source.loadDurationMs/1e3).toFixed(2)} s`})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Units"}),(0,X.jsx)("dd",{children:e.units==="unknown"?"Unknown \u2014 verify scale":e.units})]}),e.bounds&&(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Bounds (scene units)"}),(0,X.jsx)("dd",{children:e.bounds.size.map(i=>Number(i.toPrecision(4))).join(" \xD7 ")})]}),e.statistics&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Meshes / instances"}),(0,X.jsxs)("dd",{children:[Lo(e.statistics.meshes)," / ",Lo(e.statistics.instances)]})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Unique triangles"}),(0,X.jsx)("dd",{children:Lo(e.statistics.triangles)})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Unique vertices"}),(0,X.jsx)("dd",{children:Lo(e.statistics.vertices)})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Materials / textures"}),(0,X.jsxs)("dd",{children:[Lo(e.statistics.materials)," / ",Lo(e.statistics.textures)]})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Geometry buffers"}),(0,X.jsx)("dd",{children:Ll(e.statistics.geometryBytes)})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Texture memory estimate"}),(0,X.jsxs)("dd",{children:[Ll(e.statistics.estimatedTextureBytes),e.statistics.unknownTextureSizes?` + ${e.statistics.unknownTextureSizes} unknown`:""]})]})]})]}),(0,X.jsxs)("p",{className:"ri-diagnosticsNote",children:[e.scope==="resident-tiles"?"Counts cover loaded tiles only. ":"Counts include loaded hidden meshes. ","Buffer sizes and texture memory are estimates, not a GPU memory budget. Units do not verify physical scale."]})]}),(0,X.jsx)("div",{className:"ri-diagnosticsIssues",children:e.issues.map((i,o)=>(0,X.jsxs)("details",{className:`ri-diagnosticsIssue ri-diagnosticsIssue--${i.severity}`,children:[(0,X.jsxs)("summary",{children:[(0,X.jsx)("span",{className:"ri-diagnosticsSeverity",children:i.severity}),i.title,i.count!==void 0&&(0,X.jsx)("span",{className:"ri-diagnosticsCount",children:Lo(i.count)})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("p",{children:i.detail}),(0,X.jsx)("p",{className:"ri-diagnosticsFix",children:i.suggestion}),!!i.objects?.length&&(0,X.jsx)("ul",{"aria-label":`Affected objects: ${i.title}`,children:i.objects.map((a,s)=>(0,X.jsx)("li",{children:r&&!["failed-resources","large-textures"].includes(i.code)?(0,X.jsx)("button",{type:"button",onClick:()=>r(a),children:a}):a},`${a}-${s}`))}),i.count&&i.count>(i.objects?.length??0)&&i.objects&&(0,X.jsxs)("small",{children:["Showing the first ",i.objects.length," of ",Lo(i.count),"."]})]})]},`${i.code}-${o}`))}),!!e.textures.length&&(0,X.jsxs)("details",{className:"ri-diagnosticsDetail",children:[(0,X.jsxs)("summary",{children:["Texture dimensions (",e.textures.length,")"]}),(0,X.jsx)("ul",{children:e.textures.map((i,o)=>(0,X.jsxs)("li",{children:[(0,X.jsx)("strong",{children:i.name}),(0,X.jsxs)("span",{children:[i.width??"?"," \xD7 ",i.height??"?",i.compressed?" \xB7 compressed":""," \xB7 ",Ll(i.estimatedBytes)]})]},o))})]}),!!e.extensions.length&&(0,X.jsxs)("details",{className:"ri-diagnosticsDetail",children:[(0,X.jsxs)("summary",{children:["glTF extensions (",e.extensions.length,")"]}),(0,X.jsx)("ul",{children:e.extensions.map(i=>(0,X.jsxs)("li",{children:[(0,X.jsx)("strong",{children:i.name}),(0,X.jsxs)("span",{children:[i.recognized?"Recognized":"Not recognized",i.required?" \xB7 required":" \xB7 optional"]})]},i.name))}),(0,X.jsx)("p",{className:"ri-diagnosticsNote",children:"Recognized by the bundled loader; compressed formats still require configured decoders and device support."})]})]}):(0,X.jsx)("p",{className:"ri-diagnosticsNote",role:"status",children:"Waiting for the active asset to load\u2026"}),(0,X.jsxs)("details",{className:"ri-diagnosticsDetail ri-diagnosticsRuntimeDetail",children:[(0,X.jsx)("summary",{children:"Runtime statistics \xB7 live"}),(0,X.jsxs)("section",{className:"ri-diagnosticsRuntime","aria-label":"Runtime statistics",children:[(0,X.jsxs)("h4",{children:["Runtime statistics ",(0,X.jsx)("span",{children:"Live \xB7 this canvas"})]}),t?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)("dl",{className:"ri-diagnosticsMetrics",children:[(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Renderer / render loop"}),(0,X.jsxs)("dd",{children:[t.renderer.toUpperCase()," / ",t.renderMode]})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Draw calls (last pass)"}),(0,X.jsx)("dd",{children:Vy(t.drawCalls)})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Triangles (last pass)"}),(0,X.jsx)("dd",{children:Vy(t.triangles)})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Frame interval / FPS"}),(0,X.jsx)("dd",{children:t.frameIntervalMs===null?"Idle / no active frame sample":`${t.frameIntervalMs.toFixed(1)} ms / ${t.fps?.toFixed(0)}`})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Quality profile"}),(0,X.jsxs)("dd",{children:[t.quality.profile," \xB7 ",t.quality.reducedGpuLoad?"reduced GPU load":"full quality"]})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Pixel ratio"}),(0,X.jsx)("dd",{children:t.quality.dpr.toFixed(2)})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Shadows / post FX"}),(0,X.jsxs)("dd",{children:[t.quality.shadows?"On":"Off"," / ",t.quality.postProcessing?"Allowed":"Skipped"]})]}),t.streaming&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Tile cache / base budget"}),(0,X.jsxs)("dd",{children:[Ll(t.streaming.cachedBytes)," / ",Ll(t.streaming.budgetBytes)]})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Cached / loading / parsing tiles"}),(0,X.jsxs)("dd",{children:[Vy(t.streaming.cachedTiles)," / ",t.streaming.downloading," / ",t.streaming.parsing]})]}),(0,X.jsxs)("div",{children:[(0,X.jsx)("dt",{children:"Detail / error target"}),(0,X.jsxs)("dd",{children:["\xD7",t.streaming.detailFactor.toFixed(1)," / ",t.streaming.errorTarget.toFixed(1)]})]})]})]}),t.streaming&&(t.streaming.cacheFull||t.streaming.detailFactor>1)&&(0,X.jsxs)("p",{className:"ri-diagnosticsPressure",children:[t.streaming.cacheFull?"Tile cache is full. ":"",t.streaming.detailFactor>1?"Detail was reduced by the existing memory-pressure safeguard. ":"","Try smaller textures or a larger cache budget when the device can support it."]}),(0,X.jsx)("p",{className:"ri-diagnosticsNote",children:"Frame intervals describe active frame callbacks, not CPU/GPU execution time. Long demand-loop idle gaps are excluded. Draw counts may reflect a post-processing pass. Sampling does not keep rendering awake."})]}):(0,X.jsx)("p",{className:"ri-diagnosticsNote",children:"Collecting a sample\u2026"})]})]})]})}var Er=require("react"),z2={sequenceId:null,time:0,duration:0,status:"stopped",previewing:!1,ready:!1,issues:[]},F2=()=>()=>{},tA=()=>z2;function nA(){let[e,t]=(0,Er.useState)(null),n=(0,Er.useSyncExternalStore)(e?.subscribe??F2,e?.getState??tA,tA);(0,Er.useEffect)(()=>()=>e?.stop(),[e]);let r=(0,Er.useCallback)(i=>t(i),[]);return{controls:e,playback:n,handleSequencesReady:r,play:(0,Er.useCallback)(i=>e?.play(i)??!1,[e]),pause:(0,Er.useCallback)(()=>e?.pause(),[e]),stop:(0,Er.useCallback)(()=>e?.stop(),[e]),seek:(0,Er.useCallback)(i=>e?.seek(i)??!1,[e]),select:(0,Er.useCallback)(i=>e?.select(i)??!1,[e])}}0&&(module.exports={ACTION_CATALOG,AssetDiagnosticsPanel,CompareViewer,DEFAULT_MODEL_VIEWER_LABELS,DEFAULT_SCENE_CONFIG,DEFAULT_SECTION_CONFIG,MATERIAL_BLENDING_MODES,MATERIAL_SIDES,MAX_VIEWER_STATE_BYTES,MEASUREMENT_UNITS,MODEL_VIEWER_PRESETS,ModelViewer,ProductOptions,SEQUENCE_EASINGS,SEQUENCE_OBJECT_PROPERTIES,applyIsolation,applyProductOptions,applyStyleRules,buildBindingsFromNodes,calibrateMeasurements,chooseMaterialVariant,collectObjectHierarchy,colorScaleValue,compareViewerConfigurations,copyBindingStyle,createARHandoffUrl,createDefaultBinding,decodeProductSelections,defaultProductSelections,defineObjectBindings,encodeProductSelections,evaluateProductConfiguration,exportConfiguredUSDZ,findCatalogAction,formatProductPrice,generateProductSkus,groundAsset,inferType,inspectAsset,isolatedBindingKeys,material,measurementResult,measurementScale,measurementValue,measurementsToCsv,parseAssetTransform,parseMeasurements,parseProductConfiguration,parseProductDefinition,parseSceneProduct,parseSectionConfig,parseSelectionSets,parseSequences,parseViewerState,pasteBindingStyle,patchBindings,patchSceneConfig,prepareViewerState,productCheckoutUrl,productDefinitionWarnings,productOptionStates,productPriceFromDefinition,readARHandoffUrl,resolveProductSelections,sampleSequenceTrack,sceneLight,sectionSnapshot,selectBindingKeys,selectBindings,serializeMeasurements,serializeProductConfiguration,serializeViewerState,snapAssetToGrid,upsertSequenceKeyframe,useObjectBinding,useObjectBindingIds,useObjectBindings,useProductConfigurator,useSceneConfig,useShareableViewerState,useViewer,useViewerActions,useViewerAnimations,useViewerCamera,useViewerConnection,useViewerEffects,useViewerHover,useViewerIsolation,useViewerModel,useViewerModels,useViewerSelection,useViewerSequences});