@liveroom-tech/react-immersive 6.0.1 → 6.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/binding-builder.js +18 -18
- package/dist/binding-builder.mjs +1 -1
- package/dist/{chunk-VQGYZOMX.mjs → chunk-33SUWPXC.mjs} +2 -2
- package/dist/{chunk-UGPR4EPP.mjs → chunk-EIBW7ZJE.mjs} +1 -1
- package/dist/{chunk-2JFUMJUP.mjs → chunk-KFTJMFYF.mjs} +1 -1
- package/dist/hosted.js +17 -17
- package/dist/hosted.mjs +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{c as he}from"./chunk-2JFUMJUP.mjs";import"./chunk-MMO7KCYU.mjs";import{a as pe,b as He,c as _e,d as Ne,e as gn}from"./chunk-P2JZ5Z7I.mjs";import{I as ut,J as gt,K as De,L as ft,M as qe,N as yn,c as Ee,g as lt,i as en}from"./chunk-UGPR4EPP.mjs";import{a as st,b as at,y as ct}from"./chunk-OTSCPJWF.mjs";import{Aa as Qt,Ba as tn,Da as nn,Ha as le,Ia as Le,K as Se,Ka as on,L as Oe,La as sn,M as kt,Ma as an,N as Ut,Na as cn,Oa as ln,Pa as dn,Qa as un,R as re,Ra as dt,S as Te,U as Dt,Ua as ke,V as Ht,Va as Ue,Wa as fn,Xa as pn,Ya as mn,Za as bn,_a as wn,da as _t,e as ot,f as At,fa as Nt,g as Pt,ha as qt,ia as Ft,j as Et,ja as Kt,k as Tt,ka as Gt,l as It,la as $t,m as ee,ma as zt,na as Wt,oa as Yt,pa as fe,qa as ye,ra as Ie,wa as Xt,xa as Jt}from"./chunk-4JMJALRO.mjs";import{L as rn,j as Lt,q as Zt}from"./chunk-V7WZUWJ5.mjs";import"./chunk-JR557W27.mjs";import{useCallback as hn,useEffect as je,useMemo as Be,useRef as Fe,useState as me}from"react";import{jsx as ie,jsxs as Ke}from"react/jsx-runtime";var Vn=Object.freeze({});function pt(e){return ie(st,{labels:e.labels,children:ie(Cn,{...e})})}function Cn({before:e,after:t,layout:i="slider",split:s,onSplitChange:g,reveal:y="auto",semanticComparison:l=!1,showComparisonOutlines:A,onComparisonOutlinesChange:B,onComparisonChange:O,linkSections:v,...m}){let k=at(),[E,C]=me(y==="auto");je(()=>{y==="auto"&&C(!0)},[y]);let[h,b]=me(.5),[f,S]=me(!0),x=A??f,j=R=>{A===void 0&&S(R),B?.(R)},q=De(s??h),X=hn(R=>{let P=De(R);s===void 0&&b(P),g?.(P)},[s,g]),_=Fe([null,null]),[V,J]=me([null,null]),[N,a]=me(null),[r,c]=me(null),u=[{...m,...e},{...m,...t}];je(()=>a(null),[u[0].sceneConfig?.section,u[1].sceneConfig?.section]);let w=R=>{let P=u[R].objectBindings;return P&&typeof P=="object"?P:V[R]?.url===u[R].modelUrl?V[R].bindings:Vn},L=w(0),$=w(1),n=Be(()=>l?ke({objectBindings:L,sceneConfig:u[0].sceneConfig},{objectBindings:$,sceneConfig:u[1].sceneConfig},typeof l=="object"?l:{}):null,[l,L,$,u[0].sceneConfig,u[1].sceneConfig]),o=n?JSON.stringify(n):"",p=Fe(null);je(()=>{n&&p.current!==o&&(p.current=o,O?.(n))},[n,o,O]);let d=n?.objects.find(R=>R.id===r),M=Be(()=>n?[Ue(n,"before",r),Ue(n,"after",r)]:null,[n,r]),I=Be(()=>gt(),[]);je(()=>()=>I.detach(),[I]);let T=[e,t],D=Be(()=>[0,1].map(R=>(P,W)=>{_.current[R]=P,J(K=>K[R]?.bindings===P.objectBindings&&K[R]?.url===W?K:K.map((G,we)=>we===R?{url:W,bindings:P.objectBindings}:G)),I.attach(R,P.raw.controls,P.invalidate)}),[I]),z=T.map((R,P)=>{let{label:W,...K}=R,G={preset:"minimal",...m,...K},we=K.onViewerReady??m.onViewerReady;return{...G,...v??!!l?{sceneConfig:{...G.sceneConfig,section:N??u[1].sceneConfig?.section??Se},onSceneConfigChange:oe=>{a(oe.section??Se),(K.onSceneConfigChange??m.onSceneConfigChange)?.(oe)}}:{},...M?{comparisonHighlights:x?M[P]:void 0,selectedObject:P===0?d?.beforeKey?L[d.beforeKey]:null:d?.afterKey?$[d.afterKey]:null}:{},onObjectSelect:oe=>{if((K.onObjectSelect??m.onObjectSelect)?.(oe),n){let Ce=n.objects.find(Z=>(P===0?Z.beforeObjectId:Z.afterObjectId)===oe?.modelObjectId);c(Ce?.id??null)}},onViewerReady:oe=>{D[P](oe,G.modelUrl),we?.(oe)}}}),F=[e.label??k("compareBefore"),t.label??k("compareAfter")];(!z[0].modelUrl||!z[1].modelUrl)&&console.error("[react-immersive] CompareViewer needs a modelUrl, shared or on each side.");let ce=Fe(null),Q=n?ie(ut,{showOutlines:x,onShowOutlinesChange:j,report:n,selected:r,onSelect:R=>{c(R.id);let P=R.afterObjectId?1:0,W=_.current[P],K=P===1?R.afterObjectId:R.beforeObjectId,G=K?W?.raw.nodes[K]:null;W&&G&&(I.setLeader(P),W.raw.controls.fitToBox(G,!0),W.invalidate())},onClear:()=>c(null)}):null;if(!E)return ie(ct,{className:"ri-compare",background:lt(m.backgroundColor,m.sceneConfig),poster:m.poster??t.poster??e.poster,onReveal:()=>C(!0)});if(i==="side-by-side")return Ke("div",{className:"ri-compare ri-compare--sideBySide",children:[z.map((R,P)=>Ke("div",{className:"ri-compare__pane",children:[ie(he,{...R}),ie("span",{className:"ri-compare__label",children:F[P]})]},P)),Q]});let Y=`${q*100}%`;return Ke("div",{ref:ce,className:"ri-compare ri-compare--slider",style:{"--ri-compare-split":Y},children:[ie("div",{className:"ri-compare__layer",children:ie(he,{...z[0]})}),ie("div",{className:"ri-compare__layer ri-compare__layer--after",children:ie(he,{...z[1]})}),Q,ie(ft,{split:q,onSplitChange:X,labels:[F[0],F[1]],containerRef:ce})]})}import{useCallback as Ae,useRef as jt}from"react";import{useCallback as H,useMemo as mt,useState as Sn}from"react";var bt={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 wt(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,i])=>[t,i&&typeof i=="object"?{...i}:i]))}function On(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function Ge(e){let[t,i]=Sn(e),s=H((a,r)=>{i(c=>r===void 0?pe(c,a):pe(c,a,r))},[]),g=H((a,r)=>s(a,He(r)),[s]),y=H((a,r)=>g(a,{baseColor:r}),[g]),l=H((a,r,c="baseColor")=>{let u=bt[c],w=typeof r=="string"?{path:r}:r;s(a,{style:{material:{[u]:w}}})},[s]),A=H((a,r="baseColor")=>{let c=bt[r];s(a,{style:{material:{[c]:void 0}}})},[s]),B=H((a,r)=>{i(c=>{let u=ee(c,a);if(!u)return c;let w=wt(c[u]?.style?.material),L=le(c,r);if(L.length===0)return c;let $=c;for(let n of L){let o=c[n];o&&($===c&&($={...c}),$[n]={...o,style:{...o.style,material:wt(w)}})}return $})},[]),O=H(a=>s(a,{style:{material:void 0}}),[s]),v=H((a,r)=>s(a,{transform:r}),[s]),m=H(a=>s(a,{transform:void 0}),[s]),k=H((a,r)=>s(a,{metadata:r}),[s]),E=H((a,r)=>{i(c=>{let u=c;for(let w of le(c,a)){let L=c[w],$=r(L.decals??[]);u===c&&(u={...c}),u[w]={...L,decals:$.length>0?$:void 0}}return u})},[]),C=H((a,r)=>{let c=r.id??`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;return E(a,u=>[...u.filter(w=>w.id!==c),{...r,id:c}]),c},[E]),h=H((a,r,c)=>E(a,u=>u.map(w=>w.id===r?{...w,...c}:w)),[E]),b=H((a,r)=>E(a,c=>c.filter(u=>u.id!==r)),[E]),f=H(a=>Le(t,a),[t]),S=H(a=>le(t,a).map(r=>t[r]?.id??r),[t]),x=H(a=>{let r=ee(t,a);return r?t[r]?.style?.material??null:null},[t]),j=H(a=>s(a,{visible:!1}),[s]),q=H(a=>s(a,{visible:!0}),[s]),X=H(a=>{i(r=>{let c=le(r,a).reduce((u,w)=>{let L=r[w];return L&&u.push({ids:w,patch:{visible:L.visible===!1}}),u},[]);return pe(r,c)})},[i]),_=H(()=>{i(a=>pe(a,Object.keys(a),{visible:!0}))},[i]),V=mt(()=>On(t),[t]),J=mt(()=>Object.keys(V).map(a=>t[a]?.id??a),[V,t]),N=H(a=>{let r=ee(t,a);return r?t[r]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:i,updateObjectBindings:s,setMaterial:g,setBaseColor:y,setTexture:l,clearTexture:A,copyMaterial:B,resetMaterial:O,getMaterial:x,setTransform:v,resetTransform:m,updateMetadata:k,addDecal:C,updateDecal:h,removeDecal:b,selectObjectBindings:f,selectObjectBindingIds:S,hiddenObjects:V,hiddenObjectIds:J,hideObject:j,showObject:q,toggleObjectVisibility:X,isObjectHidden:N,clearHiddenObjects:_}}import{useCallback as te,useMemo as jn,useRef as Bn,useState as vn}from"react";function $e(e){let t=Bn(null),[i,s]=vn(()=>{let f=typeof e=="function"?e():e;return t.current=f,f}),g=te(f=>{s(S=>{let x=typeof f=="function"?f(S):f;return _e(S,x)})},[]),y=te(()=>{let f=t.current;f&&s(f)},[]),l=te((f,S)=>{g(x=>({lighting:{lights:x.lighting.lights.map(j=>j.id===f?{...j,...S}:j)}}))},[g]),A=te(f=>{g(S=>S.lighting.lights.some(x=>x.id===f.id)?{}:{lighting:{lights:[...S.lighting.lights,Ne(f)]}})},[g]),B=te(f=>{g(S=>({lighting:{lights:S.lighting.lights.filter(x=>x.id!==f)}}))},[g]),O=te((f,S)=>l(f,{intensity:S}),[l]),v=te((f,S)=>l(f,{color:S}),[l]),m=te(f=>l(f,{visible:!0}),[l]),k=te(f=>l(f,{visible:!1}),[l]),E=te(f=>{g(S=>({lighting:{lights:S.lighting.lights.map(x=>x.id===f?{...x,visible:!x.visible}:x)}}))},[g]),C=te((f,S)=>l(f,{attachment:S,attachedToCamera:!1}),[l]),h=te(f=>l(f,{attachment:void 0}),[l]),b=jn(()=>({items:i.lighting.lights,get:f=>i.lighting.lights.find(S=>S.id===f),add:A,update:l,remove:B,setIntensity:O,setColor:v,show:m,hide:k,toggle:E,attach:C,detach:h}),[i.lighting.lights,A,l,B,O,v,m,k,E,C,h]);return{sceneConfig:i,setSceneConfig:s,updateSceneConfig:g,resetSceneConfig:y,lights:b}}import{useCallback as ze}from"react";function We({bindings:e,scene:t,camera:i,animations:s,isolation:g,onAction:y}){let{objectBindings:l,updateObjectBindings:A,showObject:B,hideObject:O,toggleObjectVisibility:v}=e,m=t?.updateSceneConfig,k=i?.focusObject,E=i?.fitScene,C=i?.resetView,h=i?.setCameraTarget,b=i?.setCameraState,f=s?.play,S=s?.pause,x=s?.stop,j=s?.setSpeed,q=s?.seek,X=g?.handleIsolationChange,_=ze(N=>{let a=ee(l,N);return a?l[a]?.actions??[]:[]},[l]),V=ze(async N=>{for(let a of N.action.effects??[]){if("objectBindings"in a){A(a.target,a.objectBindings);continue}if("sceneConfig"in a){m?.(a.sceneConfig);continue}if("isolation"in a){X?.(a.isolation);continue}if("visibility"in a){a.visibility==="show"?B(a.target):a.visibility==="hide"?O(a.target):v(a.target);continue}if("camera"in a){let c=a.camera;c.type==="focus-object"?await k?.(c.objectId??N.objectId):c.type==="fit-scene"?await E?.():c.type==="reset"?await C?.():c.type==="set-target"?await h?.(c.target,c.transition??!0):await b?.(c.state,c.transition??!0);continue}let r=a.animation;if(r.type==="play"){let{type:c,clip:u,...w}=r;f?.(u,w)}else r.type==="pause"?S?.(r.clip):r.type==="stop"?x?.(r.clip):r.type==="set-speed"?j?.(r.speed,r.clip):q?.(r.time,r.clip)}await y?.(N)},[E,k,O,y,S,f,C,q,j,b,h,X,B,x,v,A,m]),J=ze(async(N,a)=>{let r=ee(l,N);if(!r)return null;let c=l[r],u=c?.actions?.find(L=>L.id===a);if(!c||!u)return null;let w={objectId:r,action:u,binding:c};return await V(w),w},[V,l]);return{getActionsForObject:_,handleAction:V,runAction:J}}import{useCallback as Ve,useRef as yt}from"react";function Mn(e){return typeof e=="function"?e:e?.handleViewerReady??null}function Ye(...e){let t=yt(null),i=yt(e);i.current=e;let s=Ve(B=>{t.current=B;let O=new Set;for(let v of i.current){let m=Mn(v);m&&!O.has(m)&&(O.add(m),m(B))}},[]),g=Ve(()=>t.current,[]),y=Ve(B=>{let O=t.current;return O?O.captureImage(B):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),l=Ve(()=>{let B=t.current;return B?(B.invalidate(),!0):!1},[]),A=Ve(B=>{let O=t.current;return O?O.captureVideo(B):Promise.reject(new Error("ModelViewer is not ready yet."))},[]);return{handleViewerReady:s,getViewer:g,captureImage:y,captureVideo:A,invalidate:l}}import{useCallback as U,useEffect as Rn,useRef as se}from"react";import{Material as xn,PointLight as An,Vector3 as Pn}from"three";var Qe=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],ve=1;function Me(e){return typeof e=="string"?[e]:e}function Re(e,t=0,i=1){return Math.min(i,Math.max(t,e))}function Xe(e,t){return e+Math.random()*(t-e)}function ht([e,t],i){return e+(t-e)*i}function Je([e,t],i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i,e[2]+(t[2]-e[2])*i]}function Vt(e,t){let i=Re(e);switch(t){case"ease-in":return i*i;case"ease-out":return 1-(1-i)*(1-i);case"ease-in-out":return i<.5?2*i*i:1-Math.pow(-2*i+2,2)/2;default:return i}}function En(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(i=>i instanceof xn):[]}function Tn(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 i of Qe){let s=e[i];typeof s=="number"&&(t[i]=s)}return t}function Ct(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 i of Qe){let s=t[i];s!==void 0&&typeof e[i]=="number"&&(e[i]=s)}t.transparent!==void 0&&(e.transparent=t.transparent),e.needsUpdate=!0}function In(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 Ln(e,t){if(t.position&&e.position.set(...t.position),t.rotation&&e.rotation.set(...t.rotation),t.scale!==void 0){let i=typeof t.scale=="number"?[t.scale,t.scale,t.scale]:t.scale;e.scale.set(...i)}t.visible!==void 0&&(e.visible=t.visible),e.updateMatrix(),e.updateMatrixWorld(!0)}function Ze(e={}){let t=se(e);t.current=e;let i=se(null),s=se(null),g=se(null),y=se(new Map),l=se(new Map),A=se(new Map),B=se(new Map),O=U(n=>{let o=i.current;if(!o)return null;let p=ee(o.objectBindings,n);return o.raw.nodes[n]??(p?o.raw.nodes[p]:null)??(o.raw.scene?ot(o.raw.scene,n):null)??null},[]),v=U(n=>{let o=i.current;return o?typeof n=="object"&&!Array.isArray(n)?le(o.objectBindings,n):Me(n).map(p=>ee(o.objectBindings,p)??p):typeof n=="string"?[n]:Array.isArray(n)?n:[]},[]),m=U(()=>{i.current?.invalidate()},[]),k=U((n,o)=>{let p=!1;for(let d of v(n)){let M=O(d);if(M)for(let I of En(M))A.current.has(I)||A.current.set(I,Tn(I)),Ct(I,o),p=!0}return p},[O,v]),E=U((n,o)=>{let p=k(n,o);return p&&m(),p},[m,k]),C=U((n,o)=>{let p=!1;for(let d of v(n)){let M=O(d);M&&(B.current.has(M)||B.current.set(M,In(M)),Ln(M,o),p=!0)}return p},[O,v]),h=U((n,o)=>{let p=C(n,o);return p&&m(),p},[m,C]),b=U(n=>{let o=O(n);if(!o)return null;o.updateWorldMatrix(!0,!1);let p=o.getWorldPosition(new Pn);return[p.x,p.y,p.z]},[O]),f=U(n=>{let o=l.current.get(n);return o?(o.light.removeFromParent(),o.light.dispose(),l.current.delete(n),m(),!0):!1},[m]),S=U(n=>{let o=O(n.target);if(!o)return!1;let p=l.current.get(n.id),d=p?.light??new An;return p&&p.target!==n.target&&d.removeFromParent(),d.name=`react-immersive-runtime-light:${n.id}`,d.color.set(n.color??"#ffffff"),d.intensity=n.intensity??1,d.distance=n.distance??0,d.decay=n.decay??2,d.castShadow=n.castShadow??!1,d.position.set(...n.offset??[0,0,0]),d.parent!==o&&o.add(d),l.current.set(n.id,{light:d,target:n.target}),m(),!0},[m,O]),x=U((n,o)=>{let p=l.current.get(n);if(!p)return!1;if(o.target&&o.target!==p.target){let d=O(o.target);if(!d)return!1;p.light.removeFromParent(),d.add(p.light),p.target=o.target}return o.color!==void 0&&p.light.color.set(o.color),o.intensity!==void 0&&(p.light.intensity=o.intensity),o.distance!==void 0&&(p.light.distance=o.distance),o.decay!==void 0&&(p.light.decay=o.decay),o.offset!==void 0&&p.light.position.set(...o.offset),o.castShadow!==void 0&&(p.light.castShadow=o.castShadow),m(),!0},[m,O]),j=U((n,o)=>{let p=d=>o[d%o.length]??0;for(let d of n.materials??[])v(d.targets).forEach((M,I)=>{let T=p(I),D={};for(let z of Qe){let F=d.values[z];F&&(D[z]=ht(F,T))}k(M,D)});for(let d of n.transforms??[])v(d.targets).forEach((M,I)=>{let T=p(I),D={};d.values.position&&(D.position=Je(d.values.position,T)),d.values.rotation&&(D.rotation=Je(d.values.rotation,T)),d.values.scale&&(D.scale=Je(d.values.scale,T)),C(M,D)});for(let d of n.lights??[])Me(d.lights).forEach((M,I)=>{let T=l.current.get(M);T&&(T.light.intensity=ht(d.intensity,p(I)))})},[v,k,C]),q=se(()=>{}),X=se(()=>{});X.current=n=>{g.current=null;let o=!1;for(let[p,d]of y.current){d.startedAt===null&&(d.startedAt=n);let M=d.lastFrameAt??n;d.lastFrameAt=n;let I=d.override&&d.override.until>n?d.override.level:null;d.override&&I===null&&(d.override=null);let T=d.update(n,n-d.startedAt,Math.min(100,n-M),I);o=!0,T||(y.current.delete(p),d.onComplete?.())}o&&m(),y.current.size>0&&q.current()},q.current=()=>{g.current!==null||typeof requestAnimationFrame>"u"||(g.current=requestAnimationFrame(n=>X.current(n)))};let _=U(n=>(y.current.set(n.id,n),q.current(),n.id),[]),V=U((n,o={})=>{let p=o.id??`transition-${ve++}`,d=Math.max(1,o.duration??400),M=o.easing??"ease-in-out";return _({id:p,startedAt:null,lastFrameAt:null,override:null,onComplete:o.onComplete,update:(I,T,D,z)=>{let F=z??Vt(T/d,M);return j(n,[F]),T<d}})},[j,_]),J=U((n,o={})=>{let p=o.id??`pulse-${ve++}`,d=Math.max(1,o.duration??1e3),M=o.minLevel??0,I=o.maxLevel??1,T=o.repeat??1/0,D=o.synchronized??!0,z=Math.max(1,...[...n.materials??[],...n.transforms??[]].map(F=>v(F.targets).length),...(n.lights??[]).map(F=>Me(F.lights).length));return _({id:p,startedAt:null,lastFrameAt:null,override:null,onComplete:o.onComplete,update:(F,ce,ue,Q)=>{let Y=ce/d,R=Array.from({length:D?1:z},(P,W)=>{if(Q!==null)return Q;let K=Y+(D?0:W/z),G=.5-Math.cos(K%1*Math.PI*2)/2;return M+(I-M)*G});return j(n,R),T===1/0||Y<T}})},[j,_,v]),N=U((n,o={})=>{let p=o.id??`timeline-${ve++}`,d=o.repeat??1,M=n.map(T=>({...T,duration:Math.max(1,T.duration),hold:Math.max(0,T.hold??0)})),I=Math.max(1,M.reduce((T,D)=>T+D.duration+D.hold,0));return _({id:p,startedAt:null,lastFrameAt:null,override:null,onComplete:o.onComplete,update:(T,D,z,F)=>{if(M.length===0||d<=0)return!1;let ce=D/I;if(d!==1/0&&ce>=d){for(let Y of M)j(Y.channels,[1]);return!1}let ue=D%I,Q=0;for(let Y of M){let R=Q+Y.duration,P=R+Y.hold;if(ue>=R){j(Y.channels,[F??1]),Q=P;continue}if(ue>=Q){let W=F??Vt((ue-Q)/Y.duration,Y.easing??"ease-in-out");j(Y.channels,[W]);break}}return!0}})},[j,_]),a=U((n,o={})=>{let p=o.id??`flicker-${ve++}`,d=o.synchronized??!0,M=o.minLevel??.15,I=o.maxLevel??1,T=o.interval??[45,160],D=typeof T=="number"?[T,T]:T,z=[Math.max(1,Math.min(...D)),Math.max(1,Math.max(...D))],F=Re(o.response??.7,.01,1),ce=Re(o.blackoutChance??.08),ue=Re(o.flashChance??.12),Q=o.flashLevel??1.15,Y=Math.max(1,...[...n.materials??[],...n.transforms??[]].map(G=>v(G.targets).length),...(n.lights??[]).map(G=>Me(G.lights).length)),R=d?1:Y,P=Array.from({length:R},()=>M),W=Array.from({length:R},()=>M),K=Array.from({length:R},()=>0);return _({id:p,startedAt:null,lastFrameAt:null,override:null,onComplete:o.onComplete,update:(G,we,oe,Ce)=>{for(let Z=0;Z<R;Z+=1){if(Ce!==null)W[Z]=Ce;else if(G>=K[Z]){let it=Math.random();W[Z]=it<ce?Xe(0,Math.min(.04,M)):it<ce+ue?Q:Xe(M,I),K[Z]=G+Xe(...z)}let xt=1-Math.pow(1-F,Math.max(1,oe)/16.67);P[Z]+=(W[Z]-P[Z])*xt}return j(n,P),o.duration===void 0||we<o.duration}})},[j,_,v]),r=U((n,o,p)=>{let d=y.current.get(n);if(!d)return!1;let M=typeof performance>"u"?Date.now():performance.now();return d.override={level:o,until:M+Math.max(0,p)},q.current(),!0},[]),c=U(n=>y.current.delete(n),[]),u=U(()=>{y.current.clear(),g.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(g.current),g.current=null)},[]),w=U(()=>{for(let[n,o]of A.current)Ct(n,o);A.current.clear();for(let[n,o]of B.current)n.position.set(...o.position),n.rotation.set(...o.rotation),n.scale.set(...o.scale),n.visible=o.visible,n.updateMatrix(),n.updateMatrixWorld(!0);B.current.clear();for(let n of l.current.values())n.light.removeFromParent(),n.light.dispose();l.current.clear(),m()},[m]),L=U(()=>{u(),w()},[w,u]),$=U(n=>{s.current&&s.current!==n.raw.scene&&w(),i.current=n,s.current=n.raw.scene,t.current.onViewerReady?.(n)},[w]);return Rn(()=>()=>{L(),i.current=null,s.current=null},[L]),{handleViewerReady:$,setMaterial:E,setTransform:h,getWorldPosition:b,addPointLight:S,updatePointLight:x,removePointLight:f,transition:V,timeline:N,pulse:J,flicker:a,overrideEffect:r,stopEffect:c,stopAllEffects:u,resetRuntime:L}}import{useCallback as kn,useState as Un}from"react";function et(){let[e,t]=Un(null),i=kn(s=>{t(s)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:i}}import{useCallback as St,useState as Dn}from"react";function tt(e=null){let[t,i]=Dn(e),s=St((y,l)=>i({...l,target:y}),[]),g=St(()=>i(null),[]);return{isolation:t,isolate:s,clearIsolation:g,handleIsolationChange:i}}import{useCallback as xe,useState as de}from"react";function nt(){let[e,t]=de(!0),[i,s]=de(!1),[g,y]=de(null),[l,A]=de(null),[B,O]=de(0),[v,m]=de([]),[k,E]=de([]),[C,h]=de([]),b=xe(j=>{A(j.bounds),O(j.objectCount),m(j.materialVariants),E(j.materialVariantGroups),y(null),t(!1),s(!0)},[]),f=xe(j=>h(j),[]),S=xe(j=>{y(j),A(null),O(0),m([]),E([]),h([]),t(!1),s(!1)},[]),x=xe(()=>{t(!0),s(!1),y(null),A(null),O(0),m([]),E([]),h([])},[]);return{isLoading:e,isReady:i,error:g,bounds:l,objectCount:B,materialVariants:v,materialVariantGroups:k,objects:C,handleModelLoaded:b,handleObjectCatalog:f,handleLoadError:S,resetModelState:x}}import{useCallback as Ot,useState as Hn}from"react";function rt(e=null){let[t,i]=Hn(e),s=Ot(y=>{i(y)},[i]),g=Ot(()=>{i(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:i,handleObjectSelect:s,clearSelection:g}}var _n={};function Nn(e={}){let t=jt(e);t.current=e;let i=jt(e.bindings===void 0||e.bindings==="auto"),s=Ge(()=>{let V=t.current.bindings;return V===void 0||V==="auto"?_n:typeof V=="function"?V():V}),g=$e(()=>{let V=t.current.sceneConfig;return V===void 0?Oe:typeof V=="function"?V():V}),y=rt(),l=et(),A=Ee(e.camera),B=nt(),O=qe(),v=tt(),m=Ze(),k=Ye(A,m),E=We({bindings:s,scene:g,camera:A,animations:O,isolation:v,onAction:e.onAction}),{setObjectBindings:C}=s,{handleObjectCatalog:h}=B,b=Ae(V=>{h(V),i.current&&C(J=>{let N=dt(V.map(a=>a.name));for(let a of Object.keys(N))J[a]&&(N[a]=J[a]);return N})},[h,C]),{handleObjectSelect:f}=y,S=Ae(V=>{f(V),t.current.onObjectSelect?.(V)},[f]),{handleHoveredObject:x}=l,j=Ae(V=>{x(V),t.current.onObjectHover?.(V)},[x]),{handleLoadError:q}=B,X=Ae(V=>{q(V),t.current.onLoadError?.(V)},[q]),_=e.sceneConfig!==void 0||g.sceneConfig!==Oe;return{props:{objectBindings:s.objectBindings,onObjectBindingsChange:C,selectedObject:y.selectedObjectBinding,onObjectSelect:S,onObjectHover:j,onCameraChange:A.handleCameraChange,onViewerReady:k.handleViewerReady,onModelLoaded:B.handleModelLoaded,onLoadError:X,onObjectCatalog:b,onAnimationsReady:O.handleAnimationsReady,onAction:E.handleAction,onSceneConfigChange:g.setSceneConfig,isolation:v.isolation,onIsolationChange:v.handleIsolationChange,..._?{sceneConfig:g.sceneConfig}:{}},bindings:s,selection:y,hover:l,camera:A,model:B,animations:O,actions:E,scene:g,isolation:v,effects:m,connection:k}}import{useMemo as qn}from"react";function Fn(e,t){return qn(()=>{if(!t)return null;let i=e[t];return i||(Object.values(e).find(s=>s.id===t||s.modelObjectId===t)??null)},[e,t])}import{useMemo as Kn}from"react";function Gn(e){return Kn(()=>Object.values(e).map(t=>t.modelObjectId),[e])}import{useCallback as ne,useEffect as Pe,useRef as ae,useState as $n}from"react";function zn(e,t){if(!e.objectBindings&&(!!e.hidden?.length||!!e.selected)&&Object.keys(t).length===0)return null;let s={};if(e.objectBindings)s.bindings=e.objectBindings;else if(e.hidden){let g=new Set(e.hidden);s.bindings=Object.fromEntries(Object.entries(t).map(([y,l])=>[y,{...l,visible:!g.has(l.id)}]))}if(e.selected!==void 0){let g=e.objectBindings??t,y=e.selected?ee(g,e.selected):null;s.selected=y?g[y]:null}return s}function Bt(e){return JSON.stringify(e&&{modelUrl:e.modelUrl,activeModelId:e.activeModelId,tilesetUrl:e.tilesetUrl,mergeModels:e.mergeModels,models:e.models?.map(({id:t,url:i,mergeModels:s})=>({id:t,url:i,mergeModels:s}))})}function Wn(e){let t=ae(e);t.current=e;let i=e.paramKey??"view",s=`${i}Id`,[g,y]=$n(!1),l=ae(null),A=ae(null),B=ae(null),O=ae(null),v=ae(null),m=ae(null),k=ae(null),E=ae(null),C=ae(!0),h=ne(r=>{let c=r instanceof Error?r:new Error(String(r));t.current.onError?t.current.onError(c):k.current!==c.message&&console.warn("[react-immersive]",c.message),k.current=c.message},[]),b=ne(()=>{v.current!==null&&clearTimeout(v.current),v.current=null},[]);Pe(()=>(C.current=!0,()=>{C.current=!1,b()}),[b]);let f=ne(()=>{let r=t.current,c=(r.mode??(r.configuration?"configuration":"view"))==="configuration";return{version:1,camera:r.cameraState??void 0,hidden:Object.values(r.objectBindings).filter(u=>u.visible===!1).map(u=>u.id),selected:r.selectedObjectBinding?.id??null,...c?{objectBindings:r.objectBindings,configuration:r.configuration}:{}}},[]),S=ne(()=>ye(f(),typeof window>"u"?void 0:window.location.href),[f]),x=ne(()=>Ie(f(),typeof window>"u"?void 0:window.location.href),[f]),j=ne((r,c,u=window.location.href)=>{let w=new URL(u),L=new URLSearchParams(w.hash.slice(1));if(L.delete(i),L.delete(s),L.set(c?s:i,r),w.hash=L.toString(),!c&&w.href.length>(t.current.maxUrlLength??65536))throw new Error("Viewer configuration is too large for an inline link. Save JSON instead, or configure storage for createShareUrl(). Uploaded images can make links large.");return w.href},[i,s]),q=ne(()=>j(fe(S()),!1),[S,j]),X=ne(async()=>{let r=window.location.href,c=t.current.storage,u=await x();if(!c)return j(fe(u),!1,r);let w=await c.save(u);if(typeof w!="string"||!w.trim()||w.length>2048)throw new Error("Viewer state storage returned an invalid id.");return j(w,!0,r)},[x,j]),_=ne(()=>{if(b(),l.current||m.current)return;let r=q();window.history.replaceState(null,"",r),O.current=`inline:${new URL(r).hash}`},[b,q]),V=ne(async()=>{let r=l.current;if(!r||A.current||!C.current)return!1;A.current=r,b();try{let c=t.current,u=r.state;if(u.configuration&&!r.configurationApplied){if(!c.onConfigurationChange)throw new Error("Restoring a full viewer configuration requires onConfigurationChange.");return r.configurationApplied=!0,c.onConfigurationChange(u.configuration),!1}if(u.configuration&&Bt(c.configuration)!==Bt(u.configuration)||c.isReady===!1)return!1;if(u.camera&&!r.cameraApplied){if(!await c.setCameraState(u.camera,!1)||l.current!==r||!C.current)return!1;r.cameraApplied=!0}c=t.current;let w=zn(u,c.objectBindings);return!w||l.current!==r?!1:(w.bindings&&c.onObjectBindingsChange(w.bindings),w.selected!==void 0&&c.setSelectedObjectBinding(w.selected),l.current=null,B.current=r.key,y(!0),!0)}catch(c){throw l.current===r&&(l.current=null),y(!1),c}finally{A.current=null,l.current&&l.current!==r&&C.current&&V().catch(h)}},[b,h]),J=ne(async r=>{let c=ye(r,window.location.href);b(),E.current=null,m.current=null;let u=new URLSearchParams(window.location.hash.slice(1));return O.current=u.has(i)?`inline:${window.location.hash}`:u.has(s)?`stored:${s}:${u.get(s)}`:null,B.current=null,l.current={key:`manual:${fe(c)}`,origin:"manual",state:c,configurationApplied:!1,cameraApplied:!1},y(!1),V()},[V,b,i,s]),N=ne(async()=>{let r=new URLSearchParams(window.location.hash.slice(1)),c=r.get(i),u=r.get(s),w=c!==null?`inline:${window.location.hash}`:u!==null?`stored:${s}:${u}`:null;if(!w)return E.current=null,m.current=null,l.current?.origin==="manual"?V():(l.current=null,B.current=null,y(!0),!1);if(w===O.current||w===B.current)return l.current?.origin==="manual"?V():!1;if(l.current?.key===w)return V();b(),y(!1),E.current=w,l.current=null;let L=c;if(c===null){let n=t.current.storage;if(!n)throw new Error("This shared link requires a viewer state storage adapter.");(!m.current||m.current.key!==w)&&(m.current={key:w,promise:n.load(u)});let o=m.current;try{L=await o.promise}finally{m.current===o&&(m.current=null)}if(E.current!==w||!C.current)return!1;let p=l.current;if(p?.key===w||B.current===w)return p?V():!1}let $;try{$=ye(L,window.location.href)}catch(n){throw n}return l.current={key:w,origin:"url",state:$,configurationApplied:!1,cameraApplied:!1},V()},[V,b,s,i]);Pe(()=>{l.current&&V().catch(h)}),Pe(()=>{let r=()=>{N().catch(h)};return window.addEventListener("hashchange",r),()=>window.removeEventListener("hashchange",r)},[N,h]);let a=null;if(e.autoSync!==!1&&g&&!l.current&&!m.current)try{a=fe(S())}catch{}return Pe(()=>{if(e.autoSync===!1||!g||l.current||m.current){b();return}if(a===null){try{S()}catch(r){h(r)}return}return v.current=setTimeout(()=>{v.current=null;try{_()}catch(r){h(r)}},Math.max(0,e.debounceMs??400)),b},[a,e.autoSync,e.debounceMs,g,b,S,_,h]),{getState:S,getStateAsync:x,restoreState:J,getShareUrl:q,createShareUrl:X,syncUrl:_,restoreFromUrl:N}}import{useCallback as ge,useState as vt}from"react";var Yn={};function Mt(){return`asset-${globalThis.crypto.randomUUID()}`}function Xn(e){let[t,i]=vt(e),[s,g]=vt(()=>e[0]?re(e[0]):""),y=t.find(C=>re(C)===s)??t[0],l=y?re(y):"",A=ge(C=>{i(h=>h.map(b=>re(b)===l?{...b,objectBindings:C}:b))},[l]),B=ge(C=>{i(h=>h.map(b=>re(b)===l?{...b,sceneConfig:C}:b))},[l]),O=ge(C=>g(h=>{let b=t.find(f=>f.url===C);return b?re(b):h}),[t]),v=ge(C=>{let h={...C,id:C.id??Mt()};return i(b=>{if(b.some(f=>re(f)===h.id))throw new Error("Asset instance ID already exists.");return[...b,h]}),h.id},[]),m=ge(C=>{let h=t.find(j=>re(j)===C);if(!h)return null;let b=structuredClone(h);b.id=Mt(),b.sceneConfig?.measurements&&(b.sceneConfig.measurements.items=b.sceneConfig.measurements.items.map(j=>({...j,modelId:b.id}))),b.label=`${h.label??"Asset"} copy`;let[f,S,x]=h.transform?.position??[0,0,0];return b.transform={...b.transform,position:[f+1,S,x]},i(j=>[...j,b]),b.id},[t]),k=ge(C=>{i(h=>h.filter(b=>re(b)!==C))},[]),E=ge((C,h)=>{let b=Te(h);i(f=>f.map(S=>re(S)===C?{...S,transform:b}:S))},[]);return{modelUrl:y?.url??"",models:t,activeModelId:l,onModelChange:O,onActiveModelChange:g,objectBindings:Yn,onObjectBindingsChange:A,sceneConfig:y?.sceneConfig,onSceneConfigChange:B,addModel:v,duplicateModel:m,removeModel:k,updateModelTransform:E}}import{useCallback as be,useEffect as Jn,useState as Qn,useSyncExternalStore as Zn}from"react";var er={sequenceId:null,time:0,duration:0,status:"stopped",previewing:!1,ready:!1,issues:[]},tr=()=>()=>{},Rt=()=>er;function nr(){let[e,t]=Qn(null),i=Zn(e?.subscribe??tr,e?.getState??Rt,Rt);Jn(()=>()=>e?.stop(),[e]);let s=be(g=>t(g),[]);return{controls:e,playback:i,handleSequencesReady:s,play:be(g=>e?.play(g)??!1,[e]),pause:be(()=>e?.pause(),[e]),stop:be(()=>e?.stop(),[e]),seek:be(g=>e?.seek(g)??!1,[e]),select:be(g=>e?.select(g)??!1,[e])}}export{tn as ACTION_CATALOG,yn as AssetDiagnosticsPanel,pt as CompareViewer,Lt as DEFAULT_MODEL_VIEWER_LABELS,Oe as DEFAULT_SCENE_CONFIG,Se as DEFAULT_SECTION_CONFIG,pn as MATERIAL_BLENDING_MODES,fn as MATERIAL_SIDES,Yt as MAX_VIEWER_STATE_BYTES,_t as MEASUREMENT_UNITS,en as MODEL_VIEWER_PRESETS,he as ModelViewer,Pt as SEQUENCE_EASINGS,At as SEQUENCE_OBJECT_PROPERTIES,cn as applyIsolation,sn as applyStyleRules,un as buildBindingsFromNodes,qt as calibrateMeasurements,rn as chooseMaterialVariant,mn as collectObjectHierarchy,on as colorScaleValue,ke as compareViewerConfigurations,bn as copyBindingStyle,Xt as createARHandoffUrl,dn as createDefaultBinding,gn as defineObjectBindings,Qt as exportConfiguredUSDZ,nn as findCatalogAction,Ht as groundAsset,ln as inferType,Zt as inspectAsset,an as isolatedBindingKeys,He as material,Kt as measurementResult,Nt as measurementScale,Ft as measurementValue,zt as measurementsToCsv,Te as parseAssetTransform,Gt as parseMeasurements,kt as parseSectionConfig,Wt as parseSelectionSets,Et as parseSequences,ye as parseViewerState,wn as pasteBindingStyle,pe as patchBindings,_e as patchSceneConfig,Ie as prepareViewerState,Jt as readARHandoffUrl,Tt as sampleSequenceTrack,Ne as sceneLight,Ut as sectionSnapshot,le as selectBindingKeys,Le as selectBindings,$t as serializeMeasurements,fe as serializeViewerState,Dt as snapAssetToGrid,It as upsertSequenceKeyframe,Fn as useObjectBinding,Gn as useObjectBindingIds,Ge as useObjectBindings,$e as useSceneConfig,Wn as useShareableViewerState,Nn as useViewer,We as useViewerActions,qe as useViewerAnimations,Ee as useViewerCamera,Ye as useViewerConnection,Ze as useViewerEffects,et as useViewerHover,tt as useViewerIsolation,nt as useViewerModel,Xn as useViewerModels,rt as useViewerSelection,nr as useViewerSequences};
|
|
1
|
+
"use client";import{c as he}from"./chunk-KFTJMFYF.mjs";import"./chunk-MMO7KCYU.mjs";import{a as pe,b as He,c as _e,d as Ne,e as gn}from"./chunk-P2JZ5Z7I.mjs";import{I as ut,J as gt,K as De,L as ft,M as qe,N as yn,c as Ee,g as lt,i as en}from"./chunk-EIBW7ZJE.mjs";import{a as st,b as at,y as ct}from"./chunk-OTSCPJWF.mjs";import{Aa as Qt,Ba as tn,Da as nn,Ha as le,Ia as Le,K as Se,Ka as on,L as Oe,La as sn,M as kt,Ma as an,N as Ut,Na as cn,Oa as ln,Pa as dn,Qa as un,R as re,Ra as dt,S as Te,U as Dt,Ua as ke,V as Ht,Va as Ue,Wa as fn,Xa as pn,Ya as mn,Za as bn,_a as wn,da as _t,e as ot,f as At,fa as Nt,g as Pt,ha as qt,ia as Ft,j as Et,ja as Kt,k as Tt,ka as Gt,l as It,la as $t,m as ee,ma as zt,na as Wt,oa as Yt,pa as fe,qa as ye,ra as Ie,wa as Xt,xa as Jt}from"./chunk-4JMJALRO.mjs";import{L as rn,j as Lt,q as Zt}from"./chunk-V7WZUWJ5.mjs";import"./chunk-JR557W27.mjs";import{useCallback as hn,useEffect as je,useMemo as Be,useRef as Fe,useState as me}from"react";import{jsx as ie,jsxs as Ke}from"react/jsx-runtime";var Vn=Object.freeze({});function pt(e){return ie(st,{labels:e.labels,children:ie(Cn,{...e})})}function Cn({before:e,after:t,layout:i="slider",split:s,onSplitChange:g,reveal:y="auto",semanticComparison:l=!1,showComparisonOutlines:A,onComparisonOutlinesChange:B,onComparisonChange:O,linkSections:v,...m}){let k=at(),[E,C]=me(y==="auto");je(()=>{y==="auto"&&C(!0)},[y]);let[h,b]=me(.5),[f,S]=me(!0),x=A??f,j=R=>{A===void 0&&S(R),B?.(R)},q=De(s??h),X=hn(R=>{let P=De(R);s===void 0&&b(P),g?.(P)},[s,g]),_=Fe([null,null]),[V,J]=me([null,null]),[N,a]=me(null),[r,c]=me(null),u=[{...m,...e},{...m,...t}];je(()=>a(null),[u[0].sceneConfig?.section,u[1].sceneConfig?.section]);let w=R=>{let P=u[R].objectBindings;return P&&typeof P=="object"?P:V[R]?.url===u[R].modelUrl?V[R].bindings:Vn},L=w(0),$=w(1),n=Be(()=>l?ke({objectBindings:L,sceneConfig:u[0].sceneConfig},{objectBindings:$,sceneConfig:u[1].sceneConfig},typeof l=="object"?l:{}):null,[l,L,$,u[0].sceneConfig,u[1].sceneConfig]),o=n?JSON.stringify(n):"",p=Fe(null);je(()=>{n&&p.current!==o&&(p.current=o,O?.(n))},[n,o,O]);let d=n?.objects.find(R=>R.id===r),M=Be(()=>n?[Ue(n,"before",r),Ue(n,"after",r)]:null,[n,r]),I=Be(()=>gt(),[]);je(()=>()=>I.detach(),[I]);let T=[e,t],D=Be(()=>[0,1].map(R=>(P,W)=>{_.current[R]=P,J(K=>K[R]?.bindings===P.objectBindings&&K[R]?.url===W?K:K.map((G,we)=>we===R?{url:W,bindings:P.objectBindings}:G)),I.attach(R,P.raw.controls,P.invalidate)}),[I]),z=T.map((R,P)=>{let{label:W,...K}=R,G={preset:"minimal",...m,...K},we=K.onViewerReady??m.onViewerReady;return{...G,...v??!!l?{sceneConfig:{...G.sceneConfig,section:N??u[1].sceneConfig?.section??Se},onSceneConfigChange:oe=>{a(oe.section??Se),(K.onSceneConfigChange??m.onSceneConfigChange)?.(oe)}}:{},...M?{comparisonHighlights:x?M[P]:void 0,selectedObject:P===0?d?.beforeKey?L[d.beforeKey]:null:d?.afterKey?$[d.afterKey]:null}:{},onObjectSelect:oe=>{if((K.onObjectSelect??m.onObjectSelect)?.(oe),n){let Ce=n.objects.find(Z=>(P===0?Z.beforeObjectId:Z.afterObjectId)===oe?.modelObjectId);c(Ce?.id??null)}},onViewerReady:oe=>{D[P](oe,G.modelUrl),we?.(oe)}}}),F=[e.label??k("compareBefore"),t.label??k("compareAfter")];(!z[0].modelUrl||!z[1].modelUrl)&&console.error("[react-immersive] CompareViewer needs a modelUrl, shared or on each side.");let ce=Fe(null),Q=n?ie(ut,{showOutlines:x,onShowOutlinesChange:j,report:n,selected:r,onSelect:R=>{c(R.id);let P=R.afterObjectId?1:0,W=_.current[P],K=P===1?R.afterObjectId:R.beforeObjectId,G=K?W?.raw.nodes[K]:null;W&&G&&(I.setLeader(P),W.raw.controls.fitToBox(G,!0),W.invalidate())},onClear:()=>c(null)}):null;if(!E)return ie(ct,{className:"ri-compare",background:lt(m.backgroundColor,m.sceneConfig),poster:m.poster??t.poster??e.poster,onReveal:()=>C(!0)});if(i==="side-by-side")return Ke("div",{className:"ri-compare ri-compare--sideBySide",children:[z.map((R,P)=>Ke("div",{className:"ri-compare__pane",children:[ie(he,{...R}),ie("span",{className:"ri-compare__label",children:F[P]})]},P)),Q]});let Y=`${q*100}%`;return Ke("div",{ref:ce,className:"ri-compare ri-compare--slider",style:{"--ri-compare-split":Y},children:[ie("div",{className:"ri-compare__layer",children:ie(he,{...z[0]})}),ie("div",{className:"ri-compare__layer ri-compare__layer--after",children:ie(he,{...z[1]})}),Q,ie(ft,{split:q,onSplitChange:X,labels:[F[0],F[1]],containerRef:ce})]})}import{useCallback as Ae,useRef as jt}from"react";import{useCallback as H,useMemo as mt,useState as Sn}from"react";var bt={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 wt(e){if(e)return Object.fromEntries(Object.entries(e).map(([t,i])=>[t,i&&typeof i=="object"?{...i}:i]))}function On(e){return Object.fromEntries(Object.entries(e).filter(([,t])=>t.visible===!1).map(([t])=>[t,!0]))}function Ge(e){let[t,i]=Sn(e),s=H((a,r)=>{i(c=>r===void 0?pe(c,a):pe(c,a,r))},[]),g=H((a,r)=>s(a,He(r)),[s]),y=H((a,r)=>g(a,{baseColor:r}),[g]),l=H((a,r,c="baseColor")=>{let u=bt[c],w=typeof r=="string"?{path:r}:r;s(a,{style:{material:{[u]:w}}})},[s]),A=H((a,r="baseColor")=>{let c=bt[r];s(a,{style:{material:{[c]:void 0}}})},[s]),B=H((a,r)=>{i(c=>{let u=ee(c,a);if(!u)return c;let w=wt(c[u]?.style?.material),L=le(c,r);if(L.length===0)return c;let $=c;for(let n of L){let o=c[n];o&&($===c&&($={...c}),$[n]={...o,style:{...o.style,material:wt(w)}})}return $})},[]),O=H(a=>s(a,{style:{material:void 0}}),[s]),v=H((a,r)=>s(a,{transform:r}),[s]),m=H(a=>s(a,{transform:void 0}),[s]),k=H((a,r)=>s(a,{metadata:r}),[s]),E=H((a,r)=>{i(c=>{let u=c;for(let w of le(c,a)){let L=c[w],$=r(L.decals??[]);u===c&&(u={...c}),u[w]={...L,decals:$.length>0?$:void 0}}return u})},[]),C=H((a,r)=>{let c=r.id??`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;return E(a,u=>[...u.filter(w=>w.id!==c),{...r,id:c}]),c},[E]),h=H((a,r,c)=>E(a,u=>u.map(w=>w.id===r?{...w,...c}:w)),[E]),b=H((a,r)=>E(a,c=>c.filter(u=>u.id!==r)),[E]),f=H(a=>Le(t,a),[t]),S=H(a=>le(t,a).map(r=>t[r]?.id??r),[t]),x=H(a=>{let r=ee(t,a);return r?t[r]?.style?.material??null:null},[t]),j=H(a=>s(a,{visible:!1}),[s]),q=H(a=>s(a,{visible:!0}),[s]),X=H(a=>{i(r=>{let c=le(r,a).reduce((u,w)=>{let L=r[w];return L&&u.push({ids:w,patch:{visible:L.visible===!1}}),u},[]);return pe(r,c)})},[i]),_=H(()=>{i(a=>pe(a,Object.keys(a),{visible:!0}))},[i]),V=mt(()=>On(t),[t]),J=mt(()=>Object.keys(V).map(a=>t[a]?.id??a),[V,t]),N=H(a=>{let r=ee(t,a);return r?t[r]?.visible===!1:!1},[t]);return{objectBindings:t,setObjectBindings:i,updateObjectBindings:s,setMaterial:g,setBaseColor:y,setTexture:l,clearTexture:A,copyMaterial:B,resetMaterial:O,getMaterial:x,setTransform:v,resetTransform:m,updateMetadata:k,addDecal:C,updateDecal:h,removeDecal:b,selectObjectBindings:f,selectObjectBindingIds:S,hiddenObjects:V,hiddenObjectIds:J,hideObject:j,showObject:q,toggleObjectVisibility:X,isObjectHidden:N,clearHiddenObjects:_}}import{useCallback as te,useMemo as jn,useRef as Bn,useState as vn}from"react";function $e(e){let t=Bn(null),[i,s]=vn(()=>{let f=typeof e=="function"?e():e;return t.current=f,f}),g=te(f=>{s(S=>{let x=typeof f=="function"?f(S):f;return _e(S,x)})},[]),y=te(()=>{let f=t.current;f&&s(f)},[]),l=te((f,S)=>{g(x=>({lighting:{lights:x.lighting.lights.map(j=>j.id===f?{...j,...S}:j)}}))},[g]),A=te(f=>{g(S=>S.lighting.lights.some(x=>x.id===f.id)?{}:{lighting:{lights:[...S.lighting.lights,Ne(f)]}})},[g]),B=te(f=>{g(S=>({lighting:{lights:S.lighting.lights.filter(x=>x.id!==f)}}))},[g]),O=te((f,S)=>l(f,{intensity:S}),[l]),v=te((f,S)=>l(f,{color:S}),[l]),m=te(f=>l(f,{visible:!0}),[l]),k=te(f=>l(f,{visible:!1}),[l]),E=te(f=>{g(S=>({lighting:{lights:S.lighting.lights.map(x=>x.id===f?{...x,visible:!x.visible}:x)}}))},[g]),C=te((f,S)=>l(f,{attachment:S,attachedToCamera:!1}),[l]),h=te(f=>l(f,{attachment:void 0}),[l]),b=jn(()=>({items:i.lighting.lights,get:f=>i.lighting.lights.find(S=>S.id===f),add:A,update:l,remove:B,setIntensity:O,setColor:v,show:m,hide:k,toggle:E,attach:C,detach:h}),[i.lighting.lights,A,l,B,O,v,m,k,E,C,h]);return{sceneConfig:i,setSceneConfig:s,updateSceneConfig:g,resetSceneConfig:y,lights:b}}import{useCallback as ze}from"react";function We({bindings:e,scene:t,camera:i,animations:s,isolation:g,onAction:y}){let{objectBindings:l,updateObjectBindings:A,showObject:B,hideObject:O,toggleObjectVisibility:v}=e,m=t?.updateSceneConfig,k=i?.focusObject,E=i?.fitScene,C=i?.resetView,h=i?.setCameraTarget,b=i?.setCameraState,f=s?.play,S=s?.pause,x=s?.stop,j=s?.setSpeed,q=s?.seek,X=g?.handleIsolationChange,_=ze(N=>{let a=ee(l,N);return a?l[a]?.actions??[]:[]},[l]),V=ze(async N=>{for(let a of N.action.effects??[]){if("objectBindings"in a){A(a.target,a.objectBindings);continue}if("sceneConfig"in a){m?.(a.sceneConfig);continue}if("isolation"in a){X?.(a.isolation);continue}if("visibility"in a){a.visibility==="show"?B(a.target):a.visibility==="hide"?O(a.target):v(a.target);continue}if("camera"in a){let c=a.camera;c.type==="focus-object"?await k?.(c.objectId??N.objectId):c.type==="fit-scene"?await E?.():c.type==="reset"?await C?.():c.type==="set-target"?await h?.(c.target,c.transition??!0):await b?.(c.state,c.transition??!0);continue}let r=a.animation;if(r.type==="play"){let{type:c,clip:u,...w}=r;f?.(u,w)}else r.type==="pause"?S?.(r.clip):r.type==="stop"?x?.(r.clip):r.type==="set-speed"?j?.(r.speed,r.clip):q?.(r.time,r.clip)}await y?.(N)},[E,k,O,y,S,f,C,q,j,b,h,X,B,x,v,A,m]),J=ze(async(N,a)=>{let r=ee(l,N);if(!r)return null;let c=l[r],u=c?.actions?.find(L=>L.id===a);if(!c||!u)return null;let w={objectId:r,action:u,binding:c};return await V(w),w},[V,l]);return{getActionsForObject:_,handleAction:V,runAction:J}}import{useCallback as Ve,useRef as yt}from"react";function Mn(e){return typeof e=="function"?e:e?.handleViewerReady??null}function Ye(...e){let t=yt(null),i=yt(e);i.current=e;let s=Ve(B=>{t.current=B;let O=new Set;for(let v of i.current){let m=Mn(v);m&&!O.has(m)&&(O.add(m),m(B))}},[]),g=Ve(()=>t.current,[]),y=Ve(B=>{let O=t.current;return O?O.captureImage(B):Promise.reject(new Error("ModelViewer is not ready yet."))},[]),l=Ve(()=>{let B=t.current;return B?(B.invalidate(),!0):!1},[]),A=Ve(B=>{let O=t.current;return O?O.captureVideo(B):Promise.reject(new Error("ModelViewer is not ready yet."))},[]);return{handleViewerReady:s,getViewer:g,captureImage:y,captureVideo:A,invalidate:l}}import{useCallback as U,useEffect as Rn,useRef as se}from"react";import{Material as xn,PointLight as An,Vector3 as Pn}from"three";var Qe=["emissiveIntensity","opacity","metalness","roughness","transmission","clearcoat","clearcoatRoughness","ior","thickness"],ve=1;function Me(e){return typeof e=="string"?[e]:e}function Re(e,t=0,i=1){return Math.min(i,Math.max(t,e))}function Xe(e,t){return e+Math.random()*(t-e)}function ht([e,t],i){return e+(t-e)*i}function Je([e,t],i){return[e[0]+(t[0]-e[0])*i,e[1]+(t[1]-e[1])*i,e[2]+(t[2]-e[2])*i]}function Vt(e,t){let i=Re(e);switch(t){case"ease-in":return i*i;case"ease-out":return 1-(1-i)*(1-i);case"ease-in-out":return i<.5?2*i*i:1-Math.pow(-2*i+2,2)/2;default:return i}}function En(e){let t=e.material;return t?(Array.isArray(t)?t:[t]).filter(i=>i instanceof xn):[]}function Tn(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 i of Qe){let s=e[i];typeof s=="number"&&(t[i]=s)}return t}function Ct(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 i of Qe){let s=t[i];s!==void 0&&typeof e[i]=="number"&&(e[i]=s)}t.transparent!==void 0&&(e.transparent=t.transparent),e.needsUpdate=!0}function In(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 Ln(e,t){if(t.position&&e.position.set(...t.position),t.rotation&&e.rotation.set(...t.rotation),t.scale!==void 0){let i=typeof t.scale=="number"?[t.scale,t.scale,t.scale]:t.scale;e.scale.set(...i)}t.visible!==void 0&&(e.visible=t.visible),e.updateMatrix(),e.updateMatrixWorld(!0)}function Ze(e={}){let t=se(e);t.current=e;let i=se(null),s=se(null),g=se(null),y=se(new Map),l=se(new Map),A=se(new Map),B=se(new Map),O=U(n=>{let o=i.current;if(!o)return null;let p=ee(o.objectBindings,n);return o.raw.nodes[n]??(p?o.raw.nodes[p]:null)??(o.raw.scene?ot(o.raw.scene,n):null)??null},[]),v=U(n=>{let o=i.current;return o?typeof n=="object"&&!Array.isArray(n)?le(o.objectBindings,n):Me(n).map(p=>ee(o.objectBindings,p)??p):typeof n=="string"?[n]:Array.isArray(n)?n:[]},[]),m=U(()=>{i.current?.invalidate()},[]),k=U((n,o)=>{let p=!1;for(let d of v(n)){let M=O(d);if(M)for(let I of En(M))A.current.has(I)||A.current.set(I,Tn(I)),Ct(I,o),p=!0}return p},[O,v]),E=U((n,o)=>{let p=k(n,o);return p&&m(),p},[m,k]),C=U((n,o)=>{let p=!1;for(let d of v(n)){let M=O(d);M&&(B.current.has(M)||B.current.set(M,In(M)),Ln(M,o),p=!0)}return p},[O,v]),h=U((n,o)=>{let p=C(n,o);return p&&m(),p},[m,C]),b=U(n=>{let o=O(n);if(!o)return null;o.updateWorldMatrix(!0,!1);let p=o.getWorldPosition(new Pn);return[p.x,p.y,p.z]},[O]),f=U(n=>{let o=l.current.get(n);return o?(o.light.removeFromParent(),o.light.dispose(),l.current.delete(n),m(),!0):!1},[m]),S=U(n=>{let o=O(n.target);if(!o)return!1;let p=l.current.get(n.id),d=p?.light??new An;return p&&p.target!==n.target&&d.removeFromParent(),d.name=`react-immersive-runtime-light:${n.id}`,d.color.set(n.color??"#ffffff"),d.intensity=n.intensity??1,d.distance=n.distance??0,d.decay=n.decay??2,d.castShadow=n.castShadow??!1,d.position.set(...n.offset??[0,0,0]),d.parent!==o&&o.add(d),l.current.set(n.id,{light:d,target:n.target}),m(),!0},[m,O]),x=U((n,o)=>{let p=l.current.get(n);if(!p)return!1;if(o.target&&o.target!==p.target){let d=O(o.target);if(!d)return!1;p.light.removeFromParent(),d.add(p.light),p.target=o.target}return o.color!==void 0&&p.light.color.set(o.color),o.intensity!==void 0&&(p.light.intensity=o.intensity),o.distance!==void 0&&(p.light.distance=o.distance),o.decay!==void 0&&(p.light.decay=o.decay),o.offset!==void 0&&p.light.position.set(...o.offset),o.castShadow!==void 0&&(p.light.castShadow=o.castShadow),m(),!0},[m,O]),j=U((n,o)=>{let p=d=>o[d%o.length]??0;for(let d of n.materials??[])v(d.targets).forEach((M,I)=>{let T=p(I),D={};for(let z of Qe){let F=d.values[z];F&&(D[z]=ht(F,T))}k(M,D)});for(let d of n.transforms??[])v(d.targets).forEach((M,I)=>{let T=p(I),D={};d.values.position&&(D.position=Je(d.values.position,T)),d.values.rotation&&(D.rotation=Je(d.values.rotation,T)),d.values.scale&&(D.scale=Je(d.values.scale,T)),C(M,D)});for(let d of n.lights??[])Me(d.lights).forEach((M,I)=>{let T=l.current.get(M);T&&(T.light.intensity=ht(d.intensity,p(I)))})},[v,k,C]),q=se(()=>{}),X=se(()=>{});X.current=n=>{g.current=null;let o=!1;for(let[p,d]of y.current){d.startedAt===null&&(d.startedAt=n);let M=d.lastFrameAt??n;d.lastFrameAt=n;let I=d.override&&d.override.until>n?d.override.level:null;d.override&&I===null&&(d.override=null);let T=d.update(n,n-d.startedAt,Math.min(100,n-M),I);o=!0,T||(y.current.delete(p),d.onComplete?.())}o&&m(),y.current.size>0&&q.current()},q.current=()=>{g.current!==null||typeof requestAnimationFrame>"u"||(g.current=requestAnimationFrame(n=>X.current(n)))};let _=U(n=>(y.current.set(n.id,n),q.current(),n.id),[]),V=U((n,o={})=>{let p=o.id??`transition-${ve++}`,d=Math.max(1,o.duration??400),M=o.easing??"ease-in-out";return _({id:p,startedAt:null,lastFrameAt:null,override:null,onComplete:o.onComplete,update:(I,T,D,z)=>{let F=z??Vt(T/d,M);return j(n,[F]),T<d}})},[j,_]),J=U((n,o={})=>{let p=o.id??`pulse-${ve++}`,d=Math.max(1,o.duration??1e3),M=o.minLevel??0,I=o.maxLevel??1,T=o.repeat??1/0,D=o.synchronized??!0,z=Math.max(1,...[...n.materials??[],...n.transforms??[]].map(F=>v(F.targets).length),...(n.lights??[]).map(F=>Me(F.lights).length));return _({id:p,startedAt:null,lastFrameAt:null,override:null,onComplete:o.onComplete,update:(F,ce,ue,Q)=>{let Y=ce/d,R=Array.from({length:D?1:z},(P,W)=>{if(Q!==null)return Q;let K=Y+(D?0:W/z),G=.5-Math.cos(K%1*Math.PI*2)/2;return M+(I-M)*G});return j(n,R),T===1/0||Y<T}})},[j,_,v]),N=U((n,o={})=>{let p=o.id??`timeline-${ve++}`,d=o.repeat??1,M=n.map(T=>({...T,duration:Math.max(1,T.duration),hold:Math.max(0,T.hold??0)})),I=Math.max(1,M.reduce((T,D)=>T+D.duration+D.hold,0));return _({id:p,startedAt:null,lastFrameAt:null,override:null,onComplete:o.onComplete,update:(T,D,z,F)=>{if(M.length===0||d<=0)return!1;let ce=D/I;if(d!==1/0&&ce>=d){for(let Y of M)j(Y.channels,[1]);return!1}let ue=D%I,Q=0;for(let Y of M){let R=Q+Y.duration,P=R+Y.hold;if(ue>=R){j(Y.channels,[F??1]),Q=P;continue}if(ue>=Q){let W=F??Vt((ue-Q)/Y.duration,Y.easing??"ease-in-out");j(Y.channels,[W]);break}}return!0}})},[j,_]),a=U((n,o={})=>{let p=o.id??`flicker-${ve++}`,d=o.synchronized??!0,M=o.minLevel??.15,I=o.maxLevel??1,T=o.interval??[45,160],D=typeof T=="number"?[T,T]:T,z=[Math.max(1,Math.min(...D)),Math.max(1,Math.max(...D))],F=Re(o.response??.7,.01,1),ce=Re(o.blackoutChance??.08),ue=Re(o.flashChance??.12),Q=o.flashLevel??1.15,Y=Math.max(1,...[...n.materials??[],...n.transforms??[]].map(G=>v(G.targets).length),...(n.lights??[]).map(G=>Me(G.lights).length)),R=d?1:Y,P=Array.from({length:R},()=>M),W=Array.from({length:R},()=>M),K=Array.from({length:R},()=>0);return _({id:p,startedAt:null,lastFrameAt:null,override:null,onComplete:o.onComplete,update:(G,we,oe,Ce)=>{for(let Z=0;Z<R;Z+=1){if(Ce!==null)W[Z]=Ce;else if(G>=K[Z]){let it=Math.random();W[Z]=it<ce?Xe(0,Math.min(.04,M)):it<ce+ue?Q:Xe(M,I),K[Z]=G+Xe(...z)}let xt=1-Math.pow(1-F,Math.max(1,oe)/16.67);P[Z]+=(W[Z]-P[Z])*xt}return j(n,P),o.duration===void 0||we<o.duration}})},[j,_,v]),r=U((n,o,p)=>{let d=y.current.get(n);if(!d)return!1;let M=typeof performance>"u"?Date.now():performance.now();return d.override={level:o,until:M+Math.max(0,p)},q.current(),!0},[]),c=U(n=>y.current.delete(n),[]),u=U(()=>{y.current.clear(),g.current!==null&&typeof cancelAnimationFrame<"u"&&(cancelAnimationFrame(g.current),g.current=null)},[]),w=U(()=>{for(let[n,o]of A.current)Ct(n,o);A.current.clear();for(let[n,o]of B.current)n.position.set(...o.position),n.rotation.set(...o.rotation),n.scale.set(...o.scale),n.visible=o.visible,n.updateMatrix(),n.updateMatrixWorld(!0);B.current.clear();for(let n of l.current.values())n.light.removeFromParent(),n.light.dispose();l.current.clear(),m()},[m]),L=U(()=>{u(),w()},[w,u]),$=U(n=>{s.current&&s.current!==n.raw.scene&&w(),i.current=n,s.current=n.raw.scene,t.current.onViewerReady?.(n)},[w]);return Rn(()=>()=>{L(),i.current=null,s.current=null},[L]),{handleViewerReady:$,setMaterial:E,setTransform:h,getWorldPosition:b,addPointLight:S,updatePointLight:x,removePointLight:f,transition:V,timeline:N,pulse:J,flicker:a,overrideEffect:r,stopEffect:c,stopAllEffects:u,resetRuntime:L}}import{useCallback as kn,useState as Un}from"react";function et(){let[e,t]=Un(null),i=kn(s=>{t(s)},[t]);return{hoveredObjectBinding:e,handleHoveredObject:i}}import{useCallback as St,useState as Dn}from"react";function tt(e=null){let[t,i]=Dn(e),s=St((y,l)=>i({...l,target:y}),[]),g=St(()=>i(null),[]);return{isolation:t,isolate:s,clearIsolation:g,handleIsolationChange:i}}import{useCallback as xe,useState as de}from"react";function nt(){let[e,t]=de(!0),[i,s]=de(!1),[g,y]=de(null),[l,A]=de(null),[B,O]=de(0),[v,m]=de([]),[k,E]=de([]),[C,h]=de([]),b=xe(j=>{A(j.bounds),O(j.objectCount),m(j.materialVariants),E(j.materialVariantGroups),y(null),t(!1),s(!0)},[]),f=xe(j=>h(j),[]),S=xe(j=>{y(j),A(null),O(0),m([]),E([]),h([]),t(!1),s(!1)},[]),x=xe(()=>{t(!0),s(!1),y(null),A(null),O(0),m([]),E([]),h([])},[]);return{isLoading:e,isReady:i,error:g,bounds:l,objectCount:B,materialVariants:v,materialVariantGroups:k,objects:C,handleModelLoaded:b,handleObjectCatalog:f,handleLoadError:S,resetModelState:x}}import{useCallback as Ot,useState as Hn}from"react";function rt(e=null){let[t,i]=Hn(e),s=Ot(y=>{i(y)},[i]),g=Ot(()=>{i(null)},[]);return{selectedObjectBinding:t,setSelectedObjectBinding:i,handleObjectSelect:s,clearSelection:g}}var _n={};function Nn(e={}){let t=jt(e);t.current=e;let i=jt(e.bindings===void 0||e.bindings==="auto"),s=Ge(()=>{let V=t.current.bindings;return V===void 0||V==="auto"?_n:typeof V=="function"?V():V}),g=$e(()=>{let V=t.current.sceneConfig;return V===void 0?Oe:typeof V=="function"?V():V}),y=rt(),l=et(),A=Ee(e.camera),B=nt(),O=qe(),v=tt(),m=Ze(),k=Ye(A,m),E=We({bindings:s,scene:g,camera:A,animations:O,isolation:v,onAction:e.onAction}),{setObjectBindings:C}=s,{handleObjectCatalog:h}=B,b=Ae(V=>{h(V),i.current&&C(J=>{let N=dt(V.map(a=>a.name));for(let a of Object.keys(N))J[a]&&(N[a]=J[a]);return N})},[h,C]),{handleObjectSelect:f}=y,S=Ae(V=>{f(V),t.current.onObjectSelect?.(V)},[f]),{handleHoveredObject:x}=l,j=Ae(V=>{x(V),t.current.onObjectHover?.(V)},[x]),{handleLoadError:q}=B,X=Ae(V=>{q(V),t.current.onLoadError?.(V)},[q]),_=e.sceneConfig!==void 0||g.sceneConfig!==Oe;return{props:{objectBindings:s.objectBindings,onObjectBindingsChange:C,selectedObject:y.selectedObjectBinding,onObjectSelect:S,onObjectHover:j,onCameraChange:A.handleCameraChange,onViewerReady:k.handleViewerReady,onModelLoaded:B.handleModelLoaded,onLoadError:X,onObjectCatalog:b,onAnimationsReady:O.handleAnimationsReady,onAction:E.handleAction,onSceneConfigChange:g.setSceneConfig,isolation:v.isolation,onIsolationChange:v.handleIsolationChange,..._?{sceneConfig:g.sceneConfig}:{}},bindings:s,selection:y,hover:l,camera:A,model:B,animations:O,actions:E,scene:g,isolation:v,effects:m,connection:k}}import{useMemo as qn}from"react";function Fn(e,t){return qn(()=>{if(!t)return null;let i=e[t];return i||(Object.values(e).find(s=>s.id===t||s.modelObjectId===t)??null)},[e,t])}import{useMemo as Kn}from"react";function Gn(e){return Kn(()=>Object.values(e).map(t=>t.modelObjectId),[e])}import{useCallback as ne,useEffect as Pe,useRef as ae,useState as $n}from"react";function zn(e,t){if(!e.objectBindings&&(!!e.hidden?.length||!!e.selected)&&Object.keys(t).length===0)return null;let s={};if(e.objectBindings)s.bindings=e.objectBindings;else if(e.hidden){let g=new Set(e.hidden);s.bindings=Object.fromEntries(Object.entries(t).map(([y,l])=>[y,{...l,visible:!g.has(l.id)}]))}if(e.selected!==void 0){let g=e.objectBindings??t,y=e.selected?ee(g,e.selected):null;s.selected=y?g[y]:null}return s}function Bt(e){return JSON.stringify(e&&{modelUrl:e.modelUrl,activeModelId:e.activeModelId,tilesetUrl:e.tilesetUrl,mergeModels:e.mergeModels,models:e.models?.map(({id:t,url:i,mergeModels:s})=>({id:t,url:i,mergeModels:s}))})}function Wn(e){let t=ae(e);t.current=e;let i=e.paramKey??"view",s=`${i}Id`,[g,y]=$n(!1),l=ae(null),A=ae(null),B=ae(null),O=ae(null),v=ae(null),m=ae(null),k=ae(null),E=ae(null),C=ae(!0),h=ne(r=>{let c=r instanceof Error?r:new Error(String(r));t.current.onError?t.current.onError(c):k.current!==c.message&&console.warn("[react-immersive]",c.message),k.current=c.message},[]),b=ne(()=>{v.current!==null&&clearTimeout(v.current),v.current=null},[]);Pe(()=>(C.current=!0,()=>{C.current=!1,b()}),[b]);let f=ne(()=>{let r=t.current,c=(r.mode??(r.configuration?"configuration":"view"))==="configuration";return{version:1,camera:r.cameraState??void 0,hidden:Object.values(r.objectBindings).filter(u=>u.visible===!1).map(u=>u.id),selected:r.selectedObjectBinding?.id??null,...c?{objectBindings:r.objectBindings,configuration:r.configuration}:{}}},[]),S=ne(()=>ye(f(),typeof window>"u"?void 0:window.location.href),[f]),x=ne(()=>Ie(f(),typeof window>"u"?void 0:window.location.href),[f]),j=ne((r,c,u=window.location.href)=>{let w=new URL(u),L=new URLSearchParams(w.hash.slice(1));if(L.delete(i),L.delete(s),L.set(c?s:i,r),w.hash=L.toString(),!c&&w.href.length>(t.current.maxUrlLength??65536))throw new Error("Viewer configuration is too large for an inline link. Save JSON instead, or configure storage for createShareUrl(). Uploaded images can make links large.");return w.href},[i,s]),q=ne(()=>j(fe(S()),!1),[S,j]),X=ne(async()=>{let r=window.location.href,c=t.current.storage,u=await x();if(!c)return j(fe(u),!1,r);let w=await c.save(u);if(typeof w!="string"||!w.trim()||w.length>2048)throw new Error("Viewer state storage returned an invalid id.");return j(w,!0,r)},[x,j]),_=ne(()=>{if(b(),l.current||m.current)return;let r=q();window.history.replaceState(null,"",r),O.current=`inline:${new URL(r).hash}`},[b,q]),V=ne(async()=>{let r=l.current;if(!r||A.current||!C.current)return!1;A.current=r,b();try{let c=t.current,u=r.state;if(u.configuration&&!r.configurationApplied){if(!c.onConfigurationChange)throw new Error("Restoring a full viewer configuration requires onConfigurationChange.");return r.configurationApplied=!0,c.onConfigurationChange(u.configuration),!1}if(u.configuration&&Bt(c.configuration)!==Bt(u.configuration)||c.isReady===!1)return!1;if(u.camera&&!r.cameraApplied){if(!await c.setCameraState(u.camera,!1)||l.current!==r||!C.current)return!1;r.cameraApplied=!0}c=t.current;let w=zn(u,c.objectBindings);return!w||l.current!==r?!1:(w.bindings&&c.onObjectBindingsChange(w.bindings),w.selected!==void 0&&c.setSelectedObjectBinding(w.selected),l.current=null,B.current=r.key,y(!0),!0)}catch(c){throw l.current===r&&(l.current=null),y(!1),c}finally{A.current=null,l.current&&l.current!==r&&C.current&&V().catch(h)}},[b,h]),J=ne(async r=>{let c=ye(r,window.location.href);b(),E.current=null,m.current=null;let u=new URLSearchParams(window.location.hash.slice(1));return O.current=u.has(i)?`inline:${window.location.hash}`:u.has(s)?`stored:${s}:${u.get(s)}`:null,B.current=null,l.current={key:`manual:${fe(c)}`,origin:"manual",state:c,configurationApplied:!1,cameraApplied:!1},y(!1),V()},[V,b,i,s]),N=ne(async()=>{let r=new URLSearchParams(window.location.hash.slice(1)),c=r.get(i),u=r.get(s),w=c!==null?`inline:${window.location.hash}`:u!==null?`stored:${s}:${u}`:null;if(!w)return E.current=null,m.current=null,l.current?.origin==="manual"?V():(l.current=null,B.current=null,y(!0),!1);if(w===O.current||w===B.current)return l.current?.origin==="manual"?V():!1;if(l.current?.key===w)return V();b(),y(!1),E.current=w,l.current=null;let L=c;if(c===null){let n=t.current.storage;if(!n)throw new Error("This shared link requires a viewer state storage adapter.");(!m.current||m.current.key!==w)&&(m.current={key:w,promise:n.load(u)});let o=m.current;try{L=await o.promise}finally{m.current===o&&(m.current=null)}if(E.current!==w||!C.current)return!1;let p=l.current;if(p?.key===w||B.current===w)return p?V():!1}let $;try{$=ye(L,window.location.href)}catch(n){throw n}return l.current={key:w,origin:"url",state:$,configurationApplied:!1,cameraApplied:!1},V()},[V,b,s,i]);Pe(()=>{l.current&&V().catch(h)}),Pe(()=>{let r=()=>{N().catch(h)};return window.addEventListener("hashchange",r),()=>window.removeEventListener("hashchange",r)},[N,h]);let a=null;if(e.autoSync!==!1&&g&&!l.current&&!m.current)try{a=fe(S())}catch{}return Pe(()=>{if(e.autoSync===!1||!g||l.current||m.current){b();return}if(a===null){try{S()}catch(r){h(r)}return}return v.current=setTimeout(()=>{v.current=null;try{_()}catch(r){h(r)}},Math.max(0,e.debounceMs??400)),b},[a,e.autoSync,e.debounceMs,g,b,S,_,h]),{getState:S,getStateAsync:x,restoreState:J,getShareUrl:q,createShareUrl:X,syncUrl:_,restoreFromUrl:N}}import{useCallback as ge,useState as vt}from"react";var Yn={};function Mt(){return`asset-${globalThis.crypto.randomUUID()}`}function Xn(e){let[t,i]=vt(e),[s,g]=vt(()=>e[0]?re(e[0]):""),y=t.find(C=>re(C)===s)??t[0],l=y?re(y):"",A=ge(C=>{i(h=>h.map(b=>re(b)===l?{...b,objectBindings:C}:b))},[l]),B=ge(C=>{i(h=>h.map(b=>re(b)===l?{...b,sceneConfig:C}:b))},[l]),O=ge(C=>g(h=>{let b=t.find(f=>f.url===C);return b?re(b):h}),[t]),v=ge(C=>{let h={...C,id:C.id??Mt()};return i(b=>{if(b.some(f=>re(f)===h.id))throw new Error("Asset instance ID already exists.");return[...b,h]}),h.id},[]),m=ge(C=>{let h=t.find(j=>re(j)===C);if(!h)return null;let b=structuredClone(h);b.id=Mt(),b.sceneConfig?.measurements&&(b.sceneConfig.measurements.items=b.sceneConfig.measurements.items.map(j=>({...j,modelId:b.id}))),b.label=`${h.label??"Asset"} copy`;let[f,S,x]=h.transform?.position??[0,0,0];return b.transform={...b.transform,position:[f+1,S,x]},i(j=>[...j,b]),b.id},[t]),k=ge(C=>{i(h=>h.filter(b=>re(b)!==C))},[]),E=ge((C,h)=>{let b=Te(h);i(f=>f.map(S=>re(S)===C?{...S,transform:b}:S))},[]);return{modelUrl:y?.url??"",models:t,activeModelId:l,onModelChange:O,onActiveModelChange:g,objectBindings:Yn,onObjectBindingsChange:A,sceneConfig:y?.sceneConfig,onSceneConfigChange:B,addModel:v,duplicateModel:m,removeModel:k,updateModelTransform:E}}import{useCallback as be,useEffect as Jn,useState as Qn,useSyncExternalStore as Zn}from"react";var er={sequenceId:null,time:0,duration:0,status:"stopped",previewing:!1,ready:!1,issues:[]},tr=()=>()=>{},Rt=()=>er;function nr(){let[e,t]=Qn(null),i=Zn(e?.subscribe??tr,e?.getState??Rt,Rt);Jn(()=>()=>e?.stop(),[e]);let s=be(g=>t(g),[]);return{controls:e,playback:i,handleSequencesReady:s,play:be(g=>e?.play(g)??!1,[e]),pause:be(()=>e?.pause(),[e]),stop:be(()=>e?.stop(),[e]),seek:be(g=>e?.seek(g)??!1,[e]),select:be(g=>e?.select(g)??!1,[e])}}export{tn as ACTION_CATALOG,yn as AssetDiagnosticsPanel,pt as CompareViewer,Lt as DEFAULT_MODEL_VIEWER_LABELS,Oe as DEFAULT_SCENE_CONFIG,Se as DEFAULT_SECTION_CONFIG,pn as MATERIAL_BLENDING_MODES,fn as MATERIAL_SIDES,Yt as MAX_VIEWER_STATE_BYTES,_t as MEASUREMENT_UNITS,en as MODEL_VIEWER_PRESETS,he as ModelViewer,Pt as SEQUENCE_EASINGS,At as SEQUENCE_OBJECT_PROPERTIES,cn as applyIsolation,sn as applyStyleRules,un as buildBindingsFromNodes,qt as calibrateMeasurements,rn as chooseMaterialVariant,mn as collectObjectHierarchy,on as colorScaleValue,ke as compareViewerConfigurations,bn as copyBindingStyle,Xt as createARHandoffUrl,dn as createDefaultBinding,gn as defineObjectBindings,Qt as exportConfiguredUSDZ,nn as findCatalogAction,Ht as groundAsset,ln as inferType,Zt as inspectAsset,an as isolatedBindingKeys,He as material,Kt as measurementResult,Nt as measurementScale,Ft as measurementValue,zt as measurementsToCsv,Te as parseAssetTransform,Gt as parseMeasurements,kt as parseSectionConfig,Wt as parseSelectionSets,Et as parseSequences,ye as parseViewerState,wn as pasteBindingStyle,pe as patchBindings,_e as patchSceneConfig,Ie as prepareViewerState,Jt as readARHandoffUrl,Tt as sampleSequenceTrack,Ne as sceneLight,Ut as sectionSnapshot,le as selectBindingKeys,Le as selectBindings,$t as serializeMeasurements,fe as serializeViewerState,Dt as snapAssetToGrid,It as upsertSequenceKeyframe,Fn as useObjectBinding,Gn as useObjectBindingIds,Ge as useObjectBindings,$e as useSceneConfig,Wn as useShareableViewerState,Nn as useViewer,We as useViewerActions,qe as useViewerAnimations,Ee as useViewerCamera,Ye as useViewerConnection,Ze as useViewerEffects,et as useViewerHover,tt as useViewerIsolation,nt as useViewerModel,Xn as useViewerModels,rt as useViewerSelection,nr as useViewerSequences};
|