@liveroom-tech/react-immersive 4.2.3 → 4.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -3
- package/dist/index.mjs +3 -3
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3669,7 +3669,7 @@ void main() {
|
|
|
3669
3669
|
void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
|
|
3670
3670
|
outputColor = vec4(inputColor.rgb * exposure, inputColor.a);
|
|
3671
3671
|
}
|
|
3672
|
-
`,Ad=class extends sl.Effect{constructor(t=1){super("ExposureEffect",ix,{blendFunction:sl.BlendFunction.NORMAL,uniforms:new Map([["exposure",new Gh.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},Wh=(0,Va.forwardRef)(function({exposure:t},n){let i=(0,Va.useMemo)(()=>new Ad(t),[]);return i.exposure=t,(0,Va.useImperativeHandle)(n,()=>i,[i]),(0,Xh.jsx)("primitive",{object:i,dispose:null})});var na=require("@react-three/fiber"),qh=Zp(require("@react-three/postprocessing")),Yh=require("postprocessing"),ur=require("three"),dr=require("react"),Kh=require("react/jsx-runtime"),ax=qh.LensFlareEffect;function $h({config:e}){let t=(0,na.useThree)(p=>p.camera),n=(0,na.useThree)(p=>p.raycaster),i=(0,na.useThree)(p=>p.scene),r=(0,na.useThree)(p=>p.viewport),a=(0,dr.useRef)(null),o=(0,dr.useRef)(new ur.Vector3),s=(0,dr.useRef)(new ur.Vector2),c=(0,dr.useMemo)(()=>new ur.Vector3(...e.lensPosition),[e.lensPosition]),l=(0,dr.useMemo)(()=>new ur.Color(e.colorGain??"#141414"),[e.colorGain]),u=(0,dr.useMemo)(()=>new ur.Vector2(0,0),[]),d=(0,dr.useMemo)(()=>new ax({blendFunction:Yh.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:c,screenRes:u,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:l,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[l,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,c,u]);return(0,dr.useEffect)(()=>(a.current=d,()=>{d.dispose(),a.current=null}),[d]),(0,dr.useEffect)(()=>{let p=d.uniforms.get("screenRes");p&&(p.value.x=r.width,p.value.y=r.height)},[d,r]),(0,na.useFrame)((p,f)=>{let g=a.current;if(!g)return;let y=g.uniforms.get("lensPosition"),T=g.uniforms.get("opacity");if(!y||!T)return;let x=1;if(o.current.copy(c).project(t),o.current.z>1)return;y.value.x=o.current.x,y.value.y=o.current.y,s.current.x=o.current.x,s.current.y=o.current.y,n.setFromCamera(s.current,t);let h=n.intersectObjects(i.children,!0),{object:m}=h[0]||{};m&&(m.userData?.lensflare==="no-occlusion"?x=0:m instanceof ur.Mesh&&(m.material.uniforms?._transmission?.value>.2||m.material._transmission&&m.material._transmission>.2?x=.2:m.material.transparent&&(x=m.material.opacity))),T.value=ur.MathUtils.damp(T.value,x,12,f)}),(0,Kh.jsx)("primitive",{object:d,dispose:null})}var ll=require("@react-three/postprocessing"),Vn=require("postprocessing"),Zh=require("three");function Jh(e){return e==="linear"?Vn.ToneMappingMode.LINEAR:e==="reinhard"?Vn.ToneMappingMode.REINHARD:Vn.ToneMappingMode.ACES_FILMIC}function cl(e){switch(e){case"verySmall":return Vn.KernelSize.VERY_SMALL;case"small":return Vn.KernelSize.SMALL;case"medium":return Vn.KernelSize.MEDIUM;case"large":return Vn.KernelSize.LARGE;case"veryLarge":return Vn.KernelSize.VERY_LARGE;case"huge":return Vn.KernelSize.HUGE}}function Qh(e){switch(e){case"constantMild":return Vn.GlitchMode.CONSTANT_MILD;case"constantWild":return Vn.GlitchMode.CONSTANT_WILD;default:return Vn.GlitchMode.SPORADIC}}function Ed(e){let t=new Zh.Color(e);return[t.r,t.g,t.b,1]}function em(e){return e==="radial"?ll.RampType.Radial:e==="mirroredLinear"?ll.RampType.MirroredLinear:ll.RampType.Linear}var at=require("react/jsx-runtime"),ra={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new kr.Color(si.color).getHex(),hiddenEdgeColor:new kr.Color(si.color).multiplyScalar(.35).getHex(),kernelSize:Ci.KernelSize.VERY_SMALL,blur:!1,xRay:!1};function ox(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var Rd=[],sx=(0,yn.memo)(function({sceneConfig:t,selectedObjectRef:n,highlightOnHover:i=!1,disabled:r=!1,onOutlineEffect:a}){let o=(0,jo.useThree)(M=>M.scene),s=(0,jo.useThree)(M=>M.gl),c=(0,yn.useRef)(null),l=t?.postProcessing,u=n??null,d=l?.outline.enabled===!0,p=d||i,[f,g]=(0,yn.useState)(()=>s.xr?.isPresenting??!1);(0,yn.useEffect)(()=>{let M=s.xr;if(!M)return;let C=()=>g(!0),L=()=>g(!1);return M.addEventListener("sessionstart",C),M.addEventListener("sessionend",L),g(M.isPresenting),()=>{M.removeEventListener("sessionstart",C),M.removeEventListener("sessionend",L)}},[s]);let y=o.children.filter(M=>M.isLight),T=(0,yn.useMemo)(()=>new kr.Vector2(l?.chromaticAberration.offsetX??.002,l?.chromaticAberration.offsetY??.002),[l?.chromaticAberration.offsetX,l?.chromaticAberration.offsetY]),x=(0,yn.useMemo)(()=>new kr.Color(l?.outline.visibleEdgeColor??"#ffffff").getHex(),[l?.outline.visibleEdgeColor]),h=(0,yn.useMemo)(()=>new kr.Color(l?.outline.hiddenEdgeColor??"#22090a").getHex(),[l?.outline.hiddenEdgeColor]),m=(0,yn.useMemo)(()=>Ed(l?.ramp.startColor??"#000000"),[l?.ramp.startColor]),S=(0,yn.useMemo)(()=>Ed(l?.ramp.endColor??"#ffffff"),[l?.ramp.endColor]);return!l||f||r?null:(0,at.jsxs)(at.Fragment,{children:[l.godRays.enabled===!0&&(0,at.jsxs)("mesh",{ref:c,position:l.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,at.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,at.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,at.jsxs)(Be.EffectComposer,{multisampling:0,enableNormalPass:l.ssao.enabled===!0,autoClear:!1,children:[l.smaa.enabled===!0&&(0,at.jsx)(Be.SMAA,{}),l.ssao.enabled===!0&&(0,at.jsx)(Be.SSAO,{samples:l.ssao.samples,rings:l.ssao.rings,intensity:l.ssao.intensity,radius:l.ssao.radius,bias:l.ssao.bias,luminanceInfluence:l.ssao.luminanceInfluence,fade:l.ssao.fade,minRadiusScale:l.ssao.minRadiusScale,worldDistanceThreshold:l.ssao.worldDistanceThreshold,worldDistanceFalloff:l.ssao.worldDistanceFalloff,worldProximityThreshold:l.ssao.worldProximityThreshold,worldProximityFalloff:l.ssao.worldProximityFalloff}),l.autofocus.enabled===!0&&(0,at.jsx)(Be.Autofocus,{focusDistance:l.autofocus.focusDistance,focusRange:l.autofocus.focusRange,focalLength:l.autofocus.focalLength,bokehScale:l.autofocus.bokehScale,target:l.autofocus.target,mouse:l.autofocus.mouse,debug:l.autofocus.debug||void 0,manual:l.autofocus.manual,smoothTime:l.autofocus.smoothTime}),l.autofocus.enabled!==!0&&l.depthOfField.enabled===!0&&(0,at.jsx)(Be.DepthOfField,{focusDistance:l.depthOfField.focusDistance,focusRange:l.depthOfField.focusRange,focalLength:l.depthOfField.focalLength,bokehScale:l.depthOfField.bokehScale}),l.bloom.enabled===!0&&(0,at.jsx)(Be.Bloom,{intensity:l.bloom.intensity,luminanceThreshold:l.bloom.luminanceThreshold,luminanceSmoothing:l.bloom.luminanceSmoothing,mipmapBlur:l.bloom.mipmapBlur,radius:l.bloom.radius,levels:l.bloom.levels}),l.selectiveBloom.enabled===!0&&(0,at.jsx)(Be.SelectiveBloom,{selection:u??void 0,lights:y,selectionLayer:l.selectiveBloom.selectionLayer,intensity:l.selectiveBloom.intensity,luminanceThreshold:l.selectiveBloom.luminanceThreshold,luminanceSmoothing:l.selectiveBloom.luminanceSmoothing,kernelSize:cl(l.selectiveBloom.kernelSize),mipmapBlur:l.selectiveBloom.mipmapBlur,inverted:l.selectiveBloom.inverted,ignoreBackground:l.selectiveBloom.ignoreBackground}),p&&(0,at.jsx)(Be.Outline,{ref:a,selection:Rd,selectionLayer:l.outline.selectionLayer,blendFunction:Ci.BlendFunction.SCREEN,edgeStrength:d?l.outline.edgeStrength:ra.edgeStrength,pulseSpeed:d?l.outline.pulseSpeed:ra.pulseSpeed,visibleEdgeColor:d?x:ra.visibleEdgeColor,hiddenEdgeColor:d?h:ra.hiddenEdgeColor,kernelSize:d?cl(l.outline.kernelSize):ra.kernelSize,blur:d?l.outline.blur:ra.blur,xRay:d?l.outline.xRay:ra.xRay}),l.chromaticAberration.enabled===!0&&(0,at.jsx)(Be.ChromaticAberration,{offset:T,radialModulation:l.chromaticAberration.radialModulation,modulationOffset:l.chromaticAberration.modulationOffset}),l.colorAverage.enabled===!0&&(0,at.jsx)(Be.ColorAverage,{}),l.dotScreen.enabled===!0&&(0,at.jsx)(Be.DotScreen,{angle:l.dotScreen.angle,scale:l.dotScreen.scale}),l.glitch.enabled===!0&&(0,at.jsx)(Be.Glitch,{mode:Qh(l.glitch.mode),delay:new kr.Vector2(l.glitch.delay[0],l.glitch.delay[1]),duration:new kr.Vector2(l.glitch.duration[0],l.glitch.duration[1]),strength:new kr.Vector2(l.glitch.strength[0],l.glitch.strength[1]),chromaticAberrationOffset:new kr.Vector2(l.glitch.chromaticAberrationOffset[0],l.glitch.chromaticAberrationOffset[1]),columns:l.glitch.columns,ratio:l.glitch.ratio,active:!0}),l.grid.enabled===!0&&(0,at.jsx)(Be.Grid,{scale:l.grid.scale,lineWidth:l.grid.lineWidth}),l.lensflare.enabled===!0&&(0,at.jsx)($h,{config:l.lensflare}),l.godRays.enabled===!0&&(0,at.jsx)(Be.GodRays,{sun:c,samples:l.godRays.samples,density:l.godRays.density,decay:l.godRays.decay,weight:l.godRays.weight,exposure:l.godRays.exposure,clampMax:l.godRays.clampMax,blur:l.godRays.blur,kernelSize:cl(l.godRays.kernelSize)}),l.noise.enabled===!0&&(0,at.jsx)(Be.Noise,{premultiply:l.noise.premultiply,opacity:l.noise.opacity,blendFunction:Ci.BlendFunction.ADD}),l.brightnessContrast.enabled===!0&&(0,at.jsx)(Be.BrightnessContrast,{brightness:l.brightnessContrast.brightness,contrast:l.brightnessContrast.contrast}),l.hueSaturation.enabled===!0&&(0,at.jsx)(Be.HueSaturation,{hue:l.hueSaturation.hue,saturation:l.hueSaturation.saturation}),l.toneMapping.enabled===!0&&(0,at.jsx)(Wh,{exposure:l.toneMapping.exposure}),l.vignette.enabled===!0&&(0,at.jsx)(Be.Vignette,{eskil:l.vignette.eskil,offset:l.vignette.offset,darkness:l.vignette.darkness,blendFunction:Ci.BlendFunction.NORMAL}),l.toneMapping.enabled===!0&&(0,at.jsx)(Be.ToneMapping,{mode:Jh(l.toneMapping.mode),resolution:l.toneMapping.resolution,whitePoint:l.toneMapping.whitePoint,middleGrey:l.toneMapping.middleGrey,minLuminance:l.toneMapping.minLuminance,averageLuminance:l.toneMapping.averageLuminance,adaptationRate:l.toneMapping.adaptationRate}),l.sepia.enabled===!0&&(0,at.jsx)(Be.Sepia,{intensity:l.sepia.intensity,blendFunction:Ci.BlendFunction.NORMAL}),l.scanline.enabled===!0&&(0,at.jsx)(Be.Scanline,{density:l.scanline.density,blendFunction:Ci.BlendFunction.OVERLAY}),l.pixelation.enabled===!0&&(0,at.jsx)(Be.Pixelation,{granularity:l.pixelation.granularity}),l.ramp.enabled===!0&&(0,at.jsx)(Be.Ramp,{rampType:em(l.ramp.rampType),rampStart:l.ramp.rampStart,rampEnd:l.ramp.rampEnd,startColor:m,endColor:S,opacity:l.ramp.rampMask?1:l.ramp.opacity??.5,rampBias:l.ramp.rampBias,rampGain:l.ramp.rampGain,rampMask:l.ramp.rampMask,rampInvert:l.ramp.rampInvert})]})]})});function lx(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 cx(e,t){return e.length===t.length&&e.every((n,i)=>n===t[i])}function tm({hoveredObjectRef:e,...t}){let n=(0,jo.useThree)(c=>c.scene),i=(0,jo.useThree)(c=>c.invalidate),[r,a]=(0,yn.useState)(null),o=(0,yn.useCallback)(c=>a(c),[]),s=(0,yn.useRef)({effect:null,objects:Rd});return(0,yn.useEffect)(()=>{if(!r)return;let l=t.sceneConfig?.postProcessing?.outline.enabled===!0?ox(n):e&&lx(e)?[e]:Rd;s.current.effect===r&&cx(s.current.objects,l)||(s.current={effect:r,objects:l},r.selection.set(l),i())}),(0,at.jsx)(sx,{...t,onOutlineEffect:o})}var nm=require("react"),dl=class extends nm.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,i){this.props.onError?.(n)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};var wn=require("react/jsx-runtime"),dx=1.5;function ux({captureRef:e}){let{gl:t,scene:n,camera:i,invalidate:r}=(0,ul.useThree)();return(0,Br.useEffect)(()=>{if(e)return e.current={gl:t,scene:n,camera:i,invalidate:r},()=>{e.current=null}},[e,t,n,i,r]),null}function Ld({children:e,camera:t,backgroundColor:n,shadows:i=!0,sceneConfig:r,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,renderMode:c="demand",maxDpr:l=2,xrStore:u,rendererCaptureRef:d,preserveDrawingBuffer:p=!1,reduceGpuLoad:f}){let g=f??_d(),y=g?Math.min(l,dx):l,T=i&&!g,x=(0,Br.useMemo)(()=>n?{background:n}:r?.background.enabled?r.background.type==="color"?{background:r.background.color}:r.background.type==="image"&&r.background.imageUrl.trim()?{backgroundImage:`url("${r.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[n,r]),h=(0,Br.useMemo)(()=>{if(n)return n;let v=r?.background;if(v?.enabled){if(v.type==="color")return v.color;if(v.type==="image"&&v.imageUrl.trim()||v.type==="environment")return null}return"#1c1c1d"},[n,r]),m=(0,Br.useMemo)(()=>{let v=r?.postProcessing;return v?!!(v.glitch.enabled||v.noise.enabled||v.lensflare.enabled&&v.lensflare.animated):!1},[r?.postProcessing]),[S,M]=(0,Br.useState)(!1),C=r?.environment,L=r?.groundShadows,b=(0,Br.useMemo)(()=>{if(!C)return null;if(C.source==="custom"){let v=C.customEnvironmentUrl.trim();return rl(v)?{files:v}:null}return{preset:C.preset}},[C]),_=(0,wn.jsxs)(wn.Fragment,{children:[(0,wn.jsx)(ux,{captureRef:d}),(0,wn.jsx)(Nh,{cameraConfig:t}),(0,wn.jsx)(kh,{active:m}),(0,wn.jsx)(Bh,{color:h}),b?(0,wn.jsx)(dl,{onError:v=>console.warn("Failed to load environment map:",v),children:(0,wn.jsx)(Br.Suspense,{fallback:null,children:(0,wn.jsx)(pl.Environment,{...b,environmentIntensity:C?.intensity??.25,backgroundIntensity:C?.intensity??.25,background:r?.background.enabled===!0&&r.background.type==="environment"})})}):null,(0,wn.jsx)(Dh,{rotation:C?.rotation??0}),u&&(0,wn.jsx)(Lh,{onPresentingChange:M}),L?.enabled&&L.mode==="shadowCatcher"&&!S&&(0,wn.jsx)(pl.ContactShadows,{position:[0,L.height,0],scale:L.size,opacity:L.intensity,blur:L.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,wn.jsx)(tm,{sceneConfig:r,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,disabled:g})]});return(0,wn.jsx)(ul.Canvas,{frameloop:c,dpr:[1,y],shadows:T?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:x,camera:t??{fov:50},gl:{preserveDrawingBuffer:p,toneMapping:im.NoToneMapping,toneMappingExposure:1},children:u?(0,wn.jsxs)(rm.XR,{store:u,children:[(0,wn.jsx)(Rh,{renderMode:c}),_]}):_})}var am=require("@react-three/drei"),om=require("react"),sm=require("react/jsx-runtime");function kd({controlsRef:e,onCameraChange:t}){return(0,om.useEffect)(()=>{if(!t||!e||typeof e!="object"||!("current"in e))return;let n=e.current;if(!n)return;let i=()=>{t(n.camera,n)};return n.addEventListener("update",i),()=>{n.removeEventListener("update",i)}},[e,t]),(0,sm.jsx)(am.CameraControls,{ref:e,makeDefault:!0,smoothTime:.3,dollyToCursor:!0})}var Nr=require("react"),Go=require("@react-three/fiber"),cm=require("three");function Pn(e,t){if(e[t])return t;let n=Object.entries(e).find(([,r])=>r.id===t)?.[0];return n||(Object.entries(e).find(([,r])=>r.modelObjectId===t)?.[0]??null)}var Bd=Symbol("react-immersive.model-node-id");function px(e,t){Object.defineProperty(e,Bd,{value:t,configurable:!0})}function Fa(e){let t=new Map;e.traverse(c=>{if(!c.name)return;let l=t.get(c.name);l?l.push(c):t.set(c.name,[c])});let n=Object.create(null),i=new WeakMap,r=new Map,a=new Set(Array.from(t,([c,l])=>l.length===1?c:null).filter(c=>c!==null)),o=new Set,s=(c,l)=>{px(c,l),n[l]=c,i.set(c,l),o.add(l)};for(let[c,l]of t)l.length===1&&s(l[0],c);for(let[c,l]of t){if(l.length<2)continue;let u=[];l.forEach((d,p)=>{let f=`${c} [${p+1}]`,g=f,y=2;for(;a.has(g)||o.has(g);)g=`${f}.${y++}`;s(d,g),u.push(g)}),r.set(c,u)}return{nodesById:n,idByNode:i,duplicateNames:r}}function Ho(e){return e[Bd]??e.name??null}function Dr(e,t){let n=null,i=[];return e.traverse(r=>{r[Bd]===t&&(n=r),r.name===t&&i.push(r)}),n??(i.length===1?i[0]:null)}var pr=require("react/jsx-runtime");function dm(e,t){if(!t)return e;let n=t*Math.PI/180,i=Math.cos(n),r=Math.sin(n);return[e[0]*i+e[2]*r,e[1],-e[0]*r+e[2]*i]}function hx(e,t){let[n,i,r]=e.center,a=e.radius,o=Math.hypot(t[0],t[1],t[2]),s=o>1e-6?[t[0]/o,t[1]/o,t[2]/o]:[0,1,0],c=a*2;return{position:[n+s[0]*c,i+s[1]*c,r+s[2]*c],target:e.center,extent:a,near:Math.max(a/100,.001),far:c+a*2}}function mx(e,t){let n=t[0]-e.center[0],i=t[1]-e.center[1],r=t[2]-e.center[2],a=Math.hypot(n,i,r);return{near:Math.max(a-e.radius,a*.01,.001),far:a+e.radius*2}}function fx(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var gx={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}]},bx={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function lm({light:e,shadows:t,shadowsEnabled:n,environmentRotation:i,modelBounds:r,objectBindings:a,nodeRefs:o}){let s=(0,Nr.useRef)(null),c=(0,Nr.useRef)(null),l=(0,Nr.useRef)(null),u=(0,Go.useThree)(x=>x.camera),d=(0,Go.useThree)(x=>x.scene),p=(0,Nr.useMemo)(()=>new cm.Vector3,[]),f=(0,Nr.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:dm(e.position,i),[e.position,e.attachedToCamera,e.attachment,i]);(0,Go.useFrame)(()=>{let x=s.current??c.current??l.current;if(!x)return;if(e.attachedToCamera){x.position.copy(u.position);return}let h=e.attachment;if(!h)return;let m=a?Pn(a,h.objectId):null,M=(m?a?.[m]:void 0)?.modelObjectId??h.objectId,C=(m?o?.current[m]:void 0)??Dr(d,M);C&&(p.fromArray(h.offset),C.localToWorld(p),x.position.copy(p))});let g=n&&t.enabled&&e.castShadow,y=(0,Nr.useMemo)(()=>e.type==="directional"&&g&&r&&!e.attachedToCamera?hx(r,f):null,[e.type,e.attachedToCamera,g,r,f]),T=(0,Nr.useMemo)(()=>e.type==="spot"&&g&&r&&!e.attachedToCamera?mx(r,f):null,[e.type,e.attachedToCamera,g,r,f]);return(0,Nr.useEffect)(()=>{let x=s.current??l.current;if(!x)return;let[h,m,S]=fx(e,g,r);x.target.position.set(h,m,S),x.target.updateMatrixWorld()},[e,g,r]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,pr.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:y?.position??f,castShadow:g,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":y?.near??.5,"shadow-camera-far":y?.far??40,"shadow-camera-left":-(y?.extent??8),"shadow-camera-right":y?.extent??8,"shadow-camera-top":y?.extent??8,"shadow-camera-bottom":-(y?.extent??8)}):e.type==="point"?(0,pr.jsx)("pointLight",{ref:c,color:e.color,intensity:e.intensity,position:f,distance:e.distance,decay:e.decay,castShadow:g,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,pr.jsx)("spotLight",{ref:l,color:e.color,intensity:e.intensity,position:f,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:g,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":T?.near??.5,"shadow-camera-far":T?.far??40}):e.type==="hemisphere"?(0,pr.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function Dd({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:i=0,environmentConfig:r,modelBounds:a,objectBindings:o,nodeRefs:s}){let c=e??gx,l=t??bx,u=r?.shadowLight,d=dm([5,10,5],i);return(0,pr.jsxs)(pr.Fragment,{children:[(0,pr.jsx)("ambientLight",{intensity:c.ambient.intensity,color:c.ambient.color}),c.lights.map(p=>(0,pr.jsx)(lm,{light:p,shadows:l,shadowsEnabled:n,environmentRotation:i,modelBounds:a,objectBindings:o,nodeRefs:s},p.id)),u?.enabled&&(0,pr.jsx)(lm,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:u.intensity,position:d,attachedToCamera:!1,castShadow:!0,shadowBias:u.bias,visible:!0},shadows:l,shadowsEnabled:n,environmentRotation:0,modelBounds:a,objectBindings:o,nodeRefs:s})]})}var ge=require("react"),$a=require("@react-three/fiber");var qo=require("@react-three/fiber"),Ga=require("three"),Ti=require("three-stdlib"),Em=require("three/examples/jsm/loaders/USDLoader.js");var ja=require("fflate");var um;function pm(e){um=e}function Wo(e){um?.(e)}var vx=[".glb",".gltf",".obj",".fbx",".usdz",".zip"],xx=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],Xo=1024*1024,hm=128*Xo,mm=1024,fm=128*Xo,gm=256*Xo,bm=200,yx=Xo,li=new Map,hl=".glb,.gltf,.obj,.fbx,.usdz,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function Od(e){let t=e.split(/[?#]/,1)[0].toLowerCase();return t.endsWith(".obj")?"obj":t.endsWith(".fbx")?"fbx":t.endsWith(".usdz")?"usdz":t.endsWith(".gltf")?"gltf":"glb"}function wm(e){return li.get(e)??{format:Od(e)}}function wx(e){let t=e.name.toLowerCase();return vx.some(n=>t.endsWith(n))||xx.includes(e.type)}async function ml(e){if(!wx(e))throw new Error("Unsupported model file. Please upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset.");let t=e.name.toLowerCase();if(t.endsWith(".usdz")||e.type==="model/vnd.usdz+zip"||e.type==="application/vnd.usdz+zip")return vm(e,"usdz");if(t.endsWith(".zip")||_x(e.type))return Sx(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return xm(e);let n=Od(e.name);return n==="gltf"?xm(e):vm(e,n)}function vm(e,t){let n=URL.createObjectURL(e);return li.set(n,{format:t,entryPath:e.name}),{url:n,name:e.name,format:t,cleanup:()=>{Wo(n),li.delete(n),URL.revokeObjectURL(n)}}}function _x(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function xm(e){let t=await e.text(),n=_m(t,e.name);for(let r of Sm(n))if(!Id(r))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let i=URL.createObjectURL(e);return li.set(i,{format:"gltf",entryPath:e.name}),{url:i,name:e.name,format:"gltf",cleanup:()=>{Wo(i),li.delete(i),URL.revokeObjectURL(i)}}}async function Sx(e){if(e.size>hm)throw new Error(`Model zip is too large. The compressed archive must be ${Nd(hm)} or smaller.`);let t=await Mx(new Uint8Array(await e.arrayBuffer())),n=new Map;for(let[o,s]of Object.entries(t)){let c=zd(o);!c||Mm(c)||n.set(c,s)}let i=[...n.keys()].filter(o=>/\.(gltf|obj|fbx)$/i.test(o));if(i.length===0)throw new Error("Invalid model zip: no .gltf, .obj, or .fbx file found.");if(i.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let r=i[0],a=Od(r);if(a==="gltf")return Tx(e,r,n);if(a==="obj"||a==="fbx")return Cx(e,r,a,n);throw new Error(`Unsupported model entry ${r}.`)}function Mx(e){return new Promise((t,n)=>{let i=0,r=0,a=null,o=c=>(a??(a=new Error(`Invalid model zip: ${c}`)),!1);(0,ja.unzip)(e,{filter:c=>{if(a)return!1;if(i+=1,i>mm)return o(`archive contains more than ${mm.toLocaleString()} entries.`);if(c.originalSize>fm)return o(`${c.name} expands beyond the ${Nd(fm)} per-file limit.`);if(r+=c.originalSize,r>gm)return o(`expanded contents exceed ${Nd(gm)}.`);if(c.originalSize>=yx&&(c.size===0||c.originalSize/c.size>bm))return o(`${c.name} exceeds the ${bm}:1 compression-ratio limit.`);let l=zd(c.name);return!!l&&!Mm(l)}},(c,l)=>{a?n(a):c?n(new Error(`Invalid model zip: ${c.message}`)):t(l)})})}function Nd(e){return`${e/Xo} MiB`}function Cx(e,t,n,i){let r=[],a={};for(let[s,c]of i){let l=URL.createObjectURL(new Blob([c],{type:Cm(s)}));r.push(l),a[s]=l}let o=a[t];if(!o)throw r.forEach(s=>URL.revokeObjectURL(s)),new Error(`Invalid model zip: could not read ${t}.`);return li.set(o,{format:n,entryPath:t,resourceUrls:a}),{url:o,name:e.name,format:n,cleanup:()=>{Wo(o),li.delete(o),r.forEach(s=>URL.revokeObjectURL(s))}}}function Tx(e,t,n){let i=n.get(t);if(!i)throw new Error("Invalid GLTF zip: no .gltf found.");let r=_m((0,ja.strFromU8)(i),t);Px(r,t);let a=Ax(t),o=[];try{ym(r.buffers,a,n,o),ym(r.images,a,n,o);let s=new Blob([(0,ja.strToU8)(JSON.stringify(r))],{type:"model/gltf+json"}),c=URL.createObjectURL(s);return o.push(c),li.set(c,{format:"gltf",entryPath:t}),{url:c,name:e.name,format:"gltf",cleanup:()=>{Wo(c),li.delete(c),o.forEach(l=>URL.revokeObjectURL(l))}}}catch(s){throw o.forEach(c=>URL.revokeObjectURL(c)),s}}function ym(e,t,n,i){for(let r of e??[]){if(typeof r.uri!="string"||Id(r.uri))continue;let a=Ex(t,r.uri),o=n.get(a);if(!o)throw new Error(`Invalid GLTF zip: missing referenced asset ${r.uri}.`);let s=URL.createObjectURL(new Blob([o],{type:Cm(a)}));i.push(s),r.uri=s}}function _m(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function Sm(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function Px(e,t){for(let n of Sm(e)){if(Id(n))continue;let i=/^[a-z][a-z0-9+.-]*:/i.test(n),r=n.startsWith("/")||n.startsWith("\\");if(i||r)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function Id(e){return e.startsWith("data:")}function zd(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!==".")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function Mm(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(n=>n===".DS_Store"||n.startsWith("._"))}function Ax(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function Ex(e,t){let n=t.split(/[?#]/)[0],i=Rx(n);return zd(e?`${e}/${i}`:i)}function Rx(e){try{return decodeURI(e)}catch{return e}}function Cm(e){let t=e.toLowerCase();return t.endsWith(".obj")||t.endsWith(".mtl")?"text/plain":t.endsWith(".fbx")?"application/octet-stream":t.endsWith(".usdz")?"model/vnd.usdz+zip":t.endsWith(".bin")?"application/octet-stream":t.endsWith(".png")?"image/png":t.endsWith(".jpg")||t.endsWith(".jpeg")?"image/jpeg":t.endsWith(".webp")?"image/webp":t.endsWith(".avif")?"image/avif":t.endsWith(".ktx2")?"image/ktx2":"application/octet-stream"}var Lx=require("@react-three/drei"),kx=require("@react-three/fiber"),Bx=require("react"),Tm=require("three"),Ha=require("three-stdlib");function Dx(e){return{name:"RI_unlit_emissive_texture",async afterRoot(t){let n=e.json.materials??[],i=new Map;if(n.forEach(a=>{let o=!!a?.extensions?.KHR_materials_unlit,s=!!a?.pbrMetallicRoughness?.baseColorTexture;o&&!s&&a?.emissiveTexture&&a.name&&i.set(a.name,a.emissiveTexture.index)}),i.size===0||!t.scene)return;let r=new Map;await Promise.all([...i].map(async([a,o])=>{let s=await e.getDependency("texture",o);s&&(s.colorSpace=Tm.SRGBColorSpace,r.set(a,s))})),t.scene.traverse(a=>{let o=Array.isArray(a.material)?a.material:a.material?[a.material]:[];for(let s of o){let c=s.name?r.get(s.name):void 0;c&&!s.map&&(s.map=c,s.needsUpdate=!0)}})}}}var Ud="https://assets.react-immersive.liveroom.dev/three-r184/draco/",Vd="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function Pm(e,t={},n){let{dracoDecoderPath:i=Ud,ktx2TranscoderPath:r=Vd,meshopt:a=!0}=t;if(i){let o=new Ha.DRACOLoader;o.setDecoderPath(i),e.setDRACOLoader(o)}if(a&&e.setMeshoptDecoder(Ha.MeshoptDecoder),r&&n){let o=new Ha.KTX2Loader().setTranscoderPath(r).detectSupport(n);e.setKTX2Loader(o)}e.register((o=>Dx(o)))}var fl=class extends Ga.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,i,r,a){this.loadAsset(n,r).then(i).catch(a)}async loadAsset(n,i){let r=Ox(this.options.source),{format:a}=this.options.source;if(a==="obj")return Nx(n,r,this.options.source,i);if(a==="fbx"){let c=Fd(this,new Ti.FBXLoader(r)),l=Ux(n,this.options.source);l&&c.setResourcePath(l);let u=await c.loadAsync(n,i);return jd(u,"FBXMesh",!1),{scene:u,animations:u.animations??[]}}if(a==="usdz"){let l=await Fd(this,new Em.USDLoader(r)).loadAsync(n,i);return jd(l,"USDZMesh",!1),{scene:l,animations:l.animations??[]}}let o=Fd(this,new Ti.GLTFLoader(r));Pm(o,this.options.decoderConfig,this.options.renderer);let s=await o.loadAsync(n,i);return{scene:s.scene,animations:s.animations??[]}}};pm(e=>{qo.useLoader.clear(fl,e)});function vl(e,t={},n){let i=(0,qo.useThree)(o=>o.gl),r=wm(e),a=n?{...r,format:n}:r;return(0,qo.useLoader)(fl,e,o=>{o.configure({source:a,decoderConfig:t,renderer:i})})}async function Nx(e,t,n,i){let r=await Am(e,t,i),a=new Ti.OBJLoader(t),o=Ix(r);if(o){let c=zx(o,e,n);if(c)try{let l=await Am(c.url,t),d=new Ti.MTLLoader(t).parse(l,c.basePath);d.preload(),a.setMaterials(d)}catch(l){console.warn(`[react-immersive] Could not load OBJ material ${o}; rendering geometry with fallback materials.`,l)}}let s=a.parse(r);return jd(s,"OBJMesh",!0),{scene:s,animations:[]}}function jd(e,t,n){let i=new Set,r=0;e.traverse(a=>{if(!("isMesh"in a&&a.isMesh===!0)){a.name&&i.add(a.name);return}let s=a.name||`${t}_${++r}`;if(!n&&a.name){i.add(a.name);return}let c=s,l=2;for(;i.has(c);)c=`${s}_${l++}`;a.name=c,i.add(c)})}function Am(e,t,n){let i=new Ga.FileLoader(t);return i.setResponseType("text"),i.loadAsync(e,n)}function Fd(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function Ox(e){let t=new Ga.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(i=>{if(/^(?:blob:|data:)/i.test(i))return i;let r=bl(Lm(i).split(/[?#]/)[0]),a=n[r];if(a)return a;let o=gl(e.entryPath??""),s=bl(o?`${o}/${r}`:r);return n[s]??i}),t}function Ix(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function zx(e,t,n){if(n.resourceUrls&&n.entryPath){let i=bl(`${gl(n.entryPath)}/${Lm(e)}`),r=n.resourceUrls[i];if(!r)return null;let a=gl(i);return{url:r,basePath:a?`${a}/`:""}}try{let i=new URL(e,t).href;return{url:i,basePath:Rm(i)}}catch{return null}}function Ux(e,t){if(t.resourceUrls&&t.entryPath){let n=gl(t.entryPath);return n?`${n}/`:""}return Rm(e)}function Rm(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function gl(e){let t=bl(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function bl(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!=="."))n===".."?t.pop():t.push(n);return t.join("/")}function Lm(e){try{return decodeURI(e)}catch{return e}}var je=require("three"),Fm=require("three-stdlib");function km(e){let t=new Map;return e.map((n,i)=>{let a=n.name.trim()||`Animation ${i+1}`,o=t.get(a)??0;return t.set(a,o+1),{clip:n,sourceName:o===0?a:`${a} (${o+1})`,duration:n.duration}})}var Nn=require("three");function Bm(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function Dm(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function hr(e){return!!(e&&"isMesh"in e&&e.isMesh)}var Yo=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],Vx=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function ia(e){return Vx.has(e)?Nn.SRGBColorSpace:Nn.NoColorSpace}function $t(e,t){return e?.[t]?.path}function Nm(e){return e==="back"?Nn.BackSide:e==="double"?Nn.DoubleSide:Nn.FrontSide}function Om(e){return e==="additive"?Nn.AdditiveBlending:Nn.NormalBlending}function ci(e,t=1,n=t){if(e&&typeof e=="object"){let i=e;if(typeof i.x=="number"&&Number.isFinite(i.x)&&typeof i.y=="number"&&Number.isFinite(i.y))return new Nn.Vector2(i.x,i.y)}return new Nn.Vector2(t,n)}function Hd(e){return Number.isFinite(e)&&e>0?e:1}function xl(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function Im(e){return e?.loopMode??"repeat"}var mr=require("three");function Wa(e){if(Bm(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new mr.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 mr.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof mr.Color&&n.emissive.copy(t.color)):(t.color instanceof mr.Color&&n.color.copy(t.color),t.map instanceof mr.Texture&&(n.map=t.map),t.emissive instanceof mr.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof mr.Texture&&(n.emissiveMap=t.emissiveMap));let r=["aoMap","aoMapIntensity","lightMap","lightMapIntensity","alphaMap","opacity","transparent","alphaTest","side","vertexColors","wireframe","depthTest","depthWrite","visible","toneMapped","fog"];for(let a of r)t[a]!==void 0&&(n[a]=t[a]);return n.needsUpdate=!0,n}function yl(e){if(Dm(e))return e.clone();let t=new mr.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(ci(e.normalScale)),t.displacementMap=e.displacementMap,t.displacementScale=e.displacementScale,t.displacementBias=e.displacementBias,t.roughness=e.roughness,t.roughnessMap=e.roughnessMap,t.metalness=e.metalness,t.metalnessMap=e.metalnessMap,t.alphaMap=e.alphaMap,t.envMap=e.envMap,t.envMapRotation.copy(e.envMapRotation),t.envMapIntensity=e.envMapIntensity,t.wireframe=e.wireframe,t.wireframeLinewidth=e.wireframeLinewidth,t.flatShading=e.flatShading,t.fog=e.fog,t.opacity=e.opacity,t.transparent=e.transparent,t.alphaHash=e.alphaHash,t.blendSrc=e.blendSrc,t.blendDst=e.blendDst,t.blendEquation=e.blendEquation,t.blendSrcAlpha=e.blendSrcAlpha,t.blendDstAlpha=e.blendDstAlpha,t.blendEquationAlpha=e.blendEquationAlpha,t.blending=e.blending,t.premultipliedAlpha=e.premultipliedAlpha,t.dithering=e.dithering,t.alphaTest=e.alphaTest,t.depthTest=e.depthTest,t.depthWrite=e.depthWrite,t.colorWrite=e.colorWrite,t.stencilWrite=e.stencilWrite,t.stencilWriteMask=e.stencilWriteMask,t.stencilFunc=e.stencilFunc,t.stencilRef=e.stencilRef,t.stencilFuncMask=e.stencilFuncMask,t.stencilFail=e.stencilFail,t.stencilZFail=e.stencilZFail,t.stencilZPass=e.stencilZPass,t.side=e.side,t.shadowSide=e.shadowSide,t.toneMapped=e.toneMapped,t.vertexColors=e.vertexColors,t.visible=e.visible,t.clippingPlanes=e.clippingPlanes,t.clipIntersection=e.clipIntersection,t.clipShadows=e.clipShadows,t.forceSinglePass=e.forceSinglePass,t.polygonOffset=e.polygonOffset,t.polygonOffsetFactor=e.polygonOffsetFactor,t.polygonOffsetUnits=e.polygonOffsetUnits,t}function wl(e){e.userData.baseColor=e.color.clone(),e.userData.baseMap=e.map??null,e.userData.baseMetalness=e.metalness,e.userData.baseMetalnessMap=e.metalnessMap??null,e.userData.baseRoughness=e.roughness,e.userData.baseRoughnessMap=e.roughnessMap??null,e.userData.baseEmissive=e.emissive.clone(),e.userData.baseEmissiveIntensity=e.emissiveIntensity,e.userData.baseEmissiveMap=e.emissiveMap??null,e.userData.baseOpacity=e.opacity,e.userData.baseTransparent=e.transparent,e.userData.baseAlphaMap=e.alphaMap??null,e.userData.baseAlphaTest=e.alphaTest,e.userData.baseAlphaHash=e.alphaHash,e.userData.baseDithering=e.dithering,e.userData.baseBlending=e.blending,e.userData.baseDepthWrite=e.depthWrite,e.userData.baseSide=e.side,e.userData.baseNormalMap=e.normalMap??null,e.userData.baseNormalScale=ci(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=ci(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 Fn=require("three");function _l(e,t,n){e.map=e.userData.baseMap??null,e.color.copy(e.userData.baseColor),e.metalness=e.userData.baseMetalness??e.metalness,e.metalnessMap=e.userData.baseMetalnessMap??null,e.roughness=e.userData.baseRoughness??e.roughness,e.roughnessMap=e.userData.baseRoughnessMap??null,e.emissive.copy(e.userData.baseEmissive??new Fn.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??Fn.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??Fn.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(ci(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(ci(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new Fn.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 Fn.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 Fn.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let i=$t(t,"texture"),r=$t(t,"metalnessMap"),a=$t(t,"roughnessMap"),o=$t(t,"emissiveMap"),s=$t(t,"alphaMap"),c=$t(t,"normalMap"),l=$t(t,"bumpMap"),u=$t(t,"aoMap"),d=$t(t,"displacementMap"),p=$t(t,"clearcoatMap"),f=$t(t,"clearcoatRoughnessMap"),g=$t(t,"clearcoatNormalMap"),y=$t(t,"anisotropyMap"),T=$t(t,"transmissionMap"),x=$t(t,"thicknessMap"),h=$t(t,"sheenColorMap"),m=$t(t,"sheenRoughnessMap"),S=$t(t,"specularIntensityMap"),M=$t(t,"specularColorMap");if(i?(e.map=cn(i,Fn.SRGBColorSpace),e.color.set(n??"#ffffff")):n&&(e.map=null,e.color.set(n)),r&&(e.metalnessMap=cn(r)),t?.metalness!==void 0&&(e.metalness=t.metalness),a&&(e.roughnessMap=cn(a)),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):o&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),o&&(e.emissiveMap=cn(o,Fn.SRGBColorSpace)),t?.opacity!==void 0&&(e.opacity=t.opacity),s&&(e.alphaMap=cn(s)),t?.alphaTest!==void 0&&(e.alphaTest=t.alphaTest),t?.alphaHash!==void 0&&(e.alphaHash=t.alphaHash),t?.dithering!==void 0&&(e.dithering=t.dithering),t?.blendingMode&&(e.blending=Om(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=Nm(t.side)),c&&(e.normalMap=cn(c)),c||t?.normalScale!==void 0){let C=t?.normalScale??Math.abs(ci(e.userData.baseNormalScale).x);e.normalScale.set(C,t?.flipNormalY?-C:C)}if(l&&(e.bumpMap=cn(l)),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),u&&(e.aoMap=cn(u)),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),d&&(e.displacementMap=cn(d)),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),p&&(e.clearcoatMap=cn(p)),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),f&&(e.clearcoatRoughnessMap=cn(f)),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),g&&(e.clearcoatNormalMap=cn(g)),g||t?.clearcoatNormalScale!==void 0){let C=t?.clearcoatNormalScale??Math.abs(ci(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(C,t?.flipClearcoatNormalY?-C:C)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),h&&(e.sheenColorMap=cn(h,Fn.SRGBColorSpace)),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),m&&(e.sheenRoughnessMap=cn(m)),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),y&&(e.anisotropyMap=cn(y)),t?.transmission!==void 0&&(e.transmission=t.transmission),T&&(e.transmissionMap=cn(T)),t?.thickness!==void 0&&(e.thickness=t.thickness),x&&(e.thicknessMap=cn(x)),t?.attenuationColor&&e.attenuationColor.set(t.attenuationColor),t?.attenuationDistance!==void 0&&(e.attenuationDistance=t.attenuationDistance),t?.reflectivity!==void 0&&(e.reflectivity=t.reflectivity),t?.specularIntensity!==void 0&&(e.specularIntensity=t.specularIntensity),S&&(e.specularIntensityMap=cn(S)),t?.specularColor&&e.specularColor.set(t.specularColor),M&&(e.specularColorMap=cn(M,Fn.SRGBColorSpace)),e.transparent=e.opacity<1||e.transmission>0||e.blending!==Fn.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function $o(e){return e.material}function Xr(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function fr(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function Sl(e,t){return Array.isArray(e)?e[t]:e}function Ko(e){e.updateMatrixWorld(!0),e.traverse(t=>{let n=t;n.isSkinnedMesh&&(n.skeleton?.update(),n.computeBoundingBox?.(),n.computeBoundingSphere?.())})}var zm=require("three");function Fx(e){return e.isSkinnedMesh===!0}function Xa(e){let t=[];return e.traverse(n=>{Fx(n)&&t.push(n)}),t}var Zo="reactImmersiveSkinFreeze";function Um(e){return!!e.userData[Zo]}function Ml(e,t){let n=e.userData,i=new zm.Matrix4().copy(t).invert(),r=n[Zo];if(r){r.frozenInverse.copy(i),e.bindMatrixInverse.copy(i);return}let a={frozenInverse:i,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(i),e.onBeforeRender=function(o,s,c,l,u,d){a.previousOnBeforeRender.call(this,o,s,c,l,u,d),e.bindMatrixInverse.copy(a.frozenInverse)},n[Zo]=a}function qa(e){let t=e.userData,n=t[Zo];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[Zo],e.updateMatrixWorld(!0))}var aa=require("react"),Vm=require("@react-three/fiber");function Cl(){let e=(0,Vm.useThree)(r=>r.gl.domElement),t=(0,aa.useRef)(void 0),n=(0,aa.useCallback)(r=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=r},[e]),i=(0,aa.useCallback)(()=>{let r=t.current;r!==void 0&&(e.style.cursor=r,t.current=void 0)},[e]);return(0,aa.useEffect)(()=>()=>{i()},[i]),{setCanvasCursor:n,restoreCanvasCursor:i}}var Gd=require("react/jsx-runtime");function Tl(e,t,n){let i=n.get(e);i&&(t?.position?e.position.fromArray(t.position):e.position.copy(i.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],i.rotation.order):e.rotation.copy(i.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(i.scale),e.updateMatrix())}function 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 Ya(e){let t=e,n=Number(t.clearcoat)>0,i=Number(t.sheen)>0,r=Number(t.anisotropy)>0,a=Number(t.transmission)>0,o=t.transparent===!1&&t.blending===je.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),r,fn(r?t.anisotropyMap:null),n,fn(n?t.clearcoatMap:null),fn(n?t.clearcoatNormalMap:null,!0),fn(n?t.clearcoatRoughnessMap:null),i,fn(i?t.sheenColorMap:null),fn(i?t.sheenRoughnessMap:null),fn(t.specularColorMap),fn(t.specularIntensityMap),a,fn(a?t.transmissionMap:null),fn(a?t.thicknessMap:null),fn(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,t.side,o].join("|")}function Wd({url:e,objectBindings:t,selectedItem:n,itemMaterials:i,onItemClick:r,onItemHover:a,onModelLoaded:o,onAnimationsReady:s,nodeRefsOut:c,onNodeRefsChange:l,materialRefsOut:u,panelHoveredItem:d,sceneConfig:p,zoomOnSelected:f=!0,highlightOnHover:g=!0,decoderConfig:y,modelFormat:T,explodeFactor:x=0,suspendBindingTransforms:h=!1}){let m=vl(e,y,T),S=(0,$a.useThree)(R=>R.invalidate),[M,C]=(0,ge.useState)(null),L=(0,ge.useRef)(null),{setCanvasCursor:b,restoreCanvasCursor:_}=Cl();(0,ge.useEffect)(()=>{g||(C(null),a?.(null),_())},[g,a,_]);let v=(0,ge.useMemo)(()=>Fm.SkeletonUtils.clone(m.scene),[m.scene]),P=(0,ge.useMemo)(()=>Fa(v),[v]),z=P.nodesById;(0,ge.useEffect)(()=>{P.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(P.duplicateNames))},[P]);let E=(0,ge.useMemo)(()=>{let R=new WeakMap;return v.traverse(I=>{R.set(I,{position:I.position.clone(),rotation:I.rotation.clone(),scale:I.scale.clone()})}),R},[v]);(0,ge.useEffect)(()=>{let R=!1,I=null,$=null,re=window,te=Object.entries(z).filter(([,Et])=>hr(Et)),he=new je.Box3,pe=[],bt=0;v.traverse(Et=>{hr(Et)&&(Et.castShadow=!1,Et.receiveShadow=!0)});let St=()=>{if(R)return;let Et=new Set,Se=he.getSize(new je.Vector3),Dt=new je.Vector3;for(let{name:pn,box:Tn}of pe)Tn.getSize(Dt),Dt.x>Se.x*.7&&Dt.z>Se.z*.7&&Dt.y>Se.y*.4&&Et.add(pn);v.traverse(pn=>{if(!hr(pn))return;let Tn=Ho(pn);pn.castShadow=!Tn||!Et.has(Tn),pn.receiveShadow=!0}),S()},Pe=()=>{R||(re.requestIdleCallback?I=re.requestIdleCallback(Ze,{timeout:100}):$=window.setTimeout(()=>Ze(),0))},Ze=Et=>{if(I=null,$=null,R)return;let Se=performance.now(),Dt=0;for(;bt<te.length&&!(Dt>0&&!(Et?Et.didTimeout?Dt<16:Et.timeRemaining()>1:performance.now()-Se<8));){let[pn,Tn]=te[bt];bt+=1,Dt+=1;let tn=new je.Box3().setFromObject(Tn);tn.isEmpty()||(pe.push({name:pn,box:tn}),he.union(tn))}bt<te.length?Pe():St()};return Pe(),()=>{R=!0,I!==null&&re.cancelIdleCallback?.(I),$!==null&&window.clearTimeout($)}},[S,z,v]),(0,ge.useEffect)(()=>{Ko(v)},[v]),(0,ge.useEffect)(()=>{let R=new AbortController;return Oa(v,R.signal),()=>{R.abort(),Qi(v)}},[v]);let V=(0,ge.useMemo)(()=>{let R={};for(let[I,$]of Object.entries(t))R[$.modelObjectId??I]=I;return R},[t]),A=(0,ge.useMemo)(()=>Object.entries(t).map(([R,I])=>`${R}${I.modelObjectId??R}`).sort().join(""),[t]),X=(0,ge.useMemo)(()=>Object.entries(t).map(([R,I])=>JSON.stringify([R,I.modelObjectId??R,I.transform??null])).sort().join(""),[t]),j=(0,ge.useRef)(new Map);(0,ge.useEffect)(()=>{let R=new Map,I=new Map;for(let[te,he]of Object.entries(t)){if(!he.transform)continue;let pe=z[he.modelObjectId??te];pe&&(R.set(pe,he.transform),I.set(pe,Xa(pe)))}let $=new Set([...j.current.keys(),...R.keys()]);for(let te of $){Tl(te,void 0,E);for(let he of Xa(te))qa(he)}v.updateMatrixWorld(!0);let re=new Map;for(let te of I.values())for(let he of te)re.has(he)||re.set(he,he.matrixWorld.clone());for(let[te,he]of R)Tl(te,he,E);j.current=R,v.updateMatrixWorld(!0);for(let[te,he]of re)Ml(te,he);S()},[v,z,E,X,S]),(0,ge.useEffect)(()=>()=>{for(let R of Xa(v))qa(R)},[v]);let k=(0,ge.useMemo)(()=>{let R={};for(let[I,$]of Object.entries(t)){let re=$.modelObjectId??I,te=z[re];if(!hr(te))continue;let he=$o(te);he&&(R[I]=Xr(he,pe=>{let bt=Wa(pe),St=yl(bt??new je.MeshStandardMaterial);return wl(St),St}))}return R},[z,A]);(0,ge.useEffect)(()=>{u&&(u.current=k)},[k,u]),(0,ge.useEffect)(()=>()=>{for(let R of Object.values(k))fr(R,I=>I.dispose())},[k]);let B=p?.model.shading??"lit",Y=p?.model.renderer??"pbr",q=p?.wireframe.enabled??!1,ue=p?.wireframe.color??"#93c5fd",Ee=p?.wireframe.opacity??1,be=(0,ge.useMemo)(()=>{let R={};if(B!=="unlit")return R;for(let[I,$]of Object.entries(k))R[I]=Xr($,re=>{let te=new je.MeshBasicMaterial;return te.color.copy(re.color),te.map=re.map,te.alphaMap=re.alphaMap,te.alphaTest=re.alphaTest,te.transparent=re.transparent,te.opacity=re.opacity,te.side=re.side,te});return R},[k,B]),Ce=(0,ge.useMemo)(()=>{let R={};if(B!=="normals")return R;for(let[I,$]of Object.entries(k))R[I]=Xr($,()=>new je.MeshNormalMaterial);return R},[k,B]),De=(0,ge.useMemo)(()=>{let R={};if(B!=="lit"||Y!=="matcap")return R;let I=ol();for(let[$,re]of Object.entries(k))R[$]=Xr(re,te=>{let he=new je.MeshMatcapMaterial;return he.matcap=I,he.color.copy(te.color),he.alphaMap=te.alphaMap,he.alphaTest=te.alphaTest,he.side=te.side,he});return R},[k,B,Y]);(0,ge.useEffect)(()=>()=>{for(let R of Object.values(be))fr(R,I=>I.dispose());for(let R of Object.values(Ce))fr(R,I=>I.dispose());for(let R of Object.values(De))fr(R,I=>I.dispose())},[be,Ce,De]);let ze=R=>B==="normals"?Ce[R]:B==="unlit"?be[R]:Y==="matcap"?De[R]:k[R],se=(0,ge.useRef)(o);se.current=o,(0,ge.useEffect)(()=>{se.current?.(v)},[v]);let Lt=(0,ge.useMemo)(()=>{let R={};for(let[I,$]of Object.entries(t)){let re=$.modelObjectId??I,te=z[re];te&&(R[I]=te)}return R},[z,A]);(0,ge.useEffect)(()=>(c.current=Lt,l?.(),()=>{c.current===Lt&&(c.current={})}),[Lt,c,l]);let Xe=(0,ge.useRef)({});(0,ge.useEffect)(()=>()=>{for(let R of Object.values(Xe.current))for(let[I,$]of Object.entries(R))$&&ta($,ia(I));Xe.current={}},[]);let Ge=(0,ge.useMemo)(()=>{let R=new Map;for(let[I,$]of Object.entries(t)){let re=d===$||d?.id===$.id||d?.modelObjectId===$.modelObjectId,te=g&&(M===I||re),he=te||n===I;(te||he)&&R.set(I,{emissive:te,matcap:he})}return R},[t,g,M,n,d]),$e=(0,ge.useRef)(Ge);$e.current=Ge,(0,ge.useEffect)(()=>{let R=new Set;for(let[I,$]of Object.entries(t)){R.add(I);let re=$.modelObjectId??I,te=z[re];if(!hr(te))continue;te.visible=$.visible!==!1;let he=k[I];if(!he)continue;if(Y!=="uv-checker"){let Se=ze(I);Se&&(te.material=Se)}if($.visible===!1)continue;let pe=be[I],bt=De[I],St=i[I]??i[$.modelObjectId??I],Pe=$.style?.material,Ze=Xe.current[I]??{};for(let Se of Yo){let Dt=$t(Pe,Se),pn=Ze[Se];if(pn===Dt)continue;let Tn=ia(Se);pn&&ta(pn,Tn),Dt?(al(Dt,Tn,S),Ze[Se]=Dt):delete Ze[Se]}Object.keys(Ze).length>0?Xe.current[I]=Ze:delete Xe.current[I];let Et=St?.hex??Pe?.baseColor;fr(he,(Se,Dt)=>{let pn=Ya(Se);_l(Se,Pe,Et);let Tn=Se.userData.reactImmersiveConfiguredEmissive;Tn?.isColor?Tn.copy(Se.emissive):Se.userData.reactImmersiveConfiguredEmissive=Se.emissive.clone();let tn=$e.current.get(I);tn?.emissive&&Se.emissive.add(Fo),pn!==Ya(Se)&&(Se.needsUpdate=!0);let qt=Sl(pe,Dt);if(qt){let Fr=Ya(qt);qt.color.copy(Se.color),qt.map=Se.map,qt.alphaMap=Se.alphaMap,qt.alphaTest=Se.alphaTest,qt.transparent=Se.transparent,qt.opacity=Se.opacity,qt.side=Se.side,Fr!==Ya(qt)&&(qt.needsUpdate=!0)}let ut=Sl(bt,Dt);if(ut){let Fr=Ya(ut);tn?.matcap?ut.color.set(si.color):ut.color.copy(Se.color),ut.map=Se.map,ut.alphaMap=Se.alphaMap,ut.alphaTest=Se.alphaTest,ut.transparent=Se.transparent,ut.opacity=Se.opacity,ut.side=Se.side,Fr!==Ya(ut)&&(ut.needsUpdate=!0)}})}for(let I of Object.keys(Xe.current))if(!R.has(I)){for(let[$,re]of Object.entries(Xe.current[I]))re&&ta(re,ia($));delete Xe.current[I]}S()},[t,z,k,be,Ce,De,i,B,Y,S]);let rt=(0,ge.useRef)(new Map);(0,ge.useEffect)(()=>{let R=rt.current,I=new Set([...R.keys(),...Ge.keys()]),$=!1;for(let re of I){let te=R.get(re),he=Ge.get(re),pe=!!te?.emissive!=!!he?.emissive,bt=!!te?.matcap!=!!he?.matcap;if(!pe&&!bt)continue;$=!0;let St=k[re],Pe=De[re];St&&fr(St,(Ze,Et)=>{let Se=Ze.userData.reactImmersiveConfiguredEmissive;pe&&Se?.isColor&&(Ze.emissive.copy(Se),he?.emissive&&Ze.emissive.add(Fo));let Dt=Sl(Pe,Et);bt&&Dt&&(he?.matcap?Dt.color.set(si.color):Dt.color.copy(Ze.color))})}rt.current=Ge,$&&S()},[Ge,k,De,S]),(0,ge.useEffect)(()=>{if(Y!=="uv-checker")return;let R=Hh(),I=[];return v.traverse($=>{if(!hr($))return;let re=$.material,te=Array.isArray(re)?re:[re],he=!!$.geometry.getAttribute("uv"),pe=te.map((St,Pe)=>{let Ze=new je.MeshBasicMaterial({color:he?"#ffffff":"#ff00ff",map:he?R:null,side:St.side});return Ze.name=`${$.name||"mesh"}-uv-checker-${Pe}`,Ze.toneMapped=!1,Ze}),bt=Array.isArray(re)?pe:pe[0];$.material=bt,I.push({node:$,original:re,diagnostic:bt})}),S(),()=>{for(let{node:$,original:re,diagnostic:te}of I){$.material=re;let he=Array.isArray(te)?te:[te];for(let pe of he)pe.dispose()}S()}},[v,Y,S]),(0,ge.useEffect)(()=>{if(!q)return;let R=[];for(let[I,$]of Object.entries(t)){let re=$.modelObjectId??I,te=z[re];if(!hr(te))continue;let he=new je.MeshBasicMaterial({color:ue,wireframe:!0,transparent:!0,opacity:Ee,depthTest:!1,depthWrite:!1,side:je.DoubleSide,toneMapped:!1}),pe=te.clone(!1);pe.name="",pe.position.set(0,0,0),pe.quaternion.identity(),pe.scale.set(1,1,1),pe.matrix.identity(),pe.matrixAutoUpdate=!0,pe.material=he,pe.castShadow=!1,pe.receiveShadow=!1,pe.frustumCulled=!1,pe.renderOrder=1,pe.userData={isWireframeOverlay:!0},pe.raycast=()=>{},te.morphTargetInfluences&&(pe.morphTargetInfluences=te.morphTargetInfluences),te.add(pe),R.push({node:te,overlay:pe})}return S(),()=>{for(let{node:I,overlay:$}of R)I.remove($),$.material.dispose()}},[q,ue,Ee,z,t,S]);let it=(0,ge.useMemo)(()=>km(m.animations),[m.animations]),Qt=(0,ge.useRef)(s);Qt.current=s;let qe=(0,ge.useRef)(p);qe.current=p;let on=(0,ge.useRef)(null),Gt=(0,ge.useRef)({}),Ke=(0,ge.useRef)(null),le=(0,ge.useRef)(null),J=(0,ge.useRef)(1),ee=(0,ge.useRef)(new Set),Ve=(0,ge.useRef)(0),tt=()=>({currentClip:le.current,isPlaying:Ke.current?.paused===!1,speed:J.current,time:Ke.current?.time??0,duration:Ke.current?.getClip().duration??0}),Fe=()=>{let R=tt();ee.current.forEach(I=>I(R))},xe=(R,I)=>{let $=Im(I);R.setLoop($==="once"?je.LoopOnce:je.LoopRepeat,$==="once"?1:1/0),R.clampWhenFinished=$==="once";let re=Hd(I?.speed??J.current);J.current=re,R.setEffectiveTimeScale(re)},ot=()=>{Ke.current?.stop(),Ke.current=null,le.current=null,Fe(),S()},gt=()=>{Ke.current&&(Ke.current.paused=!0,Fe(),S())},At=R=>{let I=Hd(R);J.current=I,Ke.current?.setEffectiveTimeScale(I),Fe()},Kn=R=>{let I=Ke.current;if(!I)return;let $=I.getClip().duration;I.time=Math.min(Math.max(R,0),$),on.current?.update(0),Fe(),S()},Ln=R=>{let I=Gt.current[R];if(!I)return;let $=xl(qe.current,R);if(!$?.hidden){if(Ke.current===I&&I.paused){xe(I,$),I.paused=!1,le.current=R,Fe(),S();return}Ke.current&&Ke.current!==I&&Ke.current.stop(),xe(I,$),I.paused=!1,I.enabled=!0,I.reset().play(),Ke.current=I,le.current=R,Fe(),S()}};(0,ge.useEffect)(()=>{let R=new je.AnimationMixer(v);on.current=R;let I={};for(let{clip:pe,sourceName:bt}of it)I[bt]=R.clipAction(pe);Gt.current=I;let $=pe=>{pe.action&&pe.action===Ke.current&&ot()};R.addEventListener("finished",$);let re=()=>{};Qt.current?.({clips:it.map(({sourceName:pe})=>pe),clipDetails:it.map(({sourceName:pe,duration:bt})=>({sourceName:pe,duration:bt})),play:it.length?Ln:re,pause:it.length?gt:re,stop:it.length?ot:re,setSpeed:it.length?At:re,seek:it.length?Kn:re,getState:tt,subscribe:pe=>(ee.current.add(pe),pe(tt()),()=>{ee.current.delete(pe)})}),J.current=1,Fe();let te=qe.current?.animations.autoplayClip,he=te?xl(qe.current,te):void 0;return te&&!he?.hidden&&Ln(te),()=>{R.removeEventListener("finished",$),R.stopAllAction(),R.uncacheRoot(v),on.current=null,Gt.current={},Ke.current=null,le.current=null,J.current=1,Fe()}},[v,it]),(0,ge.useEffect)(()=>{let R=le.current,I=Ke.current;if(!R||!I||!p?.animations)return;let $=xl(p,R);if($?.hidden){ot();return}$&&(xe(I,$),Fe())},[p?.animations]),(0,$a.useFrame)((R,I)=>{if(on.current&&Ke.current?.paused===!1){if(on.current.update(I),!h)for(let[$,re]of j.current)Tl($,re,E);S(),Ve.current+=I,Ve.current>=.066&&(Ve.current=0,Fe(),Ko(v))}});let Ne=(0,ge.useMemo)(()=>(p?.model.rotation??[0,0,0]).map(R=>R*Math.PI/180),[p?.model.rotation]);(0,$a.useFrame)((R,I)=>{if(!L.current)return;let $=L.current.rotation;$.x=je.MathUtils.lerp($.x,Ne[0],1-Math.exp(-5*I)),$.y=je.MathUtils.lerp($.y,Ne[1],1-Math.exp(-5*I)),$.z=je.MathUtils.lerp($.z,Ne[2],1-Math.exp(-5*I)),Math.abs($.x-Ne[0])<1e-4&&Math.abs($.y-Ne[1])<1e-4&&Math.abs($.z-Ne[2])<1e-4||S()});let dt=(0,ge.useRef)([]),_t=(0,ge.useRef)(0),We=(0,ge.useRef)(0),Wt=(0,ge.useMemo)(()=>new je.Vector3,[]);(0,ge.useEffect)(()=>{let R=new Map;for(let[St,Pe]of Object.entries(t)){let Ze=z[Pe.modelObjectId??St];Ze&&R.set(Ze,Pe)}for(let St of dt.current)Tl(St.node,R.get(St.node)?.transform,E);We.current=0,v.updateWorldMatrix(!0,!0);let I=new je.Box3().setFromObject(v),$=I.getCenter(new je.Vector3),re=I.getSize(new je.Vector3).length()*.5;_t.current=Number.isFinite(re)?re:0;let te=[...R.keys()],he=new Set(te),pe=[],bt=new je.Vector3;for(let St of te){if(!St.parent)continue;let Pe=St.parent,Ze=!1;for(;Pe;){if(he.has(Pe)){Ze=!0;break}Pe=Pe.parent}if(Ze)continue;let Et=new je.Box3().setFromObject(St);if(Et.isEmpty())continue;Et.getCenter(bt);let Se=bt.clone().sub($);Se.lengthSq()<1e-8||(Se.normalize(),pe.push({node:St,restLocalPos:St.position.clone(),restWorldPos:St.getWorldPosition(new je.Vector3),worldDir:Se,parentInverse:new je.Matrix4().copy(St.parent.matrixWorld).invert()}))}dt.current=pe,S()},[v,z,A,X,E,S]),(0,ge.useEffect)(()=>{S()},[x,S]),(0,$a.useFrame)((R,I)=>{let $=dt.current;if($.length===0)return;let re=Math.min(Math.max(x,0),1),te=We.current;if(Math.abs(te-re)<1e-4){if(te===re)return;We.current=re}else We.current=je.MathUtils.lerp(te,re,1-Math.exp(-6*I)),S();let he=We.current*_t.current;for(let pe of $)Wt.copy(pe.worldDir).multiplyScalar(he).add(pe.restWorldPos).applyMatrix4(pe.parentInverse),pe.node.position.copy(Wt)});let Bt=R=>{let I=R;for(;I;){let $=Ho(I),re=$?V[$]:void 0;if(re&&t[re])return[re,t[re]];I=I.parent}return null},Xt=R=>{let I=Bt(R.object);if(!I)return;let[,$]=I;$.selectable!==!1&&(R.stopPropagation(),r($))},en=R=>{if(!g)return;let I=Bt(R.object);if(!I)return;let[$,re]=I;re.hoverable!==!1&&(R.stopPropagation(),b("pointer"),C($),a?.(re))},Mr=R=>{g&&(R.stopPropagation(),_(),C(null),a?.(null))},we=(0,ge.useMemo)(()=>!Js(v),[v]);return(0,Gd.jsx)("group",{ref:L,children:(0,Gd.jsx)("primitive",{object:v,...we?{onClick:Xt,...g?{onPointerOver:en,onPointerOut:Mr}:{}}:{}})})}var nt=require("react"),Ql=require("@react-three/fiber");var Ft=require("three");var Or=require("three");function jm(e){let t={};for(let[n,i]of Object.entries(e))t[i.modelObjectId??n]=n;return t}function qd(e){let t=e,n=null;for(;t;){let i=t.userData?.ri_name;if(typeof i=="string"&&i)return i;!n&&t.name&&(n=t.name),t=t.parent}return n}function Hm(e,t){return e||(t?t.modelObjectId??t.id:null)}function Pl(e,t){let n=qd(e);if(!n)return null;let i=t.keyByModelObject[n]??n,r=t.objectBindings[i];return r?{key:i,binding:r}:null}var Ka=new Or.Vector3,Xd=new Or.Vector3;function Al(e,t){if(!hr(e)&&!e.userData.riLogicalObject)return;let n=Pl(e,t);if(!n)return;let i=Gm(e);if(i.rest??(i.rest={position:e.position.clone(),rotation:e.rotation.clone(),scale:e.scale.clone()}),t.suspendTransforms)return;let r=i.rest,a=n.binding.transform;a?.position?e.position.fromArray(a.position):e.position.copy(r.position),a?.rotation?e.rotation.set(a.rotation[0],a.rotation[1],a.rotation[2],r.rotation.order):e.rotation.copy(r.rotation),a?.scale?e.scale.fromArray(a.scale):e.scale.copy(r.scale);let o=t.explode;if(o&&o.factor>0&&o.radius>0){e.updateWorldMatrix(!0,!1),Xd.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let c=s.userData.ri_center;Array.isArray(c)&&c.length===3?Ka.fromArray(c).applyMatrix4(e.matrixWorld).sub(o.centre):Ka.copy(Xd).sub(o.centre),Ka.lengthSq()>1e-8&&(Ka.normalize().multiplyScalar(o.factor*o.radius).add(Xd),e.parent&&e.parent.worldToLocal(Ka),e.position.copy(Ka))}e.updateMatrix(),e.updateWorldMatrix(!0,!1)}function Za(e,t){e.traverse(n=>Al(n,t))}function Gm(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function jx(e,t,n,i){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,i])}function Hx(e){if(e.textures){for(let t of Yo){let n=e.textures[t];n&&ta(n,ia(t))}e.textures=void 0}}function Gx(e,t,n){let i=e.textures??{};for(let r of Yo){let a=$t(t,r),o=i[r];if(o===a)continue;let s=ia(r);o&&ta(o,s),a?(al(a,s,n),i[r]=a):delete i[r]}e.textures=Object.keys(i).length>0?i:void 0}function Wx(e,t){if(t.shadingMode==="normals")return Xr(e,()=>new Or.MeshNormalMaterial);if(t.shadingMode==="unlit")return Xr(e,n=>{let i=new Or.MeshBasicMaterial;return i.color.copy(n.color),i.map=n.map,i.alphaMap=n.alphaMap,i.alphaTest=n.alphaTest,i.transparent=n.transparent,i.opacity=n.opacity,i.side=n.side,i});if(t.rendererMode==="matcap"){let n=ol();return Xr(e,i=>{let r=new Or.MeshMatcapMaterial;return r.matcap=n,r.color.copy(i.color),r.alphaMap=i.alphaMap,r.alphaTest=i.alphaTest,r.side=i.side,r})}return e}function Xx(e,t){if(!hr(e))return;let i=Gm(e);i.original??(i.original=$o(e));let r=Pl(e,t);if(!r){i.original&&(e.material=i.original),e.visible=!0;return}let{key:a,binding:o}=r;e.visible=o.visible!==!1,Al(e,t);let s=t.itemMaterials?.[a]?.hex??t.itemMaterials?.[o.modelObjectId??a]?.hex,c=a===t.selectedKey||t.highlightOnHover!==!1&&a===t.hoveredKey,l=jx(o,s,t,c);if(i.signature===l&&i.display){e.material=i.display;return}let u=o.style?.material;if(Gx(i,u,t.invalidate),!i.physical){let d=i.original??$o(e);if(!d)return;i.physical=Xr(d,p=>{let f=Wa(p),g=yl(f??new Or.MeshStandardMaterial);return wl(g),g})}fr(i.physical,d=>{_l(d,u,s??u?.baseColor),c&&(d.emissive.add(Fo),d.color.lerp(Oh,Ih)),d.needsUpdate=!0}),i.display&&i.display!==i.physical&&fr(i.display,d=>d.dispose()),i.display=Wx(i.physical,t),i.signature=l,e.material=i.display}function Wm(e,t){e.traverse(n=>Xx(n,t))}function Yd(e){e.traverse(t=>{if(!hr(t))return;let n=t.userData.riVisuals;n&&(n.rest&&(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&&fr(n.display,i=>i.dispose()),n.physical&&fr(n.physical,i=>i.dispose()),Hx(n),delete t.userData.riVisuals)})}var qm=new Ft.Matrix4().makeRotationX(Math.PI/2),Xm=qm.clone().invert();function qx(e){let t=new Ft.Vector3(e[0],e[1],e[2]),n=new Ft.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 Ft.Box3(t.clone().sub(n),t.clone().add(n))}function Yx(e){let t=e.getCenter(new Ft.Vector3),n=e.getSize(new Ft.Vector3).multiplyScalar(.5);return[t.x,t.y,t.z,n.x,0,0,0,n.y,0,0,0,n.z]}var El=class{constructor(){this.group=new Ft.Group;this.objects=new Map;this.geometry=new Ft.BoxGeometry(1,1,1);this.material=new Ft.MeshBasicMaterial;this.originalBounds=new WeakMap;this.signature="";this.lastContext=null;this.lastEffective=null;this.lastDragging=!1;this.version=0;this.tileVersions=new WeakMap;this.transforms=new Map}setCatalog(t){this.group.clear(),this.objects.clear();for(let n of t){let i=new Ft.Box3(new Ft.Vector3(...n.minimum),new Ft.Vector3(...n.maximum)).applyMatrix4(Xm),r=new Ft.Group;r.name=n.name,r.userData.ri_name=n.name,r.userData.riLogicalObject=!0,r.userData.ri_center=i.getCenter(new Ft.Vector3).toArray();let a=new Ft.Mesh(this.geometry,this.material);a.visible=!1,a.raycast=()=>{},a.position.copy(i.getCenter(new Ft.Vector3)),a.scale.copy(i.getSize(new Ft.Vector3)),r.add(a),this.group.add(r),this.objects.set(n.name,r)}this.signature="",this.lastContext=null}nodesByBinding(t){let n={};for(let[i,r]of this.objects){let a=t.keyByModelObject[i]??i;t.objectBindings[a]&&(n[a]=r)}return n}sync(t,n,i=!1){if(!i&&!this.lastDragging&&t===this.lastContext&&this.lastEffective)return this.lastEffective;this.lastContext=t,this.lastDragging=i;let r={...t,suspendTransforms:!1},a=n?t.objectBindings[n]:void 0,o=a?this.objects.get(a.modelObjectId??n):void 0;i&&o&&a&&(r={...r,objectBindings:{...t.objectBindings,[n]:{...a,transform:{position:o.position.toArray(),rotation:[o.rotation.x,o.rotation.y,o.rotation.z],scale:o.scale.toArray()}}}});for(let c of this.objects.values())i&&c===o||Al(c,r);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([c,l])=>`${c}:${l.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[c,l]of this.objects)l.matrix.equals(new Ft.Matrix4)||this.transforms.set(c,qm.clone().multiply(l.matrix).multiply(Xm))}return this.lastEffective=r,r}updateBounds(t){if(!t)return;let n=i=>{if(this.tileVersions.get(i)!==this.version){if(i.boundingVolume.box&&this.tileVersions.get(i)!==this.version){let r=this.originalBounds.get(i);r||(r={box:[...i.boundingVolume.box],error:i.geometricError},this.originalBounds.set(i,r));let a=qx(r.box),o=a.clone(),s=1;for(let l of i.extras?.featureIds??[]){let u=this.transforms.get(l);u&&(o.union(a.clone().applyMatrix4(u)),s=Math.max(s,u.getMaxScaleOnAxis()))}let c=Yx(o);i.boundingVolume.box=c,i.geometricError=r.error*s,i.engineData?.boundingVolume?.setObbData(c,i.engineData.transform),this.tileVersions.set(i,this.version)}i.children?.forEach(n)}};n(t)}dispose(){this.group.clear(),this.objects.clear(),this.geometry.dispose(),this.material.dispose()}};function $x(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function Ym(e){if(!e)return null;let t=e.length,n=e.indexOf("?"),i=e.indexOf("#");n!==-1&&(t=Math.min(t,n)),i!==-1&&(t=Math.min(t,i));let r=e.lastIndexOf(".",t),a=e.lastIndexOf("/",t),o=e.indexOf("://");return o!==-1&&o+2===a||r===-1||r<a?null:e.substring(r+1,t)||null}var Ll,kl=(Ll=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:n}=this,i,r=()=>{n.delete(i),e()};return i=t?t.requestAnimationFrame(r):requestAnimationFrame(r),n.set(i,e),i}static cancelAnimationFrame(e){let{pending:t,session:n}=this;t.delete(e),n?n.cancelAnimationFrame(e):cancelAnimationFrame(e)}static flushPending(){this.pending.forEach((e,t)=>{e(),this.cancelAnimationFrame(t)})}},gd(Ll,"pending",new Map),gd(Ll,"session",null),Ll),$m=2**30,Jm=class{get unloadPriorityCallback(){return this._unloadPriorityCallback}set unloadPriorityCallback(e){e.length===1?(console.warn('LRUCache: "unloadPriorityCallback" function has been changed to take two arguments.'),this._unloadPriorityCallback=(t,n)=>{let i=e(t),r=e(n);return i<r?-1:+(i>r)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*$m,this.maxBytesSize=.4*$m,this.unloadPercent=.05,this.autoMarkUnused=!0,this.cachedBytes=0,this.itemSet=new Map,this.itemList=[],this.usedSet=new Set,this.callbacks=new Map,this.unloadingHandle=-1,this.bytesMap=new Map,this.loadedSet=new Set,this._unloadPriorityCallback=null;let e=this.itemSet;this.defaultPriorityCallback=t=>e.get(t)}isFull(){return this.itemSet.size>=this.maxSize||this.cachedBytes>=this.maxBytesSize}getMemoryUsage(e){return this.bytesMap.get(e)||0}setMemoryUsage(e,t){let{bytesMap:n,itemSet:i}=this;i.has(e)&&(this.cachedBytes-=n.get(e)||0,n.set(e,t),this.cachedBytes+=t)}add(e,t){let n=this.itemSet;if(n.has(e)||this.isFull())return!1;let i=this.usedSet,r=this.itemList,a=this.callbacks;return r.push(e),i.add(e),n.set(e,Date.now()),a.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,n=this.itemSet,i=this.itemList,r=this.bytesMap,a=this.callbacks,o=this.loadedSet;if(n.has(e)){this.cachedBytes-=r.get(e)||0,r.delete(e),a.get(e)(e);let s=i.indexOf(e);return i.splice(s,1),t.delete(e),n.delete(e),a.delete(e),o.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:n,loadedSet:i}=this;n.has(e)&&(t===!0?i.add(e):i.delete(e))}markUsed(e){let t=this.itemSet,n=this.usedSet;t.has(e)&&!n.has(e)&&(t.set(e,Date.now()),n.add(e))}markUnused(e){this.usedSet.delete(e)}markAllUnused(){this.usedSet.clear()}isUsed(e){return this.usedSet.has(e)}unloadUnusedContent(){let{unloadPercent:e,minSize:t,maxSize:n,itemList:i,itemSet:r,usedSet:a,loadedSet:o,callbacks:s,bytesMap:c,minBytesSize:l,maxBytesSize:u}=this,d=i.length-a.size,p=i.length-o.size,f=Math.max(Math.min(i.length-t,d),0),g=this.cachedBytes-l,y=this.unloadPriorityCallback||this.defaultPriorityCallback,T=!1,x=f>0&&d>0||p&&i.length>n;if(d&&this.cachedBytes>l||p&&this.cachedBytes>u||x){i.sort((b,_)=>{let v=a.has(b);if(v===a.has(_)){let P=o.has(b);return P===o.has(_)?-y(b,_):P?1:-1}else return v?1:-1});let h=Math.max(t*e,f*e),m=Math.ceil(Math.min(h,d,f)),S=Math.max(e*g,e*l),M=Math.min(S,g),C=0,L=0;for(;this.cachedBytes-L>u||i.length-C>n;){let b=i[C],_=c.get(b)||0;if(a.has(b)&&o.has(b)||this.cachedBytes-L-_<u&&i.length-C<=n)break;L+=_,C++}for(;L<M||C<m;){let b=i[C],_=c.get(b)||0;if(a.has(b)||this.cachedBytes-L-_<l&&C>=m)break;L+=_,C++}i.splice(0,C).forEach(b=>{this.cachedBytes-=c.get(b)||0,s.get(b)(b),c.delete(b),r.delete(b),s.delete(b),o.delete(b),a.delete(b)}),T=C<f||L<g&&C<d,T&&(T=C>0)}T&&(this.unloadingHandle=kl.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){kl.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},Kx=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Ja=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=>{kl.requestAnimationFrame(e)},this._runjobs=()=>{this.scheduled=!1,this.tryRunJobs()}}sort(){let e=this.priorityCallback,t=this.items;e!==null&&t.sort(e)}has(e){return this.callbacks.has(e)}add(e,t){let n={callback:t,reject:null,resolve:null,promise:null};return n.promise=new Promise((i,r)=>{let a=this.items,o=this.callbacks;n.resolve=i,n.reject=r,a.unshift(e),o.set(e,n),this.autoUpdate&&this.scheduleJobRun()}),n.promise}remove(e){let t=this.items,n=this.callbacks,i=t.indexOf(e);if(i!==-1){let r=n.get(e);r.promise.catch(a=>{if(a.name!=="AbortError")throw a}),r.reject(new Kx),t.splice(i,1),n.delete(e)}}removeByFilter(e){let{items:t}=this;for(let n=0;n<t.length;n++){let i=t[n];e(i)&&(this.remove(i),n--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,n=this.maxJobs,i=0,r=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;n>this.currJobs&&e.length>0&&i<n;){this.currJobs++,i++;let a=e.pop(),{callback:o,resolve:s,reject:c}=t.get(a);t.delete(a);let l;try{l=o(a)}catch(u){c(u),r();continue}l instanceof Promise?l.then(s).catch(c).finally(r):(s(l),r())}}flush(e){let{items:t,callbacks:n}=this,i=t.indexOf(e);if(!n.has(e))return;let{callback:r,resolve:a,reject:o}=n.get(e);n.delete(e),t.splice(i,1);let s;try{s=r(e)}catch(c){o(c);return}return s instanceof Promise?s.then(a).catch(o):a(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},Zx=class{get running(){for(let e of this.originQueues.values())if(e.running)return!0;return!1}get maxJobsPerOrigin(){return this._maxJobsPerOrigin}set maxJobsPerOrigin(e){this._maxJobsPerOrigin=e,this.originQueues.forEach(t=>t.maxJobs=e)}get maxJobs(){return this.maxJobsPerOrigin}set maxJobs(e){console.warn('DownloadPriorityQueue: "maxJobs" is no longer valid and limits jobs per server origin. Use "maxJobsPerOrigin", instead.'),this.maxJobsPerOrigin=e}get priorityCallback(){return this._priorityCallback}set priorityCallback(e){this._priorityCallback=e,this.originQueues.forEach(t=>t.priorityCallback=e)}constructor(){this.originQueues=new Map,this._itemQueues=new WeakMap,this._maxJobsPerOrigin=6,this._priorityCallback=null}add(e,t,n,i=null){this.originQueues.forEach((c,l)=>{c.running||this.originQueues.delete(l)});let r=e===null?null:$x(e),a=this.originQueues.get(r);a||(a=new Ja,a.maxJobs=this._maxJobsPerOrigin,a.priorityCallback=this._priorityCallback,this.originQueues.set(r,a));let o=this._itemQueues.get(t);if(o&&o!==a&&o.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,a);let s=a.add(t,n);return i!==null&&(i.aborted?this.remove(t):i.addEventListener("abort",()=>this.remove(t),{once:!0})),s}remove(e){let t=this._itemQueues.get(e);t&&(t.remove(e),this._itemQueues.delete(e))}has(e){let t=this._itemQueues.get(e);return!!(t&&t.has(e))}};var Qa=6378137,vM=1/298.257223563,Qm=6356752314245179e-9,Rl={inView:!1,error:1/0,distanceFromCamera:1/0};function Nl(e){return e===4||e===-1}function di(e,t){return Ol(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function Ol(e){return!!e.traversal}function Qo(e){let{children:t}=e,n=t.length===0||Ol(t[t.length-1]),i=!e.internal.hasUnrenderableContent||Nl(e.internal.loadingState);return n&&i}function oa(e){return e.traversal.unconditionallyRefine}function Jo(e,t){if(Ol(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,Rl),e.traversal.inFrustum=Rl.inView,e.traversal.error=Rl.error,e.traversal.distanceFromCamera=Rl.distanceFromCamera,e.traversal.unconditionallyRefine=e.internal.hasUnrenderableContent,!e.traversal.unconditionallyRefine))){let n=e.parent;for(;n&&n.traversal.unconditionallyRefine;)n=n.parent;n&&n.geometricError<=e.geometricError&&(e.traversal.unconditionallyRefine=!0)}}function $d(e,t,n=!1){if(Jo(e,t),n?t.markTileUsed(e):Bl(e),oa(e)&&Qo(e)){let i=e.children;for(let r=0,a=i.length;r<a;r++)$d(i[r],t,n)}}function ef(e,t){if(Jo(e,t),e.traversal.usedLastFrame&&(Bl(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||oa(e))&&Qo(e))){let n=e.children;for(let i=0,r=n.length;i<r;i++)ef(n[i],t)}}function Bl(e){e.traversal.used=!0}function Jx(e,t){return!(e.traversal.error<=t.errorTarget&&!oa(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!Qo(e))}function tf(e,t){let{frameCount:n}=t,{children:i}=e;for(let r=0,a=i.length;r<a;r++){let o=i[r];di(o,n)&&(o.traversal.active&&(o.traversal.kicked=!0,o.traversal.active=!1),tf(o,t))}}function Km(e){return!oa(e)&&(!e.internal.hasContent||Nl(e.internal.loadingState))}function nf(e,t){if(Jo(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(!Jx(e,t)){Bl(e);return}let i=!1,r=!1,a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];nf(c,t),i||(i=di(c,t.frameCount)),r||(r=c.traversal.inFrustum)}if(e.refine==="REPLACE"&&!r&&a.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let o=0,s=a.length;o<s;o++)$d(a[o],t,!0);return}if(Bl(e),e.refine==="REPLACE"&&i&&(t.loadSiblings||t.loadAncestors))for(let o=0,s=a.length;o<s;o++)$d(a[o],t)}function rf(e,t){let n=t.frameCount;if(!di(e,n))return;let i=e.children,r=!1;for(let o=0,s=i.length;o<s;o++){let c=i[o];r||(r=di(c,n))}if(!r)e.traversal.isLeaf=!0;else{for(let s=0,c=i.length;s<c;s++)rf(i[s],t);let o=!0;for(let s=0,c=i.length;s<c;s++){let l=i[s];if(di(l,n)){let u=!oa(l),d=!l.internal.hasContent||Nl(l.internal.loadingState);u&&d||l.traversal.allChildrenLoaded||(o=!1)}}e.traversal.allChildrenLoaded=o}let a=!0;for(let o=0,s=i.length;o<s;o++){let c=i[o];di(c,t.frameCount)&&!c.traversal.allUsedChildrenProcessed&&(a=!1)}e.traversal.allUsedChildrenProcessed=a&&Qo(e)}function af(e,t){if(!di(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!oa(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!oa(e)&&(e.traversal.active=!0,Qo(e)&&e.internal.hasContent&&!Nl(e.internal.loadingState)))for(let r=0,a=n.length;r<a;r++)ef(n[r],t);return}let i=n.length>0;for(let r=0,a=n.length;r<a;r++){let o=n[r];af(o,t),di(o,t.frameCount)&&!(o.traversal.active&&Km(o))&&!o.traversal.allChildrenReady&&(i=!1)}e.traversal.allChildrenReady=i,e.refine==="REPLACE"&&!i&&e.traversal.wasSetActive&&Km(e)&&(e.traversal.active=!0,tf(e,t))}function of(e,t){Jo(e,t);let n=di(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||Ol(e)&&e.traversal.usedLastFrame){let i=!1,r=!1;n?(i=e.traversal.active,r=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):Jo(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(i&&t.stats.active++,r&&t.stats.visible++,e.traversal.wasSetActive!==i&&t.invokeOnePlugin(o=>o.setTileActive&&o.setTileActive(e,i)),e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(o=>o.setTileVisible&&o.setTileVisible(e,r))):e.internal.hasRenderableContent||(r=e.traversal.isLeaf,e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(o=>o.setEmptyTileVisible&&o.setEmptyTileVisible(e,r))),e.traversal.visible=r,e.traversal.active=i;let a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];of(c,t)}}}function Qx(e,t){nf(e,t),rf(e,t),af(e,t),of(e,t)}function ey(e){let t=null;return()=>{t===null&&(t=kl.requestAnimationFrame(()=>{t=null,e()}))}}function ty(e,t=null,n=null){let i=[];for(i.push(e),i.push(null),i.push(0);i.length>0;){let r=i.pop(),a=i.pop(),o=i.pop();if(t&&t(o,a,r)){n&&n(o,a,r);return}let s=o.children;if(s)for(let c=s.length-1;c>=0;c--)i.push(s[c]),i.push(o),i.push(r+1);n&&n(o,a,r)}}var Zm=Symbol("PLUGIN_REGISTERED"),Pi={inView:!0,error:0,distance:1/0},ny=(e,t)=>{let n=e.priority||0,i=t.priority||0;return n===i?!e.traversal||!t.traversal?0:e.traversal.used===t.traversal.used?e.traversal.error===t.traversal.error?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.traversal.error>t.traversal.error?1:-1:e.traversal.used?1:-1:n>i?1:-1},ry=(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,iy=(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,es=(e,t)=>{let n=e.priority??1/0,i=t.priority??1/0;if(n!==i)return n>i?1:-1;if(!e.internal||!t.internal)return 0;let r=e.internal.renderer,a=t.internal.renderer,o=!r.loadAncestors,s=!a.loadAncestors;return o&&s?ry(e,t):ny(e,t)},sf=new Jm;sf.unloadPriorityCallback=iy;var Dl=new Zx;Dl.maxJobsPerOrigin=25,Dl.priorityCallback=es;var Kd=new Ja;Kd.maxJobs=5,Kd.priorityCallback=es;var Zd=new Ja;Zd.maxJobs=25,Zd.priorityCallback=(e,t)=>{let n=e.parent,i=t.parent;return n===i?0:n?i?es(n,i):-1:1};var lf=class{get root(){let e=this.rootTileset;return e?e.root:null}get loadProgress(){let{stats:e,isLoading:t}=this,n=e.queued+e.downloading+e.parsing,i=e.inCacheSinceLoad+ +!!t;return i===0?1:1-n/i}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof Ja){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=sf,this.downloadQueue=Dl,this.parseQueue=Kd,this.processNodeQueue=Zd,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=ey(()=>{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[Zm]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,n=e.priority||0,i=t.length;for(let r=0;r<t.length;r++)if((t[r].priority||0)>n){i=r;break}t.splice(i,0,e),e[Zm]=!0,e.init&&e.init(this)}unregisterPlugin(e){let t=this.plugins;if(typeof e=="string"&&(e=this.getPluginByName(e)),t.includes(e)){let n=t.indexOf(e);return t.splice(n,1),e.dispose&&e.dispose(),!0}return!1}getPluginByName(e){return this.plugins.find(t=>t.name===e)||null}invokeOnePlugin(e){let t=[...this.plugins,this];for(let n=0;n<t.length;n++){let i=e(t[n]);if(i)return i}return null}invokeAllPlugins(e){let t=[...this.plugins,this],n=[];for(let i=0;i<t.length;i++){let r=e(t[i]);r&&n.push(r)}return n.length===0?null:Promise.all(n)}traverse(e,t,n=!0){this.root&&ty(this.root,(i,...r)=>(n&&this.ensureChildrenArePreprocessed(i,!0),e?e(i,...r):!1),t)}getAttributions(e=[]){return this.invokeAllPlugins(t=>t!==this&&t.getAttributions&&t.getAttributions(e)),e}update(){let{lruCache:e,usedSet:t,stats:n,root:i,downloadQueue:r,parseQueue:a,processNodeQueue:o}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(l=>l.loadRootTileset&&l.loadRootTileset()).then(l=>{let u=this.rootURL;u!==null&&this.invokeAllPlugins(d=>u=d.preprocessURL?d.preprocessURL(u,null):u),this.rootLoadingState=4,this.rootTileset=l,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:l,url:u}),this.dispatchEvent({type:"load-root-tileset",tileset:l,url:u})}).catch(l=>{this.rootLoadingState=-1,console.error(l),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:l,url:this.rootURL})})),!i)return;let s=null;if(this.invokeAllPlugins(l=>{if(l.doTilesNeedUpdate){let u=l.doTilesNeedUpdate();s=s===null?u:!!(s||u)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),n.inFrustum=0,n.used=0,n.active=0,n.visible=0,n.tilesProcessed=0,this.frameCount++,t.forEach(l=>e.markUnused(l)),t.clear(),this.prepareForTraversal(),Qx(i,this),this.removeUnusedPendingTiles();let c=this.queuedTiles;c.sort(e.unloadPriorityCallback);for(let l=0,u=c.length;l<u&&!e.isFull();l++)this.requestTileContents(c[l]);c.length=0,e.scheduleUnload(),(r.running||a.running||o.running)===!1&&this.isLoading===!0&&(this.cachedSinceLoadComplete.clear(),n.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1),this.dispatchEvent({type:"update-after"})}resetFailedTiles(){this.rootLoadingState===-1&&(this.rootLoadingState=0);let e=this.stats;e.failed!==0&&(this.traverse(t=>{t.internal.loadingState===-1&&(t.internal.loadingState=0)},null,!1),e.failed=0)}calculateTileViewErrorWithPlugin(e,t){this.calculateTileViewError(e,t);let{errorFalloff:n,errorFalloffDensity:i}=this;if(n>0&&Number.isFinite(t.distanceFromCamera)){let s=t.distanceFromCamera*i;t.error-=n*(1-Math.exp(-s*s))}let r=null,a=0,o=1/0;this.invokeAllPlugins(s=>{s!==this&&s.calculateTileViewError&&(Pi.inView=!0,Pi.error=0,Pi.distance=1/0,s.calculateTileViewError(e,Pi)&&(r===null&&(r=!0),r&&(r=Pi.inView),Pi.inView&&(o=Math.min(o,Pi.distance),a=Math.max(a,Pi.error))))}),t.inView&&r!==!1?(t.error=Math.max(t.error,a),t.distanceFromCamera=Math.min(t.distanceFromCamera,o)):r?(t.inView=!0,t.error=a,t.distanceFromCamera=o):t.inView=!1}dispose(){[...this.plugins].forEach(n=>{this.unregisterPlugin(n)});let e=this.lruCache,t=[];this.traverse(n=>(t.push(n),!1),null,!1);for(let n=0,i=t.length;n<i;n++)e.remove(t[n]);this.stats={queued:0,parsing:0,downloading:0,failed:0,inFrustum:0,traversed:0,used:0,active:0,visible:0},this.frameCount=0,this.loadingTiles.clear()}calculateBytesUsed(e,t){return 0}dispatchEvent(e){}addEventListener(e,t){}removeEventListener(e,t){}parseTile(e,t,n){return null}prepareForTraversal(){}disposeTile(e){e.traversal.visible&&(e.internal.hasRenderableContent?this.invokeOnePlugin(n=>n.setTileVisible&&n.setTileVisible(e,!1)):this.invokeOnePlugin(n=>n.setEmptyTileVisible&&n.setEmptyTileVisible(e,!1)),e.traversal.visible=!1),e.traversal.active&&e.internal.hasRenderableContent&&this.invokeOnePlugin(n=>n.setTileActive&&n.setTileActive(e,!1)),e.traversal.active=!1;let{scene:t}=e.engineData;t&&this.dispatchEvent({type:"dispose-model",scene:t,tile:e})}preprocessNode(e,t,n=null){if(this.processedTiles.add(e),this.stats.tilesProcessed++,e.content&&(!("uri"in e.content)&&"url"in e.content&&(e.content.uri=e.content.url,delete e.content.url),e.content.boundingVolume&&!("box"in e.content.boundingVolume||"sphere"in e.content.boundingVolume||"region"in e.content.boundingVolume)&&delete e.content.boundingVolume),e.parent=n,e.children=e.children||[],e.internal={hasContent:!1,hasRenderableContent:!1,hasUnrenderableContent:!1,loadingState:0,basePath:t,depth:-1,depthFromRenderedParent:-1,isVirtual:!1,virtualChildCount:0,renderer:this,...e.internal},e.content?.uri){let i=Ym(e.content.uri),r=!!(i&&/json$/.test(i));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=r,e.internal.hasRenderableContent=!r}else e.internal.hasContent=!1,e.internal.hasUnrenderableContent=!1,e.internal.hasRenderableContent=!1;n?(e.internal.depth=n.internal.depth+1,e.internal.depthFromRenderedParent=n.internal.depthFromRenderedParent+ +!!e.internal.hasRenderableContent):(e.internal.depth=0,e.internal.depthFromRenderedParent=+!!e.internal.hasRenderableContent),e.traversal={distanceFromCamera:1/0,error:1/0,inFrustum:!1,wasInFrustum:!1,isLeaf:!1,used:!1,usedLastFrame:!1,visible:!1,wasSetVisible:!1,active:!1,wasSetActive:!1,allChildrenReady:!1,allChildrenLoaded:!1,kicked:!1,allUsedChildrenProcessed:!1,lastFrameVisited:-1},n===null?e.refine=e.refine||"REPLACE":e.refine=e.refine||n.refine,e.engineData={scene:null,metadata:null,boundingVolume:null},Object.defineProperty(e,"cached",{get(){return console.warn('TilesRenderer: "tile.cached" field has been renamed to "tile.engineData".'),this.engineData},enumerable:!1,configurable:!0}),this.invokeAllPlugins(i=>{i!==this&&i.preprocessNode&&i.preprocessNode(e,t,n)})}setTileActive(e,t){t?this.activeTiles.add(e):this.activeTiles.delete(e)}setTileVisible(e,t){t?this.visibleTiles.add(e):this.visibleTiles.delete(e),this.dispatchEvent({type:"tile-visibility-change",scene:e.engineData.scene,tile:e,visible:t})}calculateTileViewError(e,t){}removeUnusedPendingTiles(){let{lruCache:e,loadingTiles:t}=this,n=[];for(let i of t)!e.isUsed(i)&&i.internal.loadingState===1&&n.push(i);for(let i=0;i<n.length;i++)e.remove(n[i])}queueTileForDownload(e){e.internal.loadingState!==0||this.lruCache.isFull()||this.queuedTiles.push(e)}markTileUsed(e){this.usedSet.add(e),this.lruCache.markUsed(e)}fetchData(e,t){return fetch(e,t)}ensureChildrenArePreprocessed(e,t=this.stats.tilesProcessed<this.maxTilesProcessed){let n=e.children;if(n.length===0||n[n.length-1].traversal)return;let i=r=>{for(let a=0,o=r.length;a<o;a++){let s=r[a];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),i(n)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,r=>{i(r.children),this._dispatchNeedsUpdateEvent()})}getBytesUsed(e){let t=0;return this.invokeAllPlugins(n=>{n.calculateBytesUsed&&(t+=n.calculateBytesUsed(e,e.engineData.scene)||0)}),t}recalculateBytesUsed(e=null){let{lruCache:t,processedTiles:n}=this;e===null?t.itemSet.forEach(i=>{n.has(i)&&t.setMemoryUsage(i,this.getBytesUsed(i))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,n=null){let[i,r]=e.asset.version.split(".").map(o=>parseInt(o));console.assert(i<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),i===1&&r>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let a=t.replace(/\/[^/]*$/,"");a=new URL(a,window.location.href).toString(),this.preprocessNode(e.root,a,n)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,n=null,i=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(p=>i=p.preprocessURL?p.preprocessURL(i,e):i);let r=this.stats,a=this.lruCache,o=this.downloadQueue,s=this.parseQueue,c=this.loadingTiles,l=Ym(i),u=new AbortController,d=u.signal;if(a.add(e,p=>{u.abort(),t?p.children.length=0:this.invokeAllPlugins(f=>{f.disposeTile&&f.disposeTile(p)}),r.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),r.inCacheSinceLoad--),p.internal.loadingState===1?r.queued--:p.internal.loadingState===2?r.downloading--:p.internal.loadingState===3?r.parsing--:p.internal.loadingState===4&&r.loaded--,p.internal.loadingState=0,s.remove(p),o.remove(p),c.delete(p)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),a.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),r.inCacheSinceLoad++,r.inCache++,r.queued++,e.internal.loadingState=1,c.add(e),o.add(i,e,p=>{if(d.aborted)return Promise.resolve();e.internal.loadingState=2,r.downloading++,r.queued--;let f=this.invokeOnePlugin(g=>g.fetchData&&g.fetchData(i,{...this.fetchOptions,signal:d}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:i,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),f}).then(p=>{if(!d.aborted){if(!(p instanceof Response))return p;if(p.ok)return l==="json"?p.json():p.arrayBuffer();throw Error(`Failed to load model with error code ${p.status}`)}}).then(p=>{if(!d.aborted)return r.downloading--,r.parsing++,e.internal.loadingState=3,s.add(e,f=>d.aborted?Promise.resolve():l==="json"&&p.root?(this.preprocessTileset(p,i,e),e.children.push(p.root),n=p,t=!0,Promise.resolve()):this.invokeOnePlugin(g=>g.parseTile&&g.parseTile(p,f,l,i,d)))}).then(()=>{if(d.aborted)return;r.parsing--,r.loaded++,e.internal.loadingState=4,c.delete(e),a.setLoaded(e,!0);let p=this.getBytesUsed(e);if(a.getMemoryUsage(e)===0&&p>0&&a.isFull()){a.remove(e);return}a.setMemoryUsage(e,p),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:n,url:i}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:i})}).catch(p=>{d.aborted||(p.name==="AbortError"?a.remove(e):(s.remove(e),o.remove(e),e.internal.loadingState===1?r.queued--:e.internal.loadingState===2?r.downloading--:e.internal.loadingState===3?r.parsing--:e.internal.loadingState===4&&r.loaded--,r.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(p),e.internal.loadingState=-1,c.delete(e),a.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:p,url:i})))})}};function sa(e){if(e===null||e.byteLength<4)return"";let t;if(t=e instanceof DataView?e:new DataView(e),String.fromCharCode(t.getUint8(0))==="{")return null;let n="";for(let i=0;i<4;i++)n+=String.fromCharCode(t.getUint8(i));return n}var ay=new TextDecoder;function cf(e){return ay.decode(e)}function Il(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var ts=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=Il(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function df(e,t,n,i,r,a){let o;switch(i){case"SCALAR":o=1;break;case"VEC2":o=2;break;case"VEC3":o=3;break;case"VEC4":o=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${a}".`)}let s,c=n*o;switch(r){case"BYTE":s=new Int8Array(e,t,c);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,c);break;case"SHORT":s=new Int16Array(e,t,c);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,c);break;case"INT":s=new Int32Array(e,t,c);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,c);break;case"FLOAT":s=new Float32Array(e,t,c);break;case"DOUBLE":s=new Float64Array(e,t,c);break;default:throw Error(`FeatureTable : Feature component type not provided for "${a}".`)}return s}var zl=class{constructor(e,t,n,i){this.buffer=e,this.binOffset=t+n,this.binLength=i;let r=null;if(n!==0){let a=new Uint8Array(e,t,n);r=JSON.parse(cf(a))}else r={};this.header=r}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,n=null,i=null){let r=this.header;if(!(e in r))return null;let a=r[e];if(!(a instanceof Object)||Array.isArray(a))return a;{let{buffer:o,binOffset:s,binLength:c}=this,l=a.byteOffset||0,u=a.type||i,d=a.componentType||n;if("type"in a&&i&&a.type!==i)throw Error("FeatureTable: Specified type does not match expected type.");let p=s+l,f=df(o,p,t,u,d,e);if(p+f.byteLength>s+c)throw Error("FeatureTable: Feature data read outside binary body length.");return f}}getBuffer(e,t){let{buffer:n,binOffset:i}=this;return n.slice(i+e,i+e+t)}},oy=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let i of this.classes){let r=i.instances;for(let a in r)i.instances[a]=this._parseProperty(r[a],i.length,a)}if(this.instancesLength=t.instancesLength,this.classIds=this._parseProperty(t.classIds,this.instancesLength,"classIds"),t.parentCounts?this.parentCounts=this._parseProperty(t.parentCounts,this.instancesLength,"parentCounts"):this.parentCounts=Array(this.instancesLength).fill(1),t.parentIds){let i=this.parentCounts.reduce((r,a)=>r+a,0);this.parentIds=this._parseProperty(t.parentIds,i,"parentIds")}else this.parentIds=null;this.instancesIds=[];let n={};for(let i of this.classIds)n[i]=n[i]??0,this.instancesIds.push(n[i]),n[i]++}_parseProperty(e,t,n){if(Array.isArray(e))return e;{let{buffer:i,binOffset:r}=this.batchTable,a=e.byteOffset,o=e.componentType||"UNSIGNED_SHORT";return df(i,r+a,t,"SCALAR",o,n)}}getDataFromId(e,t={}){let n=this.parentCounts[e];if(this.parentIds&&n>0){let s=0;for(let c=0;c<e;c++)s+=this.parentCounts[c];for(let c=0;c<n;c++){let l=this.parentIds[s+c];l!==e&&this.getDataFromId(l,t)}}let i=this.classIds[e],r=this.classes[i].instances,a=this.classes[i].name,o=this.instancesIds[e];for(let s in r)t[a]=t[a]||{},t[a][s]=r[s][o];return t}},Jd=class extends zl{constructor(e,t,n,i,r){super(e,n,i,r),this.count=t,this.extensions={};let a=this.header.extensions;a&&a["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new oy(this))}getDataFromId(e,t={}){if(e<0||e>=this.count)throw Error(`BatchTable: id value "${e}" out of bounds for "${this.count}" features number.`);for(let n of this.getKeys())t[n]=super.getData(n,this.count)[e];for(let n in this.extensions){let i=this.extensions[n];i.getDataFromId instanceof Function&&(t[n]=t[n]||{},i.getDataFromId(e,t[n]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},uf=class extends ts{parse(e){let t=new DataView(e),n=sa(t);console.assert(n==="b3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new zl(e.slice(28,28+a+o),0,a,o),u=28+a+o,d=new Jd(e.slice(u,u+s+c),l.getData("BATCH_LENGTH"),0,s,c),p=u+s+c;return{version:i,featureTable:l,batchTable:d,glbBytes:new Uint8Array(e,p,r-p)}}},pf=class extends ts{parse(e){let t=new DataView(e),n=sa(t);console.assert(n==="i3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=t.getUint32(28,!0),u=new zl(e.slice(32,32+a+o),0,a,o),d=32+a+o,p=new Jd(e.slice(d,d+s+c),u.getData("INSTANCES_LENGTH"),0,s,c),f=d+s+c,g=new Uint8Array(e,f,r-f),y=null,T=null,x=null;if(l)y=g,T=Promise.resolve();else{let h=this.resolveExternalURL(cf(g));x=Il(h),T=fetch(h,this.fetchOptions).then(m=>{if(!m.ok)throw Error(`I3DMLoaderBase : Failed to load file "${h}" with status ${m.status} : ${m.statusText}`);return m.arrayBuffer()}).then(m=>{y=new Uint8Array(m)})}return T.then(()=>({version:i,featureTable:u,batchTable:p,glbBytes:y,gltfWorkingPath:x}))}},hf=class extends ts{parse(e){let t=new DataView(e),n=sa(t);console.assert(n==="pnts");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new zl(e.slice(28,28+a+o),0,a,o),u=28+a+o,d=new Jd(e.slice(u,u+s+c),l.getData("BATCH_LENGTH")||l.getData("POINTS_LENGTH"),0,s,c);return Promise.resolve({version:i,featureTable:l,batchTable:d})}},mf=class extends ts{parse(e){let t=new DataView(e),n=sa(t);console.assert(n==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let i=t.getUint32(4,!0);console.assert(i===1,'CMPTLoader: The version listed in the header is "1".');let r=t.getUint32(8,!0);console.assert(r===e.byteLength,"CMPTLoader: The contents buffer length listed in the header matches the file.");let a=t.getUint32(12,!0),o=[],s=16;for(let c=0;c<a;c++){let l=new DataView(e,s,12),u=sa(l),d=l.getUint32(4,!0),p=l.getUint32(8,!0),f=new Uint8Array(e,s,p);o.push({type:u,buffer:f,version:d}),s+=p}return{version:i,tiles:o}}};var F=require("three"),ql=require("three/addons/loaders/GLTFLoader.js"),Rf=require("three/addons/utils/BufferGeometryUtils.js"),lu=class extends uf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new F.Matrix4}parse(e){let t=super.parse(e),n=t.glbBytes.slice().buffer;return new Promise((i,r)=>{let a=this.manager,o=this.fetchOptions,s=a.getHandler("path.gltf")||new ql.GLTFLoader(a);o.credentials==="include"&&o.mode==="cors"&&s.setCrossOrigin("use-credentials"),"credentials"in o&&s.setWithCredentials(o.credentials==="include"),o.headers&&s.setRequestHeader(o.headers);let c=this.workingPath;!/[\\/]$/.test(c)&&c.length&&(c+="/");let l=this.adjustmentTransform;s.parse(n,c,u=>{let{batchTable:d,featureTable:p}=t,{scene:f}=u,g=p.getData("RTC_CENTER",1,"FLOAT","VEC3");g&&(f.position.x+=g[0],f.position.y+=g[1],f.position.z+=g[2]),u.scene.updateMatrix(),u.scene.matrix.multiply(l),u.scene.matrix.decompose(u.scene.position,u.scene.quaternion,u.scene.scale),u.batchTable=d,u.featureTable=p,f.batchTable=d,f.featureTable=p,i(u)},r)})}};function sy(e){let t=e>>11,n=e>>5&63,i=e&31;return[Math.round(t/31*255),Math.round(n/63*255),Math.round(i/31*255)]}var ns=new F.Vector2;function ly(e,t,n=new F.Vector3){ns.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(ns.x,ns.y,1-Math.abs(ns.x)-Math.abs(ns.y));let i=F.MathUtils.clamp(-n.z,0,1);return n.x>=0?n.setX(n.x-i):n.setX(n.x+i),n.y>=0?n.setY(n.y-i):n.setY(n.y+i),n.normalize(),n}var ff={RGB:"color",POSITION:"position"},cu=class extends hf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:i}=t,r=new F.PointsMaterial,a=n.header.extensions,o=new F.Vector3,s;if(a&&a["3DTILES_draco_point_compression"]){let{byteOffset:u,byteLength:d,properties:p}=a["3DTILES_draco_point_compression"],f=this.manager.getHandler("draco.drc");if(f==null)throw Error("PNTSLoader: dracoLoader not available.");let g={};for(let x in p)if(x in ff&&x in p){let h=ff[x];g[h]=p[x]}let y={attributeIDs:g,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},T=n.getBuffer(u,d);s=await f.decodeGeometry(T,y),s.attributes.color&&(r.vertexColors=!0)}else{let u=n.getData("POINTS_LENGTH"),d=n.getData("POSITION",u,"FLOAT","VEC3"),p=n.getData("NORMAL",u,"FLOAT","VEC3"),f=n.getData("NORMAL",u,"UNSIGNED_BYTE","VEC2"),g=n.getData("RGB",u,"UNSIGNED_BYTE","VEC3"),y=n.getData("RGBA",u,"UNSIGNED_BYTE","VEC4"),T=n.getData("RGB565",u,"UNSIGNED_SHORT","SCALAR"),x=n.getData("CONSTANT_RGBA",u,"UNSIGNED_BYTE","VEC4"),h=n.getData("POSITION_QUANTIZED",u,"UNSIGNED_SHORT","VEC3"),m=n.getData("QUANTIZED_VOLUME_SCALE",u,"FLOAT","VEC3"),S=n.getData("QUANTIZED_VOLUME_OFFSET",u,"FLOAT","VEC3");if(s=new F.BufferGeometry,h){let M=new Float32Array(u*3);for(let C=0;C<u;C++)for(let L=0;L<3;L++){let b=3*C+L;M[b]=h[b]/65535*m[L]}o.x=S[0],o.y=S[1],o.z=S[2],s.setAttribute("position",new F.BufferAttribute(M,3,!1))}else s.setAttribute("position",new F.BufferAttribute(d,3,!1));if(p!==null)s.setAttribute("normal",new F.BufferAttribute(p,3,!1));else if(f!==null){let M=new Float32Array(u*3),C=new F.Vector3;for(let L=0;L<u;L++){let b=f[L*2],_=f[L*2+1],v=ly(b,_,C);M[L*3]=v.x,M[L*3+1]=v.y,M[L*3+2]=v.z}s.setAttribute("normal",new F.BufferAttribute(M,3,!1))}if(y!==null)s.setAttribute("color",new F.BufferAttribute(y,4,!0)),r.vertexColors=!0,r.transparent=!0,r.depthWrite=!1;else if(g!==null)s.setAttribute("color",new F.BufferAttribute(g,3,!0)),r.vertexColors=!0;else if(T!==null){let M=new Uint8Array(u*3);for(let C=0;C<u;C++){let L=sy(T[C]);for(let b=0;b<3;b++){let _=3*C+b;M[_]=L[b]}}s.setAttribute("color",new F.BufferAttribute(M,3,!0)),r.vertexColors=!0}else if(x!==null){r.color=new F.Color(x[0],x[1],x[2]);let M=x[3]/255;M<1&&(r.opacity=M,r.transparent=!0,r.depthWrite=!1)}}let c=new F.Points(s,r);c.position.copy(o),t.scene=c,t.scene.featureTable=n,t.scene.batchTable=i;let l=n.getData("RTC_CENTER",1,"FLOAT","VEC3");return l&&(t.scene.position.x+=l[0],t.scene.position.y+=l[1],t.scene.position.z+=l[2]),t})}};function cy(e){let{x:t,y:n,z:i}=e;e.x=i,e.y=t,e.z=n}function dy(e){return-e+Math.PI/2}var gf=new F.Spherical,Ai=new F.Vector3,jn=new F.Vector3,Qd=new F.Vector3,gr=new F.Matrix4,qr=new F.Matrix4,eu=new F.Sphere,Xn=new F.Euler,bf=new F.Vector3,vf=new F.Vector3,xf=new F.Vector3,rs=new F.Vector3,Ul=new F.Ray,uy=1e-12,py=.1;var du=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new F.Vector3(e,t,n)}intersectRay(e,t){return gr.makeScale(...this.radius).invert(),eu.center.set(0,0,0),eu.radius=1,Ul.copy(e).applyMatrix4(gr),Ul.intersectSphere(eu,t)?(gr.makeScale(...this.radius),t.applyMatrix4(gr),t):null}getEastNorthUpFrame(e,t,n,i){return n.isMatrix4&&(i=n,n=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,bf,vf,xf),this.getCartographicToPosition(e,t,n,rs),i.makeBasis(bf,vf,xf).setPosition(rs)}getOrientedEastNorthUpFrame(e,t,n,i,r,a,o){return this.getObjectFrame(e,t,n,i,r,a,o,0)}getObjectFrame(e,t,n,i,r,a,o,s=2){return this.getEastNorthUpFrame(e,t,n,gr),Xn.set(r,a,-i,"ZXY"),o.makeRotationFromEuler(Xn).premultiply(gr),s===1?(Xn.set(Math.PI/2,0,0,"XYZ"),qr.makeRotationFromEuler(Xn),o.multiply(qr)):s===2&&(Xn.set(-Math.PI/2,0,Math.PI,"XYZ"),qr.makeRotationFromEuler(Xn),o.multiply(qr)),o}getCartographicFromObjectFrame(e,t,n=2){return n===1?(Xn.set(-Math.PI/2,0,0,"XYZ"),qr.makeRotationFromEuler(Xn).premultiply(e)):n===2?(Xn.set(-Math.PI/2,0,Math.PI,"XYZ"),qr.makeRotationFromEuler(Xn).premultiply(e)):qr.copy(e),rs.setFromMatrixPosition(qr),this.getPositionToCartographic(rs,t),this.getEastNorthUpFrame(t.lat,t.lon,0,gr).invert(),qr.premultiply(gr),Xn.setFromRotationMatrix(qr,"ZXY"),t.azimuth=-Xn.z,t.elevation=Xn.x,t.roll=Xn.y,t}getEastNorthUpAxes(e,t,n,i,r,a=rs){this.getCartographicToPosition(e,t,0,a),this.getCartographicToNormal(e,t,r),n.set(-a.y,a.x,0).normalize(),i.crossVectors(r,n).normalize()}getCartographicToPosition(e,t,n,i){this.getCartographicToNormal(e,t,Ai);let r=this.radius;jn.copy(Ai),jn.x*=r.x**2,jn.y*=r.y**2,jn.z*=r.z**2;let a=Math.sqrt(Ai.dot(jn));return jn.divideScalar(a),i.copy(jn).addScaledVector(Ai,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,jn),this.getPositionToNormal(jn,Ai);let n=Qd.subVectors(e,jn);return t.lon=Math.atan2(Ai.y,Ai.x),t.lat=Math.asin(Ai.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return gf.set(1,dy(e),t),n.setFromSpherical(gf).normalize(),cy(n),n}getPositionToNormal(e,t){let n=this.radius;return t.copy(e),t.x/=n.x**2,t.y/=n.y**2,t.z/=n.z**2,t.normalize(),t}getPositionToSurfacePoint(e,t){let n=this.radius,i=1/n.x**2,r=1/n.y**2,a=1/n.z**2,o=e.x*e.x*i,s=e.y*e.y*r,c=e.z*e.z*a,l=o+s+c,u=Math.sqrt(1/l),d=jn.copy(e).multiplyScalar(u);if(l<py)return isFinite(u)?t.copy(d):null;let p=Qd.set(d.x*i*2,d.y*r*2,d.z*a*2),f=(1-u)*e.length()/(.5*p.length()),g=0,y,T,x,h,m,S,M,C,L,b,_;do{f-=g,x=1/(1+f*i),h=1/(1+f*r),m=1/(1+f*a),S=x*x,M=h*h,C=m*m,L=S*x,b=M*h,_=C*m,y=o*S+s*M+c*C-1,T=o*L*i+s*b*r+c*_*a;let v=-2*T;g=y/v}while(Math.abs(y)>uy);return t.set(e.x*x,e.y*h,e.z*m)}calculateHorizonDistance(e,t){let n=this.calculateEffectiveRadius(e);return Math.sqrt(2*n*t+t**2)}calculateEffectiveRadius(e){let t=this.radius.x,n=1-this.radius.z**2/t**2,i=e*F.MathUtils.DEG2RAD,r=Math.sin(i)**2;return t/Math.sqrt(1-n*r)}getPositionElevation(e){this.getPositionToSurfacePoint(e,jn);let t=Qd.subVectors(e,jn);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(gr.makeScale(...this.radius).invert(),Ul.copy(e).applyMatrix4(gr),jn.set(0,0,0),Ul.closestPointToPoint(jn,t).normalize(),gr.makeScale(...this.radius),t.applyMatrix4(gr))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},ls=new du(Qa,Qa,Qm);ls.name="WGS84 Earth";var Vl=new F.Vector3,eo=new F.Vector3,to=new F.Vector3,tu=new F.Vector3,Fl=new F.Quaternion,jl=new F.Vector3,no=new F.Matrix4,yf=new F.Matrix4,wf=new F.Vector3,_f=new F.Matrix4,nu=new F.Quaternion,ru={};function Sf(e,t,n,i){if(e=e/n*2-1,t=t/n*2-1,i.x=e,i.y=t,i.z=1-Math.abs(e)-Math.abs(t),i.z<0){let r=i.x;i.x=(1-Math.abs(i.y))*(r>=0?1:-1),i.y=(1-Math.abs(r))*(i.y>=0?1:-1)}return i.normalize(),i}var uu=class extends pf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new F.Matrix4,this.ellipsoid=ls.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:n,batchTable:i}=t,r=t.glbBytes.slice().buffer;return new Promise((a,o)=>{let s=this.fetchOptions,c=this.manager,l=c.getHandler("path.gltf")||new ql.GLTFLoader(c);s.credentials==="include"&&s.mode==="cors"&&l.setCrossOrigin("use-credentials"),"credentials"in s&&l.setWithCredentials(s.credentials==="include"),s.headers&&l.setRequestHeader(s.headers);let u=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(u)||(u+="/");let d=this.adjustmentTransform;l.parse(r,u,p=>{let f=n.getData("INSTANCES_LENGTH"),g=n.getData("POSITION",f,"FLOAT","VEC3"),y=n.getData("POSITION_QUANTIZED",f,"UNSIGNED_SHORT","VEC3"),T=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),x=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),h=n.getData("NORMAL_UP",f,"FLOAT","VEC3"),m=n.getData("NORMAL_RIGHT",f,"FLOAT","VEC3"),S=n.getData("NORMAL_UP_OCT32P",f,"UNSIGNED_SHORT","VEC2"),M=n.getData("NORMAL_RIGHT_OCT32P",f,"UNSIGNED_SHORT","VEC2"),C=n.getData("SCALE_NON_UNIFORM",f,"FLOAT","VEC3"),L=n.getData("SCALE",f,"FLOAT","SCALAR"),b=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),_=n.getData("EAST_NORTH_UP");if(!g&&y){g=new Float32Array(f*3);for(let E=0;E<f;E++)g[E*3+0]=T[0]+y[E*3+0]/65535*x[0],g[E*3+1]=T[1]+y[E*3+1]/65535*x[1],g[E*3+2]=T[2]+y[E*3+2]/65535*x[2]}let v=new F.Vector3;for(let E=0;E<f;E++)v.x+=g[E*3+0]/f,v.y+=g[E*3+1]/f,v.z+=g[E*3+2]/f;let P=[],z=[];p.scene.updateMatrixWorld(),p.scene.traverse(E=>{if(E.isMesh){z.push(E);let{geometry:V,material:A}=E,X=new F.InstancedMesh(V,A,f);X.position.copy(v),b&&(X.position.x+=b[0],X.position.y+=b[1],X.position.z+=b[2]),P.push(X)}});for(let E=0;E<f;E++){tu.set(g[E*3+0]-v.x,g[E*3+1]-v.y,g[E*3+2]-v.z),Fl.identity(),h&&m?(eo.set(h[E*3+0],h[E*3+1],h[E*3+2]),to.set(m[E*3+0],m[E*3+1],m[E*3+2]),Vl.crossVectors(to,eo).normalize(),no.makeBasis(to,eo,Vl),Fl.setFromRotationMatrix(no)):S&&M&&(Sf(S[E*2+0],S[E*2+1],65535,eo),Sf(M[E*2+0],M[E*2+1],65535,to),Vl.crossVectors(to,eo).normalize(),no.makeBasis(to,eo,Vl),Fl.setFromRotationMatrix(no)),jl.set(1,1,1),C&&jl.set(C[E*3+0],C[E*3+1],C[E*3+2]),L&&jl.multiplyScalar(L[E]);for(let V=0,A=P.length;V<A;V++){let X=P[V];nu.copy(Fl),_&&(X.updateMatrixWorld(),wf.copy(tu).applyMatrix4(X.matrixWorld),this.ellipsoid.getPositionToCartographic(wf,ru),this.ellipsoid.getEastNorthUpFrame(ru.lat,ru.lon,_f),nu.setFromRotationMatrix(_f)),no.compose(tu,nu,jl).multiply(d);let j=z[V];yf.multiplyMatrices(no,j.matrixWorld),X.setMatrixAt(E,yf)}}p.scene.clear(),p.scene.add(...P),p.batchTable=i,p.featureTable=n,p.scene.batchTable=i,p.scene.featureTable=n,a(p)},o)})})}},Lf=class extends mf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new F.Matrix4,this.ellipsoid=ls.clone()}parse(e){let t=super.parse(e),{manager:n,ellipsoid:i,adjustmentTransform:r}=this,a=[];for(let o in t.tiles){let{type:s,buffer:c}=t.tiles[o];switch(s){case"b3dm":{let l=c.slice(),u=new lu(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.adjustmentTransform.copy(r);let d=u.parse(l.buffer);a.push(d);break}case"pnts":{let l=c.slice(),u=new cu(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions;let d=u.parse(l.buffer);a.push(d);break}case"i3dm":{let l=c.slice(),u=new uu(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.ellipsoid.copy(i),u.adjustmentTransform.copy(r);let d=u.parse(l.buffer);a.push(d);break}}}return Promise.all(a).then(o=>{let s=new F.Group;return o.forEach(c=>{s.add(c.scene)}),{tiles:o,scene:s}})}},is=new F.Matrix4,hy=class extends F.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new F.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?is.copy(this.matrix):is.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=is.elements,n=this.matrixWorld.elements,i=!1;for(let r=0;r<16;r++){let a=t[r],o=n[r];if(Math.abs(a-o)>2**-52){i=!0;break}}if(i){this.matrixWorld.copy(is),this.matrixWorldInverse.copy(is).invert();let r=this.children;for(let c=0,l=r.length;c<l;c++)r[c].updateMatrixWorld();let{tilesRenderer:a}=this,{activeTiles:o,visibleTiles:s}=a;o.forEach(c=>{s.has(c)||c.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},my=new F.Ray;function fy(e,t,n,i){let{scene:r}=e.engineData;n.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(e,r,t,i))||t.intersectObject(r,!0,i)}function gy(e){return"traversal"in e}function kf(e,t,n,i,r=null){if(!gy(t))return;let{group:a,activeTiles:o}=e,{boundingVolume:s}=t.engineData;if(r===null&&(r=my,r.copy(n.ray).applyMatrix4(a.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(r))return;o.has(t)&&fy(t,n,e,i);let c=t.children;for(let l=0,u=c.length;l<u;l++)kf(e,c[l],n,i,r)}var Hl=new F.Vector3,Gl=new F.Vector3,qn=new F.Vector3,Wl=new F.Ray,ou=class{constructor(e=new F.Box3,t=new F.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new F.Matrix4,this.points=Array(8).fill().map(()=>new F.Vector3),this.planes=[,,,,,,].fill().map(()=>new F.Plane)}copy(e){return this.box.copy(e.box),this.transform.copy(e.transform),this.update(),this}clone(){return new this.constructor().copy(this)}clampPoint(e,t){return t.copy(e).applyMatrix4(this.inverseTransform).clamp(this.box.min,this.box.max).applyMatrix4(this.transform)}distanceToPoint(e){return this.clampPoint(e,qn).distanceTo(e)}containsPoint(e){return qn.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(qn)}intersectsRay(e){return Wl.copy(e).applyMatrix4(this.inverseTransform),Wl.intersectsBox(this.box)}intersectRay(e,t){return Wl.copy(e).applyMatrix4(this.inverseTransform),Wl.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:n,box:i}=this;t.copy(n).invert();let{min:r,max:a}=i,o=0;for(let s=-1;s<=1;s+=2)for(let c=-1;c<=1;c+=2)for(let l=-1;l<=1;l+=2)e[o].set(s<0?r.x:a.x,c<0?r.y:a.y,l<0?r.z:a.z).applyMatrix4(n),o++;this.updatePlanes()}updatePlanes(){Hl.copy(this.box.min).applyMatrix4(this.transform),Gl.copy(this.box.max).applyMatrix4(this.transform),qn.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(qn,Hl),this.planes[1].setFromNormalAndCoplanarPoint(qn,Gl).negate(),qn.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(qn,Hl),this.planes[3].setFromNormalAndCoplanarPoint(qn,Gl).negate(),qn.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(qn,Hl),this.planes[5].setFromNormalAndCoplanarPoint(qn,Gl).negate()}intersectsSphere(e){return this.clampPoint(e.center,qn),qn.distanceToSquared(e.center)<=e.radius*e.radius}intersectsFrustum(e){return this._intersectsPlaneShape(e.planes,e.points)}intersectsOBB(e){return this._intersectsPlaneShape(e.planes,e.points)}_intersectsPlaneShape(e,t){let n=this.points,i=this.planes;for(let r=0;r<6;r++){let a=e[r],o=-1/0;for(let s=0;s<8;s++){let c=n[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}for(let r=0;r<6;r++){let a=i[r],o=-1/0;for(let s=0;s<8;s++){let c=t[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}return!0}},ss=Math.PI,iu=ss/2,as=new F.Vector3,la=new F.Vector3,Ir=new F.Vector3,Re=new F.Vector3,Hn=new F.Matrix4,by=new F.Box3,Mf=new F.Matrix4;function Ei(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function Cf(e){return e.x!==e.y}var Bf=class extends du{constructor(e=1,t=1,n=1,i=-iu,r=iu,a=0,o=2*ss,s=0,c=0){super(e,t,n),this.latStart=i,this.latEnd=r,this.lonStart=a,this.lonEnd=o,this.heightStart=s,this.heightEnd=c}getBoundingBox(e,t){Cf(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:n,latEnd:i,lonStart:r,lonEnd:a,heightStart:o,heightEnd:s}=this,c=(n+i)*.5,l=(r+a)*.5,u=n>0,d=i<0,p;p=u?n:d?i:0;let{min:f,max:g}=e;f.setScalar(1/0),g.setScalar(-1/0),a-r<=ss?(this.getCartographicToNormal(c,l,Ir),la.set(0,0,1),as.crossVectors(la,Ir).normalize(),la.crossVectors(Ir,as).normalize(),t.makeBasis(as,la,Ir),Hn.copy(t).invert(),this.getCartographicToPosition(p,r,s,Re).applyMatrix4(Hn),g.x=Math.abs(Re.x),f.x=-g.x,this.getCartographicToPosition(i,r,s,Re).applyMatrix4(Hn),g.y=Re.y,this.getCartographicToPosition(i,l,s,Re).applyMatrix4(Hn),g.y=Math.max(Re.y,g.y),this.getCartographicToPosition(n,r,s,Re).applyMatrix4(Hn),f.y=Re.y,this.getCartographicToPosition(n,l,s,Re).applyMatrix4(Hn),f.y=Math.min(Re.y,f.y),this.getCartographicToPosition(c,l,s,Re).applyMatrix4(Hn),g.z=Re.z,this.getCartographicToPosition(n,r,o,Re).applyMatrix4(Hn),f.z=Re.z,this.getCartographicToPosition(i,r,o,Re).applyMatrix4(Hn),f.z=Math.min(Re.z,f.z)):(this.getCartographicToPosition(p,l,s,Ir),Ir.z=0,Ir.length()<1e-10?Ir.set(1,0,0):Ir.normalize(),la.set(0,0,1),as.crossVectors(Ir,la).normalize(),t.makeBasis(as,la,Ir),Hn.copy(t).invert(),this.getCartographicToPosition(p,l+iu,s,Re).applyMatrix4(Hn),g.x=Math.abs(Re.x),f.x=-g.x,this.getCartographicToPosition(i,0,d?o:s,Re).applyMatrix4(Hn),g.y=Re.y,this.getCartographicToPosition(n,0,u?o:s,Re).applyMatrix4(Hn),f.y=Re.y,this.getCartographicToPosition(p,l,s,Re).applyMatrix4(Hn),g.z=Re.z,this.getCartographicToPosition(p,a,s,Re).applyMatrix4(Hn),f.z=Re.z),e.getCenter(Re),e.min.sub(Re).multiplyScalar(1.0000000000001),e.max.sub(Re).multiplyScalar(1.0000000000001),Re.applyMatrix4(t),t.setPosition(Re)}getBoundingSphere(e){Cf(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(by,Mf),e.center.setFromMatrixPosition(Mf),e.radius=0;let{latStart:t,latEnd:n,lonStart:i,lonEnd:r,heightStart:a,heightEnd:o}=this,s=(t+n)*.5,c=(i+r)*.5,l=t>0,u=n<0,d;d=l?t:u?n:0,this.getCartographicToPosition(d,i,o,Re),Ei(Re,e),this.getCartographicToPosition(n,i,o,Re),Ei(Re,e),this.getCartographicToPosition(n,c,o,Re),Ei(Re,e),this.getCartographicToPosition(t,i,o,Re),Ei(Re,e),this.getCartographicToPosition(t,c,o,Re),Ei(Re,e),this.getCartographicToPosition(s,c,o,Re),Ei(Re,e),this.getCartographicToPosition(t,i,a,Re),Ei(Re,e),r-i>ss&&(this.getCartographicToPosition(d,c+ss,o,Re),Ei(Re,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},ui=new F.Vector3,pi=new F.Vector3,hi=new F.Vector3,Tf=new F.Vector3,Pf=new F.Vector3,vy=class{constructor(){this.sphere=null,this.obb=null,this.region=null,this.regionObb=null}intersectsRay(e){let t=this.sphere,n=this.obb||this.regionObb;return!(t&&!e.intersectsSphere(t)||n&&!n.intersectsRay(e))}intersectRay(e,t=null){let n=this.sphere,i=this.obb||this.regionObb,r=-1/0,a=-1/0;n&&e.intersectSphere(n,Tf)&&(r=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(Tf)),i&&i.intersectRay(e,Pf)&&(a=i.containsPoint(e.origin)?0:e.origin.distanceToSquared(Pf));let o=Math.max(r,a);return o===-1/0?null:(e.at(Math.sqrt(o),t),t)}distanceToPoint(e){let t=this.sphere,n=this.obb||this.regionObb,i=-1/0,r=-1/0;return t&&(i=Math.max(t.distanceToPoint(e),0)),n&&(r=n.distanceToPoint(e)),i>r?i:r}intersectsFrustum(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsFrustum(e)?!1:!!(n||t)}intersectsSphere(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!n.intersectsSphere(e)||t&&!t.intersectsSphere(e)?!1:!!(n||t)}intersectsOBB(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsOBB(e)?!1:!!(n||t)}getOBB(e,t){let n=this.obb||this.regionObb;n?(e.copy(n.box),t.copy(n.transform)):(this.getAABB(e),t.identity())}getAABB(e){if(this.sphere)this.sphere.getBoundingBox(e);else{let t=this.obb||this.regionObb;e.copy(t.box).applyMatrix4(t.transform)}}getSphere(e){if(this.sphere)e.copy(this.sphere);else if(this.region)this.region.getBoundingSphere(e);else{let t=this.obb||this.regionObb;t.box.getBoundingSphere(e),e.applyMatrix4(t.transform)}}setObbData(e,t){let n=new ou;ui.set(e[3],e[4],e[5]),pi.set(e[6],e[7],e[8]),hi.set(e[9],e[10],e[11]);let i=ui.length(),r=pi.length(),a=hi.length();ui.normalize(),pi.normalize(),hi.normalize(),i===0&&ui.crossVectors(pi,hi),r===0&&pi.crossVectors(ui,hi),a===0&&hi.crossVectors(ui,pi),n.transform.set(ui.x,pi.x,hi.x,e[0],ui.y,pi.y,hi.y,e[1],ui.z,pi.z,hi.z,e[2],0,0,0,1).premultiply(t),n.box.min.set(-i,-r,-a),n.box.max.set(i,r,a),n.update(),this.obb=n}setSphereData(e,t,n,i,r){let a=new F.Sphere;a.center.set(e,t,n),a.radius=i,a.applyMatrix4(r),this.sphere=a}setRegionData(e,t,n,i,r,a,o){let s=new Bf(...e.radius,n,r,t,i,a,o),c=new ou;s.getBoundingBox(c.box,c.transform),c.update(),this.region=s,this.regionObb=c}},xy=new F.Matrix3;function yy(e,t,n,i){let r=xy.set(e.normal.x,e.normal.y,e.normal.z,t.normal.x,t.normal.y,t.normal.z,n.normal.x,n.normal.y,n.normal.z);return i.set(-e.constant,-t.constant,-n.constant),i.applyMatrix3(r.invert()),i}var wy=class extends F.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new F.Vector3)}setFromProjectionMatrix(...e){return super.setFromProjectionMatrix(...e),this.calculateFrustumPoints(),this}calculateFrustumPoints(){let{planes:e,points:t}=this;[[e[0],e[3],e[4]],[e[1],e[3],e[4]],[e[0],e[2],e[4]],[e[1],e[2],e[4]],[e[0],e[3],e[5]],[e[1],e[3],e[5]],[e[0],e[2],e[5]],[e[1],e[2],e[5]]].forEach((n,i)=>{yy(n[0],n[1],n[2],t[i])})}};var su=0;function Af(e,t,n,i){try{return F.TextureUtils.getByteLength(e,t,n,i)}catch{return su}}function _y(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??su;let{format:t,type:n,image:i,mipmaps:r}=e;if(e.isCompressedTexture&&Array.isArray(r)&&r.length>0){let o=0;for(let s of r)s?.data?.byteLength?o+=s.data.byteLength:o+=Af(s.width,s.height,t,n);return o}if(!i)return su;let a=Af(i.width,i.height,t,n);return a*=e.generateMipmaps?4/3:1,a}function Sy(e){let t=new Set,n=0;return e.traverse(i=>{if(i.geometry&&!t.has(i.geometry)&&(n+=(0,Rf.estimateBytesUsed)(i.geometry),t.add(i.geometry)),i.material){let r=i.material;for(let a in r){let o=r[a];o&&o.isTexture&&!t.has(o)&&(n+=_y(o),t.add(o))}}}),n}var Df=Symbol("INITIAL_FRUSTUM_CULLED"),Xl=new F.Matrix4,os=new F.Vector3,au=new F.Vector2,My=new F.Vector3(1,0,0),Cy=new F.Vector3(0,1,0),Ty=()=>null;function Ef(e,t){e.traverse(n=>{n.frustumCulled=n[Df]&&t})}var pu=class extends lf{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{Ef(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new hy(this),this.ellipsoid=ls.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new F.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new F.LoadingManager,this._listeners={}}addEventListener(e,t){F.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return F.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){F.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){F.EventDispatcher.prototype.dispatchEvent.call(this,e)}getBoundingBox(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getAABB(e),!0):!1}getOrientedBoundingBox(e,t){if(!this.root)return!1;let n=this.root.engineData.boundingVolume;return n?(n.getOBB(e,t),!0):!1}getBoundingSphere(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getSphere(e),!0):!1}forEachLoadedModel(e){this.traverse(t=>{let n=t.engineData&&t.engineData.scene;n&&e(n,t)},null,!1)}raycast(e,t){if(this.root)if(this.accelerateRaycast)kf(this,this.root,e,t);else{let n=e.firstHitOnly?[]:t;for(let i of this.activeTiles){let{scene:r}=i.engineData;this.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(i,r,e,n))||e.intersectObject(r,!0,n)}e.firstHitOnly&&n.length>0&&(n.sort((i,r)=>i.distance-r.distance),t.push(n[0]))}}hasCamera(e){return this.cameraMap.has(e)}setCamera(e){let t=this.cameras,n=this.cameraMap;return n.has(e)?!1:(n.set(e,new F.Vector2),t.push(e),this.dispatchEvent({type:"add-camera",camera:e}),!0)}setResolution(e,t,n){let i=this.cameraMap;if(!i.has(e))return!1;let r=t.isVector2?t.x:t,a=t.isVector2?t.y:n,o=i.get(e);return(o.width!==r||o.height!==a)&&(o.set(r,a),this.dispatchEvent({type:"camera-resolution-change"})),!0}getResolution(e,t){let n=this.cameraMap.get(e);return n?t.copy(n):null}setResolutionFromRenderer(e,t){return t.getSize(au),this.setResolution(e,au.x,au.y)}deleteCamera(e){let t=this.cameras,n=this.cameraMap;if(n.has(e)){let i=t.indexOf(e);return t.splice(i,1),n.delete(e),this.dispatchEvent({type:"delete-camera",camera:e}),!0}return!1}loadRootTileset(...e){return super.loadRootTileset(...e).then(t=>{let{asset:n,extensions:i={}}=t;switch((n&&n.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(Cy,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(My,Math.PI/2);break}if("3DTILES_ellipsoid"in i){let r=i["3DTILES_ellipsoid"],{ellipsoid:a}=this;a.name=r.body,r.radii?a.radius.set(...r.radii):a.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,n=this.cameraMap,i=this.cameraInfo;for(;i.length>t.length;)i.pop();for(;i.length<t.length;)i.push({frustum:new wy,isOrthographic:!1,sseDenominator:-1,position:new F.Vector3,invScale:-1,pixelSize:0});os.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(os.x-os.y,os.x-os.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let r=0,a=i.length;r<a;r++){let o=t[r],s=i[r],c=s.frustum,l=s.position,u=n.get(o);(u.width===0||u.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let d=o.projectionMatrix.elements;if(s.isOrthographic=d[15]===1,s.isOrthographic){let p=2/d[0],f=2/d[5];s.pixelSize=Math.max(f/u.height,p/u.width)}else s.sseDenominator=2/d[5]/u.height;Xl.copy(e.matrixWorld),Xl.premultiply(o.matrixWorldInverse),Xl.premultiply(o.projectionMatrix),c.setFromProjectionMatrix(Xl,o.coordinateSystem,o.reversedDepth),l.set(0,0,0),l.applyMatrix4(o.matrixWorld),l.applyMatrix4(e.matrixWorldInverse)}}update(){if(super.update(),this.cameras.length===0&&this.root){let e=!1;this.invokeAllPlugins(t=>e||(e=!!(t!==this&&t.calculateTileViewError))),e===!1&&console.warn("TilesRenderer: no cameras defined. Cannot update 3d tiles.")}}preprocessNode(e,t,n=null){super.preprocessNode(e,t,n);let i=new F.Matrix4;if(e.transform){let o=e.transform;for(let s=0;s<16;s++)i.elements[s]=o[s]}n&&i.premultiply(n.engineData.transform);let r=new F.Matrix4().copy(i).invert(),a=new vy;"sphere"in e.boundingVolume&&a.setSphereData(...e.boundingVolume.sphere,i),"box"in e.boundingVolume&&a.setObbData(e.boundingVolume.box,i),"region"in e.boundingVolume&&a.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=i,e.engineData.transformInverse=r,e.engineData.boundingVolume=a,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=Ty}async parseTile(e,t,n,i,r){let a=t.engineData,o=Il(i),s=this.fetchOptions,c=this.manager,l=null,u=a.transform,d=this._upRotationMatrix,p=(sa(e)||n).toLowerCase();switch(p){case"b3dm":{let m=new lu(c);m.workingPath=o,m.fetchOptions=s,m.adjustmentTransform.copy(d),l=m.parse(e);break}case"pnts":{let m=new cu(c);m.workingPath=o,m.fetchOptions=s,l=m.parse(e);break}case"i3dm":{let m=new uu(c);m.workingPath=o,m.fetchOptions=s,m.adjustmentTransform.copy(d),m.ellipsoid.copy(this.ellipsoid),l=m.parse(e);break}case"cmpt":{let m=new Lf(c);m.workingPath=o,m.fetchOptions=s,m.adjustmentTransform.copy(d),m.ellipsoid.copy(this.ellipsoid),l=m.parse(e).then(S=>S.scene);break}case"gltf":case"glb":{let m=c.getHandler("path.gltf")||c.getHandler("path.glb")||new ql.GLTFLoader(c);m.setWithCredentials(s.credentials==="include"),m.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&m.setCrossOrigin("use-credentials");let S=m.resourcePath||m.path||o;!/[\\/]$/.test(S)&&S.length&&(S+="/"),l=m.parseAsync(e,S).then(M=>{M.scene=M.scene||new F.Group;let{scene:C}=M;return C.updateMatrix(),C.matrix.multiply(d).decompose(C.position,C.quaternion,C.scale),M});break}default:l=this.invokeOnePlugin(m=>m.parseToMesh&&m.parseToMesh(e,t,n,i,r));break}let f=await l;if(f===null)throw Error(`TilesRenderer: Content type "${p}" not supported.`);let g,y;f.isObject3D?(g=f,y=null):(g=f.scene,y=f),g.updateMatrix(),g.matrix.premultiply(u),g.matrix.decompose(g.position,g.quaternion,g.scale),await this.invokeAllPlugins(m=>m.processTileModel&&m.processTileModel(g,t)),g.traverse(m=>{m[Df]=m.frustumCulled,m.userData.tile=t}),Ef(g,!this.autoDisableRendererCulling);let T=[],x=[],h=[];if(g.traverse(m=>{if(m.geometry&&x.push(m.geometry),m.material){let S=m.material;T.push(m.material);for(let M in S){let C=S[M];C&&C.isTexture&&h.push(C)}}}),r.aborted){for(let m=0,S=h.length;m<S;m++){let M=h[m];M.image instanceof ImageBitmap&&M.image.close(),M.dispose()}return}a.materials=T,a.geometry=x,a.textures=h,a.scene=g,a.metadata=y}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let n=t.materials,i=t.geometry,r=t.textures,a=t.scene.parent;t.scene.traverse(o=>{o.userData.meshFeatures&&o.userData.meshFeatures.dispose(),o.userData.structuralMetadata&&o.userData.structuralMetadata.dispose()});for(let o=0,s=i.length;o<s;o++)i[o].dispose();for(let o=0,s=n.length;o<s;o++)n[o].dispose();for(let o=0,s=r.length;o<s;o++){let c=r[o];c.image instanceof ImageBitmap&&c.image.close(),c.dispose()}a&&a.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let n=e.engineData.scene;n&&(t?(n.parent=this.group,n.updateMatrixWorld(!0)):n.parent=null)}setTileVisible(e,t){let n=e.engineData.scene,{activeTiles:i,group:r}=this;n&&(t?r.add(n):(r.remove(n),i.has(e)&&(n.parent=r))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let n=this._bytesUsed;return!n.has(e)&&t&&n.set(e,Sy(t)),n.get(e)??null}calculateTileViewError(e,t){let n=e.engineData,i=this.cameras,r=this.cameraInfo,a=n.boundingVolume,o=!1,s=0,c=1/0,l=0,u=1/0;for(let d=0,p=i.length;d<p;d++){let f=r[d],g,y;if(f.isOrthographic){let x=f.pixelSize;g=e.geometricError/x,y=1/0}else{let x=f.sseDenominator;y=a.distanceToPoint(f.position),g=y===0?1/0:e.geometricError/(y*x)}let T=r[d].frustum;a.intersectsFrustum(T)&&(o=!0,s=Math.max(s,g),c=Math.min(c,y)),l=Math.max(l,g),u=Math.min(u,y)}o?(t.inView=!0,t.error=s,t.distanceFromCamera=c):(t.inView=!1,t.error=l,t.distanceFromCamera=u)}dispose(){super.dispose(),this.group.removeFromParent()}};var Q=require("three"),$f=require("three/addons/loaders/GLTFLoader.js"),fu=require("three/addons/postprocessing/Pass.js");var sC=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var Nf=new Ja;Nf.maxJobs=10,Nf.priorityCallback=(e,t)=>{let n=e.tile,i=t.tile,r=n.internal.renderer,a=i.internal.renderer,o=r.visibleTiles.has(n);return o===a.visibleTiles.has(i)?es(n,i):o?1:-1};var Of=new Q.Vector3;function cs(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,i=new Q.BufferAttribute(new t(e.count*e.itemSize),e.itemSize,!0),r=e.itemSize,a=e.count;for(let o=0;o<a;o++)for(let s=0;s<r;s++){let c=Q.MathUtils.clamp(e.getComponent(o,s),n,1);i.setComponent(o,s,c)}return i}function Py(e,t=Int16Array){let n=e.geometry,i=n.attributes,r=i.position;if(r.isInterleavedBufferAttribute||r.array instanceof t)return r;let a=new Q.BufferAttribute(new t(r.count*r.itemSize),r.itemSize,!1),o=r.itemSize,s=r.count;n.computeBoundingBox();let c=n.boundingBox,{min:l,max:u}=c,d=2**(8*t.BYTES_PER_ELEMENT-1)-1,p=-d;for(let f=0;f<s;f++)for(let g=0;g<o;g++){let y=g===0?"x":g===1?"y":"z",T=l[y],x=u[y],h=Q.MathUtils.mapLinear(r.getComponent(f,g),T,x,p,d);a.setComponent(f,g,h)}c.getCenter(Of).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(Of),e.scale.x*=.5*(u.x-l.x)/d,e.scale.y*=.5*(u.y-l.y)/d,e.scale.z*=.5*(u.z-l.z)/d,i.position=a,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var gu=class{constructor(e){this._options={generateNormals:!1,disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!1,uvType:Int8Array,normalType:Int8Array,positionType:Int16Array,...e},this.name="TILES_COMPRESSION_PLUGIN",this.priority=-100}processTileModel(e,t){let{generateNormals:n,disableMipmaps:i,compressIndex:r,compressUvs:a,compressNormals:o,compressPosition:s,uvType:c,normalType:l,positionType:u}=this._options;e.traverse(d=>{if(d.material&&i){let p=d.material;for(let f in p){let g=p[f];g&&g.isTexture&&g.generateMipmaps&&(g.generateMipmaps=!1,g.minFilter=Q.LinearFilter)}}if(d.geometry){let p=d.geometry,f=p.attributes;if(a){let{uv:g,uv1:y,uv2:T,uv3:x}=f;g&&(f.uv=cs(g,c)),y&&(f.uv1=cs(y,c)),T&&(f.uv2=cs(T,c)),x&&(f.uv3=cs(x,c))}if(n&&!f.normals&&p.computeVertexNormals(),o&&f.normals&&(f.normals=cs(f.normals,l)),s&&Py(d,u),r&&p.index){let g=f.position.count,y=p.index,T=g>65535?Uint32Array:g>255?Uint16Array:Uint8Array;if(!(y.array instanceof T)){let x=new T(p.index.count);x.set(y.array);let h=new Q.BufferAttribute(x,1);p.setIndex(h)}}}})}};function An(e,t,n){return e&&t in e?e[t]:n}function Kf(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function Ay(e){return/^FLOAT/.test(e)}function hs(e){return/^VEC/.test(e)}function ms(e){return/^MAT/.test(e)}function Zf(e,t,n,i=null){return ms(n)||hs(n)?i.fromArray(e,t):e[t]}function hu(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new Q.Vector2;case"VEC3":return new Q.Vector3;case"VEC4":return new Q.Vector4;case"MAT2":return new Q.Matrix2;case"MAT3":return new Q.Matrix3;case"MAT4":return new Q.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function If(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 ps(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 Ey(e,t=null){if(e.array){t=t&&Array.isArray(t)?t:[],t.length=e.count;for(let n=0,i=t.length;n<i;n++)t[n]=Yl(e,t[n])}else t=Yl(e,t);return t}function Yl(e,t=null){let n=e.default,i=e.type;if(t||(t=hu(e)),n===null){switch(i){case"SCALAR":return 0;case"VEC2":return t.set(0,0);case"VEC3":return t.set(0,0,0);case"VEC4":return t.set(0,0,0,0);case"MAT2":return t.identity();case"MAT3":return t.identity();case"MAT4":return t.identity();case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return""}throw Error("ClassProperty: invalid type.")}else if(ms(i))t.fromArray(n);else if(hs(i))t.fromArray(n);else return n}function Ry(e,t){if(e.noData===null)return t;let n=e.noData,i=e.type;if(Array.isArray(t))for(let o=0,s=t.length;o<s;o++)t[o]=r(t[o]);else t=r(t);return t;function r(o){return a(o)&&(o=Yl(e,o)),o}function a(o){if(ms(i)){let s=o.elements;for(let c=0,l=n.length;c<l;c++)if(n[c]!==s[c])return!1;return!0}else if(hs(i)){for(let s=0,c=n.length;s<c;s++)if(n[s]!==o.getComponent(s))return!1;return!0}else return n===o}}function Ly(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 ky(e,t){let{type:n,componentType:i,scale:r,offset:a,normalized:o}=e;if(Array.isArray(t))for(let d=0,p=t.length;d<p;d++)t[d]=s(t[d]);else t=s(t);return t;function s(d){return d=ms(n)?l(d):hs(n)?c(d):u(d),d}function c(d){return d.x=u(d.x),d.y=u(d.y),"z"in d&&(d.z=u(d.z)),"w"in d&&(d.w=u(d.w)),d}function l(d){let p=d.elements;for(let f=0,g=p.length;f<g;f++)p[f]=u(p[f]);return d}function u(d){return o&&(d=Ly(i,d)),(o||Ay(i))&&(d=d*r+a),d}}function bu(e,t,n=null){if(e.array){Array.isArray(t)||(t=Array(e.count||0)),t.length=n===null?e.count:n;for(let i=0,r=t.length;i<r;i++)If(e.type,t[i])||(t[i]=hu(e))}else If(e.type,t)||(t=hu(e));return t}function $l(e,t){for(let n in t)n in e||delete t[n];for(let n in e){let i=e[n];t[n]=bu(i,t[n])}}function By(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 Zl=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=An(t,"scale",1),this.max=An(t,"max",1/0),this.min=An(t,"min",-1/0),this.required=t.required||!1,this.noData=An(t,"noData",null),this.default=An(t,"default",null),this.semantic=An(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=An(n,"offset",this.offset),this.scale=An(n,"scale",this.scale),this.max=An(n,"max",this.max),this.min=An(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=An(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return bu(this,e,t)}resolveDefaultElement(e){return Yl(this,e)}resolveDefault(e){return Ey(this,e)}resolveNoData(e){return Ry(this,e)}resolveEnumsToStrings(e){let t=this.enumSet;if(this.type==="ENUM")if(Array.isArray(e))for(let i=0,r=e.length;i<r;i++)e[i]=n(e[i]);else e=n(e);return e;function n(i){let r=t.values.find(a=>a.value===i);return r===null?"":r.name}}adjustValueScaleOffset(e){return Kf(this.type)?ky(this,e):e}},vu=class{constructor(e,t={},n={},i=null){this.definition=e,this.class=t[e.class],this.className=e.class,this.enums=n,this.data=i,this.name="name"in e?e.name:null,this.properties=null}getPropertyNames(){return Object.keys(this.class.properties)}includesData(e){return!!this.definition.properties[e]}dispose(){}_initProperties(e=Zl){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}},Dy=class extends Zl{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},Ny=class extends vu{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(Dy)}getData(e,t,n={}){let i=this.properties;$l(i,n);for(let r in i)n[r]=this.getPropertyValue(r,e,t,n[r]);return n}getPropertyValue(e,t,n,i=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let r=this.properties[e],a=r.type;if(!r)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return r.resolveDefault(i);i=r.shapeToProperty(i);let o=n.getAttribute(r.attribute.toLowerCase());if(ms(a)){let s=i.elements;for(let c=s.length;0<c;)s[0]=o.getComponent(t,0)}else if(hs(a))i.fromBufferAttribute(o,t);else if(a==="SCALAR"||a==="ENUM")i=o.getX(t);else throw Error("StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.");return i=r.adjustValueScaleOffset(i),i=r.resolveEnumsToStrings(i),i=r.resolveNoData(i),i}},Oy=class extends Zl{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=By(this.type),this.arrayOffsets=An(n,"arrayOffsets",null),this.stringOffsets=An(n,"stringOffsets",null),this.arrayOffsetType=An(n,"arrayOffsetType","UINT32"),this.stringOffsetType=An(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:i,arrayOffsetType:r}=this,a=new(ps(r))(e[i]);n=a[t+1]-a[t]}return n}getIndexOffsetFromId(e,t){let n=t;if(this.arrayOffsets){let{arrayOffsets:i,arrayOffsetType:r}=this;n=new(ps(r))(e[i])[n]}else this.array&&(n*=this.count);return n}},Iy=class extends vu{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(Oy)}getData(e,t={}){let n=this.properties;$l(n,t);for(let i in n)t[i]=this.getPropertyValue(i,e,t[i]);return t}_readValueAtIndex(e,t,n,i=null){let r=this.properties[e],{componentType:a,type:o}=r,s=this.data,c=s[r.values],l=new(ps(a,o))(c),u=r.getIndexOffsetFromId(s,t);if(Kf(o)||o==="ENUM")return Zf(l,(u+n)*r.valueLength,o,i);if(o==="STRING"){let d=u+n,p=0;if(r.stringOffsets!==null){let{stringOffsets:g,stringOffsetType:y}=r,T=new(ps(y))(s[g]);p=T[d+1]-T[d],d=T[d]}let f=new Uint8Array(l.buffer,d,p);i=new TextDecoder().decode(f)}else if(o==="BOOLEAN"){let d=u+n,p=Math.floor(d/8),f=d%8;i=(l[p]>>f&1)==1}return i}getPropertyValue(e,t,n=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let i=this.properties[e];if(!i)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(n);let r=i.array,a=this.data,o=i.getArrayLengthFromId(a,t);if(n=i.shapeToProperty(n,o),r)for(let s=0,c=n.length;s<c;s++)n[s]=this._readValueAtIndex(e,t,s,n[s]);else n=this._readValueAtIndex(e,t,0,n);return n=i.adjustValueScaleOffset(n),n=i.resolveEnumsToStrings(n),n=i.resolveNoData(n),n}},ds=new Q.Box2,zf=class{constructor(){this._renderer=new Q.WebGLRenderer,this._target=new Q.WebGLRenderTarget(1,1),this._texTarget=new Q.WebGLRenderTarget,this._quad=new fu.FullScreenQuad(new Q.ShaderMaterial({blending:Q.CustomBlending,blendDst:Q.ZeroFactor,blendSrc:Q.OneFactor,uniforms:{map:{value:null},pixel:{value:new Q.Vector2}},vertexShader:`
|
|
3672
|
+
`,Ad=class extends sl.Effect{constructor(t=1){super("ExposureEffect",ix,{blendFunction:sl.BlendFunction.NORMAL,uniforms:new Map([["exposure",new Gh.Uniform(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},Wh=(0,Va.forwardRef)(function({exposure:t},n){let i=(0,Va.useMemo)(()=>new Ad(t),[]);return i.exposure=t,(0,Va.useImperativeHandle)(n,()=>i,[i]),(0,Xh.jsx)("primitive",{object:i,dispose:null})});var na=require("@react-three/fiber"),qh=Zp(require("@react-three/postprocessing")),Yh=require("postprocessing"),ur=require("three"),dr=require("react"),Kh=require("react/jsx-runtime"),ax=qh.LensFlareEffect;function $h({config:e}){let t=(0,na.useThree)(p=>p.camera),n=(0,na.useThree)(p=>p.raycaster),i=(0,na.useThree)(p=>p.scene),r=(0,na.useThree)(p=>p.viewport),a=(0,dr.useRef)(null),o=(0,dr.useRef)(new ur.Vector3),s=(0,dr.useRef)(new ur.Vector2),c=(0,dr.useMemo)(()=>new ur.Vector3(...e.lensPosition),[e.lensPosition]),l=(0,dr.useMemo)(()=>new ur.Color(e.colorGain??"#141414"),[e.colorGain]),u=(0,dr.useMemo)(()=>new ur.Vector2(0,0),[]),d=(0,dr.useMemo)(()=>new ax({blendFunction:Yh.BlendFunction.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:c,screenRes:u,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:l,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[l,e.aditionalStreaks,e.anamorphic,e.animated,e.flareShape,e.flareSize,e.flareSpeed,e.glareSize,e.haloScale,e.ghostScale,e.opacity,e.secondaryGhosts,e.starBurst,c,u]);return(0,dr.useEffect)(()=>(a.current=d,()=>{d.dispose(),a.current=null}),[d]),(0,dr.useEffect)(()=>{let p=d.uniforms.get("screenRes");p&&(p.value.x=r.width,p.value.y=r.height)},[d,r]),(0,na.useFrame)((p,f)=>{let g=a.current;if(!g)return;let y=g.uniforms.get("lensPosition"),T=g.uniforms.get("opacity");if(!y||!T)return;let x=1;if(o.current.copy(c).project(t),o.current.z>1)return;y.value.x=o.current.x,y.value.y=o.current.y,s.current.x=o.current.x,s.current.y=o.current.y,n.setFromCamera(s.current,t);let h=n.intersectObjects(i.children,!0),{object:m}=h[0]||{};m&&(m.userData?.lensflare==="no-occlusion"?x=0:m instanceof ur.Mesh&&(m.material.uniforms?._transmission?.value>.2||m.material._transmission&&m.material._transmission>.2?x=.2:m.material.transparent&&(x=m.material.opacity))),T.value=ur.MathUtils.damp(T.value,x,12,f)}),(0,Kh.jsx)("primitive",{object:d,dispose:null})}var ll=require("@react-three/postprocessing"),Vn=require("postprocessing"),Zh=require("three");function Jh(e){return e==="linear"?Vn.ToneMappingMode.LINEAR:e==="reinhard"?Vn.ToneMappingMode.REINHARD:Vn.ToneMappingMode.ACES_FILMIC}function cl(e){switch(e){case"verySmall":return Vn.KernelSize.VERY_SMALL;case"small":return Vn.KernelSize.SMALL;case"medium":return Vn.KernelSize.MEDIUM;case"large":return Vn.KernelSize.LARGE;case"veryLarge":return Vn.KernelSize.VERY_LARGE;case"huge":return Vn.KernelSize.HUGE}}function Qh(e){switch(e){case"constantMild":return Vn.GlitchMode.CONSTANT_MILD;case"constantWild":return Vn.GlitchMode.CONSTANT_WILD;default:return Vn.GlitchMode.SPORADIC}}function Ed(e){let t=new Zh.Color(e);return[t.r,t.g,t.b,1]}function em(e){return e==="radial"?ll.RampType.Radial:e==="mirroredLinear"?ll.RampType.MirroredLinear:ll.RampType.Linear}var at=require("react/jsx-runtime"),ra={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new kr.Color(si.color).getHex(),hiddenEdgeColor:new kr.Color(si.color).multiplyScalar(.35).getHex(),kernelSize:Ci.KernelSize.VERY_SMALL,blur:!1,xRay:!1};function ox(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}var Rd=[],sx=(0,yn.memo)(function({sceneConfig:t,selectedObjectRef:n,highlightOnHover:i=!1,disabled:r=!1,onOutlineEffect:a}){let o=(0,jo.useThree)(M=>M.scene),s=(0,jo.useThree)(M=>M.gl),c=(0,yn.useRef)(null),l=t?.postProcessing,u=n??null,d=l?.outline.enabled===!0,p=d||i,[f,g]=(0,yn.useState)(()=>s.xr?.isPresenting??!1);(0,yn.useEffect)(()=>{let M=s.xr;if(!M)return;let C=()=>g(!0),L=()=>g(!1);return M.addEventListener("sessionstart",C),M.addEventListener("sessionend",L),g(M.isPresenting),()=>{M.removeEventListener("sessionstart",C),M.removeEventListener("sessionend",L)}},[s]);let y=o.children.filter(M=>M.isLight),T=(0,yn.useMemo)(()=>new kr.Vector2(l?.chromaticAberration.offsetX??.002,l?.chromaticAberration.offsetY??.002),[l?.chromaticAberration.offsetX,l?.chromaticAberration.offsetY]),x=(0,yn.useMemo)(()=>new kr.Color(l?.outline.visibleEdgeColor??"#ffffff").getHex(),[l?.outline.visibleEdgeColor]),h=(0,yn.useMemo)(()=>new kr.Color(l?.outline.hiddenEdgeColor??"#22090a").getHex(),[l?.outline.hiddenEdgeColor]),m=(0,yn.useMemo)(()=>Ed(l?.ramp.startColor??"#000000"),[l?.ramp.startColor]),S=(0,yn.useMemo)(()=>Ed(l?.ramp.endColor??"#ffffff"),[l?.ramp.endColor]);return!l||f||r?null:(0,at.jsxs)(at.Fragment,{children:[l.godRays.enabled===!0&&(0,at.jsxs)("mesh",{ref:c,position:l.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[(0,at.jsx)("sphereGeometry",{args:[.1,8,8]}),(0,at.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,at.jsxs)(Be.EffectComposer,{multisampling:0,enableNormalPass:l.ssao.enabled===!0,autoClear:!1,children:[l.smaa.enabled===!0&&(0,at.jsx)(Be.SMAA,{}),l.ssao.enabled===!0&&(0,at.jsx)(Be.SSAO,{samples:l.ssao.samples,rings:l.ssao.rings,intensity:l.ssao.intensity,radius:l.ssao.radius,bias:l.ssao.bias,luminanceInfluence:l.ssao.luminanceInfluence,fade:l.ssao.fade,minRadiusScale:l.ssao.minRadiusScale,worldDistanceThreshold:l.ssao.worldDistanceThreshold,worldDistanceFalloff:l.ssao.worldDistanceFalloff,worldProximityThreshold:l.ssao.worldProximityThreshold,worldProximityFalloff:l.ssao.worldProximityFalloff}),l.autofocus.enabled===!0&&(0,at.jsx)(Be.Autofocus,{focusDistance:l.autofocus.focusDistance,focusRange:l.autofocus.focusRange,focalLength:l.autofocus.focalLength,bokehScale:l.autofocus.bokehScale,target:l.autofocus.target,mouse:l.autofocus.mouse,debug:l.autofocus.debug||void 0,manual:l.autofocus.manual,smoothTime:l.autofocus.smoothTime}),l.autofocus.enabled!==!0&&l.depthOfField.enabled===!0&&(0,at.jsx)(Be.DepthOfField,{focusDistance:l.depthOfField.focusDistance,focusRange:l.depthOfField.focusRange,focalLength:l.depthOfField.focalLength,bokehScale:l.depthOfField.bokehScale}),l.bloom.enabled===!0&&(0,at.jsx)(Be.Bloom,{intensity:l.bloom.intensity,luminanceThreshold:l.bloom.luminanceThreshold,luminanceSmoothing:l.bloom.luminanceSmoothing,mipmapBlur:l.bloom.mipmapBlur,radius:l.bloom.radius,levels:l.bloom.levels}),l.selectiveBloom.enabled===!0&&(0,at.jsx)(Be.SelectiveBloom,{selection:u??void 0,lights:y,selectionLayer:l.selectiveBloom.selectionLayer,intensity:l.selectiveBloom.intensity,luminanceThreshold:l.selectiveBloom.luminanceThreshold,luminanceSmoothing:l.selectiveBloom.luminanceSmoothing,kernelSize:cl(l.selectiveBloom.kernelSize),mipmapBlur:l.selectiveBloom.mipmapBlur,inverted:l.selectiveBloom.inverted,ignoreBackground:l.selectiveBloom.ignoreBackground}),p&&(0,at.jsx)(Be.Outline,{ref:a,selection:Rd,selectionLayer:l.outline.selectionLayer,blendFunction:Ci.BlendFunction.SCREEN,edgeStrength:d?l.outline.edgeStrength:ra.edgeStrength,pulseSpeed:d?l.outline.pulseSpeed:ra.pulseSpeed,visibleEdgeColor:d?x:ra.visibleEdgeColor,hiddenEdgeColor:d?h:ra.hiddenEdgeColor,kernelSize:d?cl(l.outline.kernelSize):ra.kernelSize,blur:d?l.outline.blur:ra.blur,xRay:d?l.outline.xRay:ra.xRay}),l.chromaticAberration.enabled===!0&&(0,at.jsx)(Be.ChromaticAberration,{offset:T,radialModulation:l.chromaticAberration.radialModulation,modulationOffset:l.chromaticAberration.modulationOffset}),l.colorAverage.enabled===!0&&(0,at.jsx)(Be.ColorAverage,{}),l.dotScreen.enabled===!0&&(0,at.jsx)(Be.DotScreen,{angle:l.dotScreen.angle,scale:l.dotScreen.scale}),l.glitch.enabled===!0&&(0,at.jsx)(Be.Glitch,{mode:Qh(l.glitch.mode),delay:new kr.Vector2(l.glitch.delay[0],l.glitch.delay[1]),duration:new kr.Vector2(l.glitch.duration[0],l.glitch.duration[1]),strength:new kr.Vector2(l.glitch.strength[0],l.glitch.strength[1]),chromaticAberrationOffset:new kr.Vector2(l.glitch.chromaticAberrationOffset[0],l.glitch.chromaticAberrationOffset[1]),columns:l.glitch.columns,ratio:l.glitch.ratio,active:!0}),l.grid.enabled===!0&&(0,at.jsx)(Be.Grid,{scale:l.grid.scale,lineWidth:l.grid.lineWidth}),l.lensflare.enabled===!0&&(0,at.jsx)($h,{config:l.lensflare}),l.godRays.enabled===!0&&(0,at.jsx)(Be.GodRays,{sun:c,samples:l.godRays.samples,density:l.godRays.density,decay:l.godRays.decay,weight:l.godRays.weight,exposure:l.godRays.exposure,clampMax:l.godRays.clampMax,blur:l.godRays.blur,kernelSize:cl(l.godRays.kernelSize)}),l.noise.enabled===!0&&(0,at.jsx)(Be.Noise,{premultiply:l.noise.premultiply,opacity:l.noise.opacity,blendFunction:Ci.BlendFunction.ADD}),l.brightnessContrast.enabled===!0&&(0,at.jsx)(Be.BrightnessContrast,{brightness:l.brightnessContrast.brightness,contrast:l.brightnessContrast.contrast}),l.hueSaturation.enabled===!0&&(0,at.jsx)(Be.HueSaturation,{hue:l.hueSaturation.hue,saturation:l.hueSaturation.saturation}),l.toneMapping.enabled===!0&&(0,at.jsx)(Wh,{exposure:l.toneMapping.exposure}),l.vignette.enabled===!0&&(0,at.jsx)(Be.Vignette,{eskil:l.vignette.eskil,offset:l.vignette.offset,darkness:l.vignette.darkness,blendFunction:Ci.BlendFunction.NORMAL}),l.toneMapping.enabled===!0&&(0,at.jsx)(Be.ToneMapping,{mode:Jh(l.toneMapping.mode),resolution:l.toneMapping.resolution,whitePoint:l.toneMapping.whitePoint,middleGrey:l.toneMapping.middleGrey,minLuminance:l.toneMapping.minLuminance,averageLuminance:l.toneMapping.averageLuminance,adaptationRate:l.toneMapping.adaptationRate}),l.sepia.enabled===!0&&(0,at.jsx)(Be.Sepia,{intensity:l.sepia.intensity,blendFunction:Ci.BlendFunction.NORMAL}),l.scanline.enabled===!0&&(0,at.jsx)(Be.Scanline,{density:l.scanline.density,blendFunction:Ci.BlendFunction.OVERLAY}),l.pixelation.enabled===!0&&(0,at.jsx)(Be.Pixelation,{granularity:l.pixelation.granularity}),l.ramp.enabled===!0&&(0,at.jsx)(Be.Ramp,{rampType:em(l.ramp.rampType),rampStart:l.ramp.rampStart,rampEnd:l.ramp.rampEnd,startColor:m,endColor:S,opacity:l.ramp.rampMask?1:l.ramp.opacity??.5,rampBias:l.ramp.rampBias,rampGain:l.ramp.rampGain,rampMask:l.ramp.rampMask,rampInvert:l.ramp.rampInvert})]})]})});function lx(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 cx(e,t){return e.length===t.length&&e.every((n,i)=>n===t[i])}function tm({hoveredObjectRef:e,...t}){let n=(0,jo.useThree)(c=>c.scene),i=(0,jo.useThree)(c=>c.invalidate),[r,a]=(0,yn.useState)(null),o=(0,yn.useCallback)(c=>a(c),[]),s=(0,yn.useRef)({effect:null,objects:Rd});return(0,yn.useEffect)(()=>{if(!r)return;let l=t.sceneConfig?.postProcessing?.outline.enabled===!0?ox(n):e&&lx(e)?[e]:Rd;s.current.effect===r&&cx(s.current.objects,l)||(s.current={effect:r,objects:l},r.selection.set(l),i())}),(0,at.jsx)(sx,{...t,onOutlineEffect:o})}var nm=require("react"),dl=class extends nm.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,i){this.props.onError?.(n)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};var wn=require("react/jsx-runtime"),dx=1.5;function ux({captureRef:e}){let{gl:t,scene:n,camera:i,invalidate:r}=(0,ul.useThree)();return(0,Br.useEffect)(()=>{if(e)return e.current={gl:t,scene:n,camera:i,invalidate:r},()=>{e.current=null}},[e,t,n,i,r]),null}function Ld({children:e,camera:t,backgroundColor:n,shadows:i=!0,sceneConfig:r,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,renderMode:c="demand",maxDpr:l=2,xrStore:u,rendererCaptureRef:d,preserveDrawingBuffer:p=!1,reduceGpuLoad:f}){let g=f??_d(),y=g?Math.min(l,dx):l,T=i&&!g,x=(0,Br.useMemo)(()=>n?{background:n}:r?.background.enabled?r.background.type==="color"?{background:r.background.color}:r.background.type==="image"&&r.background.imageUrl.trim()?{backgroundImage:`url("${r.background.imageUrl}")`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}:{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}:{background:"transparent"},[n,r]),h=(0,Br.useMemo)(()=>{if(n)return n;let v=r?.background;if(v?.enabled){if(v.type==="color")return v.color;if(v.type==="image"&&v.imageUrl.trim()||v.type==="environment")return null}return"#1c1c1d"},[n,r]),m=(0,Br.useMemo)(()=>{let v=r?.postProcessing;return v?!!(v.glitch.enabled||v.noise.enabled||v.lensflare.enabled&&v.lensflare.animated):!1},[r?.postProcessing]),[S,M]=(0,Br.useState)(!1),C=r?.environment,L=r?.groundShadows,b=(0,Br.useMemo)(()=>{if(!C)return null;if(C.source==="custom"){let v=C.customEnvironmentUrl.trim();return rl(v)?{files:v}:null}return{preset:C.preset}},[C]),_=(0,wn.jsxs)(wn.Fragment,{children:[(0,wn.jsx)(ux,{captureRef:d}),(0,wn.jsx)(Nh,{cameraConfig:t}),(0,wn.jsx)(kh,{active:m}),(0,wn.jsx)(Bh,{color:h}),b?(0,wn.jsx)(dl,{onError:v=>console.warn("Failed to load environment map:",v),children:(0,wn.jsx)(Br.Suspense,{fallback:null,children:(0,wn.jsx)(pl.Environment,{...b,environmentIntensity:C?.intensity??.25,backgroundIntensity:C?.intensity??.25,background:r?.background.enabled===!0&&r.background.type==="environment"})})}):null,(0,wn.jsx)(Dh,{rotation:C?.rotation??0}),u&&(0,wn.jsx)(Lh,{onPresentingChange:M}),L?.enabled&&L.mode==="shadowCatcher"&&!S&&(0,wn.jsx)(pl.ContactShadows,{position:[0,L.height,0],scale:L.size,opacity:L.intensity,blur:L.borderFade,far:15,resolution:1024,color:"#000000"}),e,(0,wn.jsx)(tm,{sceneConfig:r,selectedObjectRef:a,hoveredObjectRef:o,highlightOnHover:s,disabled:g})]});return(0,wn.jsx)(ul.Canvas,{frameloop:c,dpr:[1,y],shadows:T?"soft":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:x,camera:t??{fov:50},gl:{preserveDrawingBuffer:p,toneMapping:im.NoToneMapping,toneMappingExposure:1},children:u?(0,wn.jsxs)(rm.XR,{store:u,children:[(0,wn.jsx)(Rh,{renderMode:c}),_]}):_})}var am=require("@react-three/drei"),om=require("react"),sm=require("react/jsx-runtime");function kd({controlsRef:e,onCameraChange:t}){return(0,om.useEffect)(()=>{if(!t||!e||typeof e!="object"||!("current"in e))return;let n=e.current;if(!n)return;let i=()=>{t(n.camera,n)};return n.addEventListener("update",i),()=>{n.removeEventListener("update",i)}},[e,t]),(0,sm.jsx)(am.CameraControls,{ref:e,makeDefault:!0,smoothTime:.3,dollyToCursor:!0})}var Nr=require("react"),Go=require("@react-three/fiber"),cm=require("three");function Pn(e,t){if(e[t])return t;let n=Object.entries(e).find(([,r])=>r.id===t)?.[0];return n||(Object.entries(e).find(([,r])=>r.modelObjectId===t)?.[0]??null)}var Bd=Symbol("react-immersive.model-node-id");function px(e,t){Object.defineProperty(e,Bd,{value:t,configurable:!0})}function Fa(e){let t=new Map;e.traverse(c=>{if(!c.name)return;let l=t.get(c.name);l?l.push(c):t.set(c.name,[c])});let n=Object.create(null),i=new WeakMap,r=new Map,a=new Set(Array.from(t,([c,l])=>l.length===1?c:null).filter(c=>c!==null)),o=new Set,s=(c,l)=>{px(c,l),n[l]=c,i.set(c,l),o.add(l)};for(let[c,l]of t)l.length===1&&s(l[0],c);for(let[c,l]of t){if(l.length<2)continue;let u=[];l.forEach((d,p)=>{let f=`${c} [${p+1}]`,g=f,y=2;for(;a.has(g)||o.has(g);)g=`${f}.${y++}`;s(d,g),u.push(g)}),r.set(c,u)}return{nodesById:n,idByNode:i,duplicateNames:r}}function Ho(e){return e[Bd]??e.name??null}function Dr(e,t){let n=null,i=[];return e.traverse(r=>{r[Bd]===t&&(n=r),r.name===t&&i.push(r)}),n??(i.length===1?i[0]:null)}var pr=require("react/jsx-runtime");function dm(e,t){if(!t)return e;let n=t*Math.PI/180,i=Math.cos(n),r=Math.sin(n);return[e[0]*i+e[2]*r,e[1],-e[0]*r+e[2]*i]}function hx(e,t){let[n,i,r]=e.center,a=e.radius,o=Math.hypot(t[0],t[1],t[2]),s=o>1e-6?[t[0]/o,t[1]/o,t[2]/o]:[0,1,0],c=a*2;return{position:[n+s[0]*c,i+s[1]*c,r+s[2]*c],target:e.center,extent:a,near:Math.max(a/100,.001),far:c+a*2}}function mx(e,t){let n=t[0]-e.center[0],i=t[1]-e.center[1],r=t[2]-e.center[2],a=Math.hypot(n,i,r);return{near:Math.max(a-e.radius,a*.01,.001),far:a+e.radius*2}}function fx(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var gx={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}]},bx={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function lm({light:e,shadows:t,shadowsEnabled:n,environmentRotation:i,modelBounds:r,objectBindings:a,nodeRefs:o}){let s=(0,Nr.useRef)(null),c=(0,Nr.useRef)(null),l=(0,Nr.useRef)(null),u=(0,Go.useThree)(x=>x.camera),d=(0,Go.useThree)(x=>x.scene),p=(0,Nr.useMemo)(()=>new cm.Vector3,[]),f=(0,Nr.useMemo)(()=>e.attachedToCamera||e.attachment?e.position:dm(e.position,i),[e.position,e.attachedToCamera,e.attachment,i]);(0,Go.useFrame)(()=>{let x=s.current??c.current??l.current;if(!x)return;if(e.attachedToCamera){x.position.copy(u.position);return}let h=e.attachment;if(!h)return;let m=a?Pn(a,h.objectId):null,M=(m?a?.[m]:void 0)?.modelObjectId??h.objectId,C=(m?o?.current[m]:void 0)??Dr(d,M);C&&(p.fromArray(h.offset),C.localToWorld(p),x.position.copy(p))});let g=n&&t.enabled&&e.castShadow,y=(0,Nr.useMemo)(()=>e.type==="directional"&&g&&r&&!e.attachedToCamera?hx(r,f):null,[e.type,e.attachedToCamera,g,r,f]),T=(0,Nr.useMemo)(()=>e.type==="spot"&&g&&r&&!e.attachedToCamera?mx(r,f):null,[e.type,e.attachedToCamera,g,r,f]);return(0,Nr.useEffect)(()=>{let x=s.current??l.current;if(!x)return;let[h,m,S]=fx(e,g,r);x.target.position.set(h,m,S),x.target.updateMatrixWorld()},[e,g,r]),!e.visible||e.type==="none"?null:e.type==="directional"?(0,pr.jsx)("directionalLight",{ref:s,color:e.color,intensity:e.intensity,position:y?.position??f,castShadow:g,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":y?.near??.5,"shadow-camera-far":y?.far??40,"shadow-camera-left":-(y?.extent??8),"shadow-camera-right":y?.extent??8,"shadow-camera-top":y?.extent??8,"shadow-camera-bottom":-(y?.extent??8)}):e.type==="point"?(0,pr.jsx)("pointLight",{ref:c,color:e.color,intensity:e.intensity,position:f,distance:e.distance,decay:e.decay,castShadow:g,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?(0,pr.jsx)("spotLight",{ref:l,color:e.color,intensity:e.intensity,position:f,angle:e.angle??Math.PI/6,penumbra:e.penumbra??.2,distance:e.distance,decay:e.decay,castShadow:g,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias,"shadow-normalBias":t.normalBias,"shadow-radius":t.radius,"shadow-camera-near":T?.near??.5,"shadow-camera-far":T?.far??40}):e.type==="hemisphere"?(0,pr.jsx)("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function Dd({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:i=0,environmentConfig:r,modelBounds:a,objectBindings:o,nodeRefs:s}){let c=e??gx,l=t??bx,u=r?.shadowLight,d=dm([5,10,5],i);return(0,pr.jsxs)(pr.Fragment,{children:[(0,pr.jsx)("ambientLight",{intensity:c.ambient.intensity,color:c.ambient.color}),c.lights.map(p=>(0,pr.jsx)(lm,{light:p,shadows:l,shadowsEnabled:n,environmentRotation:i,modelBounds:a,objectBindings:o,nodeRefs:s},p.id)),u?.enabled&&(0,pr.jsx)(lm,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:u.intensity,position:d,attachedToCamera:!1,castShadow:!0,shadowBias:u.bias,visible:!0},shadows:l,shadowsEnabled:n,environmentRotation:0,modelBounds:a,objectBindings:o,nodeRefs:s})]})}var ge=require("react"),$a=require("@react-three/fiber");var qo=require("@react-three/fiber"),Ga=require("three"),Ti=require("three-stdlib"),Em=require("three/examples/jsm/loaders/USDLoader.js");var ja=require("fflate");var um;function pm(e){um=e}function Wo(e){um?.(e)}var vx=[".glb",".gltf",".obj",".fbx",".usdz",".zip"],xx=["model/gltf-binary","model/gltf+json","model/vnd.usdz+zip","application/vnd.usdz+zip","application/zip","application/x-zip-compressed"],Xo=1024*1024,hm=128*Xo,mm=1024,fm=128*Xo,gm=256*Xo,bm=200,yx=Xo,li=new Map,hl=".glb,.gltf,.obj,.fbx,.usdz,.zip,model/gltf-binary,model/gltf+json,model/vnd.usdz+zip,application/vnd.usdz+zip,application/zip";function Od(e){let t=e.split(/[?#]/,1)[0].toLowerCase();return t.endsWith(".obj")?"obj":t.endsWith(".fbx")?"fbx":t.endsWith(".usdz")?"usdz":t.endsWith(".gltf")?"gltf":"glb"}function wm(e){return li.get(e)??{format:Od(e)}}function wx(e){let t=e.name.toLowerCase();return vx.some(n=>t.endsWith(n))||xx.includes(e.type)}async function ml(e){if(!wx(e))throw new Error("Unsupported model file. Please upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset.");let t=e.name.toLowerCase();if(t.endsWith(".usdz")||e.type==="model/vnd.usdz+zip"||e.type==="application/vnd.usdz+zip")return vm(e,"usdz");if(t.endsWith(".zip")||_x(e.type))return Sx(e);if(t.endsWith(".gltf")||e.type==="model/gltf+json")return xm(e);let n=Od(e.name);return n==="gltf"?xm(e):vm(e,n)}function vm(e,t){let n=URL.createObjectURL(e);return li.set(n,{format:t,entryPath:e.name}),{url:n,name:e.name,format:t,cleanup:()=>{Wo(n),li.delete(n),URL.revokeObjectURL(n)}}}function _x(e){return e==="application/zip"||e==="application/x-zip-compressed"}async function xm(e){let t=await e.text(),n=_m(t,e.name);for(let r of Sm(n))if(!Id(r))throw new Error(`${e.name} references external assets. Upload a .zip containing the .gltf file and its dependencies.`);let i=URL.createObjectURL(e);return li.set(i,{format:"gltf",entryPath:e.name}),{url:i,name:e.name,format:"gltf",cleanup:()=>{Wo(i),li.delete(i),URL.revokeObjectURL(i)}}}async function Sx(e){if(e.size>hm)throw new Error(`Model zip is too large. The compressed archive must be ${Nd(hm)} or smaller.`);let t=await Mx(new Uint8Array(await e.arrayBuffer())),n=new Map;for(let[o,s]of Object.entries(t)){let c=zd(o);!c||Mm(c)||n.set(c,s)}let i=[...n.keys()].filter(o=>/\.(gltf|obj|fbx)$/i.test(o));if(i.length===0)throw new Error("Invalid model zip: no .gltf, .obj, or .fbx file found.");if(i.length>1)throw new Error("Invalid model zip: multiple model entry files found.");let r=i[0],a=Od(r);if(a==="gltf")return Tx(e,r,n);if(a==="obj"||a==="fbx")return Cx(e,r,a,n);throw new Error(`Unsupported model entry ${r}.`)}function Mx(e){return new Promise((t,n)=>{let i=0,r=0,a=null,o=c=>(a??(a=new Error(`Invalid model zip: ${c}`)),!1);(0,ja.unzip)(e,{filter:c=>{if(a)return!1;if(i+=1,i>mm)return o(`archive contains more than ${mm.toLocaleString()} entries.`);if(c.originalSize>fm)return o(`${c.name} expands beyond the ${Nd(fm)} per-file limit.`);if(r+=c.originalSize,r>gm)return o(`expanded contents exceed ${Nd(gm)}.`);if(c.originalSize>=yx&&(c.size===0||c.originalSize/c.size>bm))return o(`${c.name} exceeds the ${bm}:1 compression-ratio limit.`);let l=zd(c.name);return!!l&&!Mm(l)}},(c,l)=>{a?n(a):c?n(new Error(`Invalid model zip: ${c.message}`)):t(l)})})}function Nd(e){return`${e/Xo} MiB`}function Cx(e,t,n,i){let r=[],a={};for(let[s,c]of i){let l=URL.createObjectURL(new Blob([c],{type:Cm(s)}));r.push(l),a[s]=l}let o=a[t];if(!o)throw r.forEach(s=>URL.revokeObjectURL(s)),new Error(`Invalid model zip: could not read ${t}.`);return li.set(o,{format:n,entryPath:t,resourceUrls:a}),{url:o,name:e.name,format:n,cleanup:()=>{Wo(o),li.delete(o),r.forEach(s=>URL.revokeObjectURL(s))}}}function Tx(e,t,n){let i=n.get(t);if(!i)throw new Error("Invalid GLTF zip: no .gltf found.");let r=_m((0,ja.strFromU8)(i),t);Px(r,t);let a=Ax(t),o=[];try{ym(r.buffers,a,n,o),ym(r.images,a,n,o);let s=new Blob([(0,ja.strToU8)(JSON.stringify(r))],{type:"model/gltf+json"}),c=URL.createObjectURL(s);return o.push(c),li.set(c,{format:"gltf",entryPath:t}),{url:c,name:e.name,format:"gltf",cleanup:()=>{Wo(c),li.delete(c),o.forEach(l=>URL.revokeObjectURL(l))}}}catch(s){throw o.forEach(c=>URL.revokeObjectURL(c)),s}}function ym(e,t,n,i){for(let r of e??[]){if(typeof r.uri!="string"||Id(r.uri))continue;let a=Ex(t,r.uri),o=n.get(a);if(!o)throw new Error(`Invalid GLTF zip: missing referenced asset ${r.uri}.`);let s=URL.createObjectURL(new Blob([o],{type:Cm(a)}));i.push(s),r.uri=s}}function _m(e,t){try{return JSON.parse(e)}catch{throw new Error(`${t} is not a valid .gltf JSON file.`)}}function Sm(e){return[...e.buffers??[],...e.images??[]].map(t=>t.uri).filter(t=>typeof t=="string"&&t.length>0)}function Px(e,t){for(let n of Sm(e)){if(Id(n))continue;let i=/^[a-z][a-z0-9+.-]*:/i.test(n),r=n.startsWith("/")||n.startsWith("\\");if(i||r)throw new Error(`${t} references external assets. Include every dependency inside the uploaded .zip.`)}}function Id(e){return e.startsWith("data:")}function zd(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!==".")){if(n===".."){t.pop();continue}t.push(n)}return t.join("/")}function Mm(e){let t=e.split("/");return e.endsWith("/")||t.includes("__MACOSX")||t.some(n=>n===".DS_Store"||n.startsWith("._"))}function Ax(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function Ex(e,t){let n=t.split(/[?#]/)[0],i=Rx(n);return zd(e?`${e}/${i}`:i)}function Rx(e){try{return decodeURI(e)}catch{return e}}function Cm(e){let t=e.toLowerCase();return t.endsWith(".obj")||t.endsWith(".mtl")?"text/plain":t.endsWith(".fbx")?"application/octet-stream":t.endsWith(".usdz")?"model/vnd.usdz+zip":t.endsWith(".bin")?"application/octet-stream":t.endsWith(".png")?"image/png":t.endsWith(".jpg")||t.endsWith(".jpeg")?"image/jpeg":t.endsWith(".webp")?"image/webp":t.endsWith(".avif")?"image/avif":t.endsWith(".ktx2")?"image/ktx2":"application/octet-stream"}var Lx=require("@react-three/drei"),kx=require("@react-three/fiber"),Bx=require("react"),Tm=require("three"),Ha=require("three-stdlib");function Dx(e){return{name:"RI_unlit_emissive_texture",async afterRoot(t){let n=e.json.materials??[],i=new Map;if(n.forEach(a=>{let o=!!a?.extensions?.KHR_materials_unlit,s=!!a?.pbrMetallicRoughness?.baseColorTexture;o&&!s&&a?.emissiveTexture&&a.name&&i.set(a.name,a.emissiveTexture.index)}),i.size===0||!t.scene)return;let r=new Map;await Promise.all([...i].map(async([a,o])=>{let s=await e.getDependency("texture",o);s&&(s.colorSpace=Tm.SRGBColorSpace,r.set(a,s))})),t.scene.traverse(a=>{let o=Array.isArray(a.material)?a.material:a.material?[a.material]:[];for(let s of o){let c=s.name?r.get(s.name):void 0;c&&!s.map&&(s.map=c,s.needsUpdate=!0)}})}}}var Ud="https://assets.react-immersive.liveroom.dev/three-r184/draco/",Vd="https://assets.react-immersive.liveroom.dev/three-r184/basis/";function Pm(e,t={},n){let{dracoDecoderPath:i=Ud,ktx2TranscoderPath:r=Vd,meshopt:a=!0}=t;if(i){let o=new Ha.DRACOLoader;o.setDecoderPath(i),e.setDRACOLoader(o)}if(a&&e.setMeshoptDecoder(Ha.MeshoptDecoder),r&&n){let o=new Ha.KTX2Loader().setTranscoderPath(r).detectSupport(n);e.setKTX2Loader(o)}e.register((o=>Dx(o)))}var fl=class extends Ga.Loader{constructor(){super(...arguments);this.options={source:{format:"glb"}}}configure(n){return this.options=n,this}load(n,i,r,a){this.loadAsset(n,r).then(i).catch(a)}async loadAsset(n,i){let r=Ox(this.options.source),{format:a}=this.options.source;if(a==="obj")return Nx(n,r,this.options.source,i);if(a==="fbx"){let c=Fd(this,new Ti.FBXLoader(r)),l=Ux(n,this.options.source);l&&c.setResourcePath(l);let u=await c.loadAsync(n,i);return jd(u,"FBXMesh",!1),{scene:u,animations:u.animations??[]}}if(a==="usdz"){let l=await Fd(this,new Em.USDLoader(r)).loadAsync(n,i);return jd(l,"USDZMesh",!1),{scene:l,animations:l.animations??[]}}let o=Fd(this,new Ti.GLTFLoader(r));Pm(o,this.options.decoderConfig,this.options.renderer);let s=await o.loadAsync(n,i);return{scene:s.scene,animations:s.animations??[]}}};pm(e=>{qo.useLoader.clear(fl,e)});function vl(e,t={},n){let i=(0,qo.useThree)(o=>o.gl),r=wm(e),a=n?{...r,format:n}:r;return(0,qo.useLoader)(fl,e,o=>{o.configure({source:a,decoderConfig:t,renderer:i})})}async function Nx(e,t,n,i){let r=await Am(e,t,i),a=new Ti.OBJLoader(t),o=Ix(r);if(o){let c=zx(o,e,n);if(c)try{let l=await Am(c.url,t),d=new Ti.MTLLoader(t).parse(l,c.basePath);d.preload(),a.setMaterials(d)}catch(l){console.warn(`[react-immersive] Could not load OBJ material ${o}; rendering geometry with fallback materials.`,l)}}let s=a.parse(r);return jd(s,"OBJMesh",!0),{scene:s,animations:[]}}function jd(e,t,n){let i=new Set,r=0;e.traverse(a=>{if(!("isMesh"in a&&a.isMesh===!0)){a.name&&i.add(a.name);return}let s=a.name||`${t}_${++r}`;if(!n&&a.name){i.add(a.name);return}let c=s,l=2;for(;i.has(c);)c=`${s}_${l++}`;a.name=c,i.add(c)})}function Am(e,t,n){let i=new Ga.FileLoader(t);return i.setResponseType("text"),i.loadAsync(e,n)}function Fd(e,t){return t.setCrossOrigin(e.crossOrigin),t.setWithCredentials(e.withCredentials),t.setRequestHeader(e.requestHeader),t}function Ox(e){let t=new Ga.LoadingManager,n=e.resourceUrls;return n&&t.setURLModifier(i=>{if(/^(?:blob:|data:)/i.test(i))return i;let r=bl(Lm(i).split(/[?#]/)[0]),a=n[r];if(a)return a;let o=gl(e.entryPath??""),s=bl(o?`${o}/${r}`:r);return n[s]??i}),t}function Ix(e){return/^\s*mtllib\s+(.+?)\s*$/im.exec(e)?.[1]?.trim()||null}function zx(e,t,n){if(n.resourceUrls&&n.entryPath){let i=bl(`${gl(n.entryPath)}/${Lm(e)}`),r=n.resourceUrls[i];if(!r)return null;let a=gl(i);return{url:r,basePath:a?`${a}/`:""}}try{let i=new URL(e,t).href;return{url:i,basePath:Rm(i)}}catch{return null}}function Ux(e,t){if(t.resourceUrls&&t.entryPath){let n=gl(t.entryPath);return n?`${n}/`:""}return Rm(e)}function Rm(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t+1)}function gl(e){let t=bl(e),n=t.lastIndexOf("/");return n===-1?"":t.slice(0,n)}function bl(e){let t=[];for(let n of e.replace(/\\/g,"/").replace(/^\/+/,"").split("/").filter(i=>i&&i!=="."))n===".."?t.pop():t.push(n);return t.join("/")}function Lm(e){try{return decodeURI(e)}catch{return e}}var je=require("three"),Fm=require("three-stdlib");function km(e){let t=new Map;return e.map((n,i)=>{let a=n.name.trim()||`Animation ${i+1}`,o=t.get(a)??0;return t.set(a,o+1),{clip:n,sourceName:o===0?a:`${a} (${o+1})`,duration:n.duration}})}var Nn=require("three");function Bm(e){return!!(e&&typeof e=="object"&&"clone"in e&&"color"in e&&"metalness"in e&&"roughness"in e)}function Dm(e){return!!(e&&typeof e=="object"&&"isMeshPhysicalMaterial"in e&&e.isMeshPhysicalMaterial)}function hr(e){return!!(e&&"isMesh"in e&&e.isMesh)}var Yo=["texture","metalnessMap","roughnessMap","emissiveMap","alphaMap","normalMap","bumpMap","aoMap","displacementMap","clearcoatMap","clearcoatRoughnessMap","clearcoatNormalMap","anisotropyMap","transmissionMap","thicknessMap","sheenColorMap","sheenRoughnessMap","specularIntensityMap","specularColorMap"],Vx=new Set(["texture","emissiveMap","sheenColorMap","specularColorMap"]);function ia(e){return Vx.has(e)?Nn.SRGBColorSpace:Nn.NoColorSpace}function Kt(e,t){return e?.[t]?.path}function Nm(e){return e==="back"?Nn.BackSide:e==="double"?Nn.DoubleSide:Nn.FrontSide}function Om(e){return e==="additive"?Nn.AdditiveBlending:Nn.NormalBlending}function ci(e,t=1,n=t){if(e&&typeof e=="object"){let i=e;if(typeof i.x=="number"&&Number.isFinite(i.x)&&typeof i.y=="number"&&Number.isFinite(i.y))return new Nn.Vector2(i.x,i.y)}return new Nn.Vector2(t,n)}function Hd(e){return Number.isFinite(e)&&e>0?e:1}function xl(e,t){return e?.animations.clips.find(n=>n.sourceName===t)}function Im(e){return e?.loopMode??"repeat"}var mr=require("three");function Wa(e){if(Bm(e))return e;if(!e||typeof e!="object")return null;let t=e,n=new mr.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 mr.Texture?(n.emissiveMap=t.map,n.emissive.set(16777215)):t.color instanceof mr.Color&&n.emissive.copy(t.color)):(t.color instanceof mr.Color&&n.color.copy(t.color),t.map instanceof mr.Texture&&(n.map=t.map),t.emissive instanceof mr.Color&&n.emissive.copy(t.emissive),t.emissiveMap instanceof mr.Texture&&(n.emissiveMap=t.emissiveMap));let r=["aoMap","aoMapIntensity","lightMap","lightMapIntensity","alphaMap","opacity","transparent","alphaTest","side","vertexColors","wireframe","depthTest","depthWrite","visible","toneMapped","fog"];for(let a of r)t[a]!==void 0&&(n[a]=t[a]);return n.needsUpdate=!0,n}function yl(e){if(Dm(e))return e.clone();let t=new mr.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(ci(e.normalScale)),t.displacementMap=e.displacementMap,t.displacementScale=e.displacementScale,t.displacementBias=e.displacementBias,t.roughness=e.roughness,t.roughnessMap=e.roughnessMap,t.metalness=e.metalness,t.metalnessMap=e.metalnessMap,t.alphaMap=e.alphaMap,t.envMap=e.envMap,t.envMapRotation.copy(e.envMapRotation),t.envMapIntensity=e.envMapIntensity,t.wireframe=e.wireframe,t.wireframeLinewidth=e.wireframeLinewidth,t.flatShading=e.flatShading,t.fog=e.fog,t.opacity=e.opacity,t.transparent=e.transparent,t.alphaHash=e.alphaHash,t.blendSrc=e.blendSrc,t.blendDst=e.blendDst,t.blendEquation=e.blendEquation,t.blendSrcAlpha=e.blendSrcAlpha,t.blendDstAlpha=e.blendDstAlpha,t.blendEquationAlpha=e.blendEquationAlpha,t.blending=e.blending,t.premultipliedAlpha=e.premultipliedAlpha,t.dithering=e.dithering,t.alphaTest=e.alphaTest,t.depthTest=e.depthTest,t.depthWrite=e.depthWrite,t.colorWrite=e.colorWrite,t.stencilWrite=e.stencilWrite,t.stencilWriteMask=e.stencilWriteMask,t.stencilFunc=e.stencilFunc,t.stencilRef=e.stencilRef,t.stencilFuncMask=e.stencilFuncMask,t.stencilFail=e.stencilFail,t.stencilZFail=e.stencilZFail,t.stencilZPass=e.stencilZPass,t.side=e.side,t.shadowSide=e.shadowSide,t.toneMapped=e.toneMapped,t.vertexColors=e.vertexColors,t.visible=e.visible,t.clippingPlanes=e.clippingPlanes,t.clipIntersection=e.clipIntersection,t.clipShadows=e.clipShadows,t.forceSinglePass=e.forceSinglePass,t.polygonOffset=e.polygonOffset,t.polygonOffsetFactor=e.polygonOffsetFactor,t.polygonOffsetUnits=e.polygonOffsetUnits,t}function wl(e){e.userData.baseColor=e.color.clone(),e.userData.baseMap=e.map??null,e.userData.baseMetalness=e.metalness,e.userData.baseMetalnessMap=e.metalnessMap??null,e.userData.baseRoughness=e.roughness,e.userData.baseRoughnessMap=e.roughnessMap??null,e.userData.baseEmissive=e.emissive.clone(),e.userData.baseEmissiveIntensity=e.emissiveIntensity,e.userData.baseEmissiveMap=e.emissiveMap??null,e.userData.baseOpacity=e.opacity,e.userData.baseTransparent=e.transparent,e.userData.baseAlphaMap=e.alphaMap??null,e.userData.baseAlphaTest=e.alphaTest,e.userData.baseAlphaHash=e.alphaHash,e.userData.baseDithering=e.dithering,e.userData.baseBlending=e.blending,e.userData.baseDepthWrite=e.depthWrite,e.userData.baseSide=e.side,e.userData.baseNormalMap=e.normalMap??null,e.userData.baseNormalScale=ci(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=ci(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 Fn=require("three");function _l(e,t,n){e.map=e.userData.baseMap??null,e.color.copy(e.userData.baseColor),e.metalness=e.userData.baseMetalness??e.metalness,e.metalnessMap=e.userData.baseMetalnessMap??null,e.roughness=e.userData.baseRoughness??e.roughness,e.roughnessMap=e.userData.baseRoughnessMap??null,e.emissive.copy(e.userData.baseEmissive??new Fn.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??Fn.NormalBlending,e.depthWrite=e.userData.baseDepthWrite??!0,e.side=e.userData.baseSide??Fn.FrontSide,e.normalMap=e.userData.baseNormalMap??null,e.normalScale.copy(ci(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(ci(e.userData.baseClearcoatNormalScale)),e.sheen=e.userData.baseSheen??e.sheen,e.sheenColor.copy(e.userData.baseSheenColor??new Fn.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 Fn.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 Fn.Color("#ffffff")),e.specularColorMap=e.userData.baseSpecularColorMap??null,e.flatShading=e.userData.baseFlatShading??e.flatShading,e.envMapIntensity=e.userData.baseEnvMapIntensity??e.envMapIntensity;let i=Kt(t,"texture"),r=Kt(t,"metalnessMap"),a=Kt(t,"roughnessMap"),o=Kt(t,"emissiveMap"),s=Kt(t,"alphaMap"),c=Kt(t,"normalMap"),l=Kt(t,"bumpMap"),u=Kt(t,"aoMap"),d=Kt(t,"displacementMap"),p=Kt(t,"clearcoatMap"),f=Kt(t,"clearcoatRoughnessMap"),g=Kt(t,"clearcoatNormalMap"),y=Kt(t,"anisotropyMap"),T=Kt(t,"transmissionMap"),x=Kt(t,"thicknessMap"),h=Kt(t,"sheenColorMap"),m=Kt(t,"sheenRoughnessMap"),S=Kt(t,"specularIntensityMap"),M=Kt(t,"specularColorMap");if(i?(e.map=cn(i,Fn.SRGBColorSpace),e.color.set(n??"#ffffff")):n&&(e.map=null,e.color.set(n)),r&&(e.metalnessMap=cn(r)),t?.metalness!==void 0&&(e.metalness=t.metalness),a&&(e.roughnessMap=cn(a)),t?.roughness!==void 0&&(e.roughness=t.roughness),t?.emissive?e.emissive.set(t.emissive):o&&e.emissive.set("#ffffff"),t?.emissiveIntensity!==void 0&&(e.emissiveIntensity=t.emissiveIntensity),o&&(e.emissiveMap=cn(o,Fn.SRGBColorSpace)),t?.opacity!==void 0&&(e.opacity=t.opacity),s&&(e.alphaMap=cn(s)),t?.alphaTest!==void 0&&(e.alphaTest=t.alphaTest),t?.alphaHash!==void 0&&(e.alphaHash=t.alphaHash),t?.dithering!==void 0&&(e.dithering=t.dithering),t?.blendingMode&&(e.blending=Om(t.blendingMode),e.depthWrite=t.blendingMode!=="additive"),t?.side&&(e.side=Nm(t.side)),c&&(e.normalMap=cn(c)),c||t?.normalScale!==void 0){let C=t?.normalScale??Math.abs(ci(e.userData.baseNormalScale).x);e.normalScale.set(C,t?.flipNormalY?-C:C)}if(l&&(e.bumpMap=cn(l)),t?.bumpScale!==void 0&&(e.bumpScale=t.bumpScale),u&&(e.aoMap=cn(u)),t?.aoMapIntensity!==void 0&&(e.aoMapIntensity=t.aoMapIntensity),d&&(e.displacementMap=cn(d)),t?.displacementScale!==void 0&&(e.displacementScale=t.displacementScale),t?.displacementBias!==void 0&&(e.displacementBias=t.displacementBias),p&&(e.clearcoatMap=cn(p)),t?.clearcoat!==void 0&&(e.clearcoat=t.clearcoat),f&&(e.clearcoatRoughnessMap=cn(f)),t?.clearcoatRoughness!==void 0&&(e.clearcoatRoughness=t.clearcoatRoughness),g&&(e.clearcoatNormalMap=cn(g)),g||t?.clearcoatNormalScale!==void 0){let C=t?.clearcoatNormalScale??Math.abs(ci(e.userData.baseClearcoatNormalScale).x);e.clearcoatNormalScale.set(C,t?.flipClearcoatNormalY?-C:C)}t?.sheen!==void 0&&(e.sheen=t.sheen),t?.sheenColor&&e.sheenColor.set(t.sheenColor),h&&(e.sheenColorMap=cn(h,Fn.SRGBColorSpace)),t?.sheenRoughness!==void 0&&(e.sheenRoughness=t.sheenRoughness),m&&(e.sheenRoughnessMap=cn(m)),t?.anisotropy!==void 0&&(e.anisotropy=t.anisotropy),t?.anisotropyRotation!==void 0&&(e.anisotropyRotation=t.anisotropyRotation),y&&(e.anisotropyMap=cn(y)),t?.transmission!==void 0&&(e.transmission=t.transmission),T&&(e.transmissionMap=cn(T)),t?.thickness!==void 0&&(e.thickness=t.thickness),x&&(e.thicknessMap=cn(x)),t?.attenuationColor&&e.attenuationColor.set(t.attenuationColor),t?.attenuationDistance!==void 0&&(e.attenuationDistance=t.attenuationDistance),t?.reflectivity!==void 0&&(e.reflectivity=t.reflectivity),t?.specularIntensity!==void 0&&(e.specularIntensity=t.specularIntensity),S&&(e.specularIntensityMap=cn(S)),t?.specularColor&&e.specularColor.set(t.specularColor),M&&(e.specularColorMap=cn(M,Fn.SRGBColorSpace)),e.transparent=e.opacity<1||e.transmission>0||e.blending!==Fn.NormalBlending||!!((s||e.alphaMap)&&e.alphaTest<=0),e.transparent||(e.depthWrite=!0)}function $o(e){return e.material}function Xr(e,t){return Array.isArray(e)?e.map(t):t(e,0)}function fr(e,t){Array.isArray(e)?e.forEach(t):t(e,0)}function Sl(e,t){return Array.isArray(e)?e[t]:e}function Ko(e){e.updateMatrixWorld(!0),e.traverse(t=>{let n=t;n.isSkinnedMesh&&(n.skeleton?.update(),n.computeBoundingBox?.(),n.computeBoundingSphere?.())})}var zm=require("three");function Fx(e){return e.isSkinnedMesh===!0}function Xa(e){let t=[];return e.traverse(n=>{Fx(n)&&t.push(n)}),t}var Zo="reactImmersiveSkinFreeze";function Um(e){return!!e.userData[Zo]}function Ml(e,t){let n=e.userData,i=new zm.Matrix4().copy(t).invert(),r=n[Zo];if(r){r.frozenInverse.copy(i),e.bindMatrixInverse.copy(i);return}let a={frozenInverse:i,previousOnBeforeRender:e.onBeforeRender};e.bindMatrixInverse.copy(i),e.onBeforeRender=function(o,s,c,l,u,d){a.previousOnBeforeRender.call(this,o,s,c,l,u,d),e.bindMatrixInverse.copy(a.frozenInverse)},n[Zo]=a}function qa(e){let t=e.userData,n=t[Zo];n&&(e.onBeforeRender=n.previousOnBeforeRender,delete t[Zo],e.updateMatrixWorld(!0))}var aa=require("react"),Vm=require("@react-three/fiber");function Cl(){let e=(0,Vm.useThree)(r=>r.gl.domElement),t=(0,aa.useRef)(void 0),n=(0,aa.useCallback)(r=>{t.current===void 0&&(t.current=e.style.cursor),e.style.cursor=r},[e]),i=(0,aa.useCallback)(()=>{let r=t.current;r!==void 0&&(e.style.cursor=r,t.current=void 0)},[e]);return(0,aa.useEffect)(()=>()=>{i()},[i]),{setCanvasCursor:n,restoreCanvasCursor:i}}var Gd=require("react/jsx-runtime");function Tl(e,t,n){let i=n.get(e);i&&(t?.position?e.position.fromArray(t.position):e.position.copy(i.position),t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],i.rotation.order):e.rotation.copy(i.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(i.scale),e.updateMatrix())}function 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 Ya(e){let t=e,n=Number(t.clearcoat)>0,i=Number(t.sheen)>0,r=Number(t.anisotropy)>0,a=Number(t.transmission)>0,o=t.transparent===!1&&t.blending===je.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),r,fn(r?t.anisotropyMap:null),n,fn(n?t.clearcoatMap:null),fn(n?t.clearcoatNormalMap:null,!0),fn(n?t.clearcoatRoughnessMap:null),i,fn(i?t.sheenColorMap:null),fn(i?t.sheenRoughnessMap:null),fn(t.specularColorMap),fn(t.specularIntensityMap),a,fn(a?t.transmissionMap:null),fn(a?t.thicknessMap:null),fn(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,t.side,o].join("|")}function Wd({url:e,objectBindings:t,selectedItem:n,itemMaterials:i,onItemClick:r,onItemHover:a,onModelLoaded:o,onAnimationsReady:s,nodeRefsOut:c,onNodeRefsChange:l,materialRefsOut:u,panelHoveredItem:d,sceneConfig:p,zoomOnSelected:f=!0,highlightOnHover:g=!0,decoderConfig:y,modelFormat:T,explodeFactor:x=0,suspendBindingTransforms:h=!1}){let m=vl(e,y,T),S=(0,$a.useThree)(R=>R.invalidate),[M,C]=(0,ge.useState)(null),L=(0,ge.useRef)(null),{setCanvasCursor:b,restoreCanvasCursor:_}=Cl();(0,ge.useEffect)(()=>{g||(C(null),a?.(null),_())},[g,a,_]);let v=(0,ge.useMemo)(()=>Fm.SkeletonUtils.clone(m.scene),[m.scene]),P=(0,ge.useMemo)(()=>Fa(v),[v]),z=P.nodesById;(0,ge.useEffect)(()=>{P.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(P.duplicateNames))},[P]);let E=(0,ge.useMemo)(()=>{let R=new WeakMap;return v.traverse(I=>{R.set(I,{position:I.position.clone(),rotation:I.rotation.clone(),scale:I.scale.clone()})}),R},[v]);(0,ge.useEffect)(()=>{let R=!1,I=null,$=null,re=window,te=Object.entries(z).filter(([,Et])=>hr(Et)),he=new je.Box3,pe=[],bt=0;v.traverse(Et=>{hr(Et)&&(Et.castShadow=!1,Et.receiveShadow=!0)});let St=()=>{if(R)return;let Et=new Set,Se=he.getSize(new je.Vector3),Dt=new je.Vector3;for(let{name:pn,box:Tn}of pe)Tn.getSize(Dt),Dt.x>Se.x*.7&&Dt.z>Se.z*.7&&Dt.y>Se.y*.4&&Et.add(pn);v.traverse(pn=>{if(!hr(pn))return;let Tn=Ho(pn);pn.castShadow=!Tn||!Et.has(Tn),pn.receiveShadow=!0}),S()},Pe=()=>{R||(re.requestIdleCallback?I=re.requestIdleCallback(Ze,{timeout:100}):$=window.setTimeout(()=>Ze(),0))},Ze=Et=>{if(I=null,$=null,R)return;let Se=performance.now(),Dt=0;for(;bt<te.length&&!(Dt>0&&!(Et?Et.didTimeout?Dt<16:Et.timeRemaining()>1:performance.now()-Se<8));){let[pn,Tn]=te[bt];bt+=1,Dt+=1;let qt=new je.Box3().setFromObject(Tn);qt.isEmpty()||(pe.push({name:pn,box:qt}),he.union(qt))}bt<te.length?Pe():St()};return Pe(),()=>{R=!0,I!==null&&re.cancelIdleCallback?.(I),$!==null&&window.clearTimeout($)}},[S,z,v]),(0,ge.useEffect)(()=>{Ko(v)},[v]),(0,ge.useEffect)(()=>{let R=new AbortController;return Oa(v,R.signal),()=>{R.abort(),Qi(v)}},[v]);let V=(0,ge.useMemo)(()=>{let R={};for(let[I,$]of Object.entries(t))R[$.modelObjectId??I]=I;return R},[t]),A=(0,ge.useMemo)(()=>Object.entries(t).map(([R,I])=>`${R}${I.modelObjectId??R}`).sort().join(""),[t]),X=(0,ge.useMemo)(()=>Object.entries(t).map(([R,I])=>JSON.stringify([R,I.modelObjectId??R,I.transform??null])).sort().join(""),[t]),j=(0,ge.useRef)(new Map);(0,ge.useEffect)(()=>{let R=new Map,I=new Map;for(let[te,he]of Object.entries(t)){if(!he.transform)continue;let pe=z[he.modelObjectId??te];pe&&(R.set(pe,he.transform),I.set(pe,Xa(pe)))}let $=new Set([...j.current.keys(),...R.keys()]);for(let te of $){Tl(te,void 0,E);for(let he of Xa(te))qa(he)}v.updateMatrixWorld(!0);let re=new Map;for(let te of I.values())for(let he of te)re.has(he)||re.set(he,he.matrixWorld.clone());for(let[te,he]of R)Tl(te,he,E);j.current=R,v.updateMatrixWorld(!0);for(let[te,he]of re)Ml(te,he);S()},[v,z,E,X,S]),(0,ge.useEffect)(()=>()=>{for(let R of Xa(v))qa(R)},[v]);let k=(0,ge.useMemo)(()=>{let R={};for(let[I,$]of Object.entries(t)){let re=$.modelObjectId??I,te=z[re];if(!hr(te))continue;let he=$o(te);he&&(R[I]=Xr(he,pe=>{let bt=Wa(pe),St=yl(bt??new je.MeshStandardMaterial);return wl(St),St}))}return R},[z,A]);(0,ge.useEffect)(()=>{u&&(u.current=k)},[k,u]),(0,ge.useEffect)(()=>()=>{for(let R of Object.values(k))fr(R,I=>I.dispose())},[k]);let B=p?.model.shading??"lit",Y=p?.model.renderer??"pbr",q=p?.wireframe.enabled??!1,ue=p?.wireframe.color??"#93c5fd",Ee=p?.wireframe.opacity??1,be=(0,ge.useMemo)(()=>{let R={};if(B!=="unlit")return R;for(let[I,$]of Object.entries(k))R[I]=Xr($,re=>{let te=new je.MeshBasicMaterial;return te.color.copy(re.color),te.map=re.map,te.alphaMap=re.alphaMap,te.alphaTest=re.alphaTest,te.transparent=re.transparent,te.opacity=re.opacity,te.side=re.side,te});return R},[k,B]),Ce=(0,ge.useMemo)(()=>{let R={};if(B!=="normals")return R;for(let[I,$]of Object.entries(k))R[I]=Xr($,()=>new je.MeshNormalMaterial);return R},[k,B]),De=(0,ge.useMemo)(()=>{let R={};if(B!=="lit"||Y!=="matcap")return R;let I=ol();for(let[$,re]of Object.entries(k))R[$]=Xr(re,te=>{let he=new je.MeshMatcapMaterial;return he.matcap=I,he.color.copy(te.color),he.alphaMap=te.alphaMap,he.alphaTest=te.alphaTest,he.side=te.side,he});return R},[k,B,Y]);(0,ge.useEffect)(()=>()=>{for(let R of Object.values(be))fr(R,I=>I.dispose());for(let R of Object.values(Ce))fr(R,I=>I.dispose());for(let R of Object.values(De))fr(R,I=>I.dispose())},[be,Ce,De]);let ze=R=>B==="normals"?Ce[R]:B==="unlit"?be[R]:Y==="matcap"?De[R]:k[R],se=(0,ge.useRef)(o);se.current=o,(0,ge.useEffect)(()=>{se.current?.(v)},[v]);let Lt=(0,ge.useMemo)(()=>{let R={};for(let[I,$]of Object.entries(t)){let re=$.modelObjectId??I,te=z[re];te&&(R[I]=te)}return R},[z,A]);(0,ge.useEffect)(()=>(c.current=Lt,l?.(),()=>{c.current===Lt&&(c.current={})}),[Lt,c,l]);let Xe=(0,ge.useRef)({});(0,ge.useEffect)(()=>()=>{for(let R of Object.values(Xe.current))for(let[I,$]of Object.entries(R))$&&ta($,ia(I));Xe.current={}},[]);let Ge=(0,ge.useMemo)(()=>{let R=new Map;for(let[I,$]of Object.entries(t)){let re=d===$||d?.id===$.id||d?.modelObjectId===$.modelObjectId,te=g&&(M===I||re),he=te||n===I;(te||he)&&R.set(I,{emissive:te,matcap:he})}return R},[t,g,M,n,d]),$e=(0,ge.useRef)(Ge);$e.current=Ge,(0,ge.useEffect)(()=>{let R=new Set;for(let[I,$]of Object.entries(t)){R.add(I);let re=$.modelObjectId??I,te=z[re];if(!hr(te))continue;te.visible=$.visible!==!1;let he=k[I];if(!he)continue;if(Y!=="uv-checker"){let Se=ze(I);Se&&(te.material=Se)}if($.visible===!1)continue;let pe=be[I],bt=De[I],St=i[I]??i[$.modelObjectId??I],Pe=$.style?.material,Ze=Xe.current[I]??{};for(let Se of Yo){let Dt=Kt(Pe,Se),pn=Ze[Se];if(pn===Dt)continue;let Tn=ia(Se);pn&&ta(pn,Tn),Dt?(al(Dt,Tn,S),Ze[Se]=Dt):delete Ze[Se]}Object.keys(Ze).length>0?Xe.current[I]=Ze:delete Xe.current[I];let Et=St?.hex??Pe?.baseColor;fr(he,(Se,Dt)=>{let pn=Ya(Se);_l(Se,Pe,Et);let Tn=Se.userData.reactImmersiveConfiguredEmissive;Tn?.isColor?Tn.copy(Se.emissive):Se.userData.reactImmersiveConfiguredEmissive=Se.emissive.clone();let qt=$e.current.get(I);qt?.emissive&&Se.emissive.add(Fo),pn!==Ya(Se)&&(Se.needsUpdate=!0);let Yt=Sl(pe,Dt);if(Yt){let Fr=Ya(Yt);Yt.color.copy(Se.color),Yt.map=Se.map,Yt.alphaMap=Se.alphaMap,Yt.alphaTest=Se.alphaTest,Yt.transparent=Se.transparent,Yt.opacity=Se.opacity,Yt.side=Se.side,Fr!==Ya(Yt)&&(Yt.needsUpdate=!0)}let ut=Sl(bt,Dt);if(ut){let Fr=Ya(ut);qt?.matcap?ut.color.set(si.color):ut.color.copy(Se.color),ut.map=Se.map,ut.alphaMap=Se.alphaMap,ut.alphaTest=Se.alphaTest,ut.transparent=Se.transparent,ut.opacity=Se.opacity,ut.side=Se.side,Fr!==Ya(ut)&&(ut.needsUpdate=!0)}})}for(let I of Object.keys(Xe.current))if(!R.has(I)){for(let[$,re]of Object.entries(Xe.current[I]))re&&ta(re,ia($));delete Xe.current[I]}S()},[t,z,k,be,Ce,De,i,B,Y,S]);let rt=(0,ge.useRef)(new Map);(0,ge.useEffect)(()=>{let R=rt.current,I=new Set([...R.keys(),...Ge.keys()]),$=!1;for(let re of I){let te=R.get(re),he=Ge.get(re),pe=!!te?.emissive!=!!he?.emissive,bt=!!te?.matcap!=!!he?.matcap;if(!pe&&!bt)continue;$=!0;let St=k[re],Pe=De[re];St&&fr(St,(Ze,Et)=>{let Se=Ze.userData.reactImmersiveConfiguredEmissive;pe&&Se?.isColor&&(Ze.emissive.copy(Se),he?.emissive&&Ze.emissive.add(Fo));let Dt=Sl(Pe,Et);bt&&Dt&&(he?.matcap?Dt.color.set(si.color):Dt.color.copy(Ze.color))})}rt.current=Ge,$&&S()},[Ge,k,De,S]),(0,ge.useEffect)(()=>{if(Y!=="uv-checker")return;let R=Hh(),I=[];return v.traverse($=>{if(!hr($))return;let re=$.material,te=Array.isArray(re)?re:[re],he=!!$.geometry.getAttribute("uv"),pe=te.map((St,Pe)=>{let Ze=new je.MeshBasicMaterial({color:he?"#ffffff":"#ff00ff",map:he?R:null,side:St.side});return Ze.name=`${$.name||"mesh"}-uv-checker-${Pe}`,Ze.toneMapped=!1,Ze}),bt=Array.isArray(re)?pe:pe[0];$.material=bt,I.push({node:$,original:re,diagnostic:bt})}),S(),()=>{for(let{node:$,original:re,diagnostic:te}of I){$.material=re;let he=Array.isArray(te)?te:[te];for(let pe of he)pe.dispose()}S()}},[v,Y,S]),(0,ge.useEffect)(()=>{if(!q)return;let R=[];for(let[I,$]of Object.entries(t)){let re=$.modelObjectId??I,te=z[re];if(!hr(te))continue;let he=new je.MeshBasicMaterial({color:ue,wireframe:!0,transparent:!0,opacity:Ee,depthTest:!1,depthWrite:!1,side:je.DoubleSide,toneMapped:!1}),pe=te.clone(!1);pe.name="",pe.position.set(0,0,0),pe.quaternion.identity(),pe.scale.set(1,1,1),pe.matrix.identity(),pe.matrixAutoUpdate=!0,pe.material=he,pe.castShadow=!1,pe.receiveShadow=!1,pe.frustumCulled=!1,pe.renderOrder=1,pe.userData={isWireframeOverlay:!0},pe.raycast=()=>{},te.morphTargetInfluences&&(pe.morphTargetInfluences=te.morphTargetInfluences),te.add(pe),R.push({node:te,overlay:pe})}return S(),()=>{for(let{node:I,overlay:$}of R)I.remove($),$.material.dispose()}},[q,ue,Ee,z,t,S]);let it=(0,ge.useMemo)(()=>km(m.animations),[m.animations]),en=(0,ge.useRef)(s);en.current=s;let qe=(0,ge.useRef)(p);qe.current=p;let on=(0,ge.useRef)(null),Gt=(0,ge.useRef)({}),Ke=(0,ge.useRef)(null),le=(0,ge.useRef)(null),J=(0,ge.useRef)(1),ee=(0,ge.useRef)(new Set),Ve=(0,ge.useRef)(0),tt=()=>({currentClip:le.current,isPlaying:Ke.current?.paused===!1,speed:J.current,time:Ke.current?.time??0,duration:Ke.current?.getClip().duration??0}),Fe=()=>{let R=tt();ee.current.forEach(I=>I(R))},xe=(R,I)=>{let $=Im(I);R.setLoop($==="once"?je.LoopOnce:je.LoopRepeat,$==="once"?1:1/0),R.clampWhenFinished=$==="once";let re=Hd(I?.speed??J.current);J.current=re,R.setEffectiveTimeScale(re)},ot=()=>{Ke.current?.stop(),Ke.current=null,le.current=null,Fe(),S()},gt=()=>{Ke.current&&(Ke.current.paused=!0,Fe(),S())},At=R=>{let I=Hd(R);J.current=I,Ke.current?.setEffectiveTimeScale(I),Fe()},Kn=R=>{let I=Ke.current;if(!I)return;let $=I.getClip().duration;I.time=Math.min(Math.max(R,0),$),on.current?.update(0),Fe(),S()},Ln=R=>{let I=Gt.current[R];if(!I)return;let $=xl(qe.current,R);if(!$?.hidden){if(Ke.current===I&&I.paused){xe(I,$),I.paused=!1,le.current=R,Fe(),S();return}Ke.current&&Ke.current!==I&&Ke.current.stop(),xe(I,$),I.paused=!1,I.enabled=!0,I.reset().play(),Ke.current=I,le.current=R,Fe(),S()}};(0,ge.useEffect)(()=>{let R=new je.AnimationMixer(v);on.current=R;let I={};for(let{clip:pe,sourceName:bt}of it)I[bt]=R.clipAction(pe);Gt.current=I;let $=pe=>{pe.action&&pe.action===Ke.current&&ot()};R.addEventListener("finished",$);let re=()=>{};en.current?.({clips:it.map(({sourceName:pe})=>pe),clipDetails:it.map(({sourceName:pe,duration:bt})=>({sourceName:pe,duration:bt})),play:it.length?Ln:re,pause:it.length?gt:re,stop:it.length?ot:re,setSpeed:it.length?At:re,seek:it.length?Kn:re,getState:tt,subscribe:pe=>(ee.current.add(pe),pe(tt()),()=>{ee.current.delete(pe)})}),J.current=1,Fe();let te=qe.current?.animations.autoplayClip,he=te?xl(qe.current,te):void 0;return te&&!he?.hidden&&Ln(te),()=>{R.removeEventListener("finished",$),R.stopAllAction(),R.uncacheRoot(v),on.current=null,Gt.current={},Ke.current=null,le.current=null,J.current=1,Fe()}},[v,it]),(0,ge.useEffect)(()=>{let R=le.current,I=Ke.current;if(!R||!I||!p?.animations)return;let $=xl(p,R);if($?.hidden){ot();return}$&&(xe(I,$),Fe())},[p?.animations]),(0,$a.useFrame)((R,I)=>{if(on.current&&Ke.current?.paused===!1){if(on.current.update(I),!h)for(let[$,re]of j.current)Tl($,re,E);S(),Ve.current+=I,Ve.current>=.066&&(Ve.current=0,Fe(),Ko(v))}});let Ne=(0,ge.useMemo)(()=>(p?.model.rotation??[0,0,0]).map(R=>R*Math.PI/180),[p?.model.rotation]);(0,$a.useFrame)((R,I)=>{if(!L.current)return;let $=L.current.rotation;$.x=je.MathUtils.lerp($.x,Ne[0],1-Math.exp(-5*I)),$.y=je.MathUtils.lerp($.y,Ne[1],1-Math.exp(-5*I)),$.z=je.MathUtils.lerp($.z,Ne[2],1-Math.exp(-5*I)),Math.abs($.x-Ne[0])<1e-4&&Math.abs($.y-Ne[1])<1e-4&&Math.abs($.z-Ne[2])<1e-4||S()});let dt=(0,ge.useRef)([]),_t=(0,ge.useRef)(0),We=(0,ge.useRef)(0),Wt=(0,ge.useMemo)(()=>new je.Vector3,[]);(0,ge.useEffect)(()=>{let R=new Map;for(let[St,Pe]of Object.entries(t)){let Ze=z[Pe.modelObjectId??St];Ze&&R.set(Ze,Pe)}for(let St of dt.current)Tl(St.node,R.get(St.node)?.transform,E);We.current=0,v.updateWorldMatrix(!0,!0);let I=new je.Box3().setFromObject(v),$=I.getCenter(new je.Vector3),re=I.getSize(new je.Vector3).length()*.5;_t.current=Number.isFinite(re)?re:0;let te=[...R.keys()],he=new Set(te),pe=[],bt=new je.Vector3;for(let St of te){if(!St.parent)continue;let Pe=St.parent,Ze=!1;for(;Pe;){if(he.has(Pe)){Ze=!0;break}Pe=Pe.parent}if(Ze)continue;let Et=new je.Box3().setFromObject(St);if(Et.isEmpty())continue;Et.getCenter(bt);let Se=bt.clone().sub($);Se.lengthSq()<1e-8||(Se.normalize(),pe.push({node:St,restLocalPos:St.position.clone(),restWorldPos:St.getWorldPosition(new je.Vector3),worldDir:Se,parentInverse:new je.Matrix4().copy(St.parent.matrixWorld).invert()}))}dt.current=pe,S()},[v,z,A,X,E,S]),(0,ge.useEffect)(()=>{S()},[x,S]),(0,$a.useFrame)((R,I)=>{let $=dt.current;if($.length===0)return;let re=Math.min(Math.max(x,0),1),te=We.current;if(Math.abs(te-re)<1e-4){if(te===re)return;We.current=re}else We.current=je.MathUtils.lerp(te,re,1-Math.exp(-6*I)),S();let he=We.current*_t.current;for(let pe of $)Wt.copy(pe.worldDir).multiplyScalar(he).add(pe.restWorldPos).applyMatrix4(pe.parentInverse),pe.node.position.copy(Wt)});let Bt=R=>{let I=R;for(;I;){let $=Ho(I),re=$?V[$]:void 0;if(re&&t[re])return[re,t[re]];I=I.parent}return null},Xt=R=>{let I=Bt(R.object);if(!I)return;let[,$]=I;$.selectable!==!1&&(R.stopPropagation(),r($))},tn=R=>{if(!g)return;let I=Bt(R.object);if(!I)return;let[$,re]=I;re.hoverable!==!1&&(R.stopPropagation(),b("pointer"),C($),a?.(re))},Mr=R=>{g&&(R.stopPropagation(),_(),C(null),a?.(null))},we=(0,ge.useMemo)(()=>!Js(v),[v]);return(0,Gd.jsx)("group",{ref:L,children:(0,Gd.jsx)("primitive",{object:v,...we?{onClick:Xt,...g?{onPointerOver:tn,onPointerOut:Mr}:{}}:{}})})}var nt=require("react"),Ql=require("@react-three/fiber");var Ft=require("three");var Or=require("three");function jm(e){let t={};for(let[n,i]of Object.entries(e))t[i.modelObjectId??n]=n;return t}function qd(e){let t=e,n=null;for(;t;){let i=t.userData?.ri_name;if(typeof i=="string"&&i)return i;!n&&t.name&&(n=t.name),t=t.parent}return n}function Hm(e,t){return e||(t?t.modelObjectId??t.id:null)}function Pl(e,t){let n=qd(e);if(!n)return null;let i=t.keyByModelObject[n]??n,r=t.objectBindings[i];return r?{key:i,binding:r}:null}var Ka=new Or.Vector3,Xd=new Or.Vector3;function Al(e,t){if(!hr(e)&&!e.userData.riLogicalObject)return;let n=Pl(e,t);if(!n)return;let i=Gm(e);if(i.rest??(i.rest={position:e.position.clone(),rotation:e.rotation.clone(),scale:e.scale.clone()}),t.suspendTransforms)return;let r=i.rest,a=n.binding.transform;a?.position?e.position.fromArray(a.position):e.position.copy(r.position),a?.rotation?e.rotation.set(a.rotation[0],a.rotation[1],a.rotation[2],r.rotation.order):e.rotation.copy(r.rotation),a?.scale?e.scale.fromArray(a.scale):e.scale.copy(r.scale);let o=t.explode;if(o&&o.factor>0&&o.radius>0){e.updateWorldMatrix(!0,!1),Xd.setFromMatrixPosition(e.matrixWorld);let s=e;for(;s.parent&&!s.userData.ri_name;)s=s.parent;let c=s.userData.ri_center;Array.isArray(c)&&c.length===3?Ka.fromArray(c).applyMatrix4(e.matrixWorld).sub(o.centre):Ka.copy(Xd).sub(o.centre),Ka.lengthSq()>1e-8&&(Ka.normalize().multiplyScalar(o.factor*o.radius).add(Xd),e.parent&&e.parent.worldToLocal(Ka),e.position.copy(Ka))}e.updateMatrix(),e.updateWorldMatrix(!0,!1)}function Za(e,t){e.traverse(n=>Al(n,t))}function Gm(e){var t;return(t=e.userData).riVisuals??(t.riVisuals={}),e.userData.riVisuals}function jx(e,t,n,i){return JSON.stringify([e?.style?.material??null,t??null,n.shadingMode,n.rendererMode,i])}function Hx(e){if(e.textures){for(let t of Yo){let n=e.textures[t];n&&ta(n,ia(t))}e.textures=void 0}}function Gx(e,t,n){let i=e.textures??{};for(let r of Yo){let a=Kt(t,r),o=i[r];if(o===a)continue;let s=ia(r);o&&ta(o,s),a?(al(a,s,n),i[r]=a):delete i[r]}e.textures=Object.keys(i).length>0?i:void 0}function Wx(e,t){if(t.shadingMode==="normals")return Xr(e,()=>new Or.MeshNormalMaterial);if(t.shadingMode==="unlit")return Xr(e,n=>{let i=new Or.MeshBasicMaterial;return i.color.copy(n.color),i.map=n.map,i.alphaMap=n.alphaMap,i.alphaTest=n.alphaTest,i.transparent=n.transparent,i.opacity=n.opacity,i.side=n.side,i});if(t.rendererMode==="matcap"){let n=ol();return Xr(e,i=>{let r=new Or.MeshMatcapMaterial;return r.matcap=n,r.color.copy(i.color),r.alphaMap=i.alphaMap,r.alphaTest=i.alphaTest,r.side=i.side,r})}return e}function Xx(e,t){if(!hr(e))return;let i=Gm(e);i.original??(i.original=$o(e));let r=Pl(e,t);if(!r){i.original&&(e.material=i.original),e.visible=!0;return}let{key:a,binding:o}=r;e.visible=o.visible!==!1,Al(e,t);let s=t.itemMaterials?.[a]?.hex??t.itemMaterials?.[o.modelObjectId??a]?.hex,c=a===t.selectedKey||t.highlightOnHover!==!1&&a===t.hoveredKey,l=jx(o,s,t,c);if(i.signature===l&&i.display){e.material=i.display;return}let u=o.style?.material;if(Gx(i,u,t.invalidate),!i.physical){let d=i.original??$o(e);if(!d)return;i.physical=Xr(d,p=>{let f=Wa(p),g=yl(f??new Or.MeshStandardMaterial);return wl(g),g})}fr(i.physical,d=>{_l(d,u,s??u?.baseColor),c&&(d.emissive.add(Fo),d.color.lerp(Oh,Ih)),d.needsUpdate=!0}),i.display&&i.display!==i.physical&&fr(i.display,d=>d.dispose()),i.display=Wx(i.physical,t),i.signature=l,e.material=i.display}function Wm(e,t){e.traverse(n=>Xx(n,t))}function Yd(e){e.traverse(t=>{if(!hr(t))return;let n=t.userData.riVisuals;n&&(n.rest&&(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&&fr(n.display,i=>i.dispose()),n.physical&&fr(n.physical,i=>i.dispose()),Hx(n),delete t.userData.riVisuals)})}var qm=new Ft.Matrix4().makeRotationX(Math.PI/2),Xm=qm.clone().invert();function qx(e){let t=new Ft.Vector3(e[0],e[1],e[2]),n=new Ft.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 Ft.Box3(t.clone().sub(n),t.clone().add(n))}function Yx(e){let t=e.getCenter(new Ft.Vector3),n=e.getSize(new Ft.Vector3).multiplyScalar(.5);return[t.x,t.y,t.z,n.x,0,0,0,n.y,0,0,0,n.z]}var El=class{constructor(){this.group=new Ft.Group;this.objects=new Map;this.geometry=new Ft.BoxGeometry(1,1,1);this.material=new Ft.MeshBasicMaterial;this.originalBounds=new WeakMap;this.signature="";this.lastContext=null;this.lastEffective=null;this.lastDragging=!1;this.version=0;this.tileVersions=new WeakMap;this.transforms=new Map}setCatalog(t){this.group.clear(),this.objects.clear();for(let n of t){let i=new Ft.Box3(new Ft.Vector3(...n.minimum),new Ft.Vector3(...n.maximum)).applyMatrix4(Xm),r=new Ft.Group;r.name=n.name,r.userData.ri_name=n.name,r.userData.riLogicalObject=!0,r.userData.ri_center=i.getCenter(new Ft.Vector3).toArray();let a=new Ft.Mesh(this.geometry,this.material);a.visible=!1,a.raycast=()=>{},a.position.copy(i.getCenter(new Ft.Vector3)),a.scale.copy(i.getSize(new Ft.Vector3)),r.add(a),this.group.add(r),this.objects.set(n.name,r)}this.signature="",this.lastContext=null}nodesByBinding(t){let n={};for(let[i,r]of this.objects){let a=t.keyByModelObject[i]??i;t.objectBindings[a]&&(n[a]=r)}return n}sync(t,n,i=!1){if(!i&&!this.lastDragging&&t===this.lastContext&&this.lastEffective)return this.lastEffective;this.lastContext=t,this.lastDragging=i;let r={...t,suspendTransforms:!1},a=n?t.objectBindings[n]:void 0,o=a?this.objects.get(a.modelObjectId??n):void 0;i&&o&&a&&(r={...r,objectBindings:{...t.objectBindings,[n]:{...a,transform:{position:o.position.toArray(),rotation:[o.rotation.x,o.rotation.y,o.rotation.z],scale:o.scale.toArray()}}}});for(let c of this.objects.values())i&&c===o||Al(c,r);this.group.updateWorldMatrix(!0,!0);let s=[...this.objects].map(([c,l])=>`${c}:${l.matrix.elements.join(",")}`).join(";");if(s!==this.signature){this.signature=s,this.version++,this.transforms.clear();for(let[c,l]of this.objects)l.matrix.equals(new Ft.Matrix4)||this.transforms.set(c,qm.clone().multiply(l.matrix).multiply(Xm))}return this.lastEffective=r,r}updateBounds(t){if(!t)return;let n=i=>{if(this.tileVersions.get(i)!==this.version){if(i.boundingVolume.box&&this.tileVersions.get(i)!==this.version){let r=this.originalBounds.get(i);r||(r={box:[...i.boundingVolume.box],error:i.geometricError},this.originalBounds.set(i,r));let a=qx(r.box),o=a.clone(),s=1;for(let l of i.extras?.featureIds??[]){let u=this.transforms.get(l);u&&(o.union(a.clone().applyMatrix4(u)),s=Math.max(s,u.getMaxScaleOnAxis()))}let c=Yx(o);i.boundingVolume.box=c,i.geometricError=r.error*s,i.engineData?.boundingVolume?.setObbData(c,i.engineData.transform),this.tileVersions.set(i,this.version)}i.children?.forEach(n)}};n(t)}dispose(){this.group.clear(),this.objects.clear(),this.geometry.dispose(),this.material.dispose()}};function $x(e){try{let t=typeof location<"u"?location.href:void 0;return new URL(e,t).origin}catch{return null}}function Ym(e){if(!e)return null;let t=e.length,n=e.indexOf("?"),i=e.indexOf("#");n!==-1&&(t=Math.min(t,n)),i!==-1&&(t=Math.min(t,i));let r=e.lastIndexOf(".",t),a=e.lastIndexOf("/",t),o=e.indexOf("://");return o!==-1&&o+2===a||r===-1||r<a?null:e.substring(r+1,t)||null}var Ll,kl=(Ll=class{static setXRSession(e){e!==this.session&&(this.flushPending(),this.session=e)}static requestAnimationFrame(e){let{session:t,pending:n}=this,i,r=()=>{n.delete(i),e()};return i=t?t.requestAnimationFrame(r):requestAnimationFrame(r),n.set(i,e),i}static cancelAnimationFrame(e){let{pending:t,session:n}=this;t.delete(e),n?n.cancelAnimationFrame(e):cancelAnimationFrame(e)}static flushPending(){this.pending.forEach((e,t)=>{e(),this.cancelAnimationFrame(t)})}},gd(Ll,"pending",new Map),gd(Ll,"session",null),Ll),$m=2**30,Jm=class{get unloadPriorityCallback(){return this._unloadPriorityCallback}set unloadPriorityCallback(e){e.length===1?(console.warn('LRUCache: "unloadPriorityCallback" function has been changed to take two arguments.'),this._unloadPriorityCallback=(t,n)=>{let i=e(t),r=e(n);return i<r?-1:+(i>r)}):this._unloadPriorityCallback=e}constructor(){this.minSize=6e3,this.maxSize=8e3,this.minBytesSize=.3*$m,this.maxBytesSize=.4*$m,this.unloadPercent=.05,this.autoMarkUnused=!0,this.cachedBytes=0,this.itemSet=new Map,this.itemList=[],this.usedSet=new Set,this.callbacks=new Map,this.unloadingHandle=-1,this.bytesMap=new Map,this.loadedSet=new Set,this._unloadPriorityCallback=null;let e=this.itemSet;this.defaultPriorityCallback=t=>e.get(t)}isFull(){return this.itemSet.size>=this.maxSize||this.cachedBytes>=this.maxBytesSize}getMemoryUsage(e){return this.bytesMap.get(e)||0}setMemoryUsage(e,t){let{bytesMap:n,itemSet:i}=this;i.has(e)&&(this.cachedBytes-=n.get(e)||0,n.set(e,t),this.cachedBytes+=t)}add(e,t){let n=this.itemSet;if(n.has(e)||this.isFull())return!1;let i=this.usedSet,r=this.itemList,a=this.callbacks;return r.push(e),i.add(e),n.set(e,Date.now()),a.set(e,t),!0}has(e){return this.itemSet.has(e)}remove(e){let t=this.usedSet,n=this.itemSet,i=this.itemList,r=this.bytesMap,a=this.callbacks,o=this.loadedSet;if(n.has(e)){this.cachedBytes-=r.get(e)||0,r.delete(e),a.get(e)(e);let s=i.indexOf(e);return i.splice(s,1),t.delete(e),n.delete(e),a.delete(e),o.delete(e),!0}return!1}setLoaded(e,t){let{itemSet:n,loadedSet:i}=this;n.has(e)&&(t===!0?i.add(e):i.delete(e))}markUsed(e){let t=this.itemSet,n=this.usedSet;t.has(e)&&!n.has(e)&&(t.set(e,Date.now()),n.add(e))}markUnused(e){this.usedSet.delete(e)}markAllUnused(){this.usedSet.clear()}isUsed(e){return this.usedSet.has(e)}unloadUnusedContent(){let{unloadPercent:e,minSize:t,maxSize:n,itemList:i,itemSet:r,usedSet:a,loadedSet:o,callbacks:s,bytesMap:c,minBytesSize:l,maxBytesSize:u}=this,d=i.length-a.size,p=i.length-o.size,f=Math.max(Math.min(i.length-t,d),0),g=this.cachedBytes-l,y=this.unloadPriorityCallback||this.defaultPriorityCallback,T=!1,x=f>0&&d>0||p&&i.length>n;if(d&&this.cachedBytes>l||p&&this.cachedBytes>u||x){i.sort((b,_)=>{let v=a.has(b);if(v===a.has(_)){let P=o.has(b);return P===o.has(_)?-y(b,_):P?1:-1}else return v?1:-1});let h=Math.max(t*e,f*e),m=Math.ceil(Math.min(h,d,f)),S=Math.max(e*g,e*l),M=Math.min(S,g),C=0,L=0;for(;this.cachedBytes-L>u||i.length-C>n;){let b=i[C],_=c.get(b)||0;if(a.has(b)&&o.has(b)||this.cachedBytes-L-_<u&&i.length-C<=n)break;L+=_,C++}for(;L<M||C<m;){let b=i[C],_=c.get(b)||0;if(a.has(b)||this.cachedBytes-L-_<l&&C>=m)break;L+=_,C++}i.splice(0,C).forEach(b=>{this.cachedBytes-=c.get(b)||0,s.get(b)(b),c.delete(b),r.delete(b),s.delete(b),o.delete(b),a.delete(b)}),T=C<f||L<g&&C<d,T&&(T=C>0)}T&&(this.unloadingHandle=kl.requestAnimationFrame(()=>this.scheduleUnload()))}scheduleUnload(){kl.cancelAnimationFrame(this.unloadingHandle),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>{this.scheduled=!1,this.unloadUnusedContent()}))}},Kx=class extends DOMException{constructor(){super("PriorityQueue: Item removed","AbortError")}},Ja=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=>{kl.requestAnimationFrame(e)},this._runjobs=()=>{this.scheduled=!1,this.tryRunJobs()}}sort(){let e=this.priorityCallback,t=this.items;e!==null&&t.sort(e)}has(e){return this.callbacks.has(e)}add(e,t){let n={callback:t,reject:null,resolve:null,promise:null};return n.promise=new Promise((i,r)=>{let a=this.items,o=this.callbacks;n.resolve=i,n.reject=r,a.unshift(e),o.set(e,n),this.autoUpdate&&this.scheduleJobRun()}),n.promise}remove(e){let t=this.items,n=this.callbacks,i=t.indexOf(e);if(i!==-1){let r=n.get(e);r.promise.catch(a=>{if(a.name!=="AbortError")throw a}),r.reject(new Kx),t.splice(i,1),n.delete(e)}}removeByFilter(e){let{items:t}=this;for(let n=0;n<t.length;n++){let i=t[n];e(i)&&(this.remove(i),n--)}}tryRunJobs(){this.sort();let e=this.items,t=this.callbacks,n=this.maxJobs,i=0,r=()=>{this.currJobs--,this.autoUpdate&&this.scheduleJobRun()};for(;n>this.currJobs&&e.length>0&&i<n;){this.currJobs++,i++;let a=e.pop(),{callback:o,resolve:s,reject:c}=t.get(a);t.delete(a);let l;try{l=o(a)}catch(u){c(u),r();continue}l instanceof Promise?l.then(s).catch(c).finally(r):(s(l),r())}}flush(e){let{items:t,callbacks:n}=this,i=t.indexOf(e);if(!n.has(e))return;let{callback:r,resolve:a,reject:o}=n.get(e);n.delete(e),t.splice(i,1);let s;try{s=r(e)}catch(c){o(c);return}return s instanceof Promise?s.then(a).catch(o):a(s),s}scheduleJobRun(){this.scheduled||(this.scheduled=(this._schedulingCallback(this._runjobs),!0))}},Zx=class{get running(){for(let e of this.originQueues.values())if(e.running)return!0;return!1}get maxJobsPerOrigin(){return this._maxJobsPerOrigin}set maxJobsPerOrigin(e){this._maxJobsPerOrigin=e,this.originQueues.forEach(t=>t.maxJobs=e)}get maxJobs(){return this.maxJobsPerOrigin}set maxJobs(e){console.warn('DownloadPriorityQueue: "maxJobs" is no longer valid and limits jobs per server origin. Use "maxJobsPerOrigin", instead.'),this.maxJobsPerOrigin=e}get priorityCallback(){return this._priorityCallback}set priorityCallback(e){this._priorityCallback=e,this.originQueues.forEach(t=>t.priorityCallback=e)}constructor(){this.originQueues=new Map,this._itemQueues=new WeakMap,this._maxJobsPerOrigin=6,this._priorityCallback=null}add(e,t,n,i=null){this.originQueues.forEach((c,l)=>{c.running||this.originQueues.delete(l)});let r=e===null?null:$x(e),a=this.originQueues.get(r);a||(a=new Ja,a.maxJobs=this._maxJobsPerOrigin,a.priorityCallback=this._priorityCallback,this.originQueues.set(r,a));let o=this._itemQueues.get(t);if(o&&o!==a&&o.has(t))throw Error("DownloadPriorityQueue: Item is already queued with a different url origin.");this._itemQueues.set(t,a);let s=a.add(t,n);return i!==null&&(i.aborted?this.remove(t):i.addEventListener("abort",()=>this.remove(t),{once:!0})),s}remove(e){let t=this._itemQueues.get(e);t&&(t.remove(e),this._itemQueues.delete(e))}has(e){let t=this._itemQueues.get(e);return!!(t&&t.has(e))}};var Qa=6378137,vM=1/298.257223563,Qm=6356752314245179e-9,Rl={inView:!1,error:1/0,distanceFromCamera:1/0};function Nl(e){return e===4||e===-1}function di(e,t){return Ol(e)&&e.traversal.lastFrameVisited===t&&e.traversal.used}function Ol(e){return!!e.traversal}function Qo(e){let{children:t}=e,n=t.length===0||Ol(t[t.length-1]),i=!e.internal.hasUnrenderableContent||Nl(e.internal.loadingState);return n&&i}function oa(e){return e.traversal.unconditionallyRefine}function Jo(e,t){if(Ol(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,Rl),e.traversal.inFrustum=Rl.inView,e.traversal.error=Rl.error,e.traversal.distanceFromCamera=Rl.distanceFromCamera,e.traversal.unconditionallyRefine=e.internal.hasUnrenderableContent,!e.traversal.unconditionallyRefine))){let n=e.parent;for(;n&&n.traversal.unconditionallyRefine;)n=n.parent;n&&n.geometricError<=e.geometricError&&(e.traversal.unconditionallyRefine=!0)}}function $d(e,t,n=!1){if(Jo(e,t),n?t.markTileUsed(e):Bl(e),oa(e)&&Qo(e)){let i=e.children;for(let r=0,a=i.length;r<a;r++)$d(i[r],t,n)}}function ef(e,t){if(Jo(e,t),e.traversal.usedLastFrame&&(Bl(e),e.traversal.wasSetActive&&(e.traversal.active=!0),(!e.traversal.active||oa(e))&&Qo(e))){let n=e.children;for(let i=0,r=n.length;i<r;i++)ef(n[i],t)}}function Bl(e){e.traversal.used=!0}function Jx(e,t){return!(e.traversal.error<=t.errorTarget&&!oa(e)||t.maxDepth>0&&e.internal.depth+1>=t.maxDepth||!Qo(e))}function tf(e,t){let{frameCount:n}=t,{children:i}=e;for(let r=0,a=i.length;r<a;r++){let o=i[r];di(o,n)&&(o.traversal.active&&(o.traversal.kicked=!0,o.traversal.active=!1),tf(o,t))}}function Km(e){return!oa(e)&&(!e.internal.hasContent||Nl(e.internal.loadingState))}function nf(e,t){if(Jo(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(!Jx(e,t)){Bl(e);return}let i=!1,r=!1,a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];nf(c,t),i||(i=di(c,t.frameCount)),r||(r=c.traversal.inFrustum)}if(e.refine==="REPLACE"&&!r&&a.length!==0){e.traversal.inFrustum=!1,t.markTileUsed(e);for(let o=0,s=a.length;o<s;o++)$d(a[o],t,!0);return}if(Bl(e),e.refine==="REPLACE"&&i&&(t.loadSiblings||t.loadAncestors))for(let o=0,s=a.length;o<s;o++)$d(a[o],t)}function rf(e,t){let n=t.frameCount;if(!di(e,n))return;let i=e.children,r=!1;for(let o=0,s=i.length;o<s;o++){let c=i[o];r||(r=di(c,n))}if(!r)e.traversal.isLeaf=!0;else{for(let s=0,c=i.length;s<c;s++)rf(i[s],t);let o=!0;for(let s=0,c=i.length;s<c;s++){let l=i[s];if(di(l,n)){let u=!oa(l),d=!l.internal.hasContent||Nl(l.internal.loadingState);u&&d||l.traversal.allChildrenLoaded||(o=!1)}}e.traversal.allChildrenLoaded=o}let a=!0;for(let o=0,s=i.length;o<s;o++){let c=i[o];di(c,t.frameCount)&&!c.traversal.allUsedChildrenProcessed&&(a=!1)}e.traversal.allUsedChildrenProcessed=a&&Qo(e)}function af(e,t){if(!di(e,t.frameCount))return;let n=e.children;if(e.refine==="REPLACE"&&t.loadAncestors&&!e.traversal.allChildrenLoaded&&!oa(e)&&(e.traversal.isLeaf=!0),e.traversal.isLeaf){if(!oa(e)&&(e.traversal.active=!0,Qo(e)&&e.internal.hasContent&&!Nl(e.internal.loadingState)))for(let r=0,a=n.length;r<a;r++)ef(n[r],t);return}let i=n.length>0;for(let r=0,a=n.length;r<a;r++){let o=n[r];af(o,t),di(o,t.frameCount)&&!(o.traversal.active&&Km(o))&&!o.traversal.allChildrenReady&&(i=!1)}e.traversal.allChildrenReady=i,e.refine==="REPLACE"&&!i&&e.traversal.wasSetActive&&Km(e)&&(e.traversal.active=!0,tf(e,t))}function of(e,t){Jo(e,t);let n=di(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||Ol(e)&&e.traversal.usedLastFrame){let i=!1,r=!1;n?(i=e.traversal.active,r=t.displayActiveTiles&&e.traversal.active||e.traversal.visible):Jo(e,t),e.internal.hasRenderableContent&&e.internal.loadingState===4?(i&&t.stats.active++,r&&t.stats.visible++,e.traversal.wasSetActive!==i&&t.invokeOnePlugin(o=>o.setTileActive&&o.setTileActive(e,i)),e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(o=>o.setTileVisible&&o.setTileVisible(e,r))):e.internal.hasRenderableContent||(r=e.traversal.isLeaf,e.traversal.wasSetVisible!==r&&t.invokeOnePlugin(o=>o.setEmptyTileVisible&&o.setEmptyTileVisible(e,r))),e.traversal.visible=r,e.traversal.active=i;let a=e.children;for(let o=0,s=a.length;o<s;o++){let c=a[o];of(c,t)}}}function Qx(e,t){nf(e,t),rf(e,t),af(e,t),of(e,t)}function ey(e){let t=null;return()=>{t===null&&(t=kl.requestAnimationFrame(()=>{t=null,e()}))}}function ty(e,t=null,n=null){let i=[];for(i.push(e),i.push(null),i.push(0);i.length>0;){let r=i.pop(),a=i.pop(),o=i.pop();if(t&&t(o,a,r)){n&&n(o,a,r);return}let s=o.children;if(s)for(let c=s.length-1;c>=0;c--)i.push(s[c]),i.push(o),i.push(r+1);n&&n(o,a,r)}}var Zm=Symbol("PLUGIN_REGISTERED"),Pi={inView:!0,error:0,distance:1/0},ny=(e,t)=>{let n=e.priority||0,i=t.priority||0;return n===i?!e.traversal||!t.traversal?0:e.traversal.used===t.traversal.used?e.traversal.error===t.traversal.error?e.traversal.distanceFromCamera===t.traversal.distanceFromCamera?e.internal.depthFromRenderedParent===t.internal.depthFromRenderedParent?0:e.internal.depthFromRenderedParent>t.internal.depthFromRenderedParent?-1:1:e.traversal.distanceFromCamera>t.traversal.distanceFromCamera?-1:1:e.traversal.error>t.traversal.error?1:-1:e.traversal.used?1:-1:n>i?1:-1},ry=(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,iy=(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,es=(e,t)=>{let n=e.priority??1/0,i=t.priority??1/0;if(n!==i)return n>i?1:-1;if(!e.internal||!t.internal)return 0;let r=e.internal.renderer,a=t.internal.renderer,o=!r.loadAncestors,s=!a.loadAncestors;return o&&s?ry(e,t):ny(e,t)},sf=new Jm;sf.unloadPriorityCallback=iy;var Dl=new Zx;Dl.maxJobsPerOrigin=25,Dl.priorityCallback=es;var Kd=new Ja;Kd.maxJobs=5,Kd.priorityCallback=es;var Zd=new Ja;Zd.maxJobs=25,Zd.priorityCallback=(e,t)=>{let n=e.parent,i=t.parent;return n===i?0:n?i?es(n,i):-1:1};var lf=class{get root(){let e=this.rootTileset;return e?e.root:null}get loadProgress(){let{stats:e,isLoading:t}=this,n=e.queued+e.downloading+e.parsing,i=e.inCacheSinceLoad+ +!!t;return i===0?1:1-n/i}get downloadQueue(){return this._downloadQueue}set downloadQueue(e){if(e instanceof Ja){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=sf,this.downloadQueue=Dl,this.parseQueue=Kd,this.processNodeQueue=Zd,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=ey(()=>{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[Zm]===!0)throw Error("TilesRendererBase: A plugin can only be registered to a single tileset");let t=this.plugins,n=e.priority||0,i=t.length;for(let r=0;r<t.length;r++)if((t[r].priority||0)>n){i=r;break}t.splice(i,0,e),e[Zm]=!0,e.init&&e.init(this)}unregisterPlugin(e){let t=this.plugins;if(typeof e=="string"&&(e=this.getPluginByName(e)),t.includes(e)){let n=t.indexOf(e);return t.splice(n,1),e.dispose&&e.dispose(),!0}return!1}getPluginByName(e){return this.plugins.find(t=>t.name===e)||null}invokeOnePlugin(e){let t=[...this.plugins,this];for(let n=0;n<t.length;n++){let i=e(t[n]);if(i)return i}return null}invokeAllPlugins(e){let t=[...this.plugins,this],n=[];for(let i=0;i<t.length;i++){let r=e(t[i]);r&&n.push(r)}return n.length===0?null:Promise.all(n)}traverse(e,t,n=!0){this.root&&ty(this.root,(i,...r)=>(n&&this.ensureChildrenArePreprocessed(i,!0),e?e(i,...r):!1),t)}getAttributions(e=[]){return this.invokeAllPlugins(t=>t!==this&&t.getAttributions&&t.getAttributions(e)),e}update(){let{lruCache:e,usedSet:t,stats:n,root:i,downloadQueue:r,parseQueue:a,processNodeQueue:o}=this;if(this.rootLoadingState===0&&(this.rootLoadingState=2,this.invokeOnePlugin(l=>l.loadRootTileset&&l.loadRootTileset()).then(l=>{let u=this.rootURL;u!==null&&this.invokeAllPlugins(d=>u=d.preprocessURL?d.preprocessURL(u,null):u),this.rootLoadingState=4,this.rootTileset=l,this.dispatchEvent({type:"needs-update"}),this.dispatchEvent({type:"load-tileset",tileset:l,url:u}),this.dispatchEvent({type:"load-root-tileset",tileset:l,url:u})}).catch(l=>{this.rootLoadingState=-1,console.error(l),this.rootTileset=null,this.dispatchEvent({type:"load-error",tile:null,error:l,url:this.rootURL})})),!i)return;let s=null;if(this.invokeAllPlugins(l=>{if(l.doTilesNeedUpdate){let u=l.doTilesNeedUpdate();s=s===null?u:!!(s||u)}}),s===!1){this.dispatchEvent({type:"update-before"}),this.dispatchEvent({type:"update-after"});return}this.dispatchEvent({type:"update-before"}),n.inFrustum=0,n.used=0,n.active=0,n.visible=0,n.tilesProcessed=0,this.frameCount++,t.forEach(l=>e.markUnused(l)),t.clear(),this.prepareForTraversal(),Qx(i,this),this.removeUnusedPendingTiles();let c=this.queuedTiles;c.sort(e.unloadPriorityCallback);for(let l=0,u=c.length;l<u&&!e.isFull();l++)this.requestTileContents(c[l]);c.length=0,e.scheduleUnload(),(r.running||a.running||o.running)===!1&&this.isLoading===!0&&(this.cachedSinceLoadComplete.clear(),n.inCacheSinceLoad=0,this.dispatchEvent({type:"tiles-load-end"}),this.isLoading=!1),this.dispatchEvent({type:"update-after"})}resetFailedTiles(){this.rootLoadingState===-1&&(this.rootLoadingState=0);let e=this.stats;e.failed!==0&&(this.traverse(t=>{t.internal.loadingState===-1&&(t.internal.loadingState=0)},null,!1),e.failed=0)}calculateTileViewErrorWithPlugin(e,t){this.calculateTileViewError(e,t);let{errorFalloff:n,errorFalloffDensity:i}=this;if(n>0&&Number.isFinite(t.distanceFromCamera)){let s=t.distanceFromCamera*i;t.error-=n*(1-Math.exp(-s*s))}let r=null,a=0,o=1/0;this.invokeAllPlugins(s=>{s!==this&&s.calculateTileViewError&&(Pi.inView=!0,Pi.error=0,Pi.distance=1/0,s.calculateTileViewError(e,Pi)&&(r===null&&(r=!0),r&&(r=Pi.inView),Pi.inView&&(o=Math.min(o,Pi.distance),a=Math.max(a,Pi.error))))}),t.inView&&r!==!1?(t.error=Math.max(t.error,a),t.distanceFromCamera=Math.min(t.distanceFromCamera,o)):r?(t.inView=!0,t.error=a,t.distanceFromCamera=o):t.inView=!1}dispose(){[...this.plugins].forEach(n=>{this.unregisterPlugin(n)});let e=this.lruCache,t=[];this.traverse(n=>(t.push(n),!1),null,!1);for(let n=0,i=t.length;n<i;n++)e.remove(t[n]);this.stats={queued:0,parsing:0,downloading:0,failed:0,inFrustum:0,traversed:0,used:0,active:0,visible:0},this.frameCount=0,this.loadingTiles.clear()}calculateBytesUsed(e,t){return 0}dispatchEvent(e){}addEventListener(e,t){}removeEventListener(e,t){}parseTile(e,t,n){return null}prepareForTraversal(){}disposeTile(e){e.traversal.visible&&(e.internal.hasRenderableContent?this.invokeOnePlugin(n=>n.setTileVisible&&n.setTileVisible(e,!1)):this.invokeOnePlugin(n=>n.setEmptyTileVisible&&n.setEmptyTileVisible(e,!1)),e.traversal.visible=!1),e.traversal.active&&e.internal.hasRenderableContent&&this.invokeOnePlugin(n=>n.setTileActive&&n.setTileActive(e,!1)),e.traversal.active=!1;let{scene:t}=e.engineData;t&&this.dispatchEvent({type:"dispose-model",scene:t,tile:e})}preprocessNode(e,t,n=null){if(this.processedTiles.add(e),this.stats.tilesProcessed++,e.content&&(!("uri"in e.content)&&"url"in e.content&&(e.content.uri=e.content.url,delete e.content.url),e.content.boundingVolume&&!("box"in e.content.boundingVolume||"sphere"in e.content.boundingVolume||"region"in e.content.boundingVolume)&&delete e.content.boundingVolume),e.parent=n,e.children=e.children||[],e.internal={hasContent:!1,hasRenderableContent:!1,hasUnrenderableContent:!1,loadingState:0,basePath:t,depth:-1,depthFromRenderedParent:-1,isVirtual:!1,virtualChildCount:0,renderer:this,...e.internal},e.content?.uri){let i=Ym(e.content.uri),r=!!(i&&/json$/.test(i));e.internal.hasContent=!0,e.internal.hasUnrenderableContent=r,e.internal.hasRenderableContent=!r}else e.internal.hasContent=!1,e.internal.hasUnrenderableContent=!1,e.internal.hasRenderableContent=!1;n?(e.internal.depth=n.internal.depth+1,e.internal.depthFromRenderedParent=n.internal.depthFromRenderedParent+ +!!e.internal.hasRenderableContent):(e.internal.depth=0,e.internal.depthFromRenderedParent=+!!e.internal.hasRenderableContent),e.traversal={distanceFromCamera:1/0,error:1/0,inFrustum:!1,wasInFrustum:!1,isLeaf:!1,used:!1,usedLastFrame:!1,visible:!1,wasSetVisible:!1,active:!1,wasSetActive:!1,allChildrenReady:!1,allChildrenLoaded:!1,kicked:!1,allUsedChildrenProcessed:!1,lastFrameVisited:-1},n===null?e.refine=e.refine||"REPLACE":e.refine=e.refine||n.refine,e.engineData={scene:null,metadata:null,boundingVolume:null},Object.defineProperty(e,"cached",{get(){return console.warn('TilesRenderer: "tile.cached" field has been renamed to "tile.engineData".'),this.engineData},enumerable:!1,configurable:!0}),this.invokeAllPlugins(i=>{i!==this&&i.preprocessNode&&i.preprocessNode(e,t,n)})}setTileActive(e,t){t?this.activeTiles.add(e):this.activeTiles.delete(e)}setTileVisible(e,t){t?this.visibleTiles.add(e):this.visibleTiles.delete(e),this.dispatchEvent({type:"tile-visibility-change",scene:e.engineData.scene,tile:e,visible:t})}calculateTileViewError(e,t){}removeUnusedPendingTiles(){let{lruCache:e,loadingTiles:t}=this,n=[];for(let i of t)!e.isUsed(i)&&i.internal.loadingState===1&&n.push(i);for(let i=0;i<n.length;i++)e.remove(n[i])}queueTileForDownload(e){e.internal.loadingState!==0||this.lruCache.isFull()||this.queuedTiles.push(e)}markTileUsed(e){this.usedSet.add(e),this.lruCache.markUsed(e)}fetchData(e,t){return fetch(e,t)}ensureChildrenArePreprocessed(e,t=this.stats.tilesProcessed<this.maxTilesProcessed){let n=e.children;if(n.length===0||n[n.length-1].traversal)return;let i=r=>{for(let a=0,o=r.length;a<o;a++){let s=r[a];s&&!s.traversal&&this.preprocessNode(s,e.internal.basePath,e)}};t?(this.processNodeQueue.remove(e),i(n)):this.processNodeQueue.has(e)||this.processNodeQueue.add(e,r=>{i(r.children),this._dispatchNeedsUpdateEvent()})}getBytesUsed(e){let t=0;return this.invokeAllPlugins(n=>{n.calculateBytesUsed&&(t+=n.calculateBytesUsed(e,e.engineData.scene)||0)}),t}recalculateBytesUsed(e=null){let{lruCache:t,processedTiles:n}=this;e===null?t.itemSet.forEach(i=>{n.has(i)&&t.setMemoryUsage(i,this.getBytesUsed(i))}):t.setMemoryUsage(e,this.getBytesUsed(e))}preprocessTileset(e,t,n=null){let[i,r]=e.asset.version.split(".").map(o=>parseInt(o));console.assert(i<=1,"TilesRenderer: asset.version is expected to be a 1.x or a compatible version."),i===1&&r>0&&console.warn("TilesRenderer: tiles versions at 1.1 or higher have limited support. Some new extensions and features may not be supported.");let a=t.replace(/\/[^/]*$/,"");a=new URL(a,window.location.href).toString(),this.preprocessNode(e.root,a,n)}loadRootTileset(){let e=this.rootURL;return this.invokeAllPlugins(t=>e=t.preprocessURL?t.preprocessURL(e,null):e),this.invokeOnePlugin(t=>t.fetchData&&t.fetchData(e,this.fetchOptions)).then(t=>{if(!(t instanceof Response))return t;if(t.ok)return t.json();throw Error(`TilesRenderer: Failed to load tileset "${e}" with status ${t.status} : ${t.statusText}`)}).then(t=>(this.preprocessTileset(t,e),t))}requestTileContents(e){if(e.internal.loadingState!==0)return;let t=!1,n=null,i=new URL(e.content.uri,e.internal.basePath+"/").toString();this.invokeAllPlugins(p=>i=p.preprocessURL?p.preprocessURL(i,e):i);let r=this.stats,a=this.lruCache,o=this.downloadQueue,s=this.parseQueue,c=this.loadingTiles,l=Ym(i),u=new AbortController,d=u.signal;if(a.add(e,p=>{u.abort(),t?p.children.length=0:this.invokeAllPlugins(f=>{f.disposeTile&&f.disposeTile(p)}),r.inCache--,this.cachedSinceLoadComplete.has(e)&&(this.cachedSinceLoadComplete.delete(e),r.inCacheSinceLoad--),p.internal.loadingState===1?r.queued--:p.internal.loadingState===2?r.downloading--:p.internal.loadingState===3?r.parsing--:p.internal.loadingState===4&&r.loaded--,p.internal.loadingState=0,s.remove(p),o.remove(p),c.delete(p)}))return this.isLoading||(this.isLoading=!0,this.dispatchEvent({type:"tiles-load-start"})),a.setMemoryUsage(e,this.getBytesUsed(e)),this.cachedSinceLoadComplete.add(e),r.inCacheSinceLoad++,r.inCache++,r.queued++,e.internal.loadingState=1,c.add(e),o.add(i,e,p=>{if(d.aborted)return Promise.resolve();e.internal.loadingState=2,r.downloading++,r.queued--;let f=this.invokeOnePlugin(g=>g.fetchData&&g.fetchData(i,{...this.fetchOptions,signal:d}));return this.dispatchEvent({type:"tile-download-start",tile:e,url:i,get uri(){return console.warn('tile-download-start event: "uri" has been renamed to "url".'),this.url}}),f}).then(p=>{if(!d.aborted){if(!(p instanceof Response))return p;if(p.ok)return l==="json"?p.json():p.arrayBuffer();throw Error(`Failed to load model with error code ${p.status}`)}}).then(p=>{if(!d.aborted)return r.downloading--,r.parsing++,e.internal.loadingState=3,s.add(e,f=>d.aborted?Promise.resolve():l==="json"&&p.root?(this.preprocessTileset(p,i,e),e.children.push(p.root),n=p,t=!0,Promise.resolve()):this.invokeOnePlugin(g=>g.parseTile&&g.parseTile(p,f,l,i,d)))}).then(()=>{if(d.aborted)return;r.parsing--,r.loaded++,e.internal.loadingState=4,c.delete(e),a.setLoaded(e,!0);let p=this.getBytesUsed(e);if(a.getMemoryUsage(e)===0&&p>0&&a.isFull()){a.remove(e);return}a.setMemoryUsage(e,p),this.dispatchEvent({type:"needs-update"}),t&&this.dispatchEvent({type:"load-tileset",tileset:n,url:i}),e.engineData.scene&&this.dispatchEvent({type:"load-model",scene:e.engineData.scene,tile:e,url:i})}).catch(p=>{d.aborted||(p.name==="AbortError"?a.remove(e):(s.remove(e),o.remove(e),e.internal.loadingState===1?r.queued--:e.internal.loadingState===2?r.downloading--:e.internal.loadingState===3?r.parsing--:e.internal.loadingState===4&&r.loaded--,r.failed++,console.error(`TilesRenderer : Failed to load tile at url "${e.content.uri}".`),console.error(p),e.internal.loadingState=-1,c.delete(e),a.setLoaded(e,!0),this.dispatchEvent({type:"load-error",tile:e,error:p,url:i})))})}};function sa(e){if(e===null||e.byteLength<4)return"";let t;if(t=e instanceof DataView?e:new DataView(e),String.fromCharCode(t.getUint8(0))==="{")return null;let n="";for(let i=0;i<4;i++)n+=String.fromCharCode(t.getUint8(i));return n}var ay=new TextDecoder;function cf(e){return ay.decode(e)}function Il(e){return e.replace(/[\\/][^\\/]+$/,"")+"/"}var ts=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=Il(e)),this.parse(t)))}resolveExternalURL(e){return new URL(e,this.workingPath).href}parse(e){throw Error("LoaderBase: Parse not implemented.")}};function df(e,t,n,i,r,a){let o;switch(i){case"SCALAR":o=1;break;case"VEC2":o=2;break;case"VEC3":o=3;break;case"VEC4":o=4;break;default:throw Error(`FeatureTable : Feature type not provided for "${a}".`)}let s,c=n*o;switch(r){case"BYTE":s=new Int8Array(e,t,c);break;case"UNSIGNED_BYTE":s=new Uint8Array(e,t,c);break;case"SHORT":s=new Int16Array(e,t,c);break;case"UNSIGNED_SHORT":s=new Uint16Array(e,t,c);break;case"INT":s=new Int32Array(e,t,c);break;case"UNSIGNED_INT":s=new Uint32Array(e,t,c);break;case"FLOAT":s=new Float32Array(e,t,c);break;case"DOUBLE":s=new Float64Array(e,t,c);break;default:throw Error(`FeatureTable : Feature component type not provided for "${a}".`)}return s}var zl=class{constructor(e,t,n,i){this.buffer=e,this.binOffset=t+n,this.binLength=i;let r=null;if(n!==0){let a=new Uint8Array(e,t,n);r=JSON.parse(cf(a))}else r={};this.header=r}getKeys(){return Object.keys(this.header).filter(e=>e!=="extensions")}getData(e,t,n=null,i=null){let r=this.header;if(!(e in r))return null;let a=r[e];if(!(a instanceof Object)||Array.isArray(a))return a;{let{buffer:o,binOffset:s,binLength:c}=this,l=a.byteOffset||0,u=a.type||i,d=a.componentType||n;if("type"in a&&i&&a.type!==i)throw Error("FeatureTable: Specified type does not match expected type.");let p=s+l,f=df(o,p,t,u,d,e);if(p+f.byteLength>s+c)throw Error("FeatureTable: Feature data read outside binary body length.");return f}}getBuffer(e,t){let{buffer:n,binOffset:i}=this;return n.slice(i+e,i+e+t)}},oy=class{constructor(e){this.batchTable=e;let t=e.header.extensions["3DTILES_batch_table_hierarchy"];this.classes=t.classes;for(let i of this.classes){let r=i.instances;for(let a in r)i.instances[a]=this._parseProperty(r[a],i.length,a)}if(this.instancesLength=t.instancesLength,this.classIds=this._parseProperty(t.classIds,this.instancesLength,"classIds"),t.parentCounts?this.parentCounts=this._parseProperty(t.parentCounts,this.instancesLength,"parentCounts"):this.parentCounts=Array(this.instancesLength).fill(1),t.parentIds){let i=this.parentCounts.reduce((r,a)=>r+a,0);this.parentIds=this._parseProperty(t.parentIds,i,"parentIds")}else this.parentIds=null;this.instancesIds=[];let n={};for(let i of this.classIds)n[i]=n[i]??0,this.instancesIds.push(n[i]),n[i]++}_parseProperty(e,t,n){if(Array.isArray(e))return e;{let{buffer:i,binOffset:r}=this.batchTable,a=e.byteOffset,o=e.componentType||"UNSIGNED_SHORT";return df(i,r+a,t,"SCALAR",o,n)}}getDataFromId(e,t={}){let n=this.parentCounts[e];if(this.parentIds&&n>0){let s=0;for(let c=0;c<e;c++)s+=this.parentCounts[c];for(let c=0;c<n;c++){let l=this.parentIds[s+c];l!==e&&this.getDataFromId(l,t)}}let i=this.classIds[e],r=this.classes[i].instances,a=this.classes[i].name,o=this.instancesIds[e];for(let s in r)t[a]=t[a]||{},t[a][s]=r[s][o];return t}},Jd=class extends zl{constructor(e,t,n,i,r){super(e,n,i,r),this.count=t,this.extensions={};let a=this.header.extensions;a&&a["3DTILES_batch_table_hierarchy"]&&(this.extensions["3DTILES_batch_table_hierarchy"]=new oy(this))}getDataFromId(e,t={}){if(e<0||e>=this.count)throw Error(`BatchTable: id value "${e}" out of bounds for "${this.count}" features number.`);for(let n of this.getKeys())t[n]=super.getData(n,this.count)[e];for(let n in this.extensions){let i=this.extensions[n];i.getDataFromId instanceof Function&&(t[n]=t[n]||{},i.getDataFromId(e,t[n]))}return t}getPropertyArray(e){return super.getData(e,this.count)}},uf=class extends ts{parse(e){let t=new DataView(e),n=sa(t);console.assert(n==="b3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new zl(e.slice(28,28+a+o),0,a,o),u=28+a+o,d=new Jd(e.slice(u,u+s+c),l.getData("BATCH_LENGTH"),0,s,c),p=u+s+c;return{version:i,featureTable:l,batchTable:d,glbBytes:new Uint8Array(e,p,r-p)}}},pf=class extends ts{parse(e){let t=new DataView(e),n=sa(t);console.assert(n==="i3dm");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=t.getUint32(28,!0),u=new zl(e.slice(32,32+a+o),0,a,o),d=32+a+o,p=new Jd(e.slice(d,d+s+c),u.getData("INSTANCES_LENGTH"),0,s,c),f=d+s+c,g=new Uint8Array(e,f,r-f),y=null,T=null,x=null;if(l)y=g,T=Promise.resolve();else{let h=this.resolveExternalURL(cf(g));x=Il(h),T=fetch(h,this.fetchOptions).then(m=>{if(!m.ok)throw Error(`I3DMLoaderBase : Failed to load file "${h}" with status ${m.status} : ${m.statusText}`);return m.arrayBuffer()}).then(m=>{y=new Uint8Array(m)})}return T.then(()=>({version:i,featureTable:u,batchTable:p,glbBytes:y,gltfWorkingPath:x}))}},hf=class extends ts{parse(e){let t=new DataView(e),n=sa(t);console.assert(n==="pnts");let i=t.getUint32(4,!0);console.assert(i===1);let r=t.getUint32(8,!0);console.assert(r===e.byteLength);let a=t.getUint32(12,!0),o=t.getUint32(16,!0),s=t.getUint32(20,!0),c=t.getUint32(24,!0),l=new zl(e.slice(28,28+a+o),0,a,o),u=28+a+o,d=new Jd(e.slice(u,u+s+c),l.getData("BATCH_LENGTH")||l.getData("POINTS_LENGTH"),0,s,c);return Promise.resolve({version:i,featureTable:l,batchTable:d})}},mf=class extends ts{parse(e){let t=new DataView(e),n=sa(t);console.assert(n==="cmpt",'CMPTLoader: The magic bytes equal "cmpt".');let i=t.getUint32(4,!0);console.assert(i===1,'CMPTLoader: The version listed in the header is "1".');let r=t.getUint32(8,!0);console.assert(r===e.byteLength,"CMPTLoader: The contents buffer length listed in the header matches the file.");let a=t.getUint32(12,!0),o=[],s=16;for(let c=0;c<a;c++){let l=new DataView(e,s,12),u=sa(l),d=l.getUint32(4,!0),p=l.getUint32(8,!0),f=new Uint8Array(e,s,p);o.push({type:u,buffer:f,version:d}),s+=p}return{version:i,tiles:o}}};var F=require("three"),ql=require("three/addons/loaders/GLTFLoader.js"),Rf=require("three/addons/utils/BufferGeometryUtils.js"),lu=class extends uf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new F.Matrix4}parse(e){let t=super.parse(e),n=t.glbBytes.slice().buffer;return new Promise((i,r)=>{let a=this.manager,o=this.fetchOptions,s=a.getHandler("path.gltf")||new ql.GLTFLoader(a);o.credentials==="include"&&o.mode==="cors"&&s.setCrossOrigin("use-credentials"),"credentials"in o&&s.setWithCredentials(o.credentials==="include"),o.headers&&s.setRequestHeader(o.headers);let c=this.workingPath;!/[\\/]$/.test(c)&&c.length&&(c+="/");let l=this.adjustmentTransform;s.parse(n,c,u=>{let{batchTable:d,featureTable:p}=t,{scene:f}=u,g=p.getData("RTC_CENTER",1,"FLOAT","VEC3");g&&(f.position.x+=g[0],f.position.y+=g[1],f.position.z+=g[2]),u.scene.updateMatrix(),u.scene.matrix.multiply(l),u.scene.matrix.decompose(u.scene.position,u.scene.quaternion,u.scene.scale),u.batchTable=d,u.featureTable=p,f.batchTable=d,f.featureTable=p,i(u)},r)})}};function sy(e){let t=e>>11,n=e>>5&63,i=e&31;return[Math.round(t/31*255),Math.round(n/63*255),Math.round(i/31*255)]}var ns=new F.Vector2;function ly(e,t,n=new F.Vector3){ns.set(e,t).divideScalar(256).multiplyScalar(2).subScalar(1),n.set(ns.x,ns.y,1-Math.abs(ns.x)-Math.abs(ns.y));let i=F.MathUtils.clamp(-n.z,0,1);return n.x>=0?n.setX(n.x-i):n.setX(n.x+i),n.y>=0?n.setY(n.y-i):n.setY(n.y+i),n.normalize(),n}var ff={RGB:"color",POSITION:"position"},cu=class extends hf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e}parse(e){return super.parse(e).then(async t=>{let{featureTable:n,batchTable:i}=t,r=new F.PointsMaterial,a=n.header.extensions,o=new F.Vector3,s;if(a&&a["3DTILES_draco_point_compression"]){let{byteOffset:u,byteLength:d,properties:p}=a["3DTILES_draco_point_compression"],f=this.manager.getHandler("draco.drc");if(f==null)throw Error("PNTSLoader: dracoLoader not available.");let g={};for(let x in p)if(x in ff&&x in p){let h=ff[x];g[h]=p[x]}let y={attributeIDs:g,attributeTypes:{position:"Float32Array",color:"Uint8Array"},useUniqueIDs:!0},T=n.getBuffer(u,d);s=await f.decodeGeometry(T,y),s.attributes.color&&(r.vertexColors=!0)}else{let u=n.getData("POINTS_LENGTH"),d=n.getData("POSITION",u,"FLOAT","VEC3"),p=n.getData("NORMAL",u,"FLOAT","VEC3"),f=n.getData("NORMAL",u,"UNSIGNED_BYTE","VEC2"),g=n.getData("RGB",u,"UNSIGNED_BYTE","VEC3"),y=n.getData("RGBA",u,"UNSIGNED_BYTE","VEC4"),T=n.getData("RGB565",u,"UNSIGNED_SHORT","SCALAR"),x=n.getData("CONSTANT_RGBA",u,"UNSIGNED_BYTE","VEC4"),h=n.getData("POSITION_QUANTIZED",u,"UNSIGNED_SHORT","VEC3"),m=n.getData("QUANTIZED_VOLUME_SCALE",u,"FLOAT","VEC3"),S=n.getData("QUANTIZED_VOLUME_OFFSET",u,"FLOAT","VEC3");if(s=new F.BufferGeometry,h){let M=new Float32Array(u*3);for(let C=0;C<u;C++)for(let L=0;L<3;L++){let b=3*C+L;M[b]=h[b]/65535*m[L]}o.x=S[0],o.y=S[1],o.z=S[2],s.setAttribute("position",new F.BufferAttribute(M,3,!1))}else s.setAttribute("position",new F.BufferAttribute(d,3,!1));if(p!==null)s.setAttribute("normal",new F.BufferAttribute(p,3,!1));else if(f!==null){let M=new Float32Array(u*3),C=new F.Vector3;for(let L=0;L<u;L++){let b=f[L*2],_=f[L*2+1],v=ly(b,_,C);M[L*3]=v.x,M[L*3+1]=v.y,M[L*3+2]=v.z}s.setAttribute("normal",new F.BufferAttribute(M,3,!1))}if(y!==null)s.setAttribute("color",new F.BufferAttribute(y,4,!0)),r.vertexColors=!0,r.transparent=!0,r.depthWrite=!1;else if(g!==null)s.setAttribute("color",new F.BufferAttribute(g,3,!0)),r.vertexColors=!0;else if(T!==null){let M=new Uint8Array(u*3);for(let C=0;C<u;C++){let L=sy(T[C]);for(let b=0;b<3;b++){let _=3*C+b;M[_]=L[b]}}s.setAttribute("color",new F.BufferAttribute(M,3,!0)),r.vertexColors=!0}else if(x!==null){r.color=new F.Color(x[0],x[1],x[2]);let M=x[3]/255;M<1&&(r.opacity=M,r.transparent=!0,r.depthWrite=!1)}}let c=new F.Points(s,r);c.position.copy(o),t.scene=c,t.scene.featureTable=n,t.scene.batchTable=i;let l=n.getData("RTC_CENTER",1,"FLOAT","VEC3");return l&&(t.scene.position.x+=l[0],t.scene.position.y+=l[1],t.scene.position.z+=l[2]),t})}};function cy(e){let{x:t,y:n,z:i}=e;e.x=i,e.y=t,e.z=n}function dy(e){return-e+Math.PI/2}var gf=new F.Spherical,Ai=new F.Vector3,jn=new F.Vector3,Qd=new F.Vector3,gr=new F.Matrix4,qr=new F.Matrix4,eu=new F.Sphere,Xn=new F.Euler,bf=new F.Vector3,vf=new F.Vector3,xf=new F.Vector3,rs=new F.Vector3,Ul=new F.Ray,uy=1e-12,py=.1;var du=class{constructor(e=1,t=1,n=1){this.name="",this.radius=new F.Vector3(e,t,n)}intersectRay(e,t){return gr.makeScale(...this.radius).invert(),eu.center.set(0,0,0),eu.radius=1,Ul.copy(e).applyMatrix4(gr),Ul.intersectSphere(eu,t)?(gr.makeScale(...this.radius),t.applyMatrix4(gr),t):null}getEastNorthUpFrame(e,t,n,i){return n.isMatrix4&&(i=n,n=0,console.warn('Ellipsoid: The signature for "getEastNorthUpFrame" has changed.')),this.getEastNorthUpAxes(e,t,bf,vf,xf),this.getCartographicToPosition(e,t,n,rs),i.makeBasis(bf,vf,xf).setPosition(rs)}getOrientedEastNorthUpFrame(e,t,n,i,r,a,o){return this.getObjectFrame(e,t,n,i,r,a,o,0)}getObjectFrame(e,t,n,i,r,a,o,s=2){return this.getEastNorthUpFrame(e,t,n,gr),Xn.set(r,a,-i,"ZXY"),o.makeRotationFromEuler(Xn).premultiply(gr),s===1?(Xn.set(Math.PI/2,0,0,"XYZ"),qr.makeRotationFromEuler(Xn),o.multiply(qr)):s===2&&(Xn.set(-Math.PI/2,0,Math.PI,"XYZ"),qr.makeRotationFromEuler(Xn),o.multiply(qr)),o}getCartographicFromObjectFrame(e,t,n=2){return n===1?(Xn.set(-Math.PI/2,0,0,"XYZ"),qr.makeRotationFromEuler(Xn).premultiply(e)):n===2?(Xn.set(-Math.PI/2,0,Math.PI,"XYZ"),qr.makeRotationFromEuler(Xn).premultiply(e)):qr.copy(e),rs.setFromMatrixPosition(qr),this.getPositionToCartographic(rs,t),this.getEastNorthUpFrame(t.lat,t.lon,0,gr).invert(),qr.premultiply(gr),Xn.setFromRotationMatrix(qr,"ZXY"),t.azimuth=-Xn.z,t.elevation=Xn.x,t.roll=Xn.y,t}getEastNorthUpAxes(e,t,n,i,r,a=rs){this.getCartographicToPosition(e,t,0,a),this.getCartographicToNormal(e,t,r),n.set(-a.y,a.x,0).normalize(),i.crossVectors(r,n).normalize()}getCartographicToPosition(e,t,n,i){this.getCartographicToNormal(e,t,Ai);let r=this.radius;jn.copy(Ai),jn.x*=r.x**2,jn.y*=r.y**2,jn.z*=r.z**2;let a=Math.sqrt(Ai.dot(jn));return jn.divideScalar(a),i.copy(jn).addScaledVector(Ai,n)}getPositionToCartographic(e,t){this.getPositionToSurfacePoint(e,jn),this.getPositionToNormal(jn,Ai);let n=Qd.subVectors(e,jn);return t.lon=Math.atan2(Ai.y,Ai.x),t.lat=Math.asin(Ai.z),t.height=Math.sign(n.dot(e))*n.length(),t}getCartographicToNormal(e,t,n){return gf.set(1,dy(e),t),n.setFromSpherical(gf).normalize(),cy(n),n}getPositionToNormal(e,t){let n=this.radius;return t.copy(e),t.x/=n.x**2,t.y/=n.y**2,t.z/=n.z**2,t.normalize(),t}getPositionToSurfacePoint(e,t){let n=this.radius,i=1/n.x**2,r=1/n.y**2,a=1/n.z**2,o=e.x*e.x*i,s=e.y*e.y*r,c=e.z*e.z*a,l=o+s+c,u=Math.sqrt(1/l),d=jn.copy(e).multiplyScalar(u);if(l<py)return isFinite(u)?t.copy(d):null;let p=Qd.set(d.x*i*2,d.y*r*2,d.z*a*2),f=(1-u)*e.length()/(.5*p.length()),g=0,y,T,x,h,m,S,M,C,L,b,_;do{f-=g,x=1/(1+f*i),h=1/(1+f*r),m=1/(1+f*a),S=x*x,M=h*h,C=m*m,L=S*x,b=M*h,_=C*m,y=o*S+s*M+c*C-1,T=o*L*i+s*b*r+c*_*a;let v=-2*T;g=y/v}while(Math.abs(y)>uy);return t.set(e.x*x,e.y*h,e.z*m)}calculateHorizonDistance(e,t){let n=this.calculateEffectiveRadius(e);return Math.sqrt(2*n*t+t**2)}calculateEffectiveRadius(e){let t=this.radius.x,n=1-this.radius.z**2/t**2,i=e*F.MathUtils.DEG2RAD,r=Math.sin(i)**2;return t/Math.sqrt(1-n*r)}getPositionElevation(e){this.getPositionToSurfacePoint(e,jn);let t=Qd.subVectors(e,jn);return Math.sign(t.dot(e))*t.length()}closestPointToRayEstimate(e,t){return this.intersectRay(e,t)?t:(gr.makeScale(...this.radius).invert(),Ul.copy(e).applyMatrix4(gr),jn.set(0,0,0),Ul.closestPointToPoint(jn,t).normalize(),gr.makeScale(...this.radius),t.applyMatrix4(gr))}copy(e){return this.radius.copy(e.radius),this}clone(){return new this.constructor().copy(this)}},ls=new du(Qa,Qa,Qm);ls.name="WGS84 Earth";var Vl=new F.Vector3,eo=new F.Vector3,to=new F.Vector3,tu=new F.Vector3,Fl=new F.Quaternion,jl=new F.Vector3,no=new F.Matrix4,yf=new F.Matrix4,wf=new F.Vector3,_f=new F.Matrix4,nu=new F.Quaternion,ru={};function Sf(e,t,n,i){if(e=e/n*2-1,t=t/n*2-1,i.x=e,i.y=t,i.z=1-Math.abs(e)-Math.abs(t),i.z<0){let r=i.x;i.x=(1-Math.abs(i.y))*(r>=0?1:-1),i.y=(1-Math.abs(r))*(i.y>=0?1:-1)}return i.normalize(),i}var uu=class extends pf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new F.Matrix4,this.ellipsoid=ls.clone()}resolveExternalURL(e){return this.manager.resolveURL(super.resolveExternalURL(e))}parse(e){return super.parse(e).then(t=>{let{featureTable:n,batchTable:i}=t,r=t.glbBytes.slice().buffer;return new Promise((a,o)=>{let s=this.fetchOptions,c=this.manager,l=c.getHandler("path.gltf")||new ql.GLTFLoader(c);s.credentials==="include"&&s.mode==="cors"&&l.setCrossOrigin("use-credentials"),"credentials"in s&&l.setWithCredentials(s.credentials==="include"),s.headers&&l.setRequestHeader(s.headers);let u=t.gltfWorkingPath??this.workingPath;/[\\/]$/.test(u)||(u+="/");let d=this.adjustmentTransform;l.parse(r,u,p=>{let f=n.getData("INSTANCES_LENGTH"),g=n.getData("POSITION",f,"FLOAT","VEC3"),y=n.getData("POSITION_QUANTIZED",f,"UNSIGNED_SHORT","VEC3"),T=n.getData("QUANTIZED_VOLUME_OFFSET",1,"FLOAT","VEC3"),x=n.getData("QUANTIZED_VOLUME_SCALE",1,"FLOAT","VEC3"),h=n.getData("NORMAL_UP",f,"FLOAT","VEC3"),m=n.getData("NORMAL_RIGHT",f,"FLOAT","VEC3"),S=n.getData("NORMAL_UP_OCT32P",f,"UNSIGNED_SHORT","VEC2"),M=n.getData("NORMAL_RIGHT_OCT32P",f,"UNSIGNED_SHORT","VEC2"),C=n.getData("SCALE_NON_UNIFORM",f,"FLOAT","VEC3"),L=n.getData("SCALE",f,"FLOAT","SCALAR"),b=n.getData("RTC_CENTER",1,"FLOAT","VEC3"),_=n.getData("EAST_NORTH_UP");if(!g&&y){g=new Float32Array(f*3);for(let E=0;E<f;E++)g[E*3+0]=T[0]+y[E*3+0]/65535*x[0],g[E*3+1]=T[1]+y[E*3+1]/65535*x[1],g[E*3+2]=T[2]+y[E*3+2]/65535*x[2]}let v=new F.Vector3;for(let E=0;E<f;E++)v.x+=g[E*3+0]/f,v.y+=g[E*3+1]/f,v.z+=g[E*3+2]/f;let P=[],z=[];p.scene.updateMatrixWorld(),p.scene.traverse(E=>{if(E.isMesh){z.push(E);let{geometry:V,material:A}=E,X=new F.InstancedMesh(V,A,f);X.position.copy(v),b&&(X.position.x+=b[0],X.position.y+=b[1],X.position.z+=b[2]),P.push(X)}});for(let E=0;E<f;E++){tu.set(g[E*3+0]-v.x,g[E*3+1]-v.y,g[E*3+2]-v.z),Fl.identity(),h&&m?(eo.set(h[E*3+0],h[E*3+1],h[E*3+2]),to.set(m[E*3+0],m[E*3+1],m[E*3+2]),Vl.crossVectors(to,eo).normalize(),no.makeBasis(to,eo,Vl),Fl.setFromRotationMatrix(no)):S&&M&&(Sf(S[E*2+0],S[E*2+1],65535,eo),Sf(M[E*2+0],M[E*2+1],65535,to),Vl.crossVectors(to,eo).normalize(),no.makeBasis(to,eo,Vl),Fl.setFromRotationMatrix(no)),jl.set(1,1,1),C&&jl.set(C[E*3+0],C[E*3+1],C[E*3+2]),L&&jl.multiplyScalar(L[E]);for(let V=0,A=P.length;V<A;V++){let X=P[V];nu.copy(Fl),_&&(X.updateMatrixWorld(),wf.copy(tu).applyMatrix4(X.matrixWorld),this.ellipsoid.getPositionToCartographic(wf,ru),this.ellipsoid.getEastNorthUpFrame(ru.lat,ru.lon,_f),nu.setFromRotationMatrix(_f)),no.compose(tu,nu,jl).multiply(d);let j=z[V];yf.multiplyMatrices(no,j.matrixWorld),X.setMatrixAt(E,yf)}}p.scene.clear(),p.scene.add(...P),p.batchTable=i,p.featureTable=n,p.scene.batchTable=i,p.scene.featureTable=n,a(p)},o)})})}},Lf=class extends mf{constructor(e=F.DefaultLoadingManager){super(),this.manager=e,this.adjustmentTransform=new F.Matrix4,this.ellipsoid=ls.clone()}parse(e){let t=super.parse(e),{manager:n,ellipsoid:i,adjustmentTransform:r}=this,a=[];for(let o in t.tiles){let{type:s,buffer:c}=t.tiles[o];switch(s){case"b3dm":{let l=c.slice(),u=new lu(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.adjustmentTransform.copy(r);let d=u.parse(l.buffer);a.push(d);break}case"pnts":{let l=c.slice(),u=new cu(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions;let d=u.parse(l.buffer);a.push(d);break}case"i3dm":{let l=c.slice(),u=new uu(n);u.workingPath=this.workingPath,u.fetchOptions=this.fetchOptions,u.ellipsoid.copy(i),u.adjustmentTransform.copy(r);let d=u.parse(l.buffer);a.push(d);break}}}return Promise.all(a).then(o=>{let s=new F.Group;return o.forEach(c=>{s.add(c.scene)}),{tiles:o,scene:s}})}},is=new F.Matrix4,hy=class extends F.Group{constructor(e){super(),this.isTilesGroup=!0,this.name="TilesRenderer.TilesGroup",this.tilesRenderer=e,this.matrixWorldInverse=new F.Matrix4}raycast(e,t){return this.tilesRenderer.raycast(e,t),!1}updateMatrixWorld(e){if(this.matrixAutoUpdate&&this.updateMatrix(),this.matrixWorldNeedsUpdate||e){this.parent===null?is.copy(this.matrix):is.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1;let t=is.elements,n=this.matrixWorld.elements,i=!1;for(let r=0;r<16;r++){let a=t[r],o=n[r];if(Math.abs(a-o)>2**-52){i=!0;break}}if(i){this.matrixWorld.copy(is),this.matrixWorldInverse.copy(is).invert();let r=this.children;for(let c=0,l=r.length;c<l;c++)r[c].updateMatrixWorld();let{tilesRenderer:a}=this,{activeTiles:o,visibleTiles:s}=a;o.forEach(c=>{s.has(c)||c.engineData.scene.updateMatrixWorld(!0)})}}}updateWorldMatrix(e,t){this.parent&&e&&this.parent.updateWorldMatrix(e,!1),this.updateMatrixWorld(!0)}},my=new F.Ray;function fy(e,t,n,i){let{scene:r}=e.engineData;n.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(e,r,t,i))||t.intersectObject(r,!0,i)}function gy(e){return"traversal"in e}function kf(e,t,n,i,r=null){if(!gy(t))return;let{group:a,activeTiles:o}=e,{boundingVolume:s}=t.engineData;if(r===null&&(r=my,r.copy(n.ray).applyMatrix4(a.matrixWorldInverse)),!t.traversal.used||!s.intersectsRay(r))return;o.has(t)&&fy(t,n,e,i);let c=t.children;for(let l=0,u=c.length;l<u;l++)kf(e,c[l],n,i,r)}var Hl=new F.Vector3,Gl=new F.Vector3,qn=new F.Vector3,Wl=new F.Ray,ou=class{constructor(e=new F.Box3,t=new F.Matrix4){this.box=e.clone(),this.transform=t.clone(),this.inverseTransform=new F.Matrix4,this.points=Array(8).fill().map(()=>new F.Vector3),this.planes=[,,,,,,].fill().map(()=>new F.Plane)}copy(e){return this.box.copy(e.box),this.transform.copy(e.transform),this.update(),this}clone(){return new this.constructor().copy(this)}clampPoint(e,t){return t.copy(e).applyMatrix4(this.inverseTransform).clamp(this.box.min,this.box.max).applyMatrix4(this.transform)}distanceToPoint(e){return this.clampPoint(e,qn).distanceTo(e)}containsPoint(e){return qn.copy(e).applyMatrix4(this.inverseTransform),this.box.containsPoint(qn)}intersectsRay(e){return Wl.copy(e).applyMatrix4(this.inverseTransform),Wl.intersectsBox(this.box)}intersectRay(e,t){return Wl.copy(e).applyMatrix4(this.inverseTransform),Wl.intersectBox(this.box,t)?(t.applyMatrix4(this.transform),t):null}update(){let{points:e,inverseTransform:t,transform:n,box:i}=this;t.copy(n).invert();let{min:r,max:a}=i,o=0;for(let s=-1;s<=1;s+=2)for(let c=-1;c<=1;c+=2)for(let l=-1;l<=1;l+=2)e[o].set(s<0?r.x:a.x,c<0?r.y:a.y,l<0?r.z:a.z).applyMatrix4(n),o++;this.updatePlanes()}updatePlanes(){Hl.copy(this.box.min).applyMatrix4(this.transform),Gl.copy(this.box.max).applyMatrix4(this.transform),qn.set(0,0,1).transformDirection(this.transform),this.planes[0].setFromNormalAndCoplanarPoint(qn,Hl),this.planes[1].setFromNormalAndCoplanarPoint(qn,Gl).negate(),qn.set(0,1,0).transformDirection(this.transform),this.planes[2].setFromNormalAndCoplanarPoint(qn,Hl),this.planes[3].setFromNormalAndCoplanarPoint(qn,Gl).negate(),qn.set(1,0,0).transformDirection(this.transform),this.planes[4].setFromNormalAndCoplanarPoint(qn,Hl),this.planes[5].setFromNormalAndCoplanarPoint(qn,Gl).negate()}intersectsSphere(e){return this.clampPoint(e.center,qn),qn.distanceToSquared(e.center)<=e.radius*e.radius}intersectsFrustum(e){return this._intersectsPlaneShape(e.planes,e.points)}intersectsOBB(e){return this._intersectsPlaneShape(e.planes,e.points)}_intersectsPlaneShape(e,t){let n=this.points,i=this.planes;for(let r=0;r<6;r++){let a=e[r],o=-1/0;for(let s=0;s<8;s++){let c=n[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}for(let r=0;r<6;r++){let a=i[r],o=-1/0;for(let s=0;s<8;s++){let c=t[s],l=a.distanceToPoint(c);o=o<l?l:o}if(o<0)return!1}return!0}},ss=Math.PI,iu=ss/2,as=new F.Vector3,la=new F.Vector3,Ir=new F.Vector3,Re=new F.Vector3,Hn=new F.Matrix4,by=new F.Box3,Mf=new F.Matrix4;function Ei(e,t){t.radius=Math.max(t.radius,e.distanceToSquared(t.center))}function Cf(e){return e.x!==e.y}var Bf=class extends du{constructor(e=1,t=1,n=1,i=-iu,r=iu,a=0,o=2*ss,s=0,c=0){super(e,t,n),this.latStart=i,this.latEnd=r,this.lonStart=a,this.lonEnd=o,this.heightStart=s,this.heightEnd=c}getBoundingBox(e,t){Cf(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported.");let{latStart:n,latEnd:i,lonStart:r,lonEnd:a,heightStart:o,heightEnd:s}=this,c=(n+i)*.5,l=(r+a)*.5,u=n>0,d=i<0,p;p=u?n:d?i:0;let{min:f,max:g}=e;f.setScalar(1/0),g.setScalar(-1/0),a-r<=ss?(this.getCartographicToNormal(c,l,Ir),la.set(0,0,1),as.crossVectors(la,Ir).normalize(),la.crossVectors(Ir,as).normalize(),t.makeBasis(as,la,Ir),Hn.copy(t).invert(),this.getCartographicToPosition(p,r,s,Re).applyMatrix4(Hn),g.x=Math.abs(Re.x),f.x=-g.x,this.getCartographicToPosition(i,r,s,Re).applyMatrix4(Hn),g.y=Re.y,this.getCartographicToPosition(i,l,s,Re).applyMatrix4(Hn),g.y=Math.max(Re.y,g.y),this.getCartographicToPosition(n,r,s,Re).applyMatrix4(Hn),f.y=Re.y,this.getCartographicToPosition(n,l,s,Re).applyMatrix4(Hn),f.y=Math.min(Re.y,f.y),this.getCartographicToPosition(c,l,s,Re).applyMatrix4(Hn),g.z=Re.z,this.getCartographicToPosition(n,r,o,Re).applyMatrix4(Hn),f.z=Re.z,this.getCartographicToPosition(i,r,o,Re).applyMatrix4(Hn),f.z=Math.min(Re.z,f.z)):(this.getCartographicToPosition(p,l,s,Ir),Ir.z=0,Ir.length()<1e-10?Ir.set(1,0,0):Ir.normalize(),la.set(0,0,1),as.crossVectors(Ir,la).normalize(),t.makeBasis(as,la,Ir),Hn.copy(t).invert(),this.getCartographicToPosition(p,l+iu,s,Re).applyMatrix4(Hn),g.x=Math.abs(Re.x),f.x=-g.x,this.getCartographicToPosition(i,0,d?o:s,Re).applyMatrix4(Hn),g.y=Re.y,this.getCartographicToPosition(n,0,u?o:s,Re).applyMatrix4(Hn),f.y=Re.y,this.getCartographicToPosition(p,l,s,Re).applyMatrix4(Hn),g.z=Re.z,this.getCartographicToPosition(p,a,s,Re).applyMatrix4(Hn),f.z=Re.z),e.getCenter(Re),e.min.sub(Re).multiplyScalar(1.0000000000001),e.max.sub(Re).multiplyScalar(1.0000000000001),Re.applyMatrix4(t),t.setPosition(Re)}getBoundingSphere(e){Cf(this.radius)&&console.warn("EllipsoidRegion: Triaxial ellipsoids are not supported."),this.getBoundingBox(by,Mf),e.center.setFromMatrixPosition(Mf),e.radius=0;let{latStart:t,latEnd:n,lonStart:i,lonEnd:r,heightStart:a,heightEnd:o}=this,s=(t+n)*.5,c=(i+r)*.5,l=t>0,u=n<0,d;d=l?t:u?n:0,this.getCartographicToPosition(d,i,o,Re),Ei(Re,e),this.getCartographicToPosition(n,i,o,Re),Ei(Re,e),this.getCartographicToPosition(n,c,o,Re),Ei(Re,e),this.getCartographicToPosition(t,i,o,Re),Ei(Re,e),this.getCartographicToPosition(t,c,o,Re),Ei(Re,e),this.getCartographicToPosition(s,c,o,Re),Ei(Re,e),this.getCartographicToPosition(t,i,a,Re),Ei(Re,e),r-i>ss&&(this.getCartographicToPosition(d,c+ss,o,Re),Ei(Re,e)),e.radius=Math.sqrt(e.radius)*1.0000000000001}},ui=new F.Vector3,pi=new F.Vector3,hi=new F.Vector3,Tf=new F.Vector3,Pf=new F.Vector3,vy=class{constructor(){this.sphere=null,this.obb=null,this.region=null,this.regionObb=null}intersectsRay(e){let t=this.sphere,n=this.obb||this.regionObb;return!(t&&!e.intersectsSphere(t)||n&&!n.intersectsRay(e))}intersectRay(e,t=null){let n=this.sphere,i=this.obb||this.regionObb,r=-1/0,a=-1/0;n&&e.intersectSphere(n,Tf)&&(r=n.containsPoint(e.origin)?0:e.origin.distanceToSquared(Tf)),i&&i.intersectRay(e,Pf)&&(a=i.containsPoint(e.origin)?0:e.origin.distanceToSquared(Pf));let o=Math.max(r,a);return o===-1/0?null:(e.at(Math.sqrt(o),t),t)}distanceToPoint(e){let t=this.sphere,n=this.obb||this.regionObb,i=-1/0,r=-1/0;return t&&(i=Math.max(t.distanceToPoint(e),0)),n&&(r=n.distanceToPoint(e)),i>r?i:r}intersectsFrustum(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsFrustum(e)?!1:!!(n||t)}intersectsSphere(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!n.intersectsSphere(e)||t&&!t.intersectsSphere(e)?!1:!!(n||t)}intersectsOBB(e){let t=this.obb||this.regionObb,n=this.sphere;return n&&!e.intersectsSphere(n)||t&&!t.intersectsOBB(e)?!1:!!(n||t)}getOBB(e,t){let n=this.obb||this.regionObb;n?(e.copy(n.box),t.copy(n.transform)):(this.getAABB(e),t.identity())}getAABB(e){if(this.sphere)this.sphere.getBoundingBox(e);else{let t=this.obb||this.regionObb;e.copy(t.box).applyMatrix4(t.transform)}}getSphere(e){if(this.sphere)e.copy(this.sphere);else if(this.region)this.region.getBoundingSphere(e);else{let t=this.obb||this.regionObb;t.box.getBoundingSphere(e),e.applyMatrix4(t.transform)}}setObbData(e,t){let n=new ou;ui.set(e[3],e[4],e[5]),pi.set(e[6],e[7],e[8]),hi.set(e[9],e[10],e[11]);let i=ui.length(),r=pi.length(),a=hi.length();ui.normalize(),pi.normalize(),hi.normalize(),i===0&&ui.crossVectors(pi,hi),r===0&&pi.crossVectors(ui,hi),a===0&&hi.crossVectors(ui,pi),n.transform.set(ui.x,pi.x,hi.x,e[0],ui.y,pi.y,hi.y,e[1],ui.z,pi.z,hi.z,e[2],0,0,0,1).premultiply(t),n.box.min.set(-i,-r,-a),n.box.max.set(i,r,a),n.update(),this.obb=n}setSphereData(e,t,n,i,r){let a=new F.Sphere;a.center.set(e,t,n),a.radius=i,a.applyMatrix4(r),this.sphere=a}setRegionData(e,t,n,i,r,a,o){let s=new Bf(...e.radius,n,r,t,i,a,o),c=new ou;s.getBoundingBox(c.box,c.transform),c.update(),this.region=s,this.regionObb=c}},xy=new F.Matrix3;function yy(e,t,n,i){let r=xy.set(e.normal.x,e.normal.y,e.normal.z,t.normal.x,t.normal.y,t.normal.z,n.normal.x,n.normal.y,n.normal.z);return i.set(-e.constant,-t.constant,-n.constant),i.applyMatrix3(r.invert()),i}var wy=class extends F.Frustum{constructor(){super(),this.points=Array(8).fill().map(()=>new F.Vector3)}setFromProjectionMatrix(...e){return super.setFromProjectionMatrix(...e),this.calculateFrustumPoints(),this}calculateFrustumPoints(){let{planes:e,points:t}=this;[[e[0],e[3],e[4]],[e[1],e[3],e[4]],[e[0],e[2],e[4]],[e[1],e[2],e[4]],[e[0],e[3],e[5]],[e[1],e[3],e[5]],[e[0],e[2],e[5]],[e[1],e[2],e[5]]].forEach((n,i)=>{yy(n[0],n[1],n[2],t[i])})}};var su=0;function Af(e,t,n,i){try{return F.TextureUtils.getByteLength(e,t,n,i)}catch{return su}}function _y(e){if(!e)return 0;if(e.isExternalTexture)return e.userData?.byteLength??su;let{format:t,type:n,image:i,mipmaps:r}=e;if(e.isCompressedTexture&&Array.isArray(r)&&r.length>0){let o=0;for(let s of r)s?.data?.byteLength?o+=s.data.byteLength:o+=Af(s.width,s.height,t,n);return o}if(!i)return su;let a=Af(i.width,i.height,t,n);return a*=e.generateMipmaps?4/3:1,a}function Sy(e){let t=new Set,n=0;return e.traverse(i=>{if(i.geometry&&!t.has(i.geometry)&&(n+=(0,Rf.estimateBytesUsed)(i.geometry),t.add(i.geometry)),i.material){let r=i.material;for(let a in r){let o=r[a];o&&o.isTexture&&!t.has(o)&&(n+=_y(o),t.add(o))}}}),n}var Df=Symbol("INITIAL_FRUSTUM_CULLED"),Xl=new F.Matrix4,os=new F.Vector3,au=new F.Vector2,My=new F.Vector3(1,0,0),Cy=new F.Vector3(0,1,0),Ty=()=>null;function Ef(e,t){e.traverse(n=>{n.frustumCulled=n[Df]&&t})}var pu=class extends lf{get autoDisableRendererCulling(){return this._autoDisableRendererCulling}set autoDisableRendererCulling(e){this._autoDisableRendererCulling!==e&&(super._autoDisableRendererCulling=e,this.forEachLoadedModel(t=>{Ef(t,!e)}))}constructor(...e){super(...e),this.accelerateRaycast=!0,this.group=new hy(this),this.ellipsoid=ls.clone(),this.cameras=[],this.cameraMap=new Map,this.cameraInfo=[],this._upRotationMatrix=new F.Matrix4,this._bytesUsed=new WeakMap,this._autoDisableRendererCulling=!0,this.manager=new F.LoadingManager,this._listeners={}}addEventListener(e,t){F.EventDispatcher.prototype.addEventListener.call(this,e,t)}hasEventListener(e,t){return F.EventDispatcher.prototype.hasEventListener.call(this,e,t)}removeEventListener(e,t){F.EventDispatcher.prototype.removeEventListener.call(this,e,t)}dispatchEvent(e){F.EventDispatcher.prototype.dispatchEvent.call(this,e)}getBoundingBox(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getAABB(e),!0):!1}getOrientedBoundingBox(e,t){if(!this.root)return!1;let n=this.root.engineData.boundingVolume;return n?(n.getOBB(e,t),!0):!1}getBoundingSphere(e){if(!this.root)return!1;let t=this.root.engineData.boundingVolume;return t?(t.getSphere(e),!0):!1}forEachLoadedModel(e){this.traverse(t=>{let n=t.engineData&&t.engineData.scene;n&&e(n,t)},null,!1)}raycast(e,t){if(this.root)if(this.accelerateRaycast)kf(this,this.root,e,t);else{let n=e.firstHitOnly?[]:t;for(let i of this.activeTiles){let{scene:r}=i.engineData;this.invokeOnePlugin(a=>a.raycastTile&&a.raycastTile(i,r,e,n))||e.intersectObject(r,!0,n)}e.firstHitOnly&&n.length>0&&(n.sort((i,r)=>i.distance-r.distance),t.push(n[0]))}}hasCamera(e){return this.cameraMap.has(e)}setCamera(e){let t=this.cameras,n=this.cameraMap;return n.has(e)?!1:(n.set(e,new F.Vector2),t.push(e),this.dispatchEvent({type:"add-camera",camera:e}),!0)}setResolution(e,t,n){let i=this.cameraMap;if(!i.has(e))return!1;let r=t.isVector2?t.x:t,a=t.isVector2?t.y:n,o=i.get(e);return(o.width!==r||o.height!==a)&&(o.set(r,a),this.dispatchEvent({type:"camera-resolution-change"})),!0}getResolution(e,t){let n=this.cameraMap.get(e);return n?t.copy(n):null}setResolutionFromRenderer(e,t){return t.getSize(au),this.setResolution(e,au.x,au.y)}deleteCamera(e){let t=this.cameras,n=this.cameraMap;if(n.has(e)){let i=t.indexOf(e);return t.splice(i,1),n.delete(e),this.dispatchEvent({type:"delete-camera",camera:e}),!0}return!1}loadRootTileset(...e){return super.loadRootTileset(...e).then(t=>{let{asset:n,extensions:i={}}=t;switch((n&&n.gltfUpAxis||"y").toLowerCase()){case"x":this._upRotationMatrix.makeRotationAxis(Cy,-Math.PI/2);break;case"y":this._upRotationMatrix.makeRotationAxis(My,Math.PI/2);break}if("3DTILES_ellipsoid"in i){let r=i["3DTILES_ellipsoid"],{ellipsoid:a}=this;a.name=r.body,r.radii?a.radius.set(...r.radii):a.radius.set(1,1,1)}return t})}prepareForTraversal(){let e=this.group,t=this.cameras,n=this.cameraMap,i=this.cameraInfo;for(;i.length>t.length;)i.pop();for(;i.length<t.length;)i.push({frustum:new wy,isOrthographic:!1,sseDenominator:-1,position:new F.Vector3,invScale:-1,pixelSize:0});os.setFromMatrixScale(e.matrixWorldInverse),Math.abs(Math.max(os.x-os.y,os.x-os.z))>1e-6&&console.warn("ThreeTilesRenderer : Non uniform scale used for tile which may cause issues when calculating screen space error.");for(let r=0,a=i.length;r<a;r++){let o=t[r],s=i[r],c=s.frustum,l=s.position,u=n.get(o);(u.width===0||u.height===0)&&console.warn("TilesRenderer: resolution for camera error calculation is not set.");let d=o.projectionMatrix.elements;if(s.isOrthographic=d[15]===1,s.isOrthographic){let p=2/d[0],f=2/d[5];s.pixelSize=Math.max(f/u.height,p/u.width)}else s.sseDenominator=2/d[5]/u.height;Xl.copy(e.matrixWorld),Xl.premultiply(o.matrixWorldInverse),Xl.premultiply(o.projectionMatrix),c.setFromProjectionMatrix(Xl,o.coordinateSystem,o.reversedDepth),l.set(0,0,0),l.applyMatrix4(o.matrixWorld),l.applyMatrix4(e.matrixWorldInverse)}}update(){if(super.update(),this.cameras.length===0&&this.root){let e=!1;this.invokeAllPlugins(t=>e||(e=!!(t!==this&&t.calculateTileViewError))),e===!1&&console.warn("TilesRenderer: no cameras defined. Cannot update 3d tiles.")}}preprocessNode(e,t,n=null){super.preprocessNode(e,t,n);let i=new F.Matrix4;if(e.transform){let o=e.transform;for(let s=0;s<16;s++)i.elements[s]=o[s]}n&&i.premultiply(n.engineData.transform);let r=new F.Matrix4().copy(i).invert(),a=new vy;"sphere"in e.boundingVolume&&a.setSphereData(...e.boundingVolume.sphere,i),"box"in e.boundingVolume&&a.setObbData(e.boundingVolume.box,i),"region"in e.boundingVolume&&a.setRegionData(this.ellipsoid,...e.boundingVolume.region),e.engineData.transform=i,e.engineData.transformInverse=r,e.engineData.boundingVolume=a,e.engineData.geometry=null,e.engineData.materials=null,e.engineData.textures=null,e.toJSON=Ty}async parseTile(e,t,n,i,r){let a=t.engineData,o=Il(i),s=this.fetchOptions,c=this.manager,l=null,u=a.transform,d=this._upRotationMatrix,p=(sa(e)||n).toLowerCase();switch(p){case"b3dm":{let m=new lu(c);m.workingPath=o,m.fetchOptions=s,m.adjustmentTransform.copy(d),l=m.parse(e);break}case"pnts":{let m=new cu(c);m.workingPath=o,m.fetchOptions=s,l=m.parse(e);break}case"i3dm":{let m=new uu(c);m.workingPath=o,m.fetchOptions=s,m.adjustmentTransform.copy(d),m.ellipsoid.copy(this.ellipsoid),l=m.parse(e);break}case"cmpt":{let m=new Lf(c);m.workingPath=o,m.fetchOptions=s,m.adjustmentTransform.copy(d),m.ellipsoid.copy(this.ellipsoid),l=m.parse(e).then(S=>S.scene);break}case"gltf":case"glb":{let m=c.getHandler("path.gltf")||c.getHandler("path.glb")||new ql.GLTFLoader(c);m.setWithCredentials(s.credentials==="include"),m.setRequestHeader(s.headers||{}),s.credentials==="include"&&s.mode==="cors"&&m.setCrossOrigin("use-credentials");let S=m.resourcePath||m.path||o;!/[\\/]$/.test(S)&&S.length&&(S+="/"),l=m.parseAsync(e,S).then(M=>{M.scene=M.scene||new F.Group;let{scene:C}=M;return C.updateMatrix(),C.matrix.multiply(d).decompose(C.position,C.quaternion,C.scale),M});break}default:l=this.invokeOnePlugin(m=>m.parseToMesh&&m.parseToMesh(e,t,n,i,r));break}let f=await l;if(f===null)throw Error(`TilesRenderer: Content type "${p}" not supported.`);let g,y;f.isObject3D?(g=f,y=null):(g=f.scene,y=f),g.updateMatrix(),g.matrix.premultiply(u),g.matrix.decompose(g.position,g.quaternion,g.scale),await this.invokeAllPlugins(m=>m.processTileModel&&m.processTileModel(g,t)),g.traverse(m=>{m[Df]=m.frustumCulled,m.userData.tile=t}),Ef(g,!this.autoDisableRendererCulling);let T=[],x=[],h=[];if(g.traverse(m=>{if(m.geometry&&x.push(m.geometry),m.material){let S=m.material;T.push(m.material);for(let M in S){let C=S[M];C&&C.isTexture&&h.push(C)}}}),r.aborted){for(let m=0,S=h.length;m<S;m++){let M=h[m];M.image instanceof ImageBitmap&&M.image.close(),M.dispose()}return}a.materials=T,a.geometry=x,a.textures=h,a.scene=g,a.metadata=y}disposeTile(e){super.disposeTile(e);let t=e.engineData;if(t.scene){let n=t.materials,i=t.geometry,r=t.textures,a=t.scene.parent;t.scene.traverse(o=>{o.userData.meshFeatures&&o.userData.meshFeatures.dispose(),o.userData.structuralMetadata&&o.userData.structuralMetadata.dispose()});for(let o=0,s=i.length;o<s;o++)i[o].dispose();for(let o=0,s=n.length;o<s;o++)n[o].dispose();for(let o=0,s=r.length;o<s;o++){let c=r[o];c.image instanceof ImageBitmap&&c.image.close(),c.dispose()}a&&a.remove(t.scene),t.scene=null,t.materials=null,t.textures=null,t.geometry=null,t.metadata=null}}setTileActive(e,t){super.setTileActive(e,t);let n=e.engineData.scene;n&&(t?(n.parent=this.group,n.updateMatrixWorld(!0)):n.parent=null)}setTileVisible(e,t){let n=e.engineData.scene,{activeTiles:i,group:r}=this;n&&(t?r.add(n):(r.remove(n),i.has(e)&&(n.parent=r))),super.setTileVisible(e,t)}calculateBytesUsed(e,t){let n=this._bytesUsed;return!n.has(e)&&t&&n.set(e,Sy(t)),n.get(e)??null}calculateTileViewError(e,t){let n=e.engineData,i=this.cameras,r=this.cameraInfo,a=n.boundingVolume,o=!1,s=0,c=1/0,l=0,u=1/0;for(let d=0,p=i.length;d<p;d++){let f=r[d],g,y;if(f.isOrthographic){let x=f.pixelSize;g=e.geometricError/x,y=1/0}else{let x=f.sseDenominator;y=a.distanceToPoint(f.position),g=y===0?1/0:e.geometricError/(y*x)}let T=r[d].frustum;a.intersectsFrustum(T)&&(o=!0,s=Math.max(s,g),c=Math.min(c,y)),l=Math.max(l,g),u=Math.min(u,y)}o?(t.inView=!0,t.error=s,t.distanceFromCamera=c):(t.inView=!1,t.error=l,t.distanceFromCamera=u)}dispose(){super.dispose(),this.group.removeFromParent()}};var Q=require("three"),$f=require("three/addons/loaders/GLTFLoader.js"),fu=require("three/addons/postprocessing/Pass.js");var sC=Object.freeze({fill:"#cccccc",stroke:"transparent",strokeWidth:1,radius:2,order:0,visible:!0});var Nf=new Ja;Nf.maxJobs=10,Nf.priorityCallback=(e,t)=>{let n=e.tile,i=t.tile,r=n.internal.renderer,a=i.internal.renderer,o=r.visibleTiles.has(n);return o===a.visibleTiles.has(i)?es(n,i):o?1:-1};var Of=new Q.Vector3;function cs(e,t){if(e.isInterleavedBufferAttribute||e.array instanceof t)return e;let n=t===Int8Array||t===Int16Array||t===Int32Array?-1:0,i=new Q.BufferAttribute(new t(e.count*e.itemSize),e.itemSize,!0),r=e.itemSize,a=e.count;for(let o=0;o<a;o++)for(let s=0;s<r;s++){let c=Q.MathUtils.clamp(e.getComponent(o,s),n,1);i.setComponent(o,s,c)}return i}function Py(e,t=Int16Array){let n=e.geometry,i=n.attributes,r=i.position;if(r.isInterleavedBufferAttribute||r.array instanceof t)return r;let a=new Q.BufferAttribute(new t(r.count*r.itemSize),r.itemSize,!1),o=r.itemSize,s=r.count;n.computeBoundingBox();let c=n.boundingBox,{min:l,max:u}=c,d=2**(8*t.BYTES_PER_ELEMENT-1)-1,p=-d;for(let f=0;f<s;f++)for(let g=0;g<o;g++){let y=g===0?"x":g===1?"y":"z",T=l[y],x=u[y],h=Q.MathUtils.mapLinear(r.getComponent(f,g),T,x,p,d);a.setComponent(f,g,h)}c.getCenter(Of).multiply(e.scale).applyQuaternion(e.quaternion),e.position.add(Of),e.scale.x*=.5*(u.x-l.x)/d,e.scale.y*=.5*(u.y-l.y)/d,e.scale.z*=.5*(u.z-l.z)/d,i.position=a,e.geometry.boundingBox=null,e.geometry.boundingSphere=null,e.updateMatrixWorld()}var gu=class{constructor(e){this._options={generateNormals:!1,disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!1,uvType:Int8Array,normalType:Int8Array,positionType:Int16Array,...e},this.name="TILES_COMPRESSION_PLUGIN",this.priority=-100}processTileModel(e,t){let{generateNormals:n,disableMipmaps:i,compressIndex:r,compressUvs:a,compressNormals:o,compressPosition:s,uvType:c,normalType:l,positionType:u}=this._options;e.traverse(d=>{if(d.material&&i){let p=d.material;for(let f in p){let g=p[f];g&&g.isTexture&&g.generateMipmaps&&(g.generateMipmaps=!1,g.minFilter=Q.LinearFilter)}}if(d.geometry){let p=d.geometry,f=p.attributes;if(a){let{uv:g,uv1:y,uv2:T,uv3:x}=f;g&&(f.uv=cs(g,c)),y&&(f.uv1=cs(y,c)),T&&(f.uv2=cs(T,c)),x&&(f.uv3=cs(x,c))}if(n&&!f.normals&&p.computeVertexNormals(),o&&f.normals&&(f.normals=cs(f.normals,l)),s&&Py(d,u),r&&p.index){let g=f.position.count,y=p.index,T=g>65535?Uint32Array:g>255?Uint16Array:Uint8Array;if(!(y.array instanceof T)){let x=new T(p.index.count);x.set(y.array);let h=new Q.BufferAttribute(x,1);p.setIndex(h)}}}})}};function An(e,t,n){return e&&t in e?e[t]:n}function Kf(e){return e!=="BOOLEAN"&&e!=="STRING"&&e!=="ENUM"}function Ay(e){return/^FLOAT/.test(e)}function hs(e){return/^VEC/.test(e)}function ms(e){return/^MAT/.test(e)}function Zf(e,t,n,i=null){return ms(n)||hs(n)?i.fromArray(e,t):e[t]}function hu(e){let{type:t,componentType:n}=e;switch(t){case"SCALAR":return n==="INT64"?0n:0;case"VEC2":return new Q.Vector2;case"VEC3":return new Q.Vector3;case"VEC4":return new Q.Vector4;case"MAT2":return new Q.Matrix2;case"MAT3":return new Q.Matrix3;case"MAT4":return new Q.Matrix4;case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return 0}}function If(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 ps(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 Ey(e,t=null){if(e.array){t=t&&Array.isArray(t)?t:[],t.length=e.count;for(let n=0,i=t.length;n<i;n++)t[n]=Yl(e,t[n])}else t=Yl(e,t);return t}function Yl(e,t=null){let n=e.default,i=e.type;if(t||(t=hu(e)),n===null){switch(i){case"SCALAR":return 0;case"VEC2":return t.set(0,0);case"VEC3":return t.set(0,0,0);case"VEC4":return t.set(0,0,0,0);case"MAT2":return t.identity();case"MAT3":return t.identity();case"MAT4":return t.identity();case"BOOLEAN":return!1;case"STRING":return"";case"ENUM":return""}throw Error("ClassProperty: invalid type.")}else if(ms(i))t.fromArray(n);else if(hs(i))t.fromArray(n);else return n}function Ry(e,t){if(e.noData===null)return t;let n=e.noData,i=e.type;if(Array.isArray(t))for(let o=0,s=t.length;o<s;o++)t[o]=r(t[o]);else t=r(t);return t;function r(o){return a(o)&&(o=Yl(e,o)),o}function a(o){if(ms(i)){let s=o.elements;for(let c=0,l=n.length;c<l;c++)if(n[c]!==s[c])return!1;return!0}else if(hs(i)){for(let s=0,c=n.length;s<c;s++)if(n[s]!==o.getComponent(s))return!1;return!0}else return n===o}}function Ly(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 ky(e,t){let{type:n,componentType:i,scale:r,offset:a,normalized:o}=e;if(Array.isArray(t))for(let d=0,p=t.length;d<p;d++)t[d]=s(t[d]);else t=s(t);return t;function s(d){return d=ms(n)?l(d):hs(n)?c(d):u(d),d}function c(d){return d.x=u(d.x),d.y=u(d.y),"z"in d&&(d.z=u(d.z)),"w"in d&&(d.w=u(d.w)),d}function l(d){let p=d.elements;for(let f=0,g=p.length;f<g;f++)p[f]=u(p[f]);return d}function u(d){return o&&(d=Ly(i,d)),(o||Ay(i))&&(d=d*r+a),d}}function bu(e,t,n=null){if(e.array){Array.isArray(t)||(t=Array(e.count||0)),t.length=n===null?e.count:n;for(let i=0,r=t.length;i<r;i++)If(e.type,t[i])||(t[i]=hu(e))}else If(e.type,t)||(t=hu(e));return t}function $l(e,t){for(let n in t)n in e||delete t[n];for(let n in e){let i=e[n];t[n]=bu(i,t[n])}}function By(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 Zl=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=An(t,"scale",1),this.max=An(t,"max",1/0),this.min=An(t,"min",-1/0),this.required=t.required||!1,this.noData=An(t,"noData",null),this.default=An(t,"default",null),this.semantic=An(t,"semantic",null),this.enumSet=null,this.accessorProperty=n,n&&(this.offset=An(n,"offset",this.offset),this.scale=An(n,"scale",this.scale),this.max=An(n,"max",this.max),this.min=An(n,"min",this.min)),t.type==="ENUM"&&(this.enumSet=e[this.enumType],this.componentType===null&&(this.componentType=An(this.enumSet,"valueType","UINT16")))}shapeToProperty(e,t=null){return bu(this,e,t)}resolveDefaultElement(e){return Yl(this,e)}resolveDefault(e){return Ey(this,e)}resolveNoData(e){return Ry(this,e)}resolveEnumsToStrings(e){let t=this.enumSet;if(this.type==="ENUM")if(Array.isArray(e))for(let i=0,r=e.length;i<r;i++)e[i]=n(e[i]);else e=n(e);return e;function n(i){let r=t.values.find(a=>a.value===i);return r===null?"":r.name}}adjustValueScaleOffset(e){return Kf(this.type)?ky(this,e):e}},vu=class{constructor(e,t={},n={},i=null){this.definition=e,this.class=t[e.class],this.className=e.class,this.enums=n,this.data=i,this.name="name"in e?e.name:null,this.properties=null}getPropertyNames(){return Object.keys(this.class.properties)}includesData(e){return!!this.definition.properties[e]}dispose(){}_initProperties(e=Zl){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}},Dy=class extends Zl{constructor(e,t,n=null){super(e,t,n),this.attribute=n?.attribute??null}},Ny=class extends vu{constructor(...e){super(...e),this.isPropertyAttributeAccessor=!0,this._initProperties(Dy)}getData(e,t,n={}){let i=this.properties;$l(i,n);for(let r in i)n[r]=this.getPropertyValue(r,e,t,n[r]);return n}getPropertyValue(e,t,n,i=null){if(t>=this.count)throw Error("PropertyAttributeAccessor: Requested index is outside the range of the buffer.");let r=this.properties[e],a=r.type;if(!r)throw Error("PropertyAttributeAccessor: Requested class property does not exist.");if(!this.definition.properties[e])return r.resolveDefault(i);i=r.shapeToProperty(i);let o=n.getAttribute(r.attribute.toLowerCase());if(ms(a)){let s=i.elements;for(let c=s.length;0<c;)s[0]=o.getComponent(t,0)}else if(hs(a))i.fromBufferAttribute(o,t);else if(a==="SCALAR"||a==="ENUM")i=o.getX(t);else throw Error("StructuredMetadata.PropertyAttributeAccessor: BOOLEAN and STRING types are not supported by property attributes.");return i=r.adjustValueScaleOffset(i),i=r.resolveEnumsToStrings(i),i=r.resolveNoData(i),i}},Oy=class extends Zl{constructor(e,t,n=null){super(e,t,n),this.values=n?.values??null,this.valueLength=By(this.type),this.arrayOffsets=An(n,"arrayOffsets",null),this.stringOffsets=An(n,"stringOffsets",null),this.arrayOffsetType=An(n,"arrayOffsetType","UINT32"),this.stringOffsetType=An(n,"stringOffsetType","UINT32")}getArrayLengthFromId(e,t){let n=this.count;if(this.arrayOffsets!==null){let{arrayOffsets:i,arrayOffsetType:r}=this,a=new(ps(r))(e[i]);n=a[t+1]-a[t]}return n}getIndexOffsetFromId(e,t){let n=t;if(this.arrayOffsets){let{arrayOffsets:i,arrayOffsetType:r}=this;n=new(ps(r))(e[i])[n]}else this.array&&(n*=this.count);return n}},Iy=class extends vu{constructor(...e){super(...e),this.isPropertyTableAccessor=!0,this.count=this.definition.count,this._initProperties(Oy)}getData(e,t={}){let n=this.properties;$l(n,t);for(let i in n)t[i]=this.getPropertyValue(i,e,t[i]);return t}_readValueAtIndex(e,t,n,i=null){let r=this.properties[e],{componentType:a,type:o}=r,s=this.data,c=s[r.values],l=new(ps(a,o))(c),u=r.getIndexOffsetFromId(s,t);if(Kf(o)||o==="ENUM")return Zf(l,(u+n)*r.valueLength,o,i);if(o==="STRING"){let d=u+n,p=0;if(r.stringOffsets!==null){let{stringOffsets:g,stringOffsetType:y}=r,T=new(ps(y))(s[g]);p=T[d+1]-T[d],d=T[d]}let f=new Uint8Array(l.buffer,d,p);i=new TextDecoder().decode(f)}else if(o==="BOOLEAN"){let d=u+n,p=Math.floor(d/8),f=d%8;i=(l[p]>>f&1)==1}return i}getPropertyValue(e,t,n=null){if(t>=this.count)throw Error("PropertyTableAccessor: Requested index is outside the range of the table.");let i=this.properties[e];if(!i)throw Error("PropertyTableAccessor: Requested property does not exist.");if(!this.definition.properties[e])return i.resolveDefault(n);let r=i.array,a=this.data,o=i.getArrayLengthFromId(a,t);if(n=i.shapeToProperty(n,o),r)for(let s=0,c=n.length;s<c;s++)n[s]=this._readValueAtIndex(e,t,s,n[s]);else n=this._readValueAtIndex(e,t,0,n);return n=i.adjustValueScaleOffset(n),n=i.resolveEnumsToStrings(n),n=i.resolveNoData(n),n}},ds=new Q.Box2,zf=class{constructor(){this._renderer=new Q.WebGLRenderer,this._target=new Q.WebGLRenderTarget(1,1),this._texTarget=new Q.WebGLRenderTarget,this._quad=new fu.FullScreenQuad(new Q.ShaderMaterial({blending:Q.CustomBlending,blendDst:Q.ZeroFactor,blendSrc:Q.OneFactor,uniforms:{map:{value:null},pixel:{value:new Q.Vector2}},vertexShader:`
|
|
3673
3673
|
void main() {
|
|
3674
3674
|
|
|
3675
3675
|
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
|
|
@@ -3684,6 +3684,6 @@ void main() {
|
|
|
3684
3684
|
gl_FragColor = texelFetch( map, pixel, 0 );
|
|
3685
3685
|
|
|
3686
3686
|
}
|
|
3687
|
-
`}))}increaseSizeTo(e){this._target.setSize(Math.max(this._target.width,e),1)}readDataAsync(e){let{_renderer:t,_target:n}=this;return t.readRenderTargetPixelsAsync(n,0,0,e.length/4,1,e)}readData(e){let{_renderer:t,_target:n}=this;t.readRenderTargetPixels(n,0,0,e.length/4,1,e)}renderPixelToTarget(e,t,n){let{_renderer:i,_target:r}=this;ds.min.copy(t),ds.max.copy(t),ds.max.x+=1,ds.max.y+=1,i.initRenderTarget(r),i.copyTextureToTexture(e,r.texture,ds,n,0)}},Li=new class{constructor(){let e=null;Object.getOwnPropertyNames(zf.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new zf),e[t](...n)))})}},Uf=new Q.Vector2,Vf=new Q.Vector2,Ff=new Q.Vector2;function zy(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function Jf(e,t,n=[,,,]){let i=3*t,r=3*t+1,a=3*t+2;return e.index&&(i=e.index.getX(i),r=e.index.getX(r),a=e.index.getX(a)),n[0]=i,n[1]=r,n[2]=a,n}function Qf(e,t,n,i,r){let[a,o,s]=i,c=zy(e,t);Uf.fromBufferAttribute(c,a),Vf.fromBufferAttribute(c,o),Ff.fromBufferAttribute(c,s),r.set(0,0,0).addScaledVector(Uf,n.x).addScaledVector(Vf,n.y).addScaledVector(Ff,n.z)}function eg(e,t,n,i){let r=e.x-Math.floor(e.x),a=e.y-Math.floor(e.y),o=Math.floor(r*t%t),s=Math.floor(a*n%n);return i.set(o,s),i}var jf=new Q.Vector2,Hf=new Q.Vector2,Gf=new Q.Vector2,Uy=class extends Zl{constructor(e,t,n=null){super(e,t,n),this.channels=An(n,"channels",[0]),this.index=An(n,"index",null),this.texCoord=An(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let i=this.type;if(i==="BOOLEAN"||i==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return Zf(e,t*this.valueLength,i,n)}},Vy=class extends vu{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(Uy)}getData(e,t,n,i={}){let r=this.properties;$l(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return this.getPropertyValuesAtTexel(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}async getDataAsync(e,t,n,i={}){let r=this.properties;$l(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return await this.getPropertyValuesAtTexelAsync(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,i,r=[]){for(;r.length<e.length;)r.push(null);r.length=e.length,Li.increaseSizeTo(r.length);let a=this.data,o=this.definition.properties,s=this.properties,c=Jf(i,t);for(let d=0,p=e.length;d<p;d++){let f=e[d];if(!o[f])continue;let g=s[f],y=a[g.index];Qf(i,g.texCoord,n,c,jf),eg(jf,y.image.width,y.image.height,Hf),Gf.set(d,0),Li.renderPixelToTarget(y,Hf,Gf)}let l=new Uint8Array(e.length*4);if(this._asyncRead)return Li.readDataAsync(l).then(()=>(u.call(this),r));return Li.readData(l),u.call(this),r;function u(){for(let d=0,p=e.length;d<p;d++){let f=e[d],g=s[f],y=g.type;if(r[d]=bu(g,r[d]),!g)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!o[f]){r[d]=g.resolveDefault(r);continue}let T=g.valueLength*(g.count||1),x=g.channels.map(S=>l[4*d+S]),h=g.componentType,m=new(ps(h,y))(T);if(new Uint8Array(m.buffer).set(x),g.array){let S=r[d];for(let M=0,C=S.length;M<C;M++)S[M]=g.readDataFromBuffer(m,M,S[M])}else r[d]=g.readDataFromBuffer(m,0,r[d]);r[d]=g.adjustValueScaleOffset(r[d]),r[d]=g.resolveEnumsToStrings(r[d]),r[d]=g.resolveNoData(r[d])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},mu=class{constructor(e,t,n,i=null,r=null){let{schema:a,propertyTables:o=[],propertyTextures:s=[],propertyAttributes:c=[]}=e,{enums:l,classes:u}=a,d=o.map(g=>new Iy(g,u,l,n)),p=[],f=[];i&&(i.propertyTextures&&(p=i.propertyTextures.map(g=>new Vy(s[g],u,l,t))),i.propertyAttributes&&(f=i.propertyAttributes.map(g=>new Ny(c[g],u,l)))),this.schema=a,this.tableAccessors=d,this.textureAccessors=p,this.attributeAccessors=f,this.object=r,this.textures=t,this.nodeMetadata=i}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let i=Math.min(e.length,t.length);n.length=i;for(let r=0;r<i;r++){let a=this.tableAccessors[e[r]];n[r]=a.getData(t[r],n[r])}}if(Array.isArray(e)!==Array.isArray(n)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return n}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,n)=>n)),Array.isArray(e))return e.map(t=>{let n=this.tableAccessors[t];return{name:n.name,className:n.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;for(let r=0;r<i.length;r++)n[r]=i[r].getData(e,t,this.object.geometry,n[r]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;let r=[];for(let a=0;a<i.length;a++){let o=i[a].getDataAsync(e,t,this.object.geometry,n[a]).then(s=>{n[a]=s});r.push(o)}return await Promise.all(r),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let i=0;i<n.length;i++)t[i]=n[i].getData(e,this.object.geometry,t[i]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},us="EXT_structural_metadata";function Fy(e,t=[]){let n=e.json.textures?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{index:o}=r[a];i[o]===null&&(i[o]=e.loadTexture(o))}}),Promise.all(i)}function jy(e,t=[]){let n=e.json.bufferViews?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{values:o,arrayOffsets:s,stringOffsets:c}=r[a];i[o]===null&&(i[o]=e.getDependency("bufferView",o)),i[s]===null&&(i[s]=e.getDependency("bufferView",s)),i[c]===null&&(i[c]=e.getDependency("bufferView",c))}}),Promise.all(i)}var tg=class{constructor(e){this.parser=e,this.name=us}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(us))return;let i=null,r=t.json.extensions[us];if(r.schemaUri){let{manager:c,path:l,requestHeader:u,crossOrigin:d}=t.options,p=new URL(r.schemaUri,l).toString(),f=new Q.FileLoader(c);f.setCrossOrigin(d),f.setResponseType("json"),f.setRequestHeader(u),i=f.loadAsync(p).then(g=>{r={...r,schema:g}})}let[a,o]=await Promise.all([Fy(t,r.propertyTextures),jy(t,r.propertyTables),i]),s=new mu(r,a,o);e.userData.structuralMetadata=s,e.traverse(c=>{if(t.associations.has(c)){let{meshes:l,primitives:u}=t.associations.get(c),d=t.json.meshes[l]?.primitives[u];if(d&&d.extensions&&d.extensions[us]){let p=d.extensions[us];c.userData.structuralMetadata=new mu(r,a,o,p,c)}else c.userData.structuralMetadata=s}})}},Wf=new Q.Vector2,Xf=new Q.Vector2,qf=new Q.Vector2;function Hy(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var ng=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(i=>{let{texture:r,...a}=i,o={label:null,propertyTable:null,nullFeatureId:null,...a};return r&&(o.texture={texCoord:0,channels:[0],...r}),o})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:n,textures:i,featureIds:r}=this,a=Array(r.length).fill(null),o=r.length;Li.increaseSizeTo(o);let s=Jf(n,e),c=s[Hy(t)];for(let d=0,p=r.length;d<p;d++){let f=r[d],g="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let y=i[f.texture.index];Qf(n,f.texture.texCoord,t,s,Wf),eg(Wf,y.image.width,y.image.height,Xf),qf.set(d,0),Li.renderPixelToTarget(i[f.texture.index],Xf,qf)}else if("attribute"in f){let y=n.getAttribute(`_feature_id_${f.attribute}`).getX(c);y!==g&&(a[d]=y)}else{let y=c;y!==g&&(a[d]=y)}}let l=new Uint8Array(o*4);if(this._asyncRead)return Li.readDataAsync(l).then(()=>(u(),a));return Li.readData(l),u(),a;function u(){let d=new Uint32Array(1);for(let p=0,f=r.length;p<f;p++){let g=r[p],y="nullFeatureId"in g?g.nullFeatureId:null;if("texture"in g){let{channels:T}=g.texture,x=T.map(m=>l[4*p+m]);new Uint8Array(d.buffer).set(x);let h=d[0];h!==y&&(a[p]=h)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Kl="EXT_mesh_features";function Yf(e,t,n){e.traverse(i=>{if(t.associations.has(i)){let{meshes:r,primitives:a}=t.associations.get(i),o=t.json.meshes[r]?.primitives[a];o&&o.extensions&&o.extensions[Kl]&&n(i,o.extensions[Kl])}})}var rg=class{constructor(e){this.parser=e,this.name=Kl}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Kl))return;let i=t.json.textures?.length||0,r=Array(i).fill(null);Yf(e,t,(o,{featureIds:s})=>{s.forEach(c=>{if(c.texture&&r[c.texture.index]===null){let l=c.texture.index;r[l]=t.loadTexture(l)}})});let a=await Promise.all(r);Yf(e,t,(o,s)=>{o.userData.meshFeatures=new ng(o.geometry,a,s)})}},ig=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])}}},xu=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 $f.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 ig),this.metadata&&(t.register(()=>new tg),t.register(()=>new rg)),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:lC}=Q.MathUtils;var cC=new fu.FullScreenQuad(new Q.MeshBasicMaterial),Gy=new Q.DataTexture(new Uint8Array([255,255,255,255]),1,1);Gy.needsUpdate=!0;var Wy=0,Xy=1,qy=2,Yy=3,$y=4,Ky=5,Zy=6,Jy=7,Qy=8,e1=9,t1=10,n1=11,dC=Object.freeze({NONE:Wy,SCREEN_ERROR:Xy,GEOMETRIC_ERROR:qy,DISTANCE:Yy,DEPTH:$y,RELATIVE_DEPTH:Ky,IS_LEAF:Zy,RANDOM_COLOR:Jy,RANDOM_NODE_COLOR:Qy,CUSTOM_COLOR:e1,LOAD_ORDER:t1,INDEXED_COLOR:n1});var uC=Math.PI/4,pC=3/5;var Ri={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var hC=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:i}=this;return n in i||(t.setHSL(Math.random(),1,.5),i[n]=t.getHex()),t.set(i[n])}};var mC={[Ri.NONE]:16777215,[Ri.NOT_READY]:7829367,[Ri.NO_FIT]:2250239,[Ri.DEPTH]:4473924,[Ri.OCCUPANCY]:65535,[Ri.SPACING]:16776960,[Ri.ANGLE]:16711680,[Ri.FACING]:16711935};var fC=Math.PI/180;var gC=Qa*Math.PI*2;var bC=Qa*Math.PI*2;var og=require("three/examples/jsm/loaders/DRACOLoader.js"),sg=require("three/examples/jsm/loaders/KTX2Loader.js"),lg=require("three/examples/jsm/libs/meshopt_decoder.module.js"),Yr=require("three");var fs=require("three");function ag(e,t,n,i){for(let r=0;r<e.count;r+=1)for(let a=0;a<e.itemSize;a+=1)t.setComponent(r,a,fs.MathUtils.clamp(e.getComponent(r,a),n,i));return t}function r1(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let i=e.getComponent(t,n);if(!Number.isFinite(i)||i<0||i>1)return!1}return!0}var Jl=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let i=n.geometry;if(!i)return;let r=i.attributes.normal;r&&!r.isInterleavedBufferAttribute&&!(r.array instanceof Int16Array)&&(i.attributes.normal=ag(r,new fs.BufferAttribute(new Int16Array(r.count*r.itemSize),r.itemSize,!0),-1,1));for(let a of["uv","uv1","uv2","uv3"]){let o=i.attributes[a];!o||o.isInterleavedBufferAttribute||o.array instanceof Uint16Array||!r1(o)||(i.attributes[a]=ag(o,new fs.BufferAttribute(new Uint16Array(o.count*o.itemSize),o.itemSize,!0),0,1))}})}};var gs=require("react/jsx-runtime");function i1(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 yu({url:e,rotation:t=[0,0,0],errorTarget:n=64,cacheSize:i=800,memoryBudgetMB:r=800,decoderConfig:a,objectBindings:o,itemMaterials:s,sceneConfig:c,selectedItem:l,panelHoveredItem:u,highlightOnHover:d=!0,onItemClick:p,onItemHover:f,onObjectCatalog:g,onTilesetBounds:y,onModelLoaded:T,onLoadError:x,nodeRefsOut:h,onNodeRefsChange:m,materialRefsOut:S,explodeFactor:M=0,suspendBindingTransforms:C=!1}){let{camera:L,gl:b,invalidate:_}=(0,Ql.useThree)(),v=(0,nt.useRef)(null),[P,z]=(0,nt.useState)(null),E=(0,nt.useRef)({onItemClick:p,onItemHover:f,onObjectCatalog:g,onTilesetBounds:y,onModelLoaded:T,onLoadError:x,onNodeRefsChange:m});E.current={onItemClick:p,onItemHover:f,onObjectCatalog:g,onTilesetBounds:y,onModelLoaded:T,onLoadError:x,onNodeRefsChange:m};let V=(0,nt.useRef)(!0),[A,X]=(0,nt.useState)(null),j=(0,nt.useRef)(null);j.current=A;let k=(0,nt.useRef)([]),B=(0,nt.useRef)(!1);(0,nt.useEffect)(()=>{let le=new El;return X(le),()=>le.dispose()},[e]);let Y=(0,nt.useRef)(null),q=(0,nt.useRef)(0),ue=(0,nt.useRef)(!1),Ee=r*1024*1024,be=(0,nt.useRef)(!1),Ce=a?.dracoDecoderPath??Ud,De=a?.ktx2TranscoderPath??Vd,ze=a?.meshopt??!0,[se,Lt]=(0,nt.useState)(null);(0,nt.useEffect)(()=>{ue.current=!1,be.current=!1;let le=new pu(e);le.loadAncestors=!0,le.downloadQueue.maxJobsPerOrigin=4,le.parseQueue.maxJobs=2;let J=Ce?new og.DRACOLoader().setDecoderPath(Ce).setWorkerLimit(2):null,ee=De?new sg.KTX2Loader().setTranscoderPath(De).detectSupport(b):null;return le.registerPlugin(new xu({dracoLoader:J,ktxLoader:ee,meshoptDecoder:ze?lg.MeshoptDecoder:null,autoDispose:!1})),le.registerPlugin(new gu({disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),le.registerPlugin(new Jl),Lt(le),window.__riTiles=le,()=>{le.forEachLoadedModel(Ve=>Qi(Ve)),le.dispose(),J?.dispose(),ee?.dispose(),Lt(Ve=>Ve===le?null:Ve)}},[Ce,b,De,ze,e]),(0,nt.useEffect)(()=>{se&&(se.errorTarget=n,se.lruCache.maxSize=i,se.lruCache.minSize=Math.max(1,Math.floor(i*.75)),se.lruCache.maxBytesSize=Ee,se.lruCache.minBytesSize=Ee*.75,_())},[i,n,_,Ee,se]);let Xe=(0,nt.useMemo)(()=>{let le=o??{};return{objectBindings:le,keyByModelObject:jm(le),itemMaterials:s,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:l??null,hoveredKey:Hm(P,u),highlightOnHover:d,suspendTransforms:C,invalidate:_}},[P,d,_,s,o,u,c,l,C]),Ge=(0,nt.useCallback)(()=>{if(!se)return;let le=Qt.current,J=B.current?j.current?.nodesByBinding(le)??{}:{},ee={};se.group.traverse(xe=>{if(!xe.isMesh)return;let ot=qd(xe);if(!ot)return;let gt=le.keyByModelObject[ot]??ot;if(!le.objectBindings[gt])return;J[gt]||(J[gt]=xe);let At=xe.material;At&&(ee[gt]=At)});let Ve=h?.current??{},tt=Object.keys(Ve),Fe=tt.length!==Object.keys(J).length||tt.some(xe=>Ve[xe]!==J[xe]);h&&(h.current=J),S&&(S.current=ee),(Fe||!h)&&E.current.onNodeRefsChange?.()},[S,h,se]),$e=(0,nt.useCallback)(le=>Pl(le,Xe),[Xe]),rt=(0,nt.useCallback)(le=>Wm(le,Xe),[Xe]),it=(0,nt.useRef)(rt);it.current=rt;let Qt=(0,nt.useRef)(Xe);Qt.current=Xe;let qe=(0,nt.useCallback)(()=>{let le=Y.current,J=q.current;return!le||J<=0?Qt.current:{...Qt.current,explode:{factor:J,centre:le.centre,radius:le.radius}}},[]);(0,nt.useEffect)(()=>{se&&(rt(se.group),V.current=!0,se.forEachLoadedModel(le=>{rt(le),Za(le,qe())}),_())},[rt,_,qe,se]),(0,nt.useEffect)(()=>{let le=i1(e);if(!le)return;let J=!1;return fetch(le).then(ee=>ee.ok?ee.json():null).then(ee=>{J||!ee?.objects||(k.current=ee.objects,B.current=ee.bindingFrame==="gltf-identity-v2",B.current&&j.current?.setCatalog(ee.objects),V.current=!0,E.current.onObjectCatalog?.(ee.objects),_())}).catch(()=>{}),()=>{J=!0}},[e,_,A]),(0,nt.useEffect)(()=>{if(!se)return;let le=!1,J=()=>_(),ee=xe=>{xe.scene&&(xe.scene.traverse(ot=>{let gt=ot.material;for(let At of Array.isArray(gt)?gt:gt?[gt]:[])At.transparent&&At.side===Yr.DoubleSide&&(At.forceSinglePass=!0)}),it.current(xe.scene),Za(xe.scene,qe()),Oa(xe.scene)),V.current=!0,le||(le=!0,E.current.onModelLoaded?.(se.group)),_()},Ve=xe=>{E.current.onLoadError?.(xe.error)},tt=xe=>{xe.scene&&(Yd(xe.scene),Qi(xe.scene)),V.current=!0};se.setCamera(L),se.setResolutionFromRenderer(L,b),se.addEventListener("needs-update",J),se.addEventListener("load-model",ee),se.addEventListener("load-error",Ve),se.addEventListener("dispose-model",tt);let Fe=()=>{V.current=!0,_()};return se.addEventListener("tile-visibility-change",Fe),_(),()=>{se.removeEventListener("needs-update",J),se.removeEventListener("load-model",ee),se.removeEventListener("load-error",Ve),se.removeEventListener("dispose-model",tt),se.removeEventListener("tile-visibility-change",Fe),Yd(se.group),se.deleteCamera(L),h&&(h.current={}),S&&(S.current={})}},[L,b,_,S,h,qe,se]);let on=(0,nt.useCallback)(le=>{let J=$e(le.object);J&&(le.stopPropagation(),E.current.onItemClick?.(J.binding))},[$e,p]),Gt=(0,nt.useCallback)(le=>{let J=$e(le.object),ee=J?.key??null;ee!==v.current&&(v.current=ee,z(ee),E.current.onItemHover?.(J?.binding??null))},[$e]),Ke=(0,nt.useCallback)(()=>{v.current!==null&&(v.current=null,z(null),E.current.onItemHover?.(null))},[]);return(0,nt.useEffect)(()=>{_()},[_,se]),(0,Ql.useFrame)((le,J)=>{if(!se)return;if(se.setResolutionFromRenderer(L,b),B.current&&A){let xe=A.sync(qe(),l,C);A.updateBounds(se.root),C&&se.forEachLoadedModel(ot=>Za(ot,xe))}if(se.update(),!ue.current){let xe=new Yr.Box3;if(se.getBoundingBox(xe)){ue.current=!0,se.group.updateMatrixWorld(),xe.applyMatrix4(se.group.matrixWorld);let ot=xe.getBoundingSphere(new Yr.Sphere);Y.current={centre:ot.center.clone(),radius:xe.getSize(new Yr.Vector3).length()*.5},E.current.onTilesetBounds?.(xe),_()}}V.current&&(V.current=!1,Ge());let ee=Math.min(Math.max(M,0),1),Ve=q.current;Math.abs(Ve-ee)>1e-4?(q.current=Yr.MathUtils.lerp(Ve,ee,1-Math.exp(-6*J)),Za(se.group,qe()),_()):Ve!==ee&&(q.current=ee,Za(se.group,qe()),_()),!be.current&&se.lruCache.isFull()&&(be.current=!0,console.warn("[react-immersive] The tile memory budget is full, so no further tiles will load and the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB."));let tt=se;((tt.stats?.downloading??0)>0||(tt.stats?.parsing??0)>0||tt.loadProgress!==void 0&&tt.loadProgress<1&&!se.lruCache.isFull())&&_()}),se?(0,gs.jsxs)("group",{rotation:t,children:[A?(0,gs.jsx)("primitive",{object:A.group}):null,(0,gs.jsx)("primitive",{object:se.group,onClick:on,onPointerMove:Gt,onPointerOut:Ke})]}):null}var He=require("react"),wu=require("@react-three/drei"),ca=require("@react-three/fiber"),$r=require("three");var In=require("react/jsx-runtime"),a1=.02;function cg(e,t){let n=(0,He.useRef)(null),i=(0,ca.useThree)(l=>l.scene),r=(0,He.useRef)(null),a=(0,He.useMemo)(()=>new $r.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),o=(0,He.useMemo)(()=>new $r.Vector3,[]),s=(0,He.useMemo)(()=>new $r.Vector3,[]),c=(0,He.useMemo)(()=>new $r.Vector3,[]);return(0,He.useEffect)(()=>{r.current=null},[e.anchorNodeName]),(0,ca.useFrame)(({camera:l})=>{let u=n.current,d=u?.parent;if(!u||!d)return;let p=r.current;if(e.anchorNodeName&&(!p||!p.parent)&&(p=Dr(i,e.anchorNodeName),r.current=p),p?(p.updateWorldMatrix(!0,!1),o.copy(a).applyMatrix4(p.matrixWorld)):(o.copy(a),d.localToWorld(o)),t){let f=t.current.get(e.id);f||(f=new $r.Vector3,t.current.set(e.id,f)),f.copy(o)}c.copy(l.position).sub(o),c.lengthSq()>0?(c.normalize(),s.copy(o).addScaledVector(c,a1)):s.copy(o),d.worldToLocal(s),u.position.copy(s)}),n}function o1({annotation:e,occluders:t,worldPositionsRef:n,onClick:i,onHover:r,showAnnotationOnHover:a}){let[o,s]=(0,He.useState)(!1),c=cg(e,n),[l,u]=(0,He.useState)(!1),[d,p]=(0,He.useState)(1),f=(0,He.useRef)(null),g=(0,He.useRef)(null),y=(0,He.useRef)(null);(0,He.useEffect)(()=>()=>{f.current&&(clearTimeout(f.current),f.current=null),y.current&&(clearTimeout(y.current),y.current=null)},[]);let T=M=>{M.stopPropagation(),M.preventDefault(),f.current&&(clearTimeout(f.current),f.current=null),f.current=window.setTimeout(()=>{i?.(e),f.current=null},10)},x=M=>{M.stopPropagation(),u(!0),p(100),y.current&&(clearTimeout(y.current),y.current=null),r?.(e),a&&i?.(e)},h=M=>{M.stopPropagation(),u(!1),p(1),y.current&&clearTimeout(y.current),y.current=window.setTimeout(()=>{r?.(null),a&&r?.(null),y.current=null},50)},m=M=>{M.stopPropagation();let C=M.currentTarget;C.dataset.pointerX=String(M.clientX),C.dataset.pointerY=String(M.clientY)},S=M=>{M.stopPropagation();let C=M.currentTarget,L=parseFloat(C.dataset.pointerX||"0"),b=parseFloat(C.dataset.pointerY||"0"),_=M.clientX-L,v=M.clientY-b;Math.sqrt(_*_+v*v)<10&&T(M)};return(0,In.jsx)("group",{ref:c,children:(0,In.jsx)(wu.Html,{center:!0,occlude:t,onOcclude:s,pointerEvents:o?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:o?"none":"auto",zIndex:d},className:"annotation-html-wrapper",transparent:!0,children:(0,In.jsx)("div",{ref:g,className:`ri-annotationMarker ${l?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:o?"none":"flex"},onPointerDown:m,onPointerUp:S,onPointerEnter:x,onPointerLeave:h,onDoubleClick:M=>{M.stopPropagation(),i?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:(0,In.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function s1({annotation:e,occluders:t,popupRef:n,onClose:i,hideCloseButton:r=!1}){let[a,o]=(0,He.useState)(!1),s=cg(e),c=(0,In.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:a?"none":"block"},onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[(0,In.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,In.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!r&&(0,In.jsx)("button",{onClick:l=>{l.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&(0,In.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return(0,In.jsx)("group",{ref:s,children:(0,In.jsx)(wu.Html,{occlude:t,onOcclude:o,pointerEvents:a?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:a?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function _u({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:i,canvasRootRef:r,worldPositionsRef:a,modelLoaded:o,onAnnotationClick:s,onAnnotationHover:c,onCloseAnnotation:l,hideCloseButton:u=!1,showAnnotationOnHover:d=!1}){let p=(0,ca.useThree)(A=>A.invalidate),f=(0,ca.useThree)(A=>A.scene),[g,y]=(0,He.useState)(null),[T,x]=(0,He.useState)(!1),h=(0,He.useRef)(null),m=(0,He.useRef)(null),S=(0,He.useRef)(null),M=(0,He.useMemo)(()=>{let A=[];return f.traverse(X=>{let j=X;j.isMesh&&!j.isSkinnedMesh&&A.push({current:X})}),A},[f,e,o]),C=(0,He.useCallback)(()=>{p();let A=()=>{p(),m.current=window.requestAnimationFrame(()=>{p(),m.current=null})};m.current=window.requestAnimationFrame(A)},[p]);(0,He.useEffect)(()=>{C()},[e,C]),(0,He.useEffect)(()=>{C()},[n,C]),(0,He.useEffect)(()=>()=>{m.current!==null&&window.cancelAnimationFrame(m.current),S.current&&clearTimeout(S.current)},[]);let L=T?g:n||g,b=(0,He.useMemo)(()=>L?e.find(A=>A.id===L.id)??L:null,[L,e]),_=(0,He.useCallback)(A=>{if(T&&g?.id===A.id){x(!1),y(null),l?.();return}x(!0),y(A),s?.(A)},[T,g,s,l]),v=(0,He.useCallback)(A=>{c?.(A),d&&!T&&(S.current&&(clearTimeout(S.current),S.current=null),A?y(A):S.current=window.setTimeout(()=>{y(null),l?.(),S.current=null},100))},[T,c,d,l]),P=(0,He.useCallback)(()=>{x(!1),y(null),l?.()},[l]),z=(0,He.useCallback)(A=>{let X=A.target;if(X.closest?.(".ri-annotationMarker")||X.closest?.(".ri-viewAnnotationPopup")||X.closest?.(".annotation-html-wrapper"))return;let j=r.current;j&&j.contains(X)&&(x(!1),y(null),l?.())},[r,l]),E=(0,He.useCallback)(A=>{A.key==="Escape"&&T&&(x(!1),y(null),l?.())},[T,l]);(0,He.useEffect)(()=>{let A=r.current;return A&&(A.addEventListener("click",z),A.addEventListener("pointerdown",z)),document.addEventListener("keydown",E),()=>{A&&(A.removeEventListener("click",z),A.removeEventListener("pointerdown",z)),document.removeEventListener("keydown",E)}},[r,z,E]);let V=(0,He.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(A=>A*Math.PI/180),[t?.model.rotation]);return(0,He.useEffect)(()=>{p()},[p,V]),(0,ca.useFrame)((A,X)=>{if(!h.current)return;h.current.rotation.x=$r.MathUtils.lerp(h.current.rotation.x,V[0],1-Math.exp(-5*X)),h.current.rotation.y=$r.MathUtils.lerp(h.current.rotation.y,V[1],1-Math.exp(-5*X)),h.current.rotation.z=$r.MathUtils.lerp(h.current.rotation.z,V[2],1-Math.exp(-5*X));let{rotation:j}=h.current;Math.abs(j.x-V[0])+Math.abs(j.y-V[1])+Math.abs(j.z-V[2])>1e-4&&p()}),(0,In.jsxs)("group",{ref:h,children:[e.map(A=>{let X=`${A.worldPosition.join(",")}-${A.title}-${A.id}`;return(0,In.jsx)(o1,{annotation:A,occluders:M,worldPositionsRef:a,onClick:_,onHover:v,showAnnotationOnHover:d},X)}),b?(0,In.jsx)(s1,{annotation:b,occluders:M,popupRef:i,onClose:P,hideCloseButton:u},`popup-${b.id}`):null]})}var bs=require("react"),vs=require("@react-three/drei"),da=require("three"),On=require("react/jsx-runtime"),l1="#22d3ee",c1="#facc15";function ec(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function d1(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function tc({position:e,children:t}){return(0,On.jsx)(vs.Html,{center:!0,position:e,zIndexRange:[20,0],children:(0,On.jsx)("div",{className:"ri-measureLabel",children:t})})}function u1({box:e,unit:t}){let n=(0,bs.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,bs.useMemo)(()=>{let[s,c,l]=e.size;return new da.EdgesGeometry(new da.BoxGeometry(s||1e-4,c||1e-4,l||1e-4))},[e.size]);(0,bs.useEffect)(()=>()=>{i.dispose()},[i]);let[r,a,o]=e.size;return(0,On.jsxs)("group",{position:n,children:[(0,On.jsx)("lineSegments",{geometry:i,children:(0,On.jsx)("lineBasicMaterial",{color:c1})}),(0,On.jsxs)(tc,{position:[0,-a/2,o/2],children:["W ",ec(r,t)]}),(0,On.jsxs)(tc,{position:[-r/2,0,o/2],children:["H ",ec(a,t)]}),(0,On.jsxs)(tc,{position:[r/2,-a/2,0],children:["D ",ec(o,t)]})]})}function Su({points:e,unit:t,box:n,showDimensions:i}){return(0,On.jsxs)("group",{children:[e.map(r=>(0,On.jsx)(vs.Html,{center:!0,position:r.position,zIndexRange:[15,0],children:(0,On.jsx)("div",{className:"ri-measureDot"})},r.id)),e.slice(1).map((r,a)=>{let o=e[a].position,s=r.position,c=new da.Vector3(...o).distanceTo(new da.Vector3(...s));return(0,On.jsxs)("group",{children:[(0,On.jsx)(vs.Line,{points:[o,s],color:l1,lineWidth:2}),(0,On.jsx)(tc,{position:d1(o,s),children:ec(c,t)})]},`${e[a].id}-${r.id}`)}),i&&n?(0,On.jsx)(u1,{box:n,unit:t}):null]})}var st=require("react"),ua=require("@react-three/xr"),hg=require("@react-three/fiber"),xs=require("three"),zr=require("react/jsx-runtime"),p1=1,dg=1,h1=.1,m1=10;function f1(e,t){let[n,i,r]=e.size,a=(e.min[0]+e.max[0])/2,o=(e.min[2]+e.max[2])/2,s=Math.max(n,i,r)||1;return{scale:t==="real-world"?1:p1/s,offset:[-a,-e.min[1],-o]}}function ug(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function pg(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var g1=(0,st.forwardRef)(function({box:t,scaleMode:n,children:i,onARStateChange:r},a){let o=(0,st.useRef)(null),s=(0,st.useRef)(null),c=(0,st.useRef)(null),l=(0,ua.useXR)(X=>X.session!=null),u=(0,ua.useXR)(X=>X.mode==="immersive-ar"),d=(0,st.useMemo)(()=>t?f1(t,n):null,[t,n]),p=(0,st.useRef)(new xs.Vector3(0,0,-dg)),f=(0,st.useRef)(1),g=(0,st.useRef)(0),y=(0,st.useRef)(!0),T=(0,st.useRef)(!1),x=(0,st.useMemo)(()=>new xs.Matrix4,[]),h=(0,st.useRef)(new xs.Vector3),m=(0,st.useRef)(!1),S=(0,st.useRef)(null),M=(0,st.useRef)(!1),C=(0,st.useRef)(0),L=(0,st.useRef)(0),b=(0,st.useRef)(1),_=(0,st.useRef)(0),v=(0,st.useCallback)(()=>{if(!r||!u)return;let X={canPlace:m.current,isPlacementMode:y.current,isModelPlaced:T.current},j=S.current;j&&j.canPlace===X.canPlace&&j.isPlacementMode===X.isPlacementMode&&j.isModelPlaced===X.isModelPlaced||(S.current=X,r(X))},[u,r]),P=(0,st.useCallback)(()=>!u||!m.current?!1:(p.current.copy(h.current),T.current=!0,y.current=!1,v(),!0),[v,u]),z=(0,st.useCallback)(()=>{u&&(y.current=!0,v())},[v,u]),E=(0,st.useCallback)(()=>{let X=P();return!X&&u&&(y.current=!1,v()),X},[v,u,P]),V=(0,st.useCallback)(()=>{u&&(y.current=!1,v())},[v,u]);(0,st.useImperativeHandle)(a,()=>({placeCurrent:P,startPlacementMode:z,finishPlacementMode:E,cancelPlacementMode:V}),[V,E,P,z]),(0,st.useEffect)(()=>{if(!l){p.current.set(0,0,-dg),f.current=1,g.current=0,m.current=!1,M.current=!1,y.current=!0,T.current=!1,S.current=null;return}u&&(m.current=!1,M.current=!1,y.current=!0,T.current=!1,S.current=null,v())},[v,l,u]),(0,ua.useXRHitTest)((X,j)=>{if(!u||X.length===0){m.current&&(m.current=!1,v());return}j(x,X[0])&&(h.current.setFromMatrixPosition(x),m.current||(m.current=!0,v()))},"viewer"),(0,ua.useXRInputSourceEvent)("all","select",()=>{!u||M.current||!y.current||P()},[u,P]),(0,st.useEffect)(()=>{if(!u)return;let X=B=>{B.touches.length===2&&(M.current=!0,C.current=ug(B.touches),L.current=pg(B.touches),b.current=f.current,_.current=g.current)},j=B=>{if(!M.current||B.touches.length!==2)return;B.preventDefault();let Y=ug(B.touches);if(C.current>0){let ue=Y/C.current;f.current=Math.min(m1,Math.max(h1,b.current*ue))}let q=pg(B.touches);g.current=_.current-(q-L.current)},k=B=>{B.touches.length===0&&requestAnimationFrame(()=>{M.current=!1})};return window.addEventListener("touchstart",X),window.addEventListener("touchmove",j,{passive:!1}),window.addEventListener("touchend",k),window.addEventListener("touchcancel",k),()=>{window.removeEventListener("touchstart",X),window.removeEventListener("touchmove",j),window.removeEventListener("touchend",k),window.removeEventListener("touchcancel",k)}},[u]),(0,hg.useFrame)(()=>{let X=o.current,j=s.current;if(!X||!j)return;!l||!d?(X.visible=!0,X.position.set(0,0,0),X.rotation.set(0,0,0),j.scale.setScalar(1)):(X.visible=!u||T.current,X.position.copy(p.current),X.rotation.set(0,g.current,0),j.scale.setScalar(d.scale*f.current));let k=c.current;if(k){let B=u&&y.current&&m.current;k.visible=B,B&&k.position.copy(h.current)}});let A=l&&d?d.offset:[0,0,0];return(0,zr.jsxs)(zr.Fragment,{children:[(0,zr.jsxs)("mesh",{ref:c,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,zr.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,zr.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,zr.jsx)("group",{ref:o,children:(0,zr.jsx)("group",{ref:s,children:(0,zr.jsx)("group",{position:A,children:i})})})]})}),mg=g1;var jt=require("react"),nc=require("@react-three/fiber"),En=require("three"),b1=1.2;function Mu({controlsRef:e,sceneRef:t,config:n,playing:i,resetOnPlay:r=!1,onFinished:a,onUserInteract:o,onStop:s}){let c=(0,nc.useThree)(V=>V.invalidate),l=(0,jt.useMemo)(()=>n.waypoints??[],[n.waypoints]),u=l.length>=2,d=n.loop??!0,p=(0,jt.useMemo)(()=>{if(l.length<2)return 24;let V=0;for(let A=0;A<l.length-1;A++)V+=l[A].segmentDuration??3.5;return d&&l.length>1&&(V+=l[l.length-1].segmentDuration??3.5),Math.max(V,4)},[l,d]),f=n.duration??p,g=(0,jt.useMemo)(()=>l.map(V=>[...V.position,...V.target,V.azimuthAngle??"",V.polarAngle??"",V.segmentDuration??""].join(",")).join(";"),[l]),y=(0,jt.useMemo)(()=>{let V=[];if(l.length<2)return V;let A=0;for(let X=0;X<l.length-1;X++)A+=l[X].segmentDuration??3.5,V.push(A);return d&&l.length>1&&(A+=l[l.length-1].segmentDuration??3.5,V.push(A)),V},[l,d]),T=(0,jt.useMemo)(()=>V=>{if(l.length<2||y.length===0)return V/f;let A=y[y.length-1],X=d?V%f:Math.min(V,f),j=f>0?X/f*A:0;for(let k=0;k<y.length;k++)if(j<=y[k]){let B=k===0?0:y[k-1],Y=y[k]-B,q=Y>0?(j-B)/Y:0,ue=d?l.length:l.length-1,Ee=k/ue,be=1/ue;return Ee+q*be}return 1},[l.length,y,f,d]),x=(0,jt.useMemo)(()=>u?{position:new En.CatmullRomCurve3(l.map(V=>new En.Vector3(...V.position)),d,"catmullrom",.5),target:new En.CatmullRomCurve3(l.map(V=>new En.Vector3(...V.target)),d,"catmullrom",.5)}:null,[g,u,d]),h=(0,jt.useMemo)(()=>{if(!u||!l.every(A=>Number.isFinite(A.azimuthAngle)&&Number.isFinite(A.polarAngle)))return null;let V=l.map(A=>({azimuth:A.azimuthAngle,polar:A.polarAngle,distance:new En.Vector3(...A.position).distanceTo(new En.Vector3(...A.target))}));for(let A=1;A<V.length;A+=1){let X=V[A-1].azimuth,j=V[A].azimuth;V[A].azimuth=j+Math.round((X-j)/(Math.PI*2))*Math.PI*2}return V},[g,u]),m=(0,jt.useRef)(0),S=(0,jt.useRef)(0),M=(0,jt.useRef)(new En.Vector3),C=(0,jt.useRef)(new En.Vector3),L=(0,jt.useRef)(!1),b=(0,jt.useRef)(0),_=(0,jt.useRef)(!1),v=(0,jt.useRef)(null),P=(0,jt.useMemo)(()=>new En.Vector3,[]),z=(0,jt.useMemo)(()=>new En.Vector3,[]),E=(0,jt.useMemo)(()=>new En.Spherical,[]);return(0,jt.useEffect)(()=>{m.current=0,b.current=0,S.current=0,_.current=!1},[g,d,f]),(0,jt.useEffect)(()=>{r&&(b.current=0,m.current=0,_.current=!1)},[r]),(0,jt.useEffect)(()=>{if(!i){L.current=!1,m.current>0&&!r?b.current=m.current:r&&(b.current=0),(m.current>0||_.current)&&s?.();return}m.current>=f&&!d&&(m.current=0,b.current=0,_.current=!1);let V=e.current;if(V&&(V.getPosition(M.current),V.getTarget(C.current)),r||_.current||b.current===0?(m.current=0,b.current=0,_.current=!1):b.current>0&&b.current<f?m.current=b.current:(m.current=0,b.current=0),S.current=0,!u){let A=t.current;if(A){let X=new En.Box3().setFromObject(A).getBoundingSphere(new En.Sphere);v.current={center:X.center.clone(),radius:X.radius>0?X.radius:1}}}L.current=!0,c()},[i,u,e,t,c,f,d,g,r,s]),(0,jt.useEffect)(()=>{if(!i||!o)return;let V=e.current;if(!V)return;let A=()=>{_.current||o()};return V.addEventListener("controlstart",A),()=>V.removeEventListener("controlstart",A)},[i,e,o]),(0,nc.useFrame)((V,A)=>{if(!i||!L.current)return;let X=e.current;if(!X)return;m.current+=A,S.current+=A;let j=T(m.current),k=!d&&m.current>=f;if(j=d?j%1:Math.min(j,1),x)if(x.target.getPoint(j,z),h){let Y=d?h.length:h.length-1,q=Math.min(j,1)*Y,ue=Math.min(Math.floor(q),Y-1),Ee=(ue+1)%h.length,be=j>=1?1:q-ue,Ce=be*be*(3-2*be),De=h[ue],ze=h[Ee],se=ze.azimuth+Math.round((De.azimuth-ze.azimuth)/(Math.PI*2))*Math.PI*2,Lt=De.azimuth+(se-De.azimuth)*Ce,Xe=De.polar+(ze.polar-De.polar)*Ce,Ge=De.distance+(ze.distance-De.distance)*Ce;E.set(Math.max(Ge,1e-6),Math.min(Math.max(Xe,1e-6),Math.PI-1e-6),Lt),P.setFromSpherical(E).add(z)}else x.position.getPoint(j,P);else{let Y=v.current;if(!Y)return;let q=j*Math.PI*2,ue=Y.radius*2.2;P.set(Y.center.x+Math.cos(q)*ue,Y.center.y+Y.radius*.6,Y.center.z+Math.sin(q)*ue),z.copy(Y.center)}let B=Math.min(S.current/b1,1);if(B<1){let Y=B*B*(3-2*B);P.lerpVectors(M.current,P,Y),z.lerpVectors(C.current,z,Y)}if(X.setLookAt(P.x,P.y,P.z,z.x,z.y,z.z,!1),k){L.current=!1,_.current=!0,m.current=0,b.current=0,a?.();return}c()}),null}var ic=require("react");var v1="ri:license-grant:v1",x1={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},fg=new Map;function bg(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function gg(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return bg(t.padEnd(Math.ceil(t.length/4)*4,"="))}function y1(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===1&&typeof t.licenseKeyHash=="string"&&typeof t.domain=="string"&&(t.environment==="development"||t.environment==="production")&&typeof t.tier=="string"&&t.tier.length>0&&typeof t.issuedAt=="number"&&Number.isInteger(t.issuedAt)&&typeof t.expiresAt=="number"&&Number.isInteger(t.expiresAt)}async function rc(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e.trim())),n=String.fromCharCode(...new Uint8Array(t));return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Cu(e,t){return`${v1}:${t}:${e}`}function w1(e,t){let n=fg.get(e);if(n)return n;let i=crypto.subtle.importKey("spki",bg(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return fg.set(e,i),i}async function Tu(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[i,r,a,o,...s]=e.split("."),c=x1[r];if(i!=="ri1"||!c||!a||!o||s.length>0)return null;let l=JSON.parse(new TextDecoder().decode(gg(a)));if(!y1(l)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await w1(r,c),gg(o),new TextEncoder().encode(`${i}.${r}.${a}`)))return null;let d=Math.floor(Date.now()/1e3),p=l.expiresAt-l.issuedAt;return l.licenseKeyHash!==t||l.domain!==n||l.expiresAt<=d||l.issuedAt>d+300||p<=0||p>43200?null:{environment:l.environment,tier:l.tier,expiresAt:l.expiresAt}}catch{return null}}async function vg(e,t,n){try{return await Tu(e,await rc(t),n)}catch{return null}}async function xg(e,t,n){try{let i=await rc(t);return await Tu(e,i,n)?(localStorage.setItem(Cu(i,n),e),!0):!1}catch{return!1}}async function yg(e,t){try{let n=await rc(e),i=Cu(n,t),r=localStorage.getItem(i);if(!r)return null;let a=await Tu(r,n,t);return a||localStorage.removeItem(i),a}catch{return null}}async function Pu(e,t){try{let n=await rc(e);localStorage.removeItem(Cu(n,t))}catch{}}var _1=["localhost","127.0.0.1","0.0.0.0"],S1=e=>_1.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),_g="https://react-immersive.liveroom.dev/api/validate-license",M1=()=>typeof window<"u",C1=300*1e3,T1=5e3,P1=400,Eu=new Map,Au=new Map,ki=class extends Error{},Sg=async(e,t,n)=>{let i=await yg(e,t);return i?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:i.environment,tier:i.tier,isLocalDomain:n}):null},wg=async(e,t,n)=>{let i=await Sg(e,t,n);return i||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:n})},A1=e=>e instanceof ki||e instanceof TypeError,E1=()=>new Promise(e=>setTimeout(e,P1)),R1=e=>e==="development"||e==="production",L1=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&&!R1(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},k1=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},B1=(e,t,n)=>`${n}::${e}::${t}`,D1=e=>{let t=Eu.get(e);return t?Date.now()-t.timestamp>C1?(Eu.delete(e),null):t.result:null},N1=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),O1=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function I1(e,t,n,i){let r=B1(e,t,i),a=D1(r);if(a)return a;let o=Au.get(r);if(o)return o;let s=(async()=>{for(let c=0;c<2;c+=1)try{return await z1(e,t,n,r,i)}catch(l){if(!A1(l))throw l;if(c===0){let u=await Sg(e,t,n);if(u)return u;await E1();continue}return wg(e,t,n)}return wg(e,t,n)})().finally(()=>{Au.delete(r)});return Au.set(r,s),s}async function z1(e,t,n,i,r){let a=new AbortController,o=setTimeout(()=>a.abort(),T1),s;try{s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:a.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(u){throw a.signal.aborted?new ki("License validation timed out"):u}finally{clearTimeout(o)}let c;try{c=await s.json()}catch{throw new ki(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new ki(`License server error (${s.status})`);let u=k1(c)??`License validation failed${s.status?` (${s.status})`:""}`;return await Pu(e,t),O1(u,n)}if(!L1(c))throw new ki("License server returned an unexpected payload");let l=N1(c,n);if(l.status==="valid"&&r!==_g){let u=c.offlineGrant?await vg(c.offlineGrant,e,t):null;if(!u)throw new ki("License validation endpoint did not return a verifiable signed grant");l={...l,environment:u.environment,tier:u.tier}}return l.status==="valid"?(Eu.set(i,{result:l,timestamp:Date.now()}),c.offlineGrant&&(await xg(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await Pu(e,t),l}var ac=(e,t=_g)=>{let[n,i]=(0,ic.useState)({status:"checking",isLocalDomain:!1});return(0,ic.useEffect)(()=>{if(!M1())return;let r=!1,a=u=>{r||i(u)},o=e.trim(),s=window.location.hostname.toLowerCase(),c=S1(s);return a({status:"checking",isLocalDomain:c}),o?((async()=>{try{a(await I1(o,s,c,t))}catch(u){let d=u instanceof TypeError?"Could not reach license server":u instanceof Error?u.message:"License validation failed";a({status:"invalid",reason:d,isLocalDomain:c})}})(),()=>{r=!0}):(a({status:"invalid",reason:"No license key provided",isLocalDomain:c}),()=>{r=!0})},[e,t]),n};var nn=require("react");var Rn=require("react/jsx-runtime"),U1={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},V1={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"},oc=({direction:e})=>{let t=U1[e],n=V1[e];return(0,Rn.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,Rn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,Rn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},mi=16,F1={"bottom-left":{bottom:mi,left:mi,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:mi,right:mi,top:"auto",left:"auto",transform:"none"},"top-left":{top:mi,left:mi,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:mi,right:mi,bottom:"auto",left:"auto",transform:"none"},center:{top:"50%",left:"50%",bottom:"auto",right:"auto",transform:"translate(-50%, -50%)"},"center-bottom":{bottom:-10,left:"50%",top:"auto",right:"auto",transform:"translateX(-50%)"},"center-top":{top:mi,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},j1=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:i=.001,rotateSensitivity:r=.01,position:a="center-bottom"})=>{let o=(0,nn.useRef)(null),[s,c]=(0,nn.useState)({x:0,y:0}),l=(0,nn.useRef)(!1),u=(0,nn.useRef)({x:0,y:0}),d=(0,nn.useRef)(),p=(0,nn.useRef)(),f=(0,nn.useRef)(null),g=(0,nn.useRef)(0),y=()=>e.current,T=(E,V,A)=>{let X=Math.hypot(E,V);if(X>A){let j=A/X;return{x:E*j,y:V*j}}return{x:E,y:V}},x=E=>{let A=Math.abs(E);return A<.12?0:Math.sign(E)*((A-.12)/(1-.12))},h=(0,nn.useCallback)(()=>{let E=()=>{let{x:V,y:A}=u.current,X=x(V),j=x(A);if(t&&(X!==0||j!==0)){let k=y();k&&k.rotate(-X*r,-j*r,!0)}d.current=requestAnimationFrame(E)};d.current=requestAnimationFrame(E)},[t,r]),m=(0,nn.useCallback)(()=>{d.current&&cancelAnimationFrame(d.current)},[]),S=(0,nn.useCallback)((E,V)=>{if(!o.current||!l.current)return;let A=o.current.getBoundingClientRect(),X=A.left+A.width/2,j=A.top+A.height/2,k=A.width/2-18,B=E-X,Y=V-j,q=T(B,Y,k);c(q),u.current={x:q.x/k,y:q.y/k}},[]),M=(0,nn.useCallback)(E=>{if(!t)return;E.preventDefault(),E.stopPropagation(),l.current=!0,h();let V="touches"in E?E.touches[0]:E;S(V.clientX,V.clientY)},[t,h,S]),C=(0,nn.useCallback)(E=>{if(!l.current)return;E.preventDefault();let V="touches"in E?E.touches[0]:E;S(V.clientX,V.clientY)},[S]),L=(0,nn.useCallback)(()=>{l.current=!1,c({x:0,y:0}),u.current={x:0,y:0},m()},[m]),b=i*10,_=(0,nn.useCallback)(E=>{t&&y()?.forward(E*b,!0)},[t,b]),v=(0,nn.useCallback)(E=>{t&&y()?.truck(E*b,0,!0)},[t,b]),P=(0,nn.useCallback)((E,V,A)=>{if(!t)return;p.current&&cancelAnimationFrame(p.current),f.current={control:E,amount:V,action:A},g.current=0,A(V);let X=j=>{if(!f.current)return;if(g.current===0){g.current=j,p.current=requestAnimationFrame(X);return}if(j-g.current>200){let{amount:B,action:Y}=f.current;Y(B),g.current=j}p.current=requestAnimationFrame(X)};p.current=requestAnimationFrame(X)},[t]),z=(0,nn.useCallback)(E=>{f.current?.control===E&&(p.current&&(cancelAnimationFrame(p.current),p.current=void 0),f.current=null,g.current=0)},[]);return(0,nn.useEffect)(()=>(window.addEventListener("mousemove",C),window.addEventListener("mouseup",L),window.addEventListener("touchmove",C,{passive:!1}),window.addEventListener("touchend",L),window.addEventListener("touchcancel",L),()=>{window.removeEventListener("mousemove",C),window.removeEventListener("mouseup",L),window.removeEventListener("touchmove",C),window.removeEventListener("touchend",L),window.removeEventListener("touchcancel",L),m(),p.current&&cancelAnimationFrame(p.current)}),[C,L,m]),t?(0,Rn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...F1[a]},children:(0,Rn.jsxs)("div",{className:"mc__dpad",children:[(0,Rn.jsx)("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>P("up",1,_),onMouseUp:()=>z("up"),onMouseLeave:()=>z("up"),onTouchStart:E=>{E.preventDefault(),P("up",1,_)},onTouchEnd:()=>z("up"),onTouchCancel:()=>z("up"),children:(0,Rn.jsx)(oc,{direction:"up"})}),(0,Rn.jsxs)("div",{className:"mc__middle-row",children:[(0,Rn.jsx)("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>P("left",-1,v),onMouseUp:()=>z("left"),onMouseLeave:()=>z("left"),onTouchStart:E=>{E.preventDefault(),P("left",-1,v)},onTouchEnd:()=>z("left"),onTouchCancel:()=>z("left"),children:(0,Rn.jsx)(oc,{direction:"left"})}),(0,Rn.jsx)("div",{ref:o,className:"mc__joystick",onMouseDown:M,onTouchStart:M,children:(0,Rn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${s.x}px, ${s.y}px)`}})}),(0,Rn.jsx)("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>P("right",1,v),onMouseUp:()=>z("right"),onMouseLeave:()=>z("right"),onTouchStart:E=>{E.preventDefault(),P("right",1,v)},onTouchEnd:()=>z("right"),onTouchCancel:()=>z("right"),children:(0,Rn.jsx)(oc,{direction:"right"})})]}),(0,Rn.jsx)("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>P("down",-1,_),onMouseUp:()=>z("down"),onMouseLeave:()=>z("down"),onTouchStart:E=>{E.preventDefault(),P("down",-1,_)},onTouchEnd:()=>z("down"),onTouchCancel:()=>z("down"),children:(0,Rn.jsx)(oc,{direction:"down"})})]})}):null},Mg=j1;var Cg=require("react-colorful"),Bi=require("react/jsx-runtime"),Ru=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:i,inline:r=!1})=>(0,Bi.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:a=>a.stopPropagation(),children:[(0,Bi.jsx)("p",{className:"ri-popoverLabel",children:"Color"}),(0,Bi.jsx)(Cg.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>i(o=>({...o,[e.objectId]:{...o[e.objectId],hex:a}}))}),(0,Bi.jsxs)("div",{className:"ri-inlineRow",children:[(0,Bi.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,Bi.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});var Gn=require("react/jsx-runtime"),Lu=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:i,inline:r=!1})=>(0,Gn.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:a=>a.stopPropagation(),children:[(0,Gn.jsx)("div",{className:"ri-popoverHeader",children:(0,Gn.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),(0,Gn.jsxs)("div",{className:"ri-materialBody",children:[t?(0,Gn.jsx)("div",{className:"ri-previewFrame",children:(0,Gn.jsx)("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):(0,Gn.jsxs)("div",{className:"ri-emptyState",children:[(0,Gn.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,Gn.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,Gn.jsx)("span",{style:{fontSize:12},children:"No texture applied"})]}),(0,Gn.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&(0,Gn.jsx)("button",{onClick:()=>i(e.objectId),className:"ri-removeButton",children:"Remove texture"}),(0,Gn.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"})]})]});var br=require("react");var xt=require("react/jsx-runtime");function Tg({entries:e}){return(0,xt.jsx)(xt.Fragment,{children:e.map(([t,n])=>{let i=n!==null&&typeof n=="object",r=i?Object.entries(n):[];return i&&r.length>0?(0,xt.jsxs)("div",{className:"left-panel__data-group",children:[(0,xt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,xt.jsx)("div",{className:"left-panel__data-children",children:(0,xt.jsx)(Tg,{entries:r})})]},t):(0,xt.jsxs)("div",{className:"left-panel__data-row",children:[(0,xt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,xt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:i?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function H1({content:e}){let t=e!=null,[n,i]=(0,br.useState)(t),[r,a]=(0,br.useState)(t),o=(0,br.useRef)(e);return t&&(o.current=e),(0,br.useEffect)(()=>{if(t){i(!0);return}if(n){a(!1);let s=setTimeout(()=>i(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,br.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>a(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,xt.jsx)("div",{className:`left-panel__action-extra${r?" left-panel__action-extra--open":""}`,children:(0,xt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??o.current})}):null}function ku({isOpen:e,selectedObject:t,currentAction:n,onClose:i,onAction:r,renderActionExtra:a}){let[o,s]=(0,br.useState)(t);(0,br.useEffect)(()=>{t&&s(t)},[t]);let c=t??o,l=c?Object.entries(c).filter(([u])=>u!=="actions"):[];return(0,xt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:c&&(0,xt.jsxs)(xt.Fragment,{children:[(0,xt.jsxs)("div",{className:"left-panel__header",children:[(0,xt.jsx)("p",{className:"left-panel__title",children:c.label}),(0,xt.jsx)("button",{onClick:i,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),l.length>0&&(0,xt.jsx)("div",{className:"left-panel__data",children:(0,xt.jsx)(Tg,{entries:l})}),(0,xt.jsx)("hr",{className:"left-panel__divider"}),c.actions&&c.actions.length>0&&(0,xt.jsxs)(xt.Fragment,{children:[(0,xt.jsx)("div",{className:"left-panel__actions-label",children:"Actions"}),(0,xt.jsx)("div",{className:"left-panel__actions-list",children:c.actions.map((u,d)=>{let p=n?.action.id===u.id&&(n.binding===c||n.binding?.id===c.id||n.binding?.modelObjectId===c.modelObjectId||n.objectId===c.id||n.objectId===c.modelObjectId),f=a?.(u.id);return(0,xt.jsxs)(br.Fragment,{children:[(0,xt.jsx)("button",{onClick:g=>r({objectId:c.modelObjectId||c.id||"",action:u,binding:c,screenX:g.clientX,screenY:g.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${u.id}`,p?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":u.id,"data-label":u.label,children:u.label}),(0,xt.jsx)(H1,{content:f})]},d)})})]})]})})}var ys=require("react"),Eg=require("lucide-react");var Pg=require("react");var zn=require("react/jsx-runtime");function Ag({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:i,searchValue:r,onSearchChange:a,searchPlaceholder:o,children:s,isOpen:c,onToggle:l,openButtonIcon:u,closeButtonIcon:d,closeButtonAriaLabel:p}){let[f,g]=(0,Pg.useState)(!1),y=c!==void 0?c:f,T=x=>{c===void 0&&g(x),l?.(x)};return(0,zn.jsxs)("div",{className:`ri-sidepanel-wrap ${y?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!y&&(0,zn.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>T(!0),"aria-label":t,title:"Open panel",children:[u,e?(0,zn.jsx)("span",{children:e}):null]}),(0,zn.jsxs)("div",{className:`ri-sidepanel ${y?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!y,children:[(0,zn.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,zn.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,zn.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,zn.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>T(!1),"aria-label":p,title:"Close",children:d??(0,zn.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,zn.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,zn.jsx)("p",{className:"ri-sidepanel__title",children:i})]}),(0,zn.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,zn.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:o,value:r,onChange:x=>a(x.target.value)})}),(0,zn.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var Kr=require("react/jsx-runtime");function Bu({objectBindings:e,onAction:t,onFocus:n,onHover:i,isOpen:r,onToggle:a}){let[o,s]=(0,ys.useState)(null),[c,l]=(0,ys.useState)(""),u=(0,ys.useMemo)(()=>Object.entries(e).filter(([d,p])=>{let f=c.toLowerCase();return d.toLowerCase().includes(f)||(p.label??"").toLowerCase().includes(f)}),[e,c]);return(0,Kr.jsx)(Ag,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:(0,Kr.jsx)(Eg.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${u.length} visible entries`,searchValue:c,onSearchChange:l,searchPlaceholder:"Search nodes, labels",isOpen:r,onToggle:a,closeButtonAriaLabel:"Close scene objects panel",children:u.map(([d,p])=>{let f=p.visible!==!1,g=o===d;return(0,Kr.jsxs)("div",{onClick:()=>n(p),onMouseEnter:()=>{s(d),i?.(p)},onMouseLeave:()=>{s(null),i?.(null)},className:`ri-sidepanel__row${g?" ri-sidepanel__row--hovered":""}`,children:[(0,Kr.jsx)("span",{className:`ri-sidepanel__label${g?" ri-sidepanel__label--hovered":""}`,children:p.label??d}),(0,Kr.jsx)("button",{type:"button",onClick:y=>{y.stopPropagation(),t?.({objectId:d,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:p})},className:"ri-sidepanel__vis-btn",title:f?"Hide":"Show",children:(0,Kr.jsx)("span",{className:`ri-sidepanel__checkbox${f?" ri-sidepanel__checkbox--checked":""}`,children:f&&(0,Kr.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,Kr.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},d)})})}var Le=require("lucide-react");var sc=require("react"),Du=(0,sc.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var vr=()=>(0,sc.useContext)(Du);var ws=require("react/jsx-runtime");function ro({visible:e,message:t,tone:n="default",spinner:i=!0}){return e?(0,ws.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[i&&(0,ws.jsx)("span",{className:"bb-loadingSpinner","aria-hidden":"true"}),(0,ws.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]}):null}var Nu=new WeakSet;function io(e){Nu.add(e)}function Rg(e){let t=Nu.has(e);return t&&Nu.delete(e),t}var Ie=require("react"),pc=require("@react-three/fiber"),hc=require("@react-three/drei"),lt=require("three");var Lg="data:image/png;base64,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";var kg="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACXBIWXMAAC4gAAAuIAHVHB4bAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAIABJREFUeJzt3Xd4HOXVBfBzZ1eSe6djYqoNwloZDJgaJ0AgIZ2IAJINIcS00D5CCASCCaQBAULHAWIsyQYEhEAILQ6mmRI3ych0MGCae5VVdud+f0gQbFyk3Zm5U87veXgSZM3MAaSZszPzvq+AiBJD761IYVjxN+DK4RDZFnBbAXkb6jwk5ZNmW+cjouCIdQAiCobWj9kPcO8ApHQj3/IYnOw4GX73B4EGIyITLABECaD1Y74O6CMAum3mWxchp6Nlr9p5QeQiIjssAEQxp40VA5AteQPAwE5u8jbWtAyXA+rW+pmLiGw51gGIyGe5bmej8xd/ANgZPYpP9ysOEYUDCwBR3Kn+sMvbiHOcD0mIKERYAIhiTBUCYGgeW5Z2bEtEMcUCQBRnDWN6ACjKY8tuHdsSUUyxABDFWbo5/0/xhWxLRKHHAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAnEAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAnEAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAnEAkBERJRALABEREQJxAJARESUQCwARERECcQCQERElEAsAERERAmUtg5A9rSxohjZ4uMAORaCDFRKIPo2VP8NOH+VTPW71hmJqGu04fidoHIyRA6Dys4QbYFiDoC7kW65W0rrWq0zki2xDkC2dO6xg6Hp+6HYZyPf0gLgtyir+YMINMhsVDhtrOiFbMmqvDZOt/SW0rrVHkcin6lCUF91MQS/BlCy4e+SlwH3aMnULgg0HIUKHwEkmDZWDICbfnITF3+g/QTyOzRU3hxULiIqQH3VrRD8Fhu9+AOA7gvIE9pwfP/AclHosAAkWVvJ1QCGdu6b5VSdU3mSr3mIqCA6p/IkCMZ18tt3hzpX+hqIQo0FIKG0vnJ7CMZ2aSNxrtJXxw70KRIRFUAbju8PkT91cbOTdO6xg30JRKHHApBYcjSAVNe20QFo1Yt9iUNEhdHUbwAM6uJWDnKp7/sRh8KPBSC5hue3mZ6h9VWdfGxAREFo/53UM/La2JFSj+NQRLAAJJYW57lhEQR/9jQKERWm/XeyKK9tXeR7LqCIYwFIKpH5eW+rOErrq470LgwR5UvrKw+F4qgC9jDfszAUKSwASaV4ssAdXK1PjeZEUkSGOn4H/1LYTjDVmzQUNSwACSWZmmcBmVnAHkoxcPAp3iUioi4bOPgUoJBn+DJTRtQ+710gihIWgCRz3bOBAmb3U72cwwKJbGjD8f2hOr6gnQjO8yYNRRELQILJiNrnIagrYBf9OSyQyIg6l6Lrw/6+QO6RsuqnPctDkcMCkHSq5wFYU8AOfq5zTuAwIqIAdQzFPb2AXaxFLneBV3komlgAEq5jMZCrC9hFGk6uq7OPEVFhrkG+w/7aXSl7TX7PqzAUTSwABKxp+ROA/E8GHBZIFBitrzwUwLcK2MUCQK7yKg9FFwsAQQ6oWwvgwgJ3c43OGFfIJxIi2gy9tyIFyHWF7UXOl0x1AY/9KC5YAAgAIJmaKQCeKWAXu6N4bWdXISOifAwrOQ3Annlvr5iOsup7vAtEUcYCQP+jzjkAcvlvz2GBRH5pH/aHSwvYhYuUnC1SwNBfihUWAPqclE+aDeBvBeyCwwKJ/FL4sL87ZHj1DM/yUOSxANB65NcAVuS/PYcFhsrCRc0A3Dy2zHVsSyGgDccNQ2HD/lYhnfqNV3koHlgAaB2SqV4I1csL2AWHBYaIfG1aFsBHeWz6Xse2FAaayn+1PwBQjJfSiZ94F4jigAWAvizb83oAr+e9PYcFhs3jeWzzsOcpKC8FD/tTvIWe/W/yLhHFBQsAfYmMnNAGt+A5wjksMDyuAtCVT/NrkXau8SsMdZ4nw/4cOVt2vaHFo0gUIywAtEEyouYRAI8WsAsOCwwJydS8DnT67XGF6jgpnfS+n5mokwof9veklFX/y7tAFCcsALRxaZwFoDXv7TksMDQkU/N7iFwAoG0T37YMqkdLeW1NULlo4zwY9tcGwZmeBaLYYQGgjZLSmregKOTZIYcFhoiUVV8J1y0F9HoI5qF9EajFAF4E5CKIu7OU1/7dOCZ9ptBhf4IbOu7+EG2QWAegcNMXK/ugu7wOYOs8d5GFpsql/K5GL3MRxZk2HDcMmmpA/m/+L4SbHiojJi73MhfFC+8A0CbJqNqVECnkNiSHBRJ1VaHD/kQv5sWfNocFgDZv+M63A8h/BjEOCyTqNA9W+5uD11rv9CoPxRcLAG2WyHgXrp4DFDSHOIcFEm2GPjU6XfCwP5Fz5Ji6/Nf0oMRgAaBOkRG1z0NQV8Audkdx0ymeBSKKo/7bFTbsD3KPlFU/7VkeijUWAOo81fPQ/uZ4ntvjtxwWSLRh2nB8f4gUMl//WuRyF3gWiGKPBYA6TTK1CwBcXcAuOCyQaGMKXu0PV8pek9/zKg7FHwsAdc2alj8BKOAkw9UCidbnwWp/CwC5yqs8lAwsANQlckDdWgAXFrALDgskWl+hw/4g50umOv/Hc5RInAiI8qL1VU8DOKSAXXxTMjWPeZWHKKrah/3Jv/PfAaYjU3OQSEGjdCiBeAeA8qPOOQAKGWrEYYGUeB4M+3ORkrN58ad8sABQXqR80mwAfytgFxwWSFT4sL87ZHh1/pN0UaKxAFAB5NcAVuS9OYcFUoJ5MOxvFdKpQranhGMBoLxJpnohgCsK2EV/tLqXeJWHKFJUxqOQYX+ql0npxE88y0OJwwJAhUm3XA+gkCVHz+CwQEqa9mF/clr+O8Bb6DngRg8jUQKxAFBBpLSuFS7OK2AXHBZIyVPosD9HzpZdb2jxLhAlEYcBkie0vupfAL6Z9w7EOVzKJuU/FIooInRu1eFw8UQBu3hUMjWFrBZIBIB3AMgrkvs/AG15b6/upd6FIQoxVy8rYOu2jt81ooLxDgB5RudUXQPBuflujnR6W77UlB+dUdEX3Uu2QFYGQjAQLgZC3IFQDIRICRR9AQCCEgA9OjbrjfbS1tzx9yugcCHIQbES0CY4zhIolsDRJci6i5B2l6ClzxIZOaEp+H/K6NNZx26LVPrDvHcguEbKagp55Eb0ubR1AIoRTf8Wkq0CsEUeWwvaWncHwAKwAfpiZR+UYChSzhCoDgEwBMCOX/jfbsgCgAKKjmov/6v4na3663y/ANoxv4wLwHEA1wGKmqD1VcsAzIdgPlzMh8h8AO8CeBfp5jektK61gH/c+EoX7wF18916EXLpy72MQ8nGAkCekRETl2vDmIuhelt+OxA+ksJnnxKL9gZ0bwB7QFAKxTAAzucXZHv9AfSHYkR7WfhCrmxJVuur3gdkHqAzIdII15mHzF3zEj9jnZtzIHneeBW5WEZMXO5tIEoyFgDy1mvNd2BoyWkAyvPYupDhhJGkr44diJbc/nCcA6F6IIC9AfRY54IavUtmGsBOgO4E4NtQBSQHNFQt03q8AOh0uPI8cj1eTtyjBFdfRyqvAjAHrzXf4XUcSja+A0Ce04bjD4E6T3dxs5ckUzPKl0AhonOP2wpu6ggABwM4EMAwJPf3MAvBbCimQ/VpNGOqjKpdaR3Kb9pQ9TIU+3RpI3G/KmWTn/EpEiVUUk885DOtr5oI4ITOfjugh0umdqqPkUzovRUpDCsqB5zDoPgOgP3B0TcbkwNkDqD/hLgPY/jkWXF8ZJDHMMC7JFNzol95KLlYAMgXWj+mJ6AvolMLnchFkqn+g++hAqKNFb2QLfkOgB8AOAztz8up6z4C8ChEHkBr9ydl5IT8h5mGTMe7Mp15oa8BkAMkU73G91CUOCwA5BttOL4/1KkBsJFJS2QpgDMkU313kLn8oO+e2A0rc4cDbgUgPwDQyzpTzCwH9GHAqUNb98fiUAa0vuo4QG4EdMAGv0HwCHLpKr74R35hASBfqUJQX3k4HDkVigyAAYC8DXWnQpw/dywoFEl6b0UKQ7t9C9DjAXwHQE/rTAmxGIoHIKiRTM2z1mEKofVjtgT0fABfB7ATgKUQ1ENwC/as+XccH4FQeLAAEHWRzhm7HRy3CorTAHzFOk/CvQHBnVD5W5TLJJEFFgCiTmh/ma/716DuOLQ/2+cQ2nBpBeQJCCbhteYH5Ji6nHUgorBjASDaBG2sGIBst1MgeiYU21jnoU5QvAXRa9HWc2Li5hkg6gIWAKIN0PoxOwLuOYD8FHy2H1UrAL0LwFWSqV1gHYYobFgAiL5A6ytHAfILAN8HkLLOQ55ogUgtsu6fZa/aedZhiMKCBYAIgM4dWwbXvRhAhXUW8o0L4H4Al0imJnHTThOtjwWAEk3rx+wJ6G8A/Aj8fUiK9iLgur+WEZPftA5DZIUnPEoknTtmd7h6GXjhT7I2AHch7VwupZPetw5DFDSe+ChR2mcnlPGAnA4O5aN2rYDeipKSi2XYnauswxAFhQWAEkGfGp3GwMEnQfUKAFtY56FQ+ggil2H4zreLjHetwxD5jQWAYk/rKw8F5FoAw62zUBTITKicI+WTnrNOQuQnFgCKLZ0zdjvAvRGC71tnochRqN6FotbzpLRuqXUYIj+wAFDsqELQUDWm/VP/RlZaI+qchQDOl0zNJOsgRF5jAaBY0bkn7Aw3NwHtq6sReeVfSDuncbQAxQkLAMWCPjU6jQHbXQDIxQC6WeehWFoFwUUYXnMTl+mlOGABoMjT2ScOgZOtBnCQdZZQSfcGUr06/uoGON3bv+4UAVLc/v+1FWj5BGh6B+A1rbOmQp0TpHzSh9ZBiArBAkCRpg1jKqA6AUA/6yyBcoqBkm2A4i2A4i2gRYOAokFA8ZZAug+Q7oUu/XpnV0AWPQIseQJQjoDrhOWAnCaZ6rutgxDliwWAIklnVPRFuuQmCCqts/gu3RfosRPQbQdoyfZA98FA8daAON4fa/U8yHvXAW6z9/uOJa1GuvV0Ka1bbZ2EqKtYAChytL7qYEBqAR1sncV7AnTbDui5G7T7rkDPXds/1Qdp5WzIe9cGe8xoewPAcZKpmWUdhKgrWAAoUrRhzDio3gigyDqLZ9K9gV7Dob2GA73L2v/emLx/PbBihnWMKGkB8HPJ1NxuHYSos1gAKBJ0ekV39Ci+GSInWmfxRMnWQN/9oL3L22/vh+1XcVU9ZP6frVNEkFZjTespckDdWuskRJsTsrMO0ZdpY9UuyOIBRH0q3+ItgH6joH32Bbp/xTrNpuWaIPNOtU4RVbPgpo+WERPnWwch2hQWAAo1nVP5bYjUAOhrnSUvTkn7Rb//V4Eeu1in6RJ55SeA5qxjRNUiuDhGRtRMsw5CtDEsABRaHc/7b0IUl+3tPgTafzTQb38g1d06TdfxDoAXslD8XMprbrMOQrQhLAAUOh1z+V8K4FLrLF0iDtB3H+jAI4EeO1unKQxHAnhIr0dZ7TmcPZDChgWAQkXrx/QE3FpAvmedpdOcbsCAQ6ADj2h/zh8DMv/PwKp66xhxUoc+6bGy40ROsEChwQJAoaGNJ26NXPYhKPaxztIpqR7tF/1B3wBSPa3TeGf5S5APbrJOEUdPI93yQy4vTGHBAkChoI1jd0CbOxWC8L8p53QDBn0DOujI9nn242Tl7PaLv9tqnSSuXoU6h3MdAQoDFgAyp/VjdgR0KoAdrbNskqSBQYdDB307FJP1eKp1IWTRw8DSZ8BFgXz3LsQ9TMomv2MdhJKNBYBM6dwxu8PVfwPY1jrLJvXZG7rNccFPy5sPtxVoWwJkVwG51UB2NZBbBcmtaf9zzQJuS/v/z64AWhcCzQvs8ibT+3Ddw2TE5Detg1BysQCQGa2v2gvA4wAGWWfZqG6DodscD/QqtU6yLs21L+Pb/AGk5QOgdVHHX4vbL+oUBZ/Ccb4hwyc1WAehZGIBIBNaXzkKkMcQ1gl+nG7QrX4EDDzMn1X3uqp1IbDmDUjTm8Dad9s/sWvWOhUVbknHOwGzrYNQ8rAAUOD0laoMcvIfQAdYZ9mg3hnoticAxYY3JtqWAqsaIKtfAZreANqW22Uhvy2GpkZL+V2N1kEoWVgAKFBaXzUUwNMAtrLO8iXp3tCtjwf6H2hwcAWa3oasnNU+/r75A4MMZGghgEMkU/O6dRBKDhYACkzHoj5PI4wv/PUZAd3up0C6T7DHXfsuZMVLwPKX2l/cowSTD+CmDuEiQhSUyBQAnXvcVlDpiVzxUhkxkfdDI0bnHjsYbuoZQIYYR1mXUwzd+jhg4NcR2K9DdiWw7FnIsqfbX+Qj+oziLbjZr8ped39kHYW6RuvHbAnJ9UJr2xIZWReJN3FDXQD0xco+6I5fATIWwHYdX3YBNEDkFnTvd5fsekOLYUTqBJ1x3CAUpaYD2NU6yzq6fwU6+DSgJIgbEgqsngdZNg1YMZMv8NGmvIK2loOichFJMn3zzBKsXfYzqJwB6LAv/NFciNyGJR/cJl+bFtpf9tAWAJ1VuQdSzmOADt7Et70NwS+krObBwIJRl+i7J3bDiuxUCA6wzrKOgV+HblPVPrmPnzQLLH8RsvhRPtenzhNMQ/f+R/IDTnhpQ9X3obgawKZW/pqBNnxXRtZ8HFSurghlAdBXxw5EmzsXim06uclUiJ4rZbVzfQ1GXdK+qt+YGkCPt87yOSlqf8N/wCH+HsdtBpZMhSx5Amhb5u+xKK6moKymkqsIhos2VA6HyrUADu3kJq9jre4ro2pX+pkrH+EsAPVjJgD6sy5ulgXwVxQ7l8juk/g2VQhofdWVAM63zvG5ooHQHX7u71K9mm1/vv/pA5yQh7wwXjI1l1mHoI4Ppq3u5QB+BqCrtw5vlkzNGT7EKkjoCoA2nrg1stn3ABTnuYtlAC5DW4+bZeSENg+jURdofdXJAP5qneNzPYdBdzjTvzn8NQssndY+nz4/8ZN3FNCfSKb2LusgSaUzxhWhqOl0AJcC6J/nblZhTctWckDdWg+jFSwEU5ytp63tMOR/8Qfa/wNdh6KmV3RO5bc9SkVdoHOrDgdwi3WOz/XdF7rj+f5d/Fc3Qt66BPLRJF78yWsCyAStrzrYOkgSacPYw1DUNAvAdcj/4g8AvdG9eC+PYnkmfAXAkd082tNuEHlYG6r+2TH5DAVAG8fuABeT0fVbZP4YdAR0hzMAKfJ+3y2fQN67FvLun4Bmru5KvikGUKdzxm632e8kT2h91VBtqPon1H0SwJ6e7DQlQzzZj4fCVwDU44nXFUcBmKtzqq7R2Sf283TftA5998RuyLr3IwyL+0gKut3J0G0q4fmTLm2DfHof5M0LgZWcwp0CsRXEvU/fPLPEOkic6ewT++mcqmsAzO24dsRa+AoA9A0fdloEwblwsm/onKpT9N6KlA/HoFW5mwCMtI4BSUMHn+HPm/5Nb0LevARY+FD7inxEwRmFpmXXWIeII723IqVzqk6Bk30DgnMBeH/L0HVDt/Rz+ApAsfMIAL/Gvm4Bwa0YWjJX66uO9OkYiaT1ladD9STrHHCKoV85B+jrcQ9xWyEfTYK8fQXQwknayMzpOqfS/vcsRnR21WjsVjITglsBbOHTYRbgjbaZPu07b6EbBQAAOqfqmo4W5jP5JyR3tpRNfsf/Y8WXzjl+X4jzLAp7ebNwTkn7xb9Xqbf7bV4A+eAWTuRDYbEWKewve9bUWweJso7pyX8HyBj/D6Y/lfLaO30/TheFswDMGNcDRU2PAzgogMM1A3ot0q2/l9K61QEcL1a0fkxPQGcB8Orlzfw43aA7/hLosYuHO1Vg0b8gn97PqXspXATz0NpjHxk5ock6StRoY0UvZIsvAuRcAN0COOTtKKsZF8YJncL3CACAjJzQhHTLNwH5K+D7v7RugFyIXMkbWl95gur4UP47CS3VG2B+8S+GDvk/by/+udWQ+VdDPrmHF38KH8UeSK+50jpGlKiOd7S+8gTkSt4A5EL4f/FfDdWzwnrxB0J6B+CLdHblPnDwF0D2D+aIMhMq50j5pOeCOV506ZwxP4To/aYhJA3d4SygT7l3+1z7HuT964HWRd7tk8h7CuD7kql5yDpI2Onsyn0gcl1Aa5IogPuQdn4hpZPeD+B4eQt9AQA+m1O+agyAPwHYOpijyj/hps7k2twbpnPGbgdx6wEMNAshDnTw6UDffb3b5/LpkA/vBNxW7/ZJ5J9FaEMmrIvNWGs/T+X+AEgVgrnezYI6Z0flA2QkCsBnOp43nw/gVwCCGA/bBMUNKGq5gu8H/I/qeAcNbz0J4OumObY72cOhfgr55F5g0SMe7Y8oMI+hrOZbYb3NbEGnV3RHr5KzoPg1AJ+mAF3HEgCX4/WWG+WYusiMD45UAfiMNlbtgix+D6AioEN+COAilNVU85cM0IYxZ0D1RtMQW30fuuUPvdmXZiELbgeWT/dmf0SBk5MlU32HdYow0Pox3wHc6wEZEsDh2gC9BW2tv5GRdZFb/SuSBeAzWl95KCDXwaupGjdLXobIOVI26YVgjhc+OuvYbZFKzwPQ1yxEv1HQwafBkx/f3GrIe9cDa14rfF9EdlZAnVIpn5TYOam1vmovtM/ZH9S6CVMBOUcy1a8EdDzPRboAAIA+NTqNgYNPgurvEMwUtApoDdJFv5TSiZ8EcLxQ0fqqfwD4rlmAnkOhO14AiAdLDWRXdMzjv6DwfRHZu18yNT+yDhE0nXHcIBQ5lwByBoAgZnl9GyIXSll1XQDH8lXkC8BntLFiALLFlwb4Q7AGwNXok/6j7DixOYDjmdOGyuOhUmsWoGggdJfferOqX9uS9ot/S+I6HMWZytFSXv2AdYwgfL5Mr+C3UPQJ4JBNAK6K0zk/NgXgMzp3zO5w3WsBOSKgQ74P4BLJ1EwK6Hgm9NWxA9HqzgOwpUkAKYLufDHQfcfC99W6GPLuH4HWhYXviyhcPoG4e0jZ5FivS93+nF+vBbBzEIdDRIb1dVXsCsBnOn5A/gLAgytGZ8hTcOQcGT6pIZjjBUvrqyYCOMHs+Nv/DOjvwaO91oWQd34HtMX6/EhJJrhNympOtY7hB204bhg0dQ2AbwZ0yEgN6+uq2BYAANDGimJkS04DcDmCGQriAloLOL+QTHVsPl5qw/F7Q52XYTVz5MBDodt60D3alkHeuYIT/FDcuRB3XymbHLrFZ/L1hUe8pwPw4AWgzYrksL6uinUB+IzWV24POH8C9DgE88+8DILfYHjNTVEfNtgxCdOzAA40CdD9K9CdLy38pb/sCsg7vwdaOF8KJcLzKKs5OPrnn/EO6t88AyKXAegfwCHbILgBrS2/jeKwvq5KRAH4jM6tOgAu/oKg1qxXPIie/Y+VXW/wa3lj3+mcMWMgavN+g1Pc/tJfybaF7Se3tv22f3OsHt8RbZrIMVF+U11nVPRFUcn9AA4N6IiPQ9xzpGxKYsYEJ2rhGxleMx1lu+wH1Z8C8P/1b8H3sWZZZCfn0BnjekD0CrPjb31c4Rd/zUE+uJEXf0oexZ91xrge1jHyoU+NTqOo5CEEcfFXvAXIdyVTe2SSLv5AwgoAAIiMd6W89k6s1aEArgLg76TvgkqdXXWUr8fwS3rNhQB2MDl27wwwsPCZhuXjGmDVXA8CEUWNDkbx2v+zTpGXAdufAcCreb43ZjVUL0TP/ntKpvphn48VSol6BLAhAU0r/B/J1AR0G8sbHTP+vQWge+AHT/eG7vrHwsf7L/pn+/z+RMm1GpCdo/RScsd7R28B2MmvQyCmw/q6KnF3ANYnpTVvSabmGEAPA+DXlI6jtbGil0/79oeTuggWF38Auk1l4Rf/1a9APr3Pm0BE0dULohdYh+iSOcfvAv8u/rOgziGSqTkm6Rd/gAXgc5KpnYq2HnsBOAeA14PEHWS7DfF4n77RxrE7QORkk4P3zgD9Clyyu3Ux5P2bAXW9yUQUZYrT20dCRYSTGuzDXj8F5GSU7bJPXMf054MF4Atk5IQ2ydT8BW253SC4DYB34z/Vic5wnKz7GwSz3PK6nBLotmML24e2Qd6/Hshx9WaiDt2g+JV1iE5z1MtpdtsguAZtLUMlU32HyHh+KviCxL8DsCkeTivchj7pPlGYP7rjnYh5AIoCP/Y2VcCgbxS0D1nwV2DZsx4lIoqNNkCGSqb6Xesgm6OvndQbLa3LUPiaLlOhqbOl/K5GL3LFEe8AbIIMr35VMrVHAvJdAIX84jwWhYs/ACCHS2Fw8Ue37YCBBb4nueK/vPgTbVgRoBdZh+gMGXbnKgBP5r0DxVsQOUYyNYfx4r9pLACdIJnqh7GmpRQil6B9FcCuaIW6ZmPpu0LnnrAzFMeZHHubSkAKKPxtSyEf/s27QETxc6I2jrUZ1ttV4v4B6PIshv8b1hfhCZCCxALQSXJA3Vopq74C0GGATEZnfzgVZ0n55Jf9TeeRXPZcBLOU8rr6jgR67VnADhSyYAKf+xNtWhpt7jnWITpDyiY/A8G1nfx2BbQauexQKa/9Y5RnXg0a3wHIUyemFV4FkZ9GpYm2L7ZR8j6AnoEeWNLQ3f4IFBewyvDixyAfT/YuE1F8rYKb3kFGTFxuHWRzVCGorzoXgj9h4wsAzYA4Z0nZpBeCzBYXQayqFEsyvGa6KvZFQ9VBUFRBkEH7uPn3AEyFuJMitSZ3rtvpgAZ78QfaX/or5OLfuhjy6f3e5SGKt95IZU8B8CfrIJvTvpBRzTVaX3kvICcDOgoig6FYDKAR6kxGZtLzUV/wyBLvABD0zTNLsHbZu1BsE+iBnW7QoVcD6T5570LmX8Wpfom65iOkW3aU0jp/p0Gn0OM7AAQ0LRsT+MUfAAYdUdDFH8ue48WfqOu2RbbY5GVfChcWAAKAMwM/YqoHdFAB0yu4zZBP7vEuD1GiyNnWCcgeC0DCaX3lKABlgR934BFAKv/lEWThg0B2hYeJiBJlhDYcv7d1CLLFApB04vws8GM63dpv/+erdSGw+Anv8hAlksHvPoUKC0CC6Wsn9YZm1+SxAAAgAElEQVSqn8sgb9iA0UCqR96by8eTAc16l4coiRSV+tpJBS67SVHGApBkzW2VAII9AYgDHXhY/ts3vQmsnOVdHqLk6oWWtmOsQ5AdFoAkEw3+FmDffQsa988x/0ReMjgHUGiwACSUzj6+HMBegR934JH5b7x6XvtfROSV/bR+TCHzcFOEsQAklUjw44C77wj02CnvzWXhgx6GISIAgLo/to5ANlgAkkrk6KAPqQNG57/x6nnAmtc8y0JEHSw+DFAosAAkkNaP2Q/AzoEe1OkG9B2V9+ay5DEPwxDRF+ys9VWBPw4keywASaQa/C2/fvsDqe75bdvyMbCy3ts8RPQ/FucEMscCkDCqEAiCv/3f/5C8t5XFjwFc8IvIPyLHqnJxuKRhAUiaOZUHANgh0GMWbwn0yPOJQ241sPx5b/MQ0fp2QMOYfa1DULBYAJJG5DuBH7Pf/vlvu+x5wOWqpUS+U/fb1hEoWCwASSP4ZtCH1L75f7CQZU97mISINkqcwM8NZIsFIEF0RtU2AIYHetCSbYBug/PbtulNoHmBt3mIaCN0r45zBCUEC0CSFMm3gIBf9Om3X96byrJnPAxCRJshKMLh1iEoOCwAiaLB3/7vVZ7nhjlgxUxvwxDR5vAxQIKwACSEPjU6DeDQQA+a7g302DG/bVc1tI8AIKIgHaH3VqSsQ1AwWACSYtD2+wLoF+gxe5ch3ycOsvJlb7MQUWf0x25Fe1uHoGCwACSF4uDAD9krz/cNNQusnO1tGCLqJOcg6wQUDBaApFAcGOwBBci3AKx+Fcg1eRuHiDpHNOBzBVlhAUiAjik+81+JJx/dtm9/ByAPsnqux2GIqPOEdwASggUgCeYeNxTAFoEes+du+W+7igv/EBnaUhurdrEOQf5jAUgCTQd+S0977Jrfhq2L2lf/IyI7Od4FSAIWgCQQHBD4MfMtAKt4+5/InPI9gCRgAUgC1X0CPV5Rf6A4vycOsvZNj8MQUR5GWgcg/7EAxJw2VhQDGBroQbvnOfkPAKxhASAKgd11xrgi6xDkLxaAuNOS3QEUB3rM7l/Jb7vsCqB1obdZiCgfJUi3FPAmL0UBC0DcZaUs6ENqyXb5bbjmDW+DEFH+JBf4uYOCxQIQd6LB/xJ32yGvzaR5vrc5iKgAGuzS4RQ4FoC4EwRbAJxioHjL/LZd+763WYgofxL83UMKFgtA3Cn2DPR4JdsBkuePVfMCb7MQUf6UBSDuWABiTOvH9ASwbaAHzXP4H3KrgbYl3mYhogLo9vruid2sU5B/WADiTJ0hgR+zeFB+2zV/6G0OIiqUYIWb3ws9FAksALGWLWBAfn60KM8CwOF/RCGkgZ9DKDgsAHHmyJDAj5nvI4DWRd7mICIvsADEGAtAnKkMCfyYed4BED7/JwohlwUgxlgAYs3gl7eoX37b8Q4AUfiIsADEGAtArDl5zsmbJ3GAVI/8tm1b6m0WIiqcYIh1BPIPC0Cs6VaBHi7VE4Dkt212padRiMgDijxn9aIoYAGIt4GBHi3VO7/tNAu4Ld5mISIvBHsOoUCxAMSUzhjXA0D3QA+a7pXfdtnVANTTKETkiV6cDCi+WADiqntzngPyC5Dv8//cam9zEJF3Vri8CxBTLABx1WZw606K8tvObfY2BxF5J8XHAHHFAhBXKTf4OwCSzm87t83bHETkHVeDP5dQIFgA4iqH/oEfM98CoFlvcxCRh9wB1gnIHywAcSUa7AuAAAsAURwp+BJgTLEAxJU4JcEfM5XfdiwAROFlcS6hQLAAxJYWB37IfF/my67yNgcRechlAYgpFoC4chF8AWj5JK/NpPUjj4MQkYeCP5dQIFgA4kok+Na+9h2gbVnXttEcsGKmP3mIqHAW5xIKBAtAbBk8AlAXsugfXdtm8eMAlwImCi9XWQBiigUgtvKdladAS54Clr/Yue9d/Qrk0/v8zUNEhRGHjwBiKs9xWxR+Vq/WK2TBrdDWT4Etjtrw0EDNAosfg3x6f/sjACIKMeVMXTHFAhBfrWZHVrf94r50GtBvFLTbkPaFgrKrIGvfAVa8DLQtNYtHRF2gyqU6Y4oFIK5UWyBim6FtCbDoERinIKJCOA4LQEzxHYD4srsDQETxoS4LQEyxAMQVWzsReYLnkrhiAYgrVa6xS0SFE55L4ooFIK5U+ZYdERXOlcXWEcgfLABxJeAvLREVTnSRdQTyBwtAXDlp/tISUeGcLM8lMcUCEFctTbwDQESFW5XjuSSmOEQ7xrS+qhkA5/EmonytlkxNb+sQ5A/eAYi3T60DEFGkfWwdgPzDAhBngnesIxBRpL1tHYD8wwIQa8ICQET5U7xlHYH8wwIQZ6ps70SUP+E5JM5YAGKNdwCIqAC8AxBrLABx5vCXl4gK4Lg8h8QYC0CcrWpuBJC1jkFEkdSE17JvWocg/7AAxJgcULcWwGvWOYgoghRz5Ji6nHUM8g8LQPzNsg5ARBHkyEzrCOQvFoDY09nWCYgoglyeO+KOBSDuRHkHgIi6Ls27h3HHAhB3rb1mAGixjkFEkbIc81pesQ5B/mIBiDkZOaEJwH+tcxBRhCim8QXA+GMBSALVadYRiChCRJ6yjkD+YwFIAsE06whEFCn/sQ5A/mMBSII1rdPB9wCIqHMWoqy60ToE+Y8FIAHaJwTiYwAi6gSRf4pArWOQ/1gAEkP+YZ2AiCJA8aB1BApGenPfoLNP7Adky5GSLYII5DlVF8BCQGZJpnqNdRwzuew/kErfBECsoxBRaK3GmuZ/W4ewpDOqtkFah8Nx+lpnyY+2QeVjLP1gpnxt2ibXgtnoxUDnjN0N4v4OwPcAFHkd0UAzFPcjlbpUht+VyDWutaHqZSj2sc5BRKF1n2RqKqxDWNA5Yw/quOYdjHh8UFoByO1IN/9eSuuWbugbNvgIQOeMOQLizgDwI8Tj4g8A3SCohJubrXMqv20dxgRv7RHRpoj+3TqCBZ1TeSbEnQbgEMTj4g8AfQE9D9mSWTp3bNmGvuFLBUDnjtkdovcB6O17PBu9IVKn9WP2sw4SODc9GeDLPUS0QauRan3IOkTQtL7quxD5C4CUdRaffAWu+6jOOnbb9f/gy3cAXFwJoFcQqQx1A/RW1fGJeglSRkycD+A56xxEFEIi90pp3WrrGEHSGeOKAFyL+Hzq35htkUr9cf0vrnMB1PoxWwL6reAymSrHK2+Nsg4RONFq6whEFEa5u6wTBK6kaTSAnaxjBEOO1caKAV/8yvqfgPfbwNfiK6eHWEcIXBPuAbDWOgYRhYnOx/DJz1qnCFwOSfoQWIRc8TqPvte92KsOCjSONXG2so4QNBlVuxKQRL7oQ0QbIc4diZz8RzDQOkKw1r3mrVsAHCwLNIs5d7F1AhOO3mQdgYhCowWS/at1CCPJuuYplnzxb9ctANnsy0jSW+Kq060jWJDhNdMBzLDOQUShcLcMn/KpdQgTbqLOgzkAL33xC+sUANnr7o8AmRZkIkNvYNlHyXvm9RnVW6wjEFEIuAm+I9gvPRWCj61jBELwkGSqF37xS19+4c/BLwG0BpXJSA7inLG5aRJjral1CrDu7SAiShp9QUbU/tc6hRXZcWIzXLnAOkcAlgHuL9b/4pcKgAyvngHRnyC+JaAVIidL2aREz3ctB9SthUhymz8RAZAvjQ1PGimvrgbkd9Y5fLQEwPekbPI76//BBof8SVntZKh7MIDn/U4WsKkQ9wApq55oHSQUUs1/AZCoiT+I6DPaiLJd/mmdIgwkU30xVH8I4A3rLB7KQVGLtLOXZGo2+Lh7s7Mf6dwTdobmRgGyJaDF3mf0maIZqp8glZsuw+/+wDpO2OicqmsgONc6BxEFTPVYKa+9xzpGmKhC0FA1AsCeALaERHJ64DWA+wFSbc9ubBGgz8R9+kPaDJ0zdjuI+zaAEussRBQQxVt4o2WYHFOXs45CdpIz6x9tkJRP+hDQv1nnIKIg6WW8+BMLAAG53OUAmqxjEFEg5iKz62TrEGSPBYA65n/AzdY5iCgAqheJjHetY5A9FgBqV+z8EYKV1jGIyFcvIVP7iHUICgcWAAIAyO6TlsDF1dY5iMg3CnV+kchFf2iDWADof5pargbwvnUMIvKDTJHySc9Zp6DwYAGgz8kBdWuh+mvrHETkudVQ+aV1CAoXFgBaV6a2FvGbAZIo2QRXtA/5JfofFgBahwi0Y0EoPickioc3kGq51joEhQ8LAH2JDK+ZDqDaOgcReUDkXCmti+viblQAFgDaCDkfwDLrFERUCP2HlFX/yzoFhRMLAG2QZKoXQuQS6xxElLcWuHq+dQgKLxYA2rjXmm8FMMM6BhHlQXCljJj8pnUMCi8WANqojsVCTgGQtc5CRF3yOnqnf28dgsKNBYA2STI1swC9yjoHEXWaC+BnsuPEZusgFG4sALR5PQZcBsE86xhE1AmKmyVT86x1DAo/FgDaLNn1hhao/hQA1w8nCrf30K34IusQFA0sANQpkql9EcCN1jmIaBNUTpFhd66yjkHRwAJAndfW4yIAb1vHIKINUPxNyqsft45B0cECQJ0mIyc0Qd2fgdMEE4XNJ3Dc86xDULSwAFCXSPnkpwC53ToHEX2ByhlSNpkzd1KXsABQ17U1nw/IB9YxiAiA4F4pr37AOgZFDwsAdZmMrFsBuD8BHwUQWVsElTOtQ1A0sQBQXiRTOxXQG6xzECWayqmSqV5oHYOiiQWA8ten6AJAG61jECVS+1v/vPVPeWMBoLy1TzUqYwG0WWchSpgP+dY/FYoFgArSvlYAuOgIUXAUwMl8658KxQJAhVu64ApAXraOQZQIqjdLpuYx6xgUfSwAVDD52rQsJHsCgLXWWYhi7l0Utf7KOgTFAwsAeULKprwG4ELrHEQx5kKdsVJat9o6CMUDCwB5p6zmeiietI5BFEuKq6R80nPWMSg+WADIMyJQaHocAK5GRuQpbUTf9HjrFBQvLADkKRkxcT6AC6xzEMVIC5zU8e3Dbom8wwJA3iuruRVQLktK5I2LZfikBusQFD8sAOS59kcBqZ8CWG6dhSjinsPrLddah6B4YgEgX0j5pA8h+kvrHESRJVgJNz1GjqnLWUeheGIBIN9IWe1fATxqnYMoklTP6ninhsgXLADkL3V+BoBTlhJ1if5DMrV3WaegeGMBIF9J+aQPofoL6xxEEbIIjnuKdQiKPxYA8p2U194JxYPWOYgiQfUkGT7lU+sYFH8sABQQ5+fgowCizblDymv/aR2CkoEFgALR/igAXL+caOM+hJvm4zIKjFgHoGTRhqrHofiGdQ6iEPoml/mlIPEOAAUr644DwNXMiNZ1By/+FDQWAAqU7DX5PUAvsc5BFCIfQdzzrUNQ8rAAUPDKdr0ewPPWMYhCQfRkKZvMF2QpcCwAFDiR8S5yOg5Aq3UWIltaLWW1nC2TTLAAkAnZq3YeIFdZ5yAytARw+NY/mWEBIDs9+l0O4HXrGEQ29DzJVC+0TkHJxWGAZErnVH4DIo9b5yAK2NMoq/maCNQ6CCUX7wCQKSmvfQLAFOscRAFqgeRO5cWfrLEAkD0ndy44TTAlhl4uZVNes05BxAJA5joWPvm1dQ6iALyOdCtffqVQYAGgcCjb5TYI/msdg8hXoudKaR2Hv1IosABQKIiMdyE4B+BzUYorfYBj/ilMWAAoNGR4zXQoJlvnIPLBWo75p7BhAaBwKUr/AoKV1jGIPKX4g2Sq37WOQfRFLAAUKlI68ROo/NE6B5GH3kHfNF/8o9BhAaDw6dHvGijeso5B5AnBebLjxGbrGETrYwGg0JFdb2iB4FfWOYg88KyU1TxoHYJoQ1gAKJQkU3M/uGQwRZvCYZGl8GIBoBDTX4DDAimy5F4ZXjPdOgXRxrAAUGhJpvZFKP5hnYMoD61I68XWIYg2hQWAwq39XYA26xhEXaK4SUpr+CIrhRoLAIWaZGpeB/QO6xxEXbAcJc7vrEMQbQ4LAIVfuugyAGusYxB1iuIa2X3SEusYRJvDAkChJ6UTPwFwi3UOok5YDk3fYB2CqDNYACga2nJ/ArDaOgbRZlwlIyYutw5B1BksABQJMnLKYvAuAIXbEpQU89M/RQYLAEVHW+5KAKusYxBtkOrVMuxO/nxSZLAAUGTIyCmLocq7ABRGi9Gt5CbrEERdwQJA0eIWXw2+C0BhI3IVP/1T1LAAUKTIXn9bBL4LQOGyAk3urdYhiLqKBYCiJ5e9DkCrdQwiAIDiVhlVu9I6BlFXsQBQ5Mhed38EYIp1DiIAbRC90ToEUT5YACii5GpwpUCyplormdoF1jGI8sECQJEkmepXADxmnYMSLi3XWUcgyhcLAEWYXG2dgBLtUdmzpt46BFG+WAAosiRT/R8As6xzUFKxgFK0sQBQ1PEkTBYaOgooUWSxAFC0tfW4D8BH1jEocTjunyKPBYAiTUZOaAMw0ToHJcpqrNVa6xBEhWIBoOhLO7cByFnHoKTQGk78Q3HAAkCRJ6WT3odwSCAFRf5qnYDICywAFA+u8pksBUBfkEwNR55QLLAAUDxkdv0XoPOtY1DcCYsmxQYLAMWCyHgX4txhnYNibXnHqBOiWGABoPhIpW4HkLWOQTGlqJGRE5qsYxB5hQWAYkNKJ34C4AnrHBRTIjXWEYi8xAJA8SIcn00+ULyFsuqXrWMQeYkFgOKlteeDAFZZx6CYEdSIcPlpihcWAIqVjme0D1jnoJhRZ4p1BCKvsQBQ/DjgYwDykL4g5ZPesE5B5DUWAIqfPXeZCmCBdQyKCXFYKCmWWAAodkTGuwDuts5BsdCG1uw91iGI/MACQPGUAodskReelJFTFluHIPIDCwDFkuxZUw/gdescFHXCF0optlgAKL5U/2EdgSLNRTr1iHUIIr+wAFB8OakHrSNQpD3fMbskUSyxAFB8Dd/pJQg+to5BEcU7SBRzLAAUWx2jAR6yzkERpcqfHYo1FgCKOX6Ko7zMlRGT37QOQeQnFgCKt+4D/gPBSusYFDECvj9CsccCQLEmu97QApVHrXNQ1Li8c0SxxwJAScBPc9QVH2H45FnWIYj8xgJA8Se5xwHkrGNQZDzJpX8pCVgAKPakbPIyALOtc1BEqEy1jkAUBBYASgh90joBRYX8xzoBURBYACgZlAWAOkMbpXzSh9YpiILAAkDJUNT2PIA11jEo7BwWRUoMFgBKBCmtawXwrHUOCjl1+fyfEoMFgJJD9d/WESjUsmjGM9YhiILCAkDJkUrx9i5tyosyqpazRlJisABQcuw5aS4ALu9KG8Pb/5QoLACUGB2TuzxlnYPCSnj7nxKFBYCSRTDdOgKFUg7p5petQxAFiQWAEsZ9wToBhVKDlNattg5BFCQWAEqWJR/VA+CJntbHYkiJwwJAiSJfm5YFMNM6B4WMKgsAJQ4LACWQ8j0AWlcqzQJAicMCQAnk8GRPX7RQht/1tnUIoqCxAFDytGVfALjeO32Gt/8pmVgAKHFk5JTFAN6yzkEhIcICQInEAkBJxZM+deDQUEomFgBKqhetA1AouEi1zbIOQWSBBYCSSZw51hEoFN7mBECUVCwAlEyqDQBc6xhkrt46AJEVFgBKJMlUr4HiHescZEx1rnUEIissAJRcwk9/iedIg3UEIissAJRc7Y8BKMlUWAIpsVgAKLkc5ck/2VahrHq+dQgiKywAlFy5YhaAZGsQ4YyQlFwsAJRc5RPfA7DcOgaZ4SMgSjQWAEqsjk9/r1jnICPKFwAp2VgAKNmU7wEkVoovgVKysQBQwgnHgSdVNj3POgKRJRYASjaRN60jkIlFMmIi3/+gRGMBoGRLC5cFTiTlf3dKPBYASrY9dloAYK11DAocCwAlHgsAJZrIeBeCd61zUNDkbesERNZYAIhU+R5A0gjvABCxABDB4cUgaVyXpY8SjwWASPlpMHGK2vjfnBKPBYBI+GkwYZZJad1S6xBE1lgAiHIcEpYsnPuBCGABIAJG7PYBOBQwSVj4iMACQMShgEkjyiGARGABIPoMC0BSqLxnHYEoDNLWAYiCUlFRkZq/0h0GV7ZOOSpf/LNH/pvFln1lY5tSjDz3mrvFqCOOPuyLX3PVdVWcT4f0cV6rq6vLWWUjChLPeBR7Bx11VP+2tuILIfITKAZZ56FQWwjVW9dKrysbnqheYx2GyE8sABRr+x7xg4yoPAxgsHUWig4BXtEUvvnSow8ssM5C5BcWAIqtA771w6/ksngZwJbWWSiKZI6zyjnghRfqOEKEYokvAVJs5bJyC3jxp7xpudvbPds6BZFfWAAolkZ+4wd7AvpN6xwUdXoWeKeUYooFgGIpLTjKOgPFwjb7H/a9Pa1DEPmBBYDiyXWGWEegeMilUjtYZyDyAwsAxZRmrRNQPIjrtFlnIPIDCwDFkuvI69YZKB5S6SynDqZYYgGgWBJHHwTAT25UqMbpjz7IAkCxxAJAsdQxgctN1jko2kTkt9YZiPzCAkCxNSC19lcKPG2dg6JJBbe/+Pj991rnIPILCwDF1qOPPtrSo7XPkRC5CQBfCqTOahXgspf3LzvFOgiRnzjBBSXCfocfvSscHAfV/QBsCciXf/YdZ0sRh2sGxFku+4oCLV/+A1UACwUyHU6u9sXHHpwfdDSioLEAEHU4+MfjzoHKtdY5yD850V2m3zOBL/URgY8AiIiIEokFgIiIKIFYAIiIiBKIBYCIiCiBWACIiIgSiAWAiIgogVgAiIiIEogFgIiIKIFYAIiIiBKIBYCIiCiBOBUwJcb+R1TsklP3QKhu5Tj6pZ99KSo5yEkVfdsiGwUj29J0lai7ZP2vu64oHP0Emn725Sfq3rXIRhQ0FgCKvX0PP3qkiP4ZwCHWWSgCBI/nJHX2jMfqXreOQuQnFgCKtf0OP7pKRW8XoMQ6C0XKCkf1ey88+fenrYMQ+YUFgGJrn8N/dKgj7mMA0tZZKJKWuMiN+O8T//jAOgiRH/gSIMXS3nuPK3LEvRW8+FP+BjpIXWEdgsgvLAAUS6mBi44AsIt1Doo2BX584He/29s6B5EfWAAolhyRg60zUPQJUNLanB5hnYPIDywAFE+KgdYRKB4c0f7WGYj8wAJA8ST41DoCxYOjqUXWGYj8wAJAsSTQZ60zUCysbS1pmWMdgsgPLAAUS62Lt5iqwNvWOSjiFPfNfPjhJusYRH5gAaBYmjlzQpuonAXAtc5CUaUrVVKXWqcg8kvKOgCRXz5859U3B+88bDkgR4CTXlEXKNDiwDnupSfue8k6C5FfWAAo1ha8/dpLg3ce+l9A9gU4MoA6Q+bC0R+99PgDU62TEPmJn4ooEUaPHp1eUzToqyLuQY7K1ir6pcdfTio9HKn0/hb5KBhutvVuuO7K9b8uKq46+FhEnhncW56tq6vLWeQjChILAFGHg3887hyoXGudg/yTE91l+j0T+HIoEfgSIBERUSKxABARESUQCwAREVECsQAQERElEAsAERFRArEAEBERJRALABERUQKxABARESUQCwAREVECsQAQERElEKcCpkQ46Kij+re2dfsuoPs5IoM29D2SSu0KJ1UedDYKjra1PQro6g39mau6WFSmI9300EuPPvql9QKI4oYFgOJORh3xg1+q4iJA+liHoUhYAsgvX3ri/jutgxD5icsBU3yNH+/sVzxgCiDnAFJiHYcioweA72238+748O1Xn7YOQ+QXFgCKrf2KBlwMwZnWOSiaBPjq9jsPm/7h26+9Y52FyA98CZBiae/R3xkEwa+sc1CkCSCXW4cg8gsLAMVSUVHR99F+K5eoEPvu980fbm8dgsgPLAAUSyoy3DoDxYKIK8OsQxD5gQWA4qq7dQCKCeXPEsUTCwDFkkDft85AMSH6oXUEIj+wAFAsKdxHrTNQDAgWD+6TqreOQeQHFgCKpZeeeHAmBI9b56Cokxvq6upy1imI/MACQLGlmjoNwKfWOSiaVDA7W9x6tXUOIr+wAFBsvfxE3bvi6tcAvGadhSLnBU2lvjXz4YebrIMQ+YUFgGLtxX///dUBqbXlUP05gJcAuNaZKLRcBaYrcPIOfVMH//dfdZ9YByLyExcDokSpqKhIvbMyt6WTk40O7Srq02+848iYIHORv9xc20ltq1ZvdF5/N6Vrd+qTWsjn/ZQkLABE6znkx6f8UBX3W+cgz7S5zW0Dn3/ozlXWQYjChI8AiNbTrbjpcQAbXDOeIulJXvyJvowFgGg9T1RXr4Ho361zkDcUqLHOQBRGLABEG+C4Um2dgTyxpkdJ00PWIYjCiAWAaAOeLt1mKoAPrHNQoeS+J6qr11inIAojFgCiDRk/3hXRSdYxqDDqYKJ1BqKwYgEg2gjHwXUA+Okxul5+7u5bp1mHIAorFgCijZg2ZcJigdxhnYPyo8AV1hmIwowFgGgTnGz2KgCt1jmoixSNz+2xzSPWMYjCLGUdgCjM5r86a+WQPUcOBrC3dRbqPAHOeu/mP79inYMozHgHgGgzWpzcbwAst85BnaQy/Zm62+61jkEUdiwARJvx0pTbP4XgN9Y5qFNyksLPAah1EKKwYwEg6oSt3aU3QzHbOgdt1s3P3H0r/zsRdQILAFEn1NXV5VzHOR1cTji0FPg01drCOzVEncSXAIk66YPGGQuG7Ll3MSCHWGehL1FHncqnH7i93joIUVTwDgBRFzyz+7a/AfAf6xy0HsHVz9Tdwjn/ibqABYCoK8aPd7MqYwEsto5Cn5H/LnWXXmydgihqWACIuuiFuls/VMUYADnrLIQlKQfHNNbVcbImoi7iOwBEeXh/3sy3dthj5Cci+I51lgRbq6pHPXPvbQ3WQYiiiAWAKE/vz5s5c4fSvSGQ0dZZEiinKsc+V3fbE9ZBiKKKBYCoAO83znx6SOk+AwDsZ50lQVQU456tu22ydRCiKOM7AEQF2kqX/J8KuGpgMFQU5z5Tdxv/fRMVSKwDEMWEHHLMqZcq9FLrIDGWVcgpz9176wgWYhIAAAIFSURBVJ3WQYjigI8AiDzyXuOMaV/Zc+RSAEeA5dprTQL88Nl7ucgPkVdYAIg89H7jzJeH7DHydQiOBFBsnScmFqijRz17z4Rp1kGI4oSfUoh8cGDFaUMd5O6FSJl1lkhTTG1N5ypfmnL7p9ZRiOKGdwCIfPDBvBlLdtp3+ES0FfUBRwjkIyeQy58t3ebkD2+8ZrV1GKI44h0AIp8d9ONxFaK4DpBtrbNExFxx3FOfufuv062DEMUZ7wAQ+ez9xpnzhu21x225XFEKwChw+O3GNAnk90t16ZgZ91bPtw5DFHe8A0AUoAMqflaeEucGAAdZZwkRFch9cJzznrn75g+swxAlBQsAkYGDKsYdJJALIPi2dRZDLhT/gqOXPnvPhFnWYYiShgWAyNDBx5x6IKAXATgSyXk00ALI3a7KH56vu+V16zBEScUCQBQC+1ecul0R9Ecq+AmAjHUen8wURbWT1tppUyYstg5DlHQsAEQhc3DFqfvC0R9BcSiAckT3zkALIC+q4sk0nHum1d38lnUgIvofFgCiEDv0B2cMbC3KjRbo11WxNwRDAfSzzrURHyvwGkReSrn6n9XN+vzMhyc0WYciog1jASCKmAN+cOqWqXRud4Uz1IEOgEg/AL1VtLeo083fo7urAGc1xF3lqqxyRBYIcm80p7u9/lLtDSv9PTYReen/AbeNKKToOb16AAAAAElFTkSuQmCC";var Bg="data:image/png;base64,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";var Me=require("react/jsx-runtime"),ao=-100,oo=100,jg=.03,q1=.03,Y1=.03,Dg=.5,$1=Lg,K1=kg,Z1=Bg,J1=Math.PI/4,Ng=.4,lo=64,Og=jg*3,Ou="#4d7dff",Ig="#ffcc00",zg=.02,Hg=new lt.Vector3(0,1,0),lc=32,Ug="#ff9d3d",cc=4,Zr=1.4,dc=.35,Q1=.13,Vg=.12,Fg=.055,ew={x:"#ff4444",y:"#44ff44",z:"#4444ff"};function Gg(e){return new lt.Vector3(e==="x"?1:0,e==="y"?1:0,e==="z"?1:0)}function tw(e,t){let n=Gg(e);t.lengthSq()<1e-8&&(t=n.clone());let i=new lt.Vector3().crossVectors(n,new lt.Vector3().crossVectors(t,n));if(i.lengthSq()<1e-8){let r=Math.abs(n.y)<.9?Hg:new lt.Vector3(1,0,0);i=new lt.Vector3().crossVectors(n,r)}return i.normalize()}function Iu(e){let t=new Float32Array((lo+1)*3);for(let n=0;n<=lo;n++){let i=n/lo*Math.PI*2,r=Math.cos(i)*Ng,a=Math.sin(i)*Ng,o=0,s=0,c=0;e==="x"?(s=r,c=a):e==="y"?(o=r,c=a):(o=r,s=a),t[n*3]=o,t[n*3+1]=s,t[n*3+2]=c}return t}function nw(e){let t=Math.abs(e.y)<.99?new lt.Vector3(0,1,0):new lt.Vector3(1,0,0),n=new lt.Vector3().crossVectors(e,t).normalize(),i=new lt.Vector3().crossVectors(e,n).normalize();return[n,i]}function so(e,t,n){return Math.min(Math.max(e,t),n)}var co=null,zu=new Set;function _s(e){co!==e&&(co=e,zu.forEach(t=>t()))}function Uu(e){return zu.add(e),()=>zu.delete(e)}function uc(){return co}function Wg({light:e,position:t,color:n,intensity:i,visible:r,onPositionChange:a,onDraggingChange:o}){let{activeTab:s,activeSubTab:c,setActiveTab:l,setActiveSubTab:u}=vr(),{camera:d,gl:p,raycaster:f,invalidate:g}=(0,pc.useThree)(),y=(0,Ie.useRef)(null),T=(0,Ie.useRef)(null),x=(0,Ie.useRef)(null),h=(0,Ie.useRef)(null),m=(0,Ie.useRef)(null),S=(0,Ie.useRef)(null),M=(0,Ie.useRef)(null),C=(0,Ie.useRef)(null),L=(0,Ie.useRef)(null),b=(0,Ie.useRef)(null),_=(0,Ie.useRef)(null),v=(0,Ie.useRef)(null),P=(0,Ie.useRef)(null),z=(0,Ie.useRef)(null),E=(0,Ie.useRef)(null),V=(0,Ie.useRef)(null),A=(0,Ie.useRef)(null),X=(0,Ie.useRef)({dragging:!1,axis:null}),j=(0,Ie.useRef)(new lt.Plane),k=(0,Ie.useRef)(new lt.Vector3),B=(0,Ie.useRef)(null),Y=(0,Ie.useRef)(null),q=(0,Ie.useRef)(new lt.Vector3),ue=(0,Ie.useRef)(!1),Ee=(0,Ie.useRef)(new lt.Plane),be=(0,Ie.useRef)(o);(0,Ie.useEffect)(()=>{be.current=o},[o]);let Ce=(0,Ie.useMemo)(()=>new lt.Vector3(t[0],t[1],t[2]),[t]),De=(0,Ie.useMemo)(()=>new Float32Array(6),[]),ze=(0,Ie.useMemo)(()=>new Float32Array(6),[]),se=(0,Ie.useMemo)(()=>Iu("x"),[]),Lt=(0,Ie.useMemo)(()=>Iu("y"),[]),Xe=(0,Ie.useMemo)(()=>Iu("z"),[]),Ge=(0,Ie.useMemo)(()=>new Float32Array((lc+1)*3),[]),$e=(0,Ie.useMemo)(()=>new Float32Array(cc*2*3),[]),rt=e?.type==="point",it=e?.type==="spot",Qt=rt?K1:it?Z1:$1,qe=rt?q1:it?Y1:jg,on=(0,Ie.useMemo)(()=>new lt.TextureLoader().load(Qt),[Qt]),Gt=(0,Ie.useSyncExternalStore)(Uu,uc,uc),Ke=!!e&&Gt===e.id;if((0,Ie.useEffect)(()=>{ue.current||(q.current.copy(Ce),g())},[Ce,g]),(0,Ie.useEffect)(()=>{e&&co===e.id&&!r&&_s(null)},[e?.id,r]),(0,Ie.useEffect)(()=>()=>{e&&co===e.id&&_s(null)},[e?.id]),(0,pc.useFrame)(()=>{if(y.current&&y.current.position.copy(q.current),x.current){x.current.lookAt(d.position);let J=d,ee;J.isOrthographicCamera?ee=qe/J.zoom:ee=d.position.distanceTo(q.current)*qe,x.current.scale.setScalar(ee)}if(M.current){let J=d,ee;J.isOrthographicCamera?ee=Og/J.zoom:ee=d.position.distanceTo(q.current)*Og,M.current.scale.setScalar(ee)}if(_.current){let J=d,ee;J.isOrthographicCamera?ee=Fg/J.zoom:ee=d.position.distanceTo(q.current)*Fg,_.current.scale.setScalar(ee)}if(m.current){let J=m.current.getAttribute("position"),ee=J.array;ee[0]=0,ee[1]=0,ee[2]=0,ee[3]=q.current.x,ee[4]=q.current.y,ee[5]=q.current.z,J.needsUpdate=!0,m.current.computeBoundingSphere()}if(S.current){let J=q.current,ee=J.length();S.current.visible=ee>Dg,ee>1e-6&&(S.current.position.copy(J).multiplyScalar(.5),S.current.scale.set(1,ee,1),S.current.quaternion.setFromUnitVectors(Hg,J.clone().normalize()))}if(h.current&&(h.current.visible=q.current.length()>Dg),it&&C.current&&L.current&&b.current){let J=q.current,ee=J.length();if(ee>1e-6){C.current.visible=!0;let Ve=J.clone().negate().normalize(),tt=ee,Fe=e?.angle??Math.PI/6,xe=tt*Math.tan(Fe),ot=J.clone().add(Ve.clone().multiplyScalar(tt)),[gt,At]=nw(Ve),Kn=L.current.getAttribute("position"),Ln=Kn.array;for(let _t=0;_t<=lc;_t++){let We=_t/lc*Math.PI*2,Wt=ot.x+(gt.x*Math.cos(We)+At.x*Math.sin(We))*xe,Bt=ot.y+(gt.y*Math.cos(We)+At.y*Math.sin(We))*xe,Xt=ot.z+(gt.z*Math.cos(We)+At.z*Math.sin(We))*xe;Ln[_t*3]=Wt,Ln[_t*3+1]=Bt,Ln[_t*3+2]=Xt}Kn.needsUpdate=!0,L.current.computeBoundingSphere();let Ne=b.current.getAttribute("position"),dt=Ne.array;for(let _t=0;_t<cc;_t++){let We=_t/cc*Math.PI*2,Wt=ot.x+(gt.x*Math.cos(We)+At.x*Math.sin(We))*xe,Bt=ot.y+(gt.y*Math.cos(We)+At.y*Math.sin(We))*xe,Xt=ot.z+(gt.z*Math.cos(We)+At.z*Math.sin(We))*xe,en=_t*6;dt[en]=J.x,dt[en+1]=J.y,dt[en+2]=J.z,dt[en+3]=Wt,dt[en+4]=Bt,dt[en+5]=Xt}Ne.needsUpdate=!0,b.current.computeBoundingSphere()}else C.current.visible=!1}if(B.current&&(B.current.visible=X.current.dragging),Y.current&&X.current.dragging){let J=Y.current.getAttribute("position"),ee=J.array;ee[0]=k.current.x,ee[1]=k.current.y,ee[2]=k.current.z,ee[3]=q.current.x,ee[4]=q.current.y,ee[5]=q.current.z,J.needsUpdate=!0,Y.current.computeBoundingSphere()}}),(0,Ie.useEffect)(()=>{let J=Ne=>{let dt=p.domElement.getBoundingClientRect();return new lt.Vector2((Ne.clientX-dt.left)/dt.width*2-1,-((Ne.clientY-dt.top)/dt.height)*2+1)},ee=Ne=>!!Ne.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Ve=()=>{let Ne=[];return[v.current,E.current,P.current,V.current,z.current,A.current].forEach(dt=>{dt&&Ne.push(dt)}),Ne},tt=Ne=>Ne===v.current||Ne===E.current?"x":Ne===P.current||Ne===V.current?"y":Ne===z.current||Ne===A.current?"z":null,Fe=()=>{X.current.dragging&&(X.current={dragging:!1,axis:null},B.current&&(B.current.visible=!1),p.domElement.style.cursor="default",be.current?.(!1))},xe=()=>{ue.current&&(ue.current=!1,p.domElement.style.cursor="default",be.current?.(!1))},ot=Ne=>{if(X.current.dragging&&X.current.axis){let Bt=X.current.axis,Xt=q.current,en=Gg(Bt),Mr=new lt.Vector3().subVectors(d.position,Xt),we=tw(Bt,Mr);j.current.setFromNormalAndCoplanarPoint(we,Xt);let R=J(Ne);f.setFromCamera(R,d);let I=new lt.Vector3,$=f.ray.intersectPlane(j.current,I);if(!$)return;let te=$.clone().sub(Xt).dot(en),he=Xt.clone().add(en.clone().multiplyScalar(te)),pe=[so(Bt==="x"?he.x:Xt.x,ao,oo),so(Bt==="y"?he.y:Xt.y,ao,oo),so(Bt==="z"?he.z:Xt.z,ao,oo)];q.current.set(pe[0],pe[1],pe[2]),a?.(pe),g();return}if(!ue.current)return;let dt=J(Ne);f.setFromCamera(dt,d);let _t=new lt.Vector3,We=f.ray.intersectPlane(Ee.current,_t);if(!We)return;let Wt=[so(We.x,ao,oo),so(We.y,ao,oo),so(We.z,ao,oo)];q.current.set(Wt[0],Wt[1],Wt[2]),a?.(Wt),g()},gt=Ne=>{if(ee(Ne))return;let dt=J(Ne);if(f.setFromCamera(dt,d),Ke){let Wt=Ve(),Bt=Wt.length?f.intersectObjects(Wt,!1):[];if(Bt.length>0){let Xt=Bt[0].object,en=tt(Xt);if(en){let Mr=q.current;X.current={dragging:!0,axis:en},k.current.copy(Mr),be.current?.(!0),p.domElement.style.cursor="grabbing",p.domElement.setPointerCapture(Ne.pointerId),Ne.preventDefault(),Ne.stopPropagation();return}}}let _t=[];if(T.current&&_t.push(T.current),x.current&&_t.push(x.current),_t.length===0)return;if(f.intersectObjects(_t,!1).length>0){let Wt=e?.id??null;co!==Wt&&(_s(Wt),l?.("scene"),u?.("Lighting"));let Bt=new lt.Vector3;d.getWorldDirection(Bt),Ee.current.setFromNormalAndCoplanarPoint(Bt,q.current),ue.current=!0,be.current?.(!0),p.domElement.style.cursor="grabbing",p.domElement.setPointerCapture(Ne.pointerId),Ne.preventDefault(),Ne.stopPropagation()}},At=Ne=>{if(X.current.dragging){Fe();try{p.domElement.releasePointerCapture(Ne.pointerId)}catch{}}if(ue.current){xe();try{p.domElement.releasePointerCapture(Ne.pointerId)}catch{}}},Kn=()=>{Fe(),xe()},Ln=()=>{Fe(),xe()};return p.domElement.addEventListener("pointerdown",gt),window.addEventListener("pointermove",ot),window.addEventListener("pointerup",At),window.addEventListener("pointercancel",Kn),window.addEventListener("blur",Ln),()=>{p.domElement.removeEventListener("pointerdown",gt),window.removeEventListener("pointermove",ot),window.removeEventListener("pointerup",At),window.removeEventListener("pointercancel",Kn),window.removeEventListener("blur",Ln)}},[d,f,p,g,a,e,l,u,Ke]),s!=="scene"||c!=="Lighting"||!e||!r||e.type==="none"||e.type==="hemisphere")return null;let le=["x","y","z"];return(0,Me.jsxs)("group",{ref:J=>{J&&ah(J)},children:[(0,Me.jsxs)("group",{ref:y,children:[(0,Me.jsx)("sprite",{ref:x,children:(0,Me.jsx)("spriteMaterial",{map:on,transparent:!0,opacity:.9,blending:lt.AdditiveBlending,depthWrite:!1,rotation:it?J1:0},Qt)}),(0,Me.jsx)(hc.Sphere,{ref:T,args:[.25,16,16],children:(0,Me.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),rt&&(0,Me.jsxs)("group",{ref:M,children:[(0,Me.jsxs)("lineLoop",{renderOrder:999,children:[(0,Me.jsx)("bufferGeometry",{children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[se,3],count:lo+1})}),(0,Me.jsx)("lineBasicMaterial",{color:Ou,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Me.jsxs)("lineLoop",{renderOrder:999,children:[(0,Me.jsx)("bufferGeometry",{children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[Lt,3],count:lo+1})}),(0,Me.jsx)("lineBasicMaterial",{color:Ou,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Me.jsxs)("lineLoop",{renderOrder:999,children:[(0,Me.jsx)("bufferGeometry",{children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[Xe,3],count:lo+1})}),(0,Me.jsx)("lineBasicMaterial",{color:Ou,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]}),Ke&&(0,Me.jsx)("group",{ref:_,children:le.map(J=>{let ee=ew[J],Ve=new lt.Vector3(J==="x"?Zr:0,J==="y"?Zr:0,J==="z"?Zr:0),tt=new lt.Vector3(J==="x"?Zr-dc/2:0,J==="y"?Zr-dc/2:0,J==="z"?Zr-dc/2:0),Fe=new lt.Vector3(J==="x"?Zr/2:0,J==="y"?Zr/2:0,J==="z"?Zr/2:0),xe=J==="x"?[0,0,-Math.PI/2]:J==="y"?[0,0,0]:[Math.PI/2,0,0],ot=J==="x"?v:J==="y"?P:z,gt=J==="x"?E:J==="y"?V:A;return(0,Me.jsxs)("group",{children:[(0,Me.jsx)(hc.Line,{points:[new lt.Vector3(0,0,0),Ve],color:ee,transparent:!0,opacity:.9,lineWidth:2,depthTest:!1}),(0,Me.jsxs)("mesh",{ref:gt,position:Fe,rotation:xe,children:[(0,Me.jsx)("cylinderGeometry",{args:[Vg,Vg,Zr,8]}),(0,Me.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,Me.jsxs)("mesh",{ref:ot,position:tt,rotation:xe,children:[(0,Me.jsx)("coneGeometry",{args:[Q1,dc,8]}),(0,Me.jsx)("meshBasicMaterial",{color:ee,depthTest:!1})]})]},J)})})]}),!rt&&!it&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("mesh",{ref:S,children:[(0,Me.jsx)("cylinderGeometry",{args:[zg,zg,1,8,1,!0]}),(0,Me.jsx)("meshBasicMaterial",{color:Ig,transparent:!0,opacity:.05,blending:lt.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Me.jsxs)("line",{ref:h,children:[(0,Me.jsx)("bufferGeometry",{ref:m,children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[De,3],count:2})}),(0,Me.jsx)("lineBasicMaterial",{color:Ig,transparent:!0,opacity:.7,blending:lt.AdditiveBlending})]})]}),it&&(0,Me.jsxs)("group",{ref:C,children:[(0,Me.jsxs)("lineLoop",{renderOrder:999,children:[(0,Me.jsx)("bufferGeometry",{ref:L,children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ge,3],count:lc+1})}),(0,Me.jsx)("lineBasicMaterial",{color:Ug,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Me.jsxs)("lineSegments",{renderOrder:999,children:[(0,Me.jsx)("bufferGeometry",{ref:b,children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[$e,3],count:cc*2})}),(0,Me.jsx)("lineBasicMaterial",{color:Ug,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),(0,Me.jsxs)("line",{ref:J=>{B.current=J,J&&(J.visible=!1)},children:[(0,Me.jsx)("bufferGeometry",{ref:Y,children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[ze,3],count:2})}),(0,Me.jsx)("lineBasicMaterial",{color:"#ffffff",transparent:!0,opacity:.6})]})]})}var It=require("react"),Yg=require("@react-three/drei"),fc=require("@react-three/fiber"),Sn=require("three");var _n=require("three");function mc(e){e.updateWorldMatrix(!0,!0);let t=new _n.Matrix4().copy(e.matrixWorld).invert(),n=new _n.Box3,i=new _n.Box3,r=!1;return e.traverse(a=>{let o=a;if(!o.isMesh||!o.geometry||(o.geometry.boundingBox||o.geometry.computeBoundingBox(),!o.geometry.boundingBox))return;let s=new _n.Matrix4().multiplyMatrices(t,a.matrixWorld);i.copy(o.geometry.boundingBox).applyMatrix4(s),n.union(i),r=!0}),r?n.getCenter(new _n.Vector3):new _n.Vector3}function Xg(e,t="XYZ"){return new _n.Quaternion().setFromEuler(new _n.Euler(e[0],e[1],e[2],t))}function rw(e,t,n,i,r="XYZ"){let o=new _n.Vector3(...i).multiply(new _n.Vector3(...n)).applyQuaternion(Xg(t,r)).add(new _n.Vector3(...e));return[o.x,o.y,o.z]}function qg(e,t,n,i,r,a="XYZ"){let o=new _n.Vector3(...rw(e,t,i,r,a)),s=new _n.Vector3(...r).multiply(new _n.Vector3(...i)).applyQuaternion(Xg(n,a)),c=o.sub(s);return[c.x,c.y,c.z]}var Vu=require("react/jsx-runtime");function Fu({node:e,space:t,onTransformChange:n,onDraggingChange:i}){let r=(0,fc.useThree)(v=>v.invalidate),a=(0,It.useMemo)(()=>mc(e),[e]),o=(0,It.useMemo)(()=>new Sn.Matrix4,[]),s=(0,It.useRef)(!1),c=(0,It.useRef)(new Sn.Matrix4),l=(0,It.useRef)(new Sn.Matrix4),u=(0,It.useRef)(null),d=(0,It.useRef)(0),p=(0,It.useRef)([]),f=(0,It.useRef)(null),g=(0,It.useMemo)(()=>new Sn.Vector3,[]),y=(0,It.useMemo)(()=>new Sn.Quaternion,[]),T=(0,It.useMemo)(()=>new Sn.Vector3,[]),x=(0,It.useMemo)(()=>new Sn.Quaternion,[]),h=(0,It.useMemo)(()=>new Sn.Vector3(1,1,1),[]),m=(0,It.useMemo)(()=>new Sn.Quaternion,[]),S=(0,It.useMemo)(()=>new Sn.Vector3,[]),M=(0,It.useMemo)(()=>new Sn.Vector3,[]),C=(0,It.useRef)([0,0,0]),L=(0,It.useCallback)(()=>{s.current||(e.updateWorldMatrix(!0,!1),g.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(y),x.copy(y),t==="world"&&x.identity(),o.compose(g,x,h))},[g,o,x,h,e,a,t,y]);(0,It.useLayoutEffect)(()=>(L(),()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),i(!1);for(let v of p.current)qa(v);p.current=[]}),[i,L]),(0,fc.useFrame)(()=>L());let b=(0,It.useCallback)(()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),e.updateWorldMatrix(!0,!0),p.current=[];for(let v of Xa(e))Um(v)||(Ml(v,v.matrixWorld),p.current.push(v));e.updateWorldMatrix(!0,!1),g.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(y),e.getWorldScale(T),c.current.compose(g,y,T),l.current.copy(o),C.current=[e.rotation.x,e.rotation.y,e.rotation.z],u.current=null,s.current=!0,i(!0)},[g,o,e,i,a,y,T]),_=(0,It.useCallback)((v,P)=>{let z=c.current.clone().premultiply(P),E=l.current.clone().premultiply(P);z.decompose(S,y,M);let V=S.clone();E.decompose(g,x,h),t==="world"&&x.identity(),o.compose(g,x,h),v.decompose(S,m,M);let A=new Sn.Euler().setFromQuaternion(m,e.rotation.order),[X,j,k]=C.current,B=[X+A.x,j+A.y,k+A.z],Y=new Sn.Quaternion().setFromEuler(new Sn.Euler(B[0],B[1],B[2],e.rotation.order)),ue=(e.parent?.matrixWorld||new Sn.Matrix4).clone().invert(),Ee=V.clone().applyMatrix4(ue),be=a.clone().multiply(e.scale).applyQuaternion(Y),Ce=Ee.clone().sub(be),De=[Ce.x,Ce.y,Ce.z];e.position.set(De[0],De[1],De[2]),e.rotation.set(B[0],B[1],B[2],e.rotation.order),e.updateMatrixWorld(!0),r(),u.current={position:De,rotation:B}},[g,m,o,x,h,r,e,a,S,M,t,y]);return(0,Vu.jsx)("group",{children:(0,Vu.jsx)(Yg.PivotControls,{matrix:o,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:b,onDrag:(v,P,z,E)=>_(P,E),onDragEnd:()=>{s.current=!1;let v=u.current;if(u.current=null,v)n(v),f.current=requestAnimationFrame(()=>{f.current=null,i(!1)});else if(p.current.length>0){for(let P of p.current)qa(P);e.updateMatrixWorld(!0),r(),i(!1)}else i(!1);p.current=[]}})})}var U=require("react/jsx-runtime");function iw(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,i=n.getAttribute("skinIndex"),r=n.getAttribute("skinWeight"),a=n.getAttribute("position");if(!i||!r||!a)return null;let o=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],c=new mt.Vector3,l=s[0],u=1/0;for(let f of s){c.fromBufferAttribute(a,f);let g=c.distanceToSquared(o);g<u&&(u=g,l=f)}let d=i.getComponent(l,0),p=r.getComponent(l,0);for(let f=1;f<4;f++){let g=r.getComponent(l,f);g>p&&(p=g,d=i.getComponent(l,f))}return t.skeleton.bones[d]??null}function aw(e){let t=iw(e)??e.object,n=Ho(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let i=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[i.x,i.y,i.z]}}function ow(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let i=Dr(t,e.anchorNodeName);return i?(i.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(i.matrixWorld),!0):!1}function sw({annotation:e,enabled:t,controlsRef:n,offsetRef:i}){let r=(0,bc.useThree)(p=>p.scene),a=(0,O.useRef)(null),o=(0,O.useRef)(!1),s=(0,O.useMemo)(()=>new mt.Vector3,[]),c=(0,O.useMemo)(()=>new mt.Vector3,[]),l=(0,O.useMemo)(()=>new mt.Vector3,[]),u=e?.anchorNodeName,d=e?.anchorLocalPosition;return(0,O.useEffect)(()=>{a.current=null,o.current=!1},[u,e?.id]),(0,bc.useFrame)(()=>{let p=n.current,f=i.current;if(!t||!p||!f||!u||!d){o.current=!1;return}let g=a.current;if((!g||!g.parent)&&(g=Dr(r,u),a.current=g),!g){o.current=!1;return}g.updateWorldMatrix(!0,!1),s.set(d[0],d[1],d[2]).applyMatrix4(g.matrixWorld),!(o.current&&s.distanceToSquared(c)<1e-8)&&(c.copy(s),o.current=!0,l.copy(s).add(f),p.setLookAt(l.x,l.y,l.z,s.x,s.y,s.z,!0))}),null}function lw(e){let t={total:0,missing:0};return e.traverse(n=>{let i=n;!i.isMesh||!i.geometry||(t.total+=1,i.geometry.getAttribute("uv")||(t.missing+=1))}),t}function cw(e,t){let n=t?.camera;if(!(n instanceof mt.PerspectiveCamera))return null;let r=(e instanceof mt.Box3?e:new mt.Box3().setFromObject(e)).getSize(new mt.Vector3).length();return!Number.isFinite(r)||r<=0?null:(n.near=r/100,n.far=r*100,n.updateProjectionMatrix(),t&&(t.maxDistance=r*10),r)}function dw(e,t){let n=e.camera;if(!(n instanceof mt.PerspectiveCamera)||!(t>0))return;let i=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(i-n.near)<=n.near*.01||(n.near=i,n.updateProjectionMatrix())}async function $g(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function Ss({modelUrl:e,tilesetUrl:t,tilesErrorTarget:n=8,tilesCacheSize:i=800,onObjectCatalog:r,modelFormat:a,licenseKey:o,licenseValidationUrl:s,objectBindings:c,selectedObject:l,panelHoveredObject:u,onObjectBindingsChange:d,onObjectSelect:p,onObjectHover:f,onObjectEditLeaseChange:g,onModelLoaded:y,onLoadError:T,onAction:x,onHiddenObjectsChange:h,onCameraChange:m,onViewerReady:S,onTextureUpload:M,onAnimationsReady:C,onAnnotationsChange:L,activeAnnotation:b,onActiveAnnotationChange:_,lights:v,camera:P,backgroundColor:z,shadows:E=!0,showObjectBindingDataPanel:V=!0,customObjectBindingDataPanel:A,customSceneObjectsPanel:X,showSceneObjectsPanel:j=!0,showDownloadButton:k=!0,downloadFilename:B="model",showResetButton:Y=!0,showLoadingOverlay:q=!0,showMouseController:ue=!1,mouseControllerPosition:Ee="center-bottom",mouseControllerOpacity:be=1,moveSensitivity:Ce=.08,zoomSensitivity:De=1,sceneConfig:ze,onSceneConfigChange:se,disableZoom:Lt=!1,zoomOnSelected:Xe=!0,highlightOnHover:Ge=!0,enableCameraControls:$e=!0,onAutoFit:rt,refitOnResize:it=!0,renderMode:Qt="demand",maxDpr:qe=2,preserveDrawingBuffer:on=!1,performanceProfile:Gt="auto",dracoDecoderPath:Ke,ktx2TranscoderPath:le,meshopt:J=!0,showMeasureTools:ee=!1,showUvCheckerButton:Ve=!1,showExplodeControls:tt=!1,cinematic:Fe,measurementUnit:xe="m",enableXR:ot=!1,usdzUrl:gt,arScaleMode:At="normalized",mobileHandoffUrl:Kn,showAnnotationNavigation:Ln=!0,showAnnotationOnHover:Ne=!1,moveModeEnabled:dt=!1,objectTransformSpace:_t="world",enableKeyboardNavigation:We=!1,showViewGizmo:Wt=!1}){let{isInsideEditor:Bt,activeTab:Xt,activeSubTab:en}=vr(),Mr=Bt&&Xt==="scene"&&en==="Lighting",we=ac(o,s),R=(0,O.useMemo)(()=>ze??Mi,[ze]),[I,$]=(0,O.useState)(null),re=R.model.renderer==="uv-checker",te=Ve?I??re:re,he=(0,O.useMemo)(()=>{let w=te?"uv-checker":re?"pbr":R.model.renderer;return w===R.model.renderer?R:{...R,model:{...R.model,renderer:w}}},[re,R,te]);(0,O.useEffect)(()=>{$(null)},[e,R.model.renderer,Ve,t]);let pe=(0,O.useMemo)(()=>{if(z)return z;let w=R.background;return w.enabled&&w.type==="color"?w.color:"#1c1c1d"},[z,R]),bt=(0,O.useMemo)(()=>({dracoDecoderPath:Ke,ktx2TranscoderPath:le,meshopt:J}),[Ke,le,J]),St=(0,O.useMemo)(()=>xh(Gt),[Gt]),Pe=(0,O.useRef)(null),[Ze,Et]=(0,O.useState)(!1);(0,O.useEffect)(()=>{Pe.current&&(Pe.current.dollySpeed=Math.max(De,0))},[De]),(0,O.useEffect)(()=>{Pe.current&&(Pe.current.enabled=$e&&!Ze)},[$e,Ze]);let Se=(0,O.useRef)(null),Dt=(0,O.useRef)(new Map),pn=(0,O.useRef)(null),Tn=(0,O.useRef)(null),tn=(0,O.useRef)(null),qt=(0,O.useRef)({});(0,O.useEffect)(()=>()=>{for(let w of Object.values(qt.current))URL.revokeObjectURL(w)},[]);let ut=(0,O.useRef)({}),[,Fr]=(0,O.useState)(0),Ut=(0,O.useCallback)(()=>{Fr(w=>w+1)},[]),xa=(0,O.useRef)({}),bo=(0,O.useRef)(null),rr=(0,O.useRef)(null),[ni,Yc]=(0,O.useState)(null),$c=(0,O.useCallback)(w=>{rr.current=w,Yc(w)},[]),ya=(0,O.useRef)(new Set),ir=(0,O.useRef)(null);(0,O.useEffect)(()=>{let w=ni;if(!w||!We||!$e||dt)return;let N=new Set(["w","a","s","d"," ","c"]),oe=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),ce=0,ye=ht=>ht.code==="Space"?" ":ht.key.toLowerCase(),Vt=()=>{ya.current.clear(),ce=0,ir.current!==null&&(cancelAnimationFrame(ir.current),ir.current=null)},Ot=ht=>{let xn=Pe.current,vt=ya.current;if(!xn||vt.size===0){ir.current=null,ce=0;return}let Dn=ce?Math.min((ht-ce)/1e3,.05):1/60;ce=ht;let mn=Math.max(xn.distance*.75,.01)*Dn;vt.has("w")&&xn.forward(mn,!1),vt.has("s")&&xn.forward(-mn,!1),vt.has("a")&&xn.truck(-mn,0,!1),vt.has("d")&&xn.truck(mn,0,!1),vt.has(" ")&&xn.truck(0,mn,!1),vt.has("c")&&xn.truck(0,-mn,!1),ir.current=requestAnimationFrame(Ot)},vn=ht=>{if(ht.target!==w){Vt();return}if(oe.has(ht.key)){let vt=Pe.current;if(!vt)return;ht.preventDefault();let Dn=Math.PI/90,mn=Math.max(vt.distance*.05,.01);ht.key==="ArrowUp"?ht.shiftKey?vt.forward(mn,!0):vt.rotate(0,-Dn,!0):ht.key==="ArrowDown"?ht.shiftKey?vt.forward(-mn,!0):vt.rotate(0,Dn,!0):ht.key==="ArrowLeft"?vt.rotate(-Dn,0,!0):vt.rotate(Dn,0,!0);return}let xn=ye(ht);N.has(xn)&&(ht.preventDefault(),ya.current.add(xn),ir.current===null&&(ir.current=requestAnimationFrame(Ot)))},hn=ht=>{ya.current.delete(ye(ht))};return w.addEventListener("keydown",vn),w.addEventListener("keyup",hn),w.addEventListener("blur",Vt),()=>{w.removeEventListener("keydown",vn),w.removeEventListener("keyup",hn),w.removeEventListener("blur",Vt),Vt()}},[ni,$e,We,dt]);let Yt=(0,O.useRef)(null),[vo,Cr]=(0,O.useState)(c),[bi,wa]=(0,O.useState)({}),[Os,vi]=(0,O.useState)(null),[Hi,Zn]=(0,O.useState)(null),[Kc,Tr]=(0,O.useState)(null),[xo,Zc]=(0,O.useState)(null),[Jn,_a]=(0,O.useState)(null),[ar,Gi]=(0,O.useState)(null),kn=(0,O.useRef)(null),Sa=(0,O.useRef)(null),yo=(0,O.useRef)(0),Jc=(0,O.useRef)(null),[Is,Qc]=(0,O.useState)(0),jr=(0,O.useRef)(!1),Wi=(0,O.useRef)(!1),wo=(0,O.useRef)(!!P);wo.current=!!P;let or=(0,O.useRef)(null),[_o,Xi]=(0,O.useState)(!!e),[Ma,qi]=(0,O.useState)(!e||!!rt||!!P),[ri,zs]=(0,O.useState)(!1),[ed,So]=(0,O.useState)(!1),[Us,xi]=(0,O.useState)(!1),[Vs,Fs]=(0,O.useState)(!1),[js,td]=(0,O.useState)(null),[nd,Hs]=(0,O.useState)(!1),[Yi,Gs]=(0,O.useState)({total:0,missing:0}),[rd,Mo]=(0,O.useState)("Loading model..."),Pr=(0,O.useRef)({}),$i=(0,O.useCallback)(()=>{let w=Pe.current;if(!w||or.current)return;let N=w.getPosition(new mt.Vector3),oe=w.getTarget(new mt.Vector3);or.current={position:[N.x,N.y,N.z],target:[oe.x,oe.y,oe.z]}},[]),[D,H]=(0,O.useState)(!1),[ie,_e]=(0,O.useState)(0),[Oe,Rt]=(0,O.useState)(!1);(0,O.useEffect)(()=>{_e(0),Rt(!1)},[e,t]);let Mt=(0,O.useMemo)(()=>{let w=R.cinematic,N=w?.enabled?{waypoints:w.waypoints,duration:w.duration,loop:w.loop,autoPlay:w.autoPlay}:null;return Fe===void 0?N&&(N.waypoints?.length??0)>=2?N:null:Fe===!1?null:Fe===!0?N??{}:{...N??{},...Fe}},[Fe,R]),[Je,Bn]=(0,O.useState)(!1),[Fv,Ca]=(0,O.useState)(!1),id=(0,O.useRef)(!1);(0,O.useEffect)(()=>{Bn(!1),Ca(!1),id.current=!1},[e,t]),(0,O.useEffect)(()=>{!Mt?.autoPlay||id.current||ri&&Ma&&!_o&&(id.current=!0,Bn(!0),Ca(!1))},[Mt,ri,Ma,_o]);let{xrStore:Ki,presenterRef:jv,arSupported:ad,vrSupported:wp,quickLookSupported:_p,resolvedMobileHandoffUrl:Ws,isMobileHandoffOpen:Sp,arOverlay:Hv,openMobileHandoff:Gv,closeMobileHandoff:Mp,openQuickLook:Wv,handleARStateChange:Xv}=Mh({enableXR:ot,usdzUrl:gt,mobileHandoffUrl:Kn}),[Hr,Cp]=(0,O.useState)(()=>ze?.annotations??[]);(0,O.useEffect)(()=>{if(Hr.length>0){let w=Hr.reduce((N,oe)=>Math.max(N,oe.id),0);Ys.current=w}else Ys.current=0},[Hr]);let[Wn,Xs]=(0,O.useState)(null),[yi,qs]=(0,O.useState)({title:"",description:""}),Ys=(0,O.useRef)(0),[qv,Tp]=(0,O.useState)(null),[sr,Ta]=(0,O.useState)(-1),[Pp,$s]=(0,O.useState)(!1),Pa=(0,O.useRef)(null),sn=(0,O.useMemo)(()=>[...Hr].sort((w,N)=>w.id-N.id),[Hr]),Ks=(0,O.useMemo)(()=>sr<0||sr>=sn.length?null:sn[sr],[sr,sn]),Gr=(0,O.useCallback)(w=>{if(b!==void 0){_?.(w);return}Tp(w?{annotation:w}:null)},[b,_]),Aa=(0,O.useCallback)(w=>{let N=Pe.current,oe=kn.current;if(!N)return;let ce=new mt.Vector3,ye=Dt.current.get(w.id);ye?ce.copy(ye):oe&&ow(w,oe,ce)||ce.set(w.worldPosition[0],w.worldPosition[1],w.worldPosition[2]),Se.current=null;let Vt=N.smoothTime;N.smoothTime=.6;let Ot=w.worldNormal;if(oe){let vn=new mt.Box3().setFromObject(oe),hn=new mt.Vector3;vn.getCenter(hn);let ht=new mt.Vector3;vn.getSize(ht);let xn=ht.length()*.2,vt;Ot?vt=new mt.Vector3(Ot[0],Ot[1],Ot[2]):vt=ce.clone().sub(hn),vt.lengthSq()<1e-6&&vt.set(0,0,1),vt.normalize();let Dn=Math.max(xn*.6,.3),mn=ce.clone().add(vt.multiplyScalar(Dn));N.setPosition(mn.x,mn.y,mn.z,!0),w.anchorNodeName&&w.anchorLocalPosition&&(Se.current=mn.clone().sub(ce))}N.setTarget(ce.x,ce.y,ce.z,!0),Pa.current&&clearTimeout(Pa.current),Pa.current=setTimeout(()=>{N.smoothTime=Vt,Pa.current=null},800),Gr(w)},[Gr]),Yv=(0,O.useCallback)(()=>{sn.length!==0&&(H(!0),Ta(0),Aa(sn[0]))},[sn,Aa]),$v=(0,O.useCallback)(()=>{if(sn.length===0||sr<0)return;$s(!0);let w=(sr-1+sn.length)%sn.length;Ta(w),Aa(sn[w]),setTimeout(()=>$s(!1),500)},[sr,sn,Aa]),Kv=(0,O.useCallback)(()=>{if(sn.length===0||sr<0)return;if(sr===sn.length-1){if(H(!1),Ta(-1),Gr(null),Pe.current&&or.current){let N=or.current;Pe.current.setLookAt(N.position[0],N.position[1],N.position[2],N.target[0],N.target[1],N.target[2],!0)}return}$s(!0);let w=sr+1;Ta(w),Aa(sn[w]),setTimeout(()=>$s(!1),500)},[sr,sn,Aa,Gr]),Zv=(0,O.useCallback)(()=>{if(H(!1),Ta(-1),Gr(null),Pe.current&&or.current){let w=or.current;Pe.current.setLookAt(w.position[0],w.position[1],w.position[2],w.target[0],w.target[1],w.target[2],!0)}},[Gr]);(0,O.useEffect)(()=>{Ta(-1),H(!1)},[sn.length]),(0,O.useEffect)(()=>()=>{Pa.current&&clearTimeout(Pa.current)},[]),(0,O.useEffect)(()=>{Ks&&D&&Gr(Ks)},[Ks,Gr,D]),(0,O.useEffect)(()=>{if(ze?.annotations===void 0)return;let w=ze.annotations.map(N=>({...N,localPosition:N.localPosition??N.worldPosition}));Cp(w)},[ze?.annotations]);let Co=(0,O.useCallback)(()=>{if(b!==void 0){_?.(null);return}Tp(null)},[b,_]),To=b!==void 0?b:qv?.annotation??null,Po=(0,O.useMemo)(()=>To?Hr.find(N=>N.id===To.id)??null:null,[To,Hr]);(0,O.useEffect)(()=>{To&&!Po&&Co()},[To,Po,Co]);let Ao=d!==void 0,Nt=Ao?c:vo;Pr.current=Nt;let Jv=(0,O.useMemo)(()=>Object.entries(Nt).map(([w,N])=>JSON.stringify([w,N.modelObjectId,N.transform??null])).sort().join(""),[Nt]),{measureMode:Eo,measureModeRef:Qv,measurePoints:Ap,showDimensions:od,measureBox:Ep,modelBounds:e0,refreshBounds:Rp,clearMeasurements:t0,toggleMeasureMode:n0,toggleDimensions:r0,handleMeasurePointerDown:i0,handleMeasureClick:a0}=bh({canvasAreaRef:rr,controlsRef:Pe,sceneRef:kn,modelUrl:e,modelRotation:R.model.rotation,bindingTransformSignature:Jv,modelLoaded:ri}),{isDownloading:sd,downloadMenuOpen:o0,uvExportError:Lp,toggleDownloadMenu:s0,handleDownloadMesh:l0,handleDownloadScreenshot:c0,handleDownloadUvLayout:d0}=gh({sceneRef:kn,materialRefs:xa,rendererCaptureRef:tn,objectBindings:Nt,downloadFilename:B}),kp=(0,O.useMemo)(()=>Object.fromEntries(Object.entries(Nt).filter(([,w])=>w.visible===!1).map(([w])=>[w,!0])),[Nt]),ii=(0,O.useMemo)(()=>{let w=new WeakMap,N=new Map,oe=new Map;for(let[ce,ye]of Object.entries(Nt))w.set(ye,ce),N.has(ye.id)||N.set(ye.id,ce),oe.has(ye.modelObjectId)||oe.set(ye.modelObjectId,ce);return{byReference:w,byId:N,byModelObjectId:oe}},[Nt]),wi=(0,O.useCallback)(w=>w?ii.byReference.get(w)??ii.byModelObjectId.get(w.modelObjectId)??ii.byId.get(w.id)??null:null,[ii]),ld=l!==void 0,Ro=ld?l??null:xo,Ar=wi(Ro),cd=Ar?ut.current[Ar]??null:null,Bp=wi(Ge?u??Hi??Kc:null),u0=Bp?ut.current[Bp]??null:null,Dp=(0,O.useCallback)(w=>{Tr(w),f?.(w)},[f]),Np=V&&Ro!==null&&Ar!==null,Op=(Ar?Nt[Ar]:null)??Ro;(0,O.useEffect)(()=>{Ao||Cr(c)},[Ao,c]),(0,O.useEffect)(()=>{h?.(kp)},[kp,h]);let Ea=(0,O.useCallback)(w=>{ld||Zc(w),p?.(w)},[ld,p]),Ra=(0,O.useCallback)(w=>{Ao||Cr(w),d?.(w)},[Ao,d]),p0=(0,O.useCallback)(w=>{let N=Ar;if(!N||!w)return;let oe=Pr.current[N];oe&&Ra({...Pr.current,[N]:{...oe,transform:{...oe.transform,...w}}})},[Ra,Ar]),ai=(0,O.useCallback)((w,N)=>Nt[w]?w:N?wi(N):ii.byId.get(w)??ii.byModelObjectId.get(w)??null,[Nt,wi,ii]),Lo=(0,O.useCallback)((w,N)=>{let oe=ai(w),ce=oe?Nt[oe]:void 0;!oe||!ce||Ra({...Nt,[oe]:{...ce,style:N(ce.style)}})},[ai,Nt,Ra]),lr=(0,O.useCallback)(()=>{if(Jn){let w=bi[Jn.objectId]?.hex;w!==void 0&&(Lo(Jn.objectId,N=>({...N,material:{...N?.material,baseColor:w}})),wa(N=>({...N,[Jn.objectId]:{}})))}_a(null)},[Jn,bi,Lo]),Ip=(0,O.useCallback)(()=>{Ea(null),vi(null),lr(),Gi(null)},[Ea,lr]),dd=(0,O.useCallback)((w,N,oe,ce,ye)=>{let Vt=bo.current,Ot=rr.current,vn=Pe.current?.camera;if(!Vt)return{objectId:w,x:24,y:24};let hn=Vt.getBoundingClientRect(),ht=12,xn=hn.width-N-ht,vt=hn.height-oe-ht,Dn=Math.max(ht,(hn.width-N)/2),mn=Math.max(ht,(hn.height-oe)/2),ka=ai(w,ce),Do=ka?ut.current[ka]:null,Wr=(Ba,Zi)=>Zi<=ht?ht:Math.min(Math.max(Ba,ht),Zi);if(Ot&&vn&&Do){let Ba=Ot.getBoundingClientRect(),Zi=new mt.Vector3;new mt.Box3().setFromObject(Do).getCenter(Zi),Zi.project(vn);let A0=(Zi.x+1)/2*Ba.width+(Ba.left-hn.left),E0=(1-Zi.y)/2*Ba.height+(Ba.top-hn.top);return{objectId:w,x:Wr(A0+24,xn),y:Wr(E0-oe/2,vt)}}let md=typeof ye?.screenX=="number"?ye.screenX-hn.left:Dn,fd=typeof ye?.screenY=="number"?ye.screenY-hn.top:mn;return{objectId:w,x:Wr(md,xn),y:Wr(fd,vt)}},[ai]),Zs=(0,O.useCallback)(w=>{let{objectId:N,action:oe,binding:ce}=w;switch(vi(w),oe.id){case"toggle-visibility":{let ye=N;ce?.modelObjectId&&(ye=ii.byModelObjectId.get(ce.modelObjectId)??ye);let Vt=Nt[ye],Ot=Vt?.visible===!1;Vt&&Ra({...Nt,[ye]:{...Vt,visible:Ot}});break}case"change-color":lr(),Gi(null),wa(ye=>{let Vt=ai(N,ce)??N,Ot=ye[N]?.hex,vn=Nt[Vt]?.style?.material?.baseColor;return{...ye,[N]:{...ye[N],hex:Ot??vn??"#ffffff"}}}),_a(dd(N,225,250,ce,w));break;case"change-material":lr(),Gi(dd(N,300,320,ce,w));break;default:break}x?.(w)},[Ra,Nt,dd,x,lr,ai,ii]);(0,O.useEffect)(()=>{if(Jn)return window.addEventListener("pointerdown",lr),()=>window.removeEventListener("pointerdown",lr)},[Jn,lr]),(0,O.useEffect)(()=>{if(!ar)return;let w=()=>Gi(null);return window.addEventListener("pointerdown",w),()=>window.removeEventListener("pointerdown",w)},[ar]),(0,O.useEffect)(()=>{if(!Po)return;let w=N=>{if(Yt.current&&!Yt.current.contains(N.target)){if(N.target.closest?.(".ri-annotationMarker"))return;Co()}};return document.addEventListener("mousedown",w),document.addEventListener("touchstart",w),()=>{document.removeEventListener("mousedown",w),document.removeEventListener("touchstart",w)}},[Po,Co]),(0,O.useEffect)(()=>{if(!Wn)return;let w=N=>{let oe=N.target;if(oe.closest?.(".ri-annotationPopup")||oe.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let ce=rr.current;!ce||!ce.contains(oe)||(Xs(null),qs({title:"",description:""}))};return document.addEventListener("mousedown",w,!0),document.addEventListener("touchstart",w,!0),()=>{document.removeEventListener("mousedown",w,!0),document.removeEventListener("touchstart",w,!0)}},[Wn]);let zp=(0,O.useCallback)((w,N)=>{let oe=qt.current[w];oe&&URL.revokeObjectURL(oe),N.startsWith("blob:")?qt.current[w]=N:delete qt.current[w],Lo(w,ce=>({...ce,material:{...ce?.material,texture:{path:N}}}))},[Lo]),h0=w=>{let N=w.target.files?.[0],oe=Tn.current;if(!N||!oe)return;let ce=ai(oe);ce&&(M?M(N,ce).then(ye=>zp(ce,ye),ye=>console.error("onTextureUpload failed:",ye)):zp(ce,URL.createObjectURL(N)),w.target.value="")},Up=w=>{Tn.current=w,pn.current?.click()},Vp=w=>{let N=ai(w);if(!N)return;Lo(N,ce=>ce?.material?.texture?{...ce,material:{...ce.material,texture:void 0}}:ce);let oe=qt.current[N];oe&&(URL.revokeObjectURL(oe),delete qt.current[N])},ud=(0,O.useRef)(S);ud.current=S;let Er=(0,O.useCallback)(()=>{let w=Pe.current;!w||!ud.current||ud.current({controls:w,scene:kn.current,objectBindings:Pr.current,nodeRefs:ut.current,homeCameraState:or.current,captureImage:N=>el(tn.current,N),invalidate:()=>tn.current?.invalidate()})},[]),La=(0,O.useCallback)(async(w=!1)=>{let N=Pe.current,oe=Sa.current??kn.current;if(!N||!oe)return!1;try{if(w){let ce=(oe instanceof mt.Box3?oe:new mt.Box3().setFromObject(oe)).getBoundingSphere(new mt.Sphere),ye=ce.center.clone(),Ot=N.getPosition(new mt.Vector3).clone().sub(N.getTarget(new mt.Vector3));Ot.lengthSq()<1e-6&&Ot.set(0,0,1),Ot.normalize();let vn=Math.max(ce.radius*10,20),hn=ye.clone().add(Ot.multiplyScalar(vn));await N.setLookAt(hn.x,hn.y,hn.z,ye.x,ye.y,ye.z,!1)}return qi(!0),await $g(N,()=>N.fitToBox(oe,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(ce=>{let ye=performance.now(),Vt=()=>{N.active===!1||performance.now()-ye>8e3?(N.dispatchEvent({type:"update"}),tn.current?.invalidate(),ce()):(tn.current?.invalidate(),setTimeout(Vt,100))};setTimeout(Vt,100)}),jr.current=!0,$i(),Er(),!0}catch(ce){return console.error("Fit scene error:",ce),!1}},[$i,Er]);(0,O.useEffect)(()=>{if(jr.current=!1,Wi.current=!1,or.current=null,kn.current=null,Sa.current=null,zs(!1),So(!1),xi(!1),Gs({total:0,missing:0}),Mo("Loading model..."),!e){Xi(!1),qi(!0);return}Xi(!0),qi(!!rt||wo.current);let w=!1,N=null,oe=ye=>{N=setTimeout(ce,ye)},ce=()=>{if(w||jr.current||Wi.current)return;let ye=Sa.current??kn.current;if(!Pe.current||!ye){oe(100);return}if(yo.current=cw(ye,Pe.current)??yo.current,Rg(Pe.current)){jr.current=!0,$i(),Er(),Xi(!1),qi(!0),tn.current?.invalidate();return}Wi.current=!0,(rt?rt():wo.current?Promise.resolve(!0):La(!0)).then(Ot=>{jr.current=Ot!==!1,jr.current?($i(),Er(),Xi(!1)):w||oe(100)}).catch(()=>{jr.current=!1,w||oe(100)}).finally(()=>{Wi.current=!1})};return oe(50),()=>{w=!0,N&&clearTimeout(N)}},[$i,La,e,Er,rt,t]),(0,O.useEffect)(()=>{if(!it)return;let w=ni;if(!w)return;let N=null,oe=new ResizeObserver(()=>{!jr.current||Wi.current||(N&&clearTimeout(N),N=setTimeout(()=>{La()},150))});return oe.observe(w),()=>{oe.disconnect(),N&&clearTimeout(N)}},[ni,La,it]);let Fp=(0,O.useCallback)(w=>{if(Qv.current||(Bn(!1),lr(),Gi(null),vi(null),Ea(w),Lt||!Xe))return;let N=Pe.current,oe=wi(w),ce=oe?ut.current[oe]:null;N&&w.cameraState?.position&&w.cameraState?.target?(N.setPosition(w.cameraState.position[0],w.cameraState.position[1],w.cameraState.position[2],!0),N.setTarget(w.cameraState.target[0],w.cameraState.target[1],w.cameraState.target[2],!0)):N&&ce&&N.fitToBox(ce,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Ea,lr,wi,Lt,Xe]),jp=(0,O.useCallback)(w=>{if(Ea(w),Lt)return;let N=Pe.current,oe=wi(w),ce=oe?ut.current[oe]:null;if(!N||!ce)return;let ye=w.cameraState;ye?.position&&ye?.target?(N.setPosition(ye.position[0],ye.position[1],ye.position[2],!0),N.setTarget(ye.target[0],ye.target[1],ye.target[2],!0)):N.fitToBox(ce,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Ea,wi,Lt]);(0,O.useEffect)(()=>{Er()},[Er]);let Hp=(0,O.useCallback)((w,N)=>{dw(N,yo.current),m?.(w,N),Er()},[Er,m]),m0=(0,O.useCallback)(w=>{Jc.current=new Set(w.map(N=>N.name)),Qc(N=>N+1),r?.(w)},[r]),f0=(0,O.useCallback)(w=>{Sa.current=w,tn.current?.invalidate()},[]),Gp=(0,O.useCallback)(w=>{kn.current=w,Rp(w),Gs(lw(w));let N=Io(w);td(N>Ji?N:null),Hs(!1),N>Ji&&Mo(`Preparing large model (${Math.round(N/1e6)}M triangles) \u2014 the first display can take a while on this device...`),zs(!0),So(!1),Fs(!1),y?.(w),Er()},[Er,y,Rp]),Wp=(0,O.useCallback)(w=>{Xi(!1),qi(!0),So(!0),T?.(w)},[T]),g0=(0,O.useCallback)((w,N)=>{if(!se)return;let oe={...R,lighting:{...R.lighting,lights:R.lighting.lights.map(ce=>ce.id===w?{...ce,position:N}:ce)}};se(oe)},[R,se]);(0,O.useEffect)(()=>{let w=kn.current;if(!ri||!w){xi(!1);return}let N=Object.entries(Nt);if(N.length===0){xi(!1);return}let oe=t?Jc.current:new Set(Object.keys(Fa(w).nodesById));if(!oe||oe.size===0){xi(!1);return}let ce=N.some(([ye,Vt])=>!oe.has(Vt.modelObjectId??ye));xi(ce)},[ri,Nt,Is,t]);let pd=(0,O.useCallback)(async()=>{if(rt){await rt();return}let w=Pe.current;if(!w)return;let N=or.current;try{N?await $g(w,()=>w.setLookAt(N.position[0],N.position[1],N.position[2],N.target[0],N.target[1],N.target[2],!0)):await La()}catch(oe){console.error("Reset camera error:",oe)}},[rt,La]),s_=(0,O.useCallback)(()=>{Ca(!1),Bn(!0)},[]),l_=(0,O.useCallback)(()=>{Bn(!1)},[]),b0=(0,O.useCallback)(()=>{Bn(!1),Ca(!0),setTimeout(()=>{pd()},100)},[pd]),v0=(0,O.useCallback)((w,N)=>{Hp(w,N)},[Hp]),x0=(0,O.useCallback)(w=>{let N=Xt==="scene"&&en==="Annotations";if(w.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let ce=rr.current,ye=Pe.current,Vt=ye?.camera,Ot=kn.current;if(!ce||!ye||!Vt||!Ot||!N&&!ye.enabled)return;let vn=ce.getBoundingClientRect(),hn=(w.clientX-vn.left)/vn.width*2-1,ht=-((w.clientY-vn.top)/vn.height)*2+1,xn=new mt.Raycaster;xn.setFromCamera(new mt.Vector2(hn,ht),Vt);let vt=xn.intersectObject(Ot,!0);if(vt.length===0)return;if(!N){let{x:Wr,y:md,z:fd}=vt[0].point;ye.setOrbitPoint(Wr,md,fd);return}let Dn=vt[0],mn=Dn.point,ka=Ot.worldToLocal(Dn.point.clone()),Do=[0,0,1];if(Dn.face){let Wr=Dn.face.normal.clone().transformDirection(Dn.object.matrixWorld).normalize();Do=[Wr.x,Wr.y,Wr.z]}Xs({worldPosition:[mn.x,mn.y,mn.z],localPosition:[ka.x,ka.y,ka.z],worldNormal:Do,anchor:aw(Dn),screenX:w.clientX-vn.left,screenY:w.clientY-vn.top}),qs({title:"",description:""})},[Xt,en]),Xp=(0,O.useCallback)(()=>{if(!Wn||!yi.title.trim())return;Ys.current+=1;let N={id:Ys.current,worldPosition:Wn.worldPosition,localPosition:Wn.localPosition,worldNormal:Wn.worldNormal,anchorNodeName:Wn.anchor?.anchorNodeName,anchorLocalPosition:Wn.anchor?.anchorLocalPosition,title:yi.title.trim(),description:yi.description},oe=[...Hr,N];Cp(oe),L?.(oe),Xs(null)},[Wn,yi,Hr,L]),hd=(0,O.useCallback)(()=>Xs(null),[]),y0=(0,O.useCallback)(w=>{Gr(w)},[Gr]);if(we.status==="checking")return(0,U.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,U.jsx)(ea,{title:"Verifying License",message:"Checking your license key..."})});if(we.status==="invalid")return(0,U.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,U.jsx)(ea,{tone:"error",title:"Invalid License",message:we.isLocalDomain?we.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let qp=ar?ai(ar.objectId):null,Yp=qp?Nt[qp]?.style?.material?.texture?.path:void 0,w0=rr.current?.offsetWidth??600,_0=rr.current?.offsetHeight??400,S0=350,M0=290,C0=Wn?Math.min(Wn.screenX+12,w0-S0-8):0,T0=Wn?Math.min(Wn.screenY,_0-M0-8):0,P0=q&&!!e&&!ed&&(!ri||!Ma||_o),ko=ot&&(Ki&&(ad||wp)||_p||!!Ws),Bo=w=>16+w*42;return(0,U.jsxs)("div",{className:"ri-viewer",style:{background:pe},children:[(0,U.jsxs)("div",{className:"ri-viewerLeft",ref:bo,children:[A?A({isOpen:Np,selectedObject:Op,currentAction:Os,onClose:Ip,onAction:Zs}):(0,U.jsx)(ku,{isOpen:Np,selectedObject:Op,currentAction:Os,onClose:Ip,onAction:Zs,renderActionExtra:w=>w==="change-color"&&Jn?(0,U.jsx)(Ru,{inline:!0,colorPicker:Jn,onClose:lr,itemMaterials:bi,setItemMaterials:wa}):w==="change-material"&&ar?(0,U.jsx)(Lu,{inline:!0,triggerFileUpload:Up,materialPopup:ar,textureUrl:Yp,clearTexture:Vp}):null}),(0,U.jsxs)("div",{className:`ri-canvasArea ${Eo?"ri-canvasArea--measuring":""} ${Ma?"":"ri-canvasArea--positioning"} ${dt?"ri-canvasArea--moveMode":""}`,ref:$c,tabIndex:We?0:void 0,onDoubleClick:x0,onPointerDown:w=>{We&&rr.current?.focus({preventScroll:!0}),i0(w)},onClick:a0,children:[Us&&!Vs&&(0,U.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,U.jsx)(Le.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,U.jsx)("span",{children:"Object bindings data don't match this model"}),(0,U.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:w=>{w.stopPropagation(),Fs(!0)},"aria-label":"Dismiss",children:(0,U.jsx)(Le.X,{size:12})})]}),js!==null&&!nd&&(0,U.jsxs)("div",{className:`ri-largeModelBanner ${Us&&!Vs?"ri-largeModelBanner--offset":""}`,children:[(0,U.jsx)(Le.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,U.jsxs)("span",{children:["Very large model (",Math.round(js/1e6),"M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the objects panel to select parts."]}),(0,U.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:w=>{w.stopPropagation(),Hs(!0)},"aria-label":"Dismiss",children:(0,U.jsx)(Le.X,{size:12})})]}),he.model.renderer==="uv-checker"&&Yi.missing>0&&(0,U.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,U.jsx)(Le.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,U.jsxs)("span",{children:[Yi.missing===Yi.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${Yi.missing} of ${Yi.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),(0,U.jsx)("input",{ref:pn,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:h0}),(0,U.jsxs)(Ld,{camera:P,backgroundColor:z,shadows:E&&R.shadows.enabled,sceneConfig:he,selectedObjectRef:cd,hoveredObjectRef:u0,highlightOnHover:Ge,renderMode:Qt,maxDpr:qe,reduceGpuLoad:St,xrStore:Ki,rendererCaptureRef:tn,preserveDrawingBuffer:on,children:[v??(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Dd,{lightingConfig:R.lighting,shadowConfig:R.shadows,shadowsEnabled:E,environmentRotation:R.environment.rotation,environmentConfig:R.environment,modelBounds:e0,objectBindings:Nt,nodeRefs:ut}),Mr&&R.lighting.lights.map(w=>!w.visible||w.type==="none"||w.type==="hemisphere"||w.attachment?null:(0,U.jsx)(Wg,{light:w,position:w.position,color:w.color,intensity:w.intensity,visible:w.visible,onPositionChange:N=>g0(w.id,N)},w.id))]}),(0,U.jsx)(kd,{controlsRef:Pe,onCameraChange:v0}),Wt&&(0,U.jsx)(gc.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{Pe.current?.update(0),tn.current?.invalidate()},children:(0,U.jsx)(gc.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),dt&&cd&&Ar&&(0,U.jsx)(Fu,{node:cd,space:_t,onTransformChange:p0,onDraggingChange:w=>{Et(w),Ro&&g?.(Ro,w)}},Ar),(0,U.jsx)(Qs,{onLoadError:Wp,children:(0,U.jsx)(O.Suspense,{fallback:null,children:(()=>{let w=(0,U.jsxs)(U.Fragment,{children:[t?(0,U.jsx)(yu,{url:t,rotation:he.model.rotation,errorTarget:n,cacheSize:i,decoderConfig:bt,objectBindings:Nt,itemMaterials:bi,sceneConfig:he,selectedItem:Ar,panelHoveredItem:u??Hi,highlightOnHover:Ge,onItemClick:Fp,onItemHover:Dp,onObjectCatalog:m0,onTilesetBounds:f0,onModelLoaded:Gp,onLoadError:Wp,nodeRefsOut:ut,onNodeRefsChange:Ut,materialRefsOut:xa,explodeFactor:ie,suspendBindingTransforms:Ze}):(0,U.jsx)(Wd,{url:e,modelFormat:a,objectBindings:Nt,selectedItem:Ar,itemMaterials:bi,onItemClick:Fp,onItemHover:Dp,onModelLoaded:Gp,onAnimationsReady:C,nodeRefsOut:ut,onNodeRefsChange:Ut,materialRefsOut:xa,panelHoveredItem:u??Hi,sceneConfig:he,zoomOnSelected:Xe,highlightOnHover:Ge,decoderConfig:bt,explodeFactor:ie,suspendBindingTransforms:Ze}),(0,U.jsx)(_u,{annotations:Hr,sceneConfig:R,activeAnnotation:Po,popupRef:Yt,canvasRootRef:rr,worldPositionsRef:Dt,modelLoaded:ri,onAnnotationClick:y0,onCloseAnnotation:Co,hideCloseButton:D,showAnnotationOnHover:Ne}),(0,U.jsx)(sw,{annotation:Ks,enabled:D,controlsRef:Pe,offsetRef:Se}),Mt&&(0,U.jsx)(Mu,{controlsRef:Pe,sceneRef:kn,config:Mt,playing:Je,resetOnPlay:Fv,onFinished:()=>{Bn(!1),Ca(!1)},onUserInteract:()=>{Bn(!1)}}),ee&&(0,U.jsx)(Su,{points:Ap,unit:xe,box:Ep,showDimensions:od})]});return Ki?(0,U.jsx)(mg,{ref:jv,box:Ep,scaleMode:At,onARStateChange:Xv,children:w}):w})()})},t??e)]}),(0,U.jsx)(ro,{visible:P0,message:rd}),ko&&(0,U.jsxs)("div",{className:"ri-xrTools",style:{top:`${Bo(0)}px`},children:[!ad&&_p&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:Wv,title:"View this model in AR with Apple Quick Look",children:[(0,U.jsx)(Le.Box,{size:16}),"View in AR"]}),Ws&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:Gv,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":Sp,children:[(0,U.jsx)(Le.QrCode,{size:16}),(0,U.jsx)("span",{children:"Open on phone"})]}),Ki&&ad&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>Ki.enterAR().catch(w=>{console.error("Failed to enter AR session:",w)}),title:"View this model in your space",children:[(0,U.jsx)(Le.Smartphone,{size:16}),(0,U.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,U.jsx)("span",{children:"AR"})]}),Ki&&wp&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>Ki.enterVR().catch(w=>{console.error("Failed to enter VR session:",w)}),title:"View this model in VR",children:[(0,U.jsx)(Le.RectangleGoggles,{size:16}),(0,U.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,U.jsx)("span",{children:"VR"})]})]}),Hv,Sp&&Ws&&(0,U.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:w=>{w.target===w.currentTarget&&Mp()},children:(0,U.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,U.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:Mp,"aria-label":"Close phone handoff",children:(0,U.jsx)(Le.X,{size:18})}),(0,U.jsx)(Le.Smartphone,{size:22,"aria-hidden":"true"}),(0,U.jsx)("h2",{id:"ri-mobileHandoffTitle",children:"View in AR"}),(0,U.jsx)("p",{children:"Scan the code and choose AR."}),(0,U.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,U.jsx)(Kg.QRCodeSVG,{value:Ws,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),Ve&&(0,U.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${Bo(ko?1:0)}px`},children:(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${te?"ri-measureButton--active":""}`,onClick:()=>$(w=>!(w??re)),title:te?"Disable UV checker":"Enable UV checker","aria-label":te?"Disable UV checker":"Enable UV checker","aria-pressed":te,children:(0,U.jsx)(Le.Grid3X3,{size:16})})}),ee&&(0,U.jsxs)("div",{className:"ri-measureTools",style:{top:`${Bo((ko?1:0)+(Ve?1:0))}px`},children:[(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${Eo?"ri-measureButton--active":""}`,onClick:n0,title:Eo?"Stop measuring":"Measure distance","aria-pressed":Eo,children:(0,U.jsx)(Le.PencilRuler,{size:16})}),(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${od?"ri-measureButton--active":""}`,onClick:r0,title:"Toggle bounding dimensions","aria-pressed":od,children:(0,U.jsx)(Le.RulerDimensionLine,{size:16})}),Ap.length>0&&(0,U.jsx)("button",{type:"button",className:"ri-measureButton",onClick:t0,title:"Clear measurements",children:(0,U.jsx)(Le.Eraser,{size:16})}),Eo&&(0,U.jsx)("span",{className:"ri-measureHint",children:"Click points on the model to measure"})]}),tt&&(0,U.jsxs)("div",{className:"ri-explodeTools",style:{top:`${Bo((ko?1:0)+(Ve?1:0)+(ee?1:0))}px`},children:[(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${Oe||ie>0?"ri-measureButton--active":""}`,onClick:()=>Rt(w=>!w),title:"Exploded view","aria-pressed":Oe,children:(0,U.jsx)(Le.Expand,{size:16})}),Oe&&(0,U.jsx)("div",{className:"ri-explodeSlider",onPointerDown:w=>w.stopPropagation(),children:(0,U.jsx)("input",{type:"range",min:0,max:100,value:Math.round(ie*100),onChange:w=>_e(Number(w.target.value)/100),"aria-label":"Explode amount"})})]}),Mt&&(0,U.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${Bo((ko?1:0)+(Ve?1:0)+(ee?1:0)+(tt?1:0))}px`},children:[(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${Je?"ri-measureButton--active":""}`,onClick:()=>{Je?Bn(!1):(Ca(!1),Bn(!0))},title:Je?"Pause cinematic":"Play cinematic","aria-pressed":Je,children:Je?(0,U.jsx)(Le.Pause,{size:16}):(0,U.jsx)(Le.Play,{size:16})}),Je&&(0,U.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:b0,title:"Stop cinematic and reset camera",children:(0,U.jsx)(Le.Square,{size:16})})]}),(Y||k||Ln&&sn.length>0)&&(0,U.jsxs)("div",{className:"ri-buttonContainer",children:[(0,U.jsx)("div",{className:"ri-tourControls",children:Ln&&sn.length>0&&(0,U.jsx)(U.Fragment,{children:D?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)("button",{className:"ri-tourButton",onClick:$v,disabled:Pp||sn.length===0||sr<=0,title:"Previous annotation",children:[(0,U.jsx)(Le.ChevronLeft,{size:16}),(0,U.jsx)("span",{children:"Prev"})]}),(0,U.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:Zv,title:"Stop guided tour",children:(0,U.jsx)(Le.Square,{size:16})}),(0,U.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:Kv,disabled:Pp||sn.length===0,title:"Next annotation",children:[(0,U.jsx)("span",{children:"Next"}),(0,U.jsx)(Le.ChevronRight,{size:16})]})]}):(0,U.jsx)("button",{className:"ri-navButtonSingle",onClick:Yv,disabled:sn.length===0,title:"Start guided tour",children:"Guided Tour"})})}),(0,U.jsxs)("div",{className:"ri-rightControls",children:[Y&&(0,U.jsx)("button",{className:"ri-resetButton",onClick:pd,title:"Reset camera view",children:(0,U.jsx)(Le.RotateCcw,{})}),k&&(0,U.jsxs)("div",{className:"ri-downloadWrapper",onPointerDown:w=>w.stopPropagation(),children:[o0&&(0,U.jsxs)("div",{className:"ri-downloadMenu",children:[(0,U.jsxs)("button",{className:"ri-downloadMenuItem",onClick:l0,disabled:sd||!kn.current,children:[(0,U.jsx)(Le.Box,{size:14}),"Download GLB"]}),(0,U.jsx)("div",{className:"ri-downloadMenuDivider"}),on&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)("button",{className:"ri-downloadMenuItem",onClick:c0,disabled:!kn.current,children:[(0,U.jsx)(Le.Camera,{size:14}),"Download PNG"]}),(0,U.jsx)("div",{className:"ri-downloadMenuDivider"})]}),(0,U.jsxs)("button",{className:"ri-downloadMenuItem",onClick:d0,disabled:!kn.current,children:[(0,U.jsx)(Le.FileImage,{size:14}),"Download UV Layout"]}),Lp&&(0,U.jsx)("div",{className:"ri-downloadMenuNotice",role:"status","aria-live":"polite",children:Lp})]}),(0,U.jsx)("button",{className:"ri-downloadButton",onClick:s0,disabled:sd||!kn.current,title:"Download options",children:sd?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)("span",{className:"ri-downloadButton__spinner"}),"Exporting\u2026"]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Le.Download,{size:15}),"Download"]})})]})]})]}),Wn&&(0,U.jsxs)("div",{className:"ri-annotationPopup",style:{left:C0,top:T0},onPointerDown:w=>w.stopPropagation(),onClick:w=>w.stopPropagation(),children:[(0,U.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:yi.title,onChange:w=>qs(N=>({...N,title:w.target.value})),onKeyDown:w=>{w.key==="Enter"&&Xp(),w.key==="Escape"&&hd()}}),(0,U.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:yi.description,onChange:w=>qs(N=>({...N,description:w.target.value})),onKeyDown:w=>{w.key==="Escape"&&hd()},rows:5}),(0,U.jsxs)("div",{className:"ri-annotationActions",children:[(0,U.jsx)("button",{onClick:Xp,className:`ri-annotationOkBtn ${yi.title.trim()?"":"disabled"}`,disabled:!yi.title.trim(),children:"OK"}),(0,U.jsx)("button",{onClick:hd,className:"ri-annotationCancelBtn",children:"Cancel"}),(0,U.jsx)("div",{className:"ri-annotationIcons"})]})]})]}),A&&Jn&&(0,U.jsx)(Ru,{colorPicker:Jn,onClose:lr,itemMaterials:bi,setItemMaterials:wa}),A&&ar&&(0,U.jsx)(Lu,{triggerFileUpload:Up,materialPopup:ar,textureUrl:Yp,clearTexture:Vp})]}),j&&(0,U.jsx)("div",{className:"ri-viewerRight",children:X?X({objectBindings:Nt,onAction:Zs,onFocus:jp,onHover:Zn}):(0,U.jsx)(Bu,{objectBindings:Nt,onAction:Zs,onFocus:jp,onHover:Zn})}),ue&&(0,U.jsx)(Mg,{controlsRef:Pe,enabled:!0,opacity:be,moveSensitivity:Ce,position:Ee})]})}var ne=require("react"),Un=require("lucide-react");var Ht=require("react"),ju=require("three");function Zg(e){return[e.x,e.y,e.z]}function Di(e,t){let n=new ju.Vector3,i=new ju.Vector3;return t.getPosition(n),t.getTarget(i),{position:Zg(n),target:Zg(i),fov:"fov"in e&&typeof e.fov=="number"?e.fov:null,zoom:"zoom"in e&&typeof e.zoom=="number"?e.zoom:1,azimuthAngle:t.azimuthAngle,polarAngle:t.polarAngle}}function uw(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 Ms(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function vc(e={}){let t=(0,Ht.useRef)(e);t.current=e;let n=(0,Ht.useRef)(null),[i,r]=(0,Ht.useState)(null),[a,o]=(0,Ht.useState)(()=>({...e.presets})),s=(0,Ht.useRef)(a);s.current=a;let c=(0,Ht.useCallback)(_=>{r(v=>uw(v,_)?v:_)},[]),l=(0,Ht.useCallback)((_,v)=>{c(Di(_,v))},[c]),u=(0,Ht.useRef)(null),d=(0,Ht.useRef)(null),p=(0,Ht.useRef)(null),f=(0,Ht.useCallback)(_=>{n.current=_;let v=Di(_.controls.camera,_.controls);c(v),_.scene!==d.current&&(d.current=_.scene,u.current=null,p.current=null),_.homeCameraState&&!u.current&&(u.current=_.homeCameraState);let{initialPosition:P,initialTarget:z,initialTransition:E=!1}=t.current;if((P||z)&&_.scene&&(P||_.homeCameraState)&&p.current!==_.controls){p.current=_.controls,_.homeCameraState||io(_.controls);let V=P??v.position,A=z??v.target;_.controls.setLookAt(V[0],V[1],V[2],A[0],A[1],A[2],E).then(()=>{if(n.current?.controls!==_.controls)return;let X=Di(_.controls.camera,_.controls);u.current={position:X.position,target:X.target},c(X)}).catch(()=>{})}},[c]),g=(0,Ht.useCallback)(async()=>{let _=n.current,v=_?.controls;if(!v)return!1;try{let P=u.current;return P?await Ms(v,()=>v.setLookAt(P.position[0],P.position[1],P.position[2],P.target[0],P.target[1],P.target[2],!0)):_?.scene?await Ms(v,()=>v.fitToBox(_.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Ms(v,()=>v.reset(!0)),!0}catch{return!1}},[]),y=(0,Ht.useCallback)(async()=>{let _=n.current;if(!_?.controls||!_.scene)return!1;try{return await Ms(_.controls,()=>_.controls.fitToBox(_.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),T=(0,Ht.useCallback)(async _=>{let v=n.current;if(!v?.controls)return!1;let P=Pn(v.objectBindings,_);if(!P)return!1;let z=v.nodeRefs[P];if(!z)return!1;try{return await Ms(v.controls,()=>v.controls.fitToBox(z,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),x=(0,Ht.useCallback)(async(_,v=!0)=>{let P=n.current?.controls;if(!P)return!1;try{return n.current?.homeCameraState||io(P),await P.setTarget(_[0],_[1],_[2],v),c(Di(P.camera,P)),!0}catch{return!1}},[c]),h=(0,Ht.useCallback)(async(_,v=!0)=>{let P=n.current?.controls;if(!P)return!1;try{n.current?.homeCameraState||io(P);let z=[P.setLookAt(_.position[0],_.position[1],_.position[2],_.target[0],_.target[1],_.target[2],v)];_.azimuthAngle!=null&&_.polarAngle!=null&&z.push(P.rotateTo(_.azimuthAngle,_.polarAngle,v)),await Promise.all(z);let E=P.camera,V=!1;return _.fov!=null&&"fov"in E&&typeof E.fov=="number"&&(E.fov=_.fov,V=!0),_.zoom!=null&&"zoom"in E&&typeof E.zoom=="number"&&(E.zoom=_.zoom,V=!0),V&&"updateProjectionMatrix"in E&&E.updateProjectionMatrix(),c(Di(E,P)),!0}catch{return!1}},[c]),m=(0,Ht.useCallback)((_,v=!0)=>h(_,v),[h]),S=(0,Ht.useCallback)((_,v,P=!0)=>h({position:_,target:v},P),[h]),M=(0,Ht.useCallback)(async(_,v,P=!0)=>{let z=n.current?.controls;if(!z)return!1;try{return n.current?.homeCameraState||io(z),await z.rotateTo(_,v,P),c(Di(z.camera,z)),!0}catch{return!1}},[c]),C=(0,Ht.useCallback)(async(_,v=!0)=>{let P=n.current?.controls;if(!P)return!1;try{return n.current?.homeCameraState||io(P),await P.dollyTo(_,v),c(Di(P.camera,P)),!0}catch{return!1}},[c]),L=(0,Ht.useCallback)(_=>{let v=n.current?.controls,P=_.trim();if(!v||!P)return null;let z=Di(v.camera,v);return s.current={...s.current,[P]:z},o(E=>({...E,[P]:z})),c(z),z},[c]),b=(0,Ht.useCallback)((_,v=!0)=>{let P=s.current[_];return P?h(P,v):Promise.resolve(!1)},[h]);return{cameraState:i,cameraPresets:a,resetView:g,focusObject:T,fitScene:y,setCameraTarget:x,setCameraState:m,lookAt:S,orbitTo:M,dollyTo:C,savePreset:L,goToPreset:b,handleCameraChange:l,handleViewerReady:f}}var gn=require("react");function xc(){let e=(0,gn.useRef)(null),[t,n]=(0,gn.useState)([]),i=(0,gn.useRef)(null),[r,a]=(0,gn.useState)([]),[o,s]=(0,gn.useState)(null),[c,l]=(0,gn.useState)(!1),[u,d]=(0,gn.useState)(1),[p,f]=(0,gn.useState)(0),[g,y]=(0,gn.useState)(0);(0,gn.useEffect)(()=>()=>{i.current?.()},[]);let T=(0,gn.useCallback)(C=>{i.current?.(),e.current=C,n(C.clips),a(C.clipDetails??C.clips.map(b=>({sourceName:b,duration:0})));let L=C.getState?.()??{currentClip:null,isPlaying:!1,speed:1,time:0,duration:0};s(L.currentClip),l(L.isPlaying),d(L.speed),f(L.time),y(L.duration),C.subscribe?i.current=C.subscribe(b=>{s(b.currentClip),l(b.isPlaying),d(b.speed),f(b.time),y(b.duration)}):i.current=null},[]),x=(0,gn.useCallback)(C=>{e.current?.play(C),s(C),l(!0)},[]),h=(0,gn.useCallback)(()=>{e.current?.pause(),l(!1)},[]),m=(0,gn.useCallback)(()=>{e.current?.stop(),s(null),l(!1),f(0)},[]),S=(0,gn.useCallback)(C=>{e.current?.setSpeed(C),d(C)},[]),M=(0,gn.useCallback)(C=>{e.current?.seek?.(C),f(C)},[]);return{clips:t,clipDetails:r,currentClip:o,isPlaying:c,speed:u,time:p,duration:g,play:x,pause:h,stop:m,setSpeed:S,seek:M,handleAnimationsReady:T}}var Tc=require("react");var ob=require("react"),Ii=require("lucide-react"),Sc=require("react-colorful");var Ni=require("react"),eb=require("react-dom"),yc=require("lucide-react"),wc=require("react-colorful");function uo(e){let t=e.replace("#","").match(/.{2}/g).map(i=>parseInt(i,16)/255).map(i=>i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var Jg=require("react");function Qg(e,t,n){(0,Jg.useEffect)(()=>{if(!n)return;let i=Array.isArray(e)?e:[e],r=a=>{let o=a.target;i.some(c=>c.current?.contains(o))||t()};return document.addEventListener("pointerdown",r,!0),()=>{document.removeEventListener("pointerdown",r,!0)}},[e,t,n])}var Ae=require("react/jsx-runtime");function Hu({anchorRef:e,onClose:t,children:n}){let i=(0,Ni.useRef)(null),[r,a]=(0,Ni.useState)(null);return Qg([i,e],t,!0),(0,Ni.useLayoutEffect)(()=>{let o=e.current;if(!o)return;let s=o.getBoundingClientRect(),c=222,l=8,u=Math.min(Math.max(s.right-c,l),window.innerWidth-c-l),d=Math.min(s.bottom+6,window.innerHeight-200);a({top:d,left:u})},[e]),r?(0,eb.createPortal)((0,Ae.jsx)("div",{ref:i,className:"se-colorPickerPopover",style:{position:"fixed",top:r.top,left:r.left},children:n}),document.body):null}function pw(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 pa({title:e,children:t}){return(0,Ae.jsxs)("section",{className:"se-section",children:[(0,Ae.jsx)("h3",{className:"se-sectionTitle",children:e}),(0,Ae.jsx)("div",{className:"se-sectionBody",children:t})]})}function ct({title:e,open:t,onToggle:n,trailing:i,children:r,disabled:a,tooltip:o}){let s=o?`${o}`:e;return(0,Ae.jsxs)("section",{className:"se-panel",children:[(0,Ae.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,title:s,children:[(0,Ae.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Ae.jsx)(yc.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Ae.jsx)("span",{className:"se-panelTitle",children:e}),o?(0,Ae.jsx)("span",{className:"se-panelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Ae.jsx)(yc.Info,{size:13})}):null]}),i?(0,Ae.jsx)("span",{className:"se-panelTrailing",onClick:c=>c.stopPropagation(),children:i}):null]}),t?(0,Ae.jsx)("div",{className:"se-panelBody",style:a?{opacity:.45,pointerEvents:"none"}:void 0,children:r}):null]})}function ft({checked:e,onChange:t,label:n}){return(0,Ae.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Ae.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Ae.jsx)("span",{className:"se-switchTrack",children:(0,Ae.jsx)("span",{className:"se-switchThumb"})})]})}function Z({label:e,value:t,min:n,max:i,step:r,formatValue:a,onChange:o,disabled:s=!1}){return(0,Ae.jsxs)("label",{className:`se-field ${s?"se-field--disabled":""}`,children:[(0,Ae.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,Ae.jsx)("span",{className:"se-fieldValue",children:a?a(t):t})]}),(0,Ae.jsx)("input",{className:"se-slider",type:"range",min:n,max:i,step:r,value:t,onChange:c=>o(Number(c.target.value)),disabled:s})]})}function yt({label:e,checked:t,onChange:n}){return(0,Ae.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Ae.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ae.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:i=>n(i.target.checked)})]})}function tr({label:e,value:t,options:n,onChange:i}){return(0,Ae.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Ae.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ae.jsx)("select",{className:"se-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,Ae.jsx)("option",{value:r,children:pw(r)},r))})]})}function xr({label:e,value:t,onChange:n}){let[i,r]=(0,Ni.useState)(!1),a=(0,Ni.useRef)(null);return(0,Ae.jsxs)("div",{className:"se-field",children:[(0,Ae.jsxs)("div",{className:"se-fieldInline",children:[(0,Ae.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ae.jsx)("span",{ref:a,style:{display:"inline-flex"},children:(0,Ae.jsx)(wc.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>r(o=>!o),style:{background:t,color:uo(t)},color:t,onChange:n})})]}),i?(0,Ae.jsx)(Hu,{anchorRef:a,onClose:()=>r(!1),children:(0,Ae.jsx)(wc.HexColorPicker,{color:t,onChange:n})}):null]})}function Oi({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Ae.jsxs)("div",{className:"se-field",children:[(0,Ae.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ae.jsx)("div",{className:"se-vectorRow",children:["X","Y","Z"].map((s,c)=>(0,Ae.jsxs)("label",{className:"se-vectorAxis",children:[(0,Ae.jsx)("span",{children:s}),(0,Ae.jsx)("input",{type:"number",className:"se-numberInput",min:n,max:i,step:r,value:t[c],onChange:l=>{let u=[...t];u[c]=Number(l.target.value),a(u)}})]},s))})]})}function ha({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Ae.jsxs)("div",{className:"se-field",children:[(0,Ae.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ae.jsx)("div",{className:"se-vectorRow",children:["X","Y"].map((s,c)=>(0,Ae.jsxs)("label",{className:"se-vectorAxis",children:[(0,Ae.jsx)("span",{children:s}),(0,Ae.jsx)("input",{type:"number",className:"se-numberInput",min:n,max:i,step:r,value:t[c],onChange:l=>{let u=[...t];u[c]=Number(l.target.value),a(u)}})]},s))})]})}var tb={free:0,starter:1,growth:2};function nb(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function fi(e,t){return tb[e]>=tb[t]}var rb={free:"Free",starter:"Starter",growth:"Growth"};var ib=require("lucide-react");var Cs=require("react/jsx-runtime");function Yn({requiredTier:e,feature:t}){return(0,Cs.jsxs)("div",{className:"bb-tierLock",children:[(0,Cs.jsx)(ib.Lock,{size:16}),(0,Cs.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",rb[e]," plan or higher."]})]})}var ae=require("react/jsx-runtime"),hw=["lit","unlit","normals"],mw=["color","image","environment"];function ab(e){let t=e%360;return t<0?t+360:t}function _c({title:e,open:t,onToggle:n,children:i,trailing:r}){return(0,ae.jsxs)("section",{className:"se-panel",children:[(0,ae.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:[(0,ae.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ae.jsx)(Ii.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,ae.jsx)("span",{className:"se-panelTitle",children:e})]}),r?(0,ae.jsx)("span",{className:"se-panelTrailing",onClick:a=>a.stopPropagation(),children:r}):null]}),t?(0,ae.jsx)("div",{className:"se-panelBody",children:i}):null]})}function Gu({config:e,onChange:t}){let{model:n,camera:i,wireframe:r,background:a,environment:o}=e,{tier:s}=vr(),c=fi(s,"starter"),[l,u]=(0,ob.useState)({general:!0,camera:!0,wireframe:!1,background:!1}),d=h=>u(m=>({...m,[h]:!m[h]})),p=h=>t({...e,model:h}),f=h=>t({...e,camera:h}),g=h=>t({...e,wireframe:h}),y=h=>t({...e,background:h}),T=h=>t({...e,environment:h}),x=h=>{T({...o,source:"preset",preset:h})};return(0,ae.jsxs)("div",{className:"se-generalContent",children:[(0,ae.jsxs)(_c,{title:"General",open:l.general,onToggle:()=>d("general"),children:[(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsxs)("div",{className:"se-fieldLabel",children:[(0,ae.jsx)("span",{children:"Straighten model"}),(0,ae.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>p({...n,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,ae.jsx)(Ii.RotateCcw,{size:16})})]}),(0,ae.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((h,m)=>(0,ae.jsxs)("div",{className:"se-axisStepper",children:[(0,ae.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let S=[...n.rotation];S[m]=ab(S[m]-90),p({...n,rotation:S})},"aria-label":`Rotate ${h} axis backward`,children:(0,ae.jsx)(Ii.ChevronLeft,{size:16})}),(0,ae.jsx)("span",{className:"se-axisStepperLabel",children:h}),(0,ae.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let S=[...n.rotation];S[m]=ab(S[m]+90),p({...n,rotation:S})},"aria-label":`Rotate ${h} axis forward`,children:(0,ae.jsx)(Ii.ChevronRight,{size:16})})]},h))})]}),(0,ae.jsx)(Oi,{label:"Rotation",value:n.rotation,min:0,max:360,step:1,onChange:h=>p({...n,rotation:h})}),(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,ae.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:Th.map(h=>(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${n.renderer===h?"se-segmentedOption--active":""}`,onClick:()=>p({...n,renderer:h}),children:h==="uv-checker"?"UV CHECKER":h.toUpperCase()},h))})]}),(0,ae.jsx)(tr,{label:"Shading",value:n.shading,options:hw,onChange:h=>p({...n,shading:h})})]}),(0,ae.jsx)(_c,{title:"Camera",open:l.camera,onToggle:()=>d("camera"),children:(0,ae.jsx)(Z,{label:"Field Of View",value:i.fieldOfView,min:20,max:100,step:.1,formatValue:h=>`${h.toFixed(3)}\xB0`,onChange:h=>f({...i,fieldOfView:h})})}),(0,ae.jsx)(_c,{title:"Wireframe",open:l.wireframe,onToggle:()=>d("wireframe"),trailing:(0,ae.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,ae.jsx)("input",{type:"checkbox",checked:c&&r.enabled,disabled:!c,onChange:h=>g({...r,enabled:h.target.checked})}),(0,ae.jsx)("span",{className:"se-switchTrack",children:(0,ae.jsx)("span",{className:"se-switchThumb"})})]}),children:c?(0,ae.jsxs)(ae.Fragment,{children:[(0,ae.jsx)(Z,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:h=>g({...r,opacity:h})}),(0,ae.jsx)(xr,{label:"Wire color",value:r.color,onChange:h=>g({...r,color:h})})]}):(0,ae.jsx)(Yn,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,ae.jsx)(_c,{title:"Background",open:l.background,onToggle:()=>d("background"),trailing:(0,ae.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,ae.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:h=>y({...a,enabled:h.target.checked})}),(0,ae.jsx)("span",{className:"se-switchTrack",children:(0,ae.jsx)("span",{className:"se-switchThumb"})})]}),children:a.enabled?(0,ae.jsxs)(ae.Fragment,{children:[(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,ae.jsx)("div",{className:"se-segmentedControl",children:mw.map(h=>(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${a.type===h?"se-segmentedOption--active":""}`,onClick:()=>y({...a,type:h}),children:h},h))})]}),a.type==="environment"?c?(0,ae.jsxs)(ae.Fragment,{children:[(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,ae.jsxs)("div",{className:"se-segmentedControl",children:[(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>T({...o,source:"preset"}),children:"PRESET"}),(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>T({...o,source:"custom"}),children:"CUSTOM"})]})]}),o.source==="preset"?(0,ae.jsx)(tr,{label:"Environment preset",value:o.preset,options:Ph,onChange:x}):(0,ae.jsxs)("label",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,ae.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:o.customEnvironmentUrl,onChange:h=>T({...o,customEnvironmentUrl:h.target.value})}),(0,ae.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),o.customEnvironmentUrl.trim()&&!rl(o.customEnvironmentUrl)?(0,ae.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,ae.jsx)(Z,{label:"Environment intensity",value:o.intensity,min:0,max:3,step:.05,onChange:h=>T({...o,intensity:h})})]}):(0,ae.jsx)(Yn,{requiredTier:"starter",feature:"Environment backgrounds"}):null,a.type==="image"?(0,ae.jsxs)("label",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,ae.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:a.imageUrl,onChange:h=>y({...a,imageUrl:h.target.value})})]}):null,a.type==="color"?(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,ae.jsx)("div",{className:"se-inlineColorPicker",children:(0,ae.jsx)(Sc.HexColorPicker,{color:a.color,onChange:h=>y({...a,color:h})})}),(0,ae.jsx)("div",{className:"se-fieldInline",children:(0,ae.jsx)(Sc.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:a.color,color:uo(a.color)},color:a.color,onChange:h=>y({...a,color:h})})})]}):null]}):(0,ae.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var Rb=require("react");var me=require("react/jsx-runtime");function sb({pp:e,set:t,open:n,toggle:i}){let{ssao:r}=e;return(0,me.jsxs)(ct,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:n.ssao,onToggle:()=>i("ssao"),disabled:!r.enabled,trailing:(0,me.jsx)(ft,{checked:r.enabled,onChange:a=>t("ssao",{...r,enabled:a}),label:"Toggle SSAO"}),children:[(0,me.jsx)(Z,{label:"Samples",value:r.samples,min:1,max:64,step:1,onChange:a=>t("ssao",{...r,samples:a})}),(0,me.jsx)(Z,{label:"Rings",value:r.rings,min:1,max:12,step:1,onChange:a=>t("ssao",{...r,rings:a})}),(0,me.jsx)(Z,{label:"Intensity",value:r.intensity,min:0,max:20,step:.5,onChange:a=>t("ssao",{...r,intensity:a})}),(0,me.jsx)(Z,{label:"Radius",value:r.radius,min:.01,max:1,step:.01,onChange:a=>t("ssao",{...r,radius:a})}),(0,me.jsx)(Z,{label:"Bias",value:r.bias,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,bias:a})}),(0,me.jsx)(Z,{label:"Luminance Influence",value:r.luminanceInfluence,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,luminanceInfluence:a})}),(0,me.jsx)(Z,{label:"Fade",value:r.fade,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,fade:a})}),(0,me.jsx)(Z,{label:"Min Radius Scale",value:r.minRadiusScale,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,minRadiusScale:a})}),(0,me.jsx)(Z,{label:"World Distance Threshold",value:r.worldDistanceThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldDistanceThreshold:a})}),(0,me.jsx)(Z,{label:"World Distance Falloff",value:r.worldDistanceFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldDistanceFalloff:a})}),(0,me.jsx)(Z,{label:"World Proximity Threshold",value:r.worldProximityThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldProximityThreshold:a})}),(0,me.jsx)(Z,{label:"World Proximity Falloff",value:r.worldProximityFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldProximityFalloff:a})})]})}function lb({pp:e,set:t,open:n,toggle:i}){let{autofocus:r}=e;return(0,me.jsxs)(ct,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:n.autofocus,onToggle:()=>i("autofocus"),disabled:!r.enabled,trailing:(0,me.jsx)(ft,{checked:r.enabled,onChange:a=>t("autofocus",{...r,enabled:a}),label:"Toggle Autofocus"}),children:[(0,me.jsx)(Z,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusDistance:a})}),(0,me.jsx)(Z,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusRange:a})}),(0,me.jsx)(Z,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,focalLength:a})}),(0,me.jsx)(Z,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("autofocus",{...r,bokehScale:a})}),(0,me.jsx)(Oi,{label:"Target",value:r.target,min:-100,max:100,step:.1,onChange:a=>t("autofocus",{...r,target:a})}),(0,me.jsx)(yt,{label:"Mouse Follow",checked:r.mouse,onChange:a=>t("autofocus",{...r,mouse:a})}),(0,me.jsx)(yt,{label:"Manual Update",checked:r.manual,onChange:a=>t("autofocus",{...r,manual:a})}),(0,me.jsx)(Z,{label:"Debug",value:r.debug,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,debug:a})}),(0,me.jsx)(Z,{label:"Smooth Time",value:r.smoothTime,min:0,max:2,step:.01,onChange:a=>t("autofocus",{...r,smoothTime:a})})]})}function cb({pp:e,set:t,open:n,toggle:i}){let{godRays:r}=e;return(0,me.jsxs)(ct,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:n.godRays,onToggle:()=>i("godRays"),disabled:!r.enabled,trailing:(0,me.jsx)(ft,{checked:r.enabled,onChange:a=>t("godRays",{...r,enabled:a}),label:"Toggle GodRays"}),children:[(0,me.jsx)(Oi,{label:"Sun Position",value:r.sunPosition,min:-100,max:100,step:.1,onChange:a=>t("godRays",{...r,sunPosition:a})}),(0,me.jsx)(Z,{label:"Samples",value:r.samples,min:1,max:128,step:1,onChange:a=>t("godRays",{...r,samples:a})}),(0,me.jsx)(Z,{label:"Density",value:r.density,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,density:a})}),(0,me.jsx)(Z,{label:"Decay",value:r.decay,min:0,max:1,step:.01,onChange:a=>t("godRays",{...r,decay:a})}),(0,me.jsx)(Z,{label:"Weight",value:r.weight,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,weight:a})}),(0,me.jsx)(Z,{label:"Exposure",value:r.exposure,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,exposure:a})}),(0,me.jsx)(Z,{label:"Clamp Max",value:r.clampMax,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,clampMax:a})}),(0,me.jsx)(yt,{label:"Blur",checked:r.blur,onChange:a=>t("godRays",{...r,blur:a})}),(0,me.jsx)(tr,{label:"Kernel Size",value:r.kernelSize,options:Uo,onChange:a=>t("godRays",{...r,kernelSize:a})})]})}function db({pp:e,set:t,open:n,toggle:i}){let{lensflare:r}=e;return(0,me.jsxs)(ct,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:n.lensflare,onToggle:()=>i("lensflare"),disabled:!r.enabled,trailing:(0,me.jsx)(ft,{checked:r.enabled,onChange:a=>t("lensflare",{...r,enabled:a}),label:"Toggle Lensflare"}),children:[(0,me.jsx)(Oi,{label:"Lens Position",value:r.lensPosition,min:-100,max:100,step:.1,onChange:a=>t("lensflare",{...r,lensPosition:a})}),(0,me.jsx)(Z,{label:"Smooth Time",value:r.smoothTime,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,smoothTime:a})}),(0,me.jsx)(Z,{label:"Glare Size",value:r.glareSize,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,glareSize:a})}),(0,me.jsx)(Z,{label:"Flare Size",value:r.flareSize,min:0,max:.1,step:.001,onChange:a=>t("lensflare",{...r,flareSize:a})}),(0,me.jsx)(Z,{label:"Flare Speed",value:r.flareSpeed,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareSpeed:a})}),(0,me.jsx)(Z,{label:"Flare Shape",value:r.flareShape,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareShape:a})}),(0,me.jsx)(yt,{label:"Animated",checked:r.animated,onChange:a=>t("lensflare",{...r,animated:a})}),(0,me.jsx)(yt,{label:"Anamorphic",checked:r.anamorphic,onChange:a=>t("lensflare",{...r,anamorphic:a})}),(0,me.jsx)(xr,{label:"Color Gain",value:r.colorGain,onChange:a=>t("lensflare",{...r,colorGain:a})}),(0,me.jsx)(Z,{label:"Halo Scale",value:r.haloScale,min:0,max:2,step:.01,onChange:a=>t("lensflare",{...r,haloScale:a})}),(0,me.jsx)(yt,{label:"Secondary Ghosts",checked:r.secondaryGhosts,onChange:a=>t("lensflare",{...r,secondaryGhosts:a})}),(0,me.jsx)(yt,{label:"Additional Streaks",checked:r.aditionalStreaks,onChange:a=>t("lensflare",{...r,aditionalStreaks:a})}),(0,me.jsx)(Z,{label:"Ghost Scale",value:r.ghostScale,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,ghostScale:a})}),(0,me.jsx)(Z,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,opacity:a})}),(0,me.jsx)(yt,{label:"Star Burst",checked:r.starBurst,onChange:a=>t("lensflare",{...r,starBurst:a})})]})}function ub({pp:e,set:t,open:n,toggle:i}){let{depthOfField:r}=e;return(0,me.jsxs)(ct,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:n.depthOfField,onToggle:()=>i("depthOfField"),disabled:!r.enabled,trailing:(0,me.jsx)(ft,{checked:r.enabled,onChange:a=>t("depthOfField",{...r,enabled:a}),label:"Toggle DepthOfField"}),children:[(0,me.jsx)(Z,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusDistance:a})}),(0,me.jsx)(Z,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusRange:a})}),(0,me.jsx)(Z,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("depthOfField",{...r,focalLength:a})}),(0,me.jsx)(Z,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("depthOfField",{...r,bokehScale:a})})]})}var Ue=require("react/jsx-runtime"),fw=["linear","reinhard","aces"];function pb({pp:e,set:t,open:n,toggle:i}){let{colorAverage:r}=e;return(0,Ue.jsx)(ct,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:n.colorAverage,onToggle:()=>i("colorAverage"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("colorAverage",{...r,enabled:a}),label:"Toggle ColorAverage"}),children:(0,Ue.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function hb({pp:e,set:t,open:n,toggle:i}){let{brightnessContrast:r}=e;return(0,Ue.jsxs)(ct,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:n.brightnessContrast,onToggle:()=>i("brightnessContrast"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("brightnessContrast",{...r,enabled:a}),label:"Toggle BrightnessContrast"}),children:[(0,Ue.jsx)(Z,{label:"Brightness",value:r.brightness,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,brightness:a})}),(0,Ue.jsx)(Z,{label:"Contrast",value:r.contrast,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,contrast:a})})]})}function mb({pp:e,set:t,open:n,toggle:i}){let{hueSaturation:r}=e;return(0,Ue.jsxs)(ct,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:n.hueSaturation,onToggle:()=>i("hueSaturation"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("hueSaturation",{...r,enabled:a}),label:"Toggle HueSaturation"}),children:[(0,Ue.jsx)(Z,{label:"Hue",value:r.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("hueSaturation",{...r,hue:a})}),(0,Ue.jsx)(Z,{label:"Saturation",value:r.saturation,min:-1,max:1,step:.01,onChange:a=>t("hueSaturation",{...r,saturation:a})})]})}function fb({pp:e,set:t,open:n,toggle:i}){let{vignette:r}=e;return(0,Ue.jsxs)(ct,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:n.vignette,onToggle:()=>i("vignette"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("vignette",{...r,enabled:a}),label:"Toggle Vignette"}),children:[(0,Ue.jsx)(Z,{label:"Offset",value:r.offset,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,offset:a})}),(0,Ue.jsx)(Z,{label:"Darkness",value:r.darkness,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,darkness:a})}),(0,Ue.jsx)(yt,{label:"Eskil",checked:r.eskil,onChange:a=>t("vignette",{...r,eskil:a})})]})}function gb({pp:e,set:t,open:n,toggle:i}){let{bloom:r}=e;return(0,Ue.jsxs)(ct,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:n.bloom,onToggle:()=>i("bloom"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("bloom",{...r,enabled:a}),label:"Toggle Bloom"}),children:[(0,Ue.jsx)(Z,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceThreshold:a})}),(0,Ue.jsx)(Z,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceSmoothing:a})}),(0,Ue.jsx)(Z,{label:"Intensity",value:r.intensity,min:0,max:3,step:.05,onChange:a=>t("bloom",{...r,intensity:a})}),(0,Ue.jsx)(yt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("bloom",{...r,mipmapBlur:a})}),(0,Ue.jsx)(Z,{label:"Radius",value:r.radius,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,radius:a})}),(0,Ue.jsx)(Z,{label:"Levels",value:r.levels,min:1,max:16,step:1,onChange:a=>t("bloom",{...r,levels:a})})]})}function bb({pp:e,set:t,open:n,toggle:i}){let{toneMapping:r}=e;return(0,Ue.jsxs)(ct,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:n.toneMapping,onToggle:()=>i("toneMapping"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("toneMapping",{...r,enabled:a}),label:"Toggle ToneMapping"}),children:[(0,Ue.jsxs)("div",{className:"se-field",children:[(0,Ue.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,Ue.jsx)("div",{className:"se-segmentedControl",children:fw.map(a=>(0,Ue.jsx)("button",{type:"button",className:`se-segmentedOption ${r.mode===a?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...r,mode:a}),children:a==="aces"?"Filmic":a.charAt(0).toUpperCase()+a.slice(1)},a))})]}),(0,Ue.jsx)(Z,{label:"Resolution",value:r.resolution,min:64,max:4096,step:64,onChange:a=>t("toneMapping",{...r,resolution:a})}),(0,Ue.jsx)(Z,{label:"White Point",value:r.whitePoint,min:0,max:16,step:.01,onChange:a=>t("toneMapping",{...r,whitePoint:a})}),(0,Ue.jsx)(Z,{label:"Middle Grey",value:r.middleGrey,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,middleGrey:a})}),(0,Ue.jsx)(Z,{label:"Min Luminance",value:r.minLuminance,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,minLuminance:a})}),(0,Ue.jsx)(Z,{label:"Average Luminance",value:r.averageLuminance,min:0,max:4,step:.01,onChange:a=>t("toneMapping",{...r,averageLuminance:a})}),(0,Ue.jsx)(Z,{label:"Adaptation Rate",value:r.adaptationRate,min:0,max:10,step:.01,onChange:a=>t("toneMapping",{...r,adaptationRate:a})}),(0,Ue.jsx)(Z,{label:"Exposure",value:r.exposure,min:0,max:3,step:.01,onChange:a=>t("toneMapping",{...r,exposure:a})})]})}function vb({pp:e,set:t,open:n,toggle:i}){let{sepia:r}=e;return(0,Ue.jsx)(ct,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:n.sepia,onToggle:()=>i("sepia"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("sepia",{...r,enabled:a}),label:"Toggle Sepia"}),children:(0,Ue.jsx)(Z,{label:"Intensity",value:r.intensity,min:0,max:1,step:.01,onChange:a=>t("sepia",{...r,intensity:a})})})}var ke=require("react/jsx-runtime");function xb({pp:e,set:t,open:n,toggle:i}){let{dotScreen:r}=e;return(0,ke.jsxs)(ct,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:n.dotScreen,onToggle:()=>i("dotScreen"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("dotScreen",{...r,enabled:a}),label:"Toggle DotScreen"}),children:[(0,ke.jsx)(Z,{label:"Angle",value:r.angle,min:0,max:Math.PI*2,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("dotScreen",{...r,angle:a})}),(0,ke.jsx)(Z,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("dotScreen",{...r,scale:a})})]})}function yb({pp:e,set:t,open:n,toggle:i}){let{glitch:r}=e;return(0,ke.jsxs)(ct,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:n.glitch,onToggle:()=>i("glitch"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("glitch",{...r,enabled:a}),label:"Toggle Glitch"}),children:[(0,ke.jsx)(tr,{label:"Mode",value:r.mode,options:Ah,onChange:a=>t("glitch",{...r,mode:a})}),(0,ke.jsx)(ha,{label:"Delay",value:r.delay,min:0,max:10,step:.01,onChange:a=>t("glitch",{...r,delay:a})}),(0,ke.jsx)(ha,{label:"Duration",value:r.duration,min:0,max:5,step:.01,onChange:a=>t("glitch",{...r,duration:a})}),(0,ke.jsx)(ha,{label:"Strength",value:r.strength,min:0,max:2,step:.01,onChange:a=>t("glitch",{...r,strength:a})}),(0,ke.jsx)(ha,{label:"Chromatic Aberration Offset",value:r.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:a=>t("glitch",{...r,chromaticAberrationOffset:a})}),(0,ke.jsx)(Z,{label:"Columns",value:r.columns,min:0,max:.5,step:.001,onChange:a=>t("glitch",{...r,columns:a})}),(0,ke.jsx)(Z,{label:"Ratio",value:r.ratio,min:0,max:1,step:.01,onChange:a=>t("glitch",{...r,ratio:a})})]})}function wb({pp:e,set:t,open:n,toggle:i}){let{grid:r}=e;return(0,ke.jsxs)(ct,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:n.grid,onToggle:()=>i("grid"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("grid",{...r,enabled:a}),label:"Toggle Grid"}),children:[(0,ke.jsx)(Z,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("grid",{...r,scale:a})}),(0,ke.jsx)(Z,{label:"Line Width",value:r.lineWidth,min:0,max:1,step:.01,onChange:a=>t("grid",{...r,lineWidth:a})})]})}function _b({pp:e,set:t,open:n,toggle:i}){let{chromaticAberration:r}=e;return(0,ke.jsxs)(ct,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:n.chromaticAberration,onToggle:()=>i("chromaticAberration"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("chromaticAberration",{...r,enabled:a}),label:"Toggle ChromaticAberration"}),children:[(0,ke.jsx)(Z,{label:"Offset X",value:r.offsetX,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetX:a})}),(0,ke.jsx)(Z,{label:"Offset Y",value:r.offsetY,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetY:a})}),(0,ke.jsx)(yt,{label:"Radial Modulation",checked:r.radialModulation,onChange:a=>t("chromaticAberration",{...r,radialModulation:a})}),(0,ke.jsx)(Z,{label:"Modulation Offset",value:r.modulationOffset,min:0,max:1,step:.01,onChange:a=>t("chromaticAberration",{...r,modulationOffset:a})})]})}function Sb({pp:e,set:t,open:n,toggle:i}){let{noise:r}=e;return(0,ke.jsxs)(ct,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:n.noise,onToggle:()=>i("noise"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("noise",{...r,enabled:a}),label:"Toggle Noise"}),children:[(0,ke.jsx)(Z,{label:"Amount",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("noise",{...r,opacity:a})}),(0,ke.jsx)(yt,{label:"Premultiply",checked:r.premultiply,onChange:a=>t("noise",{...r,premultiply:a})})]})}function Mb({pp:e,set:t,open:n,toggle:i}){let{scanline:r}=e;return(0,ke.jsx)(ct,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:n.scanline,onToggle:()=>i("scanline"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("scanline",{...r,enabled:a}),label:"Toggle Scanline"}),children:(0,ke.jsx)(Z,{label:"Density",value:r.density,min:0,max:10,step:.25,onChange:a=>t("scanline",{...r,density:a})})})}function Cb({pp:e,set:t,open:n,toggle:i}){let{pixelation:r}=e;return(0,ke.jsx)(ct,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:n.pixelation,onToggle:()=>i("pixelation"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("pixelation",{...r,enabled:a}),label:"Toggle Pixelation"}),children:(0,ke.jsx)(Z,{label:"Granularity",value:r.granularity,min:0,max:20,step:1,onChange:a=>t("pixelation",{...r,granularity:a})})})}function Tb({pp:e,set:t,open:n,toggle:i}){let{ramp:r}=e;return(0,ke.jsxs)(ct,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:n.ramp,onToggle:()=>i("ramp"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("ramp",{...r,enabled:a}),label:"Toggle Ramp"}),children:[(0,ke.jsx)(tr,{label:"Ramp Type",value:r.rampType,options:Eh,onChange:a=>t("ramp",{...r,rampType:a})}),(0,ke.jsx)(ha,{label:"Ramp Start",value:r.rampStart,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampStart:a})}),(0,ke.jsx)(ha,{label:"Ramp End",value:r.rampEnd,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampEnd:a})}),(0,ke.jsx)(xr,{label:"Start Color",value:r.startColor,onChange:a=>t("ramp",{...r,startColor:a})}),(0,ke.jsx)(xr,{label:"End Color",value:r.endColor,onChange:a=>t("ramp",{...r,endColor:a})}),!r.rampMask&&(0,ke.jsx)(Z,{label:"Gradient Opacity",value:r.opacity??.5,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,opacity:a})}),(0,ke.jsx)(Z,{label:"Bias",value:r.rampBias,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampBias:a})}),(0,ke.jsx)(Z,{label:"Gain",value:r.rampGain,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampGain:a})}),(0,ke.jsx)(yt,{label:"Mask Earlier Effects",checked:r.rampMask,onChange:a=>t("ramp",{...r,rampMask:a})}),(0,ke.jsx)(yt,{label:"Invert",checked:r.rampInvert,onChange:a=>t("ramp",{...r,rampInvert:a})})]})}var kt=require("react/jsx-runtime");function Pb({pp:e,set:t,open:n,toggle:i}){let{outline:r}=e;return(0,kt.jsxs)(ct,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:n.outline,onToggle:()=>i("outline"),disabled:!r.enabled,trailing:(0,kt.jsx)(ft,{checked:r.enabled,onChange:a=>t("outline",{...r,enabled:a}),label:"Toggle Outline"}),children:[(0,kt.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,kt.jsx)(Z,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("outline",{...r,selectionLayer:a})}),(0,kt.jsx)(Z,{label:"Edge Strength",value:r.edgeStrength,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,edgeStrength:a})}),(0,kt.jsx)(Z,{label:"Pulse Speed",value:r.pulseSpeed,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,pulseSpeed:a})}),(0,kt.jsx)(xr,{label:"Visible Edge Color",value:r.visibleEdgeColor,onChange:a=>t("outline",{...r,visibleEdgeColor:a})}),(0,kt.jsx)(xr,{label:"Hidden Edge Color",value:r.hiddenEdgeColor,onChange:a=>t("outline",{...r,hiddenEdgeColor:a})}),(0,kt.jsx)(tr,{label:"Kernel Size",value:r.kernelSize,options:Uo,onChange:a=>t("outline",{...r,kernelSize:a})}),(0,kt.jsx)(yt,{label:"Blur",checked:r.blur,onChange:a=>t("outline",{...r,blur:a})}),(0,kt.jsx)(yt,{label:"X-Ray",checked:r.xRay,onChange:a=>t("outline",{...r,xRay:a})})]})}function Ab({pp:e,set:t,open:n,toggle:i}){let{selectiveBloom:r}=e;return(0,kt.jsxs)(ct,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:n.selectiveBloom,onToggle:()=>i("selectiveBloom"),disabled:!r.enabled,trailing:(0,kt.jsx)(ft,{checked:r.enabled,onChange:a=>t("selectiveBloom",{...r,enabled:a}),label:"Toggle SelectiveBloom"}),children:[(0,kt.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,kt.jsx)(Z,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("selectiveBloom",{...r,selectionLayer:a})}),(0,kt.jsx)(Z,{label:"Intensity",value:r.intensity,min:0,max:5,step:.05,onChange:a=>t("selectiveBloom",{...r,intensity:a})}),(0,kt.jsx)(Z,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceThreshold:a})}),(0,kt.jsx)(Z,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceSmoothing:a})}),(0,kt.jsx)(tr,{label:"Kernel Size",value:r.kernelSize,options:Uo,onChange:a=>t("selectiveBloom",{...r,kernelSize:a})}),(0,kt.jsx)(yt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("selectiveBloom",{...r,mipmapBlur:a})}),(0,kt.jsx)(yt,{label:"Inverted",checked:r.inverted,onChange:a=>t("selectiveBloom",{...r,inverted:a})}),(0,kt.jsx)(yt,{label:"Ignore Background",checked:r.ignoreBackground,onChange:a=>t("selectiveBloom",{...r,ignoreBackground:a})})]})}function Eb({pp:e,set:t,open:n,toggle:i}){let{smaa:r}=e;return(0,kt.jsx)(ct,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:n.smaa,onToggle:()=>i("smaa"),trailing:(0,kt.jsx)(ft,{checked:r.enabled,onChange:a=>t("smaa",{...r,enabled:a}),label:"Toggle SMAA"}),children:(0,kt.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var zt=require("react/jsx-runtime");function Wu({config:e,onChange:t}){let[n,i]=(0,Rb.useState)({autofocus:!1,colorAverage:!1,dotScreen:!1,glitch:!1,godRays:!1,grid:!1,lensflare:!1,outline:!1,selectiveBloom:!1,ramp:!1,ssao:!1,brightnessContrast:!1,hueSaturation:!1,depthOfField:!1,chromaticAberration:!1,vignette:!1,bloom:!1,toneMapping:!1,noise:!1,sepia:!1,scanline:!1,pixelation:!1,smaa:!1}),r=c=>i(l=>({...l,[c]:!l[c]})),a=e.postProcessing,s={pp:a,set:(c,l)=>t({...e,postProcessing:{...a,[c]:l}}),open:n,toggle:r};return(0,zt.jsxs)("div",{className:"se-generalContent",children:[(0,zt.jsx)(sb,{...s}),(0,zt.jsx)(lb,{...s}),(0,zt.jsx)(pb,{...s}),(0,zt.jsx)(xb,{...s}),(0,zt.jsx)(yb,{...s}),(0,zt.jsx)(cb,{...s}),(0,zt.jsx)(wb,{...s}),(0,zt.jsx)(db,{...s}),(0,zt.jsx)(Pb,{...s}),(0,zt.jsx)(Ab,{...s}),(0,zt.jsx)(hb,{...s}),(0,zt.jsx)(mb,{...s}),(0,zt.jsx)(ub,{...s}),(0,zt.jsx)(_b,{...s}),(0,zt.jsx)(fb,{...s}),(0,zt.jsx)(gb,{...s}),(0,zt.jsx)(bb,{...s}),(0,zt.jsx)(Sb,{...s}),(0,zt.jsx)(vb,{...s}),(0,zt.jsx)(Mb,{...s}),(0,zt.jsx)(Cb,{...s}),(0,zt.jsx)(Tb,{...s}),(0,zt.jsx)(Eb,{...s})]})}var Ts=require("react"),zi=require("lucide-react");var fe=require("react/jsx-runtime"),gw=["512","1024","2048","4096"],Lb={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function bw({index:e,light:t,selected:n,onSelect:i,onToggleVisible:r}){return(0,fe.jsxs)("div",{className:`se-lightRow ${n?"se-lightRow--active":""}`,onClick:i,children:[(0,fe.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",Lb[t.type]]}),(0,fe.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:a=>{a.stopPropagation(),r()},children:t.visible?(0,fe.jsx)(zi.Eye,{size:14}):(0,fe.jsx)(zi.EyeOff,{size:14})})]})}function vw(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function Xu({config:e,onChange:t}){let[n,i]=(0,Ts.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),r=(0,Ts.useSyncExternalStore)(Uu,uc),[a,o]=(0,Ts.useState)(e.lighting.lights[0]?.id??null),s=r??a,c=b=>{o(b),_s(b)},l=b=>i(_=>({..._,[b]:!_[b]})),{tier:u}=vr(),d=fi(u,"starter"),{lighting:p,shadows:f,groundShadows:g,environment:y}=e,T=b=>t({...e,lighting:b}),x=b=>t({...e,shadows:b}),h=b=>t({...e,groundShadows:b}),m=b=>t({...e,environment:b}),S=(b,_)=>{T({...p,lights:p.lights.map(v=>v.id===b?{...v,..._}:v)})},M=p.lights.find(b=>b.id===s)??null,C=()=>{let b=vw();T({...p,lights:[...p.lights,b]}),c(b.id)},L=()=>{if(!M)return;let b=p.lights.filter(_=>_.id!==M.id);T({...p,lights:b}),c(b[0]?.id??null)};return(0,fe.jsxs)("div",{className:"se-generalContent",children:[(0,fe.jsxs)(ct,{title:"Lights",open:n.lights,onToggle:()=>l("lights"),children:[(0,fe.jsx)("div",{className:"se-lightList",children:p.lights.map((b,_)=>(0,fe.jsx)(bw,{index:_,light:b,selected:b.id===s,onSelect:()=>c(b.id),onToggleVisible:()=>S(b.id,{visible:!b.visible})},b.id))}),(0,fe.jsxs)("div",{className:"se-lightActions",children:[(0,fe.jsx)("button",{type:"button",className:"se-iconButton",onClick:C,title:"Add light",children:(0,fe.jsx)(zi.Plus,{size:14})}),M&&p.lights.length>1&&(0,fe.jsx)("button",{type:"button",className:"se-iconButton",onClick:L,title:"Remove selected light",children:(0,fe.jsx)(zi.Trash2,{size:14})})]}),M?(0,fe.jsxs)("div",{className:"se-lightProps",children:[(0,fe.jsxs)("div",{className:"se-field",children:[(0,fe.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,fe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:Ch.map(b=>(0,fe.jsx)("button",{type:"button",className:`se-segmentedOption ${M.type===b?"se-segmentedOption--active":""}`,onClick:()=>S(M.id,{type:b}),children:Lb[b]},b))})]}),(0,fe.jsx)(xr,{label:"Color",value:M.color,onChange:b=>S(M.id,{color:b})}),(0,fe.jsx)(Z,{label:"Intensity",value:M.intensity,min:0,max:10,step:.1,onChange:b=>S(M.id,{intensity:b})}),M.type!=="hemisphere"&&M.type!=="none"&&(0,fe.jsx)(Oi,{label:"Position",value:M.position,min:-100,max:100,step:.05,onChange:b=>S(M.id,{position:b})}),M.type==="spot"&&(0,fe.jsxs)(fe.Fragment,{children:[(0,fe.jsx)(Z,{label:"Angle",value:M.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:b=>`${Math.round(b*180/Math.PI)}\xB0`,onChange:b=>S(M.id,{angle:b})}),(0,fe.jsx)(Z,{label:"Penumbra",value:M.penumbra??.2,min:0,max:1,step:.01,onChange:b=>S(M.id,{penumbra:b})}),(0,fe.jsx)(Z,{label:"Distance",value:M.distance??0,min:0,max:100,step:.5,onChange:b=>S(M.id,{distance:b})}),(0,fe.jsx)(Z,{label:"Decay",value:M.decay??2,min:0,max:4,step:.1,onChange:b=>S(M.id,{decay:b})})]}),(0,fe.jsx)(yt,{label:"Attached to camera",checked:M.attachedToCamera,onChange:b=>S(M.id,{attachedToCamera:b})}),(0,fe.jsx)(yt,{label:"Cast shadows",checked:M.castShadow,onChange:b=>S(M.id,{castShadow:b})}),(0,fe.jsx)(Z,{label:"Shadow bias",value:M.shadowBias,min:-.01,max:.01,step:1e-4,onChange:b=>S(M.id,{shadowBias:b})})]}):null]}),(0,fe.jsxs)(ct,{title:"Shadows",open:n.shadows,onToggle:()=>l("shadows"),disabled:!f.enabled,trailing:(0,fe.jsx)(ft,{checked:f.enabled,onChange:b=>x({...f,enabled:b}),label:"Toggle shadows"}),children:[(0,fe.jsx)(tr,{label:"Map size",value:String(f.mapSize),options:gw,onChange:b=>x({...f,mapSize:Number(b)})}),(0,fe.jsx)(Z,{label:"Bias",value:f.bias,min:-.01,max:.01,step:1e-4,onChange:b=>x({...f,bias:b})}),(0,fe.jsx)(Z,{label:"Normal bias",value:f.normalBias,min:0,max:.2,step:.01,onChange:b=>x({...f,normalBias:b})}),(0,fe.jsx)(Z,{label:"Radius (softness)",value:f.radius,min:0,max:20,step:.5,onChange:b=>x({...f,radius:b})})]}),(0,fe.jsxs)(ct,{title:"Ground Shadows",open:n.groundShadows,onToggle:()=>l("groundShadows"),disabled:!g.enabled,trailing:(0,fe.jsx)(ft,{checked:g.enabled,onChange:b=>h({...g,enabled:b}),label:"Toggle ground shadows"}),children:[(0,fe.jsxs)("div",{className:"se-field",children:[(0,fe.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,fe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(b=>(0,fe.jsx)("button",{type:"button",className:`se-segmentedOption ${g.mode===b?"se-segmentedOption--active":""}`,onClick:()=>h({...g,mode:b}),children:b==="shadowCatcher"?"Shadow Catcher":"Baked AO"},b))})]}),g.mode==="bakedAO"&&(0,fe.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,fe.jsx)(Z,{label:"Intensity",value:g.intensity,min:0,max:1,step:.01,onChange:b=>h({...g,intensity:b})}),(0,fe.jsx)(Z,{label:"Border fade",value:g.borderFade,min:0,max:10,step:.1,onChange:b=>h({...g,borderFade:b})}),(0,fe.jsx)(Z,{label:"Height",value:g.height,min:-5,max:5,step:.1,onChange:b=>h({...g,height:b})}),(0,fe.jsx)(Z,{label:"Size",value:g.size,min:1,max:50,step:.5,onChange:b=>h({...g,size:b})})]}),(0,fe.jsx)(ct,{title:"Environment",open:n.environment,onToggle:()=>l("environment"),children:d?(0,fe.jsxs)(fe.Fragment,{children:[(0,fe.jsx)(Z,{label:"Orientation",value:y.rotation,min:0,max:360,step:1,formatValue:b=>`${b}\xB0`,onChange:b=>m({...y,rotation:b})}),(0,fe.jsx)(Z,{label:"Brightness",value:y.intensity,min:0,max:3,step:.05,onChange:b=>m({...y,intensity:b})}),(0,fe.jsxs)(ct,{title:"Shadow",open:n.envShadow,onToggle:()=>l("envShadow"),trailing:(0,fe.jsx)(ft,{checked:y.shadowLight.enabled,onChange:b=>m({...y,shadowLight:{...y.shadowLight,enabled:b}}),label:"Toggle environment shadow light"}),disabled:!y.shadowLight.enabled,children:[(0,fe.jsx)(Z,{label:"Light intensity",value:y.shadowLight.intensity,min:0,max:20,step:.1,onChange:b=>m({...y,shadowLight:{...y.shadowLight,intensity:b}})}),(0,fe.jsx)(Z,{label:"Shadow bias",value:y.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:b=>m({...y,shadowLight:{...y.shadowLight,bias:b}})})]})]}):(0,fe.jsx)(Yn,{requiredTier:"starter",feature:"Environment lighting"})})]})}var Mc=require("react"),Jr=require("lucide-react");var ve=require("react/jsx-runtime");function xw(e){if(!Number.isFinite(e)||e<=0)return"Unknown duration";let t=Math.round(e*10)/10;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function kb(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function yw(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function qu({config:e,onChange:t,clipDetails:n,currentClip:i,isPlaying:r,time:a,play:o,pause:s,stop:c,setSpeed:l,seek:u}){let[d,p]=(0,Mc.useState)(!1),f=(0,Mc.useMemo)(()=>new Map(n.map(b=>[b.sourceName,b.duration])),[n]),g=e.animations.clips.filter(b=>!b.hidden),y=e.animations.clips.filter(b=>b.hidden),T=(b,_=e.animations.autoplayClip)=>{t({...e,animations:{clips:b(e.animations.clips),autoplayClip:_}})},x=(b,_)=>{T(v=>v.map(P=>P.sourceName===b?_(P):P))},h=(b,_)=>{x(b,v=>({...v,loopMode:_}))},m=(b,_)=>{let v=yw(_);x(b,P=>({...P,speed:v})),i===b&&l(v)},S=(b,_)=>{x(b,v=>({...v,displayName:_}))},M=b=>{let _=e.animations.autoplayClip===b?null:b;t({...e,animations:{...e.animations,autoplayClip:_}})},C=b=>{T(_=>_.map(v=>v.sourceName===b?{...v,hidden:!0}:v),e.animations.autoplayClip===b?null:e.animations.autoplayClip),i===b&&c()},L=b=>{T(_=>_.map(v=>v.sourceName===b?{...v,hidden:!1}:v))};return e.animations.clips.length===0?(0,ve.jsx)(pa,{title:"Animations",children:(0,ve.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,ve.jsxs)(pa,{title:"Animations",children:[g.length===0&&(0,ve.jsx)("div",{className:"se-helperCard",children:(0,ve.jsx)("span",{children:"Preview clips directly in the viewer, choose one optional autoplay animation, and use soft delete to hide clips without modifying the GLB."})}),g.length===0?(0,ve.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,ve.jsx)("div",{className:"se-animationList",children:g.map(b=>{let _=i===b.sourceName,v=f.get(b.sourceName)??0;return(0,ve.jsxs)("article",{className:`se-animationCard ${_?"se-animationCard--active":""}`,children:[(0,ve.jsxs)("div",{className:"se-animationHeader",children:[(0,ve.jsxs)("div",{className:"se-animationHeading",children:[(0,ve.jsxs)("div",{className:"se-animationTitleRow",children:[(0,ve.jsx)("span",{className:"se-animationStatus",children:_?r?"Playing":"Paused":"Ready"}),e.animations.autoplayClip===b.sourceName?(0,ve.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>C(b.sourceName),title:"Remove animation",children:(0,ve.jsx)(Jr.Trash2,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,ve.jsx)("input",{className:"se-textInput",value:b.displayName,onChange:z=>S(b.sourceName,z.target.value),placeholder:"Animation name"})]}),(0,ve.jsxs)("div",{className:"se-animationMeta",children:[(0,ve.jsx)("span",{children:xw(v)}),(0,ve.jsx)("span",{children:b.loopMode==="once"?"Play once":"Looping"}),(0,ve.jsxs)("span",{children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationButtonRow",children:[(()=>{let z=_&&r;return(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>z?s():o(b.sourceName),"aria-label":z?"Pause":"Play",title:z?"Pause":"Play",children:z?(0,ve.jsx)(Jr.Pause,{size:16}):(0,ve.jsx)(Jr.Play,{size:16})})})(),(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:c,disabled:!_,"aria-label":"Stop",title:"Stop",children:(0,ve.jsx)(Jr.Square,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-animationSeekRow",children:[(0,ve.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(v,.001),step:.01,value:_?Math.min(a,v):0,disabled:!_||v<=0,onChange:z=>u(Number(z.target.value)),"aria-label":"Seek"}),(0,ve.jsxs)("span",{className:"se-animationSeekTime",children:[kb(_?Math.min(a,v):0)," / ",kb(v)]})]}),(0,ve.jsxs)("div",{className:"se-animationGrid",children:[(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,ve.jsxs)("select",{className:"se-select",value:b.loopMode,onChange:z=>h(b.sourceName,z.target.value),children:[(0,ve.jsx)("option",{value:"repeat",children:"Loop"}),(0,ve.jsx)("option",{value:"once",children:"Play Once"})]})]}),(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,ve.jsxs)("span",{className:"se-fieldValue",children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,ve.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:b.speed,onChange:z=>m(b.sourceName,Number(z.target.value))}),(0,ve.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:b.speed,onChange:z=>m(b.sourceName,Number(z.target.value))})]})]})]}),(0,ve.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===b.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>M(b.sourceName),children:e.animations.autoplayClip===b.sourceName?"Disable autoplay":"Set as autoplay"})]},b.sourceName)})}),y.length>0?(0,ve.jsxs)("section",{className:"se-removedAnimations",children:[(0,ve.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>p(b=>!b),children:(0,ve.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ve.jsx)(Jr.ChevronDown,{size:16,className:`se-panelChevron ${d?"se-panelChevron--open":""}`}),(0,ve.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",y.length,")"]})]})}),d?(0,ve.jsx)("div",{className:"se-removedAnimationList",children:y.map(b=>(0,ve.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,ve.jsxs)("div",{children:[(0,ve.jsx)("div",{className:"se-removedAnimationName",children:b.displayName||b.sourceName}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>L(b.sourceName),children:"Restore"})]},b.sourceName))}):null]}):null]})}var Yu=require("react"),Cc=require("lucide-react");var pt=require("react/jsx-runtime");function $u({config:e,onChange:t}){let[n,i]=(0,Yu.useState)(null),[r,a]=(0,Yu.useState)({title:"",description:""}),o=e.annotations,s=d=>{i(d),a({title:d.title,description:d.description||""})},c=()=>{if(!n||!r.title.trim())return;let d=o.map(p=>p.id===n.id?{...p,title:r.title.trim(),description:r.description||""}:p);t({...e,annotations:d}),i(null),a({title:"",description:""})},l=d=>{if(window.confirm("Delete this annotation?")){let f=o.filter(g=>g.id!==d).map((g,y)=>({...g,id:y+1}));t({...e,annotations:f}),i(null),a({title:"",description:""})}},u=()=>{i(null),a({title:"",description:""})};return(0,pt.jsxs)(pa,{title:"Annotations",children:[e.annotations.length===0?(0,pt.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,pt.jsx)("div",{className:"bb-annotationsList",children:e.annotations.map(d=>(0,pt.jsxs)("div",{className:"bb-annotationCard",children:[(0,pt.jsxs)("div",{className:"bb-annotationHeader",children:[(0,pt.jsxs)("div",{className:"bb-annotationBadge",children:["#",d.id]}),(0,pt.jsxs)("div",{className:"bb-annotationActions",children:[(0,pt.jsx)("button",{className:"bb-annotationAction bb-annotationAction--edit",onClick:()=>s(d),title:"Edit annotation",children:(0,pt.jsx)(Cc.Pencil,{size:16})}),(0,pt.jsx)("button",{className:"bb-annotationAction bb-annotationAction--delete",onClick:()=>l(d.id),title:"Delete annotation",children:(0,pt.jsx)(Cc.Trash2,{size:16})})]})]}),(0,pt.jsx)("div",{className:"bb-annotationTitle",children:d.title}),d.description&&(0,pt.jsx)("div",{className:"bb-annotationDescription",children:d.description}),(0,pt.jsxs)("div",{className:"bb-annotationPosition",children:["Position: [",d.worldPosition[0].toFixed(2),","," ",d.worldPosition[1].toFixed(2),","," ",d.worldPosition[2].toFixed(2),"]"]})]},d.id))}),n&&(0,pt.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:u,children:(0,pt.jsxs)("div",{className:"bb-editAnnotationPopup",onClick:d=>d.stopPropagation(),children:[(0,pt.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,pt.jsx)("h3",{className:"bb-editAnnotationTitle",children:"Edit Annotation"}),(0,pt.jsx)("button",{className:"bb-editAnnotationClose",onClick:u,children:"\xD7"})]}),(0,pt.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,pt.jsxs)("div",{className:"bb-field",children:[(0,pt.jsx)("label",{className:"bb-label",children:"Title"}),(0,pt.jsx)("input",{className:"bb-input",value:r.title,onChange:d=>a({...r,title:d.target.value}),placeholder:"Enter annotation title"})]}),(0,pt.jsxs)("div",{className:"bb-field",children:[(0,pt.jsx)("label",{className:"bb-label",children:"Description"}),(0,pt.jsx)("textarea",{className:"bb-textarea",value:r.description,onChange:d=>a({...r,description:d.target.value}),placeholder:"Enter annotation description",rows:3})]}),(0,pt.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,pt.jsx)("button",{className:"bb-button",onClick:u,children:"Cancel"}),(0,pt.jsx)("button",{className:"bb-button bb-button--primary",onClick:c,disabled:!r.title.trim(),children:"Save"}),(0,pt.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>l(n.id),children:"Delete"})]})]})]})})]})}var Qr=require("react"),yr=require("lucide-react");var Te=require("react/jsx-runtime"),ww={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},ma=3.5;function Ku({config:e,onChange:t,cameraState:n,onPreviewWaypoint:i}){let r=e.cinematic??ww,{waypoints:a}=r,o=(0,Qr.useCallback)((x,h)=>{if(x.length<2)return 0;let m=0;for(let S=0;S<x.length-1;S++){let M=x[S].segmentDuration??ma;m+=M}return h&&x.length>1&&(m+=x[x.length-1].segmentDuration??ma),Math.max(m,0)},[]),s=(0,Qr.useCallback)(x=>{t({...e,cinematic:{...r,...x}})},[e,r,t]),c=(0,Qr.useCallback)(()=>{if(!n)return;let x={position:[...n.position],target:[...n.target],...n.azimuthAngle!=null?{azimuthAngle:n.azimuthAngle}:{},...n.polarAngle!=null?{polarAngle:n.polarAngle}:{},segmentDuration:ma},h=[...a,x],m=o(h,r.loop);s({waypoints:h,duration:m})},[n,a,r.loop,o,s]),l=(0,Qr.useCallback)(x=>{let h=a.filter((S,M)=>M!==x),m=o(h,r.loop);s({waypoints:h,duration:m})},[a,r.loop,o,s]),u=(0,Qr.useCallback)((x,h)=>{let m=x+h;if(m<0||m>=a.length)return;let S=[...a];[S[x],S[m]]=[S[m],S[x]];let M=o(S,r.loop);s({waypoints:S,duration:M})},[a,r.loop,o,s]),d=(0,Qr.useCallback)((x,h)=>{let m=a.map((M,C)=>C===x?{...M,...h}:M),S=o(m,r.loop);s({waypoints:m,duration:S})},[a,r.loop,o,s]),[p,f]=(0,Qr.useState)(!1),g=a.some(x=>x.segmentDuration!==void 0),y=(0,Qr.useCallback)(x=>x>=a.length-1?ma:a[x]?.segmentDuration??ma,[a]),T=a.length>=2;return(0,Te.jsxs)(pa,{title:"Cinematic Camera",children:[(0,Te.jsx)("p",{className:"se-cinematicHint",children:"Frame the model in the viewer, then capture it as a waypoint. The camera glides through the waypoints in order \u2014 enable and press play in the viewer to preview."}),(0,Te.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:c,disabled:!n,title:"Capture the current camera view as a waypoint",children:[(0,Te.jsx)(yr.Plus,{size:15}),"Add waypoint from current view"]}),(0,Te.jsxs)("div",{className:"se-customizeToggle",children:[(0,Te.jsxs)("label",{className:"se-toggleLabel",children:[(0,Te.jsx)("input",{type:"checkbox",checked:p,onChange:x=>f(x.target.checked)}),(0,Te.jsx)(yr.Settings,{size:14}),(0,Te.jsx)("span",{children:"Customize durations between waypoints"})]}),p&&(0,Te.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",ma,"s"]})]}),a.length===0?(0,Te.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,Te.jsxs)(Te.Fragment,{children:[(0,Te.jsx)("div",{className:"se-waypointList",children:a.map((x,h)=>{let m=y(h),S=h===a.length-1,M=x.segmentDuration!==void 0&&x.segmentDuration!==ma;return(0,Te.jsxs)("div",{children:[(0,Te.jsxs)("div",{className:"se-waypointCard",children:[(0,Te.jsx)("div",{className:"se-waypointBadge",children:h+1}),(0,Te.jsxs)("div",{className:"se-waypointBody",children:[(0,Te.jsxs)("div",{className:"se-waypointCoords",children:["pos [",x.position.map(C=>C.toFixed(1)).join(", "),"]"]}),(0,Te.jsxs)("div",{className:"se-waypointCoords",children:["look [",x.target.map(C=>C.toFixed(1)).join(", "),"]"]}),p&&!S&&(0,Te.jsxs)("div",{className:`se-customBadge ${M?"se-customBadge--custom":"se-customBadge--default"}`,children:[m.toFixed(1),"s",!M&&" (default)"]})]}),(0,Te.jsxs)("div",{className:"se-waypointActions",children:[(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>i?.(x),title:"Fly camera to this waypoint",disabled:!i,children:(0,Te.jsx)(yr.MapPin,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>u(h,-1),title:"Move up",disabled:h===0,children:(0,Te.jsx)(yr.ArrowUp,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>u(h,1),title:"Move down",disabled:S,children:(0,Te.jsx)(yr.ArrowDown,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>l(h),title:"Delete waypoint",children:(0,Te.jsx)(yr.Trash2,{size:15})})]})]}),p&&!S&&(0,Te.jsxs)("div",{className:"se-segmentBetween",children:[(0,Te.jsxs)("div",{className:"se-segmentLabel",children:[h+1," \u2192 ",h+2,!x.segmentDuration&&" (default)"]}),(0,Te.jsxs)("div",{className:"se-segmentControls",children:[(0,Te.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,Te.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:m,onChange:C=>{let L=parseFloat(C.target.value);d(h,{segmentDuration:L})}}),(0,Te.jsxs)("span",{className:"se-segmentValue",children:[m.toFixed(1),"s"]}),(0,Te.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(C=>(0,Te.jsxs)("button",{className:"se-presetButton",onClick:()=>d(h,{segmentDuration:C}),children:[C,"s"]},`preset-${h}-${C}`)),(0,Te.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let C=a.map((b,_)=>{if(_===h){let{segmentDuration:v,...P}=b;return P}return b}),L=o(C,r.loop);s({waypoints:C,duration:L})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${h}`)})}),(0,Te.jsxs)("div",{className:"se-totalDuration",children:[(0,Te.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,Te.jsx)("span",{className:"se-totalValue",children:T?(r.duration??o(a,r.loop)).toFixed(1)+"s":"-"}),!T&&(0,Te.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,Te.jsx)(yt,{label:"Enable cinematic camera",checked:r.enabled,onChange:x=>s({enabled:x})}),(0,Te.jsx)(yt,{label:"Loop",checked:r.loop,onChange:x=>{let h=x,m=o(a,h);s({loop:h,duration:m})}}),(0,Te.jsx)(yt,{label:"Auto-play on load",checked:r.autoPlay,onChange:x=>s({autoPlay:x})}),!p&&T&&(0,Te.jsx)(Z,{label:"Duration",value:r.duration??o(a,r.loop),min:4,max:120,step:1,formatValue:x=>`${x}s`,onChange:x=>s({duration:x})})]})}var wr=require("lucide-react");var dn=require("react/jsx-runtime"),_w=[{label:"General",icon:(0,dn.jsx)(wr.Box,{})},{label:"Lighting",icon:(0,dn.jsx)(wr.Spotlight,{})},{label:"Animations",icon:(0,dn.jsx)(wr.Clapperboard,{})},{label:"Post Processing",icon:(0,dn.jsx)(wr.Sparkles,{})},{label:"Annotations",icon:(0,dn.jsx)(wr.MessageSquareText,{})},{label:"Cinematic",icon:(0,dn.jsx)(wr.Video,{})}],Bb={currentClip:null,isPlaying:!1,time:0,duration:0,play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}};function Zu({config:e,onChange:t,activeSubTab:n,onActiveSubTabChange:i,cameraState:r=null,onPreviewWaypoint:a,animationClipDetails:o=[],animationPlayback:s=Bb}){let[c,l]=(0,Tc.useState)("General"),u=n??c,d=s??Bb,{tier:p}=vr(),f=fi(p,"starter"),g=fi(p,"growth");(0,Tc.useEffect)(()=>{n!==void 0&&l(n)},[n]);let y=T=>{n===void 0&&l(T),i?.(T)};return(0,dn.jsxs)("div",{className:"se-tabContent",children:[(0,dn.jsx)("div",{className:"se-subTabRow",children:_w.map(T=>(0,dn.jsx)("button",{type:"button",title:T.label,className:`se-subTab ${u===T.label?"se-subTab--active":""}`,onClick:()=>y(T.label),children:T.icon},T.label))}),u==="General"&&(0,dn.jsx)(Gu,{config:e,onChange:t}),u==="Lighting"&&(0,dn.jsx)(Xu,{config:e,onChange:t}),u==="Animations"&&(f?(0,dn.jsx)(qu,{config:e,onChange:t,clipDetails:o,currentClip:d.currentClip,isPlaying:d.isPlaying,time:d.time,duration:d.duration,play:d.play,pause:d.pause,stop:d.stop,setSpeed:d.setSpeed,seek:d.seek}):(0,dn.jsx)(Yn,{requiredTier:"starter",feature:"Animation configuration"})),u==="Post Processing"&&(g?(0,dn.jsx)(Wu,{config:e,onChange:t}):(0,dn.jsx)(Yn,{requiredTier:"growth",feature:"Post-processing effects"})),u==="Annotations"&&(f?(0,dn.jsx)($u,{config:e,onChange:t}):(0,dn.jsx)(Yn,{requiredTier:"starter",feature:"Annotations"})),u==="Cinematic"&&(f?(0,dn.jsx)(Ku,{config:e,onChange:t,cameraState:r,onPreviewWaypoint:a}):(0,dn.jsx)(Yn,{requiredTier:"starter",feature:"Cinematic camera"}))]})}var po=require("lucide-react"),Kt=require("react/jsx-runtime");function Db({title:e,trailing:t,children:n,disabled:i,open:r,onToggle:a,tooltip:o}){let s=o?`${o}`:e;return(0,Kt.jsxs)("div",{className:"bb-materialPanel",children:[(0,Kt.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:a,"aria-expanded":r,title:s,children:[(0,Kt.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,Kt.jsx)(po.ChevronDown,{size:14,className:`bb-materialPanelChevron ${r?"bb-materialPanelChevron--open":""}`}),(0,Kt.jsx)("span",{className:"bb-materialPanelTitle",children:e}),o?(0,Kt.jsx)("span",{className:"bb-materialPanelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Kt.jsx)(po.Info,{size:12})}):null]}),t?(0,Kt.jsx)("div",{onClick:c=>c.stopPropagation(),children:t}):null]}),r?(0,Kt.jsx)("div",{className:"bb-materialPanelBody",style:i?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function $n({title:e,open:t,onToggle:n,trailing:i,children:r,tooltip:a}){let o=a?`${e}: ${a}`:e;return(0,Kt.jsxs)("div",{className:"bb-section",children:[(0,Kt.jsxs)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:n,"aria-expanded":t,title:o,children:[(0,Kt.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,Kt.jsx)(po.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,Kt.jsx)("h2",{className:"bb-sectionTitle",children:e}),a?(0,Kt.jsx)("span",{className:"bb-sectionHelp",title:o,"aria-label":o,role:"img",onClick:s=>s.stopPropagation(),children:(0,Kt.jsx)(po.Info,{size:13})}):null]}),i?(0,Kt.jsx)("span",{onClick:s=>s.stopPropagation(),children:i}):null]}),t?(0,Kt.jsx)("div",{className:"bb-sectionBody",children:r}):null]})}function Nb({checked:e,onChange:t,label:n}){return(0,Kt.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Kt.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Kt.jsx)("span",{className:"se-switchTrack",children:(0,Kt.jsx)("span",{className:"se-switchThumb"})})]})}var Ju=require("react");var Pc=["front","back","double"],Ac=["normal","additive"];var Ec=require("react/jsx-runtime");function nr({panelKey:e,title:t,tooltip:n,toggleLabel:i,controls:r,children:a,requiredTier:o}){let{openMaterialPanels:s,materialPanelEnabled:c,onToggleMaterialPanel:l,onSetMaterialPanelState:u}=r,d=o?.locked??!1;return(0,Ec.jsx)(Db,{title:t,tooltip:n,disabled:d||!c[e],open:s[e],onToggle:()=>l(e),trailing:(0,Ec.jsx)(Nb,{checked:!d&&c[e],onChange:d?()=>{}:p=>u(e,p),label:i??`Toggle ${t}`}),children:d&&o?(0,Ec.jsx)(Yn,{requiredTier:o.tier,feature:t}):a})}var Ps=require("react"),Rc=require("react-colorful"),Ob=require("lucide-react");var wt=require("react/jsx-runtime");function bn({label:e,value:t,placeholder:n,onChange:i}){let r=(0,Ps.useRef)(null);return(0,wt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,wt.jsx)("label",{className:"bb-label",children:e}),(0,wt.jsxs)("div",{className:"bb-fileField",children:[(0,wt.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:n,value:t,onChange:a=>{let o=a.target.value;!o&&t&&Pd(t),i(o)}}),(0,wt.jsx)("button",{type:"button",className:"bb-fileFieldButton",onClick:()=>r.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,wt.jsx)(Ob.FileUp,{size:20})}),(0,wt.jsx)("input",{ref:r,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:a=>{let o=a.target.files?.[0];if(!o)return;let s=zh(o);t&&t!==s&&Pd(t),jh(s,URL.createObjectURL(o)),i(s),a.target.value=""}})]})]})}function fa({label:e,value:t,fallback:n="#ffffff",onChange:i}){let[r,a]=(0,Ps.useState)(!1),o=t||n,s=(0,Ps.useRef)(null);return(0,wt.jsxs)("div",{className:"bb-field",children:[(0,wt.jsx)("span",{className:"bb-label",children:e}),(0,wt.jsx)("div",{className:"se-fieldInline",children:(0,wt.jsx)("span",{ref:s,style:{display:"inline-flex"},children:(0,wt.jsx)(Rc.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>a(c=>!c),style:{background:o,color:uo(o)},color:o,onChange:i})})}),r?(0,wt.jsx)(Hu,{anchorRef:s,onClose:()=>a(!1),children:(0,wt.jsx)(Rc.HexColorPicker,{color:o,onChange:i})}):null]})}function As({label:e,checked:t,onChange:n}){return(0,wt.jsxs)("label",{className:"bb-checkbox",children:[(0,wt.jsx)("input",{type:"checkbox",checked:t,onChange:i=>n(i.target.checked)}),e]})}function Ib({label:e,value:t,min:n,max:i,step:r,placeholder:a,onChange:o}){return(0,wt.jsxs)("div",{className:"bb-field",children:[(0,wt.jsx)("label",{className:"bb-label",children:e}),(0,wt.jsx)("input",{className:"bb-input",type:"number",min:n,max:i,step:r,placeholder:a,value:t??"",onChange:s=>o(s.target.value===""?void 0:Number(s.target.value))})]})}function ho({label:e,value:t,options:n,onChange:i}){return(0,wt.jsxs)("div",{className:"bb-field",children:[(0,wt.jsx)("label",{className:"bb-label",children:e}),(0,wt.jsx)("select",{className:"bb-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,wt.jsx)("option",{value:r,children:r},r))})]})}function Zt({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,wt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,wt.jsx)("label",{className:"bb-label",children:e}),(0,wt.jsxs)("div",{className:"bb-sliderField",children:[(0,wt.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:n,max:i,step:r,value:t??n,onChange:s=>a(Number(s.target.value))}),(0,wt.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:n,max:i,step:r,value:t??"",onChange:s=>a(s.target.value===""?void 0:Number(s.target.value))})]})]})}var K=require("react/jsx-runtime");function zb({selectedItem:e,selectedMaterial:t,pbrWorkflow:n,onPbrWorkflowChange:i,openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s,updateSelectedMaterial:c,setSelectedTexturePath:l}){let u={openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s},{tier:d}=vr(),p=fi(d,"starter"),f={tier:"starter",locked:!p},[g,y]=(0,Ju.useState)("roughness"),[T,x]=(0,Ju.useState)("factor");return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(nr,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:u,children:p?(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(ho,{label:"Workflow",value:n,options:["metalness","specular"],onChange:i}),(0,K.jsx)("div",{className:"bb-field bb-field--full",children:(0,K.jsx)("p",{className:"bb-note",style:{margin:0},children:n==="metalness"?"Metalness workflow maps directly to the underlying physical material.":"Specular workflow exposes the same physical material with non-metal specular controls; it does not switch to a separate spec/gloss shader."})}),(0,K.jsx)(bn,{label:n==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:h=>l(e,"texture",h)}),(0,K.jsx)(fa,{label:n==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:h=>c(e,m=>({...m,baseColor:h}))}),n==="metalness"?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,metalness:h}))}),(0,K.jsx)(bn,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:h=>l(e,"metalnessMap",h)})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Zt,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,specularIntensity:h}))}),(0,K.jsx)(fa,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:h=>c(e,m=>({...m,specularColor:h}))}),(0,K.jsx)(bn,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:h=>l(e,"specularIntensityMap",h)}),(0,K.jsx)(bn,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:h=>l(e,"specularColorMap",h)})]}),(0,K.jsx)(Zt,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,reflectivity:h}))})]}):(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(fa,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:h=>c(e,m=>({...m,baseColor:h}))}),(0,K.jsx)(Zt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,metalness:h}))}),(0,K.jsx)("div",{className:"bb-field bb-field--full",children:(0,K.jsx)(Yn,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,K.jsx)(nr,{panelKey:"roughness",requiredTier:f,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(ho,{label:"Mode",value:g,options:["roughness","glossiness"],onChange:y}),(0,K.jsx)("div",{className:"bb-field bb-field--full",children:(0,K.jsx)("p",{className:"bb-note",style:{margin:0},children:g==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),g==="roughness"?(0,K.jsx)(Zt,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,roughness:h}))}):(0,K.jsx)(Zt,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,roughness:h===void 0?void 0:1-h}))}),(0,K.jsx)(bn,{label:g==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:h=>l(e,"roughnessMap",h)})]})}),(0,K.jsx)(nr,{panelKey:"emission",requiredTier:f,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(fa,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:h=>c(e,m=>({...m,emissive:h}))}),(0,K.jsx)(Zt,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:h=>c(e,m=>({...m,emissiveIntensity:h}))}),(0,K.jsx)(bn,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:h=>l(e,"emissiveMap",h)})]})}),(0,K.jsx)(nr,{panelKey:"opacity",requiredTier:f,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Zt,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,opacity:h}))}),(0,K.jsx)(Zt,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,alphaTest:h}))}),(0,K.jsx)(bn,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:h=>l(e,"alphaMap",h)}),(0,K.jsx)(ho,{label:"Blending mode",value:t?.blendingMode??"normal",options:Ac,onChange:h=>c(e,m=>({...m,blendingMode:h}))}),(0,K.jsxs)("div",{className:"bb-field",children:[(0,K.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,K.jsx)("div",{className:"bb-checkboxRow",children:(0,K.jsx)(As,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:h=>c(e,m=>({...m,alphaHash:h}))})})]}),(0,K.jsxs)("div",{className:"bb-field",children:[(0,K.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,K.jsx)("div",{className:"bb-checkboxRow",children:(0,K.jsx)(As,{label:"Use dithering",checked:t?.dithering??!1,onChange:h=>c(e,m=>({...m,dithering:h}))})})]})]})}),(0,K.jsxs)(nr,{panelKey:"normalBump",requiredTier:f,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:u,children:[(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(bn,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:h=>l(e,"normalMap",h)}),(0,K.jsx)(Zt,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:h=>c(e,m=>({...m,normalScale:h}))}),(0,K.jsx)(bn,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:h=>l(e,"bumpMap",h)}),(0,K.jsx)(Zt,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:h=>c(e,m=>({...m,bumpScale:h}))})]}),(0,K.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,K.jsx)(As,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:h=>c(e,m=>({...m,flipNormalY:h}))})})]}),(0,K.jsx)(nr,{panelKey:"displacement",requiredTier:f,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(bn,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:h=>l(e,"displacementMap",h)}),(0,K.jsx)(Zt,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:h=>c(e,m=>({...m,displacementScale:h}))}),(0,K.jsx)(Zt,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:h=>c(e,m=>({...m,displacementBias:h}))})]})}),(0,K.jsx)(nr,{panelKey:"ao",requiredTier:f,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(bn,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:h=>l(e,"aoMap",h)}),(0,K.jsx)(Zt,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:h=>c(e,m=>({...m,aoMapIntensity:h}))})]})}),(0,K.jsxs)(nr,{panelKey:"clearcoat",requiredTier:f,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:u,children:[(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(bn,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:h=>l(e,"clearcoatMap",h)}),(0,K.jsx)(Zt,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,clearcoat:h}))}),(0,K.jsx)(bn,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:h=>l(e,"clearcoatRoughnessMap",h)}),(0,K.jsx)(Zt,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,clearcoatRoughness:h}))}),(0,K.jsx)(bn,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:h=>l(e,"clearcoatNormalMap",h)}),(0,K.jsx)(Zt,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:h=>c(e,m=>({...m,clearcoatNormalScale:h}))})]}),(0,K.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,K.jsx)(As,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:h=>c(e,m=>({...m,flipClearcoatNormalY:h}))})})]}),(0,K.jsx)(nr,{panelKey:"sheen",requiredTier:f,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Zt,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,sheen:h}))}),(0,K.jsx)(fa,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:h=>c(e,m=>({...m,sheenColor:h}))}),(0,K.jsx)(bn,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:h=>l(e,"sheenColorMap",h)}),(0,K.jsx)(Zt,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,sheenRoughness:h}))}),(0,K.jsx)(bn,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:h=>l(e,"sheenRoughnessMap",h)})]})}),(0,K.jsx)(nr,{panelKey:"anisotropy",requiredTier:f,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Zt,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,anisotropy:h}))}),(0,K.jsx)(ho,{label:"Tilt direction",value:T,options:["factor","texture"],onChange:x}),T==="factor"?(0,K.jsx)(Zt,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:h=>c(e,m=>({...m,anisotropyRotation:h}))}):(0,K.jsx)(bn,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:h=>l(e,"anisotropyMap",h)})]})}),(0,K.jsx)(nr,{panelKey:"transmission",requiredTier:f,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Zt,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,transmission:h}))}),(0,K.jsx)(bn,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:h=>l(e,"transmissionMap",h)}),(0,K.jsx)(Zt,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:h=>c(e,m=>({...m,thickness:h}))}),(0,K.jsx)(bn,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:h=>l(e,"thicknessMap",h)}),(0,K.jsx)(fa,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:h=>c(e,m=>({...m,attenuationColor:h}))}),(0,K.jsx)(Ib,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:h=>c(e,m=>({...m,attenuationDistance:h}))})]})}),(0,K.jsx)(nr,{panelKey:"faces",requiredTier:f,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:u,children:(0,K.jsx)("div",{className:"bb-grid",children:(0,K.jsx)(ho,{label:"Side",value:t?.side??"front",options:Pc,onChange:h=>c(e,m=>({...m,side:h}))})})})]})}var Ub=[{id:"wood",label:"Wood",swatch:"#8b5a2b",material:{baseColor:"#8b5a2b",metalness:0,roughness:.75,reflectivity:.04}},{id:"brushed-metal",label:"Brushed Metal",swatch:"linear-gradient(135deg, #cfcfcf, #8a8a8a)",material:{baseColor:"#c8c8c8",metalness:1,roughness:.35}},{id:"chrome",label:"Polished Chrome",swatch:"linear-gradient(135deg, #ffffff, #9aa0a6)",material:{baseColor:"#e8e8e8",metalness:1,roughness:.05}},{id:"gold",label:"Gold",swatch:"linear-gradient(135deg, #ffe9a8, #c89b2c)",material:{baseColor:"#e6b325",metalness:1,roughness:.2}},{id:"copper",label:"Copper",swatch:"linear-gradient(135deg, #e3a576, #8a4a26)",material:{baseColor:"#b87333",metalness:1,roughness:.3}},{id:"glass",label:"Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.9), rgba(180,210,230,0.4))",material:{baseColor:"#ffffff",metalness:0,roughness:.02,reflectivity:.5,opacity:1,transmission:1,thickness:.5,attenuationColor:"#ffffff",attenuationDistance:1}},{id:"frosted-glass",label:"Frosted Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.85), rgba(210,225,235,0.6))",material:{baseColor:"#ffffff",metalness:0,roughness:.4,reflectivity:.3,opacity:1,transmission:.9,thickness:.5}},{id:"plastic-glossy",label:"Glossy Plastic",swatch:"#dadada",material:{baseColor:"#dadada",metalness:0,roughness:.25,reflectivity:.5,clearcoat:.3,clearcoatRoughness:.1}},{id:"plastic-matte",label:"Matte Plastic",swatch:"#9a9a9a",material:{baseColor:"#9a9a9a",metalness:0,roughness:.85,reflectivity:.04}},{id:"rubber",label:"Rubber",swatch:"#1a1a1a",material:{baseColor:"#1a1a1a",metalness:0,roughness:.9,reflectivity:.02}},{id:"fabric",label:"Fabric",swatch:"#9c8a6b",material:{baseColor:"#9c8a6b",metalness:0,roughness:.95,sheen:.4,sheenColor:"#ffffff",sheenRoughness:.6}},{id:"ceramic",label:"Ceramic",swatch:"#f5f5f0",material:{baseColor:"#f5f5f0",metalness:0,roughness:.15,clearcoat:.6,clearcoatRoughness:.1}},{id:"concrete",label:"Concrete",swatch:"#9b9b93",material:{baseColor:"#9b9b93",metalness:0,roughness:.95,reflectivity:.03}}];var mo=require("react/jsx-runtime");function Vb({disabled:e,onApply:t}){return(0,mo.jsx)("div",{className:"bb-presetGallery",children:Ub.map(n=>(0,mo.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${n.label} preset`,onClick:()=>t(n.material),children:[(0,mo.jsx)("span",{className:"bb-presetSwatchColor",style:{background:n.swatch}}),(0,mo.jsx)("span",{className:"bb-presetSwatchLabel",children:n.label})]},n.id))})}var fo=require("react"),Ui=require("lucide-react"),Ur=require("react/jsx-runtime");function Qu({disabled:e,exporting:t,onExportJson:n,onExportTs:i}){let[r,a]=(0,fo.useState)(!1),o=(0,fo.useRef)(null);return(0,fo.useEffect)(()=>{if(!r)return;let s=c=>{o.current?.contains(c.target)||a(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[r]),(0,Ur.jsxs)("div",{className:"bb-exportMenuWrapper",ref:o,children:[(0,Ur.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>a(s=>!s),title:"Export",children:[(0,Ur.jsx)(Ui.Download,{size:14}),t?"Exporting\u2026":"Export",(0,Ur.jsx)(Ui.ChevronDown,{size:12})]}),r&&(0,Ur.jsxs)("div",{className:"bb-exportMenu",children:[(0,Ur.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),n()},children:[(0,Ur.jsx)(Ui.FileJson,{size:14}),"JSON"]}),(0,Ur.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),i()},children:[(0,Ur.jsx)(Ui.FileCode2,{size:14}),"TypeScript"]})]})]})}var _r=require("react/jsx-runtime");function Fb({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,idError:a}){return(0,_r.jsx)($n,{title:"Identity",open:n,onToggle:i,children:(0,_r.jsxs)("div",{className:"bb-grid",children:[(0,_r.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,_r.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,_r.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,_r.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,_r.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,_r.jsx)("label",{className:"bb-label",children:"ID"}),(0,_r.jsx)("input",{className:`bb-input ${a?"bb-input--error":""}`,value:t.id,onChange:o=>r(e,s=>({...s,id:o.target.value}))}),a?(0,_r.jsx)("span",{className:"bb-status bb-status--error",children:a}):null]})]})})}var Es=require("react");var jb=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],Hb=["normal","hidden","selected","disabled"];var Tt=require("react/jsx-runtime");function Gb({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,Es.useState)(t.group??""),[s,c]=(0,Es.useState)(t.tags?.join(", ")??"");(0,Es.useEffect)(()=>{o(t.group??""),c(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let l=()=>{r(e,d=>({...d,group:a.trim()||void 0}))},u=()=>{let d=[...new Set(s.split(",").map(p=>p.trim()).filter(Boolean))];r(e,p=>({...p,tags:d.length>0?d:void 0}))};return(0,Tt.jsxs)($n,{title:"Basics",open:n,onToggle:i,children:[(0,Tt.jsxs)("div",{className:"bb-grid",children:[(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Label"}),(0,Tt.jsx)("input",{className:"bb-input",value:t.label??"",onChange:d=>r(e,p=>({...p,label:d.target.value}))})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Type"}),(0,Tt.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type,onChange:d=>r(e,p=>({...p,type:d.target.value}))}),(0,Tt.jsx)("datalist",{id:"binding-type-suggestions",children:jb.map(d=>(0,Tt.jsx)("option",{value:d},d))})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Status"}),(0,Tt.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:d=>r(e,p=>({...p,status:d.target.value})),children:Hb.map(d=>(0,Tt.jsx)("option",{value:d,children:d},d))})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Group"}),(0,Tt.jsx)("input",{className:"bb-input",placeholder:"paint",value:a,onChange:d=>o(d.target.value),onBlur:l,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Tags"}),(0,Tt.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:s,onChange:d=>c(d.target.value),onBlur:u,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]})]}),(0,Tt.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,Tt.jsxs)("label",{className:"bb-checkbox",children:[(0,Tt.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:d=>r(e,p=>({...p,selectable:d.target.checked}))}),"selectable"]}),(0,Tt.jsxs)("label",{className:"bb-checkbox",children:[(0,Tt.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:d=>r(e,p=>({...p,hoverable:d.target.checked}))}),"hoverable"]}),(0,Tt.jsxs)("label",{className:"bb-checkbox",children:[(0,Tt.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:d=>r(e,p=>({...p,visible:d.target.checked}))}),"visible"]})]})]})}var kc=require("react");var ga=[{id:"change-color",label:"Change Color",handling:"viewer",description:"Opens a color picker docked under the action and commits the result to style.material.baseColor."},{id:"change-material",label:"Change Material",handling:"viewer",description:"Opens the material picker so the viewer can swap the object's texture."},{id:"toggle-visibility",label:"Toggle Visibility",handling:"viewer",description:"Flips the binding's visible flag."},{id:"toggle-light",label:"Toggle Light",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"change-light-color",label:"Change Light Color",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"set-brightness",label:"Set Brightness",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."}],Lc="__custom__";function Rs(e){return ga.find(t=>t.id===e)}var lE=ga.filter(e=>e.handling==="viewer").map(e=>e.id),Sw=new Set(["","New Action",...ga.map(e=>e.label)]);function ep(e){return Sw.has(e.trim())}function Wb(e,t){let n=Array.from({length:t.length+1},(i,r)=>r);for(let i=1;i<=e.length;i+=1){let r=[i];for(let a=1;a<=t.length;a+=1){let o=n[a-1]+(e[i-1]===t[a-1]?0:1);r[a]=Math.min(r[a-1]+1,n[a]+1,o)}n=r}return n[t.length]}function Xb(e){if(Rs(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let n=t.replace(/[^a-z0-9]/g,""),i=null;for(let r of ga){let a=Math.min(Wb(t,r.id),Wb(n,r.id.replace(/[^a-z0-9]/g,"")));(!i||a<i.distance)&&(i={id:r.id,distance:a})}return i&&i.distance<=2?i.id:null}var Qe=require("react/jsx-runtime"),qb=ga.filter(e=>e.handling==="viewer"),Mw=ga.filter(e=>e.handling==="host");function Yb({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,kc.useState)(new Set);(0,kc.useEffect)(()=>{o(new Set)},[e]);let s=t.actions??[],c=(d,p)=>r(e,f=>({...f,actions:(f.actions??[]).map((g,y)=>y===d?p(g):g)})),l=d=>{r(e,p=>({...p,actions:(p.actions??[]).filter((f,g)=>g!==d)})),o(p=>{let f=new Set;return p.forEach(g=>{g<d?f.add(g):g>d&&f.add(g-1)}),f})},u=(d,p)=>o(f=>{let g=new Set(f);return p?g.add(d):g.delete(d),g});return(0,Qe.jsxs)($n,{title:"Actions",open:n,onToggle:i,children:[(0,Qe.jsx)("div",{className:"bb-actionList",children:s.map((d,p)=>{let f=Rs(d.id),g=a.has(p)||!f,y=d.id.trim(),T=f?null:Xb(d.id),x=y.length>0&&s.some((h,m)=>m!==p&&h.id.trim()===y);return(0,Qe.jsxs)("div",{className:"bb-actionCard",children:[(0,Qe.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,Qe.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",p+1]}),(0,Qe.jsx)("div",{className:"bb-actionCardMeta",children:d.type})]}),(0,Qe.jsxs)("div",{className:"bb-actionGrid",children:[(0,Qe.jsxs)("div",{className:"bb-field",children:[(0,Qe.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,Qe.jsxs)("select",{className:"bb-select",value:g?Lc:d.id,onChange:h=>{let m=h.target.value;if(m===Lc){u(p,!0);return}u(p,!1);let S=Rs(m);c(p,M=>({...M,id:m,label:S&&ep(M.label)?S.label:M.label}))},children:[(0,Qe.jsx)("optgroup",{label:"Handled by the viewer",children:qb.map(h=>(0,Qe.jsx)("option",{value:h.id,children:h.id},h.id))}),(0,Qe.jsx)("optgroup",{label:"Handled by your app",children:Mw.map(h=>(0,Qe.jsx)("option",{value:h.id,children:h.id},h.id))}),(0,Qe.jsx)("option",{value:Lc,children:"Custom\u2026"})]})]}),g?(0,Qe.jsxs)("div",{className:"bb-field",children:[(0,Qe.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,Qe.jsx)("input",{className:"bb-input",value:d.id,placeholder:"open-datasheet",onChange:h=>{u(p,!0),c(p,m=>({...m,id:h.target.value}))}})]}):null,(0,Qe.jsxs)("div",{className:"bb-field",children:[(0,Qe.jsx)("label",{className:"bb-label",children:"Label"}),(0,Qe.jsx)("input",{className:"bb-input",value:d.label,onChange:h=>c(p,m=>({...m,label:h.target.value}))})]}),f?(0,Qe.jsx)("span",{className:"bb-note",children:f.description}):y.length===0?(0,Qe.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"An action ID is required, the button renders but can never be identified in onAction."}):(0,Qe.jsxs)("span",{className:"bb-note",style:{color:"#fcd34d"},children:["Unrecognised ID, the viewer has no built-in behavior for it. Add declarative effects and execute them with useViewerActions, or handle it in onAction.",T?(0,Qe.jsxs)(Qe.Fragment,{children:[" Did you mean ",(0,Qe.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{u(p,!1);let h=Rs(T);c(p,m=>({...m,id:T,label:h&&ep(m.label)?h.label:m.label}))},children:T}),"?"]}):null]}),d.effects?.length?(0,Qe.jsxs)("span",{className:"bb-note",children:[d.effects.length," declarative effect",d.effects.length===1?"":"s",", execute with useViewerActions."]}):null,x?(0,Qe.jsx)("span",{className:"bb-note",style:{color:"#fcd34d"},children:"Another action on this binding uses the same ID, they will render as two identical buttons."}):null]}),(0,Qe.jsx)("div",{className:"bb-actionFooter",children:(0,Qe.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>l(p),children:"Remove Action"})})]},p)})}),(0,Qe.jsx)("div",{style:{marginTop:10},children:(0,Qe.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let d=qb.find(p=>!s.some(f=>f.id===p.id));r(e,p=>({...p,actions:[...p.actions??[],{id:d?.id??"",label:d?.label??"New Action",type:"command"}]})),d||u(s.length,!0)},children:"Add Action"})})]})}var Bc=require("lucide-react");var Pt=require("react/jsx-runtime");function $b({selectedBinding:e,open:t,onToggle:n,cameraState:i,formattedCameraState:r,savedCameraPosition:a,onSaveCameraPosition:o,onGoToSavedCamera:s,onClearSavedCamera:c,onResetView:l,onFitScene:u}){return(0,Pt.jsxs)($n,{title:"Camera Position",open:t,onToggle:n,children:[(0,Pt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Pt.jsx)("span",{className:"bb-cameraLiveBadge",children:"LIVE"}),(0,Pt.jsxs)("div",{className:"se-waypointBody",children:[(0,Pt.jsx)("div",{className:"bb-cameraWaypointLabel",children:"Current view"}),i?(0,Pt.jsxs)(Pt.Fragment,{children:[(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["pos ",r?.position]}),(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["look ",r?.target]})]}):(0,Pt.jsx)("div",{className:"se-waypointCoords",children:"Move the camera to see live position"})]})]}),(0,Pt.jsxs)("div",{className:"bb-cameraControls bb-cameraControls--centered",children:[(0,Pt.jsx)("button",{type:"button",className:"bb-button bb-button--primary",onClick:o,disabled:!i,children:"Save"}),(0,Pt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:l,children:"Reset View"}),(0,Pt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:u,children:"Fit Scene"})]}),a?.position&&a?.target&&(0,Pt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Pt.jsx)("span",{className:"bb-cameraSavedBadge",children:"SAVED"}),(0,Pt.jsxs)("div",{className:"se-waypointBody",children:[(0,Pt.jsxs)("div",{className:"bb-cameraWaypointLabel",children:["For ",e.label]}),(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["pos [",a.position.map(d=>d.toFixed(1)).join(", "),"]"]}),(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["look [",a.target.map(d=>d.toFixed(1)).join(", "),"]"]})]}),(0,Pt.jsxs)("div",{className:"se-waypointActions",children:[(0,Pt.jsx)("button",{className:"se-waypointAction",onClick:s,title:"Fly camera to the saved position",children:(0,Pt.jsx)(Bc.MapPin,{size:15})}),(0,Pt.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:c,title:"Delete saved position",children:(0,Pt.jsx)(Bc.Trash2,{size:15})})]})]}),(0,Pt.jsx)("span",{className:"bb-note",children:'Tip: Position the camera how you want, then click "Save" to store this position for the selected object. The camera position updates in real-time as you navigate.'})]})}var Dc=require("lucide-react");var et=require("react/jsx-runtime"),Kb=["X","Y","Z"];var Cw=.1;function tp(e){let t=e%360;return t<0?t+360:t}function Zb(e){return tp(e*180/Math.PI)}function Jb(e){return e*Math.PI/180}function Tw(e,t,n){let i=[...e],r=Zb(e[t]);return i[t]=Jb(tp(r+n)),i}function Pw({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=c=>Number(c.toFixed(3)),label:s}){return(0,et.jsx)("div",{className:"bb-transformAxesGrid",children:Kb.map((c,l)=>(0,et.jsxs)("div",{className:"bb-transformAxis",children:[(0,et.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:c}),(0,et.jsx)("div",{className:"bb-transformAxisControl",children:(0,et.jsx)("input",{type:"number",className:"se-numberInput bb-transformNumberInput",step:i,min:t,max:n,value:o(e[l]),disabled:r,"aria-label":`${c} ${s?.toLowerCase()||""}`,onChange:u=>{let d=Number(u.target.value);if(Number.isFinite(d)){let p=Math.max(t,Math.min(n,d)),f=[...e];f[l]=p,a(f)}}})})]},c))})}function Qb({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,moveModeEnabled:a,onToggleMoveMode:o,transformSpace:s,onTransformSpaceChange:c,originalTransform:l}){let u=t.transform?.rotation??l?.rotation??[0,0,0],d=t.transform?.position??l?.position??[0,0,0],p=(h,m)=>{let S=h.transform?.rotation??l?.rotation??[0,0,0],M=h.transform?.position??l?.position??[0,0,0],C=h.transform?.scale??l?.scale??[1,1,1],L=l?.pivotLocal??[0,0,0],b=qg(M,S,m,C,L,l?.rotationOrder??"XYZ");return{...h,transform:{...h.transform,position:b,rotation:m}}},f=(h,m)=>{e&&r(e,S=>{let M=S.transform?.rotation??l?.rotation??[0,0,0],C=Tw(M,h,m);return p(S,C)})},g=(h,m)=>{e&&r(e,S=>{let C=[...S.transform?.rotation??l?.rotation??[0,0,0]];return C[h]=Jb(tp(m)),p(S,C)})},y=(h,m)=>{e&&r(e,S=>{let C=[...S.transform?.position??l?.position??[0,0,0]];return C[h]=m,{...S,transform:{...S.transform,position:C}}})},T=(h,m)=>{e&&y(h,d[h]+m)},x=()=>{!e||!l||r(e,h=>{let m={...h.transform};return delete m.position,delete m.rotation,{...h,transform:Object.keys(m).length>0?m:void 0}})};return(0,et.jsxs)($n,{title:"Move & Rotate",open:n,onToggle:i,tooltip:"Enable the transform gizmo to move or rotate the selected mesh on any axis. Rotation uses the object's visible center while exported position and rotation remain local GLTF transforms.",children:[(0,et.jsxs)("div",{className:"se-field",children:[(0,et.jsxs)("div",{className:"se-fieldLabel",children:[(0,et.jsxs)("span",{children:[(0,et.jsx)(Dc.Move3d,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Transform gizmo"]}),(0,et.jsxs)("label",{className:"se-switch","aria-label":"Toggle move mode",children:[(0,et.jsx)("input",{type:"checkbox",checked:a,onChange:h=>o(h.target.checked)}),(0,et.jsx)("span",{className:"se-switchTrack",children:(0,et.jsx)("span",{className:"se-switchThumb"})})]})]}),(0,et.jsx)("span",{className:"bb-note",children:"Select a mesh \xB7 drag the colored arrows or planes to move"})]}),(0,et.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,et.jsx)("div",{className:"se-fieldLabel",children:(0,et.jsx)("span",{children:"Axis space"})}),(0,et.jsx)("div",{className:"se-segmentedControl",children:["world","local"].map(h=>(0,et.jsx)("button",{type:"button",className:`se-segmentedOption ${s===h?"se-segmentedOption--active":""}`,onClick:()=>c(h),children:h},h))})]}),(0,et.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,et.jsx)("div",{className:"se-fieldLabel",children:(0,et.jsx)("span",{children:"Rotation (degrees)"})}),(0,et.jsx)("div",{className:"bb-transformAxesGrid",children:Kb.map((h,m)=>{let S=Math.round(Zb(u[m]));return(0,et.jsxs)("div",{className:"bb-transformAxis",children:[(0,et.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:h}),(0,et.jsx)("div",{className:"bb-transformAxisControl",children:(0,et.jsx)("input",{type:"number",className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:S,disabled:!e,"aria-label":`${h} rotation in degrees`,onChange:M=>{let C=Number(M.target.value);Number.isFinite(C)&&g(m,C)}})})]},h)})})]}),(0,et.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,et.jsx)("div",{className:"se-fieldLabel",children:(0,et.jsx)("span",{children:"Position"})}),(0,et.jsx)(Pw,{value:d,min:-1/0,max:1/0,step:Cw,disabled:!e,label:"position",onChange:h=>{e&&r(e,m=>({...m,transform:{...m.transform,position:h}}))}})]}),(0,et.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!l,onClick:x,title:"Restore this node's position and rotation to what they were in the original model",children:[(0,et.jsx)(Dc.RotateCcw,{size:14}),"Restore original position & rotation"]})]})}var ba=require("react");function Aw(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 np(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 Ew(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 Rw(e){return e==="light"||e.endsWith("light")?[{id:"toggle-light",label:"Toggle Light",type:"command"},{id:"change-light-color",label:"Change Light Color",type:"command"},{id:"set-brightness",label:"Set Brightness",type:"command"}]:[{id:"change-color",label:"Change Color",type:"command"},{id:"change-material",label:"Change Material",type:"command"},{id:"toggle-visibility",label:"Toggle Visibility",type:"command"}]}function Lw(e){let t=Ew(e);return{id:Aw(e),modelObjectId:e,type:t,label:np(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:Rw(t),metrics:{},metadata:{}}}function Nc(e){return Object.fromEntries(e.map(t=>[t,Lw(t)]))}function ev(e){let{nodesById:t}=Fa(e),n=[];for(let[i,r]of Object.entries(t)){let a=r;a.isMesh&&a.geometry&&r.name&&n.push(i)}return n.sort((i,r)=>i.localeCompare(r))}var Mn=require("react/jsx-runtime"),tv=(0,ba.memo)(kw);function kw({bindings:e,selectedItem:t,onSelect:n,onHover:i,isOpen:r=!0,onToggle:a}){let[o,s]=(0,ba.useState)(""),c=(0,ba.useMemo)(()=>Object.keys(e),[e]),l=(0,ba.useMemo)(()=>{let u=o.trim().toLowerCase();return u?c.filter(d=>{let p=e[d];return d.toLowerCase().includes(u)||p.label?.toLowerCase().includes(u)||p.type.toLowerCase().includes(u)}):c},[e,c,o]);return(0,Mn.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${r?"":"bb-sidebar--collapsed"}`,children:[(0,Mn.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!r&&(0,Mn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),r&&(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsxs)("div",{children:[(0,Mn.jsx)("div",{className:"bb-sectionKicker",children:"Scene Nodes"}),(0,Mn.jsxs)("div",{className:"bb-sectionHeading",children:[l.length," visible entries"]})]}),(0,Mn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]}),r&&(0,Mn.jsxs)("section",{className:"bb-nodeList",children:[(0,Mn.jsx)("div",{className:"bb-search",children:(0,Mn.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:o,onChange:u=>s(u.target.value)})}),(0,Mn.jsx)("div",{className:"bb-nodeItems",children:l.map(u=>{let d=e[u];return(0,Mn.jsxs)("button",{type:"button",className:`bb-nodeButton ${u===t?"bb-nodeButton--active":""}`,onClick:()=>n(u),onMouseEnter:()=>i?.(u),onMouseLeave:()=>i?.(null),children:[(0,Mn.jsx)("span",{className:"bb-nodeName",children:u}),(0,Mn.jsxs)("span",{className:"bb-nodeMeta",children:[d.type,d.label===np(u)?"":d.label||"\xB7 Untitled"]})]},u)})})]})]})}var Vi=require("react/jsx-runtime");function rp({title:e,label:t,open:n,onToggle:i,draft:r,error:a,example:o,onDraftChange:s,onCommit:c}){return(0,Vi.jsx)($n,{title:e,open:n,onToggle:i,children:(0,Vi.jsxs)("div",{className:"bb-field",children:[(0,Vi.jsx)("label",{className:"bb-label",children:t}),(0,Vi.jsx)("textarea",{className:"bb-textarea",value:r,onChange:l=>s(l.target.value),onBlur:c}),a?(0,Vi.jsx)("span",{className:"bb-status bb-status--error",children:a}):(0,Vi.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",o,"."]})]})})}function nv(e,t){let n=new Map(e.animations.clips.map(a=>[a.sourceName,a])),i=t.map(({sourceName:a})=>n.get(a)??{sourceName:a,displayName:a,hidden:!1,loopMode:"repeat",speed:1}),r=e.animations.autoplayClip&&i.some(a=>a.sourceName===e.animations.autoplayClip&&!a.hidden)?e.animations.autoplayClip:null;return{clips:i,autoplayClip:r}}var gi=require("react"),Bw=100;function Dw(e,t){switch(t.type){case"set":{let n=typeof t.updater=="function"?t.updater(e.present):t.updater;return n===e.present?e:t.coalesce?{...e,present:n,future:[]}:{past:[...e.past,e.present].slice(-Bw),present:n,future:[]}}case"undo":{if(e.past.length===0)return e;let n=e.past[e.past.length-1];return{past:e.past.slice(0,-1),present:n,future:[e.present,...e.future]}}case"redo":{if(e.future.length===0)return e;let[n,...i]=e.future;return{past:[...e.past,e.present],present:n,future:i}}case"reset":return{past:[],present:t.value,future:[]}}}function ip(e,t=600){let[n,i]=(0,gi.useReducer)(Dw,{past:[],present:e,future:[]}),r=(0,gi.useRef)(0),a=(0,gi.useCallback)(l=>{let u=Date.now(),d=u-r.current<t;r.current=u,i({type:"set",updater:l,coalesce:d})},[t]),o=(0,gi.useCallback)(()=>{r.current=0,i({type:"undo"})},[]),s=(0,gi.useCallback)(()=>{r.current=0,i({type:"redo"})},[]),c=(0,gi.useCallback)(l=>{r.current=0,i({type:"reset",value:l})},[]);return{value:n.present,setValue:a,undo:o,redo:s,reset:c,canUndo:n.past.length>0,canRedo:n.future.length>0}}var sv=require("fflate");function rv(e){return JSON.stringify(e,null,2)}function iv(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
|
|
3687
|
+
`}))}increaseSizeTo(e){this._target.setSize(Math.max(this._target.width,e),1)}readDataAsync(e){let{_renderer:t,_target:n}=this;return t.readRenderTargetPixelsAsync(n,0,0,e.length/4,1,e)}readData(e){let{_renderer:t,_target:n}=this;t.readRenderTargetPixels(n,0,0,e.length/4,1,e)}renderPixelToTarget(e,t,n){let{_renderer:i,_target:r}=this;ds.min.copy(t),ds.max.copy(t),ds.max.x+=1,ds.max.y+=1,i.initRenderTarget(r),i.copyTextureToTexture(e,r.texture,ds,n,0)}},Li=new class{constructor(){let e=null;Object.getOwnPropertyNames(zf.prototype).forEach(t=>{t!=="constructor"&&(this[t]=(...n)=>(e||(e=new zf),e[t](...n)))})}},Uf=new Q.Vector2,Vf=new Q.Vector2,Ff=new Q.Vector2;function zy(e,t){return t===0?e.getAttribute("uv"):e.getAttribute(`uv${t}`)}function Jf(e,t,n=[,,,]){let i=3*t,r=3*t+1,a=3*t+2;return e.index&&(i=e.index.getX(i),r=e.index.getX(r),a=e.index.getX(a)),n[0]=i,n[1]=r,n[2]=a,n}function Qf(e,t,n,i,r){let[a,o,s]=i,c=zy(e,t);Uf.fromBufferAttribute(c,a),Vf.fromBufferAttribute(c,o),Ff.fromBufferAttribute(c,s),r.set(0,0,0).addScaledVector(Uf,n.x).addScaledVector(Vf,n.y).addScaledVector(Ff,n.z)}function eg(e,t,n,i){let r=e.x-Math.floor(e.x),a=e.y-Math.floor(e.y),o=Math.floor(r*t%t),s=Math.floor(a*n%n);return i.set(o,s),i}var jf=new Q.Vector2,Hf=new Q.Vector2,Gf=new Q.Vector2,Uy=class extends Zl{constructor(e,t,n=null){super(e,t,n),this.channels=An(n,"channels",[0]),this.index=An(n,"index",null),this.texCoord=An(n,"texCoord",null),this.valueLength=parseInt(this.type.replace(/[^0-9]/g,""))||1}readDataFromBuffer(e,t,n=null){let i=this.type;if(i==="BOOLEAN"||i==="STRING")throw Error("PropertyTextureAccessor: BOOLEAN and STRING types not supported.");return Zf(e,t*this.valueLength,i,n)}},Vy=class extends vu{constructor(...e){super(...e),this.isPropertyTextureAccessor=!0,this._asyncRead=!1,this._initProperties(Uy)}getData(e,t,n,i={}){let r=this.properties;$l(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return this.getPropertyValuesAtTexel(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}async getDataAsync(e,t,n,i={}){let r=this.properties;$l(r,i);let a=Object.keys(r),o=a.map(s=>i[s]);return await this.getPropertyValuesAtTexelAsync(a,e,t,n,o),a.forEach((s,c)=>i[s]=o[c]),i}getPropertyValuesAtTexelAsync(...e){this._asyncRead=!0;let t=this.getPropertyValuesAtTexel(...e);return this._asyncRead=!1,t}getPropertyValuesAtTexel(e,t,n,i,r=[]){for(;r.length<e.length;)r.push(null);r.length=e.length,Li.increaseSizeTo(r.length);let a=this.data,o=this.definition.properties,s=this.properties,c=Jf(i,t);for(let d=0,p=e.length;d<p;d++){let f=e[d];if(!o[f])continue;let g=s[f],y=a[g.index];Qf(i,g.texCoord,n,c,jf),eg(jf,y.image.width,y.image.height,Hf),Gf.set(d,0),Li.renderPixelToTarget(y,Hf,Gf)}let l=new Uint8Array(e.length*4);if(this._asyncRead)return Li.readDataAsync(l).then(()=>(u.call(this),r));return Li.readData(l),u.call(this),r;function u(){for(let d=0,p=e.length;d<p;d++){let f=e[d],g=s[f],y=g.type;if(r[d]=bu(g,r[d]),!g)throw Error("PropertyTextureAccessor: Requested property does not exist.");if(!o[f]){r[d]=g.resolveDefault(r);continue}let T=g.valueLength*(g.count||1),x=g.channels.map(S=>l[4*d+S]),h=g.componentType,m=new(ps(h,y))(T);if(new Uint8Array(m.buffer).set(x),g.array){let S=r[d];for(let M=0,C=S.length;M<C;M++)S[M]=g.readDataFromBuffer(m,M,S[M])}else r[d]=g.readDataFromBuffer(m,0,r[d]);r[d]=g.adjustValueScaleOffset(r[d]),r[d]=g.resolveEnumsToStrings(r[d]),r[d]=g.resolveNoData(r[d])}}}dispose(){this.data.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},mu=class{constructor(e,t,n,i=null,r=null){let{schema:a,propertyTables:o=[],propertyTextures:s=[],propertyAttributes:c=[]}=e,{enums:l,classes:u}=a,d=o.map(g=>new Iy(g,u,l,n)),p=[],f=[];i&&(i.propertyTextures&&(p=i.propertyTextures.map(g=>new Vy(s[g],u,l,t))),i.propertyAttributes&&(f=i.propertyAttributes.map(g=>new Ny(c[g],u,l)))),this.schema=a,this.tableAccessors=d,this.textureAccessors=p,this.attributeAccessors=f,this.object=r,this.textures=t,this.nodeMetadata=i}getPropertyTableData(e,t,n=null){if(!Array.isArray(e))n||(n={}),n=this.tableAccessors[e].getData(t,n);else{n||(n=[]);let i=Math.min(e.length,t.length);n.length=i;for(let r=0;r<i;r++){let a=this.tableAccessors[e[r]];n[r]=a.getData(t[r],n[r])}}if(Array.isArray(e)!==Array.isArray(n)||Array.isArray(e)!==Array.isArray(t))throw Error("StructuralMetadata: Scalar and array inputs cannot be mixed.");return n}getPropertyTableInfo(e=null){if(e===null&&(e=this.tableAccessors.map((t,n)=>n)),Array.isArray(e))return e.map(t=>{let n=this.tableAccessors[t];return{name:n.name,className:n.definition.class}});{let t=this.tableAccessors[e];return{name:t.name,className:t.definition.class}}}getPropertyTextureData(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;for(let r=0;r<i.length;r++)n[r]=i[r].getData(e,t,this.object.geometry,n[r]);return n}async getPropertyTextureDataAsync(e,t,n=[]){let i=this.textureAccessors;n.length=i.length;let r=[];for(let a=0;a<i.length;a++){let o=i[a].getDataAsync(e,t,this.object.geometry,n[a]).then(s=>{n[a]=s});r.push(o)}return await Promise.all(r),n}getPropertyTextureInfo(){return this.textureAccessors}getPropertyAttributeData(e,t=[]){let n=this.attributeAccessors;t.length=n.length;for(let i=0;i<n.length;i++)t[i]=n[i].getData(e,this.object.geometry,t[i]);return t}getPropertyAttributeInfo(){return this.attributeAccessors.map(e=>({name:e.name,className:e.definition.class}))}dispose(){this.textureAccessors.forEach(e=>e.dispose()),this.tableAccessors.forEach(e=>e.dispose()),this.attributeAccessors.forEach(e=>e.dispose())}},us="EXT_structural_metadata";function Fy(e,t=[]){let n=e.json.textures?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{index:o}=r[a];i[o]===null&&(i[o]=e.loadTexture(o))}}),Promise.all(i)}function jy(e,t=[]){let n=e.json.bufferViews?.length||0,i=Array(n).fill(null);return t.forEach(({properties:r})=>{for(let a in r){let{values:o,arrayOffsets:s,stringOffsets:c}=r[a];i[o]===null&&(i[o]=e.getDependency("bufferView",o)),i[s]===null&&(i[s]=e.getDependency("bufferView",s)),i[c]===null&&(i[c]=e.getDependency("bufferView",c))}}),Promise.all(i)}var tg=class{constructor(e){this.parser=e,this.name=us}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(us))return;let i=null,r=t.json.extensions[us];if(r.schemaUri){let{manager:c,path:l,requestHeader:u,crossOrigin:d}=t.options,p=new URL(r.schemaUri,l).toString(),f=new Q.FileLoader(c);f.setCrossOrigin(d),f.setResponseType("json"),f.setRequestHeader(u),i=f.loadAsync(p).then(g=>{r={...r,schema:g}})}let[a,o]=await Promise.all([Fy(t,r.propertyTextures),jy(t,r.propertyTables),i]),s=new mu(r,a,o);e.userData.structuralMetadata=s,e.traverse(c=>{if(t.associations.has(c)){let{meshes:l,primitives:u}=t.associations.get(c),d=t.json.meshes[l]?.primitives[u];if(d&&d.extensions&&d.extensions[us]){let p=d.extensions[us];c.userData.structuralMetadata=new mu(r,a,o,p,c)}else c.userData.structuralMetadata=s}})}},Wf=new Q.Vector2,Xf=new Q.Vector2,qf=new Q.Vector2;function Hy(e){return e.x>e.y&&e.x>e.z?0:e.y>e.z?1:2}var ng=class{constructor(e,t,n){this.geometry=e,this.textures=t,this.data=n,this._asyncRead=!1,this.featureIds=n.featureIds.map(i=>{let{texture:r,...a}=i,o={label:null,propertyTable:null,nullFeatureId:null,...a};return r&&(o.texture={texCoord:0,channels:[0],...r}),o})}getTextures(){return this.textures}getFeatureInfo(){return this.featureIds}getFeaturesAsync(...e){this._asyncRead=!0;let t=this.getFeatures(...e);return this._asyncRead=!1,t}getFeatures(e,t){let{geometry:n,textures:i,featureIds:r}=this,a=Array(r.length).fill(null),o=r.length;Li.increaseSizeTo(o);let s=Jf(n,e),c=s[Hy(t)];for(let d=0,p=r.length;d<p;d++){let f=r[d],g="nullFeatureId"in f?f.nullFeatureId:null;if("texture"in f){let y=i[f.texture.index];Qf(n,f.texture.texCoord,t,s,Wf),eg(Wf,y.image.width,y.image.height,Xf),qf.set(d,0),Li.renderPixelToTarget(i[f.texture.index],Xf,qf)}else if("attribute"in f){let y=n.getAttribute(`_feature_id_${f.attribute}`).getX(c);y!==g&&(a[d]=y)}else{let y=c;y!==g&&(a[d]=y)}}let l=new Uint8Array(o*4);if(this._asyncRead)return Li.readDataAsync(l).then(()=>(u(),a));return Li.readData(l),u(),a;function u(){let d=new Uint32Array(1);for(let p=0,f=r.length;p<f;p++){let g=r[p],y="nullFeatureId"in g?g.nullFeatureId:null;if("texture"in g){let{channels:T}=g.texture,x=T.map(m=>l[4*p+m]);new Uint8Array(d.buffer).set(x);let h=d[0];h!==y&&(a[p]=h)}}}}dispose(){this.textures.forEach(e=>{e&&(e.dispose(),e.image instanceof ImageBitmap&&e.image.close())})}},Kl="EXT_mesh_features";function Yf(e,t,n){e.traverse(i=>{if(t.associations.has(i)){let{meshes:r,primitives:a}=t.associations.get(i),o=t.json.meshes[r]?.primitives[a];o&&o.extensions&&o.extensions[Kl]&&n(i,o.extensions[Kl])}})}var rg=class{constructor(e){this.parser=e,this.name=Kl}async afterRoot({scene:e,parser:t}){let n=t.json.extensionsUsed;if(!n||!n.includes(Kl))return;let i=t.json.textures?.length||0,r=Array(i).fill(null);Yf(e,t,(o,{featureIds:s})=>{s.forEach(c=>{if(c.texture&&r[c.texture.index]===null){let l=c.texture.index;r[l]=t.loadTexture(l)}})});let a=await Promise.all(r);Yf(e,t,(o,s)=>{o.userData.meshFeatures=new ng(o.geometry,a,s)})}},ig=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])}}},xu=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 $f.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 ig),this.metadata&&(t.register(()=>new tg),t.register(()=>new rg)),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:lC}=Q.MathUtils;var cC=new fu.FullScreenQuad(new Q.MeshBasicMaterial),Gy=new Q.DataTexture(new Uint8Array([255,255,255,255]),1,1);Gy.needsUpdate=!0;var Wy=0,Xy=1,qy=2,Yy=3,$y=4,Ky=5,Zy=6,Jy=7,Qy=8,e1=9,t1=10,n1=11,dC=Object.freeze({NONE:Wy,SCREEN_ERROR:Xy,GEOMETRIC_ERROR:qy,DISTANCE:Yy,DEPTH:$y,RELATIVE_DEPTH:Ky,IS_LEAF:Zy,RANDOM_COLOR:Jy,RANDOM_NODE_COLOR:Qy,CUSTOM_COLOR:e1,LOAD_ORDER:t1,INDEXED_COLOR:n1});var uC=Math.PI/4,pC=3/5;var Ri={NONE:0,NOT_READY:1,NO_FIT:2,DEPTH:3,OCCUPANCY:4,SPACING:5,ANGLE:6,FACING:7};var hC=new class{constructor(){this._cache={}}getColor(...e){let t=e.pop(),n=e.join("_"),{_cache:i}=this;return n in i||(t.setHSL(Math.random(),1,.5),i[n]=t.getHex()),t.set(i[n])}};var mC={[Ri.NONE]:16777215,[Ri.NOT_READY]:7829367,[Ri.NO_FIT]:2250239,[Ri.DEPTH]:4473924,[Ri.OCCUPANCY]:65535,[Ri.SPACING]:16776960,[Ri.ANGLE]:16711680,[Ri.FACING]:16711935};var fC=Math.PI/180;var gC=Qa*Math.PI*2;var bC=Qa*Math.PI*2;var og=require("three/examples/jsm/loaders/DRACOLoader.js"),sg=require("three/examples/jsm/loaders/KTX2Loader.js"),lg=require("three/examples/jsm/libs/meshopt_decoder.module.js"),Yr=require("three");var fs=require("three");function ag(e,t,n,i){for(let r=0;r<e.count;r+=1)for(let a=0;a<e.itemSize;a+=1)t.setComponent(r,a,fs.MathUtils.clamp(e.getComponent(r,a),n,i));return t}function r1(e){for(let t=0;t<e.count;t+=1)for(let n=0;n<e.itemSize;n+=1){let i=e.getComponent(t,n);if(!Number.isFinite(i)||i<0||i>1)return!1}return!0}var Jl=class{constructor(){this.name="RI_VERTEX_COMPRESSION_PLUGIN";this.priority=-99}processTileModel(t){t.traverse(n=>{let i=n.geometry;if(!i)return;let r=i.attributes.normal;r&&!r.isInterleavedBufferAttribute&&!(r.array instanceof Int16Array)&&(i.attributes.normal=ag(r,new fs.BufferAttribute(new Int16Array(r.count*r.itemSize),r.itemSize,!0),-1,1));for(let a of["uv","uv1","uv2","uv3"]){let o=i.attributes[a];!o||o.isInterleavedBufferAttribute||o.array instanceof Uint16Array||!r1(o)||(i.attributes[a]=ag(o,new fs.BufferAttribute(new Uint16Array(o.count*o.itemSize),o.itemSize,!0),0,1))}})}};var gs=require("react/jsx-runtime");function i1(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 yu({url:e,rotation:t=[0,0,0],errorTarget:n=64,cacheSize:i=800,memoryBudgetMB:r=800,decoderConfig:a,objectBindings:o,itemMaterials:s,sceneConfig:c,selectedItem:l,panelHoveredItem:u,highlightOnHover:d=!0,onItemClick:p,onItemHover:f,onObjectCatalog:g,onTilesetBounds:y,onModelLoaded:T,onLoadError:x,nodeRefsOut:h,onNodeRefsChange:m,materialRefsOut:S,explodeFactor:M=0,suspendBindingTransforms:C=!1}){let{camera:L,gl:b,invalidate:_}=(0,Ql.useThree)(),v=(0,nt.useRef)(null),[P,z]=(0,nt.useState)(null),E=(0,nt.useRef)({onItemClick:p,onItemHover:f,onObjectCatalog:g,onTilesetBounds:y,onModelLoaded:T,onLoadError:x,onNodeRefsChange:m});E.current={onItemClick:p,onItemHover:f,onObjectCatalog:g,onTilesetBounds:y,onModelLoaded:T,onLoadError:x,onNodeRefsChange:m};let V=(0,nt.useRef)(!0),[A,X]=(0,nt.useState)(null),j=(0,nt.useRef)(null);j.current=A;let k=(0,nt.useRef)([]),B=(0,nt.useRef)(!1);(0,nt.useEffect)(()=>{let le=new El;return X(le),()=>le.dispose()},[e]);let Y=(0,nt.useRef)(null),q=(0,nt.useRef)(0),ue=(0,nt.useRef)(!1),Ee=r*1024*1024,be=(0,nt.useRef)(!1),Ce=a?.dracoDecoderPath??Ud,De=a?.ktx2TranscoderPath??Vd,ze=a?.meshopt??!0,[se,Lt]=(0,nt.useState)(null);(0,nt.useEffect)(()=>{ue.current=!1,be.current=!1;let le=new pu(e);le.loadAncestors=!0,le.downloadQueue.maxJobsPerOrigin=4,le.parseQueue.maxJobs=2;let J=Ce?new og.DRACOLoader().setDecoderPath(Ce).setWorkerLimit(2):null,ee=De?new sg.KTX2Loader().setTranscoderPath(De).detectSupport(b):null;return le.registerPlugin(new xu({dracoLoader:J,ktxLoader:ee,meshoptDecoder:ze?lg.MeshoptDecoder:null,autoDispose:!1})),le.registerPlugin(new gu({disableMipmaps:!0,compressIndex:!0,compressNormals:!1,compressUvs:!1,compressPosition:!0})),le.registerPlugin(new Jl),Lt(le),window.__riTiles=le,()=>{le.forEachLoadedModel(Ve=>Qi(Ve)),le.dispose(),J?.dispose(),ee?.dispose(),Lt(Ve=>Ve===le?null:Ve)}},[Ce,b,De,ze,e]),(0,nt.useEffect)(()=>{se&&(se.errorTarget=n,se.lruCache.maxSize=i,se.lruCache.minSize=Math.max(1,Math.floor(i*.75)),se.lruCache.maxBytesSize=Ee,se.lruCache.minBytesSize=Ee*.75,_())},[i,n,_,Ee,se]);let Xe=(0,nt.useMemo)(()=>{let le=o??{};return{objectBindings:le,keyByModelObject:jm(le),itemMaterials:s,shadingMode:c?.model.shading??"lit",rendererMode:c?.model.renderer??"pbr",selectedKey:l??null,hoveredKey:Hm(P,u),highlightOnHover:d,suspendTransforms:C,invalidate:_}},[P,d,_,s,o,u,c,l,C]),Ge=(0,nt.useCallback)(()=>{if(!se)return;let le=en.current,J=B.current?j.current?.nodesByBinding(le)??{}:{},ee={};se.group.traverse(xe=>{if(!xe.isMesh)return;let ot=qd(xe);if(!ot)return;let gt=le.keyByModelObject[ot]??ot;if(!le.objectBindings[gt])return;J[gt]||(J[gt]=xe);let At=xe.material;At&&(ee[gt]=At)});let Ve=h?.current??{},tt=Object.keys(Ve),Fe=tt.length!==Object.keys(J).length||tt.some(xe=>Ve[xe]!==J[xe]);h&&(h.current=J),S&&(S.current=ee),(Fe||!h)&&E.current.onNodeRefsChange?.()},[S,h,se]),$e=(0,nt.useCallback)(le=>Pl(le,Xe),[Xe]),rt=(0,nt.useCallback)(le=>Wm(le,Xe),[Xe]),it=(0,nt.useRef)(rt);it.current=rt;let en=(0,nt.useRef)(Xe);en.current=Xe;let qe=(0,nt.useCallback)(()=>{let le=Y.current,J=q.current;return!le||J<=0?en.current:{...en.current,explode:{factor:J,centre:le.centre,radius:le.radius}}},[]);(0,nt.useEffect)(()=>{se&&(rt(se.group),V.current=!0,se.forEachLoadedModel(le=>{rt(le),Za(le,qe())}),_())},[rt,_,qe,se]),(0,nt.useEffect)(()=>{let le=i1(e);if(!le)return;let J=!1;return fetch(le).then(ee=>ee.ok?ee.json():null).then(ee=>{J||!ee?.objects||(k.current=ee.objects,B.current=ee.bindingFrame==="gltf-identity-v2",B.current&&j.current?.setCatalog(ee.objects),V.current=!0,E.current.onObjectCatalog?.(ee.objects),_())}).catch(()=>{}),()=>{J=!0}},[e,_,A]),(0,nt.useEffect)(()=>{if(!se)return;let le=!1,J=()=>_(),ee=xe=>{xe.scene&&(xe.scene.traverse(ot=>{let gt=ot.material;for(let At of Array.isArray(gt)?gt:gt?[gt]:[])At.transparent&&At.side===Yr.DoubleSide&&(At.forceSinglePass=!0)}),it.current(xe.scene),Za(xe.scene,qe()),Oa(xe.scene)),V.current=!0,le||(le=!0,E.current.onModelLoaded?.(se.group)),_()},Ve=xe=>{E.current.onLoadError?.(xe.error)},tt=xe=>{xe.scene&&(Yd(xe.scene),Qi(xe.scene)),V.current=!0};se.setCamera(L),se.setResolutionFromRenderer(L,b),se.addEventListener("needs-update",J),se.addEventListener("load-model",ee),se.addEventListener("load-error",Ve),se.addEventListener("dispose-model",tt);let Fe=()=>{V.current=!0,_()};return se.addEventListener("tile-visibility-change",Fe),_(),()=>{se.removeEventListener("needs-update",J),se.removeEventListener("load-model",ee),se.removeEventListener("load-error",Ve),se.removeEventListener("dispose-model",tt),se.removeEventListener("tile-visibility-change",Fe),Yd(se.group),se.deleteCamera(L),h&&(h.current={}),S&&(S.current={})}},[L,b,_,S,h,qe,se]);let on=(0,nt.useCallback)(le=>{let J=$e(le.object);J&&(le.stopPropagation(),E.current.onItemClick?.(J.binding))},[$e,p]),Gt=(0,nt.useCallback)(le=>{let J=$e(le.object),ee=J?.key??null;ee!==v.current&&(v.current=ee,z(ee),E.current.onItemHover?.(J?.binding??null))},[$e]),Ke=(0,nt.useCallback)(()=>{v.current!==null&&(v.current=null,z(null),E.current.onItemHover?.(null))},[]);return(0,nt.useEffect)(()=>{_()},[_,se]),(0,Ql.useFrame)((le,J)=>{if(!se)return;if(se.setResolutionFromRenderer(L,b),B.current&&A){let xe=A.sync(qe(),l,C);A.updateBounds(se.root),C&&se.forEachLoadedModel(ot=>Za(ot,xe))}if(se.update(),!ue.current){let xe=new Yr.Box3;if(se.getBoundingBox(xe)){ue.current=!0,se.group.updateMatrixWorld(),xe.applyMatrix4(se.group.matrixWorld);let ot=xe.getBoundingSphere(new Yr.Sphere);Y.current={centre:ot.center.clone(),radius:xe.getSize(new Yr.Vector3).length()*.5},E.current.onTilesetBounds?.(xe),_()}}V.current&&(V.current=!1,Ge());let ee=Math.min(Math.max(M,0),1),Ve=q.current;Math.abs(Ve-ee)>1e-4?(q.current=Yr.MathUtils.lerp(Ve,ee,1-Math.exp(-6*J)),Za(se.group,qe()),_()):Ve!==ee&&(q.current=ee,Za(se.group,qe()),_()),!be.current&&se.lruCache.isFull()&&(be.current=!0,console.warn("[react-immersive] The tile memory budget is full, so no further tiles will load and the model may render incompletely. This usually means the model's textures are too large for streaming \u2014 re-process it with a smaller MAX_TEXTURE_SIZE, or raise memoryBudgetMB."));let tt=se;((tt.stats?.downloading??0)>0||(tt.stats?.parsing??0)>0||tt.loadProgress!==void 0&&tt.loadProgress<1&&!se.lruCache.isFull())&&_()}),se?(0,gs.jsxs)("group",{rotation:t,children:[A?(0,gs.jsx)("primitive",{object:A.group}):null,(0,gs.jsx)("primitive",{object:se.group,onClick:on,onPointerMove:Gt,onPointerOut:Ke})]}):null}var He=require("react"),wu=require("@react-three/drei"),ca=require("@react-three/fiber"),$r=require("three");var In=require("react/jsx-runtime"),a1=.02;function cg(e,t){let n=(0,He.useRef)(null),i=(0,ca.useThree)(l=>l.scene),r=(0,He.useRef)(null),a=(0,He.useMemo)(()=>new $r.Vector3(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),o=(0,He.useMemo)(()=>new $r.Vector3,[]),s=(0,He.useMemo)(()=>new $r.Vector3,[]),c=(0,He.useMemo)(()=>new $r.Vector3,[]);return(0,He.useEffect)(()=>{r.current=null},[e.anchorNodeName]),(0,ca.useFrame)(({camera:l})=>{let u=n.current,d=u?.parent;if(!u||!d)return;let p=r.current;if(e.anchorNodeName&&(!p||!p.parent)&&(p=Dr(i,e.anchorNodeName),r.current=p),p?(p.updateWorldMatrix(!0,!1),o.copy(a).applyMatrix4(p.matrixWorld)):(o.copy(a),d.localToWorld(o)),t){let f=t.current.get(e.id);f||(f=new $r.Vector3,t.current.set(e.id,f)),f.copy(o)}c.copy(l.position).sub(o),c.lengthSq()>0?(c.normalize(),s.copy(o).addScaledVector(c,a1)):s.copy(o),d.worldToLocal(s),u.position.copy(s)}),n}function o1({annotation:e,occluders:t,worldPositionsRef:n,onClick:i,onHover:r,showAnnotationOnHover:a}){let[o,s]=(0,He.useState)(!1),c=cg(e,n),[l,u]=(0,He.useState)(!1),[d,p]=(0,He.useState)(1),f=(0,He.useRef)(null),g=(0,He.useRef)(null),y=(0,He.useRef)(null);(0,He.useEffect)(()=>()=>{f.current&&(clearTimeout(f.current),f.current=null),y.current&&(clearTimeout(y.current),y.current=null)},[]);let T=M=>{M.stopPropagation(),M.preventDefault(),f.current&&(clearTimeout(f.current),f.current=null),f.current=window.setTimeout(()=>{i?.(e),f.current=null},10)},x=M=>{M.stopPropagation(),u(!0),p(100),y.current&&(clearTimeout(y.current),y.current=null),r?.(e),a&&i?.(e)},h=M=>{M.stopPropagation(),u(!1),p(1),y.current&&clearTimeout(y.current),y.current=window.setTimeout(()=>{r?.(null),a&&r?.(null),y.current=null},50)},m=M=>{M.stopPropagation();let C=M.currentTarget;C.dataset.pointerX=String(M.clientX),C.dataset.pointerY=String(M.clientY)},S=M=>{M.stopPropagation();let C=M.currentTarget,L=parseFloat(C.dataset.pointerX||"0"),b=parseFloat(C.dataset.pointerY||"0"),_=M.clientX-L,v=M.clientY-b;Math.sqrt(_*_+v*v)<10&&T(M)};return(0,In.jsx)("group",{ref:c,children:(0,In.jsx)(wu.Html,{center:!0,occlude:t,onOcclude:s,pointerEvents:o?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:o?"none":"auto",zIndex:d},className:"annotation-html-wrapper",transparent:!0,children:(0,In.jsx)("div",{ref:g,className:`ri-annotationMarker ${l?"ri-annotationMarker--hovered":""}`,title:e.title,style:{display:o?"none":"flex"},onPointerDown:m,onPointerUp:S,onPointerEnter:x,onPointerLeave:h,onDoubleClick:M=>{M.stopPropagation(),i?.(e)},role:"button",tabIndex:0,"aria-label":`Annotation ${e.id}`,children:(0,In.jsx)("span",{className:"ri-annotationMarker-id",children:e.id})})})})}function s1({annotation:e,occluders:t,popupRef:n,onClose:i,hideCloseButton:r=!1}){let[a,o]=(0,He.useState)(!1),s=cg(e),c=(0,In.jsxs)("div",{ref:n,className:"ri-viewAnnotationPopup",style:{display:a?"none":"block"},onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[(0,In.jsxs)("div",{className:"ri-viewAnnotationHeader",children:[(0,In.jsx)("h4",{className:"ri-viewAnnotationTitle",children:e.title}),!r&&(0,In.jsx)("button",{onClick:l=>{l.stopPropagation(),i?.()},className:"ri-viewAnnotationClose","aria-label":"Close annotation",children:"\xD7"})]}),e.description&&(0,In.jsx)("p",{className:"ri-viewAnnotationDescription",children:e.description})]});return(0,In.jsx)("group",{ref:s,children:(0,In.jsx)(wu.Html,{occlude:t,onOcclude:o,pointerEvents:a?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:a?"none":"auto",zIndex:1e3},transparent:!0,children:c})})}function _u({annotations:e,sceneConfig:t,activeAnnotation:n,popupRef:i,canvasRootRef:r,worldPositionsRef:a,modelLoaded:o,onAnnotationClick:s,onAnnotationHover:c,onCloseAnnotation:l,hideCloseButton:u=!1,showAnnotationOnHover:d=!1}){let p=(0,ca.useThree)(A=>A.invalidate),f=(0,ca.useThree)(A=>A.scene),[g,y]=(0,He.useState)(null),[T,x]=(0,He.useState)(!1),h=(0,He.useRef)(null),m=(0,He.useRef)(null),S=(0,He.useRef)(null),M=(0,He.useMemo)(()=>{let A=[];return f.traverse(X=>{let j=X;j.isMesh&&!j.isSkinnedMesh&&A.push({current:X})}),A},[f,e,o]),C=(0,He.useCallback)(()=>{p();let A=()=>{p(),m.current=window.requestAnimationFrame(()=>{p(),m.current=null})};m.current=window.requestAnimationFrame(A)},[p]);(0,He.useEffect)(()=>{C()},[e,C]),(0,He.useEffect)(()=>{C()},[n,C]),(0,He.useEffect)(()=>()=>{m.current!==null&&window.cancelAnimationFrame(m.current),S.current&&clearTimeout(S.current)},[]);let L=T?g:n||g,b=(0,He.useMemo)(()=>L?e.find(A=>A.id===L.id)??L:null,[L,e]),_=(0,He.useCallback)(A=>{if(T&&g?.id===A.id){x(!1),y(null),l?.();return}x(!0),y(A),s?.(A)},[T,g,s,l]),v=(0,He.useCallback)(A=>{c?.(A),d&&!T&&(S.current&&(clearTimeout(S.current),S.current=null),A?y(A):S.current=window.setTimeout(()=>{y(null),l?.(),S.current=null},100))},[T,c,d,l]),P=(0,He.useCallback)(()=>{x(!1),y(null),l?.()},[l]),z=(0,He.useCallback)(A=>{let X=A.target;if(X.closest?.(".ri-annotationMarker")||X.closest?.(".ri-viewAnnotationPopup")||X.closest?.(".annotation-html-wrapper"))return;let j=r.current;j&&j.contains(X)&&(x(!1),y(null),l?.())},[r,l]),E=(0,He.useCallback)(A=>{A.key==="Escape"&&T&&(x(!1),y(null),l?.())},[T,l]);(0,He.useEffect)(()=>{let A=r.current;return A&&(A.addEventListener("click",z),A.addEventListener("pointerdown",z)),document.addEventListener("keydown",E),()=>{A&&(A.removeEventListener("click",z),A.removeEventListener("pointerdown",z)),document.removeEventListener("keydown",E)}},[r,z,E]);let V=(0,He.useMemo)(()=>(t?.model.rotation??[0,0,0]).map(A=>A*Math.PI/180),[t?.model.rotation]);return(0,He.useEffect)(()=>{p()},[p,V]),(0,ca.useFrame)((A,X)=>{if(!h.current)return;h.current.rotation.x=$r.MathUtils.lerp(h.current.rotation.x,V[0],1-Math.exp(-5*X)),h.current.rotation.y=$r.MathUtils.lerp(h.current.rotation.y,V[1],1-Math.exp(-5*X)),h.current.rotation.z=$r.MathUtils.lerp(h.current.rotation.z,V[2],1-Math.exp(-5*X));let{rotation:j}=h.current;Math.abs(j.x-V[0])+Math.abs(j.y-V[1])+Math.abs(j.z-V[2])>1e-4&&p()}),(0,In.jsxs)("group",{ref:h,children:[e.map(A=>{let X=`${A.worldPosition.join(",")}-${A.title}-${A.id}`;return(0,In.jsx)(o1,{annotation:A,occluders:M,worldPositionsRef:a,onClick:_,onHover:v,showAnnotationOnHover:d},X)}),b?(0,In.jsx)(s1,{annotation:b,occluders:M,popupRef:i,onClose:P,hideCloseButton:u},`popup-${b.id}`):null]})}var bs=require("react"),vs=require("@react-three/drei"),da=require("three"),On=require("react/jsx-runtime"),l1="#22d3ee",c1="#facc15";function ec(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function d1(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function tc({position:e,children:t}){return(0,On.jsx)(vs.Html,{center:!0,position:e,zIndexRange:[20,0],children:(0,On.jsx)("div",{className:"ri-measureLabel",children:t})})}function u1({box:e,unit:t}){let n=(0,bs.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,bs.useMemo)(()=>{let[s,c,l]=e.size;return new da.EdgesGeometry(new da.BoxGeometry(s||1e-4,c||1e-4,l||1e-4))},[e.size]);(0,bs.useEffect)(()=>()=>{i.dispose()},[i]);let[r,a,o]=e.size;return(0,On.jsxs)("group",{position:n,children:[(0,On.jsx)("lineSegments",{geometry:i,children:(0,On.jsx)("lineBasicMaterial",{color:c1})}),(0,On.jsxs)(tc,{position:[0,-a/2,o/2],children:["W ",ec(r,t)]}),(0,On.jsxs)(tc,{position:[-r/2,0,o/2],children:["H ",ec(a,t)]}),(0,On.jsxs)(tc,{position:[r/2,-a/2,0],children:["D ",ec(o,t)]})]})}function Su({points:e,unit:t,box:n,showDimensions:i}){return(0,On.jsxs)("group",{children:[e.map(r=>(0,On.jsx)(vs.Html,{center:!0,position:r.position,zIndexRange:[15,0],children:(0,On.jsx)("div",{className:"ri-measureDot"})},r.id)),e.slice(1).map((r,a)=>{let o=e[a].position,s=r.position,c=new da.Vector3(...o).distanceTo(new da.Vector3(...s));return(0,On.jsxs)("group",{children:[(0,On.jsx)(vs.Line,{points:[o,s],color:l1,lineWidth:2}),(0,On.jsx)(tc,{position:d1(o,s),children:ec(c,t)})]},`${e[a].id}-${r.id}`)}),i&&n?(0,On.jsx)(u1,{box:n,unit:t}):null]})}var st=require("react"),ua=require("@react-three/xr"),hg=require("@react-three/fiber"),xs=require("three"),zr=require("react/jsx-runtime"),p1=1,dg=1,h1=.1,m1=10;function f1(e,t){let[n,i,r]=e.size,a=(e.min[0]+e.max[0])/2,o=(e.min[2]+e.max[2])/2,s=Math.max(n,i,r)||1;return{scale:t==="real-world"?1:p1/s,offset:[-a,-e.min[1],-o]}}function ug(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.hypot(t,n)}function pg(e){let t=e[0].clientX-e[1].clientX,n=e[0].clientY-e[1].clientY;return Math.atan2(n,t)}var g1=(0,st.forwardRef)(function({box:t,scaleMode:n,children:i,onARStateChange:r},a){let o=(0,st.useRef)(null),s=(0,st.useRef)(null),c=(0,st.useRef)(null),l=(0,ua.useXR)(X=>X.session!=null),u=(0,ua.useXR)(X=>X.mode==="immersive-ar"),d=(0,st.useMemo)(()=>t?f1(t,n):null,[t,n]),p=(0,st.useRef)(new xs.Vector3(0,0,-dg)),f=(0,st.useRef)(1),g=(0,st.useRef)(0),y=(0,st.useRef)(!0),T=(0,st.useRef)(!1),x=(0,st.useMemo)(()=>new xs.Matrix4,[]),h=(0,st.useRef)(new xs.Vector3),m=(0,st.useRef)(!1),S=(0,st.useRef)(null),M=(0,st.useRef)(!1),C=(0,st.useRef)(0),L=(0,st.useRef)(0),b=(0,st.useRef)(1),_=(0,st.useRef)(0),v=(0,st.useCallback)(()=>{if(!r||!u)return;let X={canPlace:m.current,isPlacementMode:y.current,isModelPlaced:T.current},j=S.current;j&&j.canPlace===X.canPlace&&j.isPlacementMode===X.isPlacementMode&&j.isModelPlaced===X.isModelPlaced||(S.current=X,r(X))},[u,r]),P=(0,st.useCallback)(()=>!u||!m.current?!1:(p.current.copy(h.current),T.current=!0,y.current=!1,v(),!0),[v,u]),z=(0,st.useCallback)(()=>{u&&(y.current=!0,v())},[v,u]),E=(0,st.useCallback)(()=>{let X=P();return!X&&u&&(y.current=!1,v()),X},[v,u,P]),V=(0,st.useCallback)(()=>{u&&(y.current=!1,v())},[v,u]);(0,st.useImperativeHandle)(a,()=>({placeCurrent:P,startPlacementMode:z,finishPlacementMode:E,cancelPlacementMode:V}),[V,E,P,z]),(0,st.useEffect)(()=>{if(!l){p.current.set(0,0,-dg),f.current=1,g.current=0,m.current=!1,M.current=!1,y.current=!0,T.current=!1,S.current=null;return}u&&(m.current=!1,M.current=!1,y.current=!0,T.current=!1,S.current=null,v())},[v,l,u]),(0,ua.useXRHitTest)((X,j)=>{if(!u||X.length===0){m.current&&(m.current=!1,v());return}j(x,X[0])&&(h.current.setFromMatrixPosition(x),m.current||(m.current=!0,v()))},"viewer"),(0,ua.useXRInputSourceEvent)("all","select",()=>{!u||M.current||!y.current||P()},[u,P]),(0,st.useEffect)(()=>{if(!u)return;let X=B=>{B.touches.length===2&&(M.current=!0,C.current=ug(B.touches),L.current=pg(B.touches),b.current=f.current,_.current=g.current)},j=B=>{if(!M.current||B.touches.length!==2)return;B.preventDefault();let Y=ug(B.touches);if(C.current>0){let ue=Y/C.current;f.current=Math.min(m1,Math.max(h1,b.current*ue))}let q=pg(B.touches);g.current=_.current-(q-L.current)},k=B=>{B.touches.length===0&&requestAnimationFrame(()=>{M.current=!1})};return window.addEventListener("touchstart",X),window.addEventListener("touchmove",j,{passive:!1}),window.addEventListener("touchend",k),window.addEventListener("touchcancel",k),()=>{window.removeEventListener("touchstart",X),window.removeEventListener("touchmove",j),window.removeEventListener("touchend",k),window.removeEventListener("touchcancel",k)}},[u]),(0,hg.useFrame)(()=>{let X=o.current,j=s.current;if(!X||!j)return;!l||!d?(X.visible=!0,X.position.set(0,0,0),X.rotation.set(0,0,0),j.scale.setScalar(1)):(X.visible=!u||T.current,X.position.copy(p.current),X.rotation.set(0,g.current,0),j.scale.setScalar(d.scale*f.current));let k=c.current;if(k){let B=u&&y.current&&m.current;k.visible=B,B&&k.position.copy(h.current)}});let A=l&&d?d.offset:[0,0,0];return(0,zr.jsxs)(zr.Fragment,{children:[(0,zr.jsxs)("mesh",{ref:c,visible:!1,rotation:[-Math.PI/2,0,0],children:[(0,zr.jsx)("ringGeometry",{args:[.05,.07,32]}),(0,zr.jsx)("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:.95})]}),(0,zr.jsx)("group",{ref:o,children:(0,zr.jsx)("group",{ref:s,children:(0,zr.jsx)("group",{position:A,children:i})})})]})}),mg=g1;var jt=require("react"),nc=require("@react-three/fiber"),En=require("three"),b1=1.2;function Mu({controlsRef:e,sceneRef:t,config:n,playing:i,resetOnPlay:r=!1,onFinished:a,onUserInteract:o,onStop:s}){let c=(0,nc.useThree)(V=>V.invalidate),l=(0,jt.useMemo)(()=>n.waypoints??[],[n.waypoints]),u=l.length>=2,d=n.loop??!0,p=(0,jt.useMemo)(()=>{if(l.length<2)return 24;let V=0;for(let A=0;A<l.length-1;A++)V+=l[A].segmentDuration??3.5;return d&&l.length>1&&(V+=l[l.length-1].segmentDuration??3.5),Math.max(V,4)},[l,d]),f=n.duration??p,g=(0,jt.useMemo)(()=>l.map(V=>[...V.position,...V.target,V.azimuthAngle??"",V.polarAngle??"",V.segmentDuration??""].join(",")).join(";"),[l]),y=(0,jt.useMemo)(()=>{let V=[];if(l.length<2)return V;let A=0;for(let X=0;X<l.length-1;X++)A+=l[X].segmentDuration??3.5,V.push(A);return d&&l.length>1&&(A+=l[l.length-1].segmentDuration??3.5,V.push(A)),V},[l,d]),T=(0,jt.useMemo)(()=>V=>{if(l.length<2||y.length===0)return V/f;let A=y[y.length-1],X=d?V%f:Math.min(V,f),j=f>0?X/f*A:0;for(let k=0;k<y.length;k++)if(j<=y[k]){let B=k===0?0:y[k-1],Y=y[k]-B,q=Y>0?(j-B)/Y:0,ue=d?l.length:l.length-1,Ee=k/ue,be=1/ue;return Ee+q*be}return 1},[l.length,y,f,d]),x=(0,jt.useMemo)(()=>u?{position:new En.CatmullRomCurve3(l.map(V=>new En.Vector3(...V.position)),d,"catmullrom",.5),target:new En.CatmullRomCurve3(l.map(V=>new En.Vector3(...V.target)),d,"catmullrom",.5)}:null,[g,u,d]),h=(0,jt.useMemo)(()=>{if(!u||!l.every(A=>Number.isFinite(A.azimuthAngle)&&Number.isFinite(A.polarAngle)))return null;let V=l.map(A=>({azimuth:A.azimuthAngle,polar:A.polarAngle,distance:new En.Vector3(...A.position).distanceTo(new En.Vector3(...A.target))}));for(let A=1;A<V.length;A+=1){let X=V[A-1].azimuth,j=V[A].azimuth;V[A].azimuth=j+Math.round((X-j)/(Math.PI*2))*Math.PI*2}return V},[g,u]),m=(0,jt.useRef)(0),S=(0,jt.useRef)(0),M=(0,jt.useRef)(new En.Vector3),C=(0,jt.useRef)(new En.Vector3),L=(0,jt.useRef)(!1),b=(0,jt.useRef)(0),_=(0,jt.useRef)(!1),v=(0,jt.useRef)(null),P=(0,jt.useMemo)(()=>new En.Vector3,[]),z=(0,jt.useMemo)(()=>new En.Vector3,[]),E=(0,jt.useMemo)(()=>new En.Spherical,[]);return(0,jt.useEffect)(()=>{m.current=0,b.current=0,S.current=0,_.current=!1},[g,d,f]),(0,jt.useEffect)(()=>{r&&(b.current=0,m.current=0,_.current=!1)},[r]),(0,jt.useEffect)(()=>{if(!i){L.current=!1,m.current>0&&!r?b.current=m.current:r&&(b.current=0),(m.current>0||_.current)&&s?.();return}m.current>=f&&!d&&(m.current=0,b.current=0,_.current=!1);let V=e.current;if(V&&(V.getPosition(M.current),V.getTarget(C.current)),r||_.current||b.current===0?(m.current=0,b.current=0,_.current=!1):b.current>0&&b.current<f?m.current=b.current:(m.current=0,b.current=0),S.current=0,!u){let A=t.current;if(A){let X=new En.Box3().setFromObject(A).getBoundingSphere(new En.Sphere);v.current={center:X.center.clone(),radius:X.radius>0?X.radius:1}}}L.current=!0,c()},[i,u,e,t,c,f,d,g,r,s]),(0,jt.useEffect)(()=>{if(!i||!o)return;let V=e.current;if(!V)return;let A=()=>{_.current||o()};return V.addEventListener("controlstart",A),()=>V.removeEventListener("controlstart",A)},[i,e,o]),(0,nc.useFrame)((V,A)=>{if(!i||!L.current)return;let X=e.current;if(!X)return;m.current+=A,S.current+=A;let j=T(m.current),k=!d&&m.current>=f;if(j=d?j%1:Math.min(j,1),x)if(x.target.getPoint(j,z),h){let Y=d?h.length:h.length-1,q=Math.min(j,1)*Y,ue=Math.min(Math.floor(q),Y-1),Ee=(ue+1)%h.length,be=j>=1?1:q-ue,Ce=be*be*(3-2*be),De=h[ue],ze=h[Ee],se=ze.azimuth+Math.round((De.azimuth-ze.azimuth)/(Math.PI*2))*Math.PI*2,Lt=De.azimuth+(se-De.azimuth)*Ce,Xe=De.polar+(ze.polar-De.polar)*Ce,Ge=De.distance+(ze.distance-De.distance)*Ce;E.set(Math.max(Ge,1e-6),Math.min(Math.max(Xe,1e-6),Math.PI-1e-6),Lt),P.setFromSpherical(E).add(z)}else x.position.getPoint(j,P);else{let Y=v.current;if(!Y)return;let q=j*Math.PI*2,ue=Y.radius*2.2;P.set(Y.center.x+Math.cos(q)*ue,Y.center.y+Y.radius*.6,Y.center.z+Math.sin(q)*ue),z.copy(Y.center)}let B=Math.min(S.current/b1,1);if(B<1){let Y=B*B*(3-2*B);P.lerpVectors(M.current,P,Y),z.lerpVectors(C.current,z,Y)}if(X.setLookAt(P.x,P.y,P.z,z.x,z.y,z.z,!1),k){L.current=!1,_.current=!0,m.current=0,b.current=0,a?.();return}c()}),null}var ic=require("react");var v1="ri:license-grant:v1",x1={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},fg=new Map;function bg(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function gg(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return bg(t.padEnd(Math.ceil(t.length/4)*4,"="))}function y1(e){if(!e||typeof e!="object")return!1;let t=e;return t.version===1&&typeof t.licenseKeyHash=="string"&&typeof t.domain=="string"&&(t.environment==="development"||t.environment==="production")&&typeof t.tier=="string"&&t.tier.length>0&&typeof t.issuedAt=="number"&&Number.isInteger(t.issuedAt)&&typeof t.expiresAt=="number"&&Number.isInteger(t.expiresAt)}async function rc(e){let t=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e.trim())),n=String.fromCharCode(...new Uint8Array(t));return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Cu(e,t){return`${v1}:${t}:${e}`}function w1(e,t){let n=fg.get(e);if(n)return n;let i=crypto.subtle.importKey("spki",bg(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return fg.set(e,i),i}async function Tu(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[i,r,a,o,...s]=e.split("."),c=x1[r];if(i!=="ri1"||!c||!a||!o||s.length>0)return null;let l=JSON.parse(new TextDecoder().decode(gg(a)));if(!y1(l)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await w1(r,c),gg(o),new TextEncoder().encode(`${i}.${r}.${a}`)))return null;let d=Math.floor(Date.now()/1e3),p=l.expiresAt-l.issuedAt;return l.licenseKeyHash!==t||l.domain!==n||l.expiresAt<=d||l.issuedAt>d+300||p<=0||p>43200?null:{environment:l.environment,tier:l.tier,expiresAt:l.expiresAt}}catch{return null}}async function vg(e,t,n){try{return await Tu(e,await rc(t),n)}catch{return null}}async function xg(e,t,n){try{let i=await rc(t);return await Tu(e,i,n)?(localStorage.setItem(Cu(i,n),e),!0):!1}catch{return!1}}async function yg(e,t){try{let n=await rc(e),i=Cu(n,t),r=localStorage.getItem(i);if(!r)return null;let a=await Tu(r,n,t);return a||localStorage.removeItem(i),a}catch{return null}}async function Pu(e,t){try{let n=await rc(e);localStorage.removeItem(Cu(n,t))}catch{}}var _1=["localhost","127.0.0.1","0.0.0.0"],S1=e=>_1.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),_g="https://react-immersive.liveroom.dev/api/validate-license",M1=()=>typeof window<"u",C1=300*1e3,T1=5e3,P1=400,Eu=new Map,Au=new Map,ki=class extends Error{},Sg=async(e,t,n)=>{let i=await yg(e,t);return i?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:i.environment,tier:i.tier,isLocalDomain:n}):null},wg=async(e,t,n)=>{let i=await Sg(e,t,n);return i||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:n})},A1=e=>e instanceof ki||e instanceof TypeError,E1=()=>new Promise(e=>setTimeout(e,P1)),R1=e=>e==="development"||e==="production",L1=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&&!R1(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},k1=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},B1=(e,t,n)=>`${n}::${e}::${t}`,D1=e=>{let t=Eu.get(e);return t?Date.now()-t.timestamp>C1?(Eu.delete(e),null):t.result:null},N1=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),O1=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function I1(e,t,n,i){let r=B1(e,t,i),a=D1(r);if(a)return a;let o=Au.get(r);if(o)return o;let s=(async()=>{for(let c=0;c<2;c+=1)try{return await z1(e,t,n,r,i)}catch(l){if(!A1(l))throw l;if(c===0){let u=await Sg(e,t,n);if(u)return u;await E1();continue}return wg(e,t,n)}return wg(e,t,n)})().finally(()=>{Au.delete(r)});return Au.set(r,s),s}async function z1(e,t,n,i,r){let a=new AbortController,o=setTimeout(()=>a.abort(),T1),s;try{s=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:a.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(u){throw a.signal.aborted?new ki("License validation timed out"):u}finally{clearTimeout(o)}let c;try{c=await s.json()}catch{throw new ki(`License server returned a non-JSON response${s.status?` (${s.status})`:""}`)}if(!s.ok){if(s.status===429||s.status>=500)throw new ki(`License server error (${s.status})`);let u=k1(c)??`License validation failed${s.status?` (${s.status})`:""}`;return await Pu(e,t),O1(u,n)}if(!L1(c))throw new ki("License server returned an unexpected payload");let l=N1(c,n);if(l.status==="valid"&&r!==_g){let u=c.offlineGrant?await vg(c.offlineGrant,e,t):null;if(!u)throw new ki("License validation endpoint did not return a verifiable signed grant");l={...l,environment:u.environment,tier:u.tier}}return l.status==="valid"?(Eu.set(i,{result:l,timestamp:Date.now()}),c.offlineGrant&&(await xg(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await Pu(e,t),l}var ac=(e,t=_g)=>{let[n,i]=(0,ic.useState)({status:"checking",isLocalDomain:!1});return(0,ic.useEffect)(()=>{if(!M1())return;let r=!1,a=u=>{r||i(u)},o=e.trim(),s=window.location.hostname.toLowerCase(),c=S1(s);return a({status:"checking",isLocalDomain:c}),o?((async()=>{try{a(await I1(o,s,c,t))}catch(u){let d=u instanceof TypeError?"Could not reach license server":u instanceof Error?u.message:"License validation failed";a({status:"invalid",reason:d,isLocalDomain:c})}})(),()=>{r=!0}):(a({status:"invalid",reason:"No license key provided",isLocalDomain:c}),()=>{r=!0})},[e,t]),n};var nn=require("react");var Rn=require("react/jsx-runtime"),U1={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},V1={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"},oc=({direction:e})=>{let t=U1[e],n=V1[e];return(0,Rn.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,Rn.jsx)("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),(0,Rn.jsx)("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},mi=16,F1={"bottom-left":{bottom:mi,left:mi,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:mi,right:mi,top:"auto",left:"auto",transform:"none"},"top-left":{top:mi,left:mi,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:mi,right:mi,bottom:"auto",left:"auto",transform:"none"},center:{top:"50%",left:"50%",bottom:"auto",right:"auto",transform:"translate(-50%, -50%)"},"center-bottom":{bottom:-10,left:"50%",top:"auto",right:"auto",transform:"translateX(-50%)"},"center-top":{top:mi,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},j1=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:i=.001,rotateSensitivity:r=.01,position:a="center-bottom"})=>{let o=(0,nn.useRef)(null),[s,c]=(0,nn.useState)({x:0,y:0}),l=(0,nn.useRef)(!1),u=(0,nn.useRef)({x:0,y:0}),d=(0,nn.useRef)(),p=(0,nn.useRef)(),f=(0,nn.useRef)(null),g=(0,nn.useRef)(0),y=()=>e.current,T=(E,V,A)=>{let X=Math.hypot(E,V);if(X>A){let j=A/X;return{x:E*j,y:V*j}}return{x:E,y:V}},x=E=>{let A=Math.abs(E);return A<.12?0:Math.sign(E)*((A-.12)/(1-.12))},h=(0,nn.useCallback)(()=>{let E=()=>{let{x:V,y:A}=u.current,X=x(V),j=x(A);if(t&&(X!==0||j!==0)){let k=y();k&&k.rotate(-X*r,-j*r,!0)}d.current=requestAnimationFrame(E)};d.current=requestAnimationFrame(E)},[t,r]),m=(0,nn.useCallback)(()=>{d.current&&cancelAnimationFrame(d.current)},[]),S=(0,nn.useCallback)((E,V)=>{if(!o.current||!l.current)return;let A=o.current.getBoundingClientRect(),X=A.left+A.width/2,j=A.top+A.height/2,k=A.width/2-18,B=E-X,Y=V-j,q=T(B,Y,k);c(q),u.current={x:q.x/k,y:q.y/k}},[]),M=(0,nn.useCallback)(E=>{if(!t)return;E.preventDefault(),E.stopPropagation(),l.current=!0,h();let V="touches"in E?E.touches[0]:E;S(V.clientX,V.clientY)},[t,h,S]),C=(0,nn.useCallback)(E=>{if(!l.current)return;E.preventDefault();let V="touches"in E?E.touches[0]:E;S(V.clientX,V.clientY)},[S]),L=(0,nn.useCallback)(()=>{l.current=!1,c({x:0,y:0}),u.current={x:0,y:0},m()},[m]),b=i*10,_=(0,nn.useCallback)(E=>{t&&y()?.forward(E*b,!0)},[t,b]),v=(0,nn.useCallback)(E=>{t&&y()?.truck(E*b,0,!0)},[t,b]),P=(0,nn.useCallback)((E,V,A)=>{if(!t)return;p.current&&cancelAnimationFrame(p.current),f.current={control:E,amount:V,action:A},g.current=0,A(V);let X=j=>{if(!f.current)return;if(g.current===0){g.current=j,p.current=requestAnimationFrame(X);return}if(j-g.current>200){let{amount:B,action:Y}=f.current;Y(B),g.current=j}p.current=requestAnimationFrame(X)};p.current=requestAnimationFrame(X)},[t]),z=(0,nn.useCallback)(E=>{f.current?.control===E&&(p.current&&(cancelAnimationFrame(p.current),p.current=void 0),f.current=null,g.current=0)},[]);return(0,nn.useEffect)(()=>(window.addEventListener("mousemove",C),window.addEventListener("mouseup",L),window.addEventListener("touchmove",C,{passive:!1}),window.addEventListener("touchend",L),window.addEventListener("touchcancel",L),()=>{window.removeEventListener("mousemove",C),window.removeEventListener("mouseup",L),window.removeEventListener("touchmove",C),window.removeEventListener("touchend",L),window.removeEventListener("touchcancel",L),m(),p.current&&cancelAnimationFrame(p.current)}),[C,L,m]),t?(0,Rn.jsx)("div",{className:"mc__wrapper",style:{opacity:n,...F1[a]},children:(0,Rn.jsxs)("div",{className:"mc__dpad",children:[(0,Rn.jsx)("button",{"aria-label":"Move forward",className:"mc__arrow mc__arrow--up",onMouseDown:()=>P("up",1,_),onMouseUp:()=>z("up"),onMouseLeave:()=>z("up"),onTouchStart:E=>{E.preventDefault(),P("up",1,_)},onTouchEnd:()=>z("up"),onTouchCancel:()=>z("up"),children:(0,Rn.jsx)(oc,{direction:"up"})}),(0,Rn.jsxs)("div",{className:"mc__middle-row",children:[(0,Rn.jsx)("button",{"aria-label":"Move left",className:"mc__arrow mc__arrow--left",onMouseDown:()=>P("left",-1,v),onMouseUp:()=>z("left"),onMouseLeave:()=>z("left"),onTouchStart:E=>{E.preventDefault(),P("left",-1,v)},onTouchEnd:()=>z("left"),onTouchCancel:()=>z("left"),children:(0,Rn.jsx)(oc,{direction:"left"})}),(0,Rn.jsx)("div",{ref:o,className:"mc__joystick",onMouseDown:M,onTouchStart:M,children:(0,Rn.jsx)("div",{className:"mc__knob",style:{transform:`translate(${s.x}px, ${s.y}px)`}})}),(0,Rn.jsx)("button",{"aria-label":"Move right",className:"mc__arrow mc__arrow--right",onMouseDown:()=>P("right",1,v),onMouseUp:()=>z("right"),onMouseLeave:()=>z("right"),onTouchStart:E=>{E.preventDefault(),P("right",1,v)},onTouchEnd:()=>z("right"),onTouchCancel:()=>z("right"),children:(0,Rn.jsx)(oc,{direction:"right"})})]}),(0,Rn.jsx)("button",{"aria-label":"Move backward",className:"mc__arrow mc__arrow--down",onMouseDown:()=>P("down",-1,_),onMouseUp:()=>z("down"),onMouseLeave:()=>z("down"),onTouchStart:E=>{E.preventDefault(),P("down",-1,_)},onTouchEnd:()=>z("down"),onTouchCancel:()=>z("down"),children:(0,Rn.jsx)(oc,{direction:"down"})})]})}):null},Mg=j1;var Cg=require("react-colorful"),Bi=require("react/jsx-runtime"),Ru=({colorPicker:e,onClose:t,itemMaterials:n,setItemMaterials:i,inline:r=!1})=>(0,Bi.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:a=>a.stopPropagation(),children:[(0,Bi.jsx)("p",{className:"ri-popoverLabel",children:"Color"}),(0,Bi.jsx)(Cg.HexColorPicker,{color:n[e.objectId]?.hex??"#ffffff",onChange:a=>i(o=>({...o,[e.objectId]:{...o[e.objectId],hex:a}}))}),(0,Bi.jsxs)("div",{className:"ri-inlineRow",children:[(0,Bi.jsx)("span",{className:"ri-colorCode",children:n[e.objectId]?.hex??"#ffffff"}),(0,Bi.jsx)("button",{className:"ri-secondaryButton",onClick:t,children:"Done"})]})]});var Gn=require("react/jsx-runtime"),Lu=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:i,inline:r=!1})=>(0,Gn.jsxs)("div",{className:`ri-popover${r?" ri-popover--inline":""}`,style:r?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:a=>a.stopPropagation(),children:[(0,Gn.jsx)("div",{className:"ri-popoverHeader",children:(0,Gn.jsx)("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:"Material"})}),(0,Gn.jsxs)("div",{className:"ri-materialBody",children:[t?(0,Gn.jsx)("div",{className:"ri-previewFrame",children:(0,Gn.jsx)("img",{src:t,alt:"texture preview",className:"ri-previewImage"})}):(0,Gn.jsxs)("div",{className:"ri-emptyState",children:[(0,Gn.jsx)("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:(0,Gn.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,Gn.jsx)("span",{style:{fontSize:12},children:"No texture applied"})]}),(0,Gn.jsx)("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:t?"Replace image":"Upload image"}),t&&(0,Gn.jsx)("button",{onClick:()=>i(e.objectId),className:"ri-removeButton",children:"Remove texture"}),(0,Gn.jsx)("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"})]})]});var br=require("react");var xt=require("react/jsx-runtime");function Tg({entries:e}){return(0,xt.jsx)(xt.Fragment,{children:e.map(([t,n])=>{let i=n!==null&&typeof n=="object",r=i?Object.entries(n):[];return i&&r.length>0?(0,xt.jsxs)("div",{className:"left-panel__data-group",children:[(0,xt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,xt.jsx)("div",{className:"left-panel__data-children",children:(0,xt.jsx)(Tg,{entries:r})})]},t):(0,xt.jsxs)("div",{className:"left-panel__data-row",children:[(0,xt.jsx)("span",{className:"left-panel__data-key",children:t}),(0,xt.jsx)("span",{className:`left-panel__data-value left-panel__data-value--${typeof n}`,children:i?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function H1({content:e}){let t=e!=null,[n,i]=(0,br.useState)(t),[r,a]=(0,br.useState)(t),o=(0,br.useRef)(e);return t&&(o.current=e),(0,br.useEffect)(()=>{if(t){i(!0);return}if(n){a(!1);let s=setTimeout(()=>i(!1),300);return()=>clearTimeout(s)}},[t,n]),(0,br.useEffect)(()=>{if(n&&t){let s=requestAnimationFrame(()=>a(!0));return()=>cancelAnimationFrame(s)}},[n,t]),n?(0,xt.jsx)("div",{className:`left-panel__action-extra${r?" left-panel__action-extra--open":""}`,children:(0,xt.jsx)("div",{className:"left-panel__action-extra-inner",children:e??o.current})}):null}function ku({isOpen:e,selectedObject:t,currentAction:n,onClose:i,onAction:r,renderActionExtra:a}){let[o,s]=(0,br.useState)(t);(0,br.useEffect)(()=>{t&&s(t)},[t]);let c=t??o,l=c?Object.entries(c).filter(([u])=>u!=="actions"):[];return(0,xt.jsx)("div",{className:`left-panel ${e?"left-panel--open":"left-panel--closed"}`,children:c&&(0,xt.jsxs)(xt.Fragment,{children:[(0,xt.jsxs)("div",{className:"left-panel__header",children:[(0,xt.jsx)("p",{className:"left-panel__title",children:c.label}),(0,xt.jsx)("button",{onClick:i,className:"left-panel__close-btn","aria-label":"Close panel",children:"\u2715"})]}),l.length>0&&(0,xt.jsx)("div",{className:"left-panel__data",children:(0,xt.jsx)(Tg,{entries:l})}),(0,xt.jsx)("hr",{className:"left-panel__divider"}),c.actions&&c.actions.length>0&&(0,xt.jsxs)(xt.Fragment,{children:[(0,xt.jsx)("div",{className:"left-panel__actions-label",children:"Actions"}),(0,xt.jsx)("div",{className:"left-panel__actions-list",children:c.actions.map((u,d)=>{let p=n?.action.id===u.id&&(n.binding===c||n.binding?.id===c.id||n.binding?.modelObjectId===c.modelObjectId||n.objectId===c.id||n.objectId===c.modelObjectId),f=a?.(u.id);return(0,xt.jsxs)(br.Fragment,{children:[(0,xt.jsx)("button",{onClick:g=>r({objectId:c.modelObjectId||c.id||"",action:u,binding:c,screenX:g.clientX,screenY:g.clientY}),className:["left-panel__action-btn",`left-panel__action-btn--${u.id}`,p?"left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":u.id,"data-label":u.label,children:u.label}),(0,xt.jsx)(H1,{content:f})]},d)})})]})]})})}var ys=require("react"),Eg=require("lucide-react");var Pg=require("react");var zn=require("react/jsx-runtime");function Ag({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:i,searchValue:r,onSearchChange:a,searchPlaceholder:o,children:s,isOpen:c,onToggle:l,openButtonIcon:u,closeButtonIcon:d,closeButtonAriaLabel:p}){let[f,g]=(0,Pg.useState)(!1),y=c!==void 0?c:f,T=x=>{c===void 0&&g(x),l?.(x)};return(0,zn.jsxs)("div",{className:`ri-sidepanel-wrap ${y?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!y&&(0,zn.jsxs)("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>T(!0),"aria-label":t,title:"Open panel",children:[u,e?(0,zn.jsx)("span",{children:e}):null]}),(0,zn.jsxs)("div",{className:`ri-sidepanel ${y?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!y,children:[(0,zn.jsxs)("div",{className:"ri-sidepanel__header",children:[(0,zn.jsxs)("div",{className:"ri-sidepanel__header-top",children:[(0,zn.jsx)("span",{className:"ri-sidepanel__eyebrow",children:n}),(0,zn.jsx)("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>T(!1),"aria-label":p,title:"Close",children:d??(0,zn.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:(0,zn.jsx)("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),(0,zn.jsx)("p",{className:"ri-sidepanel__title",children:i})]}),(0,zn.jsx)("div",{className:"ri-sidepanel__search-wrap",children:(0,zn.jsx)("input",{className:"ri-sidepanel__search",type:"text",placeholder:o,value:r,onChange:x=>a(x.target.value)})}),(0,zn.jsx)("div",{className:"ri-sidepanel__list",children:s})]})]})}var Kr=require("react/jsx-runtime");function Bu({objectBindings:e,onAction:t,onFocus:n,onHover:i,isOpen:r,onToggle:a}){let[o,s]=(0,ys.useState)(null),[c,l]=(0,ys.useState)(""),u=(0,ys.useMemo)(()=>Object.entries(e).filter(([d,p])=>{let f=c.toLowerCase();return d.toLowerCase().includes(f)||(p.label??"").toLowerCase().includes(f)}),[e,c]);return(0,Kr.jsx)(Ag,{openButtonLabel:"",openButtonAriaLabel:"Open scene objects panel",openButtonIcon:(0,Kr.jsx)(Eg.Boxes,{width:16,height:16,"aria-hidden":"true"}),eyebrow:"SCENE OBJECTS",title:`${u.length} visible entries`,searchValue:c,onSearchChange:l,searchPlaceholder:"Search nodes, labels",isOpen:r,onToggle:a,closeButtonAriaLabel:"Close scene objects panel",children:u.map(([d,p])=>{let f=p.visible!==!1,g=o===d;return(0,Kr.jsxs)("div",{onClick:()=>n(p),onMouseEnter:()=>{s(d),i?.(p)},onMouseLeave:()=>{s(null),i?.(null)},className:`ri-sidepanel__row${g?" ri-sidepanel__row--hovered":""}`,children:[(0,Kr.jsx)("span",{className:`ri-sidepanel__label${g?" ri-sidepanel__label--hovered":""}`,children:p.label??d}),(0,Kr.jsx)("button",{type:"button",onClick:y=>{y.stopPropagation(),t?.({objectId:d,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:p})},className:"ri-sidepanel__vis-btn",title:f?"Hide":"Show",children:(0,Kr.jsx)("span",{className:`ri-sidepanel__checkbox${f?" ri-sidepanel__checkbox--checked":""}`,children:f&&(0,Kr.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:(0,Kr.jsx)("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},d)})})}var Le=require("lucide-react");var sc=require("react"),Du=(0,sc.createContext)({isInsideEditor:!1,activeTab:"object",activeSubTab:"General",tier:"free"});var vr=()=>(0,sc.useContext)(Du);var ws=require("react/jsx-runtime");function ro({visible:e,message:t,tone:n="default",spinner:i=!0}){return e?(0,ws.jsxs)("div",{className:"bb-loadingOverlay",role:"status","aria-live":"polite",children:[i&&(0,ws.jsx)("span",{className:"bb-loadingSpinner","aria-hidden":"true"}),(0,ws.jsx)("span",{className:`bb-loadingMessage bb-status--${n}`,children:t})]}):null}var Nu=new WeakSet;function io(e){Nu.add(e)}function Rg(e){let t=Nu.has(e);return t&&Nu.delete(e),t}var Ie=require("react"),pc=require("@react-three/fiber"),hc=require("@react-three/drei"),lt=require("three");var Lg="data:image/png;base64,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";var kg="data:image/png;base64,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";var Bg="data:image/png;base64,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";var Me=require("react/jsx-runtime"),ao=-100,oo=100,jg=.03,q1=.03,Y1=.03,Dg=.5,$1=Lg,K1=kg,Z1=Bg,J1=Math.PI/4,Ng=.4,lo=64,Og=jg*3,Ou="#4d7dff",Ig="#ffcc00",zg=.02,Hg=new lt.Vector3(0,1,0),lc=32,Ug="#ff9d3d",cc=4,Zr=1.4,dc=.35,Q1=.13,Vg=.12,Fg=.055,ew={x:"#ff4444",y:"#44ff44",z:"#4444ff"};function Gg(e){return new lt.Vector3(e==="x"?1:0,e==="y"?1:0,e==="z"?1:0)}function tw(e,t){let n=Gg(e);t.lengthSq()<1e-8&&(t=n.clone());let i=new lt.Vector3().crossVectors(n,new lt.Vector3().crossVectors(t,n));if(i.lengthSq()<1e-8){let r=Math.abs(n.y)<.9?Hg:new lt.Vector3(1,0,0);i=new lt.Vector3().crossVectors(n,r)}return i.normalize()}function Iu(e){let t=new Float32Array((lo+1)*3);for(let n=0;n<=lo;n++){let i=n/lo*Math.PI*2,r=Math.cos(i)*Ng,a=Math.sin(i)*Ng,o=0,s=0,c=0;e==="x"?(s=r,c=a):e==="y"?(o=r,c=a):(o=r,s=a),t[n*3]=o,t[n*3+1]=s,t[n*3+2]=c}return t}function nw(e){let t=Math.abs(e.y)<.99?new lt.Vector3(0,1,0):new lt.Vector3(1,0,0),n=new lt.Vector3().crossVectors(e,t).normalize(),i=new lt.Vector3().crossVectors(e,n).normalize();return[n,i]}function so(e,t,n){return Math.min(Math.max(e,t),n)}var co=null,zu=new Set;function _s(e){co!==e&&(co=e,zu.forEach(t=>t()))}function Uu(e){return zu.add(e),()=>zu.delete(e)}function uc(){return co}function Wg({light:e,position:t,color:n,intensity:i,visible:r,onPositionChange:a,onDraggingChange:o}){let{activeTab:s,activeSubTab:c,setActiveTab:l,setActiveSubTab:u}=vr(),{camera:d,gl:p,raycaster:f,invalidate:g}=(0,pc.useThree)(),y=(0,Ie.useRef)(null),T=(0,Ie.useRef)(null),x=(0,Ie.useRef)(null),h=(0,Ie.useRef)(null),m=(0,Ie.useRef)(null),S=(0,Ie.useRef)(null),M=(0,Ie.useRef)(null),C=(0,Ie.useRef)(null),L=(0,Ie.useRef)(null),b=(0,Ie.useRef)(null),_=(0,Ie.useRef)(null),v=(0,Ie.useRef)(null),P=(0,Ie.useRef)(null),z=(0,Ie.useRef)(null),E=(0,Ie.useRef)(null),V=(0,Ie.useRef)(null),A=(0,Ie.useRef)(null),X=(0,Ie.useRef)({dragging:!1,axis:null}),j=(0,Ie.useRef)(new lt.Plane),k=(0,Ie.useRef)(new lt.Vector3),B=(0,Ie.useRef)(null),Y=(0,Ie.useRef)(null),q=(0,Ie.useRef)(new lt.Vector3),ue=(0,Ie.useRef)(!1),Ee=(0,Ie.useRef)(new lt.Plane),be=(0,Ie.useRef)(o);(0,Ie.useEffect)(()=>{be.current=o},[o]);let Ce=(0,Ie.useMemo)(()=>new lt.Vector3(t[0],t[1],t[2]),[t]),De=(0,Ie.useMemo)(()=>new Float32Array(6),[]),ze=(0,Ie.useMemo)(()=>new Float32Array(6),[]),se=(0,Ie.useMemo)(()=>Iu("x"),[]),Lt=(0,Ie.useMemo)(()=>Iu("y"),[]),Xe=(0,Ie.useMemo)(()=>Iu("z"),[]),Ge=(0,Ie.useMemo)(()=>new Float32Array((lc+1)*3),[]),$e=(0,Ie.useMemo)(()=>new Float32Array(cc*2*3),[]),rt=e?.type==="point",it=e?.type==="spot",en=rt?K1:it?Z1:$1,qe=rt?q1:it?Y1:jg,on=(0,Ie.useMemo)(()=>new lt.TextureLoader().load(en),[en]),Gt=(0,Ie.useSyncExternalStore)(Uu,uc,uc),Ke=!!e&&Gt===e.id;if((0,Ie.useEffect)(()=>{ue.current||(q.current.copy(Ce),g())},[Ce,g]),(0,Ie.useEffect)(()=>{e&&co===e.id&&!r&&_s(null)},[e?.id,r]),(0,Ie.useEffect)(()=>()=>{e&&co===e.id&&_s(null)},[e?.id]),(0,pc.useFrame)(()=>{if(y.current&&y.current.position.copy(q.current),x.current){x.current.lookAt(d.position);let J=d,ee;J.isOrthographicCamera?ee=qe/J.zoom:ee=d.position.distanceTo(q.current)*qe,x.current.scale.setScalar(ee)}if(M.current){let J=d,ee;J.isOrthographicCamera?ee=Og/J.zoom:ee=d.position.distanceTo(q.current)*Og,M.current.scale.setScalar(ee)}if(_.current){let J=d,ee;J.isOrthographicCamera?ee=Fg/J.zoom:ee=d.position.distanceTo(q.current)*Fg,_.current.scale.setScalar(ee)}if(m.current){let J=m.current.getAttribute("position"),ee=J.array;ee[0]=0,ee[1]=0,ee[2]=0,ee[3]=q.current.x,ee[4]=q.current.y,ee[5]=q.current.z,J.needsUpdate=!0,m.current.computeBoundingSphere()}if(S.current){let J=q.current,ee=J.length();S.current.visible=ee>Dg,ee>1e-6&&(S.current.position.copy(J).multiplyScalar(.5),S.current.scale.set(1,ee,1),S.current.quaternion.setFromUnitVectors(Hg,J.clone().normalize()))}if(h.current&&(h.current.visible=q.current.length()>Dg),it&&C.current&&L.current&&b.current){let J=q.current,ee=J.length();if(ee>1e-6){C.current.visible=!0;let Ve=J.clone().negate().normalize(),tt=ee,Fe=e?.angle??Math.PI/6,xe=tt*Math.tan(Fe),ot=J.clone().add(Ve.clone().multiplyScalar(tt)),[gt,At]=nw(Ve),Kn=L.current.getAttribute("position"),Ln=Kn.array;for(let _t=0;_t<=lc;_t++){let We=_t/lc*Math.PI*2,Wt=ot.x+(gt.x*Math.cos(We)+At.x*Math.sin(We))*xe,Bt=ot.y+(gt.y*Math.cos(We)+At.y*Math.sin(We))*xe,Xt=ot.z+(gt.z*Math.cos(We)+At.z*Math.sin(We))*xe;Ln[_t*3]=Wt,Ln[_t*3+1]=Bt,Ln[_t*3+2]=Xt}Kn.needsUpdate=!0,L.current.computeBoundingSphere();let Ne=b.current.getAttribute("position"),dt=Ne.array;for(let _t=0;_t<cc;_t++){let We=_t/cc*Math.PI*2,Wt=ot.x+(gt.x*Math.cos(We)+At.x*Math.sin(We))*xe,Bt=ot.y+(gt.y*Math.cos(We)+At.y*Math.sin(We))*xe,Xt=ot.z+(gt.z*Math.cos(We)+At.z*Math.sin(We))*xe,tn=_t*6;dt[tn]=J.x,dt[tn+1]=J.y,dt[tn+2]=J.z,dt[tn+3]=Wt,dt[tn+4]=Bt,dt[tn+5]=Xt}Ne.needsUpdate=!0,b.current.computeBoundingSphere()}else C.current.visible=!1}if(B.current&&(B.current.visible=X.current.dragging),Y.current&&X.current.dragging){let J=Y.current.getAttribute("position"),ee=J.array;ee[0]=k.current.x,ee[1]=k.current.y,ee[2]=k.current.z,ee[3]=q.current.x,ee[4]=q.current.y,ee[5]=q.current.z,J.needsUpdate=!0,Y.current.computeBoundingSphere()}}),(0,Ie.useEffect)(()=>{let J=Ne=>{let dt=p.domElement.getBoundingClientRect();return new lt.Vector2((Ne.clientX-dt.left)/dt.width*2-1,-((Ne.clientY-dt.top)/dt.height)*2+1)},ee=Ne=>!!Ne.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Ve=()=>{let Ne=[];return[v.current,E.current,P.current,V.current,z.current,A.current].forEach(dt=>{dt&&Ne.push(dt)}),Ne},tt=Ne=>Ne===v.current||Ne===E.current?"x":Ne===P.current||Ne===V.current?"y":Ne===z.current||Ne===A.current?"z":null,Fe=()=>{X.current.dragging&&(X.current={dragging:!1,axis:null},B.current&&(B.current.visible=!1),p.domElement.style.cursor="default",be.current?.(!1))},xe=()=>{ue.current&&(ue.current=!1,p.domElement.style.cursor="default",be.current?.(!1))},ot=Ne=>{if(X.current.dragging&&X.current.axis){let Bt=X.current.axis,Xt=q.current,tn=Gg(Bt),Mr=new lt.Vector3().subVectors(d.position,Xt),we=tw(Bt,Mr);j.current.setFromNormalAndCoplanarPoint(we,Xt);let R=J(Ne);f.setFromCamera(R,d);let I=new lt.Vector3,$=f.ray.intersectPlane(j.current,I);if(!$)return;let te=$.clone().sub(Xt).dot(tn),he=Xt.clone().add(tn.clone().multiplyScalar(te)),pe=[so(Bt==="x"?he.x:Xt.x,ao,oo),so(Bt==="y"?he.y:Xt.y,ao,oo),so(Bt==="z"?he.z:Xt.z,ao,oo)];q.current.set(pe[0],pe[1],pe[2]),a?.(pe),g();return}if(!ue.current)return;let dt=J(Ne);f.setFromCamera(dt,d);let _t=new lt.Vector3,We=f.ray.intersectPlane(Ee.current,_t);if(!We)return;let Wt=[so(We.x,ao,oo),so(We.y,ao,oo),so(We.z,ao,oo)];q.current.set(Wt[0],Wt[1],Wt[2]),a?.(Wt),g()},gt=Ne=>{if(ee(Ne))return;let dt=J(Ne);if(f.setFromCamera(dt,d),Ke){let Wt=Ve(),Bt=Wt.length?f.intersectObjects(Wt,!1):[];if(Bt.length>0){let Xt=Bt[0].object,tn=tt(Xt);if(tn){let Mr=q.current;X.current={dragging:!0,axis:tn},k.current.copy(Mr),be.current?.(!0),p.domElement.style.cursor="grabbing",p.domElement.setPointerCapture(Ne.pointerId),Ne.preventDefault(),Ne.stopPropagation();return}}}let _t=[];if(T.current&&_t.push(T.current),x.current&&_t.push(x.current),_t.length===0)return;if(f.intersectObjects(_t,!1).length>0){let Wt=e?.id??null;co!==Wt&&(_s(Wt),l?.("scene"),u?.("Lighting"));let Bt=new lt.Vector3;d.getWorldDirection(Bt),Ee.current.setFromNormalAndCoplanarPoint(Bt,q.current),ue.current=!0,be.current?.(!0),p.domElement.style.cursor="grabbing",p.domElement.setPointerCapture(Ne.pointerId),Ne.preventDefault(),Ne.stopPropagation()}},At=Ne=>{if(X.current.dragging){Fe();try{p.domElement.releasePointerCapture(Ne.pointerId)}catch{}}if(ue.current){xe();try{p.domElement.releasePointerCapture(Ne.pointerId)}catch{}}},Kn=()=>{Fe(),xe()},Ln=()=>{Fe(),xe()};return p.domElement.addEventListener("pointerdown",gt),window.addEventListener("pointermove",ot),window.addEventListener("pointerup",At),window.addEventListener("pointercancel",Kn),window.addEventListener("blur",Ln),()=>{p.domElement.removeEventListener("pointerdown",gt),window.removeEventListener("pointermove",ot),window.removeEventListener("pointerup",At),window.removeEventListener("pointercancel",Kn),window.removeEventListener("blur",Ln)}},[d,f,p,g,a,e,l,u,Ke]),s!=="scene"||c!=="Lighting"||!e||!r||e.type==="none"||e.type==="hemisphere")return null;let le=["x","y","z"];return(0,Me.jsxs)("group",{ref:J=>{J&&ah(J)},children:[(0,Me.jsxs)("group",{ref:y,children:[(0,Me.jsx)("sprite",{ref:x,children:(0,Me.jsx)("spriteMaterial",{map:on,transparent:!0,opacity:.9,blending:lt.AdditiveBlending,depthWrite:!1,rotation:it?J1:0},en)}),(0,Me.jsx)(hc.Sphere,{ref:T,args:[.25,16,16],children:(0,Me.jsx)("meshBasicMaterial",{transparent:!0,opacity:.01})}),rt&&(0,Me.jsxs)("group",{ref:M,children:[(0,Me.jsxs)("lineLoop",{renderOrder:999,children:[(0,Me.jsx)("bufferGeometry",{children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[se,3],count:lo+1})}),(0,Me.jsx)("lineBasicMaterial",{color:Ou,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Me.jsxs)("lineLoop",{renderOrder:999,children:[(0,Me.jsx)("bufferGeometry",{children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[Lt,3],count:lo+1})}),(0,Me.jsx)("lineBasicMaterial",{color:Ou,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),(0,Me.jsxs)("lineLoop",{renderOrder:999,children:[(0,Me.jsx)("bufferGeometry",{children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[Xe,3],count:lo+1})}),(0,Me.jsx)("lineBasicMaterial",{color:Ou,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]}),Ke&&(0,Me.jsx)("group",{ref:_,children:le.map(J=>{let ee=ew[J],Ve=new lt.Vector3(J==="x"?Zr:0,J==="y"?Zr:0,J==="z"?Zr:0),tt=new lt.Vector3(J==="x"?Zr-dc/2:0,J==="y"?Zr-dc/2:0,J==="z"?Zr-dc/2:0),Fe=new lt.Vector3(J==="x"?Zr/2:0,J==="y"?Zr/2:0,J==="z"?Zr/2:0),xe=J==="x"?[0,0,-Math.PI/2]:J==="y"?[0,0,0]:[Math.PI/2,0,0],ot=J==="x"?v:J==="y"?P:z,gt=J==="x"?E:J==="y"?V:A;return(0,Me.jsxs)("group",{children:[(0,Me.jsx)(hc.Line,{points:[new lt.Vector3(0,0,0),Ve],color:ee,transparent:!0,opacity:.9,lineWidth:2,depthTest:!1}),(0,Me.jsxs)("mesh",{ref:gt,position:Fe,rotation:xe,children:[(0,Me.jsx)("cylinderGeometry",{args:[Vg,Vg,Zr,8]}),(0,Me.jsx)("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),(0,Me.jsxs)("mesh",{ref:ot,position:tt,rotation:xe,children:[(0,Me.jsx)("coneGeometry",{args:[Q1,dc,8]}),(0,Me.jsx)("meshBasicMaterial",{color:ee,depthTest:!1})]})]},J)})})]}),!rt&&!it&&(0,Me.jsxs)(Me.Fragment,{children:[(0,Me.jsxs)("mesh",{ref:S,children:[(0,Me.jsx)("cylinderGeometry",{args:[zg,zg,1,8,1,!0]}),(0,Me.jsx)("meshBasicMaterial",{color:Ig,transparent:!0,opacity:.05,blending:lt.AdditiveBlending,depthWrite:!1,depthTest:!1})]}),(0,Me.jsxs)("line",{ref:h,children:[(0,Me.jsx)("bufferGeometry",{ref:m,children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[De,3],count:2})}),(0,Me.jsx)("lineBasicMaterial",{color:Ig,transparent:!0,opacity:.7,blending:lt.AdditiveBlending})]})]}),it&&(0,Me.jsxs)("group",{ref:C,children:[(0,Me.jsxs)("lineLoop",{renderOrder:999,children:[(0,Me.jsx)("bufferGeometry",{ref:L,children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[Ge,3],count:lc+1})}),(0,Me.jsx)("lineBasicMaterial",{color:Ug,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),(0,Me.jsxs)("lineSegments",{renderOrder:999,children:[(0,Me.jsx)("bufferGeometry",{ref:b,children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[$e,3],count:cc*2})}),(0,Me.jsx)("lineBasicMaterial",{color:Ug,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),(0,Me.jsxs)("line",{ref:J=>{B.current=J,J&&(J.visible=!1)},children:[(0,Me.jsx)("bufferGeometry",{ref:Y,children:(0,Me.jsx)("bufferAttribute",{attach:"attributes-position",args:[ze,3],count:2})}),(0,Me.jsx)("lineBasicMaterial",{color:"#ffffff",transparent:!0,opacity:.6})]})]})}var It=require("react"),Yg=require("@react-three/drei"),fc=require("@react-three/fiber"),Sn=require("three");var _n=require("three");function mc(e){e.updateWorldMatrix(!0,!0);let t=new _n.Matrix4().copy(e.matrixWorld).invert(),n=new _n.Box3,i=new _n.Box3,r=!1;return e.traverse(a=>{let o=a;if(!o.isMesh||!o.geometry||(o.geometry.boundingBox||o.geometry.computeBoundingBox(),!o.geometry.boundingBox))return;let s=new _n.Matrix4().multiplyMatrices(t,a.matrixWorld);i.copy(o.geometry.boundingBox).applyMatrix4(s),n.union(i),r=!0}),r?n.getCenter(new _n.Vector3):new _n.Vector3}function Xg(e,t="XYZ"){return new _n.Quaternion().setFromEuler(new _n.Euler(e[0],e[1],e[2],t))}function rw(e,t,n,i,r="XYZ"){let o=new _n.Vector3(...i).multiply(new _n.Vector3(...n)).applyQuaternion(Xg(t,r)).add(new _n.Vector3(...e));return[o.x,o.y,o.z]}function qg(e,t,n,i,r,a="XYZ"){let o=new _n.Vector3(...rw(e,t,i,r,a)),s=new _n.Vector3(...r).multiply(new _n.Vector3(...i)).applyQuaternion(Xg(n,a)),c=o.sub(s);return[c.x,c.y,c.z]}var Vu=require("react/jsx-runtime");function Fu({node:e,space:t,onTransformChange:n,onDraggingChange:i}){let r=(0,fc.useThree)(v=>v.invalidate),a=(0,It.useMemo)(()=>mc(e),[e]),o=(0,It.useMemo)(()=>new Sn.Matrix4,[]),s=(0,It.useRef)(!1),c=(0,It.useRef)(new Sn.Matrix4),l=(0,It.useRef)(new Sn.Matrix4),u=(0,It.useRef)(null),d=(0,It.useRef)(0),p=(0,It.useRef)([]),f=(0,It.useRef)(null),g=(0,It.useMemo)(()=>new Sn.Vector3,[]),y=(0,It.useMemo)(()=>new Sn.Quaternion,[]),T=(0,It.useMemo)(()=>new Sn.Vector3,[]),x=(0,It.useMemo)(()=>new Sn.Quaternion,[]),h=(0,It.useMemo)(()=>new Sn.Vector3(1,1,1),[]),m=(0,It.useMemo)(()=>new Sn.Quaternion,[]),S=(0,It.useMemo)(()=>new Sn.Vector3,[]),M=(0,It.useMemo)(()=>new Sn.Vector3,[]),C=(0,It.useRef)([0,0,0]),L=(0,It.useCallback)(()=>{s.current||(e.updateWorldMatrix(!0,!1),g.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(y),x.copy(y),t==="world"&&x.identity(),o.compose(g,x,h))},[g,o,x,h,e,a,t,y]);(0,It.useLayoutEffect)(()=>(L(),()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),i(!1);for(let v of p.current)qa(v);p.current=[]}),[i,L]),(0,fc.useFrame)(()=>L());let b=(0,It.useCallback)(()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),e.updateWorldMatrix(!0,!0),p.current=[];for(let v of Xa(e))Um(v)||(Ml(v,v.matrixWorld),p.current.push(v));e.updateWorldMatrix(!0,!1),g.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(y),e.getWorldScale(T),c.current.compose(g,y,T),l.current.copy(o),C.current=[e.rotation.x,e.rotation.y,e.rotation.z],u.current=null,s.current=!0,i(!0)},[g,o,e,i,a,y,T]),_=(0,It.useCallback)((v,P)=>{let z=c.current.clone().premultiply(P),E=l.current.clone().premultiply(P);z.decompose(S,y,M);let V=S.clone();E.decompose(g,x,h),t==="world"&&x.identity(),o.compose(g,x,h),v.decompose(S,m,M);let A=new Sn.Euler().setFromQuaternion(m,e.rotation.order),[X,j,k]=C.current,B=[X+A.x,j+A.y,k+A.z],Y=new Sn.Quaternion().setFromEuler(new Sn.Euler(B[0],B[1],B[2],e.rotation.order)),ue=(e.parent?.matrixWorld||new Sn.Matrix4).clone().invert(),Ee=V.clone().applyMatrix4(ue),be=a.clone().multiply(e.scale).applyQuaternion(Y),Ce=Ee.clone().sub(be),De=[Ce.x,Ce.y,Ce.z];e.position.set(De[0],De[1],De[2]),e.rotation.set(B[0],B[1],B[2],e.rotation.order),e.updateMatrixWorld(!0),r(),u.current={position:De,rotation:B}},[g,m,o,x,h,r,e,a,S,M,t,y]);return(0,Vu.jsx)("group",{children:(0,Vu.jsx)(Yg.PivotControls,{matrix:o,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,onDragStart:b,onDrag:(v,P,z,E)=>_(P,E),onDragEnd:()=>{s.current=!1;let v=u.current;if(u.current=null,v)n(v),f.current=requestAnimationFrame(()=>{f.current=null,i(!1)});else if(p.current.length>0){for(let P of p.current)qa(P);e.updateMatrixWorld(!0),r(),i(!1)}else i(!1);p.current=[]}})})}var U=require("react/jsx-runtime");function iw(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,i=n.getAttribute("skinIndex"),r=n.getAttribute("skinWeight"),a=n.getAttribute("position");if(!i||!r||!a)return null;let o=t.worldToLocal(e.point.clone()),s=[e.face.a,e.face.b,e.face.c],c=new mt.Vector3,l=s[0],u=1/0;for(let f of s){c.fromBufferAttribute(a,f);let g=c.distanceToSquared(o);g<u&&(u=g,l=f)}let d=i.getComponent(l,0),p=r.getComponent(l,0);for(let f=1;f<4;f++){let g=r.getComponent(l,f);g>p&&(p=g,d=i.getComponent(l,f))}return t.skeleton.bones[d]??null}function aw(e){let t=iw(e)??e.object,n=Ho(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let i=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[i.x,i.y,i.z]}}function ow(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let i=Dr(t,e.anchorNodeName);return i?(i.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(i.matrixWorld),!0):!1}function sw({annotation:e,enabled:t,controlsRef:n,offsetRef:i}){let r=(0,bc.useThree)(p=>p.scene),a=(0,O.useRef)(null),o=(0,O.useRef)(!1),s=(0,O.useMemo)(()=>new mt.Vector3,[]),c=(0,O.useMemo)(()=>new mt.Vector3,[]),l=(0,O.useMemo)(()=>new mt.Vector3,[]),u=e?.anchorNodeName,d=e?.anchorLocalPosition;return(0,O.useEffect)(()=>{a.current=null,o.current=!1},[u,e?.id]),(0,bc.useFrame)(()=>{let p=n.current,f=i.current;if(!t||!p||!f||!u||!d){o.current=!1;return}let g=a.current;if((!g||!g.parent)&&(g=Dr(r,u),a.current=g),!g){o.current=!1;return}g.updateWorldMatrix(!0,!1),s.set(d[0],d[1],d[2]).applyMatrix4(g.matrixWorld),!(o.current&&s.distanceToSquared(c)<1e-8)&&(c.copy(s),o.current=!0,l.copy(s).add(f),p.setLookAt(l.x,l.y,l.z,s.x,s.y,s.z,!0))}),null}function lw(e){let t={total:0,missing:0};return e.traverse(n=>{let i=n;!i.isMesh||!i.geometry||(t.total+=1,i.geometry.getAttribute("uv")||(t.missing+=1))}),t}function cw(e,t){let n=t?.camera;if(!(n instanceof mt.PerspectiveCamera))return null;let r=(e instanceof mt.Box3?e:new mt.Box3().setFromObject(e)).getSize(new mt.Vector3).length();return!Number.isFinite(r)||r<=0?null:(n.near=r/100,n.far=r*100,n.updateProjectionMatrix(),t&&(t.maxDistance=r*10),r)}function dw(e,t){let n=e.camera;if(!(n instanceof mt.PerspectiveCamera)||!(t>0))return;let i=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(i-n.near)<=n.near*.01||(n.near=i,n.updateProjectionMatrix())}async function $g(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function Ss({modelUrl:e,tilesetUrl:t,tilesErrorTarget:n=8,tilesCacheSize:i=800,onObjectCatalog:r,modelFormat:a,licenseKey:o,licenseValidationUrl:s,objectBindings:c,selectedObject:l,panelHoveredObject:u,onObjectBindingsChange:d,onObjectSelect:p,onObjectHover:f,onObjectEditLeaseChange:g,onModelLoaded:y,onLoadError:T,onAction:x,onHiddenObjectsChange:h,onCameraChange:m,onViewerReady:S,onTextureUpload:M,onAnimationsReady:C,onAnnotationsChange:L,activeAnnotation:b,onActiveAnnotationChange:_,lights:v,camera:P,backgroundColor:z,shadows:E=!0,showObjectBindingDataPanel:V=!0,customObjectBindingDataPanel:A,customSceneObjectsPanel:X,showSceneObjectsPanel:j=!0,showDownloadButton:k=!0,downloadFilename:B="model",showResetButton:Y=!0,showLoadingOverlay:q=!0,showMouseController:ue=!1,mouseControllerPosition:Ee="center-bottom",mouseControllerOpacity:be=1,moveSensitivity:Ce=.08,zoomSensitivity:De=1,sceneConfig:ze,onSceneConfigChange:se,disableZoom:Lt=!1,zoomOnSelected:Xe=!0,highlightOnHover:Ge=!0,enableCameraControls:$e=!0,onAutoFit:rt,refitOnResize:it=!0,renderMode:en="demand",maxDpr:qe=2,preserveDrawingBuffer:on=!1,performanceProfile:Gt="auto",dracoDecoderPath:Ke,ktx2TranscoderPath:le,meshopt:J=!0,showMeasureTools:ee=!1,showUvCheckerButton:Ve=!1,showExplodeControls:tt=!1,cinematic:Fe,measurementUnit:xe="m",enableXR:ot=!1,usdzUrl:gt,arScaleMode:At="normalized",mobileHandoffUrl:Kn,showAnnotationNavigation:Ln=!0,showAnnotationOnHover:Ne=!1,moveModeEnabled:dt=!1,objectTransformSpace:_t="world",enableKeyboardNavigation:We=!1,showViewGizmo:Wt=!1}){let{isInsideEditor:Bt,activeTab:Xt,activeSubTab:tn}=vr(),Mr=Bt&&Xt==="scene"&&tn==="Lighting",we=ac(o,s),R=(0,O.useMemo)(()=>ze??Mi,[ze]),[I,$]=(0,O.useState)(null),re=R.model.renderer==="uv-checker",te=Ve?I??re:re,he=(0,O.useMemo)(()=>{let w=te?"uv-checker":re?"pbr":R.model.renderer;return w===R.model.renderer?R:{...R,model:{...R.model,renderer:w}}},[re,R,te]);(0,O.useEffect)(()=>{$(null)},[e,R.model.renderer,Ve,t]);let pe=(0,O.useMemo)(()=>{if(z)return z;let w=R.background;return w.enabled&&w.type==="color"?w.color:"#1c1c1d"},[z,R]),bt=(0,O.useMemo)(()=>({dracoDecoderPath:Ke,ktx2TranscoderPath:le,meshopt:J}),[Ke,le,J]),St=(0,O.useMemo)(()=>xh(Gt),[Gt]),Pe=(0,O.useRef)(null),[Ze,Et]=(0,O.useState)(!1);(0,O.useEffect)(()=>{Pe.current&&(Pe.current.dollySpeed=Math.max(De,0))},[De]),(0,O.useEffect)(()=>{Pe.current&&(Pe.current.enabled=$e&&!Ze)},[$e,Ze]);let Se=(0,O.useRef)(null),Dt=(0,O.useRef)(new Map),pn=(0,O.useRef)(null),Tn=(0,O.useRef)(null),qt=(0,O.useRef)(null),Yt=(0,O.useRef)({});(0,O.useEffect)(()=>()=>{for(let w of Object.values(Yt.current))URL.revokeObjectURL(w)},[]);let ut=(0,O.useRef)({}),[,Fr]=(0,O.useState)(0),Ut=(0,O.useCallback)(()=>{Fr(w=>w+1)},[]),xa=(0,O.useRef)({}),bo=(0,O.useRef)(null),rr=(0,O.useRef)(null),[ni,Yc]=(0,O.useState)(null),$c=(0,O.useCallback)(w=>{rr.current=w,Yc(w)},[]),ya=(0,O.useRef)(new Set),ir=(0,O.useRef)(null);(0,O.useEffect)(()=>{let w=ni;if(!w||!We||!$e||dt)return;let N=new Set(["w","a","s","d"," ","c"]),oe=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),ce=0,ye=ht=>ht.code==="Space"?" ":ht.key.toLowerCase(),Vt=()=>{ya.current.clear(),ce=0,ir.current!==null&&(cancelAnimationFrame(ir.current),ir.current=null)},Ot=ht=>{let xn=Pe.current,vt=ya.current;if(!xn||vt.size===0){ir.current=null,ce=0;return}let Dn=ce?Math.min((ht-ce)/1e3,.05):1/60;ce=ht;let mn=Math.max(xn.distance*.75,.01)*Dn;vt.has("w")&&xn.forward(mn,!1),vt.has("s")&&xn.forward(-mn,!1),vt.has("a")&&xn.truck(-mn,0,!1),vt.has("d")&&xn.truck(mn,0,!1),vt.has(" ")&&xn.truck(0,mn,!1),vt.has("c")&&xn.truck(0,-mn,!1),ir.current=requestAnimationFrame(Ot)},vn=ht=>{if(ht.target!==w){Vt();return}if(oe.has(ht.key)){let vt=Pe.current;if(!vt)return;ht.preventDefault();let Dn=Math.PI/90,mn=Math.max(vt.distance*.05,.01);ht.key==="ArrowUp"?ht.shiftKey?vt.forward(mn,!0):vt.rotate(0,-Dn,!0):ht.key==="ArrowDown"?ht.shiftKey?vt.forward(-mn,!0):vt.rotate(0,Dn,!0):ht.key==="ArrowLeft"?vt.rotate(-Dn,0,!0):vt.rotate(Dn,0,!0);return}let xn=ye(ht);N.has(xn)&&(ht.preventDefault(),ya.current.add(xn),ir.current===null&&(ir.current=requestAnimationFrame(Ot)))},hn=ht=>{ya.current.delete(ye(ht))};return w.addEventListener("keydown",vn),w.addEventListener("keyup",hn),w.addEventListener("blur",Vt),()=>{w.removeEventListener("keydown",vn),w.removeEventListener("keyup",hn),w.removeEventListener("blur",Vt),Vt()}},[ni,$e,We,dt]);let $t=(0,O.useRef)(null),[vo,Cr]=(0,O.useState)(c),[bi,wa]=(0,O.useState)({}),[Os,vi]=(0,O.useState)(null),[Hi,Zn]=(0,O.useState)(null),[Kc,Tr]=(0,O.useState)(null),[xo,Zc]=(0,O.useState)(null),[Jn,_a]=(0,O.useState)(null),[ar,Gi]=(0,O.useState)(null),kn=(0,O.useRef)(null),Sa=(0,O.useRef)(null),yo=(0,O.useRef)(0),Jc=(0,O.useRef)(null),[Is,Qc]=(0,O.useState)(0),jr=(0,O.useRef)(!1),Wi=(0,O.useRef)(!1),wo=(0,O.useRef)(!!P);wo.current=!!P;let or=(0,O.useRef)(null),[_o,Xi]=(0,O.useState)(!!e),[Ma,qi]=(0,O.useState)(!e||!!rt||!!P),[ri,zs]=(0,O.useState)(!1),[ed,So]=(0,O.useState)(!1),[Us,xi]=(0,O.useState)(!1),[Vs,Fs]=(0,O.useState)(!1),[js,td]=(0,O.useState)(null),[nd,Hs]=(0,O.useState)(!1),[Yi,Gs]=(0,O.useState)({total:0,missing:0}),[rd,Mo]=(0,O.useState)("Loading model..."),Pr=(0,O.useRef)({}),$i=(0,O.useCallback)(()=>{let w=Pe.current;if(!w||or.current)return;let N=w.getPosition(new mt.Vector3),oe=w.getTarget(new mt.Vector3);or.current={position:[N.x,N.y,N.z],target:[oe.x,oe.y,oe.z]}},[]),[D,H]=(0,O.useState)(!1),[ie,_e]=(0,O.useState)(0),[Oe,Rt]=(0,O.useState)(!1);(0,O.useEffect)(()=>{_e(0),Rt(!1)},[e,t]);let Mt=(0,O.useMemo)(()=>{let w=R.cinematic,N=w?.enabled?{waypoints:w.waypoints,duration:w.duration,loop:w.loop,autoPlay:w.autoPlay}:null;return Fe===void 0?N&&(N.waypoints?.length??0)>=2?N:null:Fe===!1?null:Fe===!0?N??{}:{...N??{},...Fe}},[Fe,R]),[Je,Bn]=(0,O.useState)(!1),[Fv,Ca]=(0,O.useState)(!1),id=(0,O.useRef)(!1);(0,O.useEffect)(()=>{Bn(!1),Ca(!1),id.current=!1},[e,t]),(0,O.useEffect)(()=>{!Mt?.autoPlay||id.current||ri&&Ma&&!_o&&(id.current=!0,Bn(!0),Ca(!1))},[Mt,ri,Ma,_o]);let{xrStore:Ki,presenterRef:jv,arSupported:ad,vrSupported:wp,quickLookSupported:_p,resolvedMobileHandoffUrl:Ws,isMobileHandoffOpen:Sp,arOverlay:Hv,openMobileHandoff:Gv,closeMobileHandoff:Mp,openQuickLook:Wv,handleARStateChange:Xv}=Mh({enableXR:ot,usdzUrl:gt,mobileHandoffUrl:Kn}),[Hr,Cp]=(0,O.useState)(()=>ze?.annotations??[]);(0,O.useEffect)(()=>{if(Hr.length>0){let w=Hr.reduce((N,oe)=>Math.max(N,oe.id),0);Ys.current=w}else Ys.current=0},[Hr]);let[Wn,Xs]=(0,O.useState)(null),[yi,qs]=(0,O.useState)({title:"",description:""}),Ys=(0,O.useRef)(0),[qv,Tp]=(0,O.useState)(null),[sr,Ta]=(0,O.useState)(-1),[Pp,$s]=(0,O.useState)(!1),Pa=(0,O.useRef)(null),sn=(0,O.useMemo)(()=>[...Hr].sort((w,N)=>w.id-N.id),[Hr]),Ks=(0,O.useMemo)(()=>sr<0||sr>=sn.length?null:sn[sr],[sr,sn]),Gr=(0,O.useCallback)(w=>{if(b!==void 0){_?.(w);return}Tp(w?{annotation:w}:null)},[b,_]),Aa=(0,O.useCallback)(w=>{let N=Pe.current,oe=kn.current;if(!N)return;let ce=new mt.Vector3,ye=Dt.current.get(w.id);ye?ce.copy(ye):oe&&ow(w,oe,ce)||ce.set(w.worldPosition[0],w.worldPosition[1],w.worldPosition[2]),Se.current=null;let Vt=N.smoothTime;N.smoothTime=.6;let Ot=w.worldNormal;if(oe){let vn=new mt.Box3().setFromObject(oe),hn=new mt.Vector3;vn.getCenter(hn);let ht=new mt.Vector3;vn.getSize(ht);let xn=ht.length()*.2,vt;Ot?vt=new mt.Vector3(Ot[0],Ot[1],Ot[2]):vt=ce.clone().sub(hn),vt.lengthSq()<1e-6&&vt.set(0,0,1),vt.normalize();let Dn=Math.max(xn*.6,.3),mn=ce.clone().add(vt.multiplyScalar(Dn));N.setPosition(mn.x,mn.y,mn.z,!0),w.anchorNodeName&&w.anchorLocalPosition&&(Se.current=mn.clone().sub(ce))}N.setTarget(ce.x,ce.y,ce.z,!0),Pa.current&&clearTimeout(Pa.current),Pa.current=setTimeout(()=>{N.smoothTime=Vt,Pa.current=null},800),Gr(w)},[Gr]),Yv=(0,O.useCallback)(()=>{sn.length!==0&&(H(!0),Ta(0),Aa(sn[0]))},[sn,Aa]),$v=(0,O.useCallback)(()=>{if(sn.length===0||sr<0)return;$s(!0);let w=(sr-1+sn.length)%sn.length;Ta(w),Aa(sn[w]),setTimeout(()=>$s(!1),500)},[sr,sn,Aa]),Kv=(0,O.useCallback)(()=>{if(sn.length===0||sr<0)return;if(sr===sn.length-1){if(H(!1),Ta(-1),Gr(null),Pe.current&&or.current){let N=or.current;Pe.current.setLookAt(N.position[0],N.position[1],N.position[2],N.target[0],N.target[1],N.target[2],!0)}return}$s(!0);let w=sr+1;Ta(w),Aa(sn[w]),setTimeout(()=>$s(!1),500)},[sr,sn,Aa,Gr]),Zv=(0,O.useCallback)(()=>{if(H(!1),Ta(-1),Gr(null),Pe.current&&or.current){let w=or.current;Pe.current.setLookAt(w.position[0],w.position[1],w.position[2],w.target[0],w.target[1],w.target[2],!0)}},[Gr]);(0,O.useEffect)(()=>{Ta(-1),H(!1)},[sn.length]),(0,O.useEffect)(()=>()=>{Pa.current&&clearTimeout(Pa.current)},[]),(0,O.useEffect)(()=>{Ks&&D&&Gr(Ks)},[Ks,Gr,D]),(0,O.useEffect)(()=>{if(ze?.annotations===void 0)return;let w=ze.annotations.map(N=>({...N,localPosition:N.localPosition??N.worldPosition}));Cp(w)},[ze?.annotations]);let Co=(0,O.useCallback)(()=>{if(b!==void 0){_?.(null);return}Tp(null)},[b,_]),To=b!==void 0?b:qv?.annotation??null,Po=(0,O.useMemo)(()=>To?Hr.find(N=>N.id===To.id)??null:null,[To,Hr]);(0,O.useEffect)(()=>{To&&!Po&&Co()},[To,Po,Co]);let Ao=d!==void 0,Nt=Ao?c:vo;Pr.current=Nt;let Jv=(0,O.useMemo)(()=>Object.entries(Nt).map(([w,N])=>JSON.stringify([w,N.modelObjectId,N.transform??null])).sort().join(""),[Nt]),{measureMode:Eo,measureModeRef:Qv,measurePoints:Ap,showDimensions:od,measureBox:Ep,modelBounds:e0,refreshBounds:Rp,clearMeasurements:t0,toggleMeasureMode:n0,toggleDimensions:r0,handleMeasurePointerDown:i0,handleMeasureClick:a0}=bh({canvasAreaRef:rr,controlsRef:Pe,sceneRef:kn,modelUrl:e,modelRotation:R.model.rotation,bindingTransformSignature:Jv,modelLoaded:ri}),{isDownloading:sd,downloadMenuOpen:o0,uvExportError:Lp,toggleDownloadMenu:s0,handleDownloadMesh:l0,handleDownloadScreenshot:c0,handleDownloadUvLayout:d0}=gh({sceneRef:kn,materialRefs:xa,rendererCaptureRef:qt,objectBindings:Nt,downloadFilename:B}),kp=(0,O.useMemo)(()=>Object.fromEntries(Object.entries(Nt).filter(([,w])=>w.visible===!1).map(([w])=>[w,!0])),[Nt]),ii=(0,O.useMemo)(()=>{let w=new WeakMap,N=new Map,oe=new Map;for(let[ce,ye]of Object.entries(Nt))w.set(ye,ce),N.has(ye.id)||N.set(ye.id,ce),oe.has(ye.modelObjectId)||oe.set(ye.modelObjectId,ce);return{byReference:w,byId:N,byModelObjectId:oe}},[Nt]),wi=(0,O.useCallback)(w=>w?ii.byReference.get(w)??ii.byModelObjectId.get(w.modelObjectId)??ii.byId.get(w.id)??null:null,[ii]),ld=l!==void 0,Ro=ld?l??null:xo,Ar=wi(Ro),cd=Ar?ut.current[Ar]??null:null,Bp=wi(Ge?u??Hi??Kc:null),u0=Bp?ut.current[Bp]??null:null,Dp=(0,O.useCallback)(w=>{Tr(w),f?.(w)},[f]),Np=V&&Ro!==null&&Ar!==null,Op=(Ar?Nt[Ar]:null)??Ro;(0,O.useEffect)(()=>{Ao||Cr(c)},[Ao,c]),(0,O.useEffect)(()=>{h?.(kp)},[kp,h]);let Ea=(0,O.useCallback)(w=>{ld||Zc(w),p?.(w)},[ld,p]),Ra=(0,O.useCallback)(w=>{Ao||Cr(w),d?.(w)},[Ao,d]),p0=(0,O.useCallback)(w=>{let N=Ar;if(!N||!w)return;let oe=Pr.current[N];oe&&Ra({...Pr.current,[N]:{...oe,transform:{...oe.transform,...w}}})},[Ra,Ar]),ai=(0,O.useCallback)((w,N)=>Nt[w]?w:N?wi(N):ii.byId.get(w)??ii.byModelObjectId.get(w)??null,[Nt,wi,ii]),Lo=(0,O.useCallback)((w,N)=>{let oe=ai(w),ce=oe?Nt[oe]:void 0;!oe||!ce||Ra({...Nt,[oe]:{...ce,style:N(ce.style)}})},[ai,Nt,Ra]),lr=(0,O.useCallback)(()=>{if(Jn){let w=bi[Jn.objectId]?.hex;w!==void 0&&(Lo(Jn.objectId,N=>({...N,material:{...N?.material,baseColor:w}})),wa(N=>({...N,[Jn.objectId]:{}})))}_a(null)},[Jn,bi,Lo]),Ip=(0,O.useCallback)(()=>{Ea(null),vi(null),lr(),Gi(null)},[Ea,lr]),dd=(0,O.useCallback)((w,N,oe,ce,ye)=>{let Vt=bo.current,Ot=rr.current,vn=Pe.current?.camera;if(!Vt)return{objectId:w,x:24,y:24};let hn=Vt.getBoundingClientRect(),ht=12,xn=hn.width-N-ht,vt=hn.height-oe-ht,Dn=Math.max(ht,(hn.width-N)/2),mn=Math.max(ht,(hn.height-oe)/2),ka=ai(w,ce),Do=ka?ut.current[ka]:null,Wr=(Ba,Zi)=>Zi<=ht?ht:Math.min(Math.max(Ba,ht),Zi);if(Ot&&vn&&Do){let Ba=Ot.getBoundingClientRect(),Zi=new mt.Vector3;new mt.Box3().setFromObject(Do).getCenter(Zi),Zi.project(vn);let A0=(Zi.x+1)/2*Ba.width+(Ba.left-hn.left),E0=(1-Zi.y)/2*Ba.height+(Ba.top-hn.top);return{objectId:w,x:Wr(A0+24,xn),y:Wr(E0-oe/2,vt)}}let md=typeof ye?.screenX=="number"?ye.screenX-hn.left:Dn,fd=typeof ye?.screenY=="number"?ye.screenY-hn.top:mn;return{objectId:w,x:Wr(md,xn),y:Wr(fd,vt)}},[ai]),Zs=(0,O.useCallback)(w=>{let{objectId:N,action:oe,binding:ce}=w;switch(vi(w),oe.id){case"toggle-visibility":{let ye=N;ce?.modelObjectId&&(ye=ii.byModelObjectId.get(ce.modelObjectId)??ye);let Vt=Nt[ye],Ot=Vt?.visible===!1;Vt&&Ra({...Nt,[ye]:{...Vt,visible:Ot}});break}case"change-color":lr(),Gi(null),wa(ye=>{let Vt=ai(N,ce)??N,Ot=ye[N]?.hex,vn=Nt[Vt]?.style?.material?.baseColor;return{...ye,[N]:{...ye[N],hex:Ot??vn??"#ffffff"}}}),_a(dd(N,225,250,ce,w));break;case"change-material":lr(),Gi(dd(N,300,320,ce,w));break;default:break}x?.(w)},[Ra,Nt,dd,x,lr,ai,ii]);(0,O.useEffect)(()=>{if(Jn)return window.addEventListener("pointerdown",lr),()=>window.removeEventListener("pointerdown",lr)},[Jn,lr]),(0,O.useEffect)(()=>{if(!ar)return;let w=()=>Gi(null);return window.addEventListener("pointerdown",w),()=>window.removeEventListener("pointerdown",w)},[ar]),(0,O.useEffect)(()=>{if(!Po)return;let w=N=>{if($t.current&&!$t.current.contains(N.target)){if(N.target.closest?.(".ri-annotationMarker"))return;Co()}};return document.addEventListener("mousedown",w),document.addEventListener("touchstart",w),()=>{document.removeEventListener("mousedown",w),document.removeEventListener("touchstart",w)}},[Po,Co]),(0,O.useEffect)(()=>{if(!Wn)return;let w=N=>{let oe=N.target;if(oe.closest?.(".ri-annotationPopup")||oe.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let ce=rr.current;!ce||!ce.contains(oe)||(Xs(null),qs({title:"",description:""}))};return document.addEventListener("mousedown",w,!0),document.addEventListener("touchstart",w,!0),()=>{document.removeEventListener("mousedown",w,!0),document.removeEventListener("touchstart",w,!0)}},[Wn]);let zp=(0,O.useCallback)((w,N)=>{let oe=Yt.current[w];oe&&URL.revokeObjectURL(oe),N.startsWith("blob:")?Yt.current[w]=N:delete Yt.current[w],Lo(w,ce=>({...ce,material:{...ce?.material,texture:{path:N}}}))},[Lo]),h0=w=>{let N=w.target.files?.[0],oe=Tn.current;if(!N||!oe)return;let ce=ai(oe);ce&&(M?M(N,ce).then(ye=>zp(ce,ye),ye=>console.error("onTextureUpload failed:",ye)):zp(ce,URL.createObjectURL(N)),w.target.value="")},Up=w=>{Tn.current=w,pn.current?.click()},Vp=w=>{let N=ai(w);if(!N)return;Lo(N,ce=>ce?.material?.texture?{...ce,material:{...ce.material,texture:void 0}}:ce);let oe=Yt.current[N];oe&&(URL.revokeObjectURL(oe),delete Yt.current[N])},ud=(0,O.useRef)(S);ud.current=S;let Er=(0,O.useCallback)(()=>{let w=Pe.current;!w||!ud.current||ud.current({controls:w,scene:kn.current,objectBindings:Pr.current,nodeRefs:ut.current,homeCameraState:or.current,captureImage:N=>el(qt.current,N),invalidate:()=>qt.current?.invalidate()})},[]),La=(0,O.useCallback)(async(w=!1)=>{let N=Pe.current,oe=Sa.current??kn.current;if(!N||!oe)return!1;try{if(w){let ce=(oe instanceof mt.Box3?oe:new mt.Box3().setFromObject(oe)).getBoundingSphere(new mt.Sphere),ye=ce.center.clone(),Ot=N.getPosition(new mt.Vector3).clone().sub(N.getTarget(new mt.Vector3));Ot.lengthSq()<1e-6&&Ot.set(0,0,1),Ot.normalize();let vn=Math.max(ce.radius*10,20),hn=ye.clone().add(Ot.multiplyScalar(vn));await N.setLookAt(hn.x,hn.y,hn.z,ye.x,ye.y,ye.z,!1)}return qi(!0),await $g(N,()=>N.fitToBox(oe,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(ce=>{let ye=performance.now(),Vt=()=>{N.active===!1||performance.now()-ye>8e3?(N.dispatchEvent({type:"update"}),qt.current?.invalidate(),ce()):(qt.current?.invalidate(),setTimeout(Vt,100))};setTimeout(Vt,100)}),jr.current=!0,$i(),Er(),!0}catch(ce){return console.error("Fit scene error:",ce),!1}},[$i,Er]);(0,O.useEffect)(()=>{if(jr.current=!1,Wi.current=!1,or.current=null,kn.current=null,Sa.current=null,zs(!1),So(!1),xi(!1),Gs({total:0,missing:0}),Mo("Loading model..."),!e){Xi(!1),qi(!0);return}Xi(!0),qi(!!rt||wo.current);let w=!1,N=null,oe=ye=>{N=setTimeout(ce,ye)},ce=()=>{if(w||jr.current||Wi.current)return;let ye=Sa.current??kn.current;if(!Pe.current||!ye){oe(100);return}if(yo.current=cw(ye,Pe.current)??yo.current,Rg(Pe.current)){jr.current=!0,$i(),Er(),Xi(!1),qi(!0),qt.current?.invalidate();return}Wi.current=!0,(rt?rt():wo.current?Promise.resolve(!0):La(!0)).then(Ot=>{jr.current=Ot!==!1,jr.current?($i(),Er(),Xi(!1)):w||oe(100)}).catch(()=>{jr.current=!1,w||oe(100)}).finally(()=>{Wi.current=!1})};return oe(50),()=>{w=!0,N&&clearTimeout(N)}},[$i,La,e,Er,rt,t]),(0,O.useEffect)(()=>{if(!it)return;let w=ni;if(!w)return;let N=null,oe=new ResizeObserver(()=>{!jr.current||Wi.current||(N&&clearTimeout(N),N=setTimeout(()=>{La()},150))});return oe.observe(w),()=>{oe.disconnect(),N&&clearTimeout(N)}},[ni,La,it]);let Fp=(0,O.useCallback)(w=>{if(Qv.current||(Bn(!1),lr(),Gi(null),vi(null),Ea(w),Lt||!Xe))return;let N=Pe.current,oe=wi(w),ce=oe?ut.current[oe]:null;N&&w.cameraState?.position&&w.cameraState?.target?(N.setPosition(w.cameraState.position[0],w.cameraState.position[1],w.cameraState.position[2],!0),N.setTarget(w.cameraState.target[0],w.cameraState.target[1],w.cameraState.target[2],!0)):N&&ce&&N.fitToBox(ce,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Ea,lr,wi,Lt,Xe]),jp=(0,O.useCallback)(w=>{if(Ea(w),Lt)return;let N=Pe.current,oe=wi(w),ce=oe?ut.current[oe]:null;if(!N||!ce)return;let ye=w.cameraState;ye?.position&&ye?.target?(N.setPosition(ye.position[0],ye.position[1],ye.position[2],!0),N.setTarget(ye.target[0],ye.target[1],ye.target[2],!0)):N.fitToBox(ce,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[Ea,wi,Lt]);(0,O.useEffect)(()=>{Er()},[Er]);let Hp=(0,O.useCallback)((w,N)=>{dw(N,yo.current),m?.(w,N),Er()},[Er,m]),m0=(0,O.useCallback)(w=>{Jc.current=new Set(w.map(N=>N.name)),Qc(N=>N+1),r?.(w)},[r]),f0=(0,O.useCallback)(w=>{Sa.current=w,qt.current?.invalidate()},[]),Gp=(0,O.useCallback)(w=>{kn.current=w,Rp(w),Gs(lw(w));let N=Io(w);td(N>Ji?N:null),Hs(!1),N>Ji&&Mo(`Preparing large model (${Math.round(N/1e6)}M triangles) \u2014 the first display can take a while on this device...`),zs(!0),So(!1),Fs(!1),y?.(w),Er()},[Er,y,Rp]),Wp=(0,O.useCallback)(w=>{Xi(!1),qi(!0),So(!0),T?.(w)},[T]),g0=(0,O.useCallback)((w,N)=>{if(!se)return;let oe={...R,lighting:{...R.lighting,lights:R.lighting.lights.map(ce=>ce.id===w?{...ce,position:N}:ce)}};se(oe)},[R,se]);(0,O.useEffect)(()=>{let w=kn.current;if(!ri||!w){xi(!1);return}let N=Object.entries(Nt);if(N.length===0){xi(!1);return}let oe=t?Jc.current:new Set(Object.keys(Fa(w).nodesById));if(!oe||oe.size===0){xi(!1);return}let ce=N.some(([ye,Vt])=>!oe.has(Vt.modelObjectId??ye));xi(ce)},[ri,Nt,Is,t]);let pd=(0,O.useCallback)(async()=>{if(rt){await rt();return}let w=Pe.current;if(!w)return;let N=or.current;try{N?await $g(w,()=>w.setLookAt(N.position[0],N.position[1],N.position[2],N.target[0],N.target[1],N.target[2],!0)):await La()}catch(oe){console.error("Reset camera error:",oe)}},[rt,La]),s_=(0,O.useCallback)(()=>{Ca(!1),Bn(!0)},[]),l_=(0,O.useCallback)(()=>{Bn(!1)},[]),b0=(0,O.useCallback)(()=>{Bn(!1),Ca(!0),setTimeout(()=>{pd()},100)},[pd]),v0=(0,O.useCallback)((w,N)=>{Hp(w,N)},[Hp]),x0=(0,O.useCallback)(w=>{let N=Xt==="scene"&&tn==="Annotations";if(w.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let ce=rr.current,ye=Pe.current,Vt=ye?.camera,Ot=kn.current;if(!ce||!ye||!Vt||!Ot||!N&&!ye.enabled)return;let vn=ce.getBoundingClientRect(),hn=(w.clientX-vn.left)/vn.width*2-1,ht=-((w.clientY-vn.top)/vn.height)*2+1,xn=new mt.Raycaster;xn.setFromCamera(new mt.Vector2(hn,ht),Vt);let vt=xn.intersectObject(Ot,!0);if(vt.length===0)return;if(!N){let{x:Wr,y:md,z:fd}=vt[0].point;ye.setOrbitPoint(Wr,md,fd);return}let Dn=vt[0],mn=Dn.point,ka=Ot.worldToLocal(Dn.point.clone()),Do=[0,0,1];if(Dn.face){let Wr=Dn.face.normal.clone().transformDirection(Dn.object.matrixWorld).normalize();Do=[Wr.x,Wr.y,Wr.z]}Xs({worldPosition:[mn.x,mn.y,mn.z],localPosition:[ka.x,ka.y,ka.z],worldNormal:Do,anchor:aw(Dn),screenX:w.clientX-vn.left,screenY:w.clientY-vn.top}),qs({title:"",description:""})},[Xt,tn]),Xp=(0,O.useCallback)(()=>{if(!Wn||!yi.title.trim())return;Ys.current+=1;let N={id:Ys.current,worldPosition:Wn.worldPosition,localPosition:Wn.localPosition,worldNormal:Wn.worldNormal,anchorNodeName:Wn.anchor?.anchorNodeName,anchorLocalPosition:Wn.anchor?.anchorLocalPosition,title:yi.title.trim(),description:yi.description},oe=[...Hr,N];Cp(oe),L?.(oe),Xs(null)},[Wn,yi,Hr,L]),hd=(0,O.useCallback)(()=>Xs(null),[]),y0=(0,O.useCallback)(w=>{Gr(w)},[Gr]);if(we.status==="checking")return(0,U.jsx)("div",{className:"ri-viewer ri-viewer--license-checking",children:(0,U.jsx)(ea,{title:"Verifying License",message:"Checking your license key..."})});if(we.status==="invalid")return(0,U.jsx)("div",{className:"ri-viewer ri-viewer--license-invalid",children:(0,U.jsx)(ea,{tone:"error",title:"Invalid License",message:we.isLocalDomain?we.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})});let qp=ar?ai(ar.objectId):null,Yp=qp?Nt[qp]?.style?.material?.texture?.path:void 0,w0=rr.current?.offsetWidth??600,_0=rr.current?.offsetHeight??400,S0=350,M0=290,C0=Wn?Math.min(Wn.screenX+12,w0-S0-8):0,T0=Wn?Math.min(Wn.screenY,_0-M0-8):0,P0=q&&!!e&&!ed&&(!ri||!Ma||_o),ko=ot&&(Ki&&(ad||wp)||_p||!!Ws),Bo=w=>16+w*42;return(0,U.jsxs)("div",{className:"ri-viewer",style:{background:pe},children:[(0,U.jsxs)("div",{className:"ri-viewerLeft",ref:bo,children:[A?A({isOpen:Np,selectedObject:Op,currentAction:Os,onClose:Ip,onAction:Zs}):(0,U.jsx)(ku,{isOpen:Np,selectedObject:Op,currentAction:Os,onClose:Ip,onAction:Zs,renderActionExtra:w=>w==="change-color"&&Jn?(0,U.jsx)(Ru,{inline:!0,colorPicker:Jn,onClose:lr,itemMaterials:bi,setItemMaterials:wa}):w==="change-material"&&ar?(0,U.jsx)(Lu,{inline:!0,triggerFileUpload:Up,materialPopup:ar,textureUrl:Yp,clearTexture:Vp}):null}),(0,U.jsxs)("div",{className:`ri-canvasArea ${Eo?"ri-canvasArea--measuring":""} ${Ma?"":"ri-canvasArea--positioning"} ${dt?"ri-canvasArea--moveMode":""}`,ref:$c,tabIndex:We?0:void 0,onDoubleClick:x0,onPointerDown:w=>{We&&rr.current?.focus({preventScroll:!0}),i0(w)},onClick:a0,children:[Us&&!Vs&&(0,U.jsxs)("div",{className:"ri-bindingsMismatchBanner",children:[(0,U.jsx)(Le.AlertTriangle,{size:14,className:"ri-bindingsMismatchBanner__icon"}),(0,U.jsx)("span",{children:"Object bindings data don't match this model"}),(0,U.jsx)("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:w=>{w.stopPropagation(),Fs(!0)},"aria-label":"Dismiss",children:(0,U.jsx)(Le.X,{size:12})})]}),js!==null&&!nd&&(0,U.jsxs)("div",{className:`ri-largeModelBanner ${Us&&!Vs?"ri-largeModelBanner--offset":""}`,children:[(0,U.jsx)(Le.AlertTriangle,{size:14,className:"ri-largeModelBanner__icon"}),(0,U.jsxs)("span",{children:["Very large model (",Math.round(js/1e6),"M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the objects panel to select parts."]}),(0,U.jsx)("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:w=>{w.stopPropagation(),Hs(!0)},"aria-label":"Dismiss",children:(0,U.jsx)(Le.X,{size:12})})]}),he.model.renderer==="uv-checker"&&Yi.missing>0&&(0,U.jsxs)("div",{className:"ri-uvCheckerBanner",role:"status",children:[(0,U.jsx)(Le.AlertTriangle,{size:14,className:"ri-uvCheckerBanner__icon"}),(0,U.jsxs)("span",{children:[Yi.missing===Yi.total?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${Yi.missing} of ${Yi.total} meshes have no UV0 coordinates.`," ","Missing UVs are shown in magenta."]})]}),(0,U.jsx)("input",{ref:pn,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:h0}),(0,U.jsxs)(Ld,{camera:P,backgroundColor:z,shadows:E&&R.shadows.enabled,sceneConfig:he,selectedObjectRef:cd,hoveredObjectRef:u0,highlightOnHover:Ge,renderMode:en,maxDpr:qe,reduceGpuLoad:St,xrStore:Ki,rendererCaptureRef:qt,preserveDrawingBuffer:on,children:[v??(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Dd,{lightingConfig:R.lighting,shadowConfig:R.shadows,shadowsEnabled:E,environmentRotation:R.environment.rotation,environmentConfig:R.environment,modelBounds:e0,objectBindings:Nt,nodeRefs:ut}),Mr&&R.lighting.lights.map(w=>!w.visible||w.type==="none"||w.type==="hemisphere"||w.attachment?null:(0,U.jsx)(Wg,{light:w,position:w.position,color:w.color,intensity:w.intensity,visible:w.visible,onPositionChange:N=>g0(w.id,N)},w.id))]}),(0,U.jsx)(kd,{controlsRef:Pe,onCameraChange:v0}),Wt&&(0,U.jsx)(gc.GizmoHelper,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:()=>{Pe.current?.update(0),qt.current?.invalidate()},children:(0,U.jsx)(gc.GizmoViewport,{axisColors:["#ff3653","#8adb00","#2c8fff"],labelColor:"white"})}),dt&&cd&&Ar&&(0,U.jsx)(Fu,{node:cd,space:_t,onTransformChange:p0,onDraggingChange:w=>{Et(w),Ro&&g?.(Ro,w)}},Ar),(0,U.jsx)(Qs,{onLoadError:Wp,children:(0,U.jsx)(O.Suspense,{fallback:null,children:(()=>{let w=(0,U.jsxs)(U.Fragment,{children:[t?(0,U.jsx)(yu,{url:t,rotation:he.model.rotation,errorTarget:n,cacheSize:i,decoderConfig:bt,objectBindings:Nt,itemMaterials:bi,sceneConfig:he,selectedItem:Ar,panelHoveredItem:u??Hi,highlightOnHover:Ge,onItemClick:Fp,onItemHover:Dp,onObjectCatalog:m0,onTilesetBounds:f0,onModelLoaded:Gp,onLoadError:Wp,nodeRefsOut:ut,onNodeRefsChange:Ut,materialRefsOut:xa,explodeFactor:ie,suspendBindingTransforms:Ze}):(0,U.jsx)(Wd,{url:e,modelFormat:a,objectBindings:Nt,selectedItem:Ar,itemMaterials:bi,onItemClick:Fp,onItemHover:Dp,onModelLoaded:Gp,onAnimationsReady:C,nodeRefsOut:ut,onNodeRefsChange:Ut,materialRefsOut:xa,panelHoveredItem:u??Hi,sceneConfig:he,zoomOnSelected:Xe,highlightOnHover:Ge,decoderConfig:bt,explodeFactor:ie,suspendBindingTransforms:Ze}),(0,U.jsx)(_u,{annotations:Hr,sceneConfig:R,activeAnnotation:Po,popupRef:$t,canvasRootRef:rr,worldPositionsRef:Dt,modelLoaded:ri,onAnnotationClick:y0,onCloseAnnotation:Co,hideCloseButton:D,showAnnotationOnHover:Ne}),(0,U.jsx)(sw,{annotation:Ks,enabled:D,controlsRef:Pe,offsetRef:Se}),Mt&&(0,U.jsx)(Mu,{controlsRef:Pe,sceneRef:kn,config:Mt,playing:Je,resetOnPlay:Fv,onFinished:()=>{Bn(!1),Ca(!1)},onUserInteract:()=>{Bn(!1)}}),ee&&(0,U.jsx)(Su,{points:Ap,unit:xe,box:Ep,showDimensions:od})]});return Ki?(0,U.jsx)(mg,{ref:jv,box:Ep,scaleMode:At,onARStateChange:Xv,children:w}):w})()})},t??e)]}),(0,U.jsx)(ro,{visible:P0,message:rd}),ko&&(0,U.jsxs)("div",{className:"ri-xrTools",style:{top:`${Bo(0)}px`},children:[!ad&&_p&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:Wv,title:"View this model in AR with Apple Quick Look",children:[(0,U.jsx)(Le.Box,{size:16}),"View in AR"]}),Ws&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:Gv,title:"Open this experience on a phone for AR","aria-haspopup":"dialog","aria-expanded":Sp,children:[(0,U.jsx)(Le.QrCode,{size:16}),(0,U.jsx)("span",{children:"Open on phone"})]}),Ki&&ad&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>Ki.enterAR().catch(w=>{console.error("Failed to enter AR session:",w)}),title:"View this model in your space",children:[(0,U.jsx)(Le.Smartphone,{size:16}),(0,U.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,U.jsx)("span",{children:"AR"})]}),Ki&&wp&&(0,U.jsxs)("button",{type:"button",className:"ri-xrButton",onClick:()=>Ki.enterVR().catch(w=>{console.error("Failed to enter VR session:",w)}),title:"View this model in VR",children:[(0,U.jsx)(Le.RectangleGoggles,{size:16}),(0,U.jsx)("span",{className:"ri-xrButtonPrefix",children:"Enter"}),(0,U.jsx)("span",{children:"VR"})]})]}),Hv,Sp&&Ws&&(0,U.jsx)("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:w=>{w.target===w.currentTarget&&Mp()},children:(0,U.jsxs)("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[(0,U.jsx)("button",{type:"button",className:"ri-mobileHandoffClose",onClick:Mp,"aria-label":"Close phone handoff",children:(0,U.jsx)(Le.X,{size:18})}),(0,U.jsx)(Le.Smartphone,{size:22,"aria-hidden":"true"}),(0,U.jsx)("h2",{id:"ri-mobileHandoffTitle",children:"View in AR"}),(0,U.jsx)("p",{children:"Scan the code and choose AR."}),(0,U.jsx)("div",{className:"ri-mobileHandoffQr",children:(0,U.jsx)(Kg.QRCodeSVG,{value:Ws,size:208,level:"M",marginSize:4,title:"QR code to open this model on a phone"})})]})}),Ve&&(0,U.jsx)("div",{className:"ri-uvCheckerTools",style:{top:`${Bo(ko?1:0)}px`},children:(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${te?"ri-measureButton--active":""}`,onClick:()=>$(w=>!(w??re)),title:te?"Disable UV checker":"Enable UV checker","aria-label":te?"Disable UV checker":"Enable UV checker","aria-pressed":te,children:(0,U.jsx)(Le.Grid3X3,{size:16})})}),ee&&(0,U.jsxs)("div",{className:"ri-measureTools",style:{top:`${Bo((ko?1:0)+(Ve?1:0))}px`},children:[(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${Eo?"ri-measureButton--active":""}`,onClick:n0,title:Eo?"Stop measuring":"Measure distance","aria-pressed":Eo,children:(0,U.jsx)(Le.PencilRuler,{size:16})}),(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${od?"ri-measureButton--active":""}`,onClick:r0,title:"Toggle bounding dimensions","aria-pressed":od,children:(0,U.jsx)(Le.RulerDimensionLine,{size:16})}),Ap.length>0&&(0,U.jsx)("button",{type:"button",className:"ri-measureButton",onClick:t0,title:"Clear measurements",children:(0,U.jsx)(Le.Eraser,{size:16})}),Eo&&(0,U.jsx)("span",{className:"ri-measureHint",children:"Click points on the model to measure"})]}),tt&&(0,U.jsxs)("div",{className:"ri-explodeTools",style:{top:`${Bo((ko?1:0)+(Ve?1:0)+(ee?1:0))}px`},children:[(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${Oe||ie>0?"ri-measureButton--active":""}`,onClick:()=>Rt(w=>!w),title:"Exploded view","aria-pressed":Oe,children:(0,U.jsx)(Le.Expand,{size:16})}),Oe&&(0,U.jsx)("div",{className:"ri-explodeSlider",onPointerDown:w=>w.stopPropagation(),children:(0,U.jsx)("input",{type:"range",min:0,max:100,value:Math.round(ie*100),onChange:w=>_e(Number(w.target.value)/100),"aria-label":"Explode amount"})})]}),Mt&&(0,U.jsxs)("div",{className:"ri-cinematicTools",style:{top:`${Bo((ko?1:0)+(Ve?1:0)+(ee?1:0)+(tt?1:0))}px`},children:[(0,U.jsx)("button",{type:"button",className:`ri-measureButton ${Je?"ri-measureButton--active":""}`,onClick:()=>{Je?Bn(!1):(Ca(!1),Bn(!0))},title:Je?"Pause cinematic":"Play cinematic","aria-pressed":Je,children:Je?(0,U.jsx)(Le.Pause,{size:16}):(0,U.jsx)(Le.Play,{size:16})}),Je&&(0,U.jsx)("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:b0,title:"Stop cinematic and reset camera",children:(0,U.jsx)(Le.Square,{size:16})})]}),(Y||k||Ln&&sn.length>0)&&(0,U.jsxs)("div",{className:"ri-buttonContainer",children:[(0,U.jsx)("div",{className:"ri-tourControls",children:Ln&&sn.length>0&&(0,U.jsx)(U.Fragment,{children:D?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)("button",{className:"ri-tourButton",onClick:$v,disabled:Pp||sn.length===0||sr<=0,title:"Previous annotation",children:[(0,U.jsx)(Le.ChevronLeft,{size:16}),(0,U.jsx)("span",{children:"Prev"})]}),(0,U.jsx)("button",{className:"ri-tourButton ri-tourButton--stop",onClick:Zv,title:"Stop guided tour",children:(0,U.jsx)(Le.Square,{size:16})}),(0,U.jsxs)("button",{className:"ri-tourButton ri-tourButton--next",onClick:Kv,disabled:Pp||sn.length===0,title:"Next annotation",children:[(0,U.jsx)("span",{children:"Next"}),(0,U.jsx)(Le.ChevronRight,{size:16})]})]}):(0,U.jsx)("button",{className:"ri-navButtonSingle",onClick:Yv,disabled:sn.length===0,title:"Start guided tour",children:"Guided Tour"})})}),(0,U.jsxs)("div",{className:"ri-rightControls",children:[Y&&(0,U.jsx)("button",{className:"ri-resetButton",onClick:pd,title:"Reset camera view",children:(0,U.jsx)(Le.RotateCcw,{})}),k&&(0,U.jsxs)("div",{className:"ri-downloadWrapper",onPointerDown:w=>w.stopPropagation(),children:[o0&&(0,U.jsxs)("div",{className:"ri-downloadMenu",children:[(0,U.jsxs)("button",{className:"ri-downloadMenuItem",onClick:l0,disabled:sd||!kn.current,children:[(0,U.jsx)(Le.Box,{size:14}),"Download GLB"]}),(0,U.jsx)("div",{className:"ri-downloadMenuDivider"}),on&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)("button",{className:"ri-downloadMenuItem",onClick:c0,disabled:!kn.current,children:[(0,U.jsx)(Le.Camera,{size:14}),"Download PNG"]}),(0,U.jsx)("div",{className:"ri-downloadMenuDivider"})]}),(0,U.jsxs)("button",{className:"ri-downloadMenuItem",onClick:d0,disabled:!kn.current,children:[(0,U.jsx)(Le.FileImage,{size:14}),"Download UV Layout"]}),Lp&&(0,U.jsx)("div",{className:"ri-downloadMenuNotice",role:"status","aria-live":"polite",children:Lp})]}),(0,U.jsx)("button",{className:"ri-downloadButton",onClick:s0,disabled:sd||!kn.current,title:"Download options",children:sd?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)("span",{className:"ri-downloadButton__spinner"}),"Exporting\u2026"]}):(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Le.Download,{size:15}),"Download"]})})]})]})]}),Wn&&(0,U.jsxs)("div",{className:"ri-annotationPopup",style:{left:C0,top:T0},onPointerDown:w=>w.stopPropagation(),onClick:w=>w.stopPropagation(),children:[(0,U.jsx)("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:"Title *",value:yi.title,onChange:w=>qs(N=>({...N,title:w.target.value})),onKeyDown:w=>{w.key==="Enter"&&Xp(),w.key==="Escape"&&hd()}}),(0,U.jsx)("textarea",{className:"ri-annotationTextarea",placeholder:"Description",value:yi.description,onChange:w=>qs(N=>({...N,description:w.target.value})),onKeyDown:w=>{w.key==="Escape"&&hd()},rows:5}),(0,U.jsxs)("div",{className:"ri-annotationActions",children:[(0,U.jsx)("button",{onClick:Xp,className:`ri-annotationOkBtn ${yi.title.trim()?"":"disabled"}`,disabled:!yi.title.trim(),children:"OK"}),(0,U.jsx)("button",{onClick:hd,className:"ri-annotationCancelBtn",children:"Cancel"}),(0,U.jsx)("div",{className:"ri-annotationIcons"})]})]})]}),A&&Jn&&(0,U.jsx)(Ru,{colorPicker:Jn,onClose:lr,itemMaterials:bi,setItemMaterials:wa}),A&&ar&&(0,U.jsx)(Lu,{triggerFileUpload:Up,materialPopup:ar,textureUrl:Yp,clearTexture:Vp})]}),j&&(0,U.jsx)("div",{className:"ri-viewerRight",children:X?X({objectBindings:Nt,onAction:Zs,onFocus:jp,onHover:Zn}):(0,U.jsx)(Bu,{objectBindings:Nt,onAction:Zs,onFocus:jp,onHover:Zn})}),ue&&(0,U.jsx)(Mg,{controlsRef:Pe,enabled:!0,opacity:be,moveSensitivity:Ce,position:Ee})]})}var ne=require("react"),Un=require("lucide-react");var Ht=require("react"),ju=require("three");function Zg(e){return[e.x,e.y,e.z]}function Di(e,t){let n=new ju.Vector3,i=new ju.Vector3;return t.getPosition(n),t.getTarget(i),{position:Zg(n),target:Zg(i),fov:"fov"in e&&typeof e.fov=="number"?e.fov:null,zoom:"zoom"in e&&typeof e.zoom=="number"?e.zoom:1,azimuthAngle:t.azimuthAngle,polarAngle:t.polarAngle}}function uw(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 Ms(e,t,n=.6){let i=e.smoothTime;e.smoothTime=n;try{return await t()}finally{e.smoothTime=i}}function vc(e={}){let t=(0,Ht.useRef)(e);t.current=e;let n=(0,Ht.useRef)(null),[i,r]=(0,Ht.useState)(null),[a,o]=(0,Ht.useState)(()=>({...e.presets})),s=(0,Ht.useRef)(a);s.current=a;let c=(0,Ht.useCallback)(_=>{r(v=>uw(v,_)?v:_)},[]),l=(0,Ht.useCallback)((_,v)=>{c(Di(_,v))},[c]),u=(0,Ht.useRef)(null),d=(0,Ht.useRef)(null),p=(0,Ht.useRef)(null),f=(0,Ht.useCallback)(_=>{n.current=_;let v=Di(_.controls.camera,_.controls);c(v),_.scene!==d.current&&(d.current=_.scene,u.current=null,p.current=null),_.homeCameraState&&!u.current&&(u.current=_.homeCameraState);let{initialPosition:P,initialTarget:z,initialTransition:E=!1}=t.current;if((P||z)&&_.scene&&(P||_.homeCameraState)&&p.current!==_.controls){p.current=_.controls,_.homeCameraState||io(_.controls);let V=P??v.position,A=z??v.target;_.controls.setLookAt(V[0],V[1],V[2],A[0],A[1],A[2],E).then(()=>{if(n.current?.controls!==_.controls)return;let X=Di(_.controls.camera,_.controls);u.current={position:X.position,target:X.target},c(X)}).catch(()=>{})}},[c]),g=(0,Ht.useCallback)(async()=>{let _=n.current,v=_?.controls;if(!v)return!1;try{let P=u.current;return P?await Ms(v,()=>v.setLookAt(P.position[0],P.position[1],P.position[2],P.target[0],P.target[1],P.target[2],!0)):_?.scene?await Ms(v,()=>v.fitToBox(_.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})):await Ms(v,()=>v.reset(!0)),!0}catch{return!1}},[]),y=(0,Ht.useCallback)(async()=>{let _=n.current;if(!_?.controls||!_.scene)return!1;try{return await Ms(_.controls,()=>_.controls.fitToBox(_.scene,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),T=(0,Ht.useCallback)(async _=>{let v=n.current;if(!v?.controls)return!1;let P=Pn(v.objectBindings,_);if(!P)return!1;let z=v.nodeRefs[P];if(!z)return!1;try{return await Ms(v.controls,()=>v.controls.fitToBox(z,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),!0}catch{return!1}},[]),x=(0,Ht.useCallback)(async(_,v=!0)=>{let P=n.current?.controls;if(!P)return!1;try{return n.current?.homeCameraState||io(P),await P.setTarget(_[0],_[1],_[2],v),c(Di(P.camera,P)),!0}catch{return!1}},[c]),h=(0,Ht.useCallback)(async(_,v=!0)=>{let P=n.current?.controls;if(!P)return!1;try{n.current?.homeCameraState||io(P);let z=[P.setLookAt(_.position[0],_.position[1],_.position[2],_.target[0],_.target[1],_.target[2],v)];_.azimuthAngle!=null&&_.polarAngle!=null&&z.push(P.rotateTo(_.azimuthAngle,_.polarAngle,v)),await Promise.all(z);let E=P.camera,V=!1;return _.fov!=null&&"fov"in E&&typeof E.fov=="number"&&(E.fov=_.fov,V=!0),_.zoom!=null&&"zoom"in E&&typeof E.zoom=="number"&&(E.zoom=_.zoom,V=!0),V&&"updateProjectionMatrix"in E&&E.updateProjectionMatrix(),c(Di(E,P)),!0}catch{return!1}},[c]),m=(0,Ht.useCallback)((_,v=!0)=>h(_,v),[h]),S=(0,Ht.useCallback)((_,v,P=!0)=>h({position:_,target:v},P),[h]),M=(0,Ht.useCallback)(async(_,v,P=!0)=>{let z=n.current?.controls;if(!z)return!1;try{return n.current?.homeCameraState||io(z),await z.rotateTo(_,v,P),c(Di(z.camera,z)),!0}catch{return!1}},[c]),C=(0,Ht.useCallback)(async(_,v=!0)=>{let P=n.current?.controls;if(!P)return!1;try{return n.current?.homeCameraState||io(P),await P.dollyTo(_,v),c(Di(P.camera,P)),!0}catch{return!1}},[c]),L=(0,Ht.useCallback)(_=>{let v=n.current?.controls,P=_.trim();if(!v||!P)return null;let z=Di(v.camera,v);return s.current={...s.current,[P]:z},o(E=>({...E,[P]:z})),c(z),z},[c]),b=(0,Ht.useCallback)((_,v=!0)=>{let P=s.current[_];return P?h(P,v):Promise.resolve(!1)},[h]);return{cameraState:i,cameraPresets:a,resetView:g,focusObject:T,fitScene:y,setCameraTarget:x,setCameraState:m,lookAt:S,orbitTo:M,dollyTo:C,savePreset:L,goToPreset:b,handleCameraChange:l,handleViewerReady:f}}var gn=require("react");function xc(){let e=(0,gn.useRef)(null),[t,n]=(0,gn.useState)([]),i=(0,gn.useRef)(null),[r,a]=(0,gn.useState)([]),[o,s]=(0,gn.useState)(null),[c,l]=(0,gn.useState)(!1),[u,d]=(0,gn.useState)(1),[p,f]=(0,gn.useState)(0),[g,y]=(0,gn.useState)(0);(0,gn.useEffect)(()=>()=>{i.current?.()},[]);let T=(0,gn.useCallback)(C=>{i.current?.(),e.current=C,n(C.clips),a(C.clipDetails??C.clips.map(b=>({sourceName:b,duration:0})));let L=C.getState?.()??{currentClip:null,isPlaying:!1,speed:1,time:0,duration:0};s(L.currentClip),l(L.isPlaying),d(L.speed),f(L.time),y(L.duration),C.subscribe?i.current=C.subscribe(b=>{s(b.currentClip),l(b.isPlaying),d(b.speed),f(b.time),y(b.duration)}):i.current=null},[]),x=(0,gn.useCallback)(C=>{e.current?.play(C),s(C),l(!0)},[]),h=(0,gn.useCallback)(()=>{e.current?.pause(),l(!1)},[]),m=(0,gn.useCallback)(()=>{e.current?.stop(),s(null),l(!1),f(0)},[]),S=(0,gn.useCallback)(C=>{e.current?.setSpeed(C),d(C)},[]),M=(0,gn.useCallback)(C=>{e.current?.seek?.(C),f(C)},[]);return{clips:t,clipDetails:r,currentClip:o,isPlaying:c,speed:u,time:p,duration:g,play:x,pause:h,stop:m,setSpeed:S,seek:M,handleAnimationsReady:T}}var Tc=require("react");var ob=require("react"),Ii=require("lucide-react"),Sc=require("react-colorful");var Ni=require("react"),eb=require("react-dom"),yc=require("lucide-react"),wc=require("react-colorful");function uo(e){let t=e.replace("#","").match(/.{2}/g).map(i=>parseInt(i,16)/255).map(i=>i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4));return .2126*t[0]+.7152*t[1]+.0722*t[2]>.179?"#000":"#fff"}var Jg=require("react");function Qg(e,t,n){(0,Jg.useEffect)(()=>{if(!n)return;let i=Array.isArray(e)?e:[e],r=a=>{let o=a.target;i.some(c=>c.current?.contains(o))||t()};return document.addEventListener("pointerdown",r,!0),()=>{document.removeEventListener("pointerdown",r,!0)}},[e,t,n])}var Ae=require("react/jsx-runtime");function Hu({anchorRef:e,onClose:t,children:n}){let i=(0,Ni.useRef)(null),[r,a]=(0,Ni.useState)(null);return Qg([i,e],t,!0),(0,Ni.useLayoutEffect)(()=>{let o=e.current;if(!o)return;let s=o.getBoundingClientRect(),c=222,l=8,u=Math.min(Math.max(s.right-c,l),window.innerWidth-c-l),d=Math.min(s.bottom+6,window.innerHeight-200);a({top:d,left:u})},[e]),r?(0,eb.createPortal)((0,Ae.jsx)("div",{ref:i,className:"se-colorPickerPopover",style:{position:"fixed",top:r.top,left:r.left},children:n}),document.body):null}function pw(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 pa({title:e,children:t}){return(0,Ae.jsxs)("section",{className:"se-section",children:[(0,Ae.jsx)("h3",{className:"se-sectionTitle",children:e}),(0,Ae.jsx)("div",{className:"se-sectionBody",children:t})]})}function ct({title:e,open:t,onToggle:n,trailing:i,children:r,disabled:a,tooltip:o}){let s=o?`${o}`:e;return(0,Ae.jsxs)("section",{className:"se-panel",children:[(0,Ae.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,title:s,children:[(0,Ae.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,Ae.jsx)(yc.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,Ae.jsx)("span",{className:"se-panelTitle",children:e}),o?(0,Ae.jsx)("span",{className:"se-panelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Ae.jsx)(yc.Info,{size:13})}):null]}),i?(0,Ae.jsx)("span",{className:"se-panelTrailing",onClick:c=>c.stopPropagation(),children:i}):null]}),t?(0,Ae.jsx)("div",{className:"se-panelBody",style:a?{opacity:.45,pointerEvents:"none"}:void 0,children:r}):null]})}function ft({checked:e,onChange:t,label:n}){return(0,Ae.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Ae.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Ae.jsx)("span",{className:"se-switchTrack",children:(0,Ae.jsx)("span",{className:"se-switchThumb"})})]})}function Z({label:e,value:t,min:n,max:i,step:r,formatValue:a,onChange:o,disabled:s=!1}){return(0,Ae.jsxs)("label",{className:`se-field ${s?"se-field--disabled":""}`,children:[(0,Ae.jsxs)("span",{className:"se-fieldLabel",children:[e,(0,Ae.jsx)("span",{className:"se-fieldValue",children:a?a(t):t})]}),(0,Ae.jsx)("input",{className:"se-slider",type:"range",min:n,max:i,step:r,value:t,onChange:c=>o(Number(c.target.value)),disabled:s})]})}function yt({label:e,checked:t,onChange:n}){return(0,Ae.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Ae.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ae.jsx)("input",{type:"checkbox",className:"se-checkbox",checked:t,onChange:i=>n(i.target.checked)})]})}function tr({label:e,value:t,options:n,onChange:i}){return(0,Ae.jsxs)("label",{className:"se-field se-fieldInline",children:[(0,Ae.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ae.jsx)("select",{className:"se-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,Ae.jsx)("option",{value:r,children:pw(r)},r))})]})}function xr({label:e,value:t,onChange:n}){let[i,r]=(0,Ni.useState)(!1),a=(0,Ni.useRef)(null);return(0,Ae.jsxs)("div",{className:"se-field",children:[(0,Ae.jsxs)("div",{className:"se-fieldInline",children:[(0,Ae.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ae.jsx)("span",{ref:a,style:{display:"inline-flex"},children:(0,Ae.jsx)(wc.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>r(o=>!o),style:{background:t,color:uo(t)},color:t,onChange:n})})]}),i?(0,Ae.jsx)(Hu,{anchorRef:a,onClose:()=>r(!1),children:(0,Ae.jsx)(wc.HexColorPicker,{color:t,onChange:n})}):null]})}function Oi({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Ae.jsxs)("div",{className:"se-field",children:[(0,Ae.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ae.jsx)("div",{className:"se-vectorRow",children:["X","Y","Z"].map((s,c)=>(0,Ae.jsxs)("label",{className:"se-vectorAxis",children:[(0,Ae.jsx)("span",{children:s}),(0,Ae.jsx)("input",{type:"number",className:"se-numberInput",min:n,max:i,step:r,value:t[c],onChange:l=>{let u=[...t];u[c]=Number(l.target.value),a(u)}})]},s))})]})}function ha({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,Ae.jsxs)("div",{className:"se-field",children:[(0,Ae.jsx)("span",{className:"se-fieldLabel",children:e}),(0,Ae.jsx)("div",{className:"se-vectorRow",children:["X","Y"].map((s,c)=>(0,Ae.jsxs)("label",{className:"se-vectorAxis",children:[(0,Ae.jsx)("span",{children:s}),(0,Ae.jsx)("input",{type:"number",className:"se-numberInput",min:n,max:i,step:r,value:t[c],onChange:l=>{let u=[...t];u[c]=Number(l.target.value),a(u)}})]},s))})]})}var tb={free:0,starter:1,growth:2};function nb(e){return e==="starter"||e==="growth"||e==="scale"?e==="scale"?"growth":e:"free"}function fi(e,t){return tb[e]>=tb[t]}var rb={free:"Free",starter:"Starter",growth:"Growth"};var ib=require("lucide-react");var Cs=require("react/jsx-runtime");function Yn({requiredTier:e,feature:t}){return(0,Cs.jsxs)("div",{className:"bb-tierLock",children:[(0,Cs.jsx)(ib.Lock,{size:16}),(0,Cs.jsxs)("p",{className:"bb-tierLockMessage",children:[t," requires the ",rb[e]," plan or higher."]})]})}var ae=require("react/jsx-runtime"),hw=["lit","unlit","normals"],mw=["color","image","environment"];function ab(e){let t=e%360;return t<0?t+360:t}function _c({title:e,open:t,onToggle:n,children:i,trailing:r}){return(0,ae.jsxs)("section",{className:"se-panel",children:[(0,ae.jsxs)("button",{type:"button",className:"se-panelHeader",onClick:n,"aria-expanded":t,children:[(0,ae.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ae.jsx)(Ii.ChevronDown,{size:16,className:`se-panelChevron ${t?"se-panelChevron--open":""}`}),(0,ae.jsx)("span",{className:"se-panelTitle",children:e})]}),r?(0,ae.jsx)("span",{className:"se-panelTrailing",onClick:a=>a.stopPropagation(),children:r}):null]}),t?(0,ae.jsx)("div",{className:"se-panelBody",children:i}):null]})}function Gu({config:e,onChange:t}){let{model:n,camera:i,wireframe:r,background:a,environment:o}=e,{tier:s}=vr(),c=fi(s,"starter"),[l,u]=(0,ob.useState)({general:!0,camera:!0,wireframe:!1,background:!1}),d=h=>u(m=>({...m,[h]:!m[h]})),p=h=>t({...e,model:h}),f=h=>t({...e,camera:h}),g=h=>t({...e,wireframe:h}),y=h=>t({...e,background:h}),T=h=>t({...e,environment:h}),x=h=>{T({...o,source:"preset",preset:h})};return(0,ae.jsxs)("div",{className:"se-generalContent",children:[(0,ae.jsxs)(_c,{title:"General",open:l.general,onToggle:()=>d("general"),children:[(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsxs)("div",{className:"se-fieldLabel",children:[(0,ae.jsx)("span",{children:"Straighten model"}),(0,ae.jsx)("button",{type:"button",className:"se-iconButton",onClick:()=>p({...n,rotation:[0,0,0]}),"aria-label":"Reset model rotation",children:(0,ae.jsx)(Ii.RotateCcw,{size:16})})]}),(0,ae.jsx)("div",{className:"se-axisStepperGrid",children:["X","Y","Z"].map((h,m)=>(0,ae.jsxs)("div",{className:"se-axisStepper",children:[(0,ae.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let S=[...n.rotation];S[m]=ab(S[m]-90),p({...n,rotation:S})},"aria-label":`Rotate ${h} axis backward`,children:(0,ae.jsx)(Ii.ChevronLeft,{size:16})}),(0,ae.jsx)("span",{className:"se-axisStepperLabel",children:h}),(0,ae.jsx)("button",{type:"button",className:"se-axisStepperButton",onClick:()=>{let S=[...n.rotation];S[m]=ab(S[m]+90),p({...n,rotation:S})},"aria-label":`Rotate ${h} axis forward`,children:(0,ae.jsx)(Ii.ChevronRight,{size:16})})]},h))})]}),(0,ae.jsx)(Oi,{label:"Rotation",value:n.rotation,min:0,max:360,step:1,onChange:h=>p({...n,rotation:h})}),(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Renderer"}),(0,ae.jsx)("div",{className:"se-segmentedControl se-segmentedControl--renderer",children:Th.map(h=>(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${n.renderer===h?"se-segmentedOption--active":""}`,onClick:()=>p({...n,renderer:h}),children:h==="uv-checker"?"UV CHECKER":h.toUpperCase()},h))})]}),(0,ae.jsx)(tr,{label:"Shading",value:n.shading,options:hw,onChange:h=>p({...n,shading:h})})]}),(0,ae.jsx)(_c,{title:"Camera",open:l.camera,onToggle:()=>d("camera"),children:(0,ae.jsx)(Z,{label:"Field Of View",value:i.fieldOfView,min:20,max:100,step:.1,formatValue:h=>`${h.toFixed(3)}\xB0`,onChange:h=>f({...i,fieldOfView:h})})}),(0,ae.jsx)(_c,{title:"Wireframe",open:l.wireframe,onToggle:()=>d("wireframe"),trailing:(0,ae.jsxs)("label",{className:"se-switch","aria-label":"Toggle wireframe preview",children:[(0,ae.jsx)("input",{type:"checkbox",checked:c&&r.enabled,disabled:!c,onChange:h=>g({...r,enabled:h.target.checked})}),(0,ae.jsx)("span",{className:"se-switchTrack",children:(0,ae.jsx)("span",{className:"se-switchThumb"})})]}),children:c?(0,ae.jsxs)(ae.Fragment,{children:[(0,ae.jsx)(Z,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:h=>g({...r,opacity:h})}),(0,ae.jsx)(xr,{label:"Wire color",value:r.color,onChange:h=>g({...r,color:h})})]}):(0,ae.jsx)(Yn,{requiredTier:"starter",feature:"Wireframe preview"})}),(0,ae.jsx)(_c,{title:"Background",open:l.background,onToggle:()=>d("background"),trailing:(0,ae.jsxs)("label",{className:"se-switch","aria-label":"Toggle scene background",children:[(0,ae.jsx)("input",{type:"checkbox",checked:a.enabled,onChange:h=>y({...a,enabled:h.target.checked})}),(0,ae.jsx)("span",{className:"se-switchTrack",children:(0,ae.jsx)("span",{className:"se-switchThumb"})})]}),children:a.enabled?(0,ae.jsxs)(ae.Fragment,{children:[(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Background type"}),(0,ae.jsx)("div",{className:"se-segmentedControl",children:mw.map(h=>(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${a.type===h?"se-segmentedOption--active":""}`,onClick:()=>y({...a,type:h}),children:h},h))})]}),a.type==="environment"?c?(0,ae.jsxs)(ae.Fragment,{children:[(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Environment source"}),(0,ae.jsxs)("div",{className:"se-segmentedControl",children:[(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="preset"?"se-segmentedOption--active":""}`,onClick:()=>T({...o,source:"preset"}),children:"PRESET"}),(0,ae.jsx)("button",{type:"button",className:`se-segmentedOption ${o.source==="custom"?"se-segmentedOption--active":""}`,onClick:()=>T({...o,source:"custom"}),children:"CUSTOM"})]})]}),o.source==="preset"?(0,ae.jsx)(tr,{label:"Environment preset",value:o.preset,options:Ph,onChange:x}):(0,ae.jsxs)("label",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Custom environment URL"}),(0,ae.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/environment.hdr",value:o.customEnvironmentUrl,onChange:h=>T({...o,customEnvironmentUrl:h.target.value})}),(0,ae.jsx)("span",{className:"bb-note",children:"Enter a HDR, EXR, JPG, JPEG, PNG, or WEBP URL."}),o.customEnvironmentUrl.trim()&&!rl(o.customEnvironmentUrl)?(0,ae.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"Invalid image/HDRI URL."}):null]}),(0,ae.jsx)(Z,{label:"Environment intensity",value:o.intensity,min:0,max:3,step:.05,onChange:h=>T({...o,intensity:h})})]}):(0,ae.jsx)(Yn,{requiredTier:"starter",feature:"Environment backgrounds"}):null,a.type==="image"?(0,ae.jsxs)("label",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Background image URL"}),(0,ae.jsx)("input",{type:"text",className:"se-textInput",placeholder:"https://example.com/background.jpg",value:a.imageUrl,onChange:h=>y({...a,imageUrl:h.target.value})})]}):null,a.type==="color"?(0,ae.jsxs)("div",{className:"se-field",children:[(0,ae.jsx)("span",{className:"se-fieldLabel",children:"Background color"}),(0,ae.jsx)("div",{className:"se-inlineColorPicker",children:(0,ae.jsx)(Sc.HexColorPicker,{color:a.color,onChange:h=>y({...a,color:h})})}),(0,ae.jsx)("div",{className:"se-fieldInline",children:(0,ae.jsx)(Sc.HexColorInput,{prefixed:!0,className:"se-swatch",style:{background:a.color,color:uo(a.color)},color:a.color,onChange:h=>y({...a,color:h})})})]}):null]}):(0,ae.jsx)("div",{className:"se-placeholder",children:"Background rendering is disabled for this scene preset."})})]})}var Rb=require("react");var me=require("react/jsx-runtime");function sb({pp:e,set:t,open:n,toggle:i}){let{ssao:r}=e;return(0,me.jsxs)(ct,{title:"SSAO",tooltip:"Adds soft contact shadows in corners, creases, and tight spaces.",open:n.ssao,onToggle:()=>i("ssao"),disabled:!r.enabled,trailing:(0,me.jsx)(ft,{checked:r.enabled,onChange:a=>t("ssao",{...r,enabled:a}),label:"Toggle SSAO"}),children:[(0,me.jsx)(Z,{label:"Samples",value:r.samples,min:1,max:64,step:1,onChange:a=>t("ssao",{...r,samples:a})}),(0,me.jsx)(Z,{label:"Rings",value:r.rings,min:1,max:12,step:1,onChange:a=>t("ssao",{...r,rings:a})}),(0,me.jsx)(Z,{label:"Intensity",value:r.intensity,min:0,max:20,step:.5,onChange:a=>t("ssao",{...r,intensity:a})}),(0,me.jsx)(Z,{label:"Radius",value:r.radius,min:.01,max:1,step:.01,onChange:a=>t("ssao",{...r,radius:a})}),(0,me.jsx)(Z,{label:"Bias",value:r.bias,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,bias:a})}),(0,me.jsx)(Z,{label:"Luminance Influence",value:r.luminanceInfluence,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,luminanceInfluence:a})}),(0,me.jsx)(Z,{label:"Fade",value:r.fade,min:0,max:.1,step:.001,onChange:a=>t("ssao",{...r,fade:a})}),(0,me.jsx)(Z,{label:"Min Radius Scale",value:r.minRadiusScale,min:0,max:1,step:.01,onChange:a=>t("ssao",{...r,minRadiusScale:a})}),(0,me.jsx)(Z,{label:"World Distance Threshold",value:r.worldDistanceThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldDistanceThreshold:a})}),(0,me.jsx)(Z,{label:"World Distance Falloff",value:r.worldDistanceFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldDistanceFalloff:a})}),(0,me.jsx)(Z,{label:"World Proximity Threshold",value:r.worldProximityThreshold,min:0,max:100,step:.1,onChange:a=>t("ssao",{...r,worldProximityThreshold:a})}),(0,me.jsx)(Z,{label:"World Proximity Falloff",value:r.worldProximityFalloff,min:0,max:20,step:.1,onChange:a=>t("ssao",{...r,worldProximityFalloff:a})})]})}function lb({pp:e,set:t,open:n,toggle:i}){let{autofocus:r}=e;return(0,me.jsxs)(ct,{title:"Auto focus",tooltip:"Keeps the focus plane tracking a subject so the image stays sharp where you want it.",open:n.autofocus,onToggle:()=>i("autofocus"),disabled:!r.enabled,trailing:(0,me.jsx)(ft,{checked:r.enabled,onChange:a=>t("autofocus",{...r,enabled:a}),label:"Toggle Autofocus"}),children:[(0,me.jsx)(Z,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusDistance:a})}),(0,me.jsx)(Z,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("autofocus",{...r,focusRange:a})}),(0,me.jsx)(Z,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,focalLength:a})}),(0,me.jsx)(Z,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("autofocus",{...r,bokehScale:a})}),(0,me.jsx)(Oi,{label:"Target",value:r.target,min:-100,max:100,step:.1,onChange:a=>t("autofocus",{...r,target:a})}),(0,me.jsx)(yt,{label:"Mouse Follow",checked:r.mouse,onChange:a=>t("autofocus",{...r,mouse:a})}),(0,me.jsx)(yt,{label:"Manual Update",checked:r.manual,onChange:a=>t("autofocus",{...r,manual:a})}),(0,me.jsx)(Z,{label:"Debug",value:r.debug,min:0,max:1,step:.01,onChange:a=>t("autofocus",{...r,debug:a})}),(0,me.jsx)(Z,{label:"Smooth Time",value:r.smoothTime,min:0,max:2,step:.01,onChange:a=>t("autofocus",{...r,smoothTime:a})})]})}function cb({pp:e,set:t,open:n,toggle:i}){let{godRays:r}=e;return(0,me.jsxs)(ct,{title:"God Rays",tooltip:"Creates light shafts that streak outward from a bright sun or light source.",open:n.godRays,onToggle:()=>i("godRays"),disabled:!r.enabled,trailing:(0,me.jsx)(ft,{checked:r.enabled,onChange:a=>t("godRays",{...r,enabled:a}),label:"Toggle GodRays"}),children:[(0,me.jsx)(Oi,{label:"Sun Position",value:r.sunPosition,min:-100,max:100,step:.1,onChange:a=>t("godRays",{...r,sunPosition:a})}),(0,me.jsx)(Z,{label:"Samples",value:r.samples,min:1,max:128,step:1,onChange:a=>t("godRays",{...r,samples:a})}),(0,me.jsx)(Z,{label:"Density",value:r.density,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,density:a})}),(0,me.jsx)(Z,{label:"Decay",value:r.decay,min:0,max:1,step:.01,onChange:a=>t("godRays",{...r,decay:a})}),(0,me.jsx)(Z,{label:"Weight",value:r.weight,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,weight:a})}),(0,me.jsx)(Z,{label:"Exposure",value:r.exposure,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,exposure:a})}),(0,me.jsx)(Z,{label:"Clamp Max",value:r.clampMax,min:0,max:2,step:.01,onChange:a=>t("godRays",{...r,clampMax:a})}),(0,me.jsx)(yt,{label:"Blur",checked:r.blur,onChange:a=>t("godRays",{...r,blur:a})}),(0,me.jsx)(tr,{label:"Kernel Size",value:r.kernelSize,options:Uo,onChange:a=>t("godRays",{...r,kernelSize:a})})]})}function db({pp:e,set:t,open:n,toggle:i}){let{lensflare:r}=e;return(0,me.jsxs)(ct,{title:"Lens Flare",tooltip:"Adds camera flare artifacts and glow from a bright light source.",open:n.lensflare,onToggle:()=>i("lensflare"),disabled:!r.enabled,trailing:(0,me.jsx)(ft,{checked:r.enabled,onChange:a=>t("lensflare",{...r,enabled:a}),label:"Toggle Lensflare"}),children:[(0,me.jsx)(Oi,{label:"Lens Position",value:r.lensPosition,min:-100,max:100,step:.1,onChange:a=>t("lensflare",{...r,lensPosition:a})}),(0,me.jsx)(Z,{label:"Smooth Time",value:r.smoothTime,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,smoothTime:a})}),(0,me.jsx)(Z,{label:"Glare Size",value:r.glareSize,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,glareSize:a})}),(0,me.jsx)(Z,{label:"Flare Size",value:r.flareSize,min:0,max:.1,step:.001,onChange:a=>t("lensflare",{...r,flareSize:a})}),(0,me.jsx)(Z,{label:"Flare Speed",value:r.flareSpeed,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareSpeed:a})}),(0,me.jsx)(Z,{label:"Flare Shape",value:r.flareShape,min:0,max:.2,step:.001,onChange:a=>t("lensflare",{...r,flareShape:a})}),(0,me.jsx)(yt,{label:"Animated",checked:r.animated,onChange:a=>t("lensflare",{...r,animated:a})}),(0,me.jsx)(yt,{label:"Anamorphic",checked:r.anamorphic,onChange:a=>t("lensflare",{...r,anamorphic:a})}),(0,me.jsx)(xr,{label:"Color Gain",value:r.colorGain,onChange:a=>t("lensflare",{...r,colorGain:a})}),(0,me.jsx)(Z,{label:"Halo Scale",value:r.haloScale,min:0,max:2,step:.01,onChange:a=>t("lensflare",{...r,haloScale:a})}),(0,me.jsx)(yt,{label:"Secondary Ghosts",checked:r.secondaryGhosts,onChange:a=>t("lensflare",{...r,secondaryGhosts:a})}),(0,me.jsx)(yt,{label:"Additional Streaks",checked:r.aditionalStreaks,onChange:a=>t("lensflare",{...r,aditionalStreaks:a})}),(0,me.jsx)(Z,{label:"Ghost Scale",value:r.ghostScale,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,ghostScale:a})}),(0,me.jsx)(Z,{label:"Opacity",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("lensflare",{...r,opacity:a})}),(0,me.jsx)(yt,{label:"Star Burst",checked:r.starBurst,onChange:a=>t("lensflare",{...r,starBurst:a})})]})}function ub({pp:e,set:t,open:n,toggle:i}){let{depthOfField:r}=e;return(0,me.jsxs)(ct,{title:"Depth Of Field",tooltip:"Blurs areas that sit away from the focal plane for a camera-like look.",open:n.depthOfField,onToggle:()=>i("depthOfField"),disabled:!r.enabled,trailing:(0,me.jsx)(ft,{checked:r.enabled,onChange:a=>t("depthOfField",{...r,enabled:a}),label:"Toggle DepthOfField"}),children:[(0,me.jsx)(Z,{label:"Focus Distance",value:r.focusDistance,min:0,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusDistance:a})}),(0,me.jsx)(Z,{label:"Focus Range",value:r.focusRange,min:.1,max:50,step:.1,onChange:a=>t("depthOfField",{...r,focusRange:a})}),(0,me.jsx)(Z,{label:"Focal Length",value:r.focalLength,min:0,max:1,step:.01,onChange:a=>t("depthOfField",{...r,focalLength:a})}),(0,me.jsx)(Z,{label:"Bokeh Scale",value:r.bokehScale,min:0,max:20,step:.1,onChange:a=>t("depthOfField",{...r,bokehScale:a})})]})}var Ue=require("react/jsx-runtime"),fw=["linear","reinhard","aces"];function pb({pp:e,set:t,open:n,toggle:i}){let{colorAverage:r}=e;return(0,Ue.jsx)(ct,{title:"Color Average",tooltip:"Blends the frame toward a single average color for a washed-out stylized look.",open:n.colorAverage,onToggle:()=>i("colorAverage"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("colorAverage",{...r,enabled:a}),label:"Toggle ColorAverage"}),children:(0,Ue.jsx)("div",{className:"se-placeholder",children:"Averages the frame color using the docs default blend mode."})})}function hb({pp:e,set:t,open:n,toggle:i}){let{brightnessContrast:r}=e;return(0,Ue.jsxs)(ct,{title:"Brightness Contrast",tooltip:"Raises or lowers overall brightness and contrast across the scene.",open:n.brightnessContrast,onToggle:()=>i("brightnessContrast"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("brightnessContrast",{...r,enabled:a}),label:"Toggle BrightnessContrast"}),children:[(0,Ue.jsx)(Z,{label:"Brightness",value:r.brightness,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,brightness:a})}),(0,Ue.jsx)(Z,{label:"Contrast",value:r.contrast,min:-1,max:1,step:.01,onChange:a=>t("brightnessContrast",{...r,contrast:a})})]})}function mb({pp:e,set:t,open:n,toggle:i}){let{hueSaturation:r}=e;return(0,Ue.jsxs)(ct,{title:"Hue Saturation",tooltip:"Shifts the hue and saturation to tint the whole image.",open:n.hueSaturation,onToggle:()=>i("hueSaturation"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("hueSaturation",{...r,enabled:a}),label:"Toggle HueSaturation"}),children:[(0,Ue.jsx)(Z,{label:"Hue",value:r.hue,min:-Math.PI,max:Math.PI,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("hueSaturation",{...r,hue:a})}),(0,Ue.jsx)(Z,{label:"Saturation",value:r.saturation,min:-1,max:1,step:.01,onChange:a=>t("hueSaturation",{...r,saturation:a})})]})}function fb({pp:e,set:t,open:n,toggle:i}){let{vignette:r}=e;return(0,Ue.jsxs)(ct,{title:"Vignette",tooltip:"Darkens the edges of the screen so the center feels more focused.",open:n.vignette,onToggle:()=>i("vignette"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("vignette",{...r,enabled:a}),label:"Toggle Vignette"}),children:[(0,Ue.jsx)(Z,{label:"Offset",value:r.offset,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,offset:a})}),(0,Ue.jsx)(Z,{label:"Darkness",value:r.darkness,min:0,max:1,step:.01,onChange:a=>t("vignette",{...r,darkness:a})}),(0,Ue.jsx)(yt,{label:"Eskil",checked:r.eskil,onChange:a=>t("vignette",{...r,eskil:a})})]})}function gb({pp:e,set:t,open:n,toggle:i}){let{bloom:r}=e;return(0,Ue.jsxs)(ct,{title:"Bloom",tooltip:"Makes bright areas glow and bleed softly into nearby pixels.",open:n.bloom,onToggle:()=>i("bloom"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("bloom",{...r,enabled:a}),label:"Toggle Bloom"}),children:[(0,Ue.jsx)(Z,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceThreshold:a})}),(0,Ue.jsx)(Z,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,luminanceSmoothing:a})}),(0,Ue.jsx)(Z,{label:"Intensity",value:r.intensity,min:0,max:3,step:.05,onChange:a=>t("bloom",{...r,intensity:a})}),(0,Ue.jsx)(yt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("bloom",{...r,mipmapBlur:a})}),(0,Ue.jsx)(Z,{label:"Radius",value:r.radius,min:0,max:1,step:.01,onChange:a=>t("bloom",{...r,radius:a})}),(0,Ue.jsx)(Z,{label:"Levels",value:r.levels,min:1,max:16,step:1,onChange:a=>t("bloom",{...r,levels:a})})]})}function bb({pp:e,set:t,open:n,toggle:i}){let{toneMapping:r}=e;return(0,Ue.jsxs)(ct,{title:"Tone Mapping",tooltip:"Remaps HDR lighting to screen output and controls exposure style.",open:n.toneMapping,onToggle:()=>i("toneMapping"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("toneMapping",{...r,enabled:a}),label:"Toggle ToneMapping"}),children:[(0,Ue.jsxs)("div",{className:"se-field",children:[(0,Ue.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,Ue.jsx)("div",{className:"se-segmentedControl",children:fw.map(a=>(0,Ue.jsx)("button",{type:"button",className:`se-segmentedOption ${r.mode===a?"se-segmentedOption--active":""}`,onClick:()=>t("toneMapping",{...r,mode:a}),children:a==="aces"?"Filmic":a.charAt(0).toUpperCase()+a.slice(1)},a))})]}),(0,Ue.jsx)(Z,{label:"Resolution",value:r.resolution,min:64,max:4096,step:64,onChange:a=>t("toneMapping",{...r,resolution:a})}),(0,Ue.jsx)(Z,{label:"White Point",value:r.whitePoint,min:0,max:16,step:.01,onChange:a=>t("toneMapping",{...r,whitePoint:a})}),(0,Ue.jsx)(Z,{label:"Middle Grey",value:r.middleGrey,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,middleGrey:a})}),(0,Ue.jsx)(Z,{label:"Min Luminance",value:r.minLuminance,min:0,max:1,step:.01,onChange:a=>t("toneMapping",{...r,minLuminance:a})}),(0,Ue.jsx)(Z,{label:"Average Luminance",value:r.averageLuminance,min:0,max:4,step:.01,onChange:a=>t("toneMapping",{...r,averageLuminance:a})}),(0,Ue.jsx)(Z,{label:"Adaptation Rate",value:r.adaptationRate,min:0,max:10,step:.01,onChange:a=>t("toneMapping",{...r,adaptationRate:a})}),(0,Ue.jsx)(Z,{label:"Exposure",value:r.exposure,min:0,max:3,step:.01,onChange:a=>t("toneMapping",{...r,exposure:a})})]})}function vb({pp:e,set:t,open:n,toggle:i}){let{sepia:r}=e;return(0,Ue.jsx)(ct,{title:"Sepia",tooltip:"Adds a warm vintage brown tint to the entire image.",open:n.sepia,onToggle:()=>i("sepia"),disabled:!r.enabled,trailing:(0,Ue.jsx)(ft,{checked:r.enabled,onChange:a=>t("sepia",{...r,enabled:a}),label:"Toggle Sepia"}),children:(0,Ue.jsx)(Z,{label:"Intensity",value:r.intensity,min:0,max:1,step:.01,onChange:a=>t("sepia",{...r,intensity:a})})})}var ke=require("react/jsx-runtime");function xb({pp:e,set:t,open:n,toggle:i}){let{dotScreen:r}=e;return(0,ke.jsxs)(ct,{title:"Dot Screen",tooltip:"Overlays a halftone dot pattern for a printed or retro look.",open:n.dotScreen,onToggle:()=>i("dotScreen"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("dotScreen",{...r,enabled:a}),label:"Toggle DotScreen"}),children:[(0,ke.jsx)(Z,{label:"Angle",value:r.angle,min:0,max:Math.PI*2,step:.01,formatValue:a=>`${a.toFixed(2)} rad`,onChange:a=>t("dotScreen",{...r,angle:a})}),(0,ke.jsx)(Z,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("dotScreen",{...r,scale:a})})]})}function yb({pp:e,set:t,open:n,toggle:i}){let{glitch:r}=e;return(0,ke.jsxs)(ct,{title:"Glitch",tooltip:"Introduces digital distortion, tearing, and scan noise.",open:n.glitch,onToggle:()=>i("glitch"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("glitch",{...r,enabled:a}),label:"Toggle Glitch"}),children:[(0,ke.jsx)(tr,{label:"Mode",value:r.mode,options:Ah,onChange:a=>t("glitch",{...r,mode:a})}),(0,ke.jsx)(ha,{label:"Delay",value:r.delay,min:0,max:10,step:.01,onChange:a=>t("glitch",{...r,delay:a})}),(0,ke.jsx)(ha,{label:"Duration",value:r.duration,min:0,max:5,step:.01,onChange:a=>t("glitch",{...r,duration:a})}),(0,ke.jsx)(ha,{label:"Strength",value:r.strength,min:0,max:2,step:.01,onChange:a=>t("glitch",{...r,strength:a})}),(0,ke.jsx)(ha,{label:"Chromatic Aberration Offset",value:r.chromaticAberrationOffset,min:0,max:.02,step:1e-4,onChange:a=>t("glitch",{...r,chromaticAberrationOffset:a})}),(0,ke.jsx)(Z,{label:"Columns",value:r.columns,min:0,max:.5,step:.001,onChange:a=>t("glitch",{...r,columns:a})}),(0,ke.jsx)(Z,{label:"Ratio",value:r.ratio,min:0,max:1,step:.01,onChange:a=>t("glitch",{...r,ratio:a})})]})}function wb({pp:e,set:t,open:n,toggle:i}){let{grid:r}=e;return(0,ke.jsxs)(ct,{title:"Grid",tooltip:"Adds a visual grid overlay that feels retro or debug-like.",open:n.grid,onToggle:()=>i("grid"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("grid",{...r,enabled:a}),label:"Toggle Grid"}),children:[(0,ke.jsx)(Z,{label:"Scale",value:r.scale,min:.1,max:10,step:.05,onChange:a=>t("grid",{...r,scale:a})}),(0,ke.jsx)(Z,{label:"Line Width",value:r.lineWidth,min:0,max:1,step:.01,onChange:a=>t("grid",{...r,lineWidth:a})})]})}function _b({pp:e,set:t,open:n,toggle:i}){let{chromaticAberration:r}=e;return(0,ke.jsxs)(ct,{title:"Chromatic Aberration",tooltip:"Separates color channels slightly to mimic lens fringing.",open:n.chromaticAberration,onToggle:()=>i("chromaticAberration"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("chromaticAberration",{...r,enabled:a}),label:"Toggle ChromaticAberration"}),children:[(0,ke.jsx)(Z,{label:"Offset X",value:r.offsetX,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetX:a})}),(0,ke.jsx)(Z,{label:"Offset Y",value:r.offsetY,min:0,max:.02,step:1e-4,onChange:a=>t("chromaticAberration",{...r,offsetY:a})}),(0,ke.jsx)(yt,{label:"Radial Modulation",checked:r.radialModulation,onChange:a=>t("chromaticAberration",{...r,radialModulation:a})}),(0,ke.jsx)(Z,{label:"Modulation Offset",value:r.modulationOffset,min:0,max:1,step:.01,onChange:a=>t("chromaticAberration",{...r,modulationOffset:a})})]})}function Sb({pp:e,set:t,open:n,toggle:i}){let{noise:r}=e;return(0,ke.jsxs)(ct,{title:"Noise",tooltip:"Adds film grain or static noise to the rendered image.",open:n.noise,onToggle:()=>i("noise"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("noise",{...r,enabled:a}),label:"Toggle Noise"}),children:[(0,ke.jsx)(Z,{label:"Amount",value:r.opacity,min:0,max:1,step:.01,onChange:a=>t("noise",{...r,opacity:a})}),(0,ke.jsx)(yt,{label:"Premultiply",checked:r.premultiply,onChange:a=>t("noise",{...r,premultiply:a})})]})}function Mb({pp:e,set:t,open:n,toggle:i}){let{scanline:r}=e;return(0,ke.jsx)(ct,{title:"Scan Line",tooltip:"Draws horizontal CRT-style scan lines over the frame.",open:n.scanline,onToggle:()=>i("scanline"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("scanline",{...r,enabled:a}),label:"Toggle Scanline"}),children:(0,ke.jsx)(Z,{label:"Density",value:r.density,min:0,max:10,step:.25,onChange:a=>t("scanline",{...r,density:a})})})}function Cb({pp:e,set:t,open:n,toggle:i}){let{pixelation:r}=e;return(0,ke.jsx)(ct,{title:"Pixelation",tooltip:"Reduces detail into larger pixels for a blocky stylized effect.",open:n.pixelation,onToggle:()=>i("pixelation"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("pixelation",{...r,enabled:a}),label:"Toggle Pixelation"}),children:(0,ke.jsx)(Z,{label:"Granularity",value:r.granularity,min:0,max:20,step:1,onChange:a=>t("pixelation",{...r,granularity:a})})})}function Tb({pp:e,set:t,open:n,toggle:i}){let{ramp:r}=e;return(0,ke.jsxs)(ct,{title:"Ramp",tooltip:"Adds a screen-space color gradient, or masks effects earlier in the stack.",open:n.ramp,onToggle:()=>i("ramp"),disabled:!r.enabled,trailing:(0,ke.jsx)(ft,{checked:r.enabled,onChange:a=>t("ramp",{...r,enabled:a}),label:"Toggle Ramp"}),children:[(0,ke.jsx)(tr,{label:"Ramp Type",value:r.rampType,options:Eh,onChange:a=>t("ramp",{...r,rampType:a})}),(0,ke.jsx)(ha,{label:"Ramp Start",value:r.rampStart,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampStart:a})}),(0,ke.jsx)(ha,{label:"Ramp End",value:r.rampEnd,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampEnd:a})}),(0,ke.jsx)(xr,{label:"Start Color",value:r.startColor,onChange:a=>t("ramp",{...r,startColor:a})}),(0,ke.jsx)(xr,{label:"End Color",value:r.endColor,onChange:a=>t("ramp",{...r,endColor:a})}),!r.rampMask&&(0,ke.jsx)(Z,{label:"Gradient Opacity",value:r.opacity??.5,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,opacity:a})}),(0,ke.jsx)(Z,{label:"Bias",value:r.rampBias,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampBias:a})}),(0,ke.jsx)(Z,{label:"Gain",value:r.rampGain,min:0,max:1,step:.01,onChange:a=>t("ramp",{...r,rampGain:a})}),(0,ke.jsx)(yt,{label:"Mask Earlier Effects",checked:r.rampMask,onChange:a=>t("ramp",{...r,rampMask:a})}),(0,ke.jsx)(yt,{label:"Invert",checked:r.rampInvert,onChange:a=>t("ramp",{...r,rampInvert:a})})]})}var kt=require("react/jsx-runtime");function Pb({pp:e,set:t,open:n,toggle:i}){let{outline:r}=e;return(0,kt.jsxs)(ct,{title:"Outline",tooltip:"Draws a visible edge around the selected object binding.",open:n.outline,onToggle:()=>i("outline"),disabled:!r.enabled,trailing:(0,kt.jsx)(ft,{checked:r.enabled,onChange:a=>t("outline",{...r,enabled:a}),label:"Toggle Outline"}),children:[(0,kt.jsx)("div",{className:"se-placeholder",children:"Outlines the currently selected object binding in the model editor."}),(0,kt.jsx)(Z,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("outline",{...r,selectionLayer:a})}),(0,kt.jsx)(Z,{label:"Edge Strength",value:r.edgeStrength,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,edgeStrength:a})}),(0,kt.jsx)(Z,{label:"Pulse Speed",value:r.pulseSpeed,min:0,max:10,step:.1,onChange:a=>t("outline",{...r,pulseSpeed:a})}),(0,kt.jsx)(xr,{label:"Visible Edge Color",value:r.visibleEdgeColor,onChange:a=>t("outline",{...r,visibleEdgeColor:a})}),(0,kt.jsx)(xr,{label:"Hidden Edge Color",value:r.hiddenEdgeColor,onChange:a=>t("outline",{...r,hiddenEdgeColor:a})}),(0,kt.jsx)(tr,{label:"Kernel Size",value:r.kernelSize,options:Uo,onChange:a=>t("outline",{...r,kernelSize:a})}),(0,kt.jsx)(yt,{label:"Blur",checked:r.blur,onChange:a=>t("outline",{...r,blur:a})}),(0,kt.jsx)(yt,{label:"X-Ray",checked:r.xRay,onChange:a=>t("outline",{...r,xRay:a})})]})}function Ab({pp:e,set:t,open:n,toggle:i}){let{selectiveBloom:r}=e;return(0,kt.jsxs)(ct,{title:"Selective Bloom",tooltip:"Applies bloom only to objects assigned to the selected layer.",open:n.selectiveBloom,onToggle:()=>i("selectiveBloom"),disabled:!r.enabled,trailing:(0,kt.jsx)(ft,{checked:r.enabled,onChange:a=>t("selectiveBloom",{...r,enabled:a}),label:"Toggle SelectiveBloom"}),children:[(0,kt.jsx)("div",{className:"se-placeholder",children:"Applies bloom to the currently selected object binding."}),(0,kt.jsx)(Z,{label:"Selection Layer",value:r.selectionLayer,min:0,max:20,step:1,onChange:a=>t("selectiveBloom",{...r,selectionLayer:a})}),(0,kt.jsx)(Z,{label:"Intensity",value:r.intensity,min:0,max:5,step:.05,onChange:a=>t("selectiveBloom",{...r,intensity:a})}),(0,kt.jsx)(Z,{label:"Threshold",value:r.luminanceThreshold,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceThreshold:a})}),(0,kt.jsx)(Z,{label:"Smoothing",value:r.luminanceSmoothing,min:0,max:1,step:.01,onChange:a=>t("selectiveBloom",{...r,luminanceSmoothing:a})}),(0,kt.jsx)(tr,{label:"Kernel Size",value:r.kernelSize,options:Uo,onChange:a=>t("selectiveBloom",{...r,kernelSize:a})}),(0,kt.jsx)(yt,{label:"Mipmap Blur",checked:r.mipmapBlur,onChange:a=>t("selectiveBloom",{...r,mipmapBlur:a})}),(0,kt.jsx)(yt,{label:"Inverted",checked:r.inverted,onChange:a=>t("selectiveBloom",{...r,inverted:a})}),(0,kt.jsx)(yt,{label:"Ignore Background",checked:r.ignoreBackground,onChange:a=>t("selectiveBloom",{...r,ignoreBackground:a})})]})}function Eb({pp:e,set:t,open:n,toggle:i}){let{smaa:r}=e;return(0,kt.jsx)(ct,{title:"SMAA",tooltip:"Reduces jagged edges with subpixel anti-aliasing.",open:n.smaa,onToggle:()=>i("smaa"),trailing:(0,kt.jsx)(ft,{checked:r.enabled,onChange:a=>t("smaa",{...r,enabled:a}),label:"Toggle SMAA"}),children:(0,kt.jsx)("div",{className:"se-placeholder",children:"Subpixel Morphological Anti-Aliasing smooths jagged edges in post-process."})})}var zt=require("react/jsx-runtime");function Wu({config:e,onChange:t}){let[n,i]=(0,Rb.useState)({autofocus:!1,colorAverage:!1,dotScreen:!1,glitch:!1,godRays:!1,grid:!1,lensflare:!1,outline:!1,selectiveBloom:!1,ramp:!1,ssao:!1,brightnessContrast:!1,hueSaturation:!1,depthOfField:!1,chromaticAberration:!1,vignette:!1,bloom:!1,toneMapping:!1,noise:!1,sepia:!1,scanline:!1,pixelation:!1,smaa:!1}),r=c=>i(l=>({...l,[c]:!l[c]})),a=e.postProcessing,s={pp:a,set:(c,l)=>t({...e,postProcessing:{...a,[c]:l}}),open:n,toggle:r};return(0,zt.jsxs)("div",{className:"se-generalContent",children:[(0,zt.jsx)(sb,{...s}),(0,zt.jsx)(lb,{...s}),(0,zt.jsx)(pb,{...s}),(0,zt.jsx)(xb,{...s}),(0,zt.jsx)(yb,{...s}),(0,zt.jsx)(cb,{...s}),(0,zt.jsx)(wb,{...s}),(0,zt.jsx)(db,{...s}),(0,zt.jsx)(Pb,{...s}),(0,zt.jsx)(Ab,{...s}),(0,zt.jsx)(hb,{...s}),(0,zt.jsx)(mb,{...s}),(0,zt.jsx)(ub,{...s}),(0,zt.jsx)(_b,{...s}),(0,zt.jsx)(fb,{...s}),(0,zt.jsx)(gb,{...s}),(0,zt.jsx)(bb,{...s}),(0,zt.jsx)(Sb,{...s}),(0,zt.jsx)(vb,{...s}),(0,zt.jsx)(Mb,{...s}),(0,zt.jsx)(Cb,{...s}),(0,zt.jsx)(Tb,{...s}),(0,zt.jsx)(Eb,{...s})]})}var Ts=require("react"),zi=require("lucide-react");var fe=require("react/jsx-runtime"),gw=["512","1024","2048","4096"],Lb={none:"None",directional:"Direction",point:"Point",spot:"Spot",hemisphere:"Hemi"};function bw({index:e,light:t,selected:n,onSelect:i,onToggleVisible:r}){return(0,fe.jsxs)("div",{className:`se-lightRow ${n?"se-lightRow--active":""}`,onClick:i,children:[(0,fe.jsxs)("span",{className:"se-lightRowLabel",children:[e+1,": ",Lb[t.type]]}),(0,fe.jsx)("button",{type:"button",className:"se-iconButton","aria-label":t.visible?"Hide light":"Show light",onClick:a=>{a.stopPropagation(),r()},children:t.visible?(0,fe.jsx)(zi.Eye,{size:14}):(0,fe.jsx)(zi.EyeOff,{size:14})})]})}function vw(){return{id:crypto.randomUUID(),type:"directional",color:"#ffffff",intensity:1,position:[5,10,5],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}}function Xu({config:e,onChange:t}){let[n,i]=(0,Ts.useState)({lights:!0,shadows:!1,groundShadows:!1,environment:!1,envShadow:!1}),r=(0,Ts.useSyncExternalStore)(Uu,uc),[a,o]=(0,Ts.useState)(e.lighting.lights[0]?.id??null),s=r??a,c=b=>{o(b),_s(b)},l=b=>i(_=>({..._,[b]:!_[b]})),{tier:u}=vr(),d=fi(u,"starter"),{lighting:p,shadows:f,groundShadows:g,environment:y}=e,T=b=>t({...e,lighting:b}),x=b=>t({...e,shadows:b}),h=b=>t({...e,groundShadows:b}),m=b=>t({...e,environment:b}),S=(b,_)=>{T({...p,lights:p.lights.map(v=>v.id===b?{...v,..._}:v)})},M=p.lights.find(b=>b.id===s)??null,C=()=>{let b=vw();T({...p,lights:[...p.lights,b]}),c(b.id)},L=()=>{if(!M)return;let b=p.lights.filter(_=>_.id!==M.id);T({...p,lights:b}),c(b[0]?.id??null)};return(0,fe.jsxs)("div",{className:"se-generalContent",children:[(0,fe.jsxs)(ct,{title:"Lights",open:n.lights,onToggle:()=>l("lights"),children:[(0,fe.jsx)("div",{className:"se-lightList",children:p.lights.map((b,_)=>(0,fe.jsx)(bw,{index:_,light:b,selected:b.id===s,onSelect:()=>c(b.id),onToggleVisible:()=>S(b.id,{visible:!b.visible})},b.id))}),(0,fe.jsxs)("div",{className:"se-lightActions",children:[(0,fe.jsx)("button",{type:"button",className:"se-iconButton",onClick:C,title:"Add light",children:(0,fe.jsx)(zi.Plus,{size:14})}),M&&p.lights.length>1&&(0,fe.jsx)("button",{type:"button",className:"se-iconButton",onClick:L,title:"Remove selected light",children:(0,fe.jsx)(zi.Trash2,{size:14})})]}),M?(0,fe.jsxs)("div",{className:"se-lightProps",children:[(0,fe.jsxs)("div",{className:"se-field",children:[(0,fe.jsx)("span",{className:"se-fieldLabel",children:"Type"}),(0,fe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:Ch.map(b=>(0,fe.jsx)("button",{type:"button",className:`se-segmentedOption ${M.type===b?"se-segmentedOption--active":""}`,onClick:()=>S(M.id,{type:b}),children:Lb[b]},b))})]}),(0,fe.jsx)(xr,{label:"Color",value:M.color,onChange:b=>S(M.id,{color:b})}),(0,fe.jsx)(Z,{label:"Intensity",value:M.intensity,min:0,max:10,step:.1,onChange:b=>S(M.id,{intensity:b})}),M.type!=="hemisphere"&&M.type!=="none"&&(0,fe.jsx)(Oi,{label:"Position",value:M.position,min:-100,max:100,step:.05,onChange:b=>S(M.id,{position:b})}),M.type==="spot"&&(0,fe.jsxs)(fe.Fragment,{children:[(0,fe.jsx)(Z,{label:"Angle",value:M.angle??Math.PI/6,min:0,max:Math.PI/2,step:.01,formatValue:b=>`${Math.round(b*180/Math.PI)}\xB0`,onChange:b=>S(M.id,{angle:b})}),(0,fe.jsx)(Z,{label:"Penumbra",value:M.penumbra??.2,min:0,max:1,step:.01,onChange:b=>S(M.id,{penumbra:b})}),(0,fe.jsx)(Z,{label:"Distance",value:M.distance??0,min:0,max:100,step:.5,onChange:b=>S(M.id,{distance:b})}),(0,fe.jsx)(Z,{label:"Decay",value:M.decay??2,min:0,max:4,step:.1,onChange:b=>S(M.id,{decay:b})})]}),(0,fe.jsx)(yt,{label:"Attached to camera",checked:M.attachedToCamera,onChange:b=>S(M.id,{attachedToCamera:b})}),(0,fe.jsx)(yt,{label:"Cast shadows",checked:M.castShadow,onChange:b=>S(M.id,{castShadow:b})}),(0,fe.jsx)(Z,{label:"Shadow bias",value:M.shadowBias,min:-.01,max:.01,step:1e-4,onChange:b=>S(M.id,{shadowBias:b})})]}):null]}),(0,fe.jsxs)(ct,{title:"Shadows",open:n.shadows,onToggle:()=>l("shadows"),disabled:!f.enabled,trailing:(0,fe.jsx)(ft,{checked:f.enabled,onChange:b=>x({...f,enabled:b}),label:"Toggle shadows"}),children:[(0,fe.jsx)(tr,{label:"Map size",value:String(f.mapSize),options:gw,onChange:b=>x({...f,mapSize:Number(b)})}),(0,fe.jsx)(Z,{label:"Bias",value:f.bias,min:-.01,max:.01,step:1e-4,onChange:b=>x({...f,bias:b})}),(0,fe.jsx)(Z,{label:"Normal bias",value:f.normalBias,min:0,max:.2,step:.01,onChange:b=>x({...f,normalBias:b})}),(0,fe.jsx)(Z,{label:"Radius (softness)",value:f.radius,min:0,max:20,step:.5,onChange:b=>x({...f,radius:b})})]}),(0,fe.jsxs)(ct,{title:"Ground Shadows",open:n.groundShadows,onToggle:()=>l("groundShadows"),disabled:!g.enabled,trailing:(0,fe.jsx)(ft,{checked:g.enabled,onChange:b=>h({...g,enabled:b}),label:"Toggle ground shadows"}),children:[(0,fe.jsxs)("div",{className:"se-field",children:[(0,fe.jsx)("span",{className:"se-fieldLabel",children:"Mode"}),(0,fe.jsx)("div",{className:"se-segmentedControl",style:{gridAutoColumns:"1fr"},children:["shadowCatcher"].map(b=>(0,fe.jsx)("button",{type:"button",className:`se-segmentedOption ${g.mode===b?"se-segmentedOption--active":""}`,onClick:()=>h({...g,mode:b}),children:b==="shadowCatcher"?"Shadow Catcher":"Baked AO"},b))})]}),g.mode==="bakedAO"&&(0,fe.jsx)("div",{className:"se-placeholder",children:"Requires pre-baked AO textures \u2014 not yet available."}),(0,fe.jsx)(Z,{label:"Intensity",value:g.intensity,min:0,max:1,step:.01,onChange:b=>h({...g,intensity:b})}),(0,fe.jsx)(Z,{label:"Border fade",value:g.borderFade,min:0,max:10,step:.1,onChange:b=>h({...g,borderFade:b})}),(0,fe.jsx)(Z,{label:"Height",value:g.height,min:-5,max:5,step:.1,onChange:b=>h({...g,height:b})}),(0,fe.jsx)(Z,{label:"Size",value:g.size,min:1,max:50,step:.5,onChange:b=>h({...g,size:b})})]}),(0,fe.jsx)(ct,{title:"Environment",open:n.environment,onToggle:()=>l("environment"),children:d?(0,fe.jsxs)(fe.Fragment,{children:[(0,fe.jsx)(Z,{label:"Orientation",value:y.rotation,min:0,max:360,step:1,formatValue:b=>`${b}\xB0`,onChange:b=>m({...y,rotation:b})}),(0,fe.jsx)(Z,{label:"Brightness",value:y.intensity,min:0,max:3,step:.05,onChange:b=>m({...y,intensity:b})}),(0,fe.jsxs)(ct,{title:"Shadow",open:n.envShadow,onToggle:()=>l("envShadow"),trailing:(0,fe.jsx)(ft,{checked:y.shadowLight.enabled,onChange:b=>m({...y,shadowLight:{...y.shadowLight,enabled:b}}),label:"Toggle environment shadow light"}),disabled:!y.shadowLight.enabled,children:[(0,fe.jsx)(Z,{label:"Light intensity",value:y.shadowLight.intensity,min:0,max:20,step:.1,onChange:b=>m({...y,shadowLight:{...y.shadowLight,intensity:b}})}),(0,fe.jsx)(Z,{label:"Shadow bias",value:y.shadowLight.bias,min:-.01,max:.01,step:1e-4,onChange:b=>m({...y,shadowLight:{...y.shadowLight,bias:b}})})]})]}):(0,fe.jsx)(Yn,{requiredTier:"starter",feature:"Environment lighting"})})]})}var Mc=require("react"),Jr=require("lucide-react");var ve=require("react/jsx-runtime");function xw(e){if(!Number.isFinite(e)||e<=0)return"Unknown duration";let t=Math.round(e*10)/10;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function kb(e){let t=Number.isFinite(e)&&e>0?e:0;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60),i=(t%60).toFixed(1).padStart(4,"0");return`${n}:${i}`}function yw(e){return Number.isFinite(e)?Math.min(3,Math.max(.1,Number(e.toFixed(2)))):1}function qu({config:e,onChange:t,clipDetails:n,currentClip:i,isPlaying:r,time:a,play:o,pause:s,stop:c,setSpeed:l,seek:u}){let[d,p]=(0,Mc.useState)(!1),f=(0,Mc.useMemo)(()=>new Map(n.map(b=>[b.sourceName,b.duration])),[n]),g=e.animations.clips.filter(b=>!b.hidden),y=e.animations.clips.filter(b=>b.hidden),T=(b,_=e.animations.autoplayClip)=>{t({...e,animations:{clips:b(e.animations.clips),autoplayClip:_}})},x=(b,_)=>{T(v=>v.map(P=>P.sourceName===b?_(P):P))},h=(b,_)=>{x(b,v=>({...v,loopMode:_}))},m=(b,_)=>{let v=yw(_);x(b,P=>({...P,speed:v})),i===b&&l(v)},S=(b,_)=>{x(b,v=>({...v,displayName:_}))},M=b=>{let _=e.animations.autoplayClip===b?null:b;t({...e,animations:{...e.animations,autoplayClip:_}})},C=b=>{T(_=>_.map(v=>v.sourceName===b?{...v,hidden:!0}:v),e.animations.autoplayClip===b?null:e.animations.autoplayClip),i===b&&c()},L=b=>{T(_=>_.map(v=>v.sourceName===b?{...v,hidden:!1}:v))};return e.animations.clips.length===0?(0,ve.jsx)(pa,{title:"Animations",children:(0,ve.jsx)("div",{className:"se-helperCard",children:"Upload a model with embedded animations to manage playback, naming, autoplay, and per-clip speed here."})}):(0,ve.jsxs)(pa,{title:"Animations",children:[g.length===0&&(0,ve.jsx)("div",{className:"se-helperCard",children:(0,ve.jsx)("span",{children:"Preview clips directly in the viewer, choose one optional autoplay animation, and use soft delete to hide clips without modifying the GLB."})}),g.length===0?(0,ve.jsx)("div",{className:"se-placeholder",children:"All animations are currently removed. Restore a clip below to make it available again."}):(0,ve.jsx)("div",{className:"se-animationList",children:g.map(b=>{let _=i===b.sourceName,v=f.get(b.sourceName)??0;return(0,ve.jsxs)("article",{className:`se-animationCard ${_?"se-animationCard--active":""}`,children:[(0,ve.jsxs)("div",{className:"se-animationHeader",children:[(0,ve.jsxs)("div",{className:"se-animationHeading",children:[(0,ve.jsxs)("div",{className:"se-animationTitleRow",children:[(0,ve.jsx)("span",{className:"se-animationStatus",children:_?r?"Playing":"Paused":"Ready"}),e.animations.autoplayClip===b.sourceName?(0,ve.jsx)("span",{className:"se-animationBadge",children:"Autoplay"}):null]}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationDangerButton",onClick:()=>C(b.sourceName),title:"Remove animation",children:(0,ve.jsx)(Jr.Trash2,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Display name"}),(0,ve.jsx)("input",{className:"se-textInput",value:b.displayName,onChange:z=>S(b.sourceName,z.target.value),placeholder:"Animation name"})]}),(0,ve.jsxs)("div",{className:"se-animationMeta",children:[(0,ve.jsx)("span",{children:xw(v)}),(0,ve.jsx)("span",{children:b.loopMode==="once"?"Play once":"Looping"}),(0,ve.jsxs)("span",{children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationButtonRow",children:[(()=>{let z=_&&r;return(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:()=>z?s():o(b.sourceName),"aria-label":z?"Pause":"Play",title:z?"Pause":"Play",children:z?(0,ve.jsx)(Jr.Pause,{size:16}):(0,ve.jsx)(Jr.Play,{size:16})})})(),(0,ve.jsx)("button",{type:"button",className:"se-animationButton se-animationButton--icon",onClick:c,disabled:!_,"aria-label":"Stop",title:"Stop",children:(0,ve.jsx)(Jr.Square,{size:16})})]}),(0,ve.jsxs)("div",{className:"se-animationSeekRow",children:[(0,ve.jsx)("input",{className:"se-slider se-animationSeek",type:"range",min:0,max:Math.max(v,.001),step:.01,value:_?Math.min(a,v):0,disabled:!_||v<=0,onChange:z=>u(Number(z.target.value)),"aria-label":"Seek"}),(0,ve.jsxs)("span",{className:"se-animationSeekTime",children:[kb(_?Math.min(a,v):0)," / ",kb(v)]})]}),(0,ve.jsxs)("div",{className:"se-animationGrid",children:[(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsx)("span",{className:"se-fieldLabel",children:"Loop mode"}),(0,ve.jsxs)("select",{className:"se-select",value:b.loopMode,onChange:z=>h(b.sourceName,z.target.value),children:[(0,ve.jsx)("option",{value:"repeat",children:"Loop"}),(0,ve.jsx)("option",{value:"once",children:"Play Once"})]})]}),(0,ve.jsxs)("label",{className:"se-field",children:[(0,ve.jsxs)("span",{className:"se-fieldLabel",children:["Speed",(0,ve.jsxs)("span",{className:"se-fieldValue",children:[b.speed.toFixed(2),"x"]})]}),(0,ve.jsxs)("div",{className:"se-animationSpeedRow",children:[(0,ve.jsx)("input",{className:"se-slider",type:"range",min:.1,max:3,step:.1,value:b.speed,onChange:z=>m(b.sourceName,Number(z.target.value))}),(0,ve.jsx)("input",{className:"se-numberInput se-animationSpeedInput",type:"number",min:.1,max:3,step:.1,value:b.speed,onChange:z=>m(b.sourceName,Number(z.target.value))})]})]})]}),(0,ve.jsx)("button",{type:"button",className:`se-animationAutoplayButton ${e.animations.autoplayClip===b.sourceName?"se-animationAutoplayButton--active":""}`,onClick:()=>M(b.sourceName),children:e.animations.autoplayClip===b.sourceName?"Disable autoplay":"Set as autoplay"})]},b.sourceName)})}),y.length>0?(0,ve.jsxs)("section",{className:"se-removedAnimations",children:[(0,ve.jsx)("button",{type:"button",className:"se-panelHeader",onClick:()=>p(b=>!b),children:(0,ve.jsxs)("span",{className:"se-panelHeaderMain",children:[(0,ve.jsx)(Jr.ChevronDown,{size:16,className:`se-panelChevron ${d?"se-panelChevron--open":""}`}),(0,ve.jsxs)("span",{className:"se-panelTitle",children:["Removed Animations (",y.length,")"]})]})}),d?(0,ve.jsx)("div",{className:"se-removedAnimationList",children:y.map(b=>(0,ve.jsxs)("div",{className:"se-removedAnimationRow",children:[(0,ve.jsxs)("div",{children:[(0,ve.jsx)("div",{className:"se-removedAnimationName",children:b.displayName||b.sourceName}),(0,ve.jsx)("div",{className:"se-animationSource",children:b.sourceName})]}),(0,ve.jsx)("button",{type:"button",className:"se-animationButton",onClick:()=>L(b.sourceName),children:"Restore"})]},b.sourceName))}):null]}):null]})}var Yu=require("react"),Cc=require("lucide-react");var pt=require("react/jsx-runtime");function $u({config:e,onChange:t}){let[n,i]=(0,Yu.useState)(null),[r,a]=(0,Yu.useState)({title:"",description:""}),o=e.annotations,s=d=>{i(d),a({title:d.title,description:d.description||""})},c=()=>{if(!n||!r.title.trim())return;let d=o.map(p=>p.id===n.id?{...p,title:r.title.trim(),description:r.description||""}:p);t({...e,annotations:d}),i(null),a({title:"",description:""})},l=d=>{if(window.confirm("Delete this annotation?")){let f=o.filter(g=>g.id!==d).map((g,y)=>({...g,id:y+1}));t({...e,annotations:f}),i(null),a({title:"",description:""})}},u=()=>{i(null),a({title:"",description:""})};return(0,pt.jsxs)(pa,{title:"Annotations",children:[e.annotations.length===0?(0,pt.jsx)("div",{className:"bb-emptyAnnotations",children:"No annotations yet. Double-click on the model to add one."}):(0,pt.jsx)("div",{className:"bb-annotationsList",children:e.annotations.map(d=>(0,pt.jsxs)("div",{className:"bb-annotationCard",children:[(0,pt.jsxs)("div",{className:"bb-annotationHeader",children:[(0,pt.jsxs)("div",{className:"bb-annotationBadge",children:["#",d.id]}),(0,pt.jsxs)("div",{className:"bb-annotationActions",children:[(0,pt.jsx)("button",{className:"bb-annotationAction bb-annotationAction--edit",onClick:()=>s(d),title:"Edit annotation",children:(0,pt.jsx)(Cc.Pencil,{size:16})}),(0,pt.jsx)("button",{className:"bb-annotationAction bb-annotationAction--delete",onClick:()=>l(d.id),title:"Delete annotation",children:(0,pt.jsx)(Cc.Trash2,{size:16})})]})]}),(0,pt.jsx)("div",{className:"bb-annotationTitle",children:d.title}),d.description&&(0,pt.jsx)("div",{className:"bb-annotationDescription",children:d.description}),(0,pt.jsxs)("div",{className:"bb-annotationPosition",children:["Position: [",d.worldPosition[0].toFixed(2),","," ",d.worldPosition[1].toFixed(2),","," ",d.worldPosition[2].toFixed(2),"]"]})]},d.id))}),n&&(0,pt.jsx)("div",{className:"bb-editAnnotationOverlay",onClick:u,children:(0,pt.jsxs)("div",{className:"bb-editAnnotationPopup",onClick:d=>d.stopPropagation(),children:[(0,pt.jsxs)("div",{className:"bb-editAnnotationHeader",children:[(0,pt.jsx)("h3",{className:"bb-editAnnotationTitle",children:"Edit Annotation"}),(0,pt.jsx)("button",{className:"bb-editAnnotationClose",onClick:u,children:"\xD7"})]}),(0,pt.jsxs)("div",{className:"bb-editAnnotationBody",children:[(0,pt.jsxs)("div",{className:"bb-field",children:[(0,pt.jsx)("label",{className:"bb-label",children:"Title"}),(0,pt.jsx)("input",{className:"bb-input",value:r.title,onChange:d=>a({...r,title:d.target.value}),placeholder:"Enter annotation title"})]}),(0,pt.jsxs)("div",{className:"bb-field",children:[(0,pt.jsx)("label",{className:"bb-label",children:"Description"}),(0,pt.jsx)("textarea",{className:"bb-textarea",value:r.description,onChange:d=>a({...r,description:d.target.value}),placeholder:"Enter annotation description",rows:3})]}),(0,pt.jsxs)("div",{className:"bb-editAnnotationActions",children:[(0,pt.jsx)("button",{className:"bb-button",onClick:u,children:"Cancel"}),(0,pt.jsx)("button",{className:"bb-button bb-button--primary",onClick:c,disabled:!r.title.trim(),children:"Save"}),(0,pt.jsx)("button",{className:"bb-button bb-button--danger",onClick:()=>l(n.id),children:"Delete"})]})]})]})})]})}var Qr=require("react"),yr=require("lucide-react");var Te=require("react/jsx-runtime"),ww={enabled:!0,waypoints:[],loop:!0,autoPlay:!1},ma=3.5;function Ku({config:e,onChange:t,cameraState:n,onPreviewWaypoint:i}){let r=e.cinematic??ww,{waypoints:a}=r,o=(0,Qr.useCallback)((x,h)=>{if(x.length<2)return 0;let m=0;for(let S=0;S<x.length-1;S++){let M=x[S].segmentDuration??ma;m+=M}return h&&x.length>1&&(m+=x[x.length-1].segmentDuration??ma),Math.max(m,0)},[]),s=(0,Qr.useCallback)(x=>{t({...e,cinematic:{...r,...x}})},[e,r,t]),c=(0,Qr.useCallback)(()=>{if(!n)return;let x={position:[...n.position],target:[...n.target],...n.azimuthAngle!=null?{azimuthAngle:n.azimuthAngle}:{},...n.polarAngle!=null?{polarAngle:n.polarAngle}:{},segmentDuration:ma},h=[...a,x],m=o(h,r.loop);s({waypoints:h,duration:m})},[n,a,r.loop,o,s]),l=(0,Qr.useCallback)(x=>{let h=a.filter((S,M)=>M!==x),m=o(h,r.loop);s({waypoints:h,duration:m})},[a,r.loop,o,s]),u=(0,Qr.useCallback)((x,h)=>{let m=x+h;if(m<0||m>=a.length)return;let S=[...a];[S[x],S[m]]=[S[m],S[x]];let M=o(S,r.loop);s({waypoints:S,duration:M})},[a,r.loop,o,s]),d=(0,Qr.useCallback)((x,h)=>{let m=a.map((M,C)=>C===x?{...M,...h}:M),S=o(m,r.loop);s({waypoints:m,duration:S})},[a,r.loop,o,s]),[p,f]=(0,Qr.useState)(!1),g=a.some(x=>x.segmentDuration!==void 0),y=(0,Qr.useCallback)(x=>x>=a.length-1?ma:a[x]?.segmentDuration??ma,[a]),T=a.length>=2;return(0,Te.jsxs)(pa,{title:"Cinematic Camera",children:[(0,Te.jsx)("p",{className:"se-cinematicHint",children:"Frame the model in the viewer, then capture it as a waypoint. The camera glides through the waypoints in order \u2014 enable and press play in the viewer to preview."}),(0,Te.jsxs)("button",{type:"button",className:"bb-button bb-button--primary se-cinematicAdd",onClick:c,disabled:!n,title:"Capture the current camera view as a waypoint",children:[(0,Te.jsx)(yr.Plus,{size:15}),"Add waypoint from current view"]}),(0,Te.jsxs)("div",{className:"se-customizeToggle",children:[(0,Te.jsxs)("label",{className:"se-toggleLabel",children:[(0,Te.jsx)("input",{type:"checkbox",checked:p,onChange:x=>f(x.target.checked)}),(0,Te.jsx)(yr.Settings,{size:14}),(0,Te.jsx)("span",{children:"Customize durations between waypoints"})]}),p&&(0,Te.jsxs)("span",{className:"se-toggleHint",children:["Set duration for each segment between waypoints: 1\u21922, 2\u21923, etc. Default: ",ma,"s"]})]}),a.length===0?(0,Te.jsx)("div",{className:"bb-emptyAnnotations",children:"No waypoints yet. Position the camera and add your first one."}):(0,Te.jsxs)(Te.Fragment,{children:[(0,Te.jsx)("div",{className:"se-waypointList",children:a.map((x,h)=>{let m=y(h),S=h===a.length-1,M=x.segmentDuration!==void 0&&x.segmentDuration!==ma;return(0,Te.jsxs)("div",{children:[(0,Te.jsxs)("div",{className:"se-waypointCard",children:[(0,Te.jsx)("div",{className:"se-waypointBadge",children:h+1}),(0,Te.jsxs)("div",{className:"se-waypointBody",children:[(0,Te.jsxs)("div",{className:"se-waypointCoords",children:["pos [",x.position.map(C=>C.toFixed(1)).join(", "),"]"]}),(0,Te.jsxs)("div",{className:"se-waypointCoords",children:["look [",x.target.map(C=>C.toFixed(1)).join(", "),"]"]}),p&&!S&&(0,Te.jsxs)("div",{className:`se-customBadge ${M?"se-customBadge--custom":"se-customBadge--default"}`,children:[m.toFixed(1),"s",!M&&" (default)"]})]}),(0,Te.jsxs)("div",{className:"se-waypointActions",children:[(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>i?.(x),title:"Fly camera to this waypoint",disabled:!i,children:(0,Te.jsx)(yr.MapPin,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>u(h,-1),title:"Move up",disabled:h===0,children:(0,Te.jsx)(yr.ArrowUp,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction",onClick:()=>u(h,1),title:"Move down",disabled:S,children:(0,Te.jsx)(yr.ArrowDown,{size:15})}),(0,Te.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:()=>l(h),title:"Delete waypoint",children:(0,Te.jsx)(yr.Trash2,{size:15})})]})]}),p&&!S&&(0,Te.jsxs)("div",{className:"se-segmentBetween",children:[(0,Te.jsxs)("div",{className:"se-segmentLabel",children:[h+1," \u2192 ",h+2,!x.segmentDuration&&" (default)"]}),(0,Te.jsxs)("div",{className:"se-segmentControls",children:[(0,Te.jsx)("span",{className:"se-durationLabel",children:"Duration:"}),(0,Te.jsx)("input",{type:"range",className:"se-segmentSlider",min:1,max:20,step:.5,value:m,onChange:C=>{let L=parseFloat(C.target.value);d(h,{segmentDuration:L})}}),(0,Te.jsxs)("span",{className:"se-segmentValue",children:[m.toFixed(1),"s"]}),(0,Te.jsxs)("div",{className:"se-presetButtons",children:[[2,4,6,8].map(C=>(0,Te.jsxs)("button",{className:"se-presetButton",onClick:()=>d(h,{segmentDuration:C}),children:[C,"s"]},`preset-${h}-${C}`)),(0,Te.jsx)("button",{className:"se-presetButton se-presetButton--default",onClick:()=>{let C=a.map((b,_)=>{if(_===h){let{segmentDuration:v,...P}=b;return P}return b}),L=o(C,r.loop);s({waypoints:C,duration:L})},children:"Reset"})]})]})]})]},`waypoint-wrapper-${h}`)})}),(0,Te.jsxs)("div",{className:"se-totalDuration",children:[(0,Te.jsx)("span",{className:"se-totalLabel",children:"Total duration:"}),(0,Te.jsx)("span",{className:"se-totalValue",children:T?(r.duration??o(a,r.loop)).toFixed(1)+"s":"-"}),!T&&(0,Te.jsx)("span",{className:"se-totalHint",children:"(need at least 2 waypoints)"})]})]}),(0,Te.jsx)(yt,{label:"Enable cinematic camera",checked:r.enabled,onChange:x=>s({enabled:x})}),(0,Te.jsx)(yt,{label:"Loop",checked:r.loop,onChange:x=>{let h=x,m=o(a,h);s({loop:h,duration:m})}}),(0,Te.jsx)(yt,{label:"Auto-play on load",checked:r.autoPlay,onChange:x=>s({autoPlay:x})}),!p&&T&&(0,Te.jsx)(Z,{label:"Duration",value:r.duration??o(a,r.loop),min:4,max:120,step:1,formatValue:x=>`${x}s`,onChange:x=>s({duration:x})})]})}var wr=require("lucide-react");var dn=require("react/jsx-runtime"),_w=[{label:"General",icon:(0,dn.jsx)(wr.Box,{})},{label:"Lighting",icon:(0,dn.jsx)(wr.Spotlight,{})},{label:"Animations",icon:(0,dn.jsx)(wr.Clapperboard,{})},{label:"Post Processing",icon:(0,dn.jsx)(wr.Sparkles,{})},{label:"Annotations",icon:(0,dn.jsx)(wr.MessageSquareText,{})},{label:"Cinematic",icon:(0,dn.jsx)(wr.Video,{})}],Bb={currentClip:null,isPlaying:!1,time:0,duration:0,play:()=>{},pause:()=>{},stop:()=>{},setSpeed:()=>{},seek:()=>{}};function Zu({config:e,onChange:t,activeSubTab:n,onActiveSubTabChange:i,cameraState:r=null,onPreviewWaypoint:a,animationClipDetails:o=[],animationPlayback:s=Bb}){let[c,l]=(0,Tc.useState)("General"),u=n??c,d=s??Bb,{tier:p}=vr(),f=fi(p,"starter"),g=fi(p,"growth");(0,Tc.useEffect)(()=>{n!==void 0&&l(n)},[n]);let y=T=>{n===void 0&&l(T),i?.(T)};return(0,dn.jsxs)("div",{className:"se-tabContent",children:[(0,dn.jsx)("div",{className:"se-subTabRow",children:_w.map(T=>(0,dn.jsx)("button",{type:"button",title:T.label,className:`se-subTab ${u===T.label?"se-subTab--active":""}`,onClick:()=>y(T.label),children:T.icon},T.label))}),u==="General"&&(0,dn.jsx)(Gu,{config:e,onChange:t}),u==="Lighting"&&(0,dn.jsx)(Xu,{config:e,onChange:t}),u==="Animations"&&(f?(0,dn.jsx)(qu,{config:e,onChange:t,clipDetails:o,currentClip:d.currentClip,isPlaying:d.isPlaying,time:d.time,duration:d.duration,play:d.play,pause:d.pause,stop:d.stop,setSpeed:d.setSpeed,seek:d.seek}):(0,dn.jsx)(Yn,{requiredTier:"starter",feature:"Animation configuration"})),u==="Post Processing"&&(g?(0,dn.jsx)(Wu,{config:e,onChange:t}):(0,dn.jsx)(Yn,{requiredTier:"growth",feature:"Post-processing effects"})),u==="Annotations"&&(f?(0,dn.jsx)($u,{config:e,onChange:t}):(0,dn.jsx)(Yn,{requiredTier:"starter",feature:"Annotations"})),u==="Cinematic"&&(f?(0,dn.jsx)(Ku,{config:e,onChange:t,cameraState:r,onPreviewWaypoint:a}):(0,dn.jsx)(Yn,{requiredTier:"starter",feature:"Cinematic camera"}))]})}var po=require("lucide-react"),Zt=require("react/jsx-runtime");function Db({title:e,trailing:t,children:n,disabled:i,open:r,onToggle:a,tooltip:o}){let s=o?`${o}`:e;return(0,Zt.jsxs)("div",{className:"bb-materialPanel",children:[(0,Zt.jsxs)("button",{type:"button",className:"bb-materialPanelHeader",onClick:a,"aria-expanded":r,title:s,children:[(0,Zt.jsxs)("div",{className:"bb-materialPanelTitleWrap",children:[(0,Zt.jsx)(po.ChevronDown,{size:14,className:`bb-materialPanelChevron ${r?"bb-materialPanelChevron--open":""}`}),(0,Zt.jsx)("span",{className:"bb-materialPanelTitle",children:e}),o?(0,Zt.jsx)("span",{className:"bb-materialPanelHelp",title:s,"aria-label":s,role:"img",onClick:c=>c.stopPropagation(),children:(0,Zt.jsx)(po.Info,{size:12})}):null]}),t?(0,Zt.jsx)("div",{onClick:c=>c.stopPropagation(),children:t}):null]}),r?(0,Zt.jsx)("div",{className:"bb-materialPanelBody",style:i?{opacity:.45,pointerEvents:"none"}:void 0,children:n}):null]})}function $n({title:e,open:t,onToggle:n,trailing:i,children:r,tooltip:a}){let o=a?`${e}: ${a}`:e;return(0,Zt.jsxs)("div",{className:"bb-section",children:[(0,Zt.jsxs)("button",{type:"button",className:"bb-sectionHeaderButton",onClick:n,"aria-expanded":t,title:o,children:[(0,Zt.jsxs)("span",{className:"bb-sectionHeaderMain",children:[(0,Zt.jsx)(po.ChevronDown,{size:15,className:`bb-sectionChevron ${t?"bb-sectionChevron--open":""}`}),(0,Zt.jsx)("h2",{className:"bb-sectionTitle",children:e}),a?(0,Zt.jsx)("span",{className:"bb-sectionHelp",title:o,"aria-label":o,role:"img",onClick:s=>s.stopPropagation(),children:(0,Zt.jsx)(po.Info,{size:13})}):null]}),i?(0,Zt.jsx)("span",{onClick:s=>s.stopPropagation(),children:i}):null]}),t?(0,Zt.jsx)("div",{className:"bb-sectionBody",children:r}):null]})}function Nb({checked:e,onChange:t,label:n}){return(0,Zt.jsxs)("label",{className:"se-switch","aria-label":n,children:[(0,Zt.jsx)("input",{type:"checkbox",checked:e,onChange:i=>t(i.target.checked)}),(0,Zt.jsx)("span",{className:"se-switchTrack",children:(0,Zt.jsx)("span",{className:"se-switchThumb"})})]})}var Ju=require("react");var Pc=["front","back","double"],Ac=["normal","additive"];var Ec=require("react/jsx-runtime");function nr({panelKey:e,title:t,tooltip:n,toggleLabel:i,controls:r,children:a,requiredTier:o}){let{openMaterialPanels:s,materialPanelEnabled:c,onToggleMaterialPanel:l,onSetMaterialPanelState:u}=r,d=o?.locked??!1;return(0,Ec.jsx)(Db,{title:t,tooltip:n,disabled:d||!c[e],open:s[e],onToggle:()=>l(e),trailing:(0,Ec.jsx)(Nb,{checked:!d&&c[e],onChange:d?()=>{}:p=>u(e,p),label:i??`Toggle ${t}`}),children:d&&o?(0,Ec.jsx)(Yn,{requiredTier:o.tier,feature:t}):a})}var Ps=require("react"),Rc=require("react-colorful"),Ob=require("lucide-react");var wt=require("react/jsx-runtime");function bn({label:e,value:t,placeholder:n,onChange:i}){let r=(0,Ps.useRef)(null);return(0,wt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,wt.jsx)("label",{className:"bb-label",children:e}),(0,wt.jsxs)("div",{className:"bb-fileField",children:[(0,wt.jsx)("input",{className:"bb-input bb-fileField-input",placeholder:n,value:t,onChange:a=>{let o=a.target.value;!o&&t&&Pd(t),i(o)}}),(0,wt.jsx)("button",{type:"button",className:"bb-fileFieldButton",onClick:()=>r.current?.click(),"aria-label":`Select file for ${e}`,title:`Select file for ${e}`,children:(0,wt.jsx)(Ob.FileUp,{size:20})}),(0,wt.jsx)("input",{ref:r,type:"file",accept:"image/png,image/jpeg,image/webp,image/avif",className:"bb-hiddenInput",onChange:a=>{let o=a.target.files?.[0];if(!o)return;let s=zh(o);t&&t!==s&&Pd(t),jh(s,URL.createObjectURL(o)),i(s),a.target.value=""}})]})]})}function fa({label:e,value:t,fallback:n="#ffffff",onChange:i}){let[r,a]=(0,Ps.useState)(!1),o=t||n,s=(0,Ps.useRef)(null);return(0,wt.jsxs)("div",{className:"bb-field",children:[(0,wt.jsx)("span",{className:"bb-label",children:e}),(0,wt.jsx)("div",{className:"se-fieldInline",children:(0,wt.jsx)("span",{ref:s,style:{display:"inline-flex"},children:(0,wt.jsx)(Rc.HexColorInput,{prefixed:!0,className:"se-swatch",onClick:()=>a(c=>!c),style:{background:o,color:uo(o)},color:o,onChange:i})})}),r?(0,wt.jsx)(Hu,{anchorRef:s,onClose:()=>a(!1),children:(0,wt.jsx)(Rc.HexColorPicker,{color:o,onChange:i})}):null]})}function As({label:e,checked:t,onChange:n}){return(0,wt.jsxs)("label",{className:"bb-checkbox",children:[(0,wt.jsx)("input",{type:"checkbox",checked:t,onChange:i=>n(i.target.checked)}),e]})}function Ib({label:e,value:t,min:n,max:i,step:r,placeholder:a,onChange:o}){return(0,wt.jsxs)("div",{className:"bb-field",children:[(0,wt.jsx)("label",{className:"bb-label",children:e}),(0,wt.jsx)("input",{className:"bb-input",type:"number",min:n,max:i,step:r,placeholder:a,value:t??"",onChange:s=>o(s.target.value===""?void 0:Number(s.target.value))})]})}function ho({label:e,value:t,options:n,onChange:i}){return(0,wt.jsxs)("div",{className:"bb-field",children:[(0,wt.jsx)("label",{className:"bb-label",children:e}),(0,wt.jsx)("select",{className:"bb-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,wt.jsx)("option",{value:r,children:r},r))})]})}function Jt({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,wt.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,wt.jsx)("label",{className:"bb-label",children:e}),(0,wt.jsxs)("div",{className:"bb-sliderField",children:[(0,wt.jsx)("input",{className:`bb-slider ${t===void 0?"bb-slider--unset":""}`,type:"range",min:n,max:i,step:r,value:t??n,onChange:s=>a(Number(s.target.value))}),(0,wt.jsx)("input",{className:"bb-input bb-input--compact",type:"number",min:n,max:i,step:r,value:t??"",onChange:s=>a(s.target.value===""?void 0:Number(s.target.value))})]})]})}var K=require("react/jsx-runtime");function zb({selectedItem:e,selectedMaterial:t,pbrWorkflow:n,onPbrWorkflowChange:i,openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s,updateSelectedMaterial:c,setSelectedTexturePath:l}){let u={openMaterialPanels:r,materialPanelEnabled:a,onToggleMaterialPanel:o,onSetMaterialPanelState:s},{tier:d}=vr(),p=fi(d,"starter"),f={tier:"starter",locked:!p},[g,y]=(0,Ju.useState)("roughness"),[T,x]=(0,Ju.useState)("factor");return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(nr,{panelKey:"pbr",title:"PBR Maps",tooltip:"Controls the base color and workflow used for physically based shading.",controls:u,children:p?(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(ho,{label:"Workflow",value:n,options:["metalness","specular"],onChange:i}),(0,K.jsx)("div",{className:"bb-field bb-field--full",children:(0,K.jsx)("p",{className:"bb-note",style:{margin:0},children:n==="metalness"?"Metalness workflow maps directly to the underlying physical material.":"Specular workflow exposes the same physical material with non-metal specular controls; it does not switch to a separate spec/gloss shader."})}),(0,K.jsx)(bn,{label:n==="specular"?"Albedo texture path":"Base color texture path",placeholder:"materials/oak-wood.jpg",value:t?.texture?.path??"",onChange:h=>l(e,"texture",h)}),(0,K.jsx)(fa,{label:n==="specular"?"Albedo color":"Base color",value:t?.baseColor??"#ffffff",onChange:h=>c(e,m=>({...m,baseColor:h}))}),n==="metalness"?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Jt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,metalness:h}))}),(0,K.jsx)(bn,{label:"Metalness map path",placeholder:"materials/body-metalness.jpg",value:t?.metalnessMap?.path??"",onChange:h=>l(e,"metalnessMap",h)})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(Jt,{label:"Specular intensity",value:t?.specularIntensity,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,specularIntensity:h}))}),(0,K.jsx)(fa,{label:"Specular color",value:t?.specularColor??"#ffffff",onChange:h=>c(e,m=>({...m,specularColor:h}))}),(0,K.jsx)(bn,{label:"Specular intensity map path",placeholder:"materials/body-specular-intensity.jpg",value:t?.specularIntensityMap?.path??"",onChange:h=>l(e,"specularIntensityMap",h)}),(0,K.jsx)(bn,{label:"Specular color map path",placeholder:"materials/body-specular-color.jpg",value:t?.specularColorMap?.path??"",onChange:h=>l(e,"specularColorMap",h)})]}),(0,K.jsx)(Jt,{label:"Specular F0 / reflectivity",value:t?.reflectivity,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,reflectivity:h}))})]}):(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(fa,{label:"Base color",value:t?.baseColor??"#ffffff",onChange:h=>c(e,m=>({...m,baseColor:h}))}),(0,K.jsx)(Jt,{label:"Metalness",value:t?.metalness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,metalness:h}))}),(0,K.jsx)("div",{className:"bb-field bb-field--full",children:(0,K.jsx)(Yn,{requiredTier:"starter",feature:"Texture maps, the specular workflow, and reflectivity"})})]})}),(0,K.jsx)(nr,{panelKey:"roughness",requiredTier:f,title:"Roughness / Glossiness",tooltip:"Adjusts how matte or shiny the surface appears.",toggleLabel:"Toggle Roughness and Glossiness",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(ho,{label:"Mode",value:g,options:["roughness","glossiness"],onChange:y}),(0,K.jsx)("div",{className:"bb-field bb-field--full",children:(0,K.jsx)("p",{className:"bb-note",style:{margin:0},children:g==="roughness"?"Roughness: 0 is glossy, 1 is matte.":"Glossiness is the inverse of roughness (glossiness = 1 \u2212 roughness)"})}),g==="roughness"?(0,K.jsx)(Jt,{label:"Roughness",value:t?.roughness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,roughness:h}))}):(0,K.jsx)(Jt,{label:"Glossiness",value:t?.roughness===void 0?void 0:1-t.roughness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,roughness:h===void 0?void 0:1-h}))}),(0,K.jsx)(bn,{label:g==="glossiness"?"Glossiness map path (applied as roughness)":"Roughness map path",placeholder:"materials/body-roughness.jpg",value:t?.roughnessMap?.path??"",onChange:h=>l(e,"roughnessMap",h)})]})}),(0,K.jsx)(nr,{panelKey:"emission",requiredTier:f,title:"Emission",tooltip:"Makes the material self-illuminated with emissive color and intensity.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(fa,{label:"Emissive color",value:t?.emissive??"#000000",fallback:"#000000",onChange:h=>c(e,m=>({...m,emissive:h}))}),(0,K.jsx)(Jt,{label:"Emissive intensity",value:t?.emissiveIntensity,min:0,max:10,step:.1,onChange:h=>c(e,m=>({...m,emissiveIntensity:h}))}),(0,K.jsx)(bn,{label:"Emissive map path",placeholder:"materials/body-emissive.jpg",value:t?.emissiveMap?.path??"",onChange:h=>l(e,"emissiveMap",h)})]})}),(0,K.jsx)(nr,{panelKey:"opacity",requiredTier:f,title:"Opacity",tooltip:"Controls transparency, alpha testing, and blending behavior.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Jt,{label:"Opacity",value:t?.opacity,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,opacity:h}))}),(0,K.jsx)(Jt,{label:"Alpha test",value:t?.alphaTest,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,alphaTest:h}))}),(0,K.jsx)(bn,{label:"Alpha map path",placeholder:"materials/body-alpha.png",value:t?.alphaMap?.path??"",onChange:h=>l(e,"alphaMap",h)}),(0,K.jsx)(ho,{label:"Blending mode",value:t?.blendingMode??"normal",options:Ac,onChange:h=>c(e,m=>({...m,blendingMode:h}))}),(0,K.jsxs)("div",{className:"bb-field",children:[(0,K.jsx)("label",{className:"bb-label",children:"Alpha hash"}),(0,K.jsx)("div",{className:"bb-checkboxRow",children:(0,K.jsx)(As,{label:"Use alpha hash",checked:t?.alphaHash??!1,onChange:h=>c(e,m=>({...m,alphaHash:h}))})})]}),(0,K.jsxs)("div",{className:"bb-field",children:[(0,K.jsx)("label",{className:"bb-label",children:"Dithering"}),(0,K.jsx)("div",{className:"bb-checkboxRow",children:(0,K.jsx)(As,{label:"Use dithering",checked:t?.dithering??!1,onChange:h=>c(e,m=>({...m,dithering:h}))})})]})]})}),(0,K.jsxs)(nr,{panelKey:"normalBump",requiredTier:f,title:"Normal & Bump",tooltip:"Adds surface detail without changing the actual mesh shape.",toggleLabel:"Toggle Normal and Bump",controls:u,children:[(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(bn,{label:"Normal map path",placeholder:"materials/body-normal.jpg",value:t?.normalMap?.path??"",onChange:h=>l(e,"normalMap",h)}),(0,K.jsx)(Jt,{label:"Normal scale",value:t?.normalScale,min:0,max:5,step:.01,onChange:h=>c(e,m=>({...m,normalScale:h}))}),(0,K.jsx)(bn,{label:"Bump map path",placeholder:"materials/body-bump.jpg",value:t?.bumpMap?.path??"",onChange:h=>l(e,"bumpMap",h)}),(0,K.jsx)(Jt,{label:"Bump scale",value:t?.bumpScale,min:0,max:5,step:.01,onChange:h=>c(e,m=>({...m,bumpScale:h}))})]}),(0,K.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,K.jsx)(As,{label:"Flip normal Y",checked:t?.flipNormalY??!1,onChange:h=>c(e,m=>({...m,flipNormalY:h}))})})]}),(0,K.jsx)(nr,{panelKey:"displacement",requiredTier:f,title:"Displacement",tooltip:"Offsets geometry using a texture to create real surface height.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(bn,{label:"Displacement map path",placeholder:"materials/body-displacement.jpg",value:t?.displacementMap?.path??"",onChange:h=>l(e,"displacementMap",h)}),(0,K.jsx)(Jt,{label:"Displacement scale",value:t?.displacementScale,min:-5,max:5,step:.01,onChange:h=>c(e,m=>({...m,displacementScale:h}))}),(0,K.jsx)(Jt,{label:"Displacement bias",value:t?.displacementBias,min:-5,max:5,step:.01,onChange:h=>c(e,m=>({...m,displacementBias:h}))})]})}),(0,K.jsx)(nr,{panelKey:"ao",requiredTier:f,title:"Ambient Occlusion",tooltip:"Darkens creases and contact areas to add depth.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(bn,{label:"AO map path",placeholder:"materials/body-ao.jpg",value:t?.aoMap?.path??"",onChange:h=>l(e,"aoMap",h)}),(0,K.jsx)(Jt,{label:"AO intensity",value:t?.aoMapIntensity,min:0,max:5,step:.01,onChange:h=>c(e,m=>({...m,aoMapIntensity:h}))})]})}),(0,K.jsxs)(nr,{panelKey:"clearcoat",requiredTier:f,title:"Clearcoat",tooltip:"Adds a glossy protective layer on top of the base material.",controls:u,children:[(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(bn,{label:"Clearcoat map path",placeholder:"materials/body-clearcoat.jpg",value:t?.clearcoatMap?.path??"",onChange:h=>l(e,"clearcoatMap",h)}),(0,K.jsx)(Jt,{label:"Clearcoat",value:t?.clearcoat,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,clearcoat:h}))}),(0,K.jsx)(bn,{label:"Clearcoat roughness map path",placeholder:"materials/body-clearcoat-roughness.jpg",value:t?.clearcoatRoughnessMap?.path??"",onChange:h=>l(e,"clearcoatRoughnessMap",h)}),(0,K.jsx)(Jt,{label:"Clearcoat roughness",value:t?.clearcoatRoughness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,clearcoatRoughness:h}))}),(0,K.jsx)(bn,{label:"Clearcoat normal map path",placeholder:"materials/body-clearcoat-normal.jpg",value:t?.clearcoatNormalMap?.path??"",onChange:h=>l(e,"clearcoatNormalMap",h)}),(0,K.jsx)(Jt,{label:"Clearcoat normal scale",value:t?.clearcoatNormalScale,min:0,max:5,step:.01,onChange:h=>c(e,m=>({...m,clearcoatNormalScale:h}))})]}),(0,K.jsx)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:(0,K.jsx)(As,{label:"Flip clearcoat normal Y",checked:t?.flipClearcoatNormalY??!1,onChange:h=>c(e,m=>({...m,flipClearcoatNormalY:h}))})})]}),(0,K.jsx)(nr,{panelKey:"sheen",requiredTier:f,title:"Sheen",tooltip:"Adds a soft fabric-like sheen on grazing angles.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Jt,{label:"Sheen",value:t?.sheen,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,sheen:h}))}),(0,K.jsx)(fa,{label:"Sheen color",value:t?.sheenColor??"#ffffff",onChange:h=>c(e,m=>({...m,sheenColor:h}))}),(0,K.jsx)(bn,{label:"Sheen color map path",placeholder:"materials/body-sheen-color.jpg",value:t?.sheenColorMap?.path??"",onChange:h=>l(e,"sheenColorMap",h)}),(0,K.jsx)(Jt,{label:"Sheen roughness",value:t?.sheenRoughness,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,sheenRoughness:h}))}),(0,K.jsx)(bn,{label:"Sheen roughness map path",placeholder:"materials/body-sheen-roughness.jpg",value:t?.sheenRoughnessMap?.path??"",onChange:h=>l(e,"sheenRoughnessMap",h)})]})}),(0,K.jsx)(nr,{panelKey:"anisotropy",requiredTier:f,title:"Anisotropy",tooltip:"Stretches reflections in one direction for brushed or fiber-like surfaces.",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Jt,{label:"Intensity",value:t?.anisotropy,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,anisotropy:h}))}),(0,K.jsx)(ho,{label:"Tilt direction",value:T,options:["factor","texture"],onChange:x}),T==="factor"?(0,K.jsx)(Jt,{label:"Rotation (rad)",value:t?.anisotropyRotation,min:0,max:6.28,step:.01,onChange:h=>c(e,m=>({...m,anisotropyRotation:h}))}):(0,K.jsx)(bn,{label:"Anisotropy map path",placeholder:"materials/body-anisotropy.jpg",value:t?.anisotropyMap?.path??"",onChange:h=>l(e,"anisotropyMap",h)})]})}),(0,K.jsx)(nr,{panelKey:"transmission",requiredTier:f,title:"Transmission & Volume",tooltip:"Controls glass-like transmission and how light travels through volume.",toggleLabel:"Toggle Transmission and Volume",controls:u,children:(0,K.jsxs)("div",{className:"bb-grid",children:[(0,K.jsx)(Jt,{label:"Transmission",value:t?.transmission,min:0,max:1,step:.01,onChange:h=>c(e,m=>({...m,transmission:h}))}),(0,K.jsx)(bn,{label:"Transmission map path",placeholder:"materials/body-transmission.jpg",value:t?.transmissionMap?.path??"",onChange:h=>l(e,"transmissionMap",h)}),(0,K.jsx)(Jt,{label:"Thickness",value:t?.thickness,min:0,max:5,step:.01,onChange:h=>c(e,m=>({...m,thickness:h}))}),(0,K.jsx)(bn,{label:"Thickness map path",placeholder:"materials/body-thickness.jpg",value:t?.thicknessMap?.path??"",onChange:h=>l(e,"thicknessMap",h)}),(0,K.jsx)(fa,{label:"Volume tint",value:t?.attenuationColor??"#ffffff",onChange:h=>c(e,m=>({...m,attenuationColor:h}))}),(0,K.jsx)(Ib,{label:"Attenuation distance",value:t?.attenuationDistance,min:0,step:.01,placeholder:"Infinity when unset",onChange:h=>c(e,m=>({...m,attenuationDistance:h}))})]})}),(0,K.jsx)(nr,{panelKey:"faces",requiredTier:f,title:"Faces Rendering",tooltip:"Chooses which side of the mesh renders and how backfaces are handled.",controls:u,children:(0,K.jsx)("div",{className:"bb-grid",children:(0,K.jsx)(ho,{label:"Side",value:t?.side??"front",options:Pc,onChange:h=>c(e,m=>({...m,side:h}))})})})]})}var Ub=[{id:"wood",label:"Wood",swatch:"#8b5a2b",material:{baseColor:"#8b5a2b",metalness:0,roughness:.75,reflectivity:.04}},{id:"brushed-metal",label:"Brushed Metal",swatch:"linear-gradient(135deg, #cfcfcf, #8a8a8a)",material:{baseColor:"#c8c8c8",metalness:1,roughness:.35}},{id:"chrome",label:"Polished Chrome",swatch:"linear-gradient(135deg, #ffffff, #9aa0a6)",material:{baseColor:"#e8e8e8",metalness:1,roughness:.05}},{id:"gold",label:"Gold",swatch:"linear-gradient(135deg, #ffe9a8, #c89b2c)",material:{baseColor:"#e6b325",metalness:1,roughness:.2}},{id:"copper",label:"Copper",swatch:"linear-gradient(135deg, #e3a576, #8a4a26)",material:{baseColor:"#b87333",metalness:1,roughness:.3}},{id:"glass",label:"Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.9), rgba(180,210,230,0.4))",material:{baseColor:"#ffffff",metalness:0,roughness:.02,reflectivity:.5,opacity:1,transmission:1,thickness:.5,attenuationColor:"#ffffff",attenuationDistance:1}},{id:"frosted-glass",label:"Frosted Glass",swatch:"linear-gradient(135deg, rgba(255,255,255,0.85), rgba(210,225,235,0.6))",material:{baseColor:"#ffffff",metalness:0,roughness:.4,reflectivity:.3,opacity:1,transmission:.9,thickness:.5}},{id:"plastic-glossy",label:"Glossy Plastic",swatch:"#dadada",material:{baseColor:"#dadada",metalness:0,roughness:.25,reflectivity:.5,clearcoat:.3,clearcoatRoughness:.1}},{id:"plastic-matte",label:"Matte Plastic",swatch:"#9a9a9a",material:{baseColor:"#9a9a9a",metalness:0,roughness:.85,reflectivity:.04}},{id:"rubber",label:"Rubber",swatch:"#1a1a1a",material:{baseColor:"#1a1a1a",metalness:0,roughness:.9,reflectivity:.02}},{id:"fabric",label:"Fabric",swatch:"#9c8a6b",material:{baseColor:"#9c8a6b",metalness:0,roughness:.95,sheen:.4,sheenColor:"#ffffff",sheenRoughness:.6}},{id:"ceramic",label:"Ceramic",swatch:"#f5f5f0",material:{baseColor:"#f5f5f0",metalness:0,roughness:.15,clearcoat:.6,clearcoatRoughness:.1}},{id:"concrete",label:"Concrete",swatch:"#9b9b93",material:{baseColor:"#9b9b93",metalness:0,roughness:.95,reflectivity:.03}}];var mo=require("react/jsx-runtime");function Vb({disabled:e,onApply:t}){return(0,mo.jsx)("div",{className:"bb-presetGallery",children:Ub.map(n=>(0,mo.jsxs)("button",{type:"button",className:"bb-presetSwatch",disabled:e,title:`Apply ${n.label} preset`,onClick:()=>t(n.material),children:[(0,mo.jsx)("span",{className:"bb-presetSwatchColor",style:{background:n.swatch}}),(0,mo.jsx)("span",{className:"bb-presetSwatchLabel",children:n.label})]},n.id))})}var fo=require("react"),Ui=require("lucide-react"),Ur=require("react/jsx-runtime");function Qu({disabled:e,exporting:t,onExportJson:n,onExportTs:i}){let[r,a]=(0,fo.useState)(!1),o=(0,fo.useRef)(null);return(0,fo.useEffect)(()=>{if(!r)return;let s=c=>{o.current?.contains(c.target)||a(!1)};return window.addEventListener("pointerdown",s),()=>window.removeEventListener("pointerdown",s)},[r]),(0,Ur.jsxs)("div",{className:"bb-exportMenuWrapper",ref:o,children:[(0,Ur.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:e||t,onClick:()=>a(s=>!s),title:"Export",children:[(0,Ur.jsx)(Ui.Download,{size:14}),t?"Exporting\u2026":"Export",(0,Ur.jsx)(Ui.ChevronDown,{size:12})]}),r&&(0,Ur.jsxs)("div",{className:"bb-exportMenu",children:[(0,Ur.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),n()},children:[(0,Ur.jsx)(Ui.FileJson,{size:14}),"JSON"]}),(0,Ur.jsxs)("button",{type:"button",className:"bb-exportMenuItem",onClick:()=>{a(!1),i()},children:[(0,Ur.jsx)(Ui.FileCode2,{size:14}),"TypeScript"]})]})]})}var _r=require("react/jsx-runtime");function Fb({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,idError:a}){return(0,_r.jsx)($n,{title:"Identity",open:n,onToggle:i,children:(0,_r.jsxs)("div",{className:"bb-grid",children:[(0,_r.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,_r.jsx)("label",{className:"bb-label",children:"Model Node ID"}),(0,_r.jsx)("span",{className:"bb-note",children:"This is the exact mesh name from the imported model and stays locked."}),(0,_r.jsx)("input",{className:"bb-input bb-readonly",value:t.modelObjectId,readOnly:!0})]}),(0,_r.jsxs)("div",{className:"bb-field bb-field--full",children:[(0,_r.jsx)("label",{className:"bb-label",children:"ID"}),(0,_r.jsx)("input",{className:`bb-input ${a?"bb-input--error":""}`,value:t.id,onChange:o=>r(e,s=>({...s,id:o.target.value}))}),a?(0,_r.jsx)("span",{className:"bb-status bb-status--error",children:a}):null]})]})})}var Es=require("react");var jb=["other","body","light","wheel","glass","interior","floor","wall","door","furniture","decor","electronics","seat","table","chair","window","sofa","bed","engine","headlight"],Hb=["normal","hidden","selected","disabled"];var Tt=require("react/jsx-runtime");function Gb({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,Es.useState)(t.group??""),[s,c]=(0,Es.useState)(t.tags?.join(", ")??"");(0,Es.useEffect)(()=>{o(t.group??""),c(t.tags?.join(", ")??"")},[e,t.group,t.tags]);let l=()=>{r(e,d=>({...d,group:a.trim()||void 0}))},u=()=>{let d=[...new Set(s.split(",").map(p=>p.trim()).filter(Boolean))];r(e,p=>({...p,tags:d.length>0?d:void 0}))};return(0,Tt.jsxs)($n,{title:"Basics",open:n,onToggle:i,children:[(0,Tt.jsxs)("div",{className:"bb-grid",children:[(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Label"}),(0,Tt.jsx)("input",{className:"bb-input",value:t.label??"",onChange:d=>r(e,p=>({...p,label:d.target.value}))})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Type"}),(0,Tt.jsx)("input",{className:"bb-input",list:"binding-type-suggestions",value:t.type,onChange:d=>r(e,p=>({...p,type:d.target.value}))}),(0,Tt.jsx)("datalist",{id:"binding-type-suggestions",children:jb.map(d=>(0,Tt.jsx)("option",{value:d},d))})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Status"}),(0,Tt.jsx)("select",{className:"bb-select",value:t.status??"normal",onChange:d=>r(e,p=>({...p,status:d.target.value})),children:Hb.map(d=>(0,Tt.jsx)("option",{value:d,children:d},d))})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Group"}),(0,Tt.jsx)("input",{className:"bb-input",placeholder:"paint",value:a,onChange:d=>o(d.target.value),onBlur:l,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]}),(0,Tt.jsxs)("div",{className:"bb-field",children:[(0,Tt.jsx)("label",{className:"bb-label",children:"Tags"}),(0,Tt.jsx)("input",{className:"bb-input",placeholder:"exterior, configurable",value:s,onChange:d=>c(d.target.value),onBlur:u,onKeyDown:d=>{d.key==="Enter"&&d.currentTarget.blur()}})]})]}),(0,Tt.jsxs)("div",{className:"bb-checkboxRow",style:{marginTop:12},children:[(0,Tt.jsxs)("label",{className:"bb-checkbox",children:[(0,Tt.jsx)("input",{type:"checkbox",checked:t.selectable??!1,onChange:d=>r(e,p=>({...p,selectable:d.target.checked}))}),"selectable"]}),(0,Tt.jsxs)("label",{className:"bb-checkbox",children:[(0,Tt.jsx)("input",{type:"checkbox",checked:t.hoverable??!1,onChange:d=>r(e,p=>({...p,hoverable:d.target.checked}))}),"hoverable"]}),(0,Tt.jsxs)("label",{className:"bb-checkbox",children:[(0,Tt.jsx)("input",{type:"checkbox",checked:t.visible??!1,onChange:d=>r(e,p=>({...p,visible:d.target.checked}))}),"visible"]})]})]})}var kc=require("react");var ga=[{id:"change-color",label:"Change Color",handling:"viewer",description:"Opens a color picker docked under the action and commits the result to style.material.baseColor."},{id:"change-material",label:"Change Material",handling:"viewer",description:"Opens the material picker so the viewer can swap the object's texture."},{id:"toggle-visibility",label:"Toggle Visibility",handling:"viewer",description:"Flips the binding's visible flag."},{id:"toggle-light",label:"Toggle Light",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"change-light-color",label:"Change Light Color",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."},{id:"set-brightness",label:"Set Brightness",handling:"host",description:"Seeded on light bindings. Add declarative effects for useViewerActions, or handle it in onAction."}],Lc="__custom__";function Rs(e){return ga.find(t=>t.id===e)}var lE=ga.filter(e=>e.handling==="viewer").map(e=>e.id),Sw=new Set(["","New Action",...ga.map(e=>e.label)]);function ep(e){return Sw.has(e.trim())}function Wb(e,t){let n=Array.from({length:t.length+1},(i,r)=>r);for(let i=1;i<=e.length;i+=1){let r=[i];for(let a=1;a<=t.length;a+=1){let o=n[a-1]+(e[i-1]===t[a-1]?0:1);r[a]=Math.min(r[a-1]+1,n[a]+1,o)}n=r}return n[t.length]}function Xb(e){if(Rs(e))return null;let t=e.trim().toLowerCase();if(!t)return null;let n=t.replace(/[^a-z0-9]/g,""),i=null;for(let r of ga){let a=Math.min(Wb(t,r.id),Wb(n,r.id.replace(/[^a-z0-9]/g,"")));(!i||a<i.distance)&&(i={id:r.id,distance:a})}return i&&i.distance<=2?i.id:null}var Qe=require("react/jsx-runtime"),qb=ga.filter(e=>e.handling==="viewer"),Mw=ga.filter(e=>e.handling==="host");function Yb({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r}){let[a,o]=(0,kc.useState)(new Set);(0,kc.useEffect)(()=>{o(new Set)},[e]);let s=t.actions??[],c=(d,p)=>r(e,f=>({...f,actions:(f.actions??[]).map((g,y)=>y===d?p(g):g)})),l=d=>{r(e,p=>({...p,actions:(p.actions??[]).filter((f,g)=>g!==d)})),o(p=>{let f=new Set;return p.forEach(g=>{g<d?f.add(g):g>d&&f.add(g-1)}),f})},u=(d,p)=>o(f=>{let g=new Set(f);return p?g.add(d):g.delete(d),g});return(0,Qe.jsxs)($n,{title:"Actions",open:n,onToggle:i,children:[(0,Qe.jsx)("div",{className:"bb-actionList",children:s.map((d,p)=>{let f=Rs(d.id),g=a.has(p)||!f,y=d.id.trim(),T=f?null:Xb(d.id),x=y.length>0&&s.some((h,m)=>m!==p&&h.id.trim()===y);return(0,Qe.jsxs)("div",{className:"bb-actionCard",children:[(0,Qe.jsxs)("div",{className:"bb-actionCardHeader",children:[(0,Qe.jsxs)("div",{className:"bb-actionCardTitle",children:["Action ",p+1]}),(0,Qe.jsx)("div",{className:"bb-actionCardMeta",children:d.type})]}),(0,Qe.jsxs)("div",{className:"bb-actionGrid",children:[(0,Qe.jsxs)("div",{className:"bb-field",children:[(0,Qe.jsx)("label",{className:"bb-label",children:"Action ID"}),(0,Qe.jsxs)("select",{className:"bb-select",value:g?Lc:d.id,onChange:h=>{let m=h.target.value;if(m===Lc){u(p,!0);return}u(p,!1);let S=Rs(m);c(p,M=>({...M,id:m,label:S&&ep(M.label)?S.label:M.label}))},children:[(0,Qe.jsx)("optgroup",{label:"Handled by the viewer",children:qb.map(h=>(0,Qe.jsx)("option",{value:h.id,children:h.id},h.id))}),(0,Qe.jsx)("optgroup",{label:"Handled by your app",children:Mw.map(h=>(0,Qe.jsx)("option",{value:h.id,children:h.id},h.id))}),(0,Qe.jsx)("option",{value:Lc,children:"Custom\u2026"})]})]}),g?(0,Qe.jsxs)("div",{className:"bb-field",children:[(0,Qe.jsx)("label",{className:"bb-label",children:"Custom action ID"}),(0,Qe.jsx)("input",{className:"bb-input",value:d.id,placeholder:"open-datasheet",onChange:h=>{u(p,!0),c(p,m=>({...m,id:h.target.value}))}})]}):null,(0,Qe.jsxs)("div",{className:"bb-field",children:[(0,Qe.jsx)("label",{className:"bb-label",children:"Label"}),(0,Qe.jsx)("input",{className:"bb-input",value:d.label,onChange:h=>c(p,m=>({...m,label:h.target.value}))})]}),f?(0,Qe.jsx)("span",{className:"bb-note",children:f.description}):y.length===0?(0,Qe.jsx)("span",{className:"bb-note",style:{color:"#fca5a5"},children:"An action ID is required, the button renders but can never be identified in onAction."}):(0,Qe.jsxs)("span",{className:"bb-note",style:{color:"#fcd34d"},children:["Unrecognised ID, the viewer has no built-in behavior for it. Add declarative effects and execute them with useViewerActions, or handle it in onAction.",T?(0,Qe.jsxs)(Qe.Fragment,{children:[" Did you mean ",(0,Qe.jsx)("button",{type:"button",className:"bb-linkButton",onClick:()=>{u(p,!1);let h=Rs(T);c(p,m=>({...m,id:T,label:h&&ep(m.label)?h.label:m.label}))},children:T}),"?"]}):null]}),d.effects?.length?(0,Qe.jsxs)("span",{className:"bb-note",children:[d.effects.length," declarative effect",d.effects.length===1?"":"s",", execute with useViewerActions."]}):null,x?(0,Qe.jsx)("span",{className:"bb-note",style:{color:"#fcd34d"},children:"Another action on this binding uses the same ID, they will render as two identical buttons."}):null]}),(0,Qe.jsx)("div",{className:"bb-actionFooter",children:(0,Qe.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-actionRemove",onClick:()=>l(p),children:"Remove Action"})})]},p)})}),(0,Qe.jsx)("div",{style:{marginTop:10},children:(0,Qe.jsx)("button",{type:"button",className:"bb-button",onClick:()=>{let d=qb.find(p=>!s.some(f=>f.id===p.id));r(e,p=>({...p,actions:[...p.actions??[],{id:d?.id??"",label:d?.label??"New Action",type:"command"}]})),d||u(s.length,!0)},children:"Add Action"})})]})}var Bc=require("lucide-react");var Pt=require("react/jsx-runtime");function $b({selectedBinding:e,open:t,onToggle:n,cameraState:i,formattedCameraState:r,savedCameraPosition:a,onSaveCameraPosition:o,onGoToSavedCamera:s,onClearSavedCamera:c,onResetView:l,onFitScene:u}){return(0,Pt.jsxs)($n,{title:"Camera Position",open:t,onToggle:n,children:[(0,Pt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Pt.jsx)("span",{className:"bb-cameraLiveBadge",children:"LIVE"}),(0,Pt.jsxs)("div",{className:"se-waypointBody",children:[(0,Pt.jsx)("div",{className:"bb-cameraWaypointLabel",children:"Current view"}),i?(0,Pt.jsxs)(Pt.Fragment,{children:[(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["pos ",r?.position]}),(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["look ",r?.target]})]}):(0,Pt.jsx)("div",{className:"se-waypointCoords",children:"Move the camera to see live position"})]})]}),(0,Pt.jsxs)("div",{className:"bb-cameraControls bb-cameraControls--centered",children:[(0,Pt.jsx)("button",{type:"button",className:"bb-button bb-button--primary",onClick:o,disabled:!i,children:"Save"}),(0,Pt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:l,children:"Reset View"}),(0,Pt.jsx)("button",{type:"button",className:"bb-button bb-button--ghost",onClick:u,children:"Fit Scene"})]}),a?.position&&a?.target&&(0,Pt.jsxs)("div",{className:"se-waypointCard bb-cameraWaypoint",children:[(0,Pt.jsx)("span",{className:"bb-cameraSavedBadge",children:"SAVED"}),(0,Pt.jsxs)("div",{className:"se-waypointBody",children:[(0,Pt.jsxs)("div",{className:"bb-cameraWaypointLabel",children:["For ",e.label]}),(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["pos [",a.position.map(d=>d.toFixed(1)).join(", "),"]"]}),(0,Pt.jsxs)("div",{className:"se-waypointCoords",children:["look [",a.target.map(d=>d.toFixed(1)).join(", "),"]"]})]}),(0,Pt.jsxs)("div",{className:"se-waypointActions",children:[(0,Pt.jsx)("button",{className:"se-waypointAction",onClick:s,title:"Fly camera to the saved position",children:(0,Pt.jsx)(Bc.MapPin,{size:15})}),(0,Pt.jsx)("button",{className:"se-waypointAction se-waypointAction--delete",onClick:c,title:"Delete saved position",children:(0,Pt.jsx)(Bc.Trash2,{size:15})})]})]}),(0,Pt.jsx)("span",{className:"bb-note",children:'Tip: Position the camera how you want, then click "Save" to store this position for the selected object. The camera position updates in real-time as you navigate.'})]})}var Dc=require("lucide-react");var et=require("react/jsx-runtime"),Kb=["X","Y","Z"];var Cw=.1;function tp(e){let t=e%360;return t<0?t+360:t}function Zb(e){return tp(e*180/Math.PI)}function Jb(e){return e*Math.PI/180}function Tw(e,t,n){let i=[...e],r=Zb(e[t]);return i[t]=Jb(tp(r+n)),i}function Pw({value:e,min:t=-1/0,max:n=1/0,step:i=.1,disabled:r=!1,onChange:a,formatValue:o=c=>Number(c.toFixed(3)),label:s}){return(0,et.jsx)("div",{className:"bb-transformAxesGrid",children:Kb.map((c,l)=>(0,et.jsxs)("div",{className:"bb-transformAxis",children:[(0,et.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:c}),(0,et.jsx)("div",{className:"bb-transformAxisControl",children:(0,et.jsx)("input",{type:"number",className:"se-numberInput bb-transformNumberInput",step:i,min:t,max:n,value:o(e[l]),disabled:r,"aria-label":`${c} ${s?.toLowerCase()||""}`,onChange:u=>{let d=Number(u.target.value);if(Number.isFinite(d)){let p=Math.max(t,Math.min(n,d)),f=[...e];f[l]=p,a(f)}}})})]},c))})}function Qb({selectedItem:e,selectedBinding:t,open:n,onToggle:i,updateBinding:r,moveModeEnabled:a,onToggleMoveMode:o,transformSpace:s,onTransformSpaceChange:c,originalTransform:l}){let u=t.transform?.rotation??l?.rotation??[0,0,0],d=t.transform?.position??l?.position??[0,0,0],p=(h,m)=>{let S=h.transform?.rotation??l?.rotation??[0,0,0],M=h.transform?.position??l?.position??[0,0,0],C=h.transform?.scale??l?.scale??[1,1,1],L=l?.pivotLocal??[0,0,0],b=qg(M,S,m,C,L,l?.rotationOrder??"XYZ");return{...h,transform:{...h.transform,position:b,rotation:m}}},f=(h,m)=>{e&&r(e,S=>{let M=S.transform?.rotation??l?.rotation??[0,0,0],C=Tw(M,h,m);return p(S,C)})},g=(h,m)=>{e&&r(e,S=>{let C=[...S.transform?.rotation??l?.rotation??[0,0,0]];return C[h]=Jb(tp(m)),p(S,C)})},y=(h,m)=>{e&&r(e,S=>{let C=[...S.transform?.position??l?.position??[0,0,0]];return C[h]=m,{...S,transform:{...S.transform,position:C}}})},T=(h,m)=>{e&&y(h,d[h]+m)},x=()=>{!e||!l||r(e,h=>{let m={...h.transform};return delete m.position,delete m.rotation,{...h,transform:Object.keys(m).length>0?m:void 0}})};return(0,et.jsxs)($n,{title:"Move & Rotate",open:n,onToggle:i,tooltip:"Enable the transform gizmo to move or rotate the selected mesh on any axis. Rotation uses the object's visible center while exported position and rotation remain local GLTF transforms.",children:[(0,et.jsxs)("div",{className:"se-field",children:[(0,et.jsxs)("div",{className:"se-fieldLabel",children:[(0,et.jsxs)("span",{children:[(0,et.jsx)(Dc.Move3d,{size:14,style:{marginRight:6,verticalAlign:"-2px"}}),"Transform gizmo"]}),(0,et.jsxs)("label",{className:"se-switch","aria-label":"Toggle move mode",children:[(0,et.jsx)("input",{type:"checkbox",checked:a,onChange:h=>o(h.target.checked)}),(0,et.jsx)("span",{className:"se-switchTrack",children:(0,et.jsx)("span",{className:"se-switchThumb"})})]})]}),(0,et.jsx)("span",{className:"bb-note",children:"Select a mesh \xB7 drag the colored arrows or planes to move"})]}),(0,et.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,et.jsx)("div",{className:"se-fieldLabel",children:(0,et.jsx)("span",{children:"Axis space"})}),(0,et.jsx)("div",{className:"se-segmentedControl",children:["world","local"].map(h=>(0,et.jsx)("button",{type:"button",className:`se-segmentedOption ${s===h?"se-segmentedOption--active":""}`,onClick:()=>c(h),children:h},h))})]}),(0,et.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,et.jsx)("div",{className:"se-fieldLabel",children:(0,et.jsx)("span",{children:"Rotation (degrees)"})}),(0,et.jsx)("div",{className:"bb-transformAxesGrid",children:Kb.map((h,m)=>{let S=Math.round(Zb(u[m]));return(0,et.jsxs)("div",{className:"bb-transformAxis",children:[(0,et.jsx)("span",{className:"se-axisStepperLabel bb-transformAxisLabel",children:h}),(0,et.jsx)("div",{className:"bb-transformAxisControl",children:(0,et.jsx)("input",{type:"number",className:"se-numberInput bb-transformNumberInput",step:1,min:0,max:359,value:S,disabled:!e,"aria-label":`${h} rotation in degrees`,onChange:M=>{let C=Number(M.target.value);Number.isFinite(C)&&g(m,C)}})})]},h)})})]}),(0,et.jsxs)("div",{className:"se-field",style:{marginTop:10},children:[(0,et.jsx)("div",{className:"se-fieldLabel",children:(0,et.jsx)("span",{children:"Position"})}),(0,et.jsx)(Pw,{value:d,min:-1/0,max:1/0,step:Cw,disabled:!e,label:"position",onChange:h=>{e&&r(e,m=>({...m,transform:{...m.transform,position:h}}))}})]}),(0,et.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",style:{marginTop:10,display:"inline-flex",alignItems:"center",gap:6},disabled:!e||!l,onClick:x,title:"Restore this node's position and rotation to what they were in the original model",children:[(0,et.jsx)(Dc.RotateCcw,{size:14}),"Restore original position & rotation"]})]})}var ba=require("react");function Aw(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 np(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 Ew(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 Rw(e){return e==="light"||e.endsWith("light")?[{id:"toggle-light",label:"Toggle Light",type:"command"},{id:"change-light-color",label:"Change Light Color",type:"command"},{id:"set-brightness",label:"Set Brightness",type:"command"}]:[{id:"change-color",label:"Change Color",type:"command"},{id:"change-material",label:"Change Material",type:"command"},{id:"toggle-visibility",label:"Toggle Visibility",type:"command"}]}function Lw(e){let t=Ew(e);return{id:Aw(e),modelObjectId:e,type:t,label:np(e),status:"normal",selectable:!0,hoverable:!0,visible:!0,style:{},actions:Rw(t),metrics:{},metadata:{}}}function Nc(e){return Object.fromEntries(e.map(t=>[t,Lw(t)]))}function ev(e){let{nodesById:t}=Fa(e),n=[];for(let[i,r]of Object.entries(t)){let a=r;a.isMesh&&a.geometry&&r.name&&n.push(i)}return n.sort((i,r)=>i.localeCompare(r))}var Mn=require("react/jsx-runtime"),tv=(0,ba.memo)(kw);function kw({bindings:e,selectedItem:t,onSelect:n,onHover:i,isOpen:r=!0,onToggle:a}){let[o,s]=(0,ba.useState)(""),c=(0,ba.useMemo)(()=>Object.keys(e),[e]),l=(0,ba.useMemo)(()=>{let u=o.trim().toLowerCase();return u?c.filter(d=>{let p=e[d];return d.toLowerCase().includes(u)||p.label?.toLowerCase().includes(u)||p.type.toLowerCase().includes(u)}):c},[e,c,o]);return(0,Mn.jsxs)("aside",{className:`bb-sidebar bb-sidebar--right ${r?"":"bb-sidebar--collapsed"}`,children:[(0,Mn.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!r&&(0,Mn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!0),"aria-label":"Open scene nodes sidebar",title:"Open scene nodes",children:"\u2190"}),r&&(0,Mn.jsxs)(Mn.Fragment,{children:[(0,Mn.jsxs)("div",{children:[(0,Mn.jsx)("div",{className:"bb-sectionKicker",children:"Scene Nodes"}),(0,Mn.jsxs)("div",{className:"bb-sectionHeading",children:[l.length," visible entries"]})]}),(0,Mn.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>a?.(!1),"aria-label":"Close scene nodes sidebar",title:"Close scene nodes",children:"\u2192"})]})]}),r&&(0,Mn.jsxs)("section",{className:"bb-nodeList",children:[(0,Mn.jsx)("div",{className:"bb-search",children:(0,Mn.jsx)("input",{className:"bb-input",placeholder:"Search nodes, labels, or types",value:o,onChange:u=>s(u.target.value)})}),(0,Mn.jsx)("div",{className:"bb-nodeItems",children:l.map(u=>{let d=e[u];return(0,Mn.jsxs)("button",{type:"button",className:`bb-nodeButton ${u===t?"bb-nodeButton--active":""}`,onClick:()=>n(u),onMouseEnter:()=>i?.(u),onMouseLeave:()=>i?.(null),children:[(0,Mn.jsx)("span",{className:"bb-nodeName",children:u}),(0,Mn.jsxs)("span",{className:"bb-nodeMeta",children:[d.type,d.label===np(u)?"":d.label||"\xB7 Untitled"]})]},u)})})]})]})}var Vi=require("react/jsx-runtime");function rp({title:e,label:t,open:n,onToggle:i,draft:r,error:a,example:o,onDraftChange:s,onCommit:c}){return(0,Vi.jsx)($n,{title:e,open:n,onToggle:i,children:(0,Vi.jsxs)("div",{className:"bb-field",children:[(0,Vi.jsx)("label",{className:"bb-label",children:t}),(0,Vi.jsx)("textarea",{className:"bb-textarea",value:r,onChange:l=>s(l.target.value),onBlur:c}),a?(0,Vi.jsx)("span",{className:"bb-status bb-status--error",children:a}):(0,Vi.jsxs)("span",{className:"bb-note",children:["Use a JSON object like ",o,"."]})]})})}function nv(e,t){let n=new Map(e.animations.clips.map(a=>[a.sourceName,a])),i=t.map(({sourceName:a})=>n.get(a)??{sourceName:a,displayName:a,hidden:!1,loopMode:"repeat",speed:1}),r=e.animations.autoplayClip&&i.some(a=>a.sourceName===e.animations.autoplayClip&&!a.hidden)?e.animations.autoplayClip:null;return{clips:i,autoplayClip:r}}var gi=require("react"),Bw=100;function Dw(e,t){switch(t.type){case"set":{let n=typeof t.updater=="function"?t.updater(e.present):t.updater;return n===e.present?e:t.coalesce?{...e,present:n,future:[]}:{past:[...e.past,e.present].slice(-Bw),present:n,future:[]}}case"undo":{if(e.past.length===0)return e;let n=e.past[e.past.length-1];return{past:e.past.slice(0,-1),present:n,future:[e.present,...e.future]}}case"redo":{if(e.future.length===0)return e;let[n,...i]=e.future;return{past:[...e.past,e.present],present:n,future:i}}case"reset":return{past:[],present:t.value,future:[]}}}function ip(e,t=600){let[n,i]=(0,gi.useReducer)(Dw,{past:[],present:e,future:[]}),r=(0,gi.useRef)(0),a=(0,gi.useCallback)(l=>{let u=Date.now(),d=u-r.current<t;r.current=u,i({type:"set",updater:l,coalesce:d})},[t]),o=(0,gi.useCallback)(()=>{r.current=0,i({type:"undo"})},[]),s=(0,gi.useCallback)(()=>{r.current=0,i({type:"redo"})},[]),c=(0,gi.useCallback)(l=>{r.current=0,i({type:"reset",value:l})},[]);return{value:n.present,setValue:a,undo:o,redo:s,reset:c,canUndo:n.past.length>0,canRedo:n.future.length>0}}var sv=require("fflate");function rv(e){return JSON.stringify(e,null,2)}function iv(e){return['import { defineObjectBindings } from "@liveroom-tech/react-immersive/utils";',"",`export const objectBindings = defineObjectBindings(${JSON.stringify(e,null,2)});`,""].join(`
|
|
3688
3688
|
`)}function av(e){return JSON.stringify(e,null,2)}function ov(e){return['import type { SceneConfig } from "@liveroom-tech/react-immersive/utils";',"",`export const sceneConfig: SceneConfig = ${JSON.stringify(e,null,2)};`,""].join(`
|
|
3689
|
-
`)}function Ls(e,t,n){oi(new Blob([t],{type:n}),e)}function ap(e){return JSON.stringify(e??{},null,2)}function op(e){return`[${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}]`}function Nw(e){let t=e.style?.material;return t?Object.values(t).filter(n=>!!n&&typeof n=="object"&&typeof n.path=="string"&&n.path.trim().length>0).map(n=>n.path):[]}async function lv(e){let t=new Set;for(let r of Object.values(e))for(let a of Nw(r))t.add(a);let n=[],i=[];return await Promise.all(Array.from(t).map(async r=>{let a=Uh(r);if(a)try{let o=await fetch(a);if(!o.ok)throw new Error(String(o.status));n.push({path:r,blob:await o.blob()})}catch{i.push(r)}})),{assets:n,failedPaths:i}}async function sp(e,t,n,i,r){if(r.length===0){Ls(e,t,n);return}let a={[e]:(0,sv.strToU8)(t)};for(let s of r)a[s.path]=new Uint8Array(await s.blob.arrayBuffer());let o=await tl(a);oi(new Blob([o],{type:"application/zip"}),i)}var lp={pbr:["texture","baseColor","metalness","metalnessMap","specularIntensity","specularIntensityMap","specularColor","specularColorMap","reflectivity"],roughness:["roughness","roughnessMap"],emission:["emissive","emissiveIntensity","emissiveMap"],opacity:["opacity","alphaMap","alphaTest","alphaHash","dithering","blendingMode"],normalBump:["normalMap","normalScale","flipNormalY","bumpMap","bumpScale"],displacement:["displacementMap","displacementScale","displacementBias"],ao:["aoMap","aoMapIntensity"],clearcoat:["clearcoat","clearcoatMap","clearcoatRoughness","clearcoatRoughnessMap","clearcoatNormalMap","clearcoatNormalScale","flipClearcoatNormalY"],sheen:["sheen","sheenColor","sheenColorMap","sheenRoughness","sheenRoughnessMap"],anisotropy:["anisotropy","anisotropyRotation","anisotropyMap"],transmission:["transmission","transmissionMap","thickness","thicknessMap","attenuationColor","attenuationDistance"],faces:["side"]},cv=Object.keys(lp);function dv(e){if(e==null)return!1;if(typeof e=="string")return e.trim().length>0;if(typeof e=="number")return Number.isFinite(e);if(typeof e=="boolean")return e;if(typeof e=="object"&&"path"in e){let t=e.path;return typeof t=="string"&&t.trim().length>0}return!1}function cp(e){if(e)return Object.values(e).some(dv)?e:void 0}function Sr(e,t){return e?lp[t].some(n=>dv(e[n])):!1}function dp(e){return{pbr:Sr(e,"pbr"),roughness:Sr(e,"roughness"),emission:Sr(e,"emission"),opacity:Sr(e,"opacity"),normalBump:Sr(e,"normalBump"),displacement:Sr(e,"displacement"),ao:Sr(e,"ao"),clearcoat:Sr(e,"clearcoat"),sheen:Sr(e,"sheen"),anisotropy:Sr(e,"anisotropy"),transmission:Sr(e,"transmission"),faces:Sr(e,"faces")}}function up(e,t){if(t)return{...e,style:{...e.style,material:t}};if(!e.style)return e;let{material:n,...i}=e.style;return{...e,style:Object.keys(i).length>0?i:void 0}}function uv(e,t){if(!e)return;let n={...e};for(let i of lp[t])delete n[i];return n}var G=require("react/jsx-runtime"),Ow="/room.glb";function Oc(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function pv(e,t){if(!Oc(e)||!Oc(t))return t??e;let n={...e};for(let[i,r]of Object.entries(t)){let a=n[i];n[i]=Oc(a)&&Oc(r)?pv(a,r):r}return n}function pp({licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,project:a,onProjectChange:o,projectChangeDebounceMs:s=350,onModelUpload:c,onEditLeaseChange:l}){let u=(0,ne.useRef)(null),d=(0,ne.useRef)(null),p=(0,ne.useRef)(null),[f,g]=(0,ne.useState)(a?.model.url??null),[y,T]=(0,ne.useState)(a?.model.name??""),[x,h]=(0,ne.useState)(a?.model??null),[m,S]=(0,ne.useState)(null),M=ip(a?.objectBindings??{}),C=M.value,L=M.setValue,[b,_]=(0,ne.useState)(!1),[v,P]=(0,ne.useState)(!1),[z,E]=(0,ne.useState)("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),[V,A]=(0,ne.useState)("default"),[X,j]=(0,ne.useState)(!1),[k,B]=(0,ne.useState)("{}"),[Y,q]=(0,ne.useState)("{}"),[ue,Ee]=(0,ne.useState)(null),[be,Ce]=(0,ne.useState)(null),[De,ze]=(0,ne.useState)(!1),[se,Lt]=(0,ne.useState)(!1),[Xe,Ge]=(0,ne.useState)(!1),[$e,rt]=(0,ne.useState)({identity:!0,basics:!0,material:!1,actions:!1,camera:!1,transform:!1,metrics:!1,metadata:!1}),[it,Qt]=(0,ne.useState)({pbr:!0,roughness:!1,emission:!1,opacity:!1,normalBump:!1,displacement:!1,ao:!1,clearcoat:!1,sheen:!1,anisotropy:!1,transmission:!1,faces:!1}),qe=D=>rt(H=>({...H,[D]:!H[D]})),on=D=>Qt(H=>({...H,[D]:!H[D]})),[Gt,Ke]=(0,ne.useState)("object"),[le,J]=(0,ne.useState)("General"),[ee,Ve]=(0,ne.useState)("metalness"),[tt,Fe]=(0,ne.useState)(dp()),xe=(0,ne.useRef)(null),[ot,gt]=(0,ne.useState)(!1),[At,Kn]=(0,ne.useState)(!0),[Ln,Ne]=(0,ne.useState)(!0),[dt,_t]=(0,ne.useState)(!1),[We,Wt]=(0,ne.useState)(null),[Bt,Xt]=(0,ne.useState)(!1),[en,Mr]=(0,ne.useState)("world"),we=(0,ne.useRef)({}),R=ip(a?.sceneConfig??Mi),I=R.value,$=R.setValue,[re,te]=(0,ne.useState)(null),[he,pe]=(0,ne.useState)(null),bt=ac(e,t),St=nb(bt.tier),Pe=(0,ne.useMemo)(()=>({isInsideEditor:!0,activeTab:Gt,activeSubTab:le,tier:St,setActiveTab:Ke,setActiveSubTab:J}),[Gt,le,St]),Ze=(0,ne.useRef)(null),Et=(0,ne.useRef)(0),Se=(0,ne.useRef)(0),Dt=(0,ne.useRef)(a?`${a.id}:${a.revision}`:null),pn=(0,ne.useRef)(null),Tn=(0,ne.useRef)(!1),tn=(0,ne.useRef)(!1),qt=(0,ne.useRef)(a?{modelUrl:a.model.url,bindings:a.objectBindings,sceneConfig:a.sceneConfig}:null),ut=(0,ne.useRef)(a?{requestId:0,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl}:null),Fr=(0,ne.useRef)(null),{cameraState:Ut,resetView:xa,focusObject:bo,fitScene:rr,setCameraState:ni,handleCameraChange:Yc,handleViewerReady:$c}=vc(),ya=(0,ne.useCallback)(D=>{ni({position:D.position,target:D.target,fov:Ut?.fov??null,zoom:Ut?.zoom??1,azimuthAngle:D.azimuthAngle,polarAngle:D.polarAngle},!0)},[ni,Ut]),ir=xc(),Yt=m?C[m]??null:null,vo=Yt?.style?.material,Cr=Yt?.cameraState,bi=Ut?{position:op(Ut.position),target:op(Ut.target)}:null,wa=(0,ne.useCallback)(D=>{$(H=>{let ie=H.annotations.map(Oe=>Oe.id).join(","),_e=D.map(Oe=>Oe.id).join(",");return ie===_e?H:{...H,annotations:D}})},[]),Os=(0,ne.useCallback)(D=>{te(D?{annotation:D}:null)},[]);(0,ne.useEffect)(()=>{if(!Yt){B("{}"),q("{}"),Ee(null),Ce(null);return}B(ap(Yt.metrics)),q(ap(Yt.metadata)),Ee(null),Ce(null)},[Yt]),(0,ne.useEffect)(()=>{let D=dp(vo);if(xe.current!==m){xe.current=m,Fe(D);return}Fe(H=>{let ie=!1,_e={...H};for(let Oe of cv)D[Oe]&&!H[Oe]&&(_e[Oe]=!0,ie=!0);return ie?_e:H})},[m,vo]),(0,ne.useEffect)(()=>()=>{Ze.current?.cleanup()},[]);let vi=(0,ne.useCallback)((D,H)=>{let ie=Nc(D);if(H){let _e=new Map(Object.values(H).map(Oe=>[Oe.modelObjectId,Oe]));for(let Oe of D){let Rt=_e.get(Oe);Rt&&(ie[Oe]=Rt)}}return ie},[]);(0,ne.useEffect)(()=>{if(!a)return;let D=`${a.id}:${a.revision}`;if(Dt.current===D)return;Dt.current=D;let H=f!==a.model.url||x?.tilesetUrl!==a.model.tilesetUrl||x?.assetVersion!==a.model.assetVersion,ie=C!==a.objectBindings,_e=I!==a.sceneConfig;(H||ie||_e)&&(tn.current=!0),h(a.model),T(a.model.name??"model");let Oe=a.objectBindings;if(ie){let Rt=pn.current;Oe=Rt?vi(Rt,a.objectBindings):a.objectBindings,M.reset(Oe)}if(_e&&R.reset(a.sceneConfig),H){let Rt=++Se.current;ut.current={requestId:Rt,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl},Fr.current=null,S(null),_(!0),g(a.model.url)}qt.current={modelUrl:a.model.url,bindings:Oe,sceneConfig:a.sceneConfig}},[C,vi,a,f,I,x,M,R]);let Hi=(0,ne.useRef)(o);Hi.current=o,(0,ne.useEffect)(()=>{if(!a||!Hi.current||!f)return;if(!Tn.current){Tn.current=!0;return}if(ut.current)return;let D=qt.current;if(f===a.model.url&&C===a.objectBindings&&I===a.sceneConfig||D!==null&&f===D.modelUrl&&C===D.bindings&&I===D.sceneConfig)return;if(tn.current){tn.current=!1;return}let H=window.setTimeout(()=>{Hi.current?.({projectId:a.id,baseRevision:a.revision,model:{...x??a.model,url:f,name:y||a.model.name},objectBindings:C,sceneConfig:I},"local")},s);return()=>window.clearTimeout(H)},[C,y,f,a,s,x,I]),(0,ne.useEffect)(()=>{let D=H=>{if(H.key.toLowerCase()!=="z"||!(H.metaKey||H.ctrlKey))return;let ie=H.target,_e=ie?.tagName;if(_e==="INPUT"||_e==="TEXTAREA"||ie?.isContentEditable)return;H.preventDefault();let Oe=Gt==="scene"?R:M;H.shiftKey?Oe.redo():Oe.undo()};return window.addEventListener("keydown",D),()=>window.removeEventListener("keydown",D)},[Gt,M,R]),(0,ne.useEffect)(()=>{if(b||V==="default"||V==="success")return;j(!0);let D=window.setTimeout(()=>j(!1),4e3);return()=>window.clearTimeout(D)},[z,V,b]);let Zn=(0,ne.useMemo)(()=>Object.keys(C),[C]),Kc=(0,ne.useMemo)(()=>!m||!Yt?null:Yt.id.trim()?Object.entries(C).some(([ie,_e])=>ie!==m&&_e.id===Yt.id)?"Another binding already uses this ID.":null:"ID is required.",[C,m,Yt]),Tr=(D,H)=>{L(ie=>({...ie,[D]:H(ie[D])}))},xo=(D,H)=>{Tr(D,ie=>{let _e=cp(H(ie.style?.material));return up(ie,_e)})},Zc=(D,H,ie)=>{xo(D,_e=>({..._e,[H]:ie?{path:ie}:void 0}))},Jn=(D,H)=>{Fe(ie=>({...ie,[D]:H})),!H&&m&&Tr(m,ie=>{let _e=cp(uv(ie.style?.material,D));return up(ie,_e)})},_a=(0,ne.useCallback)((D,H,ie)=>{let _e=ev(D),Oe=Nc(_e);if(ie){let Mt=new Map(Object.values(ie).map(Je=>[Je.modelObjectId,Je]));for(let Je of _e){let Bn=Mt.get(Je);Bn&&(Oe[Je]=Bn)}}D.updateMatrixWorld(!0);let Rt={};for(let Mt of _e){let Je=Dr(D,Mt);if(!Je){Rt[Mt]={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivotLocal:[0,0,0],rotationOrder:"XYZ"};continue}let Bn=mc(Je);Rt[Mt]={position:[Je.position.x,Je.position.y,Je.position.z],rotation:[Je.rotation.x,Je.rotation.y,Je.rotation.z],scale:[Je.scale.x,Je.scale.y,Je.scale.z],pivotLocal:[Bn.x,Bn.y,Bn.z],rotationOrder:Je.rotation.order}}we.current=Rt,M.reset(Oe),S(_e[0]??null),ie||$(Mt=>({...Mt,annotations:[]})),E(`Generated ${_e.length} bindings from ${H}.`),A("success"),_(!1)},[M,$]),ar=(D,H,ie,_e)=>{let Oe=++Se.current;_(!0);let Rt=ie?ie/1048576:0;E(Rt>=100?`Reading ${H} (${Math.round(Rt)}MB \u2014 large file, this can take a while)...`:`Reading ${H} and generating starter bindings...`),A("default"),T(H),h(_e??{url:D,name:H}),te(null);let Mt=Fr.current;if(D===f&&Mt?.url===D){ut.current=null,_a(Mt.scene,H);return}ut.current={requestId:Oe,modelName:H,modelUrl:D,streaming:!!_e?.tilesetUrl},g(D),M.reset({}),S(null)},Gi=(0,ne.useCallback)(D=>{let H=ut.current;if(!(!H||H.requestId!==Se.current)){if(ut.current=null,Fr.current={url:H.modelUrl,scene:D},H.streaming){E(`Streaming ${H.modelName}.`),A("success"),_(!1);return}H.storedBindings&&(tn.current=!0),_a(D,H.modelName,H.storedBindings)}},[_a,M]),kn=(0,ne.useCallback)(D=>{let H=D.map(_e=>_e.name);if(H.length===0)return;pn.current=H,tn.current=!0;let ie=vi(H,a?.objectBindings);if(M.reset(ie),a){let _e=qt.current;qt.current={modelUrl:_e?.modelUrl??a.model.url,bindings:ie,sceneConfig:_e?.sceneConfig??a.sceneConfig}}S(_e=>_e??H[0]??null),E(`Streaming ${H.length} bindable objects.`),A("success"),_(!1)},[vi,M,a]),Sa=(0,ne.useCallback)(D=>{let H=ut.current;!H||H.requestId!==Se.current||(ut.current=null,console.error(D),E(`Could not read ${H.modelName}. Make sure the file is a valid GLB, GLTF, OBJ, FBX, or USDZ asset.`),A("error"),_(!1))},[]),yo=(0,ne.useCallback)(D=>{ir.handleAnimationsReady(D);let H=D.clipDetails??D.clips.map(ie=>({sourceName:ie,duration:0}));$(ie=>({...ie,animations:nv(ie,H)}))},[ir,$]),Jc=async()=>{Ze.current?.cleanup(),Ze.current=null,await ar(Ow,"room.glb")},Is=async D=>{if(c){try{_(!0),E(`Uploading ${D.name}...`),A("default");let ie=await c(D);await ar(ie.url,ie.name??D.name,D.size,ie)}catch(ie){_(!1),E(ie instanceof Error?ie.message:`Could not upload ${D.name}.`),A("error")}return}let H;try{H=await ml(D)}catch(ie){E(ie instanceof Error?ie.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset."),A("error");return}Ze.current?.cleanup(),Ze.current=H,await ar(H.url,H.name,D.size,{url:H.url,name:H.name})},Qc=async D=>{let H=D.target.files?.[0];H&&(await Is(H),D.target.value="")},jr=()=>{Ze.current?.cleanup(),Ze.current=null,Fr.current=null,ut.current=null,we.current={},Et.current=0,ze(!1),g(null),T(""),h(null),S(null),te(null),M.reset({}),B("{}"),q("{}"),Ee(null),Ce(null),pe(null),Xt(!1),$(D=>({...D,animations:Mi.animations,annotations:[]})),E("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),A("default")},Wi=()=>{u.current?.click()},wo=()=>{d.current?.click()},or=async D=>{P(!0);try{let{assets:H,failedPaths:ie}=await lv(C);D==="json"?await sp("objectBindings.json",rv(C),"application/json","objectBindings.zip",H):await sp("objectBindings.ts",iv(C),"text/typescript","objectBindings-ts.zip",H),ie.length>0?(E(`Exported, but ${ie.length} uploaded image${ie.length===1?"":"s"} couldn't be bundled: ${ie.join(", ")}.`),A("error")):H.length>0&&(E(`Exported with ${H.length} uploaded image${H.length===1?"":"s"} bundled into the zip.`),A("success"))}catch(H){let ie=H instanceof Error?H.message:"Unknown export error.";E(`Failed to export bindings: ${ie}`),A("error")}finally{P(!1)}},_o=async D=>{if(!Zn.length){E("Load a model before importing bindings."),A("error");return}let H;try{H=JSON.parse(await D.text())}catch{E(`${D.name} is not valid JSON.`),A("error");return}if(H===null||typeof H!="object"||Array.isArray(H)){E("Expected a JSON object mapping object IDs to bindings."),A("error");return}let ie=new Map;for(let Mt of Object.values(H))if(Mt!==null&&typeof Mt=="object"&&typeof Mt.id=="string"&&typeof Mt.type=="string"&&typeof Mt.modelObjectId=="string"){let Je=Mt;ie.set(Je.modelObjectId,Je)}if(ie.size===0){E(`${D.name} doesn't look like an exported bindings file.`),A("error");return}let _e={...C},Oe=0;for(let Mt of Object.keys(_e)){let Je=ie.get(Mt);Je&&(_e[Mt]=Je,Oe++)}if(Oe===0){E(`None of the object IDs in ${D.name} match this model \u2014 nothing imported.`),A("error");return}L(_e);let Rt=ie.size-Oe;E(Rt>0?`Imported ${Oe} binding${Oe===1?"":"s"} from ${D.name} (${Rt} skipped \u2014 not in this model).`:`Imported ${Oe} binding${Oe===1?"":"s"} from ${D.name}.`),A("success")},Xi=async D=>{let H=D.target.files?.[0];H&&(await _o(H),D.target.value="")},Ma=()=>{p.current?.click()},qi=async D=>{let H;try{H=JSON.parse(await D.text())}catch{E(`${D.name} is not valid JSON.`),A("error");return}if(H===null||typeof H!="object"||Array.isArray(H)){E("Expected a JSON object with scene config sections."),A("error");return}let ie=["model","camera","lighting","wireframe","shadows","environment","background","groundShadows","postProcessing","animations","annotations","cinematic"],_e=H,Oe=ie.filter(Rt=>_e[Rt]!==void 0);if(Oe.length===0){E(`${D.name} doesn't look like an exported scene config file.`),A("error");return}$(Rt=>{let Mt={...Rt};for(let Je of Oe)Mt[Je]=pv(Rt[Je],_e[Je]);return Mt}),E(`Imported ${Oe.length} section${Oe.length===1?"":"s"} from ${D.name}.`),A("success")},ri=async D=>{let H=D.target.files?.[0];H&&(await qi(H),D.target.value="")},zs=D=>{D.preventDefault(),D.stopPropagation(),!(b||f)&&(Et.current+=1,ze(!0))},ed=D=>{D.preventDefault(),D.stopPropagation(),!(b||f)&&(D.dataTransfer.dropEffect="copy",ze(!0))},So=D=>{D.preventDefault(),D.stopPropagation(),!(b||f)&&(Et.current=Math.max(0,Et.current-1),Et.current===0&&ze(!1))},Us=async D=>{if(D.preventDefault(),D.stopPropagation(),Et.current=0,ze(!1),b||f)return;let H=D.dataTransfer.files?.[0];H&&await Is(H)},xi=(D,H,ie)=>{if(!m)return;let _e;try{_e=JSON.parse(H)}catch{ie("Invalid JSON");return}if(_e===null||typeof _e!="object"||Array.isArray(_e)){ie("Expected a JSON object");return}if(D==="metrics"&&Object.values(_e).some(Rt=>typeof Rt!="number"||!Number.isFinite(Rt))){ie("Metrics values must be numbers");return}Tr(m,Oe=>({...Oe,[D]:_e})),ie(null)},Vs=(0,ne.useCallback)(D=>{if(!D){S(null);return}let H=Object.entries(C).find(([ie,_e])=>_e===D||ie===D.modelObjectId||_e.modelObjectId===D.modelObjectId)?.[0]??null;S(H)},[C]),Fs=(0,ne.useCallback)(async D=>{S(D),pe(null),await bo(D)},[bo]),js=(0,ne.useCallback)(D=>{pe(D?C[D]??null:null)},[C]),td=(0,ne.useCallback)(D=>Ge(!D),[]),nd=(0,ne.useCallback)(()=>{if(!m||!Ut)return;let D={position:Ut.position,target:Ut.target,...Ut.fov!=null?{fov:Ut.fov}:{},zoom:Ut.zoom};Tr(m,H=>({...H,cameraState:D}))},[m,Ut]),Hs=(0,ne.useCallback)(()=>{!Cr?.position||!Cr?.target||ni({position:Cr.position,target:Cr.target,fov:Cr.fov??Ut?.fov??null,zoom:Cr.zoom??Ut?.zoom??1},!0)},[Cr,ni,Ut]),Yi=(0,ne.useCallback)(()=>{m&&Tr(m,D=>({...D,cameraState:void 0}))},[m]),Gs=(0,ne.useCallback)(async()=>{await xa()},[xa]),rd=(0,ne.useCallback)(async()=>{await rr()},[rr]),Mo=(0,ne.useCallback)(D=>{Wt(D),_t(!0)},[]),Pr=(0,ne.useCallback)(()=>{_t(!1),Wt(null)},[]),$i=(0,ne.useCallback)(()=>{if(We==="bindings"){if(!Zn.length){Pr();return}let D=Nc(Zn);M.reset(D),S(Zn[0]??null),E("Object bindings reset to default values."),A("success")}else We==="scene"&&(R.reset(Mi),E("Scene config reset to default values."),A("success"));Pr()},[We,Zn,M,R,Pr]);return bt.status==="checking"?(0,G.jsx)("div",{className:"bb-root bb-root--licenseChecking",children:(0,G.jsx)(ea,{title:"Verifying License",message:"Checking your license key..."})}):bt.status==="invalid"?(0,G.jsx)("div",{className:"bb-root bb-root--licenseInvalid",children:(0,G.jsx)(ea,{tone:"error",title:"Invalid License",message:bt.isLocalDomain?bt.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})}):(0,G.jsxs)(Du.Provider,{value:Pe,children:[(0,G.jsxs)("div",{className:"bb-root",children:[(0,G.jsx)("input",{ref:u,type:"file",accept:hl,className:"bb-hiddenInput",onChange:Qc,disabled:b}),(0,G.jsx)("input",{ref:d,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:Xi,disabled:b}),(0,G.jsx)("input",{ref:p,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:ri,disabled:b}),(0,G.jsxs)("aside",{className:`bb-sidebar bb-sidebar--left ${se?"bb-sidebar--collapsed":""}`,children:[(0,G.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!se&&(0,G.jsx)("h1",{className:"bb-title",children:"Binding Builder"}),(0,G.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>Lt(D=>!D),"aria-label":se?"Open editor sidebar":"Collapse editor sidebar",title:se?"Open editor":"Collapse editor",children:se?"\u2192":"\u2190"})]}),!se&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)("div",{className:"bb-tabRow",children:[(0,G.jsx)("button",{type:"button",className:`bb-tab ${Gt==="object"?"bb-tab--active":""}`,onClick:()=>Ke("object"),children:"Object"}),(0,G.jsx)("button",{type:"button",className:`bb-tab ${Gt==="scene"?"bb-tab--active":""}`,onClick:()=>Ke("scene"),children:"Scene"})]}),(0,G.jsx)("section",{className:"bb-editor",children:Gt==="scene"?(0,G.jsx)(G.Fragment,{children:f?(0,G.jsx)(Zu,{config:I,onChange:$,activeSubTab:le,onActiveSubTabChange:J,cameraState:le==="Cinematic"&&Ut?{position:Ut.position,target:Ut.target,azimuthAngle:Ut.azimuthAngle,polarAngle:Ut.polarAngle}:null,onPreviewWaypoint:ya,animationClipDetails:ir.clipDetails,animationPlayback:ir}):(0,G.jsx)("div",{className:"bb-emptyEditor",children:"Upload a model to edit its scene settings."})}):!Yt||!m?(0,G.jsx)("div",{className:"bb-emptyEditor",children:"Select a generated node binding to edit its values."}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)("div",{className:"bb-editorHeader",children:(0,G.jsxs)("div",{children:[(0,G.jsx)("div",{className:"bb-sectionKicker",children:"Editing Binding"}),(0,G.jsx)("h2",{className:"bb-editorTitle",children:Yt.label||m}),(0,G.jsxs)("div",{className:"bb-editorMeta",children:[(0,G.jsx)("span",{children:Yt.type}),(0,G.jsx)("span",{children:Yt.modelObjectId})]})]})}),(0,G.jsx)(Fb,{selectedItem:m,selectedBinding:Yt,open:$e.identity,onToggle:()=>qe("identity"),updateBinding:Tr,idError:Kc}),(0,G.jsx)(Gb,{selectedItem:m,selectedBinding:Yt,open:$e.basics,onToggle:()=>qe("basics"),updateBinding:Tr}),(0,G.jsxs)($n,{title:"Material",open:$e.material,onToggle:()=>qe("material"),tooltip:"Edit the selected object's base material, textures, and surface properties.",children:[(0,G.jsx)(Vb,{disabled:!m,onApply:D=>m&&xo(m,H=>({...H,...D}))}),(0,G.jsx)(zb,{selectedItem:m,selectedMaterial:vo,pbrWorkflow:ee,onPbrWorkflowChange:Ve,openMaterialPanels:it,materialPanelEnabled:tt,onToggleMaterialPanel:on,onSetMaterialPanelState:Jn,updateSelectedMaterial:xo,setSelectedTexturePath:Zc})]}),(0,G.jsx)(Yb,{selectedItem:m,selectedBinding:Yt,open:$e.actions,onToggle:()=>qe("actions"),updateBinding:Tr}),(0,G.jsx)($b,{selectedBinding:Yt,open:$e.camera,onToggle:()=>qe("camera"),cameraState:Ut,formattedCameraState:bi,savedCameraPosition:Cr,onSaveCameraPosition:nd,onGoToSavedCamera:Hs,onClearSavedCamera:Yi,onResetView:Gs,onFitScene:rd}),(0,G.jsx)(Qb,{selectedItem:m,selectedBinding:Yt,open:$e.transform,onToggle:()=>qe("transform"),updateBinding:Tr,moveModeEnabled:Bt,onToggleMoveMode:Xt,transformSpace:en,onTransformSpaceChange:Mr,originalTransform:we.current[m]??null}),(0,G.jsx)(rp,{title:"Metrics",label:"Metrics JSON",open:$e.metrics,onToggle:()=>qe("metrics"),draft:k,error:ue,example:'{"area": 42}',onDraftChange:B,onCommit:()=>xi("metrics",k,Ee)}),(0,G.jsx)(rp,{title:"Metadata",label:"Metadata JSON",open:$e.metadata,onToggle:()=>qe("metadata"),draft:Y,error:be,example:'{"room": "kitchen"}',onDraftChange:q,onCommit:()=>xi("metadata",Y,Ce)})]})}),Gt==="object"&&(0,G.jsxs)("div",{className:"bb-toolbar",children:[(0,G.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!M.canUndo,onClick:M.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,G.jsx)(Un.Undo2,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!Zn.length,onClick:()=>Mo("bindings"),title:"Reset object bindings to default",children:(0,G.jsx)(Un.ListRestart,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!M.canRedo,onClick:M.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,G.jsx)(Un.Redo2,{size:16})})]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!Zn.length||b,onClick:wo,title:"Re-apply a previously exported objectBindings.json onto this model",children:[(0,G.jsx)(Un.Upload,{size:14}),"Import"]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsx)(Qu,{disabled:!Zn.length||v,exporting:v,onExportJson:()=>or("json"),onExportTs:()=>or("ts")})]}),Gt==="scene"&&(0,G.jsxs)("div",{className:"bb-toolbar",children:[(0,G.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!R.canUndo,onClick:R.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,G.jsx)(Un.Undo2,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",onClick:()=>Mo("scene"),title:"Reset scene config to default",children:(0,G.jsx)(Un.ListRestart,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!R.canRedo,onClick:R.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,G.jsx)(Un.Redo2,{size:16})})]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!Zn.length||b,onClick:Ma,title:"Re-apply a previously exported sceneConfig.json",children:[(0,G.jsx)(Un.Upload,{size:14}),"Import"]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsx)(Qu,{disabled:!Zn.length||b,onExportJson:()=>Ls("sceneConfig.json",av(I),"application/json"),onExportTs:()=>Ls("sceneConfig.ts",ov(I),"text/typescript")})]})]})]}),(0,G.jsxs)("main",{className:"bb-previewShell",children:[(0,G.jsxs)("div",{className:"bb-previewHeader",children:[(0,G.jsxs)("div",{className:"bb-previewToggles",children:[(0,G.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,G.jsx)("input",{type:"checkbox",checked:ot,onChange:D=>gt(D.target.checked)}),"Zoom on selected"]}),(0,G.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,G.jsx)("input",{type:"checkbox",checked:At,onChange:D=>Kn(D.target.checked)}),"Highlight on hover"]}),(0,G.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,G.jsx)("input",{type:"checkbox",checked:Ln,onChange:D=>Ne(D.target.checked)}),"Camera controller"]})]}),(0,G.jsxs)("div",{className:"bb-previewControlsColumn",children:[(0,G.jsxs)("div",{className:"bb-previewControls",children:[(0,G.jsx)("div",{className:"bb-previewMeta",children:(0,G.jsx)("span",{children:m?`Focused: ${m}`:"Select a node to inspect it"})}),f&&(0,G.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-removeModelButton",onClick:jr,children:"Remove model"})]}),f&&(0,G.jsx)("div",{className:"bb-moveHint",children:Bt?(0,G.jsx)(G.Fragment,{children:"Select a mesh \xB7 drag the colored arrows, planes, or rings"}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)("kbd",{children:"W"}),(0,G.jsx)("kbd",{children:"A"}),(0,G.jsx)("kbd",{children:"S"}),(0,G.jsx)("kbd",{children:"D"})," move \xB7 ",(0,G.jsx)("kbd",{children:"Space"}),"/",(0,G.jsx)("kbd",{children:"C"})," up \xB7 down \xB7 drag to look"]})})]})]}),(0,G.jsxs)("div",{className:"bb-preview",children:[(0,G.jsx)(ro,{visible:b||X,message:z,tone:V,spinner:b}),f?(0,G.jsx)(Ss,{modelUrl:f,tilesetUrl:x?.tilesetUrl,objectBindings:C,selectedObject:Yt,onObjectSelect:Vs,onObjectBindingsChange:L,onObjectEditLeaseChange:(D,H)=>l?.(D.modelObjectId||D.id,H),showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,onCameraChange:Yc,onViewerReady:$c,onAnnotationsChange:wa,activeAnnotation:re?.annotation??null,onActiveAnnotationChange:Os,onAnimationsReady:yo,onModelLoaded:Gi,onLoadError:Sa,onObjectCatalog:kn,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,sceneConfig:I,onSceneConfigChange:$,preserveDrawingBuffer:!0,disableZoom:!1,zoomOnSelected:ot,highlightOnHover:At,enableCameraControls:Ln,moveModeEnabled:Bt,objectTransformSpace:en,enableKeyboardNavigation:!0,showViewGizmo:!0,panelHoveredObject:At?he:null,showLoadingOverlay:!1}):(0,G.jsx)("div",{className:`bb-previewPlaceholder ${De?"bb-previewPlaceholder--dragActive":""}`,onDragEnter:zs,onDragOver:ed,onDragLeave:So,onDrop:Us,children:(0,G.jsxs)("div",{children:[(0,G.jsx)("div",{children:"Upload a GLB, GLTF, OBJ, FBX, or USDZ model, or drag a supported model/ZIP bundle here to generate editable object bindings."}),(0,G.jsx)("button",{type:"button",className:"bb-previewPlaceholderButton",onClick:Wi,disabled:b,children:b?"Loading model...":"Upload"})]})})]})]}),(0,G.jsx)(tv,{bindings:C,selectedItem:m,onSelect:Fs,onHover:js,isOpen:!Xe,onToggle:td})]}),dt&&(0,G.jsx)("div",{className:"bb-reset-overlay",onClick:Pr,children:(0,G.jsxs)("div",{className:"bb-reset-dialog",onClick:D=>D.stopPropagation(),children:[(0,G.jsxs)("div",{className:"bb-reset-header",children:[(0,G.jsxs)("h3",{className:"bb-reset-title",children:[(0,G.jsx)(Un.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Confirm Reset"]}),(0,G.jsx)("button",{className:"bb-reset-close",onClick:Pr,children:(0,G.jsx)(Un.X,{size:20})})]}),(0,G.jsxs)("div",{className:"bb-reset-body",children:[(0,G.jsxs)("p",{className:"bb-reset-message",children:["Are you sure you want to reset"," ",(0,G.jsx)("strong",{children:We==="bindings"?"Object Bindings":"Scene Config"}),"?"]}),(0,G.jsx)("p",{className:"bb-reset-details",children:We==="bindings"?"This will remove all your custom changes to object properties, groups, tags, transforms, materials, actions, camera positions, metrics, and metadata.":"This will restore all scene settings (camera, lighting, environment, background, animations, annotations, etc.) to their default values."}),(0,G.jsx)("p",{className:"bb-reset-warning",children:"This action cannot be undone!"})]}),(0,G.jsxs)("div",{className:"bb-reset-footer",children:[(0,G.jsx)("button",{className:"bb-reset-btn",onClick:Pr,children:"Cancel"}),(0,G.jsx)("button",{className:"bb-reset-btn-danger",onClick:$i,children:"Yes, Reset"})]})]})})]})}var de=require("react"),zc=require("@react-three/drei"),ei=require("@react-three/fiber"),bv=require("@react-three/fiber");var Fi=require("three"),vv=require("three-stdlib");var un=require("lucide-react");var W=require("react/jsx-runtime"),hv={color:"#93c5fd",intensity:.05},Iw=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];function zw(e){return!!(e&&"isMesh"in e&&e.isMesh)}function mv(e,t){Array.isArray(e)?e.forEach(t):t(e)}function Uw(e,t){if(!t)return;let n=t.camera;if(!(n instanceof Fi.PerspectiveCamera))return;let i=new Fi.Box3().setFromObject(e).getSize(new Fi.Vector3).length();!Number.isFinite(i)||i<=0||(n.near=i/100,n.far=i*100,n.updateProjectionMatrix(),t.maxDistance=i*10)}var fp=class extends de.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n){this.props.onLoadError?.(n)}render(){return this.state.hasError?null:this.props.children}};function Vw({url:e,format:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,hiddenKeys:a,selectedKey:o,panelHoveredKey:s,nodeRefsOut:c,onMeshesReady:l,onModelLoaded:u,onMeshClick:d,highlightOnHover:p}){let{scene:f}=vl(e,{dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r},t),g=(0,ei.useThree)(v=>v.invalidate),{setCanvasCursor:y,restoreCanvasCursor:T}=Cl(),[x,h]=(0,de.useState)(null),m=(0,de.useMemo)(()=>vv.SkeletonUtils.clone(f),[f]),S=(0,de.useMemo)(()=>{let v={};return m.traverse(P=>{if(!zw(P))return;let z=P.name||P.uuid;v[z]={key:z,label:P.name||P.type,ref:P}}),v},[m]),M=(0,de.useMemo)(()=>{let v={};for(let[P,{ref:z}]of Object.entries(S)){let V=(Array.isArray(z.material)?z.material:[z.material]).map(A=>{let j=(Wa(A)??new Fi.MeshStandardMaterial).clone();return j.userData.baseColor=j.color.clone(),j.userData.baseMap=j.map,j.userData.baseEmissive=j.emissive.clone(),j.userData.baseEmissiveMap=j.emissiveMap,j.userData.baseEmissiveIntensity=j.emissiveIntensity,j});v[P]=Array.isArray(z.material)?V:V[0]}return v},[S]);(0,de.useEffect)(()=>()=>{Object.values(M).forEach(v=>mv(v,P=>P.dispose()))},[M]);let C=(0,de.useRef)(null);(0,de.useEffect)(()=>{C.current!==e&&(C.current=e,m.updateWorldMatrix(!0,!0),Ko(m),l(S),u(m))},[e,m,S,l,u]),(0,de.useEffect)(()=>{let v=new AbortController;return Oa(m,v.signal),()=>{v.abort(),Qi(m)}},[m]);let L=(0,de.useMemo)(()=>!Js(m),[m]);(0,de.useEffect)(()=>{for(let[v,{ref:P}]of Object.entries(S))c.current[v]=P},[S,c]),(0,de.useEffect)(()=>{!p&&x!==null&&(h(null),T())},[p,x,T]),(0,de.useEffect)(()=>{for(let[v,{ref:P}]of Object.entries(S)){P.visible=!a.has(v);let z=M[v];if(!z)continue;P.material=z;let E=p&&x===v,V=p&&s===v;mv(z,A=>{if(A.color.copy(A.userData.baseColor),A.map=A.userData.baseMap??null,A.emissive.copy(A.userData.baseEmissive),A.emissiveMap=A.userData.baseEmissiveMap??null,A.emissiveIntensity=A.userData.baseEmissiveIntensity,V||E){let X=!!A.userData.baseEmissiveMap;A.emissive.set(hv.color),A.emissiveIntensity=X?A.userData.baseEmissiveIntensity:hv.intensity}A.needsUpdate=!0})}g()},[S,M,x,o,s,p,a,g]);let b=v=>{let P=v;for(;P;){let z=P.name||P.uuid;if(S[z])return z;P=P.parent}return null},_=L?{onClick:v=>{let P=b(v.object);P&&(v.stopPropagation(),d(P))},...p?{onPointerOver:v=>{let P=b(v.object);P&&(v.stopPropagation(),y("pointer"),h(P))},onPointerOut:v=>{v.stopPropagation(),T(),h(null)}}:{}}:{};return(0,W.jsx)("primitive",{object:m,..._})}function Fw({scene:e,controlsRef:t,refitOnResize:n,onInitialFitComplete:i}){let r=(0,de.useRef)(!1),a=(0,ei.useThree)(c=>c.invalidate),o=(0,ei.useThree)(c=>c.size),s=(0,de.useRef)(null);return(0,de.useEffect)(()=>{r.current=!1,a()},[a,e]),(0,ei.useFrame)(()=>{if(!r.current){if(!e||!t.current){a();return}r.current=!0,Uw(e,t.current),t.current.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}).finally(i)}}),(0,de.useEffect)(()=>{if(!(!n||!r.current||!e||!t.current))return s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{t.current?.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}),a()},150),()=>{s.current&&clearTimeout(s.current)}},[o.width,o.height,n]),null}function jw({exposure:e}){let t=(0,ei.useThree)(i=>i.gl),n=(0,ei.useThree)(i=>i.invalidate);return(0,de.useEffect)(()=>{t.toneMappingExposure=e,n()},[t,e,n]),null}function Hw({enabled:e,controlsRef:t}){let n=(0,ei.useThree)(i=>i.invalidate);return(0,ei.useFrame)((i,r)=>{!e||!t.current||(t.current.rotate(r*.2,0,!1),n())}),null}function Ic(e){return Array.from(e.types).includes("Files")}function fv({label:e,checked:t,onChange:n}){return(0,W.jsxs)("div",{className:"env-row",children:[(0,W.jsx)("span",{className:"env-row__label",children:e}),(0,W.jsx)("div",{className:"env-row__value",children:(0,W.jsx)("button",{className:"env-checkbox-btn",onClick:()=>n(!t),children:(0,W.jsx)("span",{className:`env-checkbox${t?" env-checkbox--checked":""}`,children:t&&(0,W.jsx)(un.Check,{size:9,strokeWidth:2,color:"white"})})})})]})}function hp({label:e,value:t,onChange:n}){return(0,W.jsxs)("div",{className:"env-row",children:[(0,W.jsx)("span",{className:"env-row__label",children:e}),(0,W.jsx)("div",{className:"env-row__value",children:(0,W.jsxs)("div",{className:"env-color-swatch",style:{background:t},children:[(0,W.jsx)("span",{className:"env-color-swatch__hex",children:t}),(0,W.jsx)("input",{type:"color",className:"env-color-swatch__input",value:t,onChange:i=>n(i.target.value)})]})})]})}function mp({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,W.jsxs)("div",{className:"env-row",children:[(0,W.jsx)("span",{className:"env-row__label",children:e}),(0,W.jsxs)("div",{className:"env-row__value env-row__value--slider",children:[(0,W.jsx)("input",{type:"range",className:"env-slider",min:n,max:i,step:r,value:t,onChange:o=>a(Number(o.target.value))}),(0,W.jsx)("span",{className:"env-slider__value",children:t.toFixed(2)})]})]})}function Gw({label:e,value:t,options:n,onChange:i}){return(0,W.jsxs)("div",{className:"env-row",children:[(0,W.jsx)("span",{className:"env-row__label",children:e}),(0,W.jsx)("div",{className:"env-row__value",children:(0,W.jsx)("select",{className:"env-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,W.jsx)("option",{value:r,children:r},r))})})]})}function gv({title:e,children:t}){let[n,i]=(0,de.useState)(!1);return(0,W.jsxs)("div",{className:"env-section",children:[(0,W.jsxs)("button",{className:"env-section__header",onClick:()=>i(r=>!r),children:[(0,W.jsx)(un.ChevronDown,{size:12,strokeWidth:2,className:`env-section__chevron${n?" env-section__chevron--collapsed":""}`}),(0,W.jsx)("span",{children:e})]}),!n&&(0,W.jsx)("div",{className:"env-section__body",children:t})]})}function Ww({isOpen:e,onToggle:t,settings:n,onChange:i}){return(0,W.jsxs)("div",{className:`left-panel-wrapper ${e?"left-panel-wrapper--open":"left-panel-wrapper--closed"}`,children:[!e&&(0,W.jsx)("button",{className:"side-panel__open-btn side-panel__open-btn--left",onClick:()=>t(!0),children:(0,W.jsx)(un.Settings,{size:20,strokeWidth:1.8})}),(0,W.jsxs)("div",{className:`side-panel side-panel--left ${e?"side-panel--open-left":"side-panel--closed-left"}`,"aria-hidden":!e,children:[(0,W.jsx)("div",{className:"side-panel__header",children:(0,W.jsxs)("div",{className:"side-panel__header-top",children:[(0,W.jsx)("span",{className:"side-panel__eyebrow",children:"Scene Settings"}),(0,W.jsx)("button",{className:"side-panel__close-btn",onClick:()=>t(!1),title:"Close",children:(0,W.jsx)(un.X,{size:12,strokeWidth:1.6})})]})}),(0,W.jsxs)("div",{className:"env-controls",children:[(0,W.jsxs)(gv,{title:"Background",children:[(0,W.jsx)(fv,{label:"Background",checked:n.backgroundEnabled,onChange:r=>i("backgroundEnabled",r)}),(0,W.jsx)(hp,{label:"Background Color",value:n.backgroundColor,onChange:r=>i("backgroundColor",r)}),(0,W.jsx)(Gw,{label:"Environment",value:n.envPreset,options:Iw,onChange:r=>i("envPreset",r)}),(0,W.jsx)(fv,{label:"Auto Rotate",checked:n.autoRotate,onChange:r=>i("autoRotate",r)})]}),(0,W.jsxs)(gv,{title:"Lighting",children:[(0,W.jsx)(mp,{label:"Exposure",value:n.exposure,min:0,max:2,step:.05,onChange:r=>i("exposure",r)}),(0,W.jsx)(mp,{label:"Ambient Light Intensity",value:n.ambientIntensity,min:0,max:3,step:.05,onChange:r=>i("ambientIntensity",r)}),(0,W.jsx)(hp,{label:"Ambient Light Color",value:n.ambientColor,onChange:r=>i("ambientColor",r)}),(0,W.jsx)(mp,{label:"Direct Light Intensity",value:n.directionalIntensity,min:0,max:5,step:.05,onChange:r=>i("directionalIntensity",r)}),(0,W.jsx)(hp,{label:"Direct Light Color",value:n.directionalColor,onChange:r=>i("directionalColor",r)})]})]})]})]})}function Xw({meshKeys:e,hiddenKeys:t,selectedKey:n,isOpen:i,onToggle:r,onFocus:a,onHover:o,onToggleVisibility:s}){let[c,l]=(0,de.useState)(""),[u,d]=(0,de.useState)(null),p=Object.values(e).filter(f=>f.label.toLowerCase().includes(c.toLowerCase()));return(0,W.jsxs)("div",{className:`right-panel-wrapper ${i?"right-panel-wrapper--open":"right-panel-wrapper--closed"}`,children:[!i&&(0,W.jsx)("button",{className:"side-panel__open-btn",onClick:()=>r(!0),children:(0,W.jsx)(un.Boxes,{size:20,strokeWidth:1.8})}),(0,W.jsxs)("div",{className:`side-panel ${i?"side-panel--open":"side-panel--closed"}`,"aria-hidden":!i,children:[(0,W.jsxs)("div",{className:"side-panel__header",children:[(0,W.jsxs)("div",{className:"side-panel__header-top",children:[(0,W.jsx)("span",{className:"side-panel__eyebrow",children:"SCENE OBJECTS"}),(0,W.jsx)("button",{className:"side-panel__close-btn",onClick:()=>r(!1),title:"Close",children:(0,W.jsx)(un.X,{size:12,strokeWidth:1.6})})]}),(0,W.jsxs)("p",{className:"side-panel__title",children:[p.length," objects"]})]}),(0,W.jsx)("div",{className:"side-panel__search-wrap",children:(0,W.jsx)("input",{className:"side-panel__search",type:"text",placeholder:"Search objects",value:c,onChange:f=>l(f.target.value)})}),(0,W.jsx)("div",{className:"side-panel__list",children:p.map(({key:f,label:g})=>{let y=!t.has(f),T=n===f,x=u===f;return(0,W.jsxs)("div",{onClick:()=>a(f),onMouseEnter:()=>{d(f),o(f)},onMouseLeave:()=>{d(null),o(null)},className:["side-panel__row",x?"side-panel__row--hovered":"",T?"side-panel__row--selected":""].filter(Boolean).join(" "),children:[(0,W.jsx)("span",{className:`side-panel__label${x||T?" side-panel__label--hovered":""}`,children:g}),(0,W.jsx)("button",{className:"side-panel__vis-btn",title:y?"Hide":"Show",onClick:h=>{h.stopPropagation(),s(f)},children:(0,W.jsx)("span",{className:`side-panel__checkbox${y?" side-panel__checkbox--checked":""}`,children:y&&(0,W.jsx)(un.Check,{size:9,strokeWidth:5,color:"white"})})})]},f)})})]})]})}function gp({modelUrl:e,modelFormat:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r=!0,backgroundColor:a="#1a1a1a",showSceneObjectsPanel:o=!0,showSceneSettingsPanel:s=!0,enableModelUpload:c=!1,zoomOnSelected:l=!1,highlightOnHover:u=!1,showLoadingOverlay:d=!0,refitOnResize:p=!0,backgroundEnabled:f=!1,autoRotate:g=!1,envPreset:y="city",exposure:T=1,ambientIntensity:x=.6,ambientColor:h="#ffffff",directionalIntensity:m=1.2,directionalColor:S="#ffffff",onModelLoaded:M,onLoadError:C}){let L=(0,de.useRef)(null),b=(0,de.useRef)({}),_=(0,de.useRef)(null),v=(0,de.useRef)(null),P=(0,de.useRef)(0),[z,E]=(0,de.useState)(null),[V,A]=(0,de.useState)(null),[X,j]=(0,de.useState)(!1),[k,B]=(0,de.useState)({}),[Y,q]=(0,de.useState)(new Set),[ue,Ee]=(0,de.useState)(null),[be,Ce]=(0,de.useState)(null),[De,ze]=(0,de.useState)(null),[se,Lt]=(0,de.useState)(null),[Xe,Ge]=(0,de.useState)(!1),[$e,rt]=(0,de.useState)(!1),[it,Qt]=(0,de.useState)(!1),[qe,on]=(0,de.useState)(!1),[Gt,Ke]=(0,de.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[le,J]=(0,de.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[ee,Ve]=(0,de.useState)({backgroundEnabled:f,backgroundColor:a,autoRotate:g,envPreset:y,exposure:T,ambientIntensity:x,ambientColor:h,directionalIntensity:m,directionalColor:S}),tt=c?De:e,Fe=(0,de.useCallback)(()=>{E(null),A(null),j(!1),B({}),q(new Set),Ee(null),Ce(null),Ge(!1),Qt(!1)},[]),xe=(0,de.useCallback)(()=>{v.current?.cleanup(),v.current=null},[]),ot=(0,de.useCallback)(()=>{xe(),ze(null),Lt(null),Fe(),Ve({backgroundEnabled:f,backgroundColor:a,autoRotate:g,envPreset:y,exposure:T,ambientIntensity:x,ambientColor:h,directionalIntensity:m,directionalColor:S})},[h,x,g,a,f,S,m,y,T,Fe,xe]),gt=(0,de.useCallback)(async we=>{rt(!0);try{let R=await ml(we);xe(),v.current=R,ze(R.url),Lt(R.name),Fe()}catch(R){Ge(!0),C?.(R)}finally{rt(!1)}},[C,Fe,xe]),At=(0,de.useCallback)(we=>{let R=we?.[0];R&>(R)},[gt]);(0,de.useEffect)(()=>()=>{xe()},[xe]);let Kn=(0,de.useCallback)((we,R)=>{Ve(I=>({...I,[we]:R}))},[]);(0,de.useEffect)(()=>{Ve(we=>({...we,backgroundColor:a}))},[a]),(0,de.useEffect)(()=>{Fe()},[tt,Fe]);let Ln=(0,de.useCallback)(we=>{B(we),q(new Set),Ee(null)},[]),Ne=(0,de.useCallback)(we=>{E(we),Ge(!1);let R=Io(we);A(R>Ji?R:null),j(!1),M?.(we)},[M]),dt=(0,de.useCallback)(we=>{Ge(!0),C?.(we)},[C]),_t=(0,de.useCallback)(we=>{if(Ee(we),!l)return;let R=b.current[we];!R||!L.current||L.current.fitToBox(R,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[l]),We=(0,de.useCallback)(we=>{q(R=>{let I=new Set(R);return I.has(we)?I.delete(we):I.add(we),I})},[]),Wt=(0,de.useCallback)(we=>{!c||!Ic(we.dataTransfer)||(we.preventDefault(),we.stopPropagation(),P.current+=1,on(!0))},[c]),Bt=(0,de.useCallback)(we=>{!c||!Ic(we.dataTransfer)||(we.preventDefault(),we.stopPropagation(),we.dataTransfer.dropEffect="copy",on(!0))},[c]),Xt=(0,de.useCallback)(we=>{!c||!Ic(we.dataTransfer)||(we.preventDefault(),we.stopPropagation(),P.current=Math.max(0,P.current-1),P.current===0&&on(!1))},[c]),en=(0,de.useCallback)(we=>{!c||!Ic(we.dataTransfer)||(we.preventDefault(),we.stopPropagation(),P.current=0,on(!1),At(we.dataTransfer.files))},[c,At]),Mr=d&&($e||!!(tt&&!Xe&&(!z||!it)));return(0,W.jsxs)("div",{className:"smv-root",style:{background:ee.backgroundColor},onDragEnter:Wt,onDragOver:Bt,onDragLeave:Xt,onDrop:en,children:[s&&tt&&(0,W.jsx)(Ww,{isOpen:le,onToggle:J,settings:ee,onChange:Kn}),(0,W.jsxs)("div",{className:"smv-canvasArea",children:[V!==null&&!X&&(0,W.jsxs)("div",{className:"smv-largeModelBanner",children:[(0,W.jsx)(un.AlertTriangle,{size:14,className:"smv-largeModelBanner__icon"}),(0,W.jsxs)("span",{children:["Very large model detected (",Math.round(V/1e6),"M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the scene objects panel to select parts."]}),(0,W.jsx)("button",{type:"button",className:"smv-largeModelBanner__dismiss",onClick:()=>j(!0),"aria-label":"Dismiss",children:(0,W.jsx)(un.X,{size:12})})]}),c?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)("input",{ref:_,type:"file",accept:hl,className:"smv-upload-input",onChange:we=>{At(we.target.files),we.currentTarget.value=""}}),tt?(0,W.jsx)("div",{className:"smv-upload-toolbar",children:(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)("span",{className:"smv-upload-toolbar__name",children:se??"Uploaded model"}),(0,W.jsxs)("button",{type:"button",className:"smv-upload-toolbar__button smv-upload-toolbar__button--ghost",onClick:ot,children:[(0,W.jsx)(un.Trash2,{size:14}),"Clear"]})]})}):null]}):null,tt?(0,W.jsx)(bv.Canvas,{dpr:[1,2],frameloop:"demand",resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:{background:ee.backgroundColor},camera:{position:[0,0,5],fov:45,near:.1,far:1e3},children:(0,W.jsxs)(de.Suspense,{fallback:null,children:[(0,W.jsx)("ambientLight",{intensity:ee.ambientIntensity,color:ee.ambientColor}),(0,W.jsx)("directionalLight",{position:[-4,5,7],intensity:ee.directionalIntensity,color:ee.directionalColor,castShadow:!0}),(0,W.jsx)("directionalLight",{position:[-5,5,5],intensity:.5}),(0,W.jsx)(de.Suspense,{fallback:null,children:(0,W.jsx)(zc.Environment,{preset:ee.envPreset,background:ee.backgroundEnabled})}),(0,W.jsx)(jw,{exposure:ee.exposure}),(0,W.jsx)(Hw,{enabled:ee.autoRotate,controlsRef:L}),(0,W.jsx)(fp,{onLoadError:dt,children:(0,W.jsx)(de.Suspense,{fallback:null,children:(0,W.jsx)(Vw,{url:tt,format:De?void 0:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,hiddenKeys:Y,selectedKey:ue,panelHoveredKey:be,nodeRefsOut:b,onMeshesReady:Ln,onModelLoaded:Ne,onMeshClick:_t,highlightOnHover:u})})},tt),(0,W.jsx)(Fw,{scene:z,controlsRef:L,refitOnResize:p,onInitialFitComplete:()=>Qt(!0)}),(0,W.jsx)(zc.CameraControls,{ref:L,makeDefault:!0,smoothTime:.3})]})}):(0,W.jsx)("div",{className:"smv-upload-empty-state",style:{background:ee.backgroundColor},children:(0,W.jsxs)("div",{className:"smv-upload-empty-state__card",children:[(0,W.jsx)("div",{className:"smv-upload-empty-state__icon",children:(0,W.jsx)(un.Upload,{size:24})}),(0,W.jsxs)("p",{className:"smv-upload-empty-state__body",children:["Drag and drop ",(0,W.jsx)("code",{children:".glb"}),", ",(0,W.jsx)("code",{children:".gltf"}),","," ",(0,W.jsx)("code",{children:".obj"}),", ",(0,W.jsx)("code",{children:".fbx"}),", ",(0,W.jsx)("code",{children:".usdz"}),", or"," ",(0,W.jsx)("code",{children:".zip"})," here"]}),(0,W.jsxs)("button",{type:"button",className:"smv-upload-empty-state__button",onClick:()=>_.current?.click(),children:[(0,W.jsx)(un.Upload,{size:15}),"Choose model"]})]})}),(0,W.jsx)(ro,{visible:Mr,message:$e?"Preparing model...":"Loading model..."}),c&&qe?(0,W.jsx)("div",{className:"smv-upload-drop-overlay",children:(0,W.jsxs)("div",{className:"smv-upload-drop-overlay__card",children:[(0,W.jsx)(un.Upload,{size:20}),(0,W.jsx)("span",{children:"Release to load your model"})]})}):null]}),o&&tt&&(0,W.jsx)(Xw,{meshKeys:k,hiddenKeys:Y,selectedKey:ue,isOpen:Gt,onToggle:Ke,onFocus:_t,onHover:Ce,onToggleVisibility:We})]})}var ks=require("react");function xv(e=null){let[t,n]=(0,ks.useState)(e),i=(0,ks.useCallback)(a=>{n(a)},[n]),r=(0,ks.useCallback)(()=>{n(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:n,handleObjectSelect:i,clearSelection:r}}var yv=require("react");function wv(e,t){return(0,yv.useMemo)(()=>{if(!t)return null;let n=e[t];return n||(Object.values(e).find(i=>i.id===t||i.modelObjectId===t)??null)},[e,t])}var _v=require("react");function Sv(e){return(0,_v.useMemo)(()=>Object.values(e).map(t=>t.modelObjectId),[e])}var Jt=require("react");function bp(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Bs(e,t){if(!bp(t))return t;let n=bp(e)?{...e}:{};for(let i of Object.keys(t)){let r=t[i];n[i]=bp(r)?Bs(n[i],r):r}return n}function qw(e){return typeof e=="object"&&!Array.isArray(e)}function Yw(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:e.type===t.type}function Vr(e,t){if(qw(t))return Object.entries(e).filter(([,r])=>Yw(r,t)).map(([r])=>r);let i=(typeof t=="string"?[t]:t).map(r=>Pn(e,r)).filter(r=>r!==null);return[...new Set(i)]}function Uc(e,t){return Vr(e,t).map(n=>e[n]).filter(n=>n!==void 0)}function $w(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!="string"}function va(e,t,n){let i=$w(t)?t:[{ids:t,patch:n??{}}],r=e;for(let a of i)for(let o of Vr(r,a.ids)){let s=r[o];if(!s)continue;let c=Bs(s,a.patch);r===e&&(r={...e}),r[o]=c}return r}function Vc(e){return{style:{material:e}}}var Mv={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 Cv(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n&&typeof n=="object"?{...n}:n]))}function Kw(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function Tv(e){let[t,n]=(0,Jt.useState)(e),i=(0,Jt.useCallback)((L,b)=>{n(_=>b===void 0?va(_,L):va(_,L,b))},[]),r=(0,Jt.useCallback)((L,b)=>i(L,Vc(b)),[i]),a=(0,Jt.useCallback)((L,b)=>r(L,{baseColor:b}),[r]),o=(0,Jt.useCallback)((L,b,_="baseColor")=>{let v=Mv[_],P=typeof b=="string"?{path:b}:b;i(L,{style:{material:{[v]:P}}})},[i]),s=(0,Jt.useCallback)((L,b="baseColor")=>{let _=Mv[b];i(L,{style:{material:{[_]:void 0}}})},[i]),c=(0,Jt.useCallback)((L,b)=>{n(_=>{let v=Pn(_,L);if(!v)return _;let P=Cv(_[v]?.style?.material),z=Vr(_,b);if(z.length===0)return _;let E=_;for(let V of z){let A=_[V];A&&(E===_&&(E={..._}),E[V]={...A,style:{...A.style,material:Cv(P)}})}return E})},[]),l=(0,Jt.useCallback)(L=>i(L,{style:{material:void 0}}),[i]),u=(0,Jt.useCallback)((L,b)=>i(L,{transform:b}),[i]),d=(0,Jt.useCallback)(L=>i(L,{transform:void 0}),[i]),p=(0,Jt.useCallback)((L,b)=>i(L,{metadata:b}),[i]),f=(0,Jt.useCallback)(L=>Uc(t,L),[t]),g=(0,Jt.useCallback)(L=>Vr(t,L).map(b=>t[b]?.id??b),[t]),y=(0,Jt.useCallback)(L=>{let b=Pn(t,L);return b?t[b]?.style?.material??null:null},[t]),T=(0,Jt.useCallback)(L=>i(L,{visible:!1}),[i]),x=(0,Jt.useCallback)(L=>i(L,{visible:!0}),[i]),h=(0,Jt.useCallback)(L=>{n(b=>{let _=Vr(b,L).reduce((v,P)=>{let z=b[P];return z&&v.push({ids:P,patch:{visible:z.visible===!1}}),v},[]);return va(b,_)})},[n]),m=(0,Jt.useCallback)(()=>{n(L=>va(L,Object.keys(L),{visible:!0}))},[n]),S=(0,Jt.useMemo)(()=>Kw(t),[t]),M=(0,Jt.useMemo)(()=>Object.keys(S).map(L=>t[L]?.id??L),[S,t]),C=(0,Jt.useCallback)(L=>{let b=Pn(t,L);return b?t[b]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:n,updateObjectBindings:i,setMaterial:r,setBaseColor:a,setTexture:o,clearTexture:s,copyMaterial:c,resetMaterial:l,getMaterial:y,setTransform:u,resetTransform:d,updateMetadata:p,selectObjectBindings:f,selectObjectBindingIds:g,hiddenObjects:S,hiddenObjectIds:M,hideObject:T,showObject:x,toggleObjectVisibility:h,isObjectHidden:C,clearHiddenObjects:m}}function Pv(e){return e}var Cn=require("react");function Fc(e,t){return Bs(e,t)}var Zw={type:"point",color:"#ffffff",intensity:1,position:[0,0,0],distance:0,decay:2,attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0};function Av(e){let t=(0,Cn.useRef)(null),[n,i]=(0,Cn.useState)(()=>{let x=typeof e=="function"?e():e;return t.current=x,x}),r=(0,Cn.useCallback)(x=>{i(h=>{let m=typeof x=="function"?x(h):x;return Fc(h,m)})},[]),a=(0,Cn.useCallback)(()=>{let x=t.current;x&&i(x)},[]),o=(0,Cn.useCallback)((x,h)=>{r(m=>({lighting:{lights:m.lighting.lights.map(S=>S.id===x?{...S,...h}:S)}}))},[r]),s=(0,Cn.useCallback)(x=>{r(h=>h.lighting.lights.some(m=>m.id===x.id)?{}:{lighting:{lights:[...h.lighting.lights,{...Zw,...x}]}})},[r]),c=(0,Cn.useCallback)(x=>{r(h=>({lighting:{lights:h.lighting.lights.filter(m=>m.id!==x)}}))},[r]),l=(0,Cn.useCallback)((x,h)=>o(x,{intensity:h}),[o]),u=(0,Cn.useCallback)((x,h)=>o(x,{color:h}),[o]),d=(0,Cn.useCallback)(x=>o(x,{visible:!0}),[o]),p=(0,Cn.useCallback)(x=>o(x,{visible:!1}),[o]),f=(0,Cn.useCallback)(x=>{r(h=>({lighting:{lights:h.lighting.lights.map(m=>m.id===x?{...m,visible:!m.visible}:m)}}))},[r]),g=(0,Cn.useCallback)((x,h)=>o(x,{attachment:h,attachedToCamera:!1}),[o]),y=(0,Cn.useCallback)(x=>o(x,{attachment:void 0}),[o]),T=(0,Cn.useMemo)(()=>({items:n.lighting.lights,get:x=>n.lighting.lights.find(h=>h.id===x),add:s,update:o,remove:c,setIntensity:l,setColor:u,show:d,hide:p,toggle:f,attach:g,detach:y}),[n.lighting.lights,s,o,c,l,u,d,p,f,g,y]);return{sceneConfig:n,setSceneConfig:i,updateSceneConfig:r,resetSceneConfig:a,lights:T}}var jc=require("react");function Ev(){let[e,t]=(0,jc.useState)(null),n=(0,jc.useCallback)(i=>{t(i)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:n}}var ti=require("react"),Ds=require("three");function Hc(e){return[e.x,e.y,e.z]}function Rv(){let[e,t]=(0,ti.useState)(!0),[n,i]=(0,ti.useState)(!1),[r,a]=(0,ti.useState)(null),[o,s]=(0,ti.useState)(null),[c,l]=(0,ti.useState)(0),u=(0,ti.useCallback)(f=>{let g=new Ds.Box3().setFromObject(f),y=g.min.clone(),T=g.max.clone(),x=new Ds.Vector3,h=new Ds.Vector3,m=0;f.traverse(S=>{"isMesh"in S&&S.isMesh&&(m+=1)}),g.getCenter(x),g.getSize(h),s({min:Hc(y),max:Hc(T),center:Hc(x),size:Hc(h)}),l(m),a(null),t(!1),i(!0)},[]),d=(0,ti.useCallback)(f=>{a(f),s(null),l(0),t(!1),i(!1)},[]),p=(0,ti.useCallback)(()=>{t(!0),i(!1),a(null),s(null),l(0)},[]);return{isLoading:e,isReady:n,error:r,bounds:o,objectCount:c,handleModelLoaded:u,handleLoadError:d,resetModelState:p}}var Gc=require("react");function Lv({bindings:e,scene:t,camera:n,animations:i,onAction:r}){let{objectBindings:a,updateObjectBindings:o,showObject:s,hideObject:c,toggleObjectVisibility:l}=e,u=t?.updateSceneConfig,d=n?.focusObject,p=n?.fitScene,f=n?.resetView,g=n?.setCameraTarget,y=n?.setCameraState,T=i?.play,x=i?.pause,h=i?.stop,m=i?.setSpeed,S=i?.seek,M=(0,Gc.useCallback)(b=>{let _=Pn(a,b);return _?a[_]?.actions??[]:[]},[a]),C=(0,Gc.useCallback)(async b=>{for(let _ of b.action.effects??[]){if("objectBindings"in _){o(_.target,_.objectBindings);continue}if("sceneConfig"in _){u?.(_.sceneConfig);continue}if("visibility"in _){_.visibility==="show"?s(_.target):_.visibility==="hide"?c(_.target):l(_.target);continue}if("camera"in _){let P=_.camera;P.type==="focus-object"?await d?.(P.objectId??b.objectId):P.type==="fit-scene"?await p?.():P.type==="reset"?await f?.():P.type==="set-target"?await g?.(P.target,P.transition??!0):await y?.(P.state,P.transition??!0);continue}let v=_.animation;v.type==="play"?T?.(v.clip):v.type==="pause"?x?.():v.type==="stop"?h?.():v.type==="set-speed"?m?.(v.speed):S?.(v.time)}await r?.(b)},[p,d,c,r,x,T,f,S,m,y,g,s,h,l,o,u]),L=(0,Gc.useCallback)(async(b,_)=>{let v=Pn(a,b);if(!v)return null;let P=a[v],z=P?.actions?.find(V=>V.id===_);if(!P||!z)return null;let E={objectId:v,action:z,binding:P};return await C(E),E},[C,a]);return{getActionsForObject:M,handleAction:C,runAction:L}}var ji=require("react");function Jw(e){return typeof e=="function"?e:e?.handleViewerReady??null}function kv(...e){let t=(0,ji.useRef)(null),n=(0,ji.useRef)(e);n.current=e;let i=(0,ji.useCallback)(s=>{t.current=s;let c=new Set;for(let l of n.current){let u=Jw(l);u&&!c.has(u)&&(c.add(u),u(s))}},[]),r=(0,ji.useCallback)(()=>t.current,[]),a=(0,ji.useCallback)(s=>{let c=t.current;return c?c.captureImage(s):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),o=(0,ji.useCallback)(()=>{let s=t.current;return s?(s.invalidate(),!0):!1},[]);return{handleViewerReady:i,getViewer:r,captureImage:a,invalidate:o}}var Ye=require("react"),go=require("three");var yp=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],Wc=1;function Xc(e){return typeof e=="string"?[e]:e}function qc(e,t=0,n=1){return Math.min(n,Math.max(t,e))}function vp(e,t){return e+Math.random()*(t-e)}function Bv([e,t],n){return e+(t-e)*n}function xp([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 Dv(e,t){let n=qc(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 Qw(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(n=>n instanceof go.Material):[]}function e_(e){let t={opacity:e.opacity,transparent:e.transparent};e.color&&(t.baseColor=`#${e.color.getHexString()}`),e.emissive&&(t.emissive=`#${e.emissive.getHexString()}`);for(let n of yp){let i=e[n];typeof i=="number"&&(t[n]=i)}return t}function Nv(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 yp){let i=t[n];i!==void 0&&typeof e[n]=="number"&&(e[n]=i)}t.transparent!==void 0&&(e.transparent=t.transparent),e.needsUpdate=!0}function t_(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 n_(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 Ov(e={}){let t=(0,Ye.useRef)(e);t.current=e;let n=(0,Ye.useRef)(null),i=(0,Ye.useRef)(null),r=(0,Ye.useRef)(null),a=(0,Ye.useRef)(new Map),o=(0,Ye.useRef)(new Map),s=(0,Ye.useRef)(new Map),c=(0,Ye.useRef)(new Map),l=(0,Ye.useCallback)(k=>{let B=n.current;if(!B)return null;let Y=Pn(B.objectBindings,k);return B.nodeRefs[k]??(Y?B.nodeRefs[Y]:null)??(B.scene?Dr(B.scene,k):null)??null},[]),u=(0,Ye.useCallback)(k=>{let B=n.current;return B?typeof k=="object"&&!Array.isArray(k)?Vr(B.objectBindings,k):Xc(k).map(Y=>Pn(B.objectBindings,Y)??Y):typeof k=="string"?[k]:Array.isArray(k)?k:[]},[]),d=(0,Ye.useCallback)(()=>{n.current?.invalidate()},[]),p=(0,Ye.useCallback)((k,B)=>{let Y=!1;for(let q of u(k)){let ue=l(q);if(ue)for(let Ee of Qw(ue))s.current.has(Ee)||s.current.set(Ee,e_(Ee)),Nv(Ee,B),Y=!0}return Y},[l,u]),f=(0,Ye.useCallback)((k,B)=>{let Y=p(k,B);return Y&&d(),Y},[d,p]),g=(0,Ye.useCallback)((k,B)=>{let Y=!1;for(let q of u(k)){let ue=l(q);ue&&(c.current.has(ue)||c.current.set(ue,t_(ue)),n_(ue,B),Y=!0)}return Y},[l,u]),y=(0,Ye.useCallback)((k,B)=>{let Y=g(k,B);return Y&&d(),Y},[d,g]),T=(0,Ye.useCallback)(k=>{let B=l(k);if(!B)return null;B.updateWorldMatrix(!0,!1);let Y=B.getWorldPosition(new go.Vector3);return[Y.x,Y.y,Y.z]},[l]),x=(0,Ye.useCallback)(k=>{let B=o.current.get(k);return B?(B.light.removeFromParent(),B.light.dispose(),o.current.delete(k),d(),!0):!1},[d]),h=(0,Ye.useCallback)(k=>{let B=l(k.target);if(!B)return!1;let Y=o.current.get(k.id),q=Y?.light??new go.PointLight;return Y&&Y.target!==k.target&&q.removeFromParent(),q.name=`react-immersive-runtime-light:${k.id}`,q.color.set(k.color??"#ffffff"),q.intensity=k.intensity??1,q.distance=k.distance??0,q.decay=k.decay??2,q.castShadow=k.castShadow??!1,q.position.set(...k.offset??[0,0,0]),q.parent!==B&&B.add(q),o.current.set(k.id,{light:q,target:k.target}),d(),!0},[d,l]),m=(0,Ye.useCallback)((k,B)=>{let Y=o.current.get(k);if(!Y)return!1;if(B.target&&B.target!==Y.target){let q=l(B.target);if(!q)return!1;Y.light.removeFromParent(),q.add(Y.light),Y.target=B.target}return B.color!==void 0&&Y.light.color.set(B.color),B.intensity!==void 0&&(Y.light.intensity=B.intensity),B.distance!==void 0&&(Y.light.distance=B.distance),B.decay!==void 0&&(Y.light.decay=B.decay),B.offset!==void 0&&Y.light.position.set(...B.offset),B.castShadow!==void 0&&(Y.light.castShadow=B.castShadow),d(),!0},[d,l]),S=(0,Ye.useCallback)((k,B)=>{let Y=q=>B[q%B.length]??0;for(let q of k.materials??[])u(q.targets).forEach((ue,Ee)=>{let be=Y(Ee),Ce={};for(let De of yp){let ze=q.values[De];ze&&(Ce[De]=Bv(ze,be))}p(ue,Ce)});for(let q of k.transforms??[])u(q.targets).forEach((ue,Ee)=>{let be=Y(Ee),Ce={};q.values.position&&(Ce.position=xp(q.values.position,be)),q.values.rotation&&(Ce.rotation=xp(q.values.rotation,be)),q.values.scale&&(Ce.scale=xp(q.values.scale,be)),g(ue,Ce)});for(let q of k.lights??[])Xc(q.lights).forEach((ue,Ee)=>{let be=o.current.get(ue);be&&(be.light.intensity=Bv(q.intensity,Y(Ee)))})},[u,p,g]),M=(0,Ye.useRef)(()=>{}),C=(0,Ye.useRef)(()=>{});C.current=k=>{r.current=null;let B=!1;for(let[Y,q]of a.current){q.startedAt===null&&(q.startedAt=k);let ue=q.lastFrameAt??k;q.lastFrameAt=k;let Ee=q.override&&q.override.until>k?q.override.level:null;q.override&&Ee===null&&(q.override=null);let be=q.update(k,k-q.startedAt,Math.min(100,k-ue),Ee);B=!0,be||(a.current.delete(Y),q.onComplete?.())}B&&d(),a.current.size>0&&M.current()},M.current=()=>{r.current!==null||typeof requestAnimationFrame>"u"||(r.current=requestAnimationFrame(k=>C.current(k)))};let L=(0,Ye.useCallback)(k=>(a.current.set(k.id,k),M.current(),k.id),[]),b=(0,Ye.useCallback)((k,B={})=>{let Y=B.id??`transition-${Wc++}`,q=Math.max(1,B.duration??400),ue=B.easing??"ease-in-out";return L({id:Y,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(Ee,be,Ce,De)=>{let ze=De??Dv(be/q,ue);return S(k,[ze]),be<q}})},[S,L]),_=(0,Ye.useCallback)((k,B={})=>{let Y=B.id??`pulse-${Wc++}`,q=Math.max(1,B.duration??1e3),ue=B.minLevel??0,Ee=B.maxLevel??1,be=B.repeat??1/0,Ce=B.synchronized??!0,De=Math.max(1,...[...k.materials??[],...k.transforms??[]].map(ze=>u(ze.targets).length),...(k.lights??[]).map(ze=>Xc(ze.lights).length));return L({id:Y,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(ze,se,Lt,Xe)=>{let Ge=se/q,$e=Array.from({length:Ce?1:De},(rt,it)=>{if(Xe!==null)return Xe;let Qt=Ge+(Ce?0:it/De),qe=.5-Math.cos(Qt%1*Math.PI*2)/2;return ue+(Ee-ue)*qe});return S(k,$e),be===1/0||Ge<be}})},[S,L,u]),v=(0,Ye.useCallback)((k,B={})=>{let Y=B.id??`timeline-${Wc++}`,q=B.repeat??1,ue=k.map(be=>({...be,duration:Math.max(1,be.duration),hold:Math.max(0,be.hold??0)})),Ee=Math.max(1,ue.reduce((be,Ce)=>be+Ce.duration+Ce.hold,0));return L({id:Y,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(be,Ce,De,ze)=>{if(ue.length===0||q<=0)return!1;let se=Ce/Ee;if(q!==1/0&&se>=q){for(let Ge of ue)S(Ge.channels,[1]);return!1}let Lt=Ce%Ee,Xe=0;for(let Ge of ue){let $e=Xe+Ge.duration,rt=$e+Ge.hold;if(Lt>=$e){S(Ge.channels,[ze??1]),Xe=rt;continue}if(Lt>=Xe){let it=ze??Dv((Lt-Xe)/Ge.duration,Ge.easing??"ease-in-out");S(Ge.channels,[it]);break}}return!0}})},[S,L]),P=(0,Ye.useCallback)((k,B={})=>{let Y=B.id??`flicker-${Wc++}`,q=B.synchronized??!0,ue=B.minLevel??.15,Ee=B.maxLevel??1,be=B.interval??[45,160],Ce=typeof be=="number"?[be,be]:be,De=[Math.max(1,Math.min(...Ce)),Math.max(1,Math.max(...Ce))],ze=qc(B.response??.7,.01,1),se=qc(B.blackoutChance??.08),Lt=qc(B.flashChance??.12),Xe=B.flashLevel??1.15,Ge=Math.max(1,...[...k.materials??[],...k.transforms??[]].map(qe=>u(qe.targets).length),...(k.lights??[]).map(qe=>Xc(qe.lights).length)),$e=q?1:Ge,rt=Array.from({length:$e},()=>ue),it=Array.from({length:$e},()=>ue),Qt=Array.from({length:$e},()=>0);return L({id:Y,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(qe,on,Gt,Ke)=>{for(let le=0;le<$e;le+=1){if(Ke!==null)it[le]=Ke;else if(qe>=Qt[le]){let ee=Math.random();it[le]=ee<se?vp(0,Math.min(.04,ue)):ee<se+Lt?Xe:vp(ue,Ee),Qt[le]=qe+vp(...De)}let J=1-Math.pow(1-ze,Math.max(1,Gt)/16.67);rt[le]+=(it[le]-rt[le])*J}return S(k,rt),B.duration===void 0||on<B.duration}})},[S,L,u]),z=(0,Ye.useCallback)((k,B,Y)=>{let q=a.current.get(k);if(!q)return!1;let ue=typeof performance>"u"?Date.now():performance.now();return q.override={level:B,until:ue+Math.max(0,Y)},M.current(),!0},[]),E=(0,Ye.useCallback)(k=>a.current.delete(k),[]),V=(0,Ye.useCallback)(()=>{a.current.clear(),r.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(r.current),r.current=null)},[]),A=(0,Ye.useCallback)(()=>{for(let[k,B]of s.current)Nv(k,B);s.current.clear();for(let[k,B]of c.current)k.position.set(...B.position),k.rotation.set(...B.rotation),k.scale.set(...B.scale),k.visible=B.visible,k.updateMatrix(),k.updateMatrixWorld(!0);c.current.clear();for(let k of o.current.values())k.light.removeFromParent(),k.light.dispose();o.current.clear(),d()},[d]),X=(0,Ye.useCallback)(()=>{V(),A()},[A,V]),j=(0,Ye.useCallback)(k=>{i.current&&i.current!==k.scene&&A(),n.current=k,i.current=k.scene,t.current.onViewerReady?.(k)},[A]);return(0,Ye.useEffect)(()=>()=>{X(),n.current=null,i.current=null},[X]),{handleViewerReady:j,setMaterial:f,setTransform:y,getWorldPosition:T,addPointLight:h,updatePointLight:m,removePointLight:x,transition:b,timeline:v,pulse:_,flicker:P,overrideEffect:z,stopEffect:E,stopAllEffects:V,resetRuntime:X}}var an=require("react");function Uv(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ns(e){return typeof e=="number"&&Number.isFinite(e)}function Iv(e){return Array.isArray(e)&&e.length===3&&e.every(Ns)}function r_(e){return!Uv(e)||!Iv(e.position)||!Iv(e.target)||e.fov!==null&&!Ns(e.fov)||!Ns(e.zoom)||e.zoom<=0||e.azimuthAngle!==void 0&&!Ns(e.azimuthAngle)||e.polarAngle!==void 0&&!Ns(e.polarAngle)?null:{position:e.position,target:e.target,fov:e.fov,zoom:e.zoom,azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle}}function i_(e){if(!Uv(e))return null;let t;if(e.camera!==void 0){let r=r_(e.camera);if(!r)return null;t=r}let n;if(e.hidden!==void 0){if(!Array.isArray(e.hidden)||!e.hidden.every(r=>typeof r=="string"))return null;n=e.hidden}let i;if(e.selected===null||typeof e.selected=="string")i=e.selected;else if(e.selected!==void 0)return null;return{camera:t,hidden:n,selected:i}}function zv(e,t,n){let i=Object.values(t).filter(r=>r.visible===!1).map(r=>r.id);return{camera:e??void 0,hidden:i,selected:n?.id??null}}function Vv({cameraState:e,setCameraState:t,objectBindings:n,onObjectBindingsChange:i,selectedObjectBinding:r,setSelectedObjectBinding:a,paramKey:o="view",debounceMs:s=400,autoSync:c=!0}){let l=(0,an.useRef)(null),u=(0,an.useRef)(null),d=(0,an.useRef)(null),p=(0,an.useRef)(null),f=(0,an.useRef)(null),g=(0,an.useCallback)(()=>{f.current!==null&&(window.clearTimeout(f.current),f.current=null),d.current=null,p.current=null},[]),y=(0,an.useCallback)(()=>{let _=zv(e,n,r);return`${o}=${encodeURIComponent(JSON.stringify(_))}`},[e,n,r,o]),T=(0,an.useCallback)(()=>{let _=new URL(window.location.href);return _.hash=y(),_.toString()},[y]),x=(0,an.useCallback)(_=>{let v=new URL(window.location.href);v.hash=_,window.history.replaceState(null,"",v.toString()),u.current=_,l.current=new URLSearchParams(v.hash.slice(1)).get(o)},[o]),h=(0,an.useCallback)(()=>{g(),x(y())},[y,g,x]),m=(0,an.useRef)({cameraState:e,objectBindings:n,selectedObjectBinding:r});m.current={cameraState:e,objectBindings:n,selectedObjectBinding:r};let[S,M]=(0,an.useState)(!1);(0,an.useEffect)(()=>{if(!c||!S){g();return}let _=m.current,v=zv(_.cameraState,_.objectBindings,_.selectedObjectBinding),P=`${o}=${encodeURIComponent(JSON.stringify(v))}`;if(P===u.current){g();return}P===d.current&&s===p.current||(g(),d.current=P,p.current=s,f.current=window.setTimeout(()=>{f.current=null,d.current=null,p.current=null,x(P)},Math.max(0,s)))},[c,e,g,s,n,o,S,r,x]),(0,an.useEffect)(()=>g,[g]);let C=(0,an.useRef)(null),L=(0,an.useRef)(null),b=(0,an.useCallback)(async()=>{M(!0);let _=window.location.hash.startsWith("#")?window.location.hash.slice(1):window.location.hash,v=new URLSearchParams(_).get(o);if(!v)return C.current=null,!1;if(v===l.current||v===C.current||v===L.current)return!1;let P;try{P=JSON.parse(v)}catch{return!1}let z=i_(P);if(!z)return!1;L.current=v;try{if(z.camera&&await t(z.camera,!1),z.hidden){let E=new Set(z.hidden);i(Object.fromEntries(Object.entries(n).map(([V,A])=>[V,{...A,visible:!E.has(A.id)}])))}if(z.selected!==void 0){let E=z.selected?Pn(n,z.selected):null;a(E?n[E]:null)}return C.current=v,!0}finally{L.current===v&&(L.current=null)}},[n,i,o,t,a]);return(0,an.useEffect)(()=>{let _=()=>{b().catch(()=>{})};return window.addEventListener("hashchange",_),()=>{window.removeEventListener("hashchange",_)}},[b]),{getShareUrl:T,syncUrl:h,restoreFromUrl:b}}0&&(module.exports={BindingBuilder,DEFAULT_SCENE_CONFIG,MATERIAL_BLENDING_MODES,MATERIAL_SIDES,ModelViewer,SimpleModelViewer,defineObjectBindings,material,patchBindings,patchSceneConfig,selectBindingKeys,selectBindings,useObjectBinding,useObjectBindingIds,useObjectBindings,useSceneConfig,useShareableViewerState,useViewerActions,useViewerAnimations,useViewerCamera,useViewerConnection,useViewerEffects,useViewerHover,useViewerModel,useViewerSelection});
|
|
3689
|
+
`)}function Ls(e,t,n){oi(new Blob([t],{type:n}),e)}function ap(e){return JSON.stringify(e??{},null,2)}function op(e){return`[${e[0].toFixed(3)}, ${e[1].toFixed(3)}, ${e[2].toFixed(3)}]`}function Nw(e){let t=e.style?.material;return t?Object.values(t).filter(n=>!!n&&typeof n=="object"&&typeof n.path=="string"&&n.path.trim().length>0).map(n=>n.path):[]}async function lv(e){let t=new Set;for(let r of Object.values(e))for(let a of Nw(r))t.add(a);let n=[],i=[];return await Promise.all(Array.from(t).map(async r=>{let a=Uh(r);if(a)try{let o=await fetch(a);if(!o.ok)throw new Error(String(o.status));n.push({path:r,blob:await o.blob()})}catch{i.push(r)}})),{assets:n,failedPaths:i}}async function sp(e,t,n,i,r){if(r.length===0){Ls(e,t,n);return}let a={[e]:(0,sv.strToU8)(t)};for(let s of r)a[s.path]=new Uint8Array(await s.blob.arrayBuffer());let o=await tl(a);oi(new Blob([o],{type:"application/zip"}),i)}var lp={pbr:["texture","baseColor","metalness","metalnessMap","specularIntensity","specularIntensityMap","specularColor","specularColorMap","reflectivity"],roughness:["roughness","roughnessMap"],emission:["emissive","emissiveIntensity","emissiveMap"],opacity:["opacity","alphaMap","alphaTest","alphaHash","dithering","blendingMode"],normalBump:["normalMap","normalScale","flipNormalY","bumpMap","bumpScale"],displacement:["displacementMap","displacementScale","displacementBias"],ao:["aoMap","aoMapIntensity"],clearcoat:["clearcoat","clearcoatMap","clearcoatRoughness","clearcoatRoughnessMap","clearcoatNormalMap","clearcoatNormalScale","flipClearcoatNormalY"],sheen:["sheen","sheenColor","sheenColorMap","sheenRoughness","sheenRoughnessMap"],anisotropy:["anisotropy","anisotropyRotation","anisotropyMap"],transmission:["transmission","transmissionMap","thickness","thicknessMap","attenuationColor","attenuationDistance"],faces:["side"]},cv=Object.keys(lp);function dv(e){if(e==null)return!1;if(typeof e=="string")return e.trim().length>0;if(typeof e=="number")return Number.isFinite(e);if(typeof e=="boolean")return e;if(typeof e=="object"&&"path"in e){let t=e.path;return typeof t=="string"&&t.trim().length>0}return!1}function cp(e){if(e)return Object.values(e).some(dv)?e:void 0}function Sr(e,t){return e?lp[t].some(n=>dv(e[n])):!1}function dp(e){return{pbr:Sr(e,"pbr"),roughness:Sr(e,"roughness"),emission:Sr(e,"emission"),opacity:Sr(e,"opacity"),normalBump:Sr(e,"normalBump"),displacement:Sr(e,"displacement"),ao:Sr(e,"ao"),clearcoat:Sr(e,"clearcoat"),sheen:Sr(e,"sheen"),anisotropy:Sr(e,"anisotropy"),transmission:Sr(e,"transmission"),faces:Sr(e,"faces")}}function up(e,t){if(t)return{...e,style:{...e.style,material:t}};if(!e.style)return e;let{material:n,...i}=e.style;return{...e,style:Object.keys(i).length>0?i:void 0}}function uv(e,t){if(!e)return;let n={...e};for(let i of lp[t])delete n[i];return n}var G=require("react/jsx-runtime"),Ow="/room.glb";function Oc(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function pv(e,t){if(!Oc(e)||!Oc(t))return t??e;let n={...e};for(let[i,r]of Object.entries(t)){let a=n[i];n[i]=Oc(a)&&Oc(r)?pv(a,r):r}return n}function pp({licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,project:a,onProjectChange:o,projectChangeDebounceMs:s=350,onModelUpload:c,onEditLeaseChange:l}){let u=(0,ne.useRef)(null),d=(0,ne.useRef)(null),p=(0,ne.useRef)(null),[f,g]=(0,ne.useState)(a?.model.url??null),[y,T]=(0,ne.useState)(a?.model.name??""),[x,h]=(0,ne.useState)(a?.model??null),[m,S]=(0,ne.useState)(null),M=ip(a?.objectBindings??{}),C=M.value,L=M.setValue,[b,_]=(0,ne.useState)(!1),[v,P]=(0,ne.useState)(!1),[z,E]=(0,ne.useState)("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),[V,A]=(0,ne.useState)("default"),[X,j]=(0,ne.useState)(!1),[k,B]=(0,ne.useState)("{}"),[Y,q]=(0,ne.useState)("{}"),[ue,Ee]=(0,ne.useState)(null),[be,Ce]=(0,ne.useState)(null),[De,ze]=(0,ne.useState)(!1),[se,Lt]=(0,ne.useState)(!1),[Xe,Ge]=(0,ne.useState)(!1),[$e,rt]=(0,ne.useState)({identity:!0,basics:!0,material:!1,actions:!1,camera:!1,transform:!1,metrics:!1,metadata:!1}),[it,en]=(0,ne.useState)({pbr:!0,roughness:!1,emission:!1,opacity:!1,normalBump:!1,displacement:!1,ao:!1,clearcoat:!1,sheen:!1,anisotropy:!1,transmission:!1,faces:!1}),qe=D=>rt(H=>({...H,[D]:!H[D]})),on=D=>en(H=>({...H,[D]:!H[D]})),[Gt,Ke]=(0,ne.useState)("object"),[le,J]=(0,ne.useState)("General"),[ee,Ve]=(0,ne.useState)("metalness"),[tt,Fe]=(0,ne.useState)(dp()),xe=(0,ne.useRef)(null),[ot,gt]=(0,ne.useState)(!1),[At,Kn]=(0,ne.useState)(!0),[Ln,Ne]=(0,ne.useState)(!0),[dt,_t]=(0,ne.useState)(!1),[We,Wt]=(0,ne.useState)(null),[Bt,Xt]=(0,ne.useState)(!1),[tn,Mr]=(0,ne.useState)("world"),we=(0,ne.useRef)({}),R=ip(a?.sceneConfig??Mi),I=R.value,$=R.setValue,[re,te]=(0,ne.useState)(null),[he,pe]=(0,ne.useState)(null),bt=ac(e,t),St=nb(bt.tier),Pe=(0,ne.useMemo)(()=>({isInsideEditor:!0,activeTab:Gt,activeSubTab:le,tier:St,setActiveTab:Ke,setActiveSubTab:J}),[Gt,le,St]),Ze=(0,ne.useRef)(null),Et=(0,ne.useRef)(0),Se=(0,ne.useRef)(0),Dt=(0,ne.useRef)(a?`${a.id}:${a.revision}`:null),pn=(0,ne.useRef)(null),Tn=(0,ne.useRef)(!1),qt=(0,ne.useRef)(!1),Yt=(0,ne.useRef)(a?{modelUrl:a.model.url,bindings:a.objectBindings,sceneConfig:a.sceneConfig}:null),ut=(0,ne.useRef)(a?{requestId:0,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl}:null),Fr=(0,ne.useRef)(null),{cameraState:Ut,resetView:xa,focusObject:bo,fitScene:rr,setCameraState:ni,handleCameraChange:Yc,handleViewerReady:$c}=vc(),ya=(0,ne.useCallback)(D=>{ni({position:D.position,target:D.target,fov:Ut?.fov??null,zoom:Ut?.zoom??1,azimuthAngle:D.azimuthAngle,polarAngle:D.polarAngle},!0)},[ni,Ut]),ir=xc(),$t=m?C[m]??null:null,vo=$t?.style?.material,Cr=$t?.cameraState,bi=Ut?{position:op(Ut.position),target:op(Ut.target)}:null,wa=(0,ne.useCallback)(D=>{$(H=>{let ie=H.annotations.map(Oe=>Oe.id).join(","),_e=D.map(Oe=>Oe.id).join(",");return ie===_e?H:{...H,annotations:D}})},[]),Os=(0,ne.useCallback)(D=>{te(D?{annotation:D}:null)},[]);(0,ne.useEffect)(()=>{if(!$t){B("{}"),q("{}"),Ee(null),Ce(null);return}B(ap($t.metrics)),q(ap($t.metadata)),Ee(null),Ce(null)},[$t]),(0,ne.useEffect)(()=>{let D=dp(vo);if(xe.current!==m){xe.current=m,Fe(D);return}Fe(H=>{let ie=!1,_e={...H};for(let Oe of cv)D[Oe]&&!H[Oe]&&(_e[Oe]=!0,ie=!0);return ie?_e:H})},[m,vo]),(0,ne.useEffect)(()=>()=>{Ze.current?.cleanup()},[]);let vi=(0,ne.useCallback)((D,H)=>{let ie=Nc(D);if(H){let _e=new Map(Object.values(H).map(Oe=>[Oe.modelObjectId,Oe]));for(let Oe of D){let Rt=_e.get(Oe);Rt&&(ie[Oe]=Rt)}}return ie},[]);(0,ne.useEffect)(()=>{if(!a)return;let D=`${a.id}:${a.revision}`;if(Dt.current===D)return;Dt.current=D;let H=f!==a.model.url||x?.tilesetUrl!==a.model.tilesetUrl||x?.assetVersion!==a.model.assetVersion,ie=C!==a.objectBindings,_e=I!==a.sceneConfig;(H||ie||_e)&&(qt.current=!0),h(a.model),T(a.model.name??"model");let Oe=a.objectBindings;if(ie){let Rt=pn.current;Oe=Rt?vi(Rt,a.objectBindings):a.objectBindings,M.reset(Oe)}if(_e&&R.reset(a.sceneConfig),H){let Rt=++Se.current;ut.current={requestId:Rt,modelName:a.model.name??"model",modelUrl:a.model.url,storedBindings:a.objectBindings,streaming:!!a.model.tilesetUrl},Fr.current=null,S(null),_(!0),g(a.model.url)}Yt.current={modelUrl:a.model.url,bindings:Oe,sceneConfig:a.sceneConfig}},[C,vi,a,f,I,x,M,R]);let Hi=(0,ne.useRef)(o);Hi.current=o,(0,ne.useEffect)(()=>{if(!a||!Hi.current||!f)return;if(!Tn.current){Tn.current=!0;return}let D=Yt.current;if(f===a.model.url&&C===a.objectBindings&&I===a.sceneConfig||D!==null&&f===D.modelUrl&&C===D.bindings&&I===D.sceneConfig){qt.current=!1;return}if(ut.current)return;if(qt.current){qt.current=!1;return}let H=window.setTimeout(()=>{Hi.current?.({projectId:a.id,baseRevision:a.revision,model:{...x??a.model,url:f,name:y||a.model.name},objectBindings:C,sceneConfig:I},"local")},s);return()=>window.clearTimeout(H)},[C,y,f,a,s,x,I]),(0,ne.useEffect)(()=>{let D=H=>{if(H.key.toLowerCase()!=="z"||!(H.metaKey||H.ctrlKey))return;let ie=H.target,_e=ie?.tagName;if(_e==="INPUT"||_e==="TEXTAREA"||ie?.isContentEditable)return;H.preventDefault();let Oe=Gt==="scene"?R:M;H.shiftKey?Oe.redo():Oe.undo()};return window.addEventListener("keydown",D),()=>window.removeEventListener("keydown",D)},[Gt,M,R]),(0,ne.useEffect)(()=>{if(b||V==="default"||V==="success")return;j(!0);let D=window.setTimeout(()=>j(!1),4e3);return()=>window.clearTimeout(D)},[z,V,b]);let Zn=(0,ne.useMemo)(()=>Object.keys(C),[C]),Kc=(0,ne.useMemo)(()=>!m||!$t?null:$t.id.trim()?Object.entries(C).some(([ie,_e])=>ie!==m&&_e.id===$t.id)?"Another binding already uses this ID.":null:"ID is required.",[C,m,$t]),Tr=(D,H)=>{L(ie=>({...ie,[D]:H(ie[D])}))},xo=(D,H)=>{Tr(D,ie=>{let _e=cp(H(ie.style?.material));return up(ie,_e)})},Zc=(D,H,ie)=>{xo(D,_e=>({..._e,[H]:ie?{path:ie}:void 0}))},Jn=(D,H)=>{Fe(ie=>({...ie,[D]:H})),!H&&m&&Tr(m,ie=>{let _e=cp(uv(ie.style?.material,D));return up(ie,_e)})},_a=(0,ne.useCallback)((D,H,ie)=>{let _e=ev(D),Oe=Nc(_e);if(ie){let Mt=new Map(Object.values(ie).map(Je=>[Je.modelObjectId,Je]));for(let Je of _e){let Bn=Mt.get(Je);Bn&&(Oe[Je]=Bn)}}D.updateMatrixWorld(!0);let Rt={};for(let Mt of _e){let Je=Dr(D,Mt);if(!Je){Rt[Mt]={position:[0,0,0],rotation:[0,0,0],scale:[1,1,1],pivotLocal:[0,0,0],rotationOrder:"XYZ"};continue}let Bn=mc(Je);Rt[Mt]={position:[Je.position.x,Je.position.y,Je.position.z],rotation:[Je.rotation.x,Je.rotation.y,Je.rotation.z],scale:[Je.scale.x,Je.scale.y,Je.scale.z],pivotLocal:[Bn.x,Bn.y,Bn.z],rotationOrder:Je.rotation.order}}we.current=Rt,M.reset(Oe),S(_e[0]??null),ie||$(Mt=>({...Mt,annotations:[]})),E(`Generated ${_e.length} bindings from ${H}.`),A("success"),_(!1)},[M,$]),ar=(D,H,ie,_e)=>{let Oe=++Se.current;_(!0);let Rt=ie?ie/1048576:0;E(Rt>=100?`Reading ${H} (${Math.round(Rt)}MB \u2014 large file, this can take a while)...`:`Reading ${H} and generating starter bindings...`),A("default"),T(H),h(_e??{url:D,name:H}),te(null);let Mt=Fr.current;if(D===f&&Mt?.url===D){ut.current=null,_a(Mt.scene,H);return}ut.current={requestId:Oe,modelName:H,modelUrl:D,streaming:!!_e?.tilesetUrl},g(D),M.reset({}),S(null)},Gi=(0,ne.useCallback)(D=>{let H=ut.current;if(!(!H||H.requestId!==Se.current)){if(ut.current=null,Fr.current={url:H.modelUrl,scene:D},H.streaming){E(`Streaming ${H.modelName}.`),A("success"),_(!1);return}H.storedBindings&&(qt.current=!0),_a(D,H.modelName,H.storedBindings)}},[_a,M]),kn=(0,ne.useCallback)(D=>{let H=D.map(_e=>_e.name);if(H.length===0)return;pn.current=H,qt.current=!0;let ie=vi(H,a?.objectBindings);if(M.reset(ie),a){let _e=Yt.current;Yt.current={modelUrl:_e?.modelUrl??a.model.url,bindings:ie,sceneConfig:_e?.sceneConfig??a.sceneConfig}}S(_e=>_e??H[0]??null),E(`Streaming ${H.length} bindable objects.`),A("success"),_(!1)},[vi,M,a]),Sa=(0,ne.useCallback)(D=>{let H=ut.current;!H||H.requestId!==Se.current||(ut.current=null,console.error(D),E(`Could not read ${H.modelName}. Make sure the file is a valid GLB, GLTF, OBJ, FBX, or USDZ asset.`),A("error"),_(!1))},[]),yo=(0,ne.useCallback)(D=>{ir.handleAnimationsReady(D);let H=D.clipDetails??D.clips.map(ie=>({sourceName:ie,duration:0}));$(ie=>({...ie,animations:nv(ie,H)}))},[ir,$]),Jc=async()=>{Ze.current?.cleanup(),Ze.current=null,await ar(Ow,"room.glb")},Is=async D=>{if(c){try{_(!0),E(`Uploading ${D.name}...`),A("default");let ie=await c(D);await ar(ie.url,ie.name??D.name,D.size,ie)}catch(ie){_(!1),E(ie instanceof Error?ie.message:`Could not upload ${D.name}.`),A("error")}return}let H;try{H=await ml(D)}catch(ie){E(ie instanceof Error?ie.message:"Could not read model file. Upload a .glb, .gltf, .obj, .fbx, .usdz, or .zip asset."),A("error");return}Ze.current?.cleanup(),Ze.current=H,await ar(H.url,H.name,D.size,{url:H.url,name:H.name})},Qc=async D=>{let H=D.target.files?.[0];H&&(await Is(H),D.target.value="")},jr=()=>{Ze.current?.cleanup(),Ze.current=null,Fr.current=null,ut.current=null,we.current={},Et.current=0,ze(!1),g(null),T(""),h(null),S(null),te(null),M.reset({}),B("{}"),q("{}"),Ee(null),Ce(null),pe(null),Xt(!1),$(D=>({...D,animations:Mi.animations,annotations:[]})),E("Load the demo model or upload a GLB, GLTF, OBJ, FBX, or USDZ model to generate bindings."),A("default")},Wi=()=>{u.current?.click()},wo=()=>{d.current?.click()},or=async D=>{P(!0);try{let{assets:H,failedPaths:ie}=await lv(C);D==="json"?await sp("objectBindings.json",rv(C),"application/json","objectBindings.zip",H):await sp("objectBindings.ts",iv(C),"text/typescript","objectBindings-ts.zip",H),ie.length>0?(E(`Exported, but ${ie.length} uploaded image${ie.length===1?"":"s"} couldn't be bundled: ${ie.join(", ")}.`),A("error")):H.length>0&&(E(`Exported with ${H.length} uploaded image${H.length===1?"":"s"} bundled into the zip.`),A("success"))}catch(H){let ie=H instanceof Error?H.message:"Unknown export error.";E(`Failed to export bindings: ${ie}`),A("error")}finally{P(!1)}},_o=async D=>{if(!Zn.length){E("Load a model before importing bindings."),A("error");return}let H;try{H=JSON.parse(await D.text())}catch{E(`${D.name} is not valid JSON.`),A("error");return}if(H===null||typeof H!="object"||Array.isArray(H)){E("Expected a JSON object mapping object IDs to bindings."),A("error");return}let ie=new Map;for(let Mt of Object.values(H))if(Mt!==null&&typeof Mt=="object"&&typeof Mt.id=="string"&&typeof Mt.type=="string"&&typeof Mt.modelObjectId=="string"){let Je=Mt;ie.set(Je.modelObjectId,Je)}if(ie.size===0){E(`${D.name} doesn't look like an exported bindings file.`),A("error");return}let _e={...C},Oe=0;for(let Mt of Object.keys(_e)){let Je=ie.get(Mt);Je&&(_e[Mt]=Je,Oe++)}if(Oe===0){E(`None of the object IDs in ${D.name} match this model \u2014 nothing imported.`),A("error");return}L(_e);let Rt=ie.size-Oe;E(Rt>0?`Imported ${Oe} binding${Oe===1?"":"s"} from ${D.name} (${Rt} skipped \u2014 not in this model).`:`Imported ${Oe} binding${Oe===1?"":"s"} from ${D.name}.`),A("success")},Xi=async D=>{let H=D.target.files?.[0];H&&(await _o(H),D.target.value="")},Ma=()=>{p.current?.click()},qi=async D=>{let H;try{H=JSON.parse(await D.text())}catch{E(`${D.name} is not valid JSON.`),A("error");return}if(H===null||typeof H!="object"||Array.isArray(H)){E("Expected a JSON object with scene config sections."),A("error");return}let ie=["model","camera","lighting","wireframe","shadows","environment","background","groundShadows","postProcessing","animations","annotations","cinematic"],_e=H,Oe=ie.filter(Rt=>_e[Rt]!==void 0);if(Oe.length===0){E(`${D.name} doesn't look like an exported scene config file.`),A("error");return}$(Rt=>{let Mt={...Rt};for(let Je of Oe)Mt[Je]=pv(Rt[Je],_e[Je]);return Mt}),E(`Imported ${Oe.length} section${Oe.length===1?"":"s"} from ${D.name}.`),A("success")},ri=async D=>{let H=D.target.files?.[0];H&&(await qi(H),D.target.value="")},zs=D=>{D.preventDefault(),D.stopPropagation(),!(b||f)&&(Et.current+=1,ze(!0))},ed=D=>{D.preventDefault(),D.stopPropagation(),!(b||f)&&(D.dataTransfer.dropEffect="copy",ze(!0))},So=D=>{D.preventDefault(),D.stopPropagation(),!(b||f)&&(Et.current=Math.max(0,Et.current-1),Et.current===0&&ze(!1))},Us=async D=>{if(D.preventDefault(),D.stopPropagation(),Et.current=0,ze(!1),b||f)return;let H=D.dataTransfer.files?.[0];H&&await Is(H)},xi=(D,H,ie)=>{if(!m)return;let _e;try{_e=JSON.parse(H)}catch{ie("Invalid JSON");return}if(_e===null||typeof _e!="object"||Array.isArray(_e)){ie("Expected a JSON object");return}if(D==="metrics"&&Object.values(_e).some(Rt=>typeof Rt!="number"||!Number.isFinite(Rt))){ie("Metrics values must be numbers");return}Tr(m,Oe=>({...Oe,[D]:_e})),ie(null)},Vs=(0,ne.useCallback)(D=>{if(!D){S(null);return}let H=Object.entries(C).find(([ie,_e])=>_e===D||ie===D.modelObjectId||_e.modelObjectId===D.modelObjectId)?.[0]??null;S(H)},[C]),Fs=(0,ne.useCallback)(async D=>{S(D),pe(null),await bo(D)},[bo]),js=(0,ne.useCallback)(D=>{pe(D?C[D]??null:null)},[C]),td=(0,ne.useCallback)(D=>Ge(!D),[]),nd=(0,ne.useCallback)(()=>{if(!m||!Ut)return;let D={position:Ut.position,target:Ut.target,...Ut.fov!=null?{fov:Ut.fov}:{},zoom:Ut.zoom};Tr(m,H=>({...H,cameraState:D}))},[m,Ut]),Hs=(0,ne.useCallback)(()=>{!Cr?.position||!Cr?.target||ni({position:Cr.position,target:Cr.target,fov:Cr.fov??Ut?.fov??null,zoom:Cr.zoom??Ut?.zoom??1},!0)},[Cr,ni,Ut]),Yi=(0,ne.useCallback)(()=>{m&&Tr(m,D=>({...D,cameraState:void 0}))},[m]),Gs=(0,ne.useCallback)(async()=>{await xa()},[xa]),rd=(0,ne.useCallback)(async()=>{await rr()},[rr]),Mo=(0,ne.useCallback)(D=>{Wt(D),_t(!0)},[]),Pr=(0,ne.useCallback)(()=>{_t(!1),Wt(null)},[]),$i=(0,ne.useCallback)(()=>{if(We==="bindings"){if(!Zn.length){Pr();return}let D=Nc(Zn);M.reset(D),S(Zn[0]??null),E("Object bindings reset to default values."),A("success")}else We==="scene"&&(R.reset(Mi),E("Scene config reset to default values."),A("success"));Pr()},[We,Zn,M,R,Pr]);return bt.status==="checking"?(0,G.jsx)("div",{className:"bb-root bb-root--licenseChecking",children:(0,G.jsx)(ea,{title:"Verifying License",message:"Checking your license key..."})}):bt.status==="invalid"?(0,G.jsx)("div",{className:"bb-root bb-root--licenseInvalid",children:(0,G.jsx)(ea,{tone:"error",title:"Invalid License",message:bt.isLocalDomain?bt.reason??"License has been revoked or has expired":"Failed to load. Please contact the site administrator."})}):(0,G.jsxs)(Du.Provider,{value:Pe,children:[(0,G.jsxs)("div",{className:"bb-root",children:[(0,G.jsx)("input",{ref:u,type:"file",accept:hl,className:"bb-hiddenInput",onChange:Qc,disabled:b}),(0,G.jsx)("input",{ref:d,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:Xi,disabled:b}),(0,G.jsx)("input",{ref:p,type:"file",accept:".json,application/json",className:"bb-hiddenInput",onChange:ri,disabled:b}),(0,G.jsxs)("aside",{className:`bb-sidebar bb-sidebar--left ${se?"bb-sidebar--collapsed":""}`,children:[(0,G.jsxs)("div",{className:"bb-header bb-header--sidebar",children:[!se&&(0,G.jsx)("h1",{className:"bb-title",children:"Binding Builder"}),(0,G.jsx)("button",{type:"button",className:"bb-sidebarToggle",onClick:()=>Lt(D=>!D),"aria-label":se?"Open editor sidebar":"Collapse editor sidebar",title:se?"Open editor":"Collapse editor",children:se?"\u2192":"\u2190"})]}),!se&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)("div",{className:"bb-tabRow",children:[(0,G.jsx)("button",{type:"button",className:`bb-tab ${Gt==="object"?"bb-tab--active":""}`,onClick:()=>Ke("object"),children:"Object"}),(0,G.jsx)("button",{type:"button",className:`bb-tab ${Gt==="scene"?"bb-tab--active":""}`,onClick:()=>Ke("scene"),children:"Scene"})]}),(0,G.jsx)("section",{className:"bb-editor",children:Gt==="scene"?(0,G.jsx)(G.Fragment,{children:f?(0,G.jsx)(Zu,{config:I,onChange:$,activeSubTab:le,onActiveSubTabChange:J,cameraState:le==="Cinematic"&&Ut?{position:Ut.position,target:Ut.target,azimuthAngle:Ut.azimuthAngle,polarAngle:Ut.polarAngle}:null,onPreviewWaypoint:ya,animationClipDetails:ir.clipDetails,animationPlayback:ir}):(0,G.jsx)("div",{className:"bb-emptyEditor",children:"Upload a model to edit its scene settings."})}):!$t||!m?(0,G.jsx)("div",{className:"bb-emptyEditor",children:"Select a generated node binding to edit its values."}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)("div",{className:"bb-editorHeader",children:(0,G.jsxs)("div",{children:[(0,G.jsx)("div",{className:"bb-sectionKicker",children:"Editing Binding"}),(0,G.jsx)("h2",{className:"bb-editorTitle",children:$t.label||m}),(0,G.jsxs)("div",{className:"bb-editorMeta",children:[(0,G.jsx)("span",{children:$t.type}),(0,G.jsx)("span",{children:$t.modelObjectId})]})]})}),(0,G.jsx)(Fb,{selectedItem:m,selectedBinding:$t,open:$e.identity,onToggle:()=>qe("identity"),updateBinding:Tr,idError:Kc}),(0,G.jsx)(Gb,{selectedItem:m,selectedBinding:$t,open:$e.basics,onToggle:()=>qe("basics"),updateBinding:Tr}),(0,G.jsxs)($n,{title:"Material",open:$e.material,onToggle:()=>qe("material"),tooltip:"Edit the selected object's base material, textures, and surface properties.",children:[(0,G.jsx)(Vb,{disabled:!m,onApply:D=>m&&xo(m,H=>({...H,...D}))}),(0,G.jsx)(zb,{selectedItem:m,selectedMaterial:vo,pbrWorkflow:ee,onPbrWorkflowChange:Ve,openMaterialPanels:it,materialPanelEnabled:tt,onToggleMaterialPanel:on,onSetMaterialPanelState:Jn,updateSelectedMaterial:xo,setSelectedTexturePath:Zc})]}),(0,G.jsx)(Yb,{selectedItem:m,selectedBinding:$t,open:$e.actions,onToggle:()=>qe("actions"),updateBinding:Tr}),(0,G.jsx)($b,{selectedBinding:$t,open:$e.camera,onToggle:()=>qe("camera"),cameraState:Ut,formattedCameraState:bi,savedCameraPosition:Cr,onSaveCameraPosition:nd,onGoToSavedCamera:Hs,onClearSavedCamera:Yi,onResetView:Gs,onFitScene:rd}),(0,G.jsx)(Qb,{selectedItem:m,selectedBinding:$t,open:$e.transform,onToggle:()=>qe("transform"),updateBinding:Tr,moveModeEnabled:Bt,onToggleMoveMode:Xt,transformSpace:tn,onTransformSpaceChange:Mr,originalTransform:we.current[m]??null}),(0,G.jsx)(rp,{title:"Metrics",label:"Metrics JSON",open:$e.metrics,onToggle:()=>qe("metrics"),draft:k,error:ue,example:'{"area": 42}',onDraftChange:B,onCommit:()=>xi("metrics",k,Ee)}),(0,G.jsx)(rp,{title:"Metadata",label:"Metadata JSON",open:$e.metadata,onToggle:()=>qe("metadata"),draft:Y,error:be,example:'{"room": "kitchen"}',onDraftChange:q,onCommit:()=>xi("metadata",Y,Ce)})]})}),Gt==="object"&&(0,G.jsxs)("div",{className:"bb-toolbar",children:[(0,G.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!M.canUndo,onClick:M.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,G.jsx)(Un.Undo2,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!Zn.length,onClick:()=>Mo("bindings"),title:"Reset object bindings to default",children:(0,G.jsx)(Un.ListRestart,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!M.canRedo,onClick:M.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,G.jsx)(Un.Redo2,{size:16})})]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!Zn.length||b,onClick:wo,title:"Re-apply a previously exported objectBindings.json onto this model",children:[(0,G.jsx)(Un.Upload,{size:14}),"Import"]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsx)(Qu,{disabled:!Zn.length||v,exporting:v,onExportJson:()=>or("json"),onExportTs:()=>or("ts")})]}),Gt==="scene"&&(0,G.jsxs)("div",{className:"bb-toolbar",children:[(0,G.jsxs)("div",{className:"bb-toolbarGroup",children:[(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!R.canUndo,onClick:R.undo,title:"Undo (Cmd/Ctrl+Z)",children:(0,G.jsx)(Un.Undo2,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",onClick:()=>Mo("scene"),title:"Reset scene config to default",children:(0,G.jsx)(Un.ListRestart,{size:16})}),(0,G.jsx)("button",{type:"button",className:"bb-iconButton",disabled:!R.canRedo,onClick:R.redo,title:"Redo (Cmd/Ctrl+Shift+Z)",children:(0,G.jsx)(Un.Redo2,{size:16})})]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsxs)("button",{type:"button",className:"bb-button bb-button--ghost",disabled:!Zn.length||b,onClick:Ma,title:"Re-apply a previously exported sceneConfig.json",children:[(0,G.jsx)(Un.Upload,{size:14}),"Import"]}),(0,G.jsx)("div",{className:"bb-toolbarDivider"}),(0,G.jsx)(Qu,{disabled:!Zn.length||b,onExportJson:()=>Ls("sceneConfig.json",av(I),"application/json"),onExportTs:()=>Ls("sceneConfig.ts",ov(I),"text/typescript")})]})]})]}),(0,G.jsxs)("main",{className:"bb-previewShell",children:[(0,G.jsxs)("div",{className:"bb-previewHeader",children:[(0,G.jsxs)("div",{className:"bb-previewToggles",children:[(0,G.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,G.jsx)("input",{type:"checkbox",checked:ot,onChange:D=>gt(D.target.checked)}),"Zoom on selected"]}),(0,G.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,G.jsx)("input",{type:"checkbox",checked:At,onChange:D=>Kn(D.target.checked)}),"Highlight on hover"]}),(0,G.jsxs)("label",{className:"bb-checkbox bb-checkbox--compact",style:{color:"black"},children:[(0,G.jsx)("input",{type:"checkbox",checked:Ln,onChange:D=>Ne(D.target.checked)}),"Camera controller"]})]}),(0,G.jsxs)("div",{className:"bb-previewControlsColumn",children:[(0,G.jsxs)("div",{className:"bb-previewControls",children:[(0,G.jsx)("div",{className:"bb-previewMeta",children:(0,G.jsx)("span",{children:m?`Focused: ${m}`:"Select a node to inspect it"})}),f&&(0,G.jsx)("button",{type:"button",className:"bb-button bb-button--ghost bb-removeModelButton",onClick:jr,children:"Remove model"})]}),f&&(0,G.jsx)("div",{className:"bb-moveHint",children:Bt?(0,G.jsx)(G.Fragment,{children:"Select a mesh \xB7 drag the colored arrows, planes, or rings"}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)("kbd",{children:"W"}),(0,G.jsx)("kbd",{children:"A"}),(0,G.jsx)("kbd",{children:"S"}),(0,G.jsx)("kbd",{children:"D"})," move \xB7 ",(0,G.jsx)("kbd",{children:"Space"}),"/",(0,G.jsx)("kbd",{children:"C"})," up \xB7 down \xB7 drag to look"]})})]})]}),(0,G.jsxs)("div",{className:"bb-preview",children:[(0,G.jsx)(ro,{visible:b||X,message:z,tone:V,spinner:b}),f?(0,G.jsx)(Ss,{modelUrl:f,tilesetUrl:x?.tilesetUrl,objectBindings:C,selectedObject:$t,onObjectSelect:Vs,onObjectBindingsChange:L,onObjectEditLeaseChange:(D,H)=>l?.(D.modelObjectId||D.id,H),showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,onCameraChange:Yc,onViewerReady:$c,onAnnotationsChange:wa,activeAnnotation:re?.annotation??null,onActiveAnnotationChange:Os,onAnimationsReady:yo,onModelLoaded:Gi,onLoadError:Sa,onObjectCatalog:kn,licenseKey:e,licenseValidationUrl:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,sceneConfig:I,onSceneConfigChange:$,preserveDrawingBuffer:!0,disableZoom:!1,zoomOnSelected:ot,highlightOnHover:At,enableCameraControls:Ln,moveModeEnabled:Bt,objectTransformSpace:tn,enableKeyboardNavigation:!0,showViewGizmo:!0,panelHoveredObject:At?he:null,showLoadingOverlay:!1}):(0,G.jsx)("div",{className:`bb-previewPlaceholder ${De?"bb-previewPlaceholder--dragActive":""}`,onDragEnter:zs,onDragOver:ed,onDragLeave:So,onDrop:Us,children:(0,G.jsxs)("div",{children:[(0,G.jsx)("div",{children:"Upload a GLB, GLTF, OBJ, FBX, or USDZ model, or drag a supported model/ZIP bundle here to generate editable object bindings."}),(0,G.jsx)("button",{type:"button",className:"bb-previewPlaceholderButton",onClick:Wi,disabled:b,children:b?"Loading model...":"Upload"})]})})]})]}),(0,G.jsx)(tv,{bindings:C,selectedItem:m,onSelect:Fs,onHover:js,isOpen:!Xe,onToggle:td})]}),dt&&(0,G.jsx)("div",{className:"bb-reset-overlay",onClick:Pr,children:(0,G.jsxs)("div",{className:"bb-reset-dialog",onClick:D=>D.stopPropagation(),children:[(0,G.jsxs)("div",{className:"bb-reset-header",children:[(0,G.jsxs)("h3",{className:"bb-reset-title",children:[(0,G.jsx)(Un.AlertTriangle,{size:20,className:"bb-icon-warning"}),"Confirm Reset"]}),(0,G.jsx)("button",{className:"bb-reset-close",onClick:Pr,children:(0,G.jsx)(Un.X,{size:20})})]}),(0,G.jsxs)("div",{className:"bb-reset-body",children:[(0,G.jsxs)("p",{className:"bb-reset-message",children:["Are you sure you want to reset"," ",(0,G.jsx)("strong",{children:We==="bindings"?"Object Bindings":"Scene Config"}),"?"]}),(0,G.jsx)("p",{className:"bb-reset-details",children:We==="bindings"?"This will remove all your custom changes to object properties, groups, tags, transforms, materials, actions, camera positions, metrics, and metadata.":"This will restore all scene settings (camera, lighting, environment, background, animations, annotations, etc.) to their default values."}),(0,G.jsx)("p",{className:"bb-reset-warning",children:"This action cannot be undone!"})]}),(0,G.jsxs)("div",{className:"bb-reset-footer",children:[(0,G.jsx)("button",{className:"bb-reset-btn",onClick:Pr,children:"Cancel"}),(0,G.jsx)("button",{className:"bb-reset-btn-danger",onClick:$i,children:"Yes, Reset"})]})]})})]})}var de=require("react"),zc=require("@react-three/drei"),ei=require("@react-three/fiber"),bv=require("@react-three/fiber");var Fi=require("three"),vv=require("three-stdlib");var un=require("lucide-react");var W=require("react/jsx-runtime"),hv={color:"#93c5fd",intensity:.05},Iw=["apartment","city","dawn","forest","lobby","night","park","studio","sunset","warehouse"];function zw(e){return!!(e&&"isMesh"in e&&e.isMesh)}function mv(e,t){Array.isArray(e)?e.forEach(t):t(e)}function Uw(e,t){if(!t)return;let n=t.camera;if(!(n instanceof Fi.PerspectiveCamera))return;let i=new Fi.Box3().setFromObject(e).getSize(new Fi.Vector3).length();!Number.isFinite(i)||i<=0||(n.near=i/100,n.far=i*100,n.updateProjectionMatrix(),t.maxDistance=i*10)}var fp=class extends de.Component{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n){this.props.onLoadError?.(n)}render(){return this.state.hasError?null:this.props.children}};function Vw({url:e,format:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,hiddenKeys:a,selectedKey:o,panelHoveredKey:s,nodeRefsOut:c,onMeshesReady:l,onModelLoaded:u,onMeshClick:d,highlightOnHover:p}){let{scene:f}=vl(e,{dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r},t),g=(0,ei.useThree)(v=>v.invalidate),{setCanvasCursor:y,restoreCanvasCursor:T}=Cl(),[x,h]=(0,de.useState)(null),m=(0,de.useMemo)(()=>vv.SkeletonUtils.clone(f),[f]),S=(0,de.useMemo)(()=>{let v={};return m.traverse(P=>{if(!zw(P))return;let z=P.name||P.uuid;v[z]={key:z,label:P.name||P.type,ref:P}}),v},[m]),M=(0,de.useMemo)(()=>{let v={};for(let[P,{ref:z}]of Object.entries(S)){let V=(Array.isArray(z.material)?z.material:[z.material]).map(A=>{let j=(Wa(A)??new Fi.MeshStandardMaterial).clone();return j.userData.baseColor=j.color.clone(),j.userData.baseMap=j.map,j.userData.baseEmissive=j.emissive.clone(),j.userData.baseEmissiveMap=j.emissiveMap,j.userData.baseEmissiveIntensity=j.emissiveIntensity,j});v[P]=Array.isArray(z.material)?V:V[0]}return v},[S]);(0,de.useEffect)(()=>()=>{Object.values(M).forEach(v=>mv(v,P=>P.dispose()))},[M]);let C=(0,de.useRef)(null);(0,de.useEffect)(()=>{C.current!==e&&(C.current=e,m.updateWorldMatrix(!0,!0),Ko(m),l(S),u(m))},[e,m,S,l,u]),(0,de.useEffect)(()=>{let v=new AbortController;return Oa(m,v.signal),()=>{v.abort(),Qi(m)}},[m]);let L=(0,de.useMemo)(()=>!Js(m),[m]);(0,de.useEffect)(()=>{for(let[v,{ref:P}]of Object.entries(S))c.current[v]=P},[S,c]),(0,de.useEffect)(()=>{!p&&x!==null&&(h(null),T())},[p,x,T]),(0,de.useEffect)(()=>{for(let[v,{ref:P}]of Object.entries(S)){P.visible=!a.has(v);let z=M[v];if(!z)continue;P.material=z;let E=p&&x===v,V=p&&s===v;mv(z,A=>{if(A.color.copy(A.userData.baseColor),A.map=A.userData.baseMap??null,A.emissive.copy(A.userData.baseEmissive),A.emissiveMap=A.userData.baseEmissiveMap??null,A.emissiveIntensity=A.userData.baseEmissiveIntensity,V||E){let X=!!A.userData.baseEmissiveMap;A.emissive.set(hv.color),A.emissiveIntensity=X?A.userData.baseEmissiveIntensity:hv.intensity}A.needsUpdate=!0})}g()},[S,M,x,o,s,p,a,g]);let b=v=>{let P=v;for(;P;){let z=P.name||P.uuid;if(S[z])return z;P=P.parent}return null},_=L?{onClick:v=>{let P=b(v.object);P&&(v.stopPropagation(),d(P))},...p?{onPointerOver:v=>{let P=b(v.object);P&&(v.stopPropagation(),y("pointer"),h(P))},onPointerOut:v=>{v.stopPropagation(),T(),h(null)}}:{}}:{};return(0,W.jsx)("primitive",{object:m,..._})}function Fw({scene:e,controlsRef:t,refitOnResize:n,onInitialFitComplete:i}){let r=(0,de.useRef)(!1),a=(0,ei.useThree)(c=>c.invalidate),o=(0,ei.useThree)(c=>c.size),s=(0,de.useRef)(null);return(0,de.useEffect)(()=>{r.current=!1,a()},[a,e]),(0,ei.useFrame)(()=>{if(!r.current){if(!e||!t.current){a();return}r.current=!0,Uw(e,t.current),t.current.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}).finally(i)}}),(0,de.useEffect)(()=>{if(!(!n||!r.current||!e||!t.current))return s.current&&clearTimeout(s.current),s.current=setTimeout(()=>{t.current?.fitToBox(e,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{}),a()},150),()=>{s.current&&clearTimeout(s.current)}},[o.width,o.height,n]),null}function jw({exposure:e}){let t=(0,ei.useThree)(i=>i.gl),n=(0,ei.useThree)(i=>i.invalidate);return(0,de.useEffect)(()=>{t.toneMappingExposure=e,n()},[t,e,n]),null}function Hw({enabled:e,controlsRef:t}){let n=(0,ei.useThree)(i=>i.invalidate);return(0,ei.useFrame)((i,r)=>{!e||!t.current||(t.current.rotate(r*.2,0,!1),n())}),null}function Ic(e){return Array.from(e.types).includes("Files")}function fv({label:e,checked:t,onChange:n}){return(0,W.jsxs)("div",{className:"env-row",children:[(0,W.jsx)("span",{className:"env-row__label",children:e}),(0,W.jsx)("div",{className:"env-row__value",children:(0,W.jsx)("button",{className:"env-checkbox-btn",onClick:()=>n(!t),children:(0,W.jsx)("span",{className:`env-checkbox${t?" env-checkbox--checked":""}`,children:t&&(0,W.jsx)(un.Check,{size:9,strokeWidth:2,color:"white"})})})})]})}function hp({label:e,value:t,onChange:n}){return(0,W.jsxs)("div",{className:"env-row",children:[(0,W.jsx)("span",{className:"env-row__label",children:e}),(0,W.jsx)("div",{className:"env-row__value",children:(0,W.jsxs)("div",{className:"env-color-swatch",style:{background:t},children:[(0,W.jsx)("span",{className:"env-color-swatch__hex",children:t}),(0,W.jsx)("input",{type:"color",className:"env-color-swatch__input",value:t,onChange:i=>n(i.target.value)})]})})]})}function mp({label:e,value:t,min:n,max:i,step:r,onChange:a}){return(0,W.jsxs)("div",{className:"env-row",children:[(0,W.jsx)("span",{className:"env-row__label",children:e}),(0,W.jsxs)("div",{className:"env-row__value env-row__value--slider",children:[(0,W.jsx)("input",{type:"range",className:"env-slider",min:n,max:i,step:r,value:t,onChange:o=>a(Number(o.target.value))}),(0,W.jsx)("span",{className:"env-slider__value",children:t.toFixed(2)})]})]})}function Gw({label:e,value:t,options:n,onChange:i}){return(0,W.jsxs)("div",{className:"env-row",children:[(0,W.jsx)("span",{className:"env-row__label",children:e}),(0,W.jsx)("div",{className:"env-row__value",children:(0,W.jsx)("select",{className:"env-select",value:t,onChange:r=>i(r.target.value),children:n.map(r=>(0,W.jsx)("option",{value:r,children:r},r))})})]})}function gv({title:e,children:t}){let[n,i]=(0,de.useState)(!1);return(0,W.jsxs)("div",{className:"env-section",children:[(0,W.jsxs)("button",{className:"env-section__header",onClick:()=>i(r=>!r),children:[(0,W.jsx)(un.ChevronDown,{size:12,strokeWidth:2,className:`env-section__chevron${n?" env-section__chevron--collapsed":""}`}),(0,W.jsx)("span",{children:e})]}),!n&&(0,W.jsx)("div",{className:"env-section__body",children:t})]})}function Ww({isOpen:e,onToggle:t,settings:n,onChange:i}){return(0,W.jsxs)("div",{className:`left-panel-wrapper ${e?"left-panel-wrapper--open":"left-panel-wrapper--closed"}`,children:[!e&&(0,W.jsx)("button",{className:"side-panel__open-btn side-panel__open-btn--left",onClick:()=>t(!0),children:(0,W.jsx)(un.Settings,{size:20,strokeWidth:1.8})}),(0,W.jsxs)("div",{className:`side-panel side-panel--left ${e?"side-panel--open-left":"side-panel--closed-left"}`,"aria-hidden":!e,children:[(0,W.jsx)("div",{className:"side-panel__header",children:(0,W.jsxs)("div",{className:"side-panel__header-top",children:[(0,W.jsx)("span",{className:"side-panel__eyebrow",children:"Scene Settings"}),(0,W.jsx)("button",{className:"side-panel__close-btn",onClick:()=>t(!1),title:"Close",children:(0,W.jsx)(un.X,{size:12,strokeWidth:1.6})})]})}),(0,W.jsxs)("div",{className:"env-controls",children:[(0,W.jsxs)(gv,{title:"Background",children:[(0,W.jsx)(fv,{label:"Background",checked:n.backgroundEnabled,onChange:r=>i("backgroundEnabled",r)}),(0,W.jsx)(hp,{label:"Background Color",value:n.backgroundColor,onChange:r=>i("backgroundColor",r)}),(0,W.jsx)(Gw,{label:"Environment",value:n.envPreset,options:Iw,onChange:r=>i("envPreset",r)}),(0,W.jsx)(fv,{label:"Auto Rotate",checked:n.autoRotate,onChange:r=>i("autoRotate",r)})]}),(0,W.jsxs)(gv,{title:"Lighting",children:[(0,W.jsx)(mp,{label:"Exposure",value:n.exposure,min:0,max:2,step:.05,onChange:r=>i("exposure",r)}),(0,W.jsx)(mp,{label:"Ambient Light Intensity",value:n.ambientIntensity,min:0,max:3,step:.05,onChange:r=>i("ambientIntensity",r)}),(0,W.jsx)(hp,{label:"Ambient Light Color",value:n.ambientColor,onChange:r=>i("ambientColor",r)}),(0,W.jsx)(mp,{label:"Direct Light Intensity",value:n.directionalIntensity,min:0,max:5,step:.05,onChange:r=>i("directionalIntensity",r)}),(0,W.jsx)(hp,{label:"Direct Light Color",value:n.directionalColor,onChange:r=>i("directionalColor",r)})]})]})]})]})}function Xw({meshKeys:e,hiddenKeys:t,selectedKey:n,isOpen:i,onToggle:r,onFocus:a,onHover:o,onToggleVisibility:s}){let[c,l]=(0,de.useState)(""),[u,d]=(0,de.useState)(null),p=Object.values(e).filter(f=>f.label.toLowerCase().includes(c.toLowerCase()));return(0,W.jsxs)("div",{className:`right-panel-wrapper ${i?"right-panel-wrapper--open":"right-panel-wrapper--closed"}`,children:[!i&&(0,W.jsx)("button",{className:"side-panel__open-btn",onClick:()=>r(!0),children:(0,W.jsx)(un.Boxes,{size:20,strokeWidth:1.8})}),(0,W.jsxs)("div",{className:`side-panel ${i?"side-panel--open":"side-panel--closed"}`,"aria-hidden":!i,children:[(0,W.jsxs)("div",{className:"side-panel__header",children:[(0,W.jsxs)("div",{className:"side-panel__header-top",children:[(0,W.jsx)("span",{className:"side-panel__eyebrow",children:"SCENE OBJECTS"}),(0,W.jsx)("button",{className:"side-panel__close-btn",onClick:()=>r(!1),title:"Close",children:(0,W.jsx)(un.X,{size:12,strokeWidth:1.6})})]}),(0,W.jsxs)("p",{className:"side-panel__title",children:[p.length," objects"]})]}),(0,W.jsx)("div",{className:"side-panel__search-wrap",children:(0,W.jsx)("input",{className:"side-panel__search",type:"text",placeholder:"Search objects",value:c,onChange:f=>l(f.target.value)})}),(0,W.jsx)("div",{className:"side-panel__list",children:p.map(({key:f,label:g})=>{let y=!t.has(f),T=n===f,x=u===f;return(0,W.jsxs)("div",{onClick:()=>a(f),onMouseEnter:()=>{d(f),o(f)},onMouseLeave:()=>{d(null),o(null)},className:["side-panel__row",x?"side-panel__row--hovered":"",T?"side-panel__row--selected":""].filter(Boolean).join(" "),children:[(0,W.jsx)("span",{className:`side-panel__label${x||T?" side-panel__label--hovered":""}`,children:g}),(0,W.jsx)("button",{className:"side-panel__vis-btn",title:y?"Hide":"Show",onClick:h=>{h.stopPropagation(),s(f)},children:(0,W.jsx)("span",{className:`side-panel__checkbox${y?" side-panel__checkbox--checked":""}`,children:y&&(0,W.jsx)(un.Check,{size:9,strokeWidth:5,color:"white"})})})]},f)})})]})]})}function gp({modelUrl:e,modelFormat:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r=!0,backgroundColor:a="#1a1a1a",showSceneObjectsPanel:o=!0,showSceneSettingsPanel:s=!0,enableModelUpload:c=!1,zoomOnSelected:l=!1,highlightOnHover:u=!1,showLoadingOverlay:d=!0,refitOnResize:p=!0,backgroundEnabled:f=!1,autoRotate:g=!1,envPreset:y="city",exposure:T=1,ambientIntensity:x=.6,ambientColor:h="#ffffff",directionalIntensity:m=1.2,directionalColor:S="#ffffff",onModelLoaded:M,onLoadError:C}){let L=(0,de.useRef)(null),b=(0,de.useRef)({}),_=(0,de.useRef)(null),v=(0,de.useRef)(null),P=(0,de.useRef)(0),[z,E]=(0,de.useState)(null),[V,A]=(0,de.useState)(null),[X,j]=(0,de.useState)(!1),[k,B]=(0,de.useState)({}),[Y,q]=(0,de.useState)(new Set),[ue,Ee]=(0,de.useState)(null),[be,Ce]=(0,de.useState)(null),[De,ze]=(0,de.useState)(null),[se,Lt]=(0,de.useState)(null),[Xe,Ge]=(0,de.useState)(!1),[$e,rt]=(0,de.useState)(!1),[it,en]=(0,de.useState)(!1),[qe,on]=(0,de.useState)(!1),[Gt,Ke]=(0,de.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[le,J]=(0,de.useState)(()=>typeof window>"u"?!0:window.innerWidth>900),[ee,Ve]=(0,de.useState)({backgroundEnabled:f,backgroundColor:a,autoRotate:g,envPreset:y,exposure:T,ambientIntensity:x,ambientColor:h,directionalIntensity:m,directionalColor:S}),tt=c?De:e,Fe=(0,de.useCallback)(()=>{E(null),A(null),j(!1),B({}),q(new Set),Ee(null),Ce(null),Ge(!1),en(!1)},[]),xe=(0,de.useCallback)(()=>{v.current?.cleanup(),v.current=null},[]),ot=(0,de.useCallback)(()=>{xe(),ze(null),Lt(null),Fe(),Ve({backgroundEnabled:f,backgroundColor:a,autoRotate:g,envPreset:y,exposure:T,ambientIntensity:x,ambientColor:h,directionalIntensity:m,directionalColor:S})},[h,x,g,a,f,S,m,y,T,Fe,xe]),gt=(0,de.useCallback)(async we=>{rt(!0);try{let R=await ml(we);xe(),v.current=R,ze(R.url),Lt(R.name),Fe()}catch(R){Ge(!0),C?.(R)}finally{rt(!1)}},[C,Fe,xe]),At=(0,de.useCallback)(we=>{let R=we?.[0];R&>(R)},[gt]);(0,de.useEffect)(()=>()=>{xe()},[xe]);let Kn=(0,de.useCallback)((we,R)=>{Ve(I=>({...I,[we]:R}))},[]);(0,de.useEffect)(()=>{Ve(we=>({...we,backgroundColor:a}))},[a]),(0,de.useEffect)(()=>{Fe()},[tt,Fe]);let Ln=(0,de.useCallback)(we=>{B(we),q(new Set),Ee(null)},[]),Ne=(0,de.useCallback)(we=>{E(we),Ge(!1);let R=Io(we);A(R>Ji?R:null),j(!1),M?.(we)},[M]),dt=(0,de.useCallback)(we=>{Ge(!0),C?.(we)},[C]),_t=(0,de.useCallback)(we=>{if(Ee(we),!l)return;let R=b.current[we];!R||!L.current||L.current.fitToBox(R,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5}).catch(()=>{})},[l]),We=(0,de.useCallback)(we=>{q(R=>{let I=new Set(R);return I.has(we)?I.delete(we):I.add(we),I})},[]),Wt=(0,de.useCallback)(we=>{!c||!Ic(we.dataTransfer)||(we.preventDefault(),we.stopPropagation(),P.current+=1,on(!0))},[c]),Bt=(0,de.useCallback)(we=>{!c||!Ic(we.dataTransfer)||(we.preventDefault(),we.stopPropagation(),we.dataTransfer.dropEffect="copy",on(!0))},[c]),Xt=(0,de.useCallback)(we=>{!c||!Ic(we.dataTransfer)||(we.preventDefault(),we.stopPropagation(),P.current=Math.max(0,P.current-1),P.current===0&&on(!1))},[c]),tn=(0,de.useCallback)(we=>{!c||!Ic(we.dataTransfer)||(we.preventDefault(),we.stopPropagation(),P.current=0,on(!1),At(we.dataTransfer.files))},[c,At]),Mr=d&&($e||!!(tt&&!Xe&&(!z||!it)));return(0,W.jsxs)("div",{className:"smv-root",style:{background:ee.backgroundColor},onDragEnter:Wt,onDragOver:Bt,onDragLeave:Xt,onDrop:tn,children:[s&&tt&&(0,W.jsx)(Ww,{isOpen:le,onToggle:J,settings:ee,onChange:Kn}),(0,W.jsxs)("div",{className:"smv-canvasArea",children:[V!==null&&!X&&(0,W.jsxs)("div",{className:"smv-largeModelBanner",children:[(0,W.jsx)(un.AlertTriangle,{size:14,className:"smv-largeModelBanner__icon"}),(0,W.jsxs)("span",{children:["Very large model detected (",Math.round(V/1e6),"M triangles) \u2014 it may render and move slowly on this device, and click/hover selection on the model is disabled. Use the scene objects panel to select parts."]}),(0,W.jsx)("button",{type:"button",className:"smv-largeModelBanner__dismiss",onClick:()=>j(!0),"aria-label":"Dismiss",children:(0,W.jsx)(un.X,{size:12})})]}),c?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)("input",{ref:_,type:"file",accept:hl,className:"smv-upload-input",onChange:we=>{At(we.target.files),we.currentTarget.value=""}}),tt?(0,W.jsx)("div",{className:"smv-upload-toolbar",children:(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)("span",{className:"smv-upload-toolbar__name",children:se??"Uploaded model"}),(0,W.jsxs)("button",{type:"button",className:"smv-upload-toolbar__button smv-upload-toolbar__button--ghost",onClick:ot,children:[(0,W.jsx)(un.Trash2,{size:14}),"Clear"]})]})}):null]}):null,tt?(0,W.jsx)(bv.Canvas,{dpr:[1,2],frameloop:"demand",resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:{background:ee.backgroundColor},camera:{position:[0,0,5],fov:45,near:.1,far:1e3},children:(0,W.jsxs)(de.Suspense,{fallback:null,children:[(0,W.jsx)("ambientLight",{intensity:ee.ambientIntensity,color:ee.ambientColor}),(0,W.jsx)("directionalLight",{position:[-4,5,7],intensity:ee.directionalIntensity,color:ee.directionalColor,castShadow:!0}),(0,W.jsx)("directionalLight",{position:[-5,5,5],intensity:.5}),(0,W.jsx)(de.Suspense,{fallback:null,children:(0,W.jsx)(zc.Environment,{preset:ee.envPreset,background:ee.backgroundEnabled})}),(0,W.jsx)(jw,{exposure:ee.exposure}),(0,W.jsx)(Hw,{enabled:ee.autoRotate,controlsRef:L}),(0,W.jsx)(fp,{onLoadError:dt,children:(0,W.jsx)(de.Suspense,{fallback:null,children:(0,W.jsx)(Vw,{url:tt,format:De?void 0:t,dracoDecoderPath:n,ktx2TranscoderPath:i,meshopt:r,hiddenKeys:Y,selectedKey:ue,panelHoveredKey:be,nodeRefsOut:b,onMeshesReady:Ln,onModelLoaded:Ne,onMeshClick:_t,highlightOnHover:u})})},tt),(0,W.jsx)(Fw,{scene:z,controlsRef:L,refitOnResize:p,onInitialFitComplete:()=>en(!0)}),(0,W.jsx)(zc.CameraControls,{ref:L,makeDefault:!0,smoothTime:.3})]})}):(0,W.jsx)("div",{className:"smv-upload-empty-state",style:{background:ee.backgroundColor},children:(0,W.jsxs)("div",{className:"smv-upload-empty-state__card",children:[(0,W.jsx)("div",{className:"smv-upload-empty-state__icon",children:(0,W.jsx)(un.Upload,{size:24})}),(0,W.jsxs)("p",{className:"smv-upload-empty-state__body",children:["Drag and drop ",(0,W.jsx)("code",{children:".glb"}),", ",(0,W.jsx)("code",{children:".gltf"}),","," ",(0,W.jsx)("code",{children:".obj"}),", ",(0,W.jsx)("code",{children:".fbx"}),", ",(0,W.jsx)("code",{children:".usdz"}),", or"," ",(0,W.jsx)("code",{children:".zip"})," here"]}),(0,W.jsxs)("button",{type:"button",className:"smv-upload-empty-state__button",onClick:()=>_.current?.click(),children:[(0,W.jsx)(un.Upload,{size:15}),"Choose model"]})]})}),(0,W.jsx)(ro,{visible:Mr,message:$e?"Preparing model...":"Loading model..."}),c&&qe?(0,W.jsx)("div",{className:"smv-upload-drop-overlay",children:(0,W.jsxs)("div",{className:"smv-upload-drop-overlay__card",children:[(0,W.jsx)(un.Upload,{size:20}),(0,W.jsx)("span",{children:"Release to load your model"})]})}):null]}),o&&tt&&(0,W.jsx)(Xw,{meshKeys:k,hiddenKeys:Y,selectedKey:ue,isOpen:Gt,onToggle:Ke,onFocus:_t,onHover:Ce,onToggleVisibility:We})]})}var ks=require("react");function xv(e=null){let[t,n]=(0,ks.useState)(e),i=(0,ks.useCallback)(a=>{n(a)},[n]),r=(0,ks.useCallback)(()=>{n(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:n,handleObjectSelect:i,clearSelection:r}}var yv=require("react");function wv(e,t){return(0,yv.useMemo)(()=>{if(!t)return null;let n=e[t];return n||(Object.values(e).find(i=>i.id===t||i.modelObjectId===t)??null)},[e,t])}var _v=require("react");function Sv(e){return(0,_v.useMemo)(()=>Object.values(e).map(t=>t.modelObjectId),[e])}var Qt=require("react");function bp(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Bs(e,t){if(!bp(t))return t;let n=bp(e)?{...e}:{};for(let i of Object.keys(t)){let r=t[i];n[i]=bp(r)?Bs(n[i],r):r}return n}function qw(e){return typeof e=="object"&&!Array.isArray(e)}function Yw(e,t){return"group"in t?e.group===t.group:"tag"in t?e.tags?.includes(t.tag)??!1:e.type===t.type}function Vr(e,t){if(qw(t))return Object.entries(e).filter(([,r])=>Yw(r,t)).map(([r])=>r);let i=(typeof t=="string"?[t]:t).map(r=>Pn(e,r)).filter(r=>r!==null);return[...new Set(i)]}function Uc(e,t){return Vr(e,t).map(n=>e[n]).filter(n=>n!==void 0)}function $w(e){return Array.isArray(e)&&e.length>0&&typeof e[0]!="string"}function va(e,t,n){let i=$w(t)?t:[{ids:t,patch:n??{}}],r=e;for(let a of i)for(let o of Vr(r,a.ids)){let s=r[o];if(!s)continue;let c=Bs(s,a.patch);r===e&&(r={...e}),r[o]=c}return r}function Vc(e){return{style:{material:e}}}var Mv={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 Cv(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,n&&typeof n=="object"?{...n}:n]))}function Kw(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function Tv(e){let[t,n]=(0,Qt.useState)(e),i=(0,Qt.useCallback)((L,b)=>{n(_=>b===void 0?va(_,L):va(_,L,b))},[]),r=(0,Qt.useCallback)((L,b)=>i(L,Vc(b)),[i]),a=(0,Qt.useCallback)((L,b)=>r(L,{baseColor:b}),[r]),o=(0,Qt.useCallback)((L,b,_="baseColor")=>{let v=Mv[_],P=typeof b=="string"?{path:b}:b;i(L,{style:{material:{[v]:P}}})},[i]),s=(0,Qt.useCallback)((L,b="baseColor")=>{let _=Mv[b];i(L,{style:{material:{[_]:void 0}}})},[i]),c=(0,Qt.useCallback)((L,b)=>{n(_=>{let v=Pn(_,L);if(!v)return _;let P=Cv(_[v]?.style?.material),z=Vr(_,b);if(z.length===0)return _;let E=_;for(let V of z){let A=_[V];A&&(E===_&&(E={..._}),E[V]={...A,style:{...A.style,material:Cv(P)}})}return E})},[]),l=(0,Qt.useCallback)(L=>i(L,{style:{material:void 0}}),[i]),u=(0,Qt.useCallback)((L,b)=>i(L,{transform:b}),[i]),d=(0,Qt.useCallback)(L=>i(L,{transform:void 0}),[i]),p=(0,Qt.useCallback)((L,b)=>i(L,{metadata:b}),[i]),f=(0,Qt.useCallback)(L=>Uc(t,L),[t]),g=(0,Qt.useCallback)(L=>Vr(t,L).map(b=>t[b]?.id??b),[t]),y=(0,Qt.useCallback)(L=>{let b=Pn(t,L);return b?t[b]?.style?.material??null:null},[t]),T=(0,Qt.useCallback)(L=>i(L,{visible:!1}),[i]),x=(0,Qt.useCallback)(L=>i(L,{visible:!0}),[i]),h=(0,Qt.useCallback)(L=>{n(b=>{let _=Vr(b,L).reduce((v,P)=>{let z=b[P];return z&&v.push({ids:P,patch:{visible:z.visible===!1}}),v},[]);return va(b,_)})},[n]),m=(0,Qt.useCallback)(()=>{n(L=>va(L,Object.keys(L),{visible:!0}))},[n]),S=(0,Qt.useMemo)(()=>Kw(t),[t]),M=(0,Qt.useMemo)(()=>Object.keys(S).map(L=>t[L]?.id??L),[S,t]),C=(0,Qt.useCallback)(L=>{let b=Pn(t,L);return b?t[b]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:n,updateObjectBindings:i,setMaterial:r,setBaseColor:a,setTexture:o,clearTexture:s,copyMaterial:c,resetMaterial:l,getMaterial:y,setTransform:u,resetTransform:d,updateMetadata:p,selectObjectBindings:f,selectObjectBindingIds:g,hiddenObjects:S,hiddenObjectIds:M,hideObject:T,showObject:x,toggleObjectVisibility:h,isObjectHidden:C,clearHiddenObjects:m}}function Pv(e){return e}var Cn=require("react");function Fc(e,t){return Bs(e,t)}var Zw={type:"point",color:"#ffffff",intensity:1,position:[0,0,0],distance:0,decay:2,attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0};function Av(e){let t=(0,Cn.useRef)(null),[n,i]=(0,Cn.useState)(()=>{let x=typeof e=="function"?e():e;return t.current=x,x}),r=(0,Cn.useCallback)(x=>{i(h=>{let m=typeof x=="function"?x(h):x;return Fc(h,m)})},[]),a=(0,Cn.useCallback)(()=>{let x=t.current;x&&i(x)},[]),o=(0,Cn.useCallback)((x,h)=>{r(m=>({lighting:{lights:m.lighting.lights.map(S=>S.id===x?{...S,...h}:S)}}))},[r]),s=(0,Cn.useCallback)(x=>{r(h=>h.lighting.lights.some(m=>m.id===x.id)?{}:{lighting:{lights:[...h.lighting.lights,{...Zw,...x}]}})},[r]),c=(0,Cn.useCallback)(x=>{r(h=>({lighting:{lights:h.lighting.lights.filter(m=>m.id!==x)}}))},[r]),l=(0,Cn.useCallback)((x,h)=>o(x,{intensity:h}),[o]),u=(0,Cn.useCallback)((x,h)=>o(x,{color:h}),[o]),d=(0,Cn.useCallback)(x=>o(x,{visible:!0}),[o]),p=(0,Cn.useCallback)(x=>o(x,{visible:!1}),[o]),f=(0,Cn.useCallback)(x=>{r(h=>({lighting:{lights:h.lighting.lights.map(m=>m.id===x?{...m,visible:!m.visible}:m)}}))},[r]),g=(0,Cn.useCallback)((x,h)=>o(x,{attachment:h,attachedToCamera:!1}),[o]),y=(0,Cn.useCallback)(x=>o(x,{attachment:void 0}),[o]),T=(0,Cn.useMemo)(()=>({items:n.lighting.lights,get:x=>n.lighting.lights.find(h=>h.id===x),add:s,update:o,remove:c,setIntensity:l,setColor:u,show:d,hide:p,toggle:f,attach:g,detach:y}),[n.lighting.lights,s,o,c,l,u,d,p,f,g,y]);return{sceneConfig:n,setSceneConfig:i,updateSceneConfig:r,resetSceneConfig:a,lights:T}}var jc=require("react");function Ev(){let[e,t]=(0,jc.useState)(null),n=(0,jc.useCallback)(i=>{t(i)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:n}}var ti=require("react"),Ds=require("three");function Hc(e){return[e.x,e.y,e.z]}function Rv(){let[e,t]=(0,ti.useState)(!0),[n,i]=(0,ti.useState)(!1),[r,a]=(0,ti.useState)(null),[o,s]=(0,ti.useState)(null),[c,l]=(0,ti.useState)(0),u=(0,ti.useCallback)(f=>{let g=new Ds.Box3().setFromObject(f),y=g.min.clone(),T=g.max.clone(),x=new Ds.Vector3,h=new Ds.Vector3,m=0;f.traverse(S=>{"isMesh"in S&&S.isMesh&&(m+=1)}),g.getCenter(x),g.getSize(h),s({min:Hc(y),max:Hc(T),center:Hc(x),size:Hc(h)}),l(m),a(null),t(!1),i(!0)},[]),d=(0,ti.useCallback)(f=>{a(f),s(null),l(0),t(!1),i(!1)},[]),p=(0,ti.useCallback)(()=>{t(!0),i(!1),a(null),s(null),l(0)},[]);return{isLoading:e,isReady:n,error:r,bounds:o,objectCount:c,handleModelLoaded:u,handleLoadError:d,resetModelState:p}}var Gc=require("react");function Lv({bindings:e,scene:t,camera:n,animations:i,onAction:r}){let{objectBindings:a,updateObjectBindings:o,showObject:s,hideObject:c,toggleObjectVisibility:l}=e,u=t?.updateSceneConfig,d=n?.focusObject,p=n?.fitScene,f=n?.resetView,g=n?.setCameraTarget,y=n?.setCameraState,T=i?.play,x=i?.pause,h=i?.stop,m=i?.setSpeed,S=i?.seek,M=(0,Gc.useCallback)(b=>{let _=Pn(a,b);return _?a[_]?.actions??[]:[]},[a]),C=(0,Gc.useCallback)(async b=>{for(let _ of b.action.effects??[]){if("objectBindings"in _){o(_.target,_.objectBindings);continue}if("sceneConfig"in _){u?.(_.sceneConfig);continue}if("visibility"in _){_.visibility==="show"?s(_.target):_.visibility==="hide"?c(_.target):l(_.target);continue}if("camera"in _){let P=_.camera;P.type==="focus-object"?await d?.(P.objectId??b.objectId):P.type==="fit-scene"?await p?.():P.type==="reset"?await f?.():P.type==="set-target"?await g?.(P.target,P.transition??!0):await y?.(P.state,P.transition??!0);continue}let v=_.animation;v.type==="play"?T?.(v.clip):v.type==="pause"?x?.():v.type==="stop"?h?.():v.type==="set-speed"?m?.(v.speed):S?.(v.time)}await r?.(b)},[p,d,c,r,x,T,f,S,m,y,g,s,h,l,o,u]),L=(0,Gc.useCallback)(async(b,_)=>{let v=Pn(a,b);if(!v)return null;let P=a[v],z=P?.actions?.find(V=>V.id===_);if(!P||!z)return null;let E={objectId:v,action:z,binding:P};return await C(E),E},[C,a]);return{getActionsForObject:M,handleAction:C,runAction:L}}var ji=require("react");function Jw(e){return typeof e=="function"?e:e?.handleViewerReady??null}function kv(...e){let t=(0,ji.useRef)(null),n=(0,ji.useRef)(e);n.current=e;let i=(0,ji.useCallback)(s=>{t.current=s;let c=new Set;for(let l of n.current){let u=Jw(l);u&&!c.has(u)&&(c.add(u),u(s))}},[]),r=(0,ji.useCallback)(()=>t.current,[]),a=(0,ji.useCallback)(s=>{let c=t.current;return c?c.captureImage(s):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),o=(0,ji.useCallback)(()=>{let s=t.current;return s?(s.invalidate(),!0):!1},[]);return{handleViewerReady:i,getViewer:r,captureImage:a,invalidate:o}}var Ye=require("react"),go=require("three");var yp=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],Wc=1;function Xc(e){return typeof e=="string"?[e]:e}function qc(e,t=0,n=1){return Math.min(n,Math.max(t,e))}function vp(e,t){return e+Math.random()*(t-e)}function Bv([e,t],n){return e+(t-e)*n}function xp([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 Dv(e,t){let n=qc(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 Qw(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(n=>n instanceof go.Material):[]}function e_(e){let t={opacity:e.opacity,transparent:e.transparent};e.color&&(t.baseColor=`#${e.color.getHexString()}`),e.emissive&&(t.emissive=`#${e.emissive.getHexString()}`);for(let n of yp){let i=e[n];typeof i=="number"&&(t[n]=i)}return t}function Nv(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 yp){let i=t[n];i!==void 0&&typeof e[n]=="number"&&(e[n]=i)}t.transparent!==void 0&&(e.transparent=t.transparent),e.needsUpdate=!0}function t_(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 n_(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 Ov(e={}){let t=(0,Ye.useRef)(e);t.current=e;let n=(0,Ye.useRef)(null),i=(0,Ye.useRef)(null),r=(0,Ye.useRef)(null),a=(0,Ye.useRef)(new Map),o=(0,Ye.useRef)(new Map),s=(0,Ye.useRef)(new Map),c=(0,Ye.useRef)(new Map),l=(0,Ye.useCallback)(k=>{let B=n.current;if(!B)return null;let Y=Pn(B.objectBindings,k);return B.nodeRefs[k]??(Y?B.nodeRefs[Y]:null)??(B.scene?Dr(B.scene,k):null)??null},[]),u=(0,Ye.useCallback)(k=>{let B=n.current;return B?typeof k=="object"&&!Array.isArray(k)?Vr(B.objectBindings,k):Xc(k).map(Y=>Pn(B.objectBindings,Y)??Y):typeof k=="string"?[k]:Array.isArray(k)?k:[]},[]),d=(0,Ye.useCallback)(()=>{n.current?.invalidate()},[]),p=(0,Ye.useCallback)((k,B)=>{let Y=!1;for(let q of u(k)){let ue=l(q);if(ue)for(let Ee of Qw(ue))s.current.has(Ee)||s.current.set(Ee,e_(Ee)),Nv(Ee,B),Y=!0}return Y},[l,u]),f=(0,Ye.useCallback)((k,B)=>{let Y=p(k,B);return Y&&d(),Y},[d,p]),g=(0,Ye.useCallback)((k,B)=>{let Y=!1;for(let q of u(k)){let ue=l(q);ue&&(c.current.has(ue)||c.current.set(ue,t_(ue)),n_(ue,B),Y=!0)}return Y},[l,u]),y=(0,Ye.useCallback)((k,B)=>{let Y=g(k,B);return Y&&d(),Y},[d,g]),T=(0,Ye.useCallback)(k=>{let B=l(k);if(!B)return null;B.updateWorldMatrix(!0,!1);let Y=B.getWorldPosition(new go.Vector3);return[Y.x,Y.y,Y.z]},[l]),x=(0,Ye.useCallback)(k=>{let B=o.current.get(k);return B?(B.light.removeFromParent(),B.light.dispose(),o.current.delete(k),d(),!0):!1},[d]),h=(0,Ye.useCallback)(k=>{let B=l(k.target);if(!B)return!1;let Y=o.current.get(k.id),q=Y?.light??new go.PointLight;return Y&&Y.target!==k.target&&q.removeFromParent(),q.name=`react-immersive-runtime-light:${k.id}`,q.color.set(k.color??"#ffffff"),q.intensity=k.intensity??1,q.distance=k.distance??0,q.decay=k.decay??2,q.castShadow=k.castShadow??!1,q.position.set(...k.offset??[0,0,0]),q.parent!==B&&B.add(q),o.current.set(k.id,{light:q,target:k.target}),d(),!0},[d,l]),m=(0,Ye.useCallback)((k,B)=>{let Y=o.current.get(k);if(!Y)return!1;if(B.target&&B.target!==Y.target){let q=l(B.target);if(!q)return!1;Y.light.removeFromParent(),q.add(Y.light),Y.target=B.target}return B.color!==void 0&&Y.light.color.set(B.color),B.intensity!==void 0&&(Y.light.intensity=B.intensity),B.distance!==void 0&&(Y.light.distance=B.distance),B.decay!==void 0&&(Y.light.decay=B.decay),B.offset!==void 0&&Y.light.position.set(...B.offset),B.castShadow!==void 0&&(Y.light.castShadow=B.castShadow),d(),!0},[d,l]),S=(0,Ye.useCallback)((k,B)=>{let Y=q=>B[q%B.length]??0;for(let q of k.materials??[])u(q.targets).forEach((ue,Ee)=>{let be=Y(Ee),Ce={};for(let De of yp){let ze=q.values[De];ze&&(Ce[De]=Bv(ze,be))}p(ue,Ce)});for(let q of k.transforms??[])u(q.targets).forEach((ue,Ee)=>{let be=Y(Ee),Ce={};q.values.position&&(Ce.position=xp(q.values.position,be)),q.values.rotation&&(Ce.rotation=xp(q.values.rotation,be)),q.values.scale&&(Ce.scale=xp(q.values.scale,be)),g(ue,Ce)});for(let q of k.lights??[])Xc(q.lights).forEach((ue,Ee)=>{let be=o.current.get(ue);be&&(be.light.intensity=Bv(q.intensity,Y(Ee)))})},[u,p,g]),M=(0,Ye.useRef)(()=>{}),C=(0,Ye.useRef)(()=>{});C.current=k=>{r.current=null;let B=!1;for(let[Y,q]of a.current){q.startedAt===null&&(q.startedAt=k);let ue=q.lastFrameAt??k;q.lastFrameAt=k;let Ee=q.override&&q.override.until>k?q.override.level:null;q.override&&Ee===null&&(q.override=null);let be=q.update(k,k-q.startedAt,Math.min(100,k-ue),Ee);B=!0,be||(a.current.delete(Y),q.onComplete?.())}B&&d(),a.current.size>0&&M.current()},M.current=()=>{r.current!==null||typeof requestAnimationFrame>"u"||(r.current=requestAnimationFrame(k=>C.current(k)))};let L=(0,Ye.useCallback)(k=>(a.current.set(k.id,k),M.current(),k.id),[]),b=(0,Ye.useCallback)((k,B={})=>{let Y=B.id??`transition-${Wc++}`,q=Math.max(1,B.duration??400),ue=B.easing??"ease-in-out";return L({id:Y,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(Ee,be,Ce,De)=>{let ze=De??Dv(be/q,ue);return S(k,[ze]),be<q}})},[S,L]),_=(0,Ye.useCallback)((k,B={})=>{let Y=B.id??`pulse-${Wc++}`,q=Math.max(1,B.duration??1e3),ue=B.minLevel??0,Ee=B.maxLevel??1,be=B.repeat??1/0,Ce=B.synchronized??!0,De=Math.max(1,...[...k.materials??[],...k.transforms??[]].map(ze=>u(ze.targets).length),...(k.lights??[]).map(ze=>Xc(ze.lights).length));return L({id:Y,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(ze,se,Lt,Xe)=>{let Ge=se/q,$e=Array.from({length:Ce?1:De},(rt,it)=>{if(Xe!==null)return Xe;let en=Ge+(Ce?0:it/De),qe=.5-Math.cos(en%1*Math.PI*2)/2;return ue+(Ee-ue)*qe});return S(k,$e),be===1/0||Ge<be}})},[S,L,u]),v=(0,Ye.useCallback)((k,B={})=>{let Y=B.id??`timeline-${Wc++}`,q=B.repeat??1,ue=k.map(be=>({...be,duration:Math.max(1,be.duration),hold:Math.max(0,be.hold??0)})),Ee=Math.max(1,ue.reduce((be,Ce)=>be+Ce.duration+Ce.hold,0));return L({id:Y,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(be,Ce,De,ze)=>{if(ue.length===0||q<=0)return!1;let se=Ce/Ee;if(q!==1/0&&se>=q){for(let Ge of ue)S(Ge.channels,[1]);return!1}let Lt=Ce%Ee,Xe=0;for(let Ge of ue){let $e=Xe+Ge.duration,rt=$e+Ge.hold;if(Lt>=$e){S(Ge.channels,[ze??1]),Xe=rt;continue}if(Lt>=Xe){let it=ze??Dv((Lt-Xe)/Ge.duration,Ge.easing??"ease-in-out");S(Ge.channels,[it]);break}}return!0}})},[S,L]),P=(0,Ye.useCallback)((k,B={})=>{let Y=B.id??`flicker-${Wc++}`,q=B.synchronized??!0,ue=B.minLevel??.15,Ee=B.maxLevel??1,be=B.interval??[45,160],Ce=typeof be=="number"?[be,be]:be,De=[Math.max(1,Math.min(...Ce)),Math.max(1,Math.max(...Ce))],ze=qc(B.response??.7,.01,1),se=qc(B.blackoutChance??.08),Lt=qc(B.flashChance??.12),Xe=B.flashLevel??1.15,Ge=Math.max(1,...[...k.materials??[],...k.transforms??[]].map(qe=>u(qe.targets).length),...(k.lights??[]).map(qe=>Xc(qe.lights).length)),$e=q?1:Ge,rt=Array.from({length:$e},()=>ue),it=Array.from({length:$e},()=>ue),en=Array.from({length:$e},()=>0);return L({id:Y,startedAt:null,lastFrameAt:null,override:null,onComplete:B.onComplete,update:(qe,on,Gt,Ke)=>{for(let le=0;le<$e;le+=1){if(Ke!==null)it[le]=Ke;else if(qe>=en[le]){let ee=Math.random();it[le]=ee<se?vp(0,Math.min(.04,ue)):ee<se+Lt?Xe:vp(ue,Ee),en[le]=qe+vp(...De)}let J=1-Math.pow(1-ze,Math.max(1,Gt)/16.67);rt[le]+=(it[le]-rt[le])*J}return S(k,rt),B.duration===void 0||on<B.duration}})},[S,L,u]),z=(0,Ye.useCallback)((k,B,Y)=>{let q=a.current.get(k);if(!q)return!1;let ue=typeof performance>"u"?Date.now():performance.now();return q.override={level:B,until:ue+Math.max(0,Y)},M.current(),!0},[]),E=(0,Ye.useCallback)(k=>a.current.delete(k),[]),V=(0,Ye.useCallback)(()=>{a.current.clear(),r.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(r.current),r.current=null)},[]),A=(0,Ye.useCallback)(()=>{for(let[k,B]of s.current)Nv(k,B);s.current.clear();for(let[k,B]of c.current)k.position.set(...B.position),k.rotation.set(...B.rotation),k.scale.set(...B.scale),k.visible=B.visible,k.updateMatrix(),k.updateMatrixWorld(!0);c.current.clear();for(let k of o.current.values())k.light.removeFromParent(),k.light.dispose();o.current.clear(),d()},[d]),X=(0,Ye.useCallback)(()=>{V(),A()},[A,V]),j=(0,Ye.useCallback)(k=>{i.current&&i.current!==k.scene&&A(),n.current=k,i.current=k.scene,t.current.onViewerReady?.(k)},[A]);return(0,Ye.useEffect)(()=>()=>{X(),n.current=null,i.current=null},[X]),{handleViewerReady:j,setMaterial:f,setTransform:y,getWorldPosition:T,addPointLight:h,updatePointLight:m,removePointLight:x,transition:b,timeline:v,pulse:_,flicker:P,overrideEffect:z,stopEffect:E,stopAllEffects:V,resetRuntime:X}}var an=require("react");function Uv(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ns(e){return typeof e=="number"&&Number.isFinite(e)}function Iv(e){return Array.isArray(e)&&e.length===3&&e.every(Ns)}function r_(e){return!Uv(e)||!Iv(e.position)||!Iv(e.target)||e.fov!==null&&!Ns(e.fov)||!Ns(e.zoom)||e.zoom<=0||e.azimuthAngle!==void 0&&!Ns(e.azimuthAngle)||e.polarAngle!==void 0&&!Ns(e.polarAngle)?null:{position:e.position,target:e.target,fov:e.fov,zoom:e.zoom,azimuthAngle:e.azimuthAngle,polarAngle:e.polarAngle}}function i_(e){if(!Uv(e))return null;let t;if(e.camera!==void 0){let r=r_(e.camera);if(!r)return null;t=r}let n;if(e.hidden!==void 0){if(!Array.isArray(e.hidden)||!e.hidden.every(r=>typeof r=="string"))return null;n=e.hidden}let i;if(e.selected===null||typeof e.selected=="string")i=e.selected;else if(e.selected!==void 0)return null;return{camera:t,hidden:n,selected:i}}function zv(e,t,n){let i=Object.values(t).filter(r=>r.visible===!1).map(r=>r.id);return{camera:e??void 0,hidden:i,selected:n?.id??null}}function Vv({cameraState:e,setCameraState:t,objectBindings:n,onObjectBindingsChange:i,selectedObjectBinding:r,setSelectedObjectBinding:a,paramKey:o="view",debounceMs:s=400,autoSync:c=!0}){let l=(0,an.useRef)(null),u=(0,an.useRef)(null),d=(0,an.useRef)(null),p=(0,an.useRef)(null),f=(0,an.useRef)(null),g=(0,an.useCallback)(()=>{f.current!==null&&(window.clearTimeout(f.current),f.current=null),d.current=null,p.current=null},[]),y=(0,an.useCallback)(()=>{let _=zv(e,n,r);return`${o}=${encodeURIComponent(JSON.stringify(_))}`},[e,n,r,o]),T=(0,an.useCallback)(()=>{let _=new URL(window.location.href);return _.hash=y(),_.toString()},[y]),x=(0,an.useCallback)(_=>{let v=new URL(window.location.href);v.hash=_,window.history.replaceState(null,"",v.toString()),u.current=_,l.current=new URLSearchParams(v.hash.slice(1)).get(o)},[o]),h=(0,an.useCallback)(()=>{g(),x(y())},[y,g,x]),m=(0,an.useRef)({cameraState:e,objectBindings:n,selectedObjectBinding:r});m.current={cameraState:e,objectBindings:n,selectedObjectBinding:r};let[S,M]=(0,an.useState)(!1);(0,an.useEffect)(()=>{if(!c||!S){g();return}let _=m.current,v=zv(_.cameraState,_.objectBindings,_.selectedObjectBinding),P=`${o}=${encodeURIComponent(JSON.stringify(v))}`;if(P===u.current){g();return}P===d.current&&s===p.current||(g(),d.current=P,p.current=s,f.current=window.setTimeout(()=>{f.current=null,d.current=null,p.current=null,x(P)},Math.max(0,s)))},[c,e,g,s,n,o,S,r,x]),(0,an.useEffect)(()=>g,[g]);let C=(0,an.useRef)(null),L=(0,an.useRef)(null),b=(0,an.useCallback)(async()=>{M(!0);let _=window.location.hash.startsWith("#")?window.location.hash.slice(1):window.location.hash,v=new URLSearchParams(_).get(o);if(!v)return C.current=null,!1;if(v===l.current||v===C.current||v===L.current)return!1;let P;try{P=JSON.parse(v)}catch{return!1}let z=i_(P);if(!z)return!1;L.current=v;try{if(z.camera&&await t(z.camera,!1),z.hidden){let E=new Set(z.hidden);i(Object.fromEntries(Object.entries(n).map(([V,A])=>[V,{...A,visible:!E.has(A.id)}])))}if(z.selected!==void 0){let E=z.selected?Pn(n,z.selected):null;a(E?n[E]:null)}return C.current=v,!0}finally{L.current===v&&(L.current=null)}},[n,i,o,t,a]);return(0,an.useEffect)(()=>{let _=()=>{b().catch(()=>{})};return window.addEventListener("hashchange",_),()=>{window.removeEventListener("hashchange",_)}},[b]),{getShareUrl:T,syncUrl:h,restoreFromUrl:b}}0&&(module.exports={BindingBuilder,DEFAULT_SCENE_CONFIG,MATERIAL_BLENDING_MODES,MATERIAL_SIDES,ModelViewer,SimpleModelViewer,defineObjectBindings,material,patchBindings,patchSceneConfig,selectBindingKeys,selectBindings,useObjectBinding,useObjectBindingIds,useObjectBindings,useSceneConfig,useShareableViewerState,useViewerActions,useViewerAnimations,useViewerCamera,useViewerConnection,useViewerEffects,useViewerHover,useViewerModel,useViewerSelection});
|