@seatlayer/core 0.72.1 → 0.73.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/{categoryInventory-Bt-0psga.d.ts → categoryInventory-Bcmnr6ZH.d.ts} +1 -1
  2. package/dist/{categoryInventory-BU1j8Q70.d.cts → categoryInventory-DueSAIBX.d.cts} +1 -1
  3. package/dist/{chunk-O5UWBFUT.js → chunk-3L4M7L5I.js} +1 -1
  4. package/dist/chunk-5JB4VW6B.js +1 -0
  5. package/dist/{chunk-YW2WGLRM.js → chunk-BAWUBGWY.js} +1 -1
  6. package/dist/{chunk-5U25QLSS.js → chunk-HDY2MYYH.js} +1 -1
  7. package/dist/chunk-JLYR66MT.js +1 -0
  8. package/dist/{chunk-KCFEFP6H.js → chunk-KN7GLEAI.js} +1 -1
  9. package/dist/{chunk-KPSJDH3N.js → chunk-N5NRM4NW.js} +1 -1
  10. package/dist/chunk-QLDV5ZGA.js +1 -0
  11. package/dist/{chunk-AM2LRFAY.js → chunk-UX67GDLV.js} +1 -1
  12. package/dist/{chunk-ALE2T36W.js → chunk-YFV4DSSX.js} +1 -1
  13. package/dist/{chunk-NKYPEBW3.js → chunk-ZMYRXJOA.js} +1 -1
  14. package/dist/core/chart-ops/index.cjs +1 -1
  15. package/dist/core/chart-ops/index.d.cts +11 -4
  16. package/dist/core/chart-ops/index.d.ts +11 -4
  17. package/dist/core/chart-ops/index.js +1 -1
  18. package/dist/core/inventory/index.cjs +1 -1
  19. package/dist/core/inventory/index.d.cts +11 -4
  20. package/dist/core/inventory/index.d.ts +11 -4
  21. package/dist/core/inventory/index.js +1 -1
  22. package/dist/core/layout/index.cjs +1 -1
  23. package/dist/core/layout/index.d.cts +5 -5
  24. package/dist/core/layout/index.d.ts +5 -5
  25. package/dist/core/layout/index.js +1 -1
  26. package/dist/core/quality/index.cjs +1 -1
  27. package/dist/core/quality/index.d.cts +3 -3
  28. package/dist/core/quality/index.d.ts +3 -3
  29. package/dist/core/quality/index.js +1 -1
  30. package/dist/core/render-assets/index.cjs +1 -1
  31. package/dist/core/render-assets/index.d.cts +1 -1
  32. package/dist/core/render-assets/index.d.ts +1 -1
  33. package/dist/core/render-assets/index.js +1 -1
  34. package/dist/core/seatConfidence.d.cts +1 -1
  35. package/dist/core/seatConfidence.d.ts +1 -1
  36. package/dist/core/sections/index.cjs +1 -1
  37. package/dist/core/sections/index.d.cts +5 -5
  38. package/dist/core/sections/index.d.ts +5 -5
  39. package/dist/core/sections/index.js +1 -1
  40. package/dist/{eventConfigurations-DfVUGyCg.d.ts → eventConfigurations-C7YAqkFR.d.ts} +1 -1
  41. package/dist/{eventConfigurations-3uSorYVC.d.cts → eventConfigurations-DwXdrjqj.d.cts} +1 -1
  42. package/dist/index.cjs +1 -1
  43. package/dist/index.d.cts +102 -13
  44. package/dist/index.d.ts +102 -13
  45. package/dist/index.js +1 -1
  46. package/dist/{labeling-BiWB-8aq.d.ts → labeling-BUCj-kHU.d.ts} +1 -1
  47. package/dist/{labeling-9RWWmJhZ.d.cts → labeling-iugoy25P.d.cts} +1 -1
  48. package/dist/{layout-B6iOoPOv.d.cts → layout-DPJX6D9k.d.cts} +3 -3
  49. package/dist/{layout-B7URbtDR.d.ts → layout-Dv3R0Mpw.d.ts} +3 -3
  50. package/dist/{renderedQuality-C5dQiq97.d.ts → renderedQuality-CSHrmnHf.d.cts} +10 -2
  51. package/dist/{renderedQuality-BZsq3wDe.d.cts → renderedQuality-CfonzUpl.d.ts} +10 -2
  52. package/dist/{renderer-6sFRupj0.d.ts → renderer-C5avrVLy.d.ts} +11 -2
  53. package/dist/{renderer-CBOo1OZk.d.cts → renderer-Dn4Plcv9.d.cts} +11 -2
  54. package/dist/{sections-DU6YDYoZ.d.cts → sections-DhJ7TukF.d.cts} +1 -1
  55. package/dist/{sections-Cn_sk1Sx.d.ts → sections-uV7vqDHj.d.ts} +1 -1
  56. package/dist/{segmentedRowModel-CKmyHvKv.d.cts → segmentedRowModel-DWOjcPrU.d.cts} +1 -1
  57. package/dist/{segmentedRowModel-DbP7pWUk.d.ts → segmentedRowModel-DgSEzAYd.d.ts} +1 -1
  58. package/dist/{ticketRestrictions-CvS2oQ8v.d.ts → ticketRestrictions-DIh61MqE.d.ts} +2 -2
  59. package/dist/{ticketRestrictions-DkenahW2.d.cts → ticketRestrictions-JT87K45q.d.cts} +2 -2
  60. package/dist/{types-D6-wLa-m.d.cts → types-Dx4jA8aI.d.cts} +22 -4
  61. package/dist/{types-D6-wLa-m.d.ts → types-Dx4jA8aI.d.ts} +22 -4
  62. package/dist/view3d/crossfade/panorama.d.cts +1 -1
  63. package/dist/view3d/crossfade/panorama.d.ts +1 -1
  64. package/dist/view3d/index.cjs +1 -1
  65. package/dist/view3d/index.d.cts +3 -3
  66. package/dist/view3d/index.d.ts +3 -3
  67. package/dist/view3d/index.js +1 -1
  68. package/dist/view3d/scene/scene.worker.cjs +1 -1
  69. package/dist/view3d/scene/scene.worker.js +1 -1
  70. package/package.json +1 -1
  71. package/dist/chunk-4F7VBQCF.js +0 -1
  72. package/dist/chunk-HXYWP6NX.js +0 -1
  73. package/dist/chunk-XLGYWT5G.js +0 -1
@@ -1,6 +1,6 @@
1
- import { C as ChartDoc } from '../types-D6-wLa-m.cjs';
2
- import { p as EventConfigurationProductionElementKind, j as EventConfigurationOcclusion, a as EventConfigurationVersion } from '../eventConfigurations-3uSorYVC.cjs';
3
- import { E as ExpandedSeat } from '../renderer-CBOo1OZk.cjs';
1
+ import { C as ChartDoc } from '../types-Dx4jA8aI.cjs';
2
+ import { p as EventConfigurationProductionElementKind, j as EventConfigurationOcclusion, a as EventConfigurationVersion } from '../eventConfigurations-DwXdrjqj.cjs';
3
+ import { E as ExpandedSeat } from '../renderer-Dn4Plcv9.cjs';
4
4
  import { SeatView } from './crossfade/panorama.cjs';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
- import { C as ChartDoc } from '../types-D6-wLa-m.js';
2
- import { p as EventConfigurationProductionElementKind, j as EventConfigurationOcclusion, a as EventConfigurationVersion } from '../eventConfigurations-DfVUGyCg.js';
3
- import { E as ExpandedSeat } from '../renderer-6sFRupj0.js';
1
+ import { C as ChartDoc } from '../types-Dx4jA8aI.js';
2
+ import { p as EventConfigurationProductionElementKind, j as EventConfigurationOcclusion, a as EventConfigurationVersion } from '../eventConfigurations-C7YAqkFR.js';
3
+ import { E as ExpandedSeat } from '../renderer-C5avrVLy.js';
4
4
  import { SeatView } from './crossfade/panorama.js';
5
5
 
6
6
  /**
@@ -1,4 +1,4 @@
1
- import{a as xe,b as Ht,c as Wt,d as qe,e as we,f as mt,g as ht,h as Ut,i as Ie,j as Yt,k as ft,l as qt,m as Xt,n as jt,o as Qt,p as pe,q as Kt,r as $t,s as Zt,t as Jt,u as vt,v as Te}from"../chunk-5U25QLSS.js";import"../chunk-KPSJDH3N.js";import"../chunk-ALE2T36W.js";import"../chunk-BLPBTW6I.js";import"../chunk-UL5OIGIF.js";import"../chunk-YW2WGLRM.js";import{Ea as Nt}from"../chunk-KCFEFP6H.js";import{d as Gt,l as Bt}from"../chunk-JBOTRSMY.js";import"../chunk-CRCGO52K.js";import{Renderer as wn}from"ogl";function Sn(){let t=typeof window<"u"&&window.devicePixelRatio||1,e=navigator.deviceMemory,o=typeof e=="number"&&e<=4?1.5:2;return Math.min(t,o)}var Xe=class{constructor(e,o){this.clearRgb=[0,0,0];this.container=e,this.canvas=document.createElement("canvas"),this.canvas.style.display="block",this.canvas.style.width="100%",this.canvas.style.height="100%",this.canvas.style.touchAction="none",this.canvas.tabIndex=0,this.canvas.setAttribute("role","application"),this.canvas.setAttribute("aria-label","Interactive 3D venue. Drag or use arrow keys to look around; pinch, scroll, plus or minus to zoom."),this.renderer=new wn({canvas:this.canvas,dpr:Sn(),alpha:!1,antialias:!1,depth:!0,stencil:!1,powerPreference:"high-performance",webgl:2}),this.gl=this.renderer.gl,this.clearRgb=[qe.top[0],qe.top[1],qe.top[2]],this.gl.clearColor(this.clearRgb[0],this.clearRgb[1],this.clearRgb[2],1),e.appendChild(this.canvas),this.lostHandler=r=>{r.preventDefault(),o.onContextLost()},this.restoredHandler=()=>o.onContextRestored(),this.canvas.addEventListener("webglcontextlost",this.lostHandler,!1),this.canvas.addEventListener("webglcontextrestored",this.restoredHandler,!1),this.resize()}setClearColor(e){this.clearRgb=[e[0],e[1],e[2]],this.gl.clearColor(e[0],e[1],e[2],1)}get clearColor(){return this.clearRgb}resize(){let e=Math.max(1,this.container.clientWidth||this.canvas.clientWidth||1),o=Math.max(1,this.container.clientHeight||this.canvas.clientHeight||1);return this.renderer.setSize(e,o),{width:e,height:o}}get pixelHeight(){return this.renderer.height*this.renderer.dpr}get aspect(){return this.renderer.width/Math.max(1,this.renderer.height)}dispose(){this.canvas.removeEventListener("webglcontextlost",this.lostHandler,!1),this.canvas.removeEventListener("webglcontextrestored",this.restoredHandler,!1);let e=this.gl.getExtension("WEBGL_lose_context");e&&e.loseContext(),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas)}simulateContextLossCycle(){let e=this.gl.getExtension("WEBGL_lose_context");e&&(e.loseContext(),setTimeout(()=>{e.restoreContext&&e.restoreContext()},300))}};import{Camera as Mn,Vec3 as gt}from"ogl";var oe=Math.PI/180,bt=15*oe,yt=80*oe,Se=.12,eo=35,to=1.25,je=class{constructor(e,o,r,n){this.fovY=eo;this.target=new gt;this.azimuth=-30*oe;this.polar=55*oe;this.distance=10;this.azT=-30*oe;this.polT=55*oe;this.distT=10;this.minDist=1;this.maxDist=100;this.gestureFired=!1;this.interactionEnabled=!0;this.dragging=!1;this.panning=!1;this.lastX=0;this.lastY=0;this.activePointers=new Map;this.pinchDist=0;this.pinchCx=0;this.pinchCy=0;this.targetT=new gt;this.panAnchor=new gt;this.panLimit=0;this.primaryDragMode="orbit";this.camera=new Mn(e,{fov:eo,near:.1,far:5e3,aspect:1}),this.canvas=o,this.requestRender=r,this.onGesture=n,this.onPointerDown=a=>{if(this.interactionEnabled){try{this.canvas.setPointerCapture?.(a.pointerId)}catch{}if(this.activePointers.set(a.pointerId,{x:a.clientX,y:a.clientY}),this.activePointers.size===1){let s=a.button===2||a.button===1,i=a.button===0&&(a.shiftKey?this.primaryDragMode==="orbit":this.primaryDragMode==="pan");this.panning=s||i,this.dragging=!this.panning,this.lastX=a.clientX,this.lastY=a.clientY}else if(this.activePointers.size===2){this.dragging=!1,this.panning=!1,this.pinchDist=this.currentPinchDistance();let s=this.pinchCentroid();this.pinchCx=s.x,this.pinchCy=s.y}}},this.onPointerMove=a=>{if(!this.interactionEnabled||!this.activePointers.has(a.pointerId))return;if(this.activePointers.set(a.pointerId,{x:a.clientX,y:a.clientY}),this.activePointers.size>=2){let l=this.currentPinchDistance();this.pinchDist>0&&(this.dollyBy(Math.exp((this.pinchDist-l)*.005)),this.fireGesture()),this.pinchDist=l;let p=this.pinchCentroid();this.panBy(p.x-this.pinchCx,p.y-this.pinchCy),this.pinchCx=p.x,this.pinchCy=p.y;return}let s=a.clientX-this.lastX,i=a.clientY-this.lastY;if(this.panning){this.lastX=a.clientX,this.lastY=a.clientY,(s!==0||i!==0)&&(this.panBy(s,i),this.fireGesture());return}this.dragging&&(this.lastX=a.clientX,this.lastY=a.clientY,(s!==0||i!==0)&&this.fireGesture(),this.azT-=s*.006,this.polT=Math.max(bt,Math.min(yt,this.polT-i*.006)),this.requestRender())},this.onPointerUp=a=>{this.activePointers.delete(a.pointerId);try{this.canvas.releasePointerCapture?.(a.pointerId)}catch{}this.activePointers.size<2&&(this.pinchDist=0),this.activePointers.size===0&&(this.dragging=!1,this.panning=!1)},this.onContextMenu=a=>{a.preventDefault()},this.onWheel=a=>{if(a.preventDefault(),!this.interactionEnabled)return;let s=a.deltaMode===1?16:a.deltaMode===2?100:1,i=Math.max(-2,Math.min(2,a.deltaY*s/100));this.dollyBy(Math.exp(i*.22)),this.fireGesture()},this.onKeyDown=a=>{if(!this.interactionEnabled)return;let s=7*oe;if(a.shiftKey&&(a.key==="ArrowLeft"||a.key==="ArrowRight"||a.key==="ArrowUp"||a.key==="ArrowDown"))this.panBy(a.key==="ArrowLeft"?-32:a.key==="ArrowRight"?32:0,a.key==="ArrowUp"?-32:a.key==="ArrowDown"?32:0);else if(a.key==="ArrowLeft"||a.key==="ArrowRight")this.azT+=a.key==="ArrowLeft"?-s:s;else if(a.key==="ArrowUp"||a.key==="ArrowDown")this.polT=Math.max(bt,Math.min(yt,this.polT+(a.key==="ArrowUp"?-s:s)));else if(a.key==="+"||a.key==="=")this.dollyBy(.82);else if(a.key==="-"||a.key==="_")this.dollyBy(1.22);else return;a.preventDefault(),this.fireGesture(),this.requestRender()},o.addEventListener("pointerdown",this.onPointerDown),o.addEventListener("pointermove",this.onPointerMove),o.addEventListener("pointerup",this.onPointerUp),o.addEventListener("pointercancel",this.onPointerUp),o.addEventListener("wheel",this.onWheel,{passive:!1}),o.addEventListener("keydown",this.onKeyDown),o.addEventListener("contextmenu",this.onContextMenu)}pinchCentroid(){let e=[...this.activePointers.values()];if(!e.length)return{x:0,y:0};let o=0,r=0;for(let n of e)o+=n.x,r+=n.y;return{x:o/e.length,y:r/e.length}}panBy(e,o){let r=this.canvas.clientHeight||1,n=2*this.distance*Math.tan(this.fovY*oe/2)/r,a=Math.sin(this.azimuth),s=Math.cos(this.azimuth),i=s,l=-a,p=Math.cos(this.polar),v=Math.sin(this.polar),c=-a*p,f=-s*p;this.targetT.x+=(-e*i+o*c)*n,this.targetT.z+=(-e*l+o*f)*n,this.targetT.y+=o*v*n,this.clampPan(),this.requestRender()}clampPan(){if(this.panLimit<=0)return;let e=this.panLimit,o=this.panAnchor.x,r=this.panAnchor.y,n=this.panAnchor.z;this.targetT.x=Math.max(o-e,Math.min(o+e,this.targetT.x)),this.targetT.z=Math.max(n-e,Math.min(n+e,this.targetT.z)),this.targetT.y=Math.max(r-e*.5,Math.min(r+e,this.targetT.y))}fireGesture(){this.gestureFired||(this.gestureFired=!0,this.onGesture?.())}currentPinchDistance(){let e=[...this.activePointers.values()];return e.length<2?0:Math.hypot(e[0].x-e[1].x,e[0].y-e[1].y)}dollyBy(e){this.distT=Math.max(this.minDist,Math.min(this.maxDist,this.distT*e)),this.requestRender()}zoomBy(e){this.interactionEnabled&&(this.dollyBy(e),this.fireGesture())}setPrimaryDragMode(e){this.primaryDragMode=e}setInteractionEnabled(e){this.interactionEnabled=e,!e&&(this.activePointers.clear(),this.dragging=!1,this.panning=!1,this.pinchDist=0)}frame(e,o=!1,r,n=!1,a){this.target.set(e.center[0],e.center[1],e.center[2]),this.targetT.copy(this.target),this.panAnchor.copy(this.target),this.panLimit=Math.max(1,e.radius)*1.5;let s=Math.max(1,e.radius),i=this.fovY*oe/2,l=n?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,p=Math.atan(Math.tan(i)*l);this.azT=r??-30*oe,this.polT=Math.max(15,Math.min(80,a?.polarDeg??55))*oe;let v=this.fitDistance(e,i,p,this.azT,this.polT);this.distT=v*Math.max(1.05,Math.min(2,a?.margin??to)),this.minDist=Math.max(2,s*.12),this.maxDist=v*4,o?(this.azimuth=this.azT,this.polar=12*oe,this.distance=this.distT*1.7):(this.azimuth=this.azT,this.polar=this.polT,this.distance=this.distT),this.applyPosition()}setAspect(e){this.camera.perspective({aspect:e})}frameSoft(e,o,r=!1,n){this.target.set(e.center[0],e.center[1],e.center[2]),this.targetT.copy(this.target),this.panAnchor.copy(this.target),this.panLimit=Math.max(1,e.radius)*1.5,this.syncFromCamera(),this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect});let a=this.fovY*oe/2,s=r?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,i=Math.atan(Math.tan(a)*s);this.azT=o??this.azimuth,this.polT=Math.max(15,Math.min(80,n?.polarDeg??55))*oe;let l=this.fitDistance(e,a,i,this.azT,this.polT);this.distT=l*Math.max(1.05,Math.min(2,n?.margin??to))}fitDistance(e,o,r,n,a){let s=Math.max(1,e.radius),i=Math.max(s/Math.tan(o),s/Math.tan(r)),l=e.box;if(!l)return i;let p=Math.sin(a),v=-p*Math.sin(n),c=-Math.cos(a),f=-p*Math.cos(n);if(Math.abs(c)>.999)return i;let m=-f,u=v,M=Math.hypot(m,u);m/=M,u/=M;let S=-u*c,P=u*v-m*f,R=m*c,y=Math.tan(r),A=Math.tan(o),g=1;for(let C=0;C<8;C++){let V=(C&1?l.max[0]:l.min[0])-e.center[0],D=(C&2?l.max[1]:l.min[1])-e.center[1],L=(C&4?l.max[2]:l.min[2])-e.center[2],N=V*v+D*c+L*f,E=Math.abs(V*m+L*u),G=Math.abs(V*S+D*P+L*R);g=Math.max(g,E/y-N,G/A-N)}return Math.min(i,Math.max(g,s*.35))}updateClipping(e){let o=this.camera.position.x-e.center[0],r=this.camera.position.y-e.center[1],n=this.camera.position.z-e.center[2],a=Math.hypot(o,r,n),s=Math.max(1,e.radius)*1.18,i=Math.max(.05,a-s),l=Math.max(i+10,a+s);this.camera.perspective({near:i,far:l,aspect:this.camera.aspect})}update(){let e=this.azT-this.azimuth,o=this.polT-this.polar,r=this.distT-this.distance,n=this.targetT.x-this.target.x,a=this.targetT.y-this.target.y,s=this.targetT.z-this.target.z,i=Math.max(1e-4,this.distance*1e-4),l=Math.abs(e)>1e-4||Math.abs(o)>1e-4||Math.abs(r)>1e-4||Math.abs(n)>i||Math.abs(a)>i||Math.abs(s)>i;return this.azimuth+=e*Se,this.polar+=o*Se,this.distance+=r*Se,this.target.x+=n*Se,this.target.y+=a*Se,this.target.z+=s*Se,l&&this.applyPosition(),l}get currentDistance(){return this.distance}syncFromCamera(){let e=this.camera.position.x-this.target.x,o=this.camera.position.y-this.target.y,r=this.camera.position.z-this.target.z,n=Math.hypot(e,o,r)||1,a=Math.max(bt,Math.min(yt,Math.acos(Math.max(-1,Math.min(1,o/n)))));this.distance=this.distT=n,this.polar=this.polT=a,this.azimuth=this.azT=Math.atan2(e,r)}setTarget(e){this.target.set(e[0],e[1],e[2]),this.targetT.copy(this.target)}resumeAfterFlight(e){this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect}),e&&this.target.set(e[0],e[1],e[2]),this.targetT.copy(this.target),this.syncFromCamera()}applyPosition(){let e=Math.sin(this.polar),o=this.target.x+this.distance*e*Math.sin(this.azimuth),r=this.target.y+this.distance*Math.cos(this.polar),n=this.target.z+this.distance*e*Math.cos(this.azimuth);this.camera.position.set(o,r,n),this.camera.lookAt(this.target)}dispose(){this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointermove",this.onPointerMove),this.canvas.removeEventListener("pointerup",this.onPointerUp),this.canvas.removeEventListener("pointercancel",this.onPointerUp),this.canvas.removeEventListener("wheel",this.onWheel),this.canvas.removeEventListener("keydown",this.onKeyDown),this.canvas.removeEventListener("contextmenu",this.onContextMenu),this.activePointers.clear()}};var Qe=class{constructor(e){this.rafId=0;this.running=!1;this.lastTime=0;this.fpsEma=0;this.rendered=0;this.tick=e=>{let o=this.lastTime?(e-this.lastTime)/1e3:.016666666666666666;if(this.lastTime=e,o>0){let n=1/o;this.fpsEma=this.fpsEma?this.fpsEma*.9+n*.1:n}this.rendered++,this.frame(o)?this.rafId=requestAnimationFrame(this.tick):(this.running=!1,this.rafId=0)};this.frame=e}requestRender(){this.running||(this.running=!0,this.lastTime=0,this.rafId=requestAnimationFrame(this.tick))}stats(){return{fps:this.running?Math.round(this.fpsEma):0,rendered:this.rendered,idle:!this.running}}stop(){this.rafId&&cancelAnimationFrame(this.rafId),this.rafId=0,this.running=!1}};var Me=2.5,Pn=1.15,ke=6,Pe=10,oo=6,no=9.5,ro=.9,ao=2.2,xt=30,wt=4,Ke=8192;var Br=Pe+wt;function io(t,e){let o=e*1.4,r=e*3.2;if(t<=o)return{scale:1,fade:0,minPixels:Me};let n=Math.min(1,(t-o)/Math.max(.001,r-o));return{scale:1-n*.4,fade:n*.55,minPixels:Me+n*(Pn-Me)}}function so(t,e,o){return!(t>0)||!(e>0)||!(o>0)?!1:e*o/t>=64}function lo(t,e,o,r,n){if(!(t>0)||!(e>0)||!(o>0)||!(r>0)||!(n>0))return!1;let a=Math.tan(r/2*Math.PI/180);if(!(a>0))return!1;let s=e/(o*a)*(n/2);return Math.PI*s*s/t>=64}var Cn=88,An=20,St={floor:{size:14,weight:"700",opacity:.98},zone:{size:15,weight:"600",opacity:.95},section:{size:12,weight:"500",opacity:.88},ga:{size:12,weight:"500",opacity:.88},booth:{size:11,weight:"500",opacity:.85},annotation:{size:11,weight:"400",opacity:.75},row:{size:10.5,weight:"600",opacity:.8},seat:{size:9.5,weight:"500",opacity:.72}},_e=new Set(["row","seat"]),co={floor:5,zone:4,section:3,ga:3,booth:2,annotation:1},$e={row:{x:62,y:16},seat:{x:46,y:18}},uo=Gt,Mt=t=>Bt(t);function po(t,e){let o=Mt(t),r=Mt(e);return(Math.max(o,r)+.05)/(Math.min(o,r)+.05)}function Pt(t,e){let o=/rgba\((\d+),(\d+),(\d+),([\d.]+)\)/.exec(t.replace(/\s/g,""));if(!o)return e;let r=Math.max(0,Math.min(1,Number(o[4])));return[1,2,3].map(n=>Number(o[n])/255*r+e[n-1]*(1-r))}function Fn(t,e=[.04,.06,.1],o=!0){let r=Mt(e)<.42,n=r?"#f4f7fb":"#0b1220",a=r?"rgba(8,12,22,.78)":"rgba(255,255,255,.84)",s=o?Pt(a,e):e,i=uo(t),l=o?7:4.5,p=i&&po(i,s)>=l?t:n;return r?{ink:p,backing:a,border:"rgba(210,222,245,.24)"}:{ink:p,backing:a,border:"rgba(11,18,32,.22)"}}var Ze=class{constructor(e,o={}){this.nodes=new Map;this.labels=[];this.forcedDense=!1;this.selectedSeatLabelIds=new Set;this.opts=o,this.root=document.createElement("div"),this.root.setAttribute("data-view3d-labels","");let r=this.root.style;r.position="absolute",r.inset="0",r.pointerEvents="none",r.overflow="hidden",o.fontFamily&&(r.fontFamily=o.fontFamily),e.appendChild(this.root)}setVisible(e){this.root.style.visibility=e?"":"hidden"}setLabels(e){this.labels=e;for(let[o,r]of this.nodes)e.some(n=>n.id===o)||(r.remove(),this.nodes.delete(o))}setForcedDense(e){this.forcedDense=e}setSelectedSeatIds(e){this.selectedSeatLabelIds=new Set(Array.from(e,o=>`seat:${o}`))}qualityEvidence(){let e=this.root.getBoundingClientRect(),o=this.root.style.visibility!=="hidden";return this.labels.map(r=>{let n=this.nodes.get(r.id),a=n?.getBoundingClientRect(),s=!!(o&&n&&n.style.display!=="none"&&a&&a.width>0&&a.height>0);return{id:r.id,kind:r.kind,text:r.text,visible:s,renderedFontPx:n&&Number.parseFloat(n.style.fontSize)||0,contrast:n?Number(n.dataset.qualityContrast??0):0,...s&&a?{screenBox:{x:a.x-e.x,y:a.y-e.y,width:a.width,height:a.height}}:{}}})}update(e,o,r,n,a,s){if(!this.labels.length)return;let i=jt(n,a,{hasZoneLabels:this.labels.some(y=>y.kind==="zone")});this.forcedDense&&(i.add("row"),i.add("seat"));let l=[];for(let y of this.labels){if(!i.has(y.kind))continue;let A=pe(e,y.anchor,o,r);if(!A.visible)continue;let g=$t(y.text,St[y.kind].size,!_e.has(y.kind)),C=!_e.has(y.kind),V=Qt(A,g/2,St[y.kind].size/2+(C?4:1),o,r),D=s?Math.hypot(y.anchor[0]-s[0],y.anchor[1]-s[1],y.anchor[2]-s[2]):1;l.push({label:y,screen:V,focus:Jt(V,D,o,r),halfWidth:g/2,...this.selectedSeatLabelIds.has(y.id)?{priority:1}:{}})}let p=Xt(l.filter(y=>y.label.kind==="floor"),o),v=[...l.filter(y=>!_e.has(y.label.kind)&&y.label.kind!=="floor"),...p],c=Kt(v,Cn,An),f=Zt(o),m=vt(l.filter(y=>y.label.kind==="row"),$e.row.x,$e.row.y,f.row,c),u=vt(l.filter(y=>y.label.kind==="seat"),$e.seat.x,$e.seat.y,f.seat,[...c,...m]),M=[...c,...m,...u],S=new Set(M.map(y=>y.label.id));for(let{label:y,screen:A}of M){let C=this.nodeFor(y).style;C.display="",C.transform=`translate(-50%, -50%) translate(${A.x.toFixed(1)}px, ${A.y.toFixed(1)}px)`}let P=M.filter(({label:y})=>!_e.has(y.kind)).sort((y,A)=>co[A.label.kind]-co[y.label.kind]||y.screen.depth-A.screen.depth||y.focus-A.focus),R=[];for(let{label:y}of P){let A=this.nodes.get(y.id);if(!A||A.style.display==="none")continue;let g=A.getBoundingClientRect();R.some(V=>g.left<V.right+3&&g.right+3>V.left&&g.top<V.bottom+3&&g.bottom+3>V.top)?A.style.display="none":R.push(g)}for(let[y,A]of this.nodes)S.has(y)||(A.style.display="none")}nodeFor(e){let o=this.nodes.get(e.id);if(!o){o=document.createElement("div");let c=o.style;c.position="absolute",c.left="0",c.top="0",c.whiteSpace="nowrap",c.textShadow="0 1px 3px rgba(0,0,0,0.85), 0 0 8px rgba(0,0,0,0.55)",c.display="none",this.root.appendChild(o),this.nodes.set(e.id,o)}o.textContent=e.text,o.setAttribute("data-label-kind",e.kind);let r=this.selectedSeatLabelIds.has(e.id);o.toggleAttribute("data-selected-seat",r);let n=St[e.kind],a=o.style;a.fontSize=`${n.size}px`,a.fontWeight=r?"800":n.weight,a.opacity=r?"1":String(n.opacity);let s=!_e.has(e.kind),i=Fn(e.color??this.opts.ink,this.opts.backgroundRgb,s);a.color=r?"#ecf8ff":i.ink,a.background=r?"rgba(10,28,45,.9)":s?i.backing:"",a.border=r?"1px solid rgba(89,199,255,.92)":s?`1px solid ${i.border}`:"",a.borderRadius=r||s?"999px":"",a.padding=r||s?"3px 7px":"",a.boxShadow=r?"0 0 0 2px rgba(41,176,255,.18), 0 5px 14px rgba(0,0,0,.35)":s?"0 3px 10px rgba(0,0,0,.24)":"",a.letterSpacing=e.kind==="zone"||e.kind==="floor"?"0.08em":"0.02em";let l=this.opts.backgroundRgb??[.04,.06,.1],p=uo(r?"#ecf8ff":i.ink)??[1,1,1],v=r?Pt("rgba(10,28,45,.9)",l):s?Pt(i.backing,l):l;return o.dataset.qualityContrast=po(p,v).toFixed(3),(e.kind==="zone"||e.kind==="floor")&&(a.textTransform="uppercase"),o}dispose(){this.root.remove(),this.nodes.clear()}};var En=1;var Rn=new Set(["floor","zone","section","ga","booth","annotation"]);function Dn(t){return t.every(e=>Number.isFinite(e))}function Vn(t,e){return t.x<e.x+e.width&&t.x+t.width>e.x&&t.y<e.y+e.height&&t.y+t.height>e.y}function mo(t){return t.length?Math.round(Math.min(...t)*100)/100:null}function ve(t){return Math.round(t*1e4)/1e4}function In(t){if(t)return{box:{x:ve(t.box.x),y:ve(t.box.y),width:ve(t.box.width),height:ve(t.box.height)},horizontalFillRatio:ve(t.horizontalFillRatio),verticalFillRatio:ve(t.verticalFillRatio),visibleAreaRatio:ve(t.visibleAreaRatio),clippedEdges:[...t.clippedEdges]}}function ce(t,e,o){return o.length?{code:t,message:e,count:o.length,samples:o.slice(0,20)}:null}function Ct(t){let e=t.labels.filter(i=>i.visible&&i.screenBox),o=e.filter(i=>Rn.has(i.kind)),r=t.scene.floorCount>1?t.scene.floorCount:t.scene.zoneCount||t.scene.sectionCount,n=[];for(let i=0;i<o.length;i+=1)for(let l=0;l<i;l+=1)Vn(o[i].screenBox,o[l].screenBox)&&n.push({primaryId:o[i].id,primaryLabel:o[i].text,secondaryId:o[l].id});let a=[...t.camera.position,t.camera.distance,t.camera.verticalFovDeg],s=[ce("webgl2-unavailable","The venue scene must render through WebGL2",t.context.webgl2?[]:[{primaryId:"renderer",primaryLabel:"WebGL2"}]),ce("context-lost","The WebGL context must be live at capture",t.context.lost?[{primaryId:"renderer",primaryLabel:"context lost"}]:[]),ce("frame-not-stable","The captured 3D frame must be rendered and parked",t.frame.rendered>0&&t.frame.idle?[]:[{primaryId:"renderer",primaryLabel:"unstable frame"}]),ce("viewport-empty","The 3D viewport must have visible dimensions",t.viewport.width>1&&t.viewport.height>1?[]:[{primaryId:"viewport",primaryLabel:`${t.viewport.width}\xD7${t.viewport.height}`}]),ce("camera-invalid","The capture camera must have a finite physical pose",Dn(a)&&t.camera.distance>0&&t.camera.verticalFovDeg>0&&t.camera.verticalFovDeg<180?[]:[{primaryId:"camera",primaryLabel:"invalid pose"}]),ce("authored-relief-not-visible","Authored 3D height or rake must produce visible screen-space relief",!t.scene.authoredRelief||t.scene.renderedVerticalSpanM>.05&&t.scene.projectedReliefPx>=2?[]:[{primaryId:"scene",primaryLabel:"authored relief",measured:t.scene.projectedReliefPx,minimum:2}]),ce("hierarchy-label-missing","A venue with authored hierarchy must show at least one structural label",r===0||o.length>0?[]:[{primaryId:"labels",primaryLabel:`${r} expected hierarchy labels`}]),ce("hierarchy-label-undersized","Visible 3D hierarchy labels must remain readable",o.filter(i=>i.renderedFontPx<11).map(i=>({primaryId:i.id,primaryLabel:i.text,measured:i.renderedFontPx,minimum:11}))),ce("hierarchy-label-contrast-low","Visible 3D hierarchy labels must meet text contrast",o.filter(i=>i.contrast<4.5).map(i=>({primaryId:i.id,primaryLabel:i.text,measured:i.contrast,minimum:4.5}))),ce("hierarchy-label-collision","Visible 3D hierarchy labels must not overlap",n)].filter(i=>!!i);return{version:1,state:"venue3d",passed:s.length===0,resolvedRules:["rendered-3d-webgl-context","rendered-3d-stable-frame","rendered-3d-camera-pose","rendered-3d-relief-projection","rendered-3d-label-size","rendered-3d-label-contrast","rendered-3d-label-collision"],viewport:t.viewport,context:t.context,frame:t.frame,camera:t.camera,scene:t.scene,composition:{visibleLabels:e.map(({id:i,kind:l,text:p})=>({id:i,kind:l,text:p})).sort((i,l)=>i.kind.localeCompare(l.kind)||i.id.localeCompare(l.id)),framing:In(t.framing)},metrics:{minimumHierarchyFontPx:mo(o.map(i=>i.renderedFontPx)),minimumHierarchyContrast:mo(o.map(i=>i.contrast)),projectedReliefPx:Math.round(t.scene.projectedReliefPx*100)/100},findings:s}}import{Geometry as Le,Mesh as ze,Program as Xn,Texture as jn,Transform as Mo}from"ogl";import{Program as ge}from"ogl";var Je=`
1
+ import{a as xe,b as Ht,c as Wt,d as qe,e as we,f as mt,g as ht,h as Ut,i as Ie,j as Yt,k as ft,l as qt,m as Xt,n as jt,o as Qt,p as pe,q as Kt,r as $t,s as Zt,t as Jt,u as vt,v as Te}from"../chunk-HDY2MYYH.js";import"../chunk-N5NRM4NW.js";import"../chunk-YFV4DSSX.js";import"../chunk-BLPBTW6I.js";import"../chunk-UL5OIGIF.js";import"../chunk-BAWUBGWY.js";import{Ea as Nt}from"../chunk-KN7GLEAI.js";import{d as Gt,l as Bt}from"../chunk-JBOTRSMY.js";import"../chunk-CRCGO52K.js";import{Renderer as wn}from"ogl";function Sn(){let t=typeof window<"u"&&window.devicePixelRatio||1,e=navigator.deviceMemory,o=typeof e=="number"&&e<=4?1.5:2;return Math.min(t,o)}var Xe=class{constructor(e,o){this.clearRgb=[0,0,0];this.container=e,this.canvas=document.createElement("canvas"),this.canvas.style.display="block",this.canvas.style.width="100%",this.canvas.style.height="100%",this.canvas.style.touchAction="none",this.canvas.tabIndex=0,this.canvas.setAttribute("role","application"),this.canvas.setAttribute("aria-label","Interactive 3D venue. Drag or use arrow keys to look around; pinch, scroll, plus or minus to zoom."),this.renderer=new wn({canvas:this.canvas,dpr:Sn(),alpha:!1,antialias:!1,depth:!0,stencil:!1,powerPreference:"high-performance",webgl:2}),this.gl=this.renderer.gl,this.clearRgb=[qe.top[0],qe.top[1],qe.top[2]],this.gl.clearColor(this.clearRgb[0],this.clearRgb[1],this.clearRgb[2],1),e.appendChild(this.canvas),this.lostHandler=r=>{r.preventDefault(),o.onContextLost()},this.restoredHandler=()=>o.onContextRestored(),this.canvas.addEventListener("webglcontextlost",this.lostHandler,!1),this.canvas.addEventListener("webglcontextrestored",this.restoredHandler,!1),this.resize()}setClearColor(e){this.clearRgb=[e[0],e[1],e[2]],this.gl.clearColor(e[0],e[1],e[2],1)}get clearColor(){return this.clearRgb}resize(){let e=Math.max(1,this.container.clientWidth||this.canvas.clientWidth||1),o=Math.max(1,this.container.clientHeight||this.canvas.clientHeight||1);return this.renderer.setSize(e,o),{width:e,height:o}}get pixelHeight(){return this.renderer.height*this.renderer.dpr}get aspect(){return this.renderer.width/Math.max(1,this.renderer.height)}dispose(){this.canvas.removeEventListener("webglcontextlost",this.lostHandler,!1),this.canvas.removeEventListener("webglcontextrestored",this.restoredHandler,!1);let e=this.gl.getExtension("WEBGL_lose_context");e&&e.loseContext(),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas)}simulateContextLossCycle(){let e=this.gl.getExtension("WEBGL_lose_context");e&&(e.loseContext(),setTimeout(()=>{e.restoreContext&&e.restoreContext()},300))}};import{Camera as Mn,Vec3 as gt}from"ogl";var oe=Math.PI/180,bt=15*oe,yt=80*oe,Se=.12,eo=35,to=1.25,je=class{constructor(e,o,r,n){this.fovY=eo;this.target=new gt;this.azimuth=-30*oe;this.polar=55*oe;this.distance=10;this.azT=-30*oe;this.polT=55*oe;this.distT=10;this.minDist=1;this.maxDist=100;this.gestureFired=!1;this.interactionEnabled=!0;this.dragging=!1;this.panning=!1;this.lastX=0;this.lastY=0;this.activePointers=new Map;this.pinchDist=0;this.pinchCx=0;this.pinchCy=0;this.targetT=new gt;this.panAnchor=new gt;this.panLimit=0;this.primaryDragMode="orbit";this.camera=new Mn(e,{fov:eo,near:.1,far:5e3,aspect:1}),this.canvas=o,this.requestRender=r,this.onGesture=n,this.onPointerDown=a=>{if(this.interactionEnabled){try{this.canvas.setPointerCapture?.(a.pointerId)}catch{}if(this.activePointers.set(a.pointerId,{x:a.clientX,y:a.clientY}),this.activePointers.size===1){let s=a.button===2||a.button===1,i=a.button===0&&(a.shiftKey?this.primaryDragMode==="orbit":this.primaryDragMode==="pan");this.panning=s||i,this.dragging=!this.panning,this.lastX=a.clientX,this.lastY=a.clientY}else if(this.activePointers.size===2){this.dragging=!1,this.panning=!1,this.pinchDist=this.currentPinchDistance();let s=this.pinchCentroid();this.pinchCx=s.x,this.pinchCy=s.y}}},this.onPointerMove=a=>{if(!this.interactionEnabled||!this.activePointers.has(a.pointerId))return;if(this.activePointers.set(a.pointerId,{x:a.clientX,y:a.clientY}),this.activePointers.size>=2){let l=this.currentPinchDistance();this.pinchDist>0&&(this.dollyBy(Math.exp((this.pinchDist-l)*.005)),this.fireGesture()),this.pinchDist=l;let p=this.pinchCentroid();this.panBy(p.x-this.pinchCx,p.y-this.pinchCy),this.pinchCx=p.x,this.pinchCy=p.y;return}let s=a.clientX-this.lastX,i=a.clientY-this.lastY;if(this.panning){this.lastX=a.clientX,this.lastY=a.clientY,(s!==0||i!==0)&&(this.panBy(s,i),this.fireGesture());return}this.dragging&&(this.lastX=a.clientX,this.lastY=a.clientY,(s!==0||i!==0)&&this.fireGesture(),this.azT-=s*.006,this.polT=Math.max(bt,Math.min(yt,this.polT-i*.006)),this.requestRender())},this.onPointerUp=a=>{this.activePointers.delete(a.pointerId);try{this.canvas.releasePointerCapture?.(a.pointerId)}catch{}this.activePointers.size<2&&(this.pinchDist=0),this.activePointers.size===0&&(this.dragging=!1,this.panning=!1)},this.onContextMenu=a=>{a.preventDefault()},this.onWheel=a=>{if(a.preventDefault(),!this.interactionEnabled)return;let s=a.deltaMode===1?16:a.deltaMode===2?100:1,i=Math.max(-2,Math.min(2,a.deltaY*s/100));this.dollyBy(Math.exp(i*.22)),this.fireGesture()},this.onKeyDown=a=>{if(!this.interactionEnabled)return;let s=7*oe;if(a.shiftKey&&(a.key==="ArrowLeft"||a.key==="ArrowRight"||a.key==="ArrowUp"||a.key==="ArrowDown"))this.panBy(a.key==="ArrowLeft"?-32:a.key==="ArrowRight"?32:0,a.key==="ArrowUp"?-32:a.key==="ArrowDown"?32:0);else if(a.key==="ArrowLeft"||a.key==="ArrowRight")this.azT+=a.key==="ArrowLeft"?-s:s;else if(a.key==="ArrowUp"||a.key==="ArrowDown")this.polT=Math.max(bt,Math.min(yt,this.polT+(a.key==="ArrowUp"?-s:s)));else if(a.key==="+"||a.key==="=")this.dollyBy(.82);else if(a.key==="-"||a.key==="_")this.dollyBy(1.22);else return;a.preventDefault(),this.fireGesture(),this.requestRender()},o.addEventListener("pointerdown",this.onPointerDown),o.addEventListener("pointermove",this.onPointerMove),o.addEventListener("pointerup",this.onPointerUp),o.addEventListener("pointercancel",this.onPointerUp),o.addEventListener("wheel",this.onWheel,{passive:!1}),o.addEventListener("keydown",this.onKeyDown),o.addEventListener("contextmenu",this.onContextMenu)}pinchCentroid(){let e=[...this.activePointers.values()];if(!e.length)return{x:0,y:0};let o=0,r=0;for(let n of e)o+=n.x,r+=n.y;return{x:o/e.length,y:r/e.length}}panBy(e,o){let r=this.canvas.clientHeight||1,n=2*this.distance*Math.tan(this.fovY*oe/2)/r,a=Math.sin(this.azimuth),s=Math.cos(this.azimuth),i=s,l=-a,p=Math.cos(this.polar),v=Math.sin(this.polar),c=-a*p,f=-s*p;this.targetT.x+=(-e*i+o*c)*n,this.targetT.z+=(-e*l+o*f)*n,this.targetT.y+=o*v*n,this.clampPan(),this.requestRender()}clampPan(){if(this.panLimit<=0)return;let e=this.panLimit,o=this.panAnchor.x,r=this.panAnchor.y,n=this.panAnchor.z;this.targetT.x=Math.max(o-e,Math.min(o+e,this.targetT.x)),this.targetT.z=Math.max(n-e,Math.min(n+e,this.targetT.z)),this.targetT.y=Math.max(r-e*.5,Math.min(r+e,this.targetT.y))}fireGesture(){this.gestureFired||(this.gestureFired=!0,this.onGesture?.())}currentPinchDistance(){let e=[...this.activePointers.values()];return e.length<2?0:Math.hypot(e[0].x-e[1].x,e[0].y-e[1].y)}dollyBy(e){this.distT=Math.max(this.minDist,Math.min(this.maxDist,this.distT*e)),this.requestRender()}zoomBy(e){this.interactionEnabled&&(this.dollyBy(e),this.fireGesture())}setPrimaryDragMode(e){this.primaryDragMode=e}setInteractionEnabled(e){this.interactionEnabled=e,!e&&(this.activePointers.clear(),this.dragging=!1,this.panning=!1,this.pinchDist=0)}frame(e,o=!1,r,n=!1,a){this.target.set(e.center[0],e.center[1],e.center[2]),this.targetT.copy(this.target),this.panAnchor.copy(this.target),this.panLimit=Math.max(1,e.radius)*1.5;let s=Math.max(1,e.radius),i=this.fovY*oe/2,l=n?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,p=Math.atan(Math.tan(i)*l);this.azT=r??-30*oe,this.polT=Math.max(15,Math.min(80,a?.polarDeg??55))*oe;let v=this.fitDistance(e,i,p,this.azT,this.polT);this.distT=v*Math.max(1.05,Math.min(2,a?.margin??to)),this.minDist=Math.max(2,s*.12),this.maxDist=v*4,o?(this.azimuth=this.azT,this.polar=12*oe,this.distance=this.distT*1.7):(this.azimuth=this.azT,this.polar=this.polT,this.distance=this.distT),this.applyPosition()}setAspect(e){this.camera.perspective({aspect:e})}frameSoft(e,o,r=!1,n){this.target.set(e.center[0],e.center[1],e.center[2]),this.targetT.copy(this.target),this.panAnchor.copy(this.target),this.panLimit=Math.max(1,e.radius)*1.5,this.syncFromCamera(),this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect});let a=this.fovY*oe/2,s=r?Math.max(.82,this.camera.aspect||1):this.camera.aspect||1,i=Math.atan(Math.tan(a)*s);this.azT=o??this.azimuth,this.polT=Math.max(15,Math.min(80,n?.polarDeg??55))*oe;let l=this.fitDistance(e,a,i,this.azT,this.polT);this.distT=l*Math.max(1.05,Math.min(2,n?.margin??to))}fitDistance(e,o,r,n,a){let s=Math.max(1,e.radius),i=Math.max(s/Math.tan(o),s/Math.tan(r)),l=e.box;if(!l)return i;let p=Math.sin(a),v=-p*Math.sin(n),c=-Math.cos(a),f=-p*Math.cos(n);if(Math.abs(c)>.999)return i;let m=-f,u=v,M=Math.hypot(m,u);m/=M,u/=M;let S=-u*c,P=u*v-m*f,R=m*c,y=Math.tan(r),A=Math.tan(o),g=1;for(let C=0;C<8;C++){let V=(C&1?l.max[0]:l.min[0])-e.center[0],D=(C&2?l.max[1]:l.min[1])-e.center[1],L=(C&4?l.max[2]:l.min[2])-e.center[2],N=V*v+D*c+L*f,E=Math.abs(V*m+L*u),G=Math.abs(V*S+D*P+L*R);g=Math.max(g,E/y-N,G/A-N)}return Math.min(i,Math.max(g,s*.35))}updateClipping(e){let o=this.camera.position.x-e.center[0],r=this.camera.position.y-e.center[1],n=this.camera.position.z-e.center[2],a=Math.hypot(o,r,n),s=Math.max(1,e.radius)*1.18,i=Math.max(.05,a-s),l=Math.max(i+10,a+s);this.camera.perspective({near:i,far:l,aspect:this.camera.aspect})}update(){let e=this.azT-this.azimuth,o=this.polT-this.polar,r=this.distT-this.distance,n=this.targetT.x-this.target.x,a=this.targetT.y-this.target.y,s=this.targetT.z-this.target.z,i=Math.max(1e-4,this.distance*1e-4),l=Math.abs(e)>1e-4||Math.abs(o)>1e-4||Math.abs(r)>1e-4||Math.abs(n)>i||Math.abs(a)>i||Math.abs(s)>i;return this.azimuth+=e*Se,this.polar+=o*Se,this.distance+=r*Se,this.target.x+=n*Se,this.target.y+=a*Se,this.target.z+=s*Se,l&&this.applyPosition(),l}get currentDistance(){return this.distance}syncFromCamera(){let e=this.camera.position.x-this.target.x,o=this.camera.position.y-this.target.y,r=this.camera.position.z-this.target.z,n=Math.hypot(e,o,r)||1,a=Math.max(bt,Math.min(yt,Math.acos(Math.max(-1,Math.min(1,o/n)))));this.distance=this.distT=n,this.polar=this.polT=a,this.azimuth=this.azT=Math.atan2(e,r)}setTarget(e){this.target.set(e[0],e[1],e[2]),this.targetT.copy(this.target)}resumeAfterFlight(e){this.camera.perspective({fov:this.fovY,aspect:this.camera.aspect}),e&&this.target.set(e[0],e[1],e[2]),this.targetT.copy(this.target),this.syncFromCamera()}applyPosition(){let e=Math.sin(this.polar),o=this.target.x+this.distance*e*Math.sin(this.azimuth),r=this.target.y+this.distance*Math.cos(this.polar),n=this.target.z+this.distance*e*Math.cos(this.azimuth);this.camera.position.set(o,r,n),this.camera.lookAt(this.target)}dispose(){this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointermove",this.onPointerMove),this.canvas.removeEventListener("pointerup",this.onPointerUp),this.canvas.removeEventListener("pointercancel",this.onPointerUp),this.canvas.removeEventListener("wheel",this.onWheel),this.canvas.removeEventListener("keydown",this.onKeyDown),this.canvas.removeEventListener("contextmenu",this.onContextMenu),this.activePointers.clear()}};var Qe=class{constructor(e){this.rafId=0;this.running=!1;this.lastTime=0;this.fpsEma=0;this.rendered=0;this.tick=e=>{let o=this.lastTime?(e-this.lastTime)/1e3:.016666666666666666;if(this.lastTime=e,o>0){let n=1/o;this.fpsEma=this.fpsEma?this.fpsEma*.9+n*.1:n}this.rendered++,this.frame(o)?this.rafId=requestAnimationFrame(this.tick):(this.running=!1,this.rafId=0)};this.frame=e}requestRender(){this.running||(this.running=!0,this.lastTime=0,this.rafId=requestAnimationFrame(this.tick))}stats(){return{fps:this.running?Math.round(this.fpsEma):0,rendered:this.rendered,idle:!this.running}}stop(){this.rafId&&cancelAnimationFrame(this.rafId),this.rafId=0,this.running=!1}};var Me=2.5,Pn=1.15,ke=6,Pe=10,oo=6,no=9.5,ro=.9,ao=2.2,xt=30,wt=4,Ke=8192;var Br=Pe+wt;function io(t,e){let o=e*1.4,r=e*3.2;if(t<=o)return{scale:1,fade:0,minPixels:Me};let n=Math.min(1,(t-o)/Math.max(.001,r-o));return{scale:1-n*.4,fade:n*.55,minPixels:Me+n*(Pn-Me)}}function so(t,e,o){return!(t>0)||!(e>0)||!(o>0)?!1:e*o/t>=64}function lo(t,e,o,r,n){if(!(t>0)||!(e>0)||!(o>0)||!(r>0)||!(n>0))return!1;let a=Math.tan(r/2*Math.PI/180);if(!(a>0))return!1;let s=e/(o*a)*(n/2);return Math.PI*s*s/t>=64}var Cn=88,An=20,St={floor:{size:14,weight:"700",opacity:.98},zone:{size:15,weight:"600",opacity:.95},section:{size:12,weight:"500",opacity:.88},ga:{size:12,weight:"500",opacity:.88},booth:{size:11,weight:"500",opacity:.85},annotation:{size:11,weight:"400",opacity:.75},row:{size:10.5,weight:"600",opacity:.8},seat:{size:9.5,weight:"500",opacity:.72}},_e=new Set(["row","seat"]),co={floor:5,zone:4,section:3,ga:3,booth:2,annotation:1},$e={row:{x:62,y:16},seat:{x:46,y:18}},uo=Gt,Mt=t=>Bt(t);function po(t,e){let o=Mt(t),r=Mt(e);return(Math.max(o,r)+.05)/(Math.min(o,r)+.05)}function Pt(t,e){let o=/rgba\((\d+),(\d+),(\d+),([\d.]+)\)/.exec(t.replace(/\s/g,""));if(!o)return e;let r=Math.max(0,Math.min(1,Number(o[4])));return[1,2,3].map(n=>Number(o[n])/255*r+e[n-1]*(1-r))}function Fn(t,e=[.04,.06,.1],o=!0){let r=Mt(e)<.42,n=r?"#f4f7fb":"#0b1220",a=r?"rgba(8,12,22,.78)":"rgba(255,255,255,.84)",s=o?Pt(a,e):e,i=uo(t),l=o?7:4.5,p=i&&po(i,s)>=l?t:n;return r?{ink:p,backing:a,border:"rgba(210,222,245,.24)"}:{ink:p,backing:a,border:"rgba(11,18,32,.22)"}}var Ze=class{constructor(e,o={}){this.nodes=new Map;this.labels=[];this.forcedDense=!1;this.selectedSeatLabelIds=new Set;this.opts=o,this.root=document.createElement("div"),this.root.setAttribute("data-view3d-labels","");let r=this.root.style;r.position="absolute",r.inset="0",r.pointerEvents="none",r.overflow="hidden",o.fontFamily&&(r.fontFamily=o.fontFamily),e.appendChild(this.root)}setVisible(e){this.root.style.visibility=e?"":"hidden"}setLabels(e){this.labels=e;for(let[o,r]of this.nodes)e.some(n=>n.id===o)||(r.remove(),this.nodes.delete(o))}setForcedDense(e){this.forcedDense=e}setSelectedSeatIds(e){this.selectedSeatLabelIds=new Set(Array.from(e,o=>`seat:${o}`))}qualityEvidence(){let e=this.root.getBoundingClientRect(),o=this.root.style.visibility!=="hidden";return this.labels.map(r=>{let n=this.nodes.get(r.id),a=n?.getBoundingClientRect(),s=!!(o&&n&&n.style.display!=="none"&&a&&a.width>0&&a.height>0);return{id:r.id,kind:r.kind,text:r.text,visible:s,renderedFontPx:n&&Number.parseFloat(n.style.fontSize)||0,contrast:n?Number(n.dataset.qualityContrast??0):0,...s&&a?{screenBox:{x:a.x-e.x,y:a.y-e.y,width:a.width,height:a.height}}:{}}})}update(e,o,r,n,a,s){if(!this.labels.length)return;let i=jt(n,a,{hasZoneLabels:this.labels.some(y=>y.kind==="zone")});this.forcedDense&&(i.add("row"),i.add("seat"));let l=[];for(let y of this.labels){if(!i.has(y.kind))continue;let A=pe(e,y.anchor,o,r);if(!A.visible)continue;let g=$t(y.text,St[y.kind].size,!_e.has(y.kind)),C=!_e.has(y.kind),V=Qt(A,g/2,St[y.kind].size/2+(C?4:1),o,r),D=s?Math.hypot(y.anchor[0]-s[0],y.anchor[1]-s[1],y.anchor[2]-s[2]):1;l.push({label:y,screen:V,focus:Jt(V,D,o,r),halfWidth:g/2,...this.selectedSeatLabelIds.has(y.id)?{priority:1}:{}})}let p=Xt(l.filter(y=>y.label.kind==="floor"),o),v=[...l.filter(y=>!_e.has(y.label.kind)&&y.label.kind!=="floor"),...p],c=Kt(v,Cn,An),f=Zt(o),m=vt(l.filter(y=>y.label.kind==="row"),$e.row.x,$e.row.y,f.row,c),u=vt(l.filter(y=>y.label.kind==="seat"),$e.seat.x,$e.seat.y,f.seat,[...c,...m]),M=[...c,...m,...u],S=new Set(M.map(y=>y.label.id));for(let{label:y,screen:A}of M){let C=this.nodeFor(y).style;C.display="",C.transform=`translate(-50%, -50%) translate(${A.x.toFixed(1)}px, ${A.y.toFixed(1)}px)`}let P=M.filter(({label:y})=>!_e.has(y.kind)).sort((y,A)=>co[A.label.kind]-co[y.label.kind]||y.screen.depth-A.screen.depth||y.focus-A.focus),R=[];for(let{label:y}of P){let A=this.nodes.get(y.id);if(!A||A.style.display==="none")continue;let g=A.getBoundingClientRect();R.some(V=>g.left<V.right+3&&g.right+3>V.left&&g.top<V.bottom+3&&g.bottom+3>V.top)?A.style.display="none":R.push(g)}for(let[y,A]of this.nodes)S.has(y)||(A.style.display="none")}nodeFor(e){let o=this.nodes.get(e.id);if(!o){o=document.createElement("div");let c=o.style;c.position="absolute",c.left="0",c.top="0",c.whiteSpace="nowrap",c.textShadow="0 1px 3px rgba(0,0,0,0.85), 0 0 8px rgba(0,0,0,0.55)",c.display="none",this.root.appendChild(o),this.nodes.set(e.id,o)}o.textContent=e.text,o.setAttribute("data-label-kind",e.kind);let r=this.selectedSeatLabelIds.has(e.id);o.toggleAttribute("data-selected-seat",r);let n=St[e.kind],a=o.style;a.fontSize=`${n.size}px`,a.fontWeight=r?"800":n.weight,a.opacity=r?"1":String(n.opacity);let s=!_e.has(e.kind),i=Fn(e.color??this.opts.ink,this.opts.backgroundRgb,s);a.color=r?"#ecf8ff":i.ink,a.background=r?"rgba(10,28,45,.9)":s?i.backing:"",a.border=r?"1px solid rgba(89,199,255,.92)":s?`1px solid ${i.border}`:"",a.borderRadius=r||s?"999px":"",a.padding=r||s?"3px 7px":"",a.boxShadow=r?"0 0 0 2px rgba(41,176,255,.18), 0 5px 14px rgba(0,0,0,.35)":s?"0 3px 10px rgba(0,0,0,.24)":"",a.letterSpacing=e.kind==="zone"||e.kind==="floor"?"0.08em":"0.02em";let l=this.opts.backgroundRgb??[.04,.06,.1],p=uo(r?"#ecf8ff":i.ink)??[1,1,1],v=r?Pt("rgba(10,28,45,.9)",l):s?Pt(i.backing,l):l;return o.dataset.qualityContrast=po(p,v).toFixed(3),(e.kind==="zone"||e.kind==="floor")&&(a.textTransform="uppercase"),o}dispose(){this.root.remove(),this.nodes.clear()}};var En=1;var Rn=new Set(["floor","zone","section","ga","booth","annotation"]);function Dn(t){return t.every(e=>Number.isFinite(e))}function Vn(t,e){return t.x<e.x+e.width&&t.x+t.width>e.x&&t.y<e.y+e.height&&t.y+t.height>e.y}function mo(t){return t.length?Math.round(Math.min(...t)*100)/100:null}function ve(t){return Math.round(t*1e4)/1e4}function In(t){if(t)return{box:{x:ve(t.box.x),y:ve(t.box.y),width:ve(t.box.width),height:ve(t.box.height)},horizontalFillRatio:ve(t.horizontalFillRatio),verticalFillRatio:ve(t.verticalFillRatio),visibleAreaRatio:ve(t.visibleAreaRatio),clippedEdges:[...t.clippedEdges]}}function ce(t,e,o){return o.length?{code:t,message:e,count:o.length,samples:o.slice(0,20)}:null}function Ct(t){let e=t.labels.filter(i=>i.visible&&i.screenBox),o=e.filter(i=>Rn.has(i.kind)),r=t.scene.floorCount>1?t.scene.floorCount:t.scene.zoneCount||t.scene.sectionCount,n=[];for(let i=0;i<o.length;i+=1)for(let l=0;l<i;l+=1)Vn(o[i].screenBox,o[l].screenBox)&&n.push({primaryId:o[i].id,primaryLabel:o[i].text,secondaryId:o[l].id});let a=[...t.camera.position,t.camera.distance,t.camera.verticalFovDeg],s=[ce("webgl2-unavailable","The venue scene must render through WebGL2",t.context.webgl2?[]:[{primaryId:"renderer",primaryLabel:"WebGL2"}]),ce("context-lost","The WebGL context must be live at capture",t.context.lost?[{primaryId:"renderer",primaryLabel:"context lost"}]:[]),ce("frame-not-stable","The captured 3D frame must be rendered and parked",t.frame.rendered>0&&t.frame.idle?[]:[{primaryId:"renderer",primaryLabel:"unstable frame"}]),ce("viewport-empty","The 3D viewport must have visible dimensions",t.viewport.width>1&&t.viewport.height>1?[]:[{primaryId:"viewport",primaryLabel:`${t.viewport.width}\xD7${t.viewport.height}`}]),ce("camera-invalid","The capture camera must have a finite physical pose",Dn(a)&&t.camera.distance>0&&t.camera.verticalFovDeg>0&&t.camera.verticalFovDeg<180?[]:[{primaryId:"camera",primaryLabel:"invalid pose"}]),ce("authored-relief-not-visible","Authored 3D height or rake must produce visible screen-space relief",!t.scene.authoredRelief||t.scene.renderedVerticalSpanM>.05&&t.scene.projectedReliefPx>=2?[]:[{primaryId:"scene",primaryLabel:"authored relief",measured:t.scene.projectedReliefPx,minimum:2}]),ce("hierarchy-label-missing","A venue with authored hierarchy must show at least one structural label",r===0||o.length>0?[]:[{primaryId:"labels",primaryLabel:`${r} expected hierarchy labels`}]),ce("hierarchy-label-undersized","Visible 3D hierarchy labels must remain readable",o.filter(i=>i.renderedFontPx<11).map(i=>({primaryId:i.id,primaryLabel:i.text,measured:i.renderedFontPx,minimum:11}))),ce("hierarchy-label-contrast-low","Visible 3D hierarchy labels must meet text contrast",o.filter(i=>i.contrast<4.5).map(i=>({primaryId:i.id,primaryLabel:i.text,measured:i.contrast,minimum:4.5}))),ce("hierarchy-label-collision","Visible 3D hierarchy labels must not overlap",n)].filter(i=>!!i);return{version:1,state:"venue3d",passed:s.length===0,resolvedRules:["rendered-3d-webgl-context","rendered-3d-stable-frame","rendered-3d-camera-pose","rendered-3d-relief-projection","rendered-3d-label-size","rendered-3d-label-contrast","rendered-3d-label-collision"],viewport:t.viewport,context:t.context,frame:t.frame,camera:t.camera,scene:t.scene,composition:{visibleLabels:e.map(({id:i,kind:l,text:p})=>({id:i,kind:l,text:p})).sort((i,l)=>i.kind.localeCompare(l.kind)||i.id.localeCompare(l.id)),framing:In(t.framing)},metrics:{minimumHierarchyFontPx:mo(o.map(i=>i.renderedFontPx)),minimumHierarchyContrast:mo(o.map(i=>i.contrast)),projectedReliefPx:Math.round(t.scene.projectedReliefPx*100)/100},findings:s}}import{Geometry as Le,Mesh as ze,Program as Xn,Texture as jn,Transform as Mo}from"ogl";import{Program as ge}from"ogl";var Je=`
2
2
  float chairWeight(float depth) {
3
3
  return 1.0 - smoothstep(uChairFull, uChairNone, depth);
4
4
  }`,ho=`