@liveroom-tech/react-immersive 6.2.2 → 6.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +23 -0
  2. package/dist/{SequencesTab-LTMJTB76.mjs → SequencesTab-JZEE5WAM.mjs} +1 -1
  3. package/dist/binding-builder.d.mts +3 -3
  4. package/dist/binding-builder.d.ts +3 -3
  5. package/dist/binding-builder.js +41 -41
  6. package/dist/binding-builder.mjs +1 -1
  7. package/dist/{chunk-NMRTI3NQ.mjs → chunk-3GA7JFNH.mjs} +1 -1
  8. package/dist/chunk-3I7PPFUV.mjs +1 -0
  9. package/dist/{chunk-IT2PUTJS.mjs → chunk-CHMFH4D4.mjs} +1 -1
  10. package/dist/{chunk-RSUXTWM6.mjs → chunk-CUDL77ZY.mjs} +1 -1
  11. package/dist/{chunk-XKJQC3N5.mjs → chunk-IEKGBS46.mjs} +1 -1
  12. package/dist/chunk-LU3BQ7WG.mjs +69 -0
  13. package/dist/chunk-QZNUWZG7.mjs +50 -0
  14. package/dist/{chunk-WU3SQZGD.mjs → chunk-TI2YXAHW.mjs} +2 -2
  15. package/dist/hosted.d.mts +3 -3
  16. package/dist/hosted.d.ts +3 -3
  17. package/dist/hosted.js +40 -40
  18. package/dist/hosted.mjs +1 -1
  19. package/dist/index.d.mts +8 -4
  20. package/dist/index.d.ts +8 -4
  21. package/dist/index.js +36 -36
  22. package/dist/index.mjs +1 -1
  23. package/dist/{modelFileResolver-Bq4pW9vc.d.mts → modelFileResolver-An1aQ0D3.d.mts} +3 -0
  24. package/dist/{modelFileResolver-Bq4pW9vc.d.ts → modelFileResolver-An1aQ0D3.d.ts} +3 -0
  25. package/dist/{modelViewerProps-BnrJO5DK.d.ts → modelViewerProps-BnVflYRA.d.mts} +21 -3
  26. package/dist/{modelViewerProps-wjBT4fks.d.mts → modelViewerProps-H_K454u_.d.ts} +21 -3
  27. package/dist/{publicProps-BZPMIRwj.d.ts → publicProps-AdNUI06n.d.ts} +1 -1
  28. package/dist/{publicProps-CW5X_HFh.d.mts → publicProps-BOQBJBA_.d.mts} +1 -1
  29. package/dist/simple-model-viewer.d.mts +6 -2
  30. package/dist/simple-model-viewer.d.ts +6 -2
  31. package/dist/simple-model-viewer.js +5 -5
  32. package/dist/simple-model-viewer.mjs +1 -1
  33. package/dist/utils.d.mts +4 -4
  34. package/dist/utils.d.ts +4 -4
  35. package/dist/utils.js +15 -15
  36. package/dist/utils.mjs +1 -1
  37. package/package.json +7 -5
  38. package/dist/chunk-2LGQKX6Z.mjs +0 -50
  39. package/dist/chunk-LEOHZ5HM.mjs +0 -69
  40. package/dist/chunk-UAZ6I25Y.mjs +0 -1
@@ -0,0 +1,69 @@
1
+ import{c as ob}from"./chunk-CUDL77ZY.mjs";import{c as wl,h as qr,i as Uh}from"./chunk-FGAJ2UT7.mjs";import{a as gh,b as xi,c as xd,d as hl,e as Ro,f as vl,g as Ah,i as Th,j as Lh,k as Da,l as br,m as yl}from"./chunk-SOAUR4DL.mjs";import{A as hh,B as vh,C as yh,D as xh,E as wh,F as Sh,G as Ch,H as Mh,I as Ph,J as kh,K as Ea,L as xl,M as _h,N as Bh,O as Vh,a as gi,b as Hg,c as Qs,d as gl,e as qb,f as Kb,g as Qb,j as gd,l as Wr,m as ih,n as ah,o as sh,p as lh,q as ch,r as uh,s as dh,t as ph,u as hd,v as mh,w as vd,x as fh,y as bh}from"./chunk-IEKGBS46.mjs";import{a as nb,b as oe}from"./chunk-3GA7JFNH.mjs";import{a as zh}from"./chunk-37YITTIK.mjs";import{a as eh,b as bd,c as bl,d as th,e as nh,f as rh,g as oh,h as Rh,l as Oh,m as Eh,n as Dh}from"./chunk-5C4H7SRF.mjs";import{a as rb,b as Pt}from"./chunk-3PLML3PO.mjs";import{$ as wb,B as ld,C as db,Ca as Fh,Da as Hh,Ea as Gh,F as ke,L as ll,M as pb,N as cl,O as mb,P as fb,Q as gb,R as bb,S as hb,T as ul,U as vb,V as dl,W as ka,X as yb,Y as cd,Z as pl,_ as xb,a as Hr,aa as Sb,b as Gr,c as Vg,d as Fg,e as Ur,f as Gg,fa as jb,g as id,ga as fl,h as ad,i as Ug,ia as pd,j as $g,ja as Nb,k as Wg,ka as Ib,l as Zs,la as zb,m as Qg,ma as md,n as Jg,na as Vb,o as Yg,oa as $b,pa as Wb,q as tb,qa as Xb,r as ub,ua as yd,xa as Nh,y as Pa,ya as Ih,z as sl}from"./chunk-QZNUWZG7.mjs";import{e as Js}from"./chunk-LX3GXQNU.mjs";import{d as Rb,e as ml,f as ko,g as Ab,h as Ob,i as dd,j as Eb,k as Db,l as Tb,o as Lb,q as _b,r as Bb,s as Ra}from"./chunk-7JCFNZJM.mjs";import{b as ol,c as eb,d as hi,e as Ma,i as il,l as ib,m as al,n as vi,o as ab,q as sb,r as lb,s as cb}from"./chunk-37QOMZW6.mjs";import{c as jh}from"./chunk-CCBFMNAU.mjs";import{a as Ys}from"./chunk-GV4ZRXL6.mjs";import{a as sd,b as Xg,c as qg,d as Kg,e as Ca,f as el,g as tl,h as nl}from"./chunk-7OWHW66D.mjs";import{a as Jb,b as Oa,c as fd,e as Yb,f as Zb}from"./chunk-KFLS7GI6.mjs";import{a as Cb,b as Mb,c as Pb,d as gr,g as kb,h as ud}from"./chunk-BNKTI3CY.mjs";import{a as Fb,d as pn,e as Aa,f as Hb,g as yi,h as Gb,p as Ub}from"./chunk-UCD76KQ6.mjs";import{a as Xr,b as wd}from"./chunk-TUYVYSN5.mjs";import{a as Qn,b as $r,c as rl,d as bi,e as Zg,g as fr}from"./chunk-RXZ4Q7CY.mjs";var $h={showObjectBindingDataPanel:!1,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!1,showAnnotationNavigation:!1,showMaterialVariants:!1},vM=Object.freeze({minimal:Object.freeze({...$h}),showcase:Object.freeze({...$h,autoRotate:!0}),configurator:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!1,showDownloadButton:!1,showResetButton:!0,showMaterialVariants:!0}),inspector:Object.freeze({showObjectBindingDataPanel:!0,showSceneObjectsPanel:!0,showDownloadButton:!0,showResetButton:!0,showViewGizmo:!0,showMeasureTools:!0,showUvCheckerButton:!0,showExplodeControls:!0,showSectionTools:!0,showIsolateControls:!0,enableKeyboardNavigation:!0})}),yM=["preset","ui","tools","controls","perf","tiles","xr","decoders"];function Wh(e){let t={};for(let n of Object.keys(e))e[n]!==void 0&&(t[n]=e[n]);return t}function xM({ui:e,tools:t,controls:n,perf:r,tiles:o,xr:i,decoders:s}){let l=e?.download,c=e?.mouseController,u=t?.measure,p=n?.autoRotate;return{showObjectBindingDataPanel:e?.objectPanel,showSceneObjectsPanel:e?.sceneObjects,showDownloadButton:l===void 0?void 0:l!==!1,downloadFilename:typeof l=="string"?l:void 0,showResetButton:e?.reset,showFullscreenButton:e?.fullscreen,showLoadingOverlay:e?.loadingOverlay,showViewGizmo:e?.viewGizmo,showMouseController:c===void 0?void 0:c!==!1,mouseControllerPosition:typeof c=="object"?c.position:void 0,mouseControllerOpacity:typeof c=="object"?c.opacity:void 0,showAnnotationNavigation:e?.annotationNavigation,showAnnotationOnHover:e?.annotationOnHover,showAnnotationFilters:e?.annotationFilters,highlightOnHover:e?.highlightOnHover,showMaterialVariants:e?.materialVariants,showObjectNavigator:e?.objectNavigator,showMeasureTools:u===void 0?void 0:u!==!1,measurementUnit:typeof u=="object"?u.unit:void 0,showUvCheckerButton:t?.uvChecker,showExplodeControls:t?.explode,showSectionTools:t?.section,showSequenceControls:t?.sequences,showIsolateControls:t?.isolate,texturePositioning:t?.texturePositioning,enableCameraControls:n?.enabled,enableKeyboardNavigation:n?.keyboard,reducedMotion:n?.reducedMotion,disableZoom:n?.zoom===void 0?void 0:!n.zoom,pageScroll:n?.pageScroll,zoomOnSelected:n?.zoomOnSelect,autoRotate:p===void 0?void 0:p!==!1,autoRotateSpeed:typeof p=="number"?p:void 0,refitOnResize:n?.refitOnResize,cameraLimits:n?.limits,moveSensitivity:n?.moveSensitivity,zoomSensitivity:n?.zoomSensitivity,renderMode:r?.renderMode,maxDpr:r?.maxDpr,performanceProfile:r?.profile,preserveDrawingBuffer:r?.preserveDrawingBuffer,webgpu:r?.webgpu,tilesetUrl:o?.url,tilesErrorTarget:o?.errorTarget,tilesCacheSize:o?.cacheSize,enableXR:i?.enabled,usdzUrl:i?.usdzUrl,arScaleMode:i?.scaleMode,mobileHandoffUrl:i?.mobileHandoffUrl,arHandoff:i?.arHandoff,dracoDecoderPath:s?.draco,ktx2TranscoderPath:s?.ktx2,meshopt:s?.meshopt}}function Xh(e){let t={...e};for(let n of yM)delete t[n];return{...e.preset?vM[e.preset]:void 0,...Wh(t),...Wh(xM(e))}}import{useCallback as wi,useEffect as Sl,useMemo as Sd,useRef as Si,useState as Ci}from"react";var qh=e=>e instanceof Error?e.message:String(e);function wM(e){if(!e||!Number.isSafeInteger(e.amountMinor)||e.amountMinor<0||!/^[A-Z]{3}$/.test(e.currency)||e.expiresAt!==void 0&&(!Number.isFinite(Date.parse(e.expiresAt))||Date.parse(e.expiresAt)<=Date.now()))throw new Error("The pricing service returned an invalid price.");return{amountMinor:e.amountMinor,currency:e.currency,...e.expiresAt?{expiresAt:e.expiresAt}:{},...e.label?{label:String(e.label)}:{}}}function SM(e,t){let n=new Set;if(!e||typeof e.available!="boolean"||e.message!==void 0&&typeof e.message!="string")throw new Error("The availability service returned invalid data.");if(e.options!==void 0){if(!Array.isArray(e.options))throw new Error("The availability service returned invalid data.");for(let r of e.options){let o=JSON.stringify([r?.groupId,r?.optionId]);if(!r||typeof r.available!="boolean"||r.reason!==void 0&&typeof r.reason!="string"||n.has(o)||!t.groups.some(i=>i.id===r.groupId&&i.options.some(s=>s.id===r.optionId)))throw new Error("The availability service returned invalid data.");n.add(o)}}return{available:e.available,...e.message!==void 0?{message:e.message}:{},...e.options?{options:e.options.map(({groupId:r,optionId:o,available:i,reason:s})=>({groupId:r,optionId:o,available:i,...s!==void 0?{reason:s}:{}}))}:{}}}function Kh(e){let t=JSON.stringify(e.product),n=Sd(()=>Rb(e.product),[t]),r=JSON.stringify([n.id,n.revision]),[o,i]=Ci(()=>({productIdentity:r,selections:e.initialSelections??ml(n)})),s=e.selections??(o.productIdentity===r?o.selections:ml(n)),[l,c]=Ci(e.initialQuantity??1),u=JSON.stringify(s),p=Sd(()=>ko(n,s,l),[n,u,l]),m=e.adapter,a=m?.key??"",f=`${t}
2
+ ${p.key}
3
+ ${a}`;if(m&&(typeof m.key!="string"||!m.key.trim()))throw new Error("A commerce adapter needs a stable key identifying its backend/pricing context.");let[d,b]=Ci(0),[h,w]=Ci(null),[v,S]=Ci(null),[y,R]=Ci({identity:f,pending:null,result:null,error:null}),x=Si(!1),M=Si(!0),E=Si(0),P=Si(null),T=Si(null),O=Si({options:e,product:n,base:p,identity:f,commerce:h,adapter:m,optionStates:[]}),k=e.selections!==void 0&&!e.onSelectionsChange,D=h?.identity===f&&h.adapterKey===a?h:null,B=D?.configuration??p,H=Sd(()=>Lb(n,p.selections,D?.availability??void 0,l),[n,p,D?.availability,l]);O.current={options:e,product:n,base:p,identity:f,commerce:h,adapter:m,optionStates:H},Sl(()=>{R({identity:f,pending:null,result:null,error:null}),S(null)},[f]);let V=wi(()=>{x.current=!1,R(Z=>({...Z,error:null,result:null})),b(Z=>Z+1)},[]);Sl(()=>{let Z=new AbortController,Y=++E.current;return x.current=!1,p.valid?(w({identity:f,adapterKey:a,status:"loading",configuration:p,price:null,availability:null,error:null}),(async()=>{try{let te=structuredClone(p),U={signal:Z.signal};if(m?.resolveSku){let ne=await m.resolveSku(structuredClone(te),U);if(ne!==null&&(typeof ne!="string"||!ne.trim()))throw new Error("The SKU service returned an invalid SKU.");te.sku=ne}if(Z.signal.aborted)return;let[N,K]=await Promise.all([m?.getPrice?Promise.resolve().then(()=>m.getPrice(structuredClone(te),U)).then(wM):Promise.resolve(null),m?.getAvailability?Promise.resolve().then(()=>m.getAvailability(structuredClone(te),U)).then(ne=>SM(ne,n)):Promise.resolve(null)]);if(Z.signal.aborted||Y!==E.current||O.current.identity!==f||O.current.adapter?.key!==m?.key)return;x.current=!0,w({identity:f,adapterKey:a,status:"ready",configuration:te,price:N??null,availability:K??null,error:null})}catch(te){if(Z.signal.aborted||Y!==E.current||O.current.identity!==f||O.current.adapter?.key!==m?.key)return;w({identity:f,adapterKey:a,status:"error",configuration:p,price:null,availability:null,error:qh(te)})}})(),()=>Z.abort()):(w(null),()=>Z.abort())},[f,a,d]),Sl(()=>{let Z=D?.price?.expiresAt;if(!Z)return;let Y=Date.parse(Z)-Date.now(),te,U=()=>{let N=Date.parse(Z)-Date.now();if(N>0){te=setTimeout(U,Math.min(N,2147483647));return}x.current=!1,w(K=>K?.identity===f?{...K,status:"error",error:"The price expired. Refresh it before continuing."}:K)};return te=setTimeout(U,Math.min(Math.max(Y,0),2147483647)),()=>clearTimeout(te)},[D?.price?.expiresAt,f]),Sl(()=>(M.current=!0,()=>{M.current=!1,x.current=!1,E.current++,P.current?.controller.abort()}),[]);let W=wi(Z=>{let Y=O.current;if(Y.options.selections!==void 0&&!Y.options.onSelectionsChange)throw new Error("Selections are controlled; supply onSelectionsChange to edit them.");if(P.current)throw new Error("Wait for the current cart or quote request to finish.");let te=ko(Y.product,Z,Y.base.quantity);if(te.issues.some(U=>U.code==="unknown-group"||U.code==="unknown-option"))throw new Error("Selections reference unknown product options.");if(te.key===Y.base.key){S(null);return}x.current=!1,S(null),b(U=>U+1),Y.options.onSelectionsChange&&Y.options.onSelectionsChange(structuredClone(te.selections)),Y.options.selections===void 0&&i({productIdentity:JSON.stringify([Y.product.id,Y.product.revision]),selections:te.selections})},[]),z=wi((Z,Y)=>{let te=O.current,U=te.product.groups.find(ne=>ne.id===Z),N=te.optionStates.find(ne=>ne.groupId===Z&&ne.optionId===Y);if(!U||Y!==null&&!N)throw new Error("Unknown product option.");let K=Y===null?ko(te.product,{...te.base.selections,[Z]:null},te.base.quantity).issues.filter(ne=>ne.groupIds.includes(Z)&&ne.code!=="sku"):[];return K.length||N&&!N.available?(S(N?.reasons.join(" ")||K.map(ne=>ne.message).join(" ")),!1):(W({...te.base.selections,[Z]:Y}),!0)},[W]),A=wi((Z,Y)=>{let te=O.current,U=Ab(te.product,te.base.selections,Z,Y,te.base.quantity);return U?(W(U),!0):(S("This choice isn't available with any combination."),!1)},[W]),$=wi(Z=>{if(P.current)throw new Error("Wait for the current cart or quote request to finish.");ko(O.current.product,O.current.base.selections,Z),Z!==O.current.base.quantity&&(x.current=!1,c(Z))},[]),J=wi(Z=>{if(P.current)return P.current.kind===Z&&P.current.identity===O.current.identity?P.current.promise:Promise.reject(new Error("Another commerce request is already running."));let Y=O.current,te=Y.commerce,U=Z==="cart"?Y.adapter?.addToCart:Y.adapter?.requestQuote,N=we=>(R({identity:Y.identity,pending:null,result:null,error:we}),Promise.reject(new Error(we)));if(!U)return N("No commerce adapter is configured for this action.");if(!Y.base.valid)return N("Resolve the option conflicts before continuing.");if(!x.current||!te||te.identity!==Y.identity||te.adapterKey!==(Y.adapter?.key??"")||te.status!=="ready")return N("Wait for current pricing and availability, or retry the service request.");if(te.availability?.available===!1||te.availability?.options?.some(we=>!we.available&&Y.base.selections[we.groupId]===we.optionId))return N(te.availability?.message??"This configuration is currently unavailable.");if(Z==="cart"&&Y.adapter?.resolveSku&&!te.configuration.sku)return N("No SKU is available for this configuration.");if(te.price?.expiresAt&&Date.parse(te.price.expiresAt)<=Date.now())return V(),N("The price expired. Refresh it before continuing.");let K=structuredClone(te.configuration),ne=te.price?structuredClone(te.price):null,Fe=new AbortController,Q=Y.identity;(T.current?.identity!==Q||T.current.kind!==Z)&&(T.current={identity:Q,kind:Z,key:crypto.randomUUID()});let Ce=T.current.key;R({identity:Q,pending:Z,result:null,error:null});let Ee=Promise.resolve().then(()=>(Fe.signal.throwIfAborted(),U(K,{signal:Fe.signal,idempotencyKey:Ce,price:ne}))).then(we=>{if(!we||typeof we!="object"||we.id!==void 0&&typeof we.id!="string"||we.message!==void 0&&typeof we.message!="string")throw new Error("The commerce service returned an invalid result.");let pt={...we.id?{id:we.id}:{},...we.message?{message:we.message}:{}};return O.current.identity===Q&&!Fe.signal.aborted&&R({identity:Q,pending:null,result:pt,error:null}),T.current=null,pt}).catch(we=>{throw O.current.identity===Q&&!Fe.signal.aborted&&R({identity:Q,pending:null,result:null,error:qh(we)}),we}).finally(()=>{P.current?.promise===Ee&&(P.current=null),M.current&&R(we=>({...we,pending:null}))});return P.current={identity:Q,kind:Z,promise:Ee,controller:Fe},Ee},[V]),ae=p.valid&&D?.status==="ready"&&x.current&&!P.current&&D.availability?.available!==!1&&!D.availability?.options?.some(Z=>!Z.available&&p.selections[Z.groupId]===Z.optionId)&&(!D.price?.expiresAt||Date.parse(D.price.expiresAt)>Date.now());return{product:n,configuration:B,optionStates:H,selectOption:z,selectOptionWithFix:A,setSelections:W,reset:()=>W(ml(n)),setQuantity:$,exportConfiguration:()=>_b(B),importConfiguration:Z=>{let Y=Bb(Z,n);W(Y.selections),$(Y.quantity)},viewerProps:{...e.objectBindings!==void 0?{objectBindings:e.objectBindings}:{},sceneConfig:{...e.sceneConfig??sl,product:{definition:n,selections:p.selections}}},status:D?.status??(p.valid?"loading":"idle"),price:D?.price??(m?.getPrice||!p.valid?null:Ob(n,B)),checkoutUrl:D?.availability?.available===!1?null:Eb(n,B),availability:D?.availability??null,error:v??(y.identity===f?y.error:null)??D?.error??null,readOnly:k,pendingAction:P.current?P.current.kind:null,result:y.identity===f?y.result:null,canAddToCart:!!(ae&&m?.addToCart&&(!m.resolveSku||B.sku)),canRequestQuote:!!(ae&&m?.requestQuote),hasCommerce:!!m,hasCart:!!m?.addToCart,hasQuote:!!m?.requestQuote,addToCart:()=>J("cart"),requestQuote:()=>J("quote"),refresh:V}}import{useId as CM}from"react";import{Fragment as kM,jsx as Ke,jsxs as Tt}from"react/jsx-runtime";function MM(e,t){return t.map(n=>e.groups.find(r=>r.id===n.groupId)?.options.find(r=>r.id===n.optionId)?.label).filter(Boolean).join(", ")}function PM({c:e,group:t,option:n,state:r,name:o,display:i,busy:s}){let l=oe(),c=`${o}-${n.id}-reason`,u=!r.available&&r.fix?.length?r.fix:null,p=!r.available&&!u,m=u?l("productAlsoChanges",{changes:MM(e.product,u)}):r.available?"":r.reasons.join(" "),a=n.priceDeltaMinor&&e.product.pricing?dd(n.priceDeltaMinor,e.product.pricing.currency,!0):"",f=["ri-productChoice",r.selected&&"ri-productChoice--selected",!r.available&&"ri-productChoice--unavailable"].filter(Boolean).join(" "),d=Ke("input",{type:"radio",name:o,checked:r.selected,disabled:p||s||e.readOnly,"aria-describedby":m?c:void 0,onChange:()=>{u?e.selectOptionWithFix(t.id,n.id):e.selectOption(t.id,n.id)}});return i==="swatches"?Tt("label",{className:`${f} ri-productSwatch`,title:[n.label,a,m].filter(Boolean).join(" \xB7 "),children:[d,Ke("span",{className:"ri-productSwatchChip",style:{background:n.swatch??"var(--ri-ui-field)"},"aria-hidden":"true"}),Tt("span",{className:"ri-productVisuallyHidden",children:[n.label,a?` ${a}`:""]}),m?Ke("span",{id:c,className:"ri-productVisuallyHidden",children:m}):null]}):i==="chips"?Tt("label",{className:`${f} ri-productChip`,title:m||void 0,children:[d,Tt("span",{children:[n.label,a?Ke("em",{children:a}):null]}),m?Ke("span",{id:c,className:"ri-productVisuallyHidden",children:m}):null]}):Tt("label",{className:f,children:[d,n.swatch?Ke("span",{className:"ri-productSwatchChip",style:{background:n.swatch},"aria-hidden":"true"}):null,Tt("span",{className:"ri-productChoiceText",children:[Tt("span",{className:"ri-productChoiceTitle",children:[Ke("span",{children:n.label}),a?Ke("em",{children:a}):null]}),n.description?Ke("small",{children:n.description}):null,m?Ke("small",{id:c,children:m}):null]})]})}function Cd({configurator:e,className:t="",showCommerce:n=!0,actions:r}){let o=oe(),i=!!e.pendingAction,s=CM(),l=e.price?dd(e.price.amountMinor,e.price.currency):"",c=n&&(e.hasCommerce||!!e.product.pricing||!!e.product.checkout);return Tt("section",{className:`ri-productOptions ${t}`,"aria-label":o("productOptionsFor",{product:e.product.label}),children:[Tt("div",{className:"ri-productHeader",children:[Ke("strong",{children:e.product.label}),Ke("button",{type:"button",disabled:i||e.readOnly,onClick:e.reset,children:o("productReset")})]}),e.product.groups.map((u,p)=>{let m=`${s}-${p}`,a=u.display??"list",f=u.options.find(b=>b.id===e.configuration.selections[u.id]),d=u.required?[]:ko(e.product,{...e.configuration.selections,[u.id]:null},e.configuration.quantity).issues.filter(b=>b.groupIds.includes(u.id)).map(b=>b.message);return Tt("fieldset",{disabled:i||e.readOnly,children:[Tt("legend",{children:[u.label,u.required?null:Tt("small",{children:[" (",o("productOptional"),")"]}),a==="swatches"&&f?Ke("span",{className:"ri-productLegendValue",children:f.label}):null]}),Tt("div",{className:`ri-productChoices ri-productChoices--${a}`,children:[u.required?null:Tt("label",{className:`ri-productChoice${a==="swatches"||a==="chips"?" ri-productChip":""}${e.configuration.selections[u.id]===null?" ri-productChoice--selected":""}${d.length?" ri-productChoice--unavailable":""}`,title:d.join(" ")||void 0,children:[Ke("input",{type:"radio",name:m,checked:e.configuration.selections[u.id]===null,disabled:!!d.length,onChange:()=>e.selectOption(u.id,null)}),Ke("span",{children:o("productNone")})]}),u.options.map(b=>{let h=e.optionStates.find(w=>w.groupId===u.id&&w.optionId===b.id);return Ke(PM,{c:e,group:u,option:b,state:h,name:m,display:a,busy:i},b.id)})]})]},u.id)}),e.configuration.issues.length?Ke("ul",{className:"ri-productIssues","aria-label":o("productIssues"),children:e.configuration.issues.map((u,p)=>Ke("li",{children:u.message},p))}):null,c?Tt("div",{className:"ri-productCommerce",children:[Tt("label",{className:"ri-productQuantity",children:[o("productQuantity"),Ke("input",{type:"number",min:1,max:9999,step:1,value:e.configuration.quantity,disabled:i,onChange:u=>{let p=u.target.valueAsNumber;Number.isSafeInteger(p)&&p>=1&&p<=9999&&e.setQuantity(p)}})]}),e.status==="loading"&&e.hasCommerce?Ke("p",{role:"status",children:o("productCheckingPrice")}):Tt(kM,{children:[l?Tt("p",{className:"ri-productPrice",children:[l,Ke("small",{children:e.price?.label??o("productTotal")})]}):null,e.configuration.sku?Tt("p",{className:"ri-productSku",children:["SKU: ",e.configuration.sku]}):null,e.availability?.available===!1?Ke("p",{className:"ri-productIssues",children:e.availability.message??o("productUnavailable")}):null]}),Tt("div",{className:"ri-productActions",children:[e.checkoutUrl?Ke("a",{className:"ri-productPrimary",href:e.checkoutUrl,target:"_blank",rel:"noopener noreferrer",children:e.product.checkout?.label??o("productBuy")}):null,e.hasCart?Ke("button",{type:"button",className:e.checkoutUrl?void 0:"ri-productPrimary",disabled:!e.canAddToCart,onClick:()=>{e.addToCart().catch(()=>{})},children:e.pendingAction==="cart"?o("productAddingToCart"):o("productAddToCart")}):null,e.hasQuote?Ke("button",{type:"button",disabled:!e.canRequestQuote,onClick:()=>{e.requestQuote().catch(()=>{})},children:e.pendingAction==="quote"?o("productRequestingQuote"):o("productRequestQuote")}):null,e.hasCommerce?Ke("button",{type:"button",disabled:i||!e.configuration.valid,onClick:e.refresh,children:o("productRefresh")}):null,r]})]}):r?Ke("div",{className:"ri-productActions",children:r}):null,e.error?Ke("p",{className:"ri-productError",role:"alert",children:e.error}):null,e.result?Ke("p",{className:"ri-productSuccess",role:"status",children:e.result.message??(e.result.id?o("productSaved",{id:e.result.id}):o("productRequestDone"))}):null]})}import{useCallback as Kr,useEffect as RM,useRef as Qh,useState as Md}from"react";var Pd={currentClip:null,isPlaying:!1,speed:1,time:0,duration:0,active:[]};function tT(){let e=Qh(null),t=Qh(null),[n,r]=Md([]),[o,i]=Md([]),[s,l]=Md(Pd);RM(()=>()=>{t.current?.()},[]);let c=Kr(h=>{t.current?.(),e.current=h,r(h.clips),i(h.clipDetails??h.clips.map(w=>({sourceName:w,duration:0}))),l(h.getState?.()??Pd),t.current=h.subscribe?.(l)??null},[]),u=Kr(()=>{t.current?.(),t.current=null,e.current=null,r([]),i([]),l(Pd)},[]),p=Kr(h=>{let w=e.current;w&&(h(w),!w.subscribe&&w.getState&&l(w.getState()))},[]),m=Kr((h,w)=>p(v=>v.play(h,w)),[p]),a=Kr(h=>p(w=>w.pause(h)),[p]),f=Kr(h=>p(w=>w.stop(h)),[p]),d=Kr((h,w)=>p(v=>v.setSpeed(h,w)),[p]),b=Kr((h,w)=>p(v=>v.seek?.(h,w)),[p]);return{clips:n,clipDetails:o,...s,isRenderPaused:s.isRenderPaused??!1,play:m,pause:a,stop:f,setSpeed:d,seek:b,handleAnimationsReady:c,clearAnimations:u}}import{Fragment as Cl,jsx as ge,jsxs as ue}from"react/jsx-runtime";var hr=e=>e.toLocaleString(),Mi=e=>e==null?"Unknown":e>=1024*1024?`${(e/1024/1024).toFixed(1)} MiB`:`${(e/1024).toFixed(1)} KiB`,kd=e=>e===null?"Unavailable":hr(e);function AM({report:e,runtimeStats:t,onRefresh:n,onSelectObject:r}){return ue("div",{className:"ri-assetDiagnostics",children:[ue("div",{className:"ri-diagnosticsActions",children:[n&&ge("button",{type:"button",disabled:!e||e.status==="failed",onClick:n,children:"Rescan asset"}),ge("button",{type:"button",disabled:!e,onClick:()=>{Xr(new Blob([JSON.stringify({asset:e,runtime:t??null},null,2)],{type:"application/json"}),"asset-diagnostics.json")},children:"Download report"})]}),e?ue(Cl,{children:[ue("div",{className:`ri-diagnosticsSummary ri-diagnosticsSummary--${e.issues.some(o=>o.severity==="error")?"error":e.issues.some(o=>o.severity==="warning")?"warning":"info"}`,children:[ge("strong",{children:e.status==="failed"?"Asset could not be inspected":e.issues.some(o=>o.severity==="error")?"Issues need attention":e.issues.some(o=>o.severity==="warning")?"Review recommended":"No blocking issues found"}),ue("span",{children:[e.issues.filter(o=>o.severity==="error").length," errors \xB7 ",e.issues.filter(o=>o.severity==="warning").length," warnings \xB7 ",e.issues.filter(o=>o.severity==="info").length," notes"]})]}),ue("p",{className:"ri-diagnosticsSource",children:[e.source.name??"Loaded asset"," ",ge("span",{children:e.source.format?.toUpperCase()})]}),ue("details",{className:"ri-diagnosticsDetail",children:[ge("summary",{children:"Asset statistics"}),ue("dl",{className:"ri-diagnosticsMetrics",children:[ue("div",{children:[ge("dt",{children:"Source"}),ge("dd",{children:e.source.name??"Loaded asset"})]}),ue("div",{children:[ge("dt",{children:"Format"}),ge("dd",{children:e.source.format?.toUpperCase()??"Unknown"})]}),ue("div",{children:[ge("dt",{children:"Source file size"}),ge("dd",{children:Mi(e.source.sourceBytes)})]}),ue("div",{children:[ge("dt",{children:"Initial asset load"}),ge("dd",{children:e.source.loadDurationMs==null?"Unknown":`${(e.source.loadDurationMs/1e3).toFixed(2)} s`})]}),ue("div",{children:[ge("dt",{children:"Units"}),ge("dd",{children:e.units==="unknown"?"Unknown \u2014 verify scale":e.units})]}),e.bounds&&ue("div",{children:[ge("dt",{children:"Bounds (scene units)"}),ge("dd",{children:e.bounds.size.map(o=>Number(o.toPrecision(4))).join(" \xD7 ")})]}),e.statistics&&ue(Cl,{children:[ue("div",{children:[ge("dt",{children:"Meshes / instances"}),ue("dd",{children:[hr(e.statistics.meshes)," / ",hr(e.statistics.instances)]})]}),ue("div",{children:[ge("dt",{children:"Unique triangles"}),ge("dd",{children:hr(e.statistics.triangles)})]}),ue("div",{children:[ge("dt",{children:"Unique vertices"}),ge("dd",{children:hr(e.statistics.vertices)})]}),ue("div",{children:[ge("dt",{children:"Materials / textures"}),ue("dd",{children:[hr(e.statistics.materials)," / ",hr(e.statistics.textures)]})]}),ue("div",{children:[ge("dt",{children:"Geometry buffers"}),ge("dd",{children:Mi(e.statistics.geometryBytes)})]}),ue("div",{children:[ge("dt",{children:"Texture memory estimate"}),ue("dd",{children:[Mi(e.statistics.estimatedTextureBytes),e.statistics.unknownTextureSizes?` + ${e.statistics.unknownTextureSizes} unknown`:""]})]})]})]}),ue("p",{className:"ri-diagnosticsNote",children:[e.scope==="resident-tiles"?"Counts cover loaded tiles only. ":"Counts include loaded hidden meshes. ","Buffer sizes and texture memory are estimates, not a GPU memory budget. Units do not verify physical scale."]})]}),ge("div",{className:"ri-diagnosticsIssues",children:e.issues.map((o,i)=>ue("details",{className:`ri-diagnosticsIssue ri-diagnosticsIssue--${o.severity}`,children:[ue("summary",{children:[ge("span",{className:"ri-diagnosticsSeverity",children:o.severity}),o.title,o.count!==void 0&&ge("span",{className:"ri-diagnosticsCount",children:hr(o.count)})]}),ue("div",{children:[ge("p",{children:o.detail}),ge("p",{className:"ri-diagnosticsFix",children:o.suggestion}),!!o.objects?.length&&ge("ul",{"aria-label":`Affected objects: ${o.title}`,children:o.objects.map((s,l)=>ge("li",{children:r&&!["failed-resources","large-textures"].includes(o.code)?ge("button",{type:"button",onClick:()=>r(s),children:s}):s},`${s}-${l}`))}),o.count&&o.count>(o.objects?.length??0)&&o.objects&&ue("small",{children:["Showing the first ",o.objects.length," of ",hr(o.count),"."]})]})]},`${o.code}-${i}`))}),!!e.textures.length&&ue("details",{className:"ri-diagnosticsDetail",children:[ue("summary",{children:["Texture dimensions (",e.textures.length,")"]}),ge("ul",{children:e.textures.map((o,i)=>ue("li",{children:[ge("strong",{children:o.name}),ue("span",{children:[o.width??"?"," \xD7 ",o.height??"?",o.compressed?" \xB7 compressed":""," \xB7 ",Mi(o.estimatedBytes)]})]},i))})]}),!!e.extensions.length&&ue("details",{className:"ri-diagnosticsDetail",children:[ue("summary",{children:["glTF extensions (",e.extensions.length,")"]}),ge("ul",{children:e.extensions.map(o=>ue("li",{children:[ge("strong",{children:o.name}),ue("span",{children:[o.recognized?"Recognized":"Not recognized",o.required?" \xB7 required":" \xB7 optional"]})]},o.name))}),ge("p",{className:"ri-diagnosticsNote",children:"Recognized by the bundled loader; compressed formats still require configured decoders and device support."})]})]}):ge("p",{className:"ri-diagnosticsNote",role:"status",children:"Waiting for the active asset to load\u2026"}),ue("details",{className:"ri-diagnosticsDetail ri-diagnosticsRuntimeDetail",children:[ge("summary",{children:"Runtime statistics \xB7 live"}),ue("section",{className:"ri-diagnosticsRuntime","aria-label":"Runtime statistics",children:[ue("h4",{children:["Runtime statistics ",ge("span",{children:"Live \xB7 this canvas"})]}),t?ue(Cl,{children:[ue("dl",{className:"ri-diagnosticsMetrics",children:[ue("div",{children:[ge("dt",{children:"Renderer / render loop"}),ue("dd",{children:[t.renderer.toUpperCase()," / ",t.renderMode]})]}),ue("div",{children:[ge("dt",{children:"Draw calls (last pass)"}),ge("dd",{children:kd(t.drawCalls)})]}),ue("div",{children:[ge("dt",{children:"Triangles (last pass)"}),ge("dd",{children:kd(t.triangles)})]}),ue("div",{children:[ge("dt",{children:"Frame interval / FPS"}),ge("dd",{children:t.frameIntervalMs===null?"Idle / no active frame sample":`${t.frameIntervalMs.toFixed(1)} ms / ${t.fps?.toFixed(0)}`})]}),ue("div",{children:[ge("dt",{children:"Quality profile"}),ue("dd",{children:[t.quality.profile," \xB7 ",t.quality.reducedGpuLoad?"reduced GPU load":"full quality"]})]}),ue("div",{children:[ge("dt",{children:"Pixel ratio"}),ge("dd",{children:t.quality.dpr.toFixed(2)})]}),ue("div",{children:[ge("dt",{children:"Shadows / post FX"}),ue("dd",{children:[t.quality.shadows?"On":"Off"," / ",t.quality.postProcessing?"Allowed":"Skipped"]})]}),t.streaming&&ue(Cl,{children:[ue("div",{children:[ge("dt",{children:"Tile cache / base budget"}),ue("dd",{children:[Mi(t.streaming.cachedBytes)," / ",Mi(t.streaming.budgetBytes)]})]}),ue("div",{children:[ge("dt",{children:"Cached / loading / parsing tiles"}),ue("dd",{children:[kd(t.streaming.cachedTiles)," / ",t.streaming.downloading," / ",t.streaming.parsing]})]}),ue("div",{children:[ge("dt",{children:"Detail / error target"}),ue("dd",{children:["\xD7",t.streaming.detailFactor.toFixed(1)," / ",t.streaming.errorTarget.toFixed(1)]})]})]})]}),t.streaming&&(t.streaming.cacheFull||t.streaming.detailFactor>1)&&ue("p",{className:"ri-diagnosticsPressure",children:[t.streaming.cacheFull?"Tile cache is full. ":"",t.streaming.detailFactor>1?"Detail was reduced by the existing memory-pressure safeguard. ":"","Try smaller textures or a larger cache budget when the device can support it."]}),ge("p",{className:"ri-diagnosticsNote",children:"Frame intervals describe active frame callbacks, not CPU/GPU execution time. Long demand-loop idle gaps are excluded. Draw counts may reflect a post-processing pass. Sampling does not keep rendering awake."})]}):ge("p",{className:"ri-diagnosticsNote",children:"Collecting a sample\u2026"})]})]})]})}import{AlertTriangle as OM}from"lucide-react";import{jsx as Ta,jsxs as Jh}from"react/jsx-runtime";function Ml({title:e,message:t,tone:n="default",showKeySetup:r=!1}){let o=oe();return Jh("div",{className:`ri-license-overlay${n==="error"?" ri-license-overlay--error":""}`,children:[Jh("div",{className:"ri-license-overlay__header",children:[n==="error"?Ta(OM,{size:16,className:"ri-license-overlay__icon","aria-hidden":"true"}):Ta("span",{className:"ri-license-overlay__statusDot","aria-hidden":"true"}),Ta("span",{className:"ri-license-overlay__title",children:e})]}),t?Ta("p",{className:"ri-license-overlay__message",children:t}):null,r&&Ta("a",{href:"https://react-immersive.liveroom.dev/console",target:"_blank",rel:"noopener noreferrer",children:o("createDevelopmentKey")})]})}import{useEffect as Ed,useState as _M,useRef as BM}from"react";var EM="ri:license-grant:v1",DM={"260cd89ea13f":"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwjr3ofKTkkcxOM0GYl/RlJj9JsuyjSF8sYmCd2YqsHJCEO8EvlNDrO2Kl4agFKo6dRhyR2/oWeiU6P9WIqRbvw=="},Yh=new Map;function ev(e){let t=atob(e);return Uint8Array.from(t,n=>n.charCodeAt(0)).buffer}function Zh(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");return ev(t.padEnd(Math.ceil(t.length/4)*4,"="))}function TM(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 Pl(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 Rd(e,t){return`${EM}:${t}:${e}`}function LM(e,t){let n=Yh.get(e);if(n)return n;let r=crypto.subtle.importKey("spki",ev(t),{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]);return Yh.set(e,r),r}async function Ad(e,t,n){if(!globalThis.crypto?.subtle)return null;try{let[r,o,i,s,...l]=e.split("."),c=DM[o];if(r!=="ri1"||!c||!i||!s||l.length>0)return null;let u=JSON.parse(new TextDecoder().decode(Zh(i)));if(!TM(u)||!await crypto.subtle.verify({name:"ECDSA",hash:"SHA-256"},await LM(o,c),Zh(s),new TextEncoder().encode(`${r}.${o}.${i}`)))return null;let m=Math.floor(Date.now()/1e3),a=u.expiresAt-u.issuedAt;return u.licenseKeyHash!==t||u.domain!==n||u.expiresAt<=m||u.issuedAt>m+300||a<=0||a>43200?null:{environment:u.environment,tier:u.tier,expiresAt:u.expiresAt}}catch{return null}}async function tv(e,t,n){try{return await Ad(e,await Pl(t),n)}catch{return null}}async function nv(e,t,n){try{let r=await Pl(t);return await Ad(e,r,n)?(localStorage.setItem(Rd(r,n),e),!0):!1}catch{return!1}}async function rv(e,t){try{let n=await Pl(e),r=Rd(n,t),o=localStorage.getItem(r);if(!o)return null;let i=await Ad(o,n,t);return i||localStorage.removeItem(r),i}catch{return null}}async function Od(e,t){try{let n=await Pl(e);localStorage.removeItem(Rd(n,t))}catch{}}var jM=["localhost","127.0.0.1","0.0.0.0"],NM=e=>jM.includes(e)||e.endsWith(".local")||e.endsWith(".localhost"),sv="https://react-immersive.liveroom.dev/api/validate-license",Ld=()=>typeof window<"u",IM=300*1e3,zM=5e3,VM=400,Td=new Map,Dd=new Map,Qr=class extends Error{},lv=async(e,t,n)=>{let r=await rv(e,t);return r?(console.warn("[react-immersive] License server unreachable \u2014 using a previously verified, time-limited offline grant."),{status:"valid",reason:"Previously verified offline grant",environment:r.environment,tier:r.tier,isLocalDomain:n}):null},ov=async(e,t,n)=>{let r=await lv(e,t,n);return r||(console.warn("[react-immersive] License server unreachable and no valid offline grant is available \u2014 license validation failed."),{status:"invalid",reason:"Could not reach license server",isLocalDomain:n})},FM=e=>e instanceof Qr||e instanceof TypeError,HM=()=>new Promise(e=>setTimeout(e,VM)),GM=e=>e==="development"||e==="production",UM=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&&!GM(t.environment)||t.tier!==void 0&&typeof t.tier!="string"||t.offlineGrant!==void 0&&typeof t.offlineGrant!="string")},$M=e=>{if(!e||typeof e!="object")return null;let t=e,n=t.reason??t.error;return typeof n=="string"&&n.trim()?n:null},cv=(e,t,n)=>`${n}::${e}::${t}`,uv=e=>{let t=Td.get(e);return t?Date.now()-t.timestamp>IM?(Td.delete(e),null):t.result:null},WM=(e,t)=>({status:e.valid?"valid":"invalid",reason:e.reason,environment:e.environment,tier:e.tier,isLocalDomain:t}),XM=(e,t)=>({status:"invalid",reason:e,isLocalDomain:t});async function qM(e,t,n,r){let o=cv(e,t,r),i=uv(o);if(i)return i;let s=Dd.get(o);if(s)return s;let l=(async()=>{for(let c=0;c<2;c+=1)try{return await KM(e,t,n,o,r)}catch(u){if(!FM(u))throw u;if(c===0){let p=await lv(e,t,n);if(p)return p;await HM();continue}return ov(e,t,n)}return ov(e,t,n)})().finally(()=>{Dd.delete(o)});return Dd.set(o,l),l}async function KM(e,t,n,r,o){let i=new AbortController,s=setTimeout(()=>i.abort(),zM),l;try{l=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-store",signal:i.signal,body:JSON.stringify({licenseKey:e,domain:t})})}catch(p){throw i.signal.aborted?new Qr("License validation timed out"):p}finally{clearTimeout(s)}let c;try{c=await l.json()}catch{throw new Qr(`License server returned a non-JSON response${l.status?` (${l.status})`:""}`)}if(!l.ok){if(l.status===429||l.status>=500)throw new Qr(`License server error (${l.status})`);let p=$M(c)??`License validation failed${l.status?` (${l.status})`:""}`;return await Od(e,t),XM(p,n)}if(!UM(c))throw new Qr("License server returned an unexpected payload");let u=WM(c,n);if(u.status==="valid"&&o!==sv){let p=c.offlineGrant?await tv(c.offlineGrant,e,t):null;if(!p)throw new Qr("License validation endpoint did not return a verifiable signed grant");u={...u,environment:p.environment,tier:p.tier}}return u.status==="valid"?(Td.set(r,{result:u,timestamp:Date.now()}),c.offlineGrant&&(await nv(c.offlineGrant,e,t)||console.warn("[react-immersive] The license server returned an invalid offline grant; it was not cached."))):await Od(e,t),u}var iv=(e,t)=>{let n=e.trim();return!Ld()||!n?null:uv(cv(n,window.location.hostname.toLowerCase(),t))},av=new Set,QM=e=>{if(e.status!=="invalid"||e.isLocalDomain||!Ld())return;let t=window.location.hostname,n=e.reason??"License validation failed",r=`${t}
4
+ ${n}`;av.has(r)||(av.add(r),console.warn(`[react-immersive] The viewer is not licensed for ${t}: ${n}. See https://react-immersive.liveroom.dev/docs/licensing`))},dv=(e,t=sv,n)=>{let[r,o]=_M(()=>iv(e,t)??{status:"checking",isLocalDomain:!1}),i=BM(n);return i.current=n,Ed(()=>{i.current?.(r)},[r]),Ed(()=>{QM(r)},[r]),Ed(()=>{if(!Ld())return;let s=!1,l=f=>{s||o(f)},c=e.trim(),u=window.location.hostname.toLowerCase(),p=NM(u),m=iv(e,t);return m?(l(m),()=>{s=!0}):(l({status:"checking",isLocalDomain:p}),c?((async()=>{try{l(await qM(c,u,p,t))}catch(f){let d=f instanceof TypeError?"Could not reach license server":f instanceof Error?f.message:"License validation failed";l({status:"invalid",reason:d,isLocalDomain:p})}})(),()=>{s=!0}):(l({status:"invalid",reason:"No license key provided",isLocalDomain:p}),()=>{s=!0}))},[e,t]),r};import{Box3 as JM,Mesh as YM,Raycaster as ZM,Triangle as e1,Vector3 as Jn}from"three";function pv(e,t){if(!(e instanceof YM)||!t)return null;let n=e.geometry.getAttribute("position");if(!n?.count)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let r=new JM,o=new Jn;if(Qn(e)){let x=e;x.computeBoundingBox(),x.computeBoundingSphere();for(let M=0;M<n.count;M++)r.expandByPoint(e.getVertexPosition(M,o))}else e.geometry.boundingBox||e.geometry.computeBoundingBox(),r.copy(e.geometry.boundingBox);if(r.applyMatrix4(e.matrixWorld),r.isEmpty())return null;let i=r.getCenter(new Jn),s=t.getWorldPosition(new Jn),l=t.getWorldDirection(new Jn),c=t.isOrthographicCamera,u=new ZM,p=x=>{if(c){let E=s.distanceTo(i)+r.getSize(o).length()+1;u.set(x.clone().addScaledVector(l,-E),l)}else u.set(s,x.clone().sub(s).normalize());let M=u.intersectObject(e,!1)[0];return M?xi({...M,ray:u.ray},e):null},m=p(i);if(m)return m;let a=e.geometry.index,f=a?.count??n.count,d=new Jn,b=new Jn,h=new Jn,w=new Jn,v=new Jn,S=new Jn,y=null,R=1/0;for(let x=0;x+2<f;x+=3){if(e.getVertexPosition(a?a.getX(x):x,d).applyMatrix4(e.matrixWorld),e.getVertexPosition(a?a.getX(x+1):x+1,b).applyMatrix4(e.matrixWorld),e.getVertexPosition(a?a.getX(x+2):x+2,h).applyMatrix4(e.matrixWorld),w.copy(d).add(b).add(h).multiplyScalar(1/3),e1.getNormal(d,b,h,v),c?S.copy(l).negate():S.copy(s).sub(w),v.dot(S)<=0)continue;let M=w.distanceToSquared(i);M<R&&(R=M,y=w.clone())}return y?p(y):null}import{Mesh as t1,Raycaster as n1,Triangle as r1,Vector2 as mv,Vector3 as vr}from"three";function fv(e,t,n,r){if(!(e instanceof t1)||!t)return null;e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1);let o=new vr().fromArray(n.position);if(Qn(e)){let u=e;u.computeBoundingBox(),u.computeBoundingSphere();let p=u.geometry.getAttribute("position");if(!p)return null;let m=u.geometry.index,a=m?.count??p.count,f=new r1,d=new vr,b=new vr,h=1/0,w=null;for(let v=0;v+2<a;v+=3){let S=[0,1,2].map(R=>m?m.getX(v+R):v+R);f.a.fromBufferAttribute(p,S[0]),f.b.fromBufferAttribute(p,S[1]),f.c.fromBufferAttribute(p,S[2]),f.closestPointToPoint(o,d);let y=d.distanceToSquared(o);if(!(y>=h||!f.getBarycoord(d,b))&&(h=y,w=new vr().addScaledVector(u.getVertexPosition(S[0],new vr),b.x).addScaledVector(u.getVertexPosition(S[1],new vr),b.y).addScaledVector(u.getVertexPosition(S[2],new vr),b.z),h<1e-12))break}if(!w)return null;o.copy(w)}if(o.applyMatrix4(e.matrixWorld).project(t),!Number.isFinite(o.x)||o.z<-1||o.z>1)return null;let i=new mv(r==="left"?-.0035:r==="right"?.0035:0,r==="down"?-.0035:r==="up"?.0035:0),s=new n1,l=n.size*.01,c=new vr().fromArray(n.position);for(let u=1;u>=1/1024;u/=2){s.setFromCamera(new mv(o.x,o.y).addScaledVector(i,u),t);let p=s.intersectObject(e,!1)[0];if(p){let m=xi({...p,ray:s.ray},e);if(new vr().fromArray(m.position).distanceTo(c)<=l)return m}}return null}import{Box3 as La,PerspectiveCamera as gv,Sphere as o1,Vector3 as Pi}from"three";function bv(e,t,n,r,o,i=!1){return!!(e?.usesSlots&&t.usesSlots&&e.url!==t.url&&n.includes(e.url)&&n.includes(t.url)&&r[e.url]&&r[t.url]&&(i||o[e.url]&&o[t.url]))}function _d(e,t,n){let r=t?.camera;if(!(r instanceof gv))return null;let i=(e instanceof La?e:new La().setFromObject(e)).getSize(new Pi).length();return!Number.isFinite(i)||i<=0?null:(r.near=i/100,r.far=i*100,r.updateProjectionMatrix(),t&&n===void 0&&(t.maxDistance=i*10),i)}function hv(e,t){let n=e.camera;if(!(n instanceof gv)||!(t>0))return;let r=Math.min(Math.max(e.distance/200,t/1e5),t/100);Math.abs(r-n.near)<=n.near*.01||(n.near=r,n.updateProjectionMatrix())}var kl={paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5},_a={kind:"model"};function vv(e,t){let n=new La().setFromObject(t);return n.isEmpty()?!1:(n.expandByScalar(n.getSize(new Pi).length()*.05),n.containsPoint(e.getTarget(new Pi)))}function yv(e,t){return e.getTarget(new Pi).distanceTo(t)<=Math.max(e.distance,1)*.001}async function Bd(e,t,n=.6){let r=e.smoothTime;e.smoothTime=Zs(e,n);try{return await t()}finally{e.smoothTime=r}}async function xv(e,t,{flyIn:n,onStart:r,invalidate:o}){if(n){let i=(t instanceof La?t:new La().setFromObject(t)).getBoundingSphere(new o1),s=i.center.clone(),c=e.getPosition(new Pi).clone().sub(e.getTarget(new Pi));c.lengthSq()<1e-6&&c.set(0,0,1),c.normalize();let u=Math.max(i.radius*10,20),p=s.clone().add(c.multiplyScalar(u));await e.setLookAt(p.x,p.y,p.z,s.x,s.y,s.z,!1)}r(),await Bd(e,()=>e.fitToBox(t,!0,{paddingTop:.5,paddingBottom:.5,paddingLeft:.5,paddingRight:.5})),await new Promise(i=>{let s=performance.now(),l=()=>{e.active===!1||performance.now()-s>8e3?(e.dispatchEvent({type:"update"}),o(),i()):(o(),setTimeout(l,100))};setTimeout(l,100)})}import{useEffect as i1,useMemo as wv,useRef as a1}from"react";import{useFrame as s1,useThree as l1}from"@react-three/fiber";import{Box3 as c1,Box3Helper as u1,Group as d1}from"three";import{jsx as p1}from"react/jsx-runtime";function Sv({source:e,highlights:t}){let n=l1(s=>s.invalidate),r=wv(()=>new d1,[]),o=wv(()=>t.map(s=>{let l=new u1(new c1,s.color);l.raycast=()=>{};let c=l.material;return c.depthTest=!1,c.transparent=!0,c.opacity=.85,l.renderOrder=1e3,gi(l),{helper:l,id:s.objectId}}),[t]);i1(()=>{for(let{helper:s}of o)r.add(s);return n(),()=>{for(let{helper:s}of o)r.remove(s),s.geometry.dispose(),s.material.dispose();n()}},[r,o,n]);let i=a1(null);return s1(()=>{let s=e.current;if(!s){r.visible=!1;return}r.visible=!0,(i.current?.root!==s||i.current.helpers!==o)&&(i.current={root:s,helpers:o,nodes:Hr(s).nodesById});let l=i.current.nodes;for(let{helper:c,id:u}of o){let p=l[u];c.visible=!!p,p&&c.box.setFromObject(p)}}),p1("primitive",{object:r})}function Cv(e){let t=[],n="",r=null,o=null,i=0,s="stopped",l=!1,c=[],u=0,p=!1,m=!1,a={sequenceId:null,time:0,duration:0,status:s,previewing:l,ready:!1,issues:[]},f=new Set,d=()=>t.find(y=>y.id===o),b=()=>{a={sequenceId:o,time:i,duration:d()?.duration??0,status:s,previewing:l,ready:!!r,issues:c},f.forEach(y=>y())},h=()=>{r?.restore(),i=0,s="stopped",l=!1,b(),r?.invalidate()},w=y=>t.some(R=>R.id===y)?(o===y||(r?.restore(),o=y,i=0,s="stopped",l=!1,c=r?.inspect(d())??[],b(),r?.invalidate()),!0):!1,v=y=>{if(y&&!w(y))return!1;let R=d();return!r||!R?.tracks.some(x=>!x.muted&&x.keyframes.length)?!1:(e?.(),m=!0,i>=R.duration&&(i=0),s="playing",l=!0,c=r.inspect(R),b(),r.invalidate(),!0)},S=()=>{if(!r||!p||m)return;let y=t.find(R=>R.autoPlay);y&&v(y.id)};return{getState:()=>a,subscribe:y=>(f.add(y),()=>{f.delete(y)}),select:w,play:v,stop:h,pause:()=>{s==="playing"&&(s="paused",b())},seek:y=>{let R=d();return!r||!R||!Number.isFinite(y)?!1:(e?.(),i=Math.max(0,Math.min(R.duration,y)),l=!0,s!=="playing"&&(s="paused"),c=r.inspect(R),b(),r.invalidate(),!0)},capture:y=>r?.capture(y)??null,configure:(y,R)=>{p=R;try{let x=Js(y??[]),M=JSON.stringify(x);if(n===M){S();return}r?.restore(),t=x,n=M,d()||(o=t[0]?.id??null,i=0,l=!1),i=Math.min(i,d()?.duration??0),s=l?"paused":"stopped",c=d()?r?.inspect(d())??[]:[],b(),r?.invalidate(),S()}catch(x){h(),t=[],n="",o=null,c=[x instanceof Error?x.message:"Invalid sequence configuration."],b()}},connect:y=>{r?.restore(),r=y,y||(s="stopped",l=!1,i=0),c=d()?r?.inspect(d())??[]:[],b(),S()},advance:y=>{let R=d();if(!R||!r||s!=="playing"||!Number.isFinite(y)||y<0)return;let x=Math.min(y,.1);i+=x,u+=x,i>=R.duration&&(R.loop?i%=R.duration:(i=R.duration,s="finished")),(u>=1/30||s==="finished")&&(u=0,b())},frame:()=>{let y=d();return l&&y?{sequence:y,time:i,playing:s==="playing"}:null},destroy:()=>{r?.restore(),r=null,s="stopped",l=!1,i=0,b()}}}import{useLayoutEffect as Rl,useMemo as m1,useRef as f1}from"react";import{useFrame as g1,useThree as b1}from"@react-three/fiber";function Mv({controller:e,source:t,controls:n,animations:r,ready:o,sequences:i,autoPlay:s,authoredRevision:l,cameraEnabled:c=!0}){let u=b1(a=>a.invalidate),p=f1({source:t,controls:n,animations:r,cameraEnabled:c});p.current={source:t,controls:n,animations:r,cameraEnabled:c};let m=m1(()=>tb({root:()=>p.current.source.current,controls:()=>p.current.controls.current,animations:()=>p.current.animations.current,cameraEnabled:()=>p.current.cameraEnabled,invalidate:u}),[e,u]);return Rl(()=>(u(),()=>m.restore()),[m,l,i,u]),Rl(()=>{e.configure(i,s)},[e,i,s]),Rl(()=>(e.connect(o?m:null),()=>e.connect(null)),[e,m,o]),Rl(()=>{if(!c)return;let a=n.current,f=()=>e.pause();return a?.addEventListener("controlstart",f),()=>a?.removeEventListener("controlstart",f)},[e,n,o,c]),g1((a,f)=>{if(!o)return;e.advance(f);let d=e.frame();d&&m.apply(d),d?.playing&&u()}),null}import{useEffect as Pv,useRef as kv,useState as Rv}from"react";function Av(e,t){if(!e?.configuration)return e;let n=e.configuration,r=n.models?.find(i=>ke(i)===t||i.url===t);if(!r)return e;let o=n.activeModelId??n.modelUrl;return{...e,objectBindings:r.objectBindings,configuration:{...n,models:n.models?.map(i=>ke(i)===o?{...i,sceneConfig:n.sceneConfig,objectBindings:e.objectBindings??i.objectBindings}:i),activeModelId:ke(r),modelUrl:r.url,sceneConfig:r.sceneConfig??n.sceneConfig}}}function Ov(e){let[t,n]=Rv(null),[r,o]=Rv(null),i=fl(e.arHandoff),s=!!e.arHandoff&&i?.autoRestore!==!1,l=i?.storage,c=`${e.modelUrl}
5
+ ${e.activeModelId??""}`,u=kv(c);u.current=c;let p=kv(c);if(Pv(()=>{c!==p.current&&(p.current=c,n(null))},[c]),Pv(()=>{if(!s||typeof window>"u"){n(null),o(null);return}let a,f=()=>{a?.abort(),a=new AbortController;let d=a.signal,b=u.current;o(null),zb(window.location.href,l,d).then(h=>{!d.aborted&&u.current===b&&n(h)}).catch(h=>{!d.aborted&&u.current===b&&(n(null),o(h instanceof Error?h.message:"Could not restore the AR configuration."))})};return f(),window.addEventListener("hashchange",f),()=>{a?.abort(),window.removeEventListener("hashchange",f)}},[s,l]),!t?.configuration)return{props:e,error:r};let m=t.configuration;return{error:r,props:{...e,...m,objectBindings:t.objectBindings??e.objectBindings,onObjectBindingsChange:a=>{n(f=>f?.configuration?{...f,objectBindings:a,configuration:{...f.configuration,models:f.configuration.models?.map(d=>ke(d)===(f.configuration?.activeModelId??f.configuration?.modelUrl)?{...d,objectBindings:a}:d)}}:f),e.onObjectBindingsChange?.(a)},onSceneConfigChange:a=>{n(f=>f?.configuration?{...f,configuration:{...f.configuration,sceneConfig:a}}:f),e.onSceneConfigChange?.(a)},onIsolationChange:a=>{n(f=>f?.configuration?{...f,configuration:{...f.configuration,isolation:a}}:f),e.onIsolationChange?.(a)},onActiveModelChange:a=>{n(f=>Av(f,a)),e.onActiveModelChange?.(a)},onModelChange:a=>{n(f=>Av(f,a)),e.onModelChange?.(a)}}}}import{useCallback as jd,useEffect as Al,useRef as Ba,useState as Nd}from"react";function Ev({enabled:e,options:t,state:n,getSources:r,baseUrl:o,revision:i="",autoPrepare:s=!1,preparePhoneLink:l=!0}){let c,u=!1;try{c=e?Nb(n,t?.assetVersion,t?.maxTextureSize)+(o??"")+i:"disabled"}catch{u=!0,c="invalid-configuration"+(t?.assetVersion??"")+i}l||(c+=":usdz-only");let[p,m]=Nd(!1),[a,f]=Nd(!1),[d,b]=Nd(null),h=Ba(null),w=Ba(!1),v=Ba(null),S=Ba(null),y=Ba({key:c,state:n,options:t,getSources:r,baseUrl:o,enabled:e,invalidConfiguration:u,preparePhoneLink:l});y.current={key:c,state:n,options:t,getSources:r,baseUrl:o,enabled:e,invalidConfiguration:u,preparePhoneLink:l};let R=jd(()=>{v.current&&URL.revokeObjectURL(v.current),v.current=null},[]);Al(()=>{h.current?.abort(),w.current=!1,f(!1),R(),b(O=>e&&O?{key:O.key,invalidated:!0,warnings:[]}:null),e||m(!1)},[c,e,R]),Al(()=>()=>{h.current?.abort(),R()},[R]);let x=e&&!d?.invalidated&&d?.key===c,M=x&&!!(d.usdzUrl||d.phoneUrl),E=a?"preparing":e?d&&!x?"stale":x?M?"ready":"error":"idle":"idle";Al(()=>{y.current.options?.onStatusChange?.(E)},[E]);let P=jd(()=>{h.current?.abort(),w.current&&(b(null),R()),w.current=!1,f(!1),m(!1)},[R]),T=jd(async()=>{let O=y.current;if(!O.enabled)return;h.current?.abort(),R(),b(null),f(!0),w.current=!0;let k=new AbortController;h.current=k;let D=()=>!k.signal.aborted&&y.current.key===O.key&&y.current.enabled,B=J=>{D()&&b(ae=>({...ae?.key===O.key&&!ae.invalidated?ae:{key:O.key,warnings:[]},...J}))},H;try{if(O.invalidConfiguration)throw new Error("Invalid configuration");H=structuredClone(O.state)}catch{let J=new Error("Configuration contains data that cannot be copied for AR. Use JSON-compatible binding metadata.");w.current=!1,f(!1),B({exportError:J.message}),O.options?.onError?.(J);return}let V,W={configurationKey:O.key,state:H,signal:k.signal,exportUSDZ:()=>V??(V=Promise.resolve().then(()=>Xb(O.getSources(),{scaleMode:O.state.configuration?.arScaleMode,maxTextureSize:O.options?.maxTextureSize,signal:k.signal})))},z=[],A=async()=>{try{let J=O.options?.createUSDZ?await O.options.createUSDZ(W):(await W.exportUSDZ()).blob,ae=V?await V.then(Y=>Y.warnings,()=>[]):[];if(!D())return;let Z;if(typeof J=="string")Z=pd(J,window.location.href);else if(J instanceof Blob&&J.size>0)Z=URL.createObjectURL(J),v.current=Z;else throw new Error("The USDZ adapter returned an empty asset.");B({usdzUrl:Z,warnings:ae})}catch(J){let ae=J instanceof Error?J.message:String(J);z.push(ae),B({exportError:ae})}},$=async()=>{try{let J=O.options?.createMobileUrl?await O.options.createMobileUrl(W):await jb(W.state,window.location.href).then(Z=>Ib(Z,O.baseUrl||window.location.href,O.options?.storage,k.signal));if(!D())return;let ae=pd(J,window.location.href);if(ae.length>2200)throw new Error("The phone link is too long for a reliable QR code.");B({phoneUrl:ae})}catch(J){let ae=J instanceof Error?J.message:String(J);!O.options?.createMobileUrl&&ae.includes("durable URL")&&(ae="QR sharing isn\u2019t available for local uploads. Download the USDZ and send it to your phone."),!O.options?.createMobileUrl&&(ae.includes("reachable from your phone")||ae.includes("asset URL points to this computer"))&&(ae="QR sharing needs a viewer page and model files your phone can reach. Use an online viewer, or download the USDZ."),z.push(ae),B({linkError:ae})}};await Promise.all([A(),O.preparePhoneLink?$():Promise.resolve()]),D()&&(w.current=!1,f(!1),z.length&&O.options?.onError?.(new Error(z.join(`
6
+ `))))},[R]);return Al(()=>{if(!e||!p&&!s){S.current=null;return}M||a||S.current===c||(S.current=c,T())},[e,p,s,c,M,a,T]),{open:e&&p,show:()=>m(!0),close:P,prepare:T,status:E,busy:a,prepared:x?d:null}}import{useCallback as h1,useEffect as v1,useRef as Id}from"react";function Dv(e){let t=Id(e);t.current=e;let n=Id(!0),r=Id(null);return v1(()=>(n.current=!0,()=>{n.current=!1}),[]),h1(async()=>{let o=t.current;if(!n.current||!o.enabled||!o.isReady()||o.resolving)return!1;if(r.current)return r.current;if(o.xrStore&&o.arSupported){let i=o.xrStore.getState();if(i.session){if(i.mode==="immersive-ar")return!0;throw new Error("Exit the current XR session before starting AR.")}let s=o.xrStore.enterAR().then(l=>!!l);r.current=s;try{return await s}finally{r.current===s&&(r.current=null)}}return o.configuredHandoff?(o.openConfiguredAR(),!0):o.quickLookSupported?(o.openQuickLook(),!0):o.mobileHandoffUrl?(o.openMobileHandoff(),!0):!1},[])}import{useEffect as S1,useId as C1,useRef as M1}from"react";import{lazy as y1,Suspense as x1}from"react";import{jsx as zd}from"react/jsx-runtime";var w1=y1(()=>import("qrcode.react").then(e=>({default:e.QRCodeSVG})));function Ol(e){let t=e.size??128;return zd(x1,{fallback:zd("span",{"aria-hidden":"true",style:{display:"inline-block",width:t,height:t}}),children:zd(w1,{...e})})}import{Download as P1,ExternalLink as k1,LoaderCircle as R1,RefreshCw as A1,Smartphone as O1,X as E1}from"lucide-react";import{Fragment as D1,jsx as kt,jsxs as ki}from"react/jsx-runtime";function Tv({handoff:e,filename:t,onQuickLook:n}){let r=oe(),o=C1(),i=M1(null),s=e.close;S1(()=>{let p=document.activeElement;i.current?.focus();let m=a=>{if(a.key==="Escape"&&(a.preventDefault(),s()),a.key!=="Tab")return;let f=Array.from(i.current.querySelectorAll("button:not(:disabled), a[href], summary")),d=f[0],b=f[f.length-1];a.shiftKey&&(document.activeElement===d||document.activeElement===i.current)?(a.preventDefault(),b?.focus()):!a.shiftKey&&(document.activeElement===b||document.activeElement===i.current)&&(a.preventDefault(),d?.focus())};return document.addEventListener("keydown",m),()=>{document.removeEventListener("keydown",m),p?.focus()}},[s]);let l=e.prepared,c=!e.busy&&(e.status==="ready"||e.status==="error"),u=e.status==="error"?r("arRetry"):r("arRefresh");return kt("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:p=>{p.target===p.currentTarget&&s()},children:ki("section",{ref:i,tabIndex:-1,className:"ri-mobileHandoffDialog ri-configuredARDialog",role:"dialog","aria-modal":"true","aria-labelledby":o,"aria-busy":e.busy&&!l?.phoneUrl&&!l?.usdzUrl,children:[kt("button",{type:"button",className:"ri-mobileHandoffClose",onClick:s,"aria-label":r("closePhoneHandoff"),children:kt(E1,{size:18})}),kt(O1,{size:22,"aria-hidden":"true"}),kt("h2",{id:o,children:r("arConfiguredTitle")}),kt("div",{role:"status","aria-live":"polite",className:"ri-configuredARProgress",children:(e.busy||e.status==="idle"||e.status==="stale")&&ki("p",{children:[kt(R1,{size:16,"aria-hidden":"true"}),r("arPreparing")]})}),l?.phoneUrl&&ki(D1,{children:[kt("p",{children:r("arScanConfigured")}),kt("div",{className:"ri-mobileHandoffQr",children:kt(Ol,{value:l.phoneUrl,size:208,level:"M",marginSize:4,title:r("qrCodeToOpenThisModelOnAPhone")})})]}),l?.usdzUrl&&gl()&&ki("a",{rel:"ar",className:"ri-configuredARLaunch",href:l.usdzUrl,onClick:n,children:[kt("img",{alt:"",width:"1",height:"1",src:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="}),r("viewInAR")]}),(l?.phoneUrl||l?.usdzUrl||c)&&ki("div",{className:"ri-configuredARActions",children:[l?.phoneUrl&&kt("a",{className:"ri-configuredARAction",href:l.phoneUrl,target:"_blank",rel:"noopener noreferrer",title:r("arOpenConfiguredLink"),"aria-label":r("arOpenConfiguredLink"),children:kt(k1,{size:16,"aria-hidden":"true"})}),l?.usdzUrl&&kt("a",{className:"ri-configuredARAction",href:l.usdzUrl,download:`${t}-configured.usdz`,title:r("arDownloadUSDZ"),"aria-label":r("arDownloadUSDZ"),children:kt(P1,{size:16,"aria-hidden":"true"})}),c&&kt("button",{type:"button",className:"ri-configuredARAction",onClick:()=>{e.prepare()},title:u,"aria-label":u,children:kt(A1,{size:16,"aria-hidden":"true"})})]}),l?.exportError&&kt("p",{role:"alert",children:l.exportError}),l?.linkError&&kt("p",{role:"status",children:l.linkError}),!!l?.warnings.length&&ki("details",{className:"ri-configuredARDetails",children:[kt("summary",{children:r("arExportDetails")}),l.warnings.map(p=>kt("p",{className:"ri-configuredARNote",children:p},p))]})]})})}import{useState as Lv}from"react";import{Smartphone as _v}from"lucide-react";import{jsx as Ri,jsxs as Vd}from"react/jsx-runtime";function Bv({xrStore:e,arSupported:t,checkingAR:n,quickLookSupported:r,modelReady:o,inARSession:i,handoff:s,onQuickLook:l,animationControls:c}){let u=oe(),[p,m]=Lv(!1),[a,f]=Lv(null);if(i)return null;let d=!!(e&&t),b=s.prepared?.usdzUrl,h=!d&&r?s.prepared?.exportError:void 0,w=d||r,v=o&&(d||!!(r&&b)),S=n?u("arCheckingSupport"):w?o?!v&&!h?u("arPreparing"):null:u("loadingModel"):u("arUnavailable"),y=async()=>{if(e){m(!0),f(null);try{await e.enterAR()}catch(R){f(R instanceof Error?R.message:u("arStartFailed"))}finally{m(!1)}}};return Vd("div",{className:"ri-arLandingControls",children:[r&&!d&&o&&c,v&&!d&&b?Vd("a",{className:"ri-arLandingStart",rel:"ar",href:b,onClick:l,children:[Ri("img",{alt:"",width:"1",height:"1",src:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="}),Ri(_v,{size:20,"aria-hidden":"true"}),u("arStart")]}):h?Ri("button",{type:"button",className:"ri-arLandingStart",onClick:()=>{s.prepare()},children:u("arRetry")}):Vd("button",{type:"button",className:"ri-arLandingStart",disabled:!v||p,onClick:()=>{y()},children:[Ri(_v,{size:20,"aria-hidden":"true"}),u(p?"arStarting":"arStart")]}),S&&Ri("p",{role:"status",children:S}),(a||h)&&Ri("p",{role:"alert",children:a||h})]})}import{useCallback as Nv,useEffect as T1,useMemo as L1,useRef as _1,useState as B1,useSyncExternalStore as j1}from"react";import{Pause as N1,Play as I1}from"lucide-react";function El(e,t){return[...e.flatMap(n=>n.controls.clips.flatMap(r=>{let o=n.config?.clips.find(i=>i.sourceName===r);return o?.hidden?[]:[{kind:"clip",id:JSON.stringify(["clip",n.id,r]),label:o?.displayName?.trim()||r,source:n,clip:r}]})),...t.filter(n=>n.tracks.some(r=>!r.muted&&r.keyframes.length&&r.target.kind!=="camera")).map(n=>({kind:"sequence",id:JSON.stringify(["sequence",n.id]),label:n.name,sequence:n}))]}function ja(e,t,n,r=!1){(r||e.kind==="clip"&&n.getState().previewing)&&n.stop(),r&&t.forEach(({controls:o})=>o.stop()),e.kind==="clip"?e.source.controls.play(e.clip):n.play(e.sequence.id)}function jv(e,t){e.kind==="clip"?e.source.controls.pause(e.clip):t.pause()}import{jsx as Ao,jsxs as Iv}from"react/jsx-runtime";function zv({sources:e,sequences:t,sequenceControls:n}){let r=oe(),[o,i]=B1(null),s=_1(null),l=L1(()=>El(e,t),[e,t]),c=Nv(d=>{let b=e.map(h=>h.controls.subscribe?.(d));return b.push(n.subscribe(d)),()=>b.forEach(h=>h?.())},[e,n]),u=Nv(()=>{let d=n.getState();return JSON.stringify([e.map(({controls:b})=>{let h=b.getState?.();return[h?.currentClip,h?.active.map(w=>[w.clip,w.status])]}),[d.sequenceId,d.status,d.previewing,d.ready]])},[e,n]);j1(c,u,u),T1(()=>{let d=s.current,b=h=>h.preventDefault();return d?.addEventListener("beforexrselect",b),()=>d?.removeEventListener("beforexrselect",b)},[l.length]);let p=n.getState(),m=l.find(d=>d.id===o)??l.find(d=>d.kind==="sequence"&&p.previewing&&d.sequence.id===p.sequenceId)??l.find(d=>d.kind==="clip"&&d.source.controls.getState?.().currentClip===d.clip)??l[0];if(!m)return null;let a=m.kind==="clip"?m.source.controls.getState?.().active.some(d=>d.clip===m.clip&&d.status==="playing"):p.sequenceId===m.sequence.id&&p.status==="playing",f=r(a?"arAnimationPause":"arAnimationPlay");return Iv("div",{className:"ri-arAnimations",ref:s,role:"group","aria-label":r("arAnimations"),onPointerDown:d=>d.stopPropagation(),onTouchStart:d=>d.stopPropagation(),onTouchMove:d=>d.stopPropagation(),children:[Iv(Pt,{"aria-label":r("arAnimationSelect"),value:m.id,onChange:d=>{let b=l.find(h=>h.id===d.target.value);b&&(i(b.id),ja(b,e,n,!0))},children:[e.map(d=>{let b=l.filter(h=>h.kind==="clip"&&h.source.id===d.id);return b.length?Ao("optgroup",{label:e.length>1?d.label:r("arAnimationClips"),children:b.map(h=>Ao("option",{value:h.id,children:h.label},h.id))},d.id):null}),l.some(d=>d.kind==="sequence")&&Ao("optgroup",{label:r("arAnimationSequences"),children:l.filter(d=>d.kind==="sequence").map(d=>Ao("option",{value:d.id,children:d.label},d.id))})]}),Ao("button",{type:"button",className:"ri-arActionButton","aria-label":f,title:f,disabled:m.kind==="sequence"&&!p.ready,onClick:()=>{a?jv(m,n):ja(m,e,n)},children:a?Ao(N1,{size:18,"aria-hidden":"true"}):Ao(I1,{size:18,"aria-hidden":"true"})})]})}import{jsx as Ai,jsxs as z1}from"react/jsx-runtime";function Vv({options:e,sources:t,value:n,onChange:r}){let o=oe();if(!e.length)return null;let i=e.filter(u=>u.kind==="clip"?u.source.config?.autoplayClip===u.clip:u.sequence.autoPlay),s=i.length===1?i[0]:void 0,l=s?.label??o(i.length?"arAnimationSaved":"arAnimationNone"),c=s?e.filter(u=>u.id!==s.id):e;return Ai("div",{className:"ri-arAnimations ri-arQuickLookAnimations",children:z1(Pt,{"aria-label":o("arAnimationSelect"),value:s?.id===n?"":n,onChange:u=>r(u.target.value),children:[Ai("option",{value:"",children:l}),t.map(u=>{let p=c.filter(m=>m.kind==="clip"&&m.source.id===u.id);return p.length?Ai("optgroup",{label:t.length>1?u.label:o("arAnimationClips"),children:p.map(m=>Ai("option",{value:m.id,children:m.label},m.id))},u.id):null}),c.some(u=>u.kind==="sequence")&&Ai("optgroup",{label:o("arAnimationSequences"),children:c.filter(u=>u.kind==="sequence").map(u=>Ai("option",{value:u.id,children:u.label},u.id))})]})})}function Fv(e,t,n){return t?e.map(r=>({...r,sceneConfig:{...r.sceneConfig,animations:{clips:r.sceneConfig?.animations.clips??[],autoplayClip:t.kind==="clip"&&r.instanceId===t.source.id?t.clip:null},sequences:(r.sceneConfig?.sequences??[]).map(o=>({...o,autoPlay:t.kind==="sequence"&&r.instanceId===n&&o.id===t.sequence.id}))}})):e}import{useRef as ce,useState as ve,useEffect as De,useCallback as de,useMemo as tt,Suspense as V0,lazy as pD}from"react";import{createPortal as mD}from"react-dom";import{Raycaster as V1,Vector3 as Fd}from"three";var F1=48;async function Hv(e,t,n){let r=await rh(e);return n.aborted||!r?null:H1(e,t)}function H1(e,t){let n=t.getSize(new Fd);if(!(n.x>0&&n.z>0))return null;let r=Math.max(n.x,n.z)/F1,o=Math.max(1,Math.ceil(n.x/r)),i=Math.max(1,Math.ceil(n.z/r)),s=new Uint8Array(o*i),l=new V1;l.firstHitOnly=!0;let c=new Fd(0,-1,0),u=new Fd;l.far=n.y*1.1+r;for(let b=0;b<i;b++)for(let h=0;h<o;h++)u.set(t.min.x+(h+.5)*r,t.max.y+r*.5,t.min.z+(b+.5)*r),l.set(u,c),l.intersectObject(e,!0).some(v=>G1(v.object))&&(s[b*o+h]=1);let p=(b,h)=>b>=0&&h>=0&&b<o&&h<i&&s[h*o+b]===1,m=new Uint8Array(o*i);for(let b=0;b<i;b++)for(let h=0;h<o;h++)p(h,b)&&p(h-1,b)&&p(h+1,b)&&p(h,b-1)&&p(h,b+1)&&(m[b*o+h]=1);let a=m.some(Boolean)?m:s,f=[];for(let b=0;b<i;b++)for(let h=0;h<o;h++)a[b*o+h]&&f.push([t.min.x+(h+.5)*r,t.min.z+(b+.5)*r]);if(f.length===0)return null;let d=n.y*.02;return{minX:t.min.x,minZ:t.min.z,cell:r,cells:f,inside:a,columns:o,rows:i,floor:t.min.y+d,ceiling:t.max.y-d}}function Dl(e,t){let[n,r,o]=t,i=Math.min(e.ceiling,Math.max(e.floor,r)),s=Math.floor((n-e.minX)/e.cell),l=Math.floor((o-e.minZ)/e.cell);if(s>=0&&l>=0&&s<e.columns&&l<e.rows&&e.inside[l*e.columns+s]===1)return i===r?null:[n,i,o];let u=e.cells[0],p=1/0;for(let m of e.cells){let a=(m[0]-n)**2+(m[1]-o)**2;a<p&&(p=a,u=m)}return[u[0],i,u[1]]}function G1(e){for(let t=e;t;t=t.parent)if(!t.visible)return!1;return!0}function Uv(e){return!!(e&&e.points.length>=3&&e.points.every(t=>t.every(Number.isFinite))&&$v(e.points)!==0&&Number.isFinite(e.floor)&&Number.isFinite(e.ceiling)&&e.ceiling>e.floor)}function Gv(e,t,n){let r=!1;for(let o=0,i=e.length-1;o<e.length;i=o++){let[s,l]=e[o],[c,u]=e[i];l>n!=u>n&&t<(c-s)*(n-l)/(u-l)+s&&(r=!r)}return r}function Tl(e,t){let[n,r,o]=t,{points:i}=e,s=i.map(([S])=>S),l=i.map(([,S])=>S),c=Math.max(...s)-Math.min(...s)+(Math.max(...l)-Math.min(...l)),u=e.ceiling-e.floor,p=Math.max(.001,c*.03),m=Math.min(p,u*.25),a=Math.min(e.ceiling-m,Math.max(e.floor+m,r)),f=Gv(i,n,o),d=$v(i)>0?1:-1,b=Math.max(Number.EPSILON,c*1e-10),h=i.flatMap(([S,y],R)=>{let[x,M]=i[(R+1)%i.length],E=x-S,P=M-y,T=E*E+P*P;if(T===0)return[];let O=Math.sqrt(T),k=Math.min(1,Math.max(0,((n-S)*E+(o-y)*P)/T)),D=S+k*E,B=y+k*P;return[{ax:S,az:y,dx:E,dz:P,length:O,t:k,distance:Math.hypot(n-D,o-B)}]});h.sort((S,y)=>S.distance-y.distance);let w=null,v=1/0;for(let[S,y]of h.entries()){let R=Math.min(.25,p/y.length),x=Math.min(1-R,Math.max(R,y.t)),M=y.ax+x*y.dx,E=y.az+x*y.dz,P=-y.dz/y.length*d,T=y.dx/y.length*d,O=U1(i,M,E,P,T,b);if(!Number.isFinite(O))continue;let k=Math.min(p,O*.25);if(S===0&&f&&y.distance+b>=k)return a===r?null:[n,a,o];let D=[M+P*k,E+T*k];if(!Gv(i,D[0],D[1]))continue;let B=Math.hypot(D[0]-n,D[1]-o);B<v&&(w=D,v=B)}return!w||f&&v<=b?a===r?null:[n,a,o]:[w[0],a,w[1]]}function $v(e){return e.reduce((t,[n,r],o)=>{let[i,s]=e[(o+1)%e.length];return t+n*s-i*r},0)}function U1(e,t,n,r,o,i){let s=1/0;for(let l=0;l<e.length;l++){let[c,u]=e[l],[p,m]=e[(l+1)%e.length],a=p-c,f=m-u,d=r*f-o*a;if(Math.abs(d)<=i)continue;let b=((c-t)*f-(u-n)*a)/d,h=((c-t)*o-(u-n)*r)/d;b>i&&h>=0&&h<=1&&(s=Math.min(s,b))}return s}import{Vector3 as Na}from"three";function Hd(e,t,n,r,o,i){let s=new Na(...t);if(s.distanceTo(new Na(...e))>=o)return e;let l=n.clone().sub(r);l.lengthSq()<1e-12&&l.set(0,0,1),l.normalize();let c=[l];for(let m of[-1,0,1])for(let a of[-1,0,1])for(let f of[-1,0,1])(m||a||f)&&c.push(new Na(m,a,f).normalize());c.sort((m,a)=>a.dot(l)-m.dot(l));let u=e,p=s.distanceTo(new Na(...u));for(let m of c){let a=s.clone().addScaledVector(m,o).toArray(),f=i(a)??a,d=s.distanceTo(new Na(...f));if(d>=o*(1-1e-6))return f;d>p&&(u=f,p=d)}return u}import{Box3 as F0,Color as fD,Raycaster as gD,Sphere as bD,Vector2 as hD,Vector3 as oo}from"three";import{Component as $1}from"react";var Yn=class extends $1{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,r){this.props.onLoadError?.(n)}render(){return this.state.hasError?null:this.props.children}};import{useCallback as Wv,useEffect as Xv,useState as W1}from"react";function qv({enabled:e,activeUrl:t,models:n,errorsRef:r,activeFailed:o,activeError:i,onActiveError:s,onExtraError:l}){let[c,u]=W1(0),p=Wv((a,f)=>{r.current.set(a,f),u(d=>d+1),a!==t&&l?.(a,f)},[t,r,l]),m=Wv(a=>{r.current.delete(a)&&u(f=>f+1)},[r]);return Xv(()=>{let a=new Set(e?n?.map(ke):[]);for(let f of r.current.keys())a.has(f)||r.current.delete(f)},[e,n,r]),Xv(()=>{if(!e||!r.current.has(t))return;let a=r.current.get(t);o&&Object.is(i,a)||s(a)},[e,t,n,r,c,o,i,s]),{reportError:p,clearError:m}}import{useCallback as X1,useEffect as Kv,useRef as Ll}from"react";function Qv(e,t){let n=Ll({}),r=Ll({}),o=Ll({}),i=Ll(0),s=X1(l=>{var c;return(c=o.current)[l]??(c[l]={current:{}})},[]);return Kv(()=>{let l=new Set(e?t?.map(ke):[]);for(let c of Object.keys(n.current))l.has(c)||delete n.current[c];for(let c of Object.keys(r.current))l.has(c)||delete r.current[c];for(let c of Object.keys(o.current))l.has(c)||(o.current[c].current={},delete o.current[c])},[e,t]),Kv(()=>{let l=++i.current;return()=>{queueMicrotask(()=>{i.current===l&&(n.current={},r.current={},Object.values(o.current).forEach(c=>{c.current={}}),o.current={})})}},[]),{scenesByUrlRef:n,cameraHomesByUrlRef:r,materialRefsByUrlRef:o,getMaterialRefsForUrl:s}}import{useCallback as Jv,useEffect as Q1,useState as Yv}from"react";import{useEffect as q1,useRef as K1}from"react";function yr(e,t){let n=K1(t);q1(()=>{let r=n.current;n.current=t,t.some((o,i)=>!Object.is(o,r[i]))&&e()},t)}var J1={};function Zv({modelUrl:e,activeModelId:t,tilesetUrl:n,models:r,objectBindings:o="auto",onChange:i,initialBindings:s,initialModelEdits:l}){let c=t??e,u=!!(r?.length&&!n),p=o==="auto"&&!u,m=!p&&i!==void 0,a=o==="auto"?J1:o,[f,d]=Yv(()=>s??a),[b,h]=Yv(()=>{let R=new Map(l),x=u?r?.find(M=>ke(M)===c):void 0;return x&&s&&l===void 0&&R.set(c,{source:x.objectBindings,bindings:s}),R});yr(()=>{m||d(a)},[m,a]),Q1(()=>{let R=new Map(u?r?.map(x=>[ke(x),x.objectBindings]):[]);h(x=>{let M=[...x].filter(([E,P])=>!m&&R.get(E)===P.source);return M.length===x.size?x:new Map(M)})},[u,r,m]);let w=Jv(R=>{let x=m?void 0:b.get(ke(R));return x?.source===R.objectBindings?x.bindings:R.objectBindings},[m,b]),v=u?r?.find(R=>ke(R)===c):void 0,S=v?w(v):m?a:f,y=Jv(R=>{m||(v?h(x=>new Map(x).set(ke(v),{source:v.objectBindings,bindings:R})):d(R)),i?.(R)},[m,v,i]);return{autoBindings:p,controlled:m,currentBindings:S,applyBindings:y,bindingsForModel:w,modelEdits:b}}import{PerspectiveCamera as Gd,Vector2 as Y1}from"three";function _l(e,t={}){if(!e)return Promise.reject(new Error("Viewer not ready"));let{gl:n,scene:r,camera:o,invalidate:i}=e,s=Wr(n);if(!s&&!n.getContextAttributes().preserveDrawingBuffer)return Promise.reject(new Error("Screenshot capture is disabled. Set preserveDrawingBuffer on ModelViewer to enable it."));let{transparent:l=!1,type:c="image/png",quality:u}=t,p=n.getSize(new Y1),m=n.getPixelRatio(),a=o instanceof Gd?o.aspect:null,f=r.background,d=t.width??p.x,b=t.height??p.y,h=d!==p.x||b!==p.y,w=Qs(r);l&&(r.background=null),h&&(n.setPixelRatio(1),n.setSize(d,b,!1),o instanceof Gd&&(o.aspect=d/b,o.updateProjectionMatrix()));let v=()=>{w(),l&&(r.background=f),h&&(n.setPixelRatio(m),n.setSize(p.x,p.y,!1),o instanceof Gd&&a!==null&&(o.aspect=a,o.updateProjectionMatrix())),i()};if(s)try{return n.render(r,o),Promise.resolve(n.domElement.toDataURL(c,u))}catch(S){return Promise.reject(S)}finally{v()}return i(),new Promise((S,y)=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{let R,x;try{R=n.domElement.toDataURL(c,u)}catch(M){x=M}v(),x?y(x):S(R)})})})}import{useEffect as Z1,useRef as eP}from"react";import{GizmoHelper as tP,GizmoViewport as nP}from"@react-three/drei";import{useThree as rP}from"@react-three/fiber";import{jsx as Ud}from"react/jsx-runtime";function ey({onUpdate:e}){let t=rP(r=>r.scene),n=eP(null);return Z1(()=>{if(n.current)return Hg(t,n.current)},[t]),Ud(tP,{alignment:"top-right",margin:[80,80],renderPriority:2,onUpdate:e,children:Ud("group",{ref:n,children:Ud(nP,{axisColors:["#e5484d","#46a758","#3e8bff"],labelColor:"white"})})})}import{useCallback as jl,useEffect as uP,useRef as iy,useState as ay}from"react";import{Vector3 as sy}from"three";import{useEffect as Bl,useMemo as xr,useRef as wr}from"react";import{useFrame as oP,useThree as iP}from"@react-three/fiber";import{Box3 as aP,CatmullRomCurve3 as ty,Sphere as sP,Spherical as lP,Vector3 as Jr}from"three";function $d(e){if(e.duration!==void 0)return e.duration;let t=e.waypoints??[];if(t.length<2)return 24;let n=e.loop===!1?t.slice(0,-1):t;return Math.max(n.reduce((r,o)=>r+(o.segmentDuration??3.5),0),4)}var cP=1.2;function Oi({controlsRef:e,sceneRef:t,config:n,playing:r,resetOnPlay:o=!1,onFinished:i,onUserInteract:s,onStop:l,playOnce:c=!1,startAtPath:u=!1,onStarted:p,onProgress:m}){let a=iP(z=>z.invalidate),f=xr(()=>n.waypoints??[],[n.waypoints]),d=f.length>=2,b=n.loop??!0,h=$d(n),w=xr(()=>f.map(z=>[...z.position,...z.target,z.azimuthAngle??"",z.polarAngle??"",z.segmentDuration??""].join(",")).join(";"),[f]),v=xr(()=>{let z=[];if(f.length<2)return z;let A=0;for(let $=0;$<f.length-1;$++)A+=f[$].segmentDuration??3.5,z.push(A);return b&&f.length>1&&(A+=f[f.length-1].segmentDuration??3.5,z.push(A)),z},[f,b]),S=xr(()=>z=>{if(f.length<2||v.length===0)return z/h;let A=v[v.length-1],$=b?z%h:Math.min(z,h),J=h>0?$/h*A:0;for(let ae=0;ae<v.length;ae++)if(J<=v[ae]){let Z=ae===0?0:v[ae-1],Y=v[ae]-Z,te=Y>0?(J-Z)/Y:0,U=b?f.length:f.length-1,N=ae/U,K=1/U;return N+te*K}return 1},[f.length,v,h,b]),y=xr(()=>d?{position:new ty(f.map(z=>new Jr(...z.position)),b,"catmullrom",.5),target:new ty(f.map(z=>new Jr(...z.target)),b,"catmullrom",.5)}:null,[w,d,b]),R=xr(()=>{if(!d||!f.every(A=>Number.isFinite(A.azimuthAngle)&&Number.isFinite(A.polarAngle)))return null;let z=f.map(A=>({azimuth:A.azimuthAngle,polar:A.polarAngle,distance:new Jr(...A.position).distanceTo(new Jr(...A.target))}));for(let A=1;A<z.length;A+=1){let $=z[A-1].azimuth,J=z[A].azimuth;z[A].azimuth=J+Math.round(($-J)/(Math.PI*2))*Math.PI*2}return z},[w,d]),x=wr(0),M=wr(0),E=wr(new Jr),P=wr(new Jr),T=wr(!1),O=wr(!0),k=wr(0),D=wr(!1),B=wr(null),H=xr(()=>new Jr,[]),V=xr(()=>new Jr,[]),W=xr(()=>new lP,[]);return Bl(()=>{x.current=0,k.current=0,M.current=0,D.current=!1},[w,b,h]),Bl(()=>{o&&(k.current=0,x.current=0,D.current=!1)},[o]),Bl(()=>{if(!r){T.current=!1,x.current>0&&!o?k.current=x.current:o&&(k.current=0),(x.current>0||D.current)&&l?.();return}x.current>=h&&!b&&(x.current=0,k.current=0,D.current=!1);let z=e.current;if(z&&(z.getPosition(E.current),z.getTarget(P.current)),o||D.current||k.current===0?(x.current=0,k.current=0,D.current=!1):k.current>0&&k.current<h?x.current=k.current:(x.current=0,k.current=0),M.current=0,!d){let A=t.current;if(A){let $=new aP().setFromObject(A).getBoundingSphere(new sP);B.current={center:$.center.clone(),radius:$.radius>0?$.radius:1}}}T.current=!0,O.current=!0,a()},[r,d,e,t,a,h,b,w,o,l]),Bl(()=>{if(!r||!s)return;let z=e.current;if(!z)return;let A=()=>{D.current||s()};return z.addEventListener("controlstart",A),()=>z.removeEventListener("controlstart",A)},[r,e,s]),oP((z,A)=>{if(!r||!T.current)return;let $=e.current;if(!$)return;let J=O.current;O.current=!1,(!J||!u)&&(x.current+=A,M.current+=A);let ae=(!b||c)&&x.current>=h,Z=ae&&b?0:S(x.current);if(Z=b?Z%1:Math.min(Z,1),y)if(y.target.getPoint(Z,V),R){let te=b?R.length:R.length-1,U=Math.min(Z,1)*te,N=Math.min(Math.floor(U),te-1),K=(N+1)%R.length,ne=Z>=1?1:U-N,Fe=ne*ne*(3-2*ne),Q=R[N],Ce=R[K],Ee=Ce.azimuth+Math.round((Q.azimuth-Ce.azimuth)/(Math.PI*2))*Math.PI*2,we=Q.azimuth+(Ee-Q.azimuth)*Fe,pt=Q.polar+(Ce.polar-Q.polar)*Fe,qe=Q.distance+(Ce.distance-Q.distance)*Fe;W.set(Math.max(qe,1e-6),Math.min(Math.max(pt,1e-6),Math.PI-1e-6),we),H.setFromSpherical(W).add(V)}else y.position.getPoint(Z,H);else{let te=B.current;if(!te)return;let U=Z*Math.PI*2,N=te.radius*2.2;H.set(te.center.x+Math.cos(U)*N,te.center.y+te.radius*.6,te.center.z+Math.sin(U)*N),V.copy(te.center)}let Y=u?1:Math.min(M.current/cP,1);if(Y<1){let te=Y*Y*(3-2*Y);H.lerpVectors(E.current,H,te),V.lerpVectors(P.current,V,te)}if($.setLookAt(H.x,H.y,H.z,V.x,V.y,V.z,!1),J&&p?.(),m?.(Math.min(x.current/h,1)),ae){T.current=!1,D.current=!0,x.current=0,k.current=0,i?.();return}a()}),null}function ny(){return typeof document<"u"&&typeof HTMLCanvasElement<"u"&&typeof HTMLCanvasElement.prototype.captureStream=="function"}function ry(e,t={}){let{fps:n=15,gifWidth:r=480,signal:o}=t;if(!Number.isFinite(n)||n<1||n>60)throw new Error("Video frame rate must be between 1 and 60.");if(!Number.isInteger(r)||r<16||r>4096)throw new Error("GIF width must be a whole number of pixels from 16 to 4096.");if(o?.aborted)throw new DOMException("Video export cancelled.","AbortError");if(typeof e.captureStream!="function"||typeof document>"u")throw new Error("Video recording as GIF is not supported in this browser.");let i=1e3/n,s,l,c,u=null,p,m=0,a=0,f=0,d=null,b=0,h=0,w=0,v=!1,S=!1,y,R,x,M,E,P,T=new Promise((A,$)=>{E=A,P=$}),O=()=>{clearTimeout(y),clearInterval(R),x!==void 0&&cancelAnimationFrame(x),M!==void 0&&cancelAnimationFrame(M),o?.removeEventListener("abort",D),e.removeEventListener("webglcontextlost",B),c&&(c.pause(),c.srcObject=null),l?.getTracks().forEach(A=>A.stop())},k=(A=new DOMException("Video export cancelled.","AbortError"))=>{v||(v=!0,O(),P(A))},D=()=>k(),B=()=>k(new Error("Video export stopped because the WebGL context was lost.")),H=()=>k(new Error("Video export timed out. Keep the viewer tab visible while recording."));o?.addEventListener("abort",D,{once:!0}),e.addEventListener("webglcontextlost",B),y=setTimeout(H,3e4);let V=(async()=>{if(s=await import("gifenc"),!v&&(l=e.captureStream(n),c=document.createElement("video"),c.muted=!0,c.playsInline=!0,c.srcObject=l,await c.play(),!v)){if(u=document.createElement("canvas").getContext("2d",{willReadFrequently:!0}),!u)throw new Error("Video recording as GIF is not supported in this browser.");p=s.GIFEncoder()}})().catch(A=>k(A)),W=A=>{if(!d||!p)return;let $=Math.max(2,Math.round((A-b)/10)-w);w+=$,p.writeFrame(d.index,m,a,{palette:d.palette,delay:$*10}),d=null},z=()=>{if(v||!s||!c||!u||!p||c.readyState<2||!c.videoWidth)return;let A=performance.now();if(!(f>0&&A-h<i/2)){m||(m=Math.min(r,c.videoWidth),a=Math.max(1,Math.round(m*c.videoHeight/c.videoWidth)),u.canvas.width=m,u.canvas.height=a);try{u.drawImage(c,0,0,m,a);let{data:$}=u.getImageData(0,0,m,a),J=s.quantize($,256),ae=s.applyPalette($,J);f===0&&(b=A),W(A),d={index:ae,palette:J},h=A,f+=1}catch($){k($)}}};return{result:T,cancel:k,start(A){v||x!==void 0||(x=requestAnimationFrame(()=>{V.then(()=>{v||(z(),R=setInterval(z,i),clearTimeout(y),y=setTimeout(H,(A+30)*1e3))})}))},finish(){v||S||(S=!0,M=requestAnimationFrame(()=>{V.then(()=>{if(v||(z(),v))return;if(!p||f===0){k(new Error("The browser produced an empty video."));return}W(h+i),p.finish();let A=new Blob([p.bytes()],{type:"image/gif"});v=!0,O(),E(A)})}))}}}var Wd={webm:["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"],mp4:["video/mp4;codecs=avc1.42E01E","video/mp4"]};function Sr(e="auto"){return e==="gif"?ny()?"image/gif":null:typeof MediaRecorder>"u"?null:(e==="auto"?[...Wd.webm,...Wd.mp4]:Wd[e]).find(n=>MediaRecorder.isTypeSupported(n))??null}function oy(e,t={}){if(t.format==="gif")return ry(e,t);let{fps:n=30,videoBitsPerSecond:r=8e6,signal:o}=t;if(!Number.isFinite(n)||n<1||n>60)throw new Error("Video frame rate must be between 1 and 60.");if(!Number.isFinite(r)||r<=0)throw new Error("Video bitrate must be a positive number.");if(o?.aborted)throw new DOMException("Video export cancelled.","AbortError");let i=Sr(t.format);if(!i||typeof e.captureStream!="function"){let x=t.format&&t.format!=="auto"?` as ${t.format.toUpperCase()}`:"";throw new Error(`Video recording${x} is not supported in this browser.`)}let s,l,c=!1,u=!1,p,m,a,f=[],d,b,h=new Promise((x,M)=>{d=x,b=M}),w=()=>{clearTimeout(p),m!==void 0&&cancelAnimationFrame(m),a!==void 0&&cancelAnimationFrame(a),o?.removeEventListener("abort",S),e.removeEventListener("webglcontextlost",y),l&&(l.ondataavailable=null,l.onstop=null,l.onerror=null),s?.getTracks().forEach(x=>x.stop())},v=(x=new DOMException("Video export cancelled.","AbortError"))=>{if(!c){if(c=!0,w(),l&&l.state!=="inactive")try{l.stop()}catch{}b(x)}},S=()=>v(),y=()=>v(new Error("Video export stopped because the WebGL context was lost.")),R=()=>v(new Error("Video export timed out. Keep the viewer tab visible while recording."));return o?.addEventListener("abort",S,{once:!0}),e.addEventListener("webglcontextlost",y),p=setTimeout(R,3e4),{result:h,cancel:v,start(x){c||m!==void 0||(m=requestAnimationFrame(()=>{if(!c)try{s=e.captureStream(n);let M=new MediaRecorder(s,{mimeType:i,videoBitsPerSecond:r});l=M,M.ondataavailable=({data:E})=>{E.size>0&&f.push(E)},M.onerror=()=>v(new Error("The browser could not encode the video.")),M.onstop=()=>{if(c)return;c=!0,w();let E=new Blob(f,{type:M.mimeType||i});E.size===0?b(new Error("The browser produced an empty video.")):d(E)},M.start(1e3),clearTimeout(p),p=setTimeout(R,(x+30)*1e3)}catch(M){v(M)}}))},finish(){c||u||(u=!0,a=requestAnimationFrame(()=>{if(!c)try{if(!l)throw new Error("Video recording did not start.");l.stop()}catch(x){v(x)}}))}}}function ly(e){let t=iy(e);t.current=e;let n=iy(null),[r,o]=ay(null),[i,s]=ay(0),l=jl(()=>n.current?.cancel(),[]),c=jl(()=>n.current!==null,[]);uP(()=>l,[e.modelUrl,l]);let u=jl(async(m={})=>{let{rendererCaptureRef:a,controlsRef:f,cinematicConfig:d,ready:b,onCaptureStart:h}=t.current,w=a.current,v=f.current;if(!b||!w||!v)throw new Error("Viewer not ready for video export.");if(w.gl.xr.isPresenting)throw new Error("Exit the XR session before recording a video.");if(n.current)throw new Error("A video export is already in progress.");let S=m.mode??(d?"cinematic":"turntable");if(S==="cinematic"&&!d)throw new Error("Enable a cinematic camera path before recording it.");let y=S==="cinematic"?d:{loop:!0},R=m.duration??(S==="turntable"&&m.format==="gif"?8:$d(y));if(!Number.isFinite(R)||R<=0||R>300)throw new Error("Video duration must be greater than 0 and at most 300 seconds.");let x=oy(w.gl.domElement,m);n.current=x;let M=v.getPosition(new sy),E=v.getTarget(new sy),P=v.enabled,T=Qs(w.scene);v.stop(),v.enabled=!1,s(0),h(),o({config:{...y,duration:R,autoPlay:!1},onStarted:()=>x.start(R),onFinished:x.finish});try{return await x.result}finally{T(),v.enabled=P,v.setLookAt(M.x,M.y,M.z,E.x,E.y,E.z,!1),w.invalidate(),n.current=null,o(null)}},[]),p=jl(m=>{let a=Math.floor(m*100);s(f=>f===a?f:a)},[]);return{captureVideo:u,cancelVideo:l,isRecording:c,recording:r,progress:i,onProgress:p}}import{useCallback as dP,useEffect as pP,useRef as mP,useState as Ia}from"react";function cy(e){let[t,n]=Ia(null),[r,o]=Ia(!1),[i,s]=Ia(!1),[l,c]=Ia(!1),[u,p]=Ia(null),m=mP(!1);pP(()=>{if(!t||!e){o(!1),s(!1),p(null);return}let f=t.ownerDocument;o(f.fullscreenEnabled===!0&&typeof t.requestFullscreen=="function"&&typeof f.exitFullscreen=="function");let d=()=>{s(f.fullscreenElement===t),p(null)};return d(),f.addEventListener("fullscreenchange",d),()=>f.removeEventListener("fullscreenchange",d)},[t,e]);let a=dP(async()=>{if(!t||!e||!r||m.current)return;let f=t.ownerDocument,d=f.fullscreenElement===t;m.current=!0,c(!0),p(null);try{d?await f.exitFullscreen():await t.requestFullscreen(),s(f.fullscreenElement===t)}catch{p(d?"Could not exit fullscreen. Press Escape to exit.":"Could not enter fullscreen. Check your browser or iframe fullscreen permissions and try again.")}finally{m.current=!1,c(!1)}},[t,e,r]);return{rootRef:n,supported:r,active:i,pending:l,error:u,toggle:a}}import{useCallback as Nl,useEffect as dy,useRef as za,useState as Xd}from"react";function uy(e,{onLost:t,onRestored:n,initiallyLost:r=!1}){let o=r,i=l=>{l.preventDefault(),!o&&(o=!0,t())},s=()=>{o&&(o=!1,n())};return e.addEventListener("webglcontextlost",i),e.addEventListener("webglcontextrestored",s),r&&t(),()=>{e.removeEventListener("webglcontextlost",i),e.removeEventListener("webglcontextrestored",s)}}function py(e){let t=za(e);t.current=e;let[n,r]=Xd(null),[o,i]=Xd(0),[s,l]=Xd("ready"),c=za(null),u=za(!1),p=za(null),m=za(null),a=Nl(h=>{m.current?.dispose(),m.current=null,p.current=h,r(h)},[]),f=Nl(()=>{u.current||(u.current=!0,t.current?.(),c.current?.(),c.current=null,p.current&&(m.current=p.current),p.current=null,r(null),l("rebuilding"),i(h=>h+1))},[]),d=Nl(()=>{c.current?.(),c.current=null;let h=p.current;p.current=null,r(null),h&&uh(h)},[]),b=Nl(()=>{u.current=!1,l("lost")},[]);return dy(()=>()=>{m.current?.dispose(),m.current=null},[]),dy(()=>{if(!n)return;if(u.current=!1,l("ready"),Wr(n)){let w=n,v=w.onDeviceLost;return w.onDeviceLost=S=>{console.warn("[react-immersive] The WebGPU device was lost.",S),b()},()=>{w.onDeviceLost=v}}let h=uy(n.domElement,{initiallyLost:n.getContext().isContextLost(),onLost:b,onRestored:f});return c.current=h,()=>{h(),c.current===h&&(c.current=null)}},[n,b,f]),{generation:o,status:s,reload:f,fail:b,release:d,onRendererCreated:a}}function Il(e,t){return t||e}async function my(e,t){await e.setLookAt(...t.position,...t.target,!1);let n=e.camera;t.fov!=null&&Number.isFinite(t.fov)&&t.fov>0&&t.fov<180&&"fov"in n&&(n.fov=t.fov,n.updateProjectionMatrix()),t.zoom!=null&&Number.isFinite(t.zoom)&&t.zoom>0&&await e.zoomTo(t.zoom,!1)}import{Component as fP}from"react";var Ei=class extends fP{constructor(){super(...arguments);this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(n,r){this.props.onError?.(n)}render(){return this.state.hasError?this.props.fallback??null:this.props.children}};import{useEffect as gP,useMemo as bP,useRef as hP}from"react";function fy({modelUrl:e,tilesetUrl:t=null,getOptions:n,now:r=()=>performance.now(),timestamp:o=()=>new Date().toISOString(),sessionId:i=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`viewer-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`,log:s=c=>console.info("[react-immersive engagement]",c),warn:l=c=>console.warn("[react-immersive] onEngagement callback failed:",c)}){let c=r(),u=()=>{let O=n();return!!(O.onEngagement||O.debugEngagement)},p=O=>Math.max(0,Math.round(r()-O)),m=O=>{let{onEngagement:k,debugEngagement:D}=n();if(!k&&!D)return;let B={...O,sessionId:i,timestamp:o(),elapsedMs:p(c),modelUrl:e,tilesetUrl:t};D&&s(B);try{Promise.resolve(k?.(B)).catch(l)}catch(H){l(H)}},a=null,f=null,d="[]",b=null,h=null,w=O=>{a=O},v=O=>{!u()||a===O.objectKey||(a=O.objectKey,m({type:"part-viewed",...O}))},S=(O,k,D=null)=>{let B=JSON.stringify([D,k,O]);!u()||O===k||B===f||(f=B,m({type:"variant-chosen",variant:O,previousVariant:k,group:D}))},y=O=>{let k=JSON.stringify(O);k!==d&&(d=k,f=null)},R=()=>{!u()||b!==null||(b=r(),m({type:"ar-started"}))},x=(O="session-ended")=>{if(b===null)return;let k=p(b);b=null,m({type:"ar-ended",durationMs:k,reason:O})},M=(O="stopped")=>{if(!h)return;let{startedAt:k,annotationCount:D}=h;h=null,m({type:"tour-stopped",annotationCount:D,durationMs:p(k),reason:O})};return{setSelectedPart:w,viewPart:v,setActiveVariants:y,chooseVariant:S,startAR:R,endAR:x,startTour:O=>{!u()||O<=0||(M("restarted"),h={startedAt:r(),annotationCount:O},m({type:"tour-started",annotationCount:O}))},stopTour:M,completeTour:()=>{if(!h)return;let{startedAt:O,annotationCount:k}=h;h=null,m({type:"tour-completed",annotationCount:k,durationMs:p(O)})},interrupt:()=>{x("interrupted"),M("interrupted")},requestARLaunch:O=>m({type:"ar-launch-requested",channel:O})}}function gy(e){let t=hP(e);t.current=e;let n=!!(e.onEngagement||e.debugEngagement),r=bP(()=>fy({modelUrl:e.modelUrl,tilesetUrl:e.tilesetUrl,getOptions:()=>t.current}),[e.modelUrl,e.tilesetUrl,n]);return gP(()=>()=>r.interrupt(),[r]),r}import{Color as vP}from"three";function by(e,t,n){let r=t[n]?.modelObjectId;return e.lighting.lights.filter(o=>{let i=o.attachment?.objectId;return i?Ys(t,i)===n||i===r:!1})}function qd(e,t){return e.lighting.lights.some(n=>t[n.id])?{...e,lighting:{...e.lighting,lights:e.lighting.lights.map(n=>t[n.id]?{...n,...t[n.id]}:n)}}:e}function hy(e){let t=null;if(e?.traverse(o=>{if(t)return;let i=o.material;for(let s of Array.isArray(i)?i:i?[i]:[])if(s.emissive instanceof vP){t=s;return}}),!t)return{color:"#000000",intensity:0,on:!1};let n=`#${t.emissive.getHexString()}`,r=t.emissiveIntensity??1;return{color:n,intensity:r,on:n!=="#000000"&&r>0}}import{lazy as yP,Suspense as xP}from"react";import{jsx as Kd}from"react/jsx-runtime";var wP=yP(()=>import("react-colorful").then(e=>({default:e.HexColorPicker})));function zl(e){return Kd(xP,{fallback:Kd("div",{"aria-hidden":"true",style:{width:200,height:200}}),children:Kd(wP,{...e})})}import{Fragment as vy,jsx as Yr,jsxs as Va}from"react/jsx-runtime";function yy({kind:e,color:t,brightness:n,onColorChange:r,onBrightnessChange:o,onClose:i}){return Yr("div",{className:"ri-popover ri-popover--inline",style:{padding:12},onPointerDown:s=>s.stopPropagation(),children:e==="change-light-color"?Va(vy,{children:[Yr("p",{className:"ri-popoverLabel",children:"Light color"}),Yr(zl,{color:t,onChange:r}),Va("div",{className:"ri-inlineRow",children:[Yr("span",{className:"ri-colorCode",children:t}),Yr("button",{className:"ri-secondaryButton",onClick:i,children:"Done"})]})]}):Va(vy,{children:[Yr("p",{className:"ri-popoverLabel",children:"Brightness"}),Yr("input",{type:"range",min:0,max:200,step:1,value:n,"aria-label":"Brightness",style:{width:"100%"},onChange:s=>o(Number(s.target.value))}),Va("div",{className:"ri-inlineRow",children:[Va("span",{className:"ri-colorCode",children:[n,"%"]}),Yr("button",{className:"ri-secondaryButton",onClick:i,children:"Done"})]})]})})}import{useCallback as Qd,useRef as SP}from"react";var Vl=e=>e==="#000000"?"#ffffff":e;function xy({nodeRefsMap:e,currentObjectBindingsRef:t,applyObjectBindings:n}){let r=SP({}),o=Qd(s=>{let l=hy(e.current[s]),c=t.current[s]?.style?.material,u=c?.emissive??l.color,p=c?.emissiveIntensity??l.intensity;return{color:u,intensity:p,on:u!=="#000000"&&p>0}},[]),i=Qd((s,l)=>{let c=t.current,u=c[s];u&&n({...c,[s]:{...u,style:{...u.style,material:{...u.style?.material,...l}}}})},[n]);return{glowMemoryRef:r,readObjectGlow:o,applyGlow:i}}function wy({setCurrentAction:e,bindingKeyIndex:t,currentObjectBindings:n,applyObjectBindings:r,resolveObjectKey:o,closeColorPicker:i,setColorPicker:s,setMaterialPopupsByObject:l,setItemMaterials:c,getPopoverPosition:u,decalRequestRef:p,setDecalError:m,setDecalDragging:a,setDecalControl:f,resolvedSceneConfigRef:d,applyLightPatches:b,readObjectGlow:h,applyGlow:w,glowMemoryRef:v,setLightControl:S,onAction:y}){return Qd(R=>{let{objectId:x,action:M,binding:E}=R;switch(e(R),M.id){case"toggle-visibility":{let P=x;E?.modelObjectId&&(P=t.byModelObjectId.get(E.modelObjectId)??P);let T=n[P],O=T?.visible===!1;T&&r({...n,[P]:{...T,visible:O}});break}case"change-color":i(),l(P=>{if(!(x in P))return P;let T={...P};return delete T[x],T}),s(u(x,225,250,E,R));break;case"change-material":i(),l(P=>{if(x in P){let T={...P};return delete T[x],T}return{...P,[x]:u(x,300,320,E,R)}});break;case"add-text":case"add-image":{i();let P=M.id;p.current++,m(null),a(null),f(T=>T?.objectId===x&&T.kind===P?null:{objectId:x,kind:P,activeId:null});break}case"toggle-light":case"change-light-color":case"set-brightness":{let P=o(x,E);if(!P)break;let T=by(d.current,n,P);if(M.id==="toggle-light"){if(T.length>0){let B=!T.some(H=>H.visible);b(Object.fromEntries(T.map(H=>[H.id,{visible:B}])));break}let D=h(P);D.on?(v.current[P]=D.intensity,w(P,{emissiveIntensity:0})):w(P,{emissive:Vl(D.color),emissiveIntensity:v.current[P]??1});break}let O=M.id,k=T.length>0?null:h(P);S(D=>D?.objectId===x&&D.kind===O?null:{objectId:x,kind:O,target:k?{type:"glow",objectKey:P,baseIntensity:k.on?k.intensity:v.current[P]??1}:{type:"lights",lightIds:T.map(B=>B.id),baseIntensity:Object.fromEntries(T.map(B=>[B.id,B.intensity]))},percent:k&&!k.on?0:100});break}default:break}y?.(R)},[r,w,b,h,n,u,y,i,o,t])}import{jsx as CP}from"react/jsx-runtime";function Sy({control:e,lights:t,readObjectGlow:n,applyGlow:r,glowMemoryRef:o,applyLightPatches:i,onControlChange:s}){let l=e.target,c=l.type==="lights"?t.find(u=>u.id===l.lightIds[0])?.color??"#ffffff":Vl(n(l.objectKey).color);return CP(yy,{kind:e.kind,color:c,brightness:e.percent,onColorChange:u=>{if(l.type==="lights"){i(Object.fromEntries(l.lightIds.map(m=>[m,{color:u}])));return}let p=n(l.objectKey);r(l.objectKey,{emissive:u,emissiveIntensity:p.intensity>0?p.intensity:o.current[l.objectKey]??1})},onBrightnessChange:u=>{if(s({...e,percent:u}),l.type==="lights"){i(Object.fromEntries(l.lightIds.map(p=>[p,{intensity:(l.baseIntensity[p]??0)*(u/100)}])));return}r(l.objectKey,{emissive:Vl(n(l.objectKey).color),emissiveIntensity:l.baseIntensity*(u/100)})},onClose:()=>s(null)})}import{useRef as OP,useState as ky}from"react";import{ArrowDown as MP,ArrowLeft as PP,ArrowRight as kP,ArrowUp as RP}from"lucide-react";import{useEffect as AP,useRef as Jd}from"react";function Cy(e){let t=!1,n,r=()=>{t||(e(),t||(n=setTimeout(r,70)))};return e(),n=setTimeout(r,300),()=>{t=!0,clearTimeout(n)}}import{jsx as Fa,jsxs as My}from"react/jsx-runtime";function Py({onNudge:e}){let t=oe(),n=Jd(e);n.current=e;let r=Jd(null),o=Jd(null),i=()=>{r.current?.(),r.current=null,o.current=null};return AP(()=>{let s=c=>{c.pointerId===o.current&&i()},l=c=>{c.key==="Escape"&&i()};return window.addEventListener("pointerup",s,!0),window.addEventListener("pointercancel",s,!0),window.addEventListener("blur",i),window.addEventListener("keydown",l),()=>{i(),window.removeEventListener("pointerup",s,!0),window.removeEventListener("pointercancel",s,!0),window.removeEventListener("blur",i),window.removeEventListener("keydown",l)}},[]),My("div",{className:"ri-decalPosition",children:[My("div",{children:[Fa("div",{className:"ri-decalPosition__label",children:t("position")}),Fa("div",{className:"ri-decalPosition__hint",children:t("decalNudgeHint")})]}),Fa("div",{className:"ri-decalPosition__pad",role:"group","aria-label":t("decalNudgeControls"),children:[["up",RP],["left",PP],["right",kP],["down",MP]].map(([s,l])=>Fa("button",{type:"button",className:`ri-decalPosition__button ri-decalPosition__button--${s}`,"aria-label":t("moveDecal",{direction:t(s)}),title:t("moveDecalOnSurface",{direction:t(s)}),onPointerDown:c=>{c.button===0&&(c.preventDefault(),c.currentTarget.focus({preventScroll:!0}),i(),o.current=c.pointerId,r.current=Cy(()=>n.current(s)))},onClick:c=>{c.detail===0&&n.current(s)},children:Fa(l,{size:16})},s))})]})}import{Fragment as Ry,jsx as Rt,jsxs as Zn}from"react/jsx-runtime";var EP=e=>Math.round(e*180/Math.PI);function Ay({kind:e,decals:t,activeId:n,error:r,moving:o,defaultSize:i,onSelect:s,onAddText:l,onAddImage:c,onChange:u,onMove:p,onNudge:m,onRemove:a,onClose:f}){let d=oe(),[b,h]=ky(""),[w,v]=ky("#ffffff"),S=OP(null),y=t.find(x=>x.id===n)??null;return Zn("div",{className:"ri-popover ri-popover--inline ri-decalControl",onPointerDown:x=>x.stopPropagation(),children:[e==="add-text"?Zn(Ry,{children:[Rt("p",{className:"ri-popoverLabel",children:d("text")}),Zn("div",{className:"ri-decalControl__row",children:[Rt("input",{className:"ri-decalControl__input",value:b,placeholder:d("yourText"),"aria-label":d("textToAdd"),onChange:x=>h(x.target.value)}),Rt("input",{type:"color",className:"ri-decalControl__color",value:w,"aria-label":d("textColour"),onChange:x=>v(x.target.value)})]}),Rt("button",{type:"button",className:"ri-uploadButton",disabled:!b.trim(),onClick:()=>{l(b.trim(),w)&&h("")},children:d("addText")})]}):Zn(Ry,{children:[Rt("p",{className:"ri-popoverLabel",children:d("image")}),Rt("button",{type:"button",className:"ri-uploadButton",onClick:()=>S.current?.click(),children:d("chooseImage")}),Rt("input",{ref:S,type:"file",accept:"image/png,image/jpeg,image/webp,image/svg+xml",className:"ri-hiddenInput","aria-label":d("imageToAdd"),onChange:x=>{let M=x.target.files?.[0];x.target.value="",M&&c(M)}})]}),r?Rt("div",{className:"ri-decalControl__hint",role:"alert",children:r}):null,t.length>0?Rt("div",{className:"ri-decalControl__list",role:"group","aria-label":d("added"),children:t.map((x,M)=>Rt("button",{type:"button",className:`ri-decalControl__chip ${x.id===n?"ri-decalControl__chip--active":""}`,"aria-pressed":x.id===n,onClick:()=>s(x.id),children:x.image?d("decalImage",{index:M+1}):x.text||d("decalText",{index:M+1})},x.id))}):null,y?Zn("div",{className:"ri-decalControl__editor",children:[Rt(Py,{onNudge:x=>m(y.id,x)}),y.image?null:Zn("div",{className:"ri-decalControl__row",children:[Rt("input",{className:"ri-decalControl__input",value:y.text??"","aria-label":d("text"),onChange:x=>u(y.id,{text:x.target.value})}),Rt("input",{type:"color",className:"ri-decalControl__color",value:y.color??"#ffffff","aria-label":d("colour"),onChange:x=>u(y.id,{color:x.target.value})})]}),Zn("label",{className:"ri-decalControl__slider",children:[Rt("span",{children:d("size")}),Rt("input",{type:"range",min:i/10,max:i*4,step:i/50,value:y.size,"aria-label":d("size"),onChange:x=>u(y.id,{size:Number(x.target.value)})})]}),Zn("label",{className:"ri-decalControl__slider",children:[Rt("span",{children:d("turn")}),Rt("input",{type:"range",min:-180,max:180,step:1,value:EP(y.rotation??0),"aria-label":d("rotation"),onChange:x=>u(y.id,{rotation:Number(x.target.value)*Math.PI/180})})]}),Zn("div",{className:"ri-inlineRow",children:[Rt("button",{type:"button",className:"ri-secondaryButton","aria-pressed":o,title:d("dragTheDecalAcrossTheObjectsSurface"),onClick:()=>p(y.id),children:d("move")}),Rt("button",{type:"button",className:"ri-removeButton",onClick:()=>a(y.id),children:d("remove")})]})]}):null,Zn("div",{className:"ri-inlineRow",children:[Rt("span",{className:"ri-colorCode",children:t.length===0?d("noneAddedYet"):d("decalAdded",{count:t.length})}),Rt("button",{type:"button",className:"ri-secondaryButton",onClick:f,children:d("done")})]})]})}import{useEffect as KP,useRef as QP}from"react";import{useThree as JP}from"@react-three/fiber";import{Mesh as YP,Raycaster as ZP,Vector2 as np,Vector3 as Iy}from"three";import{BufferGeometry as DP,CanvasTexture as TP,Float32BufferAttribute as Fl,Matrix4 as LP,Object3D as _P,SRGBColorSpace as BP,Uint16BufferAttribute as jP,Vector3 as Cr}from"three";var NP=.5,Ha=4;function IP(e,t=0){let n=new Cr(...e);n.lengthSq()<1e-12&&n.set(0,0,1),n.normalize();let r=new _P;return Math.abs(n.y)>.999&&r.up.set(0,0,-Math.sign(n.y)),r.lookAt(n),r.rotateZ(t),r.rotation.clone()}function zP(e,t,n){let r=null;if(e.bones&&t.bones){r=new Map;for(let[o,i]of e.bones)r.set(o,i*(1-n));for(let[o,i]of t.bones)r.set(o,(r.get(o)??0)+i*n)}return{position:e.position.clone().lerp(t.position,n),normal:e.normal.clone().lerp(t.normal,n),bones:r}}function Oy(e,t,n,r){let o=s=>r?s.position[t]<=n:s.position[t]>=n,i=[];for(let s=0;s<e.length;s++){let l=e[s],c=e[(s+1)%e.length],u=o(l);if(u&&i.push(l),u!==o(c)){let p=c.position[t]-l.position[t];i.push(zP(l,c,(n-l.position[t])/p))}}return i}function Hl(e,t,n){let r=e.geometry,o=r.getAttribute("position");if(!o)return null;let i=r.getAttribute("normal"),s=r.getAttribute("skinIndex"),l=r.getAttribute("skinWeight"),c=!!(s&&l),u=r.getIndex(),p=Math.max(t.size,1e-6),m=p/(n>0&&Number.isFinite(n)?n:1),a=Math.max(p,m)*NP,f={x:p/2,y:m/2,z:a/2},d=new LP().makeRotationFromEuler(IP(t.normal,t.rotation)).setPosition(...t.position),b=d.clone().invert(),h=(H,V)=>{let W=null;if(c){W=new Map;for(let z=0;z<Ha;z++){let A=l.getComponent(H,z);if(A<=0)continue;let $=s.getComponent(H,z);W.set($,(W.get($)??0)+A)}}return{position:V.clone(),normal:i?new Cr().fromBufferAttribute(i,H):new Cr,bones:W}},w=[],v=[],S=[],y=[],R=[],x=new Cr,M=new Cr,E=new Cr,P=H=>{if(S.push(.5+H.position.x/p,.5-H.position.y/m),x.copy(H.position).applyMatrix4(d),w.push(x.x,x.y,x.z),v.push(H.normal.x,H.normal.y,H.normal.z),!H.bones)return;let V=[...H.bones].sort((z,A)=>A[1]-z[1]).slice(0,Ha),W=V.reduce((z,[,A])=>z+A,0)||1;for(let z=0;z<Ha;z++)y.push(V[z]?.[0]??0),R.push((V[z]?.[1]??0)/W)},T=["x","y","z"],O=[new Cr,new Cr,new Cr],k=[0,0,0],D=(u?u.count:o.count)/3;for(let H=0;H<D;H++){for(let z=0;z<3;z++){let A=H*3+z;k[z]=u?u.getX(A):A,O[z].fromBufferAttribute(o,k[z]).applyMatrix4(b)}if(T.some(z=>O[0][z]>f[z]&&O[1][z]>f[z]&&O[2][z]>f[z]||O[0][z]<-f[z]&&O[1][z]<-f[z]&&O[2][z]<-f[z]))continue;let V=O.map((z,A)=>h(k[A],z));if(!i){M.copy(V[1].position).sub(V[0].position),E.copy(V[2].position).sub(V[0].position);let z=M.cross(E).transformDirection(d);for(let A of V)A.normal.copy(z)}let W=V;for(let z of T)if(W=Oy(W,z,f[z],!0),W=Oy(W,z,-f[z],!1),W.length<3)break;for(let z=1;z+1<W.length;z++)P(W[0]),P(W[z]),P(W[z+1])}if(w.length===0)return null;let B=new DP;return B.setAttribute("position",new Fl(w,3)),B.setAttribute("normal",new Fl(v,3)),B.setAttribute("uv",new Fl(S,2)),c&&(B.setAttribute("skinIndex",new jP(y,Ha)),B.setAttribute("skinWeight",new Fl(R,Ha))),B}function Dy(e){return JSON.stringify([e.image??null,e.image?null:[e.text??"",e.color,e.fontFamily,e.fontWeight],e.position,e.normal,e.size,e.rotation??0])}var Ey=256,Yd=24;function Ty(e){let t=`${e.fontWeight??"bold"} ${Ey-Yd*2}px ${e.fontFamily||"sans-serif"}`,n=document.createElement("canvas"),r=n.getContext("2d");r.font=t;let o=e.text||" ";n.width=Math.min(Math.max(Math.ceil(r.measureText(o).width)+Yd*2,8),4096),n.height=Ey,r.font=t,r.textAlign="center",r.textBaseline="middle",r.fillStyle=e.color??"#ffffff",r.fillText(o,n.width/2,n.height/2,n.width-Yd);let i=new TP(n);return i.flipY=!1,i.colorSpace=BP,{texture:i,aspect:n.width/n.height}}import{useEffect as Ly,useRef as VP}from"react";import{BufferGeometry as FP,Float32BufferAttribute as HP,Mesh as GP,MeshStandardMaterial as UP,SkinnedMesh as $P,SRGBColorSpace as By}from"three";var Oo="riDecal",tp="riDecalId";function Zd(){return new FP().setAttribute("position",new HP([],3))}function _y(e){let t=e.image;return t?.width&&t.height?t.width/t.height:1}function ep(e){e.disposed=!0,e.node.remove(e.mesh),e.mesh.geometry.dispose(),e.mesh.material.dispose(),e.imagePath&&vi(e.imagePath,By),e.ownTexture?.dispose()}function WP(e,t,n,r){let o=new UP({transparent:!0,polygonOffset:!0,polygonOffsetFactor:-4,depthWrite:!1,metalness:0,roughness:.7}),i=Qn(e)&&e.skeleton?e:null,s=i?new $P(Zd(),o):new GP(Zd(),o);if(i){let u=s;u.bind(i.skeleton,i.bindMatrix),u.frustumCulled=!1,u.onBeforeRender=()=>{let p=Zg(i);p&&u.bindMatrixInverse.copy(p)}}s.userData[Oo]=!0,s.userData[tp]=t.id,s.raycast=()=>{},s.castShadow=!1,s.receiveShadow=!0,s.renderOrder=1;let l={node:e,mesh:s,signature:n,disposed:!1},c=u=>{let p=Hl(e,t,u);s.geometry.dispose(),s.geometry=p??Zd(),s.visible=p!==null};if(t.image){l.imagePath=t.image;let u=al(t.image,By,()=>{l.disposed||(c(_y(u)),o.needsUpdate=!0,r())});o.map=u,c(_y(u))}else{let{texture:u,aspect:p}=Ty(t);l.ownTexture=u,o.map=u,c(p)}return e.add(s),l}function jy({objectBindings:e,nodeMap:t,invalidate:n}){let r=VP(new Map);Ly(()=>{let o=r.current,i=new Set;for(let[s,l]of Object.entries(e)){if(!l.decals?.length)continue;let c=t[l.modelObjectId??s];if(pn(c))for(let u of l.decals){if(!u.image&&!u.text)continue;let p=`${s}
7
+ ${u.id}`,m=Dy(u),a=o.get(p);a&&(a.node!==c||a.signature!==m)&&(ep(a),a=void 0),a||(a=WP(c,u,m,n),o.set(p,a)),a.mesh.material.opacity=(u.opacity??1)*(l.style?.material?.opacity??1),i.add(p)}}for(let[s,l]of o)i.has(s)||(ep(l),o.delete(s));n()},[e,t,n]),Ly(()=>{let o=r.current;return()=>{for(let i of o.values())ep(i);o.clear()}},[])}import{Mesh as XP,SkinnedMesh as qP}from"three";function Ny(e,t){let n=[];if(Qn(e)){let r=e;r.computeBoundingSphere(),r.computeBoundingBox(),qP.prototype.raycast.call(r,t,n)}else XP.prototype.raycast.call(e,t,n);return n.sort((r,o)=>r.distance-o.distance)[0]}function zy({target:e,nodes:t,controls:n}){let{camera:r,gl:o,invalidate:i}=JP(),s=QP(e);return s.current=e,KP(()=>{let l=o.domElement,c=new ZP,u=new np,p=l.style.cursor,m=l.style.touchAction;l.style.cursor="grab",l.style.touchAction="none";let a=0,f=null,d=null,b=(M,E=new np)=>{let P=l.getBoundingClientRect();u.set((M.clientX-P.left-E.x)/P.width*2-1,-((M.clientY-P.top-E.y)/P.height)*2+1),c.setFromCamera(u,r)},h=M=>{if(!d)return;b(M,d.offset),d.node.updateWorldMatrix(!0,!1);let E=c.intersectObject(d.node,!1)[0];if(!E)return;let P=xi({...E,ray:c.ray},d.node),T=Hl(d.node,{...d.decal,...P},d.aspect);T&&(d.mesh.geometry!==d.geometry&&d.mesh.geometry.dispose(),d.mesh.geometry=T,d.surface=P,i())},w=M=>{if(!d)return;cancelAnimationFrame(a),a=0,f=null;let E=d;d=null,E.mesh.geometry!==E.geometry&&(M&&E.surface?E.geometry.dispose():(E.mesh.geometry.dispose(),E.mesh.geometry=E.geometry)),E.controller&&(E.controller.enabled=E.controlsEnabled),l.hasPointerCapture(E.pointerId)&&l.releasePointerCapture(E.pointerId),l.style.cursor="grab",i();let P=()=>{window.removeEventListener("click",T,!0),window.removeEventListener("pointerdown",P,!0),clearTimeout(O)},T=k=>{k.target===l&&(k.preventDefault(),k.stopImmediatePropagation()),P()},O=setTimeout(P,300);window.addEventListener("click",T,!0),window.addEventListener("pointerdown",P,!0),M&&E.surface&&s.current.onCommit(E.surface)},v=M=>{if(M.button!==0||d)return;let E=s.current,P=t.current[E.objectId];if(!(P instanceof YP)||!P.visible)return;let T=P.children.find(z=>z.userData[Oo]&&z.userData[tp]===E.decal.id);if(!T?.visible)return;P.updateWorldMatrix(!0,!0),b(M);let O=Ny(T,c),k=c.intersectObject(P,!1)[0];if(!O||!k||O.distance>k.distance+1e-4)return;let D=new Iy;if(Qn(T)){let z=new Iy,A=T.geometry.getAttribute("position").count;if(!A)return;for(let $=0;$<A;$++)D.add(T.getVertexPosition($,z));D.divideScalar(A).applyMatrix4(T.matrixWorld)}else D.fromArray(E.decal.position).applyMatrix4(P.matrixWorld);D.project(r);let B=l.getBoundingClientRect(),H=new np(M.clientX-(B.left+(D.x+1)/2*B.width),M.clientY-(B.top+(1-D.y)/2*B.height)),V=T.material.map?.image,W=n.current;d={pointerId:M.pointerId,node:P,mesh:T,geometry:T.geometry,decal:E.decal,surface:null,offset:H,aspect:V?.width&&V.height?V.width/V.height:1,controller:W,controlsEnabled:W?.enabled??!1},W&&(W.enabled=!1),M.preventDefault(),M.stopImmediatePropagation(),l.setPointerCapture(M.pointerId),l.style.cursor="grabbing"},S=M=>{!d||M.pointerId!==d.pointerId||(M.preventDefault(),M.stopImmediatePropagation(),f=M,a||(a=requestAnimationFrame(()=>{a=0,f&&h(f)})))},y=M=>{!d||M.pointerId!==d.pointerId||(M.preventDefault(),M.stopImmediatePropagation(),f&&h(f),w(!0))},R=()=>w(!1),x=M=>{M.key==="Escape"&&(w(!1),s.current.onCancel())};return l.addEventListener("pointerdown",v,!0),window.addEventListener("pointermove",S,{capture:!0,passive:!1}),window.addEventListener("pointerup",y,!0),window.addEventListener("pointercancel",R),window.addEventListener("blur",R),window.addEventListener("keydown",x),l.addEventListener("lostpointercapture",R),()=>{w(!1),l.style.cursor=p,l.style.touchAction=m,l.removeEventListener("pointerdown",v,!0),window.removeEventListener("pointermove",S,!0),window.removeEventListener("pointerup",y,!0),window.removeEventListener("pointercancel",R),window.removeEventListener("blur",R),window.removeEventListener("keydown",x),l.removeEventListener("lostpointercapture",R)}},[r,o,i,t,n,e.objectId,e.decal]),null}import{useCallback as Di,useEffect as ck,useState as Ua}from"react";import{strToU8 as tk}from"fflate";import{zip as ek}from"fflate";function Vy(e,t=6){return new Promise((n,r)=>{ek(e,{level:t},(o,i)=>{o?r(o):n(i)})})}var Ga=2048,Fy=["#00e5ff","#ff4fd8","#ffe45e","#7cff6b","#ff784f","#a78bfa","#38bdf8","#fb7185"];function Hy(e){return e.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&apos;")}function ip(e,t){return e.normalize("NFKD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||t}function Uy(e){return ip(e,"model")}function rp(e,t){return e.index?Math.round(e.index.getX(t)):t}function nk(e,t,n){let r=rp(e,n),o=rp(e,n+1),i=rp(e,n+2);if(r>=t.count||o>=t.count||i>=t.count)return null;let s=[{index:r,u:t.getX(r),v:t.getY(r)},{index:o,u:t.getX(o),v:t.getY(o)},{index:i,u:t.getX(i),v:t.getY(i)}];return s.every(l=>Number.isFinite(l.u)&&Number.isFinite(l.v))?s:null}function Gy(e){return`${e.u.toFixed(6)},${e.v.toFixed(6)}`}function op(e,t,n,r){let o,i;r?(o=t.index,i=n.index):(o=Gy(t),i=Gy(n));let s=o<i?`${o}|${i}`:`${i}|${o}`,l=e.get(s);l?l.count+=1:e.set(s,{count:1,start:t,end:n})}function rk(e,t,n){op(e,t[0],t[1],n),op(e,t[1],t[2],n),op(e,t[2],t[0],n)}function ok(e,t){return Array.isArray(e)?e[t]??null:e}function ik(e){let t=new Map,n=0,r=0,o=0;return e.traverse(i=>{let s=i;if(!s.isMesh||!s.geometry||!s.material)return;let l=s.geometry,c=l.getAttribute("uv");if(!c||c.itemSize<2||c.count<3)return;n+=1;let u=s.name||`Mesh ${n}`,p=l.index?.count??c.count,m=l.groups.length>0?l.groups:[{start:0,count:p,materialIndex:0}];for(let a of m){let f=a.materialIndex??0,d=ok(s.material,f);if(!d)continue;let b=t.get(d.uuid);b||(r+=1,b={name:d.name||`Material ${r}`,layers:new Map},t.set(d.uuid,b));let h=b.layers.get(s.uuid);h||(h={name:u,color:Fy[o%Fy.length],edges:new Map},o+=1,b.layers.set(s.uuid,h));let w=Math.max(0,a.start),v=Math.min(p,w+a.count);for(let S=w;S+2<v;S+=3){let y=nk(l,c,S);y&&rk(h.edges,y,!!l.index)}}}),[...t.values()].filter(i=>[...i.layers.values()].some(s=>s.edges.size>0))}function Gl(e){return(e*Ga).toFixed(2)}function ak(e){return`M${Gl(e.start.u)} ${Gl(1-e.start.v)}L${Gl(e.end.u)} ${Gl(1-e.end.v)}`}function sk(e){let t=Hy(e.name),n=[...e.layers.values()].filter(r=>r.edges.size>0).map((r,o)=>{let i=Hy(r.name),s=`${ip(r.name,"mesh")}-${o+1}`,l=[...r.edges.values()],c=l.filter(m=>m.count===1),p=(c.length>0?c:l).map(ak).join("");return[` <g id="${s}" data-mesh="${i}" fill="none" stroke="${r.color}"`,' stroke-width="1" stroke-linejoin="round" vector-effect="non-scaling-stroke">',` <title>${i}</title>`,` <path d="${p}"/>`," </g>"].join(`
8
+ `)}).join(`
9
+ `);return['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" width="${Ga}" height="${Ga}" viewBox="0 0 ${Ga} ${Ga}">`,` <title>${t} UV layout</title>`," <desc>UV0 island-outline template exported by React Immersive. The SVG canvas maps to the complete 0\u20131 texture area.</desc>",' <rect width="2048" height="2048" fill="none" stroke="#94a3b8" stroke-width="2"/>',n,"</svg>"].join(`
10
+ `)}function lk(e){let t=[],n=new Set;return e.forEach((r,o)=>{let i=ik(r.scene);if(i.length===0)return;let s=Uy(r.label||`model-${o+1}`);i.forEach((l,c)=>{let u=ip(l.name,`material-${c+1}`),p=i.length===1?`${s}-uv-layout.svg`:`${s}-uv-${u}-${c+1}.svg`;if(n.has(p)){let m=p.replace(/\.svg$/,""),a=2;for(;n.has(`${m}-${a}.svg`);)a+=1;p=`${m}-${a}.svg`}n.add(p),t.push({filename:p,materialName:l.name,meshCount:[...l.layers.values()].filter(m=>m.edges.size>0).length,svg:sk(l)})})}),t}async function ap(e,t="model"){let n=lk(e);if(n.length===0)return n;if(n.length===1)return Xr(new Blob([n[0].svg],{type:"image/svg+xml;charset=utf-8"}),n[0].filename),n;let r=Object.fromEntries(n.map(i=>[i.filename,tk(i.svg)])),o=await Vy(r);return Xr(new Blob([o],{type:"application/zip"}),`${Uy(t)}-uv-layouts.zip`),n}async function $y(e,t="model"){return ap([{scene:e,label:t}],t)}function sp(e){import("./exportSceneMesh-MSQIMBFF.mjs").then(t=>t.exportSceneMesh(e),t=>{console.error("[react-immersive] Couldn't load the model exporter.",t),e.onComplete()})}function Wy({sceneRef:e,materialRefs:t,rendererCaptureRef:n,objectBindings:r,downloadFilename:o,getAllLoadedModels:i,getAllLoadedModelUvSources:s,captureVideo:l,openConfiguredAR:c}){let[u,p]=Ua(!1),[m,a]=Ua(!1),[f,d]=Ua(null),[b,h]=Ua(null),[w,v]=Ua("auto");ck(()=>{if(!m)return;let P=()=>a(!1);return window.addEventListener("pointerdown",P),()=>window.removeEventListener("pointerdown",P)},[m]);let S=Di(()=>{d(null),h(null),a(P=>!P)},[]),y=Di(()=>{let P=i?.()??null;if(P&&P.length>0){a(!1),p(!0),sp({sources:P,downloadFilename:o,onComplete:()=>p(!1)});return}let T=e.current;T&&(a(!1),p(!0),sp({sources:[{scene:T,objectBindings:r,matRefs:t.current??{}}],downloadFilename:o,onComplete:()=>p(!1)}))},[o,t,r,e,i]),R=Di(async()=>{let P=i?.()??null;if(!P||P.length===0)return;a(!1),p(!0);let T=new Set;try{for(let O=0;O<P.length;O++){let k=P[O],D=(k.label||`model-${O+1}`).replace(/[\\/:*?"<>|]+/g,"-"),B=D,H=2;for(;T.has(B);)B=`${D}-${H++}`;T.add(B),await new Promise(V=>{sp({sources:[k],downloadFilename:o,filenameSuffix:`-${B}`,onComplete:V})}),await new Promise(V=>setTimeout(V,300))}}finally{p(!1)}},[o,i]),x=Di(()=>{a(!1),_l(n.current).then(P=>{let T=document.createElement("a");T.href=P,T.download=`${o}.png`,document.body.appendChild(T),T.click(),document.body.removeChild(T)}).catch(P=>{console.error("Screenshot failed:",P)})},[o,n]),M=Di(async()=>{let P=s?.()??null;try{let T;if(P&&P.length>0)T=await ap(P,o);else{let O=e.current;if(!O)return;T=await $y(O,o)}if(T.length===0){d("This model does not contain UV coordinates.");return}d(null),a(!1)}catch(T){console.error("UV layout export failed:",T),d("Could not create the UV layout archive.")}},[o,e,s]),E=Di(async P=>{a(!1),h(null);try{let T=await l({mode:P,format:w}),O=T.type==="image/gif"?"gif":T.type.startsWith("video/mp4")?"mp4":"webm",k=URL.createObjectURL(T),D=document.createElement("a");D.href=k,D.download=`${o}-${P}.${O}`,document.body.appendChild(D);try{D.click()}finally{D.remove(),setTimeout(()=>URL.revokeObjectURL(k),1e3)}}catch(T){if(T instanceof DOMException&&T.name==="AbortError")return;h(T instanceof Error?T.message:"Could not export the video."),a(!0)}},[l,o,w]);return{openConfiguredAR:c?()=>{a(!1),c()}:void 0,isDownloading:u,downloadMenuOpen:m,uvExportError:f,toggleDownloadMenu:S,handleDownloadMesh:y,handleDownloadSeparateMeshes:R,handleDownloadScreenshot:x,handleDownloadUvLayout:M,handleDownloadVideo:E,videoFormat:w,setVideoFormat:v,videoExportError:b}}import{useCallback as sn,useEffect as Wa,useRef as Xl,useReducer as gk,useState as Eo}from"react";import{Box3 as nx,Raycaster as bk,Vector2 as dp,Vector3 as pp}from"three";var Ul={tool:"distance",points:[],areaClosed:!1,error:null};function Xy(e,t){if(t.type==="tool")return{...Ul,tool:t.tool};if(t.type==="clear")return{...Ul,tool:e.tool};if(t.type==="fail")return{...e,error:t.error};if(t.type==="clearError")return{...e,error:null};if(t.type==="wrapResult")return{...e,points:t.points,areaClosed:!1,error:null};if(t.type==="undo")return{...e,points:e.points.slice(0,-1),areaClosed:!1,error:null};if(t.type==="finishArea"){if(e.tool!=="area")return e;let i=cl(e.points.map(s=>s.position));return"error"in i?{...e,error:i.error}:{...e,areaClosed:!0,error:null}}if(t.type!=="place")return e;let r=e.areaClosed||e.tool==="angle"&&e.points.length===3||e.tool==="pointToPlane"&&e.points.length===2?[]:e.points;if(e.tool==="pointToPlane"&&r.length===0&&!t.point.normal)return{...e,error:"Pick a triangle face to define the reference plane."};if(r.length>=256)return{...e,error:"Finish or clear this measurement before adding more points."};let o=[...r,t.point];return e.tool==="angle"&&o.length===3&&ll(o.map(i=>i.position))===null?{...e,error:"Pick a point away from the angle's vertex."}:{...e,points:o,areaClosed:!1,error:null}}import{Matrix3 as Ky,Matrix4 as uk,Mesh as Qy,Vector3 as $l}from"three";var dk=new WeakMap,pk=new WeakMap,lp=new WeakMap,mk=0;function cp(e){return lp.has(e)||lp.set(e,++mk),`${lp.get(e)}:${e.version??e.data?.version??0}:${e.count}`}var Jy=new ArrayBuffer(8),fk=new Float64Array(Jy),qy=new Uint32Array(Jy);function En(e,t){return fk[0]=t,Math.imul(Math.imul(e^qy[0],16777619)^qy[1],16777619)}function Yy(e){return Zy(e,!0)}function Zy(e,t){let n=e.getAttribute("position");if(!n)return"no-position";let r=e.getIndex(),o=t?eh(e):r?.array??null,i=t?dk:pk,s=[e.getAttribute("skinIndex"),e.getAttribute("skinWeight")].filter(Boolean),l=`${cp(n)}:${r?cp(r):"none"}:${e.morphTargetsRelative}:${[...e.morphAttributes.position??[],...s].map(cp).join(";")}`,c=i.get(e);if(c?.position===n&&c.index===o&&c.version===l)return c.signature;let u=e.morphTargetsRelative?En(2166136261,1):2166136261;for(let m=0;m<n.count;m++)u=En(u,n.getX(m)),u=En(u,n.getY(m)),u=En(u,n.getZ(m));if(o)for(let m=0;m<o.length;m++)u=En(u,o[m]);for(let m of e.morphAttributes.position??[])for(let a=0;a<m.count;a++)u=En(u,m.getX(a)),u=En(u,m.getY(a)),u=En(u,m.getZ(a));for(let m of s)for(let a=0;a<m.count;a++)for(let f=0;f<m.itemSize;f++)u=En(u,m.getComponent(a,f));let p=`${n.count}:${o?.length??0}:${u>>>0}`;return i.set(e,{position:n,index:o,version:l,signature:p}),p}function ex(e){let t=2166136261,n=e.skeleton;if(n){for(let r of[e.bindMatrix,...n.boneInverses])for(let o of r.elements)t=En(t,o);for(let r of n.bones){r.matrixAutoUpdate&&r.updateMatrix();for(let o of r.matrix.elements)t=En(t,o)}}for(let r of e.morphTargetInfluences??[])t=En(t,r);return`${n?"skin":"mesh"}:${t>>>0}`}function tx(e,t){e.updateWorldMatrix(!0,!1);let n=e.matrixWorld.clone();if(t!==void 0){if(!e.isInstancedMesh||t>=e.count)return null;let r=new uk;e.getMatrixAt(t,r),n.multiply(r)}return Math.abs(n.determinant())>1e-15?n:null}function up(e,t){if(!(t.object instanceof Qy))return e;let n=Gr(t.object),r=tx(t.object,t.instanceId);if(!n||!r)return e;let o=r.clone().invert(),i=s=>new $l(...s).applyMatrix4(o).toArray();return{...e,anchor:{nodeId:n,localPosition:i(e.position),geometrySignature:Yy(t.object.geometry),poseSignature:ex(t.object),...t.instanceId!==void 0?{instanceId:t.instanceId}:{},...e.normal?{localNormal:new $l(...e.normal).applyNormalMatrix(new Ky().getNormalMatrix(o)).toArray()}:{},...e.faceVertices?{localFaceVertices:e.faceVertices.map(i)}:{}}}}function Wl(e,t,n,r,o){let i=u=>({measurement:e,points:[],status:u});if(e.modelId!==n||ka(e.tilesetUrl??"")!==ka(r??""))return i("model-changed");if(!t)return i("missing-object");let s=o??$a(t),l=[],c=new Map;for(let u of e.points){if(!u.anchor){l.push(u);continue}let p=u.anchor,m=s(p.nodeId);if(!(m instanceof Qy))return i("missing-object");for(let b=m;b;b=b.parent)if(!b.visible)return i("hidden-object");if(Yy(m.geometry)!==p.geometrySignature&&Zy(m.geometry,!1)!==p.geometrySignature)return i("geometry-changed");let a=c.get(m);if(a===void 0&&(a=ex(m),c.set(m,a)),a!==p.poseSignature)return i("pose-changed");let f=tx(m,p.instanceId);if(!f)return i("geometry-changed");let d=b=>new $l(...b).applyMatrix4(f).toArray();l.push({...u,position:d(p.localPosition),...p.localNormal?{normal:new $l(...p.localNormal).applyNormalMatrix(new Ky().getNormalMatrix(f)).toArray()}:{},...p.localFaceVertices?{faceVertices:p.localFaceVertices.map(d)}:{}})}return{measurement:e,points:l,status:e.approximate?"approximate":"ready"}}function $a(e){let t=new Map;return e.traverse(n=>{let r=Gr(n);r&&t.set(r,t.has(r)?null:n)}),n=>t.get(n)??null}function hk(e){let t=new nx().setFromObject(e),n=new pp;return t.getSize(n),{min:[t.min.x,t.min.y,t.min.z],max:[t.max.x,t.max.y,t.max.z],size:[n.x,n.y,n.z]}}function vk(e){let t=new nx().setFromObject(e);if(t.isEmpty())return null;let n=t.getCenter(new pp),r=t.getSize(new pp).length()/2;return!Number.isFinite(r)||r<=0?null:{center:[n.x,n.y,n.z],radius:r}}function rx({canvasAreaRef:e,controlsRef:t,sceneRef:n,modelUrl:r,tilesetUrl:o,measurementModelId:i,savedMeasurements:s,measurementSettings:l,measurementUnit:c,onMeasurementsChange:u,onMeasurementSettingsChange:p,onCollectionChange:m,modelRotation:a,bindingTransformSignature:f,modelLoaded:d,enabled:b}){let[h,w]=Eo(!1),[v,S]=gk(Xy,Ul),[y,R]=Eo("none"),[x,M]=Eo(null),[E,P]=Eo(!1),[T,O]=Eo(null),[k,D]=Eo(null),B=Xl(!1),H=Xl(0),V=Xl(null),W=Xl(null);B.current=h&&b;let z=sn(X=>{X.updateMatrixWorld(!0),O(hk(X)),D(vk(X))},[]),A=sn(()=>{S({type:"clear"}),M(null)},[]),$=sn(X=>{S({type:"tool",tool:X}),M(null)},[]),J=sn(()=>S({type:"undo"}),[]),ae=sn(()=>S({type:"finishArea"}),[]),Z=sn(()=>w(X=>!X),[]),Y=sn(()=>P(X=>!X),[]),te=sn(X=>{!B.current||X.button!==0||(V.current={x:X.clientX,y:X.clientY})},[]),U=sn((X,ie)=>{let Re=e.current,he=t.current?.camera,Pe=n.current;if(!Re||!he||!Pe)return null;let Ae=Re.getBoundingClientRect();if(!Ae.width||!Ae.height)return null;Pe.updateMatrixWorld(!0),he.updateMatrixWorld(!0);let He=new dp(X-Ae.left,ie-Ae.top),Ot=new bk;return Ot.setFromCamera(new dp(He.x/Ae.width*2-1,1-He.y/Ae.height*2),he),Ot.intersectObject(Pe,!0).find(bb)??null},[e,t,n]),N=sn((X,ie)=>{let Re=e.current,he=t.current?.camera,Pe=U(X,ie);if(!Pe||!Re||!he)return null;let Ae=Re.getBoundingClientRect(),He=new dp(X-Ae.left,ie-Ae.top);return up(hb(Pe,he,He,Ae,y),Pe)},[e,t,U,y]),K=sn(()=>{W.current!==null&&cancelAnimationFrame(W.current),W.current=null,M(null)},[]),ne=sn(X=>{if(!B.current||y==="none"||X.buttons!==0||X.target.closest("button, input, select, label, textarea, .ri-measureTools")){K();return}W.current!==null&&cancelAnimationFrame(W.current);let{clientX:ie,clientY:Re}=X;W.current=requestAnimationFrame(()=>{W.current=null;let he=N(ie,Re);M(he?.snapped?he:null)})},[K,N,y]),Fe=sn(X=>{if(!B.current)return;let ie=V.current;if(V.current=null,ie&&Math.hypot(X.clientX-ie.x,X.clientY-ie.y)>6||X.target.closest("button, input, select, label, textarea, .ri-measureTools"))return;if(v.tool==="wrap"||v.tool==="wrapHorizontal"){let Pe=U(X.clientX,X.clientY);if(!Pe)return;let Ae=v.tool==="wrapHorizontal"?gb(Pe):fb(Pe);if("error"in Ae){S({type:"fail",error:Ae.error});return}let He=Ae.points.map((Ot,Xt)=>({id:H.current+Xt+1,...up({position:Ot},Pe)}));H.current+=He.length,S({type:"wrapResult",points:He});return}let he=N(X.clientX,X.clientY);he&&(H.current+=1,S({type:"place",point:{...he,id:H.current}}))},[v.tool,N,U]);Wa(()=>{A(),O(null),D(null)},[r,A]),Wa(()=>{A()},[a[0],a[1],a[2],f,A]),Wa(()=>(K(),K),[K,h,y]),Wa(()=>{b||(w(!1),K())},[b,K]),Wa(()=>{let X=n.current;!d||!X||z(X)},[f,d,z,n]);let[Q,Ce]=Eo([]),Ee=v.points.length>0&&cd(v.tool,v.points)!==null&&(v.tool!=="area"||v.areaClosed),we=v.tool==="distance"&&v.points.length===2,pt=sn(X=>{if(!Ee)return;if(v.points.length>8192){S({type:"fail",error:"A saved measurement can contain up to 8,192 points. Choose a simpler surface and measure again."});return}if(v.points.some(Re=>!Re.anchor)){S({type:"fail",error:"This surface has no stable measurement anchor. Give the mesh a unique name and measure again."});return}if(s.length>=256){S({type:"fail",error:"A model can keep up to 256 named measurements."});return}let ie={id:crypto.randomUUID(),name:X.trim()||`Measurement ${s.length+1}`,modelId:i,...o?{tilesetUrl:o,approximate:!0}:{},tool:v.tool,points:structuredClone(v.points),createdAt:new Date().toISOString()};u([...s,ie]),A()},[Ee,s,i,o,v,u,A]),qe=sn((X,ie)=>{try{if(!we)throw new Error("Pick two distance points before calibrating.");let Re=cd("distance",v.points).value;p(yb(Re,X,ie,l)),S({type:"clearError"})}catch(Re){S({type:"fail",error:Re instanceof Error?Re.message:String(Re)})}},[we,v.points,l,p]),vt={settings:l,items:s};return{saveMeasurement:pt,canSaveMeasurement:Ee,canCalibrate:we,calibrate:qe,savedResults:Q,setSavedResults:Ce,exportMeasurementJson:()=>Xr(new Blob([wb(vt)],{type:"application/json"}),"measurements.json"),exportMeasurementCsv:()=>{let X=n.current?$a(n.current):void 0,ie=s.map(Re=>{let he=Wl(Re,n.current,i,o,X);return pl(Re,l,c,he.points,he.status)});Xr(new Blob([Sb(vt,ie,c)],{type:"text/csv;charset=utf-8"}),"measurements.csv")},importMeasurements:X=>{try{m(xb(X)),A()}catch(ie){S({type:"fail",error:ie instanceof Error?ie.message:String(ie)})}},measureMode:h,measureModeRef:B,measurePoints:v.points,measurementTool:v.tool,areaClosed:v.areaClosed,measurementError:v.error,selectMeasurementTool:$,undoMeasurementPoint:J,finishMeasureArea:ae,snapMode:y,setSnapMode:R,snapPreview:x,handleMeasurePointerMove:ne,clearSnapPreview:K,showDimensions:E,measureBox:T,modelBounds:k,refreshBounds:z,clearMeasurements:A,toggleMeasureMode:Z,toggleDimensions:Y,handleMeasurePointerDown:te,handleMeasureClick:Fe}}import{createPortal as yk}from"react-dom";import{MapPin as xk}from"lucide-react";import{useCallback as Do,useEffect as Zr,useMemo as wk,useRef as Sk,useState as Gn}from"react";function ox(e,t){let n=null,r=i=>{let s=i.mode==="immersive-ar"?i.session??null:null;s!==n&&(n&&t.endAR(),n=s,n&&t.startAR())},o=e.subscribe(r);return r(e.getState()),()=>{o(),n&&t.endAR("interrupted"),n=null}}import{jsx as Ti,jsxs as mp}from"react/jsx-runtime";var ix={canPlace:!1,isPlacementMode:!0,isModelPlaced:!1};function sx({enableXR:e,configuredHandoff:t=!1,usdzUrl:n,mobileHandoffUrl:r,engagement:o,animationControls:i}){let s=oe(),l=Sk(null),[c,u]=Gn(null),[p,m]=Gn(()=>e&&ax());Zr(()=>{if(!e||!ax()){u(null),m(!1);return}let N=!1;return m(!0),import("./xrRuntime-5S7KYUVB.mjs").then(K=>{if(N)return;let ne=null;try{ne=K.createXRStore({emulate:!1})}catch{ne=null}u(ne?{store:ne,runtime:K}:null),m(!1)},()=>{N||(u(null),m(!1))}),()=>{N=!0}},[e]);let a=c?.store??null,[f,d]=Gn(!1),[b,h]=Gn(e),[w,v]=Gn(!1),[S,y]=Gn(!0),[R,x]=Gn(null),[M,E]=Gn(!1),[P,T]=Gn(!1),[O,k]=Gn(ix),[D,B]=Gn(!1),H=wk(()=>e&&(t||!!n?.trim())&&gl(),[e,n,t]);Zr(()=>{y(qb())},[]);let V=Do(()=>{if(typeof window>"u")return null;try{let N=new URL(r?.trim()||window.location.href,window.location.href);return N.protocol==="http:"||N.protocol==="https:"?N.toString():null}catch{return null}},[r]);Zr(()=>{if(!e||S){x(null),E(!1);return}x(V())},[e,S,V]),Zr(()=>{if(a)return a.subscribe(N=>T(N.session!=null&&N.mode==="immersive-ar"))},[a]),Zr(()=>{if(a)return ox(a,o)},[a,o]),Zr(()=>{B(!1),k(ix)},[P]),Zr(()=>{if(!e||typeof navigator>"u"){h(!1);return}let N=navigator.xr;if(!N?.isSessionSupported){h(!1);return}let K=!1;return h(!0),N.isSessionSupported("immersive-ar").then(ne=>!K&&d(ne)).catch(()=>{}).finally(()=>{K||h(!1)}),N.isSessionSupported("immersive-vr").then(ne=>!K&&v(ne)).catch(()=>{}),()=>{K=!0}},[e]);let W=Do(()=>{let N=V();N&&(o.requestARLaunch("mobile-handoff"),x(N),E(!0))},[V,o]),z=Do(()=>E(!1),[]),A=Do(()=>{let N=n?.trim();if(!N)return;o.requestARLaunch("quick-look");let K=document.createElement("a");K.setAttribute("rel","ar"),K.href=N,K.style.display="none";let ne=document.createElement("img");ne.alt="",ne.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",K.appendChild(ne),document.body.appendChild(K),K.click(),K.remove()},[n,o]),$=Do(N=>{k(N),N.isPlacementMode||B(!1)},[]),J=Do(N=>{B(!1),N?l.current?.finishPlacementMode():l.current?.cancelPlacementMode()},[]),ae=Do(N=>{N.preventDefault(),B(!0),l.current?.startPlacementMode()},[]);Zr(()=>{if(!D)return;let N=()=>J(!0),K=()=>J(!1);return window.addEventListener("pointerup",N),window.addEventListener("pointercancel",K),()=>{window.removeEventListener("pointerup",N),window.removeEventListener("pointercancel",K)}},[J,D]);let Z=O.isModelPlaced?O.isPlacementMode?O.canPlace?s("arReleaseToPlace"):s("arFindSurface"):null:O.canPlace?null:s("arFindSurface"),Y=O.isModelPlaced&&!O.isPlacementMode?s("arGestureHint"):null,te=a?.getState().domOverlayRoot??null,U=P&&te?yk(mp(rb.Provider,{value:te,children:[Y&&Ti("div",{className:"ri-arHintOverlay",children:Ti("div",{className:"ri-arHint",children:Y})}),Ti("div",{className:"ri-arOverlay",children:mp("div",{className:"ri-arControls",children:[i,Z&&Ti("div",{className:"ri-arStatus",children:Z}),O.isModelPlaced&&mp("button",{type:"button",className:`ri-arActionButton ${D?"ri-arActionButton--active":""}`,onPointerDown:N=>ae(N.nativeEvent),"aria-pressed":D,children:[Ti(xk,{size:14}),s("arRelocate")]}),!O.isModelPlaced&&O.canPlace&&Ti("button",{type:"button",className:"ri-arActionButton ri-arActionButton--primary",onClick:()=>l.current?.placeCurrent(),children:s("tapToPlace")})]})})]}),te):null;return{xrStore:a,xrRuntime:c?.runtime??null,xrResolving:p,inARSession:P,presenterRef:l,arSupported:f,checkingAR:b,vrSupported:w,quickLookSupported:H,resolvedMobileHandoffUrl:R,isMobileHandoffOpen:M,arOverlay:U,openMobileHandoff:W,closeMobileHandoff:z,openQuickLook:A,handleARStateChange:$}}function ax(){if(typeof navigator>"u")return!1;let e=navigator.xr;return!!(e&&typeof e.isSessionSupported=="function"&&typeof e.addEventListener=="function")}import{useEffect as Ck,useRef as cx}from"react";import{useFrame as Mk,useThree as Pk}from"@react-three/fiber";var ql=e=>typeof e=="number"&&Number.isFinite(e)&&e>=0?e:null,Kl=class{constructor(){this.lastFrame=null;this.intervals=[]}frame(t,n){let r=this.lastFrame===null?0:t-this.lastFrame;r>0&&(n==="always"||r<=250)&&this.intervals.length<1e3&&this.intervals.push(r),this.lastFrame=t}sample(t,n,r){let i=n.renderMode!=="never"&&this.lastFrame!==null&&r-this.lastFrame<=250?this.intervals:[],s=i.length?i.reduce((c,u)=>c+u,0)/i.length:null;this.intervals=[];let l=t.info;return{sampledAt:new Date().toISOString(),...structuredClone(n),drawCalls:ql(n.renderer==="webgpu"?l?.render?.drawCalls:l?.render?.calls),triangles:ql(l?.render?.triangles),geometries:ql(l?.memory?.geometries),textures:ql(l?.memory?.textures),frameIntervalMs:s,fps:s?1e3/s:null,frameSamples:i.length}}};function lx(e=1e3){return Number.isFinite(e)?Math.min(1e4,Math.max(250,e)):1e3}function ux(e){let t=Pk(i=>i.get),n=cx(e);n.current=e;let r=cx(new Kl);Mk(i=>r.current.frame(performance.now(),i.frameloop));let o=lx(e.intervalMs);return Ck(()=>{let i=setInterval(()=>{let{gl:s,viewport:l,frameloop:c}=t(),u=n.current,p=r.current.sample(s,{renderer:Wr(s)?"webgpu":"webgl",renderMode:c,quality:{profile:u.profile,reducedGpuLoad:u.reducedGpuLoad,dpr:s.getPixelRatio?.()??l.dpr,shadows:s.shadowMap?.enabled??u.shadows,postProcessing:u.postProcessing},streaming:u.streamingRef?.current??null},performance.now());u.onStats(p)},o);return()=>clearInterval(i)},[t,o]),null}import{Canvas as BR,useThree as Ex}from"@react-three/fiber";import{ACESFilmicToneMapping as jR,LinearToneMapping as NR,NoToneMapping as Tx,ReinhardToneMapping as IR}from"three";import{Suspense as zR,useEffect as VR,useMemo as tc,useState as FR}from"react";import{useThree as Ka}from"@react-three/fiber";import{Autofocus as nR,Bloom as rR,BrightnessContrast as oR,ChromaticAberration as iR,ColorAverage as aR,DepthOfField as sR,DotScreen as lR,EffectComposer as cR,Glitch as uR,GodRays as dR,Grid as pR,HueSaturation as mR,Noise as fR,Outline as gR,Pixelation as bR,Ramp as hR,Scanline as vR,SelectiveBloom as yR,Sepia as xR,SMAA as wR,SSAO as SR,ToneMapping as CR,Vignette as MR}from"@react-three/postprocessing";import{BlendFunction as _i,KernelSize as PR}from"postprocessing";import{Color as Qa,Vector2 as Xa}from"three";import{memo as kR,useCallback as RR,useEffect as wp,useLayoutEffect as AR,useMemo as Lo,useRef as Sp,useState as Ax}from"react";import{forwardRef as kk,useImperativeHandle as Rk,useMemo as Ak}from"react";import{BlendFunction as Ok,Effect as Ek}from"postprocessing";import{Uniform as Dk}from"three";import{jsx as Lk}from"react/jsx-runtime";var Tk=`
11
+ uniform float exposure;
12
+ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
13
+ outputColor = vec4(inputColor.rgb * exposure, inputColor.a);
14
+ }
15
+ `,fp=class extends Ek{constructor(t=1){super("ExposureEffect",Tk,{blendFunction:Ok.NORMAL,uniforms:new Map([["exposure",new Dk(t)]])})}set exposure(t){this.uniforms.get("exposure").value=t}},dx=kk(function({exposure:t},n){let r=Ak(()=>new fp(t),[]);return r.exposure=t,Rk(n,()=>r,[r]),Lk("primitive",{object:r,dispose:null})});import{useFrame as _k,useThree as Ql}from"@react-three/fiber";import*as gx from"@react-three/postprocessing";import{BlendFunction as Bk}from"postprocessing";import{Color as jk,MathUtils as Nk,Mesh as Ik,Vector2 as px,Vector3 as mx}from"three";import{useEffect as fx,useMemo as Jl,useRef as gp}from"react";import{jsx as Vk}from"react/jsx-runtime";var zk=gx.LensFlareEffect;function bx({config:e}){let t=Ql(a=>a.camera),n=Ql(a=>a.raycaster),r=Ql(a=>a.scene),o=Ql(a=>a.viewport),i=gp(null),s=gp(new mx),l=gp(new px),c=Jl(()=>new mx(...e.lensPosition),[e.lensPosition]),u=Jl(()=>new jk(e.colorGain??"#141414"),[e.colorGain]),p=Jl(()=>new px(0,0),[]),m=Jl(()=>new zk({blendFunction:Bk.NORMAL,enabled:!0,glareSize:e.glareSize,lensPosition:c,screenRes:p,starPoints:6,flareSize:e.flareSize,flareSpeed:e.flareSpeed,flareShape:e.flareShape,animated:e.animated,anamorphic:e.anamorphic,colorGain:u,lensDirtTexture:null,haloScale:e.haloScale,secondaryGhosts:e.secondaryGhosts,aditionalStreaks:e.aditionalStreaks,ghostScale:e.ghostScale,opacity:e.opacity,starBurst:e.starBurst}),[u,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,p]);return fx(()=>(i.current=m,()=>{m.dispose(),i.current=null}),[m]),fx(()=>{let a=m.uniforms.get("screenRes");a&&(a.value.x=o.width,a.value.y=o.height)},[m,o]),_k((a,f)=>{let d=i.current;if(!d)return;let b=d.uniforms.get("lensPosition"),h=d.uniforms.get("opacity");if(!b||!h)return;let w=1;if(s.current.copy(c).project(t),s.current.z>1)return;b.value.x=s.current.x,b.value.y=s.current.y,l.current.x=s.current.x,l.current.y=s.current.y,n.setFromCamera(l.current,t);let v=n.intersectObjects(r.children,!0),{object:S}=v[0]||{};S&&(S.userData?.lensflare==="no-occlusion"?w=0:S instanceof Ik&&(S.material.uniforms?._transmission?.value>.2||S.material._transmission&&S.material._transmission>.2?w=.2:S.material.transparent&&(w=S.material.opacity))),h.value=Nk.damp(h.value,w,12,f)}),Vk("primitive",{object:m,dispose:null})}import{useThree as wx}from"@react-three/fiber";import{EffectPass as Jk}from"postprocessing";import{useEffect as Yk,useMemo as Zk}from"react";import{BlendFunction as Fk,Effect as Hk,RenderPass as Gk}from"postprocessing";import{Color as hx,Mesh as xx,NearestFilter as Yl,NoBlending as Uk,ShaderMaterial as vx,Uniform as To,Vector2 as $k,Vector3 as Wk,WebGLRenderTarget as yx}from"three";var Xk=`
16
+ #include <common>
17
+ #include <morphtarget_pars_vertex>
18
+ #include <skinning_pars_vertex>
19
+ #include <clipping_planes_pars_vertex>
20
+ #include <logdepthbuf_pars_vertex>
21
+ void main() {
22
+ #include <skinbase_vertex>
23
+ #include <begin_vertex>
24
+ #include <morphtarget_vertex>
25
+ #include <skinning_vertex>
26
+ #include <project_vertex>
27
+ #include <logdepthbuf_vertex>
28
+ #include <clipping_planes_vertex>
29
+ }`,qk=`
30
+ #include <common>
31
+ #include <clipping_planes_pars_fragment>
32
+ #include <logdepthbuf_pars_fragment>
33
+ uniform vec3 objectId;
34
+ uniform bool onlySelected;
35
+ void main() {
36
+ #include <clipping_planes_fragment>
37
+ #include <logdepthbuf_fragment>
38
+ if (onlySelected && length(objectId) < 0.001) discard;
39
+ gl_FragColor = vec4(objectId, step(0.001, length(objectId)));
40
+ }`,Kk=`
41
+ uniform sampler2D selectionMask;
42
+ uniform sampler2D visibleMask;
43
+ uniform vec2 texelSize;
44
+ uniform vec3 outlineColor;
45
+ uniform float edgeStrength;
46
+ float different(vec4 a, vec4 b) {
47
+ return max(a.a, b.a) * step(0.001, length(a.rgb - b.rgb) + abs(a.a - b.a));
48
+ }
49
+ float visible(vec4 id, vec4 surface) {
50
+ return surface.a * (1.0 - step(0.001, length(id.rgb - surface.rgb)));
51
+ }
52
+ float edgeAt(vec2 uv, vec2 offset, vec4 center, float centerVisible) {
53
+ vec4 neighbor = texture2D(selectionMask, uv + offset);
54
+ return different(center, neighbor) * max(centerVisible, visible(neighbor, texture2D(visibleMask, uv + offset)));
55
+ }
56
+ void mainImage(const in vec4 inputColor, const in vec2 uv, out vec4 outputColor) {
57
+ vec4 c = texture2D(selectionMask, uv);
58
+ float shown = visible(c, texture2D(visibleMask, uv));
59
+ float edge = max(max(edgeAt(uv, vec2(texelSize.x, 0.0), c, shown), edgeAt(uv, vec2(-texelSize.x, 0.0), c, shown)),
60
+ max(edgeAt(uv, vec2(0.0, texelSize.y), c, shown), edgeAt(uv, vec2(0.0, -texelSize.y), c, shown)));
61
+ outputColor = vec4(outlineColor * edge * edgeStrength, max(inputColor.a, edge));
62
+ }`,Zl=class extends Hk{constructor(n,r,o,i,s={}){super("SelectionOutlineEffect",Kk,{blendFunction:Fk.SCREEN,uniforms:new Map([["selectionMask",new To(null)],["visibleMask",new To(null)],["texelSize",new To(new $k)],["outlineColor",new To(new hx(s.visibleEdgeColor??2278750))],["edgeStrength",new To(s.edgeStrength??3)]])});this.scene=n;this.camera=r;this.getObjects=o;this.layer=i;this.maskTarget=new yx(1,1,{minFilter:Yl,magFilter:Yl});this.visibleTarget=new yx(1,1,{minFilter:Yl,magFilter:Yl});this.visibleTarget.texture.name="SelectionOutline.VisibleIDs",this.uniforms.get("visibleMask").value=this.visibleTarget.texture,this.maskTarget.texture.name="SelectionOutline.IDs",this.uniforms.get("selectionMask").value=this.maskTarget.texture,this.maskMaterial=new vx({name:"SelectionOutline.IDs",vertexShader:Xk,fragmentShader:qk,uniforms:{objectId:new To(new Wk),onlySelected:new To(!1)},blending:Uk,toneMapped:!1,clipping:!0}),this.maskPass=new Gk(n,r,this.maskMaterial),this.maskPass.skipShadowMapUpdate=!0,this.maskPass.ignoreBackground=!0,this.maskPass.clearPass.overrideClearColor=new hx(0),this.maskPass.clearPass.overrideClearAlpha=0}update(n){let r=Qk(this.scene,this.getObjects()),o=[],i=this.camera.layers.mask;try{this.scene.traverseVisible(s=>{if(!(s instanceof xx))return;let l=r.get(s)??0,c=s.onBeforeRender;s.onBeforeRender=function(...u){c.apply(this,u);let p=u[4];p instanceof vx&&p.uniforms.objectId&&(p.uniforms.objectId.value.set((l&255)/255,(l>>>8&255)/255,(l>>>16&255)/255),p.uniformsNeedUpdate=!0)},o.push(()=>{s.onBeforeRender=c})}),this.maskMaterial.uniforms.onlySelected.value=!1,this.maskPass.render(n,this.visibleTarget,null);for(let s of r.keys()){let l=s.layers.mask;s.layers.enable(this.layer),o.push(()=>{s.layers.mask=l})}this.camera.layers.set(this.layer),this.maskMaterial.uniforms.onlySelected.value=!0,this.maskPass.render(n,this.maskTarget,null)}finally{this.camera.layers.mask=i;for(let s of o)s()}}setSize(n,r){this.maskTarget.setSize(n,r),this.visibleTarget.setSize(n,r),this.uniforms.get("texelSize").value.set(1/n,1/r)}dispose(){this.maskPass.dispose(),this.maskMaterial.dispose(),this.maskTarget.dispose(),this.visibleTarget.dispose()}};function Qk(e,t){let n=new Map(t.map((i,s)=>[i,s+1])),r=new Map,o=(i,s)=>{if(!i.visible)return;let l=n.get(i)??s;l&&i instanceof xx&&r.set(i,l);for(let c of i.children)o(c,l)};return o(e,0),r}import{jsx as eR}from"react/jsx-runtime";function Sx({objects:e,layer:t,options:n}){let r=wx(s=>s.scene),o=wx(s=>s.camera),i=Zk(()=>new Jk(o,new Zl(r,o,()=>e.current,t,n)),[r,o,e,t,n]);return Yk(()=>()=>i.dispose(),[i]),eR("primitive",{object:i,dispose:null})}function Cx(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 Mx(e,t){let n=e.update,r=t,o=NaN,i=NaN;return e.update=function(...s){(o!==r.near||i!==r.far)&&(this.mainCamera=t,o=r.near,i=r.far),n.apply(this,s)},()=>{e.update=n}}import{RampType as bp}from"@react-three/postprocessing";import{GlitchMode as hp,KernelSize as Li,ToneMappingMode as vp}from"postprocessing";import{Color as tR}from"three";function Px(e){return e==="linear"?vp.LINEAR:e==="reinhard"?vp.REINHARD:vp.ACES_FILMIC}function ec(e){switch(e){case"verySmall":return Li.VERY_SMALL;case"small":return Li.SMALL;case"medium":return Li.MEDIUM;case"large":return Li.LARGE;case"veryLarge":return Li.VERY_LARGE;case"huge":return Li.HUGE}}function kx(e){switch(e){case"constantMild":return hp.CONSTANT_MILD;case"constantWild":return hp.CONSTANT_WILD;default:return hp.SPORADIC}}function yp(e){let t=new tR(e);return[t.r,t.g,t.b,1]}function Rx(e){return e==="radial"?bp.Radial:e==="mirroredLinear"?bp.MirroredLinear:bp.Linear}import{Fragment as _R,jsx as Je,jsxs as xp}from"react/jsx-runtime";var _o={edgeStrength:1,pulseSpeed:0,visibleEdgeColor:new Qa(hi.color).getHex(),hiddenEdgeColor:new Qa(hi.color).multiplyScalar(.35).getHex(),kernelSize:PR.VERY_SMALL,blur:!1,xRay:!1},OR={edgeStrength:3};function ER(e){let t=[];return e.traverse(n=>{n.isMesh&&t.push(n)}),t}function DR(e){if(e.isMesh)return[e];let t=[];return e.traverseVisible(n=>{n.isMesh&&t.push(n)}),t}var qa=[],TR=kR(function({sceneConfig:t,selectedObjectRef:n,selectedObjectOutlineColor:r,highlightOnHover:o=!1,disabled:i=!1,onOutlineEffect:s,hasMultiSelection:l,multiOutlineObjects:c}){let u=Ka(O=>O.scene),p=Ka(O=>O.gl),m=Sp(null),a=t?.postProcessing,f=n??null,d=a?.outline.enabled===!0,b=d||o,h=Lo(()=>new Qa(r??"#22c55e").getHex(),[r]),w=Lo(()=>({...OR,blendFunction:_i.SCREEN,visibleEdgeColor:h}),[h]),v=2;for(;v===a?.outline.selectionLayer||v===a?.selectiveBloom.selectionLayer;)v+=1;let[S,y]=Ax(()=>p.xr?.isPresenting??!1);wp(()=>{let O=p.xr;if(!O)return;let k=()=>y(!0),D=()=>y(!1);return O.addEventListener("sessionstart",k),O.addEventListener("sessionend",D),y(O.isPresenting),()=>{O.removeEventListener("sessionstart",k),O.removeEventListener("sessionend",D)}},[p]);let R=u.children.filter(O=>O.isLight),x=Lo(()=>new Xa(a?.chromaticAberration.offsetX??.002,a?.chromaticAberration.offsetY??.002),[a?.chromaticAberration.offsetX,a?.chromaticAberration.offsetY]),M=Lo(()=>new Qa(a?.outline.visibleEdgeColor??"#ffffff").getHex(),[a?.outline.visibleEdgeColor]),E=Lo(()=>new Qa(a?.outline.hiddenEdgeColor??"#22090a").getHex(),[a?.outline.hiddenEdgeColor]),P=Lo(()=>yp(a?.ramp.startColor??"#000000"),[a?.ramp.startColor]),T=Lo(()=>yp(a?.ramp.endColor??"#ffffff"),[a?.ramp.endColor]);return!a||S||i?null:xp(_R,{children:[a.godRays.enabled===!0&&xp("mesh",{ref:m,position:a.godRays.sunPosition,visible:!1,frustumCulled:!1,children:[Je("sphereGeometry",{args:[.1,8,8]}),Je("meshBasicMaterial",{transparent:!0,opacity:0,depthWrite:!1})]}),xp(cR,{multisampling:0,enableNormalPass:a.ssao.enabled===!0,autoClear:!1,children:[a.smaa.enabled===!0&&Je(wR,{}),a.ssao.enabled===!0&&Je(SR,{samples:a.ssao.samples,rings:a.ssao.rings,intensity:a.ssao.intensity,radius:a.ssao.radius,bias:a.ssao.bias,luminanceInfluence:a.ssao.luminanceInfluence,fade:a.ssao.fade,minRadiusScale:a.ssao.minRadiusScale,worldDistanceThreshold:a.ssao.worldDistanceThreshold,worldDistanceFalloff:a.ssao.worldDistanceFalloff,worldProximityThreshold:a.ssao.worldProximityThreshold,worldProximityFalloff:a.ssao.worldProximityFalloff}),a.autofocus.enabled===!0&&Je(nR,{focusDistance:a.autofocus.focusDistance,focusRange:a.autofocus.focusRange,focalLength:a.autofocus.focalLength,bokehScale:a.autofocus.bokehScale,target:a.autofocus.target,mouse:a.autofocus.mouse,debug:a.autofocus.debug||void 0,manual:a.autofocus.manual,smoothTime:a.autofocus.smoothTime}),a.autofocus.enabled!==!0&&a.depthOfField.enabled===!0&&Je(sR,{focusDistance:a.depthOfField.focusDistance,focusRange:a.depthOfField.focusRange,focalLength:a.depthOfField.focalLength,bokehScale:a.depthOfField.bokehScale}),a.bloom.enabled===!0&&Je(rR,{intensity:a.bloom.intensity,luminanceThreshold:a.bloom.luminanceThreshold,luminanceSmoothing:a.bloom.luminanceSmoothing,mipmapBlur:a.bloom.mipmapBlur,radius:a.bloom.radius,levels:a.bloom.levels}),a.selectiveBloom.enabled===!0&&Je(yR,{selection:f??void 0,lights:R,selectionLayer:a.selectiveBloom.selectionLayer,intensity:a.selectiveBloom.intensity,luminanceThreshold:a.selectiveBloom.luminanceThreshold,luminanceSmoothing:a.selectiveBloom.luminanceSmoothing,kernelSize:ec(a.selectiveBloom.kernelSize),mipmapBlur:a.selectiveBloom.mipmapBlur,inverted:a.selectiveBloom.inverted,ignoreBackground:a.selectiveBloom.ignoreBackground}),b&&Je(gR,{ref:s,selection:qa,selectionLayer:a.outline.selectionLayer,blendFunction:_i.SCREEN,edgeStrength:d?a.outline.edgeStrength:_o.edgeStrength,pulseSpeed:d?a.outline.pulseSpeed:_o.pulseSpeed,visibleEdgeColor:d?M:_o.visibleEdgeColor,hiddenEdgeColor:d?E:_o.hiddenEdgeColor,kernelSize:d?ec(a.outline.kernelSize):_o.kernelSize,blur:d?a.outline.blur:_o.blur,xRay:d?a.outline.xRay:_o.xRay}),l&&Je(Sx,{objects:c,layer:v,options:w}),a.chromaticAberration.enabled===!0&&Je(iR,{offset:x,radialModulation:a.chromaticAberration.radialModulation,modulationOffset:a.chromaticAberration.modulationOffset}),a.colorAverage.enabled===!0&&Je(aR,{}),a.dotScreen.enabled===!0&&Je(lR,{angle:a.dotScreen.angle,scale:a.dotScreen.scale}),a.glitch.enabled===!0&&Je(uR,{mode:kx(a.glitch.mode),delay:new Xa(a.glitch.delay[0],a.glitch.delay[1]),duration:new Xa(a.glitch.duration[0],a.glitch.duration[1]),strength:new Xa(a.glitch.strength[0],a.glitch.strength[1]),chromaticAberrationOffset:new Xa(a.glitch.chromaticAberrationOffset[0],a.glitch.chromaticAberrationOffset[1]),columns:a.glitch.columns,ratio:a.glitch.ratio,active:!0}),a.grid.enabled===!0&&Je(pR,{scale:a.grid.scale,lineWidth:a.grid.lineWidth}),a.lensflare.enabled===!0&&Je(bx,{config:a.lensflare}),a.godRays.enabled===!0&&Je(dR,{sun:m,samples:a.godRays.samples,density:a.godRays.density,decay:a.godRays.decay,weight:a.godRays.weight,exposure:a.godRays.exposure,clampMax:a.godRays.clampMax,blur:a.godRays.blur,kernelSize:ec(a.godRays.kernelSize)}),a.noise.enabled===!0&&Je(fR,{premultiply:a.noise.premultiply,opacity:a.noise.opacity,blendFunction:_i.ADD}),a.brightnessContrast.enabled===!0&&Je(oR,{brightness:a.brightnessContrast.brightness,contrast:a.brightnessContrast.contrast}),a.hueSaturation.enabled===!0&&Je(mR,{hue:a.hueSaturation.hue,saturation:a.hueSaturation.saturation}),a.toneMapping.enabled===!0&&Je(dx,{exposure:a.toneMapping.exposure}),a.vignette.enabled===!0&&Je(MR,{eskil:a.vignette.eskil,offset:a.vignette.offset,darkness:a.vignette.darkness,blendFunction:_i.NORMAL}),a.toneMapping.enabled===!0&&Je(CR,{mode:Px(a.toneMapping.mode),resolution:a.toneMapping.resolution,whitePoint:a.toneMapping.whitePoint,middleGrey:a.toneMapping.middleGrey,minLuminance:a.toneMapping.minLuminance,averageLuminance:a.toneMapping.averageLuminance,adaptationRate:a.toneMapping.adaptationRate}),a.sepia.enabled===!0&&Je(xR,{intensity:a.sepia.intensity,blendFunction:_i.NORMAL}),a.scanline.enabled===!0&&Je(vR,{density:a.scanline.density,blendFunction:_i.OVERLAY}),a.pixelation.enabled===!0&&Je(bR,{granularity:a.pixelation.granularity}),a.ramp.enabled===!0&&Je(hR,{rampType:Rx(a.ramp.rampType),rampStart:a.ramp.rampStart,rampEnd:a.ramp.rampEnd,startColor:P,endColor:T,opacity:a.ramp.rampMask?1:a.ramp.opacity??.5,rampBias:a.ramp.rampBias,rampGain:a.ramp.rampGain,rampMask:a.ramp.rampMask,rampInvert:a.ramp.rampInvert})]})]})});function LR(e,t){return e.length===t.length&&e.every((n,r)=>n===t[r])}function Ox({hoveredObjectRef:e,selectedObjectRefs:t,...n}){let r=Ka(m=>m.scene),o=Ka(m=>m.camera),i=Ka(m=>m.invalidate),[s,l]=Ax(null),c=Sp(qa);c.current=t??qa;let u=RR(m=>l(m),[]);AR(()=>{if(s)return Mx(s,o)},[s,o]);let p=Sp({effect:null,objects:qa});return wp(()=>{if(!s)return;let a=n.sceneConfig?.postProcessing?.outline.enabled===!0?ER(r):e&&Cx(e)?DR(e):qa;p.current.effect===s&&LR(p.current.objects,a)||(p.current={effect:s,objects:a},s.selection.set(a),i())}),wp(()=>{i()},[t,i]),Je(TR,{...n,onOutlineEffect:u,hasMultiSelection:c.current.length>0,multiOutlineObjects:c})}import{Fragment as $R,jsx as tn,jsxs as Dx}from"react/jsx-runtime";var HR=1.5;function Cp({runtimeStats:e,children:t,camera:n,backgroundColor:r,shadows:o=!0,sceneConfig:i,selectedObjectRef:s,selectedObjectRefs:l,selectedObjectOutlineColor:c,hoveredObjectRef:u,highlightOnHover:p,renderMode:m="demand",maxDpr:a=2,xrStore:f,xrRuntime:d,rendererCaptureRef:b,preserveDrawingBuffer:h=!1,reduceGpuLoad:w,suspended:v=!1,paused:S=!1,onRendererCreated:y,onPointerMissed:R,backend:x="webgl"}){let M=x==="webgpu",E=w??Kb(),P=E?Math.min(a,HR):a,T=o&&!E,O=tc(()=>{if(r)return{background:r};if(!i?.background.enabled)return{background:"transparent"};if(i.background.type==="color")return{background:i.background.color};if(i.background.type==="image"&&i.background.imageUrl.trim()){let $=i.background.imageUrl.trim(),J=il($)??$;return{backgroundImage:`url(${JSON.stringify(J)})`,backgroundPosition:"center",backgroundRepeat:"no-repeat",backgroundSize:"cover"}}return{background:"linear-gradient(180deg, #3a3a3c 0%, #1c1c1d 100%)"}},[r,i]),k=tc(()=>{if(r)return r;let $=i?.background;if($?.enabled){if($.type==="color")return $.color;if($.type==="image"&&$.imageUrl.trim()||$.type==="environment")return null}return"#1c1c1d"},[r,i]),D=tc(()=>{let $=i?.postProcessing;return $?!!($.glitch.enabled||$.noise.enabled||$.lensflare.enabled&&$.lensflare.animated):!1},[i?.postProcessing]),[B,H]=FR(!1),V=i?.environment,W=i?.groundShadows,z=tc(()=>{if(!V)return null;if(V.source==="custom"){let $=V.customEnvironmentUrl.trim();return ub($)?{files:$}:null}return{preset:V.preset}},[V]),A=Dx($R,{children:[tn(lh,{captureRef:b}),e&&tn(ux,{...e,reducedGpuLoad:E,shadows:T,postProcessing:!E&&!M}),tn(ch,{}),tn(Ch,{cameraConfig:n}),tn(vh,{active:D}),tn(xh,{color:k}),z?tn(Ei,{onError:$=>console.warn("Failed to load environment map:",$),children:Dx(zR,{fallback:null,children:[tn(hh,{...z,environmentIntensity:V?.intensity??.25,backgroundIntensity:V?.intensity??.25,background:i?.background.enabled===!0&&i.background.type==="environment"}),tn(wh,{})]})}):null,tn(Sh,{rotation:V?.rotation??0}),f&&d&&tn(d.XRPerformanceManager,{onPresentingChange:H}),W?.enabled&&W.mode==="shadowCatcher"&&!B&&!M&&tn(yh,{position:[0,W.height,0],scale:W.size,opacity:W.intensity,blur:W.borderFade,far:15,resolution:1024,color:"#000000"}),t,tn(Ox,{sceneConfig:i,selectedObjectRef:s,selectedObjectRefs:l,selectedObjectOutlineColor:c,hoveredObjectRef:u,highlightOnHover:p,disabled:E||M}),M?tn(UR,{toneMapping:i?.postProcessing.toneMapping}):null]});return tn(BR,{frameloop:v||S&&!B?"never":m,onCreated:({gl:$})=>y?.($),onPointerMissed:R,dpr:[1,P],shadows:T?"percentage":!1,resize:{debounce:0,scroll:!1},raycaster:{firstHitOnly:!0},style:O,camera:n??{fov:50},gl:M?ah:{preserveDrawingBuffer:h,toneMapping:Tx,toneMappingExposure:1},flat:M||void 0,children:f&&d&&!M?tn(d.XRScene,{store:f,renderMode:m,suspended:v,children:A}):A})}var GR={linear:NR,reinhard:IR,aces:jR};function UR({toneMapping:e}){let t=Ex(s=>s.gl),n=Ex(s=>s.invalidate),r=e?.enabled===!0,o=e?.mode??"aces",i=e?.exposure??1;return VR(()=>{t.toneMapping=r?GR[o]:Tx,t.toneMappingExposure=r?i:1,n()},[t,n,r,o,i]),null}import{useThree as WR}from"@react-three/fiber";import{CameraControls as XR,PointerLockControls as qR}from"@react-three/drei";import{Box3 as KR,Vector3 as Lx}from"three";import{useEffect as Mr,useRef as QR}from"react";import{Fragment as JR,jsx as Mp,jsxs as YR}from"react/jsx-runtime";function Pp({controlsRef:e,onReady:t,onCameraChange:n,cameraLimits:r,controllerType:o="orbit",onPointerLockExit:i,reducedMotion:s=!1,zoom:l=!0,pageScroll:c=!1}){let u=o==="orbit",p=WR(a=>a.frameloop);Mr(()=>{if(!e||typeof e!="object")return;let a=e.current;a&&ad(a,u?p==="never"?"paused":"active":"disconnected")},[e,p,u]),Mr(()=>{let a=e&&typeof e=="object"?e.current:null;return()=>{a&&ad(a,"disconnected")}},[e,u]);let m=QR(null);return Mr(()=>{if(!u)return m.current?.lock(),()=>{m.current?.unlock()}},[u]),Mr(()=>{u&&document.pointerLockElement&&document.exitPointerLock()},[u]),Mr(()=>{if(u)return;let a=()=>{document.pointerLockElement||i?.()};return document.addEventListener("pointerlockchange",a),()=>{document.removeEventListener("pointerlockchange",a)}},[u,i]),Mr(()=>{if(!u||!e||typeof e!="object"||!("current"in e))return;let a=e.current;a&&Wg(a,s)},[u,e,s]),Mr(()=>{if(!u||!n||!e||typeof e!="object"||!("current"in e))return;let a=e.current;if(!a)return;let f=()=>{n(a.camera,a)};return a.addEventListener("update",f),()=>{a.removeEventListener("update",f)}},[u,e,n]),Mr(()=>{if(!u||!e||typeof e!="object"||!("current"in e))return;let a=e.current;if(!a)return;let f=Ph(r);a.minDistance=f.minDistance,a.maxDistance=f.maxDistance,a.minPolarAngle=f.minPolarAngle,a.maxPolarAngle=f.maxPolarAngle,a.minAzimuthAngle=f.minAzimuthAngle,a.maxAzimuthAngle=f.maxAzimuthAngle,a.boundaryEnclosesCamera=f.boundaryEnclosesCamera,a.boundaryFriction=f.boundaryFriction,a.setBoundary(f.panBoundary?new KR(new Lx(...f.panBoundary[0]),new Lx(...f.panBoundary[1])):void 0)},[u,e,r?.minDistance,r?.maxDistance,r?.minPolarAngle,r?.maxPolarAngle,r?.minAzimuthAngle,r?.maxAzimuthAngle,r?.boundaryEnclosesCamera,r?.boundaryFriction,r?.panBoundary]),Mr(()=>{let a=u&&e&&typeof e=="object"?e.current:null;return t?.(a),()=>t?.(null)},[u,e,t]),u?YR(JR,{children:[Mp(XR,{ref:e,makeDefault:!0,smoothTime:s?0:.3,dollyToCursor:!0}),Mp(kh,{controlsRef:e,zoom:l,pageScroll:c})]}):Mp(qR,{ref:m,makeDefault:!0,selector:"[data-ri-pointer-lock-trigger]"})}import{useRef as rc,useMemo as Ya,useEffect as ZR}from"react";import{useFrame as jx,useThree as Nx}from"@react-three/fiber";import{Vector3 as eA}from"three";var Ja=new WeakMap;function _x(e,t,n){let r=Ja.get(e);r||(r=new Map,Ja.set(e,r)),r.set(t,n)}function nc(e,t){let n=Ja.get(e);n?.delete(t),n?.size===0&&Ja.delete(e)}function Bx(e,t){return Ja.get(e)?.get(t)??null}import{Fragment as rA,jsx as jo,jsxs as oA}from"react/jsx-runtime";function Bo(e,t){if(!t)return e;let n=t*Math.PI/180,r=Math.cos(n),o=Math.sin(n);return[e[0]*r+e[2]*o,e[1],-e[0]*o+e[2]*r]}function Ix(e,t,n=[0,0,0]){let[r,o,i]=e.center,s=e.radius,l=[t[0]-n[0],t[1]-n[1],t[2]-n[2]],c=Math.hypot(l[0],l[1],l[2]),u=c>1e-6?[l[0]/c,l[1]/c,l[2]/c]:[0,1,0],p=s*2;return{position:[r+u[0]*p,o+u[1]*p,i+u[2]*p],target:e.center,extent:s,near:Math.max(s/100,.001),far:p+s*2}}function zx(e,t){let n=t[0]-e.center[0],r=t[1]-e.center[1],o=t[2]-e.center[2],i=Math.hypot(n,r,o);return{near:Math.max(i-e.radius,i*.01,.001),far:i+e.radius*2}}function Vx(e,t){if(!e)return;let n=e.shadow.camera,r=t?.near??.5,o=t?.far??40;n.near=r,n.far=o,n.updateProjectionMatrix()}function Za(e,t,n){return t&&n&&!e.attachedToCamera?n.center:[0,0,0]}var tA={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:[3,6,3],attachedToCamera:!1,castShadow:!0,shadowBias:-5e-4,visible:!0},{id:"light-fill",type:"directional",color:"#ffffff",intensity:0,position:[-3,4,-3],attachedToCamera:!1,castShadow:!1,shadowBias:-5e-4,visible:!0}]},nA={enabled:!0,mapSize:2048,bias:-5e-4,normalBias:.02,radius:3};function Fx({light:e,shadows:t,shadowsEnabled:n,environmentRotation:r,modelBounds:o,objectBindings:i,nodeRefs:s}){let l=rc(null),c=rc(null),u=rc(null),p=Nx(S=>S.camera),m=Nx(S=>S.scene),a=Ya(()=>new eA,[]),f=Ya(()=>e.attachedToCamera||e.attachment?e.position:Bo(e.position,r),[e.position,e.attachedToCamera,e.attachment,r]);jx(()=>{let S=l.current??c.current??u.current;if(!S)return;if(e.attachedToCamera){S.position.copy(p.position);return}let y=e.attachment;if(!y)return;let R=i?Ys(i,y.objectId):null,M=(R?i?.[R]:void 0)?.modelObjectId??y.objectId,E=(R?s?.current[R]:void 0)??Ur(m,M);E&&(a.fromArray(y.offset),E.localToWorld(a),S.position.copy(a))});let d=n&&t.enabled&&e.castShadow,b=Ya(()=>(e.type==="spot"||e.type==="directional")&&e.target&&!e.attachedToCamera?e.attachment?e.target:Bo(e.target,r):null,[e.type,e.target,e.attachedToCamera,e.attachment,r]),h=Ya(()=>e.type==="directional"&&d&&o&&!e.attachedToCamera?Ix(o,f,b??void 0):null,[e.type,e.attachedToCamera,d,o,f,b]),w=Ya(()=>e.type==="spot"&&d&&o&&!e.attachedToCamera?zx(o,f):null,[e.type,e.attachedToCamera,d,o,f]);ZR(()=>{let S=l.current??u.current;if(!S)return;let[y,R,x]=b&&!(e.type==="directional"&&h)?b:h?.target??Za(e,d,o);S.target.position.set(y,R,x),S.target.updateMatrixWorld()},[e,d,o,b,h]);let v=rc(!1);return jx(()=>{let S=l.current??c.current??u.current;if(!S||e.attachedToCamera||e.attachment)return;let y=l.current??u.current,R=Bx(m,e.id);if(!R){if(!v.current)return;if(v.current=!1,S.position.fromArray(h?.position??f),Vx(u.current,w),y){let[P,T,O]=b&&!(e.type==="directional"&&h)?b:h?.target??Za(e,d,o);y.target.position.set(P,T,O),y.target.updateMatrixWorld()}return}v.current=!0;let x=Bo(R.position,r),M=R.target?Bo(R.target,r):b??Za(e,d,o),E=e.type==="directional"&&d&&o?Ix(o,x,M):null;S.position.fromArray(E?.position??x),Vx(u.current,d&&o?zx(o,x):null),y&&(y.target.position.fromArray(E?.target??M),y.target.updateMatrixWorld())}),!e.visible||e.type==="none"?null:e.type==="directional"?jo("directionalLight",{ref:l,color:e.color,intensity:e.intensity,position:h?.position??f,castShadow:d,"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":h?.near??.5,"shadow-camera-far":h?.far??40,"shadow-camera-left":-(h?.extent??8),"shadow-camera-right":h?.extent??8,"shadow-camera-top":h?.extent??8,"shadow-camera-bottom":-(h?.extent??8)}):e.type==="point"?jo("pointLight",{ref:c,color:e.color,intensity:e.intensity,position:f,distance:e.distance,decay:e.decay,castShadow:d,"shadow-mapSize-width":t.mapSize,"shadow-mapSize-height":t.mapSize,"shadow-bias":e.shadowBias}):e.type==="spot"?jo("spotLight",{ref:u,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:d,"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":w?.near??.5,"shadow-camera-far":w?.far??40}):e.type==="hemisphere"?jo("hemisphereLight",{color:e.color,groundColor:"#444444",intensity:e.intensity}):null}function kp({lightingConfig:e,shadowConfig:t,shadowsEnabled:n=!0,environmentRotation:r=0,environmentConfig:o,modelBounds:i,objectBindings:s,nodeRefs:l}){let c=e??tA,u=t??nA,p=o?.shadowLight,m=Bo([5,10,5],r);return oA(rA,{children:[jo("ambientLight",{intensity:c.ambient.intensity,color:c.ambient.color}),c.lights.map(a=>jo(Fx,{light:a,shadows:u,shadowsEnabled:n,environmentRotation:r,modelBounds:i,objectBindings:s,nodeRefs:l},a.id)),p?.enabled&&jo(Fx,{light:{id:"light-env-shadow",type:"directional",color:"#ffffff",intensity:p.intensity,position:m,attachedToCamera:!1,castShadow:!0,shadowBias:p.bias,visible:!0},shadows:u,shadowsEnabled:n,environmentRotation:0,modelBounds:i,objectBindings:s,nodeRefs:l})]})}import{useState as Ap,useEffect as $e,useRef as _t,useMemo as St,useCallback as aA,Suspense as sA}from"react";import{useFrame as oc,useThree as $x}from"@react-three/fiber";import{useCallback as iA,useEffect as Hx,useRef as Rp,useState as Gx}from"react";function Ux(e,t,n){let[r,o]=Gx({}),i=Rp(new Map),[s,l]=Gx(0),c=Rp(t);c.current=t;let u=Rp(n);u.current=n;let p=iA((m,a)=>{c.current?.some(f=>f.url===m)&&o(f=>f[m]===a?f:{...f,[m]:a})},[]);return Hx(()=>{let m=new Set(t?.map(f=>f.url)),a=!1;for(let[f,d]of i.current)m.has(f)&&r[f]===d&&d.parent===e||(d.removeFromParent(),i.current.delete(f),a=!0);for(let[f,d]of Object.entries(r))!m.has(f)||i.current.get(f)===d||(e.add(d),i.current.set(f,d),a=!0,u.current?.(f,d));o(f=>{let d=Object.entries(f).filter(([b])=>m.has(b));return d.length===Object.keys(f).length?f:Object.fromEntries(d)}),a&&l(f=>f+1)},[e,t,r]),Hx(()=>()=>{i.current.forEach(m=>m.removeFromParent()),i.current.clear()},[]),{rootsByUrl:r,revision:s,onSourceReady:p}}import{Color as lA,MeshStandardMaterial as cA,MeshBasicMaterial as Op,MeshNormalMaterial as uA,MeshMatcapMaterial as dA,DoubleSide as pA,NormalBlending as mA,Box3 as ic,Vector3 as No,Matrix4 as fA,MathUtils as ac}from"three";import{SkeletonUtils as Wx}from"three-stdlib";import{jsx as lc,jsxs as hA}from"react/jsx-runtime";function sc(e,t,n){let r=n.get(e);r&&(t?.rotation?e.rotation.set(t.rotation[0],t.rotation[1],t.rotation[2],r.rotation.order):e.rotation.copy(r.rotation),t?.scale?e.scale.fromArray(t.scale):e.scale.copy(r.scale),e.position.fromArray(Ah(t?.position??r.position.toArray(),[e.rotation.x,e.rotation.y,e.rotation.z],e.scale.toArray(),t?.pivot,r.rotation.order,t?.shear)),ol(e,t?.shear))}function Lt(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 Bi(e){let t=e,n=Number(t.clearcoat)>0,r=Number(t.sheen)>0,o=Number(t.anisotropy)>0,i=Number(t.transmission)>0,s=t.transparent===!1&&t.blending===mA&&t.alphaToCoverage!==!0;return[Lt(t.map),Lt(t.aoMap),Lt(t.lightMap),Lt(t.bumpMap),Lt(t.normalMap,!0),t.normalMap?t.normalMapType:"",Lt(t.displacementMap),Lt(t.emissiveMap),Lt(t.metalnessMap),Lt(t.roughnessMap),o,Lt(o?t.anisotropyMap:null),n,Lt(n?t.clearcoatMap:null),Lt(n?t.clearcoatNormalMap:null,!0),Lt(n?t.clearcoatRoughnessMap:null),r,Lt(r?t.sheenColorMap:null),Lt(r?t.sheenRoughnessMap:null),Lt(t.specularColorMap),Lt(t.specularIntensityMap),i,Lt(i?t.transmissionMap:null),Lt(i?t.thicknessMap:null),Lt(t.alphaMap),Number(t.alphaTest)>0,!!t.alphaHash,!!t.flatShading,!!t.dithering,!!t.vertexColors,t.side,s].join("|")}var gA={};function es({url:e,objectBindings:t,selectedItem:n,itemMaterials:r,interactive:o=!0,onItemClick:i,onItemHover:s,onItemDoubleClick:l,onItemContextMenu:c,onModelLoaded:u,onAnimationsReady:p,nodeRefsOut:m,onNodeRefsChange:a,materialRefsOut:f,panelHoveredItem:d,sceneConfig:b,zoomOnSelected:h=!0,highlightOnHover:w=!0,decoderConfig:v,modelFormat:S,onLoadProgress:y,explodeFactor:R=0,suspendBindingTransforms:x=!1,originalNodePoses:M,mergeModels:E,onMergeModelLoaded:P,onMergeModelError:T,pulses:O=gA}){let k=Ea(e,v,S,y),D=$x(L=>L.invalidate),[B,H]=Ap(null),V=_t(null),{setCanvasCursor:W,restoreCanvasCursor:z}=_h();$e(()=>{(!o||!w)&&(H(null),s?.(null),z())},[o,w,s,z]);let A=St(()=>{let L=Wx.clone(k.scene),j=Oa(k.scene);return j&&Jb(L,j),wd(L),L},[k.scene]),{rootsByUrl:$,revision:J,onSourceReady:ae}=Ux(A,E,P),Z=_t(new Map),[Y,te]=Ap(0),U=aA((L,j,I)=>{ae(L,j),Z.current.get(L)!==I&&(Z.current.set(L,I),te(F=>F+1))},[ae]);$e(()=>{let L=new Set(E?.map(I=>I.url)),j=!1;for(let I of Z.current.keys())L.has(I)||(Z.current.delete(I),j=!0);j&&te(I=>I+1)},[E]);let N=St(()=>Hr(A),[A,J]),K=N.nodesById,{originalMaterials:ne,ownMeshes:Fe}=St(()=>{let L=new WeakMap,j=new WeakSet;return A.traverse(I=>{pn(I)&&(L.set(I,I.material),j.add(I))}),{originalMaterials:L,ownMeshes:j}},[A]);St(()=>{A.traverse(L=>{pn(L)&&!ne.has(L)&&ne.set(L,L.material)})},[A,J,ne]);let Q=k.materialVariants,Ee=(b?gr(b.model):[]).join(`
63
+ `),[we,pt]=Ap(null);$e(()=>{let L=Ee?Ee.split(`
64
+ `):[],j=[];for(let F of L){let re=Q?Q.names.indexOf(F):-1;if(re>=0){j.push(re);continue}console.warn(`[react-immersive] The model has no material variant "${F}".`+(Q?` Its variants are: ${Q.names.join(", ")}.`:" It has no material variants."))}if(!Q||j.length===0){pt(null);return}let I=!1,ee=[];return A.traverse(F=>{if(!pn(F)||!Fe.has(F))return;let re=Mb(Cb(F),j);re!==null&&ee.push(Q.resolveMaterial(re,F).then(me=>[F,me]))}),Promise.all(ee).then(F=>{I||pt({scene:A,key:Ee,materials:new Map(F)})}).catch(F=>{I||console.warn(`[react-immersive] Material variants "${L.join('", "')}" failed to load.`,F)}),()=>{I=!0}},[A,Fe,Q,Ee]);let qe=we?.scene===A?we.materials:void 0,vt=L=>qe?.get(L)??ne.get(L)??Lh(L);$e(()=>{N.duplicateNames.size!==0&&console.warn("[react-immersive] Duplicate model node names were assigned unique binding IDs.",Object.fromEntries(N.duplicateNames))},[N]);let ut=St(()=>new WeakMap,[A]),mt=St(()=>{let L=new WeakMap;if(A.traverse(j=>{let I=ut.get(j);I||(I={position:j.position.clone(),rotation:j.rotation.clone(),scale:j.scale.clone()},ut.set(j,I)),L.set(j,{position:I.position.clone(),rotation:I.rotation.clone(),scale:I.scale.clone()})}),M)for(let[j,I]of Object.entries(M)){let ee=K[j],F=ee&&L.get(ee);F&&(F.position.fromArray(I.position),I.rotation&&F.rotation.set(I.rotation[0],I.rotation[1],I.rotation[2],F.rotation.order),I.scale&&F.scale.fromArray(I.scale))}return L},[A,K,M,ut]);$e(()=>{let L=!1,j=null,I=null,ee=window,F=Object.entries(K).filter(([,Ve])=>pn(Ve)),re=new ic,me=[],nt=0;A.traverse(Ve=>{!pn(Ve)||Ve.userData[Oo]||(Ve.castShadow=!1,Ve.receiveShadow=!0)});let We=()=>{if(L)return;let Ve=new Set,bt=re.getSize(new No),xe=new No;for(let{name:Nt,box:rn}of me)rn.getSize(xe),xe.x>bt.x*.7&&xe.z>bt.z*.7&&xe.y>bt.y*.4&&Ve.add(Nt);A.traverse(Nt=>{if(!pn(Nt)||Nt.userData[Oo])return;let rn=Gr(Nt);Nt.castShadow=!rn||!Ve.has(rn),Nt.receiveShadow=!0}),D()},Mt=()=>{L||(ee.requestIdleCallback?j=ee.requestIdleCallback(gt,{timeout:100}):I=window.setTimeout(()=>gt(),0))},gt=Ve=>{if(j=null,I=null,L)return;let bt=performance.now(),xe=0;for(;nt<F.length&&!(xe>0&&!(Ve?Ve.didTimeout?xe<16:Ve.timeRemaining()>1:performance.now()-bt<8));){let[Nt,rn]=F[nt];nt+=1,xe+=1;let yn=new ic().setFromObject(rn);yn.isEmpty()||(me.push({name:Nt,box:yn}),re.union(yn))}nt<F.length?Mt():We()};return Mt(),()=>{L=!0,j!==null&&ee.cancelIdleCallback?.(j),I!==null&&window.clearTimeout(I)}},[D,K,A]),$e(()=>{xl(A,{precise:!0})},[A,J]),$e(()=>{let L=new AbortController;return nh(A,L.signal),()=>{L.abort(),oh(A)}},[A,J]);let jt=St(()=>{let L={};for(let[j,I]of Object.entries(t))L[I.modelObjectId??j]=j;return L},[t]),X=St(()=>Object.entries(t).map(([L,j])=>`${L}${j.modelObjectId??L}`).sort().join(""),[t]),ie=St(()=>Object.entries(t).map(([L,j])=>JSON.stringify([L,j.modelObjectId??L,j.transform??null])).sort().join(""),[t]),Re=_t(new Map);$e(()=>{let L=new Map,j=new Map;for(let[F,re]of Object.entries(t)){if(!re.transform)continue;let me=K[re.modelObjectId??F];me&&(L.set(me,re.transform),j.set(me,$r(me)))}let I=new Set([...Re.current.keys(),...L.keys()]);for(let F of I){sc(F,void 0,mt);for(let re of $r(F))fr(re)}A.updateMatrixWorld(!0);let ee=new Map;for(let F of j.values())for(let re of F)if(!ee.has(re)){let me=[];for(let nt=re;nt;nt=nt.parent)me.unshift(nt.matrix.clone());ee.set(re,{world:re.matrixWorld.clone(),transforms:me})}for(let[F,re]of L)sc(F,re,mt);Re.current=L,A.updateMatrixWorld(!0);for(let[F,re]of ee)bi(F,re.world,re.transforms);D()},[A,K,mt,ie,D]),$e(()=>()=>{for(let L of $r(A))fr(L)},[A]);let he=St(()=>{let L={};for(let[j,I]of Object.entries(t)){let ee=I.modelObjectId??j,F=K[ee];if(!pn(F))continue;let re=vt(F);re&&(L[j]=Da(re,me=>{let nt=Oh(me),We=Eh(nt??new cA);return Dh(We),We}))}return L},[K,X,ne,qe]);$e(()=>(f&&(f.current=he),()=>{f?.current===he&&(f.current={})}),[he,f]),$e(()=>()=>{for(let L of Object.values(he))br(L,j=>{sb(j.userData),j.dispose()})},[he]);let Pe=b?.model.shading??"lit",Ae=b?.model.renderer??"pbr",He=b?.wireframe.enabled??!1,Ot=b?.wireframe.color??"#93c5fd",Xt=b?.wireframe.opacity??1,Ct=St(()=>{let L={};if(Pe!=="unlit")return L;for(let[j,I]of Object.entries(he))L[j]=Da(I,ee=>{let F=new Op;return F.color.copy(ee.color),F.map=ee.map,F.alphaMap=ee.alphaMap,F.alphaTest=ee.alphaTest,F.transparent=ee.transparent,F.opacity=ee.opacity,F.side=ee.side,F});return L},[he,Pe]),bn=St(()=>{let L={};if(Pe!=="normals")return L;for(let[j,I]of Object.entries(he))L[j]=Da(I,()=>new uA);return L},[he,Pe]),Et=St(()=>{let L={};if(Pe!=="lit"||Ae!=="matcap")return L;let j=lb();for(let[I,ee]of Object.entries(he))L[I]=Da(ee,F=>{let re=new dA;return re.matcap=j,re.color.copy(F.color),re.alphaMap=F.alphaMap,re.alphaTest=F.alphaTest,re.side=F.side,re});return L},[he,Pe,Ae]);$e(()=>()=>{for(let L of Object.values(Ct))br(L,j=>j.dispose());for(let L of Object.values(bn))br(L,j=>j.dispose());for(let L of Object.values(Et))br(L,j=>j.dispose())},[Ct,bn,Et]);let qt=L=>Pe==="normals"?bn[L]:Pe==="unlit"?Ct[L]:Ae==="matcap"?Et[L]:he[L],yt=_t(u);yt.current=u,$e(()=>{yt.current?.(A)},[A]);let se=St(()=>{let L={};for(let[j,I]of Object.entries(t)){let ee=I.modelObjectId??j,F=K[ee];F&&(L[j]=F)}return L},[K,X]);$e(()=>(m.current=se,a?.(),()=>{m.current===se&&(m.current={})}),[se,m,a]);let pe=_t({});$e(()=>()=>{for(let L of Object.values(pe.current))for(let[j,I]of Object.entries(L))I&&vi(I,yi(j));pe.current={}},[]);let Ge=_t(new Map);$e(()=>()=>{Ge.current.clear()},[]);let ze=St(()=>{let L=new Map;for(let[j,I]of Object.entries(t)){let ee=d===I||d?.id===I.id||d?.modelObjectId===I.modelObjectId,F=w&&(B===j||ee),re=F||n===j;(F||re)&&L.set(j,{emissive:F,matcap:re})}return L},[t,w,B,n,d]),Ue=_t(ze);Ue.current=ze,$e(()=>{let L=new Set;for(let[j,I]of Object.entries(t)){L.add(j);let ee=I.modelObjectId??j,F=K[ee];if(!F)continue;if(I.removed){F.parent&&(Ge.current.set(F,F.parent),F.parent.remove(F),A.dispatchEvent({type:"childremoved",child:F}));continue}let re=Ge.current.get(F);if(re&&(F.parent||(re.add(F),A.dispatchEvent({type:"childadded",child:F})),Ge.current.delete(F)),F.visible=I.visible!==!1,!pn(F))continue;let me=he[j];if(!me)continue;if(Ae!=="uv-checker"){let xe=qt(j);xe&&(F.material=xe)}if(I.visible===!1)continue;let nt=Ct[j],We=Et[j],Mt=r[j]??r[I.modelObjectId??j],gt=I.style?.material,Ve=pe.current[j]??{};for(let xe of Aa){let Nt=Gb(gt,xe),rn=Ve[xe];if(rn===Nt)continue;let yn=yi(xe);rn&&vi(rn,yn),Nt?(al(Nt,yn,D),Ve[xe]=Nt):delete Ve[xe]}Object.keys(Ve).length>0?pe.current[j]=Ve:delete pe.current[j];let bt=Mt?.hex??gt?.baseColor;br(me,(xe,Nt)=>{let rn=Bi(xe);Th(xe,gt,bt);let yn=xe.userData.reactImmersiveConfiguredEmissive;yn?.isColor?yn.copy(xe.emissive):xe.userData.reactImmersiveConfiguredEmissive=xe.emissive.clone();let ar=Ue.current.get(j);ar?.emissive&&xe.emissive.add(Ma),rn!==Bi(xe)&&(xe.needsUpdate=!0);let cn=yl(nt,Nt);if(cn){let qo=Bi(cn);cn.color.copy(xe.color),cn.map=xe.map,cn.vertexColors=xe.vertexColors,cn.alphaMap=xe.alphaMap,cn.alphaTest=xe.alphaTest,cn.transparent=xe.transparent,cn.opacity=xe.opacity,cn.side=xe.side,qo!==Bi(cn)&&(cn.needsUpdate=!0)}let on=yl(We,Nt);if(on){let qo=Bi(on);ar?.matcap?on.color.set(hi.color):on.color.copy(xe.color),on.map=xe.map,on.vertexColors=xe.vertexColors,on.alphaMap=xe.alphaMap,on.alphaTest=xe.alphaTest,on.transparent=xe.transparent,on.opacity=xe.opacity,on.side=xe.side,qo!==Bi(on)&&(on.needsUpdate=!0)}})}for(let j of Object.keys(pe.current))if(!L.has(j)){for(let[I,ee]of Object.entries(pe.current[j]))ee&&vi(ee,yi(I));delete pe.current[j]}D()},[t,K,he,Ct,bn,Et,r,Pe,Ae,D]);let Kt=_t(new Map);$e(()=>{let L=Kt.current,j=new Set([...L.keys(),...ze.keys()]),I=!1;for(let ee of j){let F=L.get(ee),re=ze.get(ee),me=!!F?.emissive!=!!re?.emissive,nt=!!F?.matcap!=!!re?.matcap;if(!me&&!nt)continue;I=!0;let We=he[ee],Mt=Et[ee];We&&br(We,(gt,Ve)=>{let bt=gt.userData.reactImmersiveConfiguredEmissive;me&&bt?.isColor&&(gt.emissive.copy(bt),re?.emissive&&gt.emissive.add(Ma));let xe=yl(Mt,Ve);nt&&xe&&(re?.matcap?xe.color.set(hi.color):xe.color.copy(gt.color))})}Kt.current=ze,I&&D()},[ze,he,Et,D]),jy({objectBindings:t,nodeMap:K,invalidate:D});let ft=St(()=>Object.entries(O).map(([L,j])=>({key:L,color:new lA(j.color),speed:j.speed})),[O]),Vt=_t(new Set);$e(()=>{let L=new Set(ft.map(({key:j})=>j));for(let j of Vt.current){if(L.has(j)||!he[j])continue;let I=Ue.current.get(j)?.emissive;br(he[j],ee=>{let F=ee.userData.reactImmersiveConfiguredEmissive;F?.isColor&&(ee.emissive.copy(F),I&&ee.emissive.add(Ma))})}Vt.current=L,D()},[ft,he,D]),oc(({clock:L})=>{if(ft.length===0)return;let j=L.getElapsedTime();for(let{key:I,color:ee,speed:F}of ft){let re=he[I];if(!re)continue;let me=(1-Math.cos(2*Math.PI*F*j))/2,nt=Ue.current.get(I)?.emissive;br(re,We=>{let Mt=We.userData.reactImmersiveConfiguredEmissive;Mt?.isColor&&(We.emissive.copy(Mt).lerp(ee,me),nt&&We.emissive.add(Ma))})}D()}),$e(()=>{if(Ae==="uv-checker")return;let L=new Set(Object.values(se)),j=!1;A.traverse(I=>{if(!pn(I)||L.has(I)||!ne.has(I))return;let ee=qe?.get(I)??ne.get(I);I.material!==ee&&(I.material=ee,j=!0)}),j&&D()},[A,se,ne,qe,Ae,D]),$e(()=>{if(Ae!=="uv-checker")return;let L=cb(),j=[];return A.traverse(I=>{if(!pn(I)||I.userData[Oo])return;let ee=I.material,F=Array.isArray(ee)?ee:[ee],re=!!I.geometry.getAttribute("uv"),me=F.map((We,Mt)=>{let gt=new Op({color:re?"#ffffff":"#ff00ff",map:re?L:null,side:We.side});return gt.name=`${I.name||"mesh"}-uv-checker-${Mt}`,gt.toneMapped=!1,gt}),nt=Array.isArray(ee)?me:me[0];I.material=nt,j.push({node:I,original:ee,diagnostic:nt})}),D(),()=>{for(let{node:I,original:ee,diagnostic:F}of j){I.material=ee;let re=Array.isArray(F)?F:[F];for(let me of re)me.dispose()}D()}},[A,Ae,D,J]),$e(()=>{if(!He)return;let L=[];for(let[j,I]of Object.entries(t)){let ee=I.modelObjectId??j,F=K[ee];if(!pn(F))continue;let re=new Op({color:Ot,wireframe:!0,transparent:!0,opacity:Xt,depthTest:!1,depthWrite:!1,side:pA,toneMapped:!1}),me=F.clone(!1);me.name="",me.position.set(0,0,0),me.quaternion.identity(),me.scale.set(1,1,1),me.matrix.identity(),me.matrixAutoUpdate=!0,me.material=re,me.castShadow=!1,me.receiveShadow=!1,me.frustumCulled=!1,me.renderOrder=1,me.userData={isWireframeOverlay:!0},me.raycast=()=>{},F.morphTargetInfluences&&(me.morphTargetInfluences=F.morphTargetInfluences),F.add(me),L.push({node:F,overlay:me})}return D(),()=>{for(let{node:j,overlay:I}of L)j.remove(I),I.material.dispose()}},[He,Ot,Xt,K,t,D]);let xt=St(()=>{let L=Array.from(Z.current.values()).flat();return Wb([...k.animations,...L])},[k.animations,Y]);$e(()=>{A.animations=xt.map(({clip:L})=>L)},[A,xt]);let hn=_t(p);hn.current=p;let Bn=_t(b);Bn.current=b;let vn=$x(L=>L.frameloop==="never"),Qt=_t(vn);Qt.current=vn;let Ft=_t(null),wt=_t(null),Dt=_t(new Set),ln=_t(0),Ht=L=>{Dt.current.forEach(j=>j({...L,isRenderPaused:Qt.current}))};$e(()=>{let L=$b({root:A,clips:xt,getClipConfig:I=>Ub(Bn.current,I),onChange:()=>{Ht(L.getState()),xl(A),D()}});Ft.current=L,wt.current={clips:xt.map(({sourceName:I})=>I),clipDetails:xt.map(({sourceName:I,duration:ee})=>({sourceName:I,duration:ee})),play:L.play,pause:L.pause,stop:L.stop,setSpeed:L.setSpeed,seek:L.seek,getState:()=>({...L.getState(),isRenderPaused:Qt.current}),subscribe:I=>(Dt.current.add(I),I({...L.getState(),isRenderPaused:Qt.current}),()=>{Dt.current.delete(I)})},Ht(L.getState());let j=Bn.current?.animations.autoplayClip;return j&&L.play(j),()=>{L.dispose(),Ft.current=null,wt.current=null,Ht(L.getState())}},[A,xt]),$e(()=>{Ft.current&&Ht(Ft.current.getState())},[vn]);let jn=!!p;$e(()=>{jn&&wt.current&&hn.current?.(wt.current)},[A,xt,jn,o]),$e(()=>{b?.animations&&Ft.current?.applyClipConfigs()},[b?.animations]),oc((L,j)=>{let I=Ft.current;if(I?.isRunning()){if(I.update(j),!x)for(let[ee,F]of Re.current)sc(ee,F,mt);ln.current+=j,xl(A,{updateFallbacks:ln.current>=.066}),D(),ln.current>=.066&&(ln.current=0,Ht(I.getState()))}});let nn=St(()=>(b?.model.rotation??[0,0,0]).map(L=>L*Math.PI/180),[b?.model.rotation]);oc((L,j)=>{if(!V.current)return;let I=V.current.rotation;I.x=ac.lerp(I.x,nn[0],1-Math.exp(-5*j)),I.y=ac.lerp(I.y,nn[1],1-Math.exp(-5*j)),I.z=ac.lerp(I.z,nn[2],1-Math.exp(-5*j)),Math.abs(I.x-nn[0])<1e-4&&Math.abs(I.y-nn[1])<1e-4&&Math.abs(I.z-nn[2])<1e-4||D()});let Wo=_t([]),Xo=_t(0),Wn=_t(0),Qi=St(()=>new No,[]);$e(()=>{let L=new Map;for(let[We,Mt]of Object.entries(t)){let gt=K[Mt.modelObjectId??We];gt&&L.set(gt,Mt)}for(let We of Wo.current)sc(We.node,L.get(We.node)?.transform,mt);Wn.current=0,A.updateWorldMatrix(!0,!0);let j=new ic().setFromObject(A),I=j.getCenter(new No),ee=j.getSize(new No).length()*.5;Xo.current=Number.isFinite(ee)?ee:0;let F=[...L.keys()],re=new Set(F),me=[],nt=new No;for(let We of F){if(!We.parent)continue;let Mt=We.parent,gt=!1;for(;Mt;){if(re.has(Mt)){gt=!0;break}Mt=Mt.parent}if(gt)continue;let Ve=new ic().setFromObject(We);if(Ve.isEmpty())continue;Ve.getCenter(nt);let bt=nt.clone().sub(I);bt.lengthSq()<1e-8||(bt.normalize(),me.push({node:We,restLocalPos:We.position.clone(),restWorldPos:We.getWorldPosition(new No),worldDir:bt,parentInverse:new fA().copy(We.parent.matrixWorld).invert()}))}Wo.current=me,D()},[A,K,X,ie,mt,D]),$e(()=>{D()},[R,D]),oc((L,j)=>{let I=Wo.current;if(I.length===0)return;let ee=Math.min(Math.max(R,0),1),F=Wn.current;if(Math.abs(F-ee)<1e-4){if(F===ee)return;Wn.current=ee}else Wn.current=ac.lerp(F,ee,1-Math.exp(-6*j)),D();let re=Wn.current*Xo.current;for(let me of I)Qi.copy(me.worldDir).multiplyScalar(re).add(me.restWorldPos).applyMatrix4(me.parentInverse),me.node.position.copy(Qi),me.node.matrixAutoUpdate||(me.node.matrix.setPosition(me.node.position),me.node.matrixWorldNeedsUpdate=!0)});let or=L=>{if(!Rh(L))return null;let j=L;for(;j;){let I=Gr(j),ee=I?jt[I]:void 0;if(ee&&t[ee]){let F=t[ee];return F.visible===!1?null:[ee,F]}j=j.parent}return null},ir=L=>{let j=or(L);if(!j)return null;let[I,ee]=j;return K[ee.modelObjectId??I]??null},io=gh(L=>{let j=or(L);return j&&j[1].selectable!==!1?j[1]:null},o?c:void 0,ir),gs=L=>{if(io.consumeClick())return;let j=or(L.object);if(!j)return;let[,I]=j;I.selectable!==!1&&(L.stopPropagation(),i(I,xd(L,ir(L.object))))},ao=L=>{let j=or(L.object);if(!j)return;let[,I]=j;if(I.selectable===!1)return;l?.(I,xd(L,ir(L.object)))&&L.stopPropagation()},bs=L=>{if(!w)return;let j=or(L.object);if(!j)return;let[I,ee]=j;ee.hoverable!==!1&&(L.stopPropagation(),W("pointer"),H(I),s?.(ee))},Nc=L=>{w&&(L.stopPropagation(),z(),H(null),s?.(null))},so=St(()=>!bl(A),[A,J]);return $e(()=>{let L=Ee&&(we?.scene!==A||we.key!==Ee),j=E?.some(I=>!$[I.url]||$[I.url].parent!==A);return md(A,L?"Wait for the selected material variants to finish loading before preparing AR.":j?"Wait for all merged models to finish loading before preparing AR.":Ae!=="pbr"?"Switch the model renderer to PBR before preparing a USDZ snapshot, or provide arHandoff.createUSDZ.":void 0),()=>md(A)},[A,we,Ee,E,$,J,Ae]),hA("group",{ref:V,children:[lc("primitive",{object:A,...o&&so?{onClick:gs,onDoubleClick:ao,...c?{onPointerDown:io.onPointerDown}:{},...w?{onPointerOver:bs,onPointerOut:Nc}:{}}:{}}),E?.map(L=>lc(Yn,{onLoadError:j=>T?.(L.url,j),children:lc(sA,{fallback:null,children:lc(bA,{url:L.url,namePrefix:L.namePrefix,decoderConfig:v,onReady:U})})},L.url))]})}function bA({url:e,namePrefix:t,decoderConfig:n,onReady:r}){let o=Ea(e,n),i=St(()=>{let c=Wx.clone(o.scene);return Vg(c,t),wd(c),c},[o.scene,t]),s=St(()=>o.animations.map(c=>Fg(c,t)),[o.animations,t]),l=_t(r);return l.current=r,$e(()=>{l.current(e,i,s)},[e,i,s]),null}import{Suspense as vA,useEffect as yA,useRef as xA}from"react";import{jsx as cc}from"react/jsx-runtime";function wA({url:e,decoderConfig:t,onModelLoaded:n}){let{scene:r}=Ea(e,t),o=xA(n);return o.current=n,yA(()=>{o.current?.(r)},[r]),cc("primitive",{object:r})}function Xx({url:e,decoderConfig:t,onLoadError:n,onModelLoaded:r}){return cc(Yn,{onLoadError:o=>n?.(e,o),children:cc(vA,{fallback:null,children:cc(wA,{url:e,decoderConfig:t,onModelLoaded:r})})})}import{Suspense as SA,useCallback as qx,useMemo as CA,useRef as Kx}from"react";import{jsx as uc}from"react/jsx-runtime";var MA={};function Qx({entry:e,isActive:t,decoderConfig:n,itemMaterials:r,sceneConfig:o,zoomOnSelected:i,highlightOnHover:s,explodeFactor:l,suspendBindingTransforms:c,onLoadProgress:u,onAnimationsReady:p,onModelAnimationsReady:m,onLoadError:a,onModelLoaded:f,selectedItem:d,panelHoveredItem:b,onItemClick:h,onItemDoubleClick:w,onItemContextMenu:v,onItemHover:S,nodeRefsOut:y,onNodeRefsChange:R,materialRefsOut:x,onMergeModelLoaded:M,onMergeModelError:E,pulses:P}){let T=Kx({}),O=Kx({}),k=qx(()=>{},[]),D=CA(()=>t?null:Ra(e.objectBindings,e.sceneConfig?.product,gr((e.sceneConfig??o)?.model??{})),[t,e.objectBindings,e.sceneConfig,o]),B=e.sceneConfig?.product&&D?{...e.sceneConfig,model:{...e.sceneConfig.model,activeVariants:D.activeVariants}}:e.sceneConfig??o,H=qx(W=>{t&&p?.(W),m?.(ke(e),W)},[t,p,m,e.url,e.id]),V=!!p||!!m;return uc(Yn,{onLoadError:W=>a?.(ke(e),W),children:uc(SA,{fallback:null,children:uc("group",{position:e.transform?.position,rotation:e.transform?.rotation,scale:e.transform?.scale,visible:e.visible!==!1,children:uc(es,{url:e.url,interactive:t&&e.visible!==!1,objectBindings:t?e.objectBindings:D?.objectBindings??e.objectBindings,selectedItem:t?d:null,itemMaterials:t?r:MA,onItemClick:t?h:k,onItemDoubleClick:t?w:void 0,onItemContextMenu:t?v:void 0,onItemHover:t?S:void 0,onModelLoaded:f?W=>f(ke(e),W):void 0,onAnimationsReady:V?H:void 0,nodeRefsOut:t?y:T,onNodeRefsChange:t?R:void 0,materialRefsOut:x??O,panelHoveredItem:t?b:void 0,sceneConfig:t?o:B,zoomOnSelected:t&&i,highlightOnHover:t&&!!s,decoderConfig:n,onLoadProgress:t?u:void 0,explodeFactor:l,suspendBindingTransforms:t?c:!1,originalNodePoses:e.originalNodePoses,mergeModels:e.mergeModels,onMergeModelLoaded:M,onMergeModelError:E,pulses:t?P:void 0})})})},e.url)}import{Matrix4 as Ep}from"three";var PA=new Ep().makeRotationX(Math.PI/2);function Jx(e){e.updateMatrixWorld(!0);let t=new Ep().copy(e.matrixWorld).invert().premultiply(PA),n=new Ep,r=[];for(let[o,i]of Object.entries(Hr(e).nodesById)){let s=i;if(!s.isMesh||!s.geometry||!i.name)continue;let l=s.geometry;l.boundingBox||l.computeBoundingBox();let c=l.boundingBox.clone().applyMatrix4(n.multiplyMatrices(t,i.matrixWorld)),u=l.index?l.index.count:l.getAttribute("position")?.count??0;r.push({name:o,triangles:Math.floor(u/3),minimum:c.min.toArray(),maximum:c.max.toArray()})}return r.sort((o,i)=>o.name.localeCompare(i.name))}import{useMemo as eo,useRef as Un,useState as Io,useEffect as Pr,useCallback as ji}from"react";import{Html as Yx}from"@react-three/drei";import{useFrame as Zx,useThree as Tp}from"@react-three/fiber";import{MathUtils as Dp,Vector3 as Ni}from"three";import{jsx as mn,jsxs as Lp}from"react/jsx-runtime";var kA=[],RA=.02;function ew(e,t,n=!1,r){let o=Un(null),[i,s]=Io(!0),l=Un(!0),c=eo(()=>new Ni,[]),u=Tp(h=>h.scene),p=Un(null),m=Un(null),a=eo(()=>new Ni(...e.anchorLocalPosition??e.localPosition??e.worldPosition),[e.anchorLocalPosition,e.localPosition,e.worldPosition]),f=eo(()=>new Ni,[]),d=eo(()=>new Ni,[]),b=eo(()=>new Ni,[]);return Pr(()=>{p.current=null},[e.anchorNodeName]),Zx(({camera:h})=>{let w=o.current,v=w?.parent;if(!w||!v)return;let S=r?r.current:u;m.current!==S&&(m.current=S,p.current=null);let y=p.current;if(e.anchorNodeName&&(!y||!y.parent)&&(y=S?Ur(S,e.anchorNodeName):null,p.current=y),y?(y.updateWorldMatrix(!0,!1),f.copy(a).applyMatrix4(y.matrixWorld)):(f.copy(a),v.localToWorld(f)),t){let x=t.current.get(e.id);x||(x=new Ni,t.current.set(e.id,x)),x.copy(f)}h.getWorldPosition(c);let R=!n||Kg(e,c.distanceTo(f));R!==l.current&&(l.current=R,s(R)),b.copy(c).sub(f),b.lengthSq()>0?(b.normalize(),d.copy(f).addScaledVector(b,RA)):d.copy(f),v.worldToLocal(d),w.position.copy(d)}),{anchorRef:o,inRange:i}}function AA({anchorSceneRef:e,annotation:t,occluders:n,worldPositionsRef:r,onClick:o,onHover:i,showAnnotationOnHover:s}){let l=oe(),[c,u]=Io(!1),{anchorRef:p,inRange:m}=ew(t,r,!0,e),a=c||!m,[f,d]=Io(!1),[b,h]=Io(1),w=Un(null),v=Un(null),S=Un(null);Pr(()=>{m||(w.current&&clearTimeout(w.current),f&&(d(!1),i?.(null)))},[m,f,i]),Pr(()=>()=>{w.current&&(clearTimeout(w.current),w.current=null),S.current&&(clearTimeout(S.current),S.current=null)},[]);let y=P=>{P.stopPropagation(),P.preventDefault(),w.current&&(clearTimeout(w.current),w.current=null),w.current=window.setTimeout(()=>{o?.(t),w.current=null},10)},R=P=>{P.stopPropagation(),d(!0),h(100),S.current&&(clearTimeout(S.current),S.current=null),i?.(t)},x=P=>{P.stopPropagation(),d(!1),h(1),S.current&&clearTimeout(S.current),S.current=window.setTimeout(()=>{i?.(null),s&&i?.(null),S.current=null},50)},M=P=>{P.stopPropagation();let T=P.currentTarget;T.dataset.pointerX=String(P.clientX),T.dataset.pointerY=String(P.clientY)},E=P=>{P.stopPropagation();let T=P.currentTarget,O=parseFloat(T.dataset.pointerX||"0"),k=parseFloat(T.dataset.pointerY||"0"),D=P.clientX-O,B=P.clientY-k;Math.sqrt(D*D+B*B)<10&&y(P)};return mn("group",{ref:p,children:mn(Yx,{center:!0,occlude:n,onOcclude:u,pointerEvents:a?"none":"auto",zIndexRange:[1,200],style:{pointerEvents:a?"none":"auto",zIndex:b},className:"annotation-html-wrapper",transparent:!0,children:mn("div",{ref:v,className:`ri-annotationMarker ${f?"ri-annotationMarker--hovered":""}`,title:t.title,style:{display:a?"none":"flex"},onPointerDown:M,onPointerUp:E,onPointerEnter:R,onPointerLeave:x,onDoubleClick:P=>{P.stopPropagation(),o?.(t)},role:"button",tabIndex:0,"aria-label":l("annotationMarker",{id:t.id,title:t.title}),onKeyDown:P=>{(P.key==="Enter"||P.key===" ")&&(P.preventDefault(),P.stopPropagation(),o?.(t))},children:mn("span",{className:"ri-annotationMarker-id",children:t.id})})})})}function OA({anchorSceneRef:e,annotation:t,occluders:n,popupRef:r,onClose:o,hideCloseButton:i=!1}){let s=oe(),[l,c]=Io(!1),{anchorRef:u}=ew(t,void 0,!1,e),p=Lp("div",{ref:r,className:"ri-viewAnnotationPopup",style:{display:l?"none":"block"},onPointerDown:m=>m.stopPropagation(),onClick:m=>m.stopPropagation(),children:[Lp("div",{className:"ri-viewAnnotationHeader",children:[mn("h4",{className:"ri-viewAnnotationTitle",children:t.title}),!i&&mn("button",{onClick:m=>{m.stopPropagation(),o?.()},className:"ri-viewAnnotationClose","aria-label":s("closeAnnotation"),children:"\xD7"})]}),t.category&&mn("span",{className:"ri-annotationCategory",children:t.category}),t.description&&mn("p",{className:"ri-viewAnnotationDescription",children:t.description}),t.images?.map((m,a)=>{let f=sd(m.src);return f?mn("img",{className:"ri-annotationImage",src:f,alt:m.alt??"",loading:"lazy"},`${f}-${a}`):null}),t.links?.map((m,a)=>{let f=sd(m.href);return f?mn("a",{className:"ri-annotationLink",href:f,target:"_blank",rel:"noopener noreferrer",children:m.label||s("learnMore")},`${f}-${a}`):null})]});return mn("group",{ref:u,children:mn(Yx,{occlude:n,onOcclude:c,pointerEvents:l?"none":"auto",zIndexRange:[1e3,2e3],style:{pointerEvents:l?"none":"auto",zIndex:1e3},transparent:!0,children:p})})}function dc({anchorSceneRef:e,annotations:t,sceneConfig:n,activeAnnotation:r,popupRef:o,canvasRootRef:i,worldPositionsRef:s,modelLoaded:l,onAnnotationClick:c,onAnnotationHover:u,onCloseAnnotation:p,hideCloseButton:m=!1,showAnnotationOnHover:a=!1,guidedTour:f=!1,keepActiveAnnotationVisible:d=!1}){let b=Tp(A=>A.invalidate),h=Tp(A=>A.scene),[w,v]=Io(null),[S,y]=Io(!1),R=Un(null);Pr(()=>{R.current!==null&&r===null&&(v(null),y(!1)),R.current=r?.id??null},[r]);let x=Un(null),M=Un(null),E=Un(null),P=eo(()=>{let A=[];return h.traverse($=>{let J=$;J.isMesh&&!J.isSkinnedMesh&&A.push({current:$})}),A},[h,t,l]),T=ji(()=>{b();let A=()=>{b(),M.current=window.requestAnimationFrame(()=>{b(),M.current=null})};M.current=window.requestAnimationFrame(A)},[b]);Pr(()=>{T()},[t,T]),Pr(()=>{T()},[r,T]),Pr(()=>()=>{M.current!==null&&window.cancelAnimationFrame(M.current),E.current&&clearTimeout(E.current)},[]);let O=r||w,k=eo(()=>O?t.find(A=>A.id===O.id)??null:null,[O,t]),D=ji(A=>{if(S&&w?.id===A.id){y(!1),v(null),p?.();return}y(!0),v(A),c?.(A)},[S,w,c,p]),B=ji(A=>{u?.(A),a&&!S&&(E.current&&(clearTimeout(E.current),E.current=null),A?v(A):E.current=window.setTimeout(()=>{v(null),p?.(),E.current=null},100))},[S,u,a,p]),H=ji(()=>{y(!1),v(null),p?.()},[p]),V=ji(A=>{let $=A.target;if($.closest?.(".ri-annotationMarker")||$.closest?.(".ri-viewAnnotationPopup")||$.closest?.(".annotation-html-wrapper"))return;let J=i.current;J&&J.contains($)&&(y(!1),v(null),p?.())},[i,p]),W=ji(A=>{A.key==="Escape"&&S&&(y(!1),v(null),p?.())},[S,p]);Pr(()=>{let A=i.current;return A&&(A.addEventListener("click",V),A.addEventListener("pointerdown",V)),document.addEventListener("keydown",W),()=>{A&&(A.removeEventListener("click",V),A.removeEventListener("pointerdown",V)),document.removeEventListener("keydown",W)}},[i,V,W]);let z=eo(()=>(n?.model.rotation??[0,0,0]).map(A=>A*Math.PI/180),[n?.model.rotation]);return Pr(()=>{b()},[b,z]),Zx((A,$)=>{if(!x.current)return;x.current.rotation.x=Dp.lerp(x.current.rotation.x,z[0],1-Math.exp(-5*$)),x.current.rotation.y=Dp.lerp(x.current.rotation.y,z[1],1-Math.exp(-5*$)),x.current.rotation.z=Dp.lerp(x.current.rotation.z,z[2],1-Math.exp(-5*$));let{rotation:J}=x.current;Math.abs(J.x-z[0])+Math.abs(J.y-z[1])+Math.abs(J.z-z[2])>1e-4&&b()}),Lp("group",{ref:x,children:[t.map(A=>{let $=`${A.worldPosition.join(",")}-${A.title}-${A.id}`;return mn(AA,{anchorSceneRef:e,annotation:A,occluders:P,worldPositionsRef:s,onClick:D,onHover:B,showAnnotationOnHover:a},$)}),k?mn(OA,{anchorSceneRef:e,annotation:k,occluders:f||d?kA:P,popupRef:o,onClose:H,hideCloseButton:m},`popup-${k.id}`):null]})}import{useEffect as ow,useMemo as ns}from"react";import{Html as Bp}from"@react-three/drei";import{useEffect as EA,useMemo as DA}from"react";import{Line as TA}from"@react-three/drei";import{useThree as LA}from"@react-three/fiber";import{BufferGeometry as _A,Line as BA,LineBasicMaterial as jA,LineDashedMaterial as NA,Vector3 as tw}from"three";import{jsx as _p}from"react/jsx-runtime";function to(e){return LA(n=>Wr(n.gl))?_p(IA,{...e}):_p(TA,{points:e.points,color:e.color,lineWidth:e.lineWidth,dashed:e.dashed})}function IA({points:e,color:t,dashed:n=!1}){let r=DA(()=>{let o=new _A().setFromPoints(e.map(l=>l instanceof tw?l:new tw(...l))),i=n?new NA({color:t,dashSize:.02,gapSize:.02}):new jA({color:t}),s=new BA(o,i);return n&&s.computeLineDistances(),s},[e,t,n]);return EA(()=>()=>{r.geometry.dispose(),r.material.dispose()},[r]),_p("primitive",{object:r})}import{BoxGeometry as zA,BufferGeometry as VA,DoubleSide as FA,EdgesGeometry as HA,Float32BufferAttribute as GA,Vector3 as kr}from"three";import{Fragment as ts,jsx as at,jsxs as Mn}from"react/jsx-runtime";var no="#22d3ee",UA="#facc15";function zo(e,t){let n=e<10?e.toFixed(3):e.toFixed(2);return t?`${n} ${t}`:n}function nw(e,t){return[(e[0]+t[0])/2,(e[1]+t[1])/2,(e[2]+t[2])/2]}function $A(e){let t=e.reduce((n,r)=>[n[0]+r[0],n[1]+r[1],n[2]+r[2]],[0,0,0]);return[t[0]/e.length,t[1]/e.length,t[2]/e.length]}function Rr({position:e,children:t}){return at(Bp,{center:!0,position:e,zIndexRange:[20,0],style:{pointerEvents:"none"},children:at("div",{className:"ri-measureLabel",children:t})})}function rw({positions:e,triangles:t}){let n=ns(()=>{let r=new kr(...e[0]),o=new VA;return o.setAttribute("position",new GA(e.flatMap(i=>new kr(...i).sub(r).toArray()),3)),o.setIndex(t.flat()),o},[e,t]);return ow(()=>()=>n.dispose(),[n]),at("mesh",{position:e[0],geometry:n,raycast:()=>{},renderOrder:100,children:at("meshBasicMaterial",{color:no,side:FA,transparent:!0,opacity:.18,depthWrite:!1})})}var WA=[[0,1,2]];function XA({positions:e}){let t=ll(e);if(t===null)return null;let n=new kr(...e[1]),r=new kr(...e[0]).sub(n),o=new kr(...e[2]).sub(n),i=Math.min(r.length(),o.length())*.22;r.normalize(),o.normalize();let s=r.clone().cross(o);s.lengthSq()<1e-12&&s.copy(r).cross(Math.abs(r.y)<.9?new kr(0,1,0):new kr(1,0,0)),s.normalize();let l=t*Math.PI/180,c=Array.from({length:33},(p,m)=>r.clone().applyAxisAngle(s,l*m/32).multiplyScalar(i).add(n).toArray()),u=r.clone().applyAxisAngle(s,l/2).multiplyScalar(i*1.4).add(n).toArray();return Mn(ts,{children:[at(to,{points:c,color:no,lineWidth:2}),Mn(Rr,{position:u,children:[t.toFixed(2),"\xB0"]})]})}function qA({box:e,unit:t,scale:n}){let r=ns(()=>[(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]),o=ns(()=>{let[c,u,p]=e.size,m=new zA(c||1e-4,u||1e-4,p||1e-4),a=new HA(m);return m.dispose(),a},[e.size]);ow(()=>()=>{o.dispose()},[o]);let[i,s,l]=e.size;return Mn("group",{position:r,children:[at("lineSegments",{geometry:o,children:at("lineBasicMaterial",{color:UA})}),Mn(Rr,{position:[0,-s/2,l/2],children:["W ",zo(i*n,t)]}),Mn(Rr,{position:[-i/2,0,l/2],children:["H ",zo(s*n,t)]}),Mn(Rr,{position:[i/2,-s/2,0],children:["D ",zo(l*n,t)]})]})}function Ii({points:e,unit:t,scale:n=1,box:r,showDimensions:o,tool:i="distance",areaClosed:s=!1,snapPreview:l}){let c=ns(()=>e.map(m=>m.position),[e]),u=ns(()=>i==="area"&&s?cl(c):null,[i,s,c]),p=i==="pointToPlane"&&e.length===2?pb(e[0],e[1].position):null;return Mn("group",{children:[i!=="wrap"&&i!=="wrapHorizontal"&&e.map(m=>at(Bp,{center:!0,position:m.position,zIndexRange:[15,0],style:{pointerEvents:"none"},children:at("div",{className:`ri-measureDot${m.snapped?" ri-measureDot--snapped":""}`})},m.id)),i==="distance"&&e.slice(1).map((m,a)=>{let f=e[a].position,d=m.position,b=new kr(...f).distanceTo(new kr(...d));return Mn("group",{children:[at(to,{points:[f,d],color:no,lineWidth:2}),at(Rr,{position:nw(f,d),children:zo(b*n,t)})]},`${e[a].id}-${m.id}`)}),(i==="angle"||i==="area")&&c.length>=2&&at(to,{points:s?[...c,c[0]]:c,color:no,lineWidth:2}),i==="angle"&&at(XA,{positions:c}),u&&!("error"in u)&&Mn(ts,{children:[at(rw,{positions:c,triangles:u.triangles}),at(Rr,{position:u.center,children:zo(u.area*n**2,t?`${t}\xB2`:"")})]}),i==="pointToPlane"&&e[0]?.faceVertices&&Mn(ts,{children:[at(rw,{positions:e[0].faceVertices,triangles:WA}),at(to,{points:[...e[0].faceVertices,e[0].faceVertices[0]],color:no,lineWidth:1}),e.length===1&&at(Rr,{position:e[0].position,children:"Reference plane"})]}),p&&Mn(ts,{children:[at(to,{points:[e[1].position,p.projection],color:no,lineWidth:2}),at(to,{points:[e[0].position,p.projection],color:no,lineWidth:1,dashed:!0}),at(Rr,{position:nw(e[1].position,p.projection),children:zo(p.distance*n,t)})]}),(i==="wrap"||i==="wrapHorizontal")&&c.length>=3&&Mn(ts,{children:[at(to,{points:[...c,c[0]],color:no,lineWidth:2}),at(Rr,{position:$A(c),children:zo(mb(c,!0)*n,t)})]}),l&&Mn(Bp,{center:!0,position:l.position,zIndexRange:[20,0],style:{pointerEvents:"none"},children:[at("div",{className:"ri-measureSnapTarget"}),at("div",{className:"ri-measureSnapLabel",children:l.snapped==="vertex"?"Vertex":"Edge"})]}),o&&r?at(qA,{box:r,unit:t,scale:n}):null]})}import{Eraser as iw,PencilRuler as aw,RulerDimensionLine as KA,Undo2 as sw,X as QA}from"lucide-react";import{useEffect as JA,useLayoutEffect as YA,useRef as lw,useState as pc}from"react";import{createPortal as ZA}from"react-dom";import{Fragment as rs,jsx as fe,jsxs as Ye}from"react/jsx-runtime";function jp(e){let t=oe(),{isInsideEditor:n,measurementPanelTarget:r,tier:o}=qr(),i=n&&!wl(o,"calibratedMeasurements"),s=lw(null),[l,c]=pc(!1),[u,p]=pc(""),[m,a]=pc("1"),[f,d]=pc("m"),b=lw(null),h={ready:"measurementReady",approximate:"measurementApproximate","model-changed":"measurementModelChanged","missing-object":"measurementObjectMissing","geometry-changed":"measurementGeometryChanged","pose-changed":"measurementPoseChanged","hidden-object":"measurementObjectHidden",invalid:"measurementInvalid"};YA(()=>{if(!s.current)return;let k=()=>e.onHeight(s.current?.getBoundingClientRect().height??34),D=new ResizeObserver(k);return D.observe(s.current),k(),()=>D.disconnect()},[e.onHeight]);let w=n&&e.active&&!r,{onToggle:v}=e;JA(()=>{w&&v()},[w,v]);let{tool:S,pointCount:y,areaClosed:R}=e,x=S==="angle"?[t("angleFirstArmHint"),t("angleVertexHint"),t("angleSecondArmHint"),t("angleNewHint")][y]:S==="area"?t(R?"areaNewHint":"areaCornersHint"):S==="pointToPlane"?[t("pointToPlaneFaceHint"),t("pointToPlanePointHint"),t("pointToPlaneNewHint")][y]:t(S==="wrap"?"wrapHint":S==="wrapHorizontal"?"wrapHorizontalHint":"distanceHint"),M=n?"ri-measureField":"ri-measureSelect",E=Ye(Pt,{className:M,"aria-label":t("measurementTool"),value:S,disabled:e.disabled,onChange:k=>e.onTool(k.target.value),children:[fe("option",{value:"distance",children:t("distance")}),fe("option",{value:"angle",children:t("angle")}),fe("option",{value:"area",children:t("area")}),fe("option",{value:"pointToPlane",children:t("pointToPlane")}),fe("option",{value:"wrap",children:t("wrap")}),fe("option",{value:"wrapHorizontal",children:t("wrapHorizontal")})]}),P=Ye(Pt,{className:M,"aria-label":t("measurementSnapping"),value:e.snap,disabled:e.disabled,onChange:k=>e.onSnap(k.target.value),children:[fe("option",{value:"none",children:t("noSnapping")}),fe("option",{value:"auto",children:t("snapAuto")}),fe("option",{value:"vertex",children:t("snapVertex")}),fe("option",{value:"edge",children:t("snapEdge")})]}),T=e.active&&S==="area"&&!R&&fe("button",{type:"button",className:n?"ri-measureAction":"ri-measureFinish",onClick:e.onFinishArea,disabled:e.disabled||y<3,children:t("finishArea")}),O=Ye("div",{className:`ri-measureLibrary${n?" ri-measureLibrary--sidebar":""}`,onClick:k=>k.stopPropagation(),onPointerDown:k=>k.stopPropagation(),onPointerMove:k=>k.stopPropagation(),onKeyDown:k=>k.stopPropagation(),children:[n&&fe("div",{className:"ri-measureActions",children:Ye("button",{type:"button",className:`ri-measureAction ri-measureStart${e.active?" ri-measureStart--active":""}`,disabled:e.disabled,onClick:e.onToggle,"aria-pressed":e.active,children:[fe(aw,{size:13}),e.active?t("stopMeasuring"):t("startMeasuring")]})}),n&&e.active&&Ye(rs,{children:[Ye("div",{className:"ri-measureRow",children:[fe("span",{children:"Tool"}),E]}),Ye("div",{className:"ri-measureRow",children:[fe("span",{children:"Snapping"}),P]}),!e.error&&fe("p",{className:"ri-measureGuide",role:"status",children:x}),(y>0||T)&&Ye("div",{className:"ri-measureActions",children:[y>0&&Ye(rs,{children:[Ye("button",{type:"button",className:"ri-measureAction",onClick:e.onUndo,disabled:e.disabled,children:[fe(sw,{size:13}),"Undo point"]}),Ye("button",{type:"button",className:"ri-measureAction",onClick:e.onClear,disabled:e.disabled,children:[fe(iw,{size:13}),"Clear"]})]}),T]})]}),n&&Ye("label",{className:"ri-measureRow",children:[fe("span",{children:"Bounding box"}),fe("input",{type:"checkbox","aria-label":t("toggleBoundingDimensions"),checked:e.showDimensions,disabled:e.disabled,onChange:e.onDimensions})]}),Ye("label",{className:"ri-measureRow",children:[fe("span",{children:t("measurementSourceUnit")}),fe(Pt,{"aria-label":t("measurementSourceUnit"),className:"ri-measureField",disabled:e.disabled||e.settingsReadOnly,value:e.settings.sourceUnit??"m",onChange:k=>e.onSettings({...e.settings,sourceUnit:k.target.value,metersPerUnit:void 0}),children:ul.map(k=>fe("option",{value:k,children:k},k))})]}),Ye("label",{className:"ri-measureRow",children:[fe("span",{children:t("measurementDisplayUnit")}),Ye(Pt,{"aria-label":t("measurementDisplayUnit"),className:"ri-measureField",disabled:e.disabled||e.settingsReadOnly,value:e.displayUnit,onChange:k=>e.onSettings({...e.settings,displayUnit:k.target.value}),children:[!vb(e.displayUnit)&&fe("option",{value:e.displayUnit,children:e.displayUnit}),ul.map(k=>fe("option",{value:k,children:k},k))]})]}),e.active&&Ye(rs,{children:[Ye("div",{className:"ri-measureRow",children:[fe("span",{children:t("measurementName")}),Ye("span",{className:"ri-measureCombo",children:[fe("input",{"aria-label":t("measurementName"),className:"ri-measureField",value:u,onChange:k=>p(k.target.value),placeholder:t("measurementNamePlaceholder")}),fe("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||e.readOnly||!e.canSave||i,title:i?"Saving measurements requires the Starter plan or higher.":void 0,onClick:()=>{e.onSave(u),p(""),c(!0)},children:t("saveMeasurement")})]})]}),Ye("div",{className:"ri-measureRow",title:t("measurementCalibrationHint"),children:[fe("span",{children:t("knownMeasurementDistance")}),Ye("span",{className:"ri-measureCombo",children:[fe("input",{"aria-label":t("knownMeasurementDistance"),type:"number",min:"0",step:"any",className:"ri-measureField",value:m,onChange:k=>a(k.target.value)}),fe(Pt,{"aria-label":t("calibrationUnit"),className:"ri-measureField ri-measureField--unit",value:f,onChange:k=>d(k.target.value),children:ul.map(k=>fe("option",{children:k},k))}),fe("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||e.settingsReadOnly||!e.canCalibrate||i,title:i?"Calibration requires the Starter plan or higher.":void 0,onClick:()=>e.onCalibrate(Number(m),f),children:t("calibrateMeasurement")})]})]})]}),e.settings.metersPerUnit!==void 0&&Ye("div",{className:"ri-measureRow",children:[fe("span",{children:t("measurementCalibratedScale",{scale:e.settings.metersPerUnit.toPrecision(6)})}),fe("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||e.settingsReadOnly,onClick:()=>e.onSettings({...e.settings,metersPerUnit:void 0}),children:t("resetMeasurementCalibration")})]}),e.items.length>0&&fe("div",{className:"ri-savedMeasurementList",children:e.items.map(k=>{let D=e.results.find(B=>B.id===k.id);return Ye("div",{className:"ri-savedMeasurementRow",children:[fe("input",{type:"checkbox","aria-label":t("showSavedMeasurement",{name:k.name}),checked:k.visible!==!1,disabled:e.disabled||e.readOnly,onChange:B=>e.onItems(e.items.map(H=>H.id===k.id?{...H,visible:B.target.checked}:H))}),fe("input",{"aria-label":t("renameSavedMeasurement",{name:k.name}),className:"ri-savedMeasurementName",defaultValue:k.name,disabled:e.disabled||e.readOnly,onBlur:B=>{let H=B.target.value.trim()||k.name;H!==k.name?e.onItems(e.items.map(V=>V.id===k.id?{...V,name:H}:V)):B.target.value=H}},`${k.id}:${k.name}`),fe("span",{className:"ri-savedMeasurementValue",title:t(D?h[D.status]:"measurementWaiting"),children:D?.value!=null?`${D.value.toFixed(3)} ${D.unit}`:"\u2014"}),fe("button",{type:"button",className:"ri-savedMeasurementDelete","aria-label":t("deleteSavedMeasurement",{name:k.name}),disabled:e.disabled||e.readOnly,onClick:()=>e.onItems(e.items.filter(B=>B.id!==k.id)),children:fe(QA,{size:13})})]},k.id)})}),!e.items.length&&fe("p",{className:"ri-measureEmpty",children:t("noSavedMeasurements")}),Ye("details",{className:"ri-measureTransfer",children:[fe("summary",{children:t("measurementFiles")}),Ye("div",{className:"ri-measureActions",children:[fe("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||!e.items.length,onClick:e.onExportJson,children:t("exportMeasurementJson")}),fe("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||!e.items.length,onClick:e.onExportCsv,children:t("exportMeasurementCsv")}),fe("button",{type:"button",className:"ri-measureAction",disabled:e.disabled||e.readOnly||e.settingsReadOnly,onClick:()=>b.current?.click(),children:t("importMeasurementJson")}),fe("input",{ref:b,type:"file",accept:".json,application/json",hidden:!0,onChange:k=>{let D=k.target.files?.[0];if(k.target.value="",!!D){if(D.size>5*1024*1024){e.onImport("{}");return}D.text().then(e.onImport).catch(()=>e.onImport("{}"))}}})]})]}),n&&e.error&&fe("p",{className:"ri-measureLibraryError",role:"status",children:t.message(e.error)})]});return n?r?ZA(O,r):null:Ye("div",{ref:s,className:"ri-measureTools",style:{top:e.top},children:[Ye("div",{className:"ri-measureToolbarRow",children:[fe("button",{type:"button",className:`ri-measureButton ${e.active?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onToggle,title:e.active?t("stopMeasuring"):t("startMeasuring"),"aria-pressed":e.active,children:fe(aw,{size:16})}),fe("button",{type:"button",className:`ri-measureButton ${e.showDimensions?"ri-measureButton--active":""}`,disabled:e.disabled,onClick:e.onDimensions,title:t("toggleBoundingDimensions"),"aria-pressed":e.showDimensions,children:fe(KA,{size:16})}),e.items.length>0&&fe("button",{type:"button",className:"ri-measureSelect","aria-expanded":l,onClick:()=>c(!l),children:t("savedMeasurements",{count:e.items.length})}),e.active&&Ye(rs,{children:[E,P]}),y>0&&Ye(rs,{children:[fe("button",{type:"button",className:"ri-measureButton",onClick:e.onUndo,disabled:e.disabled,title:t("undoMeasurementPoint"),children:fe(sw,{size:16})}),fe("button",{type:"button",className:"ri-measureButton",onClick:e.onClear,disabled:e.disabled,title:t("clearMeasurements"),children:fe(iw,{size:16})})]}),T]}),(e.active||l&&e.items.length>0)&&O,(e.active||e.error)&&fe("div",{className:`ri-measureHint${e.error?" ri-measureHint--error":""}`,role:"status",children:e.error?t.message(e.error):x})]})}import{useCallback as eO,useEffect as cw,useRef as mc,useState as tO}from"react";import{useFrame as nO}from"@react-three/fiber";import{Fragment as oO,jsx as uw}from"react/jsx-runtime";var rO=100;function fc({items:e,sceneRef:t,modelId:n,tilesetUrl:r,settings:o,legacyUnit:i,revision:s,onResults:l}){let[c,u]=tO([]),p=mc(""),m=eO(()=>{let w=e.length&&t.current?$a(t.current):void 0,v=e.map(R=>Wl(R,t.current,n,r,w)),S=v.map(({measurement:R,points:x,status:M})=>pl(R,o,i,x,M)),y=JSON.stringify([v.map(({measurement:R,points:x,status:M})=>[R.id,R.tool,R.visible,M,x.map(E=>[E.position,E.normal,E.faceVertices])]),S]);p.current!==y&&(p.current=y,u(v),l(S))},[e,t,n,r,o,i,l]);cw(()=>{m()},[m,s]);let a=mc(0),f=mc(null),d=mc(m);d.current=m,cw(()=>()=>{f.current&&clearTimeout(f.current)},[]),nO(()=>{if(!e.length)return;let w=a.current+rO-performance.now();w<=0?(a.current=performance.now(),m()):f.current??(f.current=setTimeout(()=>{f.current=null,a.current=performance.now(),d.current()},w))});let{factor:b,displayUnit:h}=dl(o,i);return uw(oO,{children:c.filter(({measurement:w,status:v})=>w.visible!==!1&&(v==="ready"||v==="approximate")).map(({measurement:w,points:v})=>uw(Ii,{points:v,unit:h,scale:b,box:null,showDimensions:!1,tool:w.tool,areaClosed:w.tool==="area"},w.id))})}import{useRef as Vo,useState as iO,useCallback as er,useEffect as aO}from"react";import{jsx as Pn,jsxs as Np}from"react/jsx-runtime";var sO={up:{width:38,height:22},down:{width:38,height:22},left:{width:22,height:38},right:{width:22,height:38}},lO={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"},gc=({direction:e})=>{let t=sO[e],n=lO[e];return Np("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:[Pn("polyline",{points:n,stroke:"rgba(0, 0, 0, 0.9)",strokeWidth:"6",strokeLinecap:"round",strokeLinejoin:"round"}),Pn("polyline",{points:n,stroke:"#2095F2",strokeWidth:"4",strokeLinecap:"round",strokeLinejoin:"round"})]})},Ar=16,cO={"bottom-left":{bottom:Ar,left:Ar,top:"auto",right:"auto",transform:"none"},"bottom-right":{bottom:Ar,right:Ar,top:"auto",left:"auto",transform:"none"},"top-left":{top:Ar,left:Ar,bottom:"auto",right:"auto",transform:"none"},"top-right":{top:Ar,right:Ar,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:Ar,left:"50%",bottom:"auto",right:"auto",transform:"translateX(-50%)"}},uO=({controlsRef:e,enabled:t=!0,opacity:n=.9,moveSensitivity:r=.001,rotateSensitivity:o=.01,position:i="center-bottom"})=>{let s=oe(),l=Vo(null),[c,u]=iO({x:0,y:0}),p=Vo(!1),m=Vo({x:0,y:0}),a=Vo(void 0),f=Vo(void 0),d=Vo(null),b=Vo(0),h=()=>e.current,w=(B,H,V)=>{let W=Math.hypot(B,H);if(W>V){let z=V/W;return{x:B*z,y:H*z}}return{x:B,y:H}},v=B=>{let V=Math.abs(B);return V<.12?0:Math.sign(B)*((V-.12)/(1-.12))},S=er(()=>{let B=()=>{let{x:H,y:V}=m.current,W=v(H),z=v(V);if(t&&(W!==0||z!==0)){let A=h();A&&A.rotate(-W*o,-z*o,!0)}a.current=requestAnimationFrame(B)};a.current=requestAnimationFrame(B)},[t,o]),y=er(()=>{a.current&&cancelAnimationFrame(a.current)},[]),R=er((B,H)=>{if(!l.current||!p.current)return;let V=l.current.getBoundingClientRect(),W=V.left+V.width/2,z=V.top+V.height/2,A=V.width/2-18,$=B-W,J=H-z,ae=w($,J,A);u(ae),m.current={x:ae.x/A,y:ae.y/A}},[]),x=er(B=>{if(!t)return;B.preventDefault(),B.stopPropagation(),p.current=!0,S();let H="touches"in B?B.touches[0]:B;R(H.clientX,H.clientY)},[t,S,R]),M=er(B=>{if(!p.current)return;B.preventDefault();let H="touches"in B?B.touches[0]:B;R(H.clientX,H.clientY)},[R]),E=er(()=>{p.current=!1,u({x:0,y:0}),m.current={x:0,y:0},y()},[y]),P=r*10,T=er(B=>{t&&h()?.forward(B*P,!0)},[t,P]),O=er(B=>{t&&h()?.truck(B*P,0,!0)},[t,P]),k=er((B,H,V)=>{if(!t)return;f.current&&cancelAnimationFrame(f.current),d.current={control:B,amount:H,action:V},b.current=0,V(H);let W=z=>{if(!d.current)return;if(b.current===0){b.current=z,f.current=requestAnimationFrame(W);return}if(z-b.current>200){let{amount:$,action:J}=d.current;J($),b.current=z}f.current=requestAnimationFrame(W)};f.current=requestAnimationFrame(W)},[t]),D=er(B=>{d.current?.control===B&&(f.current&&(cancelAnimationFrame(f.current),f.current=void 0),d.current=null,b.current=0)},[]);return aO(()=>(window.addEventListener("mousemove",M),window.addEventListener("mouseup",E),window.addEventListener("touchmove",M,{passive:!1}),window.addEventListener("touchend",E),window.addEventListener("touchcancel",E),()=>{window.removeEventListener("mousemove",M),window.removeEventListener("mouseup",E),window.removeEventListener("touchmove",M),window.removeEventListener("touchend",E),window.removeEventListener("touchcancel",E),y(),f.current&&cancelAnimationFrame(f.current)}),[M,E,y]),t?Pn("div",{className:"mc__wrapper",style:{opacity:n,...cO[i]},children:Np("div",{className:"mc__dpad",children:[Pn("button",{"aria-label":s("moveForward"),className:"mc__arrow mc__arrow--up",onMouseDown:()=>k("up",1,T),onMouseUp:()=>D("up"),onMouseLeave:()=>D("up"),onTouchStart:B=>{B.preventDefault(),k("up",1,T)},onTouchEnd:()=>D("up"),onTouchCancel:()=>D("up"),children:Pn(gc,{direction:"up"})}),Np("div",{className:"mc__middle-row",children:[Pn("button",{"aria-label":s("moveLeft"),className:"mc__arrow mc__arrow--left",onMouseDown:()=>k("left",-1,O),onMouseUp:()=>D("left"),onMouseLeave:()=>D("left"),onTouchStart:B=>{B.preventDefault(),k("left",-1,O)},onTouchEnd:()=>D("left"),onTouchCancel:()=>D("left"),children:Pn(gc,{direction:"left"})}),Pn("div",{ref:l,className:"mc__joystick",onMouseDown:x,onTouchStart:x,children:Pn("div",{className:"mc__knob",style:{transform:`translate(${c.x}px, ${c.y}px)`}})}),Pn("button",{"aria-label":s("moveRight"),className:"mc__arrow mc__arrow--right",onMouseDown:()=>k("right",1,O),onMouseUp:()=>D("right"),onMouseLeave:()=>D("right"),onTouchStart:B=>{B.preventDefault(),k("right",1,O)},onTouchEnd:()=>D("right"),onTouchCancel:()=>D("right"),children:Pn(gc,{direction:"right"})})]}),Pn("button",{"aria-label":s("moveBackward"),className:"mc__arrow mc__arrow--down",onMouseDown:()=>k("down",-1,T),onMouseUp:()=>D("down"),onMouseLeave:()=>D("down"),onTouchStart:B=>{B.preventDefault(),k("down",-1,T)},onTouchEnd:()=>D("down"),onTouchCancel:()=>D("down"),children:Pn(gc,{direction:"down"})})]})}):null},dw=uO;import{useEffect as bc,useMemo as dO,useRef as pw,useState as mw}from"react";import{Check as pO,Link as mO,SlidersHorizontal as fO,X as gO}from"lucide-react";import{jsx as zi,jsxs as Ip}from"react/jsx-runtime";function fw({product:e,options:t,onSelectionsChange:n,top:r=12}){let o=oe(),i={"--ri-product-dock-top":`${r}px`},{adapter:s,urlParam:l,onConfigurationChange:c,defaultClosed:u}=t,p=dO(()=>{let x=l&&typeof window<"u"?new URLSearchParams(window.location.search).get(l):null;return x?Tb(x,e.definition):e.selections},[]),m=Kh({product:e.definition,initialSelections:p,adapter:s}),{selections:a}=m.configuration,f=JSON.stringify(a),[d,b]=mw(()=>!u&&(typeof window>"u"||window.innerWidth>640)),[h,w]=mw(!1),v=pw(n);v.current=n,bc(()=>{v.current(a)},[f]);let S=pw(c);S.current=c,bc(()=>{S.current?.(m.configuration,m.checkoutUrl)},[m.configuration.key,m.checkoutUrl]);let y=()=>{let x=new URL(window.location.href);return x.searchParams.set(l,Db(a)),x.href};bc(()=>{l&&window.history.replaceState(window.history.state,"",y())},[l,f]),bc(()=>{if(!h)return;let x=setTimeout(()=>w(!1),2e3);return()=>clearTimeout(x)},[h]);let R=!!l&&typeof window<"u"&&window.self===window.top;return d?Ip("div",{className:"ri-productDock",style:i,children:[zi("button",{type:"button",className:"ri-productDockClose",onClick:()=>b(!1),title:o("productHideOptions"),"aria-label":o("productHideOptions"),children:zi(gO,{size:14,"aria-hidden":"true"})}),zi(Cd,{configurator:m,actions:R?Ip("button",{type:"button",onClick:()=>{navigator.clipboard.writeText(y()).then(()=>w(!0)).catch(()=>{})},children:[h?zi(pO,{size:13,"aria-hidden":"true"}):zi(mO,{size:13,"aria-hidden":"true"}),o(h?"productLinkCopied":"productCopyLink")]}):void 0})]}):Ip("button",{type:"button",className:"ri-productDockToggle",style:i,onClick:()=>b(!0),title:o("productShowOptions"),children:[zi(fO,{size:14,"aria-hidden":"true"}),o("productOptions")]})}import{useMemo as hO}from"react";import{useEffect as bO}from"react";import{useThree as gw}from"@react-three/fiber";var bw=new WeakMap;function hc(e){let t=gw(r=>r.get),n=gw(r=>r.setEvents);bO(()=>{if(!e)return;let r=bw.get(t);if(!r){let i=new Set;r=i,bw.set(t,i);let s=t().events.filter;n({filter:(l,c)=>{let u=s?s(l,c):l;return i.size===0?u:u.filter(p=>{for(let m of i)if(!m(p))return!1;return!0})}})}r.add(e);let o=r;return()=>{o.delete(e)}},[e,t,n])}function zp({setAside:e,nodeRefs:t}){let n=hO(()=>{if(e.size===0)return null;let r={refs:null,bound:new Map};return o=>{let i=t.current??{};if(r.refs!==i){let l=new Map;for(let[c,u]of Object.entries(i))l.set(u,e.has(c));r={refs:i,bound:l}}let{bound:s}=r;for(let l=o.object;l;l=l.parent){let c=s.get(l);if(c!==void 0)return!c}return!0}},[e,t]);return hc(n),null}import{useEffect as os,useMemo as Vi,useRef as wO,useState as Sw}from"react";import{Edges as SO}from"@react-three/drei";import{useFrame as CO,useThree as Vp}from"@react-three/fiber";import{DoubleSide as MO,Quaternion as PO,Vector3 as Fo}from"three";import{Vector3 as vc,Plane as vO}from"three";var hw={x:0,y:1,z:2},yO=e=>Math.min(Math.max(e,0),1);function xO(e,t){let n=1/0,r=-1/0;for(let o=0;o<8;o++){let i=new vc(...e.min);for(let l=0;l<3;l++)o&1<<l&&i.setComponent(l,e.max[l]);let s=i.dot(t);n=Math.min(n,s),r=Math.max(r,s)}return[n,r]}function vw(e,t){if(!e.enabled||t.min.some((r,o)=>!Number.isFinite(r)||!Number.isFinite(t.max[o])||r>t.max[o]))return{cuts:[],intersection:!1};let n=(r,o,i,s,l)=>{let c=l?new vc(...l).normalize():new vc().setComponent(hw[o],1),[u,p]=xO(t,c),m=u+(p-u)*yO(i),a=s?1:-1;return{id:r,direction:c,min:u,max:p,coordinate:m,plane:new vO(c.clone().multiplyScalar(a),-m*a)}};if(e.mode==="box"){let r=e.box??{min:[0,0,0],max:[1,1,1]};return{intersection:!!e.invertBox,cuts:["x","y","z"].flatMap((o,i)=>[n(`${o}-min`,o,r.min[i],!e.invertBox),n(`${o}-max`,o,r.max[i],!!e.invertBox)])}}return e.mode==="planes"?{intersection:!1,cuts:(e.planes??[]).filter(r=>r.enabled).map(r=>n(r.id,r.axis,r.position,r.flip,r.normal))}:{intersection:!1,cuts:[n("plane",e.axis,e.position,e.flip,e.normal)]}}function yw(e,t,n){return e.length?t?e.some(r=>r.distanceToPoint(n)>=-1e-4):e.every(r=>r.distanceToPoint(n)>=-1e-4):!0}function yc(e,t,n){if(e.mode==="planes")return{planes:e.planes?.map(r=>r.id===t?{...r,position:n}:r)};if(e.mode==="box"){let r=e.box??{min:[0,0,0],max:[1,1,1]},o=[...r.min],i=[...r.max],s=hw[t[0]];return t.endsWith("min")?o[s]=Math.max(0,Math.min(n,i[s]-.001)):i[s]=Math.min(1,Math.max(n,o[s]+.001)),{box:{min:o,max:i}}}return{position:n}}function xw(e,t,n,r){let o=n.clone().addScaledVector(r,-n.dot(r));if(o.lengthSq()<1e-8)return null;o.normalize();let i=e.direction.dot(o);if(Math.abs(i)<1e-8)return null;let s=t.clone().sub(e.origin).dot(o)/i;return Number.isFinite(s)?e.at(s,new vc).dot(r):null}import{DoubleSide as xc}from"three";function ww(){let e=new Map;function t(n){let r=e.get(n);r&&(n.clippingPlanes===r.owned&&(n.clippingPlanes=r.planes,n.clipShadows=r.shadows,n.clipIntersection=r.intersection,n.side===xc&&(n.side=r.side),n.needsUpdate=!0),e.delete(n))}return{apply(n,r,o){let i=e.get(n);i&&n.clippingPlanes!==i.owned&&(e.delete(n),i=void 0),i||(i={planes:n.clippingPlanes,side:n.side,shadows:n.clipShadows,intersection:n.clipIntersection,owned:r},e.set(n,i)),n.side!==xc&&(i.side=n.side),!(n.clippingPlanes===r&&n.clipIntersection===o&&n.side===xc&&n.clipShadows)&&(i.owned=r,n.clippingPlanes=r,n.clipIntersection=o,n.clipShadows=!0,n.side=xc,n.needsUpdate=!0)},retain(n){for(let r of e.keys())n.has(r)||t(r)},restore(){for(let n of e.keys())t(n)}}}import{jsx as wc,jsxs as RO}from"react/jsx-runtime";function Fp({section:e,box:t,modelRef:n,showHandle:r,onChange:o,onDraggingChange:i}){let s=Vp(v=>v.gl),l=Vp(v=>v.raycaster),c=Vp(v=>v.invalidate),u=Vi(()=>db(e),[e]),{cuts:p,intersection:m}=Vi(()=>t?vw(u,t):{cuts:[],intersection:!1},[u,t]),a=Vi(()=>p.map(v=>v.plane),[p]),f=a.length>0,d=Vi(()=>ww(),[]);os(()=>{if(!f)return;let v=s.localClippingEnabled;return s.localClippingEnabled=!0,c(),()=>{d.restore(),s.localClippingEnabled=v,c()}},[f,s,d,c]),os(()=>{c()},[a,m,c]);let b=Vi(()=>new Set,[]);CO(()=>{f&&(b.clear(),n.current?.traverse(v=>{let S=v.material;if(S){if(!Array.isArray(S)){b.add(S),d.apply(S,a,m);return}for(let y of S)b.add(y),d.apply(y,a,m)}}),d.retain(b))});let h=Vi(()=>f?v=>{if(v.object.userData.riSectionHandle)return!0;let S=v.object;for(;S&&S!==n.current;)S=S.parent;return!S||yw(a,m,v.point)}:null,[f,a,m,n]);hc(h),os(()=>{if(!f)return;let v=l,S=v.firstHitOnly;return v.firstHitOnly=!1,()=>{v.firstHitOnly=S}},[f,l]),os(()=>()=>i(!1),[i]);let w=p.find(v=>v.id===u.activePlaneId)??(u.mode==="planes"&&u.activePlaneId?null:p[0]);return!f||!r||!t||!w?null:wc(kO,{cut:w,box:t,onMove:v=>o(yc(u,w.id,v)),onDraggingChange:i},w.id)}function kO({cut:e,box:t,onMove:n,onDraggingChange:r}){let[o,i]=Sw(!1),[s,l]=Sw(!1),c=wO(null),u=new Fo(...t.min).add(new Fo(...t.max)).multiplyScalar(.5);u.addScaledVector(e.direction,e.coordinate-u.dot(e.direction));let p=new PO().setFromUnitVectors(new Fo(0,0,1),e.direction),m=new Fo(1,0,0).applyQuaternion(p),a=new Fo(0,1,0).applyQuaternion(p),f=new Fo(...t.max).sub(new Fo(...t.min)),d=h=>Math.max(.01,Math.abs(h.x)*f.x+Math.abs(h.y)*f.y+Math.abs(h.z)*f.z)*1.08;os(()=>()=>r(!1),[r]);let b=h=>{c.current&&(h.target?.releasePointerCapture?.(h.pointerId),c.current=null,l(!1),r(!1))};return RO("mesh",{ref:h=>{h&&(gi(h),h.userData.riSectionHandle=!0)},position:u,quaternion:p,renderOrder:2,onPointerOver:h=>{h.stopPropagation(),i(!0)},onPointerOut:()=>i(!1),onPointerDown:h=>{h.stopPropagation(),h.target?.setPointerCapture?.(h.pointerId),c.current={point:h.point.clone(),view:h.ray.direction.clone(),at:h.point.dot(e.direction),cut:e.coordinate},l(!0),r(!0)},onPointerMove:h=>{let w=c.current;if(!w)return;h.stopPropagation();let v=xw(h.ray,w.point,w.view,e.direction);v!==null&&e.max>e.min&&n(Math.max(0,Math.min(1,(w.cut+v-w.at-e.min)/(e.max-e.min))))},onPointerUp:b,onPointerCancel:b,onClick:h=>h.stopPropagation(),children:[wc("planeGeometry",{args:[d(m),d(a)]}),wc("meshBasicMaterial",{color:"#22d3ee",transparent:!0,opacity:s?.22:o?.16:.08,side:MO,depthWrite:!1,toneMapped:!1}),wc(SO,{color:"#22d3ee",renderOrder:3})]})}import{jsx as Sc,jsxs as Cw}from"react/jsx-runtime";var Hp=({colorPicker:e,onClose:t,savedHex:n,itemMaterials:r,setItemMaterials:o,inline:i=!1})=>{let s=oe(),l=r[e.objectId]?.hex??n??"#ffffff";return Cw("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{padding:12}:{left:e.x,top:e.y,width:"min(225px, calc(100vw - 24px))",padding:12},onPointerDown:c=>c.stopPropagation(),children:[Sc("p",{className:"ri-popoverLabel",children:s("color")}),Sc(zl,{color:l,onChange:c=>o(u=>({...u,[e.objectId]:{...u[e.objectId],hex:c}}))}),Cw("div",{className:"ri-inlineRow",children:[Sc("span",{className:"ri-colorCode",children:l}),Sc("button",{className:"ri-secondaryButton",onClick:t,children:s("done")})]})]})};import{jsx as At,jsxs as Or}from"react/jsx-runtime";var Gp=({materialPopup:e,textureUrl:t,triggerFileUpload:n,clearTexture:r,canPlaceImage:o=!0,inline:i=!1,offset:s,rotationDegrees:l,onOffsetChange:c,onRotationChange:u,isPositioning:p=!1,onEndPositioning:m})=>{let a=oe();return Or("div",{className:`ri-popover${i?" ri-popover--inline":""}`,style:i?{overflow:"hidden"}:{left:e.x,top:e.y,width:"min(300px, calc(100vw - 24px))",overflow:"hidden"},onPointerDown:f=>f.stopPropagation(),children:[At("div",{className:"ri-popoverHeader",children:At("p",{className:"ri-popoverLabel",style:{marginBottom:0},children:a("material")})}),Or("div",{className:"ri-materialBody",children:[t?At("div",{className:"ri-previewFrame",children:At("img",{src:t,alt:a("texturePreview"),className:"ri-previewImage"})}):Or("div",{className:"ri-emptyState",children:[At("svg",{width:"24",height:"24",fill:"none",stroke:"currentColor",strokeWidth:1.5,viewBox:"0 0 24 24",children:At("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"})}),At("span",{style:{fontSize:12},children:a("noTextureApplied")})]}),o?At("button",{onClick:()=>n(e.objectId),className:"ri-uploadButton",children:a(t?"replaceImage":"uploadImage")}):At("p",{className:"ri-formatHint",children:a("noTextureCoordinates")}),t&&At("button",{onClick:()=>r(e.objectId),className:"ri-removeButton",children:a("removeTexture")}),o?At("p",{className:"ri-formatHint",children:"JPG \xB7 PNG \xB7 WebP"}):null,t&&(c||u)&&Or("div",{className:"ri-texturePosition",children:[At("p",{className:"ri-texturePositionLabel",children:a("texturePosition")}),Or("div",{className:"ri-texturePositionGrid",children:[Or("label",{className:"ri-texturePositionField",children:[At("span",{children:a("offsetX")}),At("input",{type:"number",step:.01,value:s?.[0]??0,onChange:f=>c?.(e.objectId,0,Number(f.target.value))})]}),Or("label",{className:"ri-texturePositionField",children:[At("span",{children:a("offsetY")}),At("input",{type:"number",step:.01,value:s?.[1]??0,onChange:f=>c?.(e.objectId,1,Number(f.target.value))})]})]}),Or("label",{className:"ri-texturePositionField ri-texturePositionField--full",children:[At("span",{children:a("rotation")}),Or("div",{className:"ri-texturePositionSliderRow",children:[At("input",{type:"range",min:0,max:360,step:1,value:l??0,onChange:f=>u?.(e.objectId,Number(f.target.value))}),At("input",{type:"number",min:0,max:360,step:1,value:Math.round(l??0),onChange:f=>u?.(e.objectId,Number(f.target.value))})]})]}),p?At("button",{type:"button",className:"ri-uploadButton",onClick:m,title:a("confirmTexturePosition"),children:a("donePositioning")}):At("p",{className:"ri-texturePositionHint",children:a("textureOffsetHint")})]})]})]})};import{Fragment as AO,useEffect as Up,useLayoutEffect as OO,useRef as $p,useState as Wp}from"react";import{Fragment as Xp,jsx as $t,jsxs as Fi}from"react/jsx-runtime";function Mw({entries:e}){return $t(Xp,{children:e.map(([t,n])=>{let r=n!==null&&typeof n=="object",o=r?Object.entries(n):[];return r&&o.length>0?Fi("div",{className:"ri-left-panel__data-group",children:[$t("span",{className:"ri-left-panel__data-key",children:t}),$t("div",{className:"ri-left-panel__data-children",children:$t(Mw,{entries:o})})]},t):Fi("div",{className:"ri-left-panel__data-row",children:[$t("span",{className:"ri-left-panel__data-key",children:t}),$t("span",{className:`ri-left-panel__data-value ri-left-panel__data-value--${typeof n}`,children:r?Array.isArray(n)?"[]":"{}":String(n)})]},t)})})}function EO({content:e}){let t=e!=null,[n,r]=Wp(t),[o,i]=Wp(t),s=$p(e);return t&&(s.current=e),Up(()=>{if(t){r(!0);return}if(n){i(!1);let l=setTimeout(()=>r(!1),300);return()=>clearTimeout(l)}},[t,n]),Up(()=>{if(n&&t){let l=requestAnimationFrame(()=>i(!0));return()=>cancelAnimationFrame(l)}},[n,t]),n?$t("div",{className:`ri-left-panel__action-extra${o?" ri-left-panel__action-extra--open":""}`,children:$t("div",{className:"ri-left-panel__action-extra-inner",children:e??s.current})}):null}function qp({isOpen:e,selectedObject:t,currentAction:n,onClose:r,onAction:o,renderActionExtra:i,translateDefaultActions:s=!1}){let l=oe(),c=$p(null),u=$p(()=>{});OO(()=>{if(!e)return;let d=c.current,b=document.activeElement;return u.current=()=>{b instanceof HTMLElement&&b!==document.body&&b.isConnected?b.focus({preventScroll:!0}):d?.closest(".ri-viewerLeft")?.querySelector(".ri-canvasArea")?.focus({preventScroll:!0})},()=>{d?.contains(document.activeElement)&&b instanceof HTMLElement&&b.isConnected&&b.focus({preventScroll:!0})}},[e]);let[p,m]=Wp(t);Up(()=>{t&&m(t)},[t]);let a=t??p,f=a?Object.entries(a).filter(([d])=>d!=="actions"&&d!=="decals"):[];return $t("div",{ref:c,inert:!e,className:`ri-left-panel ${e?"ri-left-panel--open":"ri-left-panel--closed"}`,children:a&&Fi(Xp,{children:[Fi("div",{className:"ri-left-panel__header",children:[$t("p",{className:"ri-left-panel__title",children:a.label}),$t("button",{onClick:()=>{u.current(),r()},className:"ri-left-panel__close-btn","aria-label":l("closePanel"),children:"\u2715"})]}),f.length>0&&$t("div",{className:"ri-left-panel__data",children:$t(Mw,{entries:f})}),$t("hr",{className:"ri-left-panel__divider"}),a.actions&&a.actions.length>0&&Fi(Xp,{children:[$t("div",{className:"ri-left-panel__actions-label",children:l("actions")}),$t("div",{className:"ri-left-panel__actions-list",children:a.actions.map((d,b)=>{let h=n?.action.id===d.id&&(n.binding===a||n.binding?.id===a.id||n.binding?.modelObjectId===a.modelObjectId||n.objectId===a.id||n.objectId===a.modelObjectId),w=i?.(d.id);return Fi(AO,{children:[$t("button",{onClick:v=>o({objectId:a.modelObjectId||a.id||"",action:d,binding:a,screenX:v.clientX,screenY:v.clientY}),className:["ri-left-panel__action-btn",`ri-left-panel__action-btn--${d.id}`,h?"ri-left-panel__action-btn--active":""].filter(Boolean).join(" "),"data-action-id":d.id,"data-label":d.label,children:s?l.message(d.label):d.label}),$t(EO,{content:w})]},b)})})]})]})})}import{useMemo as TO,useState as kw}from"react";import{Boxes as LO,Focus as _O}from"lucide-react";import{useState as DO}from"react";import{jsx as Er,jsxs as is}from"react/jsx-runtime";function Pw({openButtonLabel:e,openButtonAriaLabel:t,eyebrow:n,title:r,searchValue:o,onSearchChange:i,searchPlaceholder:s,children:l,isOpen:c,onToggle:u,openButtonIcon:p,closeButtonIcon:m,closeButtonAriaLabel:a}){let f=oe(),[d,b]=DO(!1),h=c!==void 0?c:d,w=v=>{c===void 0&&b(v),u?.(v)};return is("div",{className:`ri-sidepanel-wrap ${h?"ri-sidepanel-wrap--open":"ri-sidepanel-wrap--closed"}`,children:[!h&&is("button",{type:"button",className:"ri-sidepanel__open-btn",onClick:()=>w(!0),"aria-label":t,title:f("openPanel"),children:[p,e?Er("span",{children:e}):null]}),is("div",{className:`ri-sidepanel ${h?"ri-sidepanel--open":"ri-sidepanel--closed"}`,"aria-hidden":!h,children:[is("div",{className:"ri-sidepanel__header",children:[is("div",{className:"ri-sidepanel__header-top",children:[Er("span",{className:"ri-sidepanel__eyebrow",children:n}),Er("button",{type:"button",className:"ri-sidepanel__close-btn",onClick:()=>w(!1),"aria-label":a,title:f("close"),children:m??Er("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":"true",children:Er("path",{d:"M1 1L11 11M11 1L1 11",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round"})})})]}),Er("p",{className:"ri-sidepanel__title",children:r})]}),Er("div",{className:"ri-sidepanel__search-wrap",children:Er("input",{className:"ri-sidepanel__search",type:"text",placeholder:s,value:o,onChange:v=>i(v.target.value)})}),Er("div",{className:"ri-sidepanel__list",children:l})]})]})}import{jsx as Dr,jsxs as BO}from"react/jsx-runtime";function Kp({objectBindings:e,onAction:t,onFocus:n,onHover:r,isOpen:o,onToggle:i,isolatedKeys:s=null,onIsolate:l}){let c=oe(),[u,p]=kw(null),[m,a]=kw(""),f=TO(()=>Object.entries(e).filter(([d,b])=>{let h=m.toLowerCase();return d.toLowerCase().includes(h)||(b.label??"").toLowerCase().includes(h)}),[e,m]);return Dr(Pw,{openButtonLabel:"",openButtonAriaLabel:c("openSceneObjectsPanel"),openButtonIcon:Dr(LO,{width:16,height:16,"aria-hidden":"true"}),eyebrow:c("sceneObjects"),title:c("visibleEntries",{count:f.length}),searchValue:m,onSearchChange:a,searchPlaceholder:c("searchNodesLabels"),isOpen:o,onToggle:i,closeButtonAriaLabel:c("closeSceneObjectsPanel"),children:f.map(([d,b])=>{let h=b.visible!==!1,w=u===d,v=s?.has(d)??!1;return BO("div",{onClick:()=>n(b),onMouseEnter:()=>{p(d),r?.(b)},onMouseLeave:()=>{p(null),r?.(null)},className:`ri-sidepanel__row${w?" ri-sidepanel__row--hovered":""}${s!==null&&!v?" ri-sidepanel__row--setAside":""}`,children:[Dr("button",{type:"button",className:`ri-sidepanel__label ri-sidepanel__labelButton${w?" ri-sidepanel__label--hovered":""}`,onFocus:()=>{p(d),r?.(b)},onBlur:()=>{p(null),r?.(null)},children:b.label??d}),l?Dr("button",{type:"button",onClick:y=>{y.stopPropagation(),l(b)},className:`ri-sidepanel__isolate-btn${v?" ri-sidepanel__isolate-btn--active":""}`,title:c(v?"showAll":"isolate"),"aria-label":c(v?"showAllObject":"isolateObject",{name:b.label??d}),"aria-pressed":v,children:Dr(_O,{width:14,height:14,"aria-hidden":"true"})}):null,Dr("button",{type:"button",onClick:y=>{y.stopPropagation(),t?.({objectId:d,action:{id:"toggle-visibility",label:"Toggle Visibility",type:"command"},binding:b})},className:"ri-sidepanel__vis-btn",title:c(h?"hide":"show"),"aria-label":c(h?"hideObject":"showObject",{name:b.label??d}),children:Dr("span",{className:`ri-sidepanel__checkbox${h?" ri-sidepanel__checkbox--checked":""}`,children:h&&Dr("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",children:Dr("path",{d:"M1.5 5L4 7.5L8.5 2.5",stroke:"white",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})})})})]},d)})})}import{useEffect as Ew,useId as jO,useRef as Dw,useState as Tw}from"react";function Rw(e,t){let n=[];for(let[r,o]of Object.entries(e))(t.bindings[r]??o).visible!==!1&&(t.setAside.has(r)||n.push({key:r,binding:o,label:o.label||r}));return n}function Aw(e,t,n){if(n===0)return null;switch(e){case"ArrowDown":case"ArrowRight":return Math.min(t+1,n-1);case"ArrowUp":case"ArrowLeft":return Math.max(t-1,0);case"Home":return 0;case"End":return n-1;default:return null}}function Ow(e,t,n){let r=n.toLocaleLowerCase();if(!r)return null;let o=[...r].every(l=>l===r[0]),i=r.length>1&&!o?t:t+1,s=o?[r,r[0]]:[r];for(let l of s)for(let c=0;c<e.length;c++){let u=((i+c)%e.length+e.length)%e.length;if(e[u].label.toLocaleLowerCase().startsWith(l))return u}return null}import{jsx as Cc,jsxs as Lw}from"react/jsx-runtime";var NO=600;function _w({objects:e,selectedKey:t,onHighlight:n,onSelect:r,onClearSelection:o}){let i=oe(),s=jO(),[l,c]=Tw(!1),[u,p]=Tw(null),m=Dw({query:"",at:0}),a=u?e.findIndex(y=>y.key===u):-1,f=a>=0?e[a]:null;Ew(()=>{t&&e.some(y=>y.key===t)&&p(t)},[t,e]);let d=l?f?.binding??null:null,b=Dw(n);b.current=n,Ew(()=>{if(l)return b.current(d),()=>b.current(null)},[l,d]);let h=y=>{y!==null&&e[y]&&p(e[y].key)},w=y=>{let R=f?a:-1,x=Aw(y.key,Math.max(R,0),e.length);if(x!==null){y.preventDefault(),h(R<0&&y.key!=="End"?0:x);return}if(y.key==="Enter"||y.key===" "){if(!f)return;y.preventDefault(),r(f.binding);return}if(y.key==="Escape"){if(!t)return;y.preventDefault(),y.stopPropagation(),o();return}if(y.key.length===1&&y.key!==" "&&!y.ctrlKey&&!y.metaKey&&!y.altKey){let M=Date.now(),E=m.current;E.query=M-E.at>NO?y.key:E.query+y.key,E.at=M,y.preventDefault(),h(Ow(e,R,E.query))}};if(e.length===0)return null;let v=`${s}-option`,S=`${s}-hint`;return Lw("div",{className:`ri-objectNavigator${l?" ri-objectNavigator--focused":""}`,children:[Cc("div",{role:"listbox",tabIndex:0,className:"ri-objectNavigator__list","aria-label":i("objectNavigator"),"aria-describedby":S,"aria-activedescendant":f?v:void 0,onFocus:()=>{c(!0),f||p(e[0].key)},onBlur:()=>c(!1),onKeyDown:w,children:f?Lw("div",{id:v,role:"option","aria-selected":f.key===t,"aria-setsize":e.length,"aria-posinset":a+1,className:`ri-objectNavigator__option${f.key===t?" ri-objectNavigator__option--selected":""}`,children:[Cc("span",{className:"ri-objectNavigator__name",children:f.label}),Cc("span",{className:"ri-objectNavigator__position","aria-hidden":"true",children:i("objectNavigatorPosition",{position:a+1,count:e.length})})]}):null}),Cc("div",{id:S,className:"ri-objectNavigator__hint",children:i("objectNavigatorHint")})]})}import{RotateCcw as yD}from"lucide-react";import{useRef as ct,useEffect as Hi,useMemo as Dn,useCallback as Mc,useSyncExternalStore as FO}from"react";import{useThree as HO,useFrame as GO}from"@react-three/fiber";import{Sphere as UO,PivotControls as $O}from"@react-three/drei";import{Vector3 as kn,Vector2 as WO,AdditiveBlending as Qp,TextureLoader as XO,Matrix4 as qO,Quaternion as Gi,Euler as Pc}from"three";var Bw="data:image/png;base64,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";var jw="data:image/png;base64,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";var Nw="data:image/png;base64,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";import{Fragment as rE,jsx as Qe,jsxs as fn}from"react/jsx-runtime";var Jp=-100,Yp=100,Ww=.03,KO=.03,QO=.03,Zp=.5,JO=Bw,YO=jw,ZO=Nw,eE=Math.PI/4,Iw=.4,Ui=64,zw=Ww*3,em="#4d7dff",kc="#ffcc00",Vw=.02,Fw=.012,Hw=new kn(0,1,0),Rc=32,Gw="#ff9d3d",Ac=4;function tm(e){let t=new Float32Array((Ui+1)*3);for(let n=0;n<=Ui;n++){let r=n/Ui*Math.PI*2,o=Math.cos(r)*Iw,i=Math.sin(r)*Iw,s=0,l=0,c=0;e==="x"?(l=o,c=i):e==="y"?(s=o,c=i):(s=o,l=i),t[n*3]=s,t[n*3+1]=l,t[n*3+2]=c}return t}function tE(e){let t=Math.abs(e.y)<.99?new kn(0,1,0):new kn(1,0,0),n=new kn().crossVectors(e,t).normalize(),r=new kn().crossVectors(e,n).normalize();return[n,r]}function Uw(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}var Ho=null,as=null,rm=new Set;function nm(e){Ho!==e&&(Ho=e,rm.forEach(t=>t()))}function nE(e){return rm.add(e),()=>rm.delete(e)}function $w(){return Ho}function Xw({light:e,position:t,rotation:n=[0,0,0],color:r,intensity:o,visible:i,onPositionChange:s,onRotationChange:l,target:c,onTransformChange:u,onDraggingChange:p}){let{activeTab:m,activeSubTab:a,setActiveTab:f,setActiveSubTab:d}=qr(),{camera:b,gl:h,raycaster:w,invalidate:v,scene:S}=HO(),y=ct(null),R=ct(null),x=ct(null),M=ct(null),E=ct(null),P=ct(null),T=ct(null),O=ct(null),k=ct(null),D=ct(null),B=ct(null),H=ct(null),V=ct(null),W=Dn(()=>new qO,[]),z=Dn(()=>new Gi,[]),A=Dn(()=>new kn(1,1,1),[]),$=ct([0,0,0]),J=ct([0,0,0]),ae=ct(!1),Z=ct(null),Y=ct(null),te=ct(new kn),U=ct(null),N=ct(null),K=ct(p);Hi(()=>{K.current=p},[p]);let ne=Dn(()=>new kn(t[0],t[1],t[2]),[t]),Fe=Dn(()=>new Pc(n[0],n[1],n[2]),[n]),Q=Dn(()=>new Float32Array(6),[]),Ce=Dn(()=>tm("x"),[]),Ee=Dn(()=>tm("y"),[]),we=Dn(()=>tm("z"),[]),pt=Dn(()=>new Float32Array((Rc+1)*3),[]),qe=Dn(()=>new Float32Array(Ac*2*3),[]),vt=e?.type==="point",ut=e?.type==="spot",mt=e?.type==="directional",jt=vt?YO:ut?ZO:JO,X=vt?KO:ut?QO:Ww,ie=Dn(()=>new XO().load(jt),[jt]),Re=FO(nE,$w,$w),he=!!e&&Re===e.id,Pe=ct(new kn),Ae=ct(new Pc),He=ct(new kn),Ot=c?.[0]??0,Xt=c?.[1]??0,Ct=c?.[2]??0;Hi(()=>{ae.current||(Pe.current.copy(ne),Ae.current.copy(Fe),He.current.set(Ot,Xt,Ct),v())},[ne,Fe,Ot,Xt,Ct,v]),Hi(()=>{e&&Ho===e.id&&!i&&nm(null)},[e?.id,i]),Hi(()=>()=>{e&&Ho===e.id&&nm(null),N.current!==null&&(cancelAnimationFrame(N.current),N.current=null),e&&nc(S,e.id)},[e?.id,S]),Hi(()=>{if(!he)return;let se=V.current;return as=se,()=>{as===se&&(as=null)}});let bn=Mc(()=>{if(ae.current||!he)return;let se=Pe.current,pe=new Gi().setFromEuler(Ae.current);W.compose(se,pe,A)},[W,A,he]);GO(()=>{if(y.current&&y.current.position.copy(Pe.current),bn(),x.current){x.current.lookAt(b.position);let se=b,pe;se.isOrthographicCamera?pe=X/se.zoom:pe=b.position.distanceTo(Pe.current)*X,x.current.scale.setScalar(pe)}if(k.current){let se=b,pe;se.isOrthographicCamera?pe=zw/se.zoom:pe=b.position.distanceTo(Pe.current)*zw,k.current.scale.setScalar(pe)}if(E.current){let se=E.current.getAttribute("position"),pe=se.array;pe[0]=Pe.current.x,pe[1]=Pe.current.y,pe[2]=Pe.current.z,pe[3]=He.current.x,pe[4]=He.current.y,pe[5]=He.current.z,se.needsUpdate=!0,E.current.computeBoundingSphere()}if(P.current){let se=He.current,pe=Pe.current.clone().sub(se),Ge=pe.length();P.current.visible=Ge>Zp,Ge>1e-6&&(P.current.position.copy(se).addScaledVector(pe,.5),P.current.scale.set(1,Ge,1),P.current.quaternion.setFromUnitVectors(Hw,pe.normalize()))}if(M.current&&(M.current.visible=Pe.current.distanceTo(He.current)>Zp),T.current&&O.current){let se=He.current,pe=se.clone().sub(Pe.current),Ge=pe.length()>Zp;if(T.current.visible=Ge,O.current.visible=Ge,Ge){let ze=b,Ue=ze.isOrthographicCamera?Fw/ze.zoom:b.position.distanceTo(se)*Fw;pe.normalize(),T.current.position.copy(se).addScaledVector(pe,-Ue),T.current.quaternion.setFromUnitVectors(Hw,pe),T.current.scale.setScalar(Ue),O.current.position.copy(se),O.current.scale.setScalar(Ue*.45)}}if(ut&&D.current&&B.current&&H.current){let se=Pe.current,pe=He.current.clone().sub(se),Ge=pe.length();if(Ge>1e-6){D.current.visible=!0;let ze=pe.normalize(),Ue=Ge,Kt=e?.angle??Math.PI/6,ft=Ue*Math.tan(Kt),Vt=se.clone().add(ze.clone().multiplyScalar(Ue)),[xt,hn]=tE(ze),Bn=B.current.getAttribute("position"),vn=Bn.array;for(let wt=0;wt<=Rc;wt++){let Dt=wt/Rc*Math.PI*2,ln=Vt.x+(xt.x*Math.cos(Dt)+hn.x*Math.sin(Dt))*ft,Ht=Vt.y+(xt.y*Math.cos(Dt)+hn.y*Math.sin(Dt))*ft,jn=Vt.z+(xt.z*Math.cos(Dt)+hn.z*Math.sin(Dt))*ft;vn[wt*3]=ln,vn[wt*3+1]=Ht,vn[wt*3+2]=jn}Bn.needsUpdate=!0,B.current.computeBoundingSphere();let Qt=H.current.getAttribute("position"),Ft=Qt.array;for(let wt=0;wt<Ac;wt++){let Dt=wt/Ac*Math.PI*2,ln=Vt.x+(xt.x*Math.cos(Dt)+hn.x*Math.sin(Dt))*ft,Ht=Vt.y+(xt.y*Math.cos(Dt)+hn.y*Math.sin(Dt))*ft,jn=Vt.z+(xt.z*Math.cos(Dt)+hn.z*Math.sin(Dt))*ft,nn=wt*6;Ft[nn]=se.x,Ft[nn+1]=se.y,Ft[nn+2]=se.z,Ft[nn+3]=ln,Ft[nn+4]=Ht,Ft[nn+5]=jn}Qt.needsUpdate=!0,H.current.computeBoundingSphere()}else D.current.visible=!1}});let Et=Mc(()=>{N.current!==null&&(cancelAnimationFrame(N.current),N.current=null),e&&nc(S,e.id),$.current=t,J.current=[n[0],n[1],n[2]],te.current.copy(He.current),ae.current=!0,Z.current=null,Y.current=null,U.current=null,K.current?.(!0)},[t,n,e?.id,S]),qt=Mc((se,pe)=>{let Ge=pe,ze=new kn($.current[0],$.current[1],$.current[2]),Ue=new kn,Kt=new Gi,ft=new kn;Ge.decompose(Ue,Kt,ft);let Vt=ze.clone().applyMatrix4(Ge),xt=[Math.min(Math.max(Vt.x,Jp),Yp),Math.min(Math.max(Vt.y,Jp),Yp),Math.min(Math.max(Vt.z,Jp),Yp)],hn=new Gi().setFromEuler(new Pc(J.current[0],J.current[1],J.current[2],"XYZ")),Bn=new Gi().copy(Kt).multiply(hn),vn=new Pc().setFromQuaternion(Bn,"XYZ"),Qt=[vn.x,vn.y,vn.z];if(ut||mt){let wt=te.current.clone().applyMatrix4(Ge);He.current.copy(wt),U.current=wt.toArray()}Pe.current.set(xt[0],xt[1],xt[2]),Ae.current.set(Qt[0],Qt[1],Qt[2]),Z.current=xt,Y.current=Qt,e&&_x(S,e.id,{position:xt,...U.current?{target:U.current}:{}});let Ft=new Gi().setFromEuler(Ae.current);W.compose(Pe.current,Ft,A),v()},[W,A,v,ut,mt,e?.id,S]),yt=Mc(()=>{ae.current=!1;let se=Z.current,pe=Y.current,Ge=U.current;Z.current=null,Y.current=null,U.current=null;let ze=se&&!Uw(se,$.current),Ue=pe&&!Uw(pe,J.current);u?(ze||Ue)&&u({position:se??$.current,rotation:pe??J.current,...Ge?{target:Ge}:{}}):(ze&&s&&s(se),Ue&&l&&l(pe)),e&&nc(S,e.id),ze||Ue?N.current=requestAnimationFrame(()=>{N.current=null,K.current?.(!1)}):K.current?.(!1)},[s,l,u,e?.id,S]);return Hi(()=>{let se=ze=>{let Ue=h.domElement.getBoundingClientRect();return new WO((ze.clientX-Ue.left)/Ue.width*2-1,-((ze.clientY-Ue.top)/Ue.height)*2+1)},pe=ze=>!!ze.target.closest?.("button, input, textarea, .ri-annotationPopup, .ri-colorPicker, .ri-materialPicker"),Ge=ze=>{if(pe(ze)||e&&Ho===e.id)return;let Ue=se(ze);if(w.setFromCamera(Ue,b),as&&w.intersectObject(as,!0).length>0)return;let Kt=[];if(R.current&&Kt.push(R.current),x.current&&Kt.push(x.current),Kt.length===0)return;if(w.intersectObjects(Kt,!1).length>0){let Vt=e?.id??null;Ho!==Vt&&(nm(Vt),f?.("scene"),d?.("lighting")),ze.preventDefault(),ze.stopPropagation()}};return h.domElement.addEventListener("pointerdown",Ge),()=>{h.domElement.removeEventListener("pointerdown",Ge)}},[b,w,h,e,f,d]),m!=="scene"||a!=="lighting"||!e||!i||e.type==="none"||e.type==="hemisphere"?null:fn("group",{ref:se=>{se&&gi(se)},children:[fn("group",{ref:y,children:[Qe("sprite",{ref:x,children:Qe("spriteMaterial",{map:ie,transparent:!0,opacity:.9,blending:Qp,depthWrite:!1,rotation:ut?eE:0},jt)}),Qe(UO,{ref:R,args:[.25,16,16],children:Qe("meshBasicMaterial",{transparent:!0,opacity:.01})}),vt&&fn("group",{ref:k,children:[fn("lineLoop",{renderOrder:999,children:[Qe("bufferGeometry",{children:Qe("bufferAttribute",{attach:"attributes-position",args:[Ce,3],count:Ui+1})}),Qe("lineBasicMaterial",{color:em,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),fn("lineLoop",{renderOrder:999,children:[Qe("bufferGeometry",{children:Qe("bufferAttribute",{attach:"attributes-position",args:[Ee,3],count:Ui+1})}),Qe("lineBasicMaterial",{color:em,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]}),fn("lineLoop",{renderOrder:999,children:[Qe("bufferGeometry",{children:Qe("bufferAttribute",{attach:"attributes-position",args:[we,3],count:Ui+1})}),Qe("lineBasicMaterial",{color:em,transparent:!0,opacity:.6,depthTest:!1,depthWrite:!1})]})]})]}),!vt&&!ut&&fn(rE,{children:[fn("mesh",{ref:P,children:[Qe("cylinderGeometry",{args:[Vw,Vw,1,8,1,!0]}),Qe("meshBasicMaterial",{color:kc,transparent:!0,opacity:.05,blending:Qp,depthWrite:!1,depthTest:!1})]}),fn("mesh",{ref:T,renderOrder:999,children:[Qe("coneGeometry",{args:[.45,2,12]}),Qe("meshBasicMaterial",{color:kc,transparent:!0,opacity:.9,depthTest:!1,depthWrite:!1})]}),fn("mesh",{ref:O,renderOrder:999,children:[Qe("sphereGeometry",{args:[1,12,8]}),Qe("meshBasicMaterial",{color:kc,transparent:!0,opacity:.9,depthTest:!1,depthWrite:!1})]}),fn("line",{ref:M,children:[Qe("bufferGeometry",{ref:E,children:Qe("bufferAttribute",{attach:"attributes-position",args:[Q,3],count:2})}),Qe("lineBasicMaterial",{color:kc,transparent:!0,opacity:.7,blending:Qp})]})]}),ut&&fn("group",{ref:D,children:[fn("lineLoop",{renderOrder:999,children:[Qe("bufferGeometry",{ref:B,children:Qe("bufferAttribute",{attach:"attributes-position",args:[pt,3],count:Rc+1})}),Qe("lineBasicMaterial",{color:Gw,transparent:!0,opacity:.85,depthTest:!1,depthWrite:!1})]}),fn("lineSegments",{renderOrder:999,children:[Qe("bufferGeometry",{ref:H,children:Qe("bufferAttribute",{attach:"attributes-position",args:[qe,3],count:Ac*2})}),Qe("lineBasicMaterial",{color:Gw,transparent:!0,opacity:.5,depthTest:!1,depthWrite:!1})]})]}),he&&(s||u)&&Qe($O,{ref:V,matrix:W,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#ff2d6f","#64dfa6","#2f8fe8"],hoveredColor:"#ffd84d",opacity:.95,depthTest:!1,disableScaling:!0,disableRotations:vt,onDragStart:Et,onDrag:qt,onDragEnd:yt})]})}import{useCallback as tr,useEffect as oE,useLayoutEffect as iE,useMemo as gn,useRef as Tn}from"react";import{Html as aE,PivotControls as sE}from"@react-three/drei";import{useFrame as lE,useThree as om}from"@react-three/fiber";import{Euler as qw,Matrix4 as ss,Quaternion as ls,Vector3 as Rn}from"three";import{Maximize2 as cE}from"lucide-react";import{jsx as cs,jsxs as dE}from"react/jsx-runtime";var uE=.01,im=.5;function am({node:e,space:t,moveEnabled:n,gizmoTool:r,scaleEnabled:o,onTransformChange:i,onDraggingChange:s,transform:l}){let c=om(Q=>Q.invalidate),u=om(Q=>Q.camera),p=om(Q=>Q.size),m=gn(()=>Ro(e),[e]),a=gn(()=>new Rn,[e]);l?.pivot?a.fromArray(l.pivot.point):a.copy(m);let f=gn(()=>{let Q=hl(e);if(!Q)return[a.clone().add(new Rn(im,im,im))];let Ce=[];for(let Ee of[Q.min.x,Q.max.x])for(let we of[Q.min.y,Q.max.y])for(let pt of[Q.min.z,Q.max.z])Ce.push(new Rn(Ee,we,pt));return Ce},[e,a]),d=gn(()=>new Rn,[]),b=gn(()=>new Rn,[]),h=Tn(null),w=gn(()=>new ss,[]),v=Tn(!1),S=Tn(new ss),y=Tn(new ss),R=Tn(null),x=Tn([]),M=Tn(null),E=Tn(s);E.current=s;let P=gn(()=>new Rn,[]),T=gn(()=>new ls,[]),O=gn(()=>new Rn,[]),k=gn(()=>new ls,[]),D=gn(()=>new Rn(1,1,1),[]),B=gn(()=>new ls,[]),H=gn(()=>new Rn,[]),V=gn(()=>new Rn,[]),W=Tn([0,0,0]),z=Tn(new Rn(1,1,1)),A=Tn({point:[0,0,0],offset:[0,0,0]}),$=tr(()=>{v.current||(e.updateWorldMatrix(!0,!1),P.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(T),k.copy(T),t==="world"&&k.identity(),w.compose(P,k,D))},[P,w,k,D,e,a,t,T]),J=tr(()=>{e.updateWorldMatrix(!0,!1);let Q=1/0;for(let Ce of f){d.copy(Ce).applyMatrix4(e.matrixWorld);let Ee=d.distanceToSquared(u.position);Ee<Q&&(Q=Ee,b.copy(d))}h.current?.position.copy(b)},[u,b,f,e,d]);iE(()=>($(),J(),()=>{let Q=M.current!==null;Q&&(cancelAnimationFrame(M.current),M.current=null),(v.current||Q)&&(v.current=!1,E.current(!1));for(let Ce of x.current)fr(Ce);x.current=[]}),[$]),lE(()=>{$(),J()});let ae=tr(()=>{M.current!==null&&(cancelAnimationFrame(M.current),M.current=null),e.updateWorldMatrix(!0,!0),x.current=[];for(let Q of $r(e))rl(Q)||(bi(Q,Q.matrixWorld),x.current.push(Q));e.updateWorldMatrix(!0,!1),P.copy(a).applyMatrix4(e.matrixWorld),e.getWorldQuaternion(T),e.getWorldScale(O),S.current.compose(P,T,O),y.current.copy(w),W.current=[e.rotation.x,e.rotation.y,e.rotation.z],z.current.copy(e.scale),A.current=l?.pivot??vl(a.toArray(),W.current,e.scale.toArray(),e.rotation.order),R.current=null,v.current=!0,s(!0)},[P,w,e,s,a,T,O,l?.pivot]),Z=tr((Q,Ce)=>{let Ee=S.current.clone().premultiply(Ce),we=y.current.clone().premultiply(Ce);Ee.decompose(H,T,V);let pt=H.clone();we.decompose(P,k,D),t==="world"&&k.identity(),w.compose(P,k,D),Q.decompose(H,B,V);let qe=new qw().setFromQuaternion(B,e.rotation.order),[vt,ut,mt]=W.current,jt=[vt+qe.x,ut+qe.y,mt+qe.z],X=new ls().setFromEuler(new qw(jt[0],jt[1],jt[2],e.rotation.order));e.scale.copy(z.current);let Re=(e.parent?.matrixWorld||new ss).clone().invert(),he=pt.clone().applyMatrix4(Re),Pe=a.clone().multiply(e.scale).applyQuaternion(X),Ae=he.clone().sub(Pe);e.position.copy(Ae),e.rotation.set(jt[0],jt[1],jt[2],e.rotation.order),e.updateMatrixWorld(!0),c();let He=A.current,Ot=he.clone().sub(new Rn(...He.offset)),Xt=[Ot.x,Ot.y,Ot.z];R.current={position:Xt,rotation:jt,pivot:He}},[P,B,w,k,D,c,e,a,H,V,t,T]),Y=tr(()=>{v.current=!1;let Q=R.current;if(R.current=null,Q)i(Q),M.current=requestAnimationFrame(()=>{M.current=null,s(!1)});else if(x.current.length>0){for(let Ce of x.current)fr(Ce);e.updateMatrixWorld(!0),c(),s(!1)}else s(!1);x.current=[]},[c,e,s,i]),te=Tn(null),U=tr(Q=>{let Ce=Q.clone().project(u);return{x:p.left+(Ce.x*.5+.5)*p.width,y:p.top+(-Ce.y*.5+.5)*p.height}},[u,p]),N=tr((Q,Ce)=>{let Ee=Math.max(uE,Number.isFinite(Q)?Q:1);e.scale.copy(z.current).multiplyScalar(Ee);let pt=(e.parent?.matrixWorld||new ss).clone().invert(),qe=Ce.clone().applyMatrix4(pt),vt=new ls().setFromEuler(e.rotation),ut=a.clone().multiply(e.scale).applyQuaternion(vt),mt=qe.clone().sub(ut);e.position.set(mt.x,mt.y,mt.z),e.updateMatrixWorld(!0),J(),c(),R.current={position:qe.clone().sub(new Rn(...A.current.offset)).toArray(),scale:e.scale.toArray(),pivot:A.current}},[c,e,a,J]),K=tr(Q=>{if(!o)return;Q.stopPropagation(),Q.preventDefault(),Q.currentTarget.setPointerCapture(Q.pointerId),ae();let Ce=P.clone(),Ee=U(Ce),we=Math.max(1,Math.hypot(Q.clientX-Ee.x,Q.clientY-Ee.y));te.current={pointerId:Q.pointerId,centerScreen:Ee,startDistance:we,pivotWorld:Ce}},[ae,P,U,o]),ne=tr(Q=>{let Ce=te.current;if(!Ce||Q.pointerId!==Ce.pointerId)return;Q.stopPropagation();let Ee=Math.hypot(Q.clientX-Ce.centerScreen.x,Q.clientY-Ce.centerScreen.y);N(Ee/Ce.startDistance,Ce.pivotWorld)},[N]),Fe=tr(Q=>{let Ce=te.current;!Ce||Q.pointerId!==Ce.pointerId||(Q.stopPropagation(),Q.currentTarget.hasPointerCapture(Q.pointerId)&&Q.currentTarget.releasePointerCapture(Q.pointerId),te.current=null,Y())},[Y]);return oE(()=>{o||te.current&&(te.current=null,Y())},[o,Y]),dE("group",{children:[cs(sE,{matrix:w,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#e5484d","#46a758","#3e8bff"],hoveredColor:"#35c0dc",opacity:.95,depthTest:!1,disableAxes:!n||r==="rotate",disableSliders:!n||r==="rotate",disableRotations:!n||r==="move",disableScaling:!0,onDragStart:ae,onDrag:(Q,Ce,Ee,we)=>Z(Ce,we),onDragEnd:Y}),o&&cs("group",{ref:h,children:cs(aE,{portal:void 0,zIndexRange:[10,0],style:{pointerEvents:"none",transition:"opacity 0.2s"},children:cs("div",{onPointerDown:K,onPointerMove:ne,onPointerUp:Fe,onPointerCancel:Fe,title:"Drag to resize",style:{position:"absolute",transform:"translate(-50%, -50%)",width:24,height:24,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",background:"#113456",border:"2px solid #ffffff",boxShadow:"0 2px 6px rgba(0,0,0,0.5)",cursor:"nwse-resize",touchAction:"none",pointerEvents:"auto"},children:cs(cE,{size:13,color:"#ffffff"})})})})]})}import{useCallback as nr,useEffect as mE,useLayoutEffect as Jw,useMemo as Go,useRef as Ln}from"react";import{Html as fE,PivotControls as gE}from"@react-three/drei";import{useFrame as bE,useThree as cm}from"@react-three/fiber";import{Matrix4 as us,Quaternion as hE,Vector3 as Uo}from"three";import{Maximize2 as vE}from"lucide-react";import{Matrix4 as pE,Vector3 as Kw}from"three";function sm(e){let t=new Set(e.map(({node:r})=>r)),n=new Set;return e.filter(({node:r})=>{if(n.has(r))return!1;n.add(r);for(let o=r.parent;o;o=o.parent)if(t.has(o))return!1;return!0})}function Qw(e){return sm(e).map(({key:t,node:n,transform:r})=>{n.updateWorldMatrix(!0,!0);let o=r?.pivot?.point??Ro(n).toArray(),i=r?.pivot??vl(o,[n.rotation.x,n.rotation.y,n.rotation.z],n.scale.toArray(),n.rotation.order,r?.shear);return{key:t,node:n,pivot:i,startWorld:n.matrixWorld.clone(),startMatrix:n.matrix.clone(),startMatrixAutoUpdate:n.matrixAutoUpdate,startPosition:n.position.clone(),startQuaternion:n.quaternion.clone(),startScale:n.scale.clone(),pivotWorld:new Kw(...i.point).applyMatrix4(n.matrixWorld)}})}function lm(e,t,n=1){return e.map(r=>{let{node:o,pivot:i}=r;o.parent?.updateWorldMatrix(!0,!1);let s=(o.parent?.matrixWorld.clone()??new pE).invert(),l=s.clone().multiply(t).multiply(r.startWorld),{rotation:c,scale:u,shear:p}=eb(l,r.startScale.clone().multiplyScalar(n),r.startQuaternion),m=r.pivotWorld.clone().applyMatrix4(t).applyMatrix4(s);return o.position.setFromMatrixPosition(l),o.quaternion.copy(c),o.scale.copy(u),ol(o,p),o.updateMatrixWorld(!0),{key:r.key,transform:{position:m.clone().sub(new Kw(...i.offset)).toArray(),rotation:[o.rotation.x,o.rotation.y,o.rotation.z],scale:u.toArray(),pivot:i,shear:p}}})}import{jsx as ds,jsxs as xE}from"react/jsx-runtime";var yE=.01;function um({entries:e,referenceNode:t,space:n,moveEnabled:r,gizmoTool:o,scaleEnabled:i,onTransformChange:s,onDraggingChange:l}){let c=cm(U=>U.invalidate),u=cm(U=>U.camera),p=cm(U=>U.size),m=Ln(e);m.current=e;let a=Ln([]);(e.length!==a.current.length||e.some((U,N)=>U.key!==a.current[N].key||U.node!==a.current[N].node))&&(a.current=e);let f=a.current,d=Go(()=>sm(f).map(({node:U})=>U),[f]),b=t??e[e.length-1]?.node,h=Go(()=>new Uo,[]),w=Go(()=>new hE,[]),v=Go(()=>new us,[]),S=Go(()=>new Uo(1,1,1),[]),y=Go(()=>new Uo,[]),R=Ln(null),x=Go(()=>d.flatMap(U=>{let N=hl(U);if(!N)return[{node:U,point:Ro(U).addScalar(.5)}];let K=[];for(let ne of[N.min.x,N.max.x])for(let Fe of[N.min.y,N.max.y])for(let Q of[N.min.z,N.max.z])K.push({node:U,point:new Uo(ne,Fe,Q)});return K}),[d]),M=Ln(!1),E=Ln(new us),P=Ln([]),T=Ln(null),O=Ln([]),k=Ln(null),D=Ln(null),B=Ln(l);B.current=l;let H=Ln(s);H.current=s;let V=nr(()=>{if(!M.current){h.set(0,0,0);for(let U of d)U.updateWorldMatrix(!0,!1),h.add(Ro(U).applyMatrix4(U.matrixWorld));d.length&&h.divideScalar(d.length),w.identity(),n==="local"&&b&&(b.updateWorldMatrix(!0,!1),b.getWorldQuaternion(w)),v.compose(h,w,S)}},[h,v,w,d,b,n,S]),W=nr(()=>{let U=1/0,N=new Uo;for(let{node:K,point:ne}of x){K.updateWorldMatrix(!0,!1),N.copy(ne).applyMatrix4(K.matrixWorld);let Fe=N.distanceToSquared(u.position);Fe<U&&(U=Fe,y.copy(N))}R.current?.position.copy(y)},[u,x,y]),z=nr(()=>{let U=D.current;D.current=null,U?.target.hasPointerCapture(U.pointerId)&&U.target.releasePointerCapture(U.pointerId)},[]);Jw(()=>{V(),W()},[V,W]),Jw(()=>()=>{z();let U=k.current!==null;if(U&&(cancelAnimationFrame(k.current),k.current=null),M.current)for(let N of P.current)N.node.matrixAutoUpdate=N.startMatrixAutoUpdate,N.node.matrix.copy(N.startMatrix),N.node.position.copy(N.startPosition),N.node.quaternion.copy(N.startQuaternion),N.node.scale.copy(N.startScale),N.node.updateMatrixWorld(!0);(M.current||U)&&(M.current=!1,T.current=null,B.current(!1),c());for(let N of O.current)fr(N);O.current=[]},[f,c,z]),bE(()=>{V(),W()});let A=nr(()=>{k.current!==null&&(cancelAnimationFrame(k.current),k.current=null),V(),P.current=Qw(m.current),O.current=[];for(let{node:U}of P.current)for(let N of $r(U))rl(N)||(bi(N,N.matrixWorld),O.current.push(N));E.current.copy(v),T.current=null,M.current=!0,B.current(!0)},[v,V]),$=nr((U,N)=>{if(!M.current)return;E.current.clone().premultiply(N).decompose(h,w,new Uo),n==="world"&&w.identity(),v.compose(h,w,S),T.current=lm(P.current,N),W(),c()},[h,v,w,c,n,W,S]),J=nr(()=>{if(!M.current)return;M.current=!1,z();let U=T.current;if(T.current=null,U?.length)k.current=requestAnimationFrame(()=>{k.current=null,B.current(!1)}),H.current(U);else{for(let N of O.current)fr(N);c(),B.current(!1)}O.current=[]},[c,z]);mE(()=>{(!i&&D.current||!r&&M.current&&!D.current)&&J()},[i,r,J]);let ae=nr(U=>{let N=U.clone().project(u);return{x:p.left+(N.x*.5+.5)*p.width,y:p.top+(-N.y*.5+.5)*p.height}},[u,p]),Z=nr(U=>{if(!i)return;U.stopPropagation(),U.preventDefault(),U.currentTarget.setPointerCapture(U.pointerId),A();let N=ae(h);D.current={pointerId:U.pointerId,target:U.currentTarget,centerScreen:N,startDistance:Math.max(1,Math.hypot(U.clientX-N.x,U.clientY-N.y))}},[A,h,ae,i]),Y=nr(U=>{let N=D.current;if(!N||U.pointerId!==N.pointerId)return;U.stopPropagation();let K=Math.hypot(U.clientX-N.centerScreen.x,U.clientY-N.centerScreen.y),ne=Math.max(yE,K/N.startDistance),Fe=new Uo().setFromMatrixPosition(E.current),Q=new us().makeTranslation(...Fe.toArray()).multiply(new us().makeScale(ne,ne,ne)).multiply(new us().makeTranslation(...Fe.clone().negate().toArray()));T.current=lm(P.current,Q,ne),W(),c()},[c,W]),te=nr(U=>{U.pointerId===D.current?.pointerId&&(U.stopPropagation(),J())},[J]);return xE("group",{children:[ds(gE,{matrix:v,autoTransform:!1,fixed:!0,scale:90,lineWidth:3,axisColors:["#e5484d","#46a758","#3e8bff"],hoveredColor:"#35c0dc",opacity:.95,depthTest:!1,disableAxes:!r||o==="rotate",disableSliders:!r||o==="rotate",disableRotations:!r||o==="move",disableScaling:!0,onDragStart:A,onDrag:(U,N,K,ne)=>$(N,ne),onDragEnd:J}),i&&ds("group",{ref:R,children:ds(fE,{children:ds("div",{onPointerDown:Z,onPointerMove:Y,onPointerUp:te,onPointerCancel:te,title:"Drag to resize",style:{position:"absolute",transform:"translate(-50%, -50%)",width:24,height:24,borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",background:"#113456",border:"2px solid #ffffff",boxShadow:"0 1px 4px rgba(0,0,0,0.4)",cursor:"nwse-resize",touchAction:"none",pointerEvents:"auto"},children:ds(vE,{size:13,color:"#ffffff"})})})})]})}import{Vector3 as wE}from"three";function SE(e){let t=e.object;if(!t.isSkinnedMesh||!e.face||!t.skeleton)return null;let n=t.geometry,r=n.getAttribute("skinIndex"),o=n.getAttribute("skinWeight"),i=n.getAttribute("position");if(!r||!o||!i)return null;let s=t.worldToLocal(e.point.clone()),l=[e.face.a,e.face.b,e.face.c],c=new wE,u=l[0],p=1/0;for(let f of l){c.fromBufferAttribute(i,f);let d=c.distanceToSquared(s);d<p&&(p=d,u=f)}let m=r.getComponent(u,0),a=o.getComponent(u,0);for(let f=1;f<4;f++){let d=o.getComponent(u,f);d>a&&(a=d,m=r.getComponent(u,f))}return t.skeleton.bones[m]??null}function Yw(e){let t=SE(e)??e.object,n=Gr(t);if(!n)return null;t.updateWorldMatrix(!0,!1);let r=t.worldToLocal(e.point.clone());return{anchorNodeName:n,anchorLocalPosition:[r.x,r.y,r.z]}}function Zw(e,t,n){if(!e.anchorNodeName||!e.anchorLocalPosition)return!1;let r=Ur(t,e.anchorNodeName);return r?(r.updateWorldMatrix(!0,!1),n.set(...e.anchorLocalPosition).applyMatrix4(r.matrixWorld),!0):!1}import{useEffect as CE,useMemo as dm,useRef as e0}from"react";import{useFrame as ME,useThree as PE}from"@react-three/fiber";import{Vector3 as pm}from"three";function Oc({annotation:e,enabled:t,controlsRef:n,offsetRef:r}){let o=PE(a=>a.scene),i=e0(null),s=e0(!1),l=dm(()=>new pm,[]),c=dm(()=>new pm,[]),u=dm(()=>new pm,[]),p=e?.anchorNodeName,m=e?.anchorLocalPosition;return CE(()=>{i.current=null,s.current=!1},[p,e?.id]),ME(()=>{let a=n.current,f=r.current;if(!t||!a||!f||!p||!m){s.current=!1;return}let d=i.current;if((!d||!d.parent)&&(d=Ur(o,p),i.current=d),!d){s.current=!1;return}d.updateWorldMatrix(!0,!1),l.set(m[0],m[1],m[2]).applyMatrix4(d.matrixWorld),!(s.current&&l.distanceToSquared(c)<1e-8)&&(c.copy(l),s.current=!0,u.copy(l).add(f),a.setLookAt(u.x,u.y,u.z,l.x,l.y,l.z,!0))}),null}import{useCallback as $n,useEffect as $i,useMemo as Wi,useRef as mm,useState as Tr}from"react";import{Box3 as kE,Raycaster as RE,Vector3 as $o}from"three";var AE=[[0,0],[35,0],[-35,0],[0,30],[35,30],[-35,30],[70,0],[-70,0],[70,30],[-70,30],[0,60]];function OE(e,t,n,r){let o=[],i=!0;for(let a=e.parent;a;a=a.parent)if(!a.visible){i=!1;break}i&&e.traverseVisible(a=>{let f=a;f.isMesh&&!f.isSkinnedMesh&&o.push(a)});let s=Math.abs(n.y)>.99?new $o(1,0,0):new $o(0,1,0),l=new $o().crossVectors(s,n).normalize(),c=r*.02,u=new RE,p={direction:n.clone(),clearance:-1};for(let[a,f]of AE){let d=n.clone().applyAxisAngle(s,a*Math.PI/180).applyAxisAngle(l,-f*Math.PI/180).normalize();u.set(t.clone().addScaledVector(d,c),d),u.far=r-c;let b=u.intersectObjects(o,!1)[0];if(!b)return t.clone().addScaledVector(d,r);b.distance>p.clearance&&(p={direction:d,clearance:b.distance})}let m=Math.max(c+p.clearance*.85,c*2);return t.clone().addScaledVector(p.direction,m)}function t0({sceneAnnotations:e,controlledAnnotationCategories:t,onAnnotationCategoriesChange:n,showAnnotationFilters:r,initialCategories:o,controlledActiveAnnotation:i,onActiveAnnotationChange:s,onAnnotationsChange:l,controlsRef:c,sceneRef:u,annotationWorldPositionsRef:p,tourCameraOffsetRef:m,initialCameraStateRef:a,engagement:f,engagementRef:d}){let[b,h]=Tr(!1),[w,v]=Tr(()=>e??[]);$i(()=>{if(w.length>0){let X=w.reduce((ie,Re)=>Math.max(ie,Re.id),0);M.current=X}else M.current=0},[w]);let[S,y]=Tr(null),[R,x]=Tr({title:"",description:""}),M=mm(0),[E,P]=Tr(null),[T,O]=Tr(null),[k,D]=Tr(-1),[B,H]=Tr(!1),V=mm(null),[W,z]=Tr(()=>o),A=t===void 0?W:t,$=Wi(()=>qg(w,A),[w,A]),J=Wi(()=>[...new Set(w.map(Xg))].sort(),[w]),ae=r&&J.some(Boolean),Z=X=>{t===void 0&&z(X),n?.(X)},Y=Wi(()=>[...$].sort((X,ie)=>X.id-ie.id),[$]),te=Wi(()=>JSON.stringify([A?.map(X=>X.trim()).sort()??null,Y]),[A,Y]),U=Wi(()=>k<0||k>=Y.length?null:Y[k],[k,Y]),N=$n(X=>{if(i!==void 0){s?.(X);return}P(X?{annotation:X}:null)},[i,s]),K=mm(null),ne=$n(async X=>{let ie=c.current,Re=u.current;if(!ie||id(ie)==="disconnected")return!1;let he=new $o,Pe=p.current.get(X.id);Pe?he.copy(Pe):Re&&Zw(X,Re,he)||he.set(X.worldPosition[0],X.worldPosition[1],X.worldPosition[2]),m.current=null;let Ae=V.current;Ae&&Ae.controls!==ie&&(Ae.controls.smoothTime=Ae.smoothTime);let He=Ae?.controls===ie?Ae.smoothTime:ie.smoothTime,Ot={controls:ie,smoothTime:He};V.current=Ot,ie.smoothTime=Zs(ie,.6);let Xt=X.worldNormal;try{let Ct=X.cameraView,bn;if(!Ca(Ct)&&Re){let Et=new kE().setFromObject(Re),qt=new $o;Et.getCenter(qt);let yt=new $o;Et.getSize(yt);let se=yt.length()*.2,pe;Xt?pe=new $o(Xt[0],Xt[1],Xt[2]):pe=he.clone().sub(qt),pe.lengthSq()<1e-6&&pe.set(0,0,1),pe.normalize();let Ge=Math.max(se*.6,.3);bn=OE(Re,he,pe,Ge),X.anchorNodeName&&X.anchorLocalPosition&&(m.current=bn.clone().sub(he))}return N(X),await Ug(ie,async Et=>{let qt=[];Ca(Ct)?(qt.push(ie.setLookAt(...Ct.position,...Ct.target,Et)),Number.isFinite(Ct.azimuthAngle)&&Number.isFinite(Ct.polarAngle)&&qt.push(ie.rotateTo(Ct.azimuthAngle,Ct.polarAngle,Et))):(bn&&qt.push(ie.setPosition(...bn.toArray(),Et)),qt.push(ie.setTarget(...he.toArray(),Et)));let yt=Ca(Ct)?Ct:K.current;yt&&(nl(ie,{...yt,zoom:void 0}),yt.zoom!=null&&Number.isFinite(yt.zoom)&&yt.zoom>0&&qt.push(ie.zoomTo(yt.zoom,Et))),await Promise.all(qt)},!0),!0}catch{return!1}finally{V.current===Ot&&(ie.smoothTime=He,V.current=null)}},[N,c,u,p,m]),Fe=$n(X=>{let ie=$.find(Re=>Re.id===X);return!ie||!c.current||id(c.current)==="disconnected"?Promise.resolve(!1):(f.stopTour("interrupted"),h(!1),D(-1),K.current=null,O(ie.id),ne(ie))},[$,c,f,ne]),Q=$n(()=>{Y.length!==0&&(c.current&&(K.current=el(c.current)),f.startTour(Y.length),h(!0),D(0),ne(Y[0]))},[Y,ne,f]),Ce=$n(()=>{if(Y.length===0||k<0)return;H(!0);let X=(k-1+Y.length)%Y.length;D(X),ne(Y[X]),setTimeout(()=>H(!1),500)},[k,Y,ne]),Ee=$n(()=>{if(Y.length===0||k<0)return;if(k===Y.length-1){if(f.completeTour(),h(!1),D(-1),N(null),c.current&&a.current){let ie=a.current;tl(c.current,{...K.current,...ie}),K.current=null}return}H(!0);let X=k+1;D(X),ne(Y[X]),setTimeout(()=>H(!1),500)},[k,Y,ne,N,f]),we=$n(()=>{if(f.stopTour(),h(!1),D(-1),N(null),c.current&&a.current){let X=a.current;tl(c.current,{...K.current,...X}),K.current=null}},[N,f]);$i(()=>{d.current.stopTour("annotations-changed"),K.current&&c.current&&(tl(c.current,{...K.current,...a.current??{}}),K.current=null),m.current=null,D(-1),h(!1)},[te]),$i(()=>()=>{let X=V.current;X&&(X.controls.smoothTime=X.smoothTime),V.current=null},[]),$i(()=>{U&&b&&K.current&&N(U)},[U,N,b]),$i(()=>{if(e===void 0)return;let X=e.map(ie=>({...ie,localPosition:ie.localPosition??ie.worldPosition}));v(X)},[e]);let pt=$n(()=>{if(O(null),i!==void 0){s?.(null);return}P(null)},[i,s]),qe=i!==void 0?i:E?.annotation??null,vt=Wi(()=>qe?$.find(ie=>ie.id===qe.id)??null:null,[qe,$]);$i(()=>{qe&&!vt&&pt()},[qe,vt,pt]);let ut=$n(()=>{if(!S||!R.title.trim())return;M.current+=1;let ie={id:M.current,worldPosition:S.worldPosition,localPosition:S.localPosition,worldNormal:S.worldNormal,anchorNodeName:S.anchor?.anchorNodeName,anchorLocalPosition:S.anchor?.anchorLocalPosition,title:R.title.trim(),description:R.description},Re=[...w,ie];v(Re),l?.(Re),y(null)},[S,R,w,l]),mt=$n(()=>y(null),[]),jt=$n(X=>{O(null),Ca(X.cameraView)?ne(X):N(X)},[N,ne]);return{annotations:w,pendingAnnotation:S,setPendingAnnotation:y,annotationForm:R,setAnnotationForm:x,currentAnnotationIndex:k,isNavigating:B,localAnnotationCategories:W,selectedAnnotationCategories:A,visibleAnnotations:$,availableAnnotationCategories:J,annotationFiltersVisible:ae,changeAnnotationCategories:Z,sortedAnnotations:Y,currentAnnotation:U,setActiveAnnotation:N,focusAnnotation:ne,goToAnnotation:Fe,startGuidedTour:Q,goToPreviousAnnotation:Ce,goToNextAnnotation:Ee,stopGuidedTour:we,closeViewingAnnotation:pt,activeAnnotation:qe,activeViewingAnnotation:vt,keepActiveAnnotationVisible:vt?.id===T,isGuidedTourActive:b,handleAnnotationOk:ut,handleAnnotationCancel:mt,handleAnnotationMarkerClick:jt}}import{useCallback as Ec,useEffect as n0,useMemo as EE,useRef as DE}from"react";import{Vector3 as TE}from"three";var r0=()=>`decal-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`;function o0({currentObjectBindings:e,currentObjectBindingsRef:t,applyObjectBindings:n,nodeRefsMap:r,controlsRef:o,decalMove:i,decalDragging:s,setDecalDragging:l,setDecalError:c,setDecalControl:u,decalRequestRef:p,onTextureUpload:m,currentPanelObjectId:a,modelUrl:f}){let d=Ec((x,M)=>{let E=t.current,P=E[x];if(!P)return;let T=M(P.decals??[]);n({...E,[x]:{...P,decals:T.length>0?T:void 0}})},[n,e]),b=EE(()=>{if(!s)return null;let{objectKey:x,decalId:M}=s,E=e[x],P=E?.decals?.find(T=>T.id===M);return P?{objectId:E.modelObjectId??x,decal:P,onCancel:()=>l(null),onCommit:T=>{d(x,O=>O.map(k=>k.id===M?{...k,...T}:k)),l(null)}}:null},[s,e,d]),h=i??b,w=Ec((x,M)=>{p.current++;let E=t.current[x],P=r.current[E?.modelObjectId??x],T=pv(P,o.current?.camera);if(!T)return c("Could not find a surface on this object for the decal."),!1;let O={...M,...T};return d(x,k=>[...k,O]),c(null),u(k=>k&&{...k,activeId:O.id}),l({objectKey:x,decalId:O.id}),!0},[d]),v=Ec(x=>{let M=t.current[x],E=r.current[M?.modelObjectId??x]?.geometry;if(!E)return .2;E.boundingBox||E.computeBoundingBox();let P=E.boundingBox?.getSize(new TE),T=P?Math.max(P.x,P.y,P.z):0;return T>0&&Number.isFinite(T)?T/3:.2},[]),S=DE([]);n0(()=>()=>{for(let x of S.current)URL.revokeObjectURL(x)},[]);let y=Ec(async(x,M,E)=>{let P=++p.current;l(null);let T;if(m){if(T=await m(E,x),P!==p.current)return}else T=URL.createObjectURL(E),S.current.push(T);w(M,{id:r0(),image:T,size:v(M)})},[v,m,w]);return n0(()=>{p.current++,c(null),l(null)},[a,f]),{editDecals:d,activeDecalMove:h,addCenteredDecal:w,decalSizeFor:v,startImageDecal:y,decalControlHandlers:(x,M)=>({onSelect:E=>{p.current++,c(null),l(null),u({...x,activeId:E})},onAddText:(E,P)=>w(M,{id:r0(),text:E,color:P,size:v(M)}),onAddImage:E=>{y(x.objectId,M,E)},onChange:(E,P)=>d(M,T=>T.map(O=>O.id===E?{...O,...P}:O)),onNudge:(E,P)=>{let T=t.current[M],O=T?.decals?.find(B=>B.id===E);if(!O)return;let k=r.current[T.modelObjectId??M],D=fv(k,o.current?.camera,O,P);if(!D){c("No visible surface in that direction. Try another arrow or rotate the view.");return}c(null),l(null),d(M,B=>B.map(H=>H.id===E?{...H,...D}:H))},onMove:E=>{p.current++,e[M]?.decals?.find(T=>T.id===E)&&(c(null),l(T=>T?.objectKey===M&&T.decalId===E?null:{objectKey:M,decalId:E}))},onRemove:E=>{l(null),d(M,P=>P.filter(T=>T.id!==E)),u({...x,activeId:null})},onClose:()=>{p.current++,c(null),l(null),u(null)}})}}import{useEffect as LE,useRef as i0}from"react";function a0({canvasAreaElement:e,controlsRef:t,sceneSizeRef:n,invalidate:r,enabled:o}){let i=i0(new Set),s=i0(null);LE(()=>{let l=e;if(!l||!o)return;let c=new Set(["w","a","s","d"," ","c"]),u=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"]),p=0,m=h=>h.code==="Space"?" ":h.key.toLowerCase(),a=()=>{i.current.clear(),p=0,s.current!==null&&(cancelAnimationFrame(s.current),s.current=null)},f=h=>{let w=t.current,v=i.current;if(!w||v.size===0){s.current=null,p=0;return}let S=p?Math.min((h-p)/1e3,.05):1/60;p=h;let y=Math.max(w.distance*.75,(n?.current??0)*.1,.01)*S;v.has("w")&&w.forward(y,!1),v.has("s")&&w.forward(-y,!1),v.has("a")&&w.truck(-y,0,!1),v.has("d")&&w.truck(y,0,!1),v.has(" ")&&w.truck(0,y,!1),v.has("c")&&w.truck(0,-y,!1),r?.(),s.current=requestAnimationFrame(f)},d=h=>{if(h.target!==l){a();return}if(u.has(h.key)){let v=t.current;if(!v)return;h.preventDefault();let S=Math.PI/90,y=Math.max(v.distance*.05,.01);h.key==="ArrowUp"?h.shiftKey?v.forward(y,!0):v.rotate(0,-S,!0):h.key==="ArrowDown"?h.shiftKey?v.forward(-y,!0):v.rotate(0,S,!0):h.key==="ArrowLeft"?v.rotate(-S,0,!0):v.rotate(S,0,!0),r?.();return}let w=m(h);c.has(w)&&(h.preventDefault(),i.current.add(w),s.current===null&&(s.current=requestAnimationFrame(f)))},b=h=>{i.current.delete(m(h))};return l.addEventListener("keydown",d),l.addEventListener("keyup",b),l.addEventListener("blur",a),()=>{l.removeEventListener("keydown",d),l.removeEventListener("keyup",b),l.removeEventListener("blur",a),a()}},[e,t,o])}import{useCallback as Xi,useEffect as fm,useRef as qi}from"react";var s0=1,_E=4,BE=.0015,jE=.1,NE=8;function l0({moveZoomTarget:e,setMoveZoomTarget:t,currentObjectBindingsRef:n,materialRefsOut:r,rendererCaptureRef:o,canvasAreaRef:i,canvasAreaElement:s,applyBindingStyle:l}){let c=qi(null),u=qi(!1),p=qi([0,0]),m=qi([0,0]),a=qi(1),f=qi(null),d=Xi((y,R)=>{let x=e;if(!x)return;let M=n.current[x.objectKey]?.style?.material?.[x.textureKey],E=M?.path;if(!E)return;let P=M?.rotation??0,T=yi(x.textureKey),O=ib(E,T),k=r.current[x.objectKey],D=Array.isArray(k)?k:k?[k]:[],B=Hb[x.textureKey];for(let H of D){let V=H;B in V&&(V[B]=ab(V.userData,x.textureKey,O,E,y,R,P))}o.current?.invalidate()},[e]),b=Xi(y=>{if(!e)return;y.currentTarget.setPointerCapture?.(y.pointerId),c.current={x:y.clientX,y:y.clientY},u.current=!1;let R=n.current[e.objectKey]?.style?.material?.[e.textureKey];if(p.current=R?.offset??[0,0],m.current=p.current,a.current=R?.scale??1,f.current===null){let x=()=>{o.current?.invalidate(),f.current=requestAnimationFrame(x)};f.current=requestAnimationFrame(x)}},[e]),h=Xi(y=>{if(!e||!c.current)return;let R=i.current,x=R?.clientWidth||1,M=R?.clientHeight||1,E=y.clientX-c.current.x,P=y.clientY-c.current.y;if(!u.current&&Math.hypot(E,P)<_E)return;u.current=!0;let T=-(E/x)*s0,O=P/M*s0,[k,D]=p.current,B=[k+T,D+O];m.current=B,d(B,a.current),l(e.objectKey,H=>({...H,material:{...H?.material,[e.textureKey]:{...H?.material?.[e.textureKey],path:n.current[e.objectKey]?.style?.material?.[e.textureKey]?.path,offset:B}}}))},[e,d,l]),w=Xi(y=>{if(!e)return;y.target?.releasePointerCapture?.(y.pointerId),f.current!==null&&(cancelAnimationFrame(f.current),f.current=null);let R=u.current,x=e;if(R){l(x.objectKey,M=>({...M,material:{...M?.material,[x.textureKey]:{...M?.material?.[x.textureKey],path:n.current[x.objectKey]?.style?.material?.[x.textureKey]?.path,offset:m.current}}})),c.current=null,u.current=!1;return}c.current=null,t(null)},[e,l]);fm(()=>{if(!e)return f.current!==null&&(cancelAnimationFrame(f.current),f.current=null),()=>{f.current!==null&&(cancelAnimationFrame(f.current),f.current=null)}},[e]),fm(()=>{let y=s;if(!(!y||!e))return y.addEventListener("pointermove",h),y.addEventListener("pointerup",w),y.addEventListener("pointercancel",w),()=>{y.removeEventListener("pointermove",h),y.removeEventListener("pointerup",w),y.removeEventListener("pointercancel",w)}},[s,e,h,w]);let v=Xi(y=>{if(!e)return;y.preventDefault();let R=e,x=Math.exp(-y.deltaY*BE),M=Math.min(NE,Math.max(jE,a.current*x));a.current=M,d(m.current,M),l(R.objectKey,E=>({...E,material:{...E?.material,[R.textureKey]:{...E?.material?.[R.textureKey],path:n.current[R.objectKey]?.style?.material?.[R.textureKey]?.path,scale:M}}}))},[e,d,l]);return fm(()=>{let y=s;if(!(!y||!e))return y.addEventListener("wheel",v,{passive:!1}),()=>y.removeEventListener("wheel",v)},[s,e,v]),{beginMoveZoom:Xi(y=>{u.current=!1,c.current=null,t(y)},[t]),handleMoveZoomPointerDown:b}}import{useFrame as IE,useThree as zE}from"@react-three/fiber";var VE=.2;function gm({enabled:e,speed:t,controlsRef:n}){let r=zE(o=>o.invalidate);return IE((o,i)=>{!e||!n.current||(n.current.rotate(i*VE*t,0,!1),r())}),null}import{AlertTriangle as ps,RotateCcw as FE,X as c0}from"lucide-react";import{jsx as Bt,jsxs as ro}from"react/jsx-runtime";function u0({count:e,onDismiss:t}){let n=oe();return ro("div",{className:"ri-bindingsMismatchBanner",children:[Bt(ps,{size:14,className:"ri-bindingsMismatchBanner__icon"}),Bt("span",{children:n(e===1?"bindingMismatchOne":"bindingMismatchMany",{count:e})}),Bt("button",{type:"button",className:"ri-bindingsMismatchBanner__dismiss",onClick:r=>{r.stopPropagation(),t()},"aria-label":n("dismiss"),children:Bt(c0,{size:12})})]})}function d0({triangles:e,offset:t,onDismiss:n}){let r=oe();return ro("div",{className:`ri-largeModelBanner ${t?"ri-largeModelBanner--offset":""}`,children:[Bt(ps,{size:14,className:"ri-largeModelBanner__icon"}),Bt("span",{children:r("largeModelWarning",{millions:Math.round(e/1e6)})}),Bt("button",{type:"button",className:"ri-largeModelBanner__dismiss",onClick:o=>{o.stopPropagation(),n()},"aria-label":r("dismiss"),children:Bt(c0,{size:12})})]})}function p0({missing:e,total:t}){let n=oe();return ro("div",{className:"ri-uvCheckerBanner",role:"status",children:[Bt(ps,{size:14,className:"ri-uvCheckerBanner__icon"}),ro("span",{children:[e===t?"UV Checker: this model has no UV0 coordinates.":`UV Checker: ${e} of ${t} meshes have no UV0 coordinates.`," ",n("missingUVsAreShownInMagenta")]})]})}function m0({failure:e,source:t}){return Bt("div",{className:"ri-loadError",role:"alert",children:ro("div",{className:"ri-loadError__card",children:[ro("div",{className:"ri-loadError__header",children:[Bt(ps,{size:16,"aria-hidden":"true"}),Bt("span",{className:"ri-loadError__title",children:e.title})]}),Bt("p",{className:"ri-loadError__detail",children:e.detail}),Bt("p",{className:"ri-loadError__source",children:t}),e.technical&&Bt("p",{className:"ri-loadError__technical",children:e.technical})]})})}function f0({rebuilding:e,onReload:t}){let n=oe();return Bt("div",{className:"ri-contextRecovery",role:"alert",children:ro("div",{className:"ri-contextRecovery__card",children:[Bt(ps,{size:24,"aria-hidden":"true"}),Bt("h2",{children:n(e?"contextRestoringTitle":"contextLostTitle")}),Bt("p",{children:n(e?"contextRestoringMessage":"contextLostMessage")}),ro("button",{type:"button",onClick:t,disabled:e,children:[Bt(FE,{size:16,"aria-hidden":"true"}),n("reloadViewer")]})]})})}import{useCallback as Dc}from"react";function g0({applyBindingStyle:e,resolveObjectKey:t,onTextureUpload:n,fileInputRef:r,pendingObjectId:o,createdBlobUrls:i,texturePositioning:s,setMoveZoomTarget:l}){let c=Dc((w,v)=>{let S=i.current[w];S&&URL.revokeObjectURL(S),v.startsWith("blob:")?i.current[w]=v:delete i.current[w],e(w,y=>({...y,material:{...y?.material,texture:{path:v}}}))},[e]),u=w=>{let v=w.target.files?.[0],S=o.current;if(!v||!S)return;let y=t(S);y&&(n?n(v,y).then(R=>c(y,R),R=>console.error("onTextureUpload failed:",R)):c(y,URL.createObjectURL(v)),w.target.value="")},p=w=>{o.current=w,r.current?.click()},m=w=>{let v=t(w);if(!v)return;e(v,y=>y?.material?.texture?{...y,material:{...y.material,texture:void 0}}:y);let S=i.current[v];S&&(URL.revokeObjectURL(S),delete i.current[v])},a=!!s,f=typeof s=="object"?s:void 0,d=Dc((w,v,S)=>{if(f?.onOffsetChange){f.onOffsetChange(w,v,S);return}e(w,y=>{let R=y?.material?.texture;if(!R?.path)return y;let x=R.offset??[0,0],M=[x[0],x[1]];return M[v]=S,{...y,material:{...y?.material,texture:{...R,offset:M}}}})},[e,f]),b=Dc((w,v)=>{if(f?.onRotationChange){f.onRotationChange(w,v);return}e(w,S=>{let y=S?.material?.texture;if(!y?.path)return S;let R=(v%360+360)%360;return{...S,material:{...S?.material,texture:{...y,rotation:R*Math.PI/180}}}})},[e,f]),h=Dc(()=>{l(null),f?.onEndPositioning?.()},[f]);return{handleFileChange:u,triggerFileUpload:p,clearTexture:m,texturePositioningEnabled:a,texturePositioningOverrides:f,setMaterialTextureOffset:d,setMaterialTextureRotation:b,endMaterialTexturePositioning:h}}function b0({materialPopup:e,resolveObjectKey:t,currentObjectBindings:n,nodeRefsMap:r,moveZoomTarget:o,texturePositioningEnabled:i,texturePositioningOverrides:s,setMaterialTextureOffset:l,setMaterialTextureRotation:c,endMaterialTexturePositioning:u}){let p=e?t(e.objectId):null,m=p?n[p]?.style?.material?.texture?.path:void 0,a=m?il(m)??m:void 0,f=Fb(p?r.current[p]:null),d=i?s?.offset??(p?n[p]?.style?.material?.texture?.offset:void 0):void 0,b=i?s?.rotationDegrees??(p?((n[p]?.style?.material?.texture?.rotation??0)*180/Math.PI%360+360)%360:0):0,h=i?s?.isPositioning??!!(p&&o?.objectKey===p&&o?.textureKey==="texture"):!1;return{materialTextureUrl:a,materialTargetTakesImage:f,materialTextureOffset:d,materialTextureRotationDegrees:b,isMaterialTexturePositioning:h,materialTextureOnOffsetChange:i?l:void 0,materialTextureOnRotationChange:i?c:void 0,materialTextureOnEndPositioning:i?u:void 0}}import{useId as h0}from"react";import{Box as bm,Camera as HE,ChevronLeft as GE,ChevronRight as UE,Download as $E,FileImage as WE,Maximize as XE,Minimize as qE,Orbit as KE,Play as v0,Square as QE}from"lucide-react";import{Fragment as Ki,jsx as ye,jsxs as Ze}from"react/jsx-runtime";function y0({categories:e,selected:t,disabled:n,onChange:r}){let o=oe();return Ze("div",{className:"ri-annotationFilters",role:"group","aria-label":o("annotationCategories"),onPointerDown:i=>i.stopPropagation(),children:[ye("span",{children:o("annotations")}),ye("button",{type:"button","aria-pressed":t===null,disabled:n,onClick:()=>r(null),children:o("all")}),e.map(i=>ye("button",{type:"button",disabled:n,"aria-pressed":t?.some(s=>s.trim()===i)??!1,onClick:()=>r(t===null?[i]:t.some(s=>s.trim()===i)?t.filter(s=>s.trim()!==i):[...t,i]),children:i||o("uncategorized")},i))]})}function x0({onCancel:e}){let t=oe();return Ze("div",{className:"ri-isolationPill",role:"status",onPointerDown:n=>n.stopPropagation(),children:[ye("span",{className:"ri-isolationPill__label",children:t("decalDragHint")}),ye("button",{type:"button",className:"ri-isolationPill__button",onClick:e,children:t("cancel")})]})}function w0({label:e,onShowAll:t}){let n=oe();return Ze("div",{className:"ri-isolationPill",onPointerDown:r=>r.stopPropagation(),children:[ye("span",{className:"ri-isolationPill__label",children:e}),ye("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("showAll")})]})}function S0({groups:e,activeVariants:t,onSelect:n}){let r=oe();return ye(Ki,{children:e.map((o,i)=>Ze("div",{className:"ri-variantPicker",role:"group","aria-label":o.name??r("materialVariants"),onPointerDown:s=>s.stopPropagation(),children:[o.name?ye("span",{className:"ri-variantPicker__group","aria-hidden":"true",children:o.name}):null,o.variants.map(s=>{let l=t.includes(s.name);return Ze("button",{type:"button",className:`ri-variantPicker__option ${l?"ri-variantPicker__option--active":""}`,"aria-pressed":l,onClick:()=>n(s.name),children:[s.swatch?ye("span",{className:"ri-variantPicker__swatch",style:{background:s.swatch},"aria-hidden":"true"}):null,s.label]},s.name)})]},o.name??`group-${i}`))})}function C0({count:e,active:t,index:n,navigating:r,onStart:o,onPrevious:i,onNext:s,onStop:l}){let c=oe();return t?Ze(Ki,{children:[Ze("button",{className:"ri-tourButton",onClick:i,disabled:r||e===0||n<=0,title:c("previousAnnotation"),children:[ye(GE,{size:16}),ye("span",{children:c("previous")})]}),ye("button",{className:"ri-tourButton ri-tourButton--stop",onClick:l,title:c("stopGuidedTour"),children:ye(QE,{size:16})}),Ze("button",{className:"ri-tourButton ri-tourButton--next",onClick:s,disabled:r||e===0,title:c("nextAnnotation"),children:[ye("span",{children:c("next")}),ye(UE,{size:16})]})]}):ye("button",{className:"ri-navButtonSingle",onClick:o,disabled:e===0,title:c("startGuidedTour"),children:c("guidedTour")})}function M0({fullscreen:e,disabled:t}){let n=oe();return Ze("div",{className:"mv-fullscreenWrapper",children:[e.error&&ye("div",{className:"mv-fullscreenError",role:"alert",children:n.message(e.error)}),ye("button",{type:"button",className:"mv-fullscreenButton",onClick:()=>{e.toggle()},disabled:e.pending||t,title:e.active?n("exitFullscreen"):n("enterFullscreen"),"aria-label":e.active?n("exitFullscreen"):n("enterFullscreen"),"aria-pressed":e.active,children:e.active?ye(qE,{}):ye(XE,{})})]})}function P0({open:e,current:t,disabled:n,onSelect:r,onToggle:o}){let i=oe();return Ze("div",{className:"mv-controllersWrapper",onPointerDown:s=>s.stopPropagation(),children:[e&&Ze("div",{className:"mv-controllersMenu",children:[ye("button",{type:"button",className:`mv-controllersMenuItem ${t==="orbit"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("orbit"),children:i("orbitControl")}),ye("button",{type:"button",className:`mv-controllersMenuItem ${t==="pointerLock"?"mv-controllersMenuItem--active":""}`,onClick:()=>r("pointerLock"),children:i("pointLock")})]}),ye("button",{className:"mv-controllersButton",onClick:o,title:i("cameraController"),"aria-label":i("cameraControllerSettings"),disabled:n,children:ye(KE,{size:15})})]})}function k0({menu:e,recording:t,hasScene:n,canCaptureImage:r,canRecord:o,hasCinematic:i,hasMultipleModels:s=!1}){let l=oe(),c=h0(),u=h0(),{isDownloading:p,downloadMenuOpen:m,uvExportError:a,toggleDownloadMenu:f,handleDownloadMesh:d,handleDownloadSeparateMeshes:b,handleDownloadScreenshot:h,handleDownloadUvLayout:w,handleDownloadVideo:v,videoFormat:S,setVideoFormat:y,videoExportError:R}=e;return Ze("div",{className:"mv-downloadWrapper",onPointerDown:x=>x.stopPropagation(),children:[m&&Ze("div",{className:"mv-downloadMenu",children:[Ze("button",{className:"mv-downloadMenuItem",onClick:d,disabled:p||t||!n,"aria-describedby":c,children:[ye(bm,{size:14}),l(s?"downloadCombinedGLB":"downloadGLB")]}),ye("p",{className:"mv-downloadMenuDescription",id:c,children:l("downloadGLBDescription")}),e.openConfiguredAR&&Ze("button",{type:"button",className:"mv-downloadMenuItem",onClick:e.openConfiguredAR,disabled:t||!n,"aria-haspopup":"dialog",children:[ye(bm,{size:14}),l("arConfiguredButton")]}),s&&Ze(Ki,{children:[Ze("button",{className:"mv-downloadMenuItem",onClick:b,disabled:p||t||!n,"aria-describedby":u,children:[ye(bm,{size:14}),l("downloadSeparateGLBs")]}),ye("p",{className:"mv-downloadMenuDescription",id:u,children:l("downloadSeparateGLBsDescription")})]}),ye("div",{className:"mv-downloadMenuDivider"}),r&&Ze(Ki,{children:[Ze("button",{className:"mv-downloadMenuItem",onClick:h,disabled:t||!n,children:[ye(HE,{size:14}),l("downloadPNG")]}),ye("div",{className:"mv-downloadMenuDivider"})]}),Ze("button",{className:"mv-downloadMenuItem",onClick:w,disabled:t||!n,children:[ye(WE,{size:14}),l("downloadUVLayout")]}),ye("div",{className:"mv-downloadMenuDivider"}),Ze("label",{className:"mv-downloadMenuItem",children:[l("videoFormat"),Ze(Pt,{"aria-label":l("videoFormat"),value:S,onChange:x=>y(x.target.value),children:[ye("option",{value:"auto",children:l("auto")}),ye("option",{value:"webm",disabled:!Sr("webm"),children:"WebM"}),ye("option",{value:"mp4",disabled:!Sr("mp4"),children:"MP4"}),ye("option",{value:"gif",disabled:!Sr("gif"),children:"GIF"})]})]}),Ze("button",{className:"mv-downloadMenuItem",onClick:()=>{v("turntable")},disabled:t||!o||!Sr(S),children:[ye(v0,{size:14}),l("recordTurntableVideo")]}),i&&Ze("button",{className:"mv-downloadMenuItem",onClick:()=>{v("cinematic")},disabled:t||!o||!Sr(S),children:[ye(v0,{size:14}),l("recordCinematicVideo")]}),!Sr()&&!Sr("gif")&&ye("div",{className:"mv-downloadMenuNotice",role:"status",children:l("videoUnsupported")}),R&&ye("div",{className:"mv-downloadMenuNotice",role:"alert",children:l.message(R)}),a&&ye("div",{className:"mv-downloadMenuNotice",role:"status","aria-live":"polite",children:l.message(a)})]}),ye("button",{className:"mv-downloadButton",onClick:f,disabled:p||t||!n,title:l("downloadOptions"),children:p?Ze(Ki,{children:[ye("span",{className:"mv-downloadButton__spinner"}),l("exporting")]}):Ze(Ki,{children:[ye($E,{size:15}),l("download")]})})]})}function R0({x:e,y:t,form:n,setForm:r,onOk:o,onCancel:i}){let s=oe();return Ze("div",{className:"ri-annotationPopup",style:{left:e,top:t},onPointerDown:l=>l.stopPropagation(),onClick:l=>l.stopPropagation(),children:[ye("input",{autoFocus:!0,className:"ri-annotationInput",placeholder:s("annotationTitlePlaceholder"),value:n.title,onChange:l=>r(c=>({...c,title:l.target.value})),onKeyDown:l=>{l.key==="Enter"&&o(),l.key==="Escape"&&i()}}),ye("textarea",{className:"ri-annotationTextarea",placeholder:s("description"),value:n.description,onChange:l=>r(c=>({...c,description:l.target.value})),onKeyDown:l=>{l.key==="Escape"&&i()},rows:5}),Ze("div",{className:"ri-annotationActions",children:[ye("button",{onClick:o,className:`ri-annotationOkBtn ${n.title.trim()?"":"disabled"}`,disabled:!n.title.trim(),children:s("ok")}),ye("button",{onClick:i,className:"ri-annotationCancelBtn",children:s("cancel")}),ye("div",{className:"ri-annotationIcons"})]})]})}import{useEffect as JE,useState as A0}from"react";import{Fragment as Tc,jsx as ot,jsxs as et}from"react/jsx-runtime";function O0({section:e,onChange:t}){let{isInsideEditor:n,tier:r}=qr(),o=n&&!wl(r,"sectionPlanes"),[i,s]=A0(""),l=e.mode??"plane",c=e.planes??[],u=c.find(d=>d.id===e.activePlaneId)??c[0],p=l==="planes"?u:e,m=d=>t(l==="planes"?{planes:c.map(b=>b.id===u?.id?{...b,...d}:b)}:d),a={x:0,y:1,z:2},f=()=>globalThis.crypto?.randomUUID?.()??`section-${Date.now()}-${Math.random().toString(36).slice(2)}`;return et("div",{className:"ri-sectionControls",children:[o?ot(Uh,{requiredTier:"starter",feature:"Multiple planes and section boxes"}):null,et("label",{children:["Cut type",et(Pt,{value:l,disabled:o,onChange:d=>{let b=d.target.value;t({mode:b,...b==="planes"&&!c.length?{planes:[{id:"cut-1",name:"Plane 1",axis:e.axis,position:e.position,flip:e.flip,enabled:!0,...e.normal?{normal:e.normal}:{}}],activePlaneId:"cut-1"}:{}})},children:[ot("option",{value:"plane",children:"Single plane"}),ot("option",{value:"planes",children:"Multiple planes"}),ot("option",{value:"box",children:"Section box"})]})]}),l==="planes"&&et(Tc,{children:[et("label",{children:["Active plane",ot(Pt,{value:u?.id??"",onChange:d=>t({activePlaneId:d.target.value}),children:c.map(d=>et("option",{value:d.id,children:[d.name,d.enabled?"":" (off)"]},d.id))})]}),et("div",{className:"ri-sectionControls__actions",children:[ot("button",{type:"button",disabled:c.length>=6,onClick:()=>{let d=f();t({planes:[...c,{id:d,name:`Plane ${c.length+1}`,axis:"x",position:.5,flip:!1,enabled:!0}],activePlaneId:d})},children:"Add plane"}),ot("button",{type:"button",disabled:!u,onClick:()=>t({planes:c.filter(d=>d.id!==u?.id),activePlaneId:c.find(d=>d.id!==u?.id)?.id}),children:"Remove plane"})]}),u&&et(Tc,{children:[et("label",{children:["Name",ot("input",{value:u.name,maxLength:200,onChange:d=>m({name:d.target.value.trim()||"Plane"})})]}),et("label",{className:"ri-sectionControls__check",children:[ot("input",{type:"checkbox",checked:u.enabled,onChange:d=>m({enabled:d.target.checked})}),"Enable this plane"]})]})]}),l==="box"?et(Tc,{children:[et("label",{children:["Draggable face",ot(Pt,{value:e.activePlaneId?.match(/^[xyz]-(min|max)$/)?e.activePlaneId:"x-min",onChange:d=>t({activePlaneId:d.target.value}),children:["x","y","z"].flatMap(d=>["min","max"].map(b=>et("option",{value:`${d}-${b}`,children:[d.toUpperCase()," ",b]},`${d}-${b}`)))})]}),ot("div",{className:"ri-sectionControls__bounds",children:["x","y","z"].flatMap(d=>["min","max"].map(b=>{let h=(e.box??{min:[0,0,0],max:[1,1,1]})[b][a[d]];return et("label",{children:[d.toUpperCase()," ",b,et("output",{children:[Math.round(h*100),"%"]}),ot("input",{"aria-label":`${d.toUpperCase()} ${b}`,type:"range",min:"0",max:"1",step:".001",value:h,onChange:w=>t(yc(e,`${d}-${b}`,Number(w.target.value)))})]},d+b)}))}),et("label",{className:"ri-sectionControls__check",children:[ot("input",{type:"checkbox",checked:!!e.invertBox,onChange:d=>t({invertBox:d.target.checked})}),"Keep outside box"]})]}):p&&et(Tc,{children:[et("label",{children:["Orientation",et(Pt,{value:p.normal?"custom":p.axis,onChange:d=>d.target.value==="custom"?m({normal:[1,1,0]}):m({axis:d.target.value,normal:void 0}),children:[ot("option",{value:"x",children:"X"}),ot("option",{value:"y",children:"Y"}),ot("option",{value:"z",children:"Z"}),ot("option",{value:"custom",children:"Angled plane"})]})]}),p.normal&&ot("div",{className:"ri-sectionControls__vector",children:[0,1,2].map(d=>et("label",{children:["Normal ","XYZ"[d],ot(YE,{label:`Normal ${"XYZ"[d]}`,value:p.normal[d],onChange:b=>{let h=[...p.normal];h[d]=b,Math.hypot(...h)>1e-8&&m({normal:h})}})]},d))}),et("label",{children:["Position",et("output",{children:[Math.round(p.position*100),"%"]}),ot("input",{type:"range",min:"0",max:"1",step:".001","aria-label":"Section position",value:p.position,onChange:d=>m({position:Number(d.target.value)})})]}),et("label",{className:"ri-sectionControls__check",children:[ot("input",{type:"checkbox",checked:p.flip,onChange:d=>m({flip:d.target.checked})}),"Keep the other side"]})]}),et("details",{children:[et("summary",{children:["Saved section presets (",e.presets?.length??0,")"]}),et("form",{onSubmit:d=>{d.preventDefault();let b=i.trim();!b||(e.presets?.length??0)>=32||(t({presets:[...e.presets??[],{id:f(),name:b,settings:ld(e)}]}),s(""))},children:[et("label",{children:["Preset name",ot("input",{value:i,maxLength:200,onChange:d=>s(d.target.value)})]}),ot("button",{disabled:!i.trim()||(e.presets?.length??0)>=32,children:"Save current section"})]}),e.presets?.map(d=>et("div",{className:"ri-sectionControls__actions",children:[ot("button",{type:"button",onClick:()=>t({...ld(d.settings),normal:d.settings.normal,planes:d.settings.planes,activePlaneId:d.settings.activePlaneId,box:d.settings.box,invertBox:d.settings.invertBox,mode:d.settings.mode}),children:d.name}),ot("button",{type:"button","aria-label":`Delete preset ${d.name}`,onClick:()=>t({presets:e.presets?.filter(b=>b.id!==d.id)}),children:"Delete"})]},d.id))]}),ot("p",{children:"Visual cuts of the active asset. Multiple planes keep their common region. Presets are saved with your scene."})]})}function YE({label:e,value:t,onChange:n}){let[r,o]=A0(String(t));return JE(()=>o(String(t)),[t]),ot("input",{type:"number",step:".1","aria-label":e,value:r,onChange:i=>{let s=i.target.value;o(s),s.trim()&&Number.isFinite(Number(s))&&n(Number(s))},onBlur:()=>o(String(t))})}import{useState as ZE}from"react";import{Box as eD,ChevronDown as tD,Expand as nD,Grid3X3 as rD,Pause as oD,Play as iD,QrCode as aD,RectangleGoggles as sD,Slice as lD,Smartphone as E0,Square as cD,X as uD}from"lucide-react";import{jsx as Be,jsxs as rr}from"react/jsx-runtime";function D0({top:e,configuredHandoff:t=!1,xrStore:n,arSupported:r,vrSupported:o,quickLookSupported:i,mobileHandoffUrl:s,mobileHandoffOpen:l,onStartAR:c,onOpenMobileHandoff:u}){let p=oe(),m=()=>{c().catch(a=>console.error("Failed to start AR:",a))};return rr("div",{className:"ri-xrTools",style:{top:`${e}px`},children:[!r&&i&&rr("button",{type:"button",className:"ri-xrButton",onClick:m,title:p("viewThisModelInARWithAppleQuickLook"),children:[Be(eD,{size:16}),p("viewInAR")]}),(s||t&&!i)&&rr("button",{type:"button",className:"ri-xrButton",onClick:u,title:p(t?"arConfiguredTitle":"openThisExperienceOnAPhoneForAR"),"aria-haspopup":"dialog","aria-expanded":l,children:[Be(aD,{size:16}),Be("span",{children:p(t?"arConfiguredButton":"openOnPhone")})]}),n&&r&&rr("button",{type:"button",className:"ri-xrButton",onClick:m,title:p("viewThisModelInYourSpace"),children:[Be(E0,{size:16}),Be("span",{children:p("enterAR")})]}),n&&o&&rr("button",{type:"button",className:"ri-xrButton",onClick:()=>n.enterVR().catch(a=>{console.error("Failed to enter VR session:",a)}),title:p("viewThisModelInVR"),children:[Be(sD,{size:16}),Be("span",{children:p("enterVR")})]})]})}function T0({url:e,onClose:t}){let n=oe();return Be("div",{className:"ri-mobileHandoffBackdrop",onMouseDown:r=>{r.target===r.currentTarget&&t()},children:rr("section",{className:"ri-mobileHandoffDialog",role:"dialog","aria-modal":"true","aria-labelledby":"ri-mobileHandoffTitle",children:[Be("button",{type:"button",className:"ri-mobileHandoffClose",onClick:t,"aria-label":n("closePhoneHandoff"),children:Be(uD,{size:18})}),Be(E0,{size:22,"aria-hidden":"true"}),Be("h2",{id:"ri-mobileHandoffTitle",children:n("viewInAR")}),Be("p",{children:n("arScanCode")}),Be("div",{className:"ri-mobileHandoffQr",children:Be(Ol,{value:e,size:208,level:"M",marginSize:4,title:n("qrCodeToOpenThisModelOnAPhone")})})]})})}function L0({top:e,active:t,onToggle:n}){let r=oe();return Be("div",{className:"ri-uvCheckerTools",style:{top:`${e}px`},children:Be("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,onClick:n,title:r(t?"disableUVChecker":"enableUVChecker"),"aria-label":r(t?"disableUVChecker":"enableUVChecker"),"aria-pressed":t,children:Be(rD,{size:16})})})}function _0({top:e,open:t,factor:n,onToggleOpen:r,onFactorChange:o}){let i=oe();return rr("div",{className:"ri-explodeTools",style:{top:`${e}px`},children:[Be("button",{type:"button",className:`ri-measureButton ${t||n>0?"ri-measureButton--active":""}`,onClick:r,title:i("explodedView"),"aria-pressed":t,children:Be(nD,{size:16})}),t&&Be("div",{className:"ri-explodeSlider",onPointerDown:s=>s.stopPropagation(),children:Be("input",{type:"range",min:0,max:100,value:Math.round(n*100),onChange:s=>o(Number(s.target.value)/100),"aria-label":i("explodeAmount")})})]})}function B0({top:e,section:t,onChange:n}){let r=oe(),[o,i]=ZE(!1);return rr("div",{className:"ri-sectionTools",style:{top:`${e}px`},children:[Be("button",{type:"button",className:`ri-measureButton ${t.enabled?"ri-measureButton--active":""}`,onClick:()=>n({enabled:!t.enabled}),title:t.enabled?r("removeSectionCut"):r("sectionCut"),"aria-label":r("sectionCut"),"aria-pressed":t.enabled,children:Be(lD,{size:16})}),t.enabled&&Be("button",{type:"button",className:"ri-measureButton","aria-label":"Section settings",title:"Section settings","aria-expanded":o,onClick:()=>i(s=>!s),children:Be(tD,{size:14})}),t.enabled&&o&&Be("div",{className:"ri-sectionPanel",onPointerDown:s=>s.stopPropagation(),children:Be(O0,{section:t,onChange:n})})]})}function j0({top:e,playing:t,disabled:n,onPlay:r,onPause:o,onStop:i}){let s=oe();return rr("div",{className:"ri-cinematicTools",style:{top:`${e}px`},children:[Be("button",{type:"button",className:`ri-measureButton ${t?"ri-measureButton--active":""}`,disabled:n,onClick:t?o:r,title:s(t?"pauseCinematic":"playCinematic"),"aria-pressed":t,children:t?Be(oD,{size:16}):Be(iD,{size:16})}),t&&Be("button",{type:"button",className:"ri-measureButton ri-measureButton--stop",onClick:i,title:s("stopCinematicAndResetCamera"),children:Be(cD,{size:16})})]})}function N0({progress:e,onCancel:t}){let n=oe();return Be("div",{className:"ri-recordingOverlay",onPointerDown:r=>r.stopPropagation(),children:rr("div",{className:"ri-isolationPill",role:"status","aria-live":"polite",children:[Be("span",{className:"ri-isolationPill__label",children:n("recordingVideo",{progress:e})}),Be("button",{type:"button",className:"ri-isolationPill__button",onClick:t,children:n("cancel")})]})})}function I0(e){let t={total:0,missing:0};return e.traverse(n=>{let r=n;!r.isMesh||!r.geometry||(t.total+=1,r.geometry.getAttribute("uv")||(t.missing+=1))}),t}import{useEffect as dD}from"react";function z0({enabled:e,canvasAreaElement:t,fitAttemptedRef:n,fitInFlightRef:r,controlsRef:o,cameraFramingRef:i,nodeRefsMap:s,fitScene:l}){dD(()=>{if(!e)return;let c=t;if(!c)return;let u=null,p=new ResizeObserver(()=>{!n.current||r.current||(u&&clearTimeout(u),u=setTimeout(()=>{let m=o.current,a=i.current;if(a.kind==="view"&&m){if(yv(m,a.target))return}else if(a.kind==="object"&&m){let f=s.current[a.key];if(f&&vv(m,f)){m.fitToBox(f,!0,kl).catch(()=>{});return}}l()},150))});return p.observe(c),()=>{p.disconnect(),u&&clearTimeout(u)}},[t,l,e])}import{Fragment as hm,jsx as q,jsxs as _n}from"react/jsx-runtime";var vD=pD(()=>import("./StreamingTilesModel-IM2DDWO5.mjs"));function ms(e){let n=e.split(/[?#]/)[0].split("/");return(n[n.length-1]||e).replace(/\.[^./]+$/,"")||e}var xD=Object.freeze({}),wD=[],SD={};function CD(e){let t=Ov(Xh(e)),n=t.props,r=Il(n.activeModelId??ke(n.models?.find(h=>h.url===n.modelUrl)??{url:n.modelUrl}),n.tilesetUrl),o=ce(r);o.current=r;let i=ce(null),s=ce(null),l=de(()=>{let h=s.current;h&&(i.current=h.snapshot())},[]),c=py(l),u=gy(e),[p,m]=ve(null);De(()=>()=>{p&&URL.revokeObjectURL(p)},[p]);let a=()=>{l();let h=o.current;s.current?.captureFrame().then(w=>{w&&(h===o.current?m(w):URL.revokeObjectURL(w))})};yr(()=>{i.current=null,m(null)},[r]);let f=ce(null),d=ph({loading:n.loading,reveal:n.reveal,rootRef:f,onPark:a}),{release:b}=c;return De(()=>{d.live||b()},[d.live,b]),q(nb,{labels:e.labels,children:_n("div",{className:"ri-viewerSlot",ref:f,children:[t.error&&q("div",{className:"ri-configuredARError",role:"alert",children:t.error}),d.live?q(PD,{...n,contextRecovery:c,engagement:u,resumeRef:i,viewerHandleRef:s,offscreen:!d.visible,frame:p},c.generation):q(mh,{className:"ri-viewer",background:vd(n.backgroundColor,n.sceneConfig),poster:p??n.poster,onReveal:d.awaitingReveal?d.reveal:void 0})]})})}var MD={};function PD({labels:e,contextRecovery:t,engagement:n,modelUrl:r,tilesetUrl:o,tilesErrorTarget:i=8,tilesCacheSize:s=800,onObjectCatalog:l,modelFormat:c,licenseKey:u,licenseValidationUrl:p,onLicenseStatusChange:m,hideLicenseCheckingOverlay:a=!1,objectBindings:f="auto",selectedObject:d,comparisonHighlights:b,multiSelectedKeys:h,selectedObjectRefs:w,selectedObjectOutlineColor:v,panelHoveredObject:S,onObjectBindingsChange:y,onObjectSelect:R,onObjectHover:x,onObjectDoubleClick:M,onDecalDoubleClick:E,onObjectContextMenu:P,decalMove:T,onObjectEditLeaseChange:O,onSelectionClear:k,onEmptyCanvasClick:D,onSceneLoaded:B,onModelLoaded:H,onAssetDiagnostics:V,onRuntimeStats:W,runtimeStatsIntervalMs:z,onLoadError:A,onProgress:$,onCameraControllerChange:J,cameraControllerType:ae,onAction:Z,onHiddenObjectsChange:Y,onCameraChange:te,onViewerReady:U,onTextureUpload:N,onAnimationsReady:K,onSequencesReady:ne,showSequenceControls:Fe=!0,sequenceAutoPlay:Q=!0,onModelAnimationsReady:Ce,onAnnotationsChange:Ee,activeAnnotation:we,onActiveAnnotationChange:pt,camera:qe,cameraLimits:vt,backgroundColor:ut,shadows:mt=!0,showObjectBindingDataPanel:jt=!0,customObjectBindingDataPanel:X,customSceneObjectsPanel:ie,showSceneObjectsPanel:Re=!0,showDownloadButton:he=!0,downloadFilename:Pe="model",showResetButton:Ae=!0,showFullscreenButton:He=!1,showLoadingOverlay:Ot=!0,showMouseController:Xt=!1,mouseControllerPosition:Ct="center-bottom",mouseControllerOpacity:bn=1,moveSensitivity:Et=.08,zoomSensitivity:qt=1,sceneConfig:yt,onSceneConfigChange:se,disableZoom:pe=!1,pageScroll:Ge=!1,zoomOnSelected:ze=!0,highlightOnHover:Ue=!0,enableCameraControls:Kt=!0,onAutoFit:ft,refitOnResize:Vt=!0,renderMode:xt="demand",maxDpr:hn=2,preserveDrawingBuffer:Bn=!1,webgpu:vn=!1,performanceProfile:Qt="auto",dracoDecoderPath:Ft,ktx2TranscoderPath:wt,meshopt:Dt=!0,showMeasureTools:ln=!1,showUvCheckerButton:Ht=!1,showExplodeControls:jn=!1,showMaterialVariants:nn=!0,showObjectNavigator:Wo=!0,showSectionTools:Xo=!1,isolation:Wn,onIsolationChange:Qi,showIsolateControls:or=!1,cinematic:ir,measurementUnit:io="m",measurements:gs,onMeasurementsChange:ao,measurementSettings:bs,measurementModelId:Nc,onMeasurementSettingsChange:so,enableXR:L=!1,usdzUrl:j,arScaleMode:I="normalized",mobileHandoffUrl:ee,arHandoff:F,arLanding:re=!1,showAnnotationNavigation:me=!0,showAnnotationOnHover:nt=!1,showAnnotationFilters:We=!0,annotationCategories:Mt,onAnnotationCategoriesChange:gt,moveModeEnabled:Ve=!1,scaleModeEnabled:bt=!1,gizmoTool:xe,showFloorGrid:Nt=!1,productOptions:rn,objectTransformSpace:yn="world",enableKeyboardNavigation:ar=!1,reducedMotion:cn="user",showViewGizmo:on=!1,overlay:qo,unsafe_sceneChildren:xm,autoRotate:X0,autoRotateSpeed:q0,onTexturePositioningChange:Ic,endTexturePositioningRef:hs,texturePositioning:wm,extraModelUrls:K0,onExtraModelError:Sm,onExtraModelLoaded:vs,originalNodePoses:Q0,models:je,mergeModels:zc,onMergeModelLoaded:Cm,onMergeModelError:Mm,poster:Vc,resumeRef:Pm,viewerHandleRef:Fc,offscreen:J0,frame:Hc,onModelChange:km,activeModelId:Y0,onActiveModelChange:Gc}){let Jt=oe(),be=Y0??ke(je?.find(g=>g.url===r)??{url:r}),Rm=je?.find(g=>ke(g)===be)?.visible!==!1,Nn=Il(be,o),[It]=ve(()=>Pm.current?.model===Nn?Pm.current:null),Lr=zh(cn);De(()=>()=>n.interrupt(),[n]);let Am=ce(n);Am.current=n;let{autoBindings:Uc,controlled:Om,currentBindings:Me,applyBindings:In,bindingsForModel:lo,modelEdits:Z0}=Zv({modelUrl:r,activeModelId:be,tilesetUrl:o,models:je,objectBindings:f,onChange:y,initialBindings:It?.objectBindings,initialModelEdits:It?.modelBindingEdits}),{isInsideEditor:An,activeTab:eS,activeSubTab:tS,annotating:ys,openMeasurementsPanel:nS,xrToolsTarget:Em}=qr(),rS=An&&eS==="scene"&&tS==="lighting",Ko=dv(u,p,m),[$c,oS]=ve(()=>It?.lightEdits??{}),[xs,Dm]=ve(It?.variantEdit),[ws,Tm]=ve(It?.sectionEdit),[Ss,Lm]=ve(()=>It?.measurementEdits??{}),Wc=JSON.stringify(yt?.measurements??null),_m=ce(new Map);De(()=>{let g=_m.current.get(Nn);_m.current.set(Nn,Wc),g!==void 0&&g!==Wc&&Lm(C=>{let _={...C};return delete _[Nn],_})},[Nn,Wc]);let Se=tt(()=>{let g=qd(yt??sl,$c);return xs!==void 0&&(g={...g,model:ud(g.model,xs)}),ws!==void 0&&(g={...g,section:{...Pa,...g.section,...ws}}),Ss[Nn]&&(g={...g,measurements:Ss[Nn]}),g},[yt,$c,xs,ws,Ss,Nn]),Bm=Se.camera?.limits,Ji=tt(()=>Mh(vt??Bm),[Bm,vt]),Qo=ce(Se);Qo.current=Se;let Yi=de(g=>{let C=Qo.current,_={settings:{},items:[],...C.measurements,...g};se?se({...C,measurements:_}):Lm(G=>({...G,[Nn]:_}))},[Nn,se]),jm=de(g=>{ao?ao(g):Yi({items:g})},[ao,Yi]),Nm=de(g=>{so?so(g):Yi({settings:g})},[so,Yi]),Cs=gs??Se.measurements?.items??wD,Zi=bs??Se.measurements?.settings??SD,Xc=Nc??ka(be),ea=dl(Zi,io),qc=tt(()=>gr(Se.model),[Se.model]);De(()=>{n.setActiveVariants(qc)},[qc,n]);let iS=yt?gr(yt.model).join(`
65
+ `):"";yr(()=>{Dm(void 0)},[iS,be,r]);let aS=JSON.stringify(yt?.section??null);yr(()=>{Tm(void 0)},[aS,be,r]);let Im=de(g=>{if(se){let C=Qo.current;se({...C,section:{...Pa,...C.section,...g}});return}Tm(C=>({...C,...g}))},[se]),[zm,sS]=ve(!1),Vm=ce([]),lS=de(g=>{let C=Qo.current,_=gr(C.model),G=Vm.current,le=G.find(_e=>_e.variants.some(Ie=>Ie.name===g)),Oe=_.find(_e=>le?le.variants.some(Ie=>Ie.name===_e):_e===g)??null,Te=_.includes(g)?_.filter(_e=>_e!==g):Pb(_,g,G);if(n.chooseVariant(Te.includes(g)?g:null,Oe,le?.name??null),se){se({...C,model:ud(C.model,Te)});return}Dm(Te)},[se,n]),Fm=de(g=>{if(se){se(qd(Qo.current,g));return}oS(C=>{let _={...C};for(let[G,le]of Object.entries(g))_[G]={...C[G],...le};return _})},[se]),[Kc,Hm]=ve(null),[Qc,Gm]=ve(null),[Um,$m]=ve(null),Wm=ce(0),[Jc,Xm]=ve(null),[qm,Km]=ve(It?.uvCheckerOverride??null),ta=Se.model.renderer==="uv-checker",Yc=Ht?qm??ta:ta,un=tt(()=>{let g=Yc?"uv-checker":ta?"pbr":Se.model.renderer;return g===Se.model.renderer?Se:{...Se,model:{...Se.model,renderer:g}}},[ta,Se,Yc]);yr(()=>{Km(null)},[be,r,Se.model.renderer,Ht,o]);let Zc=tt(()=>vd(ut,Se),[ut,Se]),Ms=tt(()=>({dracoDecoderPath:Ft,ktx2TranscoderPath:wt,meshopt:Dt}),[Ft,wt,Dt]),cS=tt(()=>Qb(Qt),[Qt]),Le=ce(null),[co,uS]=ve(null),[Qm,dS]=ve(()=>It&&It.cameraControllerType!=="pointerLock"?It.cameraControllerType:"orbit"),[pS,Jm]=ve(!1),uo=ae!==void 0?ae:Qm,Ps=de(g=>{Jm(!1),g!==uo&&(dS(g),J?.(g))},[uo,J]),[na,Ym]=ve(!1),Zm=ce({dragging:!1,endedAt:-1/0}),ef=de(g=>{Zm.current={dragging:g,endedAt:g?-1/0:performance.now()},Ym(g)},[]),[an,ra]=ve(null),oa=!!(wm||Ic||hs),tf=ce(Ic);tf.current=Ic,De(()=>{tf.current?.(an)},[an]),De(()=>{if(hs)return hs.current=()=>ra(null),()=>{hs.current=null}},[]),De(()=>{Le.current&&(Le.current.dollySpeed=Math.max(qt,0))},[qt]),De(()=>{Le.current&&(Le.current.enabled=Kt&&!na&&!zm&&!an)},[Kt,na,zm,an]);let eu=ce(null),tu=ce(new Map),nf=ce(null),mS=ce(null),Yt=ce(null),rf=ce({});De(()=>()=>{for(let g of Object.values(rf.current))URL.revokeObjectURL(g)},[]);let Gt=ce({}),Jo=ce(_a),[fS,gS]=ve(0),nu=de(()=>{gS(g=>g+1)},[]),_r=ce({}),lt=!!(je&&je.length>=1&&!o),ks=ce(je);ks.current=je;let Rs=ce(new Map),{scenesByUrlRef:po,cameraHomesByUrlRef:zn,materialRefsByUrlRef:of,getMaterialRefsForUrl:bS}=Qv(lt,je),As=ce(null),af=ce(null),Os=cy(He),Vn=ce(null),[ru,hS]=ve(null),vS=de(g=>{Vn.current=g,hS(g)},[]),Es=ce(null),[sr,ia]=ve({}),[sf,ou]=ve(null),[Ds,iu]=ve(null),[yS,xS]=ve(null),[wS,SS]=ve(null),[Ut,au]=ve(null),[CS,MS]=ve({}),Ne=ce(null),su=ce(null),lu=ce(!1),lf=ce(r);lf.current=r;let Ts=ce(null),cu=ce(V);cu.current=V;let Br=ce(null),Yo=ce(0);a0({canvasAreaElement:ru,controlsRef:Le,sceneSizeRef:Yo,invalidate:()=>Yt.current?.invalidate(),enabled:ar&&Kt&&!Ve&&!bt});let cf=ce(null),[PS,kS]=ve(0),Xn=ce(!1),aa=ce(!1),sa=ce(null),Ls=ce(!!qe);Ls.current=!!qe;let Fn=ce(null),_s=ce(It?.camera?{camera:It.camera,home:It.home}:null),[Bs,mo]=ve(!!r),[lr,fo]=ve(!r||!!ft||!!qe),[Xe,uf]=ve(!1),la=!!Ji?.insideModel,df=!la&&!!Ji?.aroundModel,[uu,du]=ve(null),[Zo,pu]=ve(null),ei=tt(()=>uu?{...Ji,...uu}:Ji,[uu,Ji]),pf=ce(ei);pf.current=ei;let[ca,mf]=ve([]),[ua,mu]=ve(!1),[go,fu]=ve(null),[ff,ti]=ve(!1),[RS,AS]=ve(0),gu=ce(""),gf=ce(new Set),bf=ce(""),[hf,vf]=ve(!1),bu=ce(new Set),[yf,OS]=ve(0),[hu,ES]=ve(null),[DS,xf]=ve(!1),[vu,wf]=ve({total:0,missing:0}),[TS,Sf]=ve("loadingModel"),[LS,yu]=ve(null),_S=bh(LS),qn=ce({}),ni=de(()=>{let g=Le.current;if(!g||Fn.current)return;Fn.current=Qg(g,Br.current??Ne.current);let C=sa.current;C?.usesSlots&&(zn.current[C.url]=Fn.current)},[zn]),[ri,Cf]=ve(()=>It?.explodeFactor??0),[BS,Mf]=ve(!1);yr(()=>{Cf(0),Mf(!1)},[be,r,o]);let Kn=tt(()=>{let g=Se.cinematic,C=g?.enabled?{waypoints:g.waypoints,duration:g.duration,loop:g.loop,autoPlay:g.autoPlay}:null;return ir===void 0?C&&(C.waypoints?.length??0)>=2?C:null:ir===!1?null:ir===!0?C??{}:{...C??{},...ir}},[ir,Se]),[da,Zt]=ve(!1),[Pf,jr]=ve(!1),xu=ce(!1);De(()=>{Zt(!1),jr(!1),xu.current=!1},[be,r,o]),De(()=>{if(!(!Kn?.autoPlay||xu.current)&&Xe&&lr&&!Bs){if(xu.current=!0,Lr)return;Zt(!0),jr(!1)}},[Kn,Xe,lr,Bs,Lr]);let jS=de(()=>{Zt(!1),jr(!0)},[]),{captureVideo:wu,cancelVideo:Su,isRecording:Cu,recording:it,progress:NS,onProgress:kf}=ly({rendererCaptureRef:Yt,controlsRef:Le,cinematicConfig:Kn,ready:t.status==="ready"&&Xe&&lr&&!Bs,modelUrl:`${be}|${o??""}`,onCaptureStart:jS});De(()=>{t.status==="lost"&&(n.interrupt(),Su(),Zt(!1),Le.current?.stop())},[t.status,Su,n]);let dn=tt(()=>Cv(()=>Zt(!1)),[be,r]),Mu=tt(()=>({current:null}),[be,r]),[Rf,Af]=ve(()=>new Map),js=de((g,C)=>{Af(_=>_.get(g)===C?_:new Map(_).set(g,C))},[]),Of=ce(K);Of.current=K;let Ef=ce(Ce);Ef.current=Ce;let Pu=ce(ne);Pu.current=ne;let Df=de(g=>{Mu.current=g,Of.current?.(g),lt||js(be,g)},[Mu,lt,js,be]),IS=de((g,C)=>{js(g,C),Ef.current?.(g,C)},[js]),oi=tt(()=>{try{return Js(Se.sequences??[])}catch{return[]}},[Se.sequences]),ii=tt(()=>(lt&&je?je:[{url:r,id:be}]).flatMap(C=>{let _=ke(C),G=Rf.get(_);return!G||C.visible===!1?[]:[{id:_,label:C.label||ms(C.url),controls:G,config:_===be?Se.animations:(C.sceneConfig??Se).animations}]}),[lt,je,r,be,Rf,Se]),Tf=JSON.stringify(lt&&je?je.map(ke):[be]),ku=tt(()=>El(ii,oi),[ii,oi]),[zS,VS]=ve(""),Ns=ku.find(g=>g.id===zS),FS=g=>{VS(g);let C=ku.find(_=>_.id===g);if(C)ja(C,ii,dn,!0);else{dn.stop();for(let G of ii)G.controls.stop(),G.config?.autoplayClip&&G.controls.play(G.config.autoplayClip);let _=oi.find(G=>G.autoPlay);_&&dn.play(_.id)}};De(()=>{let g=new Set(JSON.parse(Tf));Af(C=>[...C.keys()].every(_=>g.has(_))?C:new Map([...C].filter(([_])=>g.has(_))))},[Tf]);let{xrStore:HS,xrRuntime:Ru,xrResolving:Lf,inARSession:Au,presenterRef:GS,arSupported:pa,checkingAR:_f,vrSupported:Bf,quickLookSupported:ma,resolvedMobileHandoffUrl:fa,isMobileHandoffOpen:jf,arOverlay:US,openMobileHandoff:Nf,closeMobileHandoff:$S,openQuickLook:WS,handleARStateChange:XS}=sx({enableXR:L,usdzUrl:j,mobileHandoffUrl:ee,configuredHandoff:!!F,engagement:n,animationControls:Xe?q(zv,{sources:ii,sequences:oi,sequenceControls:dn}):null});De(()=>(Pu.current?.(Xe?dn:null),()=>Pu.current?.(null)),[dn,Xe]),De(()=>()=>dn.destroy(),[dn]),De(()=>{Lr&&dn.pause()},[dn,Lr]);let ai=ih(vn),If=ce(ai);If.current=ai;let Nr=ai==="webgpu",si=Nr?null:HS,zf=Xo||Se.section?.enabled===!0;De(()=>{if(!Nr)return;let g=[zf&&"the section cut",(Ve||bt)&&"the transform gizmo"].filter(Boolean);g.length!==0&&console.info(`[react-immersive] With WebGPU, ${g.join(" and ")} ${g.length>1?"aren't":"isn't"} available; ${g.length>1?"they need":"it needs"} WebGL.`)},[Nr,zf,Ve,bt]);let{annotations:DD,pendingAnnotation:bo,setPendingAnnotation:Vf,annotationForm:qS,setAnnotationForm:Ou,currentAnnotationIndex:KS,isNavigating:QS,localAnnotationCategories:JS,selectedAnnotationCategories:YS,visibleAnnotations:Ff,availableAnnotationCategories:ZS,annotationFiltersVisible:Eu,changeAnnotationCategories:eC,sortedAnnotations:Du,currentAnnotation:Hf,setActiveAnnotation:TD,focusAnnotation:LD,goToAnnotation:Gf,startGuidedTour:tC,goToPreviousAnnotation:nC,goToNextAnnotation:rC,stopGuidedTour:oC,closeViewingAnnotation:Is,activeAnnotation:_D,activeViewingAnnotation:zs,keepActiveAnnotationVisible:Uf,isGuidedTourActive:ho,handleAnnotationOk:iC,handleAnnotationCancel:aC,handleAnnotationMarkerClick:$f}=t0({sceneAnnotations:yt?.annotations,controlledAnnotationCategories:Mt,onAnnotationCategoriesChange:gt,showAnnotationFilters:We,initialCategories:It?.annotationCategories??null,controlledActiveAnnotation:we,onActiveAnnotationChange:pt,onAnnotationsChange:Ee,controlsRef:Le,sceneRef:Ne,annotationWorldPositionsRef:tu,tourCameraOffsetRef:eu,initialCameraStateRef:Fn,engagement:n,engagementRef:Am}),sC=Se.section??Pa,Wf=!re&&nn&&Xe&&ca.length>0;Vm.current=ca;let Xf=!re&&(Ae||he||He&&Os.supported||me&&Du.length>0);qn.current=Me,De(()=>{if(!an)return;let g=Me[an.objectKey]?.style?.material?.[an.textureKey]?.path;(!oa||!g)&&ra(null)},[Me,oa,an]);let Tu=ce({}),[Vs,lC]=ve({});De(()=>{let g={...Vs},C=!1,_=new Set;for(let[G,le]of Object.entries(Me)){_.add(G);let Oe=le.style?.material,Te=Tu.current[G]??{},_e={};for(let dt of Aa){let zt=Oe?.[dt]?.path;zt&&(_e[dt]=zt,zt!==Te[dt]&&(g[G]!==dt&&(C=!0),g[G]=dt))}let Ie=g[G];if(Ie&&!_e[Ie]){let dt=Aa.find(zt=>!!_e[zt]);dt?g[G]=dt:delete g[G],C=!0}Tu.current[G]=_e}for(let G of Object.keys(g))_.has(G)||(delete g[G],delete Tu.current[G],C=!0);C&&lC(g)},[Me]);let Fs=tt(()=>Object.entries(Me).map(([g,C])=>JSON.stringify([g,C.modelObjectId,C.transform??null])).sort().join(""),[Me]);De(()=>{let g=Ne.current;if(!(la||df)||!Xe||!g){du(null),pu(null);return}let C=new F0().setFromObject(g);if(C.isEmpty())return;pu(null);let _=new AbortController;if(la&&!bl(g)&&Hv(g,C.clone(),_.signal).then(G=>{!_.signal.aborted&&Ne.current===g&&pu(G)}).catch(()=>{}),la){let G=C.getSize(new oo).multiplyScalar(.02);C.min.add(G),C.max.sub(G),du({panBoundary:[C.min.toArray(),C.max.toArray()],boundaryEnclosesCamera:!0})}else{let G=C.getBoundingSphere(new bD).radius;du({panBoundary:[C.min.toArray(),C.max.toArray()],minDistance:G*.5,maxDistance:Math.max(G*4,.01),maxPolarAngle:90})}return()=>_.abort()},[la,df,Xe,be,Fs]),De(()=>{let g=co;if(!g||!Zo)return;let C=new oo,_=new oo,G=()=>{g.getTarget(C,!0),g.getPosition(_,!0);let le=Dl(Zo,C.toArray()),Oe=Dl(Zo,_.toArray());if(!le&&!Oe)return;let[Te,_e,Ie]=Hd(Oe??_.toArray(),le??C.toArray(),_,C,Zo.cell*2,dr=>Dl(Zo,dr)),[dt,zt,Sn]=le??C.toArray();g.setLookAt(Te,_e,Ie,dt,zt,Sn,!1),Yt.current?.invalidate()};return G(),g.addEventListener("update",G),()=>g.removeEventListener("update",G)},[Zo,co]);let qf=ei?.floorOutline,Lu=Uv(qf)?JSON.stringify(qf):"";De(()=>{let g=co;if(!g||!Lu)return;let C=JSON.parse(Lu),_=new oo,G=new oo,le=!1,Oe=()=>{if(le)return;g.getTarget(_,!0),g.getPosition(G,!0);let Te=Tl(C,_.toArray()),_e=Tl(C,G.toArray());if(!Te&&!_e)return;le=!0;let Ie=Math.max(...C.points.map(([en])=>en))-Math.min(...C.points.map(([en])=>en)),[dt,zt,Sn]=Hd(_e??G.toArray(),Te??_.toArray(),G,_,Math.max(Ie*.04,.05),en=>Tl(C,en)),[dr,Mo,Po]=Te??_.toArray();g.setLookAt(dt,zt,Sn,dr,Mo,Po,!1),le=!1,Yt.current?.invalidate()};return Oe(),g.addEventListener("update",Oe),()=>g.removeEventListener("update",Oe)},[Lu,co]),De(()=>{let g=Br.current??Ne.current;!Xe||!co||!g||(Yo.current=_d(g,co,ei?.maxDistance)??Yo.current,Yt.current?.invalidate())},[Xe,co,ei?.maxDistance]);let{measureMode:xn,measureModeRef:_u,measurePoints:Bu,measurementTool:ju,areaClosed:Nu,measurementError:cC,selectMeasurementTool:uC,undoMeasurementPoint:dC,finishMeasureArea:pC,snapMode:mC,setSnapMode:fC,snapPreview:Kf,handleMeasurePointerMove:gC,clearSnapPreview:Qf,showDimensions:Iu,measureBox:Hs,modelBounds:Jf,refreshBounds:Yf,clearMeasurements:bC,toggleMeasureMode:hC,toggleDimensions:vC,handleMeasurePointerDown:yC,handleMeasureClick:xC,saveMeasurement:wC,canSaveMeasurement:SC,canCalibrate:CC,calibrate:MC,savedResults:PC,setSavedResults:Zf,exportMeasurementJson:kC,exportMeasurementCsv:RC,importMeasurements:AC}=rx({canvasAreaRef:Vn,controlsRef:Le,sceneRef:Ne,modelUrl:be,tilesetUrl:o,measurementModelId:Xc,savedMeasurements:Cs,measurementSettings:Zi,measurementUnit:io,onMeasurementsChange:jm,onMeasurementSettingsChange:Nm,onCollectionChange:g=>{ao?.(g.items),so?.(g.settings),Yi(g)},modelRotation:Se.model.rotation,bindingTransformSignature:Fs,modelLoaded:Xe,enabled:ln&&!it}),OC=de(()=>{if(!je||je.length<2)return null;let g=je.map(C=>{let _=po.current[ke(C)];if(!_)return null;let G=ke(C)===be?_r.current:of.current[ke(C)]?.current??{};return{scene:_,objectBindings:lo(C),matRefs:G,label:C.label||ms(C.url)}}).filter(C=>C!==null);return g.length>0?g:null},[je,be,r,lo]),EC=de(()=>{if(!je||je.length<2)return null;let g=je.map(C=>{let _=po.current[ke(C)];return _?{scene:_,label:C.label||ms(C.url)}:null}).filter(C=>C!==null);return g.length>0?g:null},[je]);De(()=>{(da||xn||it||t.status!=="ready")&&dn.stop()},[dn,da,xn,it,t.status]);let zu=ce(null),Gs=ce(Se),DC=de(()=>{if(!Xe)throw new Error("Wait for the current model to finish loading before preparing AR.");if(o)throw new Error("Streaming tiles are incomplete model data. Provide arHandoff.createUSDZ to prepare this asset.");let g=lt?je:void 0,C=g?g.filter(_=>_.visible!==!1).map(_=>{let G=ke(_),le=po.current[G];if(!le)throw new Error("Wait for every visible model to finish loading before preparing AR.");let Oe=G===be?zu.current??lo(_):Ra(lo(_),_.sceneConfig?.product).objectBindings;return{scene:le,instanceId:G,objectBindings:Oe,sceneConfig:G===be?Gs.current:_.sceneConfig??Gs.current,materialOverrides:G===be?_r.current:of.current[G]?.current}}):Ne.current?[{scene:Ne.current,instanceId:be,sceneConfig:Gs.current,objectBindings:zu.current??Me,materialOverrides:_r.current}]:[];if(!C.length)throw new Error("Wait for a visible model to finish loading before preparing AR.");for(let _ of C)Vb(_.scene);return Fv(C,re?Ns:void 0,be)},[Xe,o,lt,je,lo,be,Me,re,Ns]),[TC,LC]=ve(34),Vu=ce(void 0),_C=Wy({openConfiguredAR:L&&F?()=>Vu.current?.():void 0,sceneRef:Ne,materialRefs:_r,rendererCaptureRef:Yt,objectBindings:Me,downloadFilename:Pe,getAllLoadedModels:OC,getAllLoadedModelUvSources:EC,captureVideo:wu}),eg=tt(()=>Object.fromEntries(Object.entries(Me).filter(([,g])=>g.visible===!1).map(([g])=>[g,!0])),[Me]),Ir=tt(()=>{let g=new WeakMap,C=new Map,_=new Map;for(let[G,le]of Object.entries(Me))g.set(le,G),C.has(le.id)||C.set(le.id,G),_.has(le.modelObjectId)||_.set(le.modelObjectId,G);return{byReference:g,byId:C,byModelObjectId:_}},[Me]),Hn=de(g=>g?Ir.byReference.get(g)??Ir.byModelObjectId.get(g.modelObjectId)??Ir.byId.get(g.id)??null:null,[Ir]),Fu=d!==void 0,vo=Fu?d??null:wS,rt=Hn(vo);De(()=>{n.setSelectedPart(rt)},[rt,n]);let yo=rt?Gt.current[rt]??null:null,BC=rt?Vs[rt]:void 0,tg=Hn(Ue?S??Ds??yS:null),jC=tg?Gt.current[tg]??null:null,Hu=w??(h?h.map(g=>Gt.current[g]).filter(Boolean):null),Us=tt(()=>{let g=Hu??(yo&&Me[rt??""]?.transform?.shear?[yo]:null);if(!g?.length)return null;let C=new Set(g),_=Object.entries(Gt.current).filter(([,G])=>C.has(G)).map(([G,le])=>({key:G,node:le,transform:Me[G]?.transform}));return _.length>1||_.some(({transform:G})=>G?.shear)?_:null},[Hu,Me,yo,rt]),ng=de(g=>{xS(g),x?.(g)},[x]),rg=jt&&vo!==null&&rt!==null,xo=(rt?Me[rt]:null)??vo,ga=xo&&(xo.modelObjectId||xo.id)||null,ba=ga?CS[ga]??null:null,[NC,og]=ve(""),ig=ce(null);De(()=>{let g=ig.current;if(g!==rt)if(ig.current=rt,rt){let C=xo?.label||vo?.label||rt;og(Jt("objectSelected",{name:C}))}else g&&og(Jt("selectionCleared"))},[rt,xo,vo,Jt]),De(()=>{Y?.(eg)},[eg,Y]);let li=de((g,C)=>{if(uo==="pointerLock"){Ps("orbit");return}g&&C?n.viewPart({objectId:g.id,objectKey:Hn(g)??(g.modelObjectId||g.id),label:g.label,source:C}):g||n.setSelectedPart(null),Fu||SS(g),R?.(g)},[uo,Ps,Fu,R,Hn,n]),ag=ce(It?.objectBindings?`${r}
66
+ ${o??""}`:null),$s=de((g,C)=>{if(!Uc)return;let _=`${r}
67
+ ${o??""}`,G=ag.current===_?qn.current:xD;ag.current=_;let le=Fh(g,C);for(let Oe of Object.keys(le))G[Oe]&&(le[Oe]=G[Oe]);In(le)},[Uc,r,o,In]),{glowMemoryRef:sg,readObjectGlow:lg,applyGlow:cg}=xy({nodeRefsMap:Gt,currentObjectBindingsRef:qn,applyObjectBindings:In}),IC=de(g=>{let C=rt;if(!C||!g)return;let _=qn.current[C];_&&In({...qn.current,[C]:{..._,transform:{..._.transform,...g}}})},[In,rt]),zC=de(g=>{let C=qn.current,_={...C};for(let{key:G,transform:le}of g){let Oe=C[G];Oe&&(_[G]={...Oe,transform:{...Oe.transform,...le}})}In(_)},[In]),cr=de((g,C)=>Me[g]?g:C?Hn(C):Ir.byId.get(g)??Ir.byModelObjectId.get(g)??null,[Me,Hn,Ir]),Ws=de((g,C)=>{let _=cr(g),G=_?Me[_]:void 0;!_||!G||In({...Me,[_]:{...G,style:C(G.style)}})},[cr,Me,In]),zr=de(()=>{Ut&&sr[Ut.objectId]?.hex!==void 0&&ia(g=>({...g,[Ut.objectId]:{}})),au(null)},[Ut,sr]),ug=de(()=>{if(Ut){let g=sr[Ut.objectId]?.hex;g!==void 0&&(Ws(Ut.objectId,C=>({...C,material:{...C?.material,baseColor:g}})),ia(C=>({...C,[Ut.objectId]:{}})))}au(null)},[Ut,sr,Ws]),dg=Ut?Me[cr(Ut.objectId)??Ut.objectId]?.style?.material?.baseColor:void 0,Gu=de(()=>{li(null),ou(null),zr()},[li,zr]),VC=de((g,C,_,G,le)=>{let Oe=af.current,Te=Vn.current,_e=Le.current?.camera;if(!Oe)return{objectId:g,x:24,y:24};let Ie=Oe.getBoundingClientRect(),dt=12,zt=Ie.width-C-dt,Sn=Ie.height-_-dt,dr=Math.max(dt,(Ie.width-C)/2),Mo=Math.max(dt,(Ie.height-_)/2),Po=cr(g,G),en=Po?Gt.current[Po]:null,Cn=(pr,mr)=>mr<=dt?dt:Math.min(Math.max(pr,dt),mr);if(Te&&_e&&en){let pr=Te.getBoundingClientRect(),mr=new oo;new F0().setFromObject(en).getCenter(mr),mr.project(_e);let Fr=(mr.x+1)/2*pr.width+(pr.left-Ie.left),Sa=(1-mr.y)/2*pr.height+(pr.top-Ie.top);return{objectId:g,x:Cn(Fr+24,zt),y:Cn(Sa-_/2,Sn)}}let xa=typeof le?.screenX=="number"?le.screenX-Ie.left:dr,wa=typeof le?.screenY=="number"?le.screenY-Ie.top:Mo;return{objectId:g,x:Cn(xa,zt),y:Cn(wa,Sn)}},[cr]),Xs=wy({setCurrentAction:ou,bindingKeyIndex:Ir,currentObjectBindings:Me,applyObjectBindings:In,resolveObjectKey:cr,closeColorPicker:zr,setColorPicker:au,setMaterialPopupsByObject:MS,setItemMaterials:ia,getPopoverPosition:VC,decalRequestRef:Wm,setDecalError:$m,setDecalDragging:Xm,setDecalControl:Gm,resolvedSceneConfigRef:Qo,applyLightPatches:Fm,readObjectGlow:lg,applyGlow:cg,glowMemoryRef:sg,setLightControl:Hm,onAction:Z});De(()=>{if(Ut)return window.addEventListener("pointerdown",zr),()=>window.removeEventListener("pointerdown",zr)},[Ut,zr]),De(()=>{if(!zs)return;let g=C=>{if(Es.current&&!Es.current.contains(C.target)){if(C.target.closest?.(".ri-annotationMarker"))return;Is()}};return document.addEventListener("mousedown",g),document.addEventListener("touchstart",g),()=>{document.removeEventListener("mousedown",g),document.removeEventListener("touchstart",g)}},[zs,Is]),De(()=>{if(!bo)return;let g=C=>{let _=C.target;if(_.closest?.(".ri-annotationPopup")||_.closest?.("button, input, textarea, .ri-measureTools, .ri-xrTools, .ri-buttonContainer"))return;let G=Vn.current;!G||!G.contains(_)||(Vf(null),Ou({title:"",description:""}))};return document.addEventListener("mousedown",g,!0),document.addEventListener("touchstart",g,!0),()=>{document.removeEventListener("mousedown",g,!0),document.removeEventListener("touchstart",g,!0)}},[bo]);let{handleFileChange:FC,triggerFileUpload:pg,clearTexture:mg,texturePositioningEnabled:HC,texturePositioningOverrides:GC,setMaterialTextureOffset:UC,setMaterialTextureRotation:$C,endMaterialTexturePositioning:WC}=g0({applyBindingStyle:Ws,resolveObjectKey:cr,onTextureUpload:N,fileInputRef:nf,pendingObjectId:mS,createdBlobUrls:rf,texturePositioning:wm,setMoveZoomTarget:ra}),Uu=ce(U);Uu.current=U;let fg=ce(Gf);fg.current=Gf;let $u=Dv({enabled:L,isReady:()=>Xe&&lr&&t.status==="ready"&&!Cu(),resolving:Lf||_f,xrStore:si,arSupported:pa,quickLookSupported:ma,configuredHandoff:!!F,mobileHandoffUrl:fa,openQuickLook:WS,openMobileHandoff:Nf,openConfiguredAR:()=>Vu.current?.()}),On=de(()=>{let g=Le.current;!g||!Uu.current||Uu.current({objectBindings:qn.current,homeCameraState:Fn.current,goToAnnotation:C=>fg.current(C),startAR:$u,captureImage:C=>Cu()?Promise.reject(new Error("Wait for video export to finish before capturing an image.")):_l(Yt.current,C),isLoadingTiles:()=>lu.current,captureVideo:wu,invalidate:()=>Yt.current?.invalidate(),rendererBackend:If.current??"webgl",raw:{controls:g,scene:Ne.current,nodes:Gt.current}})},[wu,Cu,$u]),ci=de(async(g=!1)=>{let C=Le.current,_=Br.current??Ne.current;if(!C||!_)return!1;Jo.current=_a;try{return await xv(C,_,{flyIn:g,onStart:()=>fo(!0),invalidate:()=>Yt.current?.invalidate()}),(Br.current??Ne.current)!==_?!1:(Xn.current=!0,ni(),On(),!0)}catch(G){return console.error("Fit scene error:",G),!1}},[ni,On]);De(()=>{let g={url:be,usesSlots:lt},C=bv(sa.current,g,(ks.current??[]).map(_e=>ke(_e)),po.current,zn.current,An),_=sa.current?zn.current[sa.current.url]:void 0;if(C&&_&&!zn.current[be]&&(zn.current[be]=_),sa.current=g,Xn.current=!1,aa.current=!1,Fn.current=lt?zn.current[be]??null:null,Ne.current=null,su.current=null,lu.current=!1,Ts.current=null,Br.current=null,uf(!1),mf([]),mu(!1),fu(null),ti(!1),gu.current="",gf.current=new Set,bu.current=new Set,wf({total:0,missing:0}),Sf("loadingModel"),yu(null),It?.model!==Il(be,o)&&(_s.current=null),!r){mo(!1),fo(!0);return}if(lt&&Rs.current.has(be)){mo(!1),fo(!0);return}mo(!C),fo(C||!!ft||Ls.current);let G=!1,le=null,Oe=_e=>{le=setTimeout(Te,_e)},Te=()=>{if(G||Xn.current||aa.current||lt&&Rs.current.has(be))return;let _e=Br.current??Ne.current;if(!Le.current||!_e){Oe(100);return}Yo.current=_d(_e,Le.current,pf.current?.maxDistance)??Yo.current;let Ie=_s.current;if(Ie){_s.current=null,my(Le.current,Ie.camera),Xn.current=!0,Ie.home?(Fn.current=Ie.home,lt&&(zn.current[be]=Ie.home)):ni(),On(),mo(!1),fo(!0),Yt.current?.invalidate();return}if($g(Le.current)||C){Xn.current=!0,ni(),On(),mo(!1),fo(!0),Yt.current?.invalidate();return}aa.current=!0,(ft?ft():Ls.current?Promise.resolve(!0):ci(!0)).then(zt=>{G||(Xn.current=zt!==!1,Xn.current?(ni(),On(),mo(!1)):G||Oe(100))}).catch(()=>{Xn.current=!1,G||Oe(100)}).finally(()=>{G||(aa.current=!1)})};return Oe(50),()=>{G=!0,le&&clearTimeout(le)}},[ni,zn,ci,be,An,r,On,ft,It,o,lt]),z0({enabled:Vt,canvasAreaElement:ru,fitAttemptedRef:Xn,fitInFlightRef:aa,controlsRef:Le,cameraFramingRef:Jo,nodeRefsMap:Gt,fitScene:ci});let qs=de(g=>{let C=Le.current;if(!C)return;let _=g.cameraState;if(_?.position&&_?.target){let[Oe,Te,_e]=_.position,Ie=new oo(..._.target);C.setPosition(Oe,Te,_e,!0),C.setTarget(Ie.x,Ie.y,Ie.z,!0),Jo.current={kind:"view",target:Ie};return}let G=Hn(g),le=G?Gt.current[G]:null;!G||!le||(C.fitToBox(le,!0,kl).catch(()=>{}),Jo.current={kind:"object",key:G})},[Hn]);De(()=>{rt||(Jo.current=_a)},[rt]);let Wu=de((g,C="canvas")=>{if(_u.current)return;let _=Zm.current;_.dragging||performance.now()-_.endedAt<150||(Zt(!1),zr(),ou(null),li(g,C),!(pe||!ze)&&qs(g))},[li,zr,qs,pe,ze]),{beginMoveZoom:gg,handleMoveZoomPointerDown:XC}=l0({moveZoomTarget:an,setMoveZoomTarget:ra,currentObjectBindingsRef:qn,materialRefsOut:_r,rendererCaptureRef:Yt,canvasAreaRef:Vn,canvasAreaElement:ru,applyBindingStyle:Ws}),bg=de(g=>{if(!oa)return!1;let C=Hn(g);if(!C)return!1;let _=Vs[C];return _?(gg({objectKey:C,textureKey:_}),!0):!1},[oa,Hn,Vs,gg]),Xu=ce(!1),{editDecals:jD,activeDecalMove:ui,addCenteredDecal:ND,decalSizeFor:qC,startImageDecal:ID,decalControlHandlers:KC}=o0({currentObjectBindings:Me,currentObjectBindingsRef:qn,applyObjectBindings:In,nodeRefsMap:Gt,controlsRef:Le,decalMove:T,decalDragging:Jc,setDecalDragging:Xm,setDecalError:$m,setDecalControl:Gm,decalRequestRef:Wm,onTextureUpload:N,currentPanelObjectId:ga,modelUrl:be}),Ks=rn===!0?MD:rn||null,wo=un.product?JSON.stringify([be,un.product.definition.id,un.product.definition.revision]):null,[qu,QC]=ve(null),di=tt(()=>un.product&&Ks&&qu?.key===wo?{...un.product,selections:qu.selections}:un.product,[un.product,Ks,qu,wo]),JC=de(g=>{QC(wo?{key:wo,selections:g}:null)},[wo]),ha=tt(()=>Ra(Me,di,gr(un.model),ca),[Me,di,un.model,ca]);zu.current=ha.objectBindings;let Wt=tt(()=>di?{...un,product:di,model:{...un.model,activeVariants:ha.activeVariants}}:un,[un,di,ha.activeVariants]);Gs.current=Wt;let hg=tt(()=>jh(ha.objectBindings,Wt.styleRules),[ha.objectBindings,Wt.styleRules]),[vg,yg]=ve(()=>It?.isolation??null);yr(()=>{yg(null)},[be,r]);let So=Wn!==void 0?Wn:vg,Ku=de(g=>{Wn===void 0&&yg(g),Qi?.(g)},[Wn,Qi]),wn=tt(()=>Ih(hg,So),[hg,So]),YC=tt(()=>({bindings:wn.bindings,model:Wt.model,camera:Wt.camera,animations:Wt.animations}),[wn.bindings,Wt.model,Wt.camera,Wt.animations]),pi=Ev({revision:JSON.stringify([ri,re?Ns?.id:null]),enabled:L&&!!F,options:fl(F),baseUrl:ee,autoPrepare:re&&!pa&&ma&&Xe,preparePhoneLink:!re,state:{version:1,objectBindings:Me,configuration:{modelUrl:r,modelFormat:c,tilesetUrl:o,activeModelId:be,models:je?.map(g=>({...g,objectBindings:lo(g),sceneConfig:ke(g)===be?Wt:g.sceneConfig})),mergeModels:zc,sceneConfig:Wt,arScaleMode:I,isolation:So,backgroundColor:ut,shadows:mt}},getSources:DC});Vu.current=pi.show;let ur=tt(()=>wn.setAside.size>0?Nh(Me,So):null,[wn,Me,So]),ZC=de(g=>{let C=Hn(g),_=C!==null&&ur?.size===1&&ur.has(C);Ku(_?null:{...So,target:g.id})},[Ku,So,ur]),{sourceOf:Vr}=wn,eM=tt(()=>Wo?Rw(Me,wn):[],[Wo,Me,wn]),Qu=de(g=>{let C=Vr(g);Wu(C)},[Wu,Vr]),Ju=de(g=>ng(g&&Vr(g)),[ng,Vr]),Yu=de((g,C)=>{let _=Vr(g);return M?.({binding:_,...C})===!0?(Xu.current=!0,!0):bg(_)},[M,bg,Vr]),Zu=tt(()=>P?(g,C)=>P({binding:Vr(g),...C}):void 0,[P,Vr]),xg=de(g=>{li(g,"panel"),!pe&&qs(g)},[li,qs,pe]);De(()=>{On()},[On,Me,fS]);let wg=ce(0),Sg=de((g,C)=>{wg.current=C.distance,hv(C,Yo.current),te?.(Yg(g,C)),On()},[On,te]),tM=de(g=>{cf.current=new Set(g.map(C=>C.name)),kS(C=>C+1),$s(g.map(C=>C.name)),l?.(g)},[$s,l]),nM=de(g=>{Br.current=g,Yt.current?.invalidate()},[]),mi=de(g=>{Ne.current=g,Yf(g),wf(I0(g));let C=th(g);ES(C>bd?C:null),xf(!1),yu(null),C>bd&&Sf("preparingLargeModel"),uf(!0),mf(kb(g)),mu(!1),fu(null),vf(!1),o||(l&&l(Jx(g)),$s(Gh(g),Hh(g))),B?.(g),H?.(Bh(g)),On()},[$s,On,H,l,B,Yf,o]),rM=de(()=>Br.current??Ne.current,[]),{background:ed}=Se,oM=ed.enabled&&ed.type==="color"&&new fD(ed.color).getHSL({h:0,s:0,l:0}).l>.5?"#000000":"#ffffff",va=Xe?Ne.current:null,Cg=!!V;De(()=>{if(!Cg)return;if(ua){if(Ts.current?.url!==r||Ts.current.error!==go)return;let C=go&&typeof go=="object"?Oa(go):void 0;cu.current?.(Zb({...C,name:C?.name??fd(r),format:C?.format??c??gd(r).format}));return}if(!va||Ne.current!==va)return;let g=gd(r);cu.current?.(Yb(va,{scope:o?"resident-tiles":"asset",source:{...Oa(va),format:o?"3d-tiles":c??g.format,name:g.entryPath??fd(r)}}))},[Cg,va,r,c,o,yf,ua,go]);let td=de(g=>{mo(!1),fo(!0),mu(!0),fu(g),Ts.current={url:lf.current,error:g},A?.(g)},[A]),{reportError:Mg,clearError:Pg}=qv({enabled:lt,activeUrl:be,models:je,errorsRef:Rs,activeFailed:ua,activeError:go,onActiveError:td,onExtraError:Sm}),iM=de((g,C)=>{!lt||!ks.current?.some(_=>ke(_)===g)||(delete po.current[g],delete zn.current[g],Mg(g,C))},[lt,Mg,zn]),aM=de((g,C)=>{!lt||!ks.current?.some(_=>ke(_)===g)||(Pg(g),po.current[g]=C,g===be&&(As.current!==g||Ne.current!==C)&&(As.current=g,mi(C)),vs?.(g,C))},[lt,be,r,mi,vs,Pg]);De(()=>{if(!lt||Rs.current.has(be))return;let g=po.current[be];g&&(As.current===be&&Ne.current===g||(As.current=be,mi(g)))},[lt,be,r,Xe,mi]);let kg=de((g,C)=>{bu.current.add(g),OS(_=>_+1),Cm?.(g,C)},[Cm]),Rg=lt&&je?je.find(g=>ke(g)===be)?.mergeModels:zc,Ag=tt(()=>new Set((Rg??[]).map(g=>g.url)),[Rg]),Og=de(g=>{g.lengthComputable&&g.total>0&&yu(g.loaded/g.total*100),$?.(g)},[$]),sM=de((g,C,_,G)=>{if(!se)return;let le={...Se,lighting:{...Se.lighting,lights:Se.lighting.lights.map(Oe=>Oe.id===g?{...Oe,position:C,..._?{rotation:_}:{},...G?{target:G}:{}}:Oe)}};se(le)},[Se,se]);De(()=>{let g=Ne.current;if(!Xe||!g){ti(!1);return}if(Array.from(Ag).some(Te=>!bu.current.has(Te))){ti(!1);return}let _=Object.entries(Me).filter(([,Te])=>!Te.removed);if(_.length===0){ti(!1);return}let G=o?cf.current:(()=>{let Te=gf.current;for(let _e of Object.keys(Hr(g).nodesById))Te.add(_e);return Te})();if(!G||G.size===0){ti(!1);return}let le=_.map(([Te,_e])=>_e.modelObjectId??Te).filter(Te=>!G.has(Te));ti(le.length>0),AS(le.length);let Oe=le.join(`
68
+ `);if(le.length>0&&Oe!==gu.current){let Te=le.slice(0,10).map(Ie=>`"${Ie}"`).join(", "),_e=le.length>10?` and ${le.length-10} more`:"";console.warn(`[react-immersive] ${le.length} object binding(s) point at nodes this model doesn't have, so they can't be selected: ${Te}${_e}. Each binding's modelObjectId (or its key) must match a node name; log onObjectCatalog to see this model's names.`)}gu.current=Oe},[Xe,Me,PS,o,Ag,yf]),De(()=>{if(Z||An)return;let g=[];for(let[_,G]of Object.entries(Me))for(let le of G.actions??[])yd.includes(le.id)||g.push(`"${le.id}" on "${G.label??_}"`);let C=g.join(`
69
+ `);if(g.length>0&&C!==bf.current){let _=g.slice(0,10).join(", "),G=g.length>10?` and ${g.length-10} more`:"";console.warn(`[react-immersive] ${g.length} action button(s) do nothing because ModelViewer has no onAction handler: ${_}${G}. ModelViewer itself handles ${yd.join(", ")}; handle other ids in onAction, or pass useViewerActions().handleAction to run their effects.`)}bf.current=C},[Me,An,Z]);let nd=de(async()=>{if(Le.current&&Fn.current&&nl(Le.current,Fn.current),ft){await ft();return}let g=Le.current;if(!g)return;let C=Fn.current;try{if(C&&!Ls.current&&Number.isFinite(C.azimuthAngle)&&Number.isFinite(C.polarAngle))g.rotateTo(C.azimuthAngle,C.polarAngle,!0),await ci();else if(C){Jo.current=_a;let _=Jg(C,g);await Bd(g,()=>g.setLookAt(_[0],_[1],_[2],C.target[0],C.target[1],C.target[2],!0))}else await ci()}catch(_){console.error("Reset camera error:",_)}},[ft,ci]),zD=de(()=>{jr(!1),Zt(!0)},[]),VD=de(()=>{Zt(!1)},[]),lM=de(()=>{Zt(!1),jr(!0),setTimeout(()=>{nd()},100)},[nd]),cM=de((g,C)=>{Sg(g,C)},[Sg]),uM=de(g=>{if(_u.current)return;if(Xu.current){Xu.current=!1;return}if(g.target.closest("button, input, textarea, .ri-colorPicker, .ri-materialPicker, .ri-annotationPopup, .ri-annotationMarker, .ri-viewAnnotationPopup"))return;let _=Vn.current,G=Le.current,le=G?.camera,Oe=Ne.current;if(!_||!G||!le||!Oe||!ys&&!G.enabled)return;let Te=_.getBoundingClientRect(),_e=(g.clientX-Te.left)/Te.width*2-1,Ie=-((g.clientY-Te.top)/Te.height)*2+1,dt=new gD;dt.setFromCamera(new hD(_e,Ie),le);let zt=dt.intersectObject(Oe,!0);if(zt.length===0)return;if(!ys&&E){let en=zt[0].point,Cn=null;for(let[xa,wa]of Object.entries(qn.current)){if(!wa.decals?.length)continue;let pr=Gt.current[xa];if(!pr)continue;let mr=pr.worldToLocal(en.clone());for(let Fr of wa.decals){if(!Fr.position)continue;let Sa=mr.distanceTo(new oo(Fr.position[0],Fr.position[1],Fr.position[2]));Sa<=Fr.size/2&&(!Cn||Sa<Cn.distance)&&(Cn={binding:wa,id:Fr.id,distance:Sa})}}if(Cn){ra(null),E(Cn.binding,Cn.id);return}}if(!ys){let{x:en,y:Cn,z:xa}=zt[0].point;G.setOrbitPoint(en,Cn,xa);return}let Sn=zt[0],dr=Sn.point,Mo=Oe.worldToLocal(Sn.point.clone()),Po=[0,0,1];if(Sn.face){let en=Sn.face.normal.clone().transformDirection(Sn.object.matrixWorld).normalize();Po=[en.x,en.y,en.z]}Vf({worldPosition:[dr.x,dr.y,dr.z],localPosition:[Mo.x,Mo.y,Mo.z],worldNormal:Po,anchor:Yw(Sn),screenX:g.clientX-Te.left,screenY:g.clientY-Te.top}),Ou({title:"",description:""})},[ys,E]);if(De(()=>{Fc.current={snapshot:()=>{let g=Le.current,C=_s.current;return{model:Nn,camera:Xn.current&&g?el(g):C?.camera,home:Fn.current??C?.home,lightEdits:$c,variantEdit:xs,sectionEdit:ws,measurementEdits:Ss,isolation:vg,objectBindings:Om||lt?void 0:Me,modelBindingEdits:Om?void 0:Z0,explodeFactor:ri,cameraControllerType:Qm,uvCheckerOverride:qm,annotationCategories:JS}},captureFrame:()=>{let g=Yt.current;return!g||t.status!=="ready"||!Xe||!lr?Promise.resolve(null):dh(g)}}}),De(()=>()=>{Fc.current=null},[Fc]),Ko.status==="checking"){let g=Hc??Vc;return g?q("div",{className:"ri-viewer ri-viewerPlaceholder",style:{background:Zc},children:q(hd,{src:g})}):q("div",{className:"ri-viewer ri-viewer--license-checking",children:!a&&q(Ml,{title:Jt("verifyingLicense"),message:Jt("checkingYourLicenseKey")})})}if(Ko.status==="invalid")return q("div",{className:"ri-viewer ri-viewer--license-invalid",children:q(Ml,{tone:"error",title:Jt("invalidLicense"),showKeySetup:Ko.isLocalDomain&&Ko.reason==="No license key provided",message:Ko.isLocalDomain?Ko.reason??Jt("licenseHasBeenRevokedOrHasExpired"):Jt("failedToLoadPleaseContactTheSiteAdministrator")})});let{materialTextureUrl:Eg,materialTargetTakesImage:Dg,materialTextureOffset:Tg,materialTextureRotationDegrees:Lg,isMaterialTexturePositioning:_g,materialTextureOnOffsetChange:Bg,materialTextureOnRotationChange:jg,materialTextureOnEndPositioning:Ng}=b0({materialPopup:ba,resolveObjectKey:cr,currentObjectBindings:Me,nodeRefsMap:Gt,moveZoomTarget:an,texturePositioningEnabled:HC,texturePositioningOverrides:GC,setMaterialTextureOffset:UC,setMaterialTextureRotation:$C,endMaterialTexturePositioning:WC}),dM=Vn.current?.offsetWidth??600,pM=Vn.current?.offsetHeight??400,mM=350,fM=290,gM=bo?Math.min(bo.screenX+12,dM-mM-8):0,bM=bo?Math.min(bo.screenY,pM-fM-8):0,hM=Ot&&!!r&&!ua&&!Xe,Ig=L&&(si&&(pa||Bf)||ma||!!F||!!fa),fi=Ig&&!An&&!re,ya=ln&&!An,rd=Xo&&!An,zg=(fi?1:0)+(Ht?1:0),Co=g=>(An?50:16)+g*42+(ya&&g>zg?Math.max(0,TC-34):0),od=Ig&&!re?q(D0,{configuredHandoff:!!F,top:Co(0),xrStore:si,arSupported:pa,vrSupported:Bf,quickLookSupported:ma,mobileHandoffUrl:fa,mobileHandoffOpen:F?pi.open:jf,onStartAR:$u,onOpenMobileHandoff:F?pi.show:Nf}):null;return _n("div",{className:"ri-viewer",ref:Os.rootRef,style:{background:Zc},"data-reduced-motion":Lr?"":void 0,children:[q("div",{className:"ri-visuallyHidden",role:"status","aria-atomic":"true",children:NC}),t.status!=="ready"&&q(f0,{rebuilding:t.status==="rebuilding",onReload:t.reload}),_n("div",{className:"ri-viewerLeft",ref:af,inert:t.status!=="ready",children:[jt&&(X?X({isOpen:rg,selectedObject:xo,currentAction:sf,onClose:Gu,onAction:Xs}):q(qp,{translateDefaultActions:Uc,isOpen:rg,selectedObject:xo,currentAction:sf,onClose:Gu,onAction:Xs,renderActionExtra:g=>{if(g==="change-color"&&Ut)return q(Hp,{inline:!0,colorPicker:Ut,onClose:ug,savedHex:dg,itemMaterials:sr,setItemMaterials:ia});if((g==="change-light-color"||g==="set-brightness")&&Kc?.kind===g&&Kc.objectId===ga)return q(Sy,{control:Kc,lights:Se.lighting.lights,readObjectGlow:lg,applyGlow:cg,glowMemoryRef:sg,applyLightPatches:Fm,onControlChange:Hm});if((g==="add-text"||g==="add-image")&&Qc?.kind===g&&Qc.objectId===ga){let C=Qc,_=cr(C.objectId);if(!_)return null;let G=g==="add-image";return q(Ay,{kind:g,decals:(Me[_]?.decals??[]).filter(le=>!!le.image===G),activeId:C.activeId,error:Um?Jt.message(Um):null,moving:Jc?.objectKey===_&&Jc.decalId===C.activeId,defaultSize:qC(_),...KC(C,_)})}return g==="change-material"&&ba?q(Gp,{inline:!0,triggerFileUpload:pg,materialPopup:ba,textureUrl:Eg,clearTexture:mg,canPlaceImage:Dg,offset:Tg,rotationDegrees:Lg,onOffsetChange:Bg,onRotationChange:jg,isPositioning:_g,onEndPositioning:Ng}):null}})),_n("div",{className:`ri-canvasArea ${xn?"ri-canvasArea--measuring":""} ${lr?"":"ri-canvasArea--positioning"} ${Ve||bt?"ri-canvasArea--moveMode":""}`,ref:vS,tabIndex:ar?0:void 0,role:ar?"group":void 0,"aria-label":ar?Jt("cameraKeyboardHelp"):void 0,onDoubleClick:uM,onPointerDown:g=>{if(ar&&Vn.current?.focus({preventScroll:!0}),an){XC(g);return}yC(g)},onClick:an?void 0:xC,onPointerMove:gC,onPointerLeave:Qf,onWheel:Qf,children:[Xe&&!xn&&t.status==="ready"?q(_w,{objects:eM,selectedKey:rt,onHighlight:iu,onSelect:g=>Wu(g,"keyboard"),onClearSelection:()=>{Gu(),k?.()}}):null,oa&&!o&&(an||BC)&&q("div",{className:"ri-moveZoomHint",role:"status",style:{position:"absolute",top:12,left:"50%",transform:"translateX(-50%)",zIndex:5,padding:"6px 12px",borderRadius:999,fontSize:12,fontWeight:500,color:"#fff",background:an?"rgba(37, 99, 235, 0.92)":"rgba(0, 0, 0, 0.6)",pointerEvents:"none",whiteSpace:"nowrap"},children:Jt(an?"texturePositioningHint":"texturePositioningStartHint")}),ff&&!hf&&q(u0,{count:RS,onDismiss:()=>vf(!0)}),hu!==null&&!DS&&q(d0,{triangles:hu,offset:ff&&!hf,onDismiss:()=>xf(!0)}),Wt.model.renderer==="uv-checker"&&vu.missing>0&&q(p0,{missing:vu.missing,total:vu.total}),q("input",{ref:nf,type:"file",accept:"image/png,image/jpeg,image/webp",className:"ri-hiddenInput",onChange:FC}),q(Ei,{onError:t.fail,children:ai&&!Lf?_n(Cp,{backend:ai,onRendererCreated:t.onRendererCreated,onPointerMissed:D?()=>{_u.current||D()}:void 0,suspended:t.status!=="ready",paused:J0&&!it,camera:qe,backgroundColor:ut,shadows:mt&&Se.shadows.enabled,sceneConfig:Wt,selectedObjectRef:yo,selectedObjectRefs:Hu,selectedObjectOutlineColor:v,hoveredObjectRef:jC,highlightOnHover:Ue,renderMode:xt,maxDpr:hn,reduceGpuLoad:cS,runtimeStats:W?{onStats:W,intervalMs:z,profile:Qt,streamingRef:su}:void 0,xrStore:si,xrRuntime:Ru,rendererCaptureRef:Yt,preserveDrawingBuffer:Bn,children:[q(kp,{lightingConfig:Se.lighting,shadowConfig:Se.shadows,shadowsEnabled:mt,environmentRotation:Se.environment.rotation,environmentConfig:Se.environment,modelBounds:Jf,objectBindings:Me,nodeRefs:Gt}),rS&&Se.lighting.lights.map(g=>!g.visible||g.type==="none"||g.type==="hemisphere"||g.attachment?null:q("group",{rotation:[0,g.attachedToCamera?0:Se.environment.rotation*Math.PI/180,0],children:q(Xw,{light:g,position:g.position,rotation:g.rotation,color:g.color,intensity:g.intensity,visible:g.visible,target:g.type==="spot"||g.type==="directional"?g.target??Bo(Za(g,mt&&Se.shadows.enabled&&g.castShadow,Jf),g.attachedToCamera?0:-Se.environment.rotation):void 0,onTransformChange:({position:C,rotation:_,target:G})=>sM(g.id,C,_,G),onDraggingChange:Ym})},g.id)),q(zp,{setAside:wn.setAside,nodeRefs:Gt}),!Nr&&q(Fp,{section:Se.section??Pa,box:Hs,modelRef:Ne,showHandle:Xo,onChange:Im,onDraggingChange:sS}),q(Pp,{controlsRef:Le,onReady:uS,onCameraChange:cM,cameraLimits:ei,controllerType:uo,onPointerLockExit:()=>Ps("orbit"),reducedMotion:Lr,zoom:!pe,pageScroll:Ge}),q(gm,{enabled:it||xn||ui||Lr||uo==="pointerLock"?!1:X0??Se.model.autoRotate??!1,speed:q0??Se.model.autoRotateSpeed??1,controlsRef:Le}),Nt&&!Nr&&!it&&q(sh,{getTarget:rM,revision:`${be}:${Xe}`,lineColor:oM}),on&&!it&&q(ey,{onUpdate:()=>{let g=Le.current;if(g){g.camera.up.set(0,1,0);let C=wg.current;C>0&&g.dollyTo(C,!1),g.update(0)}Yt.current?.invalidate()}}),(Ve||bt)&&!Nr&&!Us&&yo&&rt&&q(am,{node:yo,space:yn,moveEnabled:Ve,gizmoTool:xe,scaleEnabled:bt,onTransformChange:IC,transform:Me[rt]?.transform,onDraggingChange:g=>{ef(g),vo&&O?.(vo,g)}},rt),(Ve||bt)&&!Nr&&Us&&q(um,{entries:Us,referenceNode:yo,space:yn,moveEnabled:Ve,gizmoTool:xe,scaleEnabled:bt,onTransformChange:zC,onDraggingChange:g=>{ef(g);for(let C of Us){let _=Me[C.key];_&&O?.(_,g)}}}),ui&&q(zy,{target:ui,nodes:Gt,controls:Le}),(()=>{let g=lt&&je?_n(hm,{children:[je.map(C=>q(Qx,{entry:{...C,objectBindings:ke(C)===be?wn.bindings:lo(C)},isActive:ke(C)===be,pulses:wn.pulses,decoderConfig:Ms,itemMaterials:sr,sceneConfig:Wt,zoomOnSelected:ze,highlightOnHover:Ue,explodeFactor:ri,suspendBindingTransforms:na,onLoadProgress:Og,onAnimationsReady:Df,onModelAnimationsReady:IS,onLoadError:iM,onModelLoaded:aM,selectedItem:rt,panelHoveredItem:S??Ds,onItemClick:Qu,onItemDoubleClick:Yu,onItemContextMenu:Zu,onItemHover:Ju,nodeRefsOut:Gt,onNodeRefsChange:nu,materialRefsOut:ke(C)===be?_r:bS(ke(C)),onMergeModelLoaded:kg,onMergeModelError:Mm},ke(C))),q(dc,{anchorSceneRef:Ne,annotations:Rm?Ff:[],sceneConfig:Se,activeAnnotation:zs,keepActiveAnnotationVisible:Uf,popupRef:Es,canvasRootRef:Vn,worldPositionsRef:tu,modelLoaded:Xe,onAnnotationClick:$f,onCloseAnnotation:Is,hideCloseButton:ho,guidedTour:ho,showAnnotationOnHover:nt}),q(Oc,{annotation:Hf,enabled:ho&&!it,controlsRef:Le,offsetRef:eu}),it?q(Oi,{controlsRef:Le,sceneRef:Ne,config:it.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:it.onStarted,onFinished:it.onFinished,onProgress:kf},"video-export"):Kn&&q(Oi,{controlsRef:Le,sceneRef:Ne,config:Kn,playing:da&&!xn,resetOnPlay:Pf,onFinished:()=>{Zt(!1),jr(!1)},onUserInteract:()=>{Zt(!1)}},"cinematic-preview"),ln&&_n(hm,{children:[q(fc,{items:Cs,sceneRef:Ne,modelId:Xc,tilesetUrl:o,settings:Zi,legacyUnit:io,revision:Fs,onResults:Zf}),q(Ii,{points:Bu,unit:ea.displayUnit,scale:ea.factor,box:Hs,showDimensions:Iu,tool:ju,areaClosed:Nu,snapPreview:xn?Kf:null})]})]}):q(Yn,{onLoadError:td,children:_n(V0,{fallback:null,children:[o?q(vD,{diagnosticsRef:W?su:void 0,loadingRef:lu,url:o,rotation:Wt.model.rotation,errorTarget:i,cacheSize:s,decoderConfig:Ms,objectBindings:wn.bindings,itemMaterials:sr,sceneConfig:Wt,selectedItem:rt,panelHoveredItem:S??Ds,highlightOnHover:Ue,onItemClick:Qu,onItemHover:Ju,onItemDoubleClick:Yu,onItemContextMenu:Zu,onObjectCatalog:tM,onTilesetBounds:nM,onModelLoaded:mi,onLoadError:td,nodeRefsOut:Gt,onNodeRefsChange:nu,materialRefsOut:_r,explodeFactor:ri,suspendBindingTransforms:na}):q(es,{url:r,modelFormat:c,objectBindings:wn.bindings,selectedItem:rt,itemMaterials:sr,onItemClick:Qu,onItemDoubleClick:Yu,onItemContextMenu:Zu,onItemHover:Ju,onModelLoaded:mi,onAnimationsReady:Df,nodeRefsOut:Gt,onNodeRefsChange:nu,materialRefsOut:_r,panelHoveredItem:S??Ds,sceneConfig:Wt,zoomOnSelected:ze,highlightOnHover:Ue,decoderConfig:Ms,onLoadProgress:Og,explodeFactor:ri,suspendBindingTransforms:na,originalNodePoses:Q0,mergeModels:zc,onMergeModelLoaded:kg,onMergeModelError:Mm,pulses:wn.pulses}),K0?.map(C=>q(Xx,{url:C,decoderConfig:Ms,onLoadError:Sm,onModelLoaded:vs?_=>vs(C,_):void 0},C)),q(dc,{anchorSceneRef:Ne,annotations:Rm?Ff:[],sceneConfig:Se,activeAnnotation:zs,keepActiveAnnotationVisible:Uf,popupRef:Es,canvasRootRef:Vn,worldPositionsRef:tu,modelLoaded:Xe,onAnnotationClick:$f,onCloseAnnotation:Is,hideCloseButton:ho,guidedTour:ho,showAnnotationOnHover:nt}),q(Oc,{annotation:Hf,enabled:ho&&!it,controlsRef:Le,offsetRef:eu}),it?q(Oi,{controlsRef:Le,sceneRef:Ne,config:it.config,playing:!0,resetOnPlay:!0,playOnce:!0,startAtPath:!0,onStarted:it.onStarted,onFinished:it.onFinished,onProgress:kf},"video-export"):Kn&&q(Oi,{controlsRef:Le,sceneRef:Ne,config:Kn,playing:da&&!xn,resetOnPlay:Pf,onFinished:()=>{Zt(!1),jr(!1)},onUserInteract:()=>{Zt(!1)}},"cinematic-preview"),ln&&_n(hm,{children:[q(fc,{items:Cs,sceneRef:Ne,modelId:Xc,tilesetUrl:o,settings:Zi,legacyUnit:io,revision:Fs,onResults:Zf}),q(Ii,{points:Bu,unit:ea.displayUnit,scale:ea.factor,box:Hs,showDimensions:Iu,tool:ju,areaClosed:Nu,snapPreview:xn?Kf:null})]})]})},o??r);return si&&Ru?q(Ru.XRModelPresenter,{ref:GS,box:Hs,scaleMode:I,onARStateChange:XS,children:g}):g})(),q(Mv,{controller:dn,source:Ne,controls:Le,animations:Mu,cameraEnabled:!Au,ready:Xe&&lr,sequences:Se.sequences,autoPlay:Q&&!Lr,authoredRevision:YC}),b&&q(Sv,{source:Ne,highlights:b}),xm&&q(V0,{fallback:null,children:xm})]}):null}),q(hd,{src:Hc??Vc,hidden:Xe&&lr}),qo&&q("div",{className:"ri-overlay",children:qo}),Ot&&r&&ua&&q(m0,{failure:fh(go,o||r,o?void 0:c,e),source:o||r}),q(Vh,{visible:hM,message:Jt(TS,{millions:Math.round((hu??0)/1e6)}),progress:_S??void 0,background:Zc,seeThrough:!!(Hc??Vc)}),An?Em&&od&&mD(od,Em):od,re&&q(Bv,{xrStore:si,arSupported:pa,checkingAR:_f,quickLookSupported:ma,modelReady:Xe,inARSession:Au,handoff:pi,animationControls:q(Vv,{options:ku,sources:ii,value:Ns?.id??"",onChange:FS}),onQuickLook:()=>n.requestARLaunch("quick-look")}),US,Fe&&!re&&!An&&!Au&&!it&&!xn&&oi.length>0&&q(ob,{controls:dn,sequences:oi}),pi.open&&q(Tv,{handoff:pi,filename:Pe,onQuickLook:()=>n.requestARLaunch("quick-look")}),!F&&jf&&fa&&q(T0,{url:fa,onClose:$S}),Ht&&q(L0,{top:Co(fi?1:0),active:Yc,onToggle:()=>Km(g=>!(g??ta))}),ln&&q(jp,{top:Co(zg),active:xn,disabled:!!it,tool:ju,snap:mC,pointCount:Bu.length,areaClosed:Nu,error:cC,showDimensions:Iu,onToggle:()=>{Zt(!1),xn||nS?.(),hC()},onTool:uC,onSnap:fC,onUndo:dC,onClear:bC,onFinishArea:pC,onDimensions:vC,onHeight:LC,settings:Zi,displayUnit:ea.displayUnit,onSettings:Nm,items:Cs,results:PC,onItems:jm,onSave:wC,canSave:SC,canCalibrate:CC,onCalibrate:MC,onExportJson:kC,onExportCsv:RC,onImport:AC,readOnly:gs!==void 0&&!ao,settingsReadOnly:bs!==void 0&&!so}),jn&&q(_0,{top:Co((fi?1:0)+(Ht?1:0)+(ya?1:0)),open:BS,factor:ri,onToggleOpen:()=>Mf(g=>!g),onFactorChange:Cf}),rd&&!Nr&&q(B0,{top:Co((fi?1:0)+(Ht?1:0)+(ya?1:0)+(jn?1:0)),section:sC,onChange:Im}),Kn&&q(j0,{top:Co((fi?1:0)+(Ht?1:0)+(ya?1:0)+(jn?1:0)+(rd?1:0)),playing:da,disabled:!!it||xn,onPlay:()=>{jr(!1),Zt(!0)},onPause:()=>Zt(!1),onStop:lM}),it&&q(N0,{progress:NS,onCancel:Su}),!An&&lt&&je&&je.length>1&&(km||Gc)&&q("div",{className:"ri-modelSwitcher",style:{top:`${Co((fi?1:0)+(Ht?1:0)+(ya?1:0)+(jn?1:0)+(rd?1:0)+(Kn?1:0))}px`},role:"group","aria-label":"Switch model",children:je.map(g=>q("button",{type:"button",className:`ri-modelSwitcherButton ${ke(g)===be?"ri-modelSwitcherButton--active":""}`,onClick:()=>Gc?Gc(ke(g)):km?.(g.url),title:`Switch to ${g.label||ms(g.url)}`,"aria-pressed":ke(g)===be,children:g.label||ms(g.url)},ke(g)))}),(Eu||Wf||ui||or&&ur)&&_n("div",{className:`ri-bottomStack ${Xf?"ri-bottomStack--aboveButtons":""} ${Eu?"ri-bottomStack--annotationFilters":""}`,children:[Eu&&q(y0,{categories:ZS,selected:YS,disabled:!!it,onChange:eC}),ui&&q(x0,{onCancel:ui.onCancel}),or&&ur&&q(w0,{label:ur.size===1?Jt("isolatedObject",{name:(()=>{let[g]=ur;return Me[g]?.label??g})()}):Jt("isolatedObjects",{count:ur.size}),onShowAll:()=>Ku(null)}),Wf&&q(S0,{groups:ca,activeVariants:qc,onSelect:lS})]}),Xf&&_n("div",{className:"ri-buttonContainer",children:[q("div",{className:"ri-tourControls",children:me&&Du.length>0&&q(C0,{count:Du.length,active:ho,index:KS,navigating:QS,onStart:tC,onPrevious:nC,onNext:rC,onStop:oC})}),_n("div",{className:"mv-rightControls",children:[He&&Os.supported&&q(M0,{fullscreen:Os,disabled:!!it}),Ae&&q("button",{className:"mv-resetButton",onClick:nd,disabled:!!it,title:Jt("resetCameraView"),children:q(yD,{})}),q(P0,{open:pS,current:uo,disabled:!!it,onSelect:Ps,onToggle:()=>Jm(g=>!g)}),he&&q(k0,{menu:_C,recording:!!it,hasScene:!!Ne.current,canCaptureImage:Bn||ai==="webgpu",canRecord:Xe&&lr&&!Bs,hasCinematic:!!Kn,hasMultipleModels:!!(je&&je.length>=2)})]})]}),bo&&q(R0,{x:gM,y:bM,form:qS,setForm:Ou,onOk:iC,onCancel:aC})]}),X&&Ut&&q(Hp,{colorPicker:Ut,onClose:ug,savedHex:dg,itemMaterials:sr,setItemMaterials:ia}),X&&ba&&q(Gp,{triggerFileUpload:pg,materialPopup:ba,textureUrl:Eg,clearTexture:mg,canPlaceImage:Dg,offset:Tg,rotationDegrees:Lg,onOffsetChange:Bg,onRotationChange:jg,isPositioning:_g,onEndPositioning:Ng})]}),Ks&&di&&wo?q(fw,{product:un.product,options:Ks,onSelectionsChange:JC,top:Re?56:12},wo):null,Re&&q("div",{className:"ri-viewerRight",inert:t.status!=="ready",children:ie?ie({objectBindings:Me,onAction:Xs,onFocus:xg,onHover:iu}):q(Kp,{objectBindings:Me,onAction:Xs,onFocus:xg,onHover:iu,isolatedKeys:ur,onIsolate:or?ZC:void 0})}),Xt&&q(dw,{controlsRef:Le,enabled:t.status==="ready",opacity:bn,moveSensitivity:Et,position:Ct})]})}import{useState as Lc}from"react";import{ArrowRight as kD,ChevronRight as RD,Download as AD}from"lucide-react";import{jsx as st,jsxs as ht}from"react/jsx-runtime";function _c(e){return e===void 0?"Not set":JSON.stringify(e)}var vm={changes:"Changes only",all:"All objects",added:"Added",removed:"Removed",modified:"Modified",unchanged:"Unchanged",ambiguous:"Unmatched"},H0={all:"All categories",identity:"Identity",appearance:"Appearance",transform:"Transform",visibility:"Visibility",data:"Data",behavior:"Behavior"};function G0({change:e}){return ht("div",{className:"ri-semanticPanel__change",children:[st("code",{title:e.path,children:e.path}),ht("span",{children:[st("del",{title:_c(e.before),children:_c(e.before)}),st(kD,{size:11,"aria-hidden":"true"}),st("ins",{title:_c(e.after),children:_c(e.after)})]})]})}function V4({report:e,selected:t,onSelect:n,onClear:r,matchBy:o,onMatchByChange:i,showOutlines:s,onShowOutlinesChange:l}){let[c,u]=Lc(!0),[p,m]=Lc(""),[a,f]=Lc("changes"),[d,b]=Lc("all"),h=e.objects.filter(v=>(a==="all"||(a==="changes"?v.status!=="unchanged":v.status===a))&&(d==="all"||v.changes.some(S=>S.category===d))&&`${v.label} ${v.identity}`.toLowerCase().includes(p.toLowerCase())),w=()=>{let v=URL.createObjectURL(new Blob([JSON.stringify(e,null,2)],{type:"application/json"})),S=document.createElement("a");S.href=v,S.download="configuration-comparison.json",S.click(),setTimeout(()=>URL.revokeObjectURL(v),1e3)};return ht("aside",{className:"ri-semanticPanel","aria-label":"Configuration comparison",onPointerDown:v=>v.stopPropagation(),children:[ht("button",{className:"ri-semanticPanel__heading",type:"button","aria-expanded":c,onClick:()=>u(!c),children:[st(RD,{size:13,"aria-hidden":"true",className:c?"ri-semanticPanel__chevron--open":void 0}),"Changes",ht("span",{className:"ri-semanticPanel__counts",children:[ht("span",{"data-status":"added",title:`${e.counts.added} added`,children:["+",e.counts.added]}),ht("span",{"data-status":"removed",title:`${e.counts.removed} removed`,children:["\u2212",e.counts.removed]}),ht("span",{"data-status":"modified",title:`${e.counts.modified} modified`,children:["~",e.counts.modified]})]})]}),c&&ht("div",{className:"ri-semanticPanel__body",children:[i&&ht("details",{children:[st("summary",{children:"Matching"}),ht("label",{children:["Match by",ht(Pt,{"aria-label":"Match objects by",value:typeof o=="object"?"metadata":o??"modelObjectId",onChange:v=>i(v.target.value==="metadata"?{metadataKey:"partId"}:v.target.value),children:[st("option",{value:"modelObjectId",children:"Model object ID"}),st("option",{value:"id",children:"Binding ID"}),st("option",{value:"metadata",children:"Metadata value"})]})]}),typeof o=="object"&&ht("label",{children:["Key",st("input",{"aria-label":"Comparison metadata key",value:o.metadataKey,onChange:v=>i({metadataKey:v.target.value})})]})]}),st("input",{className:"ri-semanticPanel__search","aria-label":"Search comparison",placeholder:"Filter objects",value:p,onChange:v=>m(v.target.value)}),ht("div",{className:"ri-semanticPanel__filters",children:[st(Pt,{"aria-label":"Filter comparison status",value:a,onChange:v=>f(v.target.value),children:Object.keys(vm).map(v=>st("option",{value:v,children:vm[v]},v))}),st(Pt,{"aria-label":"Filter change category",value:d,onChange:v=>b(v.target.value),children:Object.keys(H0).map(v=>st("option",{value:v,children:H0[v]},v))})]}),ht("div",{className:"ri-semanticPanel__rows",children:[h.map(v=>ht("div",{className:"ri-semanticPanel__row","data-status":v.status,children:[ht("button",{type:"button","aria-pressed":t===v.id,onClick:()=>n(v),children:[st("span",{children:v.label}),st("small",{children:vm[v.status]})]}),t===v.id&&ht("div",{className:"ri-semanticPanel__details",children:[v.message&&st("p",{children:v.message}),v.changes.map(S=>st(G0,{change:S},S.path)),!v.changes.length&&!v.message&&st("p",{children:v.status==="unchanged"?"No authored changes.":`Object ${v.status}.`})]})]},v.id)),!h.length&&st("p",{className:"ri-semanticPanel__empty",children:"No matching objects."})]}),e.sceneChanges.length>0&&ht("details",{children:[ht("summary",{children:["Scene changes (",e.sceneChanges.length,")"]}),st("div",{className:"ri-semanticPanel__details",children:e.sceneChanges.map(v=>st(G0,{change:v},v.path))})]}),ht("div",{className:"ri-semanticPanel__footer",title:"Compares authored bindings and settings. Geometry changes inside model files are not detected.",children:[ht("label",{className:"ri-semanticPanel__outlineToggle",children:[st("input",{type:"checkbox",checked:s,onChange:v=>l(v.target.checked)}),"Outlines"]}),t&&r&&st("button",{type:"button",onClick:r,children:"Clear focus"}),ht("button",{type:"button",onClick:w,children:[st(AD,{size:12,"aria-hidden":"true"}),"Report"]})]})]})]})}import{Vector3 as Bc}from"three";var fs=1e-6;function $4(){let e=[null,null],t=0,n=!1,r=new Bc,o=new Bc,i=new Bc,s=new Bc,l=(u,p)=>{let m=e[u],a=e[p];if(!m||!a)return;m.controls.getPosition(r,!1),m.controls.getTarget(i,!1),a.controls.getPosition(o,!1),a.controls.getTarget(s,!1);let f=m.controls.camera.zoom,d=m.controls.camera.fov,b=typeof d=="number"&&typeof a.controls.camera.fov=="number"&&Math.abs(d-a.controls.camera.fov)>=fs;if(!(r.distanceToSquared(o)<fs&&i.distanceToSquared(s)<fs&&Math.abs(f-a.controls.camera.zoom)<fs&&!b)){n=!0;try{b&&(a.controls.camera.fov=d,a.controls.camera.updateProjectionMatrix?.()),Math.abs(f-a.controls.camera.zoom)>=fs&&a.controls.zoomTo(f,!1),a.controls.setLookAt(r.x,r.y,r.z,i.x,i.y,i.z,!1)}finally{n=!1}a.invalidate()}},c=u=>{n||(u===t?l(u,1-u):l(t,u))};return{attach(u,p,m){let a=e[u];if(a?.controls===p){a.invalidate=m;return}a?.detach();let f=()=>c(u),d=()=>{t=u},b=Gg(p,d);p.addEventListener("update",f),p.addEventListener("controlstart",d),e[u]={controls:p,invalidate:m,detach:()=>{b(),p.removeEventListener("update",f),p.removeEventListener("controlstart",d)}},l(t,1-t)},setLeader(u){t=u},get leader(){return t},detach(){e.forEach(u=>u?.detach()),e[0]=e[1]=null}}}import{Fragment as OD,jsx as ym,jsxs as W0}from"react/jsx-runtime";var jc=.05,U0=.2,$0=e=>Math.min(Math.max(Number.isFinite(e)?e:.5,0),1);function q4({split:e,onSplitChange:t,labels:n,containerRef:r,beforeAction:o}){let i=oe(),s=m=>{let a=r.current?.getBoundingClientRect();a&&a.width>0&&t($0((m-a.left)/a.width))},l=m=>{m.preventDefault(),m.stopPropagation(),m.currentTarget.setPointerCapture(m.pointerId),m.currentTarget.focus(),s(m.clientX)},c=m=>{m.currentTarget.hasPointerCapture(m.pointerId)&&s(m.clientX)},u=m=>{let a={ArrowLeft:e-jc,ArrowDown:e-jc,ArrowRight:e+jc,ArrowUp:e+jc,PageDown:e-U0,PageUp:e+U0,Home:0,End:1}[m.key];a!==void 0&&(m.preventDefault(),m.stopPropagation(),t($0(a)))},p=Math.round(e*100);return W0(OD,{children:[W0("span",{className:"ri-compare__label ri-compare__label--before",hidden:e<.08,children:[n[0],o]}),ym("span",{className:"ri-compare__label ri-compare__label--after",hidden:e>.92,children:n[1]}),ym("div",{className:"ri-compare__divider",role:"slider",tabIndex:0,"aria-label":i("compareDivider"),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":p,"aria-valuetext":i("compareDividerValue",{before:n[0],after:n[1],percent:p,rest:100-p}),onPointerDown:l,onPointerMove:c,onKeyDown:u,children:ym("span",{className:"ri-compare__handle","aria-hidden":"true"})})]})}export{Ml as a,vM as b,Py as c,Vy as d,dv as e,Kh as f,Cd as g,nm as h,nE as i,$w as j,pv as k,fv as l,O0 as m,_d as n,kl as o,CD as p,V4 as q,$4 as r,$0 as s,q4 as t,tT as u,AM as v};