@seatlayer/core 0.65.0 → 0.67.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,20 @@
1
+ import{a as $,c as K,d as Q,e as O,j as Z}from"./chunk-XPPT3OGQ.js";import{c as N,d as Y,e as X,f as j}from"./chunk-IJI4WU57.js";import{Geometry as ne,Mesh as oe,Program as ae,Texture as ie}from"ogl";var se=64,le=32,ce=500;function me(m=se,i=le,t=ce){let o=m+1,f=i+1,u=o*f,a=new Float32Array(u*3),p=new Float32Array(u*2);for(let b=0;b<f;b++){let L=b/i,M=L*Math.PI,c=Math.sin(M),S=Math.cos(M);for(let g=0;g<o;g++){let y=g/m,r=(y-.5)*Math.PI*2,x=b*o+g;a[x*3]=t*c*Math.sin(r),a[x*3+1]=t*S,a[x*3+2]=-t*c*Math.cos(r),p[x*2]=y,p[x*2+1]=L}}let l=new Uint16Array(m*i*6),s=0;for(let b=0;b<i;b++)for(let L=0;L<m;L++){let M=b*o+L,c=M+o;l[s++]=M,l[s++]=c,l[s++]=M+1,l[s++]=M+1,l[s++]=c,l[s++]=c+1}return{position:a,uv:p,index:l}}function J(m,i){let t=m*Math.PI/180,o=i*Math.PI/180,f=Math.cos(o);return[f*Math.sin(t),Math.sin(o),-f*Math.cos(t)]}var ue=`#version 300 es
2
+ precision highp float;
3
+ in vec3 position;
4
+ in vec2 uv;
5
+ uniform mat4 modelViewMatrix;
6
+ uniform mat4 projectionMatrix;
7
+ out vec2 vUv;
8
+ void main() {
9
+ vUv = uv;
10
+ gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
11
+ }`,pe=`#version 300 es
12
+ precision highp float;
13
+ in vec2 vUv;
14
+ uniform sampler2D uPano;
15
+ uniform float uOpacity;
16
+ out vec4 fragColor;
17
+ void main() {
18
+ vec3 rgb = texture(uPano, vUv).rgb;
19
+ fragColor = vec4(rgb, uOpacity);
20
+ }`;function ee(m,i){let{position:t,uv:o,index:f}=me(),u=new ne(m,{position:{size:3,data:t},uv:{size:2,data:o},index:{data:f}}),a=new ie(m,{image:i,wrapS:m.CLAMP_TO_EDGE,wrapT:m.CLAMP_TO_EDGE,generateMipmaps:!0,flipY:!1}),p=new ae(m,{vertex:ue,fragment:pe,uniforms:{uPano:{value:a},uOpacity:{value:0}},transparent:!0,depthTest:!1,depthWrite:!1}),l=new oe(m,{geometry:u,program:p});return{mesh:l,setOpacity(s){p.uniforms.uOpacity.value=Math.max(0,Math.min(1,s))},setImage(s){a.image=s,a.needsUpdate=!0},dispose(){l.setParent(null),u.remove(),a.texture&&m.deleteTexture(a.texture),p.remove()}}}var te=.15;async function re(m,i,t,o={}){let f=o.fadeMs??400,u=i?.initialBearingDeg??0,a=Math.max(-O,Math.min(O,i?.initialPitchDeg??0)),p=K,l=!1,s=new AbortController,b=()=>s.abort();o.signal?.addEventListener("abort",b,{once:!0});let L=()=>{},M=[t.camera.position.x,t.camera.position.y,t.camera.position.z];if(!i&&t.cameraOriginWorld&&t.camera.position.set(t.cameraOriginWorld[0],t.cameraOriginWorld[1],t.cameraOriginWorld[2]),!i&&t.focalWorld){let e=t.camera.position,n=t.focalWorld[0]-e.x,A=t.focalWorld[1]-e.y,w=t.focalWorld[2]-e.z,P=Math.hypot(n,w);P>.001&&(u=Math.atan2(n,-w)*180/Math.PI,a=Math.max(-O,Math.min(O,Math.atan2(A,P)*180/Math.PI)))}let c=null;if(i){let e=t.gl.getParameter(t.gl.MAX_TEXTURE_SIZE),n=Y(i,N(e)),A;try{let w=i.resolveUrl?await i.resolveUrl(n.initialUrl):n.initialUrl;if(!w)throw new Error("panorama_asset_unavailable");A=await X(w,s.signal)}catch{return o.signal?.removeEventListener("abort",b),null}try{c=ee(t.gl,A)}catch{return s.abort(),o.signal?.removeEventListener("abort",b),null}c.mesh.renderOrder=999,c.mesh.setParent(t.scene),n.upgradeUrl&&(L=j(()=>{(i.resolveUrl?i.resolveUrl(n.upgradeUrl):Promise.resolve(n.upgradeUrl)).then(P=>!P||s.signal.aborted?null:X(P,s.signal)).then(P=>{P&&(l||s.signal.aborted||(c?.setImage(P),t.requestRender()))}).catch(()=>{})}))}let S=t.camera.fov;t.camera.perspective({fov:p,aspect:t.camera.aspect});let g=t.camera.quaternion.slice(),y=()=>{let e=t.camera.position;c?.mesh.position.set(e.x,e.y,e.z);let[n,A,w]=J(u,a);t.camera.lookAt([e.x+n,e.y+A,e.z+w]),t.requestRender()};y();let r=document.createElement("div"),x=document.activeElement instanceof HTMLElement?document.activeElement:null;r.setAttribute("role","dialog"),r.setAttribute("aria-modal","true"),r.setAttribute("aria-label",o.seatLabel?`View from ${o.seatLabel}`:"View from seat"),r.tabIndex=-1,Object.assign(r.style,{position:"absolute",inset:"0",zIndex:"10",cursor:"grab",touchAction:"none"});let h=document.createElement("button");if(h.type="button",h.setAttribute("aria-label","Close"),h.textContent="\u2715",Object.assign(h.style,{position:"absolute",top:"12px",right:"12px",zIndex:"2",width:"44px",height:"44px",borderRadius:"999px",cursor:"pointer",border:"1px solid rgba(255,255,255,0.25)",background:"rgba(8,12,18,0.6)",color:"#e6edf3",fontSize:"15px",lineHeight:"1"}),r.appendChild(h),o.disclosure){let e=document.createElement("div");e.textContent=`${o.disclosurePrefix??"360\xB0 panorama"} \xB7 ${o.disclosure}`,Object.assign(e.style,{position:"absolute",top:"12px",left:"12px",zIndex:"2",maxWidth:"calc(100% - 88px)",padding:"8px 11px",borderRadius:"999px",overflow:"hidden",color:"#dce6f8",background:"rgba(8,12,18,0.68)",font:"600 11px/1.2 ui-sans-serif, system-ui, sans-serif",textOverflow:"ellipsis",whiteSpace:"nowrap",pointerEvents:"none",backdropFilter:"blur(6px)"}),r.appendChild(e)}let _=document.createElement("div");_.textContent="Drag to look \xB7 pinch or scroll to zoom \xB7 Esc to close",Object.assign(_.style,{position:"absolute",bottom:"12px",left:"0",right:"0",textAlign:"center",color:"rgba(230,237,243,0.7)",font:"12px ui-sans-serif, system-ui, sans-serif",pointerEvents:"none"}),r.appendChild(_),m.appendChild(r),h.focus({preventScroll:!0});let D=!1,U=0,V=0,R=0,E=new Map,H=()=>{let[e,n]=[...E.values()];return e&&n?Math.hypot(e.x-n.x,e.y-n.y):0},v=e=>{let n=Q(e);n!==p&&(p=n,t.camera.perspective({fov:p,aspect:t.camera.aspect}),y())},B=e=>{e.target!==h&&(E.set(e.pointerId,{x:e.clientX,y:e.clientY}),D=E.size===1,U=e.clientX,V=e.clientY,E.size===2&&(R=H()),r.setPointerCapture?.(e.pointerId),r.style.cursor="grabbing")},I=e=>{if(E.has(e.pointerId)){if(E.set(e.pointerId,{x:e.clientX,y:e.clientY}),E.size>=2){let n=H();R>0&&n>0&&v(p*(R/n)),R=n,D=!1;return}D&&(u+=(e.clientX-U)*te,a=Math.max(-O,Math.min(O,a+(e.clientY-V)*te)),U=e.clientX,V=e.clientY,y())}},d=e=>{E.delete(e.pointerId),R=E.size===2?H():0;let n=E.values().next().value;D=E.size===1,n?(U=n.x,V=n.y):r.style.cursor="grab";try{r.releasePointerCapture?.(e.pointerId)}catch{}},k=e=>{e.preventDefault(),v(p+e.deltaY*.04)};r.addEventListener("pointerdown",B),r.addEventListener("pointermove",I),r.addEventListener("pointerup",d),r.addEventListener("pointercancel",d),r.addEventListener("wheel",k,{passive:!1});let q=e=>{if(!l){if(e.key==="Tab"){e.preventDefault(),h.focus({preventScroll:!0});return}if(e.key==="Escape"){e.stopPropagation(),F.close();return}if(e.key==="ArrowLeft"||e.key==="ArrowRight")u+=e.key==="ArrowLeft"?-4:4;else if(e.key==="ArrowUp"||e.key==="ArrowDown")a=Math.max(-O,Math.min(O,a+(e.key==="ArrowUp"?4:-4)));else if(e.key==="+"||e.key==="="){v(p-5),e.preventDefault();return}else if(e.key==="-"){v(p+5),e.preventDefault();return}else return;e.preventDefault(),y()}};window.addEventListener("keydown",q);let C=0,G=(e,n)=>{if(!c){n?.();return}let A=e===1?0:1,w=performance.now(),P=()=>{if(l)return;let z=f<=0?1:Math.min(1,(performance.now()-w)/f);c?.setOpacity(A+(e-A)*z),t.requestRender(),z<1?C=requestAnimationFrame(P):n?.()};C=requestAnimationFrame(P)};G(1);let T=()=>{l||(l=!0,L(),s.abort(),o.signal?.removeEventListener("abort",b),cancelAnimationFrame(C),r.removeEventListener("pointerdown",B),r.removeEventListener("pointermove",I),r.removeEventListener("pointerup",d),r.removeEventListener("pointercancel",d),r.removeEventListener("wheel",k),window.removeEventListener("keydown",q),r.remove(),x?.isConnected&&x.focus({preventScroll:!0}),c?.dispose(),t.camera.position.set(M[0],M[1],M[2]),t.camera.perspective({fov:S,aspect:t.camera.aspect}),t.camera.quaternion.set(g[0],g[1],g[2],g[3]),t.requestRender())},F={close(){if(l)return;let e=()=>{T(),o.onClose?.()};cancelAnimationFrame(C),G(0,e)},dispose:T};return h.addEventListener("click",()=>F.close()),F}function Pe(m){let{container:i,model:t,opts:o,analytics:f,orbit:u,loop:a,seatsById:p,ensureSeatView:l,resolvedSeatViewPose:s,gpu:b,gl:L,isContextLost:M,isDisposed:c,flightGen:S,setPanorama:g,getLoadAbort:y,setLoadAbort:r,setPanoramaSphereVisible:x,setFrozen:h,raisePanoramaLayer:_,restorePanoramaLayer:D,getOverviewChip:U,labelOverlay:V,reducedMotion:R,removeArriveChip:E,showArriveChip:H}=m;return async(v,B,I)=>{y()?.abort();let d=new AbortController;r(d);let k=t.seats.idToIndex.get(v);if(k===void 0){u.syncFromCamera();return}let q=p.get(v)?.label??v,C=s(v,k),G=l(v);if(!G){d.abort(),y()===d&&r(null),u.syncFromCamera();return}h(!0),a.stop();let T;try{T=await G}catch{if(y()===d&&r(null),f.panoramaFailed(v,"source"),!c()&&I===S()){h(!1),u.resumeAfterFlight(C.focal),a.requestRender();let W=H(v,I,!0);requestAnimationFrame(()=>W?.querySelector("[data-panorama-trigger]")?.focus())}return}if(c()||I!==S()){d.abort(),y()===d&&r(null);return}E();let F=U(),e=()=>{d.abort(),y()===d&&r(null),g(null),x(!1),D(),F.style.display="",V.setVisible(!o.arriveAtSeatEye),h(!1),f.panoramaClosed(),u.resumeAfterFlight(C.focal),a.requestRender();let W=H(v,S());requestAnimationFrame(()=>W?.querySelector("[data-panorama-trigger]")?.focus())},n=T.generated===!0,A=$(T);_(),x(!n),F.style.display="none";let w=R()?0:B,P=b(),z=P&&!M()?await re(i,n?null:T,{gl:L,scene:P.main,camera:u.camera,requestRender:()=>a.requestRender(),cameraOriginWorld:n?C.eye:void 0,focalWorld:C.focal},{fadeMs:w,seatLabel:q,disclosure:A,disclosurePrefix:n?"Live seat-eye view":"360\xB0 panorama",onClose:e,signal:d.signal}):null;if(c()||I!==S()){d.abort(),x(!1),y()===d&&r(null),z?.dispose(),F.style.display="",D();return}if(z)u.syncFromCamera(),V.setVisible(!1),h(!1),a.requestRender(),g(z);else if(n){D(),F.style.display="",h(!1),u.resumeAfterFlight(C.focal),a.requestRender(),g(null),x(!1),f.panoramaFailed(v,"mount");let W=H(v,S(),!0);requestAnimationFrame(()=>W?.querySelector("[data-panorama-trigger]")?.focus()),y()===d&&r(null);return}else x(!1),f.panoramaFallback(v),g(Z(i,T,{fadeMs:w,seatLabel:q,disclosure:A,onClose:e,signal:d.signal}));f.panoramaOpened()}}export{Pe as createOpenPanorama};