@neurodyn/room-viewer 0.0.16 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  Room Viewer integration for JavaScript applications.
4
4
 
5
+ ## Viewer container
6
+
7
+ For wall art, rugs and flooring, `[data-neurodyn-room-viewer-container]` identifies the
8
+ existing scene and interface container inside the widget's open shadow root:
9
+
10
+ ```js
11
+ const root = document.querySelector('[data-neurodyn-room-viewer-root]')
12
+ const container = root?.shadowRoot?.querySelector('[data-neurodyn-room-viewer-container]')
13
+ ```
14
+
15
+ Query after the viewer appears and query again if it is recreated. Consumers
16
+ manage the content they append, including its styles and positioning. Page CSS
17
+ does not cross the shadow boundary. For wall art, the marker is also present on
18
+ the error-state container.
19
+
5
20
  ## Documentation
6
21
 
7
22
  - [Overview](https://developer.vizbl.com/docs/room-viewer)
@@ -7547,4 +7547,4 @@ Defaulting to \`null\`.`));let u=VO(a,c)?a:null,d=VN(u)?o(u,c):void 0;return(0,t
7547
7547
  `);if(n.includes("#include <output_fragment>")){e.fragmentShader=n.replace("#include <output_fragment>",`${r}
7548
7548
  #include <output_fragment>`);return}e.fragmentShader=n.replace("#include <opaque_fragment>",`${r}
7549
7549
  #include <opaque_fragment>`)}(n,t)},e.customProgramCacheKey=()=>`${n()}|neurodyn-room-scene-v2`,e.needsUpdate=!0,()=>{e.onBeforeCompile=r,e.customProgramCacheKey=n,e.side=i,e.transparent=a,e.alphaToCoverage=s,e.needsUpdate=!0}}function Wh(e,t,r){let n=e.clone().sub(t).applyQuaternion(r);return Math.atan2(n.y,n.x)}let Wp={excludeFromCapture:!0};function WA({resourceBounds:e}){let{resourceRef:t,rotation:r,setIsDragging:n,setRotation:i}=VZ(),a=Ut("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAYAAAB/HSuDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2NmOSwgMjAyNC8wNy8xNi0xMjozOTowNCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI2LjAgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjYxMUY4MDQ3RTJDMTFGMTlCMkNBN0Y1RDJDNzNDQzYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjYxMUY4MDU3RTJDMTFGMTlCMkNBN0Y1RDJDNzNDQzYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNjExRjgwMjdFMkMxMUYxOUIyQ0E3RjVEMkM3M0NDNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNjExRjgwMzdFMkMxMUYxOUIyQ0E3RjVEMkM3M0NDNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PiAtRloAAIYkSURBVHja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"),s=(0,ty.useRef)(null),o=(0,ty.useMemo)(()=>{let t,r;return r=1.15*Math.max((t=e.getSize(new vD)).x,t.y),{positionZ:e.min.z-.001*r,side:r}},[e]);(0,ty.useLayoutEffect)(()=>{a.colorSpace="srgb",a.needsUpdate=!0},[a]);let l=e=>{if(!s.current)return;e.stopPropagation();let{pointerId:t,pointerTarget:r}=s.current;r.hasPointerCapture(t)&&r.releasePointerCapture(t),s.current=null,n(!1)};return o.side<=0?null:(0,tb.jsxs)("mesh",{"position-z":o.positionZ,userData:Wp,onPointerCancel:l,onPointerDown:e=>{var i;let a=t.current;if(!a||(i=e.object,e.intersections.map(e=>e.object)[0]!==i))return;e.stopPropagation(),e.nativeEvent.stopPropagation();let o=e.target;o.setPointerCapture(e.pointerId),a.updateWorldMatrix(!0,!1);let l=a.getWorldQuaternion(new vR),c=a.getWorldPosition(new vD),u=new vD(0,0,1).applyQuaternion(l);s.current={center:c,initialPoint:e.point.clone(),initialRotation:r,plane:new w_().setFromNormalAndCoplanarPoint(u,c),pointerId:e.pointerId,pointerTarget:o,surfaceQuaternion:l},n(!0)},onPointerMove:e=>{let t=s.current;if(!t)return;e.stopPropagation();let r=e.ray.intersectPlane(t.plane,new vD);r&&i(function({center:e,currentPoint:t,initialPoint:r,initialRotation:n,surfaceQuaternion:i}){let a=i.clone().invert(),s=Wh(r,e,a),o=Wh(t,e,a);return((n+vT.radToDeg(o-s)+180)%360+360)%360-180}({...t,currentPoint:r}))},onPointerUp:l,children:[(0,tb.jsx)("planeGeometry",{args:[o.side,o.side]}),(0,tb.jsx)("meshBasicMaterial",{map:a,transparent:!0,depthWrite:!1,side:2,toneMapped:!1})]})}let Wf=Math.PI/2;function Wg(e){let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId)}function Wm({glbUrl:e,position:t,quaternion:r,materialPatch:n}){let{type:i}=VJ(),{resourceRef:a,rotation:s,setIsDragging:o}=VZ(),l=U3(e),{sceneInstance:c,materials:u,resourceBounds:d}=(0,ty.useMemo)(()=>{let e,t=l.scene.clone(!0),r=(e=new Set,t.traverse(t=>{if(!t.isMesh||!t.material)return;if(Array.isArray(t.material)){t.material=t.material.map(t=>{let r=t.clone();return e.add(r),r});return}let r=t.material.clone();e.add(r),t.material=r}),Array.from(e)),n=new bq().setFromObject(t).applyMatrix4(new v2().makeRotationX(Wf));return{sceneInstance:t,materials:r,resourceBounds:n}},[l]),h=(0,ty.useMemo)(()=>vT.degToRad(s),[s]);return(0,ty.useLayoutEffect)(()=>{let e=u.map(e=>Wd(e,n));return()=>{e.forEach(e=>e())}},[u,n]),(0,tb.jsx)("group",{ref:a,position:t,quaternion:r,onPointerDown:e=>{e.nativeEvent.stopPropagation(),e.target.setPointerCapture(e.pointerId),o(!0)},onPointerUp:e=>{Wg(e),o(!1)},onPointerCancel:e=>{Wg(e),o(!1)},children:(0,tb.jsxs)("group",{"rotation-z":h,children:["rugs"===i?(0,tb.jsx)(WA,{resourceBounds:d}):null,(0,tb.jsx)("group",{"rotation-x":Wf,children:(0,tb.jsx)("primitive",{object:c})})]})})}function Wv(){let{room:e}=VY(),t=Qx(e=>e.scene),r=QS(Ex,e.image_url);return(0,ty.useLayoutEffect)(()=>(r.colorSpace="srgb",t.background=r,()=>{t.background===r&&(t.background=null)}),[t,r]),null}function Wb({plane:e,geometry:t,setPlaneRef:r}){return(0,tb.jsx)("mesh",{ref:t=>r(e,t),geometry:t,userData:{planeId:e.id,kind:e.kind},children:(0,tb.jsx)("meshBasicMaterial",{visible:!1,side:2})})}function Wy(e,t){(0,ty.useLayoutEffect)(()=>{let r=e.current;if(r)return Wd(r,t)},[e,t])}let Ww=[1,1,1];function Wx({node:e,position:t,scale:r=Ww,uvScale:n,materialPatch:i}){let a=(0,ty.useRef)(null);return(0,ty.useEffect)(()=>{if(!a.current||void 0===n)return;let t=a.current.geometry.attributes.uv,r=e.geometry.attributes.uv.array;for(let e=0;e<t.count;e++){let i=r[2*e],a=r[2*e+1];t.setXY(e,i*n,a)}t.needsUpdate=!0},[n,e.geometry]),(0,ty.useLayoutEffect)(()=>{let e=a.current?.material;if(!e)return;let t=(Array.isArray(e)?e:[e]).map(e=>Wd(e,i));return()=>{t.forEach(e=>e())}},[i,e]),(0,tb.jsx)(U5,{ref:a,object:e,position:t,scale:r})}function WC({width:e,height:t,materialPatch:r}){let{material:n}=VX(),{nodes:i}=U3(n?.native?.glbUrl),a=(0,ty.useMemo)(()=>{let e=new vD,t={};["vizbl0","vizbl1","vizbl2","vizbl3","vizbl4","vizbl5","vizbl6","vizbl7"].forEach(r=>{let n=i[r];if(!n?.geometry)return;let a=n.clone();a.geometry=n.geometry.clone(),Array.isArray(n.material)?a.material=n.material.map(e=>e.clone()):n.material&&(a.material=n.material.clone()),a.updateMatrixWorld(!0),a.geometry.applyMatrix4(a.matrixWorld),a.position.set(0,0,0),a.rotation.set(0,0,0),a.scale.set(1,1,1),a.updateMatrixWorld(!0),a.geometry.computeBoundingBox(),a.geometry.boundingBox&&(a.geometry.boundingBox.getCenter(e),a.geometry.translate(-e.x,-e.y,-e.z)),a.geometry.computeBoundingBox(),t[r]=a});let r=t.vizbl0;if(!r?.geometry)throw Error("Corner mesh not found");let n=r.geometry.boundingBox,a=n.max.x-n.min.x,s=n.max.y-n.min.y,o={top:0,bottom:0,left:0,right:0},l={top:0,bottom:0,left:0,right:0},c=t.vizbl1;if(c?.geometry){let e=c.geometry.boundingBox;o.top=e.max.x-e.min.x,l.top=e.max.y-e.min.y}let u=t.vizbl3;if(u?.geometry){let e=u.geometry.boundingBox;o.right=e.max.y-e.min.y,l.right=e.max.x-e.min.x}let d=t.vizbl5;if(d?.geometry){let e=d.geometry.boundingBox;o.bottom=e.max.x-e.min.x,l.bottom=e.max.y-e.min.y}let h=t.vizbl7;if(h?.geometry){let e=h.geometry.boundingBox;o.left=e.max.y-e.min.y,l.left=e.max.x-e.min.x}return{cornerSize:{width:a,height:s},barLengths:o,barThickness:l,normalizedNodes:t}},[i]),s=e-2*a.cornerSize.width+.002,o=t-2*a.cornerSize.height+.002,l=s/a.barLengths.top,c=s/a.barLengths.bottom,u=o/a.barLengths.left,d=o/a.barLengths.right;return(0,tb.jsxs)("group",{children:[(0,tb.jsx)(Wx,{node:a.normalizedNodes.vizbl0,position:[-e/2+a.cornerSize.width/2-.001,t/2-a.cornerSize.height/2+.001,0],materialPatch:r}),(0,tb.jsx)(Wx,{node:a.normalizedNodes.vizbl1,position:[0,t/2-a.barThickness.top/2+.001,0],scale:[l,1,1],uvScale:l,materialPatch:r}),(0,tb.jsx)(Wx,{node:a.normalizedNodes.vizbl2,position:[e/2-a.cornerSize.width/2+.001,t/2-a.cornerSize.height/2+.001,0],materialPatch:r}),(0,tb.jsx)(Wx,{node:a.normalizedNodes.vizbl3,position:[e/2-a.barThickness.right/2+.001,0,0],scale:[1,d,1],uvScale:d,materialPatch:r}),(0,tb.jsx)(Wx,{node:a.normalizedNodes.vizbl4,position:[e/2-a.cornerSize.width/2+.001,-t/2+a.cornerSize.height/2-.001,0],materialPatch:r}),(0,tb.jsx)(Wx,{node:a.normalizedNodes.vizbl5,position:[0,-t/2+a.barThickness.bottom/2-.001,0],scale:[c,1,1],uvScale:c,materialPatch:r}),(0,tb.jsx)(Wx,{node:a.normalizedNodes.vizbl6,position:[-e/2+a.cornerSize.width/2-.001,-t/2+a.cornerSize.height/2-.001,0],materialPatch:r}),(0,tb.jsx)(Wx,{node:a.normalizedNodes.vizbl7,position:[-e/2+a.barThickness.left/2-.001,0,0],scale:[1,u,1],uvScale:u,materialPatch:r})]})}function WE({width:e,height:t,position:r,quaternion:n,materialPatch:i}){let a=(0,ty.useRef)(null);return Wy(a,i),(0,tb.jsxs)("mesh",{position:r,quaternion:n,children:[(0,tb.jsx)("planeGeometry",{args:[e,t]}),(0,tb.jsx)("meshStandardMaterial",{ref:a,color:"white"})]})}function WS({src:e,position:t,quaternion:r,materialPatch:n}){let{width:i,height:a}=VJ(),{material:s}=VX(),{frameWidth:o,matting:l}=V$(),{angle:c,rotation:u,resourceRef:d,setIsDragging:h}=VZ(),p=QS(Ex,e),A=(0,ty.useRef)(null),f=(0,ty.useMemo)(()=>vT.degToRad(c),[c]),g=(0,ty.useMemo)(()=>vT.degToRad(u),[u]);Wy(A,n);let m=i+2*l,v=a+2*l,b=l>0?m:i,y=l>0?v:a;return(0,tb.jsx)("group",{ref:d,position:t,quaternion:r,onPointerDown:()=>h(!0),onPointerUp:()=>h(!1),onPointerLeave:()=>h(!1),children:(0,tb.jsxs)("group",{rotation:[0,g,f],children:[s?.native?.glbUrl&&o>0&&(0,tb.jsx)(WC,{width:b,height:y,materialPatch:n}),l>0&&(0,tb.jsx)(WE,{width:m,height:v,position:[0,0,.01],materialPatch:n}),(0,tb.jsxs)("mesh",{position:[0,0,.02],children:[(0,tb.jsx)("planeGeometry",{args:[i,a]}),(0,tb.jsx)("meshStandardMaterial",{ref:A,map:p})]})]})})}function WM(){let{placement:e}=VJ(),{src:t,glbUrl:r,setLoadError:n}=VX(),{room:i}=VY(),{patchSceneLoad:a}=VZ(),{gl:s,size:o,camera:l,invalidate:c,raycaster:u,pointer:d}=Qx(),h=(0,ty.useMemo)(()=>i.scene??qL(),[i.scene]),[p,A]=QS(Ex,[h.planeIds.dataPng,h.shading?.dataPng??"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGNoaGgAAAMEAYFL09IQAAAAAElFTkSuQmCC"]),f=function({camera:e,invalidate:t,pointer:r,raycaster:n,roomId:i,scene:a,placement:s}){let o=`${i}:${s}`,l=(0,ty.useMemo)(()=>({value:0}),[]),[c,u]=(0,ty.useReducer)(Wc,o,Wl),d=(0,ty.useRef)(null),h=(0,ty.useRef)(new Map),p=(0,ty.useRef)(null),A=c.placementKey===o?c.planeIdMap:null,f=c.placementKey===o?c.resourcePose:null,g=(0,ty.useMemo)(()=>a.planes.filter(e=>"floor"===s?"floor"===e.kind:"floor"!==e.kind),[a,s]),m=(0,ty.useMemo)(()=>g.map(e=>e.id),[g]),v=(0,ty.useMemo)(()=>new Map(a.planes.map(e=>{let t,r;return[e.id,(t=e.polygon3D.flatMap(e=>(function(e,t){let[r,n,i]=e;return[r*(q7(t)*(t.camera.fx/t.camera.fy)),i,-n]})(e,a)),(r=new yS).setAttribute("position",new yp(t,3)),e.polygon3D.length>=4&&r.setIndex([0,1,2,0,2,3]),r)]})),[a]),b=(0,ty.useMemo)(()=>({artifactsReady:null!==A,placementReady:null!==f,prepareReady:null!==f}),[A,f]),y=(0,ty.useCallback)((e,t)=>{t?h.current.set(e.id,t):h.current.delete(e.id)},[]);(0,ty.useEffect)(()=>{let e=!1;return u({type:"reset-plane-id-map",placementKey:o}),We(a.planeIds.dataPng,a.planeIds.width,a.planeIds.height).then(t=>{e||u({type:"set-plane-id-map",placementKey:o,planeIdMap:t})}).catch(t=>{console.error(t),e||u({type:"reset-plane-id-map",placementKey:o})}),()=>{e=!0}},[o,a.planeIds]),(0,ty.useEffect)(()=>{u({type:"reset-placement",placementKey:o}),d.current=null,l.value=0,p.current=null},[l,o]);let w=(0,ty.useCallback)((r,n,i=null)=>{let a,c=Wo(r,n,e,s),h=i?(a=new vD(...i).applyQuaternion(new vR(...c.quaternion)).add(new vD(...c.position)),{...c,position:a.toArray()}):c;d.current=h.activePlaneId,l.value=h.activePlaneId,u({type:"set-resource-pose",placementKey:o,resourcePose:h}),t()},[l,e,t,o,s]),x=(0,ty.useCallback)(t=>A?function({activePlaneId:e,allowedPlaneIds:t,camera:r,planeIdMap:n,planeMap:i,pointer:a,raycaster:s}){let o=new Set(t),l=[],c=new Set,u=e=>{!(null===e||c.has(e))&&o.has(e)&&(c.add(e),l.push(e))};for(let o of(u(function(e,t){let r=Math.floor((e.x+1)*.5*t.width),n=Math.floor((1-e.y)*.5*t.height);if(r<0||n<0||r>=t.width||n>=t.height)return null;let i=t.data[n*t.width+r]??0;return i>0?i:null}(a,n)),u(e),t.forEach(u),s.setFromCamera(a,r),l)){let e=i.get(o),t=e?s.intersectObject(e,!1)[0]:null;if(t)return t}return null}({activePlaneId:d.current,allowedPlaneIds:m,camera:e,planeIdMap:A,planeMap:h.current,pointer:t,raycaster:n}):null,[m,e,A,n]);(0,ty.useEffect)(()=>{if(!A||null!==f)return;let r=function({allowedPlanes:e,camera:t,planeMap:r,placement:n}){let i=e[0],a=i?r.get(i.id):null;return a?Wo(a,function(e){let t=e.geometry.attributes.position,r=new vD;for(let e=0;e<t.count;e++)r.add(new vD(t.getX(e),t.getY(e),t.getZ(e)));return r.divideScalar(Math.max(1,t.count))}(a),t,n):null}({allowedPlanes:g,camera:e,planeMap:h.current,placement:s});r&&(d.current=r.activePlaneId,l.value=r.activePlaneId,u({type:"set-resource-pose",placementKey:o,resourcePose:r}),t())},[l,g,e,t,o,A,f,s]);let C=(0,ty.useCallback)(()=>{let t,n=x(r);if(!n||!f){p.current=null;return}let i=Wo(n.object,n.point,e,s);t=new vR(...i.quaternion).invert(),p.current=new vD(...f.position).sub(new vD(...i.position)).applyQuaternion(t).toArray()},[e,x,s,r,f]);return{activePlaneIdUniform:l,handleDrag:(0,ty.useCallback)(()=>{let e=x(r);e&&w(e.object,e.point,p.current)},[x,r,w]),handleDragEnd:(0,ty.useCallback)(()=>{p.current=null},[]),handleDragStart:C,planeGeometries:v,readiness:b,resourcePose:f,setPlaneRef:y}}({camera:l,invalidate:c,pointer:d,raycaster:u,roomId:i.id,scene:h,placement:e}),g=(0,ty.useMemo)(()=>new vk(1,1),[]),m=(0,ty.useMemo)(()=>new vk(h.planeIds.width,h.planeIds.height),[h.planeIds.height,h.planeIds.width]),v=(0,ty.useMemo)(()=>({planeIdsTexture:p,shadingTexture:A,planeIdsSize:m,viewport:g,activePlaneIdUniform:f.activePlaneIdUniform}),[f.activePlaneIdUniform,m,p,A,g]);(0,ty.useLayoutEffect)(()=>{l instanceof EN&&(l.fov=h.camera.fovYDeg),l.position.set(0,0,0),l.up.set(0,0,1),l.lookAt(0,1,0),l.updateProjectionMatrix(),c()},[l,c,h.camera.fovYDeg]),(0,ty.useLayoutEffect)(()=>{p.minFilter=1003,p.magFilter=1003,p.wrapS=1001,p.wrapT=1001,p.generateMipmaps=!1,p.needsUpdate=!0,A.minFilter=1006,A.magFilter=1006,A.wrapS=1001,A.wrapT=1001,A.generateMipmaps=!1,A.needsUpdate=!0},[p,A]),(0,ty.useLayoutEffect)(()=>{s.getDrawingBufferSize(g),g.set(Math.max(1,g.x),Math.max(1,g.y))},[s,o.height,o.width,g]);let{artifactsReady:b,placementReady:y,prepareReady:w}=f.readiness;return(0,ty.useEffect)(()=>{a({artifactsReady:b,placementReady:y,prepareReady:w})},[b,a,y,w]),(0,tb.jsxs)(tb.Fragment,{children:["floor"===e?f.resourcePose&&r&&(0,tb.jsx)(z5,{autoTransform:!1,onDrag:f.handleDrag,onDragEnd:f.handleDragEnd,onDragStart:f.handleDragStart,children:(0,tb.jsx)(Wm,{glbUrl:r,position:f.resourcePose.position,quaternion:f.resourcePose.quaternion,materialPatch:v})}):f.resourcePose&&t&&(0,tb.jsx)(Wn,{onError:()=>n("artwork-load-failed"),children:(0,tb.jsx)(z5,{autoTransform:!1,onDrag:f.handleDrag,onDragEnd:f.handleDragEnd,onDragStart:f.handleDragStart,children:(0,tb.jsx)(WS,{src:t,position:f.resourcePose.position,quaternion:f.resourcePose.quaternion,materialPatch:v})})}),h.planes.map(e=>(0,tb.jsx)(Wb,{plane:e,geometry:f.planeGeometries.get(e.id),setPlaneRef:f.setPlaneRef},e.id)),(0,tb.jsx)(Wn,{onError:()=>n("room-load-failed"),children:(0,tb.jsx)(Wv,{})})]})}async function WB(e,t={}){let{client:r=jq,...n}=t;return(await r({method:"POST",url:"/layout/GetConfig",data:e,...n})).data}let WI=["room-viewer","layout-config"];function WT(){var e;let t=n$({queryKey:WI,queryFn:()=>WB(),staleTime:1/0},nN,void 0);if(t.isPending)return null;let r=(e=t.data,e?.internal?.links?.find(e=>"hdr_neutral"===e.type)?.url?.trim()||void 0);return(0,tb.jsx)(Gj,{files:r?[r]:void 0,preset:r?void 0:"warehouse"})}function Wk({placement:e}){return"floor"===e?(0,tb.jsx)(WT,{}):(0,tb.jsx)(Gj,{files:["https://cdn.neurodyn.ai/assets/hdr/neutral.hdr"]})}let WR={position:[0,0,0],up:[0,0,1],near:.01,far:100};function WD({className:e,ref:t,captureRef:r,onSizeChange:n,...i}){let{placement:a}=VJ(),{src:s,glbUrl:o}=VX(),{room:l}=VY(),{patchSceneLoad:c}=VZ(),{active:u}=GW(),d=q7((0,ty.useMemo)(()=>l.scene??qL(),[l.scene])),h=(0,ty.useRef)(null),p=(0,ty.useRef)(!1),A=(0,ty.useCallback)(e=>{(h.current=e,"function"==typeof t)?t(e):t&&(t.current=e)},[t]),f=qx("(max-width: 639px)"),{width:g,height:m}=function(e){let t,{ref:r,box:n="content-box"}=e,[{width:i,height:a},s]=(0,ty.useState)(q8),o=(t=(0,ty.useRef)(!1),(0,ty.useEffect)(()=>(t.current=!0,()=>{t.current=!1}),[]),(0,ty.useCallback)(()=>t.current,[])),l=(0,ty.useRef)({...q8}),c=(0,ty.useRef)(void 0);return c.current=e.onResize,(0,ty.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=q6(e,t,"inlineSize"),i=q6(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):o()&&s(e)}});return e.observe(r.current,{box:n}),()=>{e.disconnect()}},[n,r,o]),{width:i,height:a}}({ref:h}),v=(0,ty.useMemo)(()=>{if(!g||!m||!d)return null;let e=g,t=m;return f?e=(t=m)*d:g/m>d?e=m*d:t=g/d,{width:e,height:t}},[g,m,d,f]);return(0,ty.useLayoutEffect)(()=>{v&&n?.(v.width,v.height)},[v,n]),(0,ty.useEffect)(()=>{if(!v||p.current)return;p.current=!0;let e=window.setTimeout(()=>{window.dispatchEvent(new Event("resize"))},250);return()=>{window.clearTimeout(e)}},[v]),(0,ty.useEffect)(()=>{c({layoutReady:null!==v})},[c,v]),(0,ty.useEffect)(()=>{c({materialReady:"wall"===a?!!s:!!o})},[o,c,s,a]),(0,ty.useEffect)(()=>{c({assetsReady:!u})},[u,c]),(0,tb.jsx)("div",{ref:A,className:j8("size-full flex items-center justify-center sm:pt-21 sm:pb-12",e),...i,children:v&&(0,tb.jsx)(GX,{className:"touch-none bg-transparent",frameloop:"demand",camera:WR,gl:{toneMapping:4,toneMappingExposure:1.2,alpha:!0,preserveDrawingBuffer:!0},style:{width:`${v.width}px`,height:`${v.height}px`},children:(0,tb.jsxs)(ty.Suspense,{fallback:null,children:[(0,tb.jsx)(Wr,{ref:r}),(0,tb.jsx)(Wk,{placement:a}),(0,tb.jsx)(WM,{})]})})})}async function WP(e){await navigator.clipboard.writeText(e)}function W_({captureRef:e,fallbackToClipboard:t=!1,fileName:r="room-scene.png",shareMessage:n}){let[i,a]=(0,ty.useState)(!1),[s,o]=(0,ty.useState)(!1),l=(0,ty.useMemo)(()=>"u">typeof navigator&&"function"==typeof navigator.share||t&&"u">typeof navigator&&"function"==typeof navigator.clipboard?.writeText,[t]),c=(0,ty.useCallback)(async()=>{if(!l)return;let i="u">typeof navigator&&"function"==typeof navigator.share,s=window.location.href,o=`${n}
7550
- ${s}`;a(!0);try{if(!i&&t)return void await WP(o);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:o,files:[t]})}catch(e){console.error("Failed to generate scene screenshot for sharing",e)}await navigator.share({text:o,url:s})}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,ty.useCallback)(async()=>{let t=e.current;if(t){o(!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{o(!1)}}},[e,r]),isDownloading:s,isSharing:i,share:c}}function WL({captureRef:e,className:t,canvasWrapperClassName:r,chrome:n="default",...i}){let{placement:a,type:s}=VJ(),{containerRef:o,isDragging:l,angle:c,rotation:u,setAngle:d,setRotation:h}=VZ(),{t:p}=rb(),A=(0,ty.useRef)(null),f=(0,ty.useRef)(null),g=e??f,m=qx("(max-width: 639px)"),v=qx("(min-width: 768px)"),{canShare:b,isSharing:y,share:w}=W_({captureRef:g,shareMessage:p(`shareMessage.${s}`)}),x=(0,ty.useCallback)(()=>{m&&A.current?.centerView()},[m]);return(0,tb.jsxs)("div",{className:j8("relative flex items-center justify-center overflow-hidden",t),...i,children:[(0,tb.jsx)(AX,{ref:A,disabled:l,children:(0,tb.jsx)(AZ,{wrapperClass:"neurodyn-rzpp-wrapper size-full!",contentClass:"neurodyn-rzpp-content h-full! min-w-full sm:max-w-full",children:(0,tb.jsx)(WD,{captureRef:g,className:r,onSizeChange:x})})}),"default"===n&&(0,tb.jsxs)(tb.Fragment,{children:[(0,tb.jsx)(q5,{className:"absolute bottom-4 left-4 sm:bottom-6 sm:left-6"}),"floor"===a&&(0,tb.jsxs)("div",{className:"bg-button-dark typo-button-normal absolute bottom-6 left-1/2 hidden h-9 -translate-x-1/2 items-center gap-1.5 rounded-lg px-3.75 text-text-white md:inline-flex",children:[(0,tb.jsx)("span",{className:"shrink-0",children:p("scene.position")}),(0,tb.jsx)(qy,{value:[u],onValueChange:([e])=>h(e??0),min:-180,max:180,step:1,className:"w-29.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":p("scene.position")})]}),(0,tb.jsxs)("div",{className:"absolute right-4 bottom-4 inline-flex items-center gap-2 sm:right-6 sm:bottom-6",children:[("wall"===a||"floor"===a&&!v)&&(0,tb.jsxs)(qm,{children:[(0,tb.jsx)(qv,{asChild:!0,children:(0,tb.jsxs)(j7,{variant:"contrast",size:m?"icon":"default",children:[(0,tb.jsx)(Vb,{className:"size-5"}),(0,tb.jsx)("span",{className:"sr-only sm:not-sr-only",children:p("scene.tunePosition")})]})}),(0,tb.jsx)(qb,{className:"px-3 py-3.5 bg-button-dark border-button-dark text-text-white",side:"top",align:"end",portalContainer:o,children:(0,tb.jsxs)(qh,{children:[(0,tb.jsxs)(qA,{orientation:"horizontal",children:[(0,tb.jsx)(qg,{children:p("scene.rotation")}),(0,tb.jsx)(qy,{value:[u],onValueChange:([e])=>h(e??0),min:-180,max:180,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":p("scene.rotation")})]}),"wall"===a&&(0,tb.jsxs)(qA,{orientation:"horizontal",children:[(0,tb.jsx)(qg,{children:p("scene.angle")}),(0,tb.jsx)(qy,{value:[c],onValueChange:([e])=>d(e??0),max:75,min:-75,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":p("scene.angle")})]})]})})]}),"wall"===a&&(0,tb.jsxs)(j7,{variant:"contrast",size:m?"icon":"default",disabled:!b||y,onClick:w,children:[(0,tb.jsx)(Vw,{className:"size-5"}),(0,tb.jsx)("span",{className:"sr-only sm:not-sr-only",children:p("scene.share")})]}),m&&"wall"===a&&(0,tb.jsxs)(qm,{children:[(0,tb.jsx)(qv,{asChild:!0,children:(0,tb.jsx)(j7,{variant:"contrast",size:"icon",children:(0,tb.jsx)(Vy,{})})}),(0,tb.jsxs)(qb,{className:"grid gap-5",portalContainer:o,children:[(0,tb.jsx)(qW,{}),(0,tb.jsx)(q2,{})]})]})]})]})]})}function WN({className:e,gridClassName:t,titleClassName:r,onOpenChange:n,...i}){let{t:a}=rb(),s=(0,ty.useRef)(null),{fetchNextMaterialsPage:o,hasNextPage:l,isFetchingNextPage:c,isLoading:u,materialItems:d,selectMaterial:h,selectedMaterialId:p}=qq({includeViewedObject:!0});(0,ty.useEffect)(()=>{let e=s.current;e&&!u&&!c&&l&&0!==d.length&&e.scrollHeight<=e.clientHeight&&o()},[o,l,c,u,d.length]);let A=(0,ty.useCallback)(e=>{let{clientHeight:t,scrollHeight:r,scrollTop:n}=e.currentTarget;n+t>=r-64&&o()},[o]),f=(0,ty.useCallback)(e=>{h(e)&&n(!1)},[n,h]);return(0,tb.jsxs)("div",{...i,className:j8("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,tb.jsx)("h2",{className:j8("typo-base-16 font-medium sm:typo-base-14 sm:font-semibold text-text-dark",r),children:a("floor.materialSelection.title")}),(0,tb.jsx)("div",{"data-testid":"material-selection-grid",ref:s,className:j8("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,tb.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})=>{let n,i=e===p,a=(n=t.previews?.[0],n?.subRes?.small??n?.url);return(0,tb.jsxs)("button",{type:"button","data-selected":i,"aria-pressed":i,className:j8("group relative grid aspect-square min-w-0 place-items-center overflow-hidden rounded-lg border border-border bg-background-containers p-1 text-left transition hover:border-icons-normal 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:[a?(0,tb.jsx)("img",{src:a,alt:"",className:"size-full rounded-md object-cover"}):(0,tb.jsx)(Vg,{className:"size-6 text-icons-normal"}),(0,tb.jsx)("span",{className:"sr-only",children:t.name}),i&&(0,tb.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,tb.jsx)(Vd,{className:"size-4"})})]},`${r}-${e}`)}),(u||c)&&(0,tb.jsx)("div",{className:"col-span-3 grid h-16 place-items-center",children:(0,tb.jsx)(VE,{className:"size-6"})})]})})]})}function WF({open:e,portalContainer:t,onOpenChange:r}){let{t:n}=rb();return(0,tb.jsx)(Ve,{open:e,onOpenChange:r,children:(0,tb.jsxs)(Vi,{contentInsideOverlay:!0,"data-testid":"material-selection-mobile-overlay",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,tb.jsx)(Vo,{className:"sr-only",children:n("floor.materialSelection.title")}),(0,tb.jsx)(Vl,{className:"sr-only"}),(0,tb.jsx)(WN,{className:"min-h-0",gridClassName:"max-h-none",onOpenChange:r}),(0,tb.jsx)(Vs,{className:"shrink-0 p-0",children:(0,tb.jsx)(Vr,{asChild:!0,children:(0,tb.jsx)(j7,{type:"button",variant:"outline",className:"w-full",children:n("close")})})})]})})}let WO="data-material-selection-action",WQ="data-material-selection-panel";function WU({actionLabel:e,actionClassName:t,actionPlacement:r,className:n,iconClassName:i,isOpen:a,materialName:s,previewClassName:o,previewUrl:l,testId:c,titleLabel:u,onClick:d,onPointerDown:h}){let{t:p}=rb(),{displayUnit:A,type:f}=VJ(),{containerRef:g}=VZ(),{viewedObject:m}=VX(),{selectedDestinationUrl:v,sizeItems:b,selectedTinuuid:y,selectSize:w}=function(){var e;let{tinuuid:t,setMaterial:r,setTinuuid:n,apiKey:i,baseURL:a,source:s,widgetSession:o}=VX(),{type:l}=VJ(),{data:c}=n$({queryKey:j2(t??void 0,{apiKey:i,baseURL:a,source:s,resourceType:l}),enabled:"rugs"===l&&!!t,placeholderData:nv,queryFn:({signal:e})=>{if(!t)throw Error("Tinuuid is required.");return j3(t,{apiKey:i,baseURL:a,signal:e,source:s,widgetSession:o,resourceType:l})}},nN,void 0),u=c?.kit?.uuid,d=c?.owner?.uuid;(0,ty.useEffect)(()=>{let e=c?.materials?.[0];c?.tinuuid===t&&e&&r(e)},[c,r,t]);let{data:h,fetchNextPage:p,hasNextPage:A,isFetchingNextPage:f,isFetchNextPageError:g}=n$({queryKey:["room-viewer","kit-objects",{apiKey:(e={apiKey:i,baseURL:a,source:s,resourceType:l}).apiKey??null,kitUuid:u??null,ownerUuid:d??null,resourceType:e.resourceType??null,source:e.source}],enabled:"rugs"===l&&!!u&&!!d,queryFn:({pageParam:e,signal:t})=>{if(!u||!d)throw Error("Kit uuid and owner uuid are required.");return j4(u,d,e,{apiKey:i,baseURL:a,signal:t,source:s,widgetSession:o,resourceType:l})},initialPageParam:0,getNextPageParam:(e,t,r)=>void 0!==e.pages_count?r+1<e.pages_count?r+1:void 0:e.objs?.length?r+1:void 0},n3,void 0);(0,ty.useEffect)(()=>{!A||f||g||p({cancelRefetch:!1})},[p,A,f,g]);let m=(0,ty.useMemo)(()=>h?.pages.flatMap(e=>e.objs??[])??[],[h]),v=(0,ty.useMemo)(()=>m.map(qc).filter(e=>null!==e),[m]);return{selectedDestinationUrl:c?.tinuuid===t?c.destinationUrl:void 0,sizeItems:v,selectedTinuuid:t,selectSize:e=>!!v.some(t=>t.tinuuid===e)&&(n(e),!0)}}(),x=p(`units.${A}`),C=b.find(e=>e.tinuuid===y),E=function(e){let t=e?.trim();if(!t||qi.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}}("rugs"===f?v??(m?.tinuuid===y?m.destinationUrl:void 0):m?.destinationUrl),S=(0,tb.jsxs)(j7,{type:"button",variant:"outline",size:"sm",[WO]:!0,"aria-expanded":a,className:j8("shrink-0","stacked"===r&&"w-fit",t),onPointerDown:h?e=>{e.preventDefault(),e.stopPropagation(),h()}:void 0,onClick:d,children:[a?(0,tb.jsx)(Vh,{className:"size-4"}):(0,tb.jsx)(Vv,{className:"size-4"}),e]});return(0,tb.jsxs)("div",{className:n,"data-neurodyn-room-viewer-product":"","data-testid":c,children:[(0,tb.jsx)("div",{className:o,children:l?(0,tb.jsx)("img",{src:l,alt:"",className:"size-full object-cover"}):(0,tb.jsx)(Vg,{className:i})}),(0,tb.jsxs)("div",{className:"grid min-h-16 min-w-0 flex-1 content-center gap-2",children:[(0,tb.jsxs)("div",{className:"flex min-w-0 items-start justify-between gap-2",children:[(0,tb.jsxs)("div",{className:"min-w-0",children:[(0,tb.jsx)("div",{className:"sr-only",children:u}),(0,tb.jsx)("div",{className:"typo-button-normal truncate text-text-dark",children:s})]}),E&&(0,tb.jsx)("a",{href:E,target:"_blank",rel:"noopener noreferrer",className:"typo-base-12 shrink-0 text-button-primary underline-offset-2 hover:underline","data-testid":c?`${c}-description-link`:void 0,children:p("floor.scene.description")})]}),(0,tb.jsxs)("div",{className:"flex flex-nowrap items-center gap-2",children:["stacked"===r&&S,b.length>1&&!!C&&(0,tb.jsxs)(V8,{value:y??void 0,onValueChange:w,children:[(0,tb.jsx)(V7,{size:"sm",className:"w-fit shrink-0","data-testid":c?`${c}-size-select`:void 0,children:(0,tb.jsx)(V6,{})}),(0,tb.jsx)(qe,{portalContainer:g,children:b.map(e=>{var t;let r;return(0,tb.jsx)(qt,{value:e.tinuuid,children:(t=e.size,r=t.split("\xd7").map(e=>"cm"===A?e:Math.round(qs(Number(e)/100,A)).toString()).join("\xd7"),`${r} ${x}`)},e.tinuuid)})})]})]})]}),"trailing"===r&&S]})}function Wz({actions:e,canShowAr:t,companyName:r,hasActiveError:n,material:i,portalContainer:a,ref:s,room:o,scene:l,showDialogCloseButton:c=!1}){let{t:u}=rb(),{type:d}=VJ(),[h,p]=(0,ty.useState)(!1),[A,f]=(0,ty.useState)(!1),g=(0,ty.useRef)(null),m=(0,ty.useRef)(!1),v=u(h?"floor.scene.hideCatalog":`resourceType.${d}.replaceProduct`),b=u(A?"floor.scene.hideCatalog":`resourceType.${d}.replaceProductShort`),y=u(`resourceType.${d}.productCardTitle`),{canShare:w,download:x,isDownloading:C,isSharing:E,share:S}=W_({captureRef:g,fallbackToClipboard:!0,shareMessage:u(`shareMessage.${d}`)}),M=(0,ty.useCallback)(()=>{p(!1),f(!1)},[]);(0,ty.useImperativeHandle)(s,()=>({closeMaterialSelection:M}),[M]);let B=(0,ty.useCallback)(()=>{if(m.current){m.current=!1;return}p(!0),f(!1)},[]),I=(0,ty.useCallback)(()=>{m.current=!0,M()},[M]),T=(0,ty.useCallback)(()=>{f(!0),p(!1)},[]),k=(0,ty.useCallback)(()=>{M(),e.openInteriorSelection()},[e,M]);return(0,ty.useEffect)(()=>{if(h)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(`[${WO}], [${WQ}]`)||p(!1)}function t(e){"Escape"===e.key&&p(!1)}},[h]),(0,tb.jsxs)(tb.Fragment,{children:[(0,tb.jsx)("div",{className:"absolute inset-0 bg-constant-black","data-testid":"floor-scene-background-base"}),(0,tb.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,tb.jsx)("img",{src:o.imageUrl,alt:"",className:"block size-full max-w-none object-cover object-center opacity-50"})}),(0,tb.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,tb.jsx)("div",{className:"min-w-0 pt-1",children:(0,tb.jsx)("h1",{"data-testid":"floor-scene-header-company",className:"typo-base-16 truncate font-medium lg:typo-base-18",children:r})}),(0,tb.jsxs)("div",{className:"pointer-events-auto inline-flex shrink-0 items-center gap-2",children:[(0,tb.jsxs)(j7,{type:"button",variant:"secondary","aria-label":u("floor.scene.share"),"data-neurodyn-room-viewer-share":"",disabled:!w||E,onClick:S,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tb.jsx)(Vw,{className:"size-5"}),(0,tb.jsx)("span",{className:"hidden lg:inline",children:u("floor.scene.share")})]}),(0,tb.jsxs)(j7,{type:"button",variant:"secondary","aria-label":u("floor.scene.download"),"data-neurodyn-room-viewer-download":"",disabled:C,onClick:x,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tb.jsx)(Vp,{className:"size-5"}),(0,tb.jsx)("span",{className:"hidden lg:inline",children:u("floor.scene.download")})]}),c&&(0,tb.jsx)(Vr,{asChild:!0,children:(0,tb.jsxs)(j7,{type:"button",variant:"secondary","aria-label":u("close"),className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tb.jsx)("span",{className:"hidden lg:inline",children:u("close")}),(0,tb.jsx)(Vh,{className:"!size-5"})]})})]})]}),(0,tb.jsx)(WL,{captureRef:g,chrome:"none",className:"relative z-10 size-full min-h-0",canvasWrapperClassName:"p-0 sm:pt-0 sm:pb-0"},l.resetKey),(0,tb.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,tb.jsxs)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:[(0,tb.jsx)(WU,{actionLabel:v,actionPlacement:"stacked",className:"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)]",iconClassName:"size-6 text-icons-normal",isOpen:h,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-desktop-product-card",titleLabel:y,onClick:h?M:B,onPointerDown:h?I:void 0}),(0,tb.jsxs)("div",{className:"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)]","data-testid":"floor-room-card","data-neurodyn-room-viewer-room":"",children:[(0,tb.jsx)("img",{src:o.imageUrl,alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,tb.jsxs)("span",{className:"grid min-w-0 flex-1 content-center gap-2",children:[(0,tb.jsx)("span",{className:"typo-button-normal block min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-desktop-room-name",children:o.name}),(0,tb.jsx)(j7,{type:"button",variant:"outline",size:"sm",className:"w-fit",onClick:k,children:u("floor.interiorSelection.chooseInterior")})]})]})]}),t&&(0,tb.jsxs)("div",{className:"pointer-events-auto 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-testid":"floor-ar-card","data-neurodyn-room-viewer-try-at-home":"",children:[(0,tb.jsx)("img",{src:o.imageUrl,alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,tb.jsxs)("div",{className:"grid min-w-0 flex-1 content-center gap-2",children:[(0,tb.jsx)(q5,{buttonLabel:u("floor.scene.tryAtHome"),buttonVariant:"secondary",buttonSize:"sm",buttonClassName:"w-fit"}),(0,tb.jsx)("div",{className:"typo-base-12 truncate font-medium text-text-light",children:u("floor.scene.tryAtHomeBody")})]})]})]}),(0,tb.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,tb.jsx)(WU,{actionLabel:v,actionPlacement:"stacked",className:"pointer-events-auto 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)]",iconClassName:"size-6 text-icons-normal",isOpen:h,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-tablet-product-card",titleLabel:y,onClick:h?M:B,onPointerDown:h?I:void 0}),(0,tb.jsxs)("div",{className:"pointer-events-auto grid w-[254px] gap-2",children:[(0,tb.jsxs)("div",{className:"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)]","data-testid":"floor-tablet-room-card","data-neurodyn-room-viewer-room":"",children:[(0,tb.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,tb.jsx)("img",{src:o.imageUrl,alt:"",className:"size-10 shrink-0 rounded-full object-cover"}),(0,tb.jsxs)("span",{className:"grid min-w-0",children:[(0,tb.jsx)("span",{className:"typo-base-12 truncate text-text-light",children:u("floor.scene.interiorCardTitle")}),(0,tb.jsx)("span",{className:"typo-button-normal min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-tablet-room-name",children:o.name})]})]}),(0,tb.jsx)(j7,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:k,children:u("floor.interiorSelection.chooseInteriorShort")})]}),t&&(0,tb.jsx)(q5,{className:"w-full","data-neurodyn-room-viewer-try-at-home":"",buttonLabel:u("floor.scene.tryAtHome"),buttonLeadingIcon:(0,tb.jsx)(Vx,{className:"size-5"}),buttonVariant:"secondary",buttonSize:"default",buttonClassName:"h-9 w-full rounded-xl"})]})]}),(0,tb.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,tb.jsx)(WU,{actionLabel:b,actionClassName:"w-[137px]",actionPlacement:"stacked",className:"flex items-center justify-start gap-4 border-b border-border-light bg-background-containers p-4 text-left",iconClassName:"size-5 text-icons-normal",isOpen:A,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-mobile-product-card",titleLabel:y,onClick:A?M:T}),(0,tb.jsxs)("div",{className:"grid gap-4 bg-background-containers px-6 pt-4 pb-6","data-testid":"floor-mobile-bottom-actions",children:[(0,tb.jsxs)("div",{className:"flex w-full items-center justify-between gap-3 rounded-full bg-background-containers text-left","data-neurodyn-room-viewer-room":"",children:[(0,tb.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,tb.jsx)("img",{src:o.imageUrl,alt:"",className:"size-10 shrink-0 rounded-full object-cover"}),(0,tb.jsxs)("span",{className:"grid min-w-0",children:[(0,tb.jsx)("span",{className:"typo-base-12 truncate text-text-light",children:u("floor.scene.interiorCardTitle")}),(0,tb.jsx)("span",{className:"typo-button-normal min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-mobile-room-name",children:o.name})]})]}),(0,tb.jsx)(j7,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:k,children:u("floor.interiorSelection.chooseInterior")})]}),t&&(0,tb.jsx)(q5,{className:"w-full","data-neurodyn-room-viewer-try-at-home":"",buttonLabel:u("floor.scene.tryAtHome"),buttonLeadingIcon:(0,tb.jsx)(Vx,{className:"size-6"}),buttonVariant:"secondary",buttonSize:"lg",buttonClassName:"h-11 w-full rounded-xl"})]})]}),h&&!n&&(0,tb.jsx)(WN,{[WQ]:!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:M}),(0,tb.jsx)(WF,{open:A&&!n,portalContainer:a,onOpenChange:f}),(0,tb.jsx)("div",{"aria-hidden":!l.isLoading,className:j8("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",l.isLoading?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),children:(0,tb.jsx)(VE,{variant:"logo"})})]})}function WG({rooms:e,customRooms:t,selectedRoomId:r,isInvalidFile:n,uploadRetryRequestId:i=0,showCloseButton:a=!1,onSelectRoom:s,onUploadFile:o}){let l,{t:c}=rb(),u=(0,ty.useId)(),d=(0,ty.useRef)(null);function h(e){return e.map(e=>(0,tb.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:()=>s(e.id),children:[(0,tb.jsx)("img",{src:e.image_url,alt:"",decoding:"async",className:"size-full scale-[1.02] transform-gpu object-cover transition duration-200 group-hover:scale-105"}),(0,tb.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,ty.useEffect)(()=>{i>0&&d.current?.click()},[i]),(0,tb.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",children:[a&&(l=(0,tb.jsx)(j7,{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,tb.jsx)(Vh,{})}),(0,tb.jsx)(Vr,{asChild:!0,children:l})),(0,tb.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,tb.jsxs)("div",{className:"grid gap-2","data-testid":"floor-interior-selection-upload",children:[(0,tb.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&&o(t)},children:[(0,tb.jsx)(Vu,{className:"size-5 text-background-blue"}),c("floor.interiorSelection.uploadPhoto"),(0,tb.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&&o(t)}})]}),n&&(0,tb.jsx)("p",{className:"typo-base-12 font-medium text-destructive",children:c("floor.interiorSelection.invalidFile")})]}),(0,tb.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,tb.jsxs)("div",{className:"grid min-h-max gap-4",children:[t.length>0&&(0,tb.jsxs)("div",{className:"grid gap-3",children:[(0,tb.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.customTitle")}),(0,tb.jsx)("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-3","data-testid":"floor-custom-interior-selection-grid",children:h(t)})]}),(0,tb.jsxs)("div",{className:"grid gap-3",children:[(0,tb.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.presetsTitle")}),(0,tb.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,tb.jsx)(Vs,{className:"-mt-2 shrink-0 p-0 sm:mt-0",children:(0,tb.jsx)(Vr,{asChild:!0,children:(0,tb.jsx)(j7,{variant:"outline",className:"w-full",children:c("close")})})})]})}function WH(e){return(0,tb.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,tb.jsx)(WG,{...e})})}function Wj({open:e,showCloseButton:t=!0,portalContainer:r,onOpenChange:n,...i}){let{t:a}=rb();return(0,tb.jsx)(Ve,{open:e,onOpenChange:n,children:(0,tb.jsxs)(Vi,{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,tb.jsx)(Vo,{className:"sr-only",children:a("floor.interiorSelection.title")}),(0,tb.jsx)(Vl,{className:"sr-only"}),(0,tb.jsx)(WG,{...i,showCloseButton:t})]})})}async function WV(e,t={}){let r=t.source??"default",n={image:e};if(jg({apiKey:t.apiKey,source:r})){let e=await t.widgetSession?.getTokenForRequest();return jz(n,{baseURL:t.baseURL,headers:{"x-api-key":t.apiKey,...e?{[jY]:e}:{}},signal:t.signal,timeout:0,params:{productType:jm({apiKey:t.apiKey,source:r})}})}return t.signal?j_(n,{signal:t.signal,timeout:0}):j_(n,{timeout:0})}let Wq=[{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 WW(){try{return"1"===window.localStorage.getItem("neurodyn-room-viewer:debug-mask-export")}catch{return!1}}async function WK(e,t){var r,n,i;let a,s,o,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 Wq.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")}),s=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=`${s||"room"}.debug-mask.colors.png`,o=URL.createObjectURL(n),(l=document.createElement("a")).href=o,l.download=i,l.style.display="none",document.body.append(l),l.click(),l.remove(),window.setTimeout(()=>URL.revokeObjectURL(o),1e3)}let WJ="custom-interiors";function WY(){return"u">typeof crypto&&"function"==typeof crypto.randomUUID?`custom-interior-${crypto.randomUUID()}`:`custom-interior-${Date.now()}-${Math.random().toString(36).slice(2)}`}function WX(){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(WJ)||e.createObjectStore(WJ,{keyPath:"id"})},n.onerror=()=>r(n.error??Error("Failed to open Custom Interior store.")),n.onsuccess=()=>t(n.result)}):Promise.resolve(null)}async function WZ(e,t,r=new Date){let n=await WX();if(!n)return null;let i={id:WY(),schemaVersion:1,name:e.name,fileName:e.name,createdAt:r.toISOString(),imageBlob:e,scene:t};try{let e=n.transaction(WJ,"readwrite");return e.objectStore(WJ).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 W$(){let e=await WX();if(!e)return[];try{return await new Promise((t,r)=>{let n=e.transaction(WJ,"readonly").objectStore(WJ).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 W0(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}}}let W1={placementReady:!1,prepareReady:!1,artifactsReady:!1,assetsReady:!1};function W2(e){let t="dialog"===e?"interior-selection":"scene";return{step:t,hasSceneSelection:"scene"===t,sceneResetKey:0}}function W3(e,t){switch(t.type){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 W9(e,t){return!e.aborted&&t()}async function W4({abortSignal:e,apiOptions:t,commitCustomInteriorSelection:r,downloadDebugMask:n,file:i,isActive:a,isDebugMaskExportEnabled:s,onDebugMaskError:o,onPersistenceError:l,onProcessingComplete:c,predictRoomScene:u,saveCustomInterior:d,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p}){let A=await u(i,{...t,signal:e});if(!W9(e,a))return null;s()&&n(A,i.name).catch(o);let f=h(i,A);return W9(e,a)&&f&&(d(i,A).catch(l),c(),await p(),W9(e,a))?(r(f),f):null}function W5(){return new Promise(e=>window.setTimeout(e,250))}function W8(e){console.error("Failed to export room debug mask",e)}function W6(e){console.error("Failed to persist Custom Interior",e)}function W7(e){console.error("Failed to prepare Custom Interior",e)}let Ke=[{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 Kt({isComplete:e,open:t,onCloseAnimationEnd:r,onOpenChange:n,portalContainer:i}){let{t:a}=rb(),s=(0,ty.useRef)(t),[o,l]=(0,ty.useState)(8),c=e?100:o,u=function(e){for(let t=Ke.length-1;t>=0;t-=1){let r=Ke[t];if(r&&e>=r.minimumProgress)return r}return Ke[0]}(c);(0,ty.useEffect)(()=>{t&&!s.current&&l(8),s.current=t},[t]),(0,ty.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,tb.jsxs)("div",{role:"status","aria-live":"polite",className:"grid content-start gap-4",children:[(0,tb.jsx)("h2",{className:"typo-base-18 font-medium text-text-dark",children:a("floor.processing.title")}),(0,tb.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,tb.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-3",children:[(0,tb.jsx)("span",{className:"typo-base-14 min-w-0 flex-1 truncate text-left font-medium text-text-light",children:a(u.translationKey)}),(0,tb.jsxs)("span",{className:"typo-base-14 shrink-0 font-medium text-text-dark",children:[c,"%"]})]}),(0,tb.jsx)(VQ,{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,tb.jsx)(Ve,{open:t,onOpenChange:n,children:(0,tb.jsxs)(Vi,{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,tb.jsx)(Vo,{className:"sr-only",children:a("floor.processing.title")}),(0,tb.jsx)(Vl,{className:"sr-only",children:a(u.translationKey)}),d]})})}function Kr({showDialogCloseButton:e=!1}){var t;let r,{name:n,type:i}=VJ(),{accessError:a,tinuuid:s,material:o,apiKey:l,baseURL:c,hasRooms:u,source:d,widgetSession:h,isViewerAccessPending:p,loadError:A,viewedObject:f}=VX(),{clearActiveError:g,handleAccessError:m}=function(){let{setAccessError:e,setLoadError:t}=VX();return{clearActiveError:(0,ty.useCallback)(()=>{e(null),t(null)},[e,t]),handleAccessError:e}}(),{room:v,sourceRooms:b}=VY(),{containerRef:y,setContainerRef:w,sceneLoad:x,isRoomScenePending:C}=VZ(),{dialogPortalContainer:E,viewerSurface:S,viewerDialogOpen:M,onViewerDialogOpenChange:B}=VK(VG,"useRoomViewerSurface"),{t:I}=rb(),T=(0,ty.useRef)(null),k=a??A,R=I(`rooms.${v.id}`,{defaultValue:v.name}),D=(t=I("floor.scene.companyFallback"),f?.owner?.name??f?.brand??t),P="rugs"===i?f?.kit?.name??f?.name??o?.name??n:o?.name??f?.name??f?.kit?.name??n,_=(r=o?.previews?.[0],r?.subRes?.small??r?.url??f?.preview?.subRes?.small??f?.preview?.url??f?.mainPreview),L=function({activeError:e,apiKey:t,baseURL:r,clearActiveError:n,closeMaterialSelection:i,handleAccessError:a,hasDialogPortalContainer:s,hasRooms:o,isRoomScenePending:l,isViewerAccessPending:c,material:u,onViewerDialogOpenChange:d,sceneLoad:h,source:p,sourceRooms:A,viewerDialogOpen:f,viewerSurface:g,widgetSession:m}){let v=function(e){let{patchSceneLoad:t,setAngle:r,setRotation:n}=VZ();return function(e,t){let[r,n]=(0,ty.useReducer)(W3,e,W2),i=(0,ty.useCallback)(e=>{e(),function({patchSceneLoad:e,setAngle:t,setRotation:r}){t(0),r(0),e(W1)}(t),n({type:"commit-interior-selection"})},[t]),a=(0,ty.useCallback)(()=>{n({type:"dismiss-interior-selection"})},[]),s=(0,ty.useCallback)(()=>{n({type:"open-interior-selection"})},[]),o=(0,ty.useCallback)(()=>{n({type:"recover-to-scene"})},[]),l=(0,ty.useCallback)(()=>{n({type:"return-to-interior-selection"})},[]),c=(0,ty.useCallback)(()=>{n({type:"start-custom-interior-processing"})},[]);return(0,ty.useMemo)(()=>({...r,commitInteriorSelection:i,dismissInteriorSelection:a,openInteriorSelection:s,recoverToScene:o,returnToInteriorSelection:l,startCustomInteriorProcessing:c}),[i,a,s,o,l,c,r])}(e,(0,ty.useMemo)(()=>({patchSceneLoad:t,setAngle:r,setRotation:n}),[t,r,n]))}(g),{appendRuntimeCustomInterior:b,customRooms:y}=function({listCustomInteriors:e}){let{appendRuntimeCustomInterior:t,customRooms:r,replaceRuntimeCustomInteriors:n}=function(){let[e,t]=(0,ty.useState)(()=>[]),r=(0,ty.useRef)(null),n=(0,ty.useCallback)(e=>{r.current?.revokeObjectUrls();let n=W0(e);return r.current=n,t(n.rooms),n.rooms},[]),i=(0,ty.useCallback)((e,n)=>{let i=W0([{id:WY(),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 s=r.current;return r.current={rooms:[],revokeObjectUrls:()=>{s?.revokeObjectUrls(),i.revokeObjectUrls()}},t(e=>[a,...e.filter(e=>e.id!==a.id)]),a},[]);return(0,ty.useEffect)(()=>()=>{r.current?.revokeObjectUrls()},[]),(0,ty.useMemo)(()=>({appendRuntimeCustomInterior:i,customRooms:e,replaceRuntimeCustomInteriors:n}),[i,e,n])}(),i=(0,ty.useRef)(!0);(0,ty.useEffect)(()=>(i.current=!0,()=>{i.current=!1}),[]);let a=(0,ty.useCallback)(async()=>{let t=await e();i.current&&n(t)},[e,n]);return(0,ty.useEffect)(()=>{a()},[a]),(0,ty.useMemo)(()=>({appendRuntimeCustomInterior:t,customRooms:r,replaceRuntimeCustomInteriors:n,refreshCustomInteriors:a}),[t,r,a,n])}({listCustomInteriors:W$}),w=(0,ty.useMemo)(()=>new Set(A.map(e=>e.id)),[A]),{commitCustomInteriorSelection:x,selectInterior:C}=function(e){let{room:t,setRoomId:r,setRooms:n}=VY(),{widgetSession:i}=VX();return function({floorFlow:e,customRooms:t,selectedRoomId:r,onInteriorSelected:n,restoreSourceRooms:i,setRoomId:a,setRooms:s}){let o=(0,ty.useCallback)(t=>{e.commitInteriorSelection(()=>{s(e=>[t,...i(e).filter(e=>e.id!==t.id)]),a(t.id)}),n?.()},[e,n,i,a,s]),l=(0,ty.useCallback)(t=>{let o=t===r;o&&e.hasSceneSelection||(e.commitInteriorSelection(()=>{s(i),a(t)}),o||n?.())},[e,n,i,r,a,s]),c=(0,ty.useCallback)(n=>{if(n===r&&e.hasSceneSelection)return;let i=t.find(e=>e.id===n);i&&o(i)},[e.hasSceneSelection,o,t,r]),u=(0,ty.useCallback)(e=>{t.some(t=>t.id===e)?c(e):l(e)},[t,c,l]);return(0,ty.useMemo)(()=>({commitCustomInteriorSelection:o,selectInterior:u}),[o,u])}({...e,selectedRoomId:t.id,onInteriorSelected:()=>j0(i,"interior_selected"),setRoomId:r,setRooms:n})}({floorFlow:v,customRooms:y,restoreSourceRooms:(0,ty.useCallback)(e=>[...A,...e.filter(e=>!w.has(e.id))],[w,A])}),E=function(e){let{setIsRoomScenePending:t}=VZ();return function({apiOptions:e,floorFlow:t,commitCustomInteriorSelection:r,downloadDebugMask:n,isDebugMaskExportEnabled:i,onAccessError:a,onDebugMaskError:s,onPersistenceError:o,onProcessingError:l,predictRoomScene:c,saveCustomInterior:u,setIsRoomScenePending:d,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p}){let[A,f]=(0,ty.useState)(!1),[g,m]=(0,ty.useState)(!1),[v,b]=(0,ty.useState)(null),[y,w]=(0,ty.useState)(null),[x,C]=(0,ty.useState)(!1),[E,S]=(0,ty.useState)(0),M=(0,ty.useRef)(null),B=(0,ty.useRef)(!1),I=(0,ty.useRef)(!0),T=(0,ty.useRef)(v);v&&(T.current=v),(0,ty.useEffect)(()=>(I.current=!0,()=>{I.current=!1,M.current?.abort()}),[]);let k=(0,ty.useCallback)(()=>{b(null),w(null),C(!1)},[]),R=(0,ty.useCallback)(e=>{k(),f(!1),e()},[k]),D=(0,ty.useCallback)(async A=>{if(k(),!A.type.startsWith("image/"))return void f(!0);f(!1),m(!1),t.startCustomInteriorProcessing(),B.current=!0;let g=new AbortController;M.current?.abort(),M.current=g,d(!0);try{await W4({abortSignal:g.signal,apiOptions:e,commitCustomInteriorSelection:r,downloadDebugMask:n,file:A,isActive:()=>I.current,isDebugMaskExportEnabled:i,onDebugMaskError:s,onPersistenceError:o,onProcessingComplete:()=>{m(!0)},predictRoomScene:c,saveCustomInterior:u,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p})}catch(t){if(g.signal.aborted)return;let e=jv(t);if(e){B.current&&C(!0),a(e);return}if(l(t),B.current){w("custom-interior-processing"),C(!0);return}b("custom-interior-processing")}finally{M.current===g&&(M.current=null,I.current&&d(!1))}},[e,t,r,n,i,a,s,o,l,c,k,u,d,h,p]),P=(0,ty.useCallback)(()=>{k(),f(!1),t.returnToInteriorSelection(),S(e=>e+1)},[t,k]),_=(0,ty.useCallback)(()=>{k(),t.returnToInteriorSelection()},[t,k]),L=(0,ty.useCallback)(({clearError:e,closeMaterialSelection:r})=>{e(),r(),t.hasSceneSelection&&t.recoverToScene()},[t]),N=(0,ty.useCallback)(()=>{B.current=!1,C(!1),y&&(b(y),w(null))},[y]),F=(0,ty.useCallback)(()=>I.current,[]);return(0,ty.useMemo)(()=>({displayedUploadError:v??T.current,isCustomInteriorProcessingComplete:g,isInvalidFile:A,isMounted:F,isProcessingDialogClosingForError:x,pendingUploadError:y,uploadError:v,uploadRetryRequestId:E,cancelUploadError:_,handleProcessingDialogCloseAnimationEnd:N,openInteriorSelection:R,processUploadFile:D,recoverFromActiveError:L,resetUploadErrorPresentation:k,tryUploadAgain:P}),[_,N,g,A,F,x,R,y,D,L,k,P,v,E])}({...e,setIsRoomScenePending:t})}({apiOptions:(0,ty.useMemo)(()=>({apiKey:t,baseURL:r,source:p,widgetSession:m}),[t,r,p,m]),floorFlow:v,commitCustomInteriorSelection:x,downloadDebugMask:WK,isDebugMaskExportEnabled:WW,onAccessError:a,onDebugMaskError:W8,onPersistenceError:W6,onProcessingError:W7,predictRoomScene:WV,saveCustomInterior:WZ,trackRuntimeCustomInterior:b,waitForProcessingCompletion:W5}),{dismissInteriorSelection:S,hasSceneSelection:M,openInteriorSelection:B,sceneResetKey:I,step:T}=v,{cancelUploadError:k,displayedUploadError:R,handleProcessingDialogCloseAnimationEnd:D,isCustomInteriorProcessingComplete:P,isInvalidFile:_,isProcessingDialogClosingForError:L,openInteriorSelection:N,pendingUploadError:F,processUploadFile:O,recoverFromActiveError:Q,resetUploadErrorPresentation:U,tryUploadAgain:z,uploadError:G,uploadRetryRequestId:H}=E,j=o&&M,V=(0,ty.useRef)(e),q=!!(e&&j&&u);e&&(V.current=e);let W=(0,ty.useCallback)(()=>{j&&(U(),S())},[S,j,U]),K=(0,ty.useCallback)(()=>{i(),N(B)},[i,B,N]),J=(0,ty.useCallback)(()=>{Q({clearError:n,closeMaterialSelection:i})},[n,i,Q]),Y=(0,ty.useCallback)(e=>{if(!e){if(j)return void W();d?.(!1)}},[W,j,d]),X=(0,ty.useCallback)(e=>{if(!e){if(q)return void J();d?.(!1)}},[q,J,d]),Z=(0,ty.useCallback)(e=>{e||k()},[k]);!function({fallbackMs:e,handleProcessingDialogCloseAnimationEnd:t,isProcessingDialogClosingForError:r}){(0,ty.useEffect)(()=>{if(!r)return;let n=window.setTimeout(t,e);return()=>window.clearTimeout(n)},[e,t,r])}({fallbackMs:220,handleProcessingDialogCloseAnimationEnd:D,isProcessingDialogClosingForError:L});let $=function({activeError:e,canRecoverFromActiveError:t,floorFlow:r,hasDialogPortalContainer:n,hasRooms:i,isProcessingDialogClosingForError:a,isRoomScenePending:s,isViewerAccessPending:o,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=!o&&f&&(!e||t),v=f||p,b=!o&&!e&&v,y=!o&&!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&&s&&"processing-custom-interior"===r.step&&A},scene:{isLoading:s||!Object.values(c).every(Boolean),resetKey:r.sceneResetKey,shouldRender:m,shouldRenderDialog:m},surface:{usesSiblingDialogFlow:p},uploadErrorDialog:{open:!a&&!e&&!!u&&A}}}({activeError:e,canRecoverFromActiveError:q,floorFlow:{hasSceneSelection:M,sceneResetKey:I,step:T},hasDialogPortalContainer:s,hasRooms:o,isProcessingDialogClosingForError:L,isRoomScenePending:l,isViewerAccessPending:c,pendingUploadError:F,sceneLoad:h,uploadError:G,viewerDialogOpen:f,viewerSurface:g});return{...$,activeErrorDialog:{...$.activeErrorDialog,onCancel:q?J:void 0,onOpenChange:X,onTryAgain:q?J:void 0,variant:e??V.current},customRooms:y,interiorSelection:{...$.interiorSelection,isInvalidFile:_,onOpenChange:Y,onSelectRoom:C,onUploadFile:O,openFromScene:K,uploadRetryRequestId:H},sourceRooms:A,processingDialog:{...$.processingDialog,isComplete:P,onCloseAnimationEnd:D,onOpenChange:$.surface.usesSiblingDialogFlow?d:void 0},step:T,uploadErrorDialog:{...$.uploadErrorDialog,onCancel:k,onOpenChange:Z,onTryAgain:z,variant:R}}}({activeError:k,apiKey:l,baseURL:c,clearActiveError:g,closeMaterialSelection:(0,ty.useCallback)(()=>{T.current?.closeMaterialSelection()},[]),handleAccessError:m,hasDialogPortalContainer:null!==E,hasRooms:u,isRoomScenePending:C,isViewerAccessPending:p,material:o,onViewerDialogOpenChange:B,sceneLoad:x,source:d,sourceRooms:b,viewerDialogOpen:M,viewerSurface:S,widgetSession:h}),N=L.surface.usesSiblingDialogFlow?E:y,F=L.interiorSelection.shouldRender?"dialog"===L.interiorSelection.presentation?(0,tb.jsx)(Wj,{open:L.interiorSelection.open,showCloseButton:e||L.scene.shouldRender,portalContainer:N,rooms:L.sourceRooms,customRooms:L.customRooms,selectedRoomId:v.id,isInvalidFile:L.interiorSelection.isInvalidFile,uploadRetryRequestId:L.interiorSelection.uploadRetryRequestId,onOpenChange:L.interiorSelection.onOpenChange,onSelectRoom:L.interiorSelection.onSelectRoom,onUploadFile:L.interiorSelection.onUploadFile}):"screen"===L.interiorSelection.presentation?(0,tb.jsx)(WH,{rooms:L.sourceRooms,customRooms:L.customRooms,selectedRoomId:v.id,isInvalidFile:L.interiorSelection.isInvalidFile,uploadRetryRequestId:L.interiorSelection.uploadRetryRequestId,showCloseButton:e,onSelectRoom:L.interiorSelection.onSelectRoom,onUploadFile:L.interiorSelection.onUploadFile}):null:null,O=(0,tb.jsx)(Kt,{isComplete:L.processingDialog.isComplete,open:L.processingDialog.open,portalContainer:N,onCloseAnimationEnd:L.processingDialog.onCloseAnimationEnd,onOpenChange:L.processingDialog.onOpenChange}),Q=(0,tb.jsxs)(tb.Fragment,{children:[(0,tb.jsx)(V5,{variant:L.activeErrorDialog.variant,open:L.activeErrorDialog.open,portalContainer:N,showDialogCloseButton:e&&L.activeErrorDialog.showCloseButton,onOpenChange:L.activeErrorDialog.onOpenChange,onTryAgain:L.activeErrorDialog.onTryAgain,onCancel:L.activeErrorDialog.onCancel}),(0,tb.jsx)(V5,{variant:L.uploadErrorDialog.variant,open:L.uploadErrorDialog.open,portalContainer:N,onOpenChange:L.uploadErrorDialog.onOpenChange,onTryAgain:L.uploadErrorDialog.onTryAgain,onCancel:L.uploadErrorDialog.onCancel})]}),U=(0,tb.jsxs)("div",{ref:w,className:"relative grid size-full grid-rows-[minmax(0,1fr)_auto] overflow-hidden text-foreground sm:block","data-testid":"floor-viewer-root",children:[p?(0,tb.jsx)("div",{className:"flex size-full items-center justify-center bg-radial from-background-containers to-background-base-2",children:(0,tb.jsx)(VE,{variant:"logo"})}):L.scene.shouldRender?(0,tb.jsx)(Wz,{ref:T,actions:{openInteriorSelection:L.interiorSelection.openFromScene},canShowAr:!!s&&!(V9&&V4),companyName:D,hasActiveError:!!k,material:{name:P,previewUrl:_},portalContainer:N,room:{imageUrl:v.image_url,name:R},scene:{isLoading:L.scene.isLoading,resetKey:L.scene.resetKey},showDialogCloseButton:e}):null,!L.surface.usesSiblingDialogFlow&&F,!L.surface.usesSiblingDialogFlow&&O]});return L.surface.usesSiblingDialogFlow?(0,tb.jsxs)(tb.Fragment,{children:[(L.scene.shouldRenderDialog||p)&&(0,tb.jsx)(Ve,{open:M,onOpenChange:B,children:(0,tb.jsxs)(Vi,{className:VU,contentInsideOverlay:!0,portalContainer:E,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,tb.jsx)(Vo,{className:"sr-only",children:n}),(0,tb.jsx)(Vl,{className:"sr-only"}),U]})}),F,O,Q]}):(0,tb.jsxs)(tb.Fragment,{children:[U,Q]})}function Kn({className:e,...t}){return(0,tb.jsx)(Hs,{"data-slot":"radio-group",className:j8("grid gap-3",e),...t})}function Ki({checked:e,className:t,...r}){return(0,tb.jsx)("div",{className:j8("absolute top-1/2 left-1/2 size-6 -translate-x-1/2 -translate-y-1/2","flex items-center justify-center rounded-full",e?"bg-lime-400":"bg-background-base-2",t),...r,children:(0,tb.jsx)(cn,{className:"text-constant-white size-3.5",strokeWidth:4})})}function Ka({className:e,variant:t="default",...r}){return(0,tb.jsxs)(Hl,{"data-slot":"radio-group-item",className:j8("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50","check"===t&&"size-6","inverted"===t&&"size-5 border-button-outline data-[state=checked]:border-border-red data-[state=checked]:border-4 data-[state=checked]:bg-constant-white cursor-pointer transition-all",e),...r,children:["check"===t&&(0,tb.jsx)("div",{className:"relative",children:(0,tb.jsx)(Ki,{})}),"inverted"!==t&&(0,tb.jsx)(Hc,{"data-slot":"radio-group-indicator",className:"relative flex items-center justify-center",children:"check"===t?(0,tb.jsx)(Ki,{checked:!0}):(0,tb.jsx)(ci,{className:"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2"})})]})}function Ks({className:e,children:t,...r}){let{className:n,onReachEnd:i,...a}=r.swiperOptions??{},{t:s}=rb(),[o,l]=(0,ty.useState)(null),[c,u]=(0,ty.useState)(!0),[d,h]=(0,ty.useState)(!1),[p,A]=(0,ty.useState)(!1),f=(0,ty.useCallback)(e=>{u(e.isBeginning),h(e.isEnd),A(e.isLocked)},[]),g=(0,ty.useCallback)(e=>{l(e),f(e)},[f]),m=(0,ty.useCallback)(e=>{h(!0),i?.(e)},[i]);return(0,tb.jsxs)("div",{className:j8("relative w-full overflow-hidden",e),children:[(0,tb.jsx)(jt,{className:j8("w-full py-5",n),slidesPerView:"auto",slidesPerGroup:2,onSwiper:g,onReachBeginning:()=>u(!0),onReachEnd:m,onFromEdge:f,onLock:()=>A(!0),onUnlock:()=>A(!1),onResize:f,slidesOffsetBefore:24,slidesOffsetAfter:24,spaceBetween:12,...a,children:t}),(0,tb.jsxs)(j7,{className:j8("absolute top-1/2 left-8 -translate-y-1/2 z-1",{hidden:c||p}),variant:"contrast",size:"icon",onClick:()=>o?.slidePrev(),children:[(0,tb.jsx)(ca,{}),(0,tb.jsx)("span",{className:"sr-only",children:s("previousSlide")})]}),(0,tb.jsxs)(j7,{className:j8("absolute top-1/2 right-8 -translate-y-1/2 z-1",{hidden:d||p}),variant:"contrast",size:"icon",onClick:()=>o?.slideNext(),children:[(0,tb.jsx)(cs,{}),(0,tb.jsx)("span",{className:"sr-only",children:s("nextSlide")})]})]})}function Ko({className:e,...t}){let r=qx("(max-width: 640px)"),{fetchNextMaterialsPage:n,materialItems:i,selectMaterial:a,selectedMaterialId:s}=qq(),o=(0,ty.useCallback)(()=>{n()},[n]);return 0===i.length?null:(0,tb.jsxs)(tb.Fragment,{children:[!r&&(0,tb.jsx)(qd,{orientation:"vertical"}),(0,tb.jsx)("div",{className:j8(e),...t,children:(0,tb.jsx)(Kn,{value:s||void 0,onValueChange:e=>{a(e)},children:(0,tb.jsx)(Ks,{swiperOptions:{onReachEnd:o,className:"py-2 sm:py-5"},children:i.map(({materialId:e,material:t,tinuuid:n})=>(0,tb.jsx)(jr,{className:j8("sm:w-25! w-18! transition-transform duration-200",e!==s&&"hover:scale-110"),children:(0,tb.jsxs)(qf,{htmlFor:`material-${e}`,className:"size-full flex flex-col gap-1 has-data-[state=checked]:bg-transparent",children:[(0,tb.jsxs)("div",{className:"size-full relative sm:h-19 h-13 rounded-[0.75rem] overflow-hidden grid place-items-center sm:block",children:[(0,tb.jsx)("img",{src:t.previews?.[0]?.subRes?.small??t.previews?.[0]?.url,alt:t.name??"",className:"size-full object-cover"}),(0,tb.jsx)(Ka,{value:e,id:`material-${e}`,variant:"check",className:j8("absolute sm:top-1.75 sm:right-1.75",{"sr-only":e!==s})})]}),!r&&(0,tb.jsx)("span",{className:j8("block w-full text-xs text-left text-text-light truncate",{"text-text-dark":e===s}),children:t.name})]})},`${n}-${e}`))})})})]})}function Kl({className:e,...t}){let{t:r}=rb(),{placement:n}=VJ(),{rooms:i,room:a,setRoomId:s}=VY(),{isRoomScenePending:o,selectCustomRoomFile:l}=VK(VW,"useRoomViewerCustomRoomIntake"),c=qx("(max-width: 640px)"),u=(0,ty.useId)(),d=(0,ty.useCallback)((e,t)=>r(`rooms.${t}`,{defaultValue:e}),[r]),h=(0,ty.useCallback)(async e=>{let t=e.target.files?.[0];e.target.value="",t&&await l(t)},[l]);return(0,tb.jsx)("div",{className:j8(e),...t,children:(0,tb.jsx)(Kn,{value:a.id,onValueChange:s,children:(0,tb.jsxs)(Ks,{swiperOptions:{className:"py-2 sm:py-5 pb-3 sm:pb-5"},children:[(0,tb.jsx)(jr,{className:"sm:w-25! w-21! h-auto",children:(0,tb.jsxs)(qf,{htmlFor:u,className:j8("flex size-full cursor-pointer items-center justify-center rounded-[0.75rem] border border-dashed border-muted-foreground/40 bg-transparent px-2 text-center text-xs leading-tight text-muted-foreground transition-colors hover:border-foreground/40 hover:text-foreground",o&&"cursor-wait opacity-80"),"aria-disabled":o,children:[o?(0,tb.jsxs)(tb.Fragment,{children:[(0,tb.jsx)(VE,{className:"size-5"}),(0,tb.jsx)("span",{className:"sr-only",children:r("uploadOwnPhoto")})]}):r("uploadOwnPhoto"),(0,tb.jsx)("input",{id:u,type:"file",accept:"image/*",className:"sr-only",disabled:o,onChange:h})]})}),i.map(e=>(0,tb.jsx)(jr,{className:j8("sm:w-25! w-21! transition-transform duration-200",e.id!==a.id&&"hover:scale-110"),children:(0,tb.jsxs)(qf,{htmlFor:`room-${e.id}`,className:"size-full flex flex-col gap-1 has-data-[state=checked]:bg-transparent",children:[(0,tb.jsxs)("div",{className:"size-full relative h-17 sm:h-19 rounded-[0.75rem] overflow-hidden",children:[(0,tb.jsx)("img",{src:e.image_url,alt:d(e.name,e.id),className:"size-full object-cover",crossOrigin:"anonymous"}),(0,tb.jsx)(Ka,{value:e.id,id:`room-${e.id}`,variant:"check",className:j8("absolute top-1.75 right-1.75",{"sr-only":e.id!==a.id})})]}),"floor"===n&&!c&&(0,tb.jsx)("span",{className:j8("block w-full text-xs text-left text-text-light truncate",{"text-text-dark":e.id===a.id}),children:d(e.name,e.id)})]})},e.id))]})})})}function Kc({className:e,...t}){let{placement:r}=VJ();return(0,tb.jsxs)("div",{className:j8("flex sm:items-end pl-0 overflow-hidden sm:flex-row flex-col py-3 sm:py-0",e),...t,children:[(0,tb.jsx)(Kl,{className:j8("shrink-0",{"sm:min-w-148.5 min-w-full":"floor"===r,grow:"wall"===r})}),"wall"===r&&(0,tb.jsxs)("div",{className:"hidden gap-5 pr-6 pb-5 md:flex",children:[(0,tb.jsx)(qW,{}),(0,tb.jsx)(q2,{})]}),"floor"===r&&(0,tb.jsx)(Ko,{})]})}function Ku({className:e,...t}){let{name:r}=VJ();return(0,tb.jsx)("div",{className:j8("h-16 flex items-center px-6",e),...t,children:(0,tb.jsx)("div",{className:"truncate",children:r})})}function Kd({variant:e,showDialogCloseButton:t=!1}){let{t:r}=rb();return(0,tb.jsxs)("div",{className:"flex size-full flex-col items-center justify-center gap-4 bg-radial from-background-containers to-background-base-2 p-4 text-center",children:[(0,tb.jsx)(Vc,{className:"size-8 text-icons-light"}),(0,tb.jsx)("h2",{className:"typo-base-16 font-medium text-text-dark",children:r("viewer-load-failed"===e||"artwork-load-failed"===e||"room-load-failed"===e?`loadError.${e}`:`accessError.${e}`)}),t&&(0,tb.jsx)(Vr,{asChild:!0,children:(0,tb.jsx)(j7,{variant:"secondary",children:r("close")})})]})}function Kh({showDialogCloseButton:e=!1}){let{placement:t}=VJ(),{isViewerAccessPending:r,accessError:n,loadError:i,setLoadError:a,hasRooms:s}=VX(),{setContainerRef:o,sceneLoad:l,isRoomScenePending:c}=VZ(),{t:u}=rb(),d=r||c||s&&!Object.values(l).every(Boolean);if("floor"===t)return(0,tb.jsx)(Kr,{showDialogCloseButton:e});let h=n??i;return h?(0,tb.jsx)("div",{ref:o,className:"relative size-full overflow-hidden bg-radial from-background-containers to-background-base-2 text-foreground",children:(0,tb.jsx)(Kd,{variant:h,showDialogCloseButton:e})}):(0,tb.jsxs)("div",{ref:o,className:"relative size-full bg-radial from-background-containers to-background-base-2 text-foreground overflow-hidden",children:[e&&(0,tb.jsx)(Vr,{asChild:!0,children:(0,tb.jsxs)(j7,{className:"absolute top-3 right-6 z-20",variant:"secondary",children:[u("close"),(0,tb.jsx)(ce,{})]})}),!r&&(s?(0,tb.jsxs)(tb.Fragment,{children:[(0,tb.jsx)(Ku,{className:"absolute top-0 right-0 left-0 z-15"}),(0,tb.jsxs)("div",{className:"size-full max-w-full grid grid-rows-[1fr_auto]",children:[(0,tb.jsx)(Wn,{onError:()=>a("viewer-load-failed"),children:(0,tb.jsx)(WL,{className:"size-full min-h-0"})}),(0,tb.jsx)(Kc,{className:"bg-background"})]})]}):(0,tb.jsx)(Kl,{className:"absolute inset-x-0 bottom-0 bg-background"})),(0,tb.jsx)("div",{"aria-hidden":!d,className:j8("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",d?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),children:(0,tb.jsx)(VE,{variant:"logo"})})]})}let Kp={poster:"wallart",carpet:"rugs"},KA={wallart:"wall",rugs:"floor",flooring:"floor"};function Kf(e){return"poster"===e||"carpet"===e?Kp[e]:e}let Kg=0,Km=[];function Kv(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 Kb({children:e,src:t,tinuuid:r,type:n,viewerSurface:i,dialogPortalContainer:a=null,viewerDialogOpen:s=!0,onViewerDialogOpenChange:o,width:l,height:c,displayUnit:u,name:d,apiKey:h,baseURL:p,source:A,externalWidgetSession:f}){var g;let m=function(){let{t:e}=rb();return(0,ty.useMemo)(()=>[{value:.025,label:`2.5 ${e("units.cm")}`},{value:.05,label:`5 ${e("units.cm")}`}],[e])}(),v=q1(u),b=KA[n],y="floor"===b?qF:qN,w=jg({apiKey:h,baseURL:p,source:A}),[x,C]=(0,ty.useState)(r),[E,S]=(0,ty.useState)(null),[M,B]=(0,ty.useState)(m[0].value),[I,T]=(0,ty.useState)(v[0].value),[k,R]=(0,ty.useState)(0),[D,P]=(0,ty.useState)(0),[_,L]=(0,ty.useState)(!1),[N,F]=(0,ty.useState)(null),[O,Q]=(0,ty.useState)(()=>({layoutReady:!1,placementReady:!1,materialReady:!1,artifactsReady:!1,assetsReady:!1,prepareReady:!1})),[U,z]=(0,ty.useState)(!1),[G,H]=(0,ty.useState)(null),[j,V]=(0,ty.useState)(null),q=(0,ty.useRef)(null),W=(0,ty.useRef)(new Set),K=(0,ty.useRef)(null),J=(0,ty.useRef)(!0),Y=(0,ty.useRef)(!1),X="floor"===b,Z="default"===A&&void 0!==h,$=n$({queryKey:["room-viewer","activate",{apiKey:h??null,source:A}],enabled:Z,queryFn:({signal:e})=>jL({productType:jm({apiKey:h,baseURL:p,source:A})},{baseURL:p,headers:{"x-api-key":h},signal:e})},nN,void 0),ee=jv($.error),et=(0,ty.useMemo)(()=>{let e=$.data;return j$(e?.widgetSession,{apiConfig:{baseURL:p,headers:{"x-api-key":h}}})},[$.data,h,p]),er=(0,ty.useMemo)(()=>f instanceof jZ?f:j$(f,{apiConfig:{baseURL:p,headers:{"x-api-key":h}}})??et,[et,h,p,f]),en="shopify"===A?null!==er:Z&&$.isSuccess,ei=n$({queryKey:["room-viewer","rooms",{apiKey:(g={apiKey:h,baseURL:p,source:A,widgetSession:er}).apiKey??null,source:g.source,widgetSessionId:g.widgetSession?.sid??null}],enabled:w&&en,queryFn:async({signal:e})=>{try{return await j5({apiKey:h,baseURL:p,signal:e,source:A,widgetSession:er})}catch(e){if(jv(e))throw e;return[]}}},nN,void 0),ea=w?ei.data??Km:y,[es,eo]=(0,ty.useState)(()=>({rooms:ea,sourceRooms:ea})),el=(0,ty.useMemo)(()=>Kv(es.rooms,es.sourceRooms,ea),[es.rooms,es.sourceRooms,ea]),ec=(0,ty.useCallback)(e=>{eo(t=>{let r=Kv(t.rooms,t.sourceRooms,ea);return{rooms:"function"==typeof e?e(r):e,sourceRooms:ea}})},[ea]),[eu,ed]=(0,ty.useState)(()=>y[0].id),eh=el.find(e=>e.id===eu),ep=eh??el[0]??y[0],eA=el.length>0;!eh&&el[0]&&eu!==el[0].id&&ed(el[0].id);let ef=n$({queryKey:j2(x??void 0,{apiKey:h,baseURL:p,source:A}),enabled:(!Z||$.isSuccess||$.isError&&null===ee)&&X&&!!x,placeholderData:nv,queryFn:async({signal:e})=>{if(!x)throw Error("Tinuuid is required.");return j3(x,{apiKey:h,baseURL:p,signal:e,source:A,widgetSession:er})}},nN,void 0),eg=ef.data??null,em=E?.native?.glbUrl??null,ev=jv(ef.error),eb=jv(ei.error),ey=w&&("shopify"===A?null===er||ei.isLoading:$.isSuccess&&ei.isLoading),ew=Z&&$.isLoading||ey,ex=$.error&&null===ee?"viewer-load-failed":null,eC=ef.error&&null===ev?"viewer-load-failed":null,eE="wall"===b&&("string"!=typeof t||0===t.trim().length)?"artwork-load-failed":null,eS=G??ee??eb??ev,eM=j??ex??eC??eE,eB=(0,ty.useCallback)(e=>{Q(t=>Object.assign({},t,e))},[]);(0,ty.useEffect)(()=>{let e=new Set(el.map(e=>e.image_url));for(let t of Array.from(W.current))e.has(t)||(URL.revokeObjectURL(t),W.current.delete(t))},[el]),(0,ty.useEffect)(()=>{let e=W.current;return J.current=!0,()=>{for(let t of(J.current=!1,K.current?.abort(),Array.from(e)))URL.revokeObjectURL(t);e.clear()}},[]);let eI=(0,ty.useCallback)(async e=>{let t=null,r=new AbortController;K.current?.abort(),K.current=r,z(!0);try{t=URL.createObjectURL(e);let n=await WV(e,{apiKey:h,baseURL:p,source:A,signal:r.signal,widgetSession:er});if(r.signal.aborted||!J.current)return void URL.revokeObjectURL(t);WW()&&WK(n,e.name).catch(e=>{console.error("Failed to export room debug mask",e)});let i={id:(Kg+=1,`room-custom-${Kg}`),name:e.name,image_url:t,scene:n};W.current.add(t),eB({placementReady:!1,prepareReady:!1,artifactsReady:!1,assetsReady:!1}),ec(e=>[i,...e]),ed(i.id)}catch(n){if(t&&URL.revokeObjectURL(t),r.signal.aborted)return;let e=jv(n);if(e)return void H(e);console.error("Failed to prepare custom room scene",n)}finally{K.current===r&&(K.current=null,J.current&&z(!1))}},[h,p,eB,ec,A,er]);(0,ty.useEffect)(()=>{if("dialog"!==i||!s){Y.current=!1;return}Y.current||er&&(j0(er,"widget_opened"),Y.current=!0)},[s,i,er]),(0,ty.useEffect)(()=>{X&&(C(r),S(null),H(null),V(null))},[r,X]),(0,ty.useEffect)(()=>{H(null),V(null)},[h,A]),(0,ty.useEffect)(()=>{X&&eg&&null===E&&S(eg.materials?.[0]??null)},[E,eg,X]);let eT=(0,ty.useMemo)(()=>({type:n,placement:b,name:d,width:l,height:c,displayUnit:u}),[n,b,d,l,c,u]),ek=(0,ty.useMemo)(()=>({viewerSurface:i,dialogPortalContainer:a,viewerDialogOpen:s,onViewerDialogOpenChange:o}),[i,a,s,o]),eR=(0,ty.useMemo)(()=>({rooms:el,sourceRooms:ea,setRooms:ec,room:ep,setRoomId:ed}),[el,ep,ec,ea]),eD=(0,ty.useMemo)(()=>({src:t,glbUrl:em,tinuuid:x,viewedObject:eg,material:E,setTinuuid:C,setMaterial:S,apiKey:h,baseURL:p,source:A,widgetSession:er,hasRooms:eA,isViewerAccessPending:ew,accessError:eS,setAccessError:H,loadError:eM,setLoadError:V}),[t,em,x,eg,E,h,p,A,er,eA,ew,eS,eM]),eP=(0,ty.useMemo)(()=>({containerRef:N,setContainerRef:F,resourceRef:q,angle:k,setAngle:R,rotation:D,setRotation:P,isDragging:_,setIsDragging:L,sceneLoad:O,patchSceneLoad:eB,isRoomScenePending:U,setIsRoomScenePending:z}),[N,k,D,_,O,eB,U]),e_=(0,ty.useMemo)(()=>({frameWidth:M,setFrameWidth:B,matting:I,setMatting:T}),[M,I]),eL=(0,ty.useMemo)(()=>({isRoomScenePending:U,selectCustomRoomFile:eI}),[U,eI]);return(0,tb.jsx)(Vz,{value:eT,children:(0,tb.jsx)(VG,{value:ek,children:(0,tb.jsx)(VH,{value:eR,children:(0,tb.jsx)(Vj,{value:eD,children:(0,tb.jsx)(VV,{value:eP,children:(0,tb.jsx)(Vq,{value:e_,children:(0,tb.jsx)(VW,{value:eL,children:e})})})})})})})}let Ky=new ie({defaultOptions:{queries:{gcTime:1/0,refetchOnMount:!1,refetchOnReconnect:!1,refetchOnWindowFocus:!1,retry:(e,t)=>{let r=function(e){if(a4(e))return e.response?.status}(t);return(void 0===r||!(r>=400)||!(r<500))&&e<2}}}});function Kw({type:e,src:t,tinuuid:r,name:n,height:i,width:a,language:s,dimensionUnit:o="m",displayUnit:l="cm",apiKey:c,source:u="default",showDialogCloseButton:d=!1,viewerSurface:h="inline",dialogPortalContainer:p=null,viewerDialogOpen:A=!0,onViewerDialogOpenChange:f,widgetSession:g}){let{i18n:m}=rb(),v=c?.trim()||void 0,b=Kf(e),y="wall"===KA[b]?function(e,t,r="m"){return{width:qa(e??0,r),height:qa(t??0,r)}}(a,i,o):null;return(0,ty.useEffect)(()=>{},[e]),(0,ty.useEffect)(()=>{"string"==typeof s&&m.changeLanguage(s)},[m,s]),(0,tb.jsx)(nH,{client:Ky,children:(0,tb.jsx)(Kb,{src:t??null,tinuuid:r??null,type:b,viewerSurface:h,dialogPortalContainer:p,viewerDialogOpen:A,onViewerDialogOpenChange:f,name:n,width:y?.width??0,height:y?.height??0,displayUnit:l,apiKey:v,baseURL:"shopify"===u?jf:void 0,source:u,externalWidgetSession:g,children:(0,tb.jsx)(Kh,{showDialogCloseButton:d})})})}function Kx({type:e,src:t,tinuuid:r,width:n,height:i,dimensionUnit:a,displayUnit:s,name:o,language:l,apiKey:c,source:u,widgetSession:d,disableClose:h=!1,open:p,defaultOpen:A,onOpenChange:f,...g}){let[m,v]=(0,ty.useState)(null),b=KA[Kf(e)],y="floor"===b&&h,[w,x]=(0,ty.useState)(A??!1),C=p??w,[E,S]=(0,ty.useState)(C),M=C||E;(0,ty.useEffect)(()=>{C&&S(!0)},[C]);let B=(0,tb.jsx)(Kw,{type:e,src:t,tinuuid:r,name:o,height:i,width:n,dimensionUnit:a,displayUnit:s,language:l,apiKey:c,source:u,widgetSession:d,showDialogCloseButton:!y,viewerSurface:"dialog",dialogPortalContainer:m,viewerDialogOpen:C,onViewerDialogOpenChange:function(e){(e||!y)&&(void 0===p&&x(e),f?.(e))}});return(0,tb.jsxs)(tb.Fragment,{children:[(0,tx.createPortal)((0,tb.jsx)("style",{children:jl.A}),document.head),(0,tx.createPortal)((0,tb.jsxs)(rQ.div,{"data-neurodyn-room-viewer-root":"",style:{display:"block",letterSpacing:"normal",zIndex:0x7fffffff},children:[(0,tb.jsx)("style",{children:jp}),(0,tb.jsx)("div",{ref:v}),m&&(0,tb.jsx)(jo,{root:m,storageKey:"neurodyn-theme",defaultTheme:"light",children:(0,tb.jsx)(ry,{i18n:ju,children:"floor"===b?M&&B:(0,tb.jsx)(Ve,{...g,open:p,defaultOpen:A,onOpenChange:f,children:(0,tb.jsxs)(Vi,{className:VU,contentInsideOverlay:!0,portalContainer:m,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,tb.jsxs)(Va,{className:"sr-only",children:[(0,tb.jsx)(Vo,{children:o}),(0,tb.jsx)(Vl,{})]}),B]})})})})]}),document.body)]})}jj({baseURL:"https://api.neurodyn.ai/v1/"}),jk({baseURL:"https://api.neurodyn.ai/"});var KC=r("../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/client.js");let KE=0;function KS(e,t){let r=e.getAttribute(t);return r?Number(r):void 0}window.__neurodynRoomViewerDialog?.destroy();let KM=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-${KE++}`,document.body.appendChild(this.container),this.root=(0,KC.createRoot)(this.container)),this.root}render(){this.props&&this.ensureRoot().render((0,ty.createElement)(Kx,{...this.props,onOpenChange:this.handleOpenChange,open:this.openState}))}};function KB(e){let t=e.target instanceof Element?e.target.closest("[data-neurodyn-room-viewer-dialog]"):null;t&&KM.open(function(e,t={}){var r,n,i;let a,s,o;return{disableClose:void 0!==t.disableClose?t.disableClose:"true"===e.getAttribute("data-neurodyn-room-viewer-disable-close"),type:void 0!==t.type?t.type:e.getAttribute("data-neurodyn-room-viewer-type"),src:void 0!==t.src?t.src:e.getAttribute("data-neurodyn-room-viewer-src"),tinuuid:void 0!==t.tinuuid?t.tinuuid:e.getAttribute("data-neurodyn-room-viewer-tinuuid"),name:void 0!==t.name?t.name:e.getAttribute("data-neurodyn-room-viewer-name"),language:void 0!==t.language?t.language:e.getAttribute("data-neurodyn-room-viewer-language"),width:void 0!==t.width?t.width:KS(e,"data-neurodyn-room-viewer-width"),height:void 0!==t.height?t.height:KS(e,"data-neurodyn-room-viewer-height"),dimensionUnit:void 0!==t.dimensionUnit?t.dimensionUnit:(r="data-neurodyn-room-viewer-dimension-unit","m"===(a=e.getAttribute(r))||"cm"===a||"in"===a?a:void 0),displayUnit:void 0!==t.displayUnit?t.displayUnit:(n="data-neurodyn-room-viewer-display-unit","cm"===(s=e.getAttribute(n))||"in"===s?s:void 0),apiKey:void 0!==t.apiKey?t.apiKey:e.getAttribute("data-neurodyn-room-viewer-api-key"),source:void 0!==t.source?t.source:(i="data-neurodyn-room-viewer-source","default"===(o=e.getAttribute(i))||"shopify"===o?o:void 0)}}(t))}M={destroy:function(){document.removeEventListener("click",KB),KM.destroy(),window.__neurodynRoomViewerDialog===M&&(window.__neurodynRoomViewerDialog=void 0)}},document.addEventListener("click",KB),window.__neurodynRoomViewerDialog=M})()})();
7550
+ ${s}`;a(!0);try{if(!i&&t)return void await WP(o);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:o,files:[t]})}catch(e){console.error("Failed to generate scene screenshot for sharing",e)}await navigator.share({text:o,url:s})}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,ty.useCallback)(async()=>{let t=e.current;if(t){o(!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{o(!1)}}},[e,r]),isDownloading:s,isSharing:i,share:c}}function WL({captureRef:e,className:t,canvasWrapperClassName:r,chrome:n="default",...i}){let{placement:a,type:s}=VJ(),{containerRef:o,isDragging:l,angle:c,rotation:u,setAngle:d,setRotation:h}=VZ(),{t:p}=rb(),A=(0,ty.useRef)(null),f=(0,ty.useRef)(null),g=e??f,m=qx("(max-width: 639px)"),v=qx("(min-width: 768px)"),{canShare:b,isSharing:y,share:w}=W_({captureRef:g,shareMessage:p(`shareMessage.${s}`)}),x=(0,ty.useCallback)(()=>{m&&A.current?.centerView()},[m]);return(0,tb.jsxs)("div",{className:j8("relative flex items-center justify-center overflow-hidden",t),...i,children:[(0,tb.jsx)(AX,{ref:A,disabled:l,children:(0,tb.jsx)(AZ,{wrapperClass:"neurodyn-rzpp-wrapper size-full!",contentClass:"neurodyn-rzpp-content h-full! min-w-full sm:max-w-full",children:(0,tb.jsx)(WD,{captureRef:g,className:r,onSizeChange:x})})}),"default"===n&&(0,tb.jsxs)(tb.Fragment,{children:[(0,tb.jsx)(q5,{className:"absolute bottom-4 left-4 sm:bottom-6 sm:left-6"}),"floor"===a&&(0,tb.jsxs)("div",{className:"bg-button-dark typo-button-normal absolute bottom-6 left-1/2 hidden h-9 -translate-x-1/2 items-center gap-1.5 rounded-lg px-3.75 text-text-white md:inline-flex",children:[(0,tb.jsx)("span",{className:"shrink-0",children:p("scene.position")}),(0,tb.jsx)(qy,{value:[u],onValueChange:([e])=>h(e??0),min:-180,max:180,step:1,className:"w-29.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":p("scene.position")})]}),(0,tb.jsxs)("div",{className:"absolute right-4 bottom-4 inline-flex items-center gap-2 sm:right-6 sm:bottom-6",children:[("wall"===a||"floor"===a&&!v)&&(0,tb.jsxs)(qm,{children:[(0,tb.jsx)(qv,{asChild:!0,children:(0,tb.jsxs)(j7,{variant:"contrast",size:m?"icon":"default",children:[(0,tb.jsx)(Vb,{className:"size-5"}),(0,tb.jsx)("span",{className:"sr-only sm:not-sr-only",children:p("scene.tunePosition")})]})}),(0,tb.jsx)(qb,{className:"px-3 py-3.5 bg-button-dark border-button-dark text-text-white",side:"top",align:"end",portalContainer:o,children:(0,tb.jsxs)(qh,{children:[(0,tb.jsxs)(qA,{orientation:"horizontal",children:[(0,tb.jsx)(qg,{children:p("scene.rotation")}),(0,tb.jsx)(qy,{value:[u],onValueChange:([e])=>h(e??0),min:-180,max:180,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":p("scene.rotation")})]}),"wall"===a&&(0,tb.jsxs)(qA,{orientation:"horizontal",children:[(0,tb.jsx)(qg,{children:p("scene.angle")}),(0,tb.jsx)(qy,{value:[c],onValueChange:([e])=>d(e??0),max:75,min:-75,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":p("scene.angle")})]})]})})]}),"wall"===a&&(0,tb.jsxs)(j7,{variant:"contrast",size:m?"icon":"default",disabled:!b||y,onClick:w,children:[(0,tb.jsx)(Vw,{className:"size-5"}),(0,tb.jsx)("span",{className:"sr-only sm:not-sr-only",children:p("scene.share")})]}),m&&"wall"===a&&(0,tb.jsxs)(qm,{children:[(0,tb.jsx)(qv,{asChild:!0,children:(0,tb.jsx)(j7,{variant:"contrast",size:"icon",children:(0,tb.jsx)(Vy,{})})}),(0,tb.jsxs)(qb,{className:"grid gap-5",portalContainer:o,children:[(0,tb.jsx)(qW,{}),(0,tb.jsx)(q2,{})]})]})]})]})]})}function WN({className:e,gridClassName:t,titleClassName:r,onOpenChange:n,...i}){let{t:a}=rb(),s=(0,ty.useRef)(null),{fetchNextMaterialsPage:o,hasNextPage:l,isFetchingNextPage:c,isLoading:u,materialItems:d,selectMaterial:h,selectedMaterialId:p}=qq({includeViewedObject:!0});(0,ty.useEffect)(()=>{let e=s.current;e&&!u&&!c&&l&&0!==d.length&&e.scrollHeight<=e.clientHeight&&o()},[o,l,c,u,d.length]);let A=(0,ty.useCallback)(e=>{let{clientHeight:t,scrollHeight:r,scrollTop:n}=e.currentTarget;n+t>=r-64&&o()},[o]),f=(0,ty.useCallback)(e=>{h(e)&&n(!1)},[n,h]);return(0,tb.jsxs)("div",{...i,className:j8("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,tb.jsx)("h2",{className:j8("typo-base-16 font-medium sm:typo-base-14 sm:font-semibold text-text-dark",r),children:a("floor.materialSelection.title")}),(0,tb.jsx)("div",{"data-testid":"material-selection-grid",ref:s,className:j8("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,tb.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})=>{let n,i=e===p,a=(n=t.previews?.[0],n?.subRes?.small??n?.url);return(0,tb.jsxs)("button",{type:"button","data-selected":i,"aria-pressed":i,className:j8("group relative grid aspect-square min-w-0 place-items-center overflow-hidden rounded-lg border border-border bg-background-containers p-1 text-left transition hover:border-icons-normal 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:[a?(0,tb.jsx)("img",{src:a,alt:"",className:"size-full rounded-md object-cover"}):(0,tb.jsx)(Vg,{className:"size-6 text-icons-normal"}),(0,tb.jsx)("span",{className:"sr-only",children:t.name}),i&&(0,tb.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,tb.jsx)(Vd,{className:"size-4"})})]},`${r}-${e}`)}),(u||c)&&(0,tb.jsx)("div",{className:"col-span-3 grid h-16 place-items-center",children:(0,tb.jsx)(VE,{className:"size-6"})})]})})]})}function WF({open:e,portalContainer:t,onOpenChange:r}){let{t:n}=rb();return(0,tb.jsx)(Ve,{open:e,onOpenChange:r,children:(0,tb.jsxs)(Vi,{contentInsideOverlay:!0,"data-testid":"material-selection-mobile-overlay",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,tb.jsx)(Vo,{className:"sr-only",children:n("floor.materialSelection.title")}),(0,tb.jsx)(Vl,{className:"sr-only"}),(0,tb.jsx)(WN,{className:"min-h-0",gridClassName:"max-h-none",onOpenChange:r}),(0,tb.jsx)(Vs,{className:"shrink-0 p-0",children:(0,tb.jsx)(Vr,{asChild:!0,children:(0,tb.jsx)(j7,{type:"button",variant:"outline",className:"w-full",children:n("close")})})})]})})}let WO="data-material-selection-action",WQ="data-material-selection-panel";function WU({actionLabel:e,actionClassName:t,actionPlacement:r,className:n,iconClassName:i,isOpen:a,materialName:s,previewClassName:o,previewUrl:l,testId:c,titleLabel:u,onClick:d,onPointerDown:h}){let{t:p}=rb(),{displayUnit:A,type:f}=VJ(),{containerRef:g}=VZ(),{viewedObject:m}=VX(),{selectedDestinationUrl:v,sizeItems:b,selectedTinuuid:y,selectSize:w}=function(){var e;let{tinuuid:t,setMaterial:r,setTinuuid:n,apiKey:i,baseURL:a,source:s,widgetSession:o}=VX(),{type:l}=VJ(),{data:c}=n$({queryKey:j2(t??void 0,{apiKey:i,baseURL:a,source:s,resourceType:l}),enabled:"rugs"===l&&!!t,placeholderData:nv,queryFn:({signal:e})=>{if(!t)throw Error("Tinuuid is required.");return j3(t,{apiKey:i,baseURL:a,signal:e,source:s,widgetSession:o,resourceType:l})}},nN,void 0),u=c?.kit?.uuid,d=c?.owner?.uuid;(0,ty.useEffect)(()=>{let e=c?.materials?.[0];c?.tinuuid===t&&e&&r(e)},[c,r,t]);let{data:h,fetchNextPage:p,hasNextPage:A,isFetchingNextPage:f,isFetchNextPageError:g}=n$({queryKey:["room-viewer","kit-objects",{apiKey:(e={apiKey:i,baseURL:a,source:s,resourceType:l}).apiKey??null,kitUuid:u??null,ownerUuid:d??null,resourceType:e.resourceType??null,source:e.source}],enabled:"rugs"===l&&!!u&&!!d,queryFn:({pageParam:e,signal:t})=>{if(!u||!d)throw Error("Kit uuid and owner uuid are required.");return j4(u,d,e,{apiKey:i,baseURL:a,signal:t,source:s,widgetSession:o,resourceType:l})},initialPageParam:0,getNextPageParam:(e,t,r)=>void 0!==e.pages_count?r+1<e.pages_count?r+1:void 0:e.objs?.length?r+1:void 0},n3,void 0);(0,ty.useEffect)(()=>{!A||f||g||p({cancelRefetch:!1})},[p,A,f,g]);let m=(0,ty.useMemo)(()=>h?.pages.flatMap(e=>e.objs??[])??[],[h]),v=(0,ty.useMemo)(()=>m.map(qc).filter(e=>null!==e),[m]);return{selectedDestinationUrl:c?.tinuuid===t?c.destinationUrl:void 0,sizeItems:v,selectedTinuuid:t,selectSize:e=>!!v.some(t=>t.tinuuid===e)&&(n(e),!0)}}(),x=p(`units.${A}`),C=b.find(e=>e.tinuuid===y),E=function(e){let t=e?.trim();if(!t||qi.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}}("rugs"===f?v??(m?.tinuuid===y?m.destinationUrl:void 0):m?.destinationUrl),S=(0,tb.jsxs)(j7,{type:"button",variant:"outline",size:"sm",[WO]:!0,"aria-expanded":a,className:j8("shrink-0","stacked"===r&&"w-fit",t),onPointerDown:h?e=>{e.preventDefault(),e.stopPropagation(),h()}:void 0,onClick:d,children:[a?(0,tb.jsx)(Vh,{className:"size-4"}):(0,tb.jsx)(Vv,{className:"size-4"}),e]});return(0,tb.jsxs)("div",{className:n,"data-neurodyn-room-viewer-product":"","data-testid":c,children:[(0,tb.jsx)("div",{className:o,children:l?(0,tb.jsx)("img",{src:l,alt:"",className:"size-full object-cover"}):(0,tb.jsx)(Vg,{className:i})}),(0,tb.jsxs)("div",{className:"grid min-h-16 min-w-0 flex-1 content-center gap-2",children:[(0,tb.jsxs)("div",{className:"flex min-w-0 items-start justify-between gap-2",children:[(0,tb.jsxs)("div",{className:"min-w-0",children:[(0,tb.jsx)("div",{className:"sr-only",children:u}),(0,tb.jsx)("div",{className:"typo-button-normal truncate text-text-dark",children:s})]}),E&&(0,tb.jsx)("a",{href:E,target:"_blank",rel:"noopener noreferrer",className:"typo-base-12 shrink-0 text-button-primary underline-offset-2 hover:underline","data-testid":c?`${c}-description-link`:void 0,children:p("floor.scene.description")})]}),(0,tb.jsxs)("div",{className:"flex flex-nowrap items-center gap-2",children:["stacked"===r&&S,b.length>1&&!!C&&(0,tb.jsxs)(V8,{value:y??void 0,onValueChange:w,children:[(0,tb.jsx)(V7,{size:"sm",className:"w-fit shrink-0","data-testid":c?`${c}-size-select`:void 0,children:(0,tb.jsx)(V6,{})}),(0,tb.jsx)(qe,{portalContainer:g,children:b.map(e=>{var t;let r;return(0,tb.jsx)(qt,{value:e.tinuuid,children:(t=e.size,r=t.split("\xd7").map(e=>"cm"===A?e:Math.round(qs(Number(e)/100,A)).toString()).join("\xd7"),`${r} ${x}`)},e.tinuuid)})})]})]})]}),"trailing"===r&&S]})}function Wz({actions:e,canShowAr:t,companyName:r,hasActiveError:n,material:i,portalContainer:a,ref:s,room:o,scene:l,showDialogCloseButton:c=!1}){let{t:u}=rb(),{type:d}=VJ(),[h,p]=(0,ty.useState)(!1),[A,f]=(0,ty.useState)(!1),g=(0,ty.useRef)(null),m=(0,ty.useRef)(!1),v=u(h?"floor.scene.hideCatalog":`resourceType.${d}.replaceProduct`),b=u(A?"floor.scene.hideCatalog":`resourceType.${d}.replaceProductShort`),y=u(`resourceType.${d}.productCardTitle`),{canShare:w,download:x,isDownloading:C,isSharing:E,share:S}=W_({captureRef:g,fallbackToClipboard:!0,shareMessage:u(`shareMessage.${d}`)}),M=(0,ty.useCallback)(()=>{p(!1),f(!1)},[]);(0,ty.useImperativeHandle)(s,()=>({closeMaterialSelection:M}),[M]);let B=(0,ty.useCallback)(()=>{if(m.current){m.current=!1;return}p(!0),f(!1)},[]),I=(0,ty.useCallback)(()=>{m.current=!0,M()},[M]),T=(0,ty.useCallback)(()=>{f(!0),p(!1)},[]),k=(0,ty.useCallback)(()=>{M(),e.openInteriorSelection()},[e,M]);return(0,ty.useEffect)(()=>{if(h)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(`[${WO}], [${WQ}]`)||p(!1)}function t(e){"Escape"===e.key&&p(!1)}},[h]),(0,tb.jsxs)(tb.Fragment,{children:[(0,tb.jsx)("div",{className:"absolute inset-0 bg-constant-black","data-testid":"floor-scene-background-base"}),(0,tb.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,tb.jsx)("img",{src:o.imageUrl,alt:"",className:"block size-full max-w-none object-cover object-center opacity-50"})}),(0,tb.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,tb.jsx)("div",{className:"min-w-0 pt-1",children:(0,tb.jsx)("h1",{"data-testid":"floor-scene-header-company",className:"typo-base-16 truncate font-medium lg:typo-base-18",children:r})}),(0,tb.jsxs)("div",{className:"pointer-events-auto inline-flex shrink-0 items-center gap-2",children:[(0,tb.jsxs)(j7,{type:"button",variant:"secondary","aria-label":u("floor.scene.share"),"data-neurodyn-room-viewer-share":"",disabled:!w||E,onClick:S,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tb.jsx)(Vw,{className:"size-5"}),(0,tb.jsx)("span",{className:"hidden lg:inline",children:u("floor.scene.share")})]}),(0,tb.jsxs)(j7,{type:"button",variant:"secondary","aria-label":u("floor.scene.download"),"data-neurodyn-room-viewer-download":"",disabled:C,onClick:x,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tb.jsx)(Vp,{className:"size-5"}),(0,tb.jsx)("span",{className:"hidden lg:inline",children:u("floor.scene.download")})]}),c&&(0,tb.jsx)(Vr,{asChild:!0,children:(0,tb.jsxs)(j7,{type:"button",variant:"secondary","aria-label":u("close"),className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tb.jsx)("span",{className:"hidden lg:inline",children:u("close")}),(0,tb.jsx)(Vh,{className:"!size-5"})]})})]})]}),(0,tb.jsx)(WL,{captureRef:g,chrome:"none",className:"relative z-10 size-full min-h-0",canvasWrapperClassName:"p-0 sm:pt-0 sm:pb-0"},l.resetKey),(0,tb.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,tb.jsxs)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:[(0,tb.jsx)(WU,{actionLabel:v,actionPlacement:"stacked",className:"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)]",iconClassName:"size-6 text-icons-normal",isOpen:h,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-desktop-product-card",titleLabel:y,onClick:h?M:B,onPointerDown:h?I:void 0}),(0,tb.jsxs)("div",{className:"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)]","data-testid":"floor-room-card","data-neurodyn-room-viewer-room":"",children:[(0,tb.jsx)("img",{src:o.imageUrl,alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,tb.jsxs)("span",{className:"grid min-w-0 flex-1 content-center gap-2",children:[(0,tb.jsx)("span",{className:"typo-button-normal block min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-desktop-room-name",children:o.name}),(0,tb.jsx)(j7,{type:"button",variant:"outline",size:"sm",className:"w-fit",onClick:k,children:u("floor.interiorSelection.chooseInterior")})]})]})]}),t&&(0,tb.jsxs)("div",{className:"pointer-events-auto 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-testid":"floor-ar-card","data-neurodyn-room-viewer-try-at-home":"",children:[(0,tb.jsx)("img",{src:o.imageUrl,alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,tb.jsxs)("div",{className:"grid min-w-0 flex-1 content-center gap-2",children:[(0,tb.jsx)(q5,{buttonLabel:u("floor.scene.tryAtHome"),buttonVariant:"secondary",buttonSize:"sm",buttonClassName:"w-fit"}),(0,tb.jsx)("div",{className:"typo-base-12 truncate font-medium text-text-light",children:u("floor.scene.tryAtHomeBody")})]})]})]}),(0,tb.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,tb.jsx)(WU,{actionLabel:v,actionPlacement:"stacked",className:"pointer-events-auto 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)]",iconClassName:"size-6 text-icons-normal",isOpen:h,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-tablet-product-card",titleLabel:y,onClick:h?M:B,onPointerDown:h?I:void 0}),(0,tb.jsxs)("div",{className:"pointer-events-auto grid w-[254px] gap-2",children:[(0,tb.jsxs)("div",{className:"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)]","data-testid":"floor-tablet-room-card","data-neurodyn-room-viewer-room":"",children:[(0,tb.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,tb.jsx)("img",{src:o.imageUrl,alt:"",className:"size-10 shrink-0 rounded-full object-cover"}),(0,tb.jsxs)("span",{className:"grid min-w-0",children:[(0,tb.jsx)("span",{className:"typo-base-12 truncate text-text-light",children:u("floor.scene.interiorCardTitle")}),(0,tb.jsx)("span",{className:"typo-button-normal min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-tablet-room-name",children:o.name})]})]}),(0,tb.jsx)(j7,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:k,children:u("floor.interiorSelection.chooseInteriorShort")})]}),t&&(0,tb.jsx)(q5,{className:"w-full","data-neurodyn-room-viewer-try-at-home":"",buttonLabel:u("floor.scene.tryAtHome"),buttonLeadingIcon:(0,tb.jsx)(Vx,{className:"size-5"}),buttonVariant:"secondary",buttonSize:"default",buttonClassName:"h-9 w-full rounded-xl"})]})]}),(0,tb.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,tb.jsx)(WU,{actionLabel:b,actionClassName:"w-[137px]",actionPlacement:"stacked",className:"flex items-center justify-start gap-4 border-b border-border-light bg-background-containers p-4 text-left",iconClassName:"size-5 text-icons-normal",isOpen:A,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-mobile-product-card",titleLabel:y,onClick:A?M:T}),(0,tb.jsxs)("div",{className:"grid gap-4 bg-background-containers px-6 pt-4 pb-6","data-testid":"floor-mobile-bottom-actions",children:[(0,tb.jsxs)("div",{className:"flex w-full items-center justify-between gap-3 rounded-full bg-background-containers text-left","data-neurodyn-room-viewer-room":"",children:[(0,tb.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,tb.jsx)("img",{src:o.imageUrl,alt:"",className:"size-10 shrink-0 rounded-full object-cover"}),(0,tb.jsxs)("span",{className:"grid min-w-0",children:[(0,tb.jsx)("span",{className:"typo-base-12 truncate text-text-light",children:u("floor.scene.interiorCardTitle")}),(0,tb.jsx)("span",{className:"typo-button-normal min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-mobile-room-name",children:o.name})]})]}),(0,tb.jsx)(j7,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:k,children:u("floor.interiorSelection.chooseInterior")})]}),t&&(0,tb.jsx)(q5,{className:"w-full","data-neurodyn-room-viewer-try-at-home":"",buttonLabel:u("floor.scene.tryAtHome"),buttonLeadingIcon:(0,tb.jsx)(Vx,{className:"size-6"}),buttonVariant:"secondary",buttonSize:"lg",buttonClassName:"h-11 w-full rounded-xl"})]})]}),h&&!n&&(0,tb.jsx)(WN,{[WQ]:!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:M}),(0,tb.jsx)(WF,{open:A&&!n,portalContainer:a,onOpenChange:f}),(0,tb.jsx)("div",{"aria-hidden":!l.isLoading,className:j8("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",l.isLoading?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),children:(0,tb.jsx)(VE,{variant:"logo"})})]})}function WG({rooms:e,customRooms:t,selectedRoomId:r,isInvalidFile:n,uploadRetryRequestId:i=0,showCloseButton:a=!1,onSelectRoom:s,onUploadFile:o}){let l,{t:c}=rb(),u=(0,ty.useId)(),d=(0,ty.useRef)(null);function h(e){return e.map(e=>(0,tb.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:()=>s(e.id),children:[(0,tb.jsx)("img",{src:e.image_url,alt:"",decoding:"async",className:"size-full scale-[1.02] transform-gpu object-cover transition duration-200 group-hover:scale-105"}),(0,tb.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,ty.useEffect)(()=>{i>0&&d.current?.click()},[i]),(0,tb.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",children:[a&&(l=(0,tb.jsx)(j7,{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,tb.jsx)(Vh,{})}),(0,tb.jsx)(Vr,{asChild:!0,children:l})),(0,tb.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,tb.jsxs)("div",{className:"grid gap-2","data-testid":"floor-interior-selection-upload",children:[(0,tb.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&&o(t)},children:[(0,tb.jsx)(Vu,{className:"size-5 text-background-blue"}),c("floor.interiorSelection.uploadPhoto"),(0,tb.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&&o(t)}})]}),n&&(0,tb.jsx)("p",{className:"typo-base-12 font-medium text-destructive",children:c("floor.interiorSelection.invalidFile")})]}),(0,tb.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,tb.jsxs)("div",{className:"grid min-h-max gap-4",children:[t.length>0&&(0,tb.jsxs)("div",{className:"grid gap-3",children:[(0,tb.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.customTitle")}),(0,tb.jsx)("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-3","data-testid":"floor-custom-interior-selection-grid",children:h(t)})]}),(0,tb.jsxs)("div",{className:"grid gap-3",children:[(0,tb.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.presetsTitle")}),(0,tb.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,tb.jsx)(Vs,{className:"-mt-2 shrink-0 p-0 sm:mt-0",children:(0,tb.jsx)(Vr,{asChild:!0,children:(0,tb.jsx)(j7,{variant:"outline",className:"w-full",children:c("close")})})})]})}function WH(e){return(0,tb.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,tb.jsx)(WG,{...e})})}function Wj({open:e,showCloseButton:t=!0,portalContainer:r,onOpenChange:n,...i}){let{t:a}=rb();return(0,tb.jsx)(Ve,{open:e,onOpenChange:n,children:(0,tb.jsxs)(Vi,{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,tb.jsx)(Vo,{className:"sr-only",children:a("floor.interiorSelection.title")}),(0,tb.jsx)(Vl,{className:"sr-only"}),(0,tb.jsx)(WG,{...i,showCloseButton:t})]})})}async function WV(e,t={}){let r=t.source??"default",n={image:e};if(jg({apiKey:t.apiKey,source:r})){let e=await t.widgetSession?.getTokenForRequest();return jz(n,{baseURL:t.baseURL,headers:{"x-api-key":t.apiKey,...e?{[jY]:e}:{}},signal:t.signal,timeout:0,params:{productType:jm({apiKey:t.apiKey,source:r})}})}return t.signal?j_(n,{signal:t.signal,timeout:0}):j_(n,{timeout:0})}let Wq=[{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 WW(){try{return"1"===window.localStorage.getItem("neurodyn-room-viewer:debug-mask-export")}catch{return!1}}async function WK(e,t){var r,n,i;let a,s,o,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 Wq.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")}),s=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=`${s||"room"}.debug-mask.colors.png`,o=URL.createObjectURL(n),(l=document.createElement("a")).href=o,l.download=i,l.style.display="none",document.body.append(l),l.click(),l.remove(),window.setTimeout(()=>URL.revokeObjectURL(o),1e3)}let WJ="custom-interiors";function WY(){return"u">typeof crypto&&"function"==typeof crypto.randomUUID?`custom-interior-${crypto.randomUUID()}`:`custom-interior-${Date.now()}-${Math.random().toString(36).slice(2)}`}function WX(){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(WJ)||e.createObjectStore(WJ,{keyPath:"id"})},n.onerror=()=>r(n.error??Error("Failed to open Custom Interior store.")),n.onsuccess=()=>t(n.result)}):Promise.resolve(null)}async function WZ(e,t,r=new Date){let n=await WX();if(!n)return null;let i={id:WY(),schemaVersion:1,name:e.name,fileName:e.name,createdAt:r.toISOString(),imageBlob:e,scene:t};try{let e=n.transaction(WJ,"readwrite");return e.objectStore(WJ).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 W$(){let e=await WX();if(!e)return[];try{return await new Promise((t,r)=>{let n=e.transaction(WJ,"readonly").objectStore(WJ).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 W0(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}}}let W1={placementReady:!1,prepareReady:!1,artifactsReady:!1,assetsReady:!1};function W2(e){let t="dialog"===e?"interior-selection":"scene";return{step:t,hasSceneSelection:"scene"===t,sceneResetKey:0}}function W3(e,t){switch(t.type){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 W9(e,t){return!e.aborted&&t()}async function W4({abortSignal:e,apiOptions:t,commitCustomInteriorSelection:r,downloadDebugMask:n,file:i,isActive:a,isDebugMaskExportEnabled:s,onDebugMaskError:o,onPersistenceError:l,onProcessingComplete:c,predictRoomScene:u,saveCustomInterior:d,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p}){let A=await u(i,{...t,signal:e});if(!W9(e,a))return null;s()&&n(A,i.name).catch(o);let f=h(i,A);return W9(e,a)&&f&&(d(i,A).catch(l),c(),await p(),W9(e,a))?(r(f),f):null}function W5(){return new Promise(e=>window.setTimeout(e,250))}function W8(e){console.error("Failed to export room debug mask",e)}function W6(e){console.error("Failed to persist Custom Interior",e)}function W7(e){console.error("Failed to prepare Custom Interior",e)}let Ke=[{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 Kt({isComplete:e,open:t,onCloseAnimationEnd:r,onOpenChange:n,portalContainer:i}){let{t:a}=rb(),s=(0,ty.useRef)(t),[o,l]=(0,ty.useState)(8),c=e?100:o,u=function(e){for(let t=Ke.length-1;t>=0;t-=1){let r=Ke[t];if(r&&e>=r.minimumProgress)return r}return Ke[0]}(c);(0,ty.useEffect)(()=>{t&&!s.current&&l(8),s.current=t},[t]),(0,ty.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,tb.jsxs)("div",{role:"status","aria-live":"polite",className:"grid content-start gap-4",children:[(0,tb.jsx)("h2",{className:"typo-base-18 font-medium text-text-dark",children:a("floor.processing.title")}),(0,tb.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,tb.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-3",children:[(0,tb.jsx)("span",{className:"typo-base-14 min-w-0 flex-1 truncate text-left font-medium text-text-light",children:a(u.translationKey)}),(0,tb.jsxs)("span",{className:"typo-base-14 shrink-0 font-medium text-text-dark",children:[c,"%"]})]}),(0,tb.jsx)(VQ,{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,tb.jsx)(Ve,{open:t,onOpenChange:n,children:(0,tb.jsxs)(Vi,{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,tb.jsx)(Vo,{className:"sr-only",children:a("floor.processing.title")}),(0,tb.jsx)(Vl,{className:"sr-only",children:a(u.translationKey)}),d]})})}function Kr({showDialogCloseButton:e=!1}){var t;let r,{name:n,type:i}=VJ(),{accessError:a,tinuuid:s,material:o,apiKey:l,baseURL:c,hasRooms:u,source:d,widgetSession:h,isViewerAccessPending:p,loadError:A,viewedObject:f}=VX(),{clearActiveError:g,handleAccessError:m}=function(){let{setAccessError:e,setLoadError:t}=VX();return{clearActiveError:(0,ty.useCallback)(()=>{e(null),t(null)},[e,t]),handleAccessError:e}}(),{room:v,sourceRooms:b}=VY(),{containerRef:y,setContainerRef:w,sceneLoad:x,isRoomScenePending:C}=VZ(),{dialogPortalContainer:E,viewerSurface:S,viewerDialogOpen:M,onViewerDialogOpenChange:B}=VK(VG,"useRoomViewerSurface"),{t:I}=rb(),T=(0,ty.useRef)(null),k=a??A,R=I(`rooms.${v.id}`,{defaultValue:v.name}),D=(t=I("floor.scene.companyFallback"),f?.owner?.name??f?.brand??t),P="rugs"===i?f?.kit?.name??f?.name??o?.name??n:o?.name??f?.name??f?.kit?.name??n,_=(r=o?.previews?.[0],r?.subRes?.small??r?.url??f?.preview?.subRes?.small??f?.preview?.url??f?.mainPreview),L=function({activeError:e,apiKey:t,baseURL:r,clearActiveError:n,closeMaterialSelection:i,handleAccessError:a,hasDialogPortalContainer:s,hasRooms:o,isRoomScenePending:l,isViewerAccessPending:c,material:u,onViewerDialogOpenChange:d,sceneLoad:h,source:p,sourceRooms:A,viewerDialogOpen:f,viewerSurface:g,widgetSession:m}){let v=function(e){let{patchSceneLoad:t,setAngle:r,setRotation:n}=VZ();return function(e,t){let[r,n]=(0,ty.useReducer)(W3,e,W2),i=(0,ty.useCallback)(e=>{e(),function({patchSceneLoad:e,setAngle:t,setRotation:r}){t(0),r(0),e(W1)}(t),n({type:"commit-interior-selection"})},[t]),a=(0,ty.useCallback)(()=>{n({type:"dismiss-interior-selection"})},[]),s=(0,ty.useCallback)(()=>{n({type:"open-interior-selection"})},[]),o=(0,ty.useCallback)(()=>{n({type:"recover-to-scene"})},[]),l=(0,ty.useCallback)(()=>{n({type:"return-to-interior-selection"})},[]),c=(0,ty.useCallback)(()=>{n({type:"start-custom-interior-processing"})},[]);return(0,ty.useMemo)(()=>({...r,commitInteriorSelection:i,dismissInteriorSelection:a,openInteriorSelection:s,recoverToScene:o,returnToInteriorSelection:l,startCustomInteriorProcessing:c}),[i,a,s,o,l,c,r])}(e,(0,ty.useMemo)(()=>({patchSceneLoad:t,setAngle:r,setRotation:n}),[t,r,n]))}(g),{appendRuntimeCustomInterior:b,customRooms:y}=function({listCustomInteriors:e}){let{appendRuntimeCustomInterior:t,customRooms:r,replaceRuntimeCustomInteriors:n}=function(){let[e,t]=(0,ty.useState)(()=>[]),r=(0,ty.useRef)(null),n=(0,ty.useCallback)(e=>{r.current?.revokeObjectUrls();let n=W0(e);return r.current=n,t(n.rooms),n.rooms},[]),i=(0,ty.useCallback)((e,n)=>{let i=W0([{id:WY(),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 s=r.current;return r.current={rooms:[],revokeObjectUrls:()=>{s?.revokeObjectUrls(),i.revokeObjectUrls()}},t(e=>[a,...e.filter(e=>e.id!==a.id)]),a},[]);return(0,ty.useEffect)(()=>()=>{r.current?.revokeObjectUrls()},[]),(0,ty.useMemo)(()=>({appendRuntimeCustomInterior:i,customRooms:e,replaceRuntimeCustomInteriors:n}),[i,e,n])}(),i=(0,ty.useRef)(!0);(0,ty.useEffect)(()=>(i.current=!0,()=>{i.current=!1}),[]);let a=(0,ty.useCallback)(async()=>{let t=await e();i.current&&n(t)},[e,n]);return(0,ty.useEffect)(()=>{a()},[a]),(0,ty.useMemo)(()=>({appendRuntimeCustomInterior:t,customRooms:r,replaceRuntimeCustomInteriors:n,refreshCustomInteriors:a}),[t,r,a,n])}({listCustomInteriors:W$}),w=(0,ty.useMemo)(()=>new Set(A.map(e=>e.id)),[A]),{commitCustomInteriorSelection:x,selectInterior:C}=function(e){let{room:t,setRoomId:r,setRooms:n}=VY(),{widgetSession:i}=VX();return function({floorFlow:e,customRooms:t,selectedRoomId:r,onInteriorSelected:n,restoreSourceRooms:i,setRoomId:a,setRooms:s}){let o=(0,ty.useCallback)(t=>{e.commitInteriorSelection(()=>{s(e=>[t,...i(e).filter(e=>e.id!==t.id)]),a(t.id)}),n?.()},[e,n,i,a,s]),l=(0,ty.useCallback)(t=>{let o=t===r;o&&e.hasSceneSelection||(e.commitInteriorSelection(()=>{s(i),a(t)}),o||n?.())},[e,n,i,r,a,s]),c=(0,ty.useCallback)(n=>{if(n===r&&e.hasSceneSelection)return;let i=t.find(e=>e.id===n);i&&o(i)},[e.hasSceneSelection,o,t,r]),u=(0,ty.useCallback)(e=>{t.some(t=>t.id===e)?c(e):l(e)},[t,c,l]);return(0,ty.useMemo)(()=>({commitCustomInteriorSelection:o,selectInterior:u}),[o,u])}({...e,selectedRoomId:t.id,onInteriorSelected:()=>j0(i,"interior_selected"),setRoomId:r,setRooms:n})}({floorFlow:v,customRooms:y,restoreSourceRooms:(0,ty.useCallback)(e=>[...A,...e.filter(e=>!w.has(e.id))],[w,A])}),E=function(e){let{setIsRoomScenePending:t}=VZ();return function({apiOptions:e,floorFlow:t,commitCustomInteriorSelection:r,downloadDebugMask:n,isDebugMaskExportEnabled:i,onAccessError:a,onDebugMaskError:s,onPersistenceError:o,onProcessingError:l,predictRoomScene:c,saveCustomInterior:u,setIsRoomScenePending:d,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p}){let[A,f]=(0,ty.useState)(!1),[g,m]=(0,ty.useState)(!1),[v,b]=(0,ty.useState)(null),[y,w]=(0,ty.useState)(null),[x,C]=(0,ty.useState)(!1),[E,S]=(0,ty.useState)(0),M=(0,ty.useRef)(null),B=(0,ty.useRef)(!1),I=(0,ty.useRef)(!0),T=(0,ty.useRef)(v);v&&(T.current=v),(0,ty.useEffect)(()=>(I.current=!0,()=>{I.current=!1,M.current?.abort()}),[]);let k=(0,ty.useCallback)(()=>{b(null),w(null),C(!1)},[]),R=(0,ty.useCallback)(e=>{k(),f(!1),e()},[k]),D=(0,ty.useCallback)(async A=>{if(k(),!A.type.startsWith("image/"))return void f(!0);f(!1),m(!1),t.startCustomInteriorProcessing(),B.current=!0;let g=new AbortController;M.current?.abort(),M.current=g,d(!0);try{await W4({abortSignal:g.signal,apiOptions:e,commitCustomInteriorSelection:r,downloadDebugMask:n,file:A,isActive:()=>I.current,isDebugMaskExportEnabled:i,onDebugMaskError:s,onPersistenceError:o,onProcessingComplete:()=>{m(!0)},predictRoomScene:c,saveCustomInterior:u,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p})}catch(t){if(g.signal.aborted)return;let e=jv(t);if(e){B.current&&C(!0),a(e);return}if(l(t),B.current){w("custom-interior-processing"),C(!0);return}b("custom-interior-processing")}finally{M.current===g&&(M.current=null,I.current&&d(!1))}},[e,t,r,n,i,a,s,o,l,c,k,u,d,h,p]),P=(0,ty.useCallback)(()=>{k(),f(!1),t.returnToInteriorSelection(),S(e=>e+1)},[t,k]),_=(0,ty.useCallback)(()=>{k(),t.returnToInteriorSelection()},[t,k]),L=(0,ty.useCallback)(({clearError:e,closeMaterialSelection:r})=>{e(),r(),t.hasSceneSelection&&t.recoverToScene()},[t]),N=(0,ty.useCallback)(()=>{B.current=!1,C(!1),y&&(b(y),w(null))},[y]),F=(0,ty.useCallback)(()=>I.current,[]);return(0,ty.useMemo)(()=>({displayedUploadError:v??T.current,isCustomInteriorProcessingComplete:g,isInvalidFile:A,isMounted:F,isProcessingDialogClosingForError:x,pendingUploadError:y,uploadError:v,uploadRetryRequestId:E,cancelUploadError:_,handleProcessingDialogCloseAnimationEnd:N,openInteriorSelection:R,processUploadFile:D,recoverFromActiveError:L,resetUploadErrorPresentation:k,tryUploadAgain:P}),[_,N,g,A,F,x,R,y,D,L,k,P,v,E])}({...e,setIsRoomScenePending:t})}({apiOptions:(0,ty.useMemo)(()=>({apiKey:t,baseURL:r,source:p,widgetSession:m}),[t,r,p,m]),floorFlow:v,commitCustomInteriorSelection:x,downloadDebugMask:WK,isDebugMaskExportEnabled:WW,onAccessError:a,onDebugMaskError:W8,onPersistenceError:W6,onProcessingError:W7,predictRoomScene:WV,saveCustomInterior:WZ,trackRuntimeCustomInterior:b,waitForProcessingCompletion:W5}),{dismissInteriorSelection:S,hasSceneSelection:M,openInteriorSelection:B,sceneResetKey:I,step:T}=v,{cancelUploadError:k,displayedUploadError:R,handleProcessingDialogCloseAnimationEnd:D,isCustomInteriorProcessingComplete:P,isInvalidFile:_,isProcessingDialogClosingForError:L,openInteriorSelection:N,pendingUploadError:F,processUploadFile:O,recoverFromActiveError:Q,resetUploadErrorPresentation:U,tryUploadAgain:z,uploadError:G,uploadRetryRequestId:H}=E,j=o&&M,V=(0,ty.useRef)(e),q=!!(e&&j&&u);e&&(V.current=e);let W=(0,ty.useCallback)(()=>{j&&(U(),S())},[S,j,U]),K=(0,ty.useCallback)(()=>{i(),N(B)},[i,B,N]),J=(0,ty.useCallback)(()=>{Q({clearError:n,closeMaterialSelection:i})},[n,i,Q]),Y=(0,ty.useCallback)(e=>{if(!e){if(j)return void W();d?.(!1)}},[W,j,d]),X=(0,ty.useCallback)(e=>{if(!e){if(q)return void J();d?.(!1)}},[q,J,d]),Z=(0,ty.useCallback)(e=>{e||k()},[k]);!function({fallbackMs:e,handleProcessingDialogCloseAnimationEnd:t,isProcessingDialogClosingForError:r}){(0,ty.useEffect)(()=>{if(!r)return;let n=window.setTimeout(t,e);return()=>window.clearTimeout(n)},[e,t,r])}({fallbackMs:220,handleProcessingDialogCloseAnimationEnd:D,isProcessingDialogClosingForError:L});let $=function({activeError:e,canRecoverFromActiveError:t,floorFlow:r,hasDialogPortalContainer:n,hasRooms:i,isProcessingDialogClosingForError:a,isRoomScenePending:s,isViewerAccessPending:o,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=!o&&f&&(!e||t),v=f||p,b=!o&&!e&&v,y=!o&&!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&&s&&"processing-custom-interior"===r.step&&A},scene:{isLoading:s||!Object.values(c).every(Boolean),resetKey:r.sceneResetKey,shouldRender:m,shouldRenderDialog:m},surface:{usesSiblingDialogFlow:p},uploadErrorDialog:{open:!a&&!e&&!!u&&A}}}({activeError:e,canRecoverFromActiveError:q,floorFlow:{hasSceneSelection:M,sceneResetKey:I,step:T},hasDialogPortalContainer:s,hasRooms:o,isProcessingDialogClosingForError:L,isRoomScenePending:l,isViewerAccessPending:c,pendingUploadError:F,sceneLoad:h,uploadError:G,viewerDialogOpen:f,viewerSurface:g});return{...$,activeErrorDialog:{...$.activeErrorDialog,onCancel:q?J:void 0,onOpenChange:X,onTryAgain:q?J:void 0,variant:e??V.current},customRooms:y,interiorSelection:{...$.interiorSelection,isInvalidFile:_,onOpenChange:Y,onSelectRoom:C,onUploadFile:O,openFromScene:K,uploadRetryRequestId:H},sourceRooms:A,processingDialog:{...$.processingDialog,isComplete:P,onCloseAnimationEnd:D,onOpenChange:$.surface.usesSiblingDialogFlow?d:void 0},step:T,uploadErrorDialog:{...$.uploadErrorDialog,onCancel:k,onOpenChange:Z,onTryAgain:z,variant:R}}}({activeError:k,apiKey:l,baseURL:c,clearActiveError:g,closeMaterialSelection:(0,ty.useCallback)(()=>{T.current?.closeMaterialSelection()},[]),handleAccessError:m,hasDialogPortalContainer:null!==E,hasRooms:u,isRoomScenePending:C,isViewerAccessPending:p,material:o,onViewerDialogOpenChange:B,sceneLoad:x,source:d,sourceRooms:b,viewerDialogOpen:M,viewerSurface:S,widgetSession:h}),N=L.surface.usesSiblingDialogFlow?E:y,F=L.interiorSelection.shouldRender?"dialog"===L.interiorSelection.presentation?(0,tb.jsx)(Wj,{open:L.interiorSelection.open,showCloseButton:e||L.scene.shouldRender,portalContainer:N,rooms:L.sourceRooms,customRooms:L.customRooms,selectedRoomId:v.id,isInvalidFile:L.interiorSelection.isInvalidFile,uploadRetryRequestId:L.interiorSelection.uploadRetryRequestId,onOpenChange:L.interiorSelection.onOpenChange,onSelectRoom:L.interiorSelection.onSelectRoom,onUploadFile:L.interiorSelection.onUploadFile}):"screen"===L.interiorSelection.presentation?(0,tb.jsx)(WH,{rooms:L.sourceRooms,customRooms:L.customRooms,selectedRoomId:v.id,isInvalidFile:L.interiorSelection.isInvalidFile,uploadRetryRequestId:L.interiorSelection.uploadRetryRequestId,showCloseButton:e,onSelectRoom:L.interiorSelection.onSelectRoom,onUploadFile:L.interiorSelection.onUploadFile}):null:null,O=(0,tb.jsx)(Kt,{isComplete:L.processingDialog.isComplete,open:L.processingDialog.open,portalContainer:N,onCloseAnimationEnd:L.processingDialog.onCloseAnimationEnd,onOpenChange:L.processingDialog.onOpenChange}),Q=(0,tb.jsxs)(tb.Fragment,{children:[(0,tb.jsx)(V5,{variant:L.activeErrorDialog.variant,open:L.activeErrorDialog.open,portalContainer:N,showDialogCloseButton:e&&L.activeErrorDialog.showCloseButton,onOpenChange:L.activeErrorDialog.onOpenChange,onTryAgain:L.activeErrorDialog.onTryAgain,onCancel:L.activeErrorDialog.onCancel}),(0,tb.jsx)(V5,{variant:L.uploadErrorDialog.variant,open:L.uploadErrorDialog.open,portalContainer:N,onOpenChange:L.uploadErrorDialog.onOpenChange,onTryAgain:L.uploadErrorDialog.onTryAgain,onCancel:L.uploadErrorDialog.onCancel})]}),U=(0,tb.jsxs)("div",{ref:w,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:[p?(0,tb.jsx)("div",{className:"flex size-full items-center justify-center bg-radial from-background-containers to-background-base-2",children:(0,tb.jsx)(VE,{variant:"logo"})}):L.scene.shouldRender?(0,tb.jsx)(Wz,{ref:T,actions:{openInteriorSelection:L.interiorSelection.openFromScene},canShowAr:!!s&&!(V9&&V4),companyName:D,hasActiveError:!!k,material:{name:P,previewUrl:_},portalContainer:N,room:{imageUrl:v.image_url,name:R},scene:{isLoading:L.scene.isLoading,resetKey:L.scene.resetKey},showDialogCloseButton:e}):null,!L.surface.usesSiblingDialogFlow&&F,!L.surface.usesSiblingDialogFlow&&O]});return L.surface.usesSiblingDialogFlow?(0,tb.jsxs)(tb.Fragment,{children:[(L.scene.shouldRenderDialog||p)&&(0,tb.jsx)(Ve,{open:M,onOpenChange:B,children:(0,tb.jsxs)(Vi,{className:VU,contentInsideOverlay:!0,portalContainer:E,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,tb.jsx)(Vo,{className:"sr-only",children:n}),(0,tb.jsx)(Vl,{className:"sr-only"}),U]})}),F,O,Q]}):(0,tb.jsxs)(tb.Fragment,{children:[U,Q]})}function Kn({className:e,...t}){return(0,tb.jsx)(Hs,{"data-slot":"radio-group",className:j8("grid gap-3",e),...t})}function Ki({checked:e,className:t,...r}){return(0,tb.jsx)("div",{className:j8("absolute top-1/2 left-1/2 size-6 -translate-x-1/2 -translate-y-1/2","flex items-center justify-center rounded-full",e?"bg-lime-400":"bg-background-base-2",t),...r,children:(0,tb.jsx)(cn,{className:"text-constant-white size-3.5",strokeWidth:4})})}function Ka({className:e,variant:t="default",...r}){return(0,tb.jsxs)(Hl,{"data-slot":"radio-group-item",className:j8("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50","check"===t&&"size-6","inverted"===t&&"size-5 border-button-outline data-[state=checked]:border-border-red data-[state=checked]:border-4 data-[state=checked]:bg-constant-white cursor-pointer transition-all",e),...r,children:["check"===t&&(0,tb.jsx)("div",{className:"relative",children:(0,tb.jsx)(Ki,{})}),"inverted"!==t&&(0,tb.jsx)(Hc,{"data-slot":"radio-group-indicator",className:"relative flex items-center justify-center",children:"check"===t?(0,tb.jsx)(Ki,{checked:!0}):(0,tb.jsx)(ci,{className:"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2"})})]})}function Ks({className:e,children:t,...r}){let{className:n,onReachEnd:i,...a}=r.swiperOptions??{},{t:s}=rb(),[o,l]=(0,ty.useState)(null),[c,u]=(0,ty.useState)(!0),[d,h]=(0,ty.useState)(!1),[p,A]=(0,ty.useState)(!1),f=(0,ty.useCallback)(e=>{u(e.isBeginning),h(e.isEnd),A(e.isLocked)},[]),g=(0,ty.useCallback)(e=>{l(e),f(e)},[f]),m=(0,ty.useCallback)(e=>{h(!0),i?.(e)},[i]);return(0,tb.jsxs)("div",{className:j8("relative w-full overflow-hidden",e),children:[(0,tb.jsx)(jt,{className:j8("w-full py-5",n),slidesPerView:"auto",slidesPerGroup:2,onSwiper:g,onReachBeginning:()=>u(!0),onReachEnd:m,onFromEdge:f,onLock:()=>A(!0),onUnlock:()=>A(!1),onResize:f,slidesOffsetBefore:24,slidesOffsetAfter:24,spaceBetween:12,...a,children:t}),(0,tb.jsxs)(j7,{className:j8("absolute top-1/2 left-8 -translate-y-1/2 z-1",{hidden:c||p}),variant:"contrast",size:"icon",onClick:()=>o?.slidePrev(),children:[(0,tb.jsx)(ca,{}),(0,tb.jsx)("span",{className:"sr-only",children:s("previousSlide")})]}),(0,tb.jsxs)(j7,{className:j8("absolute top-1/2 right-8 -translate-y-1/2 z-1",{hidden:d||p}),variant:"contrast",size:"icon",onClick:()=>o?.slideNext(),children:[(0,tb.jsx)(cs,{}),(0,tb.jsx)("span",{className:"sr-only",children:s("nextSlide")})]})]})}function Ko({className:e,...t}){let r=qx("(max-width: 640px)"),{fetchNextMaterialsPage:n,materialItems:i,selectMaterial:a,selectedMaterialId:s}=qq(),o=(0,ty.useCallback)(()=>{n()},[n]);return 0===i.length?null:(0,tb.jsxs)(tb.Fragment,{children:[!r&&(0,tb.jsx)(qd,{orientation:"vertical"}),(0,tb.jsx)("div",{className:j8(e),...t,children:(0,tb.jsx)(Kn,{value:s||void 0,onValueChange:e=>{a(e)},children:(0,tb.jsx)(Ks,{swiperOptions:{onReachEnd:o,className:"py-2 sm:py-5"},children:i.map(({materialId:e,material:t,tinuuid:n})=>(0,tb.jsx)(jr,{className:j8("sm:w-25! w-18! transition-transform duration-200",e!==s&&"hover:scale-110"),children:(0,tb.jsxs)(qf,{htmlFor:`material-${e}`,className:"size-full flex flex-col gap-1 has-data-[state=checked]:bg-transparent",children:[(0,tb.jsxs)("div",{className:"size-full relative sm:h-19 h-13 rounded-[0.75rem] overflow-hidden grid place-items-center sm:block",children:[(0,tb.jsx)("img",{src:t.previews?.[0]?.subRes?.small??t.previews?.[0]?.url,alt:t.name??"",className:"size-full object-cover"}),(0,tb.jsx)(Ka,{value:e,id:`material-${e}`,variant:"check",className:j8("absolute sm:top-1.75 sm:right-1.75",{"sr-only":e!==s})})]}),!r&&(0,tb.jsx)("span",{className:j8("block w-full text-xs text-left text-text-light truncate",{"text-text-dark":e===s}),children:t.name})]})},`${n}-${e}`))})})})]})}function Kl({className:e,...t}){let{t:r}=rb(),{placement:n}=VJ(),{rooms:i,room:a,setRoomId:s}=VY(),{isRoomScenePending:o,selectCustomRoomFile:l}=VK(VW,"useRoomViewerCustomRoomIntake"),c=qx("(max-width: 640px)"),u=(0,ty.useId)(),d=(0,ty.useCallback)((e,t)=>r(`rooms.${t}`,{defaultValue:e}),[r]),h=(0,ty.useCallback)(async e=>{let t=e.target.files?.[0];e.target.value="",t&&await l(t)},[l]);return(0,tb.jsx)("div",{className:j8(e),...t,children:(0,tb.jsx)(Kn,{value:a.id,onValueChange:s,children:(0,tb.jsxs)(Ks,{swiperOptions:{className:"py-2 sm:py-5 pb-3 sm:pb-5"},children:[(0,tb.jsx)(jr,{className:"sm:w-25! w-21! h-auto",children:(0,tb.jsxs)(qf,{htmlFor:u,className:j8("flex size-full cursor-pointer items-center justify-center rounded-[0.75rem] border border-dashed border-muted-foreground/40 bg-transparent px-2 text-center text-xs leading-tight text-muted-foreground transition-colors hover:border-foreground/40 hover:text-foreground",o&&"cursor-wait opacity-80"),"aria-disabled":o,children:[o?(0,tb.jsxs)(tb.Fragment,{children:[(0,tb.jsx)(VE,{className:"size-5"}),(0,tb.jsx)("span",{className:"sr-only",children:r("uploadOwnPhoto")})]}):r("uploadOwnPhoto"),(0,tb.jsx)("input",{id:u,type:"file",accept:"image/*",className:"sr-only",disabled:o,onChange:h})]})}),i.map(e=>(0,tb.jsx)(jr,{className:j8("sm:w-25! w-21! transition-transform duration-200",e.id!==a.id&&"hover:scale-110"),children:(0,tb.jsxs)(qf,{htmlFor:`room-${e.id}`,className:"size-full flex flex-col gap-1 has-data-[state=checked]:bg-transparent",children:[(0,tb.jsxs)("div",{className:"size-full relative h-17 sm:h-19 rounded-[0.75rem] overflow-hidden",children:[(0,tb.jsx)("img",{src:e.image_url,alt:d(e.name,e.id),className:"size-full object-cover",crossOrigin:"anonymous"}),(0,tb.jsx)(Ka,{value:e.id,id:`room-${e.id}`,variant:"check",className:j8("absolute top-1.75 right-1.75",{"sr-only":e.id!==a.id})})]}),"floor"===n&&!c&&(0,tb.jsx)("span",{className:j8("block w-full text-xs text-left text-text-light truncate",{"text-text-dark":e.id===a.id}),children:d(e.name,e.id)})]})},e.id))]})})})}function Kc({className:e,...t}){let{placement:r}=VJ();return(0,tb.jsxs)("div",{className:j8("flex sm:items-end pl-0 overflow-hidden sm:flex-row flex-col py-3 sm:py-0",e),...t,children:[(0,tb.jsx)(Kl,{className:j8("shrink-0",{"sm:min-w-148.5 min-w-full":"floor"===r,grow:"wall"===r})}),"wall"===r&&(0,tb.jsxs)("div",{className:"hidden gap-5 pr-6 pb-5 md:flex",children:[(0,tb.jsx)(qW,{}),(0,tb.jsx)(q2,{})]}),"floor"===r&&(0,tb.jsx)(Ko,{})]})}function Ku({className:e,...t}){let{name:r}=VJ();return(0,tb.jsx)("div",{className:j8("h-16 flex items-center px-6",e),...t,children:(0,tb.jsx)("div",{className:"truncate",children:r})})}function Kd({variant:e,showDialogCloseButton:t=!1}){let{t:r}=rb();return(0,tb.jsxs)("div",{className:"flex size-full flex-col items-center justify-center gap-4 bg-radial from-background-containers to-background-base-2 p-4 text-center",children:[(0,tb.jsx)(Vc,{className:"size-8 text-icons-light"}),(0,tb.jsx)("h2",{className:"typo-base-16 font-medium text-text-dark",children:r("viewer-load-failed"===e||"artwork-load-failed"===e||"room-load-failed"===e?`loadError.${e}`:`accessError.${e}`)}),t&&(0,tb.jsx)(Vr,{asChild:!0,children:(0,tb.jsx)(j7,{variant:"secondary",children:r("close")})})]})}function Kh({showDialogCloseButton:e=!1}){let{placement:t}=VJ(),{isViewerAccessPending:r,accessError:n,loadError:i,setLoadError:a,hasRooms:s}=VX(),{setContainerRef:o,sceneLoad:l,isRoomScenePending:c}=VZ(),{t:u}=rb(),d=r||c||s&&!Object.values(l).every(Boolean);if("floor"===t)return(0,tb.jsx)(Kr,{showDialogCloseButton:e});let h=n??i;return h?(0,tb.jsx)("div",{ref:o,"data-neurodyn-room-viewer-container":"",className:"relative size-full overflow-hidden bg-radial from-background-containers to-background-base-2 text-foreground",children:(0,tb.jsx)(Kd,{variant:h,showDialogCloseButton:e})}):(0,tb.jsxs)("div",{ref:o,"data-neurodyn-room-viewer-container":"",className:"relative size-full bg-radial from-background-containers to-background-base-2 text-foreground overflow-hidden",children:[e&&(0,tb.jsx)(Vr,{asChild:!0,children:(0,tb.jsxs)(j7,{className:"absolute top-3 right-6 z-20",variant:"secondary",children:[u("close"),(0,tb.jsx)(ce,{})]})}),!r&&(s?(0,tb.jsxs)(tb.Fragment,{children:[(0,tb.jsx)(Ku,{className:"absolute top-0 right-0 left-0 z-15"}),(0,tb.jsxs)("div",{className:"size-full max-w-full grid grid-rows-[1fr_auto]",children:[(0,tb.jsx)(Wn,{onError:()=>a("viewer-load-failed"),children:(0,tb.jsx)(WL,{className:"size-full min-h-0"})}),(0,tb.jsx)(Kc,{className:"bg-background"})]})]}):(0,tb.jsx)(Kl,{className:"absolute inset-x-0 bottom-0 bg-background"})),(0,tb.jsx)("div",{"aria-hidden":!d,className:j8("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",d?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),children:(0,tb.jsx)(VE,{variant:"logo"})})]})}let Kp={poster:"wallart",carpet:"rugs"},KA={wallart:"wall",rugs:"floor",flooring:"floor"};function Kf(e){return"poster"===e||"carpet"===e?Kp[e]:e}let Kg=0,Km=[];function Kv(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 Kb({children:e,src:t,tinuuid:r,type:n,viewerSurface:i,dialogPortalContainer:a=null,viewerDialogOpen:s=!0,onViewerDialogOpenChange:o,width:l,height:c,displayUnit:u,name:d,apiKey:h,baseURL:p,source:A,externalWidgetSession:f}){var g;let m=function(){let{t:e}=rb();return(0,ty.useMemo)(()=>[{value:.025,label:`2.5 ${e("units.cm")}`},{value:.05,label:`5 ${e("units.cm")}`}],[e])}(),v=q1(u),b=KA[n],y="floor"===b?qF:qN,w=jg({apiKey:h,baseURL:p,source:A}),[x,C]=(0,ty.useState)(r),[E,S]=(0,ty.useState)(null),[M,B]=(0,ty.useState)(m[0].value),[I,T]=(0,ty.useState)(v[0].value),[k,R]=(0,ty.useState)(0),[D,P]=(0,ty.useState)(0),[_,L]=(0,ty.useState)(!1),[N,F]=(0,ty.useState)(null),[O,Q]=(0,ty.useState)(()=>({layoutReady:!1,placementReady:!1,materialReady:!1,artifactsReady:!1,assetsReady:!1,prepareReady:!1})),[U,z]=(0,ty.useState)(!1),[G,H]=(0,ty.useState)(null),[j,V]=(0,ty.useState)(null),q=(0,ty.useRef)(null),W=(0,ty.useRef)(new Set),K=(0,ty.useRef)(null),J=(0,ty.useRef)(!0),Y=(0,ty.useRef)(!1),X="floor"===b,Z="default"===A&&void 0!==h,$=n$({queryKey:["room-viewer","activate",{apiKey:h??null,source:A}],enabled:Z,queryFn:({signal:e})=>jL({productType:jm({apiKey:h,baseURL:p,source:A})},{baseURL:p,headers:{"x-api-key":h},signal:e})},nN,void 0),ee=jv($.error),et=(0,ty.useMemo)(()=>{let e=$.data;return j$(e?.widgetSession,{apiConfig:{baseURL:p,headers:{"x-api-key":h}}})},[$.data,h,p]),er=(0,ty.useMemo)(()=>f instanceof jZ?f:j$(f,{apiConfig:{baseURL:p,headers:{"x-api-key":h}}})??et,[et,h,p,f]),en="shopify"===A?null!==er:Z&&$.isSuccess,ei=n$({queryKey:["room-viewer","rooms",{apiKey:(g={apiKey:h,baseURL:p,source:A,widgetSession:er}).apiKey??null,source:g.source,widgetSessionId:g.widgetSession?.sid??null}],enabled:w&&en,queryFn:async({signal:e})=>{try{return await j5({apiKey:h,baseURL:p,signal:e,source:A,widgetSession:er})}catch(e){if(jv(e))throw e;return[]}}},nN,void 0),ea=w?ei.data??Km:y,[es,eo]=(0,ty.useState)(()=>({rooms:ea,sourceRooms:ea})),el=(0,ty.useMemo)(()=>Kv(es.rooms,es.sourceRooms,ea),[es.rooms,es.sourceRooms,ea]),ec=(0,ty.useCallback)(e=>{eo(t=>{let r=Kv(t.rooms,t.sourceRooms,ea);return{rooms:"function"==typeof e?e(r):e,sourceRooms:ea}})},[ea]),[eu,ed]=(0,ty.useState)(()=>y[0].id),eh=el.find(e=>e.id===eu),ep=eh??el[0]??y[0],eA=el.length>0;!eh&&el[0]&&eu!==el[0].id&&ed(el[0].id);let ef=n$({queryKey:j2(x??void 0,{apiKey:h,baseURL:p,source:A}),enabled:(!Z||$.isSuccess||$.isError&&null===ee)&&X&&!!x,placeholderData:nv,queryFn:async({signal:e})=>{if(!x)throw Error("Tinuuid is required.");return j3(x,{apiKey:h,baseURL:p,signal:e,source:A,widgetSession:er})}},nN,void 0),eg=ef.data??null,em=E?.native?.glbUrl??null,ev=jv(ef.error),eb=jv(ei.error),ey=w&&("shopify"===A?null===er||ei.isLoading:$.isSuccess&&ei.isLoading),ew=Z&&$.isLoading||ey,ex=$.error&&null===ee?"viewer-load-failed":null,eC=ef.error&&null===ev?"viewer-load-failed":null,eE="wall"===b&&("string"!=typeof t||0===t.trim().length)?"artwork-load-failed":null,eS=G??ee??eb??ev,eM=j??ex??eC??eE,eB=(0,ty.useCallback)(e=>{Q(t=>Object.assign({},t,e))},[]);(0,ty.useEffect)(()=>{let e=new Set(el.map(e=>e.image_url));for(let t of Array.from(W.current))e.has(t)||(URL.revokeObjectURL(t),W.current.delete(t))},[el]),(0,ty.useEffect)(()=>{let e=W.current;return J.current=!0,()=>{for(let t of(J.current=!1,K.current?.abort(),Array.from(e)))URL.revokeObjectURL(t);e.clear()}},[]);let eI=(0,ty.useCallback)(async e=>{let t=null,r=new AbortController;K.current?.abort(),K.current=r,z(!0);try{t=URL.createObjectURL(e);let n=await WV(e,{apiKey:h,baseURL:p,source:A,signal:r.signal,widgetSession:er});if(r.signal.aborted||!J.current)return void URL.revokeObjectURL(t);WW()&&WK(n,e.name).catch(e=>{console.error("Failed to export room debug mask",e)});let i={id:(Kg+=1,`room-custom-${Kg}`),name:e.name,image_url:t,scene:n};W.current.add(t),eB({placementReady:!1,prepareReady:!1,artifactsReady:!1,assetsReady:!1}),ec(e=>[i,...e]),ed(i.id)}catch(n){if(t&&URL.revokeObjectURL(t),r.signal.aborted)return;let e=jv(n);if(e)return void H(e);console.error("Failed to prepare custom room scene",n)}finally{K.current===r&&(K.current=null,J.current&&z(!1))}},[h,p,eB,ec,A,er]);(0,ty.useEffect)(()=>{if("dialog"!==i||!s){Y.current=!1;return}Y.current||er&&(j0(er,"widget_opened"),Y.current=!0)},[s,i,er]),(0,ty.useEffect)(()=>{X&&(C(r),S(null),H(null),V(null))},[r,X]),(0,ty.useEffect)(()=>{H(null),V(null)},[h,A]),(0,ty.useEffect)(()=>{X&&eg&&null===E&&S(eg.materials?.[0]??null)},[E,eg,X]);let eT=(0,ty.useMemo)(()=>({type:n,placement:b,name:d,width:l,height:c,displayUnit:u}),[n,b,d,l,c,u]),ek=(0,ty.useMemo)(()=>({viewerSurface:i,dialogPortalContainer:a,viewerDialogOpen:s,onViewerDialogOpenChange:o}),[i,a,s,o]),eR=(0,ty.useMemo)(()=>({rooms:el,sourceRooms:ea,setRooms:ec,room:ep,setRoomId:ed}),[el,ep,ec,ea]),eD=(0,ty.useMemo)(()=>({src:t,glbUrl:em,tinuuid:x,viewedObject:eg,material:E,setTinuuid:C,setMaterial:S,apiKey:h,baseURL:p,source:A,widgetSession:er,hasRooms:eA,isViewerAccessPending:ew,accessError:eS,setAccessError:H,loadError:eM,setLoadError:V}),[t,em,x,eg,E,h,p,A,er,eA,ew,eS,eM]),eP=(0,ty.useMemo)(()=>({containerRef:N,setContainerRef:F,resourceRef:q,angle:k,setAngle:R,rotation:D,setRotation:P,isDragging:_,setIsDragging:L,sceneLoad:O,patchSceneLoad:eB,isRoomScenePending:U,setIsRoomScenePending:z}),[N,k,D,_,O,eB,U]),e_=(0,ty.useMemo)(()=>({frameWidth:M,setFrameWidth:B,matting:I,setMatting:T}),[M,I]),eL=(0,ty.useMemo)(()=>({isRoomScenePending:U,selectCustomRoomFile:eI}),[U,eI]);return(0,tb.jsx)(Vz,{value:eT,children:(0,tb.jsx)(VG,{value:ek,children:(0,tb.jsx)(VH,{value:eR,children:(0,tb.jsx)(Vj,{value:eD,children:(0,tb.jsx)(VV,{value:eP,children:(0,tb.jsx)(Vq,{value:e_,children:(0,tb.jsx)(VW,{value:eL,children:e})})})})})})})}let Ky=new ie({defaultOptions:{queries:{gcTime:1/0,refetchOnMount:!1,refetchOnReconnect:!1,refetchOnWindowFocus:!1,retry:(e,t)=>{let r=function(e){if(a4(e))return e.response?.status}(t);return(void 0===r||!(r>=400)||!(r<500))&&e<2}}}});function Kw({type:e,src:t,tinuuid:r,name:n,height:i,width:a,language:s,dimensionUnit:o="m",displayUnit:l="cm",apiKey:c,source:u="default",showDialogCloseButton:d=!1,viewerSurface:h="inline",dialogPortalContainer:p=null,viewerDialogOpen:A=!0,onViewerDialogOpenChange:f,widgetSession:g}){let{i18n:m}=rb(),v=c?.trim()||void 0,b=Kf(e),y="wall"===KA[b]?function(e,t,r="m"){return{width:qa(e??0,r),height:qa(t??0,r)}}(a,i,o):null;return(0,ty.useEffect)(()=>{},[e]),(0,ty.useEffect)(()=>{"string"==typeof s&&m.changeLanguage(s)},[m,s]),(0,tb.jsx)(nH,{client:Ky,children:(0,tb.jsx)(Kb,{src:t??null,tinuuid:r??null,type:b,viewerSurface:h,dialogPortalContainer:p,viewerDialogOpen:A,onViewerDialogOpenChange:f,name:n,width:y?.width??0,height:y?.height??0,displayUnit:l,apiKey:v,baseURL:"shopify"===u?jf:void 0,source:u,externalWidgetSession:g,children:(0,tb.jsx)(Kh,{showDialogCloseButton:d})})})}function Kx({type:e,src:t,tinuuid:r,width:n,height:i,dimensionUnit:a,displayUnit:s,name:o,language:l,apiKey:c,source:u,widgetSession:d,disableClose:h=!1,open:p,defaultOpen:A,onOpenChange:f,...g}){let[m,v]=(0,ty.useState)(null),b=KA[Kf(e)],y="floor"===b&&h,[w,x]=(0,ty.useState)(A??!1),C=p??w,[E,S]=(0,ty.useState)(C),M=C||E;(0,ty.useEffect)(()=>{C&&S(!0)},[C]);let B=(0,tb.jsx)(Kw,{type:e,src:t,tinuuid:r,name:o,height:i,width:n,dimensionUnit:a,displayUnit:s,language:l,apiKey:c,source:u,widgetSession:d,showDialogCloseButton:!y,viewerSurface:"dialog",dialogPortalContainer:m,viewerDialogOpen:C,onViewerDialogOpenChange:function(e){(e||!y)&&(void 0===p&&x(e),f?.(e))}});return(0,tb.jsxs)(tb.Fragment,{children:[(0,tx.createPortal)((0,tb.jsx)("style",{children:jl.A}),document.head),(0,tx.createPortal)((0,tb.jsxs)(rQ.div,{"data-neurodyn-room-viewer-root":"",style:{display:"block",letterSpacing:"normal",zIndex:0x7fffffff},children:[(0,tb.jsx)("style",{children:jp}),(0,tb.jsx)("div",{ref:v}),m&&(0,tb.jsx)(jo,{root:m,storageKey:"neurodyn-theme",defaultTheme:"light",children:(0,tb.jsx)(ry,{i18n:ju,children:"floor"===b?M&&B:(0,tb.jsx)(Ve,{...g,open:p,defaultOpen:A,onOpenChange:f,children:(0,tb.jsxs)(Vi,{className:VU,contentInsideOverlay:!0,portalContainer:m,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,tb.jsxs)(Va,{className:"sr-only",children:[(0,tb.jsx)(Vo,{children:o}),(0,tb.jsx)(Vl,{})]}),B]})})})})]}),document.body)]})}jj({baseURL:"https://api.neurodyn.ai/v1/"}),jk({baseURL:"https://api.neurodyn.ai/"});var KC=r("../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/client.js");let KE=0;function KS(e,t){let r=e.getAttribute(t);return r?Number(r):void 0}window.__neurodynRoomViewerDialog?.destroy();let KM=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-${KE++}`,document.body.appendChild(this.container),this.root=(0,KC.createRoot)(this.container)),this.root}render(){this.props&&this.ensureRoot().render((0,ty.createElement)(Kx,{...this.props,onOpenChange:this.handleOpenChange,open:this.openState}))}};function KB(e){let t=e.target instanceof Element?e.target.closest("[data-neurodyn-room-viewer-dialog]"):null;t&&KM.open(function(e,t={}){var r,n,i;let a,s,o;return{disableClose:void 0!==t.disableClose?t.disableClose:"true"===e.getAttribute("data-neurodyn-room-viewer-disable-close"),type:void 0!==t.type?t.type:e.getAttribute("data-neurodyn-room-viewer-type"),src:void 0!==t.src?t.src:e.getAttribute("data-neurodyn-room-viewer-src"),tinuuid:void 0!==t.tinuuid?t.tinuuid:e.getAttribute("data-neurodyn-room-viewer-tinuuid"),name:void 0!==t.name?t.name:e.getAttribute("data-neurodyn-room-viewer-name"),language:void 0!==t.language?t.language:e.getAttribute("data-neurodyn-room-viewer-language"),width:void 0!==t.width?t.width:KS(e,"data-neurodyn-room-viewer-width"),height:void 0!==t.height?t.height:KS(e,"data-neurodyn-room-viewer-height"),dimensionUnit:void 0!==t.dimensionUnit?t.dimensionUnit:(r="data-neurodyn-room-viewer-dimension-unit","m"===(a=e.getAttribute(r))||"cm"===a||"in"===a?a:void 0),displayUnit:void 0!==t.displayUnit?t.displayUnit:(n="data-neurodyn-room-viewer-display-unit","cm"===(s=e.getAttribute(n))||"in"===s?s:void 0),apiKey:void 0!==t.apiKey?t.apiKey:e.getAttribute("data-neurodyn-room-viewer-api-key"),source:void 0!==t.source?t.source:(i="data-neurodyn-room-viewer-source","default"===(o=e.getAttribute(i))||"shopify"===o?o:void 0)}}(t))}M={destroy:function(){document.removeEventListener("click",KB),KM.destroy(),window.__neurodynRoomViewerDialog===M&&(window.__neurodynRoomViewerDialog=void 0)}},document.addEventListener("click",KB),window.__neurodynRoomViewerDialog=M})()})();
@@ -7547,4 +7547,4 @@ Defaulting to \`null\`.`));let u=VF(a,c)?a:null,d=VL(u)?o(u,c):void 0;return(0,t
7547
7547
  `);if(n.includes("#include <output_fragment>")){e.fragmentShader=n.replace("#include <output_fragment>",`${r}
7548
7548
  #include <output_fragment>`);return}e.fragmentShader=n.replace("#include <opaque_fragment>",`${r}
7549
7549
  #include <opaque_fragment>`)}(n,t)},e.customProgramCacheKey=()=>`${n()}|neurodyn-room-scene-v2`,e.needsUpdate=!0,()=>{e.onBeforeCompile=r,e.customProgramCacheKey=n,e.side=i,e.transparent=a,e.alphaToCoverage=s,e.needsUpdate=!0}}function Wd(e,t,r){let n=e.clone().sub(t).applyQuaternion(r);return Math.atan2(n.y,n.x)}let Wh={excludeFromCapture:!0};function Wp({resourceBounds:e}){let{resourceRef:t,rotation:r,setIsDragging:n,setRotation:i}=VX(),a=Ue("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAYAAAB/HSuDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmI3YzY0Y2NmOSwgMjAyNC8wNy8xNi0xMjozOTowNCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI2LjAgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjYxMUY4MDQ3RTJDMTFGMTlCMkNBN0Y1RDJDNzNDQzYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjYxMUY4MDU3RTJDMTFGMTlCMkNBN0Y1RDJDNzNDQzYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCNjExRjgwMjdFMkMxMUYxOUIyQ0E3RjVEMkM3M0NDNiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCNjExRjgwMzdFMkMxMUYxOUIyQ0E3RjVEMkM3M0NDNiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PiAtRloAAIYkSURBVHja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"),s=(0,tb.useRef)(null),o=(0,tb.useMemo)(()=>{let t,r;return r=1.15*Math.max((t=e.getSize(new vR)).x,t.y),{positionZ:e.min.z-.001*r,side:r}},[e]);(0,tb.useLayoutEffect)(()=>{a.colorSpace="srgb",a.needsUpdate=!0},[a]);let l=e=>{if(!s.current)return;e.stopPropagation();let{pointerId:t,pointerTarget:r}=s.current;r.hasPointerCapture(t)&&r.releasePointerCapture(t),s.current=null,n(!1)};return o.side<=0?null:(0,tv.jsxs)("mesh",{"position-z":o.positionZ,userData:Wh,onPointerCancel:l,onPointerDown:e=>{var i;let a=t.current;if(!a||(i=e.object,e.intersections.map(e=>e.object)[0]!==i))return;e.stopPropagation(),e.nativeEvent.stopPropagation();let o=e.target;o.setPointerCapture(e.pointerId),a.updateWorldMatrix(!0,!1);let l=a.getWorldQuaternion(new vk),c=a.getWorldPosition(new vR),u=new vR(0,0,1).applyQuaternion(l);s.current={center:c,initialPoint:e.point.clone(),initialRotation:r,plane:new wP().setFromNormalAndCoplanarPoint(u,c),pointerId:e.pointerId,pointerTarget:o,surfaceQuaternion:l},n(!0)},onPointerMove:e=>{let t=s.current;if(!t)return;e.stopPropagation();let r=e.ray.intersectPlane(t.plane,new vR);r&&i(function({center:e,currentPoint:t,initialPoint:r,initialRotation:n,surfaceQuaternion:i}){let a=i.clone().invert(),s=Wd(r,e,a),o=Wd(t,e,a);return((n+vI.radToDeg(o-s)+180)%360+360)%360-180}({...t,currentPoint:r}))},onPointerUp:l,children:[(0,tv.jsx)("planeGeometry",{args:[o.side,o.side]}),(0,tv.jsx)("meshBasicMaterial",{map:a,transparent:!0,depthWrite:!1,side:2,toneMapped:!1})]})}let WA=Math.PI/2;function Wf(e){let t=e.target;t.hasPointerCapture(e.pointerId)&&t.releasePointerCapture(e.pointerId)}function Wg({glbUrl:e,position:t,quaternion:r,materialPatch:n}){let{type:i}=VK(),{resourceRef:a,rotation:s,setIsDragging:o}=VX(),l=U2(e),{sceneInstance:c,materials:u,resourceBounds:d}=(0,tb.useMemo)(()=>{let e,t=l.scene.clone(!0),r=(e=new Set,t.traverse(t=>{if(!t.isMesh||!t.material)return;if(Array.isArray(t.material)){t.material=t.material.map(t=>{let r=t.clone();return e.add(r),r});return}let r=t.material.clone();e.add(r),t.material=r}),Array.from(e)),n=new bV().setFromObject(t).applyMatrix4(new v1().makeRotationX(WA));return{sceneInstance:t,materials:r,resourceBounds:n}},[l]),h=(0,tb.useMemo)(()=>vI.degToRad(s),[s]);return(0,tb.useLayoutEffect)(()=>{let e=u.map(e=>Wu(e,n));return()=>{e.forEach(e=>e())}},[u,n]),(0,tv.jsx)("group",{ref:a,position:t,quaternion:r,onPointerDown:e=>{e.nativeEvent.stopPropagation(),e.target.setPointerCapture(e.pointerId),o(!0)},onPointerUp:e=>{Wf(e),o(!1)},onPointerCancel:e=>{Wf(e),o(!1)},children:(0,tv.jsxs)("group",{"rotation-z":h,children:["rugs"===i?(0,tv.jsx)(Wp,{resourceBounds:d}):null,(0,tv.jsx)("group",{"rotation-x":WA,children:(0,tv.jsx)("primitive",{object:c})})]})})}function Wm(){let{room:e}=VJ(),t=Qw(e=>e.scene),r=QE(Ew,e.image_url);return(0,tb.useLayoutEffect)(()=>(r.colorSpace="srgb",t.background=r,()=>{t.background===r&&(t.background=null)}),[t,r]),null}function Wv({plane:e,geometry:t,setPlaneRef:r}){return(0,tv.jsx)("mesh",{ref:t=>r(e,t),geometry:t,userData:{planeId:e.id,kind:e.kind},children:(0,tv.jsx)("meshBasicMaterial",{visible:!1,side:2})})}function Wb(e,t){(0,tb.useLayoutEffect)(()=>{let r=e.current;if(r)return Wu(r,t)},[e,t])}let Wy=[1,1,1];function Ww({node:e,position:t,scale:r=Wy,uvScale:n,materialPatch:i}){let a=(0,tb.useRef)(null);return(0,tb.useEffect)(()=>{if(!a.current||void 0===n)return;let t=a.current.geometry.attributes.uv,r=e.geometry.attributes.uv.array;for(let e=0;e<t.count;e++){let i=r[2*e],a=r[2*e+1];t.setXY(e,i*n,a)}t.needsUpdate=!0},[n,e.geometry]),(0,tb.useLayoutEffect)(()=>{let e=a.current?.material;if(!e)return;let t=(Array.isArray(e)?e:[e]).map(e=>Wu(e,i));return()=>{t.forEach(e=>e())}},[i,e]),(0,tv.jsx)(U4,{ref:a,object:e,position:t,scale:r})}function Wx({width:e,height:t,materialPatch:r}){let{material:n}=VY(),{nodes:i}=U2(n?.native?.glbUrl),a=(0,tb.useMemo)(()=>{let e=new vR,t={};["vizbl0","vizbl1","vizbl2","vizbl3","vizbl4","vizbl5","vizbl6","vizbl7"].forEach(r=>{let n=i[r];if(!n?.geometry)return;let a=n.clone();a.geometry=n.geometry.clone(),Array.isArray(n.material)?a.material=n.material.map(e=>e.clone()):n.material&&(a.material=n.material.clone()),a.updateMatrixWorld(!0),a.geometry.applyMatrix4(a.matrixWorld),a.position.set(0,0,0),a.rotation.set(0,0,0),a.scale.set(1,1,1),a.updateMatrixWorld(!0),a.geometry.computeBoundingBox(),a.geometry.boundingBox&&(a.geometry.boundingBox.getCenter(e),a.geometry.translate(-e.x,-e.y,-e.z)),a.geometry.computeBoundingBox(),t[r]=a});let r=t.vizbl0;if(!r?.geometry)throw Error("Corner mesh not found");let n=r.geometry.boundingBox,a=n.max.x-n.min.x,s=n.max.y-n.min.y,o={top:0,bottom:0,left:0,right:0},l={top:0,bottom:0,left:0,right:0},c=t.vizbl1;if(c?.geometry){let e=c.geometry.boundingBox;o.top=e.max.x-e.min.x,l.top=e.max.y-e.min.y}let u=t.vizbl3;if(u?.geometry){let e=u.geometry.boundingBox;o.right=e.max.y-e.min.y,l.right=e.max.x-e.min.x}let d=t.vizbl5;if(d?.geometry){let e=d.geometry.boundingBox;o.bottom=e.max.x-e.min.x,l.bottom=e.max.y-e.min.y}let h=t.vizbl7;if(h?.geometry){let e=h.geometry.boundingBox;o.left=e.max.y-e.min.y,l.left=e.max.x-e.min.x}return{cornerSize:{width:a,height:s},barLengths:o,barThickness:l,normalizedNodes:t}},[i]),s=e-2*a.cornerSize.width+.002,o=t-2*a.cornerSize.height+.002,l=s/a.barLengths.top,c=s/a.barLengths.bottom,u=o/a.barLengths.left,d=o/a.barLengths.right;return(0,tv.jsxs)("group",{children:[(0,tv.jsx)(Ww,{node:a.normalizedNodes.vizbl0,position:[-e/2+a.cornerSize.width/2-.001,t/2-a.cornerSize.height/2+.001,0],materialPatch:r}),(0,tv.jsx)(Ww,{node:a.normalizedNodes.vizbl1,position:[0,t/2-a.barThickness.top/2+.001,0],scale:[l,1,1],uvScale:l,materialPatch:r}),(0,tv.jsx)(Ww,{node:a.normalizedNodes.vizbl2,position:[e/2-a.cornerSize.width/2+.001,t/2-a.cornerSize.height/2+.001,0],materialPatch:r}),(0,tv.jsx)(Ww,{node:a.normalizedNodes.vizbl3,position:[e/2-a.barThickness.right/2+.001,0,0],scale:[1,d,1],uvScale:d,materialPatch:r}),(0,tv.jsx)(Ww,{node:a.normalizedNodes.vizbl4,position:[e/2-a.cornerSize.width/2+.001,-t/2+a.cornerSize.height/2-.001,0],materialPatch:r}),(0,tv.jsx)(Ww,{node:a.normalizedNodes.vizbl5,position:[0,-t/2+a.barThickness.bottom/2-.001,0],scale:[c,1,1],uvScale:c,materialPatch:r}),(0,tv.jsx)(Ww,{node:a.normalizedNodes.vizbl6,position:[-e/2+a.cornerSize.width/2-.001,-t/2+a.cornerSize.height/2-.001,0],materialPatch:r}),(0,tv.jsx)(Ww,{node:a.normalizedNodes.vizbl7,position:[-e/2+a.barThickness.left/2-.001,0,0],scale:[1,u,1],uvScale:u,materialPatch:r})]})}function WC({width:e,height:t,position:r,quaternion:n,materialPatch:i}){let a=(0,tb.useRef)(null);return Wb(a,i),(0,tv.jsxs)("mesh",{position:r,quaternion:n,children:[(0,tv.jsx)("planeGeometry",{args:[e,t]}),(0,tv.jsx)("meshStandardMaterial",{ref:a,color:"white"})]})}function WE({src:e,position:t,quaternion:r,materialPatch:n}){let{width:i,height:a}=VK(),{material:s}=VY(),{frameWidth:o,matting:l}=VZ(),{angle:c,rotation:u,resourceRef:d,setIsDragging:h}=VX(),p=QE(Ew,e),A=(0,tb.useRef)(null),f=(0,tb.useMemo)(()=>vI.degToRad(c),[c]),g=(0,tb.useMemo)(()=>vI.degToRad(u),[u]);Wb(A,n);let m=i+2*l,v=a+2*l,b=l>0?m:i,y=l>0?v:a;return(0,tv.jsx)("group",{ref:d,position:t,quaternion:r,onPointerDown:()=>h(!0),onPointerUp:()=>h(!1),onPointerLeave:()=>h(!1),children:(0,tv.jsxs)("group",{rotation:[0,g,f],children:[s?.native?.glbUrl&&o>0&&(0,tv.jsx)(Wx,{width:b,height:y,materialPatch:n}),l>0&&(0,tv.jsx)(WC,{width:m,height:v,position:[0,0,.01],materialPatch:n}),(0,tv.jsxs)("mesh",{position:[0,0,.02],children:[(0,tv.jsx)("planeGeometry",{args:[i,a]}),(0,tv.jsx)("meshStandardMaterial",{ref:A,map:p})]})]})})}function WS(){let{placement:e}=VK(),{src:t,glbUrl:r,setLoadError:n}=VY(),{room:i}=VJ(),{patchSceneLoad:a}=VX(),{gl:s,size:o,camera:l,invalidate:c,raycaster:u,pointer:d}=Qw(),h=(0,tb.useMemo)(()=>i.scene??q_(),[i.scene]),[p,A]=QE(Ew,[h.planeIds.dataPng,h.shading?.dataPng??"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGNoaGgAAAMEAYFL09IQAAAAAElFTkSuQmCC"]),f=function({camera:e,invalidate:t,pointer:r,raycaster:n,roomId:i,scene:a,placement:s}){let o=`${i}:${s}`,l=(0,tb.useMemo)(()=>({value:0}),[]),[c,u]=(0,tb.useReducer)(Wl,o,Wo),d=(0,tb.useRef)(null),h=(0,tb.useRef)(new Map),p=(0,tb.useRef)(null),A=c.placementKey===o?c.planeIdMap:null,f=c.placementKey===o?c.resourcePose:null,g=(0,tb.useMemo)(()=>a.planes.filter(e=>"floor"===s?"floor"===e.kind:"floor"!==e.kind),[a,s]),m=(0,tb.useMemo)(()=>g.map(e=>e.id),[g]),v=(0,tb.useMemo)(()=>new Map(a.planes.map(e=>{let t,r;return[e.id,(t=e.polygon3D.flatMap(e=>(function(e,t){let[r,n,i]=e;return[r*(q6(t)*(t.camera.fx/t.camera.fy)),i,-n]})(e,a)),(r=new yE).setAttribute("position",new yh(t,3)),e.polygon3D.length>=4&&r.setIndex([0,1,2,0,2,3]),r)]})),[a]),b=(0,tb.useMemo)(()=>({artifactsReady:null!==A,placementReady:null!==f,prepareReady:null!==f}),[A,f]),y=(0,tb.useCallback)((e,t)=>{t?h.current.set(e.id,t):h.current.delete(e.id)},[]);(0,tb.useEffect)(()=>{let e=!1;return u({type:"reset-plane-id-map",placementKey:o}),q7(a.planeIds.dataPng,a.planeIds.width,a.planeIds.height).then(t=>{e||u({type:"set-plane-id-map",placementKey:o,planeIdMap:t})}).catch(t=>{console.error(t),e||u({type:"reset-plane-id-map",placementKey:o})}),()=>{e=!0}},[o,a.planeIds]),(0,tb.useEffect)(()=>{u({type:"reset-placement",placementKey:o}),d.current=null,l.value=0,p.current=null},[l,o]);let w=(0,tb.useCallback)((r,n,i=null)=>{let a,c=Ws(r,n,e,s),h=i?(a=new vR(...i).applyQuaternion(new vk(...c.quaternion)).add(new vR(...c.position)),{...c,position:a.toArray()}):c;d.current=h.activePlaneId,l.value=h.activePlaneId,u({type:"set-resource-pose",placementKey:o,resourcePose:h}),t()},[l,e,t,o,s]),x=(0,tb.useCallback)(t=>A?function({activePlaneId:e,allowedPlaneIds:t,camera:r,planeIdMap:n,planeMap:i,pointer:a,raycaster:s}){let o=new Set(t),l=[],c=new Set,u=e=>{!(null===e||c.has(e))&&o.has(e)&&(c.add(e),l.push(e))};for(let o of(u(function(e,t){let r=Math.floor((e.x+1)*.5*t.width),n=Math.floor((1-e.y)*.5*t.height);if(r<0||n<0||r>=t.width||n>=t.height)return null;let i=t.data[n*t.width+r]??0;return i>0?i:null}(a,n)),u(e),t.forEach(u),s.setFromCamera(a,r),l)){let e=i.get(o),t=e?s.intersectObject(e,!1)[0]:null;if(t)return t}return null}({activePlaneId:d.current,allowedPlaneIds:m,camera:e,planeIdMap:A,planeMap:h.current,pointer:t,raycaster:n}):null,[m,e,A,n]);(0,tb.useEffect)(()=>{if(!A||null!==f)return;let r=function({allowedPlanes:e,camera:t,planeMap:r,placement:n}){let i=e[0],a=i?r.get(i.id):null;return a?Ws(a,function(e){let t=e.geometry.attributes.position,r=new vR;for(let e=0;e<t.count;e++)r.add(new vR(t.getX(e),t.getY(e),t.getZ(e)));return r.divideScalar(Math.max(1,t.count))}(a),t,n):null}({allowedPlanes:g,camera:e,planeMap:h.current,placement:s});r&&(d.current=r.activePlaneId,l.value=r.activePlaneId,u({type:"set-resource-pose",placementKey:o,resourcePose:r}),t())},[l,g,e,t,o,A,f,s]);let C=(0,tb.useCallback)(()=>{let t,n=x(r);if(!n||!f){p.current=null;return}let i=Ws(n.object,n.point,e,s);t=new vk(...i.quaternion).invert(),p.current=new vR(...f.position).sub(new vR(...i.position)).applyQuaternion(t).toArray()},[e,x,s,r,f]);return{activePlaneIdUniform:l,handleDrag:(0,tb.useCallback)(()=>{let e=x(r);e&&w(e.object,e.point,p.current)},[x,r,w]),handleDragEnd:(0,tb.useCallback)(()=>{p.current=null},[]),handleDragStart:C,planeGeometries:v,readiness:b,resourcePose:f,setPlaneRef:y}}({camera:l,invalidate:c,pointer:d,raycaster:u,roomId:i.id,scene:h,placement:e}),g=(0,tb.useMemo)(()=>new vT(1,1),[]),m=(0,tb.useMemo)(()=>new vT(h.planeIds.width,h.planeIds.height),[h.planeIds.height,h.planeIds.width]),v=(0,tb.useMemo)(()=>({planeIdsTexture:p,shadingTexture:A,planeIdsSize:m,viewport:g,activePlaneIdUniform:f.activePlaneIdUniform}),[f.activePlaneIdUniform,m,p,A,g]);(0,tb.useLayoutEffect)(()=>{l instanceof EL&&(l.fov=h.camera.fovYDeg),l.position.set(0,0,0),l.up.set(0,0,1),l.lookAt(0,1,0),l.updateProjectionMatrix(),c()},[l,c,h.camera.fovYDeg]),(0,tb.useLayoutEffect)(()=>{p.minFilter=1003,p.magFilter=1003,p.wrapS=1001,p.wrapT=1001,p.generateMipmaps=!1,p.needsUpdate=!0,A.minFilter=1006,A.magFilter=1006,A.wrapS=1001,A.wrapT=1001,A.generateMipmaps=!1,A.needsUpdate=!0},[p,A]),(0,tb.useLayoutEffect)(()=>{s.getDrawingBufferSize(g),g.set(Math.max(1,g.x),Math.max(1,g.y))},[s,o.height,o.width,g]);let{artifactsReady:b,placementReady:y,prepareReady:w}=f.readiness;return(0,tb.useEffect)(()=>{a({artifactsReady:b,placementReady:y,prepareReady:w})},[b,a,y,w]),(0,tv.jsxs)(tv.Fragment,{children:["floor"===e?f.resourcePose&&r&&(0,tv.jsx)(z4,{autoTransform:!1,onDrag:f.handleDrag,onDragEnd:f.handleDragEnd,onDragStart:f.handleDragStart,children:(0,tv.jsx)(Wg,{glbUrl:r,position:f.resourcePose.position,quaternion:f.resourcePose.quaternion,materialPatch:v})}):f.resourcePose&&t&&(0,tv.jsx)(Wr,{onError:()=>n("artwork-load-failed"),children:(0,tv.jsx)(z4,{autoTransform:!1,onDrag:f.handleDrag,onDragEnd:f.handleDragEnd,onDragStart:f.handleDragStart,children:(0,tv.jsx)(WE,{src:t,position:f.resourcePose.position,quaternion:f.resourcePose.quaternion,materialPatch:v})})}),h.planes.map(e=>(0,tv.jsx)(Wv,{plane:e,geometry:f.planeGeometries.get(e.id),setPlaneRef:f.setPlaneRef},e.id)),(0,tv.jsx)(Wr,{onError:()=>n("room-load-failed"),children:(0,tv.jsx)(Wm,{})})]})}async function WM(e,t={}){let{client:r=jV,...n}=t;return(await r({method:"POST",url:"/layout/GetConfig",data:e,...n})).data}let WB=["room-viewer","layout-config"];function WI(){var e;let t=nZ({queryKey:WB,queryFn:()=>WM(),staleTime:1/0},nL,void 0);if(t.isPending)return null;let r=(e=t.data,e?.internal?.links?.find(e=>"hdr_neutral"===e.type)?.url?.trim()||void 0);return(0,tv.jsx)(GH,{files:r?[r]:void 0,preset:r?void 0:"warehouse"})}function WT({placement:e}){return"floor"===e?(0,tv.jsx)(WI,{}):(0,tv.jsx)(GH,{files:["https://cdn.neurodyn.ai/assets/hdr/neutral.hdr"]})}let Wk={position:[0,0,0],up:[0,0,1],near:.01,far:100};function WR({className:e,ref:t,captureRef:r,onSizeChange:n,...i}){let{placement:a}=VK(),{src:s,glbUrl:o}=VY(),{room:l}=VJ(),{patchSceneLoad:c}=VX(),{active:u}=Gq(),d=q6((0,tb.useMemo)(()=>l.scene??q_(),[l.scene])),h=(0,tb.useRef)(null),p=(0,tb.useRef)(!1),A=(0,tb.useCallback)(e=>{(h.current=e,"function"==typeof t)?t(e):t&&(t.current=e)},[t]),f=qw("(max-width: 639px)"),{width:g,height:m}=function(e){let t,{ref:r,box:n="content-box"}=e,[{width:i,height:a},s]=(0,tb.useState)(q5),o=(t=(0,tb.useRef)(!1),(0,tb.useEffect)(()=>(t.current=!0,()=>{t.current=!1}),[]),(0,tb.useCallback)(()=>t.current,[])),l=(0,tb.useRef)({...q5}),c=(0,tb.useRef)(void 0);return c.current=e.onResize,(0,tb.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=q8(e,t,"inlineSize"),i=q8(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):o()&&s(e)}});return e.observe(r.current,{box:n}),()=>{e.disconnect()}},[n,r,o]),{width:i,height:a}}({ref:h}),v=(0,tb.useMemo)(()=>{if(!g||!m||!d)return null;let e=g,t=m;return f?e=(t=m)*d:g/m>d?e=m*d:t=g/d,{width:e,height:t}},[g,m,d,f]);return(0,tb.useLayoutEffect)(()=>{v&&n?.(v.width,v.height)},[v,n]),(0,tb.useEffect)(()=>{if(!v||p.current)return;p.current=!0;let e=window.setTimeout(()=>{window.dispatchEvent(new Event("resize"))},250);return()=>{window.clearTimeout(e)}},[v]),(0,tb.useEffect)(()=>{c({layoutReady:null!==v})},[c,v]),(0,tb.useEffect)(()=>{c({materialReady:"wall"===a?!!s:!!o})},[o,c,s,a]),(0,tb.useEffect)(()=>{c({assetsReady:!u})},[u,c]),(0,tv.jsx)("div",{ref:A,className:j5("size-full flex items-center justify-center sm:pt-21 sm:pb-12",e),...i,children:v&&(0,tv.jsx)(GY,{className:"touch-none bg-transparent",frameloop:"demand",camera:Wk,gl:{toneMapping:4,toneMappingExposure:1.2,alpha:!0,preserveDrawingBuffer:!0},style:{width:`${v.width}px`,height:`${v.height}px`},children:(0,tv.jsxs)(tb.Suspense,{fallback:null,children:[(0,tv.jsx)(Wt,{ref:r}),(0,tv.jsx)(WT,{placement:a}),(0,tv.jsx)(WS,{})]})})})}async function WD(e){await navigator.clipboard.writeText(e)}function WP({captureRef:e,fallbackToClipboard:t=!1,fileName:r="room-scene.png",shareMessage:n}){let[i,a]=(0,tb.useState)(!1),[s,o]=(0,tb.useState)(!1),l=(0,tb.useMemo)(()=>"u">typeof navigator&&"function"==typeof navigator.share||t&&"u">typeof navigator&&"function"==typeof navigator.clipboard?.writeText,[t]),c=(0,tb.useCallback)(async()=>{if(!l)return;let i="u">typeof navigator&&"function"==typeof navigator.share,s=window.location.href,o=`${n}
7550
- ${s}`;a(!0);try{if(!i&&t)return void await WD(o);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:o,files:[t]})}catch(e){console.error("Failed to generate scene screenshot for sharing",e)}await navigator.share({text:o,url:s})}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,tb.useCallback)(async()=>{let t=e.current;if(t){o(!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{o(!1)}}},[e,r]),isDownloading:s,isSharing:i,share:c}}function W_({captureRef:e,className:t,canvasWrapperClassName:r,chrome:n="default",...i}){let{placement:a,type:s}=VK(),{containerRef:o,isDragging:l,angle:c,rotation:u,setAngle:d,setRotation:h}=VX(),{t:p}=rv(),A=(0,tb.useRef)(null),f=(0,tb.useRef)(null),g=e??f,m=qw("(max-width: 639px)"),v=qw("(min-width: 768px)"),{canShare:b,isSharing:y,share:w}=WP({captureRef:g,shareMessage:p(`shareMessage.${s}`)}),x=(0,tb.useCallback)(()=>{m&&A.current?.centerView()},[m]);return(0,tv.jsxs)("div",{className:j5("relative flex items-center justify-center overflow-hidden",t),...i,children:[(0,tv.jsx)(AY,{ref:A,disabled:l,children:(0,tv.jsx)(AX,{wrapperClass:"neurodyn-rzpp-wrapper size-full!",contentClass:"neurodyn-rzpp-content h-full! min-w-full sm:max-w-full",children:(0,tv.jsx)(WR,{captureRef:g,className:r,onSizeChange:x})})}),"default"===n&&(0,tv.jsxs)(tv.Fragment,{children:[(0,tv.jsx)(q4,{className:"absolute bottom-4 left-4 sm:bottom-6 sm:left-6"}),"floor"===a&&(0,tv.jsxs)("div",{className:"bg-button-dark typo-button-normal absolute bottom-6 left-1/2 hidden h-9 -translate-x-1/2 items-center gap-1.5 rounded-lg px-3.75 text-text-white md:inline-flex",children:[(0,tv.jsx)("span",{className:"shrink-0",children:p("scene.position")}),(0,tv.jsx)(qb,{value:[u],onValueChange:([e])=>h(e??0),min:-180,max:180,step:1,className:"w-29.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":p("scene.position")})]}),(0,tv.jsxs)("div",{className:"absolute right-4 bottom-4 inline-flex items-center gap-2 sm:right-6 sm:bottom-6",children:[("wall"===a||"floor"===a&&!v)&&(0,tv.jsxs)(qg,{children:[(0,tv.jsx)(qm,{asChild:!0,children:(0,tv.jsxs)(j6,{variant:"contrast",size:m?"icon":"default",children:[(0,tv.jsx)(Vv,{className:"size-5"}),(0,tv.jsx)("span",{className:"sr-only sm:not-sr-only",children:p("scene.tunePosition")})]})}),(0,tv.jsx)(qv,{className:"px-3 py-3.5 bg-button-dark border-button-dark text-text-white",side:"top",align:"end",portalContainer:o,children:(0,tv.jsxs)(qd,{children:[(0,tv.jsxs)(qp,{orientation:"horizontal",children:[(0,tv.jsx)(qf,{children:p("scene.rotation")}),(0,tv.jsx)(qb,{value:[u],onValueChange:([e])=>h(e??0),min:-180,max:180,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":p("scene.rotation")})]}),"wall"===a&&(0,tv.jsxs)(qp,{orientation:"horizontal",children:[(0,tv.jsx)(qf,{children:p("scene.angle")}),(0,tv.jsx)(qb,{value:[c],onValueChange:([e])=>d(e??0),max:75,min:-75,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":p("scene.angle")})]})]})})]}),"wall"===a&&(0,tv.jsxs)(j6,{variant:"contrast",size:m?"icon":"default",disabled:!b||y,onClick:w,children:[(0,tv.jsx)(Vy,{className:"size-5"}),(0,tv.jsx)("span",{className:"sr-only sm:not-sr-only",children:p("scene.share")})]}),m&&"wall"===a&&(0,tv.jsxs)(qg,{children:[(0,tv.jsx)(qm,{asChild:!0,children:(0,tv.jsx)(j6,{variant:"contrast",size:"icon",children:(0,tv.jsx)(Vb,{})})}),(0,tv.jsxs)(qv,{className:"grid gap-5",portalContainer:o,children:[(0,tv.jsx)(qq,{}),(0,tv.jsx)(q1,{})]})]})]})]})]})}function WL({className:e,gridClassName:t,titleClassName:r,onOpenChange:n,...i}){let{t:a}=rv(),s=(0,tb.useRef)(null),{fetchNextMaterialsPage:o,hasNextPage:l,isFetchingNextPage:c,isLoading:u,materialItems:d,selectMaterial:h,selectedMaterialId:p}=qV({includeViewedObject:!0});(0,tb.useEffect)(()=>{let e=s.current;e&&!u&&!c&&l&&0!==d.length&&e.scrollHeight<=e.clientHeight&&o()},[o,l,c,u,d.length]);let A=(0,tb.useCallback)(e=>{let{clientHeight:t,scrollHeight:r,scrollTop:n}=e.currentTarget;n+t>=r-64&&o()},[o]),f=(0,tb.useCallback)(e=>{h(e)&&n(!1)},[n,h]);return(0,tv.jsxs)("div",{...i,className:j5("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,tv.jsx)("h2",{className:j5("typo-base-16 font-medium sm:typo-base-14 sm:font-semibold text-text-dark",r),children:a("floor.materialSelection.title")}),(0,tv.jsx)("div",{"data-testid":"material-selection-grid",ref:s,className:j5("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,tv.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})=>{let n,i=e===p,a=(n=t.previews?.[0],n?.subRes?.small??n?.url);return(0,tv.jsxs)("button",{type:"button","data-selected":i,"aria-pressed":i,className:j5("group relative grid aspect-square min-w-0 place-items-center overflow-hidden rounded-lg border border-border bg-background-containers p-1 text-left transition hover:border-icons-normal 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:[a?(0,tv.jsx)("img",{src:a,alt:"",className:"size-full rounded-md object-cover"}):(0,tv.jsx)(Vf,{className:"size-6 text-icons-normal"}),(0,tv.jsx)("span",{className:"sr-only",children:t.name}),i&&(0,tv.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,tv.jsx)(Vu,{className:"size-4"})})]},`${r}-${e}`)}),(u||c)&&(0,tv.jsx)("div",{className:"col-span-3 grid h-16 place-items-center",children:(0,tv.jsx)(VC,{className:"size-6"})})]})})]})}function WN({open:e,portalContainer:t,onOpenChange:r}){let{t:n}=rv();return(0,tv.jsx)(j7,{open:e,onOpenChange:r,children:(0,tv.jsxs)(Vn,{contentInsideOverlay:!0,"data-testid":"material-selection-mobile-overlay",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,tv.jsx)(Vs,{className:"sr-only",children:n("floor.materialSelection.title")}),(0,tv.jsx)(Vo,{className:"sr-only"}),(0,tv.jsx)(WL,{className:"min-h-0",gridClassName:"max-h-none",onOpenChange:r}),(0,tv.jsx)(Va,{className:"shrink-0 p-0",children:(0,tv.jsx)(Vt,{asChild:!0,children:(0,tv.jsx)(j6,{type:"button",variant:"outline",className:"w-full",children:n("close")})})})]})})}let WF="data-material-selection-action",WO="data-material-selection-panel";function WQ({actionLabel:e,actionClassName:t,actionPlacement:r,className:n,iconClassName:i,isOpen:a,materialName:s,previewClassName:o,previewUrl:l,testId:c,titleLabel:u,onClick:d,onPointerDown:h}){let{t:p}=rv(),{displayUnit:A,type:f}=VK(),{containerRef:g}=VX(),{viewedObject:m}=VY(),{selectedDestinationUrl:v,sizeItems:b,selectedTinuuid:y,selectSize:w}=function(){var e;let{tinuuid:t,setMaterial:r,setTinuuid:n,apiKey:i,baseURL:a,source:s,widgetSession:o}=VY(),{type:l}=VK(),{data:c}=nZ({queryKey:j1(t??void 0,{apiKey:i,baseURL:a,source:s,resourceType:l}),enabled:"rugs"===l&&!!t,placeholderData:nm,queryFn:({signal:e})=>{if(!t)throw Error("Tinuuid is required.");return j2(t,{apiKey:i,baseURL:a,signal:e,source:s,widgetSession:o,resourceType:l})}},nL,void 0),u=c?.kit?.uuid,d=c?.owner?.uuid;(0,tb.useEffect)(()=>{let e=c?.materials?.[0];c?.tinuuid===t&&e&&r(e)},[c,r,t]);let{data:h,fetchNextPage:p,hasNextPage:A,isFetchingNextPage:f,isFetchNextPageError:g}=nZ({queryKey:["room-viewer","kit-objects",{apiKey:(e={apiKey:i,baseURL:a,source:s,resourceType:l}).apiKey??null,kitUuid:u??null,ownerUuid:d??null,resourceType:e.resourceType??null,source:e.source}],enabled:"rugs"===l&&!!u&&!!d,queryFn:({pageParam:e,signal:t})=>{if(!u||!d)throw Error("Kit uuid and owner uuid are required.");return j9(u,d,e,{apiKey:i,baseURL:a,signal:t,source:s,widgetSession:o,resourceType:l})},initialPageParam:0,getNextPageParam:(e,t,r)=>void 0!==e.pages_count?r+1<e.pages_count?r+1:void 0:e.objs?.length?r+1:void 0},n2,void 0);(0,tb.useEffect)(()=>{!A||f||g||p({cancelRefetch:!1})},[p,A,f,g]);let m=(0,tb.useMemo)(()=>h?.pages.flatMap(e=>e.objs??[])??[],[h]),v=(0,tb.useMemo)(()=>m.map(ql).filter(e=>null!==e),[m]);return{selectedDestinationUrl:c?.tinuuid===t?c.destinationUrl:void 0,sizeItems:v,selectedTinuuid:t,selectSize:e=>!!v.some(t=>t.tinuuid===e)&&(n(e),!0)}}(),x=p(`units.${A}`),C=b.find(e=>e.tinuuid===y),E=function(e){let t=e?.trim();if(!t||qn.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}}("rugs"===f?v??(m?.tinuuid===y?m.destinationUrl:void 0):m?.destinationUrl),S=(0,tv.jsxs)(j6,{type:"button",variant:"outline",size:"sm",[WF]:!0,"aria-expanded":a,className:j5("shrink-0","stacked"===r&&"w-fit",t),onPointerDown:h?e=>{e.preventDefault(),e.stopPropagation(),h()}:void 0,onClick:d,children:[a?(0,tv.jsx)(Vd,{className:"size-4"}):(0,tv.jsx)(Vm,{className:"size-4"}),e]});return(0,tv.jsxs)("div",{className:n,"data-neurodyn-room-viewer-product":"","data-testid":c,children:[(0,tv.jsx)("div",{className:o,children:l?(0,tv.jsx)("img",{src:l,alt:"",className:"size-full object-cover"}):(0,tv.jsx)(Vf,{className:i})}),(0,tv.jsxs)("div",{className:"grid min-h-16 min-w-0 flex-1 content-center gap-2",children:[(0,tv.jsxs)("div",{className:"flex min-w-0 items-start justify-between gap-2",children:[(0,tv.jsxs)("div",{className:"min-w-0",children:[(0,tv.jsx)("div",{className:"sr-only",children:u}),(0,tv.jsx)("div",{className:"typo-button-normal truncate text-text-dark",children:s})]}),E&&(0,tv.jsx)("a",{href:E,target:"_blank",rel:"noopener noreferrer",className:"typo-base-12 shrink-0 text-button-primary underline-offset-2 hover:underline","data-testid":c?`${c}-description-link`:void 0,children:p("floor.scene.description")})]}),(0,tv.jsxs)("div",{className:"flex flex-nowrap items-center gap-2",children:["stacked"===r&&S,b.length>1&&!!C&&(0,tv.jsxs)(V5,{value:y??void 0,onValueChange:w,children:[(0,tv.jsx)(V6,{size:"sm",className:"w-fit shrink-0","data-testid":c?`${c}-size-select`:void 0,children:(0,tv.jsx)(V8,{})}),(0,tv.jsx)(V7,{portalContainer:g,children:b.map(e=>{var t;let r;return(0,tv.jsx)(qe,{value:e.tinuuid,children:(t=e.size,r=t.split("\xd7").map(e=>"cm"===A?e:Math.round(qa(Number(e)/100,A)).toString()).join("\xd7"),`${r} ${x}`)},e.tinuuid)})})]})]})]}),"trailing"===r&&S]})}function WU({actions:e,canShowAr:t,companyName:r,hasActiveError:n,material:i,portalContainer:a,ref:s,room:o,scene:l,showDialogCloseButton:c=!1}){let{t:u}=rv(),{type:d}=VK(),[h,p]=(0,tb.useState)(!1),[A,f]=(0,tb.useState)(!1),g=(0,tb.useRef)(null),m=(0,tb.useRef)(!1),v=u(h?"floor.scene.hideCatalog":`resourceType.${d}.replaceProduct`),b=u(A?"floor.scene.hideCatalog":`resourceType.${d}.replaceProductShort`),y=u(`resourceType.${d}.productCardTitle`),{canShare:w,download:x,isDownloading:C,isSharing:E,share:S}=WP({captureRef:g,fallbackToClipboard:!0,shareMessage:u(`shareMessage.${d}`)}),M=(0,tb.useCallback)(()=>{p(!1),f(!1)},[]);(0,tb.useImperativeHandle)(s,()=>({closeMaterialSelection:M}),[M]);let B=(0,tb.useCallback)(()=>{if(m.current){m.current=!1;return}p(!0),f(!1)},[]),I=(0,tb.useCallback)(()=>{m.current=!0,M()},[M]),T=(0,tb.useCallback)(()=>{f(!0),p(!1)},[]),k=(0,tb.useCallback)(()=>{M(),e.openInteriorSelection()},[e,M]);return(0,tb.useEffect)(()=>{if(h)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(`[${WF}], [${WO}]`)||p(!1)}function t(e){"Escape"===e.key&&p(!1)}},[h]),(0,tv.jsxs)(tv.Fragment,{children:[(0,tv.jsx)("div",{className:"absolute inset-0 bg-constant-black","data-testid":"floor-scene-background-base"}),(0,tv.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,tv.jsx)("img",{src:o.imageUrl,alt:"",className:"block size-full max-w-none object-cover object-center opacity-50"})}),(0,tv.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,tv.jsx)("div",{className:"min-w-0 pt-1",children:(0,tv.jsx)("h1",{"data-testid":"floor-scene-header-company",className:"typo-base-16 truncate font-medium lg:typo-base-18",children:r})}),(0,tv.jsxs)("div",{className:"pointer-events-auto inline-flex shrink-0 items-center gap-2",children:[(0,tv.jsxs)(j6,{type:"button",variant:"secondary","aria-label":u("floor.scene.share"),"data-neurodyn-room-viewer-share":"",disabled:!w||E,onClick:S,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tv.jsx)(Vy,{className:"size-5"}),(0,tv.jsx)("span",{className:"hidden lg:inline",children:u("floor.scene.share")})]}),(0,tv.jsxs)(j6,{type:"button",variant:"secondary","aria-label":u("floor.scene.download"),"data-neurodyn-room-viewer-download":"",disabled:C,onClick:x,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tv.jsx)(Vh,{className:"size-5"}),(0,tv.jsx)("span",{className:"hidden lg:inline",children:u("floor.scene.download")})]}),c&&(0,tv.jsx)(Vt,{asChild:!0,children:(0,tv.jsxs)(j6,{type:"button",variant:"secondary","aria-label":u("close"),className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tv.jsx)("span",{className:"hidden lg:inline",children:u("close")}),(0,tv.jsx)(Vd,{className:"!size-5"})]})})]})]}),(0,tv.jsx)(W_,{captureRef:g,chrome:"none",className:"relative z-10 size-full min-h-0",canvasWrapperClassName:"p-0 sm:pt-0 sm:pb-0"},l.resetKey),(0,tv.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,tv.jsxs)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:[(0,tv.jsx)(WQ,{actionLabel:v,actionPlacement:"stacked",className:"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)]",iconClassName:"size-6 text-icons-normal",isOpen:h,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-desktop-product-card",titleLabel:y,onClick:h?M:B,onPointerDown:h?I:void 0}),(0,tv.jsxs)("div",{className:"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)]","data-testid":"floor-room-card","data-neurodyn-room-viewer-room":"",children:[(0,tv.jsx)("img",{src:o.imageUrl,alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,tv.jsxs)("span",{className:"grid min-w-0 flex-1 content-center gap-2",children:[(0,tv.jsx)("span",{className:"typo-button-normal block min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-desktop-room-name",children:o.name}),(0,tv.jsx)(j6,{type:"button",variant:"outline",size:"sm",className:"w-fit",onClick:k,children:u("floor.interiorSelection.chooseInterior")})]})]})]}),t&&(0,tv.jsxs)("div",{className:"pointer-events-auto 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-testid":"floor-ar-card","data-neurodyn-room-viewer-try-at-home":"",children:[(0,tv.jsx)("img",{src:o.imageUrl,alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,tv.jsxs)("div",{className:"grid min-w-0 flex-1 content-center gap-2",children:[(0,tv.jsx)(q4,{buttonLabel:u("floor.scene.tryAtHome"),buttonVariant:"secondary",buttonSize:"sm",buttonClassName:"w-fit"}),(0,tv.jsx)("div",{className:"typo-base-12 truncate font-medium text-text-light",children:u("floor.scene.tryAtHomeBody")})]})]})]}),(0,tv.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,tv.jsx)(WQ,{actionLabel:v,actionPlacement:"stacked",className:"pointer-events-auto 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)]",iconClassName:"size-6 text-icons-normal",isOpen:h,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-tablet-product-card",titleLabel:y,onClick:h?M:B,onPointerDown:h?I:void 0}),(0,tv.jsxs)("div",{className:"pointer-events-auto grid w-[254px] gap-2",children:[(0,tv.jsxs)("div",{className:"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)]","data-testid":"floor-tablet-room-card","data-neurodyn-room-viewer-room":"",children:[(0,tv.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,tv.jsx)("img",{src:o.imageUrl,alt:"",className:"size-10 shrink-0 rounded-full object-cover"}),(0,tv.jsxs)("span",{className:"grid min-w-0",children:[(0,tv.jsx)("span",{className:"typo-base-12 truncate text-text-light",children:u("floor.scene.interiorCardTitle")}),(0,tv.jsx)("span",{className:"typo-button-normal min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-tablet-room-name",children:o.name})]})]}),(0,tv.jsx)(j6,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:k,children:u("floor.interiorSelection.chooseInteriorShort")})]}),t&&(0,tv.jsx)(q4,{className:"w-full","data-neurodyn-room-viewer-try-at-home":"",buttonLabel:u("floor.scene.tryAtHome"),buttonLeadingIcon:(0,tv.jsx)(Vw,{className:"size-5"}),buttonVariant:"secondary",buttonSize:"default",buttonClassName:"h-9 w-full rounded-xl"})]})]}),(0,tv.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,tv.jsx)(WQ,{actionLabel:b,actionClassName:"w-[137px]",actionPlacement:"stacked",className:"flex items-center justify-start gap-4 border-b border-border-light bg-background-containers p-4 text-left",iconClassName:"size-5 text-icons-normal",isOpen:A,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-mobile-product-card",titleLabel:y,onClick:A?M:T}),(0,tv.jsxs)("div",{className:"grid gap-4 bg-background-containers px-6 pt-4 pb-6","data-testid":"floor-mobile-bottom-actions",children:[(0,tv.jsxs)("div",{className:"flex w-full items-center justify-between gap-3 rounded-full bg-background-containers text-left","data-neurodyn-room-viewer-room":"",children:[(0,tv.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,tv.jsx)("img",{src:o.imageUrl,alt:"",className:"size-10 shrink-0 rounded-full object-cover"}),(0,tv.jsxs)("span",{className:"grid min-w-0",children:[(0,tv.jsx)("span",{className:"typo-base-12 truncate text-text-light",children:u("floor.scene.interiorCardTitle")}),(0,tv.jsx)("span",{className:"typo-button-normal min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-mobile-room-name",children:o.name})]})]}),(0,tv.jsx)(j6,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:k,children:u("floor.interiorSelection.chooseInterior")})]}),t&&(0,tv.jsx)(q4,{className:"w-full","data-neurodyn-room-viewer-try-at-home":"",buttonLabel:u("floor.scene.tryAtHome"),buttonLeadingIcon:(0,tv.jsx)(Vw,{className:"size-6"}),buttonVariant:"secondary",buttonSize:"lg",buttonClassName:"h-11 w-full rounded-xl"})]})]}),h&&!n&&(0,tv.jsx)(WL,{[WO]:!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:M}),(0,tv.jsx)(WN,{open:A&&!n,portalContainer:a,onOpenChange:f}),(0,tv.jsx)("div",{"aria-hidden":!l.isLoading,className:j5("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",l.isLoading?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),children:(0,tv.jsx)(VC,{variant:"logo"})})]})}function Wz({rooms:e,customRooms:t,selectedRoomId:r,isInvalidFile:n,uploadRetryRequestId:i=0,showCloseButton:a=!1,onSelectRoom:s,onUploadFile:o}){let l,{t:c}=rv(),u=(0,tb.useId)(),d=(0,tb.useRef)(null);function h(e){return e.map(e=>(0,tv.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:()=>s(e.id),children:[(0,tv.jsx)("img",{src:e.image_url,alt:"",decoding:"async",className:"size-full scale-[1.02] transform-gpu object-cover transition duration-200 group-hover:scale-105"}),(0,tv.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,tb.useEffect)(()=>{i>0&&d.current?.click()},[i]),(0,tv.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",children:[a&&(l=(0,tv.jsx)(j6,{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,tv.jsx)(Vd,{})}),(0,tv.jsx)(Vt,{asChild:!0,children:l})),(0,tv.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,tv.jsxs)("div",{className:"grid gap-2","data-testid":"floor-interior-selection-upload",children:[(0,tv.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&&o(t)},children:[(0,tv.jsx)(Vc,{className:"size-5 text-background-blue"}),c("floor.interiorSelection.uploadPhoto"),(0,tv.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&&o(t)}})]}),n&&(0,tv.jsx)("p",{className:"typo-base-12 font-medium text-destructive",children:c("floor.interiorSelection.invalidFile")})]}),(0,tv.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,tv.jsxs)("div",{className:"grid min-h-max gap-4",children:[t.length>0&&(0,tv.jsxs)("div",{className:"grid gap-3",children:[(0,tv.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.customTitle")}),(0,tv.jsx)("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-3","data-testid":"floor-custom-interior-selection-grid",children:h(t)})]}),(0,tv.jsxs)("div",{className:"grid gap-3",children:[(0,tv.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.presetsTitle")}),(0,tv.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,tv.jsx)(Va,{className:"-mt-2 shrink-0 p-0 sm:mt-0",children:(0,tv.jsx)(Vt,{asChild:!0,children:(0,tv.jsx)(j6,{variant:"outline",className:"w-full",children:c("close")})})})]})}function WG(e){return(0,tv.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,tv.jsx)(Wz,{...e})})}function WH({open:e,showCloseButton:t=!0,portalContainer:r,onOpenChange:n,...i}){let{t:a}=rv();return(0,tv.jsx)(j7,{open:e,onOpenChange:n,children:(0,tv.jsxs)(Vn,{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,tv.jsx)(Vs,{className:"sr-only",children:a("floor.interiorSelection.title")}),(0,tv.jsx)(Vo,{className:"sr-only"}),(0,tv.jsx)(Wz,{...i,showCloseButton:t})]})})}async function Wj(e,t={}){let r=t.source??"default",n={image:e};if(jf({apiKey:t.apiKey,source:r})){let e=await t.widgetSession?.getTokenForRequest();return jU(n,{baseURL:t.baseURL,headers:{"x-api-key":t.apiKey,...e?{[jJ]:e}:{}},signal:t.signal,timeout:0,params:{productType:jg({apiKey:t.apiKey,source:r})}})}return t.signal?jP(n,{signal:t.signal,timeout:0}):jP(n,{timeout:0})}let WV=[{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 Wq(){try{return"1"===window.localStorage.getItem("neurodyn-room-viewer:debug-mask-export")}catch{return!1}}async function WW(e,t){var r,n,i;let a,s,o,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 WV.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")}),s=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=`${s||"room"}.debug-mask.colors.png`,o=URL.createObjectURL(n),(l=document.createElement("a")).href=o,l.download=i,l.style.display="none",document.body.append(l),l.click(),l.remove(),window.setTimeout(()=>URL.revokeObjectURL(o),1e3)}let WK="custom-interiors";function WJ(){return"u">typeof crypto&&"function"==typeof crypto.randomUUID?`custom-interior-${crypto.randomUUID()}`:`custom-interior-${Date.now()}-${Math.random().toString(36).slice(2)}`}function WY(){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(WK)||e.createObjectStore(WK,{keyPath:"id"})},n.onerror=()=>r(n.error??Error("Failed to open Custom Interior store.")),n.onsuccess=()=>t(n.result)}):Promise.resolve(null)}async function WX(e,t,r=new Date){let n=await WY();if(!n)return null;let i={id:WJ(),schemaVersion:1,name:e.name,fileName:e.name,createdAt:r.toISOString(),imageBlob:e,scene:t};try{let e=n.transaction(WK,"readwrite");return e.objectStore(WK).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 WZ(){let e=await WY();if(!e)return[];try{return await new Promise((t,r)=>{let n=e.transaction(WK,"readonly").objectStore(WK).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 W$(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}}}let W0={placementReady:!1,prepareReady:!1,artifactsReady:!1,assetsReady:!1};function W1(e){let t="dialog"===e?"interior-selection":"scene";return{step:t,hasSceneSelection:"scene"===t,sceneResetKey:0}}function W2(e,t){switch(t.type){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 W3(e,t){return!e.aborted&&t()}async function W9({abortSignal:e,apiOptions:t,commitCustomInteriorSelection:r,downloadDebugMask:n,file:i,isActive:a,isDebugMaskExportEnabled:s,onDebugMaskError:o,onPersistenceError:l,onProcessingComplete:c,predictRoomScene:u,saveCustomInterior:d,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p}){let A=await u(i,{...t,signal:e});if(!W3(e,a))return null;s()&&n(A,i.name).catch(o);let f=h(i,A);return W3(e,a)&&f&&(d(i,A).catch(l),c(),await p(),W3(e,a))?(r(f),f):null}function W4(){return new Promise(e=>window.setTimeout(e,250))}function W5(e){console.error("Failed to export room debug mask",e)}function W8(e){console.error("Failed to persist Custom Interior",e)}function W6(e){console.error("Failed to prepare Custom Interior",e)}let W7=[{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 Ke({isComplete:e,open:t,onCloseAnimationEnd:r,onOpenChange:n,portalContainer:i}){let{t:a}=rv(),s=(0,tb.useRef)(t),[o,l]=(0,tb.useState)(8),c=e?100:o,u=function(e){for(let t=W7.length-1;t>=0;t-=1){let r=W7[t];if(r&&e>=r.minimumProgress)return r}return W7[0]}(c);(0,tb.useEffect)(()=>{t&&!s.current&&l(8),s.current=t},[t]),(0,tb.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,tv.jsxs)("div",{role:"status","aria-live":"polite",className:"grid content-start gap-4",children:[(0,tv.jsx)("h2",{className:"typo-base-18 font-medium text-text-dark",children:a("floor.processing.title")}),(0,tv.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,tv.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-3",children:[(0,tv.jsx)("span",{className:"typo-base-14 min-w-0 flex-1 truncate text-left font-medium text-text-light",children:a(u.translationKey)}),(0,tv.jsxs)("span",{className:"typo-base-14 shrink-0 font-medium text-text-dark",children:[c,"%"]})]}),(0,tv.jsx)(VO,{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,tv.jsx)(j7,{open:t,onOpenChange:n,children:(0,tv.jsxs)(Vn,{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,tv.jsx)(Vs,{className:"sr-only",children:a("floor.processing.title")}),(0,tv.jsx)(Vo,{className:"sr-only",children:a(u.translationKey)}),d]})})}function Kt({showDialogCloseButton:e=!1}){var t;let r,{name:n,type:i}=VK(),{accessError:a,tinuuid:s,material:o,apiKey:l,baseURL:c,hasRooms:u,source:d,widgetSession:h,isViewerAccessPending:p,loadError:A,viewedObject:f}=VY(),{clearActiveError:g,handleAccessError:m}=function(){let{setAccessError:e,setLoadError:t}=VY();return{clearActiveError:(0,tb.useCallback)(()=>{e(null),t(null)},[e,t]),handleAccessError:e}}(),{room:v,sourceRooms:b}=VJ(),{containerRef:y,setContainerRef:w,sceneLoad:x,isRoomScenePending:C}=VX(),{dialogPortalContainer:E,viewerSurface:S,viewerDialogOpen:M,onViewerDialogOpenChange:B}=VW(Vz,"useRoomViewerSurface"),{t:I}=rv(),T=(0,tb.useRef)(null),k=a??A,R=I(`rooms.${v.id}`,{defaultValue:v.name}),D=(t=I("floor.scene.companyFallback"),f?.owner?.name??f?.brand??t),P="rugs"===i?f?.kit?.name??f?.name??o?.name??n:o?.name??f?.name??f?.kit?.name??n,_=(r=o?.previews?.[0],r?.subRes?.small??r?.url??f?.preview?.subRes?.small??f?.preview?.url??f?.mainPreview),L=function({activeError:e,apiKey:t,baseURL:r,clearActiveError:n,closeMaterialSelection:i,handleAccessError:a,hasDialogPortalContainer:s,hasRooms:o,isRoomScenePending:l,isViewerAccessPending:c,material:u,onViewerDialogOpenChange:d,sceneLoad:h,source:p,sourceRooms:A,viewerDialogOpen:f,viewerSurface:g,widgetSession:m}){let v=function(e){let{patchSceneLoad:t,setAngle:r,setRotation:n}=VX();return function(e,t){let[r,n]=(0,tb.useReducer)(W2,e,W1),i=(0,tb.useCallback)(e=>{e(),function({patchSceneLoad:e,setAngle:t,setRotation:r}){t(0),r(0),e(W0)}(t),n({type:"commit-interior-selection"})},[t]),a=(0,tb.useCallback)(()=>{n({type:"dismiss-interior-selection"})},[]),s=(0,tb.useCallback)(()=>{n({type:"open-interior-selection"})},[]),o=(0,tb.useCallback)(()=>{n({type:"recover-to-scene"})},[]),l=(0,tb.useCallback)(()=>{n({type:"return-to-interior-selection"})},[]),c=(0,tb.useCallback)(()=>{n({type:"start-custom-interior-processing"})},[]);return(0,tb.useMemo)(()=>({...r,commitInteriorSelection:i,dismissInteriorSelection:a,openInteriorSelection:s,recoverToScene:o,returnToInteriorSelection:l,startCustomInteriorProcessing:c}),[i,a,s,o,l,c,r])}(e,(0,tb.useMemo)(()=>({patchSceneLoad:t,setAngle:r,setRotation:n}),[t,r,n]))}(g),{appendRuntimeCustomInterior:b,customRooms:y}=function({listCustomInteriors:e}){let{appendRuntimeCustomInterior:t,customRooms:r,replaceRuntimeCustomInteriors:n}=function(){let[e,t]=(0,tb.useState)(()=>[]),r=(0,tb.useRef)(null),n=(0,tb.useCallback)(e=>{r.current?.revokeObjectUrls();let n=W$(e);return r.current=n,t(n.rooms),n.rooms},[]),i=(0,tb.useCallback)((e,n)=>{let i=W$([{id:WJ(),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 s=r.current;return r.current={rooms:[],revokeObjectUrls:()=>{s?.revokeObjectUrls(),i.revokeObjectUrls()}},t(e=>[a,...e.filter(e=>e.id!==a.id)]),a},[]);return(0,tb.useEffect)(()=>()=>{r.current?.revokeObjectUrls()},[]),(0,tb.useMemo)(()=>({appendRuntimeCustomInterior:i,customRooms:e,replaceRuntimeCustomInteriors:n}),[i,e,n])}(),i=(0,tb.useRef)(!0);(0,tb.useEffect)(()=>(i.current=!0,()=>{i.current=!1}),[]);let a=(0,tb.useCallback)(async()=>{let t=await e();i.current&&n(t)},[e,n]);return(0,tb.useEffect)(()=>{a()},[a]),(0,tb.useMemo)(()=>({appendRuntimeCustomInterior:t,customRooms:r,replaceRuntimeCustomInteriors:n,refreshCustomInteriors:a}),[t,r,a,n])}({listCustomInteriors:WZ}),w=(0,tb.useMemo)(()=>new Set(A.map(e=>e.id)),[A]),{commitCustomInteriorSelection:x,selectInterior:C}=function(e){let{room:t,setRoomId:r,setRooms:n}=VJ(),{widgetSession:i}=VY();return function({floorFlow:e,customRooms:t,selectedRoomId:r,onInteriorSelected:n,restoreSourceRooms:i,setRoomId:a,setRooms:s}){let o=(0,tb.useCallback)(t=>{e.commitInteriorSelection(()=>{s(e=>[t,...i(e).filter(e=>e.id!==t.id)]),a(t.id)}),n?.()},[e,n,i,a,s]),l=(0,tb.useCallback)(t=>{let o=t===r;o&&e.hasSceneSelection||(e.commitInteriorSelection(()=>{s(i),a(t)}),o||n?.())},[e,n,i,r,a,s]),c=(0,tb.useCallback)(n=>{if(n===r&&e.hasSceneSelection)return;let i=t.find(e=>e.id===n);i&&o(i)},[e.hasSceneSelection,o,t,r]),u=(0,tb.useCallback)(e=>{t.some(t=>t.id===e)?c(e):l(e)},[t,c,l]);return(0,tb.useMemo)(()=>({commitCustomInteriorSelection:o,selectInterior:u}),[o,u])}({...e,selectedRoomId:t.id,onInteriorSelected:()=>j$(i,"interior_selected"),setRoomId:r,setRooms:n})}({floorFlow:v,customRooms:y,restoreSourceRooms:(0,tb.useCallback)(e=>[...A,...e.filter(e=>!w.has(e.id))],[w,A])}),E=function(e){let{setIsRoomScenePending:t}=VX();return function({apiOptions:e,floorFlow:t,commitCustomInteriorSelection:r,downloadDebugMask:n,isDebugMaskExportEnabled:i,onAccessError:a,onDebugMaskError:s,onPersistenceError:o,onProcessingError:l,predictRoomScene:c,saveCustomInterior:u,setIsRoomScenePending:d,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p}){let[A,f]=(0,tb.useState)(!1),[g,m]=(0,tb.useState)(!1),[v,b]=(0,tb.useState)(null),[y,w]=(0,tb.useState)(null),[x,C]=(0,tb.useState)(!1),[E,S]=(0,tb.useState)(0),M=(0,tb.useRef)(null),B=(0,tb.useRef)(!1),I=(0,tb.useRef)(!0),T=(0,tb.useRef)(v);v&&(T.current=v),(0,tb.useEffect)(()=>(I.current=!0,()=>{I.current=!1,M.current?.abort()}),[]);let k=(0,tb.useCallback)(()=>{b(null),w(null),C(!1)},[]),R=(0,tb.useCallback)(e=>{k(),f(!1),e()},[k]),D=(0,tb.useCallback)(async A=>{if(k(),!A.type.startsWith("image/"))return void f(!0);f(!1),m(!1),t.startCustomInteriorProcessing(),B.current=!0;let g=new AbortController;M.current?.abort(),M.current=g,d(!0);try{await W9({abortSignal:g.signal,apiOptions:e,commitCustomInteriorSelection:r,downloadDebugMask:n,file:A,isActive:()=>I.current,isDebugMaskExportEnabled:i,onDebugMaskError:s,onPersistenceError:o,onProcessingComplete:()=>{m(!0)},predictRoomScene:c,saveCustomInterior:u,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p})}catch(t){if(g.signal.aborted)return;let e=jm(t);if(e){B.current&&C(!0),a(e);return}if(l(t),B.current){w("custom-interior-processing"),C(!0);return}b("custom-interior-processing")}finally{M.current===g&&(M.current=null,I.current&&d(!1))}},[e,t,r,n,i,a,s,o,l,c,k,u,d,h,p]),P=(0,tb.useCallback)(()=>{k(),f(!1),t.returnToInteriorSelection(),S(e=>e+1)},[t,k]),_=(0,tb.useCallback)(()=>{k(),t.returnToInteriorSelection()},[t,k]),L=(0,tb.useCallback)(({clearError:e,closeMaterialSelection:r})=>{e(),r(),t.hasSceneSelection&&t.recoverToScene()},[t]),N=(0,tb.useCallback)(()=>{B.current=!1,C(!1),y&&(b(y),w(null))},[y]),F=(0,tb.useCallback)(()=>I.current,[]);return(0,tb.useMemo)(()=>({displayedUploadError:v??T.current,isCustomInteriorProcessingComplete:g,isInvalidFile:A,isMounted:F,isProcessingDialogClosingForError:x,pendingUploadError:y,uploadError:v,uploadRetryRequestId:E,cancelUploadError:_,handleProcessingDialogCloseAnimationEnd:N,openInteriorSelection:R,processUploadFile:D,recoverFromActiveError:L,resetUploadErrorPresentation:k,tryUploadAgain:P}),[_,N,g,A,F,x,R,y,D,L,k,P,v,E])}({...e,setIsRoomScenePending:t})}({apiOptions:(0,tb.useMemo)(()=>({apiKey:t,baseURL:r,source:p,widgetSession:m}),[t,r,p,m]),floorFlow:v,commitCustomInteriorSelection:x,downloadDebugMask:WW,isDebugMaskExportEnabled:Wq,onAccessError:a,onDebugMaskError:W5,onPersistenceError:W8,onProcessingError:W6,predictRoomScene:Wj,saveCustomInterior:WX,trackRuntimeCustomInterior:b,waitForProcessingCompletion:W4}),{dismissInteriorSelection:S,hasSceneSelection:M,openInteriorSelection:B,sceneResetKey:I,step:T}=v,{cancelUploadError:k,displayedUploadError:R,handleProcessingDialogCloseAnimationEnd:D,isCustomInteriorProcessingComplete:P,isInvalidFile:_,isProcessingDialogClosingForError:L,openInteriorSelection:N,pendingUploadError:F,processUploadFile:O,recoverFromActiveError:Q,resetUploadErrorPresentation:U,tryUploadAgain:z,uploadError:G,uploadRetryRequestId:H}=E,j=o&&M,V=(0,tb.useRef)(e),q=!!(e&&j&&u);e&&(V.current=e);let W=(0,tb.useCallback)(()=>{j&&(U(),S())},[S,j,U]),K=(0,tb.useCallback)(()=>{i(),N(B)},[i,B,N]),J=(0,tb.useCallback)(()=>{Q({clearError:n,closeMaterialSelection:i})},[n,i,Q]),Y=(0,tb.useCallback)(e=>{if(!e){if(j)return void W();d?.(!1)}},[W,j,d]),X=(0,tb.useCallback)(e=>{if(!e){if(q)return void J();d?.(!1)}},[q,J,d]),Z=(0,tb.useCallback)(e=>{e||k()},[k]);!function({fallbackMs:e,handleProcessingDialogCloseAnimationEnd:t,isProcessingDialogClosingForError:r}){(0,tb.useEffect)(()=>{if(!r)return;let n=window.setTimeout(t,e);return()=>window.clearTimeout(n)},[e,t,r])}({fallbackMs:220,handleProcessingDialogCloseAnimationEnd:D,isProcessingDialogClosingForError:L});let $=function({activeError:e,canRecoverFromActiveError:t,floorFlow:r,hasDialogPortalContainer:n,hasRooms:i,isProcessingDialogClosingForError:a,isRoomScenePending:s,isViewerAccessPending:o,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=!o&&f&&(!e||t),v=f||p,b=!o&&!e&&v,y=!o&&!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&&s&&"processing-custom-interior"===r.step&&A},scene:{isLoading:s||!Object.values(c).every(Boolean),resetKey:r.sceneResetKey,shouldRender:m,shouldRenderDialog:m},surface:{usesSiblingDialogFlow:p},uploadErrorDialog:{open:!a&&!e&&!!u&&A}}}({activeError:e,canRecoverFromActiveError:q,floorFlow:{hasSceneSelection:M,sceneResetKey:I,step:T},hasDialogPortalContainer:s,hasRooms:o,isProcessingDialogClosingForError:L,isRoomScenePending:l,isViewerAccessPending:c,pendingUploadError:F,sceneLoad:h,uploadError:G,viewerDialogOpen:f,viewerSurface:g});return{...$,activeErrorDialog:{...$.activeErrorDialog,onCancel:q?J:void 0,onOpenChange:X,onTryAgain:q?J:void 0,variant:e??V.current},customRooms:y,interiorSelection:{...$.interiorSelection,isInvalidFile:_,onOpenChange:Y,onSelectRoom:C,onUploadFile:O,openFromScene:K,uploadRetryRequestId:H},sourceRooms:A,processingDialog:{...$.processingDialog,isComplete:P,onCloseAnimationEnd:D,onOpenChange:$.surface.usesSiblingDialogFlow?d:void 0},step:T,uploadErrorDialog:{...$.uploadErrorDialog,onCancel:k,onOpenChange:Z,onTryAgain:z,variant:R}}}({activeError:k,apiKey:l,baseURL:c,clearActiveError:g,closeMaterialSelection:(0,tb.useCallback)(()=>{T.current?.closeMaterialSelection()},[]),handleAccessError:m,hasDialogPortalContainer:null!==E,hasRooms:u,isRoomScenePending:C,isViewerAccessPending:p,material:o,onViewerDialogOpenChange:B,sceneLoad:x,source:d,sourceRooms:b,viewerDialogOpen:M,viewerSurface:S,widgetSession:h}),N=L.surface.usesSiblingDialogFlow?E:y,F=L.interiorSelection.shouldRender?"dialog"===L.interiorSelection.presentation?(0,tv.jsx)(WH,{open:L.interiorSelection.open,showCloseButton:e||L.scene.shouldRender,portalContainer:N,rooms:L.sourceRooms,customRooms:L.customRooms,selectedRoomId:v.id,isInvalidFile:L.interiorSelection.isInvalidFile,uploadRetryRequestId:L.interiorSelection.uploadRetryRequestId,onOpenChange:L.interiorSelection.onOpenChange,onSelectRoom:L.interiorSelection.onSelectRoom,onUploadFile:L.interiorSelection.onUploadFile}):"screen"===L.interiorSelection.presentation?(0,tv.jsx)(WG,{rooms:L.sourceRooms,customRooms:L.customRooms,selectedRoomId:v.id,isInvalidFile:L.interiorSelection.isInvalidFile,uploadRetryRequestId:L.interiorSelection.uploadRetryRequestId,showCloseButton:e,onSelectRoom:L.interiorSelection.onSelectRoom,onUploadFile:L.interiorSelection.onUploadFile}):null:null,O=(0,tv.jsx)(Ke,{isComplete:L.processingDialog.isComplete,open:L.processingDialog.open,portalContainer:N,onCloseAnimationEnd:L.processingDialog.onCloseAnimationEnd,onOpenChange:L.processingDialog.onOpenChange}),Q=(0,tv.jsxs)(tv.Fragment,{children:[(0,tv.jsx)(V4,{variant:L.activeErrorDialog.variant,open:L.activeErrorDialog.open,portalContainer:N,showDialogCloseButton:e&&L.activeErrorDialog.showCloseButton,onOpenChange:L.activeErrorDialog.onOpenChange,onTryAgain:L.activeErrorDialog.onTryAgain,onCancel:L.activeErrorDialog.onCancel}),(0,tv.jsx)(V4,{variant:L.uploadErrorDialog.variant,open:L.uploadErrorDialog.open,portalContainer:N,onOpenChange:L.uploadErrorDialog.onOpenChange,onTryAgain:L.uploadErrorDialog.onTryAgain,onCancel:L.uploadErrorDialog.onCancel})]}),U=(0,tv.jsxs)("div",{ref:w,className:"relative grid size-full grid-rows-[minmax(0,1fr)_auto] overflow-hidden text-foreground sm:block","data-testid":"floor-viewer-root",children:[p?(0,tv.jsx)("div",{className:"flex size-full items-center justify-center bg-radial from-background-containers to-background-base-2",children:(0,tv.jsx)(VC,{variant:"logo"})}):L.scene.shouldRender?(0,tv.jsx)(WU,{ref:T,actions:{openInteriorSelection:L.interiorSelection.openFromScene},canShowAr:!!s&&!(V3&&V9),companyName:D,hasActiveError:!!k,material:{name:P,previewUrl:_},portalContainer:N,room:{imageUrl:v.image_url,name:R},scene:{isLoading:L.scene.isLoading,resetKey:L.scene.resetKey},showDialogCloseButton:e}):null,!L.surface.usesSiblingDialogFlow&&F,!L.surface.usesSiblingDialogFlow&&O]});return L.surface.usesSiblingDialogFlow?(0,tv.jsxs)(tv.Fragment,{children:[(L.scene.shouldRenderDialog||p)&&(0,tv.jsx)(j7,{open:M,onOpenChange:B,children:(0,tv.jsxs)(Vn,{className:VQ,contentInsideOverlay:!0,portalContainer:E,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,tv.jsx)(Vs,{className:"sr-only",children:n}),(0,tv.jsx)(Vo,{className:"sr-only"}),U]})}),F,O,Q]}):(0,tv.jsxs)(tv.Fragment,{children:[U,Q]})}function Kr({className:e,...t}){return(0,tv.jsx)(Ha,{"data-slot":"radio-group",className:j5("grid gap-3",e),...t})}function Kn({checked:e,className:t,...r}){return(0,tv.jsx)("div",{className:j5("absolute top-1/2 left-1/2 size-6 -translate-x-1/2 -translate-y-1/2","flex items-center justify-center rounded-full",e?"bg-lime-400":"bg-background-base-2",t),...r,children:(0,tv.jsx)(cr,{className:"text-constant-white size-3.5",strokeWidth:4})})}function Ki({className:e,variant:t="default",...r}){return(0,tv.jsxs)(Ho,{"data-slot":"radio-group-item",className:j5("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50","check"===t&&"size-6","inverted"===t&&"size-5 border-button-outline data-[state=checked]:border-border-red data-[state=checked]:border-4 data-[state=checked]:bg-constant-white cursor-pointer transition-all",e),...r,children:["check"===t&&(0,tv.jsx)("div",{className:"relative",children:(0,tv.jsx)(Kn,{})}),"inverted"!==t&&(0,tv.jsx)(Hl,{"data-slot":"radio-group-indicator",className:"relative flex items-center justify-center",children:"check"===t?(0,tv.jsx)(Kn,{checked:!0}):(0,tv.jsx)(cn,{className:"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2"})})]})}function Ka({className:e,children:t,...r}){let{className:n,onReachEnd:i,...a}=r.swiperOptions??{},{t:s}=rv(),[o,l]=(0,tb.useState)(null),[c,u]=(0,tb.useState)(!0),[d,h]=(0,tb.useState)(!1),[p,A]=(0,tb.useState)(!1),f=(0,tb.useCallback)(e=>{u(e.isBeginning),h(e.isEnd),A(e.isLocked)},[]),g=(0,tb.useCallback)(e=>{l(e),f(e)},[f]),m=(0,tb.useCallback)(e=>{h(!0),i?.(e)},[i]);return(0,tv.jsxs)("div",{className:j5("relative w-full overflow-hidden",e),children:[(0,tv.jsx)(je,{className:j5("w-full py-5",n),slidesPerView:"auto",slidesPerGroup:2,onSwiper:g,onReachBeginning:()=>u(!0),onReachEnd:m,onFromEdge:f,onLock:()=>A(!0),onUnlock:()=>A(!1),onResize:f,slidesOffsetBefore:24,slidesOffsetAfter:24,spaceBetween:12,...a,children:t}),(0,tv.jsxs)(j6,{className:j5("absolute top-1/2 left-8 -translate-y-1/2 z-1",{hidden:c||p}),variant:"contrast",size:"icon",onClick:()=>o?.slidePrev(),children:[(0,tv.jsx)(ci,{}),(0,tv.jsx)("span",{className:"sr-only",children:s("previousSlide")})]}),(0,tv.jsxs)(j6,{className:j5("absolute top-1/2 right-8 -translate-y-1/2 z-1",{hidden:d||p}),variant:"contrast",size:"icon",onClick:()=>o?.slideNext(),children:[(0,tv.jsx)(ca,{}),(0,tv.jsx)("span",{className:"sr-only",children:s("nextSlide")})]})]})}function Ks({className:e,...t}){let r=qw("(max-width: 640px)"),{fetchNextMaterialsPage:n,materialItems:i,selectMaterial:a,selectedMaterialId:s}=qV(),o=(0,tb.useCallback)(()=>{n()},[n]);return 0===i.length?null:(0,tv.jsxs)(tv.Fragment,{children:[!r&&(0,tv.jsx)(qu,{orientation:"vertical"}),(0,tv.jsx)("div",{className:j5(e),...t,children:(0,tv.jsx)(Kr,{value:s||void 0,onValueChange:e=>{a(e)},children:(0,tv.jsx)(Ka,{swiperOptions:{onReachEnd:o,className:"py-2 sm:py-5"},children:i.map(({materialId:e,material:t,tinuuid:n})=>(0,tv.jsx)(jt,{className:j5("sm:w-25! w-18! transition-transform duration-200",e!==s&&"hover:scale-110"),children:(0,tv.jsxs)(qA,{htmlFor:`material-${e}`,className:"size-full flex flex-col gap-1 has-data-[state=checked]:bg-transparent",children:[(0,tv.jsxs)("div",{className:"size-full relative sm:h-19 h-13 rounded-[0.75rem] overflow-hidden grid place-items-center sm:block",children:[(0,tv.jsx)("img",{src:t.previews?.[0]?.subRes?.small??t.previews?.[0]?.url,alt:t.name??"",className:"size-full object-cover"}),(0,tv.jsx)(Ki,{value:e,id:`material-${e}`,variant:"check",className:j5("absolute sm:top-1.75 sm:right-1.75",{"sr-only":e!==s})})]}),!r&&(0,tv.jsx)("span",{className:j5("block w-full text-xs text-left text-text-light truncate",{"text-text-dark":e===s}),children:t.name})]})},`${n}-${e}`))})})})]})}function Ko({className:e,...t}){let{t:r}=rv(),{placement:n}=VK(),{rooms:i,room:a,setRoomId:s}=VJ(),{isRoomScenePending:o,selectCustomRoomFile:l}=VW(Vq,"useRoomViewerCustomRoomIntake"),c=qw("(max-width: 640px)"),u=(0,tb.useId)(),d=(0,tb.useCallback)((e,t)=>r(`rooms.${t}`,{defaultValue:e}),[r]),h=(0,tb.useCallback)(async e=>{let t=e.target.files?.[0];e.target.value="",t&&await l(t)},[l]);return(0,tv.jsx)("div",{className:j5(e),...t,children:(0,tv.jsx)(Kr,{value:a.id,onValueChange:s,children:(0,tv.jsxs)(Ka,{swiperOptions:{className:"py-2 sm:py-5 pb-3 sm:pb-5"},children:[(0,tv.jsx)(jt,{className:"sm:w-25! w-21! h-auto",children:(0,tv.jsxs)(qA,{htmlFor:u,className:j5("flex size-full cursor-pointer items-center justify-center rounded-[0.75rem] border border-dashed border-muted-foreground/40 bg-transparent px-2 text-center text-xs leading-tight text-muted-foreground transition-colors hover:border-foreground/40 hover:text-foreground",o&&"cursor-wait opacity-80"),"aria-disabled":o,children:[o?(0,tv.jsxs)(tv.Fragment,{children:[(0,tv.jsx)(VC,{className:"size-5"}),(0,tv.jsx)("span",{className:"sr-only",children:r("uploadOwnPhoto")})]}):r("uploadOwnPhoto"),(0,tv.jsx)("input",{id:u,type:"file",accept:"image/*",className:"sr-only",disabled:o,onChange:h})]})}),i.map(e=>(0,tv.jsx)(jt,{className:j5("sm:w-25! w-21! transition-transform duration-200",e.id!==a.id&&"hover:scale-110"),children:(0,tv.jsxs)(qA,{htmlFor:`room-${e.id}`,className:"size-full flex flex-col gap-1 has-data-[state=checked]:bg-transparent",children:[(0,tv.jsxs)("div",{className:"size-full relative h-17 sm:h-19 rounded-[0.75rem] overflow-hidden",children:[(0,tv.jsx)("img",{src:e.image_url,alt:d(e.name,e.id),className:"size-full object-cover",crossOrigin:"anonymous"}),(0,tv.jsx)(Ki,{value:e.id,id:`room-${e.id}`,variant:"check",className:j5("absolute top-1.75 right-1.75",{"sr-only":e.id!==a.id})})]}),"floor"===n&&!c&&(0,tv.jsx)("span",{className:j5("block w-full text-xs text-left text-text-light truncate",{"text-text-dark":e.id===a.id}),children:d(e.name,e.id)})]})},e.id))]})})})}function Kl({className:e,...t}){let{placement:r}=VK();return(0,tv.jsxs)("div",{className:j5("flex sm:items-end pl-0 overflow-hidden sm:flex-row flex-col py-3 sm:py-0",e),...t,children:[(0,tv.jsx)(Ko,{className:j5("shrink-0",{"sm:min-w-148.5 min-w-full":"floor"===r,grow:"wall"===r})}),"wall"===r&&(0,tv.jsxs)("div",{className:"hidden gap-5 pr-6 pb-5 md:flex",children:[(0,tv.jsx)(qq,{}),(0,tv.jsx)(q1,{})]}),"floor"===r&&(0,tv.jsx)(Ks,{})]})}function Kc({className:e,...t}){let{name:r}=VK();return(0,tv.jsx)("div",{className:j5("h-16 flex items-center px-6",e),...t,children:(0,tv.jsx)("div",{className:"truncate",children:r})})}function Ku({variant:e,showDialogCloseButton:t=!1}){let{t:r}=rv();return(0,tv.jsxs)("div",{className:"flex size-full flex-col items-center justify-center gap-4 bg-radial from-background-containers to-background-base-2 p-4 text-center",children:[(0,tv.jsx)(Vl,{className:"size-8 text-icons-light"}),(0,tv.jsx)("h2",{className:"typo-base-16 font-medium text-text-dark",children:r("viewer-load-failed"===e||"artwork-load-failed"===e||"room-load-failed"===e?`loadError.${e}`:`accessError.${e}`)}),t&&(0,tv.jsx)(Vt,{asChild:!0,children:(0,tv.jsx)(j6,{variant:"secondary",children:r("close")})})]})}function Kd({showDialogCloseButton:e=!1}){let{placement:t}=VK(),{isViewerAccessPending:r,accessError:n,loadError:i,setLoadError:a,hasRooms:s}=VY(),{setContainerRef:o,sceneLoad:l,isRoomScenePending:c}=VX(),{t:u}=rv(),d=r||c||s&&!Object.values(l).every(Boolean);if("floor"===t)return(0,tv.jsx)(Kt,{showDialogCloseButton:e});let h=n??i;return h?(0,tv.jsx)("div",{ref:o,className:"relative size-full overflow-hidden bg-radial from-background-containers to-background-base-2 text-foreground",children:(0,tv.jsx)(Ku,{variant:h,showDialogCloseButton:e})}):(0,tv.jsxs)("div",{ref:o,className:"relative size-full bg-radial from-background-containers to-background-base-2 text-foreground overflow-hidden",children:[e&&(0,tv.jsx)(Vt,{asChild:!0,children:(0,tv.jsxs)(j6,{className:"absolute top-3 right-6 z-20",variant:"secondary",children:[u("close"),(0,tv.jsx)(l7,{})]})}),!r&&(s?(0,tv.jsxs)(tv.Fragment,{children:[(0,tv.jsx)(Kc,{className:"absolute top-0 right-0 left-0 z-15"}),(0,tv.jsxs)("div",{className:"size-full max-w-full grid grid-rows-[1fr_auto]",children:[(0,tv.jsx)(Wr,{onError:()=>a("viewer-load-failed"),children:(0,tv.jsx)(W_,{className:"size-full min-h-0"})}),(0,tv.jsx)(Kl,{className:"bg-background"})]})]}):(0,tv.jsx)(Ko,{className:"absolute inset-x-0 bottom-0 bg-background"})),(0,tv.jsx)("div",{"aria-hidden":!d,className:j5("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",d?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),children:(0,tv.jsx)(VC,{variant:"logo"})})]})}let Kh={poster:"wallart",carpet:"rugs"},Kp={wallart:"wall",rugs:"floor",flooring:"floor"};function KA(e){return"poster"===e||"carpet"===e?Kh[e]:e}let Kf=0,Kg=[];function Km(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 Kv({children:e,src:t,tinuuid:r,type:n,viewerSurface:i,dialogPortalContainer:a=null,viewerDialogOpen:s=!0,onViewerDialogOpenChange:o,width:l,height:c,displayUnit:u,name:d,apiKey:h,baseURL:p,source:A,externalWidgetSession:f}){var g;let m=function(){let{t:e}=rv();return(0,tb.useMemo)(()=>[{value:.025,label:`2.5 ${e("units.cm")}`},{value:.05,label:`5 ${e("units.cm")}`}],[e])}(),v=q0(u),b=Kp[n],y="floor"===b?qN:qL,w=jf({apiKey:h,baseURL:p,source:A}),[x,C]=(0,tb.useState)(r),[E,S]=(0,tb.useState)(null),[M,B]=(0,tb.useState)(m[0].value),[I,T]=(0,tb.useState)(v[0].value),[k,R]=(0,tb.useState)(0),[D,P]=(0,tb.useState)(0),[_,L]=(0,tb.useState)(!1),[N,F]=(0,tb.useState)(null),[O,Q]=(0,tb.useState)(()=>({layoutReady:!1,placementReady:!1,materialReady:!1,artifactsReady:!1,assetsReady:!1,prepareReady:!1})),[U,z]=(0,tb.useState)(!1),[G,H]=(0,tb.useState)(null),[j,V]=(0,tb.useState)(null),q=(0,tb.useRef)(null),W=(0,tb.useRef)(new Set),K=(0,tb.useRef)(null),J=(0,tb.useRef)(!0),Y=(0,tb.useRef)(!1),X="floor"===b,Z="default"===A&&void 0!==h,$=nZ({queryKey:["room-viewer","activate",{apiKey:h??null,source:A}],enabled:Z,queryFn:({signal:e})=>j_({productType:jg({apiKey:h,baseURL:p,source:A})},{baseURL:p,headers:{"x-api-key":h},signal:e})},nL,void 0),ee=jm($.error),et=(0,tb.useMemo)(()=>{let e=$.data;return jZ(e?.widgetSession,{apiConfig:{baseURL:p,headers:{"x-api-key":h}}})},[$.data,h,p]),er=(0,tb.useMemo)(()=>f instanceof jX?f:jZ(f,{apiConfig:{baseURL:p,headers:{"x-api-key":h}}})??et,[et,h,p,f]),en="shopify"===A?null!==er:Z&&$.isSuccess,ei=nZ({queryKey:["room-viewer","rooms",{apiKey:(g={apiKey:h,baseURL:p,source:A,widgetSession:er}).apiKey??null,source:g.source,widgetSessionId:g.widgetSession?.sid??null}],enabled:w&&en,queryFn:async({signal:e})=>{try{return await j4({apiKey:h,baseURL:p,signal:e,source:A,widgetSession:er})}catch(e){if(jm(e))throw e;return[]}}},nL,void 0),ea=w?ei.data??Kg:y,[es,eo]=(0,tb.useState)(()=>({rooms:ea,sourceRooms:ea})),el=(0,tb.useMemo)(()=>Km(es.rooms,es.sourceRooms,ea),[es.rooms,es.sourceRooms,ea]),ec=(0,tb.useCallback)(e=>{eo(t=>{let r=Km(t.rooms,t.sourceRooms,ea);return{rooms:"function"==typeof e?e(r):e,sourceRooms:ea}})},[ea]),[eu,ed]=(0,tb.useState)(()=>y[0].id),eh=el.find(e=>e.id===eu),ep=eh??el[0]??y[0],eA=el.length>0;!eh&&el[0]&&eu!==el[0].id&&ed(el[0].id);let ef=nZ({queryKey:j1(x??void 0,{apiKey:h,baseURL:p,source:A}),enabled:(!Z||$.isSuccess||$.isError&&null===ee)&&X&&!!x,placeholderData:nm,queryFn:async({signal:e})=>{if(!x)throw Error("Tinuuid is required.");return j2(x,{apiKey:h,baseURL:p,signal:e,source:A,widgetSession:er})}},nL,void 0),eg=ef.data??null,em=E?.native?.glbUrl??null,ev=jm(ef.error),eb=jm(ei.error),ey=w&&("shopify"===A?null===er||ei.isLoading:$.isSuccess&&ei.isLoading),ew=Z&&$.isLoading||ey,ex=$.error&&null===ee?"viewer-load-failed":null,eC=ef.error&&null===ev?"viewer-load-failed":null,eE="wall"===b&&("string"!=typeof t||0===t.trim().length)?"artwork-load-failed":null,eS=G??ee??eb??ev,eM=j??ex??eC??eE,eB=(0,tb.useCallback)(e=>{Q(t=>Object.assign({},t,e))},[]);(0,tb.useEffect)(()=>{let e=new Set(el.map(e=>e.image_url));for(let t of Array.from(W.current))e.has(t)||(URL.revokeObjectURL(t),W.current.delete(t))},[el]),(0,tb.useEffect)(()=>{let e=W.current;return J.current=!0,()=>{for(let t of(J.current=!1,K.current?.abort(),Array.from(e)))URL.revokeObjectURL(t);e.clear()}},[]);let eI=(0,tb.useCallback)(async e=>{let t=null,r=new AbortController;K.current?.abort(),K.current=r,z(!0);try{t=URL.createObjectURL(e);let n=await Wj(e,{apiKey:h,baseURL:p,source:A,signal:r.signal,widgetSession:er});if(r.signal.aborted||!J.current)return void URL.revokeObjectURL(t);Wq()&&WW(n,e.name).catch(e=>{console.error("Failed to export room debug mask",e)});let i={id:(Kf+=1,`room-custom-${Kf}`),name:e.name,image_url:t,scene:n};W.current.add(t),eB({placementReady:!1,prepareReady:!1,artifactsReady:!1,assetsReady:!1}),ec(e=>[i,...e]),ed(i.id)}catch(n){if(t&&URL.revokeObjectURL(t),r.signal.aborted)return;let e=jm(n);if(e)return void H(e);console.error("Failed to prepare custom room scene",n)}finally{K.current===r&&(K.current=null,J.current&&z(!1))}},[h,p,eB,ec,A,er]);(0,tb.useEffect)(()=>{if("dialog"!==i||!s){Y.current=!1;return}Y.current||er&&(j$(er,"widget_opened"),Y.current=!0)},[s,i,er]),(0,tb.useEffect)(()=>{X&&(C(r),S(null),H(null),V(null))},[r,X]),(0,tb.useEffect)(()=>{H(null),V(null)},[h,A]),(0,tb.useEffect)(()=>{X&&eg&&null===E&&S(eg.materials?.[0]??null)},[E,eg,X]);let eT=(0,tb.useMemo)(()=>({type:n,placement:b,name:d,width:l,height:c,displayUnit:u}),[n,b,d,l,c,u]),ek=(0,tb.useMemo)(()=>({viewerSurface:i,dialogPortalContainer:a,viewerDialogOpen:s,onViewerDialogOpenChange:o}),[i,a,s,o]),eR=(0,tb.useMemo)(()=>({rooms:el,sourceRooms:ea,setRooms:ec,room:ep,setRoomId:ed}),[el,ep,ec,ea]),eD=(0,tb.useMemo)(()=>({src:t,glbUrl:em,tinuuid:x,viewedObject:eg,material:E,setTinuuid:C,setMaterial:S,apiKey:h,baseURL:p,source:A,widgetSession:er,hasRooms:eA,isViewerAccessPending:ew,accessError:eS,setAccessError:H,loadError:eM,setLoadError:V}),[t,em,x,eg,E,h,p,A,er,eA,ew,eS,eM]),eP=(0,tb.useMemo)(()=>({containerRef:N,setContainerRef:F,resourceRef:q,angle:k,setAngle:R,rotation:D,setRotation:P,isDragging:_,setIsDragging:L,sceneLoad:O,patchSceneLoad:eB,isRoomScenePending:U,setIsRoomScenePending:z}),[N,k,D,_,O,eB,U]),e_=(0,tb.useMemo)(()=>({frameWidth:M,setFrameWidth:B,matting:I,setMatting:T}),[M,I]),eL=(0,tb.useMemo)(()=>({isRoomScenePending:U,selectCustomRoomFile:eI}),[U,eI]);return(0,tv.jsx)(VU,{value:eT,children:(0,tv.jsx)(Vz,{value:ek,children:(0,tv.jsx)(VG,{value:eR,children:(0,tv.jsx)(VH,{value:eD,children:(0,tv.jsx)(Vj,{value:eP,children:(0,tv.jsx)(VV,{value:e_,children:(0,tv.jsx)(Vq,{value:eL,children:e})})})})})})})}let Kb=new n7({defaultOptions:{queries:{gcTime:1/0,refetchOnMount:!1,refetchOnReconnect:!1,refetchOnWindowFocus:!1,retry:(e,t)=>{let r=function(e){if(a9(e))return e.response?.status}(t);return(void 0===r||!(r>=400)||!(r<500))&&e<2}}}});function Ky({type:e,src:t,tinuuid:r,name:n,height:i,width:a,language:s,dimensionUnit:o="m",displayUnit:l="cm",apiKey:c,source:u="default",showDialogCloseButton:d=!1,viewerSurface:h="inline",dialogPortalContainer:p=null,viewerDialogOpen:A=!0,onViewerDialogOpenChange:f,widgetSession:g}){let{i18n:m}=rv(),v=c?.trim()||void 0,b=KA(e),y="wall"===Kp[b]?function(e,t,r="m"){return{width:qi(e??0,r),height:qi(t??0,r)}}(a,i,o):null;return(0,tb.useEffect)(()=>{},[e]),(0,tb.useEffect)(()=>{"string"==typeof s&&m.changeLanguage(s)},[m,s]),(0,tv.jsx)(nG,{client:Kb,children:(0,tv.jsx)(Kv,{src:t??null,tinuuid:r??null,type:b,viewerSurface:h,dialogPortalContainer:p,viewerDialogOpen:A,onViewerDialogOpenChange:f,name:n,width:y?.width??0,height:y?.height??0,displayUnit:l,apiKey:v,baseURL:"shopify"===u?jA:void 0,source:u,externalWidgetSession:g,children:(0,tv.jsx)(Kd,{showDialogCloseButton:d})})})}function Kw({type:e,src:t,tinuuid:r,width:n,height:i,dimensionUnit:a,displayUnit:s,name:o,language:l,apiKey:c,source:u,widgetSession:d,disableClose:h=!1,open:p,defaultOpen:A,onOpenChange:f,...g}){let[m,v]=(0,tb.useState)(null),b=Kp[KA(e)],y="floor"===b&&h,[w,x]=(0,tb.useState)(A??!1),C=p??w,[E,S]=(0,tb.useState)(C),M=C||E;(0,tb.useEffect)(()=>{C&&S(!0)},[C]);let B=(0,tv.jsx)(Ky,{type:e,src:t,tinuuid:r,name:o,height:i,width:n,dimensionUnit:a,displayUnit:s,language:l,apiKey:c,source:u,widgetSession:d,showDialogCloseButton:!y,viewerSurface:"dialog",dialogPortalContainer:m,viewerDialogOpen:C,onViewerDialogOpenChange:function(e){(e||!y)&&(void 0===p&&x(e),f?.(e))}});return(0,tv.jsxs)(tv.Fragment,{children:[(0,tw.createPortal)((0,tv.jsx)("style",{children:jo.A}),document.head),(0,tw.createPortal)((0,tv.jsxs)(rO.div,{"data-neurodyn-room-viewer-root":"",style:{display:"block",letterSpacing:"normal",zIndex:0x7fffffff},children:[(0,tv.jsx)("style",{children:jh}),(0,tv.jsx)("div",{ref:v}),m&&(0,tv.jsx)(js,{root:m,storageKey:"neurodyn-theme",defaultTheme:"light",children:(0,tv.jsx)(rb,{i18n:jc,children:"floor"===b?M&&B:(0,tv.jsx)(j7,{...g,open:p,defaultOpen:A,onOpenChange:f,children:(0,tv.jsxs)(Vn,{className:VQ,contentInsideOverlay:!0,portalContainer:m,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,tv.jsxs)(Vi,{className:"sr-only",children:[(0,tv.jsx)(Vs,{children:o}),(0,tv.jsx)(Vo,{})]}),B]})})})})]}),document.body)]})}jH({baseURL:"https://api.neurodyn.ai/v1/"}),jT({baseURL:"https://api.neurodyn.ai/"});var Kx=r("../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/client.js");let KC=0;class KE{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-${KC++}`,document.body.appendChild(this.container),this.root=(0,Kx.createRoot)(this.container)),this.root}render(){this.props&&this.ensureRoot().render((0,tb.createElement)(Kw,{...this.props,onOpenChange:this.handleOpenChange,open:this.openState}))}}function KS(e,t){let r=e.getAttribute(t);return r?Number(r):void 0}class KM{renderer=new KE;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={}){var r,n,i;let a,s,o;return{disableClose:void 0!==t.disableClose?t.disableClose:"true"===e.getAttribute("data-neurodyn-room-viewer-disable-close"),type:void 0!==t.type?t.type:e.getAttribute("data-neurodyn-room-viewer-type"),src:void 0!==t.src?t.src:e.getAttribute("data-neurodyn-room-viewer-src"),tinuuid:void 0!==t.tinuuid?t.tinuuid:e.getAttribute("data-neurodyn-room-viewer-tinuuid"),name:void 0!==t.name?t.name:e.getAttribute("data-neurodyn-room-viewer-name"),language:void 0!==t.language?t.language:e.getAttribute("data-neurodyn-room-viewer-language"),width:void 0!==t.width?t.width:KS(e,"data-neurodyn-room-viewer-width"),height:void 0!==t.height?t.height:KS(e,"data-neurodyn-room-viewer-height"),dimensionUnit:void 0!==t.dimensionUnit?t.dimensionUnit:(r="data-neurodyn-room-viewer-dimension-unit","m"===(a=e.getAttribute(r))||"cm"===a||"in"===a?a:void 0),displayUnit:void 0!==t.displayUnit?t.displayUnit:(n="data-neurodyn-room-viewer-display-unit","cm"===(s=e.getAttribute(n))||"in"===s?s:void 0),apiKey:void 0!==t.apiKey?t.apiKey:e.getAttribute("data-neurodyn-room-viewer-api-key"),source:void 0!==t.source?t.source:(i="data-neurodyn-room-viewer-source","default"===(o=e.getAttribute(i))||"shopify"===o?o:void 0)}}(e.currentTarget,this.props))}}window.RoomViewerDialog=KM})()})();
7550
+ ${s}`;a(!0);try{if(!i&&t)return void await WD(o);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:o,files:[t]})}catch(e){console.error("Failed to generate scene screenshot for sharing",e)}await navigator.share({text:o,url:s})}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,tb.useCallback)(async()=>{let t=e.current;if(t){o(!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{o(!1)}}},[e,r]),isDownloading:s,isSharing:i,share:c}}function W_({captureRef:e,className:t,canvasWrapperClassName:r,chrome:n="default",...i}){let{placement:a,type:s}=VK(),{containerRef:o,isDragging:l,angle:c,rotation:u,setAngle:d,setRotation:h}=VX(),{t:p}=rv(),A=(0,tb.useRef)(null),f=(0,tb.useRef)(null),g=e??f,m=qw("(max-width: 639px)"),v=qw("(min-width: 768px)"),{canShare:b,isSharing:y,share:w}=WP({captureRef:g,shareMessage:p(`shareMessage.${s}`)}),x=(0,tb.useCallback)(()=>{m&&A.current?.centerView()},[m]);return(0,tv.jsxs)("div",{className:j5("relative flex items-center justify-center overflow-hidden",t),...i,children:[(0,tv.jsx)(AY,{ref:A,disabled:l,children:(0,tv.jsx)(AX,{wrapperClass:"neurodyn-rzpp-wrapper size-full!",contentClass:"neurodyn-rzpp-content h-full! min-w-full sm:max-w-full",children:(0,tv.jsx)(WR,{captureRef:g,className:r,onSizeChange:x})})}),"default"===n&&(0,tv.jsxs)(tv.Fragment,{children:[(0,tv.jsx)(q4,{className:"absolute bottom-4 left-4 sm:bottom-6 sm:left-6"}),"floor"===a&&(0,tv.jsxs)("div",{className:"bg-button-dark typo-button-normal absolute bottom-6 left-1/2 hidden h-9 -translate-x-1/2 items-center gap-1.5 rounded-lg px-3.75 text-text-white md:inline-flex",children:[(0,tv.jsx)("span",{className:"shrink-0",children:p("scene.position")}),(0,tv.jsx)(qb,{value:[u],onValueChange:([e])=>h(e??0),min:-180,max:180,step:1,className:"w-29.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":p("scene.position")})]}),(0,tv.jsxs)("div",{className:"absolute right-4 bottom-4 inline-flex items-center gap-2 sm:right-6 sm:bottom-6",children:[("wall"===a||"floor"===a&&!v)&&(0,tv.jsxs)(qg,{children:[(0,tv.jsx)(qm,{asChild:!0,children:(0,tv.jsxs)(j6,{variant:"contrast",size:m?"icon":"default",children:[(0,tv.jsx)(Vv,{className:"size-5"}),(0,tv.jsx)("span",{className:"sr-only sm:not-sr-only",children:p("scene.tunePosition")})]})}),(0,tv.jsx)(qv,{className:"px-3 py-3.5 bg-button-dark border-button-dark text-text-white",side:"top",align:"end",portalContainer:o,children:(0,tv.jsxs)(qd,{children:[(0,tv.jsxs)(qp,{orientation:"horizontal",children:[(0,tv.jsx)(qf,{children:p("scene.rotation")}),(0,tv.jsx)(qb,{value:[u],onValueChange:([e])=>h(e??0),min:-180,max:180,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":p("scene.rotation")})]}),"wall"===a&&(0,tv.jsxs)(qp,{orientation:"horizontal",children:[(0,tv.jsx)(qf,{children:p("scene.angle")}),(0,tv.jsx)(qb,{value:[c],onValueChange:([e])=>d(e??0),max:75,min:-75,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":p("scene.angle")})]})]})})]}),"wall"===a&&(0,tv.jsxs)(j6,{variant:"contrast",size:m?"icon":"default",disabled:!b||y,onClick:w,children:[(0,tv.jsx)(Vy,{className:"size-5"}),(0,tv.jsx)("span",{className:"sr-only sm:not-sr-only",children:p("scene.share")})]}),m&&"wall"===a&&(0,tv.jsxs)(qg,{children:[(0,tv.jsx)(qm,{asChild:!0,children:(0,tv.jsx)(j6,{variant:"contrast",size:"icon",children:(0,tv.jsx)(Vb,{})})}),(0,tv.jsxs)(qv,{className:"grid gap-5",portalContainer:o,children:[(0,tv.jsx)(qq,{}),(0,tv.jsx)(q1,{})]})]})]})]})]})}function WL({className:e,gridClassName:t,titleClassName:r,onOpenChange:n,...i}){let{t:a}=rv(),s=(0,tb.useRef)(null),{fetchNextMaterialsPage:o,hasNextPage:l,isFetchingNextPage:c,isLoading:u,materialItems:d,selectMaterial:h,selectedMaterialId:p}=qV({includeViewedObject:!0});(0,tb.useEffect)(()=>{let e=s.current;e&&!u&&!c&&l&&0!==d.length&&e.scrollHeight<=e.clientHeight&&o()},[o,l,c,u,d.length]);let A=(0,tb.useCallback)(e=>{let{clientHeight:t,scrollHeight:r,scrollTop:n}=e.currentTarget;n+t>=r-64&&o()},[o]),f=(0,tb.useCallback)(e=>{h(e)&&n(!1)},[n,h]);return(0,tv.jsxs)("div",{...i,className:j5("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,tv.jsx)("h2",{className:j5("typo-base-16 font-medium sm:typo-base-14 sm:font-semibold text-text-dark",r),children:a("floor.materialSelection.title")}),(0,tv.jsx)("div",{"data-testid":"material-selection-grid",ref:s,className:j5("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,tv.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})=>{let n,i=e===p,a=(n=t.previews?.[0],n?.subRes?.small??n?.url);return(0,tv.jsxs)("button",{type:"button","data-selected":i,"aria-pressed":i,className:j5("group relative grid aspect-square min-w-0 place-items-center overflow-hidden rounded-lg border border-border bg-background-containers p-1 text-left transition hover:border-icons-normal 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:[a?(0,tv.jsx)("img",{src:a,alt:"",className:"size-full rounded-md object-cover"}):(0,tv.jsx)(Vf,{className:"size-6 text-icons-normal"}),(0,tv.jsx)("span",{className:"sr-only",children:t.name}),i&&(0,tv.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,tv.jsx)(Vu,{className:"size-4"})})]},`${r}-${e}`)}),(u||c)&&(0,tv.jsx)("div",{className:"col-span-3 grid h-16 place-items-center",children:(0,tv.jsx)(VC,{className:"size-6"})})]})})]})}function WN({open:e,portalContainer:t,onOpenChange:r}){let{t:n}=rv();return(0,tv.jsx)(j7,{open:e,onOpenChange:r,children:(0,tv.jsxs)(Vn,{contentInsideOverlay:!0,"data-testid":"material-selection-mobile-overlay",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,tv.jsx)(Vs,{className:"sr-only",children:n("floor.materialSelection.title")}),(0,tv.jsx)(Vo,{className:"sr-only"}),(0,tv.jsx)(WL,{className:"min-h-0",gridClassName:"max-h-none",onOpenChange:r}),(0,tv.jsx)(Va,{className:"shrink-0 p-0",children:(0,tv.jsx)(Vt,{asChild:!0,children:(0,tv.jsx)(j6,{type:"button",variant:"outline",className:"w-full",children:n("close")})})})]})})}let WF="data-material-selection-action",WO="data-material-selection-panel";function WQ({actionLabel:e,actionClassName:t,actionPlacement:r,className:n,iconClassName:i,isOpen:a,materialName:s,previewClassName:o,previewUrl:l,testId:c,titleLabel:u,onClick:d,onPointerDown:h}){let{t:p}=rv(),{displayUnit:A,type:f}=VK(),{containerRef:g}=VX(),{viewedObject:m}=VY(),{selectedDestinationUrl:v,sizeItems:b,selectedTinuuid:y,selectSize:w}=function(){var e;let{tinuuid:t,setMaterial:r,setTinuuid:n,apiKey:i,baseURL:a,source:s,widgetSession:o}=VY(),{type:l}=VK(),{data:c}=nZ({queryKey:j1(t??void 0,{apiKey:i,baseURL:a,source:s,resourceType:l}),enabled:"rugs"===l&&!!t,placeholderData:nm,queryFn:({signal:e})=>{if(!t)throw Error("Tinuuid is required.");return j2(t,{apiKey:i,baseURL:a,signal:e,source:s,widgetSession:o,resourceType:l})}},nL,void 0),u=c?.kit?.uuid,d=c?.owner?.uuid;(0,tb.useEffect)(()=>{let e=c?.materials?.[0];c?.tinuuid===t&&e&&r(e)},[c,r,t]);let{data:h,fetchNextPage:p,hasNextPage:A,isFetchingNextPage:f,isFetchNextPageError:g}=nZ({queryKey:["room-viewer","kit-objects",{apiKey:(e={apiKey:i,baseURL:a,source:s,resourceType:l}).apiKey??null,kitUuid:u??null,ownerUuid:d??null,resourceType:e.resourceType??null,source:e.source}],enabled:"rugs"===l&&!!u&&!!d,queryFn:({pageParam:e,signal:t})=>{if(!u||!d)throw Error("Kit uuid and owner uuid are required.");return j9(u,d,e,{apiKey:i,baseURL:a,signal:t,source:s,widgetSession:o,resourceType:l})},initialPageParam:0,getNextPageParam:(e,t,r)=>void 0!==e.pages_count?r+1<e.pages_count?r+1:void 0:e.objs?.length?r+1:void 0},n2,void 0);(0,tb.useEffect)(()=>{!A||f||g||p({cancelRefetch:!1})},[p,A,f,g]);let m=(0,tb.useMemo)(()=>h?.pages.flatMap(e=>e.objs??[])??[],[h]),v=(0,tb.useMemo)(()=>m.map(ql).filter(e=>null!==e),[m]);return{selectedDestinationUrl:c?.tinuuid===t?c.destinationUrl:void 0,sizeItems:v,selectedTinuuid:t,selectSize:e=>!!v.some(t=>t.tinuuid===e)&&(n(e),!0)}}(),x=p(`units.${A}`),C=b.find(e=>e.tinuuid===y),E=function(e){let t=e?.trim();if(!t||qn.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}}("rugs"===f?v??(m?.tinuuid===y?m.destinationUrl:void 0):m?.destinationUrl),S=(0,tv.jsxs)(j6,{type:"button",variant:"outline",size:"sm",[WF]:!0,"aria-expanded":a,className:j5("shrink-0","stacked"===r&&"w-fit",t),onPointerDown:h?e=>{e.preventDefault(),e.stopPropagation(),h()}:void 0,onClick:d,children:[a?(0,tv.jsx)(Vd,{className:"size-4"}):(0,tv.jsx)(Vm,{className:"size-4"}),e]});return(0,tv.jsxs)("div",{className:n,"data-neurodyn-room-viewer-product":"","data-testid":c,children:[(0,tv.jsx)("div",{className:o,children:l?(0,tv.jsx)("img",{src:l,alt:"",className:"size-full object-cover"}):(0,tv.jsx)(Vf,{className:i})}),(0,tv.jsxs)("div",{className:"grid min-h-16 min-w-0 flex-1 content-center gap-2",children:[(0,tv.jsxs)("div",{className:"flex min-w-0 items-start justify-between gap-2",children:[(0,tv.jsxs)("div",{className:"min-w-0",children:[(0,tv.jsx)("div",{className:"sr-only",children:u}),(0,tv.jsx)("div",{className:"typo-button-normal truncate text-text-dark",children:s})]}),E&&(0,tv.jsx)("a",{href:E,target:"_blank",rel:"noopener noreferrer",className:"typo-base-12 shrink-0 text-button-primary underline-offset-2 hover:underline","data-testid":c?`${c}-description-link`:void 0,children:p("floor.scene.description")})]}),(0,tv.jsxs)("div",{className:"flex flex-nowrap items-center gap-2",children:["stacked"===r&&S,b.length>1&&!!C&&(0,tv.jsxs)(V5,{value:y??void 0,onValueChange:w,children:[(0,tv.jsx)(V6,{size:"sm",className:"w-fit shrink-0","data-testid":c?`${c}-size-select`:void 0,children:(0,tv.jsx)(V8,{})}),(0,tv.jsx)(V7,{portalContainer:g,children:b.map(e=>{var t;let r;return(0,tv.jsx)(qe,{value:e.tinuuid,children:(t=e.size,r=t.split("\xd7").map(e=>"cm"===A?e:Math.round(qa(Number(e)/100,A)).toString()).join("\xd7"),`${r} ${x}`)},e.tinuuid)})})]})]})]}),"trailing"===r&&S]})}function WU({actions:e,canShowAr:t,companyName:r,hasActiveError:n,material:i,portalContainer:a,ref:s,room:o,scene:l,showDialogCloseButton:c=!1}){let{t:u}=rv(),{type:d}=VK(),[h,p]=(0,tb.useState)(!1),[A,f]=(0,tb.useState)(!1),g=(0,tb.useRef)(null),m=(0,tb.useRef)(!1),v=u(h?"floor.scene.hideCatalog":`resourceType.${d}.replaceProduct`),b=u(A?"floor.scene.hideCatalog":`resourceType.${d}.replaceProductShort`),y=u(`resourceType.${d}.productCardTitle`),{canShare:w,download:x,isDownloading:C,isSharing:E,share:S}=WP({captureRef:g,fallbackToClipboard:!0,shareMessage:u(`shareMessage.${d}`)}),M=(0,tb.useCallback)(()=>{p(!1),f(!1)},[]);(0,tb.useImperativeHandle)(s,()=>({closeMaterialSelection:M}),[M]);let B=(0,tb.useCallback)(()=>{if(m.current){m.current=!1;return}p(!0),f(!1)},[]),I=(0,tb.useCallback)(()=>{m.current=!0,M()},[M]),T=(0,tb.useCallback)(()=>{f(!0),p(!1)},[]),k=(0,tb.useCallback)(()=>{M(),e.openInteriorSelection()},[e,M]);return(0,tb.useEffect)(()=>{if(h)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(`[${WF}], [${WO}]`)||p(!1)}function t(e){"Escape"===e.key&&p(!1)}},[h]),(0,tv.jsxs)(tv.Fragment,{children:[(0,tv.jsx)("div",{className:"absolute inset-0 bg-constant-black","data-testid":"floor-scene-background-base"}),(0,tv.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,tv.jsx)("img",{src:o.imageUrl,alt:"",className:"block size-full max-w-none object-cover object-center opacity-50"})}),(0,tv.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,tv.jsx)("div",{className:"min-w-0 pt-1",children:(0,tv.jsx)("h1",{"data-testid":"floor-scene-header-company",className:"typo-base-16 truncate font-medium lg:typo-base-18",children:r})}),(0,tv.jsxs)("div",{className:"pointer-events-auto inline-flex shrink-0 items-center gap-2",children:[(0,tv.jsxs)(j6,{type:"button",variant:"secondary","aria-label":u("floor.scene.share"),"data-neurodyn-room-viewer-share":"",disabled:!w||E,onClick:S,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tv.jsx)(Vy,{className:"size-5"}),(0,tv.jsx)("span",{className:"hidden lg:inline",children:u("floor.scene.share")})]}),(0,tv.jsxs)(j6,{type:"button",variant:"secondary","aria-label":u("floor.scene.download"),"data-neurodyn-room-viewer-download":"",disabled:C,onClick:x,className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tv.jsx)(Vh,{className:"size-5"}),(0,tv.jsx)("span",{className:"hidden lg:inline",children:u("floor.scene.download")})]}),c&&(0,tv.jsx)(Vt,{asChild:!0,children:(0,tv.jsxs)(j6,{type:"button",variant:"secondary","aria-label":u("close"),className:"size-10 rounded-full px-0 lg:h-9 lg:w-auto lg:rounded-xl lg:px-3.5",children:[(0,tv.jsx)("span",{className:"hidden lg:inline",children:u("close")}),(0,tv.jsx)(Vd,{className:"!size-5"})]})})]})]}),(0,tv.jsx)(W_,{captureRef:g,chrome:"none",className:"relative z-10 size-full min-h-0",canvasWrapperClassName:"p-0 sm:pt-0 sm:pb-0"},l.resetKey),(0,tv.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,tv.jsxs)("div",{className:"pointer-events-auto flex min-w-0 items-stretch gap-3",children:[(0,tv.jsx)(WQ,{actionLabel:v,actionPlacement:"stacked",className:"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)]",iconClassName:"size-6 text-icons-normal",isOpen:h,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-desktop-product-card",titleLabel:y,onClick:h?M:B,onPointerDown:h?I:void 0}),(0,tv.jsxs)("div",{className:"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)]","data-testid":"floor-room-card","data-neurodyn-room-viewer-room":"",children:[(0,tv.jsx)("img",{src:o.imageUrl,alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,tv.jsxs)("span",{className:"grid min-w-0 flex-1 content-center gap-2",children:[(0,tv.jsx)("span",{className:"typo-button-normal block min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-desktop-room-name",children:o.name}),(0,tv.jsx)(j6,{type:"button",variant:"outline",size:"sm",className:"w-fit",onClick:k,children:u("floor.interiorSelection.chooseInterior")})]})]})]}),t&&(0,tv.jsxs)("div",{className:"pointer-events-auto 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-testid":"floor-ar-card","data-neurodyn-room-viewer-try-at-home":"",children:[(0,tv.jsx)("img",{src:o.imageUrl,alt:"",className:"size-16 shrink-0 rounded-lg object-cover"}),(0,tv.jsxs)("div",{className:"grid min-w-0 flex-1 content-center gap-2",children:[(0,tv.jsx)(q4,{buttonLabel:u("floor.scene.tryAtHome"),buttonVariant:"secondary",buttonSize:"sm",buttonClassName:"w-fit"}),(0,tv.jsx)("div",{className:"typo-base-12 truncate font-medium text-text-light",children:u("floor.scene.tryAtHomeBody")})]})]})]}),(0,tv.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,tv.jsx)(WQ,{actionLabel:v,actionPlacement:"stacked",className:"pointer-events-auto 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)]",iconClassName:"size-6 text-icons-normal",isOpen:h,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-tablet-product-card",titleLabel:y,onClick:h?M:B,onPointerDown:h?I:void 0}),(0,tv.jsxs)("div",{className:"pointer-events-auto grid w-[254px] gap-2",children:[(0,tv.jsxs)("div",{className:"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)]","data-testid":"floor-tablet-room-card","data-neurodyn-room-viewer-room":"",children:[(0,tv.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,tv.jsx)("img",{src:o.imageUrl,alt:"",className:"size-10 shrink-0 rounded-full object-cover"}),(0,tv.jsxs)("span",{className:"grid min-w-0",children:[(0,tv.jsx)("span",{className:"typo-base-12 truncate text-text-light",children:u("floor.scene.interiorCardTitle")}),(0,tv.jsx)("span",{className:"typo-button-normal min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-tablet-room-name",children:o.name})]})]}),(0,tv.jsx)(j6,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:k,children:u("floor.interiorSelection.chooseInteriorShort")})]}),t&&(0,tv.jsx)(q4,{className:"w-full","data-neurodyn-room-viewer-try-at-home":"",buttonLabel:u("floor.scene.tryAtHome"),buttonLeadingIcon:(0,tv.jsx)(Vw,{className:"size-5"}),buttonVariant:"secondary",buttonSize:"default",buttonClassName:"h-9 w-full rounded-xl"})]})]}),(0,tv.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,tv.jsx)(WQ,{actionLabel:b,actionClassName:"w-[137px]",actionPlacement:"stacked",className:"flex items-center justify-start gap-4 border-b border-border-light bg-background-containers p-4 text-left",iconClassName:"size-5 text-icons-normal",isOpen:A,materialName:i.name,previewClassName:"grid size-16 shrink-0 place-items-center overflow-hidden bg-background-base",previewUrl:i.previewUrl,testId:"floor-mobile-product-card",titleLabel:y,onClick:A?M:T}),(0,tv.jsxs)("div",{className:"grid gap-4 bg-background-containers px-6 pt-4 pb-6","data-testid":"floor-mobile-bottom-actions",children:[(0,tv.jsxs)("div",{className:"flex w-full items-center justify-between gap-3 rounded-full bg-background-containers text-left","data-neurodyn-room-viewer-room":"",children:[(0,tv.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,tv.jsx)("img",{src:o.imageUrl,alt:"",className:"size-10 shrink-0 rounded-full object-cover"}),(0,tv.jsxs)("span",{className:"grid min-w-0",children:[(0,tv.jsx)("span",{className:"typo-base-12 truncate text-text-light",children:u("floor.scene.interiorCardTitle")}),(0,tv.jsx)("span",{className:"typo-button-normal min-h-[1.35em] truncate !leading-[1.35] text-text-dark","data-testid":"floor-mobile-room-name",children:o.name})]})]}),(0,tv.jsx)(j6,{type:"button",variant:"outline",size:"sm",className:"shrink-0",onClick:k,children:u("floor.interiorSelection.chooseInterior")})]}),t&&(0,tv.jsx)(q4,{className:"w-full","data-neurodyn-room-viewer-try-at-home":"",buttonLabel:u("floor.scene.tryAtHome"),buttonLeadingIcon:(0,tv.jsx)(Vw,{className:"size-6"}),buttonVariant:"secondary",buttonSize:"lg",buttonClassName:"h-11 w-full rounded-xl"})]})]}),h&&!n&&(0,tv.jsx)(WL,{[WO]:!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:M}),(0,tv.jsx)(WN,{open:A&&!n,portalContainer:a,onOpenChange:f}),(0,tv.jsx)("div",{"aria-hidden":!l.isLoading,className:j5("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",l.isLoading?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),children:(0,tv.jsx)(VC,{variant:"logo"})})]})}function Wz({rooms:e,customRooms:t,selectedRoomId:r,isInvalidFile:n,uploadRetryRequestId:i=0,showCloseButton:a=!1,onSelectRoom:s,onUploadFile:o}){let l,{t:c}=rv(),u=(0,tb.useId)(),d=(0,tb.useRef)(null);function h(e){return e.map(e=>(0,tv.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:()=>s(e.id),children:[(0,tv.jsx)("img",{src:e.image_url,alt:"",decoding:"async",className:"size-full scale-[1.02] transform-gpu object-cover transition duration-200 group-hover:scale-105"}),(0,tv.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,tb.useEffect)(()=>{i>0&&d.current?.click()},[i]),(0,tv.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",children:[a&&(l=(0,tv.jsx)(j6,{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,tv.jsx)(Vd,{})}),(0,tv.jsx)(Vt,{asChild:!0,children:l})),(0,tv.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,tv.jsxs)("div",{className:"grid gap-2","data-testid":"floor-interior-selection-upload",children:[(0,tv.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&&o(t)},children:[(0,tv.jsx)(Vc,{className:"size-5 text-background-blue"}),c("floor.interiorSelection.uploadPhoto"),(0,tv.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&&o(t)}})]}),n&&(0,tv.jsx)("p",{className:"typo-base-12 font-medium text-destructive",children:c("floor.interiorSelection.invalidFile")})]}),(0,tv.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,tv.jsxs)("div",{className:"grid min-h-max gap-4",children:[t.length>0&&(0,tv.jsxs)("div",{className:"grid gap-3",children:[(0,tv.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.customTitle")}),(0,tv.jsx)("div",{className:"grid grid-cols-2 gap-3 sm:grid-cols-3","data-testid":"floor-custom-interior-selection-grid",children:h(t)})]}),(0,tv.jsxs)("div",{className:"grid gap-3",children:[(0,tv.jsx)("h3",{className:"typo-base-16 font-medium text-text-light",children:c("floor.interiorSelection.presetsTitle")}),(0,tv.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,tv.jsx)(Va,{className:"-mt-2 shrink-0 p-0 sm:mt-0",children:(0,tv.jsx)(Vt,{asChild:!0,children:(0,tv.jsx)(j6,{variant:"outline",className:"w-full",children:c("close")})})})]})}function WG(e){return(0,tv.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,tv.jsx)(Wz,{...e})})}function WH({open:e,showCloseButton:t=!0,portalContainer:r,onOpenChange:n,...i}){let{t:a}=rv();return(0,tv.jsx)(j7,{open:e,onOpenChange:n,children:(0,tv.jsxs)(Vn,{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,tv.jsx)(Vs,{className:"sr-only",children:a("floor.interiorSelection.title")}),(0,tv.jsx)(Vo,{className:"sr-only"}),(0,tv.jsx)(Wz,{...i,showCloseButton:t})]})})}async function Wj(e,t={}){let r=t.source??"default",n={image:e};if(jf({apiKey:t.apiKey,source:r})){let e=await t.widgetSession?.getTokenForRequest();return jU(n,{baseURL:t.baseURL,headers:{"x-api-key":t.apiKey,...e?{[jJ]:e}:{}},signal:t.signal,timeout:0,params:{productType:jg({apiKey:t.apiKey,source:r})}})}return t.signal?jP(n,{signal:t.signal,timeout:0}):jP(n,{timeout:0})}let WV=[{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 Wq(){try{return"1"===window.localStorage.getItem("neurodyn-room-viewer:debug-mask-export")}catch{return!1}}async function WW(e,t){var r,n,i;let a,s,o,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 WV.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")}),s=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=`${s||"room"}.debug-mask.colors.png`,o=URL.createObjectURL(n),(l=document.createElement("a")).href=o,l.download=i,l.style.display="none",document.body.append(l),l.click(),l.remove(),window.setTimeout(()=>URL.revokeObjectURL(o),1e3)}let WK="custom-interiors";function WJ(){return"u">typeof crypto&&"function"==typeof crypto.randomUUID?`custom-interior-${crypto.randomUUID()}`:`custom-interior-${Date.now()}-${Math.random().toString(36).slice(2)}`}function WY(){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(WK)||e.createObjectStore(WK,{keyPath:"id"})},n.onerror=()=>r(n.error??Error("Failed to open Custom Interior store.")),n.onsuccess=()=>t(n.result)}):Promise.resolve(null)}async function WX(e,t,r=new Date){let n=await WY();if(!n)return null;let i={id:WJ(),schemaVersion:1,name:e.name,fileName:e.name,createdAt:r.toISOString(),imageBlob:e,scene:t};try{let e=n.transaction(WK,"readwrite");return e.objectStore(WK).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 WZ(){let e=await WY();if(!e)return[];try{return await new Promise((t,r)=>{let n=e.transaction(WK,"readonly").objectStore(WK).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 W$(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}}}let W0={placementReady:!1,prepareReady:!1,artifactsReady:!1,assetsReady:!1};function W1(e){let t="dialog"===e?"interior-selection":"scene";return{step:t,hasSceneSelection:"scene"===t,sceneResetKey:0}}function W2(e,t){switch(t.type){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 W3(e,t){return!e.aborted&&t()}async function W9({abortSignal:e,apiOptions:t,commitCustomInteriorSelection:r,downloadDebugMask:n,file:i,isActive:a,isDebugMaskExportEnabled:s,onDebugMaskError:o,onPersistenceError:l,onProcessingComplete:c,predictRoomScene:u,saveCustomInterior:d,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p}){let A=await u(i,{...t,signal:e});if(!W3(e,a))return null;s()&&n(A,i.name).catch(o);let f=h(i,A);return W3(e,a)&&f&&(d(i,A).catch(l),c(),await p(),W3(e,a))?(r(f),f):null}function W4(){return new Promise(e=>window.setTimeout(e,250))}function W5(e){console.error("Failed to export room debug mask",e)}function W8(e){console.error("Failed to persist Custom Interior",e)}function W6(e){console.error("Failed to prepare Custom Interior",e)}let W7=[{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 Ke({isComplete:e,open:t,onCloseAnimationEnd:r,onOpenChange:n,portalContainer:i}){let{t:a}=rv(),s=(0,tb.useRef)(t),[o,l]=(0,tb.useState)(8),c=e?100:o,u=function(e){for(let t=W7.length-1;t>=0;t-=1){let r=W7[t];if(r&&e>=r.minimumProgress)return r}return W7[0]}(c);(0,tb.useEffect)(()=>{t&&!s.current&&l(8),s.current=t},[t]),(0,tb.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,tv.jsxs)("div",{role:"status","aria-live":"polite",className:"grid content-start gap-4",children:[(0,tv.jsx)("h2",{className:"typo-base-18 font-medium text-text-dark",children:a("floor.processing.title")}),(0,tv.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,tv.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-3",children:[(0,tv.jsx)("span",{className:"typo-base-14 min-w-0 flex-1 truncate text-left font-medium text-text-light",children:a(u.translationKey)}),(0,tv.jsxs)("span",{className:"typo-base-14 shrink-0 font-medium text-text-dark",children:[c,"%"]})]}),(0,tv.jsx)(VO,{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,tv.jsx)(j7,{open:t,onOpenChange:n,children:(0,tv.jsxs)(Vn,{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,tv.jsx)(Vs,{className:"sr-only",children:a("floor.processing.title")}),(0,tv.jsx)(Vo,{className:"sr-only",children:a(u.translationKey)}),d]})})}function Kt({showDialogCloseButton:e=!1}){var t;let r,{name:n,type:i}=VK(),{accessError:a,tinuuid:s,material:o,apiKey:l,baseURL:c,hasRooms:u,source:d,widgetSession:h,isViewerAccessPending:p,loadError:A,viewedObject:f}=VY(),{clearActiveError:g,handleAccessError:m}=function(){let{setAccessError:e,setLoadError:t}=VY();return{clearActiveError:(0,tb.useCallback)(()=>{e(null),t(null)},[e,t]),handleAccessError:e}}(),{room:v,sourceRooms:b}=VJ(),{containerRef:y,setContainerRef:w,sceneLoad:x,isRoomScenePending:C}=VX(),{dialogPortalContainer:E,viewerSurface:S,viewerDialogOpen:M,onViewerDialogOpenChange:B}=VW(Vz,"useRoomViewerSurface"),{t:I}=rv(),T=(0,tb.useRef)(null),k=a??A,R=I(`rooms.${v.id}`,{defaultValue:v.name}),D=(t=I("floor.scene.companyFallback"),f?.owner?.name??f?.brand??t),P="rugs"===i?f?.kit?.name??f?.name??o?.name??n:o?.name??f?.name??f?.kit?.name??n,_=(r=o?.previews?.[0],r?.subRes?.small??r?.url??f?.preview?.subRes?.small??f?.preview?.url??f?.mainPreview),L=function({activeError:e,apiKey:t,baseURL:r,clearActiveError:n,closeMaterialSelection:i,handleAccessError:a,hasDialogPortalContainer:s,hasRooms:o,isRoomScenePending:l,isViewerAccessPending:c,material:u,onViewerDialogOpenChange:d,sceneLoad:h,source:p,sourceRooms:A,viewerDialogOpen:f,viewerSurface:g,widgetSession:m}){let v=function(e){let{patchSceneLoad:t,setAngle:r,setRotation:n}=VX();return function(e,t){let[r,n]=(0,tb.useReducer)(W2,e,W1),i=(0,tb.useCallback)(e=>{e(),function({patchSceneLoad:e,setAngle:t,setRotation:r}){t(0),r(0),e(W0)}(t),n({type:"commit-interior-selection"})},[t]),a=(0,tb.useCallback)(()=>{n({type:"dismiss-interior-selection"})},[]),s=(0,tb.useCallback)(()=>{n({type:"open-interior-selection"})},[]),o=(0,tb.useCallback)(()=>{n({type:"recover-to-scene"})},[]),l=(0,tb.useCallback)(()=>{n({type:"return-to-interior-selection"})},[]),c=(0,tb.useCallback)(()=>{n({type:"start-custom-interior-processing"})},[]);return(0,tb.useMemo)(()=>({...r,commitInteriorSelection:i,dismissInteriorSelection:a,openInteriorSelection:s,recoverToScene:o,returnToInteriorSelection:l,startCustomInteriorProcessing:c}),[i,a,s,o,l,c,r])}(e,(0,tb.useMemo)(()=>({patchSceneLoad:t,setAngle:r,setRotation:n}),[t,r,n]))}(g),{appendRuntimeCustomInterior:b,customRooms:y}=function({listCustomInteriors:e}){let{appendRuntimeCustomInterior:t,customRooms:r,replaceRuntimeCustomInteriors:n}=function(){let[e,t]=(0,tb.useState)(()=>[]),r=(0,tb.useRef)(null),n=(0,tb.useCallback)(e=>{r.current?.revokeObjectUrls();let n=W$(e);return r.current=n,t(n.rooms),n.rooms},[]),i=(0,tb.useCallback)((e,n)=>{let i=W$([{id:WJ(),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 s=r.current;return r.current={rooms:[],revokeObjectUrls:()=>{s?.revokeObjectUrls(),i.revokeObjectUrls()}},t(e=>[a,...e.filter(e=>e.id!==a.id)]),a},[]);return(0,tb.useEffect)(()=>()=>{r.current?.revokeObjectUrls()},[]),(0,tb.useMemo)(()=>({appendRuntimeCustomInterior:i,customRooms:e,replaceRuntimeCustomInteriors:n}),[i,e,n])}(),i=(0,tb.useRef)(!0);(0,tb.useEffect)(()=>(i.current=!0,()=>{i.current=!1}),[]);let a=(0,tb.useCallback)(async()=>{let t=await e();i.current&&n(t)},[e,n]);return(0,tb.useEffect)(()=>{a()},[a]),(0,tb.useMemo)(()=>({appendRuntimeCustomInterior:t,customRooms:r,replaceRuntimeCustomInteriors:n,refreshCustomInteriors:a}),[t,r,a,n])}({listCustomInteriors:WZ}),w=(0,tb.useMemo)(()=>new Set(A.map(e=>e.id)),[A]),{commitCustomInteriorSelection:x,selectInterior:C}=function(e){let{room:t,setRoomId:r,setRooms:n}=VJ(),{widgetSession:i}=VY();return function({floorFlow:e,customRooms:t,selectedRoomId:r,onInteriorSelected:n,restoreSourceRooms:i,setRoomId:a,setRooms:s}){let o=(0,tb.useCallback)(t=>{e.commitInteriorSelection(()=>{s(e=>[t,...i(e).filter(e=>e.id!==t.id)]),a(t.id)}),n?.()},[e,n,i,a,s]),l=(0,tb.useCallback)(t=>{let o=t===r;o&&e.hasSceneSelection||(e.commitInteriorSelection(()=>{s(i),a(t)}),o||n?.())},[e,n,i,r,a,s]),c=(0,tb.useCallback)(n=>{if(n===r&&e.hasSceneSelection)return;let i=t.find(e=>e.id===n);i&&o(i)},[e.hasSceneSelection,o,t,r]),u=(0,tb.useCallback)(e=>{t.some(t=>t.id===e)?c(e):l(e)},[t,c,l]);return(0,tb.useMemo)(()=>({commitCustomInteriorSelection:o,selectInterior:u}),[o,u])}({...e,selectedRoomId:t.id,onInteriorSelected:()=>j$(i,"interior_selected"),setRoomId:r,setRooms:n})}({floorFlow:v,customRooms:y,restoreSourceRooms:(0,tb.useCallback)(e=>[...A,...e.filter(e=>!w.has(e.id))],[w,A])}),E=function(e){let{setIsRoomScenePending:t}=VX();return function({apiOptions:e,floorFlow:t,commitCustomInteriorSelection:r,downloadDebugMask:n,isDebugMaskExportEnabled:i,onAccessError:a,onDebugMaskError:s,onPersistenceError:o,onProcessingError:l,predictRoomScene:c,saveCustomInterior:u,setIsRoomScenePending:d,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p}){let[A,f]=(0,tb.useState)(!1),[g,m]=(0,tb.useState)(!1),[v,b]=(0,tb.useState)(null),[y,w]=(0,tb.useState)(null),[x,C]=(0,tb.useState)(!1),[E,S]=(0,tb.useState)(0),M=(0,tb.useRef)(null),B=(0,tb.useRef)(!1),I=(0,tb.useRef)(!0),T=(0,tb.useRef)(v);v&&(T.current=v),(0,tb.useEffect)(()=>(I.current=!0,()=>{I.current=!1,M.current?.abort()}),[]);let k=(0,tb.useCallback)(()=>{b(null),w(null),C(!1)},[]),R=(0,tb.useCallback)(e=>{k(),f(!1),e()},[k]),D=(0,tb.useCallback)(async A=>{if(k(),!A.type.startsWith("image/"))return void f(!0);f(!1),m(!1),t.startCustomInteriorProcessing(),B.current=!0;let g=new AbortController;M.current?.abort(),M.current=g,d(!0);try{await W9({abortSignal:g.signal,apiOptions:e,commitCustomInteriorSelection:r,downloadDebugMask:n,file:A,isActive:()=>I.current,isDebugMaskExportEnabled:i,onDebugMaskError:s,onPersistenceError:o,onProcessingComplete:()=>{m(!0)},predictRoomScene:c,saveCustomInterior:u,trackRuntimeCustomInterior:h,waitForProcessingCompletion:p})}catch(t){if(g.signal.aborted)return;let e=jm(t);if(e){B.current&&C(!0),a(e);return}if(l(t),B.current){w("custom-interior-processing"),C(!0);return}b("custom-interior-processing")}finally{M.current===g&&(M.current=null,I.current&&d(!1))}},[e,t,r,n,i,a,s,o,l,c,k,u,d,h,p]),P=(0,tb.useCallback)(()=>{k(),f(!1),t.returnToInteriorSelection(),S(e=>e+1)},[t,k]),_=(0,tb.useCallback)(()=>{k(),t.returnToInteriorSelection()},[t,k]),L=(0,tb.useCallback)(({clearError:e,closeMaterialSelection:r})=>{e(),r(),t.hasSceneSelection&&t.recoverToScene()},[t]),N=(0,tb.useCallback)(()=>{B.current=!1,C(!1),y&&(b(y),w(null))},[y]),F=(0,tb.useCallback)(()=>I.current,[]);return(0,tb.useMemo)(()=>({displayedUploadError:v??T.current,isCustomInteriorProcessingComplete:g,isInvalidFile:A,isMounted:F,isProcessingDialogClosingForError:x,pendingUploadError:y,uploadError:v,uploadRetryRequestId:E,cancelUploadError:_,handleProcessingDialogCloseAnimationEnd:N,openInteriorSelection:R,processUploadFile:D,recoverFromActiveError:L,resetUploadErrorPresentation:k,tryUploadAgain:P}),[_,N,g,A,F,x,R,y,D,L,k,P,v,E])}({...e,setIsRoomScenePending:t})}({apiOptions:(0,tb.useMemo)(()=>({apiKey:t,baseURL:r,source:p,widgetSession:m}),[t,r,p,m]),floorFlow:v,commitCustomInteriorSelection:x,downloadDebugMask:WW,isDebugMaskExportEnabled:Wq,onAccessError:a,onDebugMaskError:W5,onPersistenceError:W8,onProcessingError:W6,predictRoomScene:Wj,saveCustomInterior:WX,trackRuntimeCustomInterior:b,waitForProcessingCompletion:W4}),{dismissInteriorSelection:S,hasSceneSelection:M,openInteriorSelection:B,sceneResetKey:I,step:T}=v,{cancelUploadError:k,displayedUploadError:R,handleProcessingDialogCloseAnimationEnd:D,isCustomInteriorProcessingComplete:P,isInvalidFile:_,isProcessingDialogClosingForError:L,openInteriorSelection:N,pendingUploadError:F,processUploadFile:O,recoverFromActiveError:Q,resetUploadErrorPresentation:U,tryUploadAgain:z,uploadError:G,uploadRetryRequestId:H}=E,j=o&&M,V=(0,tb.useRef)(e),q=!!(e&&j&&u);e&&(V.current=e);let W=(0,tb.useCallback)(()=>{j&&(U(),S())},[S,j,U]),K=(0,tb.useCallback)(()=>{i(),N(B)},[i,B,N]),J=(0,tb.useCallback)(()=>{Q({clearError:n,closeMaterialSelection:i})},[n,i,Q]),Y=(0,tb.useCallback)(e=>{if(!e){if(j)return void W();d?.(!1)}},[W,j,d]),X=(0,tb.useCallback)(e=>{if(!e){if(q)return void J();d?.(!1)}},[q,J,d]),Z=(0,tb.useCallback)(e=>{e||k()},[k]);!function({fallbackMs:e,handleProcessingDialogCloseAnimationEnd:t,isProcessingDialogClosingForError:r}){(0,tb.useEffect)(()=>{if(!r)return;let n=window.setTimeout(t,e);return()=>window.clearTimeout(n)},[e,t,r])}({fallbackMs:220,handleProcessingDialogCloseAnimationEnd:D,isProcessingDialogClosingForError:L});let $=function({activeError:e,canRecoverFromActiveError:t,floorFlow:r,hasDialogPortalContainer:n,hasRooms:i,isProcessingDialogClosingForError:a,isRoomScenePending:s,isViewerAccessPending:o,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=!o&&f&&(!e||t),v=f||p,b=!o&&!e&&v,y=!o&&!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&&s&&"processing-custom-interior"===r.step&&A},scene:{isLoading:s||!Object.values(c).every(Boolean),resetKey:r.sceneResetKey,shouldRender:m,shouldRenderDialog:m},surface:{usesSiblingDialogFlow:p},uploadErrorDialog:{open:!a&&!e&&!!u&&A}}}({activeError:e,canRecoverFromActiveError:q,floorFlow:{hasSceneSelection:M,sceneResetKey:I,step:T},hasDialogPortalContainer:s,hasRooms:o,isProcessingDialogClosingForError:L,isRoomScenePending:l,isViewerAccessPending:c,pendingUploadError:F,sceneLoad:h,uploadError:G,viewerDialogOpen:f,viewerSurface:g});return{...$,activeErrorDialog:{...$.activeErrorDialog,onCancel:q?J:void 0,onOpenChange:X,onTryAgain:q?J:void 0,variant:e??V.current},customRooms:y,interiorSelection:{...$.interiorSelection,isInvalidFile:_,onOpenChange:Y,onSelectRoom:C,onUploadFile:O,openFromScene:K,uploadRetryRequestId:H},sourceRooms:A,processingDialog:{...$.processingDialog,isComplete:P,onCloseAnimationEnd:D,onOpenChange:$.surface.usesSiblingDialogFlow?d:void 0},step:T,uploadErrorDialog:{...$.uploadErrorDialog,onCancel:k,onOpenChange:Z,onTryAgain:z,variant:R}}}({activeError:k,apiKey:l,baseURL:c,clearActiveError:g,closeMaterialSelection:(0,tb.useCallback)(()=>{T.current?.closeMaterialSelection()},[]),handleAccessError:m,hasDialogPortalContainer:null!==E,hasRooms:u,isRoomScenePending:C,isViewerAccessPending:p,material:o,onViewerDialogOpenChange:B,sceneLoad:x,source:d,sourceRooms:b,viewerDialogOpen:M,viewerSurface:S,widgetSession:h}),N=L.surface.usesSiblingDialogFlow?E:y,F=L.interiorSelection.shouldRender?"dialog"===L.interiorSelection.presentation?(0,tv.jsx)(WH,{open:L.interiorSelection.open,showCloseButton:e||L.scene.shouldRender,portalContainer:N,rooms:L.sourceRooms,customRooms:L.customRooms,selectedRoomId:v.id,isInvalidFile:L.interiorSelection.isInvalidFile,uploadRetryRequestId:L.interiorSelection.uploadRetryRequestId,onOpenChange:L.interiorSelection.onOpenChange,onSelectRoom:L.interiorSelection.onSelectRoom,onUploadFile:L.interiorSelection.onUploadFile}):"screen"===L.interiorSelection.presentation?(0,tv.jsx)(WG,{rooms:L.sourceRooms,customRooms:L.customRooms,selectedRoomId:v.id,isInvalidFile:L.interiorSelection.isInvalidFile,uploadRetryRequestId:L.interiorSelection.uploadRetryRequestId,showCloseButton:e,onSelectRoom:L.interiorSelection.onSelectRoom,onUploadFile:L.interiorSelection.onUploadFile}):null:null,O=(0,tv.jsx)(Ke,{isComplete:L.processingDialog.isComplete,open:L.processingDialog.open,portalContainer:N,onCloseAnimationEnd:L.processingDialog.onCloseAnimationEnd,onOpenChange:L.processingDialog.onOpenChange}),Q=(0,tv.jsxs)(tv.Fragment,{children:[(0,tv.jsx)(V4,{variant:L.activeErrorDialog.variant,open:L.activeErrorDialog.open,portalContainer:N,showDialogCloseButton:e&&L.activeErrorDialog.showCloseButton,onOpenChange:L.activeErrorDialog.onOpenChange,onTryAgain:L.activeErrorDialog.onTryAgain,onCancel:L.activeErrorDialog.onCancel}),(0,tv.jsx)(V4,{variant:L.uploadErrorDialog.variant,open:L.uploadErrorDialog.open,portalContainer:N,onOpenChange:L.uploadErrorDialog.onOpenChange,onTryAgain:L.uploadErrorDialog.onTryAgain,onCancel:L.uploadErrorDialog.onCancel})]}),U=(0,tv.jsxs)("div",{ref:w,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:[p?(0,tv.jsx)("div",{className:"flex size-full items-center justify-center bg-radial from-background-containers to-background-base-2",children:(0,tv.jsx)(VC,{variant:"logo"})}):L.scene.shouldRender?(0,tv.jsx)(WU,{ref:T,actions:{openInteriorSelection:L.interiorSelection.openFromScene},canShowAr:!!s&&!(V3&&V9),companyName:D,hasActiveError:!!k,material:{name:P,previewUrl:_},portalContainer:N,room:{imageUrl:v.image_url,name:R},scene:{isLoading:L.scene.isLoading,resetKey:L.scene.resetKey},showDialogCloseButton:e}):null,!L.surface.usesSiblingDialogFlow&&F,!L.surface.usesSiblingDialogFlow&&O]});return L.surface.usesSiblingDialogFlow?(0,tv.jsxs)(tv.Fragment,{children:[(L.scene.shouldRenderDialog||p)&&(0,tv.jsx)(j7,{open:M,onOpenChange:B,children:(0,tv.jsxs)(Vn,{className:VQ,contentInsideOverlay:!0,portalContainer:E,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,tv.jsx)(Vs,{className:"sr-only",children:n}),(0,tv.jsx)(Vo,{className:"sr-only"}),U]})}),F,O,Q]}):(0,tv.jsxs)(tv.Fragment,{children:[U,Q]})}function Kr({className:e,...t}){return(0,tv.jsx)(Ha,{"data-slot":"radio-group",className:j5("grid gap-3",e),...t})}function Kn({checked:e,className:t,...r}){return(0,tv.jsx)("div",{className:j5("absolute top-1/2 left-1/2 size-6 -translate-x-1/2 -translate-y-1/2","flex items-center justify-center rounded-full",e?"bg-lime-400":"bg-background-base-2",t),...r,children:(0,tv.jsx)(cr,{className:"text-constant-white size-3.5",strokeWidth:4})})}function Ki({className:e,variant:t="default",...r}){return(0,tv.jsxs)(Ho,{"data-slot":"radio-group-item",className:j5("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50","check"===t&&"size-6","inverted"===t&&"size-5 border-button-outline data-[state=checked]:border-border-red data-[state=checked]:border-4 data-[state=checked]:bg-constant-white cursor-pointer transition-all",e),...r,children:["check"===t&&(0,tv.jsx)("div",{className:"relative",children:(0,tv.jsx)(Kn,{})}),"inverted"!==t&&(0,tv.jsx)(Hl,{"data-slot":"radio-group-indicator",className:"relative flex items-center justify-center",children:"check"===t?(0,tv.jsx)(Kn,{checked:!0}):(0,tv.jsx)(cn,{className:"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2"})})]})}function Ka({className:e,children:t,...r}){let{className:n,onReachEnd:i,...a}=r.swiperOptions??{},{t:s}=rv(),[o,l]=(0,tb.useState)(null),[c,u]=(0,tb.useState)(!0),[d,h]=(0,tb.useState)(!1),[p,A]=(0,tb.useState)(!1),f=(0,tb.useCallback)(e=>{u(e.isBeginning),h(e.isEnd),A(e.isLocked)},[]),g=(0,tb.useCallback)(e=>{l(e),f(e)},[f]),m=(0,tb.useCallback)(e=>{h(!0),i?.(e)},[i]);return(0,tv.jsxs)("div",{className:j5("relative w-full overflow-hidden",e),children:[(0,tv.jsx)(je,{className:j5("w-full py-5",n),slidesPerView:"auto",slidesPerGroup:2,onSwiper:g,onReachBeginning:()=>u(!0),onReachEnd:m,onFromEdge:f,onLock:()=>A(!0),onUnlock:()=>A(!1),onResize:f,slidesOffsetBefore:24,slidesOffsetAfter:24,spaceBetween:12,...a,children:t}),(0,tv.jsxs)(j6,{className:j5("absolute top-1/2 left-8 -translate-y-1/2 z-1",{hidden:c||p}),variant:"contrast",size:"icon",onClick:()=>o?.slidePrev(),children:[(0,tv.jsx)(ci,{}),(0,tv.jsx)("span",{className:"sr-only",children:s("previousSlide")})]}),(0,tv.jsxs)(j6,{className:j5("absolute top-1/2 right-8 -translate-y-1/2 z-1",{hidden:d||p}),variant:"contrast",size:"icon",onClick:()=>o?.slideNext(),children:[(0,tv.jsx)(ca,{}),(0,tv.jsx)("span",{className:"sr-only",children:s("nextSlide")})]})]})}function Ks({className:e,...t}){let r=qw("(max-width: 640px)"),{fetchNextMaterialsPage:n,materialItems:i,selectMaterial:a,selectedMaterialId:s}=qV(),o=(0,tb.useCallback)(()=>{n()},[n]);return 0===i.length?null:(0,tv.jsxs)(tv.Fragment,{children:[!r&&(0,tv.jsx)(qu,{orientation:"vertical"}),(0,tv.jsx)("div",{className:j5(e),...t,children:(0,tv.jsx)(Kr,{value:s||void 0,onValueChange:e=>{a(e)},children:(0,tv.jsx)(Ka,{swiperOptions:{onReachEnd:o,className:"py-2 sm:py-5"},children:i.map(({materialId:e,material:t,tinuuid:n})=>(0,tv.jsx)(jt,{className:j5("sm:w-25! w-18! transition-transform duration-200",e!==s&&"hover:scale-110"),children:(0,tv.jsxs)(qA,{htmlFor:`material-${e}`,className:"size-full flex flex-col gap-1 has-data-[state=checked]:bg-transparent",children:[(0,tv.jsxs)("div",{className:"size-full relative sm:h-19 h-13 rounded-[0.75rem] overflow-hidden grid place-items-center sm:block",children:[(0,tv.jsx)("img",{src:t.previews?.[0]?.subRes?.small??t.previews?.[0]?.url,alt:t.name??"",className:"size-full object-cover"}),(0,tv.jsx)(Ki,{value:e,id:`material-${e}`,variant:"check",className:j5("absolute sm:top-1.75 sm:right-1.75",{"sr-only":e!==s})})]}),!r&&(0,tv.jsx)("span",{className:j5("block w-full text-xs text-left text-text-light truncate",{"text-text-dark":e===s}),children:t.name})]})},`${n}-${e}`))})})})]})}function Ko({className:e,...t}){let{t:r}=rv(),{placement:n}=VK(),{rooms:i,room:a,setRoomId:s}=VJ(),{isRoomScenePending:o,selectCustomRoomFile:l}=VW(Vq,"useRoomViewerCustomRoomIntake"),c=qw("(max-width: 640px)"),u=(0,tb.useId)(),d=(0,tb.useCallback)((e,t)=>r(`rooms.${t}`,{defaultValue:e}),[r]),h=(0,tb.useCallback)(async e=>{let t=e.target.files?.[0];e.target.value="",t&&await l(t)},[l]);return(0,tv.jsx)("div",{className:j5(e),...t,children:(0,tv.jsx)(Kr,{value:a.id,onValueChange:s,children:(0,tv.jsxs)(Ka,{swiperOptions:{className:"py-2 sm:py-5 pb-3 sm:pb-5"},children:[(0,tv.jsx)(jt,{className:"sm:w-25! w-21! h-auto",children:(0,tv.jsxs)(qA,{htmlFor:u,className:j5("flex size-full cursor-pointer items-center justify-center rounded-[0.75rem] border border-dashed border-muted-foreground/40 bg-transparent px-2 text-center text-xs leading-tight text-muted-foreground transition-colors hover:border-foreground/40 hover:text-foreground",o&&"cursor-wait opacity-80"),"aria-disabled":o,children:[o?(0,tv.jsxs)(tv.Fragment,{children:[(0,tv.jsx)(VC,{className:"size-5"}),(0,tv.jsx)("span",{className:"sr-only",children:r("uploadOwnPhoto")})]}):r("uploadOwnPhoto"),(0,tv.jsx)("input",{id:u,type:"file",accept:"image/*",className:"sr-only",disabled:o,onChange:h})]})}),i.map(e=>(0,tv.jsx)(jt,{className:j5("sm:w-25! w-21! transition-transform duration-200",e.id!==a.id&&"hover:scale-110"),children:(0,tv.jsxs)(qA,{htmlFor:`room-${e.id}`,className:"size-full flex flex-col gap-1 has-data-[state=checked]:bg-transparent",children:[(0,tv.jsxs)("div",{className:"size-full relative h-17 sm:h-19 rounded-[0.75rem] overflow-hidden",children:[(0,tv.jsx)("img",{src:e.image_url,alt:d(e.name,e.id),className:"size-full object-cover",crossOrigin:"anonymous"}),(0,tv.jsx)(Ki,{value:e.id,id:`room-${e.id}`,variant:"check",className:j5("absolute top-1.75 right-1.75",{"sr-only":e.id!==a.id})})]}),"floor"===n&&!c&&(0,tv.jsx)("span",{className:j5("block w-full text-xs text-left text-text-light truncate",{"text-text-dark":e.id===a.id}),children:d(e.name,e.id)})]})},e.id))]})})})}function Kl({className:e,...t}){let{placement:r}=VK();return(0,tv.jsxs)("div",{className:j5("flex sm:items-end pl-0 overflow-hidden sm:flex-row flex-col py-3 sm:py-0",e),...t,children:[(0,tv.jsx)(Ko,{className:j5("shrink-0",{"sm:min-w-148.5 min-w-full":"floor"===r,grow:"wall"===r})}),"wall"===r&&(0,tv.jsxs)("div",{className:"hidden gap-5 pr-6 pb-5 md:flex",children:[(0,tv.jsx)(qq,{}),(0,tv.jsx)(q1,{})]}),"floor"===r&&(0,tv.jsx)(Ks,{})]})}function Kc({className:e,...t}){let{name:r}=VK();return(0,tv.jsx)("div",{className:j5("h-16 flex items-center px-6",e),...t,children:(0,tv.jsx)("div",{className:"truncate",children:r})})}function Ku({variant:e,showDialogCloseButton:t=!1}){let{t:r}=rv();return(0,tv.jsxs)("div",{className:"flex size-full flex-col items-center justify-center gap-4 bg-radial from-background-containers to-background-base-2 p-4 text-center",children:[(0,tv.jsx)(Vl,{className:"size-8 text-icons-light"}),(0,tv.jsx)("h2",{className:"typo-base-16 font-medium text-text-dark",children:r("viewer-load-failed"===e||"artwork-load-failed"===e||"room-load-failed"===e?`loadError.${e}`:`accessError.${e}`)}),t&&(0,tv.jsx)(Vt,{asChild:!0,children:(0,tv.jsx)(j6,{variant:"secondary",children:r("close")})})]})}function Kd({showDialogCloseButton:e=!1}){let{placement:t}=VK(),{isViewerAccessPending:r,accessError:n,loadError:i,setLoadError:a,hasRooms:s}=VY(),{setContainerRef:o,sceneLoad:l,isRoomScenePending:c}=VX(),{t:u}=rv(),d=r||c||s&&!Object.values(l).every(Boolean);if("floor"===t)return(0,tv.jsx)(Kt,{showDialogCloseButton:e});let h=n??i;return h?(0,tv.jsx)("div",{ref:o,"data-neurodyn-room-viewer-container":"",className:"relative size-full overflow-hidden bg-radial from-background-containers to-background-base-2 text-foreground",children:(0,tv.jsx)(Ku,{variant:h,showDialogCloseButton:e})}):(0,tv.jsxs)("div",{ref:o,"data-neurodyn-room-viewer-container":"",className:"relative size-full bg-radial from-background-containers to-background-base-2 text-foreground overflow-hidden",children:[e&&(0,tv.jsx)(Vt,{asChild:!0,children:(0,tv.jsxs)(j6,{className:"absolute top-3 right-6 z-20",variant:"secondary",children:[u("close"),(0,tv.jsx)(l7,{})]})}),!r&&(s?(0,tv.jsxs)(tv.Fragment,{children:[(0,tv.jsx)(Kc,{className:"absolute top-0 right-0 left-0 z-15"}),(0,tv.jsxs)("div",{className:"size-full max-w-full grid grid-rows-[1fr_auto]",children:[(0,tv.jsx)(Wr,{onError:()=>a("viewer-load-failed"),children:(0,tv.jsx)(W_,{className:"size-full min-h-0"})}),(0,tv.jsx)(Kl,{className:"bg-background"})]})]}):(0,tv.jsx)(Ko,{className:"absolute inset-x-0 bottom-0 bg-background"})),(0,tv.jsx)("div",{"aria-hidden":!d,className:j5("absolute inset-0 z-10 flex items-center justify-center bg-radial from-background-containers to-background-base-2 transition-opacity",d?"opacity-100 pointer-events-auto duration-0":"opacity-0 pointer-events-none duration-250ms"),children:(0,tv.jsx)(VC,{variant:"logo"})})]})}let Kh={poster:"wallart",carpet:"rugs"},Kp={wallart:"wall",rugs:"floor",flooring:"floor"};function KA(e){return"poster"===e||"carpet"===e?Kh[e]:e}let Kf=0,Kg=[];function Km(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 Kv({children:e,src:t,tinuuid:r,type:n,viewerSurface:i,dialogPortalContainer:a=null,viewerDialogOpen:s=!0,onViewerDialogOpenChange:o,width:l,height:c,displayUnit:u,name:d,apiKey:h,baseURL:p,source:A,externalWidgetSession:f}){var g;let m=function(){let{t:e}=rv();return(0,tb.useMemo)(()=>[{value:.025,label:`2.5 ${e("units.cm")}`},{value:.05,label:`5 ${e("units.cm")}`}],[e])}(),v=q0(u),b=Kp[n],y="floor"===b?qN:qL,w=jf({apiKey:h,baseURL:p,source:A}),[x,C]=(0,tb.useState)(r),[E,S]=(0,tb.useState)(null),[M,B]=(0,tb.useState)(m[0].value),[I,T]=(0,tb.useState)(v[0].value),[k,R]=(0,tb.useState)(0),[D,P]=(0,tb.useState)(0),[_,L]=(0,tb.useState)(!1),[N,F]=(0,tb.useState)(null),[O,Q]=(0,tb.useState)(()=>({layoutReady:!1,placementReady:!1,materialReady:!1,artifactsReady:!1,assetsReady:!1,prepareReady:!1})),[U,z]=(0,tb.useState)(!1),[G,H]=(0,tb.useState)(null),[j,V]=(0,tb.useState)(null),q=(0,tb.useRef)(null),W=(0,tb.useRef)(new Set),K=(0,tb.useRef)(null),J=(0,tb.useRef)(!0),Y=(0,tb.useRef)(!1),X="floor"===b,Z="default"===A&&void 0!==h,$=nZ({queryKey:["room-viewer","activate",{apiKey:h??null,source:A}],enabled:Z,queryFn:({signal:e})=>j_({productType:jg({apiKey:h,baseURL:p,source:A})},{baseURL:p,headers:{"x-api-key":h},signal:e})},nL,void 0),ee=jm($.error),et=(0,tb.useMemo)(()=>{let e=$.data;return jZ(e?.widgetSession,{apiConfig:{baseURL:p,headers:{"x-api-key":h}}})},[$.data,h,p]),er=(0,tb.useMemo)(()=>f instanceof jX?f:jZ(f,{apiConfig:{baseURL:p,headers:{"x-api-key":h}}})??et,[et,h,p,f]),en="shopify"===A?null!==er:Z&&$.isSuccess,ei=nZ({queryKey:["room-viewer","rooms",{apiKey:(g={apiKey:h,baseURL:p,source:A,widgetSession:er}).apiKey??null,source:g.source,widgetSessionId:g.widgetSession?.sid??null}],enabled:w&&en,queryFn:async({signal:e})=>{try{return await j4({apiKey:h,baseURL:p,signal:e,source:A,widgetSession:er})}catch(e){if(jm(e))throw e;return[]}}},nL,void 0),ea=w?ei.data??Kg:y,[es,eo]=(0,tb.useState)(()=>({rooms:ea,sourceRooms:ea})),el=(0,tb.useMemo)(()=>Km(es.rooms,es.sourceRooms,ea),[es.rooms,es.sourceRooms,ea]),ec=(0,tb.useCallback)(e=>{eo(t=>{let r=Km(t.rooms,t.sourceRooms,ea);return{rooms:"function"==typeof e?e(r):e,sourceRooms:ea}})},[ea]),[eu,ed]=(0,tb.useState)(()=>y[0].id),eh=el.find(e=>e.id===eu),ep=eh??el[0]??y[0],eA=el.length>0;!eh&&el[0]&&eu!==el[0].id&&ed(el[0].id);let ef=nZ({queryKey:j1(x??void 0,{apiKey:h,baseURL:p,source:A}),enabled:(!Z||$.isSuccess||$.isError&&null===ee)&&X&&!!x,placeholderData:nm,queryFn:async({signal:e})=>{if(!x)throw Error("Tinuuid is required.");return j2(x,{apiKey:h,baseURL:p,signal:e,source:A,widgetSession:er})}},nL,void 0),eg=ef.data??null,em=E?.native?.glbUrl??null,ev=jm(ef.error),eb=jm(ei.error),ey=w&&("shopify"===A?null===er||ei.isLoading:$.isSuccess&&ei.isLoading),ew=Z&&$.isLoading||ey,ex=$.error&&null===ee?"viewer-load-failed":null,eC=ef.error&&null===ev?"viewer-load-failed":null,eE="wall"===b&&("string"!=typeof t||0===t.trim().length)?"artwork-load-failed":null,eS=G??ee??eb??ev,eM=j??ex??eC??eE,eB=(0,tb.useCallback)(e=>{Q(t=>Object.assign({},t,e))},[]);(0,tb.useEffect)(()=>{let e=new Set(el.map(e=>e.image_url));for(let t of Array.from(W.current))e.has(t)||(URL.revokeObjectURL(t),W.current.delete(t))},[el]),(0,tb.useEffect)(()=>{let e=W.current;return J.current=!0,()=>{for(let t of(J.current=!1,K.current?.abort(),Array.from(e)))URL.revokeObjectURL(t);e.clear()}},[]);let eI=(0,tb.useCallback)(async e=>{let t=null,r=new AbortController;K.current?.abort(),K.current=r,z(!0);try{t=URL.createObjectURL(e);let n=await Wj(e,{apiKey:h,baseURL:p,source:A,signal:r.signal,widgetSession:er});if(r.signal.aborted||!J.current)return void URL.revokeObjectURL(t);Wq()&&WW(n,e.name).catch(e=>{console.error("Failed to export room debug mask",e)});let i={id:(Kf+=1,`room-custom-${Kf}`),name:e.name,image_url:t,scene:n};W.current.add(t),eB({placementReady:!1,prepareReady:!1,artifactsReady:!1,assetsReady:!1}),ec(e=>[i,...e]),ed(i.id)}catch(n){if(t&&URL.revokeObjectURL(t),r.signal.aborted)return;let e=jm(n);if(e)return void H(e);console.error("Failed to prepare custom room scene",n)}finally{K.current===r&&(K.current=null,J.current&&z(!1))}},[h,p,eB,ec,A,er]);(0,tb.useEffect)(()=>{if("dialog"!==i||!s){Y.current=!1;return}Y.current||er&&(j$(er,"widget_opened"),Y.current=!0)},[s,i,er]),(0,tb.useEffect)(()=>{X&&(C(r),S(null),H(null),V(null))},[r,X]),(0,tb.useEffect)(()=>{H(null),V(null)},[h,A]),(0,tb.useEffect)(()=>{X&&eg&&null===E&&S(eg.materials?.[0]??null)},[E,eg,X]);let eT=(0,tb.useMemo)(()=>({type:n,placement:b,name:d,width:l,height:c,displayUnit:u}),[n,b,d,l,c,u]),ek=(0,tb.useMemo)(()=>({viewerSurface:i,dialogPortalContainer:a,viewerDialogOpen:s,onViewerDialogOpenChange:o}),[i,a,s,o]),eR=(0,tb.useMemo)(()=>({rooms:el,sourceRooms:ea,setRooms:ec,room:ep,setRoomId:ed}),[el,ep,ec,ea]),eD=(0,tb.useMemo)(()=>({src:t,glbUrl:em,tinuuid:x,viewedObject:eg,material:E,setTinuuid:C,setMaterial:S,apiKey:h,baseURL:p,source:A,widgetSession:er,hasRooms:eA,isViewerAccessPending:ew,accessError:eS,setAccessError:H,loadError:eM,setLoadError:V}),[t,em,x,eg,E,h,p,A,er,eA,ew,eS,eM]),eP=(0,tb.useMemo)(()=>({containerRef:N,setContainerRef:F,resourceRef:q,angle:k,setAngle:R,rotation:D,setRotation:P,isDragging:_,setIsDragging:L,sceneLoad:O,patchSceneLoad:eB,isRoomScenePending:U,setIsRoomScenePending:z}),[N,k,D,_,O,eB,U]),e_=(0,tb.useMemo)(()=>({frameWidth:M,setFrameWidth:B,matting:I,setMatting:T}),[M,I]),eL=(0,tb.useMemo)(()=>({isRoomScenePending:U,selectCustomRoomFile:eI}),[U,eI]);return(0,tv.jsx)(VU,{value:eT,children:(0,tv.jsx)(Vz,{value:ek,children:(0,tv.jsx)(VG,{value:eR,children:(0,tv.jsx)(VH,{value:eD,children:(0,tv.jsx)(Vj,{value:eP,children:(0,tv.jsx)(VV,{value:e_,children:(0,tv.jsx)(Vq,{value:eL,children:e})})})})})})})}let Kb=new n7({defaultOptions:{queries:{gcTime:1/0,refetchOnMount:!1,refetchOnReconnect:!1,refetchOnWindowFocus:!1,retry:(e,t)=>{let r=function(e){if(a9(e))return e.response?.status}(t);return(void 0===r||!(r>=400)||!(r<500))&&e<2}}}});function Ky({type:e,src:t,tinuuid:r,name:n,height:i,width:a,language:s,dimensionUnit:o="m",displayUnit:l="cm",apiKey:c,source:u="default",showDialogCloseButton:d=!1,viewerSurface:h="inline",dialogPortalContainer:p=null,viewerDialogOpen:A=!0,onViewerDialogOpenChange:f,widgetSession:g}){let{i18n:m}=rv(),v=c?.trim()||void 0,b=KA(e),y="wall"===Kp[b]?function(e,t,r="m"){return{width:qi(e??0,r),height:qi(t??0,r)}}(a,i,o):null;return(0,tb.useEffect)(()=>{},[e]),(0,tb.useEffect)(()=>{"string"==typeof s&&m.changeLanguage(s)},[m,s]),(0,tv.jsx)(nG,{client:Kb,children:(0,tv.jsx)(Kv,{src:t??null,tinuuid:r??null,type:b,viewerSurface:h,dialogPortalContainer:p,viewerDialogOpen:A,onViewerDialogOpenChange:f,name:n,width:y?.width??0,height:y?.height??0,displayUnit:l,apiKey:v,baseURL:"shopify"===u?jA:void 0,source:u,externalWidgetSession:g,children:(0,tv.jsx)(Kd,{showDialogCloseButton:d})})})}function Kw({type:e,src:t,tinuuid:r,width:n,height:i,dimensionUnit:a,displayUnit:s,name:o,language:l,apiKey:c,source:u,widgetSession:d,disableClose:h=!1,open:p,defaultOpen:A,onOpenChange:f,...g}){let[m,v]=(0,tb.useState)(null),b=Kp[KA(e)],y="floor"===b&&h,[w,x]=(0,tb.useState)(A??!1),C=p??w,[E,S]=(0,tb.useState)(C),M=C||E;(0,tb.useEffect)(()=>{C&&S(!0)},[C]);let B=(0,tv.jsx)(Ky,{type:e,src:t,tinuuid:r,name:o,height:i,width:n,dimensionUnit:a,displayUnit:s,language:l,apiKey:c,source:u,widgetSession:d,showDialogCloseButton:!y,viewerSurface:"dialog",dialogPortalContainer:m,viewerDialogOpen:C,onViewerDialogOpenChange:function(e){(e||!y)&&(void 0===p&&x(e),f?.(e))}});return(0,tv.jsxs)(tv.Fragment,{children:[(0,tw.createPortal)((0,tv.jsx)("style",{children:jo.A}),document.head),(0,tw.createPortal)((0,tv.jsxs)(rO.div,{"data-neurodyn-room-viewer-root":"",style:{display:"block",letterSpacing:"normal",zIndex:0x7fffffff},children:[(0,tv.jsx)("style",{children:jh}),(0,tv.jsx)("div",{ref:v}),m&&(0,tv.jsx)(js,{root:m,storageKey:"neurodyn-theme",defaultTheme:"light",children:(0,tv.jsx)(rb,{i18n:jc,children:"floor"===b?M&&B:(0,tv.jsx)(j7,{...g,open:p,defaultOpen:A,onOpenChange:f,children:(0,tv.jsxs)(Vn,{className:VQ,contentInsideOverlay:!0,portalContainer:m,showCloseButton:!1,onInteractOutside:e=>{e.preventDefault()},children:[(0,tv.jsxs)(Vi,{className:"sr-only",children:[(0,tv.jsx)(Vs,{children:o}),(0,tv.jsx)(Vo,{})]}),B]})})})})]}),document.body)]})}jH({baseURL:"https://api.neurodyn.ai/v1/"}),jT({baseURL:"https://api.neurodyn.ai/"});var Kx=r("../../node_modules/.pnpm/react-dom@19.2.3_react@19.2.3/node_modules/react-dom/client.js");let KC=0;class KE{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-${KC++}`,document.body.appendChild(this.container),this.root=(0,Kx.createRoot)(this.container)),this.root}render(){this.props&&this.ensureRoot().render((0,tb.createElement)(Kw,{...this.props,onOpenChange:this.handleOpenChange,open:this.openState}))}}function KS(e,t){let r=e.getAttribute(t);return r?Number(r):void 0}class KM{renderer=new KE;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={}){var r,n,i;let a,s,o;return{disableClose:void 0!==t.disableClose?t.disableClose:"true"===e.getAttribute("data-neurodyn-room-viewer-disable-close"),type:void 0!==t.type?t.type:e.getAttribute("data-neurodyn-room-viewer-type"),src:void 0!==t.src?t.src:e.getAttribute("data-neurodyn-room-viewer-src"),tinuuid:void 0!==t.tinuuid?t.tinuuid:e.getAttribute("data-neurodyn-room-viewer-tinuuid"),name:void 0!==t.name?t.name:e.getAttribute("data-neurodyn-room-viewer-name"),language:void 0!==t.language?t.language:e.getAttribute("data-neurodyn-room-viewer-language"),width:void 0!==t.width?t.width:KS(e,"data-neurodyn-room-viewer-width"),height:void 0!==t.height?t.height:KS(e,"data-neurodyn-room-viewer-height"),dimensionUnit:void 0!==t.dimensionUnit?t.dimensionUnit:(r="data-neurodyn-room-viewer-dimension-unit","m"===(a=e.getAttribute(r))||"cm"===a||"in"===a?a:void 0),displayUnit:void 0!==t.displayUnit?t.displayUnit:(n="data-neurodyn-room-viewer-display-unit","cm"===(s=e.getAttribute(n))||"in"===s?s:void 0),apiKey:void 0!==t.apiKey?t.apiKey:e.getAttribute("data-neurodyn-room-viewer-api-key"),source:void 0!==t.source?t.source:(i="data-neurodyn-room-viewer-source","default"===(o=e.getAttribute(i))||"shopify"===o?o:void 0)}}(e.currentTarget,this.props))}}window.RoomViewerDialog=KM})()})();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@neurodyn/room-viewer",
3
3
  "type": "module",
4
- "version": "0.0.16",
4
+ "version": "0.0.18",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -21,7 +21,7 @@
21
21
  "dependencies": {
22
22
  "react": "^19.2.0",
23
23
  "react-dom": "^19.2.0",
24
- "@neurodyn/react-room-viewer": "0.0.16"
24
+ "@neurodyn/react-room-viewer": "0.0.18"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@google/model-viewer": "4.2.0",