@neurodyn/room-viewer 0.1.0 → 0.1.1

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.
@@ -1593,6 +1593,10 @@ Defaulting to \`null\`.`));let u=gQ(a,c)?a:null,d=gN(u)?s(u,c):void 0;return(0,e
1593
1593
  position: static;
1594
1594
  }
1595
1595
 
1596
+ .sticky {
1597
+ position: sticky;
1598
+ }
1599
+
1596
1600
  .inset-0 {
1597
1601
  inset: calc(var(--spacing) * 0);
1598
1602
  }
@@ -7237,4 +7241,4 @@ ${O}
7237
7241
  if (coverage < 0.01) discard;
7238
7242
  diffuseColor = vec4(1.0, 1.0, 1.0, coverage);
7239
7243
  `)},s.customProgramCacheKey=()=>"wall-panel-exterior-outline-v1",{mask:t,maskMaterial:r,maskModel:n,maskScene:i,material:s,resolution:a,radius:o,clearColor:new i4.Q1f}},[e]);return(0,eu.useLayoutEffect)(()=>Sp(r.material,t,{shading:!1}),[r,t]),(0,eu.useLayoutEffect)(()=>()=>{r.mask.dispose(),r.maskMaterial.dispose(),r.material.dispose()},[r]),(0,ec.jsx)("mesh",{material:r.material,frustumCulled:!1,renderOrder:3,raycast:()=>{},onBeforeRender:(t,n,i)=>{let a=t.getRenderTarget(),o=t.getActiveCubeFace(),s=t.getActiveMipmapLevel(),l=t.autoClear,c=t.getClearAlpha();t.getClearColor(r.clearColor),t.getDrawingBufferSize(r.resolution);let{x:u,y:d}=r.resolution;(r.mask.width!==u||r.mask.height!==d)&&r.mask.setSize(u,d),r.radius.value=2*t.getPixelRatio(),e.updateWorldMatrix(!0,!0),r.maskModel.matrix.copy(e.matrixWorld);try{t.autoClear=!0,t.setClearColor(0,0),t.setRenderTarget(r.mask),t.render(r.maskScene,i)}finally{t.setRenderTarget(a,o,s),t.setClearColor(r.clearColor,c),t.autoClear=l}},children:(0,ec.jsx)("planeGeometry",{args:[2,2]})})}function SB({source:e,patch:t,isPointVisible:r,outlined:n}){let{model:i,materials:a}=(0,eu.useMemo)(()=>{let t=e.clone(!0),r=SA(t);return{model:t,materials:r}},[e]);return(0,eu.useLayoutEffect)(()=>{let e=a.map(e=>Sp(e,t));return i.traverse(e=>{e instanceof i4.eaF&&(e.raycast=function(e,t){let n=[];i4.eaF.prototype.raycast.call(this,e,n),t.push(...n.filter(e=>!r||r(e.point)))})}),()=>e.forEach(e=>e())},[r,a,i,t]),(0,eu.useLayoutEffect)(()=>()=>a.forEach(e=>e.dispose()),[a]),(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("primitive",{object:i,dispose:null}),n&&(0,ec.jsx)(SI,{model:i,patch:t})]})}function Sk({size:e,patch:t,isPointVisible:r,onClick:n}){let[i,a]=(0,eu.useState)(!1),o=(0,eu.useMemo)(()=>{let e=document.createElement("canvas");e.width=e.height=256;let t=e.getContext("2d");if(t.lineJoin="miter",t.lineCap="round",t.beginPath(),i)t.rect(16,16,224,224);else for(let[e,r,n,i]of[[16,16,1,1],[240,16,-1,1],[16,240,1,-1],[240,240,-1,-1]])t.moveTo(e+22*n,r),t.lineTo(e,r),t.lineTo(e,r+22*i);t.strokeStyle="rgba(255,255,255,.80)",t.lineWidth=5,t.stroke(),t.strokeStyle=i?"#59636d":"rgba(70,80,90,.60)",t.lineWidth=2,t.stroke(),t.beginPath(),t.arc(128,128,29,0,2*Math.PI),t.fillStyle=i?"#ffffff":"#f5f6f7",t.fill(),t.strokeStyle="rgba(35,45,55,.32)",t.lineWidth=2,t.stroke(),t.beginPath(),t.moveTo(117,128),t.lineTo(139,128),t.moveTo(128,117),t.lineTo(128,139),t.strokeStyle="#35414d",t.lineWidth=3,t.stroke();let r=new i4.GOR(e);return r.colorSpace="srgb",r},[i]),s=(0,eu.useMemo)(()=>new i4.V9B({map:o,transparent:!0,depthWrite:!1,toneMapped:!1}),[o]);return(0,eu.useLayoutEffect)(()=>{let e=Sp(s,t,{shading:!1});return s.alphaToCoverage=!1,e},[s,t]),(0,eu.useLayoutEffect)(()=>()=>{s.dispose(),o.dispose()},[s,o]),(0,ec.jsx)("mesh",{material:s,renderOrder:2,onPointerOver:()=>a(!0),onPointerOut:()=>a(!1),raycast:function(e,t){let n=[];i4.eaF.prototype.raycast.call(this,e,n),t.push(...n.filter(e=>!r||r(e.point)))},onPointerDown:e=>{e.stopPropagation(),e.nativeEvent.stopPropagation()},onClick:e=>{e.stopPropagation(),n()},children:(0,ec.jsx)("planeGeometry",{args:[e,e]})})}function ST({isPointVisible:e,visible:t,dragging:r,panelKey:n,number:i,size:a,depth:o,patch:s}){let l=Em(),{t:c}=tc(),{camera:u,gl:d}=pF(),h=(0,eu.useRef)(null),p=(0,eu.useRef)(null),A=(0,eu.useMemo)(()=>new i4.Pq0,[]),f=(0,eu.useMemo)(()=>{let e=document.createElement("canvas");e.width=e.height=128;let t=e.getContext("2d");for(let e of(t.beginPath(),t.arc(64,64,61,0,2*Math.PI),t.fillStyle="#f5f6f7",t.fill(),t.strokeStyle="rgba(35,45,55,.32)",t.lineWidth=2,t.stroke(),t.fillStyle="#35414d",[40,64,88]))t.beginPath(),t.arc(e,64,5,0,2*Math.PI),t.fill();let r=new i4.GOR(e);return r.colorSpace="srgb",r},[]),g=(0,eu.useMemo)(()=>new i4.V9B({map:f,transparent:!0,depthWrite:!1,toneMapped:!1}),[f]);(0,eu.useLayoutEffect)(()=>{let e=Sp(g,s,{shading:!1});return g.alphaToCoverage=!1,e},[g,s]),(0,eu.useLayoutEffect)(()=>()=>{g.dispose(),f.dispose()},[g,f]),pN(()=>{h.current&&p.current&&(h.current.getWorldPosition(A),p.current.tabIndex=!r&&(!e||e(A))?0:-1)});let m=()=>{if(!h.current)return;A.set(.05,-.05,0),h.current.localToWorld(A).project(u);let e=d.domElement.getBoundingClientRect();l.openMenu(n,{x:e.left+(A.x+1)*e.width/2,y:e.top+(1-A.y)*e.height/2})};return(0,ec.jsxs)("group",{ref:h,position:[a/2-a/12-.05,-a/2+a/20+.05,o+.002],children:[(0,ec.jsx)("mesh",{name:"panel-actions",material:g,visible:t&&!r,renderOrder:3,raycast:function(n,i){if(!t||r)return;let a=[];i4.eaF.prototype.raycast.call(this,n,a),i.push(...a.filter(t=>t.uv&&.48>=Math.hypot(t.uv.x-.5,t.uv.y-.5)&&(!e||e(t.point))))},onPointerDown:e=>{e.stopPropagation(),e.nativeEvent.stopPropagation()},onPointerUp:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),m()},children:(0,ec.jsx)("planeGeometry",{args:[.1,.1]})}),(0,ec.jsx)(f_,{style:{pointerEvents:"none"},children:(0,ec.jsx)("button",{ref:p,type:"button","data-panel-key":n,className:"sr-only","aria-label":c("wallPanel.panelActions",{number:i}),"aria-haspopup":"menu",onFocus:()=>l.select(n),onClick:e=>{e.stopPropagation(),m()}})})]})}function SR({glbUrl:e,position:t,quaternion:r,materialPatch:n,isPointVisible:i,onDragStart:a,onDrag:o,onDragEnd:s}){let{data:l}=rK({...Eh(e),enabled:!0,suspense:!0,throwOnError:rH,placeholderData:void 0},rM,void 0),c=Em(),{room:u}=Ee(),[d,h]=(0,eu.useState)(null),{resourceRef:p,sceneGestures:{setIsDragging:A}}=En(),f=Ei("isDragging"),{gl:g}=pF(),m=f?"grabbing":d?.action?"pointer":d?"grab":"auto";(0,eu.useLayoutEffect)(()=>{let e=g.domElement.style.cursor;return g.domElement.style.cursor=m,()=>{g.domElement.style.cursor=e}},[g,m]);let v=(e,t)=>h(r=>r?.key===e&&r.action===t?r:{key:e,action:t}),b=(0,eu.useRef)(null),y=l.width,w=`${u.id}:${c.generation}`,[x,C]=(0,eu.useState)({size:y,roomKey:w,x:0,y:0});if(x.roomKey!==w)C({size:y,roomKey:w,x:0,y:0});else if(x.size!==y){let e=c.panels.reduce((e,t)=>({minX:Math.min(e.minX,t.x),maxX:Math.max(e.maxX,t.x),minY:Math.min(e.minY,t.y),maxY:Math.max(e.maxY,t.y)}),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0}),t=x.size-y;C({size:y,roomKey:w,x:x.x+(e.minX+e.maxX)/2*t,y:x.y+(e.minY+e.maxY)/2*t})}(0,eu.useLayoutEffect)(()=>()=>A(!1),[A]);let E=(e,t=!1)=>{let r=b.current;r&&r.pointerId===e.pointerId&&(e.stopPropagation(),b.current=null,e.target.releasePointerCapture(e.pointerId),A(!1),s(),t||r.moved||(c.select(r.key),c.closeMenu()))};return(0,ec.jsx)("group",{ref:p,position:t,quaternion:r,onPointerMissed:c.clearSelection,children:(0,ec.jsxs)("group",{position:[x.x,x.y,0],children:[c.panels.map((e,t)=>{let r=c.options.find(t=>t.material.hid===e.materialId)?.model??l;return(0,ec.jsxs)("group",{position:[e.x*y,e.y*y,0],onPointerOver:t=>{t.stopPropagation(),v(Ep(e),"panel-actions"===t.object.name)},onPointerOut:()=>h(null),onPointerDown:t=>{0===t.button&&!b.current&&(t.stopPropagation(),t.nativeEvent.stopPropagation(),b.current={x:t.clientX,y:t.clientY,key:Ep(e),moved:!1,pointerId:t.pointerId},t.target.setPointerCapture(t.pointerId),A(!0),a())},onPointerMove:t=>{v(Ep(e),"panel-actions"===t.object.name);let r=b.current;r&&r.pointerId===t.pointerId&&(t.stopPropagation(),!r.moved&&Math.hypot(t.clientX-r.x,t.clientY-r.y)>4&&(r.moved=!0,c.select(r.key),c.closeMenu()),r.moved&&o())},onPointerUp:e=>E(e),onPointerCancel:e=>E(e,!0),children:[(0,ec.jsx)(ST,{panelKey:Ep(e),number:t+1,size:y,depth:r.depth,patch:n,isPointVisible:i,dragging:f,visible:c.selected===Ep(e)||d?.key===Ep(e)}),(0,ec.jsx)("group",{"rotation-z":-e.turns*Math.PI/2,children:(0,ec.jsx)("group",{position:r.mountingOffset,children:(0,ec.jsx)(SB,{outlined:c.selected===Ep(e)||d?.key===Ep(e),source:r.scene,patch:n,isPointVisible:i})})})]},Ep(e))}),c.selected&&c.neighbors.map(e=>(0,ec.jsx)("group",{position:[e.x*y,e.y*y,.002],children:(0,ec.jsx)(Sk,{size:y,patch:n,isPointVisible:i,onClick:()=>c.add(e)})},Ep(e)))]})})}function SD(e){let{glbUrl:t}=Et();return t?(0,ec.jsx)(SR,{...e,glbUrl:t}):null}let SP={"modelled-resource":function({position:e,quaternion:t,materialPatch:r,onDrag:n,onDragEnd:i,onDragStart:a}){let{type:o}=C6(),{glbUrl:s}=Et();return s?"rotate-on-floor"===CG[o].manipulation?(0,ec.jsx)(Sy,{glbUrl:s,position:e,quaternion:t,materialPatch:r}):(0,ec.jsx)(fw,{autoTransform:!1,onDrag:n,onDragEnd:i,onDragStart:a,children:(0,ec.jsx)(Sy,{glbUrl:s,position:e,quaternion:t,materialPatch:r})}):null},"textured-resource":function({position:e,quaternion:t,materialPatch:r,onDrag:n,onDragEnd:i,onDragStart:a}){let{src:o,setLoadError:s}=Et();return o?(0,ec.jsx)(EW,{onError:()=>s("artwork-load-failed"),children:(0,ec.jsx)(fw,{autoTransform:!1,onDrag:n,onDragEnd:i,onDragStart:a,children:(0,ec.jsx)(SM,{src:o,position:e,quaternion:t,materialPatch:r})})}):null}};function S_(e){e.setCrossOrigin("anonymous")}let SL=E$(3,(e,t)=>{pU.clear(i4.Tap,e),t.dispose()}),SF=E0(SL,e=>pU.clear(i4.Tap,e));function SN(){var e;let t,{room:r}=Ee(),n=pF(e=>e.scene),i=(e=Cj(r),SF.request(e),t=pU(i4.Tap,e,S_),(0,eu.useLayoutEffect)(()=>(SF.clearPassed(e),SL.hold(e,t),()=>SL.release(t)),[e,t]),t);return(0,eu.useLayoutEffect)(()=>(i.colorSpace="srgb",n.background=i,()=>{n.background===i&&(n.background=null)}),[n,i]),null}function SO({plane:e,geometry:t,setPlaneRef:r}){let n={planeId:e.id,kind:e.kind};return(0,ec.jsx)("mesh",{ref:t=>r(e,t),geometry:t,userData:n,children:(0,ec.jsx)("meshBasicMaterial",{visible:!1,side:2})})}let SQ=(0,eu.memo)(()=>{let e,{type:t}=C6(),r=Em(),{setLoadError:n}=Et(),i="panel-group"===(e=CG[t]).manipulation?SD:SP[e.identity],{room:a}=Ee(),{patchSceneLoad:o,resourceRef:s}=En(),{gl:l,size:c,camera:u,invalidate:d,raycaster:h,pointer:p}=pF(),A=(0,eu.useMemo)(()=>a.scene??ED(),[a.scene]),f=CH(t),g=function(e){let[t,r]=(0,eu.useState)(null);return(0,eu.useEffect)(()=>{let t=new AbortController,n=null;return E4.acquire(e,{neutralShadingPng:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGNoaGgAAAMEAYFL09IQAAAAAElFTkSuQmCC",signal:t.signal}).then(i=>{t.signal.aborted?E4.release(i):(n=i,r({request:e,state:{preparation:i,failed:!1}}))},n=>{t.signal.aborted||(console.error(n),r({request:e,state:{preparation:null,failed:!0}}))}),()=>{t.abort(),n&&E4.release(n)}},[e]),t?.request===e?t.state:E9}((0,eu.useMemo)(()=>({roomId:a.id,scene:A,surfaces:f}),[a.id,A,f])),m=function({camera:e,invalidate:t,pointer:r,roomPreparation:{preparation:n,failed:i},raycaster:a,resourceRef:o,roomId:s,scene:l,surfaces:c}){let u=`${s}:${[...c].sort().join(",")}`,d=(0,eu.useMemo)(()=>({value:null}),[]),[h,p]=(0,eu.useReducer)(Sl,u,Ss),A=(0,eu.useRef)(null),f=(0,eu.useRef)(null),g=(0,eu.useRef)(!1),m=(0,eu.useRef)(new Map),v=(0,eu.useRef)(null),b=h.placementKey===u,y=n?.planeIdMap??null,w=n?.masks??So,x=b?h.resourcePose:null,C=(0,eu.useMemo)(()=>Sn(l,c),[l,c]),E=(0,eu.useMemo)(()=>C.map(e=>e.id),[C]),S=(0,eu.useMemo)(()=>new Map(l.planes.map(e=>{let t,r;return[e.id,(t=e.polygon3D.flatMap(e=>(function(e,t){let[r,n,i]=e;return[r*(EU(t)*(t.camera.fx/t.camera.fy)),i,-n]})(e,l)),(r=new i4.LoY).setAttribute("position",new i4.qtW(t,3)),e.polygon3D.length>=4&&r.setIndex([0,1,2,0,2,3]),r)]})),[l]);(0,eu.useEffect)(()=>()=>S.forEach(e=>e.dispose()),[S]);let M=(0,eu.useMemo)(()=>({artifactsReady:null!==y,placementReady:null!==x,prepareReady:null!==x}),[y,x]),I=0===C.length?"no-allowed-surface":i?"plane-id-map-decode":null,B=(0,eu.useCallback)((e,t)=>{t?m.current.set(e.id,t):m.current.delete(e.id)},[]);(0,eu.useEffect)(()=>()=>{d.value=null},[d,w]),(0,eu.useEffect)(()=>{p({type:"reset-placement",placementKey:u}),A.current=null,f.current=null,g.current=!1,d.value=null,v.current=null},[d,u]);let k=(0,eu.useCallback)((r,n,i=null)=>{let a,s=Se(r,n,e),l=i?(a=new i4.Pq0(...i).applyQuaternion(new i4.PTz(...s.quaternion)).add(new i4.Pq0(...s.position)),{...s,position:a.toArray()}):s;A.current=l.activePlaneId,f.current=l,g.current=!0,d.value=w.get(l.activePlaneId)?.texture??null,o.current?.position.fromArray(l.position),o.current?.quaternion.fromArray(l.quaternion),t()},[d,e,t,w,o]),T=(0,eu.useCallback)(t=>y?function({activePlaneId:e,allowedPlaneIds:t,camera:r,planeIdMap:n,planeMap:i,pointer:a,raycaster:o}){let s=new Set(t),l=[],c=new Set,u=e=>{!(null===e||c.has(e))&&s.has(e)&&(c.add(e),l.push(e))};for(let s of(u(Ez(a,n)),u(e),t.forEach(u),o.setFromCamera(a,r),l)){let e=i.get(s),t=e?o.intersectObject(e,!1)[0]:null;if(t)return t}return null}({activePlaneId:A.current,allowedPlaneIds:E,camera:e,planeIdMap:y,planeMap:m.current,pointer:t,raycaster:a}):null,[E,e,y,a]);(0,eu.useEffect)(()=>{if(!y||null!==x)return;let r=function({allowedPlanes:e,camera:t,planeMap:r}){let n=e[0],i=n?r.get(n.id):null;return i?Se(i,function(e){let t=e.geometry.attributes.position,r=new i4.Pq0;for(let e=0;e<t.count;e++)r.add(new i4.Pq0(t.getX(e),t.getY(e),t.getZ(e)));return r.divideScalar(Math.max(1,t.count))}(i),t):null}({allowedPlanes:C,camera:e,planeMap:m.current});r&&(A.current=r.activePlaneId,f.current=r,d.value=w.get(r.activePlaneId)?.texture??null,p({type:"set-resource-pose",placementKey:u,resourcePose:r}),t())},[d,C,e,t,w,u,y,x]);let R=(0,eu.useCallback)(()=>{let t,n=T(r),i=f.current;if(!n||!i){v.current=null;return}let a=Se(n.object,n.point,e);t=new i4.PTz(...a.quaternion).invert(),v.current=new i4.Pq0(...i.position).sub(new i4.Pq0(...a.position)).applyQuaternion(t).toArray()},[e,T,r]),D=(0,eu.useCallback)(()=>{let e=T(r);e&&k(e.object,e.point,v.current)},[T,r,k]),P=(0,eu.useCallback)(()=>{v.current=null,g.current&&f.current&&(g.current=!1,p({type:"set-resource-pose",placementKey:u,resourcePose:f.current}))},[u]),_=(0,eu.useCallback)(t=>{let r,n=A.current,i=null===n?null:w.get(n);if(!i)return!1;let a=t.clone().project(e),o=function(e,t,r){if(t<0||t>1||r<0||r>1)return 0;let n=t*e.width-.5,i=r*e.height-.5,a=Math.floor(n),o=Math.floor(i),s=EZ(a,e.width-1),l=EZ(o,e.height-1),c=EZ(a+1,e.width-1),u=EZ(o+1,e.height-1),d=n-Math.floor(n),h=i-Math.floor(i);return((e.data[l*e.width+s]*(1-d)+e.data[l*e.width+c]*d)*(1-h)+(e.data[u*e.width+s]*(1-d)+e.data[u*e.width+c]*d)*h)/255}(i,(a.x+1)*.5,(1-a.y)*.5);return(r=EZ((o-.4)/.29999999999999993,1))*r*(3-2*r)>.001},[e,w]);return{isPointerOnSurface:(0,eu.useCallback)(e=>{let t=y?Ez(e,y):null;return null!==t&&E.includes(t)},[E,y]),activeMaskTextureUniform:d,isPointVisible:_,failure:I,handleDrag:D,handleDragEnd:P,handleDragStart:R,planeGeometries:S,readiness:M,resourcePose:x,setPlaneRef:B}}({camera:u,invalidate:d,pointer:p,roomPreparation:g,raycaster:h,resourceRef:s,roomId:`${a.id}:${r?.generation??0}`,scene:A,surfaces:f});!function(e,t,r){let{gl:n}=pF(),{sceneGestures:{setRotation:i,setIsDragging:a}}=En();(0,eu.useEffect)(()=>{if(!e)return;let r=n.domElement,o=null,s=e=>{e.preventDefault(),e.stopImmediatePropagation()},l=()=>{let e=o;o=null,e&&r.hasPointerCapture(e.id)&&r.releasePointerCapture(e.id),e&&a(!1)},c=e=>{if(o)return void s(e);if(!e.isPrimary||0!==e.button)return;let n=r.getBoundingClientRect();t(new i4.I9Y((e.clientX-n.left)/n.width*2-1,1-(e.clientY-n.top)/n.height*2))&&(s(e),o={id:e.pointerId,startX:e.clientX,lastX:e.clientX,rotating:!1},r.setPointerCapture(e.pointerId),a(!0))},u=e=>{if(!o||o.id!==e.pointerId||(s(e),!o.rotating&&5>Math.abs(e.clientX-o.startX)))return;o.rotating=!0;let t=e.clientX-o.lastX;o.lastX=e.clientX,i(e=>e+.5*t)},d=e=>{o?.id===e.pointerId&&(s(e),l())};return r.addEventListener("pointerdown",c,!0),r.addEventListener("pointermove",u,!0),r.addEventListener("pointerup",d,!0),r.addEventListener("pointercancel",d,!0),r.addEventListener("lostpointercapture",d,!0),window.addEventListener("blur",l),()=>{r.removeEventListener("pointerdown",c,!0),r.removeEventListener("pointermove",u,!0),r.removeEventListener("pointerup",d,!0),r.removeEventListener("pointercancel",d,!0),r.removeEventListener("lostpointercapture",d,!0),window.removeEventListener("blur",l),l()}},[e,n,t,r,a,i])}("rotate-on-floor"===CG[t].manipulation,m.isPointerOnSurface,a.id);let v=(0,eu.useMemo)(()=>new i4.I9Y(1,1),[]),b=g.preparation?.lightingTexture??null,y=(0,eu.useMemo)(()=>b&&{lightingTexture:b,viewport:v,activeMaskTextureUniform:m.activeMaskTextureUniform,maxRoomGain:1.1},[m.activeMaskTextureUniform,b,v]);(0,eu.useLayoutEffect)(()=>{u instanceof i4.ubm&&(u.fov=A.camera.fovYDeg),u.position.set(0,0,0),u.up.set(0,0,1),u.lookAt(0,1,0),u.updateProjectionMatrix(),d()},[u,d,A.camera.fovYDeg]),(0,eu.useLayoutEffect)(()=>{l.getDrawingBufferSize(v),v.set(Math.max(1,v.x),Math.max(1,v.y))},[l,c.height,c.width,v]);let{artifactsReady:w,placementReady:x,prepareReady:C}=m.readiness,E=m.failure;return(0,eu.useEffect)(()=>{o({artifactsReady:w,placementReady:x,prepareReady:C})},[w,o,x,C]),(0,eu.useEffect)(()=>{if(E){if("no-allowed-surface"===E){Sa({planes:A.planes,source:"room-scene",surfaces:f}),n("room-missing-surface");return}!function({failure:e,planes:t,resourceType:r}){St(t)}({failure:E,planes:A.planes,resourceType:t}),n("room-load-failed")}},[E,A.planes,n,f,t]),(0,ec.jsxs)(ec.Fragment,{children:[m.resourcePose&&y&&(0,ec.jsx)(i,{position:m.resourcePose.position,quaternion:m.resourcePose.quaternion,materialPatch:y,isPointVisible:m.isPointVisible,onDrag:m.handleDrag,onDragEnd:m.handleDragEnd,onDragStart:m.handleDragStart}),A.planes.map(e=>(0,ec.jsx)(SO,{plane:e,geometry:m.planeGeometries.get(e.id),setPlaneRef:m.setPlaneRef},e.id)),(0,ec.jsx)(EW,{onError:()=>n("room-load-failed"),children:(0,ec.jsx)(SN,{})})]})});SQ.displayName="Room";let SU=["room-viewer","layout-config"],Sz=[Math.PI/2,0,0];function SG({onReadyChange:e}){return(0,eu.useLayoutEffect)(()=>(e?.(!0),()=>e?.(!1)),[e]),null}function SH({onReadyChange:e}){var t;let r=rK({queryKey:SU,queryFn:()=>x0(),staleTime:1/0},rM,void 0);if(r.isPending)return null;let n=(t=r.data,t?.internal?.links?.find(e=>"hdr_neutral"===e.type)?.url?.trim()||void 0);return(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(gb,{files:n?[n]:void 0,preset:n?void 0:"warehouse",environmentRotation:Sz,environmentIntensity:n?.5:.9}),(0,ec.jsx)(SG,{onReadyChange:e})]})}function Sj({onReadyChange:e}){return(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(gb,{files:["https://cdn.neurodyn.ai/assets/hdr/neutral.hdr"],environmentRotation:Sz}),(0,ec.jsx)(SG,{onReadyChange:e})]})}let SV=(0,eu.memo)(({lighting:e,onReadyChange:t})=>"remote-neutral-hdr"===e?(0,ec.jsx)(SH,{onReadyChange:t}):(0,ec.jsx)(Sj,{onReadyChange:t}));SV.displayName="RoomEnvironment";let Sq=(0,eu.memo)(({ref:e,target:t})=>{let{camera:r,gl:n}=pF();return(0,eu.useImperativeHandle)(e,()=>({getScreenPoint(){if(!t.current)return null;let e=t.current.getWorldPosition(new i4.Pq0).project(r),i=n.domElement.getBoundingClientRect();return{x:i.left+(e.x+1)*i.width/2,y:i.top+(1-e.y)*i.height/2}}}),[r,n,t]),null});function SW(e,t){for(let r of Object.keys(t))if(t[r]!==e[r])return{...e,...t};return e}function SK(e){return Object.entries(e).every(([e,t])=>"shadersReady"===e||t)}Sq.displayName="SceneFocusBridge";let SJ={placementReady:!1,prepareReady:!1,artifactsReady:!1,assetsReady:!1},SY=(0,eu.memo)(({sceneReady:e,onShadersReadyChange:t})=>{let r=pL(),n=(0,eu.useRef)("holding"),i=El(t);return(0,eu.useEffect)(()=>{if(n.current="holding",!e)return void i.current(!1);let t=!0,{camera:a,gl:o,scene:s}=r.getState();s.matrixWorldAutoUpdate&&s.updateMatrixWorld(),null===a.parent&&a.matrixWorldAutoUpdate&&a.updateMatrixWorld();let l=()=>{t&&(t=!1,n.current="compiled",r.getState().invalidate())},c=()=>{t&&(t=!1,n.current="drawing",i.current(!0))},u=setTimeout(()=>{console.warn("Room viewer scene shaders did not finish compiling ahead in time"),l()},1e4);return o.domElement?.addEventListener("webglcontextlost",c),Promise.resolve().then(()=>o.compileAsync(s,a)).catch(e=>{console.error("Room viewer scene shaders failed to compile ahead",e)}).then(l),()=>{t=!1,clearTimeout(u),o.domElement?.removeEventListener("webglcontextlost",c)}},[i,e,r]),pN(({camera:e,gl:t,scene:r})=>{"holding"!==n.current&&(t.render(r,e),"compiled"===n.current&&(n.current="drawing",i.current(!0)))},1),null});SY.displayName="ShaderPrecompile";let SX=(0,eu.memo)(({sceneLightingReady:e})=>{let{sceneLoad:t}=Er(),{patchSceneLoad:r}=En(),n=(0,eu.useCallback)(e=>{r({shadersReady:e})},[r]);return(0,ec.jsx)(SY,{sceneReady:e&&SK(t),onShadersReadyChange:n})});SX.displayName="SceneShaderPrecompile";let SZ={position:[0,0,0],up:[0,0,1],near:.01,far:100},S$=(0,eu.memo)(({className:e,ref:t,captureRef:r,contentKey:n,introductionTarget:i,focusRef:a,onSizeChange:o,...s})=>{let{type:l}=C6(),{glbUrl:c}=Et(),u=Em(),d=u?.isBaseModelReady??!0,{materialSource:h}=EN(l),{room:p}=Ee(),{patchSceneLoad:A}=En(),f=gx(e=>e.active),[g,m]=(0,eu.useState)(!1),v=EU((0,eu.useMemo)(()=>p.scene??ED(),[p.scene])),b=(0,eu.useRef)(null),y=(0,eu.useRef)(!1),w=(0,eu.useCallback)(e=>{(b.current=e,"function"==typeof t)?t(e):t&&(t.current=e)},[t]),x=CU("(max-width: 639px)"),{width:C,height:E}=function(e){let t,{ref:r,box:n="content-box"}=e,[{width:i,height:a},o]=(0,eu.useState)(Ev),s=(t=(0,eu.useRef)(!1),(0,eu.useEffect)(()=>(t.current=!0,()=>{t.current=!1}),[]),(0,eu.useCallback)(()=>t.current,[])),l=(0,eu.useRef)({...Ev}),c=(0,eu.useRef)(void 0);return c.current=e.onResize,(0,eu.useEffect)(()=>{if(!r.current||"u"<typeof window||!("ResizeObserver"in window))return;let e=new ResizeObserver(([e])=>{let t="border-box"===n?"borderBoxSize":"device-pixel-content-box"===n?"devicePixelContentBoxSize":"contentBoxSize",r=Eb(e,t,"inlineSize"),i=Eb(e,t,"blockSize");if(l.current.width!==r||l.current.height!==i){let e={width:r,height:i};l.current.width=r,l.current.height=i,c.current?c.current(e):s()&&o(e)}});return e.observe(r.current,{box:n}),()=>{e.disconnect()}},[n,r,s]),{width:i,height:a}}({ref:b}),S=(0,eu.useMemo)(()=>{if(!C||!E||!v)return null;let e=C,t=E;return x?e=(t=E)*v:C/E>v?e=E*v:t=C/v,{width:e,height:t}},[C,E,v,x]);return(0,eu.useLayoutEffect)(()=>{S&&o?.(S.width,S.height)},[S,o]),(0,eu.useEffect)(()=>{if(!S||y.current)return;y.current=!0;let e=window.setTimeout(()=>{window.dispatchEvent(new Event("resize"))},250);return()=>{window.clearTimeout(e)}},[S]),(0,eu.useEffect)(()=>{A({layoutReady:null!==S})},[A,S]),(0,eu.useEffect)(()=>{"object-glb"===h&&A({materialReady:!!c&&d})},[c,h,d,A]),(0,eu.useEffect)(()=>{A({assetsReady:!f})},[n,f,A]),(0,ec.jsx)("div",{ref:w,className:Cp("size-full flex items-center justify-center",e),...s,children:S&&(0,ec.jsxs)(gM,{className:"touch-none bg-transparent",frameloop:"demand",camera:SZ,gl:EO,style:{width:`${S.width}px`,height:`${S.height}px`},children:[(0,ec.jsxs)(eu.Suspense,{fallback:null,children:[(0,ec.jsx)(Eq,{ref:r}),(0,ec.jsx)(eu.Suspense,{fallback:null,children:(0,ec.jsx)(SQ,{},n)}),i&&a&&(0,ec.jsx)(Sq,{ref:a,target:i})]}),(0,ec.jsx)(eu.Suspense,{fallback:null,children:(0,ec.jsx)(SV,{lighting:CG[l].lighting,onReadyChange:m})}),(0,ec.jsx)(SX,{sceneLightingReady:g})]})})});S$.displayName="CanvasWrapper";let S0=(0,eu.memo)(({captureRef:e,introduction:t,className:r,contentKey:n,...i})=>{let a,o,s,l,c=Ei("isDragging"),u=(0,eu.useRef)(null),d=(0,eu.useRef)(null),h=(0,eu.useRef)(null),p=(a=(0,eu.useRef)(null),o=(0,eu.useRef)(!1),s=(0,eu.useCallback)(()=>{null!==a.current&&cancelAnimationFrame(a.current),a.current=null},[]),l=(0,eu.useCallback)(()=>{t&&(s(),t.onCancel())},[t,s]),(0,eu.useEffect)(()=>{if(!t){o.current=!1;return}if(!t.ready){o.current&&t.onCancel();return}return a.current=requestAnimationFrame(()=>{let e=u.current,r=h.current?.getScreenPoint(),n=e?.instance.wrapperComponent,i=e?.instance.contentComponent;if(!e||!r||!n||!i)return void t.onCancel();let{scale:s,positionX:l,positionY:c}=e.instance.transformState,d=n.getBoundingClientRect(),p=Math.min(e.instance.setup.maxScale,1.28*s),A=(e,t,r)=>r<t?(t-r)/2:Math.max(t-r,Math.min(0,e)),f=A(d.width/2-(r.x-d.left-l)/s*p,d.width,i.offsetWidth*p),g=A(d.height/2-(r.y-d.top-c)/s*p,d.height,i.offsetHeight*p);o.current=!0;let m=window.matchMedia("(prefers-reduced-motion: reduce)").matches,v=performance.now(),b=r=>{let n=m?1:Math.min(1,(r-v)/700),i=(1-Math.cos(Math.PI*n))/2;e.setTransform(l+(f-l)*i,c+(g-c)*i,s+(p-s)*i,0),n<1?a.current=requestAnimationFrame(b):(a.current=null,t.onComplete())};b(v)}),()=>{s()}},[h,t,s,u]),l),A=CU("(max-width: 639px)"),f=(0,eu.useRef)(!!t);f.current=!!t;let g=(0,eu.useCallback)(()=>{A&&u.current?.centerView(void 0,f.current?0:void 0)},[A]),m=(0,eu.useRef)(n);return(0,eu.useLayoutEffect)(()=>{m.current!==n&&(m.current=n,u.current?.resetTransform(0),g())},[n,g]),(0,ec.jsx)("div",{className:Cp("relative flex items-center justify-center overflow-hidden",r),...i,onPointerDownCapture:e=>{p(),i.onPointerDownCapture?.(e)},onTouchStartCapture:e=>{p(),i.onTouchStartCapture?.(e)},onWheelCapture:e=>{p(),i.onWheelCapture?.(e)},children:(0,ec.jsx)(he,{ref:u,disabled:c,children:(0,ec.jsx)(ht,{wrapperClass:"neurodyn-rzpp-wrapper size-full!",contentClass:"neurodyn-rzpp-content h-full! min-w-full sm:max-w-full",children:(0,ec.jsx)(S$,{captureRef:e??d,contentKey:n,introductionTarget:t?.target,focusRef:h,onSizeChange:g})})})})});async function S1(e){await navigator.clipboard.writeText(e)}function S2(e,t,{fadedOutIfMountedLoaded:r=!1}={}){let[n,i]=(0,eu.useState)(r&&!e);return e&&n&&i(!1),(0,eu.useEffect)(()=>{if(e)return;let r=!0;return Promise.allSettled((t.current?.getAnimations?.()??[]).map(e=>e.finished)).then(()=>{r&&i(!0)}),()=>{r=!1}},[e,t]),!e&&n}function S3({variant:e,missingSurfaceMessage:t,open:r,portalContainer:n,showDialogCloseButton:i=!1,onOpenChange:a,onTryAgain:o,onCancel:s}){let{t:l}=tc(),c="custom-interior-missing-surface"===e||"room-missing-surface"===e,u=l(c?`missingSurface.${t}.title`:"floor.error.title"),d=c?l(`missingSurface.${t}.body`):e?l("custom-interior-processing"===e?"floor.error.processingBody":"viewer-load-failed"===e?"floor.error.loadBody":"artwork-load-failed"===e||"room-load-failed"===e?`loadError.${e}`:`accessError.${e}`):"";return(0,ec.jsx)(Cg,{open:r,onOpenChange:a,children:(0,ec.jsxs)(Cy,{portalContainer:n,showCloseButton:!1,className:"w-full max-w-85 gap-4 rounded-2xl p-6 text-center sm:max-w-85 sm:p-6",onInteractOutside:e=>{e.preventDefault()},children:[(0,ec.jsxs)("div",{className:"grid gap-1",children:[(0,ec.jsx)(Cx,{children:u}),(0,ec.jsx)(CC,{className:"typo-base-14 font-medium text-text-base",children:d})]}),(0,ec.jsxs)("div",{className:"grid gap-2",children:[o&&(0,ec.jsx)(Cf,{variant:"contrast",onClick:o,children:c?(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(CE,{"aria-hidden":"true"}),l("missingSurface.uploadAnother")]}):(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(C_,{"aria-hidden":"true"}),l("floor.error.tryAgain")]})}),s&&(0,ec.jsx)(Cf,{variant:"outline",onClick:s,children:l("floor.error.cancel")}),i&&(0,ec.jsx)(Cv,{asChild:!0,children:(0,ec.jsx)(Cf,{variant:"outline",children:l("close")})})]})]})})}function S9({rooms:e,customRooms:t,selectedRoomId:r,isInvalidFile:n,uploadRetryRequestId:i=0,showCloseButton:a=!1,onSelectRoom:o,onUploadFile:s}){let l,{t:c}=tc(),u=(0,eu.useId)(),d=(0,eu.useRef)(null);function h(e){return e.map(e=>(0,ec.jsxs)("button",{type:"button",className:"group relative aspect-[4/3] overflow-hidden rounded-2xl bg-background-base text-left transition focus-visible:ring-2 focus-visible:ring-icons-normal focus-visible:outline-hidden","aria-pressed":e.id===r,onClick:()=>o(e.id),children:[(0,ec.jsx)("img",{crossOrigin:"anonymous",src:Cj(e),alt:"",decoding:"async",className:"size-full scale-[1.02] transform-gpu object-cover transition duration-200 group-hover:scale-105"}),(0,ec.jsx)("span",{className:"typo-base-12 absolute inset-x-0 bottom-0 truncate bg-linear-to-t from-black/45 via-black/10 to-transparent px-3 py-2 text-constant-white",children:c(`rooms.${e.id}`,{defaultValue:e.name})})]},e.id))}return(0,eu.useEffect)(()=>{i>0&&d.current?.click()},[i]),(0,ec.jsxs)("section",{"aria-labelledby":"floor-interior-selection-title",className:"relative mx-auto grid h-auto min-h-0 max-h-[calc(100svh-8px)] w-full max-w-151 grid-rows-[auto_auto_minmax(0,1fr)_auto] gap-4 overflow-hidden rounded-t-2xl rounded-b-none bg-background-containers p-4 shadow-[var(--shadow-login)] sm:my-4 sm:max-h-[calc(100svh-32px)] sm:rounded-2xl sm:p-6","data-testid":"floor-interior-selection-panel","data-room-selection-panel":!0,children:[a&&(l=(0,ec.jsx)(Cf,{type:"button",variant:"outline",size:"icon",className:"absolute top-4 right-4 sm:top-6 sm:right-6","aria-label":c("close"),"data-testid":"floor-interior-selection-icon-close",children:(0,ec.jsx)(CM,{})}),(0,ec.jsx)(Cv,{asChild:!0,children:l})),(0,ec.jsx)("h2",{id:"floor-interior-selection-title",className:"typo-base-16 font-medium sm:typo-base-18 text-text-dark",children:c("floor.interiorSelection.title")}),(0,ec.jsxs)("div",{className:"grid gap-2","data-testid":"floor-interior-selection-upload",children:[(0,ec.jsxs)("label",{htmlFor:u,className:"flex min-h-15 cursor-pointer items-center justify-center gap-2 rounded-xl border border-dashed border-background-blue bg-background-blue-transparent px-4 text-center typo-button-normal text-background-blue opacity-80 transition hover:bg-background-blue-transparent/80",onDragOver:e=>e.preventDefault(),onDrop:function(e){e.preventDefault();let t=e.dataTransfer.files[0];t&&s(t)},children:[(0,ec.jsx)(CE,{className:"size-5 text-background-blue"}),c("floor.interiorSelection.uploadPhoto"),(0,ec.jsx)("input",{ref:d,id:u,type:"file",accept:"image/*",className:"sr-only",onChange:function(e){let t=e.target.files?.[0];e.target.value="",t&&s(t)}})]}),n&&(0,ec.jsx)("p",{className:"typo-base-12 font-medium text-destructive",children:c("floor.interiorSelection.invalidFile")})]}),(0,ec.jsx)("div",{className:"grid min-h-0 overflow-y-auto overflow-x-hidden overscroll-contain pr-1 [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden","data-testid":"floor-interior-selection-scroll-content",children:(0,ec.jsxs)("div",{className:"grid min-h-max gap-4",children:[t.length>0&&(0,ec.jsxs)("div",{className:"grid gap-3",children:[(0,ec.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.customTitle")}),(0,ec.jsx)("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-3","data-testid":"floor-custom-interior-selection-grid",children:h(t)})]}),(0,ec.jsxs)("div",{className:"grid gap-3",children:[(0,ec.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.presetsTitle")}),(0,ec.jsx)("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-3","data-testid":"floor-preset-interior-selection-grid",children:h(e)})]})]})}),a&&(0,ec.jsx)(Cw,{className:"-mt-2 shrink-0 p-0 sm:mt-0",children:(0,ec.jsx)(Cv,{asChild:!0,children:(0,ec.jsx)(Cf,{variant:"outline",className:"w-full",children:c("close")})})})]})}function S4(e){return(0,ec.jsx)("div",{className:"absolute inset-0 z-20 grid items-end p-0 sm:items-center sm:p-4","data-testid":"floor-interior-selection-overlay",children:(0,ec.jsx)(S9,{...e})})}function S5({open:e,showCloseButton:t=!0,portalContainer:r,onOpenChange:n,...i}){let{t:a}=tc();return(0,ec.jsx)(Cg,{open:e,onOpenChange:n,children:(0,ec.jsxs)(Cy,{contentInsideOverlay:!0,portalContainer:r,showCloseButton:!1,"data-testid":"floor-interior-selection-overlay",className:"top-auto bottom-0 grid max-h-[calc(100svh-8px)] w-[calc(100%-16px)] min-w-0 max-w-none translate-y-0 overflow-hidden rounded-t-2xl rounded-b-none border-none bg-transparent p-0 shadow-none sm:top-[50%] sm:bottom-auto sm:w-full sm:max-w-none sm:translate-y-[-50%] sm:rounded-none sm:p-4",children:[(0,ec.jsx)(Cx,{className:"sr-only",children:a("floor.interiorSelection.title")}),(0,ec.jsx)(CC,{className:"sr-only"}),(0,ec.jsx)(S9,{...i,showCloseButton:t})]})})}S0.displayName="Scene";let S8="data-material-selection-action",S6="data-material-selection-panel";function S7(e,t,{requiresMaterialModel:r,getCollapseKey:n}){var i;let a;return i=e.filter(e=>!!(e.tinuuid&&e.materials?.[0]&&function(e,t){if(!t)return!0;let r=e.materials?.[0]?.native?.glbUrl;return"string"==typeof r&&r.trim().length>0}(e,r)&&!(t?.uuid&&e.uuid===t.uuid||t?.tinuuid&&e.tinuuid===t.tinuuid))),a=new Set,i.filter(e=>{let t=n(e);return!a.has(t)&&(a.add(t),!0)})}let Me="vizbl-rug:";function Mt(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function Mr(e){return e.kit?.uuid??e.uuid??e.tinuuid??""}let Mn={"sized-design":{offersSizeVariants:!0,decodeVariant:function(e){let t=e.dimensions?.width,r=e.dimensions?.depth;return Mt(t)&&Mt(r)?{size:`${t/10}\xd7${r/10}`,shape:function(e){if(!e?.startsWith(Me))return"rect";try{let t=JSON.parse(e.slice(Me.length));return"round"===t.shape?"round":"rect"}catch{return"rect"}}(e.description)}:null},getCollapseKey:function(e){return e.kit?.uuid?e.kit.uuid:`object:${Mr(e)}`}},"color-design":{offersSizeVariants:!1,decodeVariant:function({description:e}){let t="vizbl-flooring:";if(!e?.startsWith(t))return null;try{let r=JSON.parse(e.slice(t.length));return null!==r&&"object"==typeof r&&"color"in r&&"string"==typeof r.color?{color:r.color}:null}catch{return null}},getCollapseKey:Mr},"single-listing":{offersSizeVariants:!1,decodeVariant:null,getCollapseKey:Mr}},Mi={"product-identity":{catalogsEveryMaterial:!0},finish:{catalogsEveryMaterial:!1},placeholder:{catalogsEveryMaterial:!1}};function Ma(e){return Mn[CG[e].composition]}function Mo(e,t,r,n=""){return"name-prop"===CG[e].productNameSource?n:t?.kit?.name?.trim()||t?.name?.trim()||r?.name?.trim()||n}function Ms(e){return e.hid??""}function Ml({apiKey:e,baseURL:t,language:r,source:n,widgetSession:i}){return EL.map(a=>({queryKey:Cs(a,{apiKey:e,baseURL:t,language:r,source:n}),queryFn:({signal:o})=>Cc(a,{apiKey:e,baseURL:t,language:r,signal:o,source:n,widgetSession:i})}))}function Mc(){let{t:e}=tc(),{type:t}=C6();return e(`floor.materialSelection.${CG[t].catalogTitle}`)}function Mu({className:e,gridClassName:t,titleClassName:r,onOpenChange:n,...i}){let a=Mc(),o=(0,eu.useRef)(null),{fetchNextMaterialsPage:s,hasNextPage:l,isFetchingNextPage:c,isLoading:u,materialItems:d,selectMaterial:h,selectedMaterialId:p}=function({includeEmbeddedObject:e=!1}={}){var t;let{material:r,tinuuid:n,embeddedObject:i,selectedObject:a,setMaterial:o,setTinuuid:s,apiKey:l,baseURL:c,language:u,source:d,widgetSession:h,setAccessError:p,setLoadError:A}=Et(),{type:f,name:g}=C6(),m=i?.owner?.uuid,{data:v,error:b,isFetchingNextPage:y,fetchNextPage:w,hasNextPage:x,isLoading:C}=rK({queryKey:["room-viewer","public-objects",{apiKey:(t={apiKey:l,baseURL:c,language:u,source:d,resourceType:f}).apiKey??null,language:t.language??null,ownerUuid:m??null,resourceType:t.resourceType??null,source:t.source}],enabled:!!m,queryFn:({pageParam:e,signal:t})=>{if(!m)throw Error("Owner uuid is required.");return Cu(m,e,{apiKey:l,baseURL:c,language:u,signal:t,source:d,widgetSession:h,resourceType:f})},initialPageParam:1,getNextPageParam:(e,t,r)=>r<e.pages_count?r+1:void 0,getPreviousPageParam:(e,t,r)=>r>1?r-1:void 0},r_,void 0),{requiresMaterialModel:E}=EN(f),{getCollapseKey:S}=Ma(f),{catalogsEveryMaterial:M}=Mi[CG[f].materialRole],{composition:I}=CG[f],B=(0,eu.useMemo)(()=>v?.pages.flatMap(e=>e.objs)??[],[v]),k=(0,eu.useMemo)(()=>{let t={requiresMaterialModel:E,getCollapseKey:S};if(e)return S7([...i?.tinuuid&&i.materials?.[0]?[i]:[],...B],null,t);return S7(B,i,t)},[i,B,S,e,E]),T=(0,eu.useMemo)(()=>k.flatMap(e=>{if(!e.tinuuid)return[];let t="color-design"===I&&e.kit?.uuid,r=M&&!t?e.materials:e.materials?.slice(0,1);return r?.map(t=>{let r=Ms(t);return r&&e.tinuuid?{materialId:r,productName:Mo(f,e,t,g),material:t,tinuuid:e.tinuuid}:null}).filter(e=>null!==e)??[]}),[M,I,k,f,g]),R="color-design"===I&&a?.tinuuid===n&&a?.kit?.uuid?k.find(e=>S(e)===S(a)):void 0,D=R?.tinuuid!==n&&R?Ms(R.materials?.[0]??{}):r?Ms(r):"",P=k.find(e=>e.tinuuid===n),_=k.find(e=>e.tinuuid&&e.materials?.[0]);return(0,eu.useEffect)(()=>{let e=xF(b);e?p(e):b&&A("viewer-load-failed")},[b,p,A]),(0,eu.useEffect)(()=>{v&&0===k.length&&x&&!y&&w()},[v,w,x,y,k.length]),(0,eu.useEffect)(()=>{if(null!==r)return;let e=P??_,t=e?.materials?.[0];e&&t&&e.tinuuid&&(o(t),s(e.tinuuid))},[_,P,r,o,s]),{fetchNextMaterialsPage:(0,eu.useCallback)(()=>{!1===x||y||w()},[w,x,y]),hasNextPage:x,isFetchingNextPage:y,isLoading:C,materialItems:T,selectMaterial:(0,eu.useCallback)(e=>{let t=k.find(t=>t.materials?.some(t=>Ms(t)===e)),r=t?.materials?.find(t=>Ms(t)===e);return!!t&&!!r&&!!t.tinuuid&&(o(r),s(t.tinuuid),!0)},[k,o,s]),selectedMaterialId:D}}({includeEmbeddedObject:!0});(0,eu.useEffect)(()=>{let e=o.current;e&&!u&&!c&&l&&0!==d.length&&e.scrollHeight<=e.clientHeight&&s()},[s,l,c,u,d.length]);let A=(0,eu.useCallback)(e=>{let{clientHeight:t,scrollHeight:r,scrollTop:n}=e.currentTarget;n+t>=r-64&&s()},[s]),f=(0,eu.useCallback)(e=>{h(e)&&n(!1)},[n,h]);return(0,ec.jsxs)("div",{...i,className:Cp("flex min-h-0 flex-col gap-3 overflow-hidden text-text-dark outline-none",e),"data-testid":"material-selection-panel",onPointerDownCapture:e=>{e.stopPropagation(),i.onPointerDownCapture?.(e)},onMouseDownCapture:e=>{e.stopPropagation(),i.onMouseDownCapture?.(e)},children:[(0,ec.jsx)("h2",{className:Cp("typo-base-16 font-medium sm:typo-base-14 sm:font-semibold text-text-dark",r),children:a}),(0,ec.jsx)("div",{"data-testid":"material-selection-grid",ref:o,className:Cp("min-h-0 flex-1 overflow-y-auto overflow-x-hidden overscroll-contain pr-1 [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden",t),onScroll:A,children:(0,ec.jsxs)("div",{className:"grid min-h-max grid-cols-3 gap-x-2 gap-y-2","data-testid":"material-selection-grid-items",children:[d.map(({materialId:e,material:t,tinuuid:r,productName:n})=>{let i,a=e===p,o=(i=t.previews?.[0],i?.subRes?.small??i?.url);return(0,ec.jsxs)("button",{type:"button","data-selected":a,"aria-pressed":a,className:"group flex min-w-0 flex-col gap-1 rounded-lg bg-background-containers text-left focus-visible:ring-2 focus-visible:ring-icons-normal focus-visible:outline-hidden",onClick:()=>f(e),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),f(e))},children:[(0,ec.jsxs)("span",{className:"relative grid aspect-square w-full shrink-0 place-items-center overflow-hidden rounded-lg border border-border p-1 transition group-hover:border-icons-normal",children:[o?(0,ec.jsx)("img",{src:o,alt:"",className:"size-full rounded-md object-cover"}):(0,ec.jsx)(CT,{className:"size-6 text-icons-normal"}),a&&(0,ec.jsx)("span",{className:"absolute top-1 right-1 grid size-6 place-items-center rounded-full bg-icons-blue text-icons-white","data-testid":"material-selection-selected-check",children:(0,ec.jsx)(CS,{className:"size-4"})})]}),(0,ec.jsx)("span",{className:"typo-base-12 line-clamp-3 w-full wrap-anywhere text-text-base",children:n})]},`${r}-${e}`)}),(u||c)&&(0,ec.jsx)("div",{className:"col-span-3 grid h-16 place-items-center",children:(0,ec.jsx)(CO,{className:"size-6"})})]})})]})}function Md({open:e,portalContainer:t,onOpenChange:r}){let{t:n}=tc(),i=Mc();return(0,ec.jsx)(Cg,{open:e,onOpenChange:r,children:(0,ec.jsxs)(Cy,{contentInsideOverlay:!0,"data-testid":"material-selection-mobile-overlay","data-material-selection-panel":"",className:"top-auto bottom-0 flex max-h-[calc(100svh-8px)] w-[calc(100%-16px)] !max-w-none translate-y-0 flex-col gap-2 overflow-hidden rounded-t-2xl rounded-b-none p-4 sm:hidden",portalContainer:t,showCloseButton:!1,children:[(0,ec.jsx)(Cx,{className:"sr-only",children:i}),(0,ec.jsx)(CC,{className:"sr-only"}),(0,ec.jsx)(Mu,{className:"min-h-0",gridClassName:"max-h-none",onOpenChange:r}),(0,ec.jsx)(Cw,{className:"shrink-0 p-0",children:(0,ec.jsx)(Cv,{asChild:!0,children:(0,ec.jsx)(Cf,{type:"button",variant:"outline",className:"w-full",children:n("close")})})})]})})}function Mh({className:e,value:t,max:r=100,...n}){let i=r>0?r:100,a="number"==typeof t?Math.min(Math.max(t/i*100,0),100):0;return(0,ec.jsx)(gD,{"data-slot":"progress",className:Cp("relative h-2 w-full overflow-hidden rounded-full bg-primary/20",e),value:t,max:i,...n,children:(0,ec.jsx)(g_,{"data-slot":"progress-indicator",className:"h-full bg-primary transition-[width]",style:{width:`${a}%`}})})}let Mp=[{minimumProgress:0,translationKey:"floor.processing.stages.reading"},{minimumProgress:28,translationKey:"floor.processing.stages.mapping"},{minimumProgress:56,translationKey:"floor.processing.stages.lighting"},{minimumProgress:82,translationKey:"floor.processing.stages.finalizing"},{minimumProgress:100,translationKey:"floor.processing.stages.ready"}];function MA({isComplete:e,open:t,onCloseAnimationEnd:r,onOpenChange:n,portalContainer:i}){let{t:a}=tc(),o=(0,eu.useRef)(t),[s,l]=(0,eu.useState)(8),c=e?100:s,u=function(e){for(let t=Mp.length-1;t>=0;t-=1){let r=Mp[t];if(r&&e>=r.minimumProgress)return r}return Mp[0]}(c);(0,eu.useEffect)(()=>{t&&!o.current&&l(8),o.current=t},[t]),(0,eu.useEffect)(()=>{if(!t||e)return;let r=window.setInterval(()=>{l(e=>Math.min(92,e+Math.max(2,Math.round((92-e)/8))))},650);return()=>window.clearInterval(r)},[e,t]);let d=(0,ec.jsxs)("div",{role:"status","aria-live":"polite",className:"grid content-start gap-4",children:[(0,ec.jsx)("h2",{className:"typo-base-18 font-medium text-text-dark",children:a("floor.processing.title")}),(0,ec.jsxs)("div",{"data-testid":"floor-processing-progress-panel",className:"grid min-h-[97px] min-w-0 content-center gap-2 overflow-hidden rounded-xl bg-background-base px-6 py-8",children:[(0,ec.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-3",children:[(0,ec.jsx)("span",{className:"typo-base-14 min-w-0 flex-1 truncate text-left font-medium text-text-light",children:a(u.translationKey)}),(0,ec.jsxs)("span",{className:"typo-base-14 shrink-0 font-medium text-text-dark",children:[c,"%"]})]}),(0,ec.jsx)(Mh,{value:c,"aria-label":a("floor.processing.progressLabel"),className:"h-1 bg-background-base-3 [&_[data-slot=progress-indicator]]:bg-button-dark [&_[data-slot=progress-indicator]]:duration-500 [&_[data-slot=progress-indicator]]:ease-out"})]})]});return(0,ec.jsx)(Cg,{open:t,onOpenChange:n,children:(0,ec.jsxs)(Cy,{portalContainer:i,showCloseButton:!1,"data-testid":"floor-processing-card",className:"top-auto bottom-2 w-[calc(100%-16px)] !max-w-none translate-y-0 gap-4 overflow-hidden rounded-2xl p-6 text-center sm:top-[50%] sm:bottom-auto sm:w-full sm:!max-w-[377px] sm:translate-y-[-50%] sm:p-6",onInteractOutside:e=>{e.preventDefault()},onAnimationEnd:e=>{e.currentTarget===e.target&&"closed"===e.currentTarget.getAttribute("data-state")&&r?.()},children:[(0,ec.jsx)(Cx,{className:"sr-only",children:a("floor.processing.title")}),(0,ec.jsx)(CC,{className:"sr-only",children:a(u.translationKey)}),d]})})}function Mf(){if(!c){let e=new vi;c={os:e.getOS().name,type:e.getDevice().type}}return c}function Mg(){return"iOS"===Mf().os}function Mm(){return"Android"===Mf().os}function Mv(e,t){return!(!e||Mm()&&"mobile"===Mf().type||Mm()&&"appclip"===e.ar)&&("floor"!==e.destination||!!t)}let Mb=/oklch\(([0-9.]+)\s+([0-9.]+)\s+([0-9.]+)\)/;function My(e,t){let r=e.match(Mb);return r?{l:Number.parseFloat(r[1]),c:Number.parseFloat(r[2]),h:Number.parseFloat(r[3])}:{l:t[0],c:t[1],h:t[2]}}function Mw({data:e,foreground:t,background:r,robustness:n="M",className:i,...a}){let[o,s]=(0,eu.useState)(null);return((0,eu.useEffect)(()=>{(async()=>{try{let i=getComputedStyle(document.documentElement),a=t??i.getPropertyValue("--foreground"),o=r??i.getPropertyValue("--background"),l=My(a,[.21,.006,285.885]),c=My(o,[.985,0,0]),u=await yQ.toString(e,{type:"svg",color:{dark:yN(yO({mode:"oklch",...l})),light:yN(yO({mode:"oklch",...c}))},width:200,errorCorrectionLevel:n,margin:0});s(u)}catch(e){console.error(e)}})()},[e,t,r,n]),o)?(0,ec.jsx)("div",{className:Cp("size-full","[&_svg]:size-full",i),dangerouslySetInnerHTML:{__html:o},...a}):null}async function Mx(e){return await e.updateComplete,!e.canActivateAR&&navigator.xr?.isSessionSupported&&(await navigator.xr.isSessionSupported("immersive-ar").catch(()=>!1),await new Promise(e=>setTimeout(e))),e}async function MC(e){let t;await e.activateAR(),("session-started"===(t=e.getAttribute("ar-status"))||"object-placed"===t)&&await new Promise(t=>{let r=n=>{"not-presenting"===n.detail.status&&(e.removeEventListener("ar-status",r),t())};e.addEventListener("ar-status",r)})}function ME({className:e,buttonClassName:t,buttonLeadingIcon:n,buttonLabel:i,buttonSize:a,buttonVariant:o="contrast",...s}){let{type:l,width:c,height:u,name:d}=C6(),{handoff:h}=CG[l],{src:p,tinuuid:A,widgetSession:f}=Et(),{containerRef:g,resourceRef:m}=Er(),{t:v,i18n:b}=tc(),y=function(){let{i18n:e}=tc();return"ru"===(e.resolvedLanguage??e.language)?"arizo":"vizbl"}(),[w,x]=(0,eu.useState)(""),[C,E]=(0,eu.useState)(""),[S,M]=(0,eu.useState)(()=>f?.token),[I,B]=(0,eu.useState)(!1),[k,T]=(0,eu.useState)(!1),R=(0,eu.useRef)(null),D=(0,eu.useRef)(null),[P,_]=(0,eu.useState)(!1),L=(0,eu.useRef)(!1),F=b.resolvedLanguage??b.language,N=ET[y],O=(0,eu.useMemo)(()=>(function({height:e,language:t,name:r,src:n,tenantConfig:i,tinuuid:a,handoff:o,type:s,width:l,widgetSessionToken:c,pageUrl:u}){if(!o)return null;if("floor"===o.destination&&a){let e=new URL(i.ROOM_URL);return e.searchParams.set("type",s),e.searchParams.set("tinuuid",a),e.searchParams.set("name",r),e.searchParams.set("language",t),c&&e.searchParams.set("widgetSessionToken",c),e.toString()}let d=new URL(i.POSTER_URL);return n&&d.searchParams.set("texture",function(e,t){if(!t||/^[a-z][a-z0-9+.-]*:/i.test(e)||e.startsWith("//"))return e;try{return new URL(e,t).href}catch{return e}}(n,u)),d.searchParams.set("texture_width",(100*l).toString()),d.searchParams.set("texture_height",(100*e).toString()),c&&d.searchParams.set("widgetSessionToken",c),d.toString()})({height:u,language:F,name:d,src:p,tenantConfig:N,tinuuid:A,handoff:h,type:l,width:c,widgetSessionToken:S,pageUrl:"u"<typeof window?void 0:window.location.href}),[p,A,h,l,c,u,d,F,N,S]),Q=(0,eu.useMemo)(()=>{if(!A)return null;let e=new URL("https://appclip.apple.com/id");return e.searchParams.set("p","com.us.vizbl.Clip"),e.searchParams.set("tinuuid",A),e.toString()},[A]),U=(0,eu.useCallback)(e=>{R.current=e,e&&D.current?.resolve(e)},[]);function z(){D.current=null,_(!1)}async function G(){M(await f?.getTokenForRequest().catch(()=>f.token))}let H=async()=>{let e;if(h?.ar==="appclip"){if(!A)return;if(Mg()&&Q){Ci(f,"appclip"),window.location.assign(Q);return}await G(),B(!0);return}if(!m.current||L.current)return;L.current=!0;try{e=await function(){if(!D.current){let e,t=new Promise(t=>{e=t});D.current={resolve:e,promise:Promise.resolve().then(r.bind(r,"../../node_modules/.pnpm/@google+model-viewer@4.2.0_three@0.185.1/node_modules/@google/model-viewer/lib/model-viewer.js")).then(()=>(_(!0),t),e=>{throw D.current=null,e})}}return D.current.promise.then(Mx)}()}finally{L.current=!1}let t=m.current;if(!t)return void z();if(e.canActivateAR)try{T(!0);let e=t.clone(!0);if(e.position.set(0,0,0),e.quaternion.identity(),e.updateMatrix(),e.updateMatrixWorld(!0),Mg()){e.rotation.set(-Math.PI/2,0,0),e.updateMatrix(),e.updateMatrixWorld(!0);let t=new yz.U,r=await t.parseAsync(e,{ar:{anchoring:{type:"plane"},planeAnchoring:{alignment:"vertical"}}}),n=new File([r],"scene.usdz",{type:"model/vnd.usdz+zip"});x(URL.createObjectURL(n))}else{let t=new yU.r,r=await t.parseAsync(e,{binary:!0}),n=new File([r],"scene.glb",{type:"model/gltf-binary"});E(URL.createObjectURL(n))}}catch(e){throw z(),e}finally{T(!1)}else z(),await G(),B(!0)};if((0,eu.useEffect)(()=>{let e=R.current;return e&&(""!==w||""!==C)&&MC(e).finally(z),()=>{""!==w&&URL.revokeObjectURL(w),""!==C&&URL.revokeObjectURL(C)}},[w,C]),!Mv(h,A))return null;let j="appclip"===h.ar;return(0,ec.jsxs)("div",{className:Cp(e),...s,children:[(0,ec.jsxs)(Cf,{variant:o,size:a,disabled:k,onClick:H,className:t,children:[n,i??v("ar.viewInPlace")]}),(0,ec.jsx)(Cg,{open:I,onOpenChange:B,children:(0,ec.jsxs)(Cy,{className:"gap-6 sm:max-w-120",showCloseButton:!1,portalContainer:g,children:[(0,ec.jsx)("div",{className:"flex items-center justify-center p-10 bg-constant-white rounded-2xl",children:(0,ec.jsx)(Mw,{className:"size-48",robustness:"H",data:O??""})}),j?(0,ec.jsxs)("div",{className:"grid gap-2 text-center",children:[(0,ec.jsx)("p",{className:"text-lg text-text-sub font-medium",children:v("ar.appClipScanTitle")}),(0,ec.jsx)("p",{className:"text-sm text-text-light",children:v("ar.appClipRequirement")})]}):(0,ec.jsx)("p",{className:"text-lg text-center text-text-sub font-medium",children:v("ar.scanQrCode")}),(0,ec.jsxs)("p",{className:"text-xs text-center text-text-light",children:[!j&&(0,ec.jsxs)(ec.Fragment,{children:[v("ar.deviceRequirementsDisclaimer"),(0,ec.jsx)("br",{})]}),(0,ec.jsx)("a",{href:N.TERMS_URL,target:"_blank",rel:"noopener noreferrer",className:"underline underline-offset-2 transition-colors duration-300 hover:text-text-dark",style:{textDecoration:"underline",textUnderlineOffset:"2px"},children:v("legal.termsOfUse")})," ",v("legal.conjunction")," ",(0,ec.jsx)("a",{href:N.PRIVACY_URL,target:"_blank",rel:"noopener noreferrer",className:"underline underline-offset-2 transition-colors duration-300 hover:text-text-dark",style:{textDecoration:"underline",textUnderlineOffset:"2px"},children:v("legal.privacyPolicy")})]}),(0,ec.jsx)(Cv,{asChild:!0,children:(0,ec.jsx)(Cf,{variant:"contrast",size:"lg",children:v("close")})})]})}),P&&(0,ec.jsx)("model-viewer",{ref:U,className:"fixed w-px h-px opacity-0 pointer-events-none",src:C,iosSrc:w,reveal:"manual",ar:!0,cameraControls:!0,arPlacement:"wall",arModes:"webxr",arScale:"fixed",shadowIntensity:1,interactionPromptThreshold:100})]})}let MS={"inline-compact":"h-9 w-full rounded-xl","inline-large":"h-11 w-full rounded-xl"},MM={"inline-compact":"size-5","inline-large":"size-6"},MI={desktop:"floor-ar-card",tablet:void 0,phone:void 0};function MB({...e}){return(0,ec.jsx)(y9,{"data-slot":"select",...e})}function Mk({...e}){return(0,ec.jsx)(y6,{"data-slot":"select-value",...e})}function MT({className:e,size:t="default",children:r,...n}){return(0,ec.jsxs)(y5,{"data-slot":"select-trigger","data-size":t,className:Cp("flex w-fit items-center justify-between gap-2 whitespace-nowrap rounded-md border bg-background-white shadow-sm outline-none transition-colors cursor-pointer","border-border-medium","text-text-dark","hover:border-border-dark","focus-visible:border-border-dark","aria-invalid:border-border-red","disabled:cursor-not-allowed disabled:border-border-medium disabled:bg-background-base disabled:opacity-40","data-[size=default]:h-11 data-[size=default]:px-2 data-[size=default]:py-2.5 data-[size=default]:typo-base-16","data-[size=md]:h-9 data-[size=md]:px-2 data-[size=md]:py-2 data-[size=md]:typo-base-14","data-[size=sm]:h-[1.875rem] data-[size=sm]:px-2 data-[size=sm]:typo-base-12","*:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2","[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=size-])]:size-6 [&_svg:not([class*=text-])]:text-text-dark",e),...n,children:[r,(0,ec.jsx)(y7,{asChild:!0,children:(0,ec.jsx)(CB,{className:"size-6"})})]})}function MR({className:e,children:t,position:r="item-aligned",align:n="center",portalContainer:i,...a}){return(0,ec.jsx)(we,{container:i,children:(0,ec.jsxs)(wr,{"data-slot":"select-content",className:Cp("relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-xl border bg-background-white text-text-dark shadow-md","border-border-medium","data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2","popper"===r&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:n,...a,children:[(0,ec.jsx)(MP,{}),(0,ec.jsx)(wh,{className:Cp("p-1","popper"===r&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:t}),(0,ec.jsx)(M_,{})]})})}function MD({className:e,children:t,...r}){return(0,ec.jsxs)(wy,{"data-slot":"select-item",className:Cp("relative flex w-full cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-8 pl-3 outline-hidden","typo-base-16 text-text-sub","focus:bg-background-base focus:text-text-dark","data-[disabled]:pointer-events-none data-[disabled]:opacity-50","[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=size-])]:size-6 [&_svg:not([class*=text-])]:text-text-dark","*:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[(0,ec.jsx)("span",{"data-slot":"select-item-indicator",className:"absolute right-2 flex size-6 items-center justify-center",children:(0,ec.jsx)(wE,{children:(0,ec.jsx)(CS,{className:"size-5"})})}),(0,ec.jsx)(wx,{children:t})]})}function MP({className:e,...t}){return(0,ec.jsx)(wM,{"data-slot":"select-scroll-up-button",className:Cp("flex cursor-default items-center justify-center py-1",e),...t,children:(0,ec.jsx)(s5,{className:"size-4"})})}function M_({className:e,...t}){return(0,ec.jsx)(wB,{"data-slot":"select-scroll-down-button",className:Cp("flex cursor-default items-center justify-center py-1",e),...t,children:(0,ec.jsx)(s8,{className:"size-4"})})}let ML=/^[a-z][a-z\d+.-]*:/i;function MF(e,t="m"){switch(t){case"cm":return e/100;case"in":return .0254*e;case"m":return e}}function MN(e,t){switch(t){case"cm":return 100*e;case"in":return e/.0254}}function MO(e){let{t}=tc();return(0,eu.useMemo)(()=>[{value:0,label:t("mattingOptions.none")},{value:.05,label:`${Number(MN(.05,e).toFixed(2)).toString()} ${t(`units.${e}`)}`}],[e,t])}function MQ({label:e,variant:t,size:r,className:n}){let{t:i}=tc(),{displayUnit:a}=C6(),{containerRef:o}=Er(),{material:s,options:l,selectMaterial:c}=function(){let{material:e,setMaterial:t,setTinuuid:r,apiKey:n,baseURL:i,language:a,source:o,widgetSession:s}=Et(),l=rX({queries:Ml({apiKey:n,baseURL:i,language:a,source:o,widgetSession:s})}),c=(0,eu.useMemo)(()=>l.flatMap(e=>{let t=e.data,r=t?.materials?.[0];return t?.tinuuid&&r?.hid?[{material:r,materialId:r.hid,tinuuid:t.tinuuid}]:[]}),[l]),u=(0,eu.useCallback)(e=>{let n=c.find(t=>t.materialId===e);return!!n&&(t(n.material),r(n.tinuuid),!0)},[c,t,r]);return{material:e,options:c,selectMaterial:u}}(),{matting:u,setMatting:d}=Ea(),h=MO(a),p=(0,eu.useId)(),A=(0,eu.useId)();return(0,ec.jsxs)(CV,{modal:!1,children:[(0,ec.jsx)(Cq,{asChild:!0,children:(0,ec.jsxs)(Cf,{type:"button",variant:t,size:r,className:n,children:[(0,ec.jsx)(CD,{className:"size-4"}),e]})}),(0,ec.jsxs)(CK,{portalContainer:o,collisionBoundary:o,collisionPadding:8,align:"start",className:"flex w-56 max-w-[var(--radix-dropdown-menu-content-available-width)] flex-col",style:{maxHeight:"var(--radix-dropdown-menu-content-available-height)"},children:[(0,ec.jsx)(CX,{id:p,children:i("wallArt.pictureFrame")}),(0,ec.jsx)(CW,{"aria-labelledby":p,className:"min-h-0 overflow-y-auto overscroll-contain",children:l.map(e=>(0,ec.jsxs)(CY,{indicatorPosition:"right",checked:s?.hid===e.materialId,onCheckedChange:()=>c(e.materialId),onSelect:e=>e.preventDefault(),className:"gap-2 [@media(pointer:coarse)]:min-h-11",children:[(0,ec.jsx)("span",{className:"pointer-events-none size-5 shrink-0 rounded-full border border-border-light",style:{backgroundColor:e.material.miniature?.color?.hex?`#${e.material.miniature.color.hex}`:void 0}}),(0,ec.jsx)("span",{className:"min-w-0 flex-1",children:e.material.miniature?.color?.name??e.material.name})]},`${e.tinuuid}-${e.materialId}`))}),(0,ec.jsx)(CZ,{}),(0,ec.jsx)(CX,{id:A,children:i("matting")}),(0,ec.jsx)(CW,{"aria-labelledby":A,className:"shrink-0",children:h.map(e=>(0,ec.jsx)(CY,{indicatorPosition:"right",checked:u===e.value,onCheckedChange:()=>d(e.value),onSelect:e=>e.preventDefault(),className:"[@media(pointer:coarse)]:min-h-11",children:e.label},e.value))})]})]})}function MU({className:e,...t}){return(0,ec.jsx)("div",{"data-slot":"field-group",className:Cp("group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4",e),...t})}let Mz=on("group/field flex w-full gap-3 data-[invalid=true]:text-destructive",{variants:{orientation:{vertical:["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],horizontal:["flex-row items-center","[&>[data-slot=field-label]]:flex-auto","has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"],responsive:["flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto","@md/field-group:[&>[data-slot=field-label]]:flex-auto","@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"]}},defaultVariants:{orientation:"vertical"}});function MG({className:e,orientation:t="vertical",...r}){return(0,ec.jsx)("div",{role:"group","data-slot":"field","data-orientation":t,className:Cp(Mz({orientation:t}),e),...r})}function MH({className:e,...t}){return(0,ec.jsx)("div",{"data-slot":"field-label",className:Cp("flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50",e),...t})}function Mj({...e}){return(0,ec.jsx)(wz,{"data-slot":"popover",...e})}function MV({...e}){return(0,ec.jsx)(wj,{"data-slot":"popover-trigger",...e})}function Mq({className:e,align:t="center",sideOffset:r=4,portalContainer:n,...i}){return(0,ec.jsx)(wK,{container:n,children:(0,ec.jsx)(wY,{"data-slot":"popover-content",align:t,sideOffset:r,className:Cp("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",e),...i})})}function MW({className:e,defaultValue:t,value:r,min:n=0,max:i=100,variant:a="default","aria-label":o,"aria-labelledby":s,...l}){let c=(0,eu.useMemo)(()=>Array.isArray(r)?r:Array.isArray(t)?t:[n],[r,t,n]);return(0,ec.jsxs)(xi,{"data-slot":"slider",defaultValue:t,value:r,min:n,max:i,"data-variant":a,"aria-label":o,"aria-labelledby":s,className:Cp("relative flex w-full touch-none cursor-pointer items-center select-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",e),...l,children:[(0,ec.jsx)(xd,{"data-slot":"slider-track",className:Cp("relative grow overflow-hidden rounded-full data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5","editor"===a?"bg-border-light data-[orientation=horizontal]:h-0.5":"bg-muted data-[orientation=horizontal]:h-1.5"),children:(0,ec.jsx)(xp,{"data-slot":"slider-range",className:Cp("absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full","editor"===a?"bg-background-blue":"bg-primary")})}),Array.from({length:c.length},(e,t)=>(0,ec.jsx)(xf,{"data-slot":"slider-thumb","aria-label":o,"aria-labelledby":s,className:Cp("ring-ring/50 block shrink-0 rounded-full border bg-white transition-[color,box-shadow] focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50","editor"===a?"size-3 border-background-blue shadow-none hover:ring-2 focus-visible:ring-2":"size-4 border-primary shadow-sm hover:ring-4 focus-visible:ring-4")},t))]})}function MK({variant:e,size:t}){let{t:r}=tc(),{containerRef:n}=Er();return(0,ec.jsxs)(Mj,{children:[(0,ec.jsx)(MV,{asChild:!0,children:(0,ec.jsxs)(Cf,{type:"button",variant:e,size:t,className:"shrink-0",children:[(0,ec.jsx)(CP,{className:"size-4"}),(0,ec.jsx)("span",{className:"sr-only",children:r("scene.tunePosition")})]})}),(0,ec.jsxs)(Mq,{className:"flex flex-col gap-4 border-button-dark bg-button-dark px-3 py-3.5 text-text-white",side:"top",align:"start",portalContainer:n,collisionBoundary:n,collisionPadding:8,children:[(0,ec.jsxs)(MU,{children:[(0,ec.jsxs)(MG,{orientation:"horizontal",children:[(0,ec.jsx)(MH,{children:r("scene.rotation")}),(0,ec.jsx)(MJ,{gesture:"rotation",min:-180,max:180,"aria-label":r("scene.rotation")})]}),(0,ec.jsxs)(MG,{orientation:"horizontal",children:[(0,ec.jsx)(MH,{children:r("scene.angle")}),(0,ec.jsx)(MJ,{gesture:"angle",min:-75,max:75,"aria-label":r("scene.angle")})]})]}),(0,ec.jsx)(MY,{})]})]})}function MJ({gesture:e,min:t,max:r,"aria-label":n}){let i=Ei(e),{sceneGestures:{setAngle:a,setRotation:o}}=En(),s="angle"===e?a:o;return(0,ec.jsx)(MW,{value:[i],onValueChange:([e])=>s(e??0),min:t,max:r,step:1,className:"w-40.5 **:data-[slot=slider-range]:bg-transparent **:data-[slot=slider-thumb]:border-background-base-3 **:data-[slot=slider-thumb]:bg-background-base-3 **:data-[slot=slider-track]:bg-icons-normal","aria-label":n})}function MY(){let{t:e}=tc(),t=Ei("rotation"),r=Ei("angle"),{sceneGestures:{setAngle:n,setRotation:i}}=En();return(0,ec.jsxs)(Cf,{type:"button",variant:"ghost",size:"sm",className:"w-full text-text-white hover:bg-white/10 hover:text-text-white active:bg-white/20",disabled:0===t&&0===r,onClick:()=>{i(0),n(0)},children:[(0,ec.jsx)(C_,{className:"size-4"}),e("scene.resetPosition")]})}let MX={card:"flex min-h-24 w-fit max-w-100 items-center gap-4 rounded-2xl bg-background-containers p-4 text-left text-text-dark shadow-[var(--shadow-login)]","compact-card":"flex min-h-[116px] w-fit max-w-[421px] items-center gap-4 rounded-2xl bg-background-containers p-4 text-left text-text-dark shadow-[var(--shadow-login)]","flow-card":"flex items-center justify-start gap-4 border-b border-border-light bg-background-containers p-4 text-left"},MZ={card:"size-6 text-icons-normal","compact-card":"size-6 text-icons-normal","flow-card":"size-5 text-icons-normal"},M$={desktop:"floor-desktop-product-card",tablet:"floor-tablet-product-card",phone:"floor-mobile-product-card"},M0={default:"icon",sm:"icon-sm",lg:"icon-lg",icon:"icon","icon-sm":"icon-sm","icon-lg":"icon-lg"},M1={card:"flex h-24 w-[254px] items-center gap-4 overflow-hidden rounded-2xl bg-background-containers p-4 text-left text-text-dark shadow-[var(--shadow-login)]","framed-row":"flex h-[72px] items-center justify-between gap-3 overflow-hidden rounded-2xl bg-background-containers p-4 text-left text-text-dark shadow-[var(--shadow-login)]","plain-row":"flex w-full items-center justify-between gap-3 rounded-full bg-background-containers text-left"},M2={desktop:"floor-room-card",tablet:"floor-tablet-room-card",phone:void 0},M3={desktop:"floor-desktop-room-name",tablet:"floor-tablet-room-name",phone:"floor-mobile-room-name"},M9={"product-card":function({actions:e,band:t,slot:r,presentation:n}){let i,{t:a}=tc(),{displayUnit:o,name:s,type:l}=C6(),{containerRef:c}=Er(),{material:u,selectedObject:d,src:h,tinuuid:p}=Et(),{variantItems:A,selectedTinuuid:f,selectVariant:g}=function(){let{tinuuid:e,selectedObject:t,selectResourceVariant:r,apiKey:n,baseURL:i,language:a,source:o,widgetSession:s}=Et(),{type:l}=C6(),{decodeVariant:c}=Ma(l),u=t?.kit?.uuid,d=t?.owner?.uuid,{data:h,fetchNextPage:p,hasNextPage:A,isFetchingNextPage:f,isFetchNextPageError:g}=rK({queryKey:Cl(u,d,{apiKey:n,baseURL:i,language:a,source:o,resourceType:l}),enabled:!!c&&!!u&&!!d,queryFn:({pageParam:e,signal:t})=>{if(!u||!d)throw Error("Kit uuid and owner uuid are required.");return Cd(u,d,e,{apiKey:n,baseURL:i,language:a,signal:t,source:o,widgetSession:s,resourceType:l})},initialPageParam:1,getNextPageParam:(e,t,r)=>r<e.pages_count?r+1:void 0},r_,void 0);(0,eu.useEffect)(()=>{!A||f||g||p({cancelRefetch:!1})},[h?.pages.length,p,A,f,g]);let m=(0,eu.useMemo)(()=>h?.pages.flatMap(e=>e.objs)??[],[h]),v=(0,eu.useMemo)(()=>{let e=new Set;return m.flatMap(t=>{let r=c?.(t);return!t.tinuuid||!t.materials?.[0]||!r||e.has(t.tinuuid)?[]:(e.add(t.tinuuid),[{tinuuid:t.tinuuid,...r}])})},[m,c]);return{variantItems:v,selectedTinuuid:e,selectVariant:e=>!!v.some(t=>t.tinuuid===e)&&(r(e),!0)}}(),{materialSource:m,offersReplacement:v,hasPictureFrame:b}=EN(l),y="drag-with-rotation-and-angle"===CG[l].manipulation,w=M$[t],x=a(`resourceType.${l}.${n.actionLabelResourceTypeKey}`),C=Cp("w-fit shrink-0","fixed"===n.actionWidth&&"w-[137px]"),E=a(`units.${o}`),S=e.isMaterialSelectionOpen,M=Mo(l,d,u,s),I="artwork-src"===m?h:(i=u?.previews?.[0],i?.subRes?.small??i?.url??d?.preview?.subRes?.small??d?.preview?.url??d?.mainPreview),B=A.find(e=>e.tinuuid===f),k=function(e){let t=e?.trim();if(!t||ML.test(t)&&!/^https?:/i.test(t)||/^[./?#]/.test(t)&&!t.startsWith("//"))return;let r=t.startsWith("//")?`https:${t}`:/^https?:/i.test(t)?t:`https://${t}`;try{let e=new URL(r);if("http:"!==e.protocol&&"https:"!==e.protocol||!e.hostname)return;return e.href}catch{return}}(d?.tinuuid===p?d.destinationUrl:void 0),T=S?e.onMaterialSelectionActionPointerDown:void 0;return(0,ec.jsxs)("div",{className:MX[n.appearance],"data-chrome-slot":r,"data-neurodyn-room-viewer-product":"","data-testid":w,children:[(0,ec.jsx)("div",{className:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",children:I?(0,ec.jsx)("img",{src:I,alt:"",className:"size-full min-h-0 object-cover"}):(0,ec.jsx)(CT,{className:MZ[n.appearance]})}),(0,ec.jsxs)("div",{className:"grid min-h-16 min-w-0 flex-1 grid-cols-1 content-center gap-3",children:[(0,ec.jsxs)("div",{className:"flex min-w-0 items-baseline justify-between gap-4",children:[(0,ec.jsxs)("div",{className:"min-w-0",children:[(0,ec.jsx)("div",{className:"sr-only",children:a(`resourceType.${l}.productCardTitle`)}),(0,ec.jsx)("div",{className:"typo-button-normal overflow-x-clip text-ellipsis whitespace-nowrap text-text-dark",children:M})]}),k&&(0,ec.jsx)("a",{href:k,target:"_blank",rel:"noopener noreferrer",className:"typo-button-normal shrink-0 text-button-primary underline-offset-2 hover:underline","data-testid":`${w}-description-link`,children:a("floor.scene.description")})]}),(0,ec.jsxs)("div",{className:"flex flex-nowrap items-center gap-4",children:[v&&(0,ec.jsxs)(Cf,{type:"button",variant:n.actionVariant,size:n.actionSize,[S8]:!0,"aria-expanded":S,className:C,onPointerDown:T?e=>{e.preventDefault(),e.stopPropagation(),T()}:void 0,onClick:S?e.closeMaterialSelection:e.openMaterialSelection,children:[S?(0,ec.jsx)(CM,{className:"size-4"}):(0,ec.jsx)(CD,{className:"size-4"}),S?a("floor.scene.hideCatalog"):x]}),(b||y)&&(0,ec.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:[b&&(0,ec.jsx)(MQ,{label:x,variant:n.actionVariant,size:n.actionSize,className:C}),y&&(0,ec.jsx)(MK,{variant:n.actionVariant,size:M0[n.actionSize]})]}),A.length>1&&!!B&&(0,ec.jsxs)(MB,{value:f??void 0,onValueChange:g,children:[(0,ec.jsx)(MT,{size:"sm",className:"ml-auto w-fit min-w-0 shrink data-[size=sm]:h-8 *:data-[slot=select-value]:block *:data-[slot=select-value]:truncate","data-testid":`${w}-variant-select`,children:(0,ec.jsx)(Mk,{})}),(0,ec.jsx)(MR,{portalContainer:c,children:A.map(e=>{var t;let r;return(0,ec.jsx)(MD,{value:e.tinuuid,children:"color"in e?e.color:(t=e.size,r=t.split("\xd7").map(e=>"cm"===o?e:Math.round(MN(Number(e)/100,o)).toString()).join("\xd7"),`${r} ${E}`)},e.tinuuid)})})]})]})]})]})},"room-card":function({actions:e,band:t,slot:r,presentation:n}){let{t:i}=tc(),{room:a}=Ee(),o=i(`rooms.${a.id}`,{defaultValue:a.name}),s=(0,ec.jsx)(Cf,{type:"button",variant:n.actionVariant,size:n.actionSize,className:"card"===n.appearance?"w-fit":"shrink-0",onClick:e.openInteriorSelection,children:i(n.actionLabelKey)});return"card"===n.appearance?(0,ec.jsxs)("div",{className:M1[n.appearance],"data-chrome-slot":r,"data-neurodyn-room-viewer-room":"","data-testid":M2[t],children:[(0,ec.jsx)("img",{crossOrigin:"anonymous",src:Cj(a),alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,ec.jsxs)("span",{className:"grid min-w-0 flex-1 content-center gap-3",children:[(0,ec.jsx)("span",{className:"typo-button-normal block overflow-x-clip text-ellipsis whitespace-nowrap text-text-dark","data-testid":M3[t],children:o}),s]})]}):(0,ec.jsxs)("div",{className:M1[n.appearance],"data-chrome-slot":r,"data-neurodyn-room-viewer-room":"","data-testid":M2[t],children:[(0,ec.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,ec.jsx)("img",{crossOrigin:"anonymous",src:Cj(a),alt:"",className:"size-10 shrink-0 rounded-full object-cover"}),(0,ec.jsxs)("span",{className:"grid min-w-0",children:[(0,ec.jsx)("span",{className:"typo-base-12 truncate text-text-light",children:i("floor.scene.interiorCardTitle")}),(0,ec.jsx)("span",{className:"typo-button-normal overflow-x-clip text-ellipsis whitespace-nowrap text-text-dark","data-testid":M3[t],children:o})]})]}),s]})},"ar-card":function({band:e,slot:t,presentation:r}){let{t:n}=tc(),{room:i}=Ee(),{type:a}=C6(),{tinuuid:o}=Et();return Mv(CG[a].handoff,o)?"card"===r.appearance?(0,ec.jsxs)("div",{className:"flex h-24 w-[280px] items-center gap-4 overflow-hidden rounded-2xl bg-background-containers p-4 text-text-dark shadow-[var(--shadow-login)]","data-chrome-slot":t,"data-neurodyn-room-viewer-try-at-home":"","data-testid":MI[e],children:[(0,ec.jsx)("img",{crossOrigin:"anonymous",src:Cj(i),alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,ec.jsxs)("div",{className:"grid min-w-0 flex-1 content-center gap-2",children:[(0,ec.jsx)(ME,{buttonLabel:n(r.actionLabelKey),buttonVariant:r.actionVariant,buttonSize:r.actionSize,buttonClassName:"w-fit"}),(0,ec.jsx)("div",{className:"typo-base-12 truncate font-medium text-text-light",children:n("floor.scene.tryAtHomeBody")})]})]}):(0,ec.jsx)(ME,{className:"w-full","data-chrome-slot":t,"data-neurodyn-room-viewer-try-at-home":"",buttonLabel:n(r.actionLabelKey),buttonLeadingIcon:(0,ec.jsx)(CF,{className:MM[r.appearance]}),buttonVariant:r.actionVariant,buttonSize:r.actionSize,buttonClassName:MS[r.appearance]}):null}},M4={"immersive-default":{desktop:[{slot:"product-card",container:"leading",appearance:"card",actionLabelResourceTypeKey:"replaceProduct",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"leading",appearance:"card",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"card",actionLabelKey:"floor.scene.tryAtHome",actionVariant:"secondary",actionSize:"sm"}],tablet:[{slot:"product-card",container:"leading",appearance:"compact-card",actionLabelResourceTypeKey:"replaceProduct",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"trailing",appearance:"framed-row",actionLabelKey:"floor.interiorSelection.chooseInteriorShort",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"inline-compact",actionLabelKey:"floor.scene.tryAtHome",actionVariant:"secondary",actionSize:"default"}],phone:[{slot:"product-card",container:"leading",appearance:"flow-card",actionLabelResourceTypeKey:"replaceProductShort",actionVariant:"outline",actionSize:"sm",actionWidth:"fixed"},{slot:"room-card",container:"trailing",appearance:"plain-row",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"inline-large",actionLabelKey:"floor.scene.tryAtHome",actionVariant:"secondary",actionSize:"lg"}]},"immersive-panels":{desktop:[{slot:"product-card",container:"leading",appearance:"card",actionLabelResourceTypeKey:"replaceProduct",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"leading",appearance:"card",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"}],tablet:[{slot:"product-card",container:"leading",appearance:"compact-card",actionLabelResourceTypeKey:"replaceProduct",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"trailing",appearance:"framed-row",actionLabelKey:"floor.interiorSelection.chooseInteriorShort",actionVariant:"outline",actionSize:"sm"}],phone:[{slot:"product-card",container:"leading",appearance:"flow-card",actionLabelResourceTypeKey:"replaceProductShort",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"trailing",appearance:"plain-row",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"}]},"immersive-wallart":{desktop:[{slot:"product-card",container:"leading",appearance:"card",actionLabelResourceTypeKey:"appearance",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"leading",appearance:"card",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"card",actionLabelKey:"ar.viewInPlace",actionVariant:"secondary",actionSize:"sm"}],tablet:[{slot:"product-card",container:"leading",appearance:"compact-card",actionLabelResourceTypeKey:"appearance",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"trailing",appearance:"framed-row",actionLabelKey:"floor.interiorSelection.chooseInteriorShort",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"inline-compact",actionLabelKey:"ar.viewInPlace",actionVariant:"secondary",actionSize:"default"}],phone:[{slot:"product-card",container:"leading",appearance:"flow-card",actionLabelResourceTypeKey:"appearance",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"trailing",appearance:"plain-row",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"inline-large",actionLabelKey:"ar.viewInPlace",actionVariant:"secondary",actionSize:"lg"}]}};function M5({actions:e,band:t,entry:r}){let n=M9[r.slot];return(0,ec.jsx)(n,{actions:e,band:t,slot:r.slot,presentation:r})}function M8({actions:e,band:t,container:r}){let{type:n}=C6(),i=M4[CG[n].presentation];return(0,ec.jsx)(ec.Fragment,{children:i[t].filter(e=>e.container===r).map(r=>(0,ec.jsx)(M5,{actions:e,band:t,entry:r},r.slot))})}async function M6(e,t={}){let r=t.source??"default",n={image:e};if(xP({apiKey:t.apiKey,source:r})){let e=await t.widgetSession?.getTokenForRequest();return x6(n,{baseURL:t.baseURL,headers:{"x-api-key":t.apiKey,...e?{[Ce]:e}:{}},signal:t.signal,timeout:0,params:{productType:x_({apiKey:t.apiKey,source:r,resourceType:t.resourceType})}})}return t.signal?x$(n,{signal:t.signal,timeout:0}):x$(n,{timeout:0})}let M7=[{id:0,label:"empty",rgb:[0,0,0]},{id:1,label:"floor",rgb:[32,208,96]},{id:2,label:"wall-1",rgb:[255,59,48]},{id:3,label:"wall-2",rgb:[10,132,255]},{id:4,label:"ceiling",rgb:[255,214,10]},{id:5,label:"plane-5",rgb:[191,90,242]},{id:6,label:"plane-6",rgb:[255,159,10]},{id:7,label:"plane-7",rgb:[100,210,255]},{id:8,label:"plane-8",rgb:[255,45,85]}];function Ie(){try{return"1"===window.localStorage.getItem("neurodyn-room-viewer:debug-mask-export")}catch{return!1}}async function It(e,t){var r,n,i;let a,o,s,l,c=await (r=e.planeIds.dataPng,new Promise((e,t)=>{let n=new Image;n.onload=()=>e(n),n.onerror=()=>t(Error("Failed to load room plane id mask image.")),n.crossOrigin="anonymous",n.src=r})),u=e.planeIds.width||c.naturalWidth||c.width,d=e.planeIds.height||c.naturalHeight||c.height,h=document.createElement("canvas"),p=h.getContext("2d",{willReadFrequently:!0});if(!p)throw Error("Failed to prepare room plane mask canvas.");h.width=u,h.height=d,p.drawImage(c,0,0,u,d);let A=p.getImageData(0,0,u,d),f=document.createElement("canvas"),g=f.getContext("2d");if(!g)throw Error("Failed to prepare room debug mask canvas.");f.width=u,f.height=d;for(let e=0;e<u*d;e++){let t=4*e,r=function(e){return M7.find(t=>t.id===e)??{id:e,label:`plane-${e}`,rgb:[73*e%255,151*e%255,211*e%255]}}(A.data[t]??0);A.data[t]=r.rgb[0],A.data[t+1]=r.rgb[1],A.data[t+2]=r.rgb[2],A.data[t+3]=255}g.putImageData(A,0,0),n=await new Promise((e,t)=>{f.toBlob(r=>{r?e(r):t(Error("Failed to export room plane mask image."))},"image/png")}),o=Array.from((a=t.lastIndexOf("."))>0?t.slice(0,a):t).map(e=>{let t=e.charCodeAt(0),r="."===e||"_"===e||"-"===e;return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122||r?e:"-"}).join("").split("-").filter(Boolean).join("-"),i=`${o||"room"}.debug-mask.colors.png`,s=URL.createObjectURL(n),(l=document.createElement("a")).href=s,l.download=i,l.style.display="none",document.body.append(l),l.click(),l.remove(),window.setTimeout(()=>URL.revokeObjectURL(s),1e3)}let Ir="custom-interiors";function In(){return"u">typeof crypto&&"function"==typeof crypto.randomUUID?`custom-interior-${crypto.randomUUID()}`:`custom-interior-${Date.now()}-${Math.random().toString(36).slice(2)}`}function Ii(){let e="u"<typeof indexedDB?null:indexedDB;return e?new Promise((t,r)=>{let n=e.open("neurodyn-floor-custom-interiors",1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(Ir)||e.createObjectStore(Ir,{keyPath:"id"})},n.onerror=()=>r(n.error??Error("Failed to open Custom Interior store.")),n.onsuccess=()=>t(n.result)}):Promise.resolve(null)}async function Ia(e,t,r=new Date){let n=await Ii();if(!n)return null;let i={id:In(),schemaVersion:1,name:e.name,fileName:e.name,createdAt:r.toISOString(),imageBlob:e,scene:t};try{let e=n.transaction(Ir,"readwrite");return e.objectStore(Ir).put(i),await new Promise((t,r)=>{e.oncomplete=()=>t(),e.onerror=()=>r(e.error??Error("Custom Interior transaction failed.")),e.onabort=()=>r(e.error??Error("Custom Interior transaction aborted."))}),i}finally{n.close()}}async function Io(){let e=await Ii();if(!e)return[];try{return await new Promise((t,r)=>{let n=e.transaction(Ir,"readonly").objectStore(Ir).getAll();n.onerror=()=>r(n.error??Error("Failed to read Custom Interiors.")),n.onsuccess=()=>{let e=n.result.filter(e=>1===e.schemaVersion).sort((e,t)=>Date.parse(t.createdAt)-Date.parse(e.createdAt));t(e)}})}finally{e.close()}}function Is(e){let t=[];return{rooms:e.map(e=>{let r=URL.createObjectURL(e.imageBlob);return t.push(r),{id:e.id,name:e.name,image_url:r,scene:e.scene}}),revokeObjectUrls:()=>{for(let e of t)URL.revokeObjectURL(e);t.length=0}}}function Il(e){let t="dialog"===e?"interior-selection":"scene";return{step:t,hasSceneSelection:"scene"===t,sceneResetKey:0}}function Ic(e,t){switch(t.type){case"clear-interior-selection":return{...e,step:"interior-selection",hasSceneSelection:!1,automaticRoomId:t.automaticRoomId};case"select-initial-room":return{step:"scene",hasSceneSelection:!0,sceneResetKey:e.sceneResetKey+1,automaticRoomId:t.roomId};case"open-interior-selection":case"return-to-interior-selection":return{...e,step:"interior-selection"};case"dismiss-interior-selection":case"recover-to-scene":return e.hasSceneSelection?{...e,step:"scene"}:e;case"start-custom-interior-processing":return{...e,step:"processing-custom-interior"};case"commit-interior-selection":return{step:"scene",hasSceneSelection:!0,sceneResetKey:e.sceneResetKey+1}}}function Iu(e,t){return!e.aborted&&t()}class Id extends Error{constructor(){super("Room Photo has a Missing Surface."),this.name="CustomInteriorMissingSurfaceError"}}async function Ih({abortSignal:e,apiOptions:t,commitCustomInteriorSelection:r,downloadDebugMask:n,file:i,isActive:a,isDebugMaskExportEnabled:o,onDebugMaskError:s,onPersistenceError:l,onProcessingComplete:c,predictRoomScene:u,saveCustomInterior:d,surfaces:h,trackRuntimeCustomInterior:p,waitForProcessingCompletion:A}){let f=await u(i,{...t,signal:e});if(!Iu(e,a))return null;if(o()&&n(f,i.name).catch(s),Si(f,h))throw Sa({planes:f.planes,source:"room-photo-upload",surfaces:h}),new Id;let g=p(i,f);return Iu(e,a)&&g&&(d(i,f).catch(l),c(),await A(),Iu(e,a))?(r(g),g):null}function Ip(){return new Promise(e=>window.setTimeout(e,250))}function IA(e){console.error("Failed to export room debug mask",e)}function If(e){console.error("Failed to persist Custom Interior",e)}function Ig(e){console.error("Failed to prepare Custom Interior",e)}function Im({showDialogCloseButton:e=!1}){let{t}=tc(),{name:r,type:n}=C6(),{missingSurfaceMessage:i}=CG[n],{accessError:a,glbUrl:o,apiKey:s,baseURL:l,hasRooms:c,source:u,widgetSession:d,isViewerAccessPending:h,loadError:p,selectedObject:A,tinuuid:f}=Et(),{clearActiveError:g,handleAccessError:m}=function(){let{setAccessError:e,setLoadError:t}=Et();return{clearActiveError:(0,eu.useCallback)(()=>{e(null),t(null)},[e,t]),handleAccessError:e}}(),{room:v,sourceRooms:b}=Ee(),{resourceRef:y,containerRef:w,setContainerRef:x,sceneLoad:C,isRoomScenePending:E}=Er(),{dialogPortalContainer:S,viewerSurface:M,viewerDialogOpen:I,onViewerDialogOpenChange:B}=C7(),[k,T]=(0,eu.useState)(!1),[R,D]=(0,eu.useState)(!1),P=(0,eu.useRef)(null),_=(0,eu.useRef)(!1),L=a??p,F=!!L,N=A?.owner?.name??A?.brand??null,{canShare:O,download:Q,isDownloading:U,isSharing:z,share:G}=function({captureRef:e,fallbackToClipboard:t=!1,fileName:r="room-scene.png",shareMessage:n}){let[i,a]=(0,eu.useState)(!1),[o,s]=(0,eu.useState)(!1),l=(0,eu.useMemo)(()=>"u">typeof navigator&&"function"==typeof navigator.share||t&&"u">typeof navigator&&"function"==typeof navigator.clipboard?.writeText,[t]),c=(0,eu.useCallback)(async()=>{if(!l)return;let i="u">typeof navigator&&"function"==typeof navigator.share,o=window.location.href,s=`${n}
7240
- ${o}`;a(!0);try{if(!i&&t)return void await S1(s);let n=e.current;if(n)try{let e=await n.capture(),t=new File([e],r,{type:e.type||"image/png"});if(navigator.canShare?.({files:[t]}))return void await navigator.share({text:s,files:[t]})}catch(e){console.error("Failed to generate scene screenshot for sharing",e)}await navigator.share({text:s,url:o})}catch(e){e instanceof DOMException&&"AbortError"===e.name||console.error("Failed to share scene",e)}finally{a(!1)}},[l,e,t,r,n]);return{canShare:l,download:(0,eu.useCallback)(async()=>{let t=e.current;if(t){s(!0);try{var n;let e,i;n=await t.capture(),e=URL.createObjectURL(n),(i=document.createElement("a")).href=e,i.download=r,document.body.append(i),i.click(),i.remove(),URL.revokeObjectURL(e)}catch(e){console.error("Failed to download scene screenshot",e)}finally{s(!1)}}},[e,r]),isDownloading:o,isSharing:i,share:c}}({captureRef:P,fallbackToClipboard:!0,shareMessage:t(`shareMessage.${n}`)}),H=(0,eu.useCallback)(()=>{T(!1),D(!1)},[]),j=(0,eu.useCallback)(()=>{if(_.current){_.current=!1;return}T(!0),D(!1)},[]),V=(0,eu.useCallback)(()=>{_.current=!0,H()},[H]),q=(0,eu.useCallback)(()=>{D(!0),T(!1)},[]),W=function({activeError:e,apiKey:t,baseURL:r,clearActiveError:n,closeMaterialSelection:i,glbUrl:a,handleAccessError:o,hasDialogPortalContainer:s,hasRooms:l,isRoomScenePending:c,isViewerAccessPending:u,onViewerDialogOpenChange:d,resourceType:h,sceneLoad:p,source:A,sourceRooms:f,viewerDialogOpen:g,viewerSurface:m,widgetSession:v}){let b=function(e){let{initialRoomId:t,room:r,sourceRooms:n}=Ee(),{isViewerAccessPending:i,loadError:a,setLoadError:o}=Et(),{type:s}=C6(),{patchSceneLoad:l,sceneGestures:{setAngle:c,setRotation:u}}=En(),d=(0,eu.useMemo)(()=>({patchSceneLoad:l,setAngle:c,setRotation:u}),[l,c,u]),h=n.find(e=>e.id===t),p=!!h&&(!h?.scene||Sn(h.scene,CH(s)).length>0),A=function(e,t,r){let[n,i]=(0,eu.useReducer)(Ic,e,Il),[a,o]=(0,eu.useState)();!r?.isPending&&a!==r?.roomId&&(o(r?.roomId),r&&i(r.isAvailable?{type:"select-initial-room",roomId:r.roomId}:{type:"clear-interior-selection"}));let s=(0,eu.useCallback)(e=>{e(),function({patchSceneLoad:e,setAngle:t,setRotation:r}){t(0),r(0),e(SJ)}(t),i({type:"commit-interior-selection"})},[t]),l=(0,eu.useCallback)(()=>{i({type:"dismiss-interior-selection"})},[]),c=(0,eu.useCallback)(()=>{i({type:"open-interior-selection"})},[]),u=(0,eu.useCallback)(()=>{i({type:"recover-to-scene"})},[]),d=(0,eu.useCallback)(()=>{i({type:"return-to-interior-selection"})},[]),h=(0,eu.useCallback)(()=>{i({type:"clear-interior-selection",automaticRoomId:n.automaticRoomId})},[n.automaticRoomId]),p=(0,eu.useCallback)(()=>{i({type:"start-custom-interior-processing"})},[]);return(0,eu.useMemo)(()=>({...n,commitInteriorSelection:s,dismissInteriorSelection:l,openInteriorSelection:c,recoverToScene:u,returnToInteriorSelection:d,clearInteriorSelection:h,startCustomInteriorProcessing:p}),[s,l,c,u,d,h,p,n])}(e,d,t?{roomId:t,isAvailable:p,isPending:i}:void 0),{automaticRoomId:f,clearInteriorSelection:g}=A;return(0,eu.useEffect)(()=>{f&&r.id===f&&C$(a)&&(g(),o(null))},[f,g,a,r.id,o]),A}(m),y=CH(h),{appendRuntimeCustomInterior:w,customRooms:x}=function({listCustomInteriors:e,surfaces:t}){let{appendRuntimeCustomInterior:r,customRooms:n,replaceRuntimeCustomInteriors:i}=function(){let[e,t]=(0,eu.useState)(()=>[]),r=(0,eu.useRef)(null),n=(0,eu.useCallback)(e=>{r.current?.revokeObjectUrls();let n=Is(e);return r.current=n,t(n.rooms),n.rooms},[]),i=(0,eu.useCallback)((e,n)=>{let i=Is([{id:In(),schemaVersion:1,name:e.name,fileName:e.name,createdAt:new Date().toISOString(),imageBlob:e,scene:n}]),a=i.rooms[0];if(!a)return i.revokeObjectUrls(),null;let o=r.current;return r.current={rooms:[],revokeObjectUrls:()=>{o?.revokeObjectUrls(),i.revokeObjectUrls()}},t(e=>[a,...e.filter(e=>e.id!==a.id)]),a},[]);return(0,eu.useEffect)(()=>()=>{r.current?.revokeObjectUrls()},[]),(0,eu.useMemo)(()=>({appendRuntimeCustomInterior:i,customRooms:e,replaceRuntimeCustomInteriors:n}),[i,e,n])}(),a=(0,eu.useRef)(!0);(0,eu.useEffect)(()=>(a.current=!0,()=>{a.current=!1}),[]);let o=(0,eu.useCallback)(async()=>{let r=await e();a.current&&i(r.filter(e=>!Si(e.scene,t)))},[e,i,t]);return(0,eu.useEffect)(()=>{o()},[o]),(0,eu.useMemo)(()=>({appendRuntimeCustomInterior:r,customRooms:n,replaceRuntimeCustomInteriors:i,refreshCustomInteriors:o}),[r,n,o,i])}({listCustomInteriors:Io,surfaces:y}),C=(0,eu.useMemo)(()=>new Set(f.map(e=>e.id)),[f]),{commitCustomInteriorSelection:E,selectInterior:S}=function(e){let{room:t,setRoomId:r,setRooms:n}=Ee(),{widgetSession:i}=Et();return function({floorFlow:e,customRooms:t,selectedRoomId:r,onInteriorSelected:n,restoreSourceRooms:i,setRoomId:a,setRooms:o}){let s=(0,eu.useCallback)(t=>{e.commitInteriorSelection(()=>{o(e=>[t,...i(e).filter(e=>e.id!==t.id)]),a(t.id)}),n?.()},[e,n,i,a,o]),l=(0,eu.useCallback)(t=>{let s=t===r;s&&e.hasSceneSelection||(e.commitInteriorSelection(()=>{o(i),a(t)}),s||n?.())},[e,n,i,r,a,o]),c=(0,eu.useCallback)(n=>{if(n===r&&e.hasSceneSelection)return;let i=t.find(e=>e.id===n);i&&s(i)},[e.hasSceneSelection,s,t,r]),u=(0,eu.useCallback)(e=>{t.some(t=>t.id===e)?c(e):l(e)},[t,c,l]);return(0,eu.useMemo)(()=>({commitCustomInteriorSelection:s,selectInterior:u}),[s,u])}({...e,selectedRoomId:t.id,onInteriorSelected:()=>Ci(i,"interior_selected"),setRoomId:r,setRooms:n})}({floorFlow:b,customRooms:x,restoreSourceRooms:(0,eu.useCallback)(e=>[...f,...e.filter(e=>!C.has(e.id))],[C,f])}),M=function(e){let{setIsRoomScenePending:t}=En();return function({apiOptions:e,floorFlow:t,commitCustomInteriorSelection:r,downloadDebugMask:n,isDebugMaskExportEnabled:i,onAccessError:a,onDebugMaskError:o,onPersistenceError:s,onProcessingError:l,predictRoomScene:c,saveCustomInterior:u,setIsRoomScenePending:d,surfaces:h,trackRuntimeCustomInterior:p,waitForProcessingCompletion:A}){let[f,g]=(0,eu.useState)(!1),[m,v]=(0,eu.useState)(!1),[b,y]=(0,eu.useState)(null),[w,x]=(0,eu.useState)(null),[C,E]=(0,eu.useState)(!1),[S,M]=(0,eu.useState)(0),I=(0,eu.useRef)(null),B=(0,eu.useRef)(!1),k=(0,eu.useRef)(!0),T=(0,eu.useRef)(b);b&&(T.current=b),(0,eu.useEffect)(()=>(k.current=!0,()=>{k.current=!1,I.current?.abort()}),[]);let R=(0,eu.useCallback)(()=>{y(null),x(null),E(!1)},[]),D=(0,eu.useCallback)(e=>{R(),g(!1),e()},[R]),P=(0,eu.useCallback)(async f=>{if(R(),!f.type.startsWith("image/"))return void g(!0);g(!1),v(!1),t.startCustomInteriorProcessing(),B.current=!0;let m=new AbortController;I.current?.abort(),I.current=m,d(!0);try{await Ih({abortSignal:m.signal,apiOptions:e,commitCustomInteriorSelection:r,downloadDebugMask:n,file:f,isActive:()=>k.current,isDebugMaskExportEnabled:i,onDebugMaskError:o,onPersistenceError:s,onProcessingComplete:()=>{v(!0)},predictRoomScene:c,saveCustomInterior:u,surfaces:h,trackRuntimeCustomInterior:p,waitForProcessingCompletion:A})}catch(r){if(m.signal.aborted)return;let e=xF(r);if(e){B.current&&E(!0),a(e);return}let t=r instanceof Id?"custom-interior-missing-surface":"custom-interior-processing";if("custom-interior-processing"===t&&l(r),B.current){x(t),E(!0);return}y(t)}finally{I.current===m&&(I.current=null,k.current&&d(!1))}},[e,t,r,n,i,a,o,s,l,c,R,u,d,h,p,A]),_=(0,eu.useCallback)(()=>{R(),g(!1),t.returnToInteriorSelection(),M(e=>e+1)},[t,R]),L=(0,eu.useCallback)(()=>{R(),t.returnToInteriorSelection()},[t,R]),F=(0,eu.useCallback)(({clearError:e,closeMaterialSelection:r})=>{e(),r(),t.hasSceneSelection&&t.recoverToScene()},[t]),N=(0,eu.useCallback)(()=>{B.current=!1,E(!1),w&&(y(w),x(null))},[w]),O=(0,eu.useCallback)(()=>k.current,[]);return(0,eu.useMemo)(()=>({displayedUploadError:b??T.current,isCustomInteriorProcessingComplete:m,isInvalidFile:f,isMounted:O,isProcessingDialogClosingForError:C,pendingUploadError:w,uploadError:b,uploadRetryRequestId:S,cancelUploadError:L,handleProcessingDialogCloseAnimationEnd:N,openInteriorSelection:D,processUploadFile:P,recoverFromActiveError:F,resetUploadErrorPresentation:R,tryUploadAgain:_}),[L,N,m,f,O,C,D,w,P,F,R,_,b,S])}({...e,setIsRoomScenePending:t})}({apiOptions:(0,eu.useMemo)(()=>({resourceType:h,apiKey:t,baseURL:r,source:A,widgetSession:v}),[t,r,h,A,v]),floorFlow:b,commitCustomInteriorSelection:E,downloadDebugMask:It,isDebugMaskExportEnabled:Ie,onAccessError:o,onDebugMaskError:IA,onPersistenceError:If,onProcessingError:Ig,predictRoomScene:M6,saveCustomInterior:Ia,surfaces:y,trackRuntimeCustomInterior:w,waitForProcessingCompletion:Ip}),{dismissInteriorSelection:I,hasSceneSelection:B,openInteriorSelection:k,sceneResetKey:T,step:R}=b,{cancelUploadError:D,displayedUploadError:P,handleProcessingDialogCloseAnimationEnd:_,isCustomInteriorProcessingComplete:L,isInvalidFile:F,isProcessingDialogClosingForError:N,openInteriorSelection:O,pendingUploadError:Q,processUploadFile:U,recoverFromActiveError:z,resetUploadErrorPresentation:G,tryUploadAgain:H,uploadError:j,uploadRetryRequestId:V}=M,q=l&&B,W=(0,eu.useRef)(e),K=!!(e&&q&&a);e&&(W.current=e);let J=(0,eu.useCallback)(()=>{q&&(G(),I())},[I,q,G]),Y=(0,eu.useCallback)(()=>{i(),O(k)},[i,k,O]),X=(0,eu.useCallback)(()=>{z({clearError:n,closeMaterialSelection:i})},[n,i,z]),Z=(0,eu.useCallback)(()=>{n(),Y()},[n,Y]),$=(0,eu.useCallback)(e=>{if(!e){if(q)return void J();d?.(!1)}},[J,q,d]),ee=(0,eu.useCallback)(e=>{if(!e){if(K)return void X();d?.(!1)}},[K,X,d]),et=(0,eu.useCallback)(e=>{e||D()},[D]);!function({fallbackMs:e,handleProcessingDialogCloseAnimationEnd:t,isProcessingDialogClosingForError:r}){(0,eu.useEffect)(()=>{if(!r)return;let n=window.setTimeout(t,e);return()=>window.clearTimeout(n)},[e,t,r])}({fallbackMs:220,handleProcessingDialogCloseAnimationEnd:_,isProcessingDialogClosingForError:N});let er=function({activeError:e,canRecoverFromActiveError:t,floorFlow:r,hasDialogPortalContainer:n,hasRooms:i,isProcessingDialogClosingForError:a,isRoomScenePending:o,isViewerAccessPending:s,pendingUploadError:l,sceneLoad:c,uploadError:u,viewerDialogOpen:d,viewerSurface:h}){let p="dialog"===h&&n,A=!p||d,f=i&&r.hasSceneSelection,g=i||"scene"!==r.step?r.step:"interior-selection",m=!s&&f&&(!e||t),v=f||p,b=!s&&!e&&v,y=!s&&!e&&!v&&"interior-selection"===g;return{activeErrorDialog:{open:!a&&!!e&&A,showCloseButton:!t},interiorSelection:{open:b&&"interior-selection"===g&&A,presentation:b?"dialog":y?"screen":null,shouldRender:b||y},processingDialog:{open:!e&&!u&&!l&&o&&"processing-custom-interior"===r.step&&A},scene:{isLoading:o||!(SK(c)&&c.shadersReady),resetKey:r.sceneResetKey,shouldRender:m,shouldRenderDialog:m},surface:{usesSiblingDialogFlow:p},uploadErrorDialog:{open:!a&&!e&&!!u&&A}}}({activeError:e,canRecoverFromActiveError:K,floorFlow:{hasSceneSelection:B,sceneResetKey:T,step:R},hasDialogPortalContainer:s,hasRooms:l,isProcessingDialogClosingForError:N,isRoomScenePending:c,isViewerAccessPending:u,pendingUploadError:Q,sceneLoad:p,uploadError:j,viewerDialogOpen:g,viewerSurface:m});return{...er,activeErrorDialog:{...er.activeErrorDialog,onCancel:K?X:void 0,onOpenChange:ee,onTryAgain:"room-missing-surface"===e?Z:K?X:void 0,variant:e??W.current},customRooms:x,interiorSelection:{...er.interiorSelection,isInvalidFile:F,onOpenChange:$,onSelectRoom:S,onUploadFile:U,openFromScene:Y,uploadRetryRequestId:V},sourceRooms:f,processingDialog:{...er.processingDialog,isComplete:L,onCloseAnimationEnd:_,onOpenChange:er.surface.usesSiblingDialogFlow?d:void 0},step:R,uploadErrorDialog:{...er.uploadErrorDialog,onCancel:D,onOpenChange:et,onTryAgain:H,variant:P}}}({activeError:L,apiKey:s,baseURL:l,clearActiveError:g,closeMaterialSelection:H,glbUrl:o,handleAccessError:m,hasDialogPortalContainer:null!==S,hasRooms:c,isRoomScenePending:E,isViewerAccessPending:h,onViewerDialogOpenChange:B,resourceType:n,sceneLoad:C,source:u,sourceRooms:b,viewerDialogOpen:I,viewerSurface:M,widgetSession:d}),K=(0,eu.useRef)(null),J=!S2(W.scene.isLoading,K,{fadedOutIfMountedLoaded:!0}),Y=S2(W.scene.isLoading||!W.scene.shouldRender||!I,K),X=Em(),{pending:Z,finish:$}=function(e,t,r){let[n,i]=(0,eu.useState)({open:e,pending:e&&t,sceneKey:r});n.open!==e?i({open:e,pending:e&&t,sceneKey:r}):n.sceneKey!==r?i({...n,sceneKey:r,pending:n.pending&&null===n.sceneKey}):n.pending&&!t&&i({...n,pending:!1});let a=(0,eu.useCallback)(()=>i(e=>({...e,pending:!1})),[]);return{pending:e&&n.pending,finish:a}}(I,CU("(max-width: 639px)")&&"focus-resource"===CG[n].introduction,W.scene.shouldRender?`${W.scene.resetKey}:${f??""}`:null),ee=X?.select,et=(0,eu.useCallback)(()=>{$(),ee?.("0,0")},[$,ee]),er=(0,eu.useMemo)(()=>Z?{ready:Y,target:y,onComplete:et,onCancel:$}:void 0,[Z,et,$,Y,y]),en=W.interiorSelection.openFromScene,ei=(0,eu.useCallback)(()=>{H(),en()},[H,en]),ea=(0,eu.useMemo)(()=>({isMaterialSelectionOpen:k,openMaterialSelection:j,closeMaterialSelection:H,onMaterialSelectionActionPointerDown:V,openInteriorSelection:ei}),[H,V,ei,j,k]),eo=(0,eu.useMemo)(()=>({isMaterialSelectionOpen:R,openMaterialSelection:q,closeMaterialSelection:H,openInteriorSelection:ei}),[H,ei,q,R]);(0,eu.useEffect)(()=>{if(k)return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)};function e(e){var t;(t=e.target)instanceof Element&&t.closest(`[${S8}], [${S6}]`)||T(!1)}function t(e){"Escape"===e.key&&T(!1)}},[k]);let es=W.surface.usesSiblingDialogFlow?S:w,el=(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("div",{className:"absolute inset-0 bg-constant-black","data-testid":"floor-scene-background-base"}),(0,ec.jsx)("div",{"aria-hidden":!0,className:"absolute top-[-52px] right-[-1.36%] bottom-[-52px] left-[-1.36%] blur-[40px]","data-testid":"floor-blur-background",children:(0,ec.jsx)("img",{crossOrigin:"anonymous",src:Cj(v),alt:"",className:"block size-full max-w-none object-cover object-center opacity-50"})}),(0,ec.jsxs)("div",{className:"pointer-events-none absolute top-0 right-0 left-0 z-20 flex min-h-22 items-start justify-between gap-4 bg-linear-to-b from-black/75 via-black/35 to-transparent px-4 pt-4 pb-8 text-constant-white sm:px-6 lg:min-h-25 lg:pt-6",children:[(0,ec.jsx)("div",{className:"min-w-0 pt-1",children:N?(0,ec.jsx)("h1",{"data-testid":"floor-scene-header-company",className:"typo-base-16 truncate font-medium lg:typo-base-18",children:N}):null}),(0,ec.jsxs)("div",{className:"pointer-events-auto inline-flex shrink-0 items-center gap-2",children:[(0,ec.jsxs)(Cf,{type:"button",variant:"secondary","aria-label":t("floor.scene.share"),"data-neurodyn-room-viewer-share":"",disabled:!O||z,onClick:G,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,ec.jsx)(CL,{className:"size-5"}),(0,ec.jsx)("span",{className:"hidden lg:inline",children:t("floor.scene.share")})]}),(0,ec.jsxs)(Cf,{type:"button",variant:"secondary","aria-label":t("floor.scene.download"),"data-neurodyn-room-viewer-download":"",disabled:U,onClick:Q,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,ec.jsx)(CI,{className:"size-5"}),(0,ec.jsx)("span",{className:"hidden lg:inline",children:t("floor.scene.download")})]}),e&&(0,ec.jsx)(Cv,{asChild:!0,children:(0,ec.jsxs)(Cf,{type:"button",variant:"secondary","aria-label":t("close"),className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,ec.jsx)("span",{className:"hidden lg:inline",children:t("close")}),(0,ec.jsx)(CM,{className:"!size-5"})]})})]})]}),(0,ec.jsxs)("div",{className:"relative z-10 size-full min-h-0 min-w-0","data-testid":"floor-scene-viewport",children:[(0,ec.jsx)(S0,{contentKey:W.scene.resetKey,introduction:er,captureRef:P,className:"relative z-10 size-full min-h-0"}),(0,ec.jsx)("div",{"aria-hidden":!W.scene.isLoading,className:Cp("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",W.scene.isLoading?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),ref:K,"data-testid":"floor-scene-loader",style:{transitionDuration:W.scene.isLoading?"0ms":"250ms"},children:J&&(0,ec.jsx)(CO,{variant:"logo"})})]}),(0,ec.jsxs)("div",{className:"pointer-events-none absolute right-6 bottom-6 left-6 z-20 hidden items-end justify-between gap-4 lg:flex","data-testid":"floor-desktop-cards",children:[(0,ec.jsx)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:(0,ec.jsx)(M8,{actions:ea,band:"desktop",container:"leading"})}),(0,ec.jsx)("div",{className:"pointer-events-auto",children:(0,ec.jsx)(M8,{actions:ea,band:"desktop",container:"trailing"})})]}),(0,ec.jsxs)("div",{className:"pointer-events-none absolute right-6 bottom-6 left-6 z-20 hidden items-end justify-between gap-2 sm:flex lg:hidden","data-testid":"floor-tablet-cards",children:[(0,ec.jsx)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:(0,ec.jsx)(M8,{actions:ea,band:"tablet",container:"leading"})}),(0,ec.jsx)("div",{className:"pointer-events-auto grid w-[254px] gap-2",children:(0,ec.jsx)(M8,{actions:ea,band:"tablet",container:"trailing"})})]}),(0,ec.jsxs)("div",{className:"relative z-20 grid bg-background-containers text-text-dark shadow-[var(--shadow-login)] sm:hidden","data-testid":"floor-mobile-cards",children:[(0,ec.jsx)("div",{className:"grid",children:(0,ec.jsx)(M8,{actions:eo,band:"phone",container:"leading"})}),(0,ec.jsx)("div",{className:"grid gap-4 bg-background-containers px-6 pt-4 pb-6","data-testid":"floor-mobile-bottom-actions",children:(0,ec.jsx)(M8,{actions:eo,band:"phone",container:"trailing"})})]}),k&&!F&&(0,ec.jsx)(Mu,{[S6]:!0,className:"absolute bottom-[152px] left-6 z-30 hidden max-h-[calc(100%-252px)] w-[348px] rounded-2xl bg-background-containers sm:flex lg:bottom-[132px] lg:max-h-[calc(100%-232px)]",gridClassName:"px-4 pb-4",titleClassName:"px-4 pt-4",onOpenChange:H}),(0,ec.jsx)(Md,{open:R&&!F,portalContainer:es,onOpenChange:D})]}),ed=W.interiorSelection.shouldRender?"dialog"===W.interiorSelection.presentation?(0,ec.jsx)(S5,{open:W.interiorSelection.open,showCloseButton:e||W.scene.shouldRender,portalContainer:es,rooms:W.sourceRooms,customRooms:W.customRooms,selectedRoomId:v.id,isInvalidFile:W.interiorSelection.isInvalidFile,uploadRetryRequestId:W.interiorSelection.uploadRetryRequestId,onOpenChange:W.interiorSelection.onOpenChange,onSelectRoom:W.interiorSelection.onSelectRoom,onUploadFile:W.interiorSelection.onUploadFile}):"screen"===W.interiorSelection.presentation?(0,ec.jsx)(S4,{rooms:W.sourceRooms,customRooms:W.customRooms,selectedRoomId:v.id,isInvalidFile:W.interiorSelection.isInvalidFile,uploadRetryRequestId:W.interiorSelection.uploadRetryRequestId,showCloseButton:e,onSelectRoom:W.interiorSelection.onSelectRoom,onUploadFile:W.interiorSelection.onUploadFile}):null:null,eh=(0,ec.jsx)(MA,{isComplete:W.processingDialog.isComplete,open:W.processingDialog.open,portalContainer:es,onCloseAnimationEnd:W.processingDialog.onCloseAnimationEnd,onOpenChange:W.processingDialog.onOpenChange}),ep=(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(S3,{missingSurfaceMessage:i,variant:W.activeErrorDialog.variant,open:W.activeErrorDialog.open,portalContainer:es,showDialogCloseButton:e&&W.activeErrorDialog.showCloseButton,onOpenChange:W.activeErrorDialog.onOpenChange,onTryAgain:W.activeErrorDialog.onTryAgain,onCancel:W.activeErrorDialog.onCancel}),(0,ec.jsx)(S3,{missingSurfaceMessage:i,variant:W.uploadErrorDialog.variant,open:W.uploadErrorDialog.open,portalContainer:es,onOpenChange:W.uploadErrorDialog.onOpenChange,onTryAgain:W.uploadErrorDialog.onTryAgain,onCancel:W.uploadErrorDialog.onCancel})]}),eA=(0,ec.jsxs)("div",{ref:x,className:"relative grid size-full grid-rows-[minmax(0,1fr)_auto] overflow-hidden text-foreground sm:block","data-neurodyn-room-viewer-container":"","data-testid":"floor-viewer-root",children:[h?(0,ec.jsx)("div",{className:"flex size-full items-center justify-center bg-radial from-background-containers to-background-base-2",children:(0,ec.jsx)(CO,{variant:"logo"})}):W.scene.shouldRender?el:null,!W.surface.usesSiblingDialogFlow&&ed,!W.surface.usesSiblingDialogFlow&&eh]});return W.surface.usesSiblingDialogFlow?(0,ec.jsxs)(ec.Fragment,{children:[(W.scene.shouldRenderDialog||h)&&(0,ec.jsx)(Cg,{open:I,onOpenChange:B,children:(0,ec.jsxs)(Cy,{className:"inset-0 h-dvh min-w-full max-w-none translate-x-0 translate-y-0 rounded-none border-none bg-transparent p-0 shadow-none sm:p-0 sm:max-w-none",contentInsideOverlay:!0,portalContainer:S,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,ec.jsx)(Cx,{className:"sr-only",children:r}),(0,ec.jsx)(CC,{className:"sr-only"}),eA]})}),ed,eh,ep]}):(0,ec.jsxs)(ec.Fragment,{children:[eA,ep]})}function Iv(e){return(0,ec.jsx)(Im,{...e})}let Ib={angle:0,rotation:0,isDragging:!1};function Iy(){let e=Ib,t=new Set;function r(r){return n=>{let i="function"==typeof n?n(e[r]):n;Object.is(i,e[r])||(e={...e,[r]:i},t.forEach(e=>e()))}}return{getState:()=>e,subscribe:e=>(t.add(e),()=>{t.delete(e)}),setAngle:r("angle"),setRotation:r("rotation"),setIsDragging:r("isDragging")}}let Iw=[];function Ix(e,t,r){if(t===r)return e;let n=new Set(t.map(e=>e.id)),i=new Set(r.map(e=>e.id)),a=e.filter(e=>!n.has(e.id)&&!i.has(e.id));return a.length>0?[...a,...r]:r}function IC({children:e,src:t,tinuuid:r,roomId:n,type:i,viewerSurface:a,dialogPortalContainer:o=null,viewerDialogOpen:s=!0,onViewerDialogOpenChange:l,width:c,height:u,displayUnit:d,name:h,apiKey:p,baseURL:A,source:f,externalWidgetSession:g}){var m,v;let b=MO(d),y=function(){let{i18n:e}=tc();return"ru"===(e.resolvedLanguage??e.language)?"ru":"en"}(),w=EN(i),x=n?.trim()||void 0,C="panel-group"===CG[i].manipulation,{offersSizeVariants:E}=Ma(i),S="floor-room-presets"===CG[i].roomPresets?E_:EP,M=xP({apiKey:p,baseURL:A,source:f}),[I,B]=(0,eu.useState)(r),[k,T]=(0,eu.useState)(null),R=(0,eu.useCallback)(e=>{T(null),B(e)},[]),D=(0,eu.useCallback)(e=>{T(e),B(e)},[]),[P,_]=(0,eu.useState)(null),[L,F]=(0,eu.useState)(b[0].value),[N]=(0,eu.useState)(Iy),[O,Q]=(0,eu.useState)(null),[U,z]=(0,eu.useState)(()=>({layoutReady:!1,placementReady:!1,materialReady:"artwork-src"===w.materialSource,artifactsReady:!1,assetsReady:!1,prepareReady:!1,shadersReady:!1})),[G,H]=(0,eu.useState)(!1),[j,V]=(0,eu.useState)(null),[q,W]=(0,eu.useState)(null),K=(0,eu.useRef)(null),J=(0,eu.useRef)(!1),Y="object-glb"===w.materialSource,X="default"===f&&void 0!==p,Z=xL("wall-panel"===(m={apiKey:p,baseURL:A,source:f,resourceType:i}).resourceType?m:{...m,resourceType:void 0}),$=rK({queryKey:["room-viewer","activate",{apiKey:p??null,source:f,resourceType:i}],enabled:X,queryFn:({signal:e})=>x1(Z.query,{...Z.config,baseURL:A,headers:{"x-api-key":p},signal:e})},rM,void 0),ee=xF($.error),et=(0,eu.useMemo)(()=>{let e=$.data;return Cn(e?.widgetSession,{apiConfig:{baseURL:A,headers:{"x-api-key":p}}})},[$.data,p,A]),er=g instanceof Cr?g:null,en=g instanceof Cr?null:g,ei=en?.token,ea=en?.sid,eo=en?.expiresIn,es=(0,eu.useMemo)(()=>er||(Cn({token:ei,sid:ea,expiresIn:eo},{apiConfig:{baseURL:A,headers:{"x-api-key":p}}})??et),[et,p,A,er,ei,ea,eo]),el="shopify"===f?null!==es:X&&$.isSuccess,ed=rK({queryKey:["room-viewer","rooms",{apiKey:(v={apiKey:p,baseURL:A,language:y,source:f,widgetSession:es,resourceType:i}).apiKey??null,language:v.language??null,source:v.source,resourceType:v.resourceType??null,widgetSessionId:v.widgetSession?.sid??null}],enabled:M&&el,placeholderData:rl,queryFn:async({signal:e})=>{try{return await Ch({apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}catch(e){if(xF(e))throw e;return[]}}},rM,void 0),eh=M?ed.data??Iw:S,[ep,eA]=(0,eu.useState)(()=>({rooms:eh,sourceRooms:eh})),ef=(0,eu.useMemo)(()=>Ix(ep.rooms,ep.sourceRooms,eh),[ep.rooms,ep.sourceRooms,eh]),eg=(0,eu.useCallback)(e=>{eA(t=>{let r=Ix(t.rooms,t.sourceRooms,eh);return{rooms:"function"==typeof e?e(r):e,sourceRooms:eh}})},[eh]),[em,ev]=(0,eu.useState)(()=>x??S[0].id),[eb,ey]=(0,eu.useState)(x);eb!==x&&(ey(x),x&&(ev(x),z(e=>SW(e,SJ)),W(e=>C$(e)?null:e)));let ew=ef.find(e=>e.id===em),ex=ew??ef[0]??S[0],eC="rotate-on-floor"===CG[i].manipulation;(0,eu.useLayoutEffect)(()=>{x&&(N.setAngle(0),N.setRotation(0))},[x,N]),(0,eu.useEffect)(()=>{eC&&N.setRotation(0)},[eC,ex.id,N]);let eE=ef.length>0;!ew&&ef[0]&&em!==ef[0].id&&ev(ef[0].id);let eS=!X||$.isSuccess||$.isError&&null===ee,eM=rK({queryKey:Cs(r??void 0,{apiKey:p,baseURL:A,language:y,source:f,resourceType:i}),enabled:eS&&Y&&null===P&&!!r,queryFn:async({signal:e})=>{if(!r)throw Error("Tinuuid is required.");return Cc(r,{apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}},rM,void 0),eI=rK({queryKey:Cs(I??void 0,{apiKey:p,baseURL:A,language:y,source:f,resourceType:i}),enabled:eS&&Y&&!!I,placeholderData:rl,queryFn:async({signal:e})=>{if(!I)throw Error("Tinuuid is required.");return Cc(I,{apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}},rM,void 0),eB=eM.data??null,ek=eI.data??null,eT=eB?.materials?.[0]??null,eR=P?.native?.glbUrl??null,eD=xF(eM.error),eP=xF(ed.error),e_=M&&("shopify"===f?null===es||ed.isLoading:$.isSuccess&&ed.isLoading),eL=X&&$.isLoading||e_,eF=$.error&&null===ee?"viewer-load-failed":null,eN=eM.error&&null===eD?"viewer-load-failed":null,eO="artwork-src"===w.materialSource&&("string"!=typeof t||0===t.trim().length)?"artwork-load-failed":null,eQ=Y&&!eL&&(!r||eM.isSuccess&&null===eT||null!==P&&null===eR)?"viewer-load-failed":null,eU=null!==k&&k===I&&(eI.isError||eI.isSuccess&&ek?.tinuuid===I&&!ek.materials?.[0]?.native?.glbUrl)?"viewer-load-failed":null,ez=rX({queries:Ml({apiKey:p,baseURL:A,language:y,source:f,widgetSession:es}).map(e=>({...e,enabled:w.hasPictureFrame&&eS&&!eL}))}),eG=ez[0]?.data??null,eH=j??ee??eP??eD,ej=q??eU??eF??eN??eQ??eO,eV=(0,eu.useCallback)(e=>{z(t=>SW(t,e))},[]);(0,eu.useEffect)(()=>{if("dialog"!==a||!s){J.current=!1;return}J.current||es&&(Ci(es,"widget_opened"),J.current=!0)},[s,a,es]),(0,eu.useEffect)(()=>{Y&&(R(r),_(null),V(null),W(null))},[r,R,Y]),(0,eu.useEffect)(()=>{V(null),W(null)},[p,f]),(0,eu.useEffect)(()=>{Y&&eB&&null===P&&_(eT)},[P,eT,eB,Y]),(0,eu.useEffect)(()=>{let e=eG?.materials?.[0],t=eG?.tinuuid;null===P&&e&&t&&(_(e),R(t))},[eG,P,R]),(0,eu.useEffect)(()=>{if(!Y||!E&&!C&&k!==I||null===ek||ek.tinuuid!==I)return;let e=ek.materials?.[0];if(!e)return;let t=ek.materials?.some(e=>e===P||!!e.hid&&e.hid===P?.hid);if(k===I){T(null),_(e);return}(!t||C)&&P!==e&&_(e)},[C,P,E,ek,I,Y,k]);let eq=(0,eu.useMemo)(()=>({type:i,name:h,width:c,height:u,displayUnit:d}),[i,h,c,u,d]),eW=(0,eu.useMemo)(()=>({viewerSurface:a,dialogPortalContainer:o,viewerDialogOpen:s,onViewerDialogOpenChange:l}),[a,o,s,l]),eK=(0,eu.useMemo)(()=>({rooms:ef,sourceRooms:eh,setRooms:eg,room:ex,initialRoomId:x,setRoomId:ev}),[ef,ex,x,eg,eh]),eJ=(0,eu.useMemo)(()=>({src:t,glbUrl:eR,tinuuid:I,embeddedObject:eB,selectedObject:ek,material:P,setTinuuid:R,selectResourceVariant:D,setMaterial:_,apiKey:p,baseURL:A,language:y,source:f,widgetSession:es,hasRooms:eE,isViewerAccessPending:eL,accessError:eH,setAccessError:V,loadError:ej,setLoadError:W}),[t,eR,I,eB,ek,P,R,D,p,A,y,f,es,eE,eL,eH,ej]),eY=(0,eu.useMemo)(()=>({setContainerRef:Q,resourceRef:K,sceneGestures:N,patchSceneLoad:eV,setIsRoomScenePending:H}),[eV,N]),eX=(0,eu.useMemo)(()=>({...eY,containerRef:O,sceneLoad:U,isRoomScenePending:G}),[eY,O,U,G]),eZ=(0,eu.useMemo)(()=>({matting:L,setMatting:F}),[L]);return(0,ec.jsx)(C0,{value:eq,children:(0,ec.jsx)(C1,{value:eW,children:(0,ec.jsx)(C2,{value:eK,children:(0,ec.jsx)(C3,{value:eJ,children:(0,ec.jsx)(C4,{value:eY,children:(0,ec.jsx)(C9,{value:eX,children:(0,ec.jsx)(C5,{value:eZ,children:(0,ec.jsx)(Eg,{children:e})})})})})})})})}let IE={poster:"wallart",carpet:"rugs"};function IS(e){return"poster"===e||"carpet"===e}i4.gPd.DEFAULT_ANISOTROPY=4;let IM=new r2({defaultOptions:{queries:{gcTime:1/0,refetchOnMount:!1,refetchOnReconnect:!1,refetchOnWindowFocus:!1,retry:(e,t)=>{let r=function(e){if(iX(e))return e.response?.status}(t);return(void 0===r||!(r>=400)||!(r<500))&&e<2}}}});function II({type:e,src:t,tinuuid:r,roomId:n,name:i,height:a,width:o,language:s,dimensionUnit:l="m",displayUnit:c="cm",apiKey:u,source:d="default",showDialogCloseButton:h=!1,viewerSurface:p="inline",dialogPortalContainer:A=null,viewerDialogOpen:f=!0,onViewerDialogOpenChange:g,widgetSession:m}){let{i18n:v}=tc(),b=u?.trim()||void 0,y=r?.trim()||void 0,w=IS(e)?IE[e]:e,x=EN(w).takesDimensionProps?function(e,t,r="m"){return{width:MF(e??0,r),height:MF(t??0,r)}}(o,a,l):null;return(0,eu.useEffect)(()=>{IS(e)&&IE[e]},[e]),(0,eu.useEffect)(()=>{"string"==typeof s&&v.changeLanguage(s)},[v,s]),(0,ec.jsx)(rN,{client:IM,children:(0,ec.jsx)(IC,{src:t??null,tinuuid:y??null,roomId:n,type:w,viewerSurface:p,dialogPortalContainer:A,viewerDialogOpen:f,onViewerDialogOpenChange:g,name:i,width:x?.width??0,height:x?.height??0,displayUnit:c,apiKey:b,baseURL:"shopify"===d?xR:void 0,source:d,externalWidgetSession:m,children:(0,ec.jsx)(Iv,{showDialogCloseButton:h})})})}function IB({type:e,src:t,tinuuid:r,roomId:n,width:i,height:a,dimensionUnit:o,displayUnit:s,name:l,language:c,apiKey:u,source:d,widgetSession:h,disableClose:p=!1,open:A,defaultOpen:f,onOpenChange:g}){let[m,v]=(0,eu.useState)(null),[b,y]=(0,eu.useState)(f??!1),w=A??b,[x,C]=(0,eu.useState)(w),E=w||x;(0,eu.useEffect)(()=>{w&&C(!0)},[w]);let S=El({disableClose:p,onOpenChange:g,open:A}),M=(0,eu.useCallback)(e=>{let{disableClose:t,onOpenChange:r,open:n}=S.current;(e||!t)&&(void 0===n&&y(e),r?.(e))},[S]),I=(0,ec.jsx)(II,{type:e,src:t,tinuuid:r,roomId:n,name:l,height:a,width:i,dimensionUnit:o,displayUnit:s,language:c,apiKey:u,source:d,widgetSession:h,showDialogCloseButton:!p,viewerSurface:"dialog",dialogPortalContainer:m,viewerDialogOpen:w,onViewerDialogOpenChange:M});return(0,ec.jsxs)(ec.Fragment,{children:[(0,eh.createPortal)((0,ec.jsx)("style",{children:xS.A}),document.head),(0,eh.createPortal)((0,ec.jsxs)(tk.div,{"data-neurodyn-room-viewer-root":"",style:{display:"block",letterSpacing:"normal",zIndex:0x7fffffff},children:[(0,ec.jsx)("style",{children:":host{display:block!important;visibility:visible!important}"}),(0,ec.jsx)("style",{children:xT}),(0,ec.jsx)("div",{ref:v}),m&&(0,ec.jsx)(xE,{root:m,storageKey:"neurodyn-theme",defaultTheme:"light",children:(0,ec.jsx)(tu,{i18n:xI,children:E&&I})})]}),document.body)]})}xW({baseURL:"https://api.neurodyn.ai/"});let Ik=0,IT="data-neurodyn-room-viewer-dialog",IR=`[${IT}]`;function ID(e,t,r){return{kind:"attribute",name:e,parse:t.parse,values:t.values,...r}}function IP(e){return{kind:"option",reason:e}}function I_(){return{parse:e=>e??void 0}}function IL(){return{parse:e=>e?Number(e):void 0}}function IF(e){return{parse:t=>e.includes(t??"")?t:void 0,values:e}}let IN={prefix:"data-neurodyn-room-viewer-",markers:[{name:IT,description:"Marks an element for the embed build."}],fields:{type:ID("type",{parse:e=>e??void 0,values:["wallart","rugs","flooring","wall-panel"]},{required:!0,description:"Resource type."}),src:ID("src",I_(),{required:{when:"type",is:["wallart"]},description:"Wall-art image URL."}),tinuuid:ID("tinuuid",I_(),{required:{when:"type",is:["rugs","flooring","wall-panel"]},description:"The object's tinuuid."}),roomId:ID("room-id",I_(),{required:!1,description:"Initial Room ID from the available catalog. Skips the initial interior chooser; unavailable Rooms open the chooser. Empty values do nothing."}),name:ID("name",I_(),{required:!0,description:"Title shown in the dialog header."}),width:ID("width",IL(),{required:!1,description:"Wall-art width. Used when `type` is `wallart`."}),height:ID("height",IL(),{required:!1,description:"Wall-art height. Used when `type` is `wallart`."}),dimensionUnit:ID("dimension-unit",IF(["m","cm","in"]),{required:!1,defaultValue:"`m`",description:"Unit used by wall-art width and height."}),displayUnit:ID("display-unit",IF(["cm","in"]),{required:!1,defaultValue:"`cm`",description:"Unit used to display UI measurements."}),language:ID("language",IF(["en","ru"]),{required:!1,defaultValue:"User locale",description:"UI language override."}),apiKey:ID("api-key",I_(),{required:!0,description:"Public API key sent as `x-api-key`. Not needed when `source` is `shopify`."}),source:ID("source",IF(["default","shopify"]),{required:!1,defaultValue:"`default`",description:"Backend source mode."}),disableClose:ID("disable-close",{parse:e=>"true"===e},{required:!1,defaultValue:"`false`",description:"Set to `true` to hide close controls and prevent dismissal."}),widgetSession:IP("An existing Widget Session handed over by an embedding surface such as Shopify."),open:IP("The embed build owns the open state."),defaultOpen:IP("The embed build owns the open state."),onOpenChange:IP("The embed build owns the open state.")}};window.__neurodynRoomViewerDialog?.destroy();let IO=new class{container=null;props=null;root=null;openState=!1;destroy(){this.root?.unmount(),this.root=null,this.container?.remove(),this.container=null,this.props=null,this.openState=!1}open(e){this.props=e,this.openState=!0,this.render()}handleOpenChange=e=>{this.openState=e,this.render()};ensureRoot(){return this.root||(this.container=document.createElement("div"),this.container.id=`neurodyn-room-viewer-dialog-root-${Ik++}`,document.body.appendChild(this.container),this.root=(0,fE.createRoot)(this.container)),this.root}render(){this.props&&this.ensureRoot().render((0,eu.createElement)(IB,{...this.props,onOpenChange:this.handleOpenChange,open:this.openState}))}};function IQ(e){let t=e.target instanceof Element?e.target.closest(IR):null;t&&IO.open(function(e,t={}){let r=function(e,t,r={}){let n={};for(let[i,a]of Object.entries(t.fields).filter(e=>"attribute"===e[1].kind)){let o=`${t.prefix}${a.name}`,s=r[i];if(void 0!==s){n[i]=a.normalizesOptions?a.parse(s,{attribute:o}):s;continue}n[i]=a.parse(function(e,t,r=[]){let n=e.getAttribute(t);if(0===r.length||n?.trim())return n;for(let t of r){let r=e.getAttribute(t);if(r?.trim())return r}return n}(e,o,a.legacyNames),{attribute:o})}return n}(e,IN,t);return{...r,type:r.type,name:r.name}}(t))}u={destroy:function(){document.removeEventListener("click",IQ),IO.destroy(),window.__neurodynRoomViewerDialog===u&&(window.__neurodynRoomViewerDialog=void 0)}},document.addEventListener("click",IQ),window.__neurodynRoomViewerDialog=u})()})();
7244
+ ${o}`;a(!0);try{if(!i&&t)return void await S1(s);let n=e.current;if(n)try{let e=await n.capture(),t=new File([e],r,{type:e.type||"image/png"});if(navigator.canShare?.({files:[t]}))return void await navigator.share({text:s,files:[t]})}catch(e){console.error("Failed to generate scene screenshot for sharing",e)}await navigator.share({text:s,url:o})}catch(e){e instanceof DOMException&&"AbortError"===e.name||console.error("Failed to share scene",e)}finally{a(!1)}},[l,e,t,r,n]);return{canShare:l,download:(0,eu.useCallback)(async()=>{let t=e.current;if(t){s(!0);try{var n;let e,i;n=await t.capture(),e=URL.createObjectURL(n),(i=document.createElement("a")).href=e,i.download=r,document.body.append(i),i.click(),i.remove(),URL.revokeObjectURL(e)}catch(e){console.error("Failed to download scene screenshot",e)}finally{s(!1)}}},[e,r]),isDownloading:o,isSharing:i,share:c}}({captureRef:P,fallbackToClipboard:!0,shareMessage:t(`shareMessage.${n}`)}),H=(0,eu.useCallback)(()=>{T(!1),D(!1)},[]),j=(0,eu.useCallback)(()=>{if(_.current){_.current=!1;return}T(!0),D(!1)},[]),V=(0,eu.useCallback)(()=>{_.current=!0,H()},[H]),q=(0,eu.useCallback)(()=>{D(!0),T(!1)},[]),W=function({activeError:e,apiKey:t,baseURL:r,clearActiveError:n,closeMaterialSelection:i,glbUrl:a,handleAccessError:o,hasDialogPortalContainer:s,hasRooms:l,isRoomScenePending:c,isViewerAccessPending:u,onViewerDialogOpenChange:d,resourceType:h,sceneLoad:p,source:A,sourceRooms:f,viewerDialogOpen:g,viewerSurface:m,widgetSession:v}){let b=function(e){let{initialRoomId:t,room:r,sourceRooms:n}=Ee(),{isViewerAccessPending:i,loadError:a,setLoadError:o}=Et(),{type:s}=C6(),{patchSceneLoad:l,sceneGestures:{setAngle:c,setRotation:u}}=En(),d=(0,eu.useMemo)(()=>({patchSceneLoad:l,setAngle:c,setRotation:u}),[l,c,u]),h=n.find(e=>e.id===t),p=!!h&&(!h?.scene||Sn(h.scene,CH(s)).length>0),A=function(e,t,r){let[n,i]=(0,eu.useReducer)(Ic,e,Il),[a,o]=(0,eu.useState)();!r?.isPending&&a!==r?.roomId&&(o(r?.roomId),r&&i(r.isAvailable?{type:"select-initial-room",roomId:r.roomId}:{type:"clear-interior-selection"}));let s=(0,eu.useCallback)(e=>{e(),function({patchSceneLoad:e,setAngle:t,setRotation:r}){t(0),r(0),e(SJ)}(t),i({type:"commit-interior-selection"})},[t]),l=(0,eu.useCallback)(()=>{i({type:"dismiss-interior-selection"})},[]),c=(0,eu.useCallback)(()=>{i({type:"open-interior-selection"})},[]),u=(0,eu.useCallback)(()=>{i({type:"recover-to-scene"})},[]),d=(0,eu.useCallback)(()=>{i({type:"return-to-interior-selection"})},[]),h=(0,eu.useCallback)(()=>{i({type:"clear-interior-selection",automaticRoomId:n.automaticRoomId})},[n.automaticRoomId]),p=(0,eu.useCallback)(()=>{i({type:"start-custom-interior-processing"})},[]);return(0,eu.useMemo)(()=>({...n,commitInteriorSelection:s,dismissInteriorSelection:l,openInteriorSelection:c,recoverToScene:u,returnToInteriorSelection:d,clearInteriorSelection:h,startCustomInteriorProcessing:p}),[s,l,c,u,d,h,p,n])}(e,d,t?{roomId:t,isAvailable:p,isPending:i}:void 0),{automaticRoomId:f,clearInteriorSelection:g}=A;return(0,eu.useEffect)(()=>{f&&r.id===f&&C$(a)&&(g(),o(null))},[f,g,a,r.id,o]),A}(m),y=CH(h),{appendRuntimeCustomInterior:w,customRooms:x}=function({listCustomInteriors:e,surfaces:t}){let{appendRuntimeCustomInterior:r,customRooms:n,replaceRuntimeCustomInteriors:i}=function(){let[e,t]=(0,eu.useState)(()=>[]),r=(0,eu.useRef)(null),n=(0,eu.useCallback)(e=>{r.current?.revokeObjectUrls();let n=Is(e);return r.current=n,t(n.rooms),n.rooms},[]),i=(0,eu.useCallback)((e,n)=>{let i=Is([{id:In(),schemaVersion:1,name:e.name,fileName:e.name,createdAt:new Date().toISOString(),imageBlob:e,scene:n}]),a=i.rooms[0];if(!a)return i.revokeObjectUrls(),null;let o=r.current;return r.current={rooms:[],revokeObjectUrls:()=>{o?.revokeObjectUrls(),i.revokeObjectUrls()}},t(e=>[a,...e.filter(e=>e.id!==a.id)]),a},[]);return(0,eu.useEffect)(()=>()=>{r.current?.revokeObjectUrls()},[]),(0,eu.useMemo)(()=>({appendRuntimeCustomInterior:i,customRooms:e,replaceRuntimeCustomInteriors:n}),[i,e,n])}(),a=(0,eu.useRef)(!0);(0,eu.useEffect)(()=>(a.current=!0,()=>{a.current=!1}),[]);let o=(0,eu.useCallback)(async()=>{let r=await e();a.current&&i(r.filter(e=>!Si(e.scene,t)))},[e,i,t]);return(0,eu.useEffect)(()=>{o()},[o]),(0,eu.useMemo)(()=>({appendRuntimeCustomInterior:r,customRooms:n,replaceRuntimeCustomInteriors:i,refreshCustomInteriors:o}),[r,n,o,i])}({listCustomInteriors:Io,surfaces:y}),C=(0,eu.useMemo)(()=>new Set(f.map(e=>e.id)),[f]),{commitCustomInteriorSelection:E,selectInterior:S}=function(e){let{room:t,setRoomId:r,setRooms:n}=Ee(),{widgetSession:i}=Et();return function({floorFlow:e,customRooms:t,selectedRoomId:r,onInteriorSelected:n,restoreSourceRooms:i,setRoomId:a,setRooms:o}){let s=(0,eu.useCallback)(t=>{e.commitInteriorSelection(()=>{o(e=>[t,...i(e).filter(e=>e.id!==t.id)]),a(t.id)}),n?.()},[e,n,i,a,o]),l=(0,eu.useCallback)(t=>{let s=t===r;s&&e.hasSceneSelection||(e.commitInteriorSelection(()=>{o(i),a(t)}),s||n?.())},[e,n,i,r,a,o]),c=(0,eu.useCallback)(n=>{if(n===r&&e.hasSceneSelection)return;let i=t.find(e=>e.id===n);i&&s(i)},[e.hasSceneSelection,s,t,r]),u=(0,eu.useCallback)(e=>{t.some(t=>t.id===e)?c(e):l(e)},[t,c,l]);return(0,eu.useMemo)(()=>({commitCustomInteriorSelection:s,selectInterior:u}),[s,u])}({...e,selectedRoomId:t.id,onInteriorSelected:()=>Ci(i,"interior_selected"),setRoomId:r,setRooms:n})}({floorFlow:b,customRooms:x,restoreSourceRooms:(0,eu.useCallback)(e=>[...f,...e.filter(e=>!C.has(e.id))],[C,f])}),M=function(e){let{setIsRoomScenePending:t}=En();return function({apiOptions:e,floorFlow:t,commitCustomInteriorSelection:r,downloadDebugMask:n,isDebugMaskExportEnabled:i,onAccessError:a,onDebugMaskError:o,onPersistenceError:s,onProcessingError:l,predictRoomScene:c,saveCustomInterior:u,setIsRoomScenePending:d,surfaces:h,trackRuntimeCustomInterior:p,waitForProcessingCompletion:A}){let[f,g]=(0,eu.useState)(!1),[m,v]=(0,eu.useState)(!1),[b,y]=(0,eu.useState)(null),[w,x]=(0,eu.useState)(null),[C,E]=(0,eu.useState)(!1),[S,M]=(0,eu.useState)(0),I=(0,eu.useRef)(null),B=(0,eu.useRef)(!1),k=(0,eu.useRef)(!0),T=(0,eu.useRef)(b);b&&(T.current=b),(0,eu.useEffect)(()=>(k.current=!0,()=>{k.current=!1,I.current?.abort()}),[]);let R=(0,eu.useCallback)(()=>{y(null),x(null),E(!1)},[]),D=(0,eu.useCallback)(e=>{R(),g(!1),e()},[R]),P=(0,eu.useCallback)(async f=>{if(R(),!f.type.startsWith("image/"))return void g(!0);g(!1),v(!1),t.startCustomInteriorProcessing(),B.current=!0;let m=new AbortController;I.current?.abort(),I.current=m,d(!0);try{await Ih({abortSignal:m.signal,apiOptions:e,commitCustomInteriorSelection:r,downloadDebugMask:n,file:f,isActive:()=>k.current,isDebugMaskExportEnabled:i,onDebugMaskError:o,onPersistenceError:s,onProcessingComplete:()=>{v(!0)},predictRoomScene:c,saveCustomInterior:u,surfaces:h,trackRuntimeCustomInterior:p,waitForProcessingCompletion:A})}catch(r){if(m.signal.aborted)return;let e=xF(r);if(e){B.current&&E(!0),a(e);return}let t=r instanceof Id?"custom-interior-missing-surface":"custom-interior-processing";if("custom-interior-processing"===t&&l(r),B.current){x(t),E(!0);return}y(t)}finally{I.current===m&&(I.current=null,k.current&&d(!1))}},[e,t,r,n,i,a,o,s,l,c,R,u,d,h,p,A]),_=(0,eu.useCallback)(()=>{R(),g(!1),t.returnToInteriorSelection(),M(e=>e+1)},[t,R]),L=(0,eu.useCallback)(()=>{R(),t.returnToInteriorSelection()},[t,R]),F=(0,eu.useCallback)(({clearError:e,closeMaterialSelection:r})=>{e(),r(),t.hasSceneSelection&&t.recoverToScene()},[t]),N=(0,eu.useCallback)(()=>{B.current=!1,E(!1),w&&(y(w),x(null))},[w]),O=(0,eu.useCallback)(()=>k.current,[]);return(0,eu.useMemo)(()=>({displayedUploadError:b??T.current,isCustomInteriorProcessingComplete:m,isInvalidFile:f,isMounted:O,isProcessingDialogClosingForError:C,pendingUploadError:w,uploadError:b,uploadRetryRequestId:S,cancelUploadError:L,handleProcessingDialogCloseAnimationEnd:N,openInteriorSelection:D,processUploadFile:P,recoverFromActiveError:F,resetUploadErrorPresentation:R,tryUploadAgain:_}),[L,N,m,f,O,C,D,w,P,F,R,_,b,S])}({...e,setIsRoomScenePending:t})}({apiOptions:(0,eu.useMemo)(()=>({resourceType:h,apiKey:t,baseURL:r,source:A,widgetSession:v}),[t,r,h,A,v]),floorFlow:b,commitCustomInteriorSelection:E,downloadDebugMask:It,isDebugMaskExportEnabled:Ie,onAccessError:o,onDebugMaskError:IA,onPersistenceError:If,onProcessingError:Ig,predictRoomScene:M6,saveCustomInterior:Ia,surfaces:y,trackRuntimeCustomInterior:w,waitForProcessingCompletion:Ip}),{dismissInteriorSelection:I,hasSceneSelection:B,openInteriorSelection:k,sceneResetKey:T,step:R}=b,{cancelUploadError:D,displayedUploadError:P,handleProcessingDialogCloseAnimationEnd:_,isCustomInteriorProcessingComplete:L,isInvalidFile:F,isProcessingDialogClosingForError:N,openInteriorSelection:O,pendingUploadError:Q,processUploadFile:U,recoverFromActiveError:z,resetUploadErrorPresentation:G,tryUploadAgain:H,uploadError:j,uploadRetryRequestId:V}=M,q=l&&B,W=(0,eu.useRef)(e),K=!!(e&&q&&a);e&&(W.current=e);let J=(0,eu.useCallback)(()=>{q&&(G(),I())},[I,q,G]),Y=(0,eu.useCallback)(()=>{i(),O(k)},[i,k,O]),X=(0,eu.useCallback)(()=>{z({clearError:n,closeMaterialSelection:i})},[n,i,z]),Z=(0,eu.useCallback)(()=>{n(),Y()},[n,Y]),$=(0,eu.useCallback)(e=>{if(!e){if(q)return void J();d?.(!1)}},[J,q,d]),ee=(0,eu.useCallback)(e=>{if(!e){if(K)return void X();d?.(!1)}},[K,X,d]),et=(0,eu.useCallback)(e=>{e||D()},[D]);!function({fallbackMs:e,handleProcessingDialogCloseAnimationEnd:t,isProcessingDialogClosingForError:r}){(0,eu.useEffect)(()=>{if(!r)return;let n=window.setTimeout(t,e);return()=>window.clearTimeout(n)},[e,t,r])}({fallbackMs:220,handleProcessingDialogCloseAnimationEnd:_,isProcessingDialogClosingForError:N});let er=function({activeError:e,canRecoverFromActiveError:t,floorFlow:r,hasDialogPortalContainer:n,hasRooms:i,isProcessingDialogClosingForError:a,isRoomScenePending:o,isViewerAccessPending:s,pendingUploadError:l,sceneLoad:c,uploadError:u,viewerDialogOpen:d,viewerSurface:h}){let p="dialog"===h&&n,A=!p||d,f=i&&r.hasSceneSelection,g=i||"scene"!==r.step?r.step:"interior-selection",m=!s&&f&&(!e||t),v=f||p,b=!s&&!e&&v,y=!s&&!e&&!v&&"interior-selection"===g;return{activeErrorDialog:{open:!a&&!!e&&A,showCloseButton:!t},interiorSelection:{open:b&&"interior-selection"===g&&A,presentation:b?"dialog":y?"screen":null,shouldRender:b||y},processingDialog:{open:!e&&!u&&!l&&o&&"processing-custom-interior"===r.step&&A},scene:{isLoading:o||!(SK(c)&&c.shadersReady),resetKey:r.sceneResetKey,shouldRender:m,shouldRenderDialog:m},surface:{usesSiblingDialogFlow:p},uploadErrorDialog:{open:!a&&!e&&!!u&&A}}}({activeError:e,canRecoverFromActiveError:K,floorFlow:{hasSceneSelection:B,sceneResetKey:T,step:R},hasDialogPortalContainer:s,hasRooms:l,isProcessingDialogClosingForError:N,isRoomScenePending:c,isViewerAccessPending:u,pendingUploadError:Q,sceneLoad:p,uploadError:j,viewerDialogOpen:g,viewerSurface:m});return{...er,activeErrorDialog:{...er.activeErrorDialog,onCancel:K?X:void 0,onOpenChange:ee,onTryAgain:"room-missing-surface"===e?Z:K?X:void 0,variant:e??W.current},customRooms:x,interiorSelection:{...er.interiorSelection,isInvalidFile:F,onOpenChange:$,onSelectRoom:S,onUploadFile:U,openFromScene:Y,uploadRetryRequestId:V},sourceRooms:f,processingDialog:{...er.processingDialog,isComplete:L,onCloseAnimationEnd:_,onOpenChange:er.surface.usesSiblingDialogFlow?d:void 0},step:R,uploadErrorDialog:{...er.uploadErrorDialog,onCancel:D,onOpenChange:et,onTryAgain:H,variant:P}}}({activeError:L,apiKey:s,baseURL:l,clearActiveError:g,closeMaterialSelection:H,glbUrl:o,handleAccessError:m,hasDialogPortalContainer:null!==S,hasRooms:c,isRoomScenePending:E,isViewerAccessPending:h,onViewerDialogOpenChange:B,resourceType:n,sceneLoad:C,source:u,sourceRooms:b,viewerDialogOpen:I,viewerSurface:M,widgetSession:d}),K=(0,eu.useRef)(null),J=!S2(W.scene.isLoading,K,{fadedOutIfMountedLoaded:!0}),Y=S2(W.scene.isLoading||!W.scene.shouldRender||!I,K),X=Em(),{pending:Z,finish:$}=function(e,t,r){let[n,i]=(0,eu.useState)({open:e,pending:e&&t,sceneKey:r});n.open!==e?i({open:e,pending:e&&t,sceneKey:r}):n.sceneKey!==r?i({...n,sceneKey:r,pending:n.pending&&null===n.sceneKey}):n.pending&&!t&&i({...n,pending:!1});let a=(0,eu.useCallback)(()=>i(e=>({...e,pending:!1})),[]);return{pending:e&&n.pending,finish:a}}(I,CU("(max-width: 639px)")&&"focus-resource"===CG[n].introduction,W.scene.shouldRender?`${W.scene.resetKey}:${f??""}`:null),ee=X?.select,et=(0,eu.useCallback)(()=>{$(),ee?.("0,0")},[$,ee]),er=(0,eu.useMemo)(()=>Z?{ready:Y,target:y,onComplete:et,onCancel:$}:void 0,[Z,et,$,Y,y]),en=W.interiorSelection.openFromScene,ei=(0,eu.useCallback)(()=>{H(),en()},[H,en]),ea=(0,eu.useMemo)(()=>({isMaterialSelectionOpen:k,openMaterialSelection:j,closeMaterialSelection:H,onMaterialSelectionActionPointerDown:V,openInteriorSelection:ei}),[H,V,ei,j,k]),eo=(0,eu.useMemo)(()=>({isMaterialSelectionOpen:R,openMaterialSelection:q,closeMaterialSelection:H,openInteriorSelection:ei}),[H,ei,q,R]);(0,eu.useEffect)(()=>{if(k)return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)};function e(e){var t;(t=e.target)instanceof Element&&t.closest(`[${S8}], [${S6}]`)||T(!1)}function t(e){"Escape"===e.key&&T(!1)}},[k]);let es=W.surface.usesSiblingDialogFlow?S:w,el=(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)("div",{className:"absolute inset-0 bg-constant-black","data-testid":"floor-scene-background-base"}),(0,ec.jsx)("div",{"aria-hidden":!0,className:"absolute top-[-52px] right-[-1.36%] bottom-[-52px] left-[-1.36%] blur-[40px]","data-testid":"floor-blur-background",children:(0,ec.jsx)("img",{crossOrigin:"anonymous",src:Cj(v),alt:"",className:"block size-full max-w-none object-cover object-center opacity-50"})}),(0,ec.jsxs)("div",{className:"pointer-events-none absolute top-0 right-0 left-0 z-20 flex min-h-22 items-start justify-between gap-4 bg-linear-to-b from-black/75 via-black/35 to-transparent px-4 pt-4 pb-8 text-constant-white sm:px-6 lg:min-h-25 lg:pt-6",children:[(0,ec.jsx)("div",{className:"min-w-0 pt-1",children:N?(0,ec.jsx)("h1",{"data-testid":"floor-scene-header-company",className:"typo-base-16 truncate font-medium lg:typo-base-18",children:N}):null}),(0,ec.jsxs)("div",{className:"pointer-events-auto inline-flex shrink-0 items-center gap-2",children:[(0,ec.jsxs)(Cf,{type:"button",variant:"secondary","aria-label":t("floor.scene.share"),"data-neurodyn-room-viewer-share":"",disabled:!O||z,onClick:G,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,ec.jsx)(CL,{className:"size-5"}),(0,ec.jsx)("span",{className:"hidden lg:inline",children:t("floor.scene.share")})]}),(0,ec.jsxs)(Cf,{type:"button",variant:"secondary","aria-label":t("floor.scene.download"),"data-neurodyn-room-viewer-download":"",disabled:U,onClick:Q,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,ec.jsx)(CI,{className:"size-5"}),(0,ec.jsx)("span",{className:"hidden lg:inline",children:t("floor.scene.download")})]}),e&&(0,ec.jsx)(Cv,{asChild:!0,children:(0,ec.jsxs)(Cf,{type:"button",variant:"secondary","aria-label":t("close"),className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,ec.jsx)("span",{className:"hidden lg:inline",children:t("close")}),(0,ec.jsx)(CM,{className:"!size-5"})]})})]})]}),(0,ec.jsxs)("div",{className:"relative z-10 size-full min-h-0 min-w-0","data-testid":"floor-scene-viewport",children:[(0,ec.jsx)(S0,{contentKey:W.scene.resetKey,introduction:er,captureRef:P,className:"relative z-10 size-full min-h-0"}),(0,ec.jsx)("div",{"aria-hidden":!W.scene.isLoading,className:Cp("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",W.scene.isLoading?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),ref:K,"data-testid":"floor-scene-loader",style:{transitionDuration:W.scene.isLoading?"0ms":"250ms"},children:J&&(0,ec.jsx)(CO,{variant:"logo"})})]}),(0,ec.jsxs)("div",{className:"pointer-events-none absolute right-6 bottom-6 left-6 z-20 hidden items-end justify-between gap-4 lg:flex","data-testid":"floor-desktop-cards",children:[(0,ec.jsx)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:(0,ec.jsx)(M8,{actions:ea,band:"desktop",container:"leading"})}),(0,ec.jsx)("div",{className:"pointer-events-auto",children:(0,ec.jsx)(M8,{actions:ea,band:"desktop",container:"trailing"})})]}),(0,ec.jsxs)("div",{className:"pointer-events-none absolute right-6 bottom-6 left-6 z-20 hidden items-end justify-between gap-2 sm:flex lg:hidden","data-testid":"floor-tablet-cards",children:[(0,ec.jsx)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:(0,ec.jsx)(M8,{actions:ea,band:"tablet",container:"leading"})}),(0,ec.jsx)("div",{className:"pointer-events-auto grid w-[254px] gap-2",children:(0,ec.jsx)(M8,{actions:ea,band:"tablet",container:"trailing"})})]}),(0,ec.jsxs)("div",{className:"relative z-20 grid bg-background-containers text-text-dark shadow-[var(--shadow-login)] sm:hidden","data-testid":"floor-mobile-cards",children:[(0,ec.jsx)("div",{className:"grid",children:(0,ec.jsx)(M8,{actions:eo,band:"phone",container:"leading"})}),(0,ec.jsx)("div",{className:"grid gap-4 bg-background-containers px-6 pt-4 pb-6","data-testid":"floor-mobile-bottom-actions",children:(0,ec.jsx)(M8,{actions:eo,band:"phone",container:"trailing"})})]}),k&&!F&&(0,ec.jsx)(Mu,{[S6]:!0,className:"absolute bottom-[152px] left-6 z-30 hidden max-h-[calc(100%-252px)] w-[348px] rounded-2xl bg-background-containers sm:flex lg:bottom-[132px] lg:max-h-[calc(100%-232px)]",gridClassName:"px-4 pb-4",titleClassName:"px-4 pt-4",onOpenChange:H}),(0,ec.jsx)(Md,{open:R&&!F,portalContainer:es,onOpenChange:D})]}),ed=W.interiorSelection.shouldRender?"dialog"===W.interiorSelection.presentation?(0,ec.jsx)(S5,{open:W.interiorSelection.open,showCloseButton:e||W.scene.shouldRender,portalContainer:es,rooms:W.sourceRooms,customRooms:W.customRooms,selectedRoomId:v.id,isInvalidFile:W.interiorSelection.isInvalidFile,uploadRetryRequestId:W.interiorSelection.uploadRetryRequestId,onOpenChange:W.interiorSelection.onOpenChange,onSelectRoom:W.interiorSelection.onSelectRoom,onUploadFile:W.interiorSelection.onUploadFile}):"screen"===W.interiorSelection.presentation?(0,ec.jsx)(S4,{rooms:W.sourceRooms,customRooms:W.customRooms,selectedRoomId:v.id,isInvalidFile:W.interiorSelection.isInvalidFile,uploadRetryRequestId:W.interiorSelection.uploadRetryRequestId,showCloseButton:e,onSelectRoom:W.interiorSelection.onSelectRoom,onUploadFile:W.interiorSelection.onUploadFile}):null:null,eh=(0,ec.jsx)(MA,{isComplete:W.processingDialog.isComplete,open:W.processingDialog.open,portalContainer:es,onCloseAnimationEnd:W.processingDialog.onCloseAnimationEnd,onOpenChange:W.processingDialog.onOpenChange}),ep=(0,ec.jsxs)(ec.Fragment,{children:[(0,ec.jsx)(S3,{missingSurfaceMessage:i,variant:W.activeErrorDialog.variant,open:W.activeErrorDialog.open,portalContainer:es,showDialogCloseButton:e&&W.activeErrorDialog.showCloseButton,onOpenChange:W.activeErrorDialog.onOpenChange,onTryAgain:W.activeErrorDialog.onTryAgain,onCancel:W.activeErrorDialog.onCancel}),(0,ec.jsx)(S3,{missingSurfaceMessage:i,variant:W.uploadErrorDialog.variant,open:W.uploadErrorDialog.open,portalContainer:es,onOpenChange:W.uploadErrorDialog.onOpenChange,onTryAgain:W.uploadErrorDialog.onTryAgain,onCancel:W.uploadErrorDialog.onCancel})]}),eA=(0,ec.jsxs)("div",{ref:x,className:"relative grid size-full grid-rows-[minmax(0,1fr)_auto] overflow-hidden text-foreground sm:block","data-neurodyn-room-viewer-container":"","data-testid":"floor-viewer-root",children:[h?(0,ec.jsx)("div",{className:"flex size-full items-center justify-center bg-radial from-background-containers to-background-base-2",children:(0,ec.jsx)(CO,{variant:"logo"})}):W.scene.shouldRender?el:null,!W.surface.usesSiblingDialogFlow&&ed,!W.surface.usesSiblingDialogFlow&&eh]});return W.surface.usesSiblingDialogFlow?(0,ec.jsxs)(ec.Fragment,{children:[(W.scene.shouldRenderDialog||h)&&(0,ec.jsx)(Cg,{open:I,onOpenChange:B,children:(0,ec.jsxs)(Cy,{className:"inset-0 h-dvh min-w-full max-w-none translate-x-0 translate-y-0 rounded-none border-none bg-transparent p-0 shadow-none sm:p-0 sm:max-w-none",contentInsideOverlay:!0,portalContainer:S,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,ec.jsx)(Cx,{className:"sr-only",children:r}),(0,ec.jsx)(CC,{className:"sr-only"}),eA]})}),ed,eh,ep]}):(0,ec.jsxs)(ec.Fragment,{children:[eA,ep]})}function Iv(e){return(0,ec.jsx)(Im,{...e})}let Ib={angle:0,rotation:0,isDragging:!1};function Iy(){let e=Ib,t=new Set;function r(r){return n=>{let i="function"==typeof n?n(e[r]):n;Object.is(i,e[r])||(e={...e,[r]:i},t.forEach(e=>e()))}}return{getState:()=>e,subscribe:e=>(t.add(e),()=>{t.delete(e)}),setAngle:r("angle"),setRotation:r("rotation"),setIsDragging:r("isDragging")}}let Iw=[];function Ix(e,t,r){if(t===r)return e;let n=new Set(t.map(e=>e.id)),i=new Set(r.map(e=>e.id)),a=e.filter(e=>!n.has(e.id)&&!i.has(e.id));return a.length>0?[...a,...r]:r}function IC({children:e,src:t,tinuuid:r,roomId:n,type:i,viewerSurface:a,dialogPortalContainer:o=null,viewerDialogOpen:s=!0,onViewerDialogOpenChange:l,width:c,height:u,displayUnit:d,name:h,apiKey:p,baseURL:A,source:f,externalWidgetSession:g}){var m,v;let b=MO(d),y=function(){let{i18n:e}=tc();return"ru"===(e.resolvedLanguage??e.language)?"ru":"en"}(),w=EN(i),x=n?.trim()||void 0,C="panel-group"===CG[i].manipulation,{offersSizeVariants:E}=Ma(i),S="floor-room-presets"===CG[i].roomPresets?E_:EP,M=xP({apiKey:p,baseURL:A,source:f}),[I,B]=(0,eu.useState)(r),[k,T]=(0,eu.useState)(null),R=(0,eu.useCallback)(e=>{T(null),B(e)},[]),D=(0,eu.useCallback)(e=>{T(e),B(e)},[]),[P,_]=(0,eu.useState)(null),[L,F]=(0,eu.useState)(b[0].value),[N]=(0,eu.useState)(Iy),[O,Q]=(0,eu.useState)(null),[U,z]=(0,eu.useState)(()=>({layoutReady:!1,placementReady:!1,materialReady:"artwork-src"===w.materialSource,artifactsReady:!1,assetsReady:!1,prepareReady:!1,shadersReady:!1})),[G,H]=(0,eu.useState)(!1),[j,V]=(0,eu.useState)(null),[q,W]=(0,eu.useState)(null),K=(0,eu.useRef)(null),J=(0,eu.useRef)(!1),Y="object-glb"===w.materialSource,X="default"===f&&void 0!==p,Z=xL("wall-panel"===(m={apiKey:p,baseURL:A,source:f,resourceType:i}).resourceType?m:{...m,resourceType:void 0}),$=rK({queryKey:["room-viewer","activate",{apiKey:p??null,source:f,resourceType:i}],enabled:X,queryFn:({signal:e})=>x1(Z.query,{...Z.config,baseURL:A,headers:{"x-api-key":p},signal:e})},rM,void 0),ee=xF($.error),et=(0,eu.useMemo)(()=>{let e=$.data;return Cn(e?.widgetSession,{apiConfig:{baseURL:A,headers:{"x-api-key":p}}})},[$.data,p,A]),er=g instanceof Cr?g:null,en=g instanceof Cr?null:g,ei=en?.token,ea=en?.sid,eo=en?.expiresIn,es=(0,eu.useMemo)(()=>er||(Cn({token:ei,sid:ea,expiresIn:eo},{apiConfig:{baseURL:A,headers:{"x-api-key":p}}})??et),[et,p,A,er,ei,ea,eo]),el="shopify"===f?null!==es:X&&$.isSuccess,ed=rK({queryKey:["room-viewer","rooms",{apiKey:(v={apiKey:p,baseURL:A,language:y,source:f,widgetSession:es,resourceType:i}).apiKey??null,language:v.language??null,source:v.source,resourceType:v.resourceType??null,widgetSessionId:v.widgetSession?.sid??null}],enabled:M&&el,placeholderData:rl,queryFn:async({signal:e})=>{try{return await Ch({apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}catch(e){if(xF(e))throw e;return[]}}},rM,void 0),eh=M?ed.data??Iw:S,[ep,eA]=(0,eu.useState)(()=>({rooms:eh,sourceRooms:eh})),ef=(0,eu.useMemo)(()=>Ix(ep.rooms,ep.sourceRooms,eh),[ep.rooms,ep.sourceRooms,eh]),eg=(0,eu.useCallback)(e=>{eA(t=>{let r=Ix(t.rooms,t.sourceRooms,eh);return{rooms:"function"==typeof e?e(r):e,sourceRooms:eh}})},[eh]),[em,ev]=(0,eu.useState)(()=>x??S[0].id),[eb,ey]=(0,eu.useState)(x);eb!==x&&(ey(x),x&&(ev(x),z(e=>SW(e,SJ)),W(e=>C$(e)?null:e)));let ew=ef.find(e=>e.id===em),ex=ew??ef[0]??S[0],eC="rotate-on-floor"===CG[i].manipulation;(0,eu.useLayoutEffect)(()=>{x&&(N.setAngle(0),N.setRotation(0))},[x,N]),(0,eu.useEffect)(()=>{eC&&N.setRotation(0)},[eC,ex.id,N]);let eE=ef.length>0;!ew&&ef[0]&&em!==ef[0].id&&ev(ef[0].id);let eS=!X||$.isSuccess||$.isError&&null===ee,eM=rK({queryKey:Cs(r??void 0,{apiKey:p,baseURL:A,language:y,source:f,resourceType:i}),enabled:eS&&Y&&null===P&&!!r,queryFn:async({signal:e})=>{if(!r)throw Error("Tinuuid is required.");return Cc(r,{apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}},rM,void 0),eI=rK({queryKey:Cs(I??void 0,{apiKey:p,baseURL:A,language:y,source:f,resourceType:i}),enabled:eS&&Y&&!!I,placeholderData:rl,queryFn:async({signal:e})=>{if(!I)throw Error("Tinuuid is required.");return Cc(I,{apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}},rM,void 0),eB=eM.data??null,ek=eI.data??null,eT=eB?.materials?.[0]??null,eR=P?.native?.glbUrl??null,eD=xF(eM.error),eP=xF(ed.error),e_=M&&("shopify"===f?null===es||ed.isLoading:$.isSuccess&&ed.isLoading),eL=X&&$.isLoading||e_,eF=$.error&&null===ee?"viewer-load-failed":null,eN=eM.error&&null===eD?"viewer-load-failed":null,eO="artwork-src"===w.materialSource&&("string"!=typeof t||0===t.trim().length)?"artwork-load-failed":null,eQ=Y&&!eL&&(!r||eM.isSuccess&&null===eT||null!==P&&null===eR)?"viewer-load-failed":null,eU=null!==k&&k===I&&(eI.isError||eI.isSuccess&&ek?.tinuuid===I&&!ek.materials?.[0]?.native?.glbUrl)?"viewer-load-failed":null,ez=rX({queries:Ml({apiKey:p,baseURL:A,language:y,source:f,widgetSession:es}).map(e=>({...e,enabled:w.hasPictureFrame&&eS&&!eL}))}),eG=ez[0]?.data??null,eH=j??ee??eP??eD,ej=q??eU??eF??eN??eQ??eO,eV=(0,eu.useCallback)(e=>{z(t=>SW(t,e))},[]);(0,eu.useEffect)(()=>{if("dialog"!==a||!s){J.current=!1;return}J.current||es&&(Ci(es,"widget_opened"),J.current=!0)},[s,a,es]),(0,eu.useEffect)(()=>{Y&&(R(r),_(null),V(null),W(null))},[r,R,Y]),(0,eu.useEffect)(()=>{V(null),W(null)},[p,f]),(0,eu.useEffect)(()=>{Y&&eB&&null===P&&_(eT)},[P,eT,eB,Y]),(0,eu.useEffect)(()=>{let e=eG?.materials?.[0],t=eG?.tinuuid;null===P&&e&&t&&(_(e),R(t))},[eG,P,R]),(0,eu.useEffect)(()=>{if(!Y||!E&&!C&&k!==I||null===ek||ek.tinuuid!==I)return;let e=ek.materials?.[0];if(!e)return;let t=ek.materials?.some(e=>e===P||!!e.hid&&e.hid===P?.hid);if(k===I){T(null),_(e);return}(!t||C)&&P!==e&&_(e)},[C,P,E,ek,I,Y,k]);let eq=(0,eu.useMemo)(()=>({type:i,name:h,width:c,height:u,displayUnit:d}),[i,h,c,u,d]),eW=(0,eu.useMemo)(()=>({viewerSurface:a,dialogPortalContainer:o,viewerDialogOpen:s,onViewerDialogOpenChange:l}),[a,o,s,l]),eK=(0,eu.useMemo)(()=>({rooms:ef,sourceRooms:eh,setRooms:eg,room:ex,initialRoomId:x,setRoomId:ev}),[ef,ex,x,eg,eh]),eJ=(0,eu.useMemo)(()=>({src:t,glbUrl:eR,tinuuid:I,embeddedObject:eB,selectedObject:ek,material:P,setTinuuid:R,selectResourceVariant:D,setMaterial:_,apiKey:p,baseURL:A,language:y,source:f,widgetSession:es,hasRooms:eE,isViewerAccessPending:eL,accessError:eH,setAccessError:V,loadError:ej,setLoadError:W}),[t,eR,I,eB,ek,P,R,D,p,A,y,f,es,eE,eL,eH,ej]),eY=(0,eu.useMemo)(()=>({setContainerRef:Q,resourceRef:K,sceneGestures:N,patchSceneLoad:eV,setIsRoomScenePending:H}),[eV,N]),eX=(0,eu.useMemo)(()=>({...eY,containerRef:O,sceneLoad:U,isRoomScenePending:G}),[eY,O,U,G]),eZ=(0,eu.useMemo)(()=>({matting:L,setMatting:F}),[L]);return(0,ec.jsx)(C0,{value:eq,children:(0,ec.jsx)(C1,{value:eW,children:(0,ec.jsx)(C2,{value:eK,children:(0,ec.jsx)(C3,{value:eJ,children:(0,ec.jsx)(C4,{value:eY,children:(0,ec.jsx)(C9,{value:eX,children:(0,ec.jsx)(C5,{value:eZ,children:(0,ec.jsx)(Eg,{children:e})})})})})})})})}let IE={poster:"wallart",carpet:"rugs"};function IS(e){return"poster"===e||"carpet"===e}i4.gPd.DEFAULT_ANISOTROPY=4;let IM=new r2({defaultOptions:{queries:{gcTime:1/0,refetchOnMount:!1,refetchOnReconnect:!1,refetchOnWindowFocus:!1,retry:(e,t)=>{let r=function(e){if(iX(e))return e.response?.status}(t);return(void 0===r||!(r>=400)||!(r<500))&&e<2}}}});function II({type:e,src:t,tinuuid:r,roomId:n,name:i,height:a,width:o,language:s,dimensionUnit:l="m",displayUnit:c="cm",apiKey:u,source:d="default",showDialogCloseButton:h=!1,viewerSurface:p="inline",dialogPortalContainer:A=null,viewerDialogOpen:f=!0,onViewerDialogOpenChange:g,widgetSession:m}){let{i18n:v}=tc(),b=u?.trim()||void 0,y=r?.trim()||void 0,w=IS(e)?IE[e]:e,x=EN(w).takesDimensionProps?function(e,t,r="m"){return{width:MF(e??0,r),height:MF(t??0,r)}}(o,a,l):null;return(0,eu.useEffect)(()=>{IS(e)&&IE[e]},[e]),(0,eu.useEffect)(()=>{"string"==typeof s&&v.changeLanguage(s)},[v,s]),(0,ec.jsx)(rN,{client:IM,children:(0,ec.jsx)(IC,{src:t??null,tinuuid:y??null,roomId:n,type:w,viewerSurface:p,dialogPortalContainer:A,viewerDialogOpen:f,onViewerDialogOpenChange:g,name:i,width:x?.width??0,height:x?.height??0,displayUnit:c,apiKey:b,baseURL:"shopify"===d?xR:void 0,source:d,externalWidgetSession:m,children:(0,ec.jsx)(Iv,{showDialogCloseButton:h})})})}function IB({type:e,src:t,tinuuid:r,roomId:n,width:i,height:a,dimensionUnit:o,displayUnit:s,name:l,language:c,apiKey:u,source:d,widgetSession:h,disableClose:p=!1,open:A,defaultOpen:f,onOpenChange:g}){let[m,v]=(0,eu.useState)(null),[b,y]=(0,eu.useState)(f??!1),w=A??b,[x,C]=(0,eu.useState)(w),E=w||x;(0,eu.useEffect)(()=>{w&&C(!0)},[w]);let S=El({disableClose:p,onOpenChange:g,open:A}),M=(0,eu.useCallback)(e=>{let{disableClose:t,onOpenChange:r,open:n}=S.current;(e||!t)&&(void 0===n&&y(e),r?.(e))},[S]),I=(0,ec.jsx)(II,{type:e,src:t,tinuuid:r,roomId:n,name:l,height:a,width:i,dimensionUnit:o,displayUnit:s,language:c,apiKey:u,source:d,widgetSession:h,showDialogCloseButton:!p,viewerSurface:"dialog",dialogPortalContainer:m,viewerDialogOpen:w,onViewerDialogOpenChange:M});return(0,ec.jsxs)(ec.Fragment,{children:[(0,eh.createPortal)((0,ec.jsx)("style",{children:xS.A}),document.head),(0,eh.createPortal)((0,ec.jsxs)(tk.div,{"data-neurodyn-room-viewer-root":"",style:{display:"block",letterSpacing:"normal",position:"relative",zIndex:0x7fffffff},children:[(0,ec.jsx)("style",{children:":host{display:block!important;visibility:visible!important}"}),(0,ec.jsx)("style",{children:xT}),(0,ec.jsx)("div",{ref:v}),m&&(0,ec.jsx)(xE,{root:m,storageKey:"neurodyn-theme",defaultTheme:"light",children:(0,ec.jsx)(tu,{i18n:xI,children:E&&I})})]}),document.body)]})}xW({baseURL:"https://api.neurodyn.ai/"});let Ik=0,IT="data-neurodyn-room-viewer-dialog",IR=`[${IT}]`;function ID(e,t,r){return{kind:"attribute",name:e,parse:t.parse,values:t.values,...r}}function IP(e){return{kind:"option",reason:e}}function I_(){return{parse:e=>e??void 0}}function IL(){return{parse:e=>e?Number(e):void 0}}function IF(e){return{parse:t=>e.includes(t??"")?t:void 0,values:e}}let IN={prefix:"data-neurodyn-room-viewer-",markers:[{name:IT,description:"Marks an element for the embed build."}],fields:{type:ID("type",{parse:e=>e??void 0,values:["wallart","rugs","flooring","wall-panel"]},{required:!0,description:"Resource type."}),src:ID("src",I_(),{required:{when:"type",is:["wallart"]},description:"Wall-art image URL."}),tinuuid:ID("tinuuid",I_(),{required:{when:"type",is:["rugs","flooring","wall-panel"]},description:"The object's tinuuid."}),roomId:ID("room-id",I_(),{required:!1,description:"Initial Room ID from the available catalog. Skips the initial interior chooser; unavailable Rooms open the chooser. Empty values do nothing."}),name:ID("name",I_(),{required:!0,description:"Title shown in the dialog header."}),width:ID("width",IL(),{required:!1,description:"Wall-art width. Used when `type` is `wallart`."}),height:ID("height",IL(),{required:!1,description:"Wall-art height. Used when `type` is `wallart`."}),dimensionUnit:ID("dimension-unit",IF(["m","cm","in"]),{required:!1,defaultValue:"`m`",description:"Unit used by wall-art width and height."}),displayUnit:ID("display-unit",IF(["cm","in"]),{required:!1,defaultValue:"`cm`",description:"Unit used to display UI measurements."}),language:ID("language",IF(["en","ru"]),{required:!1,defaultValue:"User locale",description:"UI language override."}),apiKey:ID("api-key",I_(),{required:!0,description:"Public API key sent as `x-api-key`. Not needed when `source` is `shopify`."}),source:ID("source",IF(["default","shopify"]),{required:!1,defaultValue:"`default`",description:"Backend source mode."}),disableClose:ID("disable-close",{parse:e=>"true"===e},{required:!1,defaultValue:"`false`",description:"Set to `true` to hide close controls and prevent dismissal."}),widgetSession:IP("An existing Widget Session handed over by an embedding surface such as Shopify."),open:IP("The embed build owns the open state."),defaultOpen:IP("The embed build owns the open state."),onOpenChange:IP("The embed build owns the open state.")}};window.__neurodynRoomViewerDialog?.destroy();let IO=new class{container=null;props=null;root=null;openState=!1;destroy(){this.root?.unmount(),this.root=null,this.container?.remove(),this.container=null,this.props=null,this.openState=!1}open(e){this.props=e,this.openState=!0,this.render()}handleOpenChange=e=>{this.openState=e,this.render()};ensureRoot(){return this.root||(this.container=document.createElement("div"),this.container.id=`neurodyn-room-viewer-dialog-root-${Ik++}`,document.body.appendChild(this.container),this.root=(0,fE.createRoot)(this.container)),this.root}render(){this.props&&this.ensureRoot().render((0,eu.createElement)(IB,{...this.props,onOpenChange:this.handleOpenChange,open:this.openState}))}};function IQ(e){let t=e.target instanceof Element?e.target.closest(IR):null;t&&IO.open(function(e,t={}){let r=function(e,t,r={}){let n={};for(let[i,a]of Object.entries(t.fields).filter(e=>"attribute"===e[1].kind)){let o=`${t.prefix}${a.name}`,s=r[i];if(void 0!==s){n[i]=a.normalizesOptions?a.parse(s,{attribute:o}):s;continue}n[i]=a.parse(function(e,t,r=[]){let n=e.getAttribute(t);if(0===r.length||n?.trim())return n;for(let t of r){let r=e.getAttribute(t);if(r?.trim())return r}return n}(e,o,a.legacyNames),{attribute:o})}return n}(e,IN,t);return{...r,type:r.type,name:r.name}}(t))}u={destroy:function(){document.removeEventListener("click",IQ),IO.destroy(),window.__neurodynRoomViewerDialog===u&&(window.__neurodynRoomViewerDialog=void 0)}},document.addEventListener("click",IQ),window.__neurodynRoomViewerDialog=u})()})();
@@ -1593,6 +1593,10 @@ Defaulting to \`null\`.`));let u=gO(a,c)?a:null,d=gF(u)?s(u,c):void 0;return(0,e
1593
1593
  position: static;
1594
1594
  }
1595
1595
 
1596
+ .sticky {
1597
+ position: sticky;
1598
+ }
1599
+
1596
1600
  .inset-0 {
1597
1601
  inset: calc(var(--spacing) * 0);
1598
1602
  }
@@ -7237,4 +7241,4 @@ ${N}
7237
7241
  if (coverage < 0.01) discard;
7238
7242
  diffuseColor = vec4(1.0, 1.0, 1.0, coverage);
7239
7243
  `)},s.customProgramCacheKey=()=>"wall-panel-exterior-outline-v1",{mask:t,maskMaterial:r,maskModel:n,maskScene:i,material:s,resolution:a,radius:o,clearColor:new i9.Q1f}},[e]);return(0,ec.useLayoutEffect)(()=>Sh(r.material,t,{shading:!1}),[r,t]),(0,ec.useLayoutEffect)(()=>()=>{r.mask.dispose(),r.maskMaterial.dispose(),r.material.dispose()},[r]),(0,el.jsx)("mesh",{material:r.material,frustumCulled:!1,renderOrder:3,raycast:()=>{},onBeforeRender:(t,n,i)=>{let a=t.getRenderTarget(),o=t.getActiveCubeFace(),s=t.getActiveMipmapLevel(),l=t.autoClear,c=t.getClearAlpha();t.getClearColor(r.clearColor),t.getDrawingBufferSize(r.resolution);let{x:u,y:d}=r.resolution;(r.mask.width!==u||r.mask.height!==d)&&r.mask.setSize(u,d),r.radius.value=2*t.getPixelRatio(),e.updateWorldMatrix(!0,!0),r.maskModel.matrix.copy(e.matrixWorld);try{t.autoClear=!0,t.setClearColor(0,0),t.setRenderTarget(r.mask),t.render(r.maskScene,i)}finally{t.setRenderTarget(a,o,s),t.setClearColor(r.clearColor,c),t.autoClear=l}},children:(0,el.jsx)("planeGeometry",{args:[2,2]})})}function SI({source:e,patch:t,isPointVisible:r,outlined:n}){let{model:i,materials:a}=(0,ec.useMemo)(()=>{let t=e.clone(!0),r=Sp(t);return{model:t,materials:r}},[e]);return(0,ec.useLayoutEffect)(()=>{let e=a.map(e=>Sh(e,t));return i.traverse(e=>{e instanceof i9.eaF&&(e.raycast=function(e,t){let n=[];i9.eaF.prototype.raycast.call(this,e,n),t.push(...n.filter(e=>!r||r(e.point)))})}),()=>e.forEach(e=>e())},[r,a,i,t]),(0,ec.useLayoutEffect)(()=>()=>a.forEach(e=>e.dispose()),[a]),(0,el.jsxs)(el.Fragment,{children:[(0,el.jsx)("primitive",{object:i,dispose:null}),n&&(0,el.jsx)(SM,{model:i,patch:t})]})}function SB({size:e,patch:t,isPointVisible:r,onClick:n}){let[i,a]=(0,ec.useState)(!1),o=(0,ec.useMemo)(()=>{let e=document.createElement("canvas");e.width=e.height=256;let t=e.getContext("2d");if(t.lineJoin="miter",t.lineCap="round",t.beginPath(),i)t.rect(16,16,224,224);else for(let[e,r,n,i]of[[16,16,1,1],[240,16,-1,1],[16,240,1,-1],[240,240,-1,-1]])t.moveTo(e+22*n,r),t.lineTo(e,r),t.lineTo(e,r+22*i);t.strokeStyle="rgba(255,255,255,.80)",t.lineWidth=5,t.stroke(),t.strokeStyle=i?"#59636d":"rgba(70,80,90,.60)",t.lineWidth=2,t.stroke(),t.beginPath(),t.arc(128,128,29,0,2*Math.PI),t.fillStyle=i?"#ffffff":"#f5f6f7",t.fill(),t.strokeStyle="rgba(35,45,55,.32)",t.lineWidth=2,t.stroke(),t.beginPath(),t.moveTo(117,128),t.lineTo(139,128),t.moveTo(128,117),t.lineTo(128,139),t.strokeStyle="#35414d",t.lineWidth=3,t.stroke();let r=new i9.GOR(e);return r.colorSpace="srgb",r},[i]),s=(0,ec.useMemo)(()=>new i9.V9B({map:o,transparent:!0,depthWrite:!1,toneMapped:!1}),[o]);return(0,ec.useLayoutEffect)(()=>{let e=Sh(s,t,{shading:!1});return s.alphaToCoverage=!1,e},[s,t]),(0,ec.useLayoutEffect)(()=>()=>{s.dispose(),o.dispose()},[s,o]),(0,el.jsx)("mesh",{material:s,renderOrder:2,onPointerOver:()=>a(!0),onPointerOut:()=>a(!1),raycast:function(e,t){let n=[];i9.eaF.prototype.raycast.call(this,e,n),t.push(...n.filter(e=>!r||r(e.point)))},onPointerDown:e=>{e.stopPropagation(),e.nativeEvent.stopPropagation()},onClick:e=>{e.stopPropagation(),n()},children:(0,el.jsx)("planeGeometry",{args:[e,e]})})}function Sk({isPointVisible:e,visible:t,dragging:r,panelKey:n,number:i,size:a,depth:o,patch:s}){let l=Eg(),{t:c}=tl(),{camera:u,gl:d}=pL(),h=(0,ec.useRef)(null),p=(0,ec.useRef)(null),A=(0,ec.useMemo)(()=>new i9.Pq0,[]),f=(0,ec.useMemo)(()=>{let e=document.createElement("canvas");e.width=e.height=128;let t=e.getContext("2d");for(let e of(t.beginPath(),t.arc(64,64,61,0,2*Math.PI),t.fillStyle="#f5f6f7",t.fill(),t.strokeStyle="rgba(35,45,55,.32)",t.lineWidth=2,t.stroke(),t.fillStyle="#35414d",[40,64,88]))t.beginPath(),t.arc(e,64,5,0,2*Math.PI),t.fill();let r=new i9.GOR(e);return r.colorSpace="srgb",r},[]),g=(0,ec.useMemo)(()=>new i9.V9B({map:f,transparent:!0,depthWrite:!1,toneMapped:!1}),[f]);(0,ec.useLayoutEffect)(()=>{let e=Sh(g,s,{shading:!1});return g.alphaToCoverage=!1,e},[g,s]),(0,ec.useLayoutEffect)(()=>()=>{g.dispose(),f.dispose()},[g,f]),pF(()=>{h.current&&p.current&&(h.current.getWorldPosition(A),p.current.tabIndex=!r&&(!e||e(A))?0:-1)});let m=()=>{if(!h.current)return;A.set(.05,-.05,0),h.current.localToWorld(A).project(u);let e=d.domElement.getBoundingClientRect();l.openMenu(n,{x:e.left+(A.x+1)*e.width/2,y:e.top+(1-A.y)*e.height/2})};return(0,el.jsxs)("group",{ref:h,position:[a/2-a/12-.05,-a/2+a/20+.05,o+.002],children:[(0,el.jsx)("mesh",{name:"panel-actions",material:g,visible:t&&!r,renderOrder:3,raycast:function(n,i){if(!t||r)return;let a=[];i9.eaF.prototype.raycast.call(this,n,a),i.push(...a.filter(t=>t.uv&&.48>=Math.hypot(t.uv.x-.5,t.uv.y-.5)&&(!e||e(t.point))))},onPointerDown:e=>{e.stopPropagation(),e.nativeEvent.stopPropagation()},onPointerUp:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),m()},children:(0,el.jsx)("planeGeometry",{args:[.1,.1]})}),(0,el.jsx)(fP,{style:{pointerEvents:"none"},children:(0,el.jsx)("button",{ref:p,type:"button","data-panel-key":n,className:"sr-only","aria-label":c("wallPanel.panelActions",{number:i}),"aria-haspopup":"menu",onFocus:()=>l.select(n),onClick:e=>{e.stopPropagation(),m()}})})]})}function ST({glbUrl:e,position:t,quaternion:r,materialPatch:n,isPointVisible:i,onDragStart:a,onDrag:o,onDragEnd:s}){let{data:l}=rW({...Ed(e),enabled:!0,suspense:!0,throwOnError:rG,placeholderData:void 0},rS,void 0),c=Eg(),{room:u}=C7(),[d,h]=(0,ec.useState)(null),{resourceRef:p,sceneGestures:{setIsDragging:A}}=Er(),f=En("isDragging"),{gl:g}=pL(),m=f?"grabbing":d?.action?"pointer":d?"grab":"auto";(0,ec.useLayoutEffect)(()=>{let e=g.domElement.style.cursor;return g.domElement.style.cursor=m,()=>{g.domElement.style.cursor=e}},[g,m]);let v=(e,t)=>h(r=>r?.key===e&&r.action===t?r:{key:e,action:t}),b=(0,ec.useRef)(null),y=l.width,w=`${u.id}:${c.generation}`,[x,C]=(0,ec.useState)({size:y,roomKey:w,x:0,y:0});if(x.roomKey!==w)C({size:y,roomKey:w,x:0,y:0});else if(x.size!==y){let e=c.panels.reduce((e,t)=>({minX:Math.min(e.minX,t.x),maxX:Math.max(e.maxX,t.x),minY:Math.min(e.minY,t.y),maxY:Math.max(e.maxY,t.y)}),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0}),t=x.size-y;C({size:y,roomKey:w,x:x.x+(e.minX+e.maxX)/2*t,y:x.y+(e.minY+e.maxY)/2*t})}(0,ec.useLayoutEffect)(()=>()=>A(!1),[A]);let E=(e,t=!1)=>{let r=b.current;r&&r.pointerId===e.pointerId&&(e.stopPropagation(),b.current=null,e.target.releasePointerCapture(e.pointerId),A(!1),s(),t||r.moved||(c.select(r.key),c.closeMenu()))};return(0,el.jsx)("group",{ref:p,position:t,quaternion:r,onPointerMissed:c.clearSelection,children:(0,el.jsxs)("group",{position:[x.x,x.y,0],children:[c.panels.map((e,t)=>{let r=c.options.find(t=>t.material.hid===e.materialId)?.model??l;return(0,el.jsxs)("group",{position:[e.x*y,e.y*y,0],onPointerOver:t=>{t.stopPropagation(),v(Eh(e),"panel-actions"===t.object.name)},onPointerOut:()=>h(null),onPointerDown:t=>{0===t.button&&!b.current&&(t.stopPropagation(),t.nativeEvent.stopPropagation(),b.current={x:t.clientX,y:t.clientY,key:Eh(e),moved:!1,pointerId:t.pointerId},t.target.setPointerCapture(t.pointerId),A(!0),a())},onPointerMove:t=>{v(Eh(e),"panel-actions"===t.object.name);let r=b.current;r&&r.pointerId===t.pointerId&&(t.stopPropagation(),!r.moved&&Math.hypot(t.clientX-r.x,t.clientY-r.y)>4&&(r.moved=!0,c.select(r.key),c.closeMenu()),r.moved&&o())},onPointerUp:e=>E(e),onPointerCancel:e=>E(e,!0),children:[(0,el.jsx)(Sk,{panelKey:Eh(e),number:t+1,size:y,depth:r.depth,patch:n,isPointVisible:i,dragging:f,visible:c.selected===Eh(e)||d?.key===Eh(e)}),(0,el.jsx)("group",{"rotation-z":-e.turns*Math.PI/2,children:(0,el.jsx)("group",{position:r.mountingOffset,children:(0,el.jsx)(SI,{outlined:c.selected===Eh(e)||d?.key===Eh(e),source:r.scene,patch:n,isPointVisible:i})})})]},Eh(e))}),c.selected&&c.neighbors.map(e=>(0,el.jsx)("group",{position:[e.x*y,e.y*y,.002],children:(0,el.jsx)(SB,{size:y,patch:n,isPointVisible:i,onClick:()=>c.add(e)})},Eh(e)))]})})}function SR(e){let{glbUrl:t}=Ee();return t?(0,el.jsx)(ST,{...e,glbUrl:t}):null}let SD={"modelled-resource":function({position:e,quaternion:t,materialPatch:r,onDrag:n,onDragEnd:i,onDragStart:a}){let{type:o}=C8(),{glbUrl:s}=Ee();return s?"rotate-on-floor"===Cz[o].manipulation?(0,el.jsx)(Sb,{glbUrl:s,position:e,quaternion:t,materialPatch:r}):(0,el.jsx)(fy,{autoTransform:!1,onDrag:n,onDragEnd:i,onDragStart:a,children:(0,el.jsx)(Sb,{glbUrl:s,position:e,quaternion:t,materialPatch:r})}):null},"textured-resource":function({position:e,quaternion:t,materialPatch:r,onDrag:n,onDragEnd:i,onDragStart:a}){let{src:o,setLoadError:s}=Ee();return o?(0,el.jsx)(Eq,{onError:()=>s("artwork-load-failed"),children:(0,el.jsx)(fy,{autoTransform:!1,onDrag:n,onDragEnd:i,onDragStart:a,children:(0,el.jsx)(SS,{src:o,position:e,quaternion:t,materialPatch:r})})}):null}};function SP(e){e.setCrossOrigin("anonymous")}let S_=EZ(3,(e,t)=>{pQ.clear(i9.Tap,e),t.dispose()}),SL=E$(S_,e=>pQ.clear(i9.Tap,e));function SF(){var e;let t,{room:r}=C7(),n=pL(e=>e.scene),i=(e=CH(r),SL.request(e),t=pQ(i9.Tap,e,SP),(0,ec.useLayoutEffect)(()=>(SL.clearPassed(e),S_.hold(e,t),()=>S_.release(t)),[e,t]),t);return(0,ec.useLayoutEffect)(()=>(i.colorSpace="srgb",n.background=i,()=>{n.background===i&&(n.background=null)}),[n,i]),null}function SN({plane:e,geometry:t,setPlaneRef:r}){let n={planeId:e.id,kind:e.kind};return(0,el.jsx)("mesh",{ref:t=>r(e,t),geometry:t,userData:n,children:(0,el.jsx)("meshBasicMaterial",{visible:!1,side:2})})}let SO=(0,ec.memo)(()=>{let e,{type:t}=C8(),r=Eg(),{setLoadError:n}=Ee(),i="panel-group"===(e=Cz[t]).manipulation?SR:SD[e.identity],{room:a}=C7(),{patchSceneLoad:o,resourceRef:s}=Er(),{gl:l,size:c,camera:u,invalidate:d,raycaster:h,pointer:p}=pL(),A=(0,ec.useMemo)(()=>a.scene??ER(),[a.scene]),f=CG(t),g=function(e){let[t,r]=(0,ec.useState)(null);return(0,ec.useEffect)(()=>{let t=new AbortController,n=null;return E9.acquire(e,{neutralShadingPng:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGNoaGgAAAMEAYFL09IQAAAAAElFTkSuQmCC",signal:t.signal}).then(i=>{t.signal.aborted?E9.release(i):(n=i,r({request:e,state:{preparation:i,failed:!1}}))},n=>{t.signal.aborted||(console.error(n),r({request:e,state:{preparation:null,failed:!0}}))}),()=>{t.abort(),n&&E9.release(n)}},[e]),t?.request===e?t.state:E3}((0,ec.useMemo)(()=>({roomId:a.id,scene:A,surfaces:f}),[a.id,A,f])),m=function({camera:e,invalidate:t,pointer:r,roomPreparation:{preparation:n,failed:i},raycaster:a,resourceRef:o,roomId:s,scene:l,surfaces:c}){let u=`${s}:${[...c].sort().join(",")}`,d=(0,ec.useMemo)(()=>({value:null}),[]),[h,p]=(0,ec.useReducer)(Ss,u,So),A=(0,ec.useRef)(null),f=(0,ec.useRef)(null),g=(0,ec.useRef)(!1),m=(0,ec.useRef)(new Map),v=(0,ec.useRef)(null),b=h.placementKey===u,y=n?.planeIdMap??null,w=n?.masks??Sa,x=b?h.resourcePose:null,C=(0,ec.useMemo)(()=>Sr(l,c),[l,c]),E=(0,ec.useMemo)(()=>C.map(e=>e.id),[C]),S=(0,ec.useMemo)(()=>new Map(l.planes.map(e=>{let t,r;return[e.id,(t=e.polygon3D.flatMap(e=>(function(e,t){let[r,n,i]=e;return[r*(EQ(t)*(t.camera.fx/t.camera.fy)),i,-n]})(e,l)),(r=new i9.LoY).setAttribute("position",new i9.qtW(t,3)),e.polygon3D.length>=4&&r.setIndex([0,1,2,0,2,3]),r)]})),[l]);(0,ec.useEffect)(()=>()=>S.forEach(e=>e.dispose()),[S]);let M=(0,ec.useMemo)(()=>({artifactsReady:null!==y,placementReady:null!==x,prepareReady:null!==x}),[y,x]),I=0===C.length?"no-allowed-surface":i?"plane-id-map-decode":null,B=(0,ec.useCallback)((e,t)=>{t?m.current.set(e.id,t):m.current.delete(e.id)},[]);(0,ec.useEffect)(()=>()=>{d.value=null},[d,w]),(0,ec.useEffect)(()=>{p({type:"reset-placement",placementKey:u}),A.current=null,f.current=null,g.current=!1,d.value=null,v.current=null},[d,u]);let k=(0,ec.useCallback)((r,n,i=null)=>{let a,s=E7(r,n,e),l=i?(a=new i9.Pq0(...i).applyQuaternion(new i9.PTz(...s.quaternion)).add(new i9.Pq0(...s.position)),{...s,position:a.toArray()}):s;A.current=l.activePlaneId,f.current=l,g.current=!0,d.value=w.get(l.activePlaneId)?.texture??null,o.current?.position.fromArray(l.position),o.current?.quaternion.fromArray(l.quaternion),t()},[d,e,t,w,o]),T=(0,ec.useCallback)(t=>y?function({activePlaneId:e,allowedPlaneIds:t,camera:r,planeIdMap:n,planeMap:i,pointer:a,raycaster:o}){let s=new Set(t),l=[],c=new Set,u=e=>{!(null===e||c.has(e))&&s.has(e)&&(c.add(e),l.push(e))};for(let s of(u(EU(a,n)),u(e),t.forEach(u),o.setFromCamera(a,r),l)){let e=i.get(s),t=e?o.intersectObject(e,!1)[0]:null;if(t)return t}return null}({activePlaneId:A.current,allowedPlaneIds:E,camera:e,planeIdMap:y,planeMap:m.current,pointer:t,raycaster:a}):null,[E,e,y,a]);(0,ec.useEffect)(()=>{if(!y||null!==x)return;let r=function({allowedPlanes:e,camera:t,planeMap:r}){let n=e[0],i=n?r.get(n.id):null;return i?E7(i,function(e){let t=e.geometry.attributes.position,r=new i9.Pq0;for(let e=0;e<t.count;e++)r.add(new i9.Pq0(t.getX(e),t.getY(e),t.getZ(e)));return r.divideScalar(Math.max(1,t.count))}(i),t):null}({allowedPlanes:C,camera:e,planeMap:m.current});r&&(A.current=r.activePlaneId,f.current=r,d.value=w.get(r.activePlaneId)?.texture??null,p({type:"set-resource-pose",placementKey:u,resourcePose:r}),t())},[d,C,e,t,w,u,y,x]);let R=(0,ec.useCallback)(()=>{let t,n=T(r),i=f.current;if(!n||!i){v.current=null;return}let a=E7(n.object,n.point,e);t=new i9.PTz(...a.quaternion).invert(),v.current=new i9.Pq0(...i.position).sub(new i9.Pq0(...a.position)).applyQuaternion(t).toArray()},[e,T,r]),D=(0,ec.useCallback)(()=>{let e=T(r);e&&k(e.object,e.point,v.current)},[T,r,k]),P=(0,ec.useCallback)(()=>{v.current=null,g.current&&f.current&&(g.current=!1,p({type:"set-resource-pose",placementKey:u,resourcePose:f.current}))},[u]),_=(0,ec.useCallback)(t=>{let r,n=A.current,i=null===n?null:w.get(n);if(!i)return!1;let a=t.clone().project(e),o=function(e,t,r){if(t<0||t>1||r<0||r>1)return 0;let n=t*e.width-.5,i=r*e.height-.5,a=Math.floor(n),o=Math.floor(i),s=EX(a,e.width-1),l=EX(o,e.height-1),c=EX(a+1,e.width-1),u=EX(o+1,e.height-1),d=n-Math.floor(n),h=i-Math.floor(i);return((e.data[l*e.width+s]*(1-d)+e.data[l*e.width+c]*d)*(1-h)+(e.data[u*e.width+s]*(1-d)+e.data[u*e.width+c]*d)*h)/255}(i,(a.x+1)*.5,(1-a.y)*.5);return(r=EX((o-.4)/.29999999999999993,1))*r*(3-2*r)>.001},[e,w]);return{isPointerOnSurface:(0,ec.useCallback)(e=>{let t=y?EU(e,y):null;return null!==t&&E.includes(t)},[E,y]),activeMaskTextureUniform:d,isPointVisible:_,failure:I,handleDrag:D,handleDragEnd:P,handleDragStart:R,planeGeometries:S,readiness:M,resourcePose:x,setPlaneRef:B}}({camera:u,invalidate:d,pointer:p,roomPreparation:g,raycaster:h,resourceRef:s,roomId:`${a.id}:${r?.generation??0}`,scene:A,surfaces:f});!function(e,t,r){let{gl:n}=pL(),{sceneGestures:{setRotation:i,setIsDragging:a}}=Er();(0,ec.useEffect)(()=>{if(!e)return;let r=n.domElement,o=null,s=e=>{e.preventDefault(),e.stopImmediatePropagation()},l=()=>{let e=o;o=null,e&&r.hasPointerCapture(e.id)&&r.releasePointerCapture(e.id),e&&a(!1)},c=e=>{if(o)return void s(e);if(!e.isPrimary||0!==e.button)return;let n=r.getBoundingClientRect();t(new i9.I9Y((e.clientX-n.left)/n.width*2-1,1-(e.clientY-n.top)/n.height*2))&&(s(e),o={id:e.pointerId,startX:e.clientX,lastX:e.clientX,rotating:!1},r.setPointerCapture(e.pointerId),a(!0))},u=e=>{if(!o||o.id!==e.pointerId||(s(e),!o.rotating&&5>Math.abs(e.clientX-o.startX)))return;o.rotating=!0;let t=e.clientX-o.lastX;o.lastX=e.clientX,i(e=>e+.5*t)},d=e=>{o?.id===e.pointerId&&(s(e),l())};return r.addEventListener("pointerdown",c,!0),r.addEventListener("pointermove",u,!0),r.addEventListener("pointerup",d,!0),r.addEventListener("pointercancel",d,!0),r.addEventListener("lostpointercapture",d,!0),window.addEventListener("blur",l),()=>{r.removeEventListener("pointerdown",c,!0),r.removeEventListener("pointermove",u,!0),r.removeEventListener("pointerup",d,!0),r.removeEventListener("pointercancel",d,!0),r.removeEventListener("lostpointercapture",d,!0),window.removeEventListener("blur",l),l()}},[e,n,t,r,a,i])}("rotate-on-floor"===Cz[t].manipulation,m.isPointerOnSurface,a.id);let v=(0,ec.useMemo)(()=>new i9.I9Y(1,1),[]),b=g.preparation?.lightingTexture??null,y=(0,ec.useMemo)(()=>b&&{lightingTexture:b,viewport:v,activeMaskTextureUniform:m.activeMaskTextureUniform,maxRoomGain:1.1},[m.activeMaskTextureUniform,b,v]);(0,ec.useLayoutEffect)(()=>{u instanceof i9.ubm&&(u.fov=A.camera.fovYDeg),u.position.set(0,0,0),u.up.set(0,0,1),u.lookAt(0,1,0),u.updateProjectionMatrix(),d()},[u,d,A.camera.fovYDeg]),(0,ec.useLayoutEffect)(()=>{l.getDrawingBufferSize(v),v.set(Math.max(1,v.x),Math.max(1,v.y))},[l,c.height,c.width,v]);let{artifactsReady:w,placementReady:x,prepareReady:C}=m.readiness,E=m.failure;return(0,ec.useEffect)(()=>{o({artifactsReady:w,placementReady:x,prepareReady:C})},[w,o,x,C]),(0,ec.useEffect)(()=>{if(E){if("no-allowed-surface"===E){Si({planes:A.planes,source:"room-scene",surfaces:f}),n("room-missing-surface");return}!function({failure:e,planes:t,resourceType:r}){Se(t)}({failure:E,planes:A.planes,resourceType:t}),n("room-load-failed")}},[E,A.planes,n,f,t]),(0,el.jsxs)(el.Fragment,{children:[m.resourcePose&&y&&(0,el.jsx)(i,{position:m.resourcePose.position,quaternion:m.resourcePose.quaternion,materialPatch:y,isPointVisible:m.isPointVisible,onDrag:m.handleDrag,onDragEnd:m.handleDragEnd,onDragStart:m.handleDragStart}),A.planes.map(e=>(0,el.jsx)(SN,{plane:e,geometry:m.planeGeometries.get(e.id),setPlaneRef:m.setPlaneRef},e.id)),(0,el.jsx)(Eq,{onError:()=>n("room-load-failed"),children:(0,el.jsx)(SF,{})})]})});SO.displayName="Room";let SQ=["room-viewer","layout-config"],SU=[Math.PI/2,0,0];function Sz({onReadyChange:e}){return(0,ec.useLayoutEffect)(()=>(e?.(!0),()=>e?.(!1)),[e]),null}function SG({onReadyChange:e}){var t;let r=rW({queryKey:SQ,queryFn:()=>x$(),staleTime:1/0},rS,void 0);if(r.isPending)return null;let n=(t=r.data,t?.internal?.links?.find(e=>"hdr_neutral"===e.type)?.url?.trim()||void 0);return(0,el.jsxs)(el.Fragment,{children:[(0,el.jsx)(gv,{files:n?[n]:void 0,preset:n?void 0:"warehouse",environmentRotation:SU,environmentIntensity:n?.5:.9}),(0,el.jsx)(Sz,{onReadyChange:e})]})}function SH({onReadyChange:e}){return(0,el.jsxs)(el.Fragment,{children:[(0,el.jsx)(gv,{files:["https://cdn.neurodyn.ai/assets/hdr/neutral.hdr"],environmentRotation:SU}),(0,el.jsx)(Sz,{onReadyChange:e})]})}let Sj=(0,ec.memo)(({lighting:e,onReadyChange:t})=>"remote-neutral-hdr"===e?(0,el.jsx)(SG,{onReadyChange:t}):(0,el.jsx)(SH,{onReadyChange:t}));Sj.displayName="RoomEnvironment";let SV=(0,ec.memo)(({ref:e,target:t})=>{let{camera:r,gl:n}=pL();return(0,ec.useImperativeHandle)(e,()=>({getScreenPoint(){if(!t.current)return null;let e=t.current.getWorldPosition(new i9.Pq0).project(r),i=n.domElement.getBoundingClientRect();return{x:i.left+(e.x+1)*i.width/2,y:i.top+(1-e.y)*i.height/2}}}),[r,n,t]),null});function Sq(e,t){for(let r of Object.keys(t))if(t[r]!==e[r])return{...e,...t};return e}function SW(e){return Object.entries(e).every(([e,t])=>"shadersReady"===e||t)}SV.displayName="SceneFocusBridge";let SK={placementReady:!1,prepareReady:!1,artifactsReady:!1,assetsReady:!1},SJ=(0,ec.memo)(({sceneReady:e,onShadersReadyChange:t})=>{let r=p_(),n=(0,ec.useRef)("holding"),i=Es(t);return(0,ec.useEffect)(()=>{if(n.current="holding",!e)return void i.current(!1);let t=!0,{camera:a,gl:o,scene:s}=r.getState();s.matrixWorldAutoUpdate&&s.updateMatrixWorld(),null===a.parent&&a.matrixWorldAutoUpdate&&a.updateMatrixWorld();let l=()=>{t&&(t=!1,n.current="compiled",r.getState().invalidate())},c=()=>{t&&(t=!1,n.current="drawing",i.current(!0))},u=setTimeout(()=>{console.warn("Room viewer scene shaders did not finish compiling ahead in time"),l()},1e4);return o.domElement?.addEventListener("webglcontextlost",c),Promise.resolve().then(()=>o.compileAsync(s,a)).catch(e=>{console.error("Room viewer scene shaders failed to compile ahead",e)}).then(l),()=>{t=!1,clearTimeout(u),o.domElement?.removeEventListener("webglcontextlost",c)}},[i,e,r]),pF(({camera:e,gl:t,scene:r})=>{"holding"!==n.current&&(t.render(r,e),"compiled"===n.current&&(n.current="drawing",i.current(!0)))},1),null});SJ.displayName="ShaderPrecompile";let SY=(0,ec.memo)(({sceneLightingReady:e})=>{let{sceneLoad:t}=Et(),{patchSceneLoad:r}=Er(),n=(0,ec.useCallback)(e=>{r({shadersReady:e})},[r]);return(0,el.jsx)(SJ,{sceneReady:e&&SW(t),onShadersReadyChange:n})});SY.displayName="SceneShaderPrecompile";let SX={position:[0,0,0],up:[0,0,1],near:.01,far:100},SZ=(0,ec.memo)(({className:e,ref:t,captureRef:r,contentKey:n,introductionTarget:i,focusRef:a,onSizeChange:o,...s})=>{let{type:l}=C8(),{glbUrl:c}=Ee(),u=Eg(),d=u?.isBaseModelReady??!0,{materialSource:h}=EF(l),{room:p}=C7(),{patchSceneLoad:A}=Er(),f=gw(e=>e.active),[g,m]=(0,ec.useState)(!1),v=EQ((0,ec.useMemo)(()=>p.scene??ER(),[p.scene])),b=(0,ec.useRef)(null),y=(0,ec.useRef)(!1),w=(0,ec.useCallback)(e=>{(b.current=e,"function"==typeof t)?t(e):t&&(t.current=e)},[t]),x=CQ("(max-width: 639px)"),{width:C,height:E}=function(e){let t,{ref:r,box:n="content-box"}=e,[{width:i,height:a},o]=(0,ec.useState)(Em),s=(t=(0,ec.useRef)(!1),(0,ec.useEffect)(()=>(t.current=!0,()=>{t.current=!1}),[]),(0,ec.useCallback)(()=>t.current,[])),l=(0,ec.useRef)({...Em}),c=(0,ec.useRef)(void 0);return c.current=e.onResize,(0,ec.useEffect)(()=>{if(!r.current||"u"<typeof window||!("ResizeObserver"in window))return;let e=new ResizeObserver(([e])=>{let t="border-box"===n?"borderBoxSize":"device-pixel-content-box"===n?"devicePixelContentBoxSize":"contentBoxSize",r=Ev(e,t,"inlineSize"),i=Ev(e,t,"blockSize");if(l.current.width!==r||l.current.height!==i){let e={width:r,height:i};l.current.width=r,l.current.height=i,c.current?c.current(e):s()&&o(e)}});return e.observe(r.current,{box:n}),()=>{e.disconnect()}},[n,r,s]),{width:i,height:a}}({ref:b}),S=(0,ec.useMemo)(()=>{if(!C||!E||!v)return null;let e=C,t=E;return x?e=(t=E)*v:C/E>v?e=E*v:t=C/v,{width:e,height:t}},[C,E,v,x]);return(0,ec.useLayoutEffect)(()=>{S&&o?.(S.width,S.height)},[S,o]),(0,ec.useEffect)(()=>{if(!S||y.current)return;y.current=!0;let e=window.setTimeout(()=>{window.dispatchEvent(new Event("resize"))},250);return()=>{window.clearTimeout(e)}},[S]),(0,ec.useEffect)(()=>{A({layoutReady:null!==S})},[A,S]),(0,ec.useEffect)(()=>{"object-glb"===h&&A({materialReady:!!c&&d})},[c,h,d,A]),(0,ec.useEffect)(()=>{A({assetsReady:!f})},[n,f,A]),(0,el.jsx)("div",{ref:w,className:Ch("size-full flex items-center justify-center",e),...s,children:S&&(0,el.jsxs)(gS,{className:"touch-none bg-transparent",frameloop:"demand",camera:SX,gl:EN,style:{width:`${S.width}px`,height:`${S.height}px`},children:[(0,el.jsxs)(ec.Suspense,{fallback:null,children:[(0,el.jsx)(EV,{ref:r}),(0,el.jsx)(ec.Suspense,{fallback:null,children:(0,el.jsx)(SO,{},n)}),i&&a&&(0,el.jsx)(SV,{ref:a,target:i})]}),(0,el.jsx)(ec.Suspense,{fallback:null,children:(0,el.jsx)(Sj,{lighting:Cz[l].lighting,onReadyChange:m})}),(0,el.jsx)(SY,{sceneLightingReady:g})]})})});SZ.displayName="CanvasWrapper";let S$=(0,ec.memo)(({captureRef:e,introduction:t,className:r,contentKey:n,...i})=>{let a,o,s,l,c=En("isDragging"),u=(0,ec.useRef)(null),d=(0,ec.useRef)(null),h=(0,ec.useRef)(null),p=(a=(0,ec.useRef)(null),o=(0,ec.useRef)(!1),s=(0,ec.useCallback)(()=>{null!==a.current&&cancelAnimationFrame(a.current),a.current=null},[]),l=(0,ec.useCallback)(()=>{t&&(s(),t.onCancel())},[t,s]),(0,ec.useEffect)(()=>{if(!t){o.current=!1;return}if(!t.ready){o.current&&t.onCancel();return}return a.current=requestAnimationFrame(()=>{let e=u.current,r=h.current?.getScreenPoint(),n=e?.instance.wrapperComponent,i=e?.instance.contentComponent;if(!e||!r||!n||!i)return void t.onCancel();let{scale:s,positionX:l,positionY:c}=e.instance.transformState,d=n.getBoundingClientRect(),p=Math.min(e.instance.setup.maxScale,1.28*s),A=(e,t,r)=>r<t?(t-r)/2:Math.max(t-r,Math.min(0,e)),f=A(d.width/2-(r.x-d.left-l)/s*p,d.width,i.offsetWidth*p),g=A(d.height/2-(r.y-d.top-c)/s*p,d.height,i.offsetHeight*p);o.current=!0;let m=window.matchMedia("(prefers-reduced-motion: reduce)").matches,v=performance.now(),b=r=>{let n=m?1:Math.min(1,(r-v)/700),i=(1-Math.cos(Math.PI*n))/2;e.setTransform(l+(f-l)*i,c+(g-c)*i,s+(p-s)*i,0),n<1?a.current=requestAnimationFrame(b):(a.current=null,t.onComplete())};b(v)}),()=>{s()}},[h,t,s,u]),l),A=CQ("(max-width: 639px)"),f=(0,ec.useRef)(!!t);f.current=!!t;let g=(0,ec.useCallback)(()=>{A&&u.current?.centerView(void 0,f.current?0:void 0)},[A]),m=(0,ec.useRef)(n);return(0,ec.useLayoutEffect)(()=>{m.current!==n&&(m.current=n,u.current?.resetTransform(0),g())},[n,g]),(0,el.jsx)("div",{className:Ch("relative flex items-center justify-center overflow-hidden",r),...i,onPointerDownCapture:e=>{p(),i.onPointerDownCapture?.(e)},onTouchStartCapture:e=>{p(),i.onTouchStartCapture?.(e)},onWheelCapture:e=>{p(),i.onWheelCapture?.(e)},children:(0,el.jsx)(d7,{ref:u,disabled:c,children:(0,el.jsx)(he,{wrapperClass:"neurodyn-rzpp-wrapper size-full!",contentClass:"neurodyn-rzpp-content h-full! min-w-full sm:max-w-full",children:(0,el.jsx)(SZ,{captureRef:e??d,contentKey:n,introductionTarget:t?.target,focusRef:h,onSizeChange:g})})})})});async function S0(e){await navigator.clipboard.writeText(e)}function S1(e,t,{fadedOutIfMountedLoaded:r=!1}={}){let[n,i]=(0,ec.useState)(r&&!e);return e&&n&&i(!1),(0,ec.useEffect)(()=>{if(e)return;let r=!0;return Promise.allSettled((t.current?.getAnimations?.()??[]).map(e=>e.finished)).then(()=>{r&&i(!0)}),()=>{r=!1}},[e,t]),!e&&n}function S2({variant:e,missingSurfaceMessage:t,open:r,portalContainer:n,showDialogCloseButton:i=!1,onOpenChange:a,onTryAgain:o,onCancel:s}){let{t:l}=tl(),c="custom-interior-missing-surface"===e||"room-missing-surface"===e,u=l(c?`missingSurface.${t}.title`:"floor.error.title"),d=c?l(`missingSurface.${t}.body`):e?l("custom-interior-processing"===e?"floor.error.processingBody":"viewer-load-failed"===e?"floor.error.loadBody":"artwork-load-failed"===e||"room-load-failed"===e?`loadError.${e}`:`accessError.${e}`):"";return(0,el.jsx)(Cf,{open:r,onOpenChange:a,children:(0,el.jsxs)(Cb,{portalContainer:n,showCloseButton:!1,className:"w-full max-w-85 gap-4 rounded-2xl p-6 text-center sm:max-w-85 sm:p-6",onInteractOutside:e=>{e.preventDefault()},children:[(0,el.jsxs)("div",{className:"grid gap-1",children:[(0,el.jsx)(Cw,{children:u}),(0,el.jsx)(Cx,{className:"typo-base-14 font-medium text-text-base",children:d})]}),(0,el.jsxs)("div",{className:"grid gap-2",children:[o&&(0,el.jsx)(CA,{variant:"contrast",onClick:o,children:c?(0,el.jsxs)(el.Fragment,{children:[(0,el.jsx)(CC,{"aria-hidden":"true"}),l("missingSurface.uploadAnother")]}):(0,el.jsxs)(el.Fragment,{children:[(0,el.jsx)(CP,{"aria-hidden":"true"}),l("floor.error.tryAgain")]})}),s&&(0,el.jsx)(CA,{variant:"outline",onClick:s,children:l("floor.error.cancel")}),i&&(0,el.jsx)(Cm,{asChild:!0,children:(0,el.jsx)(CA,{variant:"outline",children:l("close")})})]})]})})}function S3({rooms:e,customRooms:t,selectedRoomId:r,isInvalidFile:n,uploadRetryRequestId:i=0,showCloseButton:a=!1,onSelectRoom:o,onUploadFile:s}){let l,{t:c}=tl(),u=(0,ec.useId)(),d=(0,ec.useRef)(null);function h(e){return e.map(e=>(0,el.jsxs)("button",{type:"button",className:"group relative aspect-[4/3] overflow-hidden rounded-2xl bg-background-base text-left transition focus-visible:ring-2 focus-visible:ring-icons-normal focus-visible:outline-hidden","aria-pressed":e.id===r,onClick:()=>o(e.id),children:[(0,el.jsx)("img",{crossOrigin:"anonymous",src:CH(e),alt:"",decoding:"async",className:"size-full scale-[1.02] transform-gpu object-cover transition duration-200 group-hover:scale-105"}),(0,el.jsx)("span",{className:"typo-base-12 absolute inset-x-0 bottom-0 truncate bg-linear-to-t from-black/45 via-black/10 to-transparent px-3 py-2 text-constant-white",children:c(`rooms.${e.id}`,{defaultValue:e.name})})]},e.id))}return(0,ec.useEffect)(()=>{i>0&&d.current?.click()},[i]),(0,el.jsxs)("section",{"aria-labelledby":"floor-interior-selection-title",className:"relative mx-auto grid h-auto min-h-0 max-h-[calc(100svh-8px)] w-full max-w-151 grid-rows-[auto_auto_minmax(0,1fr)_auto] gap-4 overflow-hidden rounded-t-2xl rounded-b-none bg-background-containers p-4 shadow-[var(--shadow-login)] sm:my-4 sm:max-h-[calc(100svh-32px)] sm:rounded-2xl sm:p-6","data-testid":"floor-interior-selection-panel","data-room-selection-panel":!0,children:[a&&(l=(0,el.jsx)(CA,{type:"button",variant:"outline",size:"icon",className:"absolute top-4 right-4 sm:top-6 sm:right-6","aria-label":c("close"),"data-testid":"floor-interior-selection-icon-close",children:(0,el.jsx)(CS,{})}),(0,el.jsx)(Cm,{asChild:!0,children:l})),(0,el.jsx)("h2",{id:"floor-interior-selection-title",className:"typo-base-16 font-medium sm:typo-base-18 text-text-dark",children:c("floor.interiorSelection.title")}),(0,el.jsxs)("div",{className:"grid gap-2","data-testid":"floor-interior-selection-upload",children:[(0,el.jsxs)("label",{htmlFor:u,className:"flex min-h-15 cursor-pointer items-center justify-center gap-2 rounded-xl border border-dashed border-background-blue bg-background-blue-transparent px-4 text-center typo-button-normal text-background-blue opacity-80 transition hover:bg-background-blue-transparent/80",onDragOver:e=>e.preventDefault(),onDrop:function(e){e.preventDefault();let t=e.dataTransfer.files[0];t&&s(t)},children:[(0,el.jsx)(CC,{className:"size-5 text-background-blue"}),c("floor.interiorSelection.uploadPhoto"),(0,el.jsx)("input",{ref:d,id:u,type:"file",accept:"image/*",className:"sr-only",onChange:function(e){let t=e.target.files?.[0];e.target.value="",t&&s(t)}})]}),n&&(0,el.jsx)("p",{className:"typo-base-12 font-medium text-destructive",children:c("floor.interiorSelection.invalidFile")})]}),(0,el.jsx)("div",{className:"grid min-h-0 overflow-y-auto overflow-x-hidden overscroll-contain pr-1 [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden","data-testid":"floor-interior-selection-scroll-content",children:(0,el.jsxs)("div",{className:"grid min-h-max gap-4",children:[t.length>0&&(0,el.jsxs)("div",{className:"grid gap-3",children:[(0,el.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.customTitle")}),(0,el.jsx)("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-3","data-testid":"floor-custom-interior-selection-grid",children:h(t)})]}),(0,el.jsxs)("div",{className:"grid gap-3",children:[(0,el.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.presetsTitle")}),(0,el.jsx)("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-3","data-testid":"floor-preset-interior-selection-grid",children:h(e)})]})]})}),a&&(0,el.jsx)(Cy,{className:"-mt-2 shrink-0 p-0 sm:mt-0",children:(0,el.jsx)(Cm,{asChild:!0,children:(0,el.jsx)(CA,{variant:"outline",className:"w-full",children:c("close")})})})]})}function S9(e){return(0,el.jsx)("div",{className:"absolute inset-0 z-20 grid items-end p-0 sm:items-center sm:p-4","data-testid":"floor-interior-selection-overlay",children:(0,el.jsx)(S3,{...e})})}function S4({open:e,showCloseButton:t=!0,portalContainer:r,onOpenChange:n,...i}){let{t:a}=tl();return(0,el.jsx)(Cf,{open:e,onOpenChange:n,children:(0,el.jsxs)(Cb,{contentInsideOverlay:!0,portalContainer:r,showCloseButton:!1,"data-testid":"floor-interior-selection-overlay",className:"top-auto bottom-0 grid max-h-[calc(100svh-8px)] w-[calc(100%-16px)] min-w-0 max-w-none translate-y-0 overflow-hidden rounded-t-2xl rounded-b-none border-none bg-transparent p-0 shadow-none sm:top-[50%] sm:bottom-auto sm:w-full sm:max-w-none sm:translate-y-[-50%] sm:rounded-none sm:p-4",children:[(0,el.jsx)(Cw,{className:"sr-only",children:a("floor.interiorSelection.title")}),(0,el.jsx)(Cx,{className:"sr-only"}),(0,el.jsx)(S3,{...i,showCloseButton:t})]})})}S$.displayName="Scene";let S5="data-material-selection-action",S8="data-material-selection-panel";function S6(e,t,{requiresMaterialModel:r,getCollapseKey:n}){var i;let a;return i=e.filter(e=>!!(e.tinuuid&&e.materials?.[0]&&function(e,t){if(!t)return!0;let r=e.materials?.[0]?.native?.glbUrl;return"string"==typeof r&&r.trim().length>0}(e,r)&&!(t?.uuid&&e.uuid===t.uuid||t?.tinuuid&&e.tinuuid===t.tinuuid))),a=new Set,i.filter(e=>{let t=n(e);return!a.has(t)&&(a.add(t),!0)})}let S7="vizbl-rug:";function Me(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function Mt(e){return e.kit?.uuid??e.uuid??e.tinuuid??""}let Mr={"sized-design":{offersSizeVariants:!0,decodeVariant:function(e){let t=e.dimensions?.width,r=e.dimensions?.depth;return Me(t)&&Me(r)?{size:`${t/10}\xd7${r/10}`,shape:function(e){if(!e?.startsWith(S7))return"rect";try{let t=JSON.parse(e.slice(S7.length));return"round"===t.shape?"round":"rect"}catch{return"rect"}}(e.description)}:null},getCollapseKey:function(e){return e.kit?.uuid?e.kit.uuid:`object:${Mt(e)}`}},"color-design":{offersSizeVariants:!1,decodeVariant:function({description:e}){let t="vizbl-flooring:";if(!e?.startsWith(t))return null;try{let r=JSON.parse(e.slice(t.length));return null!==r&&"object"==typeof r&&"color"in r&&"string"==typeof r.color?{color:r.color}:null}catch{return null}},getCollapseKey:Mt},"single-listing":{offersSizeVariants:!1,decodeVariant:null,getCollapseKey:Mt}},Mn={"product-identity":{catalogsEveryMaterial:!0},finish:{catalogsEveryMaterial:!1},placeholder:{catalogsEveryMaterial:!1}};function Mi(e){return Mr[Cz[e].composition]}function Ma(e,t,r,n=""){return"name-prop"===Cz[e].productNameSource?n:t?.kit?.name?.trim()||t?.name?.trim()||r?.name?.trim()||n}function Mo(e){return e.hid??""}function Ms({apiKey:e,baseURL:t,language:r,source:n,widgetSession:i}){return E_.map(a=>({queryKey:Co(a,{apiKey:e,baseURL:t,language:r,source:n}),queryFn:({signal:o})=>Cl(a,{apiKey:e,baseURL:t,language:r,signal:o,source:n,widgetSession:i})}))}function Ml(){let{t:e}=tl(),{type:t}=C8();return e(`floor.materialSelection.${Cz[t].catalogTitle}`)}function Mc({className:e,gridClassName:t,titleClassName:r,onOpenChange:n,...i}){let a=Ml(),o=(0,ec.useRef)(null),{fetchNextMaterialsPage:s,hasNextPage:l,isFetchingNextPage:c,isLoading:u,materialItems:d,selectMaterial:h,selectedMaterialId:p}=function({includeEmbeddedObject:e=!1}={}){var t;let{material:r,tinuuid:n,embeddedObject:i,selectedObject:a,setMaterial:o,setTinuuid:s,apiKey:l,baseURL:c,language:u,source:d,widgetSession:h,setAccessError:p,setLoadError:A}=Ee(),{type:f,name:g}=C8(),m=i?.owner?.uuid,{data:v,error:b,isFetchingNextPage:y,fetchNextPage:w,hasNextPage:x,isLoading:C}=rW({queryKey:["room-viewer","public-objects",{apiKey:(t={apiKey:l,baseURL:c,language:u,source:d,resourceType:f}).apiKey??null,language:t.language??null,ownerUuid:m??null,resourceType:t.resourceType??null,source:t.source}],enabled:!!m,queryFn:({pageParam:e,signal:t})=>{if(!m)throw Error("Owner uuid is required.");return Cc(m,e,{apiKey:l,baseURL:c,language:u,signal:t,source:d,widgetSession:h,resourceType:f})},initialPageParam:1,getNextPageParam:(e,t,r)=>r<e.pages_count?r+1:void 0,getPreviousPageParam:(e,t,r)=>r>1?r-1:void 0},rP,void 0),{requiresMaterialModel:E}=EF(f),{getCollapseKey:S}=Mi(f),{catalogsEveryMaterial:M}=Mn[Cz[f].materialRole],{composition:I}=Cz[f],B=(0,ec.useMemo)(()=>v?.pages.flatMap(e=>e.objs)??[],[v]),k=(0,ec.useMemo)(()=>{let t={requiresMaterialModel:E,getCollapseKey:S};if(e)return S6([...i?.tinuuid&&i.materials?.[0]?[i]:[],...B],null,t);return S6(B,i,t)},[i,B,S,e,E]),T=(0,ec.useMemo)(()=>k.flatMap(e=>{if(!e.tinuuid)return[];let t="color-design"===I&&e.kit?.uuid,r=M&&!t?e.materials:e.materials?.slice(0,1);return r?.map(t=>{let r=Mo(t);return r&&e.tinuuid?{materialId:r,productName:Ma(f,e,t,g),material:t,tinuuid:e.tinuuid}:null}).filter(e=>null!==e)??[]}),[M,I,k,f,g]),R="color-design"===I&&a?.tinuuid===n&&a?.kit?.uuid?k.find(e=>S(e)===S(a)):void 0,D=R?.tinuuid!==n&&R?Mo(R.materials?.[0]??{}):r?Mo(r):"",P=k.find(e=>e.tinuuid===n),_=k.find(e=>e.tinuuid&&e.materials?.[0]);return(0,ec.useEffect)(()=>{let e=xL(b);e?p(e):b&&A("viewer-load-failed")},[b,p,A]),(0,ec.useEffect)(()=>{v&&0===k.length&&x&&!y&&w()},[v,w,x,y,k.length]),(0,ec.useEffect)(()=>{if(null!==r)return;let e=P??_,t=e?.materials?.[0];e&&t&&e.tinuuid&&(o(t),s(e.tinuuid))},[_,P,r,o,s]),{fetchNextMaterialsPage:(0,ec.useCallback)(()=>{!1===x||y||w()},[w,x,y]),hasNextPage:x,isFetchingNextPage:y,isLoading:C,materialItems:T,selectMaterial:(0,ec.useCallback)(e=>{let t=k.find(t=>t.materials?.some(t=>Mo(t)===e)),r=t?.materials?.find(t=>Mo(t)===e);return!!t&&!!r&&!!t.tinuuid&&(o(r),s(t.tinuuid),!0)},[k,o,s]),selectedMaterialId:D}}({includeEmbeddedObject:!0});(0,ec.useEffect)(()=>{let e=o.current;e&&!u&&!c&&l&&0!==d.length&&e.scrollHeight<=e.clientHeight&&s()},[s,l,c,u,d.length]);let A=(0,ec.useCallback)(e=>{let{clientHeight:t,scrollHeight:r,scrollTop:n}=e.currentTarget;n+t>=r-64&&s()},[s]),f=(0,ec.useCallback)(e=>{h(e)&&n(!1)},[n,h]);return(0,el.jsxs)("div",{...i,className:Ch("flex min-h-0 flex-col gap-3 overflow-hidden text-text-dark outline-none",e),"data-testid":"material-selection-panel",onPointerDownCapture:e=>{e.stopPropagation(),i.onPointerDownCapture?.(e)},onMouseDownCapture:e=>{e.stopPropagation(),i.onMouseDownCapture?.(e)},children:[(0,el.jsx)("h2",{className:Ch("typo-base-16 font-medium sm:typo-base-14 sm:font-semibold text-text-dark",r),children:a}),(0,el.jsx)("div",{"data-testid":"material-selection-grid",ref:o,className:Ch("min-h-0 flex-1 overflow-y-auto overflow-x-hidden overscroll-contain pr-1 [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden",t),onScroll:A,children:(0,el.jsxs)("div",{className:"grid min-h-max grid-cols-3 gap-x-2 gap-y-2","data-testid":"material-selection-grid-items",children:[d.map(({materialId:e,material:t,tinuuid:r,productName:n})=>{let i,a=e===p,o=(i=t.previews?.[0],i?.subRes?.small??i?.url);return(0,el.jsxs)("button",{type:"button","data-selected":a,"aria-pressed":a,className:"group flex min-w-0 flex-col gap-1 rounded-lg bg-background-containers text-left focus-visible:ring-2 focus-visible:ring-icons-normal focus-visible:outline-hidden",onClick:()=>f(e),onKeyDown:t=>{("Enter"===t.key||" "===t.key)&&(t.preventDefault(),f(e))},children:[(0,el.jsxs)("span",{className:"relative grid aspect-square w-full shrink-0 place-items-center overflow-hidden rounded-lg border border-border p-1 transition group-hover:border-icons-normal",children:[o?(0,el.jsx)("img",{src:o,alt:"",className:"size-full rounded-md object-cover"}):(0,el.jsx)(Ck,{className:"size-6 text-icons-normal"}),a&&(0,el.jsx)("span",{className:"absolute top-1 right-1 grid size-6 place-items-center rounded-full bg-icons-blue text-icons-white","data-testid":"material-selection-selected-check",children:(0,el.jsx)(CE,{className:"size-4"})})]}),(0,el.jsx)("span",{className:"typo-base-12 line-clamp-3 w-full wrap-anywhere text-text-base",children:n})]},`${r}-${e}`)}),(u||c)&&(0,el.jsx)("div",{className:"col-span-3 grid h-16 place-items-center",children:(0,el.jsx)(CN,{className:"size-6"})})]})})]})}function Mu({open:e,portalContainer:t,onOpenChange:r}){let{t:n}=tl(),i=Ml();return(0,el.jsx)(Cf,{open:e,onOpenChange:r,children:(0,el.jsxs)(Cb,{contentInsideOverlay:!0,"data-testid":"material-selection-mobile-overlay","data-material-selection-panel":"",className:"top-auto bottom-0 flex max-h-[calc(100svh-8px)] w-[calc(100%-16px)] !max-w-none translate-y-0 flex-col gap-2 overflow-hidden rounded-t-2xl rounded-b-none p-4 sm:hidden",portalContainer:t,showCloseButton:!1,children:[(0,el.jsx)(Cw,{className:"sr-only",children:i}),(0,el.jsx)(Cx,{className:"sr-only"}),(0,el.jsx)(Mc,{className:"min-h-0",gridClassName:"max-h-none",onOpenChange:r}),(0,el.jsx)(Cy,{className:"shrink-0 p-0",children:(0,el.jsx)(Cm,{asChild:!0,children:(0,el.jsx)(CA,{type:"button",variant:"outline",className:"w-full",children:n("close")})})})]})})}function Md({className:e,value:t,max:r=100,...n}){let i=r>0?r:100,a="number"==typeof t?Math.min(Math.max(t/i*100,0),100):0;return(0,el.jsx)(gR,{"data-slot":"progress",className:Ch("relative h-2 w-full overflow-hidden rounded-full bg-primary/20",e),value:t,max:i,...n,children:(0,el.jsx)(gP,{"data-slot":"progress-indicator",className:"h-full bg-primary transition-[width]",style:{width:`${a}%`}})})}let Mh=[{minimumProgress:0,translationKey:"floor.processing.stages.reading"},{minimumProgress:28,translationKey:"floor.processing.stages.mapping"},{minimumProgress:56,translationKey:"floor.processing.stages.lighting"},{minimumProgress:82,translationKey:"floor.processing.stages.finalizing"},{minimumProgress:100,translationKey:"floor.processing.stages.ready"}];function Mp({isComplete:e,open:t,onCloseAnimationEnd:r,onOpenChange:n,portalContainer:i}){let{t:a}=tl(),o=(0,ec.useRef)(t),[s,l]=(0,ec.useState)(8),c=e?100:s,u=function(e){for(let t=Mh.length-1;t>=0;t-=1){let r=Mh[t];if(r&&e>=r.minimumProgress)return r}return Mh[0]}(c);(0,ec.useEffect)(()=>{t&&!o.current&&l(8),o.current=t},[t]),(0,ec.useEffect)(()=>{if(!t||e)return;let r=window.setInterval(()=>{l(e=>Math.min(92,e+Math.max(2,Math.round((92-e)/8))))},650);return()=>window.clearInterval(r)},[e,t]);let d=(0,el.jsxs)("div",{role:"status","aria-live":"polite",className:"grid content-start gap-4",children:[(0,el.jsx)("h2",{className:"typo-base-18 font-medium text-text-dark",children:a("floor.processing.title")}),(0,el.jsxs)("div",{"data-testid":"floor-processing-progress-panel",className:"grid min-h-[97px] min-w-0 content-center gap-2 overflow-hidden rounded-xl bg-background-base px-6 py-8",children:[(0,el.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-3",children:[(0,el.jsx)("span",{className:"typo-base-14 min-w-0 flex-1 truncate text-left font-medium text-text-light",children:a(u.translationKey)}),(0,el.jsxs)("span",{className:"typo-base-14 shrink-0 font-medium text-text-dark",children:[c,"%"]})]}),(0,el.jsx)(Md,{value:c,"aria-label":a("floor.processing.progressLabel"),className:"h-1 bg-background-base-3 [&_[data-slot=progress-indicator]]:bg-button-dark [&_[data-slot=progress-indicator]]:duration-500 [&_[data-slot=progress-indicator]]:ease-out"})]})]});return(0,el.jsx)(Cf,{open:t,onOpenChange:n,children:(0,el.jsxs)(Cb,{portalContainer:i,showCloseButton:!1,"data-testid":"floor-processing-card",className:"top-auto bottom-2 w-[calc(100%-16px)] !max-w-none translate-y-0 gap-4 overflow-hidden rounded-2xl p-6 text-center sm:top-[50%] sm:bottom-auto sm:w-full sm:!max-w-[377px] sm:translate-y-[-50%] sm:p-6",onInteractOutside:e=>{e.preventDefault()},onAnimationEnd:e=>{e.currentTarget===e.target&&"closed"===e.currentTarget.getAttribute("data-state")&&r?.()},children:[(0,el.jsx)(Cw,{className:"sr-only",children:a("floor.processing.title")}),(0,el.jsx)(Cx,{className:"sr-only",children:a(u.translationKey)}),d]})})}function MA(){if(!c){let e=new vn;c={os:e.getOS().name,type:e.getDevice().type}}return c}function Mf(){return"iOS"===MA().os}function Mg(){return"Android"===MA().os}function Mm(e,t){return!(!e||Mg()&&"mobile"===MA().type||Mg()&&"appclip"===e.ar)&&("floor"!==e.destination||!!t)}let Mv=/oklch\(([0-9.]+)\s+([0-9.]+)\s+([0-9.]+)\)/;function Mb(e,t){let r=e.match(Mv);return r?{l:Number.parseFloat(r[1]),c:Number.parseFloat(r[2]),h:Number.parseFloat(r[3])}:{l:t[0],c:t[1],h:t[2]}}function My({data:e,foreground:t,background:r,robustness:n="M",className:i,...a}){let[o,s]=(0,ec.useState)(null);return((0,ec.useEffect)(()=>{(async()=>{try{let i=getComputedStyle(document.documentElement),a=t??i.getPropertyValue("--foreground"),o=r??i.getPropertyValue("--background"),l=Mb(a,[.21,.006,285.885]),c=Mb(o,[.985,0,0]),u=await yO.toString(e,{type:"svg",color:{dark:yF(yN({mode:"oklch",...l})),light:yF(yN({mode:"oklch",...c}))},width:200,errorCorrectionLevel:n,margin:0});s(u)}catch(e){console.error(e)}})()},[e,t,r,n]),o)?(0,el.jsx)("div",{className:Ch("size-full","[&_svg]:size-full",i),dangerouslySetInnerHTML:{__html:o},...a}):null}async function Mw(e){return await e.updateComplete,!e.canActivateAR&&navigator.xr?.isSessionSupported&&(await navigator.xr.isSessionSupported("immersive-ar").catch(()=>!1),await new Promise(e=>setTimeout(e))),e}async function Mx(e){let t;await e.activateAR(),("session-started"===(t=e.getAttribute("ar-status"))||"object-placed"===t)&&await new Promise(t=>{let r=n=>{"not-presenting"===n.detail.status&&(e.removeEventListener("ar-status",r),t())};e.addEventListener("ar-status",r)})}function MC({className:e,buttonClassName:t,buttonLeadingIcon:n,buttonLabel:i,buttonSize:a,buttonVariant:o="contrast",...s}){let{type:l,width:c,height:u,name:d}=C8(),{handoff:h}=Cz[l],{src:p,tinuuid:A,widgetSession:f}=Ee(),{containerRef:g,resourceRef:m}=Et(),{t:v,i18n:b}=tl(),y=function(){let{i18n:e}=tl();return"ru"===(e.resolvedLanguage??e.language)?"arizo":"vizbl"}(),[w,x]=(0,ec.useState)(""),[C,E]=(0,ec.useState)(""),[S,M]=(0,ec.useState)(()=>f?.token),[I,B]=(0,ec.useState)(!1),[k,T]=(0,ec.useState)(!1),R=(0,ec.useRef)(null),D=(0,ec.useRef)(null),[P,_]=(0,ec.useState)(!1),L=(0,ec.useRef)(!1),F=b.resolvedLanguage??b.language,N=Ek[y],O=(0,ec.useMemo)(()=>(function({height:e,language:t,name:r,src:n,tenantConfig:i,tinuuid:a,handoff:o,type:s,width:l,widgetSessionToken:c,pageUrl:u}){if(!o)return null;if("floor"===o.destination&&a){let e=new URL(i.ROOM_URL);return e.searchParams.set("type",s),e.searchParams.set("tinuuid",a),e.searchParams.set("name",r),e.searchParams.set("language",t),c&&e.searchParams.set("widgetSessionToken",c),e.toString()}let d=new URL(i.POSTER_URL);return n&&d.searchParams.set("texture",function(e,t){if(!t||/^[a-z][a-z0-9+.-]*:/i.test(e)||e.startsWith("//"))return e;try{return new URL(e,t).href}catch{return e}}(n,u)),d.searchParams.set("texture_width",(100*l).toString()),d.searchParams.set("texture_height",(100*e).toString()),c&&d.searchParams.set("widgetSessionToken",c),d.toString()})({height:u,language:F,name:d,src:p,tenantConfig:N,tinuuid:A,handoff:h,type:l,width:c,widgetSessionToken:S,pageUrl:"u"<typeof window?void 0:window.location.href}),[p,A,h,l,c,u,d,F,N,S]),Q=(0,ec.useMemo)(()=>{if(!A)return null;let e=new URL("https://appclip.apple.com/id");return e.searchParams.set("p","com.us.vizbl.Clip"),e.searchParams.set("tinuuid",A),e.toString()},[A]),U=(0,ec.useCallback)(e=>{R.current=e,e&&D.current?.resolve(e)},[]);function z(){D.current=null,_(!1)}async function G(){M(await f?.getTokenForRequest().catch(()=>f.token))}let H=async()=>{let e;if(h?.ar==="appclip"){if(!A)return;if(Mf()&&Q){Cn(f,"appclip"),window.location.assign(Q);return}await G(),B(!0);return}if(!m.current||L.current)return;L.current=!0;try{e=await function(){if(!D.current){let e,t=new Promise(t=>{e=t});D.current={resolve:e,promise:Promise.resolve().then(r.bind(r,"../../node_modules/.pnpm/@google+model-viewer@4.2.0_three@0.185.1/node_modules/@google/model-viewer/lib/model-viewer.js")).then(()=>(_(!0),t),e=>{throw D.current=null,e})}}return D.current.promise.then(Mw)}()}finally{L.current=!1}let t=m.current;if(!t)return void z();if(e.canActivateAR)try{T(!0);let e=t.clone(!0);if(e.position.set(0,0,0),e.quaternion.identity(),e.updateMatrix(),e.updateMatrixWorld(!0),Mf()){e.rotation.set(-Math.PI/2,0,0),e.updateMatrix(),e.updateMatrixWorld(!0);let t=new yU.U,r=await t.parseAsync(e,{ar:{anchoring:{type:"plane"},planeAnchoring:{alignment:"vertical"}}}),n=new File([r],"scene.usdz",{type:"model/vnd.usdz+zip"});x(URL.createObjectURL(n))}else{let t=new yQ.r,r=await t.parseAsync(e,{binary:!0}),n=new File([r],"scene.glb",{type:"model/gltf-binary"});E(URL.createObjectURL(n))}}catch(e){throw z(),e}finally{T(!1)}else z(),await G(),B(!0)};if((0,ec.useEffect)(()=>{let e=R.current;return e&&(""!==w||""!==C)&&Mx(e).finally(z),()=>{""!==w&&URL.revokeObjectURL(w),""!==C&&URL.revokeObjectURL(C)}},[w,C]),!Mm(h,A))return null;let j="appclip"===h.ar;return(0,el.jsxs)("div",{className:Ch(e),...s,children:[(0,el.jsxs)(CA,{variant:o,size:a,disabled:k,onClick:H,className:t,children:[n,i??v("ar.viewInPlace")]}),(0,el.jsx)(Cf,{open:I,onOpenChange:B,children:(0,el.jsxs)(Cb,{className:"gap-6 sm:max-w-120",showCloseButton:!1,portalContainer:g,children:[(0,el.jsx)("div",{className:"flex items-center justify-center p-10 bg-constant-white rounded-2xl",children:(0,el.jsx)(My,{className:"size-48",robustness:"H",data:O??""})}),j?(0,el.jsxs)("div",{className:"grid gap-2 text-center",children:[(0,el.jsx)("p",{className:"text-lg text-text-sub font-medium",children:v("ar.appClipScanTitle")}),(0,el.jsx)("p",{className:"text-sm text-text-light",children:v("ar.appClipRequirement")})]}):(0,el.jsx)("p",{className:"text-lg text-center text-text-sub font-medium",children:v("ar.scanQrCode")}),(0,el.jsxs)("p",{className:"text-xs text-center text-text-light",children:[!j&&(0,el.jsxs)(el.Fragment,{children:[v("ar.deviceRequirementsDisclaimer"),(0,el.jsx)("br",{})]}),(0,el.jsx)("a",{href:N.TERMS_URL,target:"_blank",rel:"noopener noreferrer",className:"underline underline-offset-2 transition-colors duration-300 hover:text-text-dark",style:{textDecoration:"underline",textUnderlineOffset:"2px"},children:v("legal.termsOfUse")})," ",v("legal.conjunction")," ",(0,el.jsx)("a",{href:N.PRIVACY_URL,target:"_blank",rel:"noopener noreferrer",className:"underline underline-offset-2 transition-colors duration-300 hover:text-text-dark",style:{textDecoration:"underline",textUnderlineOffset:"2px"},children:v("legal.privacyPolicy")})]}),(0,el.jsx)(Cm,{asChild:!0,children:(0,el.jsx)(CA,{variant:"contrast",size:"lg",children:v("close")})})]})}),P&&(0,el.jsx)("model-viewer",{ref:U,className:"fixed w-px h-px opacity-0 pointer-events-none",src:C,iosSrc:w,reveal:"manual",ar:!0,cameraControls:!0,arPlacement:"wall",arModes:"webxr",arScale:"fixed",shadowIntensity:1,interactionPromptThreshold:100})]})}let ME={"inline-compact":"h-9 w-full rounded-xl","inline-large":"h-11 w-full rounded-xl"},MS={"inline-compact":"size-5","inline-large":"size-6"},MM={desktop:"floor-ar-card",tablet:void 0,phone:void 0};function MI({...e}){return(0,el.jsx)(y3,{"data-slot":"select",...e})}function MB({...e}){return(0,el.jsx)(y8,{"data-slot":"select-value",...e})}function Mk({className:e,size:t="default",children:r,...n}){return(0,el.jsxs)(y4,{"data-slot":"select-trigger","data-size":t,className:Ch("flex w-fit items-center justify-between gap-2 whitespace-nowrap rounded-md border bg-background-white shadow-sm outline-none transition-colors cursor-pointer","border-border-medium","text-text-dark","hover:border-border-dark","focus-visible:border-border-dark","aria-invalid:border-border-red","disabled:cursor-not-allowed disabled:border-border-medium disabled:bg-background-base disabled:opacity-40","data-[size=default]:h-11 data-[size=default]:px-2 data-[size=default]:py-2.5 data-[size=default]:typo-base-16","data-[size=md]:h-9 data-[size=md]:px-2 data-[size=md]:py-2 data-[size=md]:typo-base-14","data-[size=sm]:h-[1.875rem] data-[size=sm]:px-2 data-[size=sm]:typo-base-12","*:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2","[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=size-])]:size-6 [&_svg:not([class*=text-])]:text-text-dark",e),...n,children:[r,(0,el.jsx)(y6,{asChild:!0,children:(0,el.jsx)(CI,{className:"size-6"})})]})}function MT({className:e,children:t,position:r="item-aligned",align:n="center",portalContainer:i,...a}){return(0,el.jsx)(y7,{container:i,children:(0,el.jsxs)(wt,{"data-slot":"select-content",className:Ch("relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-xl border bg-background-white text-text-dark shadow-md","border-border-medium","data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2","popper"===r&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:n,...a,children:[(0,el.jsx)(MD,{}),(0,el.jsx)(wd,{className:Ch("p-1","popper"===r&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:t}),(0,el.jsx)(MP,{})]})})}function MR({className:e,children:t,...r}){return(0,el.jsxs)(wb,{"data-slot":"select-item",className:Ch("relative flex w-full cursor-pointer select-none items-center gap-2 rounded-md py-2.5 pr-8 pl-3 outline-hidden","typo-base-16 text-text-sub","focus:bg-background-base focus:text-text-dark","data-[disabled]:pointer-events-none data-[disabled]:opacity-50","[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=size-])]:size-6 [&_svg:not([class*=text-])]:text-text-dark","*:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[(0,el.jsx)("span",{"data-slot":"select-item-indicator",className:"absolute right-2 flex size-6 items-center justify-center",children:(0,el.jsx)(wC,{children:(0,el.jsx)(CE,{className:"size-5"})})}),(0,el.jsx)(ww,{children:t})]})}function MD({className:e,...t}){return(0,el.jsx)(wS,{"data-slot":"select-scroll-up-button",className:Ch("flex cursor-default items-center justify-center py-1",e),...t,children:(0,el.jsx)(s4,{className:"size-4"})})}function MP({className:e,...t}){return(0,el.jsx)(wI,{"data-slot":"select-scroll-down-button",className:Ch("flex cursor-default items-center justify-center py-1",e),...t,children:(0,el.jsx)(s5,{className:"size-4"})})}let M_=/^[a-z][a-z\d+.-]*:/i;function ML(e,t="m"){switch(t){case"cm":return e/100;case"in":return .0254*e;case"m":return e}}function MF(e,t){switch(t){case"cm":return 100*e;case"in":return e/.0254}}function MN(e){let{t}=tl();return(0,ec.useMemo)(()=>[{value:0,label:t("mattingOptions.none")},{value:.05,label:`${Number(MF(.05,e).toFixed(2)).toString()} ${t(`units.${e}`)}`}],[e,t])}function MO({label:e,variant:t,size:r,className:n}){let{t:i}=tl(),{displayUnit:a}=C8(),{containerRef:o}=Et(),{material:s,options:l,selectMaterial:c}=function(){let{material:e,setMaterial:t,setTinuuid:r,apiKey:n,baseURL:i,language:a,source:o,widgetSession:s}=Ee(),l=rY({queries:Ms({apiKey:n,baseURL:i,language:a,source:o,widgetSession:s})}),c=(0,ec.useMemo)(()=>l.flatMap(e=>{let t=e.data,r=t?.materials?.[0];return t?.tinuuid&&r?.hid?[{material:r,materialId:r.hid,tinuuid:t.tinuuid}]:[]}),[l]),u=(0,ec.useCallback)(e=>{let n=c.find(t=>t.materialId===e);return!!n&&(t(n.material),r(n.tinuuid),!0)},[c,t,r]);return{material:e,options:c,selectMaterial:u}}(),{matting:u,setMatting:d}=Ei(),h=MN(a),p=(0,ec.useId)(),A=(0,ec.useId)();return(0,el.jsxs)(Cj,{modal:!1,children:[(0,el.jsx)(CV,{asChild:!0,children:(0,el.jsxs)(CA,{type:"button",variant:t,size:r,className:n,children:[(0,el.jsx)(CR,{className:"size-4"}),e]})}),(0,el.jsxs)(CW,{portalContainer:o,collisionBoundary:o,collisionPadding:8,align:"start",className:"flex w-56 max-w-[var(--radix-dropdown-menu-content-available-width)] flex-col",style:{maxHeight:"var(--radix-dropdown-menu-content-available-height)"},children:[(0,el.jsx)(CY,{id:p,children:i("wallArt.pictureFrame")}),(0,el.jsx)(Cq,{"aria-labelledby":p,className:"min-h-0 overflow-y-auto overscroll-contain",children:l.map(e=>(0,el.jsxs)(CJ,{indicatorPosition:"right",checked:s?.hid===e.materialId,onCheckedChange:()=>c(e.materialId),onSelect:e=>e.preventDefault(),className:"gap-2 [@media(pointer:coarse)]:min-h-11",children:[(0,el.jsx)("span",{className:"pointer-events-none size-5 shrink-0 rounded-full border border-border-light",style:{backgroundColor:e.material.miniature?.color?.hex?`#${e.material.miniature.color.hex}`:void 0}}),(0,el.jsx)("span",{className:"min-w-0 flex-1",children:e.material.miniature?.color?.name??e.material.name})]},`${e.tinuuid}-${e.materialId}`))}),(0,el.jsx)(CX,{}),(0,el.jsx)(CY,{id:A,children:i("matting")}),(0,el.jsx)(Cq,{"aria-labelledby":A,className:"shrink-0",children:h.map(e=>(0,el.jsx)(CJ,{indicatorPosition:"right",checked:u===e.value,onCheckedChange:()=>d(e.value),onSelect:e=>e.preventDefault(),className:"[@media(pointer:coarse)]:min-h-11",children:e.label},e.value))})]})]})}function MQ({className:e,...t}){return(0,el.jsx)("div",{"data-slot":"field-group",className:Ch("group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4",e),...t})}let MU=or("group/field flex w-full gap-3 data-[invalid=true]:text-destructive",{variants:{orientation:{vertical:["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],horizontal:["flex-row items-center","[&>[data-slot=field-label]]:flex-auto","has-[>[data-slot=field-content]]:items-start has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"],responsive:["flex-col [&>*]:w-full [&>.sr-only]:w-auto @md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto","@md/field-group:[&>[data-slot=field-label]]:flex-auto","@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"]}},defaultVariants:{orientation:"vertical"}});function Mz({className:e,orientation:t="vertical",...r}){return(0,el.jsx)("div",{role:"group","data-slot":"field","data-orientation":t,className:Ch(MU({orientation:t}),e),...r})}function MG({className:e,...t}){return(0,el.jsx)("div",{"data-slot":"field-label",className:Ch("flex w-fit items-center gap-2 text-sm leading-snug font-medium group-data-[disabled=true]/field:opacity-50",e),...t})}function MH({...e}){return(0,el.jsx)(wU,{"data-slot":"popover",...e})}function Mj({...e}){return(0,el.jsx)(wH,{"data-slot":"popover-trigger",...e})}function MV({className:e,align:t="center",sideOffset:r=4,portalContainer:n,...i}){return(0,el.jsx)(wW,{container:n,children:(0,el.jsx)(wJ,{"data-slot":"popover-content",align:t,sideOffset:r,className:Ch("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",e),...i})})}function Mq({className:e,defaultValue:t,value:r,min:n=0,max:i=100,variant:a="default","aria-label":o,"aria-labelledby":s,...l}){let c=(0,ec.useMemo)(()=>Array.isArray(r)?r:Array.isArray(t)?t:[n],[r,t,n]);return(0,el.jsxs)(xn,{"data-slot":"slider",defaultValue:t,value:r,min:n,max:i,"data-variant":a,"aria-label":o,"aria-labelledby":s,className:Ch("relative flex w-full touch-none cursor-pointer items-center select-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",e),...l,children:[(0,el.jsx)(xu,{"data-slot":"slider-track",className:Ch("relative grow overflow-hidden rounded-full data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5","editor"===a?"bg-border-light data-[orientation=horizontal]:h-0.5":"bg-muted data-[orientation=horizontal]:h-1.5"),children:(0,el.jsx)(xh,{"data-slot":"slider-range",className:Ch("absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full","editor"===a?"bg-background-blue":"bg-primary")})}),Array.from({length:c.length},(e,t)=>(0,el.jsx)(xA,{"data-slot":"slider-thumb","aria-label":o,"aria-labelledby":s,className:Ch("ring-ring/50 block shrink-0 rounded-full border bg-white transition-[color,box-shadow] focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50","editor"===a?"size-3 border-background-blue shadow-none hover:ring-2 focus-visible:ring-2":"size-4 border-primary shadow-sm hover:ring-4 focus-visible:ring-4")},t))]})}function MW({variant:e,size:t}){let{t:r}=tl(),{containerRef:n}=Et();return(0,el.jsxs)(MH,{children:[(0,el.jsx)(Mj,{asChild:!0,children:(0,el.jsxs)(CA,{type:"button",variant:e,size:t,className:"shrink-0",children:[(0,el.jsx)(CD,{className:"size-4"}),(0,el.jsx)("span",{className:"sr-only",children:r("scene.tunePosition")})]})}),(0,el.jsxs)(MV,{className:"flex flex-col gap-4 border-button-dark bg-button-dark px-3 py-3.5 text-text-white",side:"top",align:"start",portalContainer:n,collisionBoundary:n,collisionPadding:8,children:[(0,el.jsxs)(MQ,{children:[(0,el.jsxs)(Mz,{orientation:"horizontal",children:[(0,el.jsx)(MG,{children:r("scene.rotation")}),(0,el.jsx)(MK,{gesture:"rotation",min:-180,max:180,"aria-label":r("scene.rotation")})]}),(0,el.jsxs)(Mz,{orientation:"horizontal",children:[(0,el.jsx)(MG,{children:r("scene.angle")}),(0,el.jsx)(MK,{gesture:"angle",min:-75,max:75,"aria-label":r("scene.angle")})]})]}),(0,el.jsx)(MJ,{})]})]})}function MK({gesture:e,min:t,max:r,"aria-label":n}){let i=En(e),{sceneGestures:{setAngle:a,setRotation:o}}=Er(),s="angle"===e?a:o;return(0,el.jsx)(Mq,{value:[i],onValueChange:([e])=>s(e??0),min:t,max:r,step:1,className:"w-40.5 **:data-[slot=slider-range]:bg-transparent **:data-[slot=slider-thumb]:border-background-base-3 **:data-[slot=slider-thumb]:bg-background-base-3 **:data-[slot=slider-track]:bg-icons-normal","aria-label":n})}function MJ(){let{t:e}=tl(),t=En("rotation"),r=En("angle"),{sceneGestures:{setAngle:n,setRotation:i}}=Er();return(0,el.jsxs)(CA,{type:"button",variant:"ghost",size:"sm",className:"w-full text-text-white hover:bg-white/10 hover:text-text-white active:bg-white/20",disabled:0===t&&0===r,onClick:()=>{i(0),n(0)},children:[(0,el.jsx)(CP,{className:"size-4"}),e("scene.resetPosition")]})}let MY={card:"flex min-h-24 w-fit max-w-100 items-center gap-4 rounded-2xl bg-background-containers p-4 text-left text-text-dark shadow-[var(--shadow-login)]","compact-card":"flex min-h-[116px] w-fit max-w-[421px] items-center gap-4 rounded-2xl bg-background-containers p-4 text-left text-text-dark shadow-[var(--shadow-login)]","flow-card":"flex items-center justify-start gap-4 border-b border-border-light bg-background-containers p-4 text-left"},MX={card:"size-6 text-icons-normal","compact-card":"size-6 text-icons-normal","flow-card":"size-5 text-icons-normal"},MZ={desktop:"floor-desktop-product-card",tablet:"floor-tablet-product-card",phone:"floor-mobile-product-card"},M$={default:"icon",sm:"icon-sm",lg:"icon-lg",icon:"icon","icon-sm":"icon-sm","icon-lg":"icon-lg"},M0={card:"flex h-24 w-[254px] items-center gap-4 overflow-hidden rounded-2xl bg-background-containers p-4 text-left text-text-dark shadow-[var(--shadow-login)]","framed-row":"flex h-[72px] items-center justify-between gap-3 overflow-hidden rounded-2xl bg-background-containers p-4 text-left text-text-dark shadow-[var(--shadow-login)]","plain-row":"flex w-full items-center justify-between gap-3 rounded-full bg-background-containers text-left"},M1={desktop:"floor-room-card",tablet:"floor-tablet-room-card",phone:void 0},M2={desktop:"floor-desktop-room-name",tablet:"floor-tablet-room-name",phone:"floor-mobile-room-name"},M3={"product-card":function({actions:e,band:t,slot:r,presentation:n}){let i,{t:a}=tl(),{displayUnit:o,name:s,type:l}=C8(),{containerRef:c}=Et(),{material:u,selectedObject:d,src:h,tinuuid:p}=Ee(),{variantItems:A,selectedTinuuid:f,selectVariant:g}=function(){let{tinuuid:e,selectedObject:t,selectResourceVariant:r,apiKey:n,baseURL:i,language:a,source:o,widgetSession:s}=Ee(),{type:l}=C8(),{decodeVariant:c}=Mi(l),u=t?.kit?.uuid,d=t?.owner?.uuid,{data:h,fetchNextPage:p,hasNextPage:A,isFetchingNextPage:f,isFetchNextPageError:g}=rW({queryKey:Cs(u,d,{apiKey:n,baseURL:i,language:a,source:o,resourceType:l}),enabled:!!c&&!!u&&!!d,queryFn:({pageParam:e,signal:t})=>{if(!u||!d)throw Error("Kit uuid and owner uuid are required.");return Cu(u,d,e,{apiKey:n,baseURL:i,language:a,signal:t,source:o,widgetSession:s,resourceType:l})},initialPageParam:1,getNextPageParam:(e,t,r)=>r<e.pages_count?r+1:void 0},rP,void 0);(0,ec.useEffect)(()=>{!A||f||g||p({cancelRefetch:!1})},[h?.pages.length,p,A,f,g]);let m=(0,ec.useMemo)(()=>h?.pages.flatMap(e=>e.objs)??[],[h]),v=(0,ec.useMemo)(()=>{let e=new Set;return m.flatMap(t=>{let r=c?.(t);return!t.tinuuid||!t.materials?.[0]||!r||e.has(t.tinuuid)?[]:(e.add(t.tinuuid),[{tinuuid:t.tinuuid,...r}])})},[m,c]);return{variantItems:v,selectedTinuuid:e,selectVariant:e=>!!v.some(t=>t.tinuuid===e)&&(r(e),!0)}}(),{materialSource:m,offersReplacement:v,hasPictureFrame:b}=EF(l),y="drag-with-rotation-and-angle"===Cz[l].manipulation,w=MZ[t],x=a(`resourceType.${l}.${n.actionLabelResourceTypeKey}`),C=Ch("w-fit shrink-0","fixed"===n.actionWidth&&"w-[137px]"),E=a(`units.${o}`),S=e.isMaterialSelectionOpen,M=Ma(l,d,u,s),I="artwork-src"===m?h:(i=u?.previews?.[0],i?.subRes?.small??i?.url??d?.preview?.subRes?.small??d?.preview?.url??d?.mainPreview),B=A.find(e=>e.tinuuid===f),k=function(e){let t=e?.trim();if(!t||M_.test(t)&&!/^https?:/i.test(t)||/^[./?#]/.test(t)&&!t.startsWith("//"))return;let r=t.startsWith("//")?`https:${t}`:/^https?:/i.test(t)?t:`https://${t}`;try{let e=new URL(r);if("http:"!==e.protocol&&"https:"!==e.protocol||!e.hostname)return;return e.href}catch{return}}(d?.tinuuid===p?d.destinationUrl:void 0),T=S?e.onMaterialSelectionActionPointerDown:void 0;return(0,el.jsxs)("div",{className:MY[n.appearance],"data-chrome-slot":r,"data-neurodyn-room-viewer-product":"","data-testid":w,children:[(0,el.jsx)("div",{className:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",children:I?(0,el.jsx)("img",{src:I,alt:"",className:"size-full min-h-0 object-cover"}):(0,el.jsx)(Ck,{className:MX[n.appearance]})}),(0,el.jsxs)("div",{className:"grid min-h-16 min-w-0 flex-1 grid-cols-1 content-center gap-3",children:[(0,el.jsxs)("div",{className:"flex min-w-0 items-baseline justify-between gap-4",children:[(0,el.jsxs)("div",{className:"min-w-0",children:[(0,el.jsx)("div",{className:"sr-only",children:a(`resourceType.${l}.productCardTitle`)}),(0,el.jsx)("div",{className:"typo-button-normal overflow-x-clip text-ellipsis whitespace-nowrap text-text-dark",children:M})]}),k&&(0,el.jsx)("a",{href:k,target:"_blank",rel:"noopener noreferrer",className:"typo-button-normal shrink-0 text-button-primary underline-offset-2 hover:underline","data-testid":`${w}-description-link`,children:a("floor.scene.description")})]}),(0,el.jsxs)("div",{className:"flex flex-nowrap items-center gap-4",children:[v&&(0,el.jsxs)(CA,{type:"button",variant:n.actionVariant,size:n.actionSize,[S5]:!0,"aria-expanded":S,className:C,onPointerDown:T?e=>{e.preventDefault(),e.stopPropagation(),T()}:void 0,onClick:S?e.closeMaterialSelection:e.openMaterialSelection,children:[S?(0,el.jsx)(CS,{className:"size-4"}):(0,el.jsx)(CR,{className:"size-4"}),S?a("floor.scene.hideCatalog"):x]}),(b||y)&&(0,el.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:[b&&(0,el.jsx)(MO,{label:x,variant:n.actionVariant,size:n.actionSize,className:C}),y&&(0,el.jsx)(MW,{variant:n.actionVariant,size:M$[n.actionSize]})]}),A.length>1&&!!B&&(0,el.jsxs)(MI,{value:f??void 0,onValueChange:g,children:[(0,el.jsx)(Mk,{size:"sm",className:"ml-auto w-fit min-w-0 shrink data-[size=sm]:h-8 *:data-[slot=select-value]:block *:data-[slot=select-value]:truncate","data-testid":`${w}-variant-select`,children:(0,el.jsx)(MB,{})}),(0,el.jsx)(MT,{portalContainer:c,children:A.map(e=>{var t;let r;return(0,el.jsx)(MR,{value:e.tinuuid,children:"color"in e?e.color:(t=e.size,r=t.split("\xd7").map(e=>"cm"===o?e:Math.round(MF(Number(e)/100,o)).toString()).join("\xd7"),`${r} ${E}`)},e.tinuuid)})})]})]})]})]})},"room-card":function({actions:e,band:t,slot:r,presentation:n}){let{t:i}=tl(),{room:a}=C7(),o=i(`rooms.${a.id}`,{defaultValue:a.name}),s=(0,el.jsx)(CA,{type:"button",variant:n.actionVariant,size:n.actionSize,className:"card"===n.appearance?"w-fit":"shrink-0",onClick:e.openInteriorSelection,children:i(n.actionLabelKey)});return"card"===n.appearance?(0,el.jsxs)("div",{className:M0[n.appearance],"data-chrome-slot":r,"data-neurodyn-room-viewer-room":"","data-testid":M1[t],children:[(0,el.jsx)("img",{crossOrigin:"anonymous",src:CH(a),alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,el.jsxs)("span",{className:"grid min-w-0 flex-1 content-center gap-3",children:[(0,el.jsx)("span",{className:"typo-button-normal block overflow-x-clip text-ellipsis whitespace-nowrap text-text-dark","data-testid":M2[t],children:o}),s]})]}):(0,el.jsxs)("div",{className:M0[n.appearance],"data-chrome-slot":r,"data-neurodyn-room-viewer-room":"","data-testid":M1[t],children:[(0,el.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,el.jsx)("img",{crossOrigin:"anonymous",src:CH(a),alt:"",className:"size-10 shrink-0 rounded-full object-cover"}),(0,el.jsxs)("span",{className:"grid min-w-0",children:[(0,el.jsx)("span",{className:"typo-base-12 truncate text-text-light",children:i("floor.scene.interiorCardTitle")}),(0,el.jsx)("span",{className:"typo-button-normal overflow-x-clip text-ellipsis whitespace-nowrap text-text-dark","data-testid":M2[t],children:o})]})]}),s]})},"ar-card":function({band:e,slot:t,presentation:r}){let{t:n}=tl(),{room:i}=C7(),{type:a}=C8(),{tinuuid:o}=Ee();return Mm(Cz[a].handoff,o)?"card"===r.appearance?(0,el.jsxs)("div",{className:"flex h-24 w-[280px] items-center gap-4 overflow-hidden rounded-2xl bg-background-containers p-4 text-text-dark shadow-[var(--shadow-login)]","data-chrome-slot":t,"data-neurodyn-room-viewer-try-at-home":"","data-testid":MM[e],children:[(0,el.jsx)("img",{crossOrigin:"anonymous",src:CH(i),alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,el.jsxs)("div",{className:"grid min-w-0 flex-1 content-center gap-2",children:[(0,el.jsx)(MC,{buttonLabel:n(r.actionLabelKey),buttonVariant:r.actionVariant,buttonSize:r.actionSize,buttonClassName:"w-fit"}),(0,el.jsx)("div",{className:"typo-base-12 truncate font-medium text-text-light",children:n("floor.scene.tryAtHomeBody")})]})]}):(0,el.jsx)(MC,{className:"w-full","data-chrome-slot":t,"data-neurodyn-room-viewer-try-at-home":"",buttonLabel:n(r.actionLabelKey),buttonLeadingIcon:(0,el.jsx)(CL,{className:MS[r.appearance]}),buttonVariant:r.actionVariant,buttonSize:r.actionSize,buttonClassName:ME[r.appearance]}):null}},M9={"immersive-default":{desktop:[{slot:"product-card",container:"leading",appearance:"card",actionLabelResourceTypeKey:"replaceProduct",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"leading",appearance:"card",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"card",actionLabelKey:"floor.scene.tryAtHome",actionVariant:"secondary",actionSize:"sm"}],tablet:[{slot:"product-card",container:"leading",appearance:"compact-card",actionLabelResourceTypeKey:"replaceProduct",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"trailing",appearance:"framed-row",actionLabelKey:"floor.interiorSelection.chooseInteriorShort",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"inline-compact",actionLabelKey:"floor.scene.tryAtHome",actionVariant:"secondary",actionSize:"default"}],phone:[{slot:"product-card",container:"leading",appearance:"flow-card",actionLabelResourceTypeKey:"replaceProductShort",actionVariant:"outline",actionSize:"sm",actionWidth:"fixed"},{slot:"room-card",container:"trailing",appearance:"plain-row",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"inline-large",actionLabelKey:"floor.scene.tryAtHome",actionVariant:"secondary",actionSize:"lg"}]},"immersive-panels":{desktop:[{slot:"product-card",container:"leading",appearance:"card",actionLabelResourceTypeKey:"replaceProduct",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"leading",appearance:"card",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"}],tablet:[{slot:"product-card",container:"leading",appearance:"compact-card",actionLabelResourceTypeKey:"replaceProduct",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"trailing",appearance:"framed-row",actionLabelKey:"floor.interiorSelection.chooseInteriorShort",actionVariant:"outline",actionSize:"sm"}],phone:[{slot:"product-card",container:"leading",appearance:"flow-card",actionLabelResourceTypeKey:"replaceProductShort",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"trailing",appearance:"plain-row",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"}]},"immersive-wallart":{desktop:[{slot:"product-card",container:"leading",appearance:"card",actionLabelResourceTypeKey:"appearance",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"leading",appearance:"card",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"card",actionLabelKey:"ar.viewInPlace",actionVariant:"secondary",actionSize:"sm"}],tablet:[{slot:"product-card",container:"leading",appearance:"compact-card",actionLabelResourceTypeKey:"appearance",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"trailing",appearance:"framed-row",actionLabelKey:"floor.interiorSelection.chooseInteriorShort",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"inline-compact",actionLabelKey:"ar.viewInPlace",actionVariant:"secondary",actionSize:"default"}],phone:[{slot:"product-card",container:"leading",appearance:"flow-card",actionLabelResourceTypeKey:"appearance",actionVariant:"outline",actionSize:"sm",actionWidth:"auto"},{slot:"room-card",container:"trailing",appearance:"plain-row",actionLabelKey:"floor.interiorSelection.chooseInterior",actionVariant:"outline",actionSize:"sm"},{slot:"ar-card",container:"trailing",appearance:"inline-large",actionLabelKey:"ar.viewInPlace",actionVariant:"secondary",actionSize:"lg"}]}};function M4({actions:e,band:t,entry:r}){let n=M3[r.slot];return(0,el.jsx)(n,{actions:e,band:t,slot:r.slot,presentation:r})}function M5({actions:e,band:t,container:r}){let{type:n}=C8(),i=M9[Cz[n].presentation];return(0,el.jsx)(el.Fragment,{children:i[t].filter(e=>e.container===r).map(r=>(0,el.jsx)(M4,{actions:e,band:t,entry:r},r.slot))})}async function M8(e,t={}){let r=t.source??"default",n={image:e};if(xD({apiKey:t.apiKey,source:r})){let e=await t.widgetSession?.getTokenForRequest();return x8(n,{baseURL:t.baseURL,headers:{"x-api-key":t.apiKey,...e?{[x7]:e}:{}},signal:t.signal,timeout:0,params:{productType:xP({apiKey:t.apiKey,source:r,resourceType:t.resourceType})}})}return t.signal?xZ(n,{signal:t.signal,timeout:0}):xZ(n,{timeout:0})}let M6=[{id:0,label:"empty",rgb:[0,0,0]},{id:1,label:"floor",rgb:[32,208,96]},{id:2,label:"wall-1",rgb:[255,59,48]},{id:3,label:"wall-2",rgb:[10,132,255]},{id:4,label:"ceiling",rgb:[255,214,10]},{id:5,label:"plane-5",rgb:[191,90,242]},{id:6,label:"plane-6",rgb:[255,159,10]},{id:7,label:"plane-7",rgb:[100,210,255]},{id:8,label:"plane-8",rgb:[255,45,85]}];function M7(){try{return"1"===window.localStorage.getItem("neurodyn-room-viewer:debug-mask-export")}catch{return!1}}async function Ie(e,t){var r,n,i;let a,o,s,l,c=await (r=e.planeIds.dataPng,new Promise((e,t)=>{let n=new Image;n.onload=()=>e(n),n.onerror=()=>t(Error("Failed to load room plane id mask image.")),n.crossOrigin="anonymous",n.src=r})),u=e.planeIds.width||c.naturalWidth||c.width,d=e.planeIds.height||c.naturalHeight||c.height,h=document.createElement("canvas"),p=h.getContext("2d",{willReadFrequently:!0});if(!p)throw Error("Failed to prepare room plane mask canvas.");h.width=u,h.height=d,p.drawImage(c,0,0,u,d);let A=p.getImageData(0,0,u,d),f=document.createElement("canvas"),g=f.getContext("2d");if(!g)throw Error("Failed to prepare room debug mask canvas.");f.width=u,f.height=d;for(let e=0;e<u*d;e++){let t=4*e,r=function(e){return M6.find(t=>t.id===e)??{id:e,label:`plane-${e}`,rgb:[73*e%255,151*e%255,211*e%255]}}(A.data[t]??0);A.data[t]=r.rgb[0],A.data[t+1]=r.rgb[1],A.data[t+2]=r.rgb[2],A.data[t+3]=255}g.putImageData(A,0,0),n=await new Promise((e,t)=>{f.toBlob(r=>{r?e(r):t(Error("Failed to export room plane mask image."))},"image/png")}),o=Array.from((a=t.lastIndexOf("."))>0?t.slice(0,a):t).map(e=>{let t=e.charCodeAt(0),r="."===e||"_"===e||"-"===e;return t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122||r?e:"-"}).join("").split("-").filter(Boolean).join("-"),i=`${o||"room"}.debug-mask.colors.png`,s=URL.createObjectURL(n),(l=document.createElement("a")).href=s,l.download=i,l.style.display="none",document.body.append(l),l.click(),l.remove(),window.setTimeout(()=>URL.revokeObjectURL(s),1e3)}let It="custom-interiors";function Ir(){return"u">typeof crypto&&"function"==typeof crypto.randomUUID?`custom-interior-${crypto.randomUUID()}`:`custom-interior-${Date.now()}-${Math.random().toString(36).slice(2)}`}function In(){let e="u"<typeof indexedDB?null:indexedDB;return e?new Promise((t,r)=>{let n=e.open("neurodyn-floor-custom-interiors",1);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(It)||e.createObjectStore(It,{keyPath:"id"})},n.onerror=()=>r(n.error??Error("Failed to open Custom Interior store.")),n.onsuccess=()=>t(n.result)}):Promise.resolve(null)}async function Ii(e,t,r=new Date){let n=await In();if(!n)return null;let i={id:Ir(),schemaVersion:1,name:e.name,fileName:e.name,createdAt:r.toISOString(),imageBlob:e,scene:t};try{let e=n.transaction(It,"readwrite");return e.objectStore(It).put(i),await new Promise((t,r)=>{e.oncomplete=()=>t(),e.onerror=()=>r(e.error??Error("Custom Interior transaction failed.")),e.onabort=()=>r(e.error??Error("Custom Interior transaction aborted."))}),i}finally{n.close()}}async function Ia(){let e=await In();if(!e)return[];try{return await new Promise((t,r)=>{let n=e.transaction(It,"readonly").objectStore(It).getAll();n.onerror=()=>r(n.error??Error("Failed to read Custom Interiors.")),n.onsuccess=()=>{let e=n.result.filter(e=>1===e.schemaVersion).sort((e,t)=>Date.parse(t.createdAt)-Date.parse(e.createdAt));t(e)}})}finally{e.close()}}function Io(e){let t=[];return{rooms:e.map(e=>{let r=URL.createObjectURL(e.imageBlob);return t.push(r),{id:e.id,name:e.name,image_url:r,scene:e.scene}}),revokeObjectUrls:()=>{for(let e of t)URL.revokeObjectURL(e);t.length=0}}}function Is(e){let t="dialog"===e?"interior-selection":"scene";return{step:t,hasSceneSelection:"scene"===t,sceneResetKey:0}}function Il(e,t){switch(t.type){case"clear-interior-selection":return{...e,step:"interior-selection",hasSceneSelection:!1,automaticRoomId:t.automaticRoomId};case"select-initial-room":return{step:"scene",hasSceneSelection:!0,sceneResetKey:e.sceneResetKey+1,automaticRoomId:t.roomId};case"open-interior-selection":case"return-to-interior-selection":return{...e,step:"interior-selection"};case"dismiss-interior-selection":case"recover-to-scene":return e.hasSceneSelection?{...e,step:"scene"}:e;case"start-custom-interior-processing":return{...e,step:"processing-custom-interior"};case"commit-interior-selection":return{step:"scene",hasSceneSelection:!0,sceneResetKey:e.sceneResetKey+1}}}function Ic(e,t){return!e.aborted&&t()}class Iu extends Error{constructor(){super("Room Photo has a Missing Surface."),this.name="CustomInteriorMissingSurfaceError"}}async function Id({abortSignal:e,apiOptions:t,commitCustomInteriorSelection:r,downloadDebugMask:n,file:i,isActive:a,isDebugMaskExportEnabled:o,onDebugMaskError:s,onPersistenceError:l,onProcessingComplete:c,predictRoomScene:u,saveCustomInterior:d,surfaces:h,trackRuntimeCustomInterior:p,waitForProcessingCompletion:A}){let f=await u(i,{...t,signal:e});if(!Ic(e,a))return null;if(o()&&n(f,i.name).catch(s),Sn(f,h))throw Si({planes:f.planes,source:"room-photo-upload",surfaces:h}),new Iu;let g=p(i,f);return Ic(e,a)&&g&&(d(i,f).catch(l),c(),await A(),Ic(e,a))?(r(g),g):null}function Ih(){return new Promise(e=>window.setTimeout(e,250))}function Ip(e){console.error("Failed to export room debug mask",e)}function IA(e){console.error("Failed to persist Custom Interior",e)}function If(e){console.error("Failed to prepare Custom Interior",e)}function Ig({showDialogCloseButton:e=!1}){let{t}=tl(),{name:r,type:n}=C8(),{missingSurfaceMessage:i}=Cz[n],{accessError:a,glbUrl:o,apiKey:s,baseURL:l,hasRooms:c,source:u,widgetSession:d,isViewerAccessPending:h,loadError:p,selectedObject:A,tinuuid:f}=Ee(),{clearActiveError:g,handleAccessError:m}=function(){let{setAccessError:e,setLoadError:t}=Ee();return{clearActiveError:(0,ec.useCallback)(()=>{e(null),t(null)},[e,t]),handleAccessError:e}}(),{room:v,sourceRooms:b}=C7(),{resourceRef:y,containerRef:w,setContainerRef:x,sceneLoad:C,isRoomScenePending:E}=Et(),{dialogPortalContainer:S,viewerSurface:M,viewerDialogOpen:I,onViewerDialogOpenChange:B}=C6(),[k,T]=(0,ec.useState)(!1),[R,D]=(0,ec.useState)(!1),P=(0,ec.useRef)(null),_=(0,ec.useRef)(!1),L=a??p,F=!!L,N=A?.owner?.name??A?.brand??null,{canShare:O,download:Q,isDownloading:U,isSharing:z,share:G}=function({captureRef:e,fallbackToClipboard:t=!1,fileName:r="room-scene.png",shareMessage:n}){let[i,a]=(0,ec.useState)(!1),[o,s]=(0,ec.useState)(!1),l=(0,ec.useMemo)(()=>"u">typeof navigator&&"function"==typeof navigator.share||t&&"u">typeof navigator&&"function"==typeof navigator.clipboard?.writeText,[t]),c=(0,ec.useCallback)(async()=>{if(!l)return;let i="u">typeof navigator&&"function"==typeof navigator.share,o=window.location.href,s=`${n}
7240
- ${o}`;a(!0);try{if(!i&&t)return void await S0(s);let n=e.current;if(n)try{let e=await n.capture(),t=new File([e],r,{type:e.type||"image/png"});if(navigator.canShare?.({files:[t]}))return void await navigator.share({text:s,files:[t]})}catch(e){console.error("Failed to generate scene screenshot for sharing",e)}await navigator.share({text:s,url:o})}catch(e){e instanceof DOMException&&"AbortError"===e.name||console.error("Failed to share scene",e)}finally{a(!1)}},[l,e,t,r,n]);return{canShare:l,download:(0,ec.useCallback)(async()=>{let t=e.current;if(t){s(!0);try{var n;let e,i;n=await t.capture(),e=URL.createObjectURL(n),(i=document.createElement("a")).href=e,i.download=r,document.body.append(i),i.click(),i.remove(),URL.revokeObjectURL(e)}catch(e){console.error("Failed to download scene screenshot",e)}finally{s(!1)}}},[e,r]),isDownloading:o,isSharing:i,share:c}}({captureRef:P,fallbackToClipboard:!0,shareMessage:t(`shareMessage.${n}`)}),H=(0,ec.useCallback)(()=>{T(!1),D(!1)},[]),j=(0,ec.useCallback)(()=>{if(_.current){_.current=!1;return}T(!0),D(!1)},[]),V=(0,ec.useCallback)(()=>{_.current=!0,H()},[H]),q=(0,ec.useCallback)(()=>{D(!0),T(!1)},[]),W=function({activeError:e,apiKey:t,baseURL:r,clearActiveError:n,closeMaterialSelection:i,glbUrl:a,handleAccessError:o,hasDialogPortalContainer:s,hasRooms:l,isRoomScenePending:c,isViewerAccessPending:u,onViewerDialogOpenChange:d,resourceType:h,sceneLoad:p,source:A,sourceRooms:f,viewerDialogOpen:g,viewerSurface:m,widgetSession:v}){let b=function(e){let{initialRoomId:t,room:r,sourceRooms:n}=C7(),{isViewerAccessPending:i,loadError:a,setLoadError:o}=Ee(),{type:s}=C8(),{patchSceneLoad:l,sceneGestures:{setAngle:c,setRotation:u}}=Er(),d=(0,ec.useMemo)(()=>({patchSceneLoad:l,setAngle:c,setRotation:u}),[l,c,u]),h=n.find(e=>e.id===t),p=!!h&&(!h?.scene||Sr(h.scene,CG(s)).length>0),A=function(e,t,r){let[n,i]=(0,ec.useReducer)(Il,e,Is),[a,o]=(0,ec.useState)();!r?.isPending&&a!==r?.roomId&&(o(r?.roomId),r&&i(r.isAvailable?{type:"select-initial-room",roomId:r.roomId}:{type:"clear-interior-selection"}));let s=(0,ec.useCallback)(e=>{e(),function({patchSceneLoad:e,setAngle:t,setRotation:r}){t(0),r(0),e(SK)}(t),i({type:"commit-interior-selection"})},[t]),l=(0,ec.useCallback)(()=>{i({type:"dismiss-interior-selection"})},[]),c=(0,ec.useCallback)(()=>{i({type:"open-interior-selection"})},[]),u=(0,ec.useCallback)(()=>{i({type:"recover-to-scene"})},[]),d=(0,ec.useCallback)(()=>{i({type:"return-to-interior-selection"})},[]),h=(0,ec.useCallback)(()=>{i({type:"clear-interior-selection",automaticRoomId:n.automaticRoomId})},[n.automaticRoomId]),p=(0,ec.useCallback)(()=>{i({type:"start-custom-interior-processing"})},[]);return(0,ec.useMemo)(()=>({...n,commitInteriorSelection:s,dismissInteriorSelection:l,openInteriorSelection:c,recoverToScene:u,returnToInteriorSelection:d,clearInteriorSelection:h,startCustomInteriorProcessing:p}),[s,l,c,u,d,h,p,n])}(e,d,t?{roomId:t,isAvailable:p,isPending:i}:void 0),{automaticRoomId:f,clearInteriorSelection:g}=A;return(0,ec.useEffect)(()=>{f&&r.id===f&&CZ(a)&&(g(),o(null))},[f,g,a,r.id,o]),A}(m),y=CG(h),{appendRuntimeCustomInterior:w,customRooms:x}=function({listCustomInteriors:e,surfaces:t}){let{appendRuntimeCustomInterior:r,customRooms:n,replaceRuntimeCustomInteriors:i}=function(){let[e,t]=(0,ec.useState)(()=>[]),r=(0,ec.useRef)(null),n=(0,ec.useCallback)(e=>{r.current?.revokeObjectUrls();let n=Io(e);return r.current=n,t(n.rooms),n.rooms},[]),i=(0,ec.useCallback)((e,n)=>{let i=Io([{id:Ir(),schemaVersion:1,name:e.name,fileName:e.name,createdAt:new Date().toISOString(),imageBlob:e,scene:n}]),a=i.rooms[0];if(!a)return i.revokeObjectUrls(),null;let o=r.current;return r.current={rooms:[],revokeObjectUrls:()=>{o?.revokeObjectUrls(),i.revokeObjectUrls()}},t(e=>[a,...e.filter(e=>e.id!==a.id)]),a},[]);return(0,ec.useEffect)(()=>()=>{r.current?.revokeObjectUrls()},[]),(0,ec.useMemo)(()=>({appendRuntimeCustomInterior:i,customRooms:e,replaceRuntimeCustomInteriors:n}),[i,e,n])}(),a=(0,ec.useRef)(!0);(0,ec.useEffect)(()=>(a.current=!0,()=>{a.current=!1}),[]);let o=(0,ec.useCallback)(async()=>{let r=await e();a.current&&i(r.filter(e=>!Sn(e.scene,t)))},[e,i,t]);return(0,ec.useEffect)(()=>{o()},[o]),(0,ec.useMemo)(()=>({appendRuntimeCustomInterior:r,customRooms:n,replaceRuntimeCustomInteriors:i,refreshCustomInteriors:o}),[r,n,o,i])}({listCustomInteriors:Ia,surfaces:y}),C=(0,ec.useMemo)(()=>new Set(f.map(e=>e.id)),[f]),{commitCustomInteriorSelection:E,selectInterior:S}=function(e){let{room:t,setRoomId:r,setRooms:n}=C7(),{widgetSession:i}=Ee();return function({floorFlow:e,customRooms:t,selectedRoomId:r,onInteriorSelected:n,restoreSourceRooms:i,setRoomId:a,setRooms:o}){let s=(0,ec.useCallback)(t=>{e.commitInteriorSelection(()=>{o(e=>[t,...i(e).filter(e=>e.id!==t.id)]),a(t.id)}),n?.()},[e,n,i,a,o]),l=(0,ec.useCallback)(t=>{let s=t===r;s&&e.hasSceneSelection||(e.commitInteriorSelection(()=>{o(i),a(t)}),s||n?.())},[e,n,i,r,a,o]),c=(0,ec.useCallback)(n=>{if(n===r&&e.hasSceneSelection)return;let i=t.find(e=>e.id===n);i&&s(i)},[e.hasSceneSelection,s,t,r]),u=(0,ec.useCallback)(e=>{t.some(t=>t.id===e)?c(e):l(e)},[t,c,l]);return(0,ec.useMemo)(()=>({commitCustomInteriorSelection:s,selectInterior:u}),[s,u])}({...e,selectedRoomId:t.id,onInteriorSelected:()=>Cn(i,"interior_selected"),setRoomId:r,setRooms:n})}({floorFlow:b,customRooms:x,restoreSourceRooms:(0,ec.useCallback)(e=>[...f,...e.filter(e=>!C.has(e.id))],[C,f])}),M=function(e){let{setIsRoomScenePending:t}=Er();return function({apiOptions:e,floorFlow:t,commitCustomInteriorSelection:r,downloadDebugMask:n,isDebugMaskExportEnabled:i,onAccessError:a,onDebugMaskError:o,onPersistenceError:s,onProcessingError:l,predictRoomScene:c,saveCustomInterior:u,setIsRoomScenePending:d,surfaces:h,trackRuntimeCustomInterior:p,waitForProcessingCompletion:A}){let[f,g]=(0,ec.useState)(!1),[m,v]=(0,ec.useState)(!1),[b,y]=(0,ec.useState)(null),[w,x]=(0,ec.useState)(null),[C,E]=(0,ec.useState)(!1),[S,M]=(0,ec.useState)(0),I=(0,ec.useRef)(null),B=(0,ec.useRef)(!1),k=(0,ec.useRef)(!0),T=(0,ec.useRef)(b);b&&(T.current=b),(0,ec.useEffect)(()=>(k.current=!0,()=>{k.current=!1,I.current?.abort()}),[]);let R=(0,ec.useCallback)(()=>{y(null),x(null),E(!1)},[]),D=(0,ec.useCallback)(e=>{R(),g(!1),e()},[R]),P=(0,ec.useCallback)(async f=>{if(R(),!f.type.startsWith("image/"))return void g(!0);g(!1),v(!1),t.startCustomInteriorProcessing(),B.current=!0;let m=new AbortController;I.current?.abort(),I.current=m,d(!0);try{await Id({abortSignal:m.signal,apiOptions:e,commitCustomInteriorSelection:r,downloadDebugMask:n,file:f,isActive:()=>k.current,isDebugMaskExportEnabled:i,onDebugMaskError:o,onPersistenceError:s,onProcessingComplete:()=>{v(!0)},predictRoomScene:c,saveCustomInterior:u,surfaces:h,trackRuntimeCustomInterior:p,waitForProcessingCompletion:A})}catch(r){if(m.signal.aborted)return;let e=xL(r);if(e){B.current&&E(!0),a(e);return}let t=r instanceof Iu?"custom-interior-missing-surface":"custom-interior-processing";if("custom-interior-processing"===t&&l(r),B.current){x(t),E(!0);return}y(t)}finally{I.current===m&&(I.current=null,k.current&&d(!1))}},[e,t,r,n,i,a,o,s,l,c,R,u,d,h,p,A]),_=(0,ec.useCallback)(()=>{R(),g(!1),t.returnToInteriorSelection(),M(e=>e+1)},[t,R]),L=(0,ec.useCallback)(()=>{R(),t.returnToInteriorSelection()},[t,R]),F=(0,ec.useCallback)(({clearError:e,closeMaterialSelection:r})=>{e(),r(),t.hasSceneSelection&&t.recoverToScene()},[t]),N=(0,ec.useCallback)(()=>{B.current=!1,E(!1),w&&(y(w),x(null))},[w]),O=(0,ec.useCallback)(()=>k.current,[]);return(0,ec.useMemo)(()=>({displayedUploadError:b??T.current,isCustomInteriorProcessingComplete:m,isInvalidFile:f,isMounted:O,isProcessingDialogClosingForError:C,pendingUploadError:w,uploadError:b,uploadRetryRequestId:S,cancelUploadError:L,handleProcessingDialogCloseAnimationEnd:N,openInteriorSelection:D,processUploadFile:P,recoverFromActiveError:F,resetUploadErrorPresentation:R,tryUploadAgain:_}),[L,N,m,f,O,C,D,w,P,F,R,_,b,S])}({...e,setIsRoomScenePending:t})}({apiOptions:(0,ec.useMemo)(()=>({resourceType:h,apiKey:t,baseURL:r,source:A,widgetSession:v}),[t,r,h,A,v]),floorFlow:b,commitCustomInteriorSelection:E,downloadDebugMask:Ie,isDebugMaskExportEnabled:M7,onAccessError:o,onDebugMaskError:Ip,onPersistenceError:IA,onProcessingError:If,predictRoomScene:M8,saveCustomInterior:Ii,surfaces:y,trackRuntimeCustomInterior:w,waitForProcessingCompletion:Ih}),{dismissInteriorSelection:I,hasSceneSelection:B,openInteriorSelection:k,sceneResetKey:T,step:R}=b,{cancelUploadError:D,displayedUploadError:P,handleProcessingDialogCloseAnimationEnd:_,isCustomInteriorProcessingComplete:L,isInvalidFile:F,isProcessingDialogClosingForError:N,openInteriorSelection:O,pendingUploadError:Q,processUploadFile:U,recoverFromActiveError:z,resetUploadErrorPresentation:G,tryUploadAgain:H,uploadError:j,uploadRetryRequestId:V}=M,q=l&&B,W=(0,ec.useRef)(e),K=!!(e&&q&&a);e&&(W.current=e);let J=(0,ec.useCallback)(()=>{q&&(G(),I())},[I,q,G]),Y=(0,ec.useCallback)(()=>{i(),O(k)},[i,k,O]),X=(0,ec.useCallback)(()=>{z({clearError:n,closeMaterialSelection:i})},[n,i,z]),Z=(0,ec.useCallback)(()=>{n(),Y()},[n,Y]),$=(0,ec.useCallback)(e=>{if(!e){if(q)return void J();d?.(!1)}},[J,q,d]),ee=(0,ec.useCallback)(e=>{if(!e){if(K)return void X();d?.(!1)}},[K,X,d]),et=(0,ec.useCallback)(e=>{e||D()},[D]);!function({fallbackMs:e,handleProcessingDialogCloseAnimationEnd:t,isProcessingDialogClosingForError:r}){(0,ec.useEffect)(()=>{if(!r)return;let n=window.setTimeout(t,e);return()=>window.clearTimeout(n)},[e,t,r])}({fallbackMs:220,handleProcessingDialogCloseAnimationEnd:_,isProcessingDialogClosingForError:N});let er=function({activeError:e,canRecoverFromActiveError:t,floorFlow:r,hasDialogPortalContainer:n,hasRooms:i,isProcessingDialogClosingForError:a,isRoomScenePending:o,isViewerAccessPending:s,pendingUploadError:l,sceneLoad:c,uploadError:u,viewerDialogOpen:d,viewerSurface:h}){let p="dialog"===h&&n,A=!p||d,f=i&&r.hasSceneSelection,g=i||"scene"!==r.step?r.step:"interior-selection",m=!s&&f&&(!e||t),v=f||p,b=!s&&!e&&v,y=!s&&!e&&!v&&"interior-selection"===g;return{activeErrorDialog:{open:!a&&!!e&&A,showCloseButton:!t},interiorSelection:{open:b&&"interior-selection"===g&&A,presentation:b?"dialog":y?"screen":null,shouldRender:b||y},processingDialog:{open:!e&&!u&&!l&&o&&"processing-custom-interior"===r.step&&A},scene:{isLoading:o||!(SW(c)&&c.shadersReady),resetKey:r.sceneResetKey,shouldRender:m,shouldRenderDialog:m},surface:{usesSiblingDialogFlow:p},uploadErrorDialog:{open:!a&&!e&&!!u&&A}}}({activeError:e,canRecoverFromActiveError:K,floorFlow:{hasSceneSelection:B,sceneResetKey:T,step:R},hasDialogPortalContainer:s,hasRooms:l,isProcessingDialogClosingForError:N,isRoomScenePending:c,isViewerAccessPending:u,pendingUploadError:Q,sceneLoad:p,uploadError:j,viewerDialogOpen:g,viewerSurface:m});return{...er,activeErrorDialog:{...er.activeErrorDialog,onCancel:K?X:void 0,onOpenChange:ee,onTryAgain:"room-missing-surface"===e?Z:K?X:void 0,variant:e??W.current},customRooms:x,interiorSelection:{...er.interiorSelection,isInvalidFile:F,onOpenChange:$,onSelectRoom:S,onUploadFile:U,openFromScene:Y,uploadRetryRequestId:V},sourceRooms:f,processingDialog:{...er.processingDialog,isComplete:L,onCloseAnimationEnd:_,onOpenChange:er.surface.usesSiblingDialogFlow?d:void 0},step:R,uploadErrorDialog:{...er.uploadErrorDialog,onCancel:D,onOpenChange:et,onTryAgain:H,variant:P}}}({activeError:L,apiKey:s,baseURL:l,clearActiveError:g,closeMaterialSelection:H,glbUrl:o,handleAccessError:m,hasDialogPortalContainer:null!==S,hasRooms:c,isRoomScenePending:E,isViewerAccessPending:h,onViewerDialogOpenChange:B,resourceType:n,sceneLoad:C,source:u,sourceRooms:b,viewerDialogOpen:I,viewerSurface:M,widgetSession:d}),K=(0,ec.useRef)(null),J=!S1(W.scene.isLoading,K,{fadedOutIfMountedLoaded:!0}),Y=S1(W.scene.isLoading||!W.scene.shouldRender||!I,K),X=Eg(),{pending:Z,finish:$}=function(e,t,r){let[n,i]=(0,ec.useState)({open:e,pending:e&&t,sceneKey:r});n.open!==e?i({open:e,pending:e&&t,sceneKey:r}):n.sceneKey!==r?i({...n,sceneKey:r,pending:n.pending&&null===n.sceneKey}):n.pending&&!t&&i({...n,pending:!1});let a=(0,ec.useCallback)(()=>i(e=>({...e,pending:!1})),[]);return{pending:e&&n.pending,finish:a}}(I,CQ("(max-width: 639px)")&&"focus-resource"===Cz[n].introduction,W.scene.shouldRender?`${W.scene.resetKey}:${f??""}`:null),ee=X?.select,et=(0,ec.useCallback)(()=>{$(),ee?.("0,0")},[$,ee]),er=(0,ec.useMemo)(()=>Z?{ready:Y,target:y,onComplete:et,onCancel:$}:void 0,[Z,et,$,Y,y]),en=W.interiorSelection.openFromScene,ei=(0,ec.useCallback)(()=>{H(),en()},[H,en]),ea=(0,ec.useMemo)(()=>({isMaterialSelectionOpen:k,openMaterialSelection:j,closeMaterialSelection:H,onMaterialSelectionActionPointerDown:V,openInteriorSelection:ei}),[H,V,ei,j,k]),eo=(0,ec.useMemo)(()=>({isMaterialSelectionOpen:R,openMaterialSelection:q,closeMaterialSelection:H,openInteriorSelection:ei}),[H,ei,q,R]);(0,ec.useEffect)(()=>{if(k)return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)};function e(e){var t;(t=e.target)instanceof Element&&t.closest(`[${S5}], [${S8}]`)||T(!1)}function t(e){"Escape"===e.key&&T(!1)}},[k]);let es=W.surface.usesSiblingDialogFlow?S:w,eu=(0,el.jsxs)(el.Fragment,{children:[(0,el.jsx)("div",{className:"absolute inset-0 bg-constant-black","data-testid":"floor-scene-background-base"}),(0,el.jsx)("div",{"aria-hidden":!0,className:"absolute top-[-52px] right-[-1.36%] bottom-[-52px] left-[-1.36%] blur-[40px]","data-testid":"floor-blur-background",children:(0,el.jsx)("img",{crossOrigin:"anonymous",src:CH(v),alt:"",className:"block size-full max-w-none object-cover object-center opacity-50"})}),(0,el.jsxs)("div",{className:"pointer-events-none absolute top-0 right-0 left-0 z-20 flex min-h-22 items-start justify-between gap-4 bg-linear-to-b from-black/75 via-black/35 to-transparent px-4 pt-4 pb-8 text-constant-white sm:px-6 lg:min-h-25 lg:pt-6",children:[(0,el.jsx)("div",{className:"min-w-0 pt-1",children:N?(0,el.jsx)("h1",{"data-testid":"floor-scene-header-company",className:"typo-base-16 truncate font-medium lg:typo-base-18",children:N}):null}),(0,el.jsxs)("div",{className:"pointer-events-auto inline-flex shrink-0 items-center gap-2",children:[(0,el.jsxs)(CA,{type:"button",variant:"secondary","aria-label":t("floor.scene.share"),"data-neurodyn-room-viewer-share":"",disabled:!O||z,onClick:G,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,el.jsx)(C_,{className:"size-5"}),(0,el.jsx)("span",{className:"hidden lg:inline",children:t("floor.scene.share")})]}),(0,el.jsxs)(CA,{type:"button",variant:"secondary","aria-label":t("floor.scene.download"),"data-neurodyn-room-viewer-download":"",disabled:U,onClick:Q,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,el.jsx)(CM,{className:"size-5"}),(0,el.jsx)("span",{className:"hidden lg:inline",children:t("floor.scene.download")})]}),e&&(0,el.jsx)(Cm,{asChild:!0,children:(0,el.jsxs)(CA,{type:"button",variant:"secondary","aria-label":t("close"),className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,el.jsx)("span",{className:"hidden lg:inline",children:t("close")}),(0,el.jsx)(CS,{className:"!size-5"})]})})]})]}),(0,el.jsxs)("div",{className:"relative z-10 size-full min-h-0 min-w-0","data-testid":"floor-scene-viewport",children:[(0,el.jsx)(S$,{contentKey:W.scene.resetKey,introduction:er,captureRef:P,className:"relative z-10 size-full min-h-0"}),(0,el.jsx)("div",{"aria-hidden":!W.scene.isLoading,className:Ch("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",W.scene.isLoading?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),ref:K,"data-testid":"floor-scene-loader",style:{transitionDuration:W.scene.isLoading?"0ms":"250ms"},children:J&&(0,el.jsx)(CN,{variant:"logo"})})]}),(0,el.jsxs)("div",{className:"pointer-events-none absolute right-6 bottom-6 left-6 z-20 hidden items-end justify-between gap-4 lg:flex","data-testid":"floor-desktop-cards",children:[(0,el.jsx)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:(0,el.jsx)(M5,{actions:ea,band:"desktop",container:"leading"})}),(0,el.jsx)("div",{className:"pointer-events-auto",children:(0,el.jsx)(M5,{actions:ea,band:"desktop",container:"trailing"})})]}),(0,el.jsxs)("div",{className:"pointer-events-none absolute right-6 bottom-6 left-6 z-20 hidden items-end justify-between gap-2 sm:flex lg:hidden","data-testid":"floor-tablet-cards",children:[(0,el.jsx)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:(0,el.jsx)(M5,{actions:ea,band:"tablet",container:"leading"})}),(0,el.jsx)("div",{className:"pointer-events-auto grid w-[254px] gap-2",children:(0,el.jsx)(M5,{actions:ea,band:"tablet",container:"trailing"})})]}),(0,el.jsxs)("div",{className:"relative z-20 grid bg-background-containers text-text-dark shadow-[var(--shadow-login)] sm:hidden","data-testid":"floor-mobile-cards",children:[(0,el.jsx)("div",{className:"grid",children:(0,el.jsx)(M5,{actions:eo,band:"phone",container:"leading"})}),(0,el.jsx)("div",{className:"grid gap-4 bg-background-containers px-6 pt-4 pb-6","data-testid":"floor-mobile-bottom-actions",children:(0,el.jsx)(M5,{actions:eo,band:"phone",container:"trailing"})})]}),k&&!F&&(0,el.jsx)(Mc,{[S8]:!0,className:"absolute bottom-[152px] left-6 z-30 hidden max-h-[calc(100%-252px)] w-[348px] rounded-2xl bg-background-containers sm:flex lg:bottom-[132px] lg:max-h-[calc(100%-232px)]",gridClassName:"px-4 pb-4",titleClassName:"px-4 pt-4",onOpenChange:H}),(0,el.jsx)(Mu,{open:R&&!F,portalContainer:es,onOpenChange:D})]}),ed=W.interiorSelection.shouldRender?"dialog"===W.interiorSelection.presentation?(0,el.jsx)(S4,{open:W.interiorSelection.open,showCloseButton:e||W.scene.shouldRender,portalContainer:es,rooms:W.sourceRooms,customRooms:W.customRooms,selectedRoomId:v.id,isInvalidFile:W.interiorSelection.isInvalidFile,uploadRetryRequestId:W.interiorSelection.uploadRetryRequestId,onOpenChange:W.interiorSelection.onOpenChange,onSelectRoom:W.interiorSelection.onSelectRoom,onUploadFile:W.interiorSelection.onUploadFile}):"screen"===W.interiorSelection.presentation?(0,el.jsx)(S9,{rooms:W.sourceRooms,customRooms:W.customRooms,selectedRoomId:v.id,isInvalidFile:W.interiorSelection.isInvalidFile,uploadRetryRequestId:W.interiorSelection.uploadRetryRequestId,showCloseButton:e,onSelectRoom:W.interiorSelection.onSelectRoom,onUploadFile:W.interiorSelection.onUploadFile}):null:null,eh=(0,el.jsx)(Mp,{isComplete:W.processingDialog.isComplete,open:W.processingDialog.open,portalContainer:es,onCloseAnimationEnd:W.processingDialog.onCloseAnimationEnd,onOpenChange:W.processingDialog.onOpenChange}),ep=(0,el.jsxs)(el.Fragment,{children:[(0,el.jsx)(S2,{missingSurfaceMessage:i,variant:W.activeErrorDialog.variant,open:W.activeErrorDialog.open,portalContainer:es,showDialogCloseButton:e&&W.activeErrorDialog.showCloseButton,onOpenChange:W.activeErrorDialog.onOpenChange,onTryAgain:W.activeErrorDialog.onTryAgain,onCancel:W.activeErrorDialog.onCancel}),(0,el.jsx)(S2,{missingSurfaceMessage:i,variant:W.uploadErrorDialog.variant,open:W.uploadErrorDialog.open,portalContainer:es,onOpenChange:W.uploadErrorDialog.onOpenChange,onTryAgain:W.uploadErrorDialog.onTryAgain,onCancel:W.uploadErrorDialog.onCancel})]}),eA=(0,el.jsxs)("div",{ref:x,className:"relative grid size-full grid-rows-[minmax(0,1fr)_auto] overflow-hidden text-foreground sm:block","data-neurodyn-room-viewer-container":"","data-testid":"floor-viewer-root",children:[h?(0,el.jsx)("div",{className:"flex size-full items-center justify-center bg-radial from-background-containers to-background-base-2",children:(0,el.jsx)(CN,{variant:"logo"})}):W.scene.shouldRender?eu:null,!W.surface.usesSiblingDialogFlow&&ed,!W.surface.usesSiblingDialogFlow&&eh]});return W.surface.usesSiblingDialogFlow?(0,el.jsxs)(el.Fragment,{children:[(W.scene.shouldRenderDialog||h)&&(0,el.jsx)(Cf,{open:I,onOpenChange:B,children:(0,el.jsxs)(Cb,{className:"inset-0 h-dvh min-w-full max-w-none translate-x-0 translate-y-0 rounded-none border-none bg-transparent p-0 shadow-none sm:p-0 sm:max-w-none",contentInsideOverlay:!0,portalContainer:S,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,el.jsx)(Cw,{className:"sr-only",children:r}),(0,el.jsx)(Cx,{className:"sr-only"}),eA]})}),ed,eh,ep]}):(0,el.jsxs)(el.Fragment,{children:[eA,ep]})}function Im(e){return(0,el.jsx)(Ig,{...e})}let Iv={angle:0,rotation:0,isDragging:!1};function Ib(){let e=Iv,t=new Set;function r(r){return n=>{let i="function"==typeof n?n(e[r]):n;Object.is(i,e[r])||(e={...e,[r]:i},t.forEach(e=>e()))}}return{getState:()=>e,subscribe:e=>(t.add(e),()=>{t.delete(e)}),setAngle:r("angle"),setRotation:r("rotation"),setIsDragging:r("isDragging")}}let Iy=[];function Iw(e,t,r){if(t===r)return e;let n=new Set(t.map(e=>e.id)),i=new Set(r.map(e=>e.id)),a=e.filter(e=>!n.has(e.id)&&!i.has(e.id));return a.length>0?[...a,...r]:r}function Ix({children:e,src:t,tinuuid:r,roomId:n,type:i,viewerSurface:a,dialogPortalContainer:o=null,viewerDialogOpen:s=!0,onViewerDialogOpenChange:l,width:c,height:u,displayUnit:d,name:h,apiKey:p,baseURL:A,source:f,externalWidgetSession:g}){var m,v;let b=MN(d),y=function(){let{i18n:e}=tl();return"ru"===(e.resolvedLanguage??e.language)?"ru":"en"}(),w=EF(i),x=n?.trim()||void 0,C="panel-group"===Cz[i].manipulation,{offersSizeVariants:E}=Mi(i),S="floor-room-presets"===Cz[i].roomPresets?EP:ED,M=xD({apiKey:p,baseURL:A,source:f}),[I,B]=(0,ec.useState)(r),[k,T]=(0,ec.useState)(null),R=(0,ec.useCallback)(e=>{T(null),B(e)},[]),D=(0,ec.useCallback)(e=>{T(e),B(e)},[]),[P,_]=(0,ec.useState)(null),[L,F]=(0,ec.useState)(b[0].value),[N]=(0,ec.useState)(Ib),[O,Q]=(0,ec.useState)(null),[U,z]=(0,ec.useState)(()=>({layoutReady:!1,placementReady:!1,materialReady:"artwork-src"===w.materialSource,artifactsReady:!1,assetsReady:!1,prepareReady:!1,shadersReady:!1})),[G,H]=(0,ec.useState)(!1),[j,V]=(0,ec.useState)(null),[q,W]=(0,ec.useState)(null),K=(0,ec.useRef)(null),J=(0,ec.useRef)(!1),Y="object-glb"===w.materialSource,X="default"===f&&void 0!==p,Z=x_("wall-panel"===(m={apiKey:p,baseURL:A,source:f,resourceType:i}).resourceType?m:{...m,resourceType:void 0}),$=rW({queryKey:["room-viewer","activate",{apiKey:p??null,source:f,resourceType:i}],enabled:X,queryFn:({signal:e})=>x0(Z.query,{...Z.config,baseURL:A,headers:{"x-api-key":p},signal:e})},rS,void 0),ee=xL($.error),et=(0,ec.useMemo)(()=>{let e=$.data;return Cr(e?.widgetSession,{apiConfig:{baseURL:A,headers:{"x-api-key":p}}})},[$.data,p,A]),er=g instanceof Ct?g:null,en=g instanceof Ct?null:g,ei=en?.token,ea=en?.sid,eo=en?.expiresIn,es=(0,ec.useMemo)(()=>er||(Cr({token:ei,sid:ea,expiresIn:eo},{apiConfig:{baseURL:A,headers:{"x-api-key":p}}})??et),[et,p,A,er,ei,ea,eo]),eu="shopify"===f?null!==es:X&&$.isSuccess,ed=rW({queryKey:["room-viewer","rooms",{apiKey:(v={apiKey:p,baseURL:A,language:y,source:f,widgetSession:es,resourceType:i}).apiKey??null,language:v.language??null,source:v.source,resourceType:v.resourceType??null,widgetSessionId:v.widgetSession?.sid??null}],enabled:M&&eu,placeholderData:rs,queryFn:async({signal:e})=>{try{return await Cd({apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}catch(e){if(xL(e))throw e;return[]}}},rS,void 0),eh=M?ed.data??Iy:S,[ep,eA]=(0,ec.useState)(()=>({rooms:eh,sourceRooms:eh})),ef=(0,ec.useMemo)(()=>Iw(ep.rooms,ep.sourceRooms,eh),[ep.rooms,ep.sourceRooms,eh]),eg=(0,ec.useCallback)(e=>{eA(t=>{let r=Iw(t.rooms,t.sourceRooms,eh);return{rooms:"function"==typeof e?e(r):e,sourceRooms:eh}})},[eh]),[em,ev]=(0,ec.useState)(()=>x??S[0].id),[eb,ey]=(0,ec.useState)(x);eb!==x&&(ey(x),x&&(ev(x),z(e=>Sq(e,SK)),W(e=>CZ(e)?null:e)));let ew=ef.find(e=>e.id===em),ex=ew??ef[0]??S[0],eC="rotate-on-floor"===Cz[i].manipulation;(0,ec.useLayoutEffect)(()=>{x&&(N.setAngle(0),N.setRotation(0))},[x,N]),(0,ec.useEffect)(()=>{eC&&N.setRotation(0)},[eC,ex.id,N]);let eE=ef.length>0;!ew&&ef[0]&&em!==ef[0].id&&ev(ef[0].id);let eS=!X||$.isSuccess||$.isError&&null===ee,eM=rW({queryKey:Co(r??void 0,{apiKey:p,baseURL:A,language:y,source:f,resourceType:i}),enabled:eS&&Y&&null===P&&!!r,queryFn:async({signal:e})=>{if(!r)throw Error("Tinuuid is required.");return Cl(r,{apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}},rS,void 0),eI=rW({queryKey:Co(I??void 0,{apiKey:p,baseURL:A,language:y,source:f,resourceType:i}),enabled:eS&&Y&&!!I,placeholderData:rs,queryFn:async({signal:e})=>{if(!I)throw Error("Tinuuid is required.");return Cl(I,{apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}},rS,void 0),eB=eM.data??null,ek=eI.data??null,eT=eB?.materials?.[0]??null,eR=P?.native?.glbUrl??null,eD=xL(eM.error),eP=xL(ed.error),e_=M&&("shopify"===f?null===es||ed.isLoading:$.isSuccess&&ed.isLoading),eL=X&&$.isLoading||e_,eF=$.error&&null===ee?"viewer-load-failed":null,eN=eM.error&&null===eD?"viewer-load-failed":null,eO="artwork-src"===w.materialSource&&("string"!=typeof t||0===t.trim().length)?"artwork-load-failed":null,eQ=Y&&!eL&&(!r||eM.isSuccess&&null===eT||null!==P&&null===eR)?"viewer-load-failed":null,eU=null!==k&&k===I&&(eI.isError||eI.isSuccess&&ek?.tinuuid===I&&!ek.materials?.[0]?.native?.glbUrl)?"viewer-load-failed":null,ez=rY({queries:Ms({apiKey:p,baseURL:A,language:y,source:f,widgetSession:es}).map(e=>({...e,enabled:w.hasPictureFrame&&eS&&!eL}))}),eG=ez[0]?.data??null,eH=j??ee??eP??eD,ej=q??eU??eF??eN??eQ??eO,eV=(0,ec.useCallback)(e=>{z(t=>Sq(t,e))},[]);(0,ec.useEffect)(()=>{if("dialog"!==a||!s){J.current=!1;return}J.current||es&&(Cn(es,"widget_opened"),J.current=!0)},[s,a,es]),(0,ec.useEffect)(()=>{Y&&(R(r),_(null),V(null),W(null))},[r,R,Y]),(0,ec.useEffect)(()=>{V(null),W(null)},[p,f]),(0,ec.useEffect)(()=>{Y&&eB&&null===P&&_(eT)},[P,eT,eB,Y]),(0,ec.useEffect)(()=>{let e=eG?.materials?.[0],t=eG?.tinuuid;null===P&&e&&t&&(_(e),R(t))},[eG,P,R]),(0,ec.useEffect)(()=>{if(!Y||!E&&!C&&k!==I||null===ek||ek.tinuuid!==I)return;let e=ek.materials?.[0];if(!e)return;let t=ek.materials?.some(e=>e===P||!!e.hid&&e.hid===P?.hid);if(k===I){T(null),_(e);return}(!t||C)&&P!==e&&_(e)},[C,P,E,ek,I,Y,k]);let eq=(0,ec.useMemo)(()=>({type:i,name:h,width:c,height:u,displayUnit:d}),[i,h,c,u,d]),eW=(0,ec.useMemo)(()=>({viewerSurface:a,dialogPortalContainer:o,viewerDialogOpen:s,onViewerDialogOpenChange:l}),[a,o,s,l]),eK=(0,ec.useMemo)(()=>({rooms:ef,sourceRooms:eh,setRooms:eg,room:ex,initialRoomId:x,setRoomId:ev}),[ef,ex,x,eg,eh]),eJ=(0,ec.useMemo)(()=>({src:t,glbUrl:eR,tinuuid:I,embeddedObject:eB,selectedObject:ek,material:P,setTinuuid:R,selectResourceVariant:D,setMaterial:_,apiKey:p,baseURL:A,language:y,source:f,widgetSession:es,hasRooms:eE,isViewerAccessPending:eL,accessError:eH,setAccessError:V,loadError:ej,setLoadError:W}),[t,eR,I,eB,ek,P,R,D,p,A,y,f,es,eE,eL,eH,ej]),eY=(0,ec.useMemo)(()=>({setContainerRef:Q,resourceRef:K,sceneGestures:N,patchSceneLoad:eV,setIsRoomScenePending:H}),[eV,N]),eX=(0,ec.useMemo)(()=>({...eY,containerRef:O,sceneLoad:U,isRoomScenePending:G}),[eY,O,U,G]),eZ=(0,ec.useMemo)(()=>({matting:L,setMatting:F}),[L]);return(0,el.jsx)(C$,{value:eq,children:(0,el.jsx)(C0,{value:eW,children:(0,el.jsx)(C1,{value:eK,children:(0,el.jsx)(C2,{value:eJ,children:(0,el.jsx)(C9,{value:eY,children:(0,el.jsx)(C3,{value:eX,children:(0,el.jsx)(C4,{value:eZ,children:(0,el.jsx)(Ef,{children:e})})})})})})})})}let IC={poster:"wallart",carpet:"rugs"};function IE(e){return"poster"===e||"carpet"===e}i9.gPd.DEFAULT_ANISOTROPY=4;let IS=new r1({defaultOptions:{queries:{gcTime:1/0,refetchOnMount:!1,refetchOnReconnect:!1,refetchOnWindowFocus:!1,retry:(e,t)=>{let r=function(e){if(iY(e))return e.response?.status}(t);return(void 0===r||!(r>=400)||!(r<500))&&e<2}}}});function IM({type:e,src:t,tinuuid:r,roomId:n,name:i,height:a,width:o,language:s,dimensionUnit:l="m",displayUnit:c="cm",apiKey:u,source:d="default",showDialogCloseButton:h=!1,viewerSurface:p="inline",dialogPortalContainer:A=null,viewerDialogOpen:f=!0,onViewerDialogOpenChange:g,widgetSession:m}){let{i18n:v}=tl(),b=u?.trim()||void 0,y=r?.trim()||void 0,w=IE(e)?IC[e]:e,x=EF(w).takesDimensionProps?function(e,t,r="m"){return{width:ML(e??0,r),height:ML(t??0,r)}}(o,a,l):null;return(0,ec.useEffect)(()=>{IE(e)&&IC[e]},[e]),(0,ec.useEffect)(()=>{"string"==typeof s&&v.changeLanguage(s)},[v,s]),(0,el.jsx)(rF,{client:IS,children:(0,el.jsx)(Ix,{src:t??null,tinuuid:y??null,roomId:n,type:w,viewerSurface:p,dialogPortalContainer:A,viewerDialogOpen:f,onViewerDialogOpenChange:g,name:i,width:x?.width??0,height:x?.height??0,displayUnit:c,apiKey:b,baseURL:"shopify"===d?xT:void 0,source:d,externalWidgetSession:m,children:(0,el.jsx)(Im,{showDialogCloseButton:h})})})}function II({type:e,src:t,tinuuid:r,roomId:n,width:i,height:a,dimensionUnit:o,displayUnit:s,name:l,language:c,apiKey:u,source:d,widgetSession:h,disableClose:p=!1,open:A,defaultOpen:f,onOpenChange:g}){let[m,v]=(0,ec.useState)(null),[b,y]=(0,ec.useState)(f??!1),w=A??b,[x,C]=(0,ec.useState)(w),E=w||x;(0,ec.useEffect)(()=>{w&&C(!0)},[w]);let S=Es({disableClose:p,onOpenChange:g,open:A}),M=(0,ec.useCallback)(e=>{let{disableClose:t,onOpenChange:r,open:n}=S.current;(e||!t)&&(void 0===n&&y(e),r?.(e))},[S]),I=(0,el.jsx)(IM,{type:e,src:t,tinuuid:r,roomId:n,name:l,height:a,width:i,dimensionUnit:o,displayUnit:s,language:c,apiKey:u,source:d,widgetSession:h,showDialogCloseButton:!p,viewerSurface:"dialog",dialogPortalContainer:m,viewerDialogOpen:w,onViewerDialogOpenChange:M});return(0,el.jsxs)(el.Fragment,{children:[(0,ed.createPortal)((0,el.jsx)("style",{children:xE.A}),document.head),(0,ed.createPortal)((0,el.jsxs)(tB.div,{"data-neurodyn-room-viewer-root":"",style:{display:"block",letterSpacing:"normal",zIndex:0x7fffffff},children:[(0,el.jsx)("style",{children:":host{display:block!important;visibility:visible!important}"}),(0,el.jsx)("style",{children:xk}),(0,el.jsx)("div",{ref:v}),m&&(0,el.jsx)(xC,{root:m,storageKey:"neurodyn-theme",defaultTheme:"light",children:(0,el.jsx)(tc,{i18n:xM,children:E&&I})})]}),document.body)]})}xq({baseURL:"https://api.neurodyn.ai/"});let IB=0;class Ik{container=null;props=null;root=null;openState=!1;destroy(){this.root?.unmount(),this.root=null,this.container?.remove(),this.container=null,this.props=null,this.openState=!1}open(e){this.props=e,this.openState=!0,this.render()}handleOpenChange=e=>{this.openState=e,this.render()};ensureRoot(){return this.root||(this.container=document.createElement("div"),this.container.id=`neurodyn-room-viewer-dialog-root-${IB++}`,document.body.appendChild(this.container),this.root=(0,fC.createRoot)(this.container)),this.root}render(){this.props&&this.ensureRoot().render((0,ec.createElement)(II,{...this.props,onOpenChange:this.handleOpenChange,open:this.openState}))}}function IT(e,t,r){return{kind:"attribute",name:e,parse:t.parse,values:t.values,...r}}function IR(e){return{kind:"option",reason:e}}function ID(){return{parse:e=>e??void 0}}function IP(){return{parse:e=>e?Number(e):void 0}}function I_(e){return{parse:t=>e.includes(t??"")?t:void 0,values:e}}let IL={prefix:"data-neurodyn-room-viewer-",markers:[{name:"data-neurodyn-room-viewer-dialog",description:"Marks an element for the embed build."}],fields:{type:IT("type",{parse:e=>e??void 0,values:["wallart","rugs","flooring","wall-panel"]},{required:!0,description:"Resource type."}),src:IT("src",ID(),{required:{when:"type",is:["wallart"]},description:"Wall-art image URL."}),tinuuid:IT("tinuuid",ID(),{required:{when:"type",is:["rugs","flooring","wall-panel"]},description:"The object's tinuuid."}),roomId:IT("room-id",ID(),{required:!1,description:"Initial Room ID from the available catalog. Skips the initial interior chooser; unavailable Rooms open the chooser. Empty values do nothing."}),name:IT("name",ID(),{required:!0,description:"Title shown in the dialog header."}),width:IT("width",IP(),{required:!1,description:"Wall-art width. Used when `type` is `wallart`."}),height:IT("height",IP(),{required:!1,description:"Wall-art height. Used when `type` is `wallart`."}),dimensionUnit:IT("dimension-unit",I_(["m","cm","in"]),{required:!1,defaultValue:"`m`",description:"Unit used by wall-art width and height."}),displayUnit:IT("display-unit",I_(["cm","in"]),{required:!1,defaultValue:"`cm`",description:"Unit used to display UI measurements."}),language:IT("language",I_(["en","ru"]),{required:!1,defaultValue:"User locale",description:"UI language override."}),apiKey:IT("api-key",ID(),{required:!0,description:"Public API key sent as `x-api-key`. Not needed when `source` is `shopify`."}),source:IT("source",I_(["default","shopify"]),{required:!1,defaultValue:"`default`",description:"Backend source mode."}),disableClose:IT("disable-close",{parse:e=>"true"===e},{required:!1,defaultValue:"`false`",description:"Set to `true` to hide close controls and prevent dismissal."}),widgetSession:IR("An existing Widget Session handed over by an embedding surface such as Shopify."),open:IR("The embed build owns the open state."),defaultOpen:IR("The embed build owns the open state."),onOpenChange:IR("The embed build owns the open state.")}};class IF{renderer=new Ik;triggers;props;destroyed=!1;constructor(e,t={}){for(const r of(this.triggers="string"==typeof e?Array.from(document.querySelectorAll(e)):[e],this.props=t,this.triggers))r.addEventListener("click",this.handleClick)}destroy(){if(!this.destroyed){for(let e of(this.destroyed=!0,this.triggers))e.removeEventListener("click",this.handleClick);this.renderer.destroy()}}handleClick=e=>{!this.destroyed&&e.currentTarget instanceof Element&&this.renderer.open(function(e,t={}){let r=function(e,t,r={}){let n={};for(let[i,a]of Object.entries(t.fields).filter(e=>"attribute"===e[1].kind)){let o=`${t.prefix}${a.name}`,s=r[i];if(void 0!==s){n[i]=a.normalizesOptions?a.parse(s,{attribute:o}):s;continue}n[i]=a.parse(function(e,t,r=[]){let n=e.getAttribute(t);if(0===r.length||n?.trim())return n;for(let t of r){let r=e.getAttribute(t);if(r?.trim())return r}return n}(e,o,a.legacyNames),{attribute:o})}return n}(e,IL,t);return{...r,type:r.type,name:r.name}}(e.currentTarget,this.props))}}window.RoomViewerDialog=IF})()})();
7244
+ ${o}`;a(!0);try{if(!i&&t)return void await S0(s);let n=e.current;if(n)try{let e=await n.capture(),t=new File([e],r,{type:e.type||"image/png"});if(navigator.canShare?.({files:[t]}))return void await navigator.share({text:s,files:[t]})}catch(e){console.error("Failed to generate scene screenshot for sharing",e)}await navigator.share({text:s,url:o})}catch(e){e instanceof DOMException&&"AbortError"===e.name||console.error("Failed to share scene",e)}finally{a(!1)}},[l,e,t,r,n]);return{canShare:l,download:(0,ec.useCallback)(async()=>{let t=e.current;if(t){s(!0);try{var n;let e,i;n=await t.capture(),e=URL.createObjectURL(n),(i=document.createElement("a")).href=e,i.download=r,document.body.append(i),i.click(),i.remove(),URL.revokeObjectURL(e)}catch(e){console.error("Failed to download scene screenshot",e)}finally{s(!1)}}},[e,r]),isDownloading:o,isSharing:i,share:c}}({captureRef:P,fallbackToClipboard:!0,shareMessage:t(`shareMessage.${n}`)}),H=(0,ec.useCallback)(()=>{T(!1),D(!1)},[]),j=(0,ec.useCallback)(()=>{if(_.current){_.current=!1;return}T(!0),D(!1)},[]),V=(0,ec.useCallback)(()=>{_.current=!0,H()},[H]),q=(0,ec.useCallback)(()=>{D(!0),T(!1)},[]),W=function({activeError:e,apiKey:t,baseURL:r,clearActiveError:n,closeMaterialSelection:i,glbUrl:a,handleAccessError:o,hasDialogPortalContainer:s,hasRooms:l,isRoomScenePending:c,isViewerAccessPending:u,onViewerDialogOpenChange:d,resourceType:h,sceneLoad:p,source:A,sourceRooms:f,viewerDialogOpen:g,viewerSurface:m,widgetSession:v}){let b=function(e){let{initialRoomId:t,room:r,sourceRooms:n}=C7(),{isViewerAccessPending:i,loadError:a,setLoadError:o}=Ee(),{type:s}=C8(),{patchSceneLoad:l,sceneGestures:{setAngle:c,setRotation:u}}=Er(),d=(0,ec.useMemo)(()=>({patchSceneLoad:l,setAngle:c,setRotation:u}),[l,c,u]),h=n.find(e=>e.id===t),p=!!h&&(!h?.scene||Sr(h.scene,CG(s)).length>0),A=function(e,t,r){let[n,i]=(0,ec.useReducer)(Il,e,Is),[a,o]=(0,ec.useState)();!r?.isPending&&a!==r?.roomId&&(o(r?.roomId),r&&i(r.isAvailable?{type:"select-initial-room",roomId:r.roomId}:{type:"clear-interior-selection"}));let s=(0,ec.useCallback)(e=>{e(),function({patchSceneLoad:e,setAngle:t,setRotation:r}){t(0),r(0),e(SK)}(t),i({type:"commit-interior-selection"})},[t]),l=(0,ec.useCallback)(()=>{i({type:"dismiss-interior-selection"})},[]),c=(0,ec.useCallback)(()=>{i({type:"open-interior-selection"})},[]),u=(0,ec.useCallback)(()=>{i({type:"recover-to-scene"})},[]),d=(0,ec.useCallback)(()=>{i({type:"return-to-interior-selection"})},[]),h=(0,ec.useCallback)(()=>{i({type:"clear-interior-selection",automaticRoomId:n.automaticRoomId})},[n.automaticRoomId]),p=(0,ec.useCallback)(()=>{i({type:"start-custom-interior-processing"})},[]);return(0,ec.useMemo)(()=>({...n,commitInteriorSelection:s,dismissInteriorSelection:l,openInteriorSelection:c,recoverToScene:u,returnToInteriorSelection:d,clearInteriorSelection:h,startCustomInteriorProcessing:p}),[s,l,c,u,d,h,p,n])}(e,d,t?{roomId:t,isAvailable:p,isPending:i}:void 0),{automaticRoomId:f,clearInteriorSelection:g}=A;return(0,ec.useEffect)(()=>{f&&r.id===f&&CZ(a)&&(g(),o(null))},[f,g,a,r.id,o]),A}(m),y=CG(h),{appendRuntimeCustomInterior:w,customRooms:x}=function({listCustomInteriors:e,surfaces:t}){let{appendRuntimeCustomInterior:r,customRooms:n,replaceRuntimeCustomInteriors:i}=function(){let[e,t]=(0,ec.useState)(()=>[]),r=(0,ec.useRef)(null),n=(0,ec.useCallback)(e=>{r.current?.revokeObjectUrls();let n=Io(e);return r.current=n,t(n.rooms),n.rooms},[]),i=(0,ec.useCallback)((e,n)=>{let i=Io([{id:Ir(),schemaVersion:1,name:e.name,fileName:e.name,createdAt:new Date().toISOString(),imageBlob:e,scene:n}]),a=i.rooms[0];if(!a)return i.revokeObjectUrls(),null;let o=r.current;return r.current={rooms:[],revokeObjectUrls:()=>{o?.revokeObjectUrls(),i.revokeObjectUrls()}},t(e=>[a,...e.filter(e=>e.id!==a.id)]),a},[]);return(0,ec.useEffect)(()=>()=>{r.current?.revokeObjectUrls()},[]),(0,ec.useMemo)(()=>({appendRuntimeCustomInterior:i,customRooms:e,replaceRuntimeCustomInteriors:n}),[i,e,n])}(),a=(0,ec.useRef)(!0);(0,ec.useEffect)(()=>(a.current=!0,()=>{a.current=!1}),[]);let o=(0,ec.useCallback)(async()=>{let r=await e();a.current&&i(r.filter(e=>!Sn(e.scene,t)))},[e,i,t]);return(0,ec.useEffect)(()=>{o()},[o]),(0,ec.useMemo)(()=>({appendRuntimeCustomInterior:r,customRooms:n,replaceRuntimeCustomInteriors:i,refreshCustomInteriors:o}),[r,n,o,i])}({listCustomInteriors:Ia,surfaces:y}),C=(0,ec.useMemo)(()=>new Set(f.map(e=>e.id)),[f]),{commitCustomInteriorSelection:E,selectInterior:S}=function(e){let{room:t,setRoomId:r,setRooms:n}=C7(),{widgetSession:i}=Ee();return function({floorFlow:e,customRooms:t,selectedRoomId:r,onInteriorSelected:n,restoreSourceRooms:i,setRoomId:a,setRooms:o}){let s=(0,ec.useCallback)(t=>{e.commitInteriorSelection(()=>{o(e=>[t,...i(e).filter(e=>e.id!==t.id)]),a(t.id)}),n?.()},[e,n,i,a,o]),l=(0,ec.useCallback)(t=>{let s=t===r;s&&e.hasSceneSelection||(e.commitInteriorSelection(()=>{o(i),a(t)}),s||n?.())},[e,n,i,r,a,o]),c=(0,ec.useCallback)(n=>{if(n===r&&e.hasSceneSelection)return;let i=t.find(e=>e.id===n);i&&s(i)},[e.hasSceneSelection,s,t,r]),u=(0,ec.useCallback)(e=>{t.some(t=>t.id===e)?c(e):l(e)},[t,c,l]);return(0,ec.useMemo)(()=>({commitCustomInteriorSelection:s,selectInterior:u}),[s,u])}({...e,selectedRoomId:t.id,onInteriorSelected:()=>Cn(i,"interior_selected"),setRoomId:r,setRooms:n})}({floorFlow:b,customRooms:x,restoreSourceRooms:(0,ec.useCallback)(e=>[...f,...e.filter(e=>!C.has(e.id))],[C,f])}),M=function(e){let{setIsRoomScenePending:t}=Er();return function({apiOptions:e,floorFlow:t,commitCustomInteriorSelection:r,downloadDebugMask:n,isDebugMaskExportEnabled:i,onAccessError:a,onDebugMaskError:o,onPersistenceError:s,onProcessingError:l,predictRoomScene:c,saveCustomInterior:u,setIsRoomScenePending:d,surfaces:h,trackRuntimeCustomInterior:p,waitForProcessingCompletion:A}){let[f,g]=(0,ec.useState)(!1),[m,v]=(0,ec.useState)(!1),[b,y]=(0,ec.useState)(null),[w,x]=(0,ec.useState)(null),[C,E]=(0,ec.useState)(!1),[S,M]=(0,ec.useState)(0),I=(0,ec.useRef)(null),B=(0,ec.useRef)(!1),k=(0,ec.useRef)(!0),T=(0,ec.useRef)(b);b&&(T.current=b),(0,ec.useEffect)(()=>(k.current=!0,()=>{k.current=!1,I.current?.abort()}),[]);let R=(0,ec.useCallback)(()=>{y(null),x(null),E(!1)},[]),D=(0,ec.useCallback)(e=>{R(),g(!1),e()},[R]),P=(0,ec.useCallback)(async f=>{if(R(),!f.type.startsWith("image/"))return void g(!0);g(!1),v(!1),t.startCustomInteriorProcessing(),B.current=!0;let m=new AbortController;I.current?.abort(),I.current=m,d(!0);try{await Id({abortSignal:m.signal,apiOptions:e,commitCustomInteriorSelection:r,downloadDebugMask:n,file:f,isActive:()=>k.current,isDebugMaskExportEnabled:i,onDebugMaskError:o,onPersistenceError:s,onProcessingComplete:()=>{v(!0)},predictRoomScene:c,saveCustomInterior:u,surfaces:h,trackRuntimeCustomInterior:p,waitForProcessingCompletion:A})}catch(r){if(m.signal.aborted)return;let e=xL(r);if(e){B.current&&E(!0),a(e);return}let t=r instanceof Iu?"custom-interior-missing-surface":"custom-interior-processing";if("custom-interior-processing"===t&&l(r),B.current){x(t),E(!0);return}y(t)}finally{I.current===m&&(I.current=null,k.current&&d(!1))}},[e,t,r,n,i,a,o,s,l,c,R,u,d,h,p,A]),_=(0,ec.useCallback)(()=>{R(),g(!1),t.returnToInteriorSelection(),M(e=>e+1)},[t,R]),L=(0,ec.useCallback)(()=>{R(),t.returnToInteriorSelection()},[t,R]),F=(0,ec.useCallback)(({clearError:e,closeMaterialSelection:r})=>{e(),r(),t.hasSceneSelection&&t.recoverToScene()},[t]),N=(0,ec.useCallback)(()=>{B.current=!1,E(!1),w&&(y(w),x(null))},[w]),O=(0,ec.useCallback)(()=>k.current,[]);return(0,ec.useMemo)(()=>({displayedUploadError:b??T.current,isCustomInteriorProcessingComplete:m,isInvalidFile:f,isMounted:O,isProcessingDialogClosingForError:C,pendingUploadError:w,uploadError:b,uploadRetryRequestId:S,cancelUploadError:L,handleProcessingDialogCloseAnimationEnd:N,openInteriorSelection:D,processUploadFile:P,recoverFromActiveError:F,resetUploadErrorPresentation:R,tryUploadAgain:_}),[L,N,m,f,O,C,D,w,P,F,R,_,b,S])}({...e,setIsRoomScenePending:t})}({apiOptions:(0,ec.useMemo)(()=>({resourceType:h,apiKey:t,baseURL:r,source:A,widgetSession:v}),[t,r,h,A,v]),floorFlow:b,commitCustomInteriorSelection:E,downloadDebugMask:Ie,isDebugMaskExportEnabled:M7,onAccessError:o,onDebugMaskError:Ip,onPersistenceError:IA,onProcessingError:If,predictRoomScene:M8,saveCustomInterior:Ii,surfaces:y,trackRuntimeCustomInterior:w,waitForProcessingCompletion:Ih}),{dismissInteriorSelection:I,hasSceneSelection:B,openInteriorSelection:k,sceneResetKey:T,step:R}=b,{cancelUploadError:D,displayedUploadError:P,handleProcessingDialogCloseAnimationEnd:_,isCustomInteriorProcessingComplete:L,isInvalidFile:F,isProcessingDialogClosingForError:N,openInteriorSelection:O,pendingUploadError:Q,processUploadFile:U,recoverFromActiveError:z,resetUploadErrorPresentation:G,tryUploadAgain:H,uploadError:j,uploadRetryRequestId:V}=M,q=l&&B,W=(0,ec.useRef)(e),K=!!(e&&q&&a);e&&(W.current=e);let J=(0,ec.useCallback)(()=>{q&&(G(),I())},[I,q,G]),Y=(0,ec.useCallback)(()=>{i(),O(k)},[i,k,O]),X=(0,ec.useCallback)(()=>{z({clearError:n,closeMaterialSelection:i})},[n,i,z]),Z=(0,ec.useCallback)(()=>{n(),Y()},[n,Y]),$=(0,ec.useCallback)(e=>{if(!e){if(q)return void J();d?.(!1)}},[J,q,d]),ee=(0,ec.useCallback)(e=>{if(!e){if(K)return void X();d?.(!1)}},[K,X,d]),et=(0,ec.useCallback)(e=>{e||D()},[D]);!function({fallbackMs:e,handleProcessingDialogCloseAnimationEnd:t,isProcessingDialogClosingForError:r}){(0,ec.useEffect)(()=>{if(!r)return;let n=window.setTimeout(t,e);return()=>window.clearTimeout(n)},[e,t,r])}({fallbackMs:220,handleProcessingDialogCloseAnimationEnd:_,isProcessingDialogClosingForError:N});let er=function({activeError:e,canRecoverFromActiveError:t,floorFlow:r,hasDialogPortalContainer:n,hasRooms:i,isProcessingDialogClosingForError:a,isRoomScenePending:o,isViewerAccessPending:s,pendingUploadError:l,sceneLoad:c,uploadError:u,viewerDialogOpen:d,viewerSurface:h}){let p="dialog"===h&&n,A=!p||d,f=i&&r.hasSceneSelection,g=i||"scene"!==r.step?r.step:"interior-selection",m=!s&&f&&(!e||t),v=f||p,b=!s&&!e&&v,y=!s&&!e&&!v&&"interior-selection"===g;return{activeErrorDialog:{open:!a&&!!e&&A,showCloseButton:!t},interiorSelection:{open:b&&"interior-selection"===g&&A,presentation:b?"dialog":y?"screen":null,shouldRender:b||y},processingDialog:{open:!e&&!u&&!l&&o&&"processing-custom-interior"===r.step&&A},scene:{isLoading:o||!(SW(c)&&c.shadersReady),resetKey:r.sceneResetKey,shouldRender:m,shouldRenderDialog:m},surface:{usesSiblingDialogFlow:p},uploadErrorDialog:{open:!a&&!e&&!!u&&A}}}({activeError:e,canRecoverFromActiveError:K,floorFlow:{hasSceneSelection:B,sceneResetKey:T,step:R},hasDialogPortalContainer:s,hasRooms:l,isProcessingDialogClosingForError:N,isRoomScenePending:c,isViewerAccessPending:u,pendingUploadError:Q,sceneLoad:p,uploadError:j,viewerDialogOpen:g,viewerSurface:m});return{...er,activeErrorDialog:{...er.activeErrorDialog,onCancel:K?X:void 0,onOpenChange:ee,onTryAgain:"room-missing-surface"===e?Z:K?X:void 0,variant:e??W.current},customRooms:x,interiorSelection:{...er.interiorSelection,isInvalidFile:F,onOpenChange:$,onSelectRoom:S,onUploadFile:U,openFromScene:Y,uploadRetryRequestId:V},sourceRooms:f,processingDialog:{...er.processingDialog,isComplete:L,onCloseAnimationEnd:_,onOpenChange:er.surface.usesSiblingDialogFlow?d:void 0},step:R,uploadErrorDialog:{...er.uploadErrorDialog,onCancel:D,onOpenChange:et,onTryAgain:H,variant:P}}}({activeError:L,apiKey:s,baseURL:l,clearActiveError:g,closeMaterialSelection:H,glbUrl:o,handleAccessError:m,hasDialogPortalContainer:null!==S,hasRooms:c,isRoomScenePending:E,isViewerAccessPending:h,onViewerDialogOpenChange:B,resourceType:n,sceneLoad:C,source:u,sourceRooms:b,viewerDialogOpen:I,viewerSurface:M,widgetSession:d}),K=(0,ec.useRef)(null),J=!S1(W.scene.isLoading,K,{fadedOutIfMountedLoaded:!0}),Y=S1(W.scene.isLoading||!W.scene.shouldRender||!I,K),X=Eg(),{pending:Z,finish:$}=function(e,t,r){let[n,i]=(0,ec.useState)({open:e,pending:e&&t,sceneKey:r});n.open!==e?i({open:e,pending:e&&t,sceneKey:r}):n.sceneKey!==r?i({...n,sceneKey:r,pending:n.pending&&null===n.sceneKey}):n.pending&&!t&&i({...n,pending:!1});let a=(0,ec.useCallback)(()=>i(e=>({...e,pending:!1})),[]);return{pending:e&&n.pending,finish:a}}(I,CQ("(max-width: 639px)")&&"focus-resource"===Cz[n].introduction,W.scene.shouldRender?`${W.scene.resetKey}:${f??""}`:null),ee=X?.select,et=(0,ec.useCallback)(()=>{$(),ee?.("0,0")},[$,ee]),er=(0,ec.useMemo)(()=>Z?{ready:Y,target:y,onComplete:et,onCancel:$}:void 0,[Z,et,$,Y,y]),en=W.interiorSelection.openFromScene,ei=(0,ec.useCallback)(()=>{H(),en()},[H,en]),ea=(0,ec.useMemo)(()=>({isMaterialSelectionOpen:k,openMaterialSelection:j,closeMaterialSelection:H,onMaterialSelectionActionPointerDown:V,openInteriorSelection:ei}),[H,V,ei,j,k]),eo=(0,ec.useMemo)(()=>({isMaterialSelectionOpen:R,openMaterialSelection:q,closeMaterialSelection:H,openInteriorSelection:ei}),[H,ei,q,R]);(0,ec.useEffect)(()=>{if(k)return document.addEventListener("pointerdown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("pointerdown",e),document.removeEventListener("keydown",t)};function e(e){var t;(t=e.target)instanceof Element&&t.closest(`[${S5}], [${S8}]`)||T(!1)}function t(e){"Escape"===e.key&&T(!1)}},[k]);let es=W.surface.usesSiblingDialogFlow?S:w,eu=(0,el.jsxs)(el.Fragment,{children:[(0,el.jsx)("div",{className:"absolute inset-0 bg-constant-black","data-testid":"floor-scene-background-base"}),(0,el.jsx)("div",{"aria-hidden":!0,className:"absolute top-[-52px] right-[-1.36%] bottom-[-52px] left-[-1.36%] blur-[40px]","data-testid":"floor-blur-background",children:(0,el.jsx)("img",{crossOrigin:"anonymous",src:CH(v),alt:"",className:"block size-full max-w-none object-cover object-center opacity-50"})}),(0,el.jsxs)("div",{className:"pointer-events-none absolute top-0 right-0 left-0 z-20 flex min-h-22 items-start justify-between gap-4 bg-linear-to-b from-black/75 via-black/35 to-transparent px-4 pt-4 pb-8 text-constant-white sm:px-6 lg:min-h-25 lg:pt-6",children:[(0,el.jsx)("div",{className:"min-w-0 pt-1",children:N?(0,el.jsx)("h1",{"data-testid":"floor-scene-header-company",className:"typo-base-16 truncate font-medium lg:typo-base-18",children:N}):null}),(0,el.jsxs)("div",{className:"pointer-events-auto inline-flex shrink-0 items-center gap-2",children:[(0,el.jsxs)(CA,{type:"button",variant:"secondary","aria-label":t("floor.scene.share"),"data-neurodyn-room-viewer-share":"",disabled:!O||z,onClick:G,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,el.jsx)(C_,{className:"size-5"}),(0,el.jsx)("span",{className:"hidden lg:inline",children:t("floor.scene.share")})]}),(0,el.jsxs)(CA,{type:"button",variant:"secondary","aria-label":t("floor.scene.download"),"data-neurodyn-room-viewer-download":"",disabled:U,onClick:Q,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,el.jsx)(CM,{className:"size-5"}),(0,el.jsx)("span",{className:"hidden lg:inline",children:t("floor.scene.download")})]}),e&&(0,el.jsx)(Cm,{asChild:!0,children:(0,el.jsxs)(CA,{type:"button",variant:"secondary","aria-label":t("close"),className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,el.jsx)("span",{className:"hidden lg:inline",children:t("close")}),(0,el.jsx)(CS,{className:"!size-5"})]})})]})]}),(0,el.jsxs)("div",{className:"relative z-10 size-full min-h-0 min-w-0","data-testid":"floor-scene-viewport",children:[(0,el.jsx)(S$,{contentKey:W.scene.resetKey,introduction:er,captureRef:P,className:"relative z-10 size-full min-h-0"}),(0,el.jsx)("div",{"aria-hidden":!W.scene.isLoading,className:Ch("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",W.scene.isLoading?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),ref:K,"data-testid":"floor-scene-loader",style:{transitionDuration:W.scene.isLoading?"0ms":"250ms"},children:J&&(0,el.jsx)(CN,{variant:"logo"})})]}),(0,el.jsxs)("div",{className:"pointer-events-none absolute right-6 bottom-6 left-6 z-20 hidden items-end justify-between gap-4 lg:flex","data-testid":"floor-desktop-cards",children:[(0,el.jsx)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:(0,el.jsx)(M5,{actions:ea,band:"desktop",container:"leading"})}),(0,el.jsx)("div",{className:"pointer-events-auto",children:(0,el.jsx)(M5,{actions:ea,band:"desktop",container:"trailing"})})]}),(0,el.jsxs)("div",{className:"pointer-events-none absolute right-6 bottom-6 left-6 z-20 hidden items-end justify-between gap-2 sm:flex lg:hidden","data-testid":"floor-tablet-cards",children:[(0,el.jsx)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:(0,el.jsx)(M5,{actions:ea,band:"tablet",container:"leading"})}),(0,el.jsx)("div",{className:"pointer-events-auto grid w-[254px] gap-2",children:(0,el.jsx)(M5,{actions:ea,band:"tablet",container:"trailing"})})]}),(0,el.jsxs)("div",{className:"relative z-20 grid bg-background-containers text-text-dark shadow-[var(--shadow-login)] sm:hidden","data-testid":"floor-mobile-cards",children:[(0,el.jsx)("div",{className:"grid",children:(0,el.jsx)(M5,{actions:eo,band:"phone",container:"leading"})}),(0,el.jsx)("div",{className:"grid gap-4 bg-background-containers px-6 pt-4 pb-6","data-testid":"floor-mobile-bottom-actions",children:(0,el.jsx)(M5,{actions:eo,band:"phone",container:"trailing"})})]}),k&&!F&&(0,el.jsx)(Mc,{[S8]:!0,className:"absolute bottom-[152px] left-6 z-30 hidden max-h-[calc(100%-252px)] w-[348px] rounded-2xl bg-background-containers sm:flex lg:bottom-[132px] lg:max-h-[calc(100%-232px)]",gridClassName:"px-4 pb-4",titleClassName:"px-4 pt-4",onOpenChange:H}),(0,el.jsx)(Mu,{open:R&&!F,portalContainer:es,onOpenChange:D})]}),ed=W.interiorSelection.shouldRender?"dialog"===W.interiorSelection.presentation?(0,el.jsx)(S4,{open:W.interiorSelection.open,showCloseButton:e||W.scene.shouldRender,portalContainer:es,rooms:W.sourceRooms,customRooms:W.customRooms,selectedRoomId:v.id,isInvalidFile:W.interiorSelection.isInvalidFile,uploadRetryRequestId:W.interiorSelection.uploadRetryRequestId,onOpenChange:W.interiorSelection.onOpenChange,onSelectRoom:W.interiorSelection.onSelectRoom,onUploadFile:W.interiorSelection.onUploadFile}):"screen"===W.interiorSelection.presentation?(0,el.jsx)(S9,{rooms:W.sourceRooms,customRooms:W.customRooms,selectedRoomId:v.id,isInvalidFile:W.interiorSelection.isInvalidFile,uploadRetryRequestId:W.interiorSelection.uploadRetryRequestId,showCloseButton:e,onSelectRoom:W.interiorSelection.onSelectRoom,onUploadFile:W.interiorSelection.onUploadFile}):null:null,eh=(0,el.jsx)(Mp,{isComplete:W.processingDialog.isComplete,open:W.processingDialog.open,portalContainer:es,onCloseAnimationEnd:W.processingDialog.onCloseAnimationEnd,onOpenChange:W.processingDialog.onOpenChange}),ep=(0,el.jsxs)(el.Fragment,{children:[(0,el.jsx)(S2,{missingSurfaceMessage:i,variant:W.activeErrorDialog.variant,open:W.activeErrorDialog.open,portalContainer:es,showDialogCloseButton:e&&W.activeErrorDialog.showCloseButton,onOpenChange:W.activeErrorDialog.onOpenChange,onTryAgain:W.activeErrorDialog.onTryAgain,onCancel:W.activeErrorDialog.onCancel}),(0,el.jsx)(S2,{missingSurfaceMessage:i,variant:W.uploadErrorDialog.variant,open:W.uploadErrorDialog.open,portalContainer:es,onOpenChange:W.uploadErrorDialog.onOpenChange,onTryAgain:W.uploadErrorDialog.onTryAgain,onCancel:W.uploadErrorDialog.onCancel})]}),eA=(0,el.jsxs)("div",{ref:x,className:"relative grid size-full grid-rows-[minmax(0,1fr)_auto] overflow-hidden text-foreground sm:block","data-neurodyn-room-viewer-container":"","data-testid":"floor-viewer-root",children:[h?(0,el.jsx)("div",{className:"flex size-full items-center justify-center bg-radial from-background-containers to-background-base-2",children:(0,el.jsx)(CN,{variant:"logo"})}):W.scene.shouldRender?eu:null,!W.surface.usesSiblingDialogFlow&&ed,!W.surface.usesSiblingDialogFlow&&eh]});return W.surface.usesSiblingDialogFlow?(0,el.jsxs)(el.Fragment,{children:[(W.scene.shouldRenderDialog||h)&&(0,el.jsx)(Cf,{open:I,onOpenChange:B,children:(0,el.jsxs)(Cb,{className:"inset-0 h-dvh min-w-full max-w-none translate-x-0 translate-y-0 rounded-none border-none bg-transparent p-0 shadow-none sm:p-0 sm:max-w-none",contentInsideOverlay:!0,portalContainer:S,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,el.jsx)(Cw,{className:"sr-only",children:r}),(0,el.jsx)(Cx,{className:"sr-only"}),eA]})}),ed,eh,ep]}):(0,el.jsxs)(el.Fragment,{children:[eA,ep]})}function Im(e){return(0,el.jsx)(Ig,{...e})}let Iv={angle:0,rotation:0,isDragging:!1};function Ib(){let e=Iv,t=new Set;function r(r){return n=>{let i="function"==typeof n?n(e[r]):n;Object.is(i,e[r])||(e={...e,[r]:i},t.forEach(e=>e()))}}return{getState:()=>e,subscribe:e=>(t.add(e),()=>{t.delete(e)}),setAngle:r("angle"),setRotation:r("rotation"),setIsDragging:r("isDragging")}}let Iy=[];function Iw(e,t,r){if(t===r)return e;let n=new Set(t.map(e=>e.id)),i=new Set(r.map(e=>e.id)),a=e.filter(e=>!n.has(e.id)&&!i.has(e.id));return a.length>0?[...a,...r]:r}function Ix({children:e,src:t,tinuuid:r,roomId:n,type:i,viewerSurface:a,dialogPortalContainer:o=null,viewerDialogOpen:s=!0,onViewerDialogOpenChange:l,width:c,height:u,displayUnit:d,name:h,apiKey:p,baseURL:A,source:f,externalWidgetSession:g}){var m,v;let b=MN(d),y=function(){let{i18n:e}=tl();return"ru"===(e.resolvedLanguage??e.language)?"ru":"en"}(),w=EF(i),x=n?.trim()||void 0,C="panel-group"===Cz[i].manipulation,{offersSizeVariants:E}=Mi(i),S="floor-room-presets"===Cz[i].roomPresets?EP:ED,M=xD({apiKey:p,baseURL:A,source:f}),[I,B]=(0,ec.useState)(r),[k,T]=(0,ec.useState)(null),R=(0,ec.useCallback)(e=>{T(null),B(e)},[]),D=(0,ec.useCallback)(e=>{T(e),B(e)},[]),[P,_]=(0,ec.useState)(null),[L,F]=(0,ec.useState)(b[0].value),[N]=(0,ec.useState)(Ib),[O,Q]=(0,ec.useState)(null),[U,z]=(0,ec.useState)(()=>({layoutReady:!1,placementReady:!1,materialReady:"artwork-src"===w.materialSource,artifactsReady:!1,assetsReady:!1,prepareReady:!1,shadersReady:!1})),[G,H]=(0,ec.useState)(!1),[j,V]=(0,ec.useState)(null),[q,W]=(0,ec.useState)(null),K=(0,ec.useRef)(null),J=(0,ec.useRef)(!1),Y="object-glb"===w.materialSource,X="default"===f&&void 0!==p,Z=x_("wall-panel"===(m={apiKey:p,baseURL:A,source:f,resourceType:i}).resourceType?m:{...m,resourceType:void 0}),$=rW({queryKey:["room-viewer","activate",{apiKey:p??null,source:f,resourceType:i}],enabled:X,queryFn:({signal:e})=>x0(Z.query,{...Z.config,baseURL:A,headers:{"x-api-key":p},signal:e})},rS,void 0),ee=xL($.error),et=(0,ec.useMemo)(()=>{let e=$.data;return Cr(e?.widgetSession,{apiConfig:{baseURL:A,headers:{"x-api-key":p}}})},[$.data,p,A]),er=g instanceof Ct?g:null,en=g instanceof Ct?null:g,ei=en?.token,ea=en?.sid,eo=en?.expiresIn,es=(0,ec.useMemo)(()=>er||(Cr({token:ei,sid:ea,expiresIn:eo},{apiConfig:{baseURL:A,headers:{"x-api-key":p}}})??et),[et,p,A,er,ei,ea,eo]),eu="shopify"===f?null!==es:X&&$.isSuccess,ed=rW({queryKey:["room-viewer","rooms",{apiKey:(v={apiKey:p,baseURL:A,language:y,source:f,widgetSession:es,resourceType:i}).apiKey??null,language:v.language??null,source:v.source,resourceType:v.resourceType??null,widgetSessionId:v.widgetSession?.sid??null}],enabled:M&&eu,placeholderData:rs,queryFn:async({signal:e})=>{try{return await Cd({apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}catch(e){if(xL(e))throw e;return[]}}},rS,void 0),eh=M?ed.data??Iy:S,[ep,eA]=(0,ec.useState)(()=>({rooms:eh,sourceRooms:eh})),ef=(0,ec.useMemo)(()=>Iw(ep.rooms,ep.sourceRooms,eh),[ep.rooms,ep.sourceRooms,eh]),eg=(0,ec.useCallback)(e=>{eA(t=>{let r=Iw(t.rooms,t.sourceRooms,eh);return{rooms:"function"==typeof e?e(r):e,sourceRooms:eh}})},[eh]),[em,ev]=(0,ec.useState)(()=>x??S[0].id),[eb,ey]=(0,ec.useState)(x);eb!==x&&(ey(x),x&&(ev(x),z(e=>Sq(e,SK)),W(e=>CZ(e)?null:e)));let ew=ef.find(e=>e.id===em),ex=ew??ef[0]??S[0],eC="rotate-on-floor"===Cz[i].manipulation;(0,ec.useLayoutEffect)(()=>{x&&(N.setAngle(0),N.setRotation(0))},[x,N]),(0,ec.useEffect)(()=>{eC&&N.setRotation(0)},[eC,ex.id,N]);let eE=ef.length>0;!ew&&ef[0]&&em!==ef[0].id&&ev(ef[0].id);let eS=!X||$.isSuccess||$.isError&&null===ee,eM=rW({queryKey:Co(r??void 0,{apiKey:p,baseURL:A,language:y,source:f,resourceType:i}),enabled:eS&&Y&&null===P&&!!r,queryFn:async({signal:e})=>{if(!r)throw Error("Tinuuid is required.");return Cl(r,{apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}},rS,void 0),eI=rW({queryKey:Co(I??void 0,{apiKey:p,baseURL:A,language:y,source:f,resourceType:i}),enabled:eS&&Y&&!!I,placeholderData:rs,queryFn:async({signal:e})=>{if(!I)throw Error("Tinuuid is required.");return Cl(I,{apiKey:p,baseURL:A,language:y,signal:e,source:f,widgetSession:es,resourceType:i})}},rS,void 0),eB=eM.data??null,ek=eI.data??null,eT=eB?.materials?.[0]??null,eR=P?.native?.glbUrl??null,eD=xL(eM.error),eP=xL(ed.error),e_=M&&("shopify"===f?null===es||ed.isLoading:$.isSuccess&&ed.isLoading),eL=X&&$.isLoading||e_,eF=$.error&&null===ee?"viewer-load-failed":null,eN=eM.error&&null===eD?"viewer-load-failed":null,eO="artwork-src"===w.materialSource&&("string"!=typeof t||0===t.trim().length)?"artwork-load-failed":null,eQ=Y&&!eL&&(!r||eM.isSuccess&&null===eT||null!==P&&null===eR)?"viewer-load-failed":null,eU=null!==k&&k===I&&(eI.isError||eI.isSuccess&&ek?.tinuuid===I&&!ek.materials?.[0]?.native?.glbUrl)?"viewer-load-failed":null,ez=rY({queries:Ms({apiKey:p,baseURL:A,language:y,source:f,widgetSession:es}).map(e=>({...e,enabled:w.hasPictureFrame&&eS&&!eL}))}),eG=ez[0]?.data??null,eH=j??ee??eP??eD,ej=q??eU??eF??eN??eQ??eO,eV=(0,ec.useCallback)(e=>{z(t=>Sq(t,e))},[]);(0,ec.useEffect)(()=>{if("dialog"!==a||!s){J.current=!1;return}J.current||es&&(Cn(es,"widget_opened"),J.current=!0)},[s,a,es]),(0,ec.useEffect)(()=>{Y&&(R(r),_(null),V(null),W(null))},[r,R,Y]),(0,ec.useEffect)(()=>{V(null),W(null)},[p,f]),(0,ec.useEffect)(()=>{Y&&eB&&null===P&&_(eT)},[P,eT,eB,Y]),(0,ec.useEffect)(()=>{let e=eG?.materials?.[0],t=eG?.tinuuid;null===P&&e&&t&&(_(e),R(t))},[eG,P,R]),(0,ec.useEffect)(()=>{if(!Y||!E&&!C&&k!==I||null===ek||ek.tinuuid!==I)return;let e=ek.materials?.[0];if(!e)return;let t=ek.materials?.some(e=>e===P||!!e.hid&&e.hid===P?.hid);if(k===I){T(null),_(e);return}(!t||C)&&P!==e&&_(e)},[C,P,E,ek,I,Y,k]);let eq=(0,ec.useMemo)(()=>({type:i,name:h,width:c,height:u,displayUnit:d}),[i,h,c,u,d]),eW=(0,ec.useMemo)(()=>({viewerSurface:a,dialogPortalContainer:o,viewerDialogOpen:s,onViewerDialogOpenChange:l}),[a,o,s,l]),eK=(0,ec.useMemo)(()=>({rooms:ef,sourceRooms:eh,setRooms:eg,room:ex,initialRoomId:x,setRoomId:ev}),[ef,ex,x,eg,eh]),eJ=(0,ec.useMemo)(()=>({src:t,glbUrl:eR,tinuuid:I,embeddedObject:eB,selectedObject:ek,material:P,setTinuuid:R,selectResourceVariant:D,setMaterial:_,apiKey:p,baseURL:A,language:y,source:f,widgetSession:es,hasRooms:eE,isViewerAccessPending:eL,accessError:eH,setAccessError:V,loadError:ej,setLoadError:W}),[t,eR,I,eB,ek,P,R,D,p,A,y,f,es,eE,eL,eH,ej]),eY=(0,ec.useMemo)(()=>({setContainerRef:Q,resourceRef:K,sceneGestures:N,patchSceneLoad:eV,setIsRoomScenePending:H}),[eV,N]),eX=(0,ec.useMemo)(()=>({...eY,containerRef:O,sceneLoad:U,isRoomScenePending:G}),[eY,O,U,G]),eZ=(0,ec.useMemo)(()=>({matting:L,setMatting:F}),[L]);return(0,el.jsx)(C$,{value:eq,children:(0,el.jsx)(C0,{value:eW,children:(0,el.jsx)(C1,{value:eK,children:(0,el.jsx)(C2,{value:eJ,children:(0,el.jsx)(C9,{value:eY,children:(0,el.jsx)(C3,{value:eX,children:(0,el.jsx)(C4,{value:eZ,children:(0,el.jsx)(Ef,{children:e})})})})})})})})}let IC={poster:"wallart",carpet:"rugs"};function IE(e){return"poster"===e||"carpet"===e}i9.gPd.DEFAULT_ANISOTROPY=4;let IS=new r1({defaultOptions:{queries:{gcTime:1/0,refetchOnMount:!1,refetchOnReconnect:!1,refetchOnWindowFocus:!1,retry:(e,t)=>{let r=function(e){if(iY(e))return e.response?.status}(t);return(void 0===r||!(r>=400)||!(r<500))&&e<2}}}});function IM({type:e,src:t,tinuuid:r,roomId:n,name:i,height:a,width:o,language:s,dimensionUnit:l="m",displayUnit:c="cm",apiKey:u,source:d="default",showDialogCloseButton:h=!1,viewerSurface:p="inline",dialogPortalContainer:A=null,viewerDialogOpen:f=!0,onViewerDialogOpenChange:g,widgetSession:m}){let{i18n:v}=tl(),b=u?.trim()||void 0,y=r?.trim()||void 0,w=IE(e)?IC[e]:e,x=EF(w).takesDimensionProps?function(e,t,r="m"){return{width:ML(e??0,r),height:ML(t??0,r)}}(o,a,l):null;return(0,ec.useEffect)(()=>{IE(e)&&IC[e]},[e]),(0,ec.useEffect)(()=>{"string"==typeof s&&v.changeLanguage(s)},[v,s]),(0,el.jsx)(rF,{client:IS,children:(0,el.jsx)(Ix,{src:t??null,tinuuid:y??null,roomId:n,type:w,viewerSurface:p,dialogPortalContainer:A,viewerDialogOpen:f,onViewerDialogOpenChange:g,name:i,width:x?.width??0,height:x?.height??0,displayUnit:c,apiKey:b,baseURL:"shopify"===d?xT:void 0,source:d,externalWidgetSession:m,children:(0,el.jsx)(Im,{showDialogCloseButton:h})})})}function II({type:e,src:t,tinuuid:r,roomId:n,width:i,height:a,dimensionUnit:o,displayUnit:s,name:l,language:c,apiKey:u,source:d,widgetSession:h,disableClose:p=!1,open:A,defaultOpen:f,onOpenChange:g}){let[m,v]=(0,ec.useState)(null),[b,y]=(0,ec.useState)(f??!1),w=A??b,[x,C]=(0,ec.useState)(w),E=w||x;(0,ec.useEffect)(()=>{w&&C(!0)},[w]);let S=Es({disableClose:p,onOpenChange:g,open:A}),M=(0,ec.useCallback)(e=>{let{disableClose:t,onOpenChange:r,open:n}=S.current;(e||!t)&&(void 0===n&&y(e),r?.(e))},[S]),I=(0,el.jsx)(IM,{type:e,src:t,tinuuid:r,roomId:n,name:l,height:a,width:i,dimensionUnit:o,displayUnit:s,language:c,apiKey:u,source:d,widgetSession:h,showDialogCloseButton:!p,viewerSurface:"dialog",dialogPortalContainer:m,viewerDialogOpen:w,onViewerDialogOpenChange:M});return(0,el.jsxs)(el.Fragment,{children:[(0,ed.createPortal)((0,el.jsx)("style",{children:xE.A}),document.head),(0,ed.createPortal)((0,el.jsxs)(tB.div,{"data-neurodyn-room-viewer-root":"",style:{display:"block",letterSpacing:"normal",position:"relative",zIndex:0x7fffffff},children:[(0,el.jsx)("style",{children:":host{display:block!important;visibility:visible!important}"}),(0,el.jsx)("style",{children:xk}),(0,el.jsx)("div",{ref:v}),m&&(0,el.jsx)(xC,{root:m,storageKey:"neurodyn-theme",defaultTheme:"light",children:(0,el.jsx)(tc,{i18n:xM,children:E&&I})})]}),document.body)]})}xq({baseURL:"https://api.neurodyn.ai/"});let IB=0;class Ik{container=null;props=null;root=null;openState=!1;destroy(){this.root?.unmount(),this.root=null,this.container?.remove(),this.container=null,this.props=null,this.openState=!1}open(e){this.props=e,this.openState=!0,this.render()}handleOpenChange=e=>{this.openState=e,this.render()};ensureRoot(){return this.root||(this.container=document.createElement("div"),this.container.id=`neurodyn-room-viewer-dialog-root-${IB++}`,document.body.appendChild(this.container),this.root=(0,fC.createRoot)(this.container)),this.root}render(){this.props&&this.ensureRoot().render((0,ec.createElement)(II,{...this.props,onOpenChange:this.handleOpenChange,open:this.openState}))}}function IT(e,t,r){return{kind:"attribute",name:e,parse:t.parse,values:t.values,...r}}function IR(e){return{kind:"option",reason:e}}function ID(){return{parse:e=>e??void 0}}function IP(){return{parse:e=>e?Number(e):void 0}}function I_(e){return{parse:t=>e.includes(t??"")?t:void 0,values:e}}let IL={prefix:"data-neurodyn-room-viewer-",markers:[{name:"data-neurodyn-room-viewer-dialog",description:"Marks an element for the embed build."}],fields:{type:IT("type",{parse:e=>e??void 0,values:["wallart","rugs","flooring","wall-panel"]},{required:!0,description:"Resource type."}),src:IT("src",ID(),{required:{when:"type",is:["wallart"]},description:"Wall-art image URL."}),tinuuid:IT("tinuuid",ID(),{required:{when:"type",is:["rugs","flooring","wall-panel"]},description:"The object's tinuuid."}),roomId:IT("room-id",ID(),{required:!1,description:"Initial Room ID from the available catalog. Skips the initial interior chooser; unavailable Rooms open the chooser. Empty values do nothing."}),name:IT("name",ID(),{required:!0,description:"Title shown in the dialog header."}),width:IT("width",IP(),{required:!1,description:"Wall-art width. Used when `type` is `wallart`."}),height:IT("height",IP(),{required:!1,description:"Wall-art height. Used when `type` is `wallart`."}),dimensionUnit:IT("dimension-unit",I_(["m","cm","in"]),{required:!1,defaultValue:"`m`",description:"Unit used by wall-art width and height."}),displayUnit:IT("display-unit",I_(["cm","in"]),{required:!1,defaultValue:"`cm`",description:"Unit used to display UI measurements."}),language:IT("language",I_(["en","ru"]),{required:!1,defaultValue:"User locale",description:"UI language override."}),apiKey:IT("api-key",ID(),{required:!0,description:"Public API key sent as `x-api-key`. Not needed when `source` is `shopify`."}),source:IT("source",I_(["default","shopify"]),{required:!1,defaultValue:"`default`",description:"Backend source mode."}),disableClose:IT("disable-close",{parse:e=>"true"===e},{required:!1,defaultValue:"`false`",description:"Set to `true` to hide close controls and prevent dismissal."}),widgetSession:IR("An existing Widget Session handed over by an embedding surface such as Shopify."),open:IR("The embed build owns the open state."),defaultOpen:IR("The embed build owns the open state."),onOpenChange:IR("The embed build owns the open state.")}};class IF{renderer=new Ik;triggers;props;destroyed=!1;constructor(e,t={}){for(const r of(this.triggers="string"==typeof e?Array.from(document.querySelectorAll(e)):[e],this.props=t,this.triggers))r.addEventListener("click",this.handleClick)}destroy(){if(!this.destroyed){for(let e of(this.destroyed=!0,this.triggers))e.removeEventListener("click",this.handleClick);this.renderer.destroy()}}handleClick=e=>{!this.destroyed&&e.currentTarget instanceof Element&&this.renderer.open(function(e,t={}){let r=function(e,t,r={}){let n={};for(let[i,a]of Object.entries(t.fields).filter(e=>"attribute"===e[1].kind)){let o=`${t.prefix}${a.name}`,s=r[i];if(void 0!==s){n[i]=a.normalizesOptions?a.parse(s,{attribute:o}):s;continue}n[i]=a.parse(function(e,t,r=[]){let n=e.getAttribute(t);if(0===r.length||n?.trim())return n;for(let t of r){let r=e.getAttribute(t);if(r?.trim())return r}return n}(e,o,a.legacyNames),{attribute:o})}return n}(e,IL,t);return{...r,type:r.type,name:r.name}}(e.currentTarget,this.props))}}window.RoomViewerDialog=IF})()})();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@neurodyn/room-viewer",
3
3
  "type": "module",
4
- "version": "0.1.0",
4
+ "version": "0.1.1",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -26,7 +26,7 @@
26
26
  "dependencies": {
27
27
  "react": "^19.2.0",
28
28
  "react-dom": "^19.2.0",
29
- "@neurodyn/react-room-viewer": "0.0.34"
29
+ "@neurodyn/react-room-viewer": "0.0.35"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@google/model-viewer": "4.2.0",