1!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="49efd75e-424c-4a31-9d1f-903d405623fb",e._sentryDebugIdIdentifier="sentry-dbid-49efd75e-424c-4a31-9d1f-903d405623fb")}catch(e){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[27270],{27270:(e,t,a)=>{a.d(t,{renderSpatialWebGLPasses:()=>f});var r=a(34487),o=a(83648),n=a(76259),i=a(99759),l=a(39634),s=a(32077);async function d(e){let t=await new Promise((t,a)=>{e.toBlob(e=>e?t(e):a(Error("PNG encoding failed")),"image/png")});return new Uint8Array(await t.arrayBuffer())}function c(e){return e.clone().transpose().toArray()}async function f(e,t){let a;if("undefined"==typeof document)throw Error("A browser with WebGL is required");if(!t.roomPhotoUrl||"function"!=typeof t.loadAsset)throw Error("Room photo and product model loader are required");let{width:f,height:m}=e.resolution,p=new r.JeP({alpha:!0,antialias:!1,preserveDrawingBuffer:!0});p.setSize(f,m),p.setPixelRatio(1),p.setClearColor(0,0),p.outputColorSpace=o.er$,p.toneMapping=o.FV,p.shadowMap.enabled=!0,p.shadowMap.type=o.Wk7;let w=(0,s.PQ)(),h=(0,s.oH)(e.scene.camera,f,m,.01,100),u=new Map,g=new Map,y=new Map,b=[];try{let r=await fetch(t.roomPhotoUrl);if(!r.ok)throw Error("Failed to load room photo");if(a=await createImageBitmap(await r.blob()),Math.abs(a.width/a.height-f/m)>.02)throw Error("Render aspect ratio does not match the room photo");let v=new o.KPJ;v.setURLModifier(e=>{if(!e.startsWith("blob:")&&!e.startsWith("data:"))throw Error("Product models must contain their textures and buffers");return e});let E=new n.B(v),P={},S=new Set;for(let a of e.scene.markers){var I,M;let r=e.productAssets[a.assetVersionId];if(!r)throw Error("Missing product model: ".concat(a.assetVersionId));let n=g.get(a.assetVersionId);if(!n){let e=await t.loadAsset(a.assetVersionId);if((0,l.f)(new Uint8Array(e))!==r.sha256)throw Error("Product model checksum does not match the asset manifest");n=(await E.parseAsync(e,"")).scene,g.set(a.assetVersionId,n)}let d=new o.YJl;d.add((0,i.o8)(n)),"Y"===r.upAxis&&(d.rotation.x=Math.PI/2),d.updateMatrixWorld(!0);let f=new o.NRn().setFromObject(d);if(f.isEmpty())throw Error("Product model has no visible geometry");let m=f.getCenter(new o.Pq0);d.position.set(-m.x,-m.y,-f.min.z);let p=new o.YJl;p.add(d),p.scale.setScalar(r.scaleMultiplier*(null!=(I=a.scaleMultiplier)?I:1)),p.position.set(a.x,a.y,null!=(M=a.elevationM)?M:0),p.rotation.z=o.cj9.degToRad(a.yawDeg),p.traverse(e=>{e instanceof o.eaF&&(e.castShadow=!0,e.receiveShadow=!0,y.set(e,e.material))}),w.add(p),p.updateMatrixWorld(!0),P[a.placementId]=c(p.matrixWorld),u.set(a.placementId,p);let{r:h,g:b,b:v}=(0,s.nI)(a.placementId),x="".concat(h,",").concat(b,",").concat(v);if(S.has(x))throw Error("Product identity colors collide");S.add(x)}let x=new o.ypk(e.scene.roomPolygon.map(e=>new o.I9Y(e.x,e.y))),A=new o.eaF(new o.MSw(x),new o.q2({opacity:.3}));A.position.z=-.001,A.receiveShadow=!0,w.add(A);let C=new o.NRn().setFromObject(w),R=C.getCenter(new o.Pq0),_=Math.max(3,C.getSize(new o.Pq0).length());w.traverse(e=>{e instanceof o.dth&&e.position.set(0,0,1),e instanceof o.ZyN&&(e.position.copy(R).add(new o.Pq0(-3,-4,7)),e.target.position.copy(R),w.add(e.target),e.castShadow=!0,e.shadow.mapSize.set(2048,2048),Object.assign(e.shadow.camera,{left:-_,right:_,top:_,bottom:-_,near:.1,far:4*_+20}),e.shadow.camera.updateProjectionMatrix(),e.shadow.normalBias=.015)});let{canvas:k,context:D}=function(e,t){let a=document.createElement("canvas");a.width=e,a.height=t;let r=a.getContext("2d",{willReadFrequently:!0});if(!r)throw Error("Canvas rendering is unavailable");return{canvas:a,context:r}}(f,m);p.render(w,h),D.drawImage(p.domElement,0,0);let F=D.getImageData(0,0,f,m);D.drawImage(a,0,0,f,m),D.drawImage(p.domElement,0,0);let B=await d(k);for(let[e,t]of(A.visible=!1,p.toneMapping=o.y_p,u)){let{r:a,g:r,b:n}=(0,s.nI)(e);t.traverse(e=>{if(!(e instanceof o.eaF))return;let t=(Array.isArray(e.material)?e.material:[e.material]).map(e=>{let t=new o.V9B({color:new o.Q1f().setRGB(a/255,r/255,n/255,o.er$),side:e.side,toneMapped:!1});
1return e instanceof o._4j&&(t.map=e.map,t.alphaMap=e.alphaMap,t.alphaTest=e.alphaTest,t.onBeforeCompile=e=>{e.fragmentShader=e.fragmentShader.replace("#include <map_fragment>","#ifdef USE_MAP\n diffuseColor.a *= texture2D(map, vMapUv).a;\n#endif")}),b.push(t),t});e.material=Array.isArray(e.material)?t:t[0]})}p.render(w,h),D.clearRect(0,0,f,m),D.drawImage(p.domElement,0,0);let W=D.getImageData(0,0,f,m),j=await d(k),q=new Uint8Array(f*m);for(let e=0;e<q.length;e++)q[e]=255*(W.data[4*e+3]>0);if(u.size>0&&!q.some(e=>e>0))throw Error("No products are visible from this camera position");let U=async e=>{let t=D.createImageData(f,m);for(let a=0;a<e.length;a++)t.data.set([e[a],e[a],e[a],255],4*a);return D.putImageData(t,0,0),d(k)},V=await U(q),z=await U(function(e,t,a){if(e.length!==4*t.length)throw Error("Rendered shadow dimensions do not match product protection");!1;return t.map((t,r)=>t>0?0:Math.min(255,Math.round(e[4*r+3]/a)))}(F.data,q,.3));for(let[e,t]of y)e.material=t;let N=new o.CSG({depthPacking:o.Rkk});N.onBeforeCompile=e=>{e.fragmentShader=e.fragmentShader.replace("gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );","float distanceM = (2.0 * 0.01 * 100.0) / (100.0 + 0.01 - (2.0 * fragCoordZ - 1.0) * (100.0 - 0.01)); gl_FragColor = vec4(vec3(clamp(1.0 - distanceM / 20.0, 0.0, 1.0)), 1.0);")},b.push(N),w.overrideMaterial=N,p.render(w,h),D.clearRect(0,0,f,m),D.drawImage(p.domElement,0,0);let G=await d(k);w.overrideMaterial=null,p.toneMapping=o.FV;let T={};for(let[e,t]of u){for(let e of u.values())e.visible=e===t;p.render(w,h),D.clearRect(0,0,f,m),D.drawImage(p.domElement,0,0);let a=D.getImageData(0,0,f,m),{r,g:o,b:n}=(0,s.nI)(e);for(let e=0;e<q.length;e++){let t=4*e;W.data[t]===r&&W.data[t+1]===o&&W.data[t+2]===n&&q[e]||a.data.fill(0,t,t+4)}D.putImageData(a,0,0),T[e]=await d(k)}return{composite:B,mask:V,depth:G,objectId:j,editableShadow:z,products:T,transforms:P,cameraMatrix:c(h.projectionMatrix.clone().multiply(h.matrixWorldInverse))}}finally{for(let[e,t]of(null==a||a.close(),y))e.material=t;let e=new Set(b),t=new Set,r=new Set;for(let t of[w,...g.values()])t.traverse(t=>{if(t instanceof o.eaF)for(let a of(r.add(t.geometry),Array.isArray(t.material)?t.material:[t.material]))e.add(a)});for(let a of e){for(let e of Object.values(a))e instanceof o.gPd&&t.add(e);a.dispose()}for(let e of t)e.image instanceof ImageBitmap&&e.image.close(),e.dispose();for(let e of r)e.dispose();p.dispose()}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.