@seatlayer/js 0.53.0 → 0.55.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.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{a as H,b as j,c as I,d as N}from"./chunk-OSZ7DOEH.js";import{PickerController as Ot,loadLocale as Bt,setStringOverrides as zt,t as ne}from"@seatlayer/core";var X="seatlayer.v1";function Tt(a){let e=typeof a.default=="string"?a.default:"free",t={};if(a.seats&&typeof a.seats=="object")for(let[i,s]of Object.entries(a.seats))typeof s=="string"&&s!==e&&(t[i]=s);return{default:e,exceptions:t}}function Ct(a,e){if(!a||a.default!==e.default)return null;let t=[];for(let[i,s]of Object.entries(e.exceptions))a.exceptions[i]!==s&&t.push({label:i,status:s});for(let i of Object.keys(a.exceptions))i in e.exceptions||t.push({label:i,status:e.default});return t}function At(a,e){for(let t of e)t.status===a.default?delete a.exceptions[t.label]:a.exceptions[t.label]=t.status}function qe(a){if(/(?:^|[?&#])(?:token|access_token|bearer|authorization|ticket|tkt|bse)=/i.test(a))throw new Error("seatlayer: refusing to open a socket with a credential in the URL");if(/\bbse_[A-Za-z0-9._-]+/.test(a))throw new Error("seatlayer: refusing to open a socket with a credential in the URL")}var U=class{constructor(e){this.ws=null;this.stopped=!0;this.attempt=0;this.reconnectTimer=null;this.pingTimer=null;this.pongTimer=null;this.resumeTimer=null;this.projection=null;this.version=null;this.v1=!1;this.useQueryMarker=!1;this.hidden=null;this.closedSections=null;this.opts=e,qe(e.url)}get protocol(){return this.ws?this.v1?"v1":"legacy":null}get snapshotVersion(){return this.version}start(){this.stopped&&(this.stopped=!1,this.connect())}stop(){this.stopped=!0,this.clearTimers();let e=this.ws;if(this.ws=null,e){e.onopen=null,e.onmessage=null,e.onclose=null,e.onerror=null;try{e.close()}catch{}}}restart(){this.stop(),this.projection=null,this.version=null,this.attempt=0,this.start()}async connect(){if(this.stopped)return;let e=[X];if(this.opts.mintTicket){let r;try{r=await this.opts.mintTicket()}catch(n){this.reportIfAccessError(n),this.scheduleReconnect();return}if(this.stopped)return;r?.protocols?.length?(e=[...r.protocols],e.includes(X)||e.unshift(X)):r?.ticket&&(e=[X,`tkt.${r.ticket}`])}let t=this.version!==null;t&&e.push(`sv.${this.version}`);let i=this.useQueryMarker?`${this.opts.url}${this.opts.url.includes("?")?"&":"?"}pv=1`:this.opts.url;qe(i);let s;try{s=(this.opts.socketFactory??((n,o)=>new WebSocket(n,o)))(i,e)}catch{this.scheduleReconnect();return}this.ws=s,s.onopen=()=>{this.ws===s&&(this.attempt=0,this.v1=s.protocol===X,this.v1||(this.useQueryMarker=!0),this.startKeepalive(s),t?this.resumeTimer=setTimeout(()=>{this.resumeTimer=null,this.opts.sink.resync()},5e3):this.opts.sink.resync())},s.onmessage=r=>{if(this.ws!==s)return;let n;try{n=JSON.parse(typeof r.data=="string"?r.data:"")}catch{return}!n||typeof n!="object"||this.handleFrame(n)},s.onclose=r=>{if(this.ws===s){if(this.ws=null,this.clearTimers(),r?.code===4401){this.stopped=!0,this.opts.onAccessUnavailable?.({reason:"revoked",code:"access_revoked",retryable:!1});return}this.scheduleReconnect()}},s.onerror=()=>{try{s.close()}catch{}}}handleFrame(e){let t=typeof e.type=="string"?e.type:"";if(e.protocol===1&&(this.v1=!0),typeof e.snapshotVersion=="number"&&(this.version=e.snapshotVersion),t==="pong"){this.clearPongTimer();return}if(Array.isArray(e.hidden)||Array.isArray(e.closed)){let i=Array.isArray(e.hidden)?e.hidden:[],s=Array.isArray(e.closed)?e.closed:[],r=i.join("\0"),n=s.join("\0");(r!==this.hidden||n!==this.closedSections)&&(this.hidden=r,this.closedSections=n,this.opts.sink.onSections?.(i,s))}if(t!=="hidden"){if(t==="presence"){this.opts.sink.onPresence?.({shoppingSessions:Number(e.shoppingSessions)||0,activeHolds:Number(e.activeHolds)||0});return}if(t!=="allocation"){if(t==="snapshot"||!t&&e.seats){this.answered();let i=Tt(e),s=Ct(this.projection,i);this.projection=i,s===null?this.opts.sink.applyProjection?this.opts.sink.applyProjection(i):this.opts.sink.resync():s.length&&this.opts.sink.applyStatuses(s);return}if(t==="delta"&&Array.isArray(e.changes)){this.answered();let i=e.changes.filter(s=>typeof s?.label=="string"&&typeof s?.status=="string").map(s=>({label:s.label,status:s.status}));if(!i.length)return;this.projection&&At(this.projection,i),this.opts.sink.applyStatuses(i)}}}}answered(){this.resumeTimer&&(clearTimeout(this.resumeTimer),this.resumeTimer=null)}reportIfAccessError(e){let t=e?.reason;e?.name==="BuyerAccessUnavailableError"&&(this.stopped=!0,this.opts.onAccessUnavailable?.({reason:t??"invalid",code:e.code,status:e.status,retryable:t==="paused"}))}startKeepalive(e){this.pingTimer=setInterval(()=>{if(this.ws===e){try{e.send(JSON.stringify({type:"ping"}))}catch{return}this.clearPongTimer(),this.pongTimer=setTimeout(()=>{this.pongTimer=null;try{e.close()}catch{}},1e4)}},25e3)}scheduleReconnect(){if(this.stopped||this.reconnectTimer)return;let e=Math.min(this.attempt++,5),t=Math.min(1e3*2**e,15e3),i=Math.random()*t;this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},i)}clearPongTimer(){this.pongTimer&&(clearTimeout(this.pongTimer),this.pongTimer=null)}clearTimers(){this.pingTimer&&clearInterval(this.pingTimer),this.pingTimer=null,this.clearPongTimer(),this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null,this.resumeTimer&&clearTimeout(this.resumeTimer),this.resumeTimer=null}};function Lt(a){return a==="blocked"?"not_for_sale":a==="held"||a==="booked"||a==="free"||a==="not_for_sale"?a:"free"}function le(a,e={}){let t=i=>{let s=a.tableSelection(i);if(s)return s.physicalSeatIds;let r=a.idForLabel(i);return r?[r]:[]};return{applyStatuses(i){let s=a.currentHold()?.labels??[],r={free:[],held:[],booked:[],not_for_sale:[]},n=[],o=[],c=new Map(a.getSelection().map(l=>[l.label,l.id]));for(let l of i){let p=t(l.label);if(!p.length)continue;let d=Lt(l.status);if(r[d].push(...p),e.flashOnLiveChange&&d!=="free"&&!s.includes(l.label)&&p.some(h=>a.getStatus(h)==="free")){let h=d==="held"?"#f4b740":"#f43f5e";for(let b of p)n.push({id:b,color:h})}d!=="free"&&!s.includes(l.label)&&c.has(l.label)&&o.push(l.label)}for(let l of["free","held","booked","not_for_sale"])r[l].length&&a.setStatus(r[l],l);for(let l of n)a.flashSeat(l.id,l.color);if(o.length){let l=o.flatMap(d=>t(d));l.length&&a.deselect(l);let p=i.some(d=>d.status==="blocked"&&o.includes(d.label));e.onSelectedObjectUnavailable?.(o,p?"ineligible":"taken")}e.onStatusChange?.()},async resync(){await a.refresh()},onSections(i,s){a.refresh(),e.onSections?.(i,s)}}}var ee=class extends Error{constructor(e,t,i,s,r,n){super(t),this.name="ApiError",this.status=e,this.code=i,this.conflicts=s,this.reason=r,this.retryAfterS=n}},Ke=10,We=1;function Ge(a,e){let t=(a??"").trim();if(t){let i=Number(t);if(Number.isFinite(i)&&i>=0)return Math.ceil(i);let s=Date.parse(t);if(Number.isFinite(s))return Math.max(0,Math.ceil((s-Date.now())/1e3))}if(typeof e=="number"&&Number.isFinite(e)&&e>=0)return Math.ceil(e)}var Mt={seat_conflict:"taken",conflict:"taken",channel_assignment_conflict:"ineligible",allocation_exhausted:"exhausted"},te=class{constructor(e,t={}){this.base=e;this.viewerId=typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`viewer_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;this.access=t.access,this.onObjectUnavailable=t.onObjectUnavailable}get accessScoped(){return!!this.access?.configured}async request(e,t={},i={}){let s=t.method??"GET",r={},n;t.body!==void 0&&(r["Content-Type"]="application/json",n=JSON.stringify(t.body));let o=await this.access?.authorization(i.auth?"unauthorized":"initial");o&&(r.Authorization=o);let c=await fetch(`${this.base}${e}`,{method:s,headers:r,body:n,credentials:"omit"}),p=(c.headers.get("content-type")??"").includes("application/json")?await c.json().catch(()=>null):null;if(!c.ok){let d=p,h=d?.code??d?.error;if(this.access?.configured&&(c.status===401||c.status===403||c.status===422)&&await this.access.handleFailure(c.status,h)&&!i.auth)return this.request(e,t,{...i,auth:!0});if(c.status===409){let m=h?Mt[h]:void 0,f=d?.conflicts?.map(S=>S.label)??t.labels??[];m&&this.onObjectUnavailable?.({labels:f,reason:m,code:h})}let b;if(c.status===429&&(b=Ge(c.headers.get("Retry-After"),d?.retryAfterSeconds)??We,s==="GET"&&!i.rateLimit&&b<=Ke))return await new Promise(m=>setTimeout(m,b*1e3)),this.request(e,t,{...i,rateLimit:!0});throw new ee(c.status,d?.error??`request_failed_${c.status}`,h,d?.conflicts,d?.reason,b)}return p}async requestBlob(e,t={}){let i={},s=await this.access?.authorization(t.auth?"unauthorized":"initial");s&&(i.Authorization=s);let r=await fetch(`${this.base}${e}`,{method:"GET",headers:i,credentials:"omit"});if(r.ok)return r.blob();let o=(r.headers.get("content-type")??"").includes("application/json")?await r.json().catch(()=>null):null,c=o?.code??o?.error;if(this.access?.configured&&(r.status===401||r.status===403||r.status===422)&&await this.access.handleFailure(r.status,c)&&!t.auth)return this.requestBlob(e,{...t,auth:!0});let l;if(r.status===429&&(l=Ge(r.headers.get("Retry-After"),o?.retryAfterSeconds)??We,!t.rateLimit&&l<=Ke))return await new Promise(p=>setTimeout(p,l*1e3)),this.requestBlob(e,{...t,rateLimit:!0});throw new ee(r.status,o?.error??`request_failed_${r.status}`,c,void 0,void 0,l)}chart(e){return this.request(`/pub/events/${encodeURIComponent(e)}/chart`)}asset(e,t){return/^[a-zA-Z0-9._-]+$/.test(t)?this.requestBlob(`/pub/events/${encodeURIComponent(e)}/assets/${encodeURIComponent(t)}`):Promise.reject(new ee(404,"not_found","not_found"))}objects(e){return this.request(`/pub/events/${encodeURIComponent(e)}/objects?compact=1`)}hold(e,t,i,s){return this.request(`/pub/events/${encodeURIComponent(e)}/hold`,{method:"POST",body:{selections:t,...i?{ttlMs:i}:{},...s?{replaceHoldId:s}:{}},labels:t.map(r=>r.label)})}bestAvailable(e,t,i,s,r){return this.request(`/pub/events/${encodeURIComponent(e)}/best-available`,{method:"POST",body:{qty:t,...i?{categoryKey:i}:{},...s?{zoneId:s}:{},...r?{ttlMs:r}:{}}})}resume(e,t){return this.request(`/pub/events/${encodeURIComponent(e)}/hold/resume`,{method:"POST",body:{holdId:t}})}release(e,t,i){return this.request(`/pub/events/${encodeURIComponent(e)}/release`,{method:"POST",body:{labels:t,holdId:i}})}extend(e,t,i){return this.request(`/pub/events/${encodeURIComponent(e)}/extend`,{method:"POST",body:{holdId:t,...i?{ttlMs:i}:{}}})}paymentOptions(e){return this.request(`/pub/events/${encodeURIComponent(e)}/payment-options`)}availability(e,t=!1){return this.request(`/pub/events/${encodeURIComponent(e)}/availability${t?"?live=1":""}`)}startCheckout(e,t){return this.request(`/pub/events/${encodeURIComponent(e)}/checkout`,{method:"POST",body:t})}orderStatus(e){return this.request(`/pub/orders/${encodeURIComponent(e)}/status`)}subscribeTicket(e){return this.request(`/pub/events/${encodeURIComponent(e)}/subscribe-tickets`,{method:"POST",body:{}})}subscribeUrl(e){let t=this.base.replace(/^http/,"ws"),i=new URLSearchParams({surface:"picker",viewerId:this.viewerId});return`${t}/pub/events/${encodeURIComponent(e)}/subscribe?${i}`}socketUrl(e){return this.accessScoped?"":this.subscribeUrl(e)}socketProtocols(e){return this.accessScoped?[]:[X]}createRealtime(e,t){return this.accessScoped?null:new U({url:this.subscribeUrl(e),sink:t})}};var ce=class extends Error{constructor(e){super(`buyer_access_unavailable:${e.reason}`),this.name="BuyerAccessUnavailableError",this.reason=e.reason,this.code=e.code,this.status=e.status}},Pt=new Set(["buyer_access_expired"]),Ht=new Set(["paused","provider_failed","channel_denied"]);function Rt(a,e){switch(e){case"buyer_access_invalid":return"invalid";case"buyer_access_revoked":return"revoked";case"buyer_access_origin_mismatch":return"origin_mismatch";case"buyer_access_event_mismatch":return"event_mismatch";case"buyer_access_mode_mismatch":return"mode_mismatch";case"channel_access_denied":return"channel_denied";case"channel_paused":return"paused";case"invalid_channel_scope":return"invalid_scope";default:break}return a===401?"invalid":null}function $t(a,e){return a===401&&!!e&&Pt.has(e)}var It=3e4,F,D,se,de,G,q,re,pe,he,ue,_,Ce,ve,ie,ge=class{constructor(e){j(this,_);j(this,F,null);j(this,D,0);j(this,se);j(this,de);j(this,G,null);j(this,q,null);j(this,re,null);j(this,pe);j(this,he);j(this,ue,!1);if(I(this,se,e.provider),I(this,de,e.skewMs??It),I(this,pe,e.onExpired),I(this,he,e.onUnavailable),e.token){let t=typeof e.token=="string"?{token:e.token}:e.token;N(this,_,Ce).call(this,t)}I(this,ue,!!H(this,se)||!!H(this,F))}get configured(){return H(this,ue)}get unavailable(){return H(this,q)}get hasToken(){return!!H(this,F)&&(H(this,D)===0||H(this,D)>Date.now())}get expiresAt(){return H(this,D)}async authorization(e="initial"){if(!this.configured)return null;if(H(this,q))throw new ce(H(this,q));let t=Date.now();if(!H(this,F)||H(this,D)>0&&H(this,D)-H(this,de)<=t){let s=!!H(this,F)&&H(this,D)>0&&H(this,D)<=t,r=H(this,F)?s?"expired":"expiring":e,n=await N(this,_,ve).call(this,r);if(!n)throw new ce(H(this,q)??H(this,re)??N(this,_,ie).call(this,"provider_failed"));return`Bearer ${n}`}return`Bearer ${H(this,F)}`}async handleFailure(e,t){var s;if(!this.configured)return!1;if($t(e,t)){I(this,F,null),I(this,D,0);let r=await N(this,_,ve).call(this,"unauthorized",t);return(s=H(this,pe))==null||s.call(this,{reason:"unauthorized",code:t,refreshed:!!r}),!!r}let i=Rt(e,t);return i&&N(this,_,ie).call(this,i,t,e),!1}async refresh(e="manual"){return I(this,q,null),I(this,re,null),I(this,F,null),I(this,D,0),!!await N(this,_,ve).call(this,e)}clear(){I(this,F,null),I(this,D,0),I(this,G,null)}toJSON(){return{configured:this.configured,hasToken:this.hasToken}}toString(){return"[BuyerAccessContext redacted]"}};F=new WeakMap,D=new WeakMap,se=new WeakMap,de=new WeakMap,G=new WeakMap,q=new WeakMap,re=new WeakMap,pe=new WeakMap,he=new WeakMap,ue=new WeakMap,_=new WeakSet,Ce=function(e){return!e||typeof e.token!="string"||!e.token?null:(I(this,F,e.token),I(this,D,typeof e.expiresAt=="number"?e.expiresAt:0),H(this,F))},ve=function(e,t){if(H(this,G))return H(this,G);let i=H(this,se);if(!i)return N(this,_,ie).call(this,"no_token",t),Promise.resolve(null);let s=(async()=>{try{let r=await i({reason:e}),n=N(this,_,Ce).call(this,r);return n||(N(this,_,ie).call(this,"provider_failed",t),null)}catch{return N(this,_,ie).call(this,"provider_failed",t),null}finally{I(this,G,null)}})();return I(this,G,s),s},ie=function(e,t,i){var r;let s={reason:e,code:t,status:i,retryable:e==="paused"||e==="channel_denied"};return I(this,re,s),Ht.has(e)||(I(this,q,s),I(this,F,null),I(this,D,0)),(r=H(this,he))==null||r.call(this,s),s};function me(a,e={}){return!a.buyerAccessTokenProvider&&!a.buyerAccessToken?null:new ge({provider:a.buyerAccessTokenProvider,token:a.buyerAccessToken,...e})}var ye='<svg viewBox="0 0 64 56" width="12" height="11" fill="none" aria-hidden="true" focusable="false" style="display:block"><path d="M4 13 Q16 6 29 7 L28.5 17 Q17 16.5 7 22 Z" fill="#f4b740"/><path d="M4 13 Q16 6 29 7 L28.5 17 Q17 16.5 7 22 Z" fill="#f4b740" transform="translate(64 0) scale(-1 1)"/><path d="M8 28 Q18 22 28.6 23 L28.2 32 Q18 28.5 10 36 Z" fill="#fcf7ee"/><path d="M8 28 Q18 22 28.6 23 L28.2 32 Q18 28.5 10 36 Z" fill="#fcf7ee" transform="translate(64 0) scale(-1 1)"/><path d="M11 41 Q19 35 28.2 36 L27.8 45 Q19.5 42 13.5 49 Z" fill="#fcf7ee"/><path d="M11 41 Q19 35 28.2 36 L27.8 45 Q19.5 42 13.5 49 Z" fill="#fcf7ee" transform="translate(64 0) scale(-1 1)"/></svg>';var Ft="https://api.seatlayer.io",Dt=10;function _t(a){if(typeof a=="string"){let e=document.querySelector(a);if(!e)throw new Error(`seatmap: container "${a}" not found`);return e}if(!(a instanceof HTMLElement))throw new Error("seatmap: container must be a CSS selector or an HTMLElement");return a}var Ae=class{constructor(e){this.mount=null;this.hostEl=null;this.rendered=!1;this.mode_=null;this.tipEl=null;this.tipPos={x:0,y:0};this.onTipMove=null;this.realtime=null;if(!e||typeof e!="object")throw new Error("seatmap: options object is required");if(!e.container)throw new Error("seatmap: `container` is required");if(!e.event||typeof e.event!="string")throw new Error("seatmap: `event` key is required");this.opts=e,this.publicKey=e.publicKey,this.access=me(e,{onExpired:i=>this.opts.onAccessExpired?.(i),onUnavailable:i=>this.opts.onAccessUnavailable?.(i)});let t=new te((e.apiBase??Ft).replace(/\/+$/,""),{access:this.access??void 0,onObjectUnavailable:i=>this.opts.onSelectedObjectUnavailable?.(i)});this.api=t,this.controller=new Ot({transport:t,eventKey:e.event,maxSelection:e.maxSelection??Dt,currency:e.currency,onSelectionChange:i=>this.opts.onSelectionChange?.(i),onHold:i=>this.opts.onHold?.({holdId:i.holdId,expiresAt:i.expiresAt,seats:i.seats,items:i.items}),onHoldRestored:i=>this.opts.onHoldRestored?.({holdId:i.holdId,expiresAt:i.expiresAt,seats:i.seats,items:i.items}),onHoldExpired:()=>this.opts.onHoldExpired?.(),onGAClick:i=>{let s=this.controller.getGAAreas().find(r=>r.id===i);s&&this.opts.onGAClick?.(s)},onError:i=>this.opts.onError?.(i),onDeckTap:i=>this.opts.onDeckTap?.(i),onHint:i=>this.opts.onHint?.(i),flashOnLiveChange:!0,onSeatHover:i=>{this.opts.onSeatHover?.(i),this.opts.seatTooltip!==!1&&this.updateTooltip(i)},colorblindSafe:e.colorblindSafe})}async render(){if(this.rendered)return this;this.rendered=!0,await Bt(this.opts.locale),this.opts.messages&&zt(this.opts.messages),this.mount=_t(this.opts.container);let e=document.createElement("div");e.style.width="100%",e.style.height="100%",e.style.position="relative",this.mount.appendChild(e),this.hostEl=e;let t=await this.controller.render(e);if(!t)return this.rendered=!1,this.opts.errorDisplay!=="none"&&this.showLoadFailure(e),this;if(this.controller.setViewMode(this.opts.initialView??"flat"),this.startRealtime(),this.mode_=t.mode==="test"?"test":"live",this.opts.seatTooltip!==!1){let i=document.createElement("div");i.setAttribute("role","tooltip"),i.style.cssText='position:absolute;z-index:7;pointer-events:none;display:none;max-width:240px;background:#10162a;color:#fff;border-radius:10px;padding:9px 12px;font:500 12px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;box-shadow:0 10px 30px -10px rgba(0,0,0,.5);',e.appendChild(i),this.tipEl=i,this.onTipMove=s=>{let r=e.getBoundingClientRect();this.tipPos={x:s.clientX-r.left,y:s.clientY-r.top},this.tipEl&&this.tipEl.style.display!=="none"&&this.placeTooltip()},e.addEventListener("mousemove",this.onTipMove)}if(t.mode==="test"){e.style.overflow="hidden";let i=document.createElement("div");i.textContent=ne("picker.testMode"),i.setAttribute("aria-label",ne("picker.testMode")),i.style.cssText="position:absolute;top:18px;right:-34px;z-index:6;transform:rotate(45deg);width:140px;text-align:center;padding:4px 0;background:#f4b740;color:#1a1200;font:800 10.5px/1.4 -apple-system,BlinkMacSystemFont,sans-serif;letter-spacing:.12em;box-shadow:0 2px 8px rgba(0,0,0,.25);pointer-events:none;",e.appendChild(i)}return this.buildBadge(e),this}buildBadge(e){if(this.controller.doc?.theme?.hideBadge)return;let t=document.createElement("a");t.href="https://seatlayer.io",t.target="_blank",t.rel="noopener noreferrer",t.setAttribute("aria-label",ne("picker.poweredBy")),t.style.cssText='position:absolute;bottom:10px;right:12px;z-index:5;display:inline-flex;align-items:center;gap:6px;padding:5px 9px;border-radius:999px;background:rgba(255,255,255,.92);color:#4a5163;text-decoration:none;font:600 11px/1 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;letter-spacing:.02em;box-shadow:0 2px 8px rgba(0,0,0,.12);',t.innerHTML='<span aria-hidden="true" style="width:16px;height:16px;border-radius:4px;flex:none;display:flex;align-items:center;justify-content:center;background:#0c1220;color:#fcf7ee">'+ye+`</span><span>${ne("picker.poweredBy")}</span>`,e.appendChild(t)}placeTooltip(){if(!this.tipEl||!this.hostEl)return;let e=this.hostEl.clientWidth,t=this.tipEl.offsetWidth,i=this.tipEl.offsetHeight,s=this.tipPos.x+14,r=this.tipPos.y-i-12;s+t>e-8&&(s=this.tipPos.x-t-14),r<8&&(r=this.tipPos.y+18),this.tipEl.style.left=`${Math.max(8,s)}px`,this.tipEl.style.top=`${Math.max(8,r)}px`}updateTooltip(e){if(!this.tipEl)return;if(!e){this.tipEl.style.display="none";return}let t=(()=>{try{return new Intl.NumberFormat(void 0,{style:"currency",currency:e.currency}).format(e.price)}catch{return`${e.price} ${e.currency}`}})(),i=e.status==="free"?"":`<div style="margin-top:5px;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:#fca5a5;font-weight:700">${e.status==="held"?ne("map.statusHeld"):ne("map.statusTaken")}</div>`;this.tipEl.innerHTML=`<div style="font-weight:700;font-size:13px">${e.label}</div><div style="display:flex;align-items:center;gap:6px;margin-top:4px;color:#c7cddc"><span style="width:9px;height:9px;border-radius:50%;flex:none;background:${e.categoryColor}"></span><span>${e.categoryLabel}</span><span style="margin-left:auto;font-weight:700;color:#fff">${t}</span></div>`+i,this.tipEl.style.display="block",this.placeTooltip()}getMode(){return this.mode_}getSelection(){return this.controller.getSelection()}async hold(e={}){try{return await this.holdOrThrow(e)}catch(t){return this.opts.onError?.(t),null}}async holdOrThrow(e={}){let t=await this.controller.hold(void 0,e.ttlMs);return t?{holdId:t.holdId,expiresAt:t.expiresAt,seats:t.seats,items:t.items}:null}async resumeHold(e){try{return await this.resumeHoldOrThrow(e)}catch(t){return this.opts.onError?.(t),null}}async resumeHoldOrThrow(e){let t=await this.controller.resumeHold(e);return t?{holdId:t.holdId,expiresAt:t.expiresAt,seats:t.seats,items:t.items}:null}async extendHold(e){try{let t=await this.controller.extendHold(e);return t?{holdId:t.holdId,expiresAt:t.expiresAt,seats:t.seats,items:t.items}:null}catch(t){return this.opts.onError?.(t),null}}getCurrentHold(){let e=this.controller.currentHold();return e?{holdId:e.holdId,expiresAt:e.expiresAt,seats:e.seats,items:e.items}:null}getGAAreas(){return this.controller.getGAAreas()}async holdGA(e,t,i={}){try{return await this.holdGAOrThrow(e,t,i)}catch(s){return this.opts.onError?.(s),null}}async holdGAOrThrow(e,t,i={}){let s=await this.controller.holdGA(e,t,i);return s?{holdId:s.holdId,expiresAt:s.expiresAt,seats:s.seats,items:s.items}:null}async bestAvailable(e,t,i={}){try{return await this.bestAvailableOrThrow(e,t,i)}catch(s){return this.opts.onError?.(s),null}}async bestAvailableOrThrow(e,t,i={}){let s=await this.controller.bestAvailable(e,t,i);return s?{holdId:s.holdId,expiresAt:s.expiresAt,labels:s.labels,seats:s.seats,items:s.items,...i.zoneId?{zoneId:i.zoneId}:{}}:null}setSeatTier(e,t){this.controller.setSeatTier(e,t)}getFloors(){return this.controller.getFloors()}setFloor(e){if(this.controller.getFloors().length<=1){console.warn("seatmap: setFloor() ignored \u2014 this chart has a single floor");return}this.controller.setFloor(e)}setColorblindSafe(e){this.controller.setColorblindSafe(e)}setViewMode(e){this.controller.setViewMode(e)}getViewMode(){return this.controller.getViewMode()}zoomIn(){this.controller.zoomIn()}zoomOut(){this.controller.zoomOut()}zoomToFit(){this.controller.zoomToFit()}async release(){await this.controller.release()}async releaseLabels(e){return this.controller.releaseLabels(e)}startRealtime(){!this.access?.configured||this.realtime||(this.realtime=new U({url:this.api.subscribeUrl(this.opts.event),mintTicket:()=>this.api.subscribeTicket(this.opts.event),onAccessUnavailable:e=>this.opts.onAccessUnavailable?.(e),sink:le(this.controller,{flashOnLiveChange:!0,onSelectedObjectUnavailable:(e,t)=>this.opts.onSelectedObjectUnavailable?.({labels:e,reason:t})})}),this.realtime.start())}async refreshAccess(){if(!this.access?.configured)return!1;let e=await this.access.refresh("manual");return e&&(await this.controller.refresh(),this.realtime?.restart(),this.realtime||this.startRealtime()),e}showLoadFailure(e){let t=document.createElement("div");t.setAttribute("role","status"),t.style.cssText='display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;width:100%;height:100%;min-height:180px;box-sizing:border-box;padding:24px;text-align:center;font:500 14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#3b4256;';let i=document.createElement("div");i.textContent="The seat map didn\u2019t load.",t.appendChild(i);let s=document.createElement("button");s.type="button",s.textContent="Try again",s.style.cssText="appearance:none;border:1px solid #c9cede;background:#fff;color:#10162a;border-radius:8px;padding:8px 16px;font:600 13px/1 inherit;cursor:pointer;",s.addEventListener("click",()=>{this.destroy(),this.render().catch(r=>this.opts.onError?.(r))}),t.appendChild(s),e.appendChild(t)}destroy(){this.realtime?.stop(),this.realtime=null,this.access?.clear(),this.hostEl&&this.onTipMove&&this.hostEl.removeEventListener("mousemove",this.onTipMove),this.tipEl=null,this.onTipMove=null,this.controller.destroy(),this.hostEl&&this.hostEl.parentNode&&this.hostEl.parentNode.removeChild(this.hostEl),this.hostEl=null,this.mount=null,this.rendered=!1,this.mode_=null}};var Ye=["hold","resumeHold","getCurrentHold","getGAAreas","holdGA","bestAvailable","release","releaseLabels","getSelection","setSeatTier","getFloors","setFloor","setColorblindSafe","zoomIn","zoomOut","zoomToFit","refreshAccess"],jt={hold:()=>Promise.resolve(null),resumeHold:()=>Promise.resolve(null),getCurrentHold:()=>null,getGAAreas:()=>[],holdGA:()=>Promise.resolve(null),bestAvailable:()=>Promise.resolve(null),release:()=>Promise.resolve(),releaseLabels:()=>Promise.resolve(!1),getSelection:()=>[],setSeatTier:()=>{},getFloors:()=>[],setFloor:()=>{},setColorblindSafe:()=>{},zoomIn:()=>{},zoomOut:()=>{},zoomToFit:()=>{},refreshAccess:()=>Promise.resolve(!1)};function Nt(a){let e={};for(let t of Ye)e[t]=(...i)=>{let s=a();return s?s[t](...i):jt[t]()};return e}var Xe=["event","apiBase","maxSelection","publicKey","locale","currency","colorblindSafe","initialView","errorDisplay"],Qe=[...Xe,"messages","seatTooltip","buyerAccessTokenProvider","buyerAccessToken"],Ze=["onSelectionChange","onHold","onHoldRestored","onHoldExpired","onGAClick","onError","onDeckTap","onHint","onSeatHover","onAccessExpired","onAccessUnavailable","onSelectedObjectUnavailable"];function Vt(a,e,t){let i={container:a};for(let s of Qe)i[s]=e[s];for(let s of Ze)i[s]=t[s];return i}var Ut=new Set(["seatlayer.designer.ready","seatlayer.designer.saved","seatlayer.designer.published","seatlayer.designer.close","seatlayer.designer.error"]),qt=2e4,Kt=480,Wt=180*1e3,Gt=900*1e3,Yt=.8,Xt=30*1e3,Qt=1e5,Zt=4,Jt=50;function Le(a){if(typeof a!="string")return a;let e=document.querySelector(a);if(!e)throw new Error(`EmbeddedDesigner container not found: ${a}`);return e}function ei(a){let e=(a??"").toLowerCase();return e.includes("expire")||e.includes("revoke")||e==="401"?"expired":e.includes("mismatch")?"mismatch":e.includes("timeout")?"timeout":"load"}var ti={expired:{title:"This design session expired",body:"For your security, editing sessions are short-lived. Start a fresh one to keep designing."},mismatch:{title:"This editor doesn't match this chart",body:"The session that loaded belongs to a different chart or workspace. Reopen the designer to continue."},timeout:{title:"The designer is taking too long",body:"It did not finish loading in time. This is usually a slow connection \u2014 try again."},load:{title:"We couldn't load the designer",body:"Something went wrong while opening the editor. Please try again."}},Me=class{constructor(e){this.frame=null;this.designerOrigin="";this.overlay=null;this.timeoutTimer=null;this.renewTimer=null;this.autoRecoverUsed=!1;this.phase="loading";this.identityEstablished=!1;this.restoreContainerPosition=null;this.pinned=!1;this.frameStyleBeforeFs=null;this.docOverflowBeforeFs=null;this.bodyOverflowBeforeFs=null;this.fsKeyHandler=null;this.lastAutoHeight="";this.fillRaf=null;this.reprobeRaf=null;this.fillListening=!1;this.containerEl=null;this.fillMode=null;this.resizeObs=null;this.scheduleFill=()=>{this.fillRaf===null&&(this.fillRaf=requestAnimationFrame(()=>{this.fillRaf=null,this.applyFill()}))};this.scheduleReprobe=()=>{this.reprobeRaf===null&&(this.reprobeRaf=requestAnimationFrame(()=>{this.reprobeRaf=null,!this.pinned&&(this.fillMode=this.detectFillMode(),this.syncContainerObserver(),this.applyFill())}))};this.handleMessage=e=>{if(!this.frame||e.origin!==this.designerOrigin||e.source!==this.frame.contentWindow||!e.data||typeof e.data!="object")return;let t=e.data;if(t.type==="seatlayer.designer.resize"){!this.fillEnabled()&&this.autoResizeEnabled()&&typeof t.px=="number"&&Number.isFinite(t.px)&&t.px>0&&(this.lastAutoHeight=`${Math.round(t.px)}px`,this.pinned||this.setFrameHeight(this.lastAutoHeight));return}if(t.type==="seatlayer.designer.fullscreen"){t.on===!0?this.pinFullscreen():t.on===!1&&this.unpinFullscreen();return}if(typeof t.type!="string"||!Ut.has(t.type))return;let i={type:t.type,chartId:typeof t.chartId=="string"?t.chartId:void 0,workspaceId:typeof t.workspaceId=="string"?t.workspaceId:void 0,expiresAt:typeof t.expiresAt=="number"?t.expiresAt:void 0,code:typeof t.code=="string"?t.code:void 0,message:typeof t.message=="string"?t.message:void 0,meta:t.meta,fatal:typeof t.fatal=="boolean"?t.fatal:void 0,action:typeof t.action=="string"?t.action:void 0},s=this.identityEstablished||i.type==="seatlayer.designer.ready"||i.type==="seatlayer.designer.saved"||i.type==="seatlayer.designer.published"||i.type==="seatlayer.designer.close",r=this.options.expectedChartId!==void 0&&i.chartId!==this.options.expectedChartId&&(s||i.chartId!==void 0),n=this.options.expectedWorkspaceId!==void 0&&i.workspaceId!==this.options.expectedWorkspaceId&&(s||i.workspaceId!==void 0);if(r||n){this.showError("mismatch");return}switch(i.type){case"seatlayer.designer.ready":this.identityEstablished=!0,this.sessionExpiresAt=i.expiresAt,this.phase="ready",this.clearTimeoutTimer(),this.removeOverlay(),this.autoRecoverUsed=!1,this.scheduleRenewal(i.expiresAt),this.options.onReady?.(i);break;case"seatlayer.designer.saved":this.options.onSaved?.(i);break;case"seatlayer.designer.published":this.options.onPublished?.(i);break;case"seatlayer.designer.close":this.options.onClose?.(i);break;case"seatlayer.designer.error":{let o=ei(i.code);if(o==="expired"&&this.autoRenewEnabled()&&!this.autoRecoverUsed){this.autoRecoverUsed=!0,this.clearRenewTimer(),this.options.onRequestRelaunch();return}(typeof i.fatal=="boolean"?i.fatal:o!=="load"||this.phase!=="ready")&&this.showError(o),this.options.onError?.(i);break}}};this.options=e}mount(){this.destroy();let e=new URL(this.options.designerUrl,window.location.href);if(e.protocol!=="https:"&&e.hostname!=="localhost"&&e.hostname!=="127.0.0.1")throw new Error("EmbeddedDesigner requires an HTTPS designerUrl outside local development.");this.designerOrigin=e.origin;let t=document.createElement("iframe");t.title=this.options.title??"Venue chart Designer",t.allow=this.options.allow??"fullscreen; clipboard-write",t.referrerPolicy=this.options.referrerPolicy??"origin",t.src=e.toString(),t.style.setProperty("width","100%","important"),t.style.setProperty("height",typeof this.options.height=="number"?`${this.options.height}px`:"100%","important"),t.style.border="0",Object.assign(t.style,this.options.style),this.options.className&&(t.className=this.options.className);let i=Le(this.options.container);if(this.containerEl=i,window.addEventListener("message",this.handleMessage),i.append(t),this.frame=t,this.fillEnabled()&&this.startFill(),this.phase="loading",this.loadingStateEnabled()){this.ensureContainerPositioned(i),this.renderOverlay(i,"loading");let s=this.options.loadingTimeoutMs??qt;s>0&&Number.isFinite(s)&&(this.timeoutTimer=setTimeout(()=>{this.phase==="loading"&&this.showError("timeout")},s))}return t}setDesignerUrl(e){return this.options={...this.options,designerUrl:e},this.mount()}getIframe(){return this.frame}setSizing(e,t){this.options={...this.options,height:e,minHeight:t},this.frame&&(this.stopFill(),this.lastAutoHeight="",this.fillEnabled()?(this.pinned||this.setFrameHeight("100%"),this.startFill()):this.pinned||this.setFrameHeight(`${e}px`))}setRelaunchPolicy(e,t){this.options={...this.options,onRequestRelaunch:e,autoRenewSession:t},this.clearRenewTimer(),this.phase==="ready"&&this.scheduleRenewal(this.sessionExpiresAt)}destroy(){window.removeEventListener("message",this.handleMessage),this.stopFill(),this.unpinFullscreen(),this.clearTimeoutTimer(),this.clearRenewTimer(),this.removeOverlay(),this.restoreContainerStyle(),this.frame?.remove(),this.frame=null,this.containerEl=null,this.fillMode=null,this.designerOrigin="",this.phase="loading",this.identityEstablished=!1,this.sessionExpiresAt=void 0,this.lastAutoHeight=""}loadingStateEnabled(){return this.options.showLoadingState!==!1}autoResizeEnabled(){return this.options.autoResize!==!1}fillEnabled(){return typeof this.options.height!="number"}setFrameHeight(e){this.frame?.style.setProperty("height",e,"important")}detectFillMode(){let e=this.containerEl,t=this.frame;if(this.pinned||!e||!t)return this.fillMode??"viewport";let i=()=>e.getBoundingClientRect().height,s=t.style.getPropertyValue("height"),r=t.style.getPropertyPriority("height");t.style.setProperty("height","0px","important");let n=i();t.style.setProperty("height",`${Qt}px`,"important");let o=i();return s?t.style.setProperty("height",s,r):t.style.removeProperty("height"),!(o-n>Zt)&&n>=Jt?"container":"viewport"}applyFill(){if(!this.frame||this.pinned)return;let e=this.options.minHeight??Kt;if(this.fillMode==="container"&&this.containerEl){let s=Math.max(e,Math.round(this.containerEl.getBoundingClientRect().height));this.setFrameHeight(`${s}px`);return}let t=this.frame.getBoundingClientRect().top,i=Math.max(e,Math.round(window.innerHeight-t));this.setFrameHeight(`${i}px`)}syncContainerObserver(){let e=this.fillMode==="container"&&!!this.containerEl&&typeof ResizeObserver<"u";e&&!this.resizeObs?(this.resizeObs=new ResizeObserver(()=>this.scheduleFill()),this.resizeObs.observe(this.containerEl)):!e&&this.resizeObs&&(this.resizeObs.disconnect(),this.resizeObs=null)}startFill(){this.fillMode=this.detectFillMode(),this.syncContainerObserver(),this.applyFill(),!this.fillListening&&(this.fillListening=!0,window.addEventListener("resize",this.scheduleReprobe),window.addEventListener("orientationchange",this.scheduleReprobe),window.addEventListener("scroll",this.scheduleFill,{passive:!0}))}stopFill(){this.fillRaf!==null&&(cancelAnimationFrame(this.fillRaf),this.fillRaf=null),this.reprobeRaf!==null&&(cancelAnimationFrame(this.reprobeRaf),this.reprobeRaf=null),this.resizeObs&&(this.resizeObs.disconnect(),this.resizeObs=null),this.fillListening&&(this.fillListening=!1,window.removeEventListener("resize",this.scheduleReprobe),window.removeEventListener("orientationchange",this.scheduleReprobe),window.removeEventListener("scroll",this.scheduleFill))}pinFullscreen(){if(this.pinned||!this.frame)return;this.pinned=!0,this.frameStyleBeforeFs=this.frame.getAttribute("style");let e={position:"fixed",top:"0",right:"0",bottom:"0",left:"0",width:"100vw",height:"100vh",margin:"0",border:"0","z-index":"2147483000",background:"#101625"};for(let[i,s]of Object.entries(e))this.frame.style.setProperty(i,s,"important");let t=document.documentElement;this.docOverflowBeforeFs=t.style.overflow,t.style.overflow="hidden",document.body&&(this.bodyOverflowBeforeFs=document.body.style.overflow,document.body.style.overflow="hidden"),this.fsKeyHandler=i=>{i.key==="Escape"&&this.unpinFullscreen()},window.addEventListener("keydown",this.fsKeyHandler)}unpinFullscreen(){this.pinned&&(this.pinned=!1,this.frame&&(this.frameStyleBeforeFs===null?this.frame.removeAttribute("style"):this.frame.setAttribute("style",this.frameStyleBeforeFs),this.fillEnabled()?this.applyFill():this.autoResizeEnabled()&&this.lastAutoHeight?this.setFrameHeight(this.lastAutoHeight):typeof this.options.height=="number"&&this.setFrameHeight(`${this.options.height}px`)),this.frameStyleBeforeFs=null,this.docOverflowBeforeFs!==null&&(document.documentElement.style.overflow=this.docOverflowBeforeFs,this.docOverflowBeforeFs=null),this.bodyOverflowBeforeFs!==null&&document.body&&(document.body.style.overflow=this.bodyOverflowBeforeFs,this.bodyOverflowBeforeFs=null),this.fsKeyHandler&&(window.removeEventListener("keydown",this.fsKeyHandler),this.fsKeyHandler=null))}clearTimeoutTimer(){this.timeoutTimer!==null&&(clearTimeout(this.timeoutTimer),this.timeoutTimer=null)}autoRenewEnabled(){return!!this.options.onRequestRelaunch&&this.options.autoRenewSession!==!1}clearRenewTimer(){this.renewTimer!==null&&(clearTimeout(this.renewTimer),this.renewTimer=null)}scheduleRenewal(e){if(this.clearRenewTimer(),!this.autoRenewEnabled()||typeof e!="number"||!Number.isFinite(e))return;let t=e-Date.now();if(t<=0)return;let i=t<Gt?t*Yt:t-Wt,s=Math.max(Xt,i);this.renewTimer=setTimeout(()=>{this.renewTimer=null,this.autoRenewEnabled()&&this.options.onRequestRelaunch()},s)}ensureContainerPositioned(e){getComputedStyle(e).position==="static"&&(this.restoreContainerPosition=e.style.position,e.style.position="relative")}restoreContainerStyle(){if(this.restoreContainerPosition!==null){try{Le(this.options.container).style.position=this.restoreContainerPosition}catch{}this.restoreContainerPosition=null}}removeOverlay(){this.overlay?.remove(),this.overlay=null}showError(e){if(this.phase="error",this.clearTimeoutTimer(),!this.loadingStateEnabled())return;let t;try{t=Le(this.options.container)}catch{return}this.renderOverlay(t,"error",e)}handleTryAgain(){if(this.options.onRequestRelaunch){this.options.onRequestRelaunch();return}this.mount()}renderOverlay(e,t,i){this.removeOverlay();let s=document.createElement("div");s.setAttribute("data-seatlayer-designer-overlay",t),s.setAttribute("role",t==="error"?"alert":"status"),s.setAttribute("aria-live","polite"),Object.assign(s.style,{position:"absolute",inset:"0",display:"flex",alignItems:"center",justifyContent:"center",background:"#101625",color:"#e6ebf5",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',zIndex:"2",overflow:"hidden"}),t==="loading"?this.buildSkeleton(s):this.buildErrorCard(s,i??"load"),e.append(s),this.overlay=s}buildSkeleton(e){let t=document.createElement("style");t.textContent=`
1
+ import{a as M,b as z,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerController as _t,formatMoney as jt,loadLocale as Vt,setStringOverrides as Nt,t as ee}from"@seatlayer/core";var K="seatlayer.v1";function Pt(a){let e=typeof a.default=="string"?a.default:"free",t={};if(a.seats&&typeof a.seats=="object")for(let[i,s]of Object.entries(a.seats))typeof s=="string"&&s!==e&&(t[i]=s);return{default:e,exceptions:t}}function Ht(a,e){if(!a||a.default!==e.default)return null;let t=[];for(let[i,s]of Object.entries(e.exceptions))a.exceptions[i]!==s&&t.push({label:i,status:s});for(let i of Object.keys(a.exceptions))i in e.exceptions||t.push({label:i,status:e.default});return t}function Rt(a,e){for(let t of e)t.status===a.default?delete a.exceptions[t.label]:a.exceptions[t.label]=t.status}function Ge(a){if(/(?:^|[?&#])(?:token|access_token|bearer|authorization|ticket|tkt|bse)=/i.test(a))throw new Error("seatlayer: refusing to open a socket with a credential in the URL");if(/\bbse_[A-Za-z0-9._-]+/.test(a))throw new Error("seatlayer: refusing to open a socket with a credential in the URL")}var j=class{constructor(e){this.ws=null;this.stopped=!0;this.attempt=0;this.reconnectTimer=null;this.pingTimer=null;this.pongTimer=null;this.resumeTimer=null;this.projection=null;this.version=null;this.v1=!1;this.useQueryMarker=!1;this.hidden=null;this.closedSections=null;this.opts=e,Ge(e.url)}get protocol(){return this.ws?this.v1?"v1":"legacy":null}get snapshotVersion(){return this.version}start(){this.stopped&&(this.stopped=!1,this.connect())}stop(){this.stopped=!0,this.clearTimers();let e=this.ws;if(this.ws=null,e){e.onopen=null,e.onmessage=null,e.onclose=null,e.onerror=null;try{e.close()}catch{}}}restart(){this.stop(),this.projection=null,this.version=null,this.attempt=0,this.start()}async connect(){if(this.stopped)return;let e=[K];if(this.opts.mintTicket){let r;try{r=await this.opts.mintTicket()}catch(n){this.reportIfAccessError(n),this.scheduleReconnect();return}if(this.stopped)return;r?.protocols?.length?(e=[...r.protocols],e.includes(K)||e.unshift(K)):r?.ticket&&(e=[K,`tkt.${r.ticket}`])}let t=this.version!==null;t&&e.push(`sv.${this.version}`);let i=this.useQueryMarker?`${this.opts.url}${this.opts.url.includes("?")?"&":"?"}pv=1`:this.opts.url;Ge(i);let s;try{s=(this.opts.socketFactory??((n,o)=>new WebSocket(n,o)))(i,e)}catch{this.scheduleReconnect();return}this.ws=s,s.onopen=()=>{this.ws===s&&(this.attempt=0,this.v1=s.protocol===K,this.v1||(this.useQueryMarker=!0),this.startKeepalive(s),t?this.resumeTimer=setTimeout(()=>{this.resumeTimer=null,this.opts.sink.resync()},5e3):this.opts.sink.resync())},s.onmessage=r=>{if(this.ws!==s)return;let n;try{n=JSON.parse(typeof r.data=="string"?r.data:"")}catch{return}!n||typeof n!="object"||this.handleFrame(n)},s.onclose=r=>{if(this.ws===s){if(this.ws=null,this.clearTimers(),r?.code===4401){this.stopped=!0,this.opts.onAccessUnavailable?.({reason:"revoked",code:"access_revoked",retryable:!1});return}this.scheduleReconnect()}},s.onerror=()=>{try{s.close()}catch{}}}handleFrame(e){let t=typeof e.type=="string"?e.type:"";if(e.protocol===1&&(this.v1=!0),typeof e.snapshotVersion=="number"&&(this.version=e.snapshotVersion),t==="pong"){this.clearPongTimer();return}if(Array.isArray(e.hidden)||Array.isArray(e.closed)){let i=Array.isArray(e.hidden)?e.hidden:[],s=Array.isArray(e.closed)?e.closed:[],r=i.join("\0"),n=s.join("\0");(r!==this.hidden||n!==this.closedSections)&&(this.hidden=r,this.closedSections=n,this.opts.sink.onSections?.(i,s))}if(t!=="hidden"){if(t==="presence"){this.opts.sink.onPresence?.({shoppingSessions:Number(e.shoppingSessions)||0,activeHolds:Number(e.activeHolds)||0});return}if(t!=="allocation"){if(t==="snapshot"||!t&&e.seats){this.answered();let i=Pt(e),s=Ht(this.projection,i);this.projection=i,s===null?this.opts.sink.applyProjection?this.opts.sink.applyProjection(i):this.opts.sink.resync():s.length&&this.opts.sink.applyStatuses(s);return}if(t==="delta"&&Array.isArray(e.changes)){this.answered();let i=e.changes.filter(s=>typeof s?.label=="string"&&typeof s?.status=="string").map(s=>({label:s.label,status:s.status}));if(!i.length)return;this.projection&&Rt(this.projection,i),this.opts.sink.applyStatuses(i)}}}}answered(){this.resumeTimer&&(clearTimeout(this.resumeTimer),this.resumeTimer=null)}reportIfAccessError(e){let t=e?.reason;e?.name==="BuyerAccessUnavailableError"&&(this.stopped=!0,this.opts.onAccessUnavailable?.({reason:t??"invalid",code:e.code,status:e.status,retryable:t==="paused"}))}startKeepalive(e){this.pingTimer=setInterval(()=>{if(this.ws===e){try{e.send(JSON.stringify({type:"ping"}))}catch{return}this.clearPongTimer(),this.pongTimer=setTimeout(()=>{this.pongTimer=null;try{e.close()}catch{}},1e4)}},25e3)}scheduleReconnect(){if(this.stopped||this.reconnectTimer)return;let e=Math.min(this.attempt++,5),t=Math.min(1e3*2**e,15e3),i=Math.random()*t;this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},i)}clearPongTimer(){this.pongTimer&&(clearTimeout(this.pongTimer),this.pongTimer=null)}clearTimers(){this.pingTimer&&clearInterval(this.pingTimer),this.pingTimer=null,this.clearPongTimer(),this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null,this.resumeTimer&&clearTimeout(this.resumeTimer),this.resumeTimer=null}};function Ot(a){return a==="blocked"?"not_for_sale":a==="held"||a==="booked"||a==="free"||a==="not_for_sale"?a:"free"}function re(a,e={}){let t=i=>{let s=a.tableSelection(i);if(s)return s.physicalSeatIds;let r=a.idForLabel(i);return r?[r]:[]};return{applyStatuses(i){let s=a.currentHold()?.labels??[],r={free:[],held:[],booked:[],not_for_sale:[]},n=[],o=[],l=new Map(a.getSelection().map(d=>[d.label,d.id]));for(let d of i){let h=t(d.label);if(!h.length)continue;let c=Ot(d.status);if(r[c].push(...h),e.flashOnLiveChange&&c!=="free"&&!s.includes(d.label)&&h.some(p=>a.getStatus(p)==="free")){let p=c==="held"?"#f4b740":"#f43f5e";for(let f of h)n.push({id:f,color:p})}c!=="free"&&!s.includes(d.label)&&l.has(d.label)&&o.push(d.label)}for(let d of["free","held","booked","not_for_sale"])r[d].length&&a.setStatus(r[d],d);for(let d of n)a.flashSeat(d.id,d.color);if(o.length){let d=o.flatMap(c=>t(c));d.length&&a.deselect(d);let h=i.some(c=>c.status==="blocked"&&o.includes(c.label));e.onSelectedObjectUnavailable?.(o,h?"ineligible":"taken")}e.onStatusChange?.()},async resync(){await a.refresh()},onSections(i,s){a.refresh(),e.onSections?.(i,s)}}}var Y=class extends Error{constructor(e,t,i,s,r,n){super(t),this.name="ApiError",this.status=e,this.code=i,this.conflicts=s,this.reason=r,this.retryAfterS=n}},Ye=10,Xe=1;function Qe(a,e){let t=(a??"").trim();if(t){let i=Number(t);if(Number.isFinite(i)&&i>=0)return Math.ceil(i);let s=Date.parse(t);if(Number.isFinite(s))return Math.max(0,Math.ceil((s-Date.now())/1e3))}if(typeof e=="number"&&Number.isFinite(e)&&e>=0)return Math.ceil(e)}var $t={seat_conflict:"taken",conflict:"taken",channel_assignment_conflict:"ineligible",allocation_exhausted:"exhausted"},X=class{constructor(e,t={}){this.base=e;this.viewerId=typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`viewer_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;this.access=t.access,this.onObjectUnavailable=t.onObjectUnavailable}get accessScoped(){return!!this.access?.configured}async request(e,t={},i={}){let s=t.method??"GET",r={},n;t.body!==void 0&&(r["Content-Type"]="application/json",n=JSON.stringify(t.body));let o=await this.access?.authorization(i.auth?"unauthorized":"initial");o&&(r.Authorization=o);let l=await fetch(`${this.base}${e}`,{method:s,headers:r,body:n,credentials:"omit"}),h=(l.headers.get("content-type")??"").includes("application/json")?await l.json().catch(()=>null):null;if(!l.ok){let c=h,p=c?.code??c?.error;if(this.access?.configured&&(l.status===401||l.status===403||l.status===422)&&await this.access.handleFailure(l.status,p)&&!i.auth)return this.request(e,t,{...i,auth:!0});if(l.status===409){let m=p?$t[p]:void 0,v=c?.conflicts?.map(S=>S.label)??t.labels??[];m&&this.onObjectUnavailable?.({labels:v,reason:m,code:p})}let f;if(l.status===429&&(f=Qe(l.headers.get("Retry-After"),c?.retryAfterSeconds)??Xe,s==="GET"&&!i.rateLimit&&f<=Ye))return await new Promise(m=>setTimeout(m,f*1e3)),this.request(e,t,{...i,rateLimit:!0});throw new Y(l.status,c?.error??`request_failed_${l.status}`,p,c?.conflicts,c?.reason,f)}return h}async requestBlob(e,t={}){let i={},s=await this.access?.authorization(t.auth?"unauthorized":"initial");s&&(i.Authorization=s);let r=await fetch(`${this.base}${e}`,{method:"GET",headers:i,credentials:"omit"});if(r.ok)return r.blob();let o=(r.headers.get("content-type")??"").includes("application/json")?await r.json().catch(()=>null):null,l=o?.code??o?.error;if(this.access?.configured&&(r.status===401||r.status===403||r.status===422)&&await this.access.handleFailure(r.status,l)&&!t.auth)return this.requestBlob(e,{...t,auth:!0});let d;if(r.status===429&&(d=Qe(r.headers.get("Retry-After"),o?.retryAfterSeconds)??Xe,!t.rateLimit&&d<=Ye))return await new Promise(h=>setTimeout(h,d*1e3)),this.requestBlob(e,{...t,rateLimit:!0});throw new Y(r.status,o?.error??`request_failed_${r.status}`,l,void 0,void 0,d)}chart(e){return this.request(`/pub/events/${encodeURIComponent(e)}/chart`)}asset(e,t){return/^[a-zA-Z0-9._-]+$/.test(t)?this.requestBlob(`/pub/events/${encodeURIComponent(e)}/assets/${encodeURIComponent(t)}`):Promise.reject(new Y(404,"not_found","not_found"))}objects(e){return this.request(`/pub/events/${encodeURIComponent(e)}/objects?compact=1`)}hold(e,t,i,s){return this.request(`/pub/events/${encodeURIComponent(e)}/hold`,{method:"POST",body:{selections:t,...i?{ttlMs:i}:{},...s?{replaceHoldId:s}:{}},labels:t.map(r=>r.label)})}bestAvailable(e,t,i,s,r){return this.request(`/pub/events/${encodeURIComponent(e)}/best-available`,{method:"POST",body:{qty:t,...i?{categoryKey:i}:{},...s?{zoneId:s}:{},...r?{ttlMs:r}:{}}})}resume(e,t){return this.request(`/pub/events/${encodeURIComponent(e)}/hold/resume`,{method:"POST",body:{holdId:t}})}release(e,t,i){return this.request(`/pub/events/${encodeURIComponent(e)}/release`,{method:"POST",body:{labels:t,holdId:i}})}extend(e,t,i){return this.request(`/pub/events/${encodeURIComponent(e)}/extend`,{method:"POST",body:{holdId:t,...i?{ttlMs:i}:{}}})}paymentOptions(e){return this.request(`/pub/events/${encodeURIComponent(e)}/payment-options`)}availability(e,t=!1){return this.request(`/pub/events/${encodeURIComponent(e)}/availability${t?"?live=1":""}`)}startCheckout(e,t){return this.request(`/pub/events/${encodeURIComponent(e)}/checkout`,{method:"POST",body:t})}orderStatus(e){return this.request(`/pub/orders/${encodeURIComponent(e)}/status`)}subscribeTicket(e){return this.request(`/pub/events/${encodeURIComponent(e)}/subscribe-tickets`,{method:"POST",body:{}})}subscribeUrl(e){let t=this.base.replace(/^http/,"ws"),i=new URLSearchParams({surface:"picker",viewerId:this.viewerId});return`${t}/pub/events/${encodeURIComponent(e)}/subscribe?${i}`}socketUrl(e){return this.accessScoped?"":this.subscribeUrl(e)}socketProtocols(e){return this.accessScoped?[]:[K]}createRealtime(e,t){return this.accessScoped?null:new j({url:this.subscribeUrl(e),sink:t})}};var ne=class extends Error{constructor(e){super(`buyer_access_unavailable:${e.reason}`),this.name="BuyerAccessUnavailableError",this.reason=e.reason,this.code=e.code,this.status=e.status}},It=new Set(["buyer_access_expired"]),Bt=new Set(["paused","provider_failed","channel_denied"]);function zt(a,e){switch(e){case"buyer_access_invalid":return"invalid";case"buyer_access_revoked":return"revoked";case"buyer_access_origin_mismatch":return"origin_mismatch";case"buyer_access_event_mismatch":return"event_mismatch";case"buyer_access_mode_mismatch":return"mode_mismatch";case"channel_access_denied":return"channel_denied";case"channel_paused":return"paused";case"invalid_channel_scope":return"invalid_scope";default:break}return a===401?"invalid":null}function Dt(a,e){return a===401&&!!e&&It.has(e)}var Ft=3e4,$,I,Z,oe,U,V,J,ae,le,ce,B,Ce,me,Q,fe=class{constructor(e){z(this,B);z(this,$,null);z(this,I,0);z(this,Z);z(this,oe);z(this,U,null);z(this,V,null);z(this,J,null);z(this,ae);z(this,le);z(this,ce,!1);if(R(this,Z,e.provider),R(this,oe,e.skewMs??Ft),R(this,ae,e.onExpired),R(this,le,e.onUnavailable),e.token){let t=typeof e.token=="string"?{token:e.token}:e.token;F(this,B,Ce).call(this,t)}R(this,ce,!!M(this,Z)||!!M(this,$))}get configured(){return M(this,ce)}get unavailable(){return M(this,V)}get hasToken(){return!!M(this,$)&&(M(this,I)===0||M(this,I)>Date.now())}get expiresAt(){return M(this,I)}async authorization(e="initial"){if(!this.configured)return null;if(M(this,V))throw new ne(M(this,V));let t=Date.now();if(!M(this,$)||M(this,I)>0&&M(this,I)-M(this,oe)<=t){let s=!!M(this,$)&&M(this,I)>0&&M(this,I)<=t,r=M(this,$)?s?"expired":"expiring":e,n=await F(this,B,me).call(this,r);if(!n)throw new ne(M(this,V)??M(this,J)??F(this,B,Q).call(this,"provider_failed"));return`Bearer ${n}`}return`Bearer ${M(this,$)}`}async handleFailure(e,t){var s;if(!this.configured)return!1;if(Dt(e,t)){R(this,$,null),R(this,I,0);let r=await F(this,B,me).call(this,"unauthorized",t);return(s=M(this,ae))==null||s.call(this,{reason:"unauthorized",code:t,refreshed:!!r}),!!r}let i=zt(e,t);return i&&F(this,B,Q).call(this,i,t,e),!1}async refresh(e="manual"){return R(this,V,null),R(this,J,null),R(this,$,null),R(this,I,0),!!await F(this,B,me).call(this,e)}clear(){R(this,$,null),R(this,I,0),R(this,U,null)}toJSON(){return{configured:this.configured,hasToken:this.hasToken}}toString(){return"[BuyerAccessContext redacted]"}};$=new WeakMap,I=new WeakMap,Z=new WeakMap,oe=new WeakMap,U=new WeakMap,V=new WeakMap,J=new WeakMap,ae=new WeakMap,le=new WeakMap,ce=new WeakMap,B=new WeakSet,Ce=function(e){return!e||typeof e.token!="string"||!e.token?null:(R(this,$,e.token),R(this,I,typeof e.expiresAt=="number"?e.expiresAt:0),M(this,$))},me=function(e,t){if(M(this,U))return M(this,U);let i=M(this,Z);if(!i)return F(this,B,Q).call(this,"no_token",t),Promise.resolve(null);let s=(async()=>{try{let r=await i({reason:e}),n=F(this,B,Ce).call(this,r);return n||(F(this,B,Q).call(this,"provider_failed",t),null)}catch{return F(this,B,Q).call(this,"provider_failed",t),null}finally{R(this,U,null)}})();return R(this,U,s),s},Q=function(e,t,i){var r;let s={reason:e,code:t,status:i,retryable:e==="paused"||e==="channel_denied"};return R(this,J,s),Bt.has(e)||(R(this,V,s),R(this,$,null),R(this,I,0)),(r=M(this,le))==null||r.call(this,s),s};function de(a,e={}){return!a.buyerAccessTokenProvider&&!a.buyerAccessToken?null:new fe({provider:a.buyerAccessTokenProvider,token:a.buyerAccessToken,...e})}var be='<svg viewBox="0 0 64 56" width="12" height="11" fill="none" aria-hidden="true" focusable="false" style="display:block"><path d="M4 13 Q16 6 29 7 L28.5 17 Q17 16.5 7 22 Z" fill="#f4b740"/><path d="M4 13 Q16 6 29 7 L28.5 17 Q17 16.5 7 22 Z" fill="#f4b740" transform="translate(64 0) scale(-1 1)"/><path d="M8 28 Q18 22 28.6 23 L28.2 32 Q18 28.5 10 36 Z" fill="#fcf7ee"/><path d="M8 28 Q18 22 28.6 23 L28.2 32 Q18 28.5 10 36 Z" fill="#fcf7ee" transform="translate(64 0) scale(-1 1)"/><path d="M11 41 Q19 35 28.2 36 L27.8 45 Q19.5 42 13.5 49 Z" fill="#fcf7ee"/><path d="M11 41 Q19 35 28.2 36 L27.8 45 Q19.5 42 13.5 49 Z" fill="#fcf7ee" transform="translate(64 0) scale(-1 1)"/></svg>';var Ut="https://api.seatlayer.io",qt=10;function Kt(a){if(typeof a=="string"){let e=document.querySelector(a);if(!e)throw new Error(`seatmap: container "${a}" not found`);return e}if(!(a instanceof HTMLElement))throw new Error("seatmap: container must be a CSS selector or an HTMLElement");return a}var Ae=class{constructor(e){this.mount=null;this.hostEl=null;this.rendered=!1;this.mode_=null;this.tipEl=null;this.tipPos={x:0,y:0};this.onTipMove=null;this.realtime=null;if(!e||typeof e!="object")throw new Error("seatmap: options object is required");if(!e.container)throw new Error("seatmap: `container` is required");if(!e.event||typeof e.event!="string")throw new Error("seatmap: `event` key is required");this.opts=e,this.publicKey=e.publicKey,this.access=de(e,{onExpired:i=>this.opts.onAccessExpired?.(i),onUnavailable:i=>this.opts.onAccessUnavailable?.(i)});let t=new X((e.apiBase??Ut).replace(/\/+$/,""),{access:this.access??void 0,onObjectUnavailable:i=>this.opts.onSelectedObjectUnavailable?.(i)});this.api=t,this.controller=new _t({transport:t,eventKey:e.event,maxSelection:e.maxSelection??qt,selectedObjects:e.selectedObjects,selectableObjects:e.selectableObjects,numberOfPlacesToSelect:e.numberOfPlacesToSelect,currency:e.currency,onSelectionChange:i=>this.opts.onSelectionChange?.(i),onSelectionValidityChange:i=>this.opts.onSelectionValidityChange?.(i),onSelectionValid:i=>this.opts.onSelectionValid?.(i),onSelectionInvalid:i=>this.opts.onSelectionInvalid?.(i),onSelectionLimit:i=>this.opts.onSelectionLimit?.(i),onHold:i=>this.opts.onHold?.({holdId:i.holdId,expiresAt:i.expiresAt,seats:i.seats,items:i.items}),onHoldRestored:i=>this.opts.onHoldRestored?.({holdId:i.holdId,expiresAt:i.expiresAt,seats:i.seats,items:i.items}),onHoldExpired:()=>this.opts.onHoldExpired?.(),onGAClick:i=>{let s=this.controller.getGAAreas().find(r=>r.id===i);s&&this.opts.onGAClick?.(s)},onError:i=>this.opts.onError?.(i),onDeckTap:i=>this.opts.onDeckTap?.(i),onHint:i=>this.opts.onHint?.(i),flashOnLiveChange:!0,onSeatHover:i=>{this.opts.onSeatHover?.(i),this.opts.seatTooltip!==!1&&this.updateTooltip(i)},colorblindSafe:e.colorblindSafe})}async render(){if(this.rendered)return this;this.rendered=!0,await Vt(this.opts.locale),this.opts.messages&&Nt(this.opts.messages),this.mount=Kt(this.opts.container);let e=document.createElement("div");e.style.width="100%",e.style.height="100%",e.style.position="relative",this.mount.appendChild(e),this.hostEl=e;let t=await this.controller.render(e);if(!t)return this.rendered=!1,this.opts.errorDisplay!=="none"&&this.showLoadFailure(e),this;if(this.controller.setViewMode(this.opts.initialView??"flat"),this.startRealtime(),this.mode_=t.mode==="test"?"test":"live",this.opts.seatTooltip!==!1){let i=document.createElement("div");i.setAttribute("role","tooltip"),i.style.cssText='position:absolute;z-index:7;pointer-events:none;display:none;max-width:240px;background:#10162a;color:#fff;border-radius:10px;padding:9px 12px;font:500 12px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;box-shadow:0 10px 30px -10px rgba(0,0,0,.5);',e.appendChild(i),this.tipEl=i,this.onTipMove=s=>{let r=e.getBoundingClientRect();this.tipPos={x:s.clientX-r.left,y:s.clientY-r.top},this.tipEl&&this.tipEl.style.display!=="none"&&this.placeTooltip()},e.addEventListener("mousemove",this.onTipMove)}if(t.mode==="test"){e.style.overflow="hidden";let i=document.createElement("div");i.textContent=ee("picker.testMode"),i.setAttribute("aria-label",ee("picker.testMode")),i.style.cssText="position:absolute;top:18px;right:-34px;z-index:6;transform:rotate(45deg);width:140px;text-align:center;padding:4px 0;background:#f4b740;color:#1a1200;font:800 10.5px/1.4 -apple-system,BlinkMacSystemFont,sans-serif;letter-spacing:.12em;box-shadow:0 2px 8px rgba(0,0,0,.25);pointer-events:none;",e.appendChild(i)}return this.buildBadge(e),this}buildBadge(e){if(this.controller.doc?.theme?.hideBadge)return;let t=document.createElement("a");t.href="https://seatlayer.io",t.target="_blank",t.rel="noopener noreferrer",t.setAttribute("aria-label",ee("picker.poweredBy")),t.style.cssText='position:absolute;bottom:10px;right:12px;z-index:5;display:inline-flex;align-items:center;gap:6px;padding:5px 9px;border-radius:999px;background:rgba(255,255,255,.92);color:#4a5163;text-decoration:none;font:600 11px/1 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;letter-spacing:.02em;box-shadow:0 2px 8px rgba(0,0,0,.12);',t.innerHTML='<span aria-hidden="true" style="width:16px;height:16px;border-radius:4px;flex:none;display:flex;align-items:center;justify-content:center;background:#0c1220;color:#fcf7ee">'+be+`</span><span>${ee("picker.poweredBy")}</span>`,e.appendChild(t)}placeTooltip(){if(!this.tipEl||!this.hostEl)return;let e=this.hostEl.clientWidth,t=this.tipEl.offsetWidth,i=this.tipEl.offsetHeight,s=this.tipPos.x+14,r=this.tipPos.y-i-12;s+t>e-8&&(s=this.tipPos.x-t-14),r<8&&(r=this.tipPos.y+18),this.tipEl.style.left=`${Math.max(8,s)}px`,this.tipEl.style.top=`${Math.max(8,r)}px`}updateTooltip(e){if(!this.tipEl)return;if(!e){this.tipEl.style.display="none";return}let t=jt(e.price,e.currency,{locale:this.opts.locale,fallback:(s,r)=>`${s} ${r}`}),i=e.status==="free"?"":`<div style="margin-top:5px;font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:#fca5a5;font-weight:700">${e.status==="held"?ee("map.statusHeld"):ee("map.statusTaken")}</div>`;this.tipEl.innerHTML=`<div style="font-weight:700;font-size:13px">${e.label}</div><div style="display:flex;align-items:center;gap:6px;margin-top:4px;color:#c7cddc"><span style="width:9px;height:9px;border-radius:50%;flex:none;background:${e.categoryColor}"></span><span>${e.categoryLabel}</span><span style="margin-left:auto;font-weight:700;color:#fff">${t}</span></div>`+i,this.tipEl.style.display="block",this.placeTooltip()}getMode(){return this.mode_}getSelection(){return this.controller.getSelection()}selectObjects(e){return this.controller.select(e)}deselectObjects(e){this.controller.deselect(e)}clearSelection(){this.controller.clearSelection()}selectCategories(e){return this.controller.selectCategories(e)}deselectCategories(e){this.controller.deselectCategories(e)}setSelectableObjects(e){this.controller.setSelectableObjects(e)}setMaxSelection(e){this.controller.setMaxSelection(e)}getSelectionValidity(){return this.controller.getSelectionValidity()}async hold(e={}){try{return await this.holdOrThrow(e)}catch(t){return this.opts.onError?.(t),null}}async holdOrThrow(e={}){let t=this.controller.getSelectionValidity();if(t&&!t.isValid)throw Object.assign(new Error(`seatmap: select exactly ${t.required} places before holding`),{code:"selection_count_mismatch",selection:t});let i=await this.controller.hold(void 0,e.ttlMs);return i?{holdId:i.holdId,expiresAt:i.expiresAt,seats:i.seats,items:i.items}:null}async resumeHold(e){try{return await this.resumeHoldOrThrow(e)}catch(t){return this.opts.onError?.(t),null}}async resumeHoldOrThrow(e){let t=await this.controller.resumeHold(e);return t?{holdId:t.holdId,expiresAt:t.expiresAt,seats:t.seats,items:t.items}:null}async extendHold(e){try{let t=await this.controller.extendHold(e);return t?{holdId:t.holdId,expiresAt:t.expiresAt,seats:t.seats,items:t.items}:null}catch(t){return this.opts.onError?.(t),null}}getCurrentHold(){let e=this.controller.currentHold();return e?{holdId:e.holdId,expiresAt:e.expiresAt,seats:e.seats,items:e.items}:null}getGAAreas(){return this.controller.getGAAreas()}async holdGA(e,t,i={}){try{return await this.holdGAOrThrow(e,t,i)}catch(s){return this.opts.onError?.(s),null}}async holdGAOrThrow(e,t,i={}){let s=await this.controller.holdGA(e,t,i);return s?{holdId:s.holdId,expiresAt:s.expiresAt,seats:s.seats,items:s.items}:null}async bestAvailable(e,t,i={}){try{return await this.bestAvailableOrThrow(e,t,i)}catch(s){return this.opts.onError?.(s),null}}async bestAvailableOrThrow(e,t,i={}){let s=await this.controller.bestAvailable(e,t,i);return s?{holdId:s.holdId,expiresAt:s.expiresAt,labels:s.labels,seats:s.seats,items:s.items,...i.zoneId?{zoneId:i.zoneId}:{}}:null}setSeatTier(e,t){this.controller.setSeatTier(e,t)}getFloors(){return this.controller.getFloors()}setFloor(e){if(this.controller.getFloors().length<=1){console.warn("seatmap: setFloor() ignored \u2014 this chart has a single floor");return}this.controller.setFloor(e)}setColorblindSafe(e){this.controller.setColorblindSafe(e)}setViewMode(e){this.controller.setViewMode(e)}getViewMode(){return this.controller.getViewMode()}zoomIn(){this.controller.zoomIn()}zoomOut(){this.controller.zoomOut()}zoomToFit(){this.controller.zoomToFit()}async release(){await this.controller.release()}async releaseLabels(e){return this.controller.releaseLabels(e)}startRealtime(){!this.access?.configured||this.realtime||(this.realtime=new j({url:this.api.subscribeUrl(this.opts.event),mintTicket:()=>this.api.subscribeTicket(this.opts.event),onAccessUnavailable:e=>this.opts.onAccessUnavailable?.(e),sink:re(this.controller,{flashOnLiveChange:!0,onSelectedObjectUnavailable:(e,t)=>this.opts.onSelectedObjectUnavailable?.({labels:e,reason:t})})}),this.realtime.start())}async refreshAccess(){if(!this.access?.configured)return!1;let e=await this.access.refresh("manual");return e&&(await this.controller.refresh(),this.realtime?.restart(),this.realtime||this.startRealtime()),e}showLoadFailure(e){let t=document.createElement("div");t.setAttribute("role","status"),t.style.cssText='display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;width:100%;height:100%;min-height:180px;box-sizing:border-box;padding:24px;text-align:center;font:500 14px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#3b4256;';let i=document.createElement("div");i.textContent="The seat map didn\u2019t load.",t.appendChild(i);let s=document.createElement("button");s.type="button",s.textContent="Try again",s.style.cssText="appearance:none;border:1px solid #c9cede;background:#fff;color:#10162a;border-radius:8px;padding:8px 16px;font:600 13px/1 inherit;cursor:pointer;",s.addEventListener("click",()=>{this.destroy(),this.render().catch(r=>this.opts.onError?.(r))}),t.appendChild(s),e.appendChild(t)}destroy(){this.realtime?.stop(),this.realtime=null,this.access?.clear(),this.hostEl&&this.onTipMove&&this.hostEl.removeEventListener("mousemove",this.onTipMove),this.tipEl=null,this.onTipMove=null,this.controller.destroy(),this.hostEl&&this.hostEl.parentNode&&this.hostEl.parentNode.removeChild(this.hostEl),this.hostEl=null,this.mount=null,this.rendered=!1,this.mode_=null}};var Ze=["hold","resumeHold","getCurrentHold","getGAAreas","holdGA","bestAvailable","release","releaseLabels","getSelection","selectObjects","deselectObjects","clearSelection","selectCategories","deselectCategories","setSelectableObjects","setMaxSelection","getSelectionValidity","setSeatTier","getFloors","setFloor","setColorblindSafe","zoomIn","zoomOut","zoomToFit","refreshAccess"],Wt={hold:()=>Promise.resolve(null),resumeHold:()=>Promise.resolve(null),getCurrentHold:()=>null,getGAAreas:()=>[],holdGA:()=>Promise.resolve(null),bestAvailable:()=>Promise.resolve(null),release:()=>Promise.resolve(),releaseLabels:()=>Promise.resolve(!1),getSelection:()=>[],selectObjects:()=>[],deselectObjects:()=>{},clearSelection:()=>{},selectCategories:()=>[],deselectCategories:()=>{},setSelectableObjects:()=>{},setMaxSelection:()=>{},getSelectionValidity:()=>null,setSeatTier:()=>{},getFloors:()=>[],setFloor:()=>{},setColorblindSafe:()=>{},zoomIn:()=>{},zoomOut:()=>{},zoomToFit:()=>{},refreshAccess:()=>Promise.resolve(!1)};function Gt(a){let e={};for(let t of Ze)e[t]=(...i)=>{let s=a();return s?s[t](...i):Wt[t]()};return e}var Je=["event","apiBase","maxSelection","numberOfPlacesToSelect","publicKey","locale","currency","colorblindSafe","initialView","errorDisplay"],et=[...Je,"selectedObjects","selectableObjects","messages","seatTooltip","buyerAccessTokenProvider","buyerAccessToken"],tt=["onSelectionChange","onSelectionValidityChange","onSelectionValid","onSelectionInvalid","onSelectionLimit","onHold","onHoldRestored","onHoldExpired","onGAClick","onError","onDeckTap","onHint","onSeatHover","onAccessExpired","onAccessUnavailable","onSelectedObjectUnavailable"];function Yt(a,e,t){let i={container:a};for(let s of et)i[s]=e[s];for(let s of tt)i[s]=t[s];return i}var Xt=new Set(["seatlayer.designer.ready","seatlayer.designer.saved","seatlayer.designer.published","seatlayer.designer.close","seatlayer.designer.error"]),Qt=2e4,Zt=480,Jt=180*1e3,ei=900*1e3,ti=.8,ii=30*1e3,si=1e5,ri=4,ni=50;function Le(a){if(typeof a!="string")return a;let e=document.querySelector(a);if(!e)throw new Error(`EmbeddedDesigner container not found: ${a}`);return e}function oi(a){let e=(a??"").toLowerCase();return e.includes("expire")||e.includes("revoke")||e==="401"?"expired":e.includes("mismatch")?"mismatch":e.includes("timeout")?"timeout":"load"}var ai={expired:{title:"This design session expired",body:"For your security, editing sessions are short-lived. Start a fresh one to keep designing."},mismatch:{title:"This editor doesn't match this chart",body:"The session that loaded belongs to a different chart or workspace. Reopen the designer to continue."},timeout:{title:"The designer is taking too long",body:"It did not finish loading in time. This is usually a slow connection \u2014 try again."},load:{title:"We couldn't load the designer",body:"Something went wrong while opening the editor. Please try again."}},Me=class{constructor(e){this.frame=null;this.designerOrigin="";this.overlay=null;this.timeoutTimer=null;this.renewTimer=null;this.autoRecoverUsed=!1;this.phase="loading";this.identityEstablished=!1;this.restoreContainerPosition=null;this.pinned=!1;this.frameStyleBeforeFs=null;this.docOverflowBeforeFs=null;this.bodyOverflowBeforeFs=null;this.fsKeyHandler=null;this.lastAutoHeight="";this.fillRaf=null;this.reprobeRaf=null;this.fillListening=!1;this.containerEl=null;this.fillMode=null;this.resizeObs=null;this.scheduleFill=()=>{this.fillRaf===null&&(this.fillRaf=requestAnimationFrame(()=>{this.fillRaf=null,this.applyFill()}))};this.scheduleReprobe=()=>{this.reprobeRaf===null&&(this.reprobeRaf=requestAnimationFrame(()=>{this.reprobeRaf=null,!this.pinned&&(this.fillMode=this.detectFillMode(),this.syncContainerObserver(),this.applyFill())}))};this.handleMessage=e=>{if(!this.frame||e.origin!==this.designerOrigin||e.source!==this.frame.contentWindow||!e.data||typeof e.data!="object")return;let t=e.data;if(t.type==="seatlayer.designer.resize"){!this.fillEnabled()&&this.autoResizeEnabled()&&typeof t.px=="number"&&Number.isFinite(t.px)&&t.px>0&&(this.lastAutoHeight=`${Math.round(t.px)}px`,this.pinned||this.setFrameHeight(this.lastAutoHeight));return}if(t.type==="seatlayer.designer.fullscreen"){t.on===!0?this.pinFullscreen():t.on===!1&&this.unpinFullscreen();return}if(typeof t.type!="string"||!Xt.has(t.type))return;let i={type:t.type,chartId:typeof t.chartId=="string"?t.chartId:void 0,workspaceId:typeof t.workspaceId=="string"?t.workspaceId:void 0,expiresAt:typeof t.expiresAt=="number"?t.expiresAt:void 0,code:typeof t.code=="string"?t.code:void 0,message:typeof t.message=="string"?t.message:void 0,meta:t.meta,fatal:typeof t.fatal=="boolean"?t.fatal:void 0,action:typeof t.action=="string"?t.action:void 0},s=this.identityEstablished||i.type==="seatlayer.designer.ready"||i.type==="seatlayer.designer.saved"||i.type==="seatlayer.designer.published"||i.type==="seatlayer.designer.close",r=this.options.expectedChartId!==void 0&&i.chartId!==this.options.expectedChartId&&(s||i.chartId!==void 0),n=this.options.expectedWorkspaceId!==void 0&&i.workspaceId!==this.options.expectedWorkspaceId&&(s||i.workspaceId!==void 0);if(r||n){this.showError("mismatch");return}switch(i.type){case"seatlayer.designer.ready":this.identityEstablished=!0,this.sessionExpiresAt=i.expiresAt,this.phase="ready",this.clearTimeoutTimer(),this.removeOverlay(),this.autoRecoverUsed=!1,this.scheduleRenewal(i.expiresAt),this.options.onReady?.(i);break;case"seatlayer.designer.saved":this.options.onSaved?.(i);break;case"seatlayer.designer.published":this.options.onPublished?.(i);break;case"seatlayer.designer.close":this.options.onClose?.(i);break;case"seatlayer.designer.error":{let o=oi(i.code);if(o==="expired"&&this.autoRenewEnabled()&&!this.autoRecoverUsed){this.autoRecoverUsed=!0,this.clearRenewTimer(),this.options.onRequestRelaunch();return}(typeof i.fatal=="boolean"?i.fatal:o!=="load"||this.phase!=="ready")&&this.showError(o),this.options.onError?.(i);break}}};this.options=e}mount(){this.destroy();let e=new URL(this.options.designerUrl,window.location.href);if(e.protocol!=="https:"&&e.hostname!=="localhost"&&e.hostname!=="127.0.0.1")throw new Error("EmbeddedDesigner requires an HTTPS designerUrl outside local development.");this.designerOrigin=e.origin;let t=document.createElement("iframe");t.title=this.options.title??"Venue chart Designer",t.allow=this.options.allow??"fullscreen; clipboard-write",t.referrerPolicy=this.options.referrerPolicy??"origin",t.src=e.toString(),t.style.setProperty("width","100%","important"),t.style.setProperty("height",typeof this.options.height=="number"?`${this.options.height}px`:"100%","important"),t.style.border="0",Object.assign(t.style,this.options.style),this.options.className&&(t.className=this.options.className);let i=Le(this.options.container);if(this.containerEl=i,window.addEventListener("message",this.handleMessage),i.append(t),this.frame=t,this.fillEnabled()&&this.startFill(),this.phase="loading",this.loadingStateEnabled()){this.ensureContainerPositioned(i),this.renderOverlay(i,"loading");let s=this.options.loadingTimeoutMs??Qt;s>0&&Number.isFinite(s)&&(this.timeoutTimer=setTimeout(()=>{this.phase==="loading"&&this.showError("timeout")},s))}return t}setDesignerUrl(e){return this.options={...this.options,designerUrl:e},this.mount()}getIframe(){return this.frame}setSizing(e,t){this.options={...this.options,height:e,minHeight:t},this.frame&&(this.stopFill(),this.lastAutoHeight="",this.fillEnabled()?(this.pinned||this.setFrameHeight("100%"),this.startFill()):this.pinned||this.setFrameHeight(`${e}px`))}setRelaunchPolicy(e,t){this.options={...this.options,onRequestRelaunch:e,autoRenewSession:t},this.clearRenewTimer(),this.phase==="ready"&&this.scheduleRenewal(this.sessionExpiresAt)}destroy(){window.removeEventListener("message",this.handleMessage),this.stopFill(),this.unpinFullscreen(),this.clearTimeoutTimer(),this.clearRenewTimer(),this.removeOverlay(),this.restoreContainerStyle(),this.frame?.remove(),this.frame=null,this.containerEl=null,this.fillMode=null,this.designerOrigin="",this.phase="loading",this.identityEstablished=!1,this.sessionExpiresAt=void 0,this.lastAutoHeight=""}loadingStateEnabled(){return this.options.showLoadingState!==!1}autoResizeEnabled(){return this.options.autoResize!==!1}fillEnabled(){return typeof this.options.height!="number"}setFrameHeight(e){this.frame?.style.setProperty("height",e,"important")}detectFillMode(){let e=this.containerEl,t=this.frame;if(this.pinned||!e||!t)return this.fillMode??"viewport";let i=()=>e.getBoundingClientRect().height,s=t.style.getPropertyValue("height"),r=t.style.getPropertyPriority("height");t.style.setProperty("height","0px","important");let n=i();t.style.setProperty("height",`${si}px`,"important");let o=i();return s?t.style.setProperty("height",s,r):t.style.removeProperty("height"),!(o-n>ri)&&n>=ni?"container":"viewport"}applyFill(){if(!this.frame||this.pinned)return;let e=this.options.minHeight??Zt;if(this.fillMode==="container"&&this.containerEl){let s=Math.max(e,Math.round(this.containerEl.getBoundingClientRect().height));this.setFrameHeight(`${s}px`);return}let t=this.frame.getBoundingClientRect().top,i=Math.max(e,Math.round(window.innerHeight-t));this.setFrameHeight(`${i}px`)}syncContainerObserver(){let e=this.fillMode==="container"&&!!this.containerEl&&typeof ResizeObserver<"u";e&&!this.resizeObs?(this.resizeObs=new ResizeObserver(()=>this.scheduleFill()),this.resizeObs.observe(this.containerEl)):!e&&this.resizeObs&&(this.resizeObs.disconnect(),this.resizeObs=null)}startFill(){this.fillMode=this.detectFillMode(),this.syncContainerObserver(),this.applyFill(),!this.fillListening&&(this.fillListening=!0,window.addEventListener("resize",this.scheduleReprobe),window.addEventListener("orientationchange",this.scheduleReprobe),window.addEventListener("scroll",this.scheduleFill,{passive:!0}))}stopFill(){this.fillRaf!==null&&(cancelAnimationFrame(this.fillRaf),this.fillRaf=null),this.reprobeRaf!==null&&(cancelAnimationFrame(this.reprobeRaf),this.reprobeRaf=null),this.resizeObs&&(this.resizeObs.disconnect(),this.resizeObs=null),this.fillListening&&(this.fillListening=!1,window.removeEventListener("resize",this.scheduleReprobe),window.removeEventListener("orientationchange",this.scheduleReprobe),window.removeEventListener("scroll",this.scheduleFill))}pinFullscreen(){if(this.pinned||!this.frame)return;this.pinned=!0,this.frameStyleBeforeFs=this.frame.getAttribute("style");let e={position:"fixed",top:"0",right:"0",bottom:"0",left:"0",width:"100vw",height:"100vh",margin:"0",border:"0","z-index":"2147483000",background:"#101625"};for(let[i,s]of Object.entries(e))this.frame.style.setProperty(i,s,"important");let t=document.documentElement;this.docOverflowBeforeFs=t.style.overflow,t.style.overflow="hidden",document.body&&(this.bodyOverflowBeforeFs=document.body.style.overflow,document.body.style.overflow="hidden"),this.fsKeyHandler=i=>{i.key==="Escape"&&this.unpinFullscreen()},window.addEventListener("keydown",this.fsKeyHandler)}unpinFullscreen(){this.pinned&&(this.pinned=!1,this.frame&&(this.frameStyleBeforeFs===null?this.frame.removeAttribute("style"):this.frame.setAttribute("style",this.frameStyleBeforeFs),this.fillEnabled()?this.applyFill():this.autoResizeEnabled()&&this.lastAutoHeight?this.setFrameHeight(this.lastAutoHeight):typeof this.options.height=="number"&&this.setFrameHeight(`${this.options.height}px`)),this.frameStyleBeforeFs=null,this.docOverflowBeforeFs!==null&&(document.documentElement.style.overflow=this.docOverflowBeforeFs,this.docOverflowBeforeFs=null),this.bodyOverflowBeforeFs!==null&&document.body&&(document.body.style.overflow=this.bodyOverflowBeforeFs,this.bodyOverflowBeforeFs=null),this.fsKeyHandler&&(window.removeEventListener("keydown",this.fsKeyHandler),this.fsKeyHandler=null))}clearTimeoutTimer(){this.timeoutTimer!==null&&(clearTimeout(this.timeoutTimer),this.timeoutTimer=null)}autoRenewEnabled(){return!!this.options.onRequestRelaunch&&this.options.autoRenewSession!==!1}clearRenewTimer(){this.renewTimer!==null&&(clearTimeout(this.renewTimer),this.renewTimer=null)}scheduleRenewal(e){if(this.clearRenewTimer(),!this.autoRenewEnabled()||typeof e!="number"||!Number.isFinite(e))return;let t=e-Date.now();if(t<=0)return;let i=t<ei?t*ti:t-Jt,s=Math.max(ii,i);this.renewTimer=setTimeout(()=>{this.renewTimer=null,this.autoRenewEnabled()&&this.options.onRequestRelaunch()},s)}ensureContainerPositioned(e){getComputedStyle(e).position==="static"&&(this.restoreContainerPosition=e.style.position,e.style.position="relative")}restoreContainerStyle(){if(this.restoreContainerPosition!==null){try{Le(this.options.container).style.position=this.restoreContainerPosition}catch{}this.restoreContainerPosition=null}}removeOverlay(){this.overlay?.remove(),this.overlay=null}showError(e){if(this.phase="error",this.clearTimeoutTimer(),!this.loadingStateEnabled())return;let t;try{t=Le(this.options.container)}catch{return}this.renderOverlay(t,"error",e)}handleTryAgain(){if(this.options.onRequestRelaunch){this.options.onRequestRelaunch();return}this.mount()}renderOverlay(e,t,i){this.removeOverlay();let s=document.createElement("div");s.setAttribute("data-seatlayer-designer-overlay",t),s.setAttribute("role",t==="error"?"alert":"status"),s.setAttribute("aria-live","polite"),Object.assign(s.style,{position:"absolute",inset:"0",display:"flex",alignItems:"center",justifyContent:"center",background:"#101625",color:"#e6ebf5",fontFamily:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',zIndex:"2",overflow:"hidden"}),t==="loading"?this.buildSkeleton(s):this.buildErrorCard(s,i??"load"),e.append(s),this.overlay=s}buildSkeleton(e){let t=document.createElement("style");t.textContent=`
2
2
  @media (prefers-reduced-motion: no-preference) {
3
3
  @keyframes seatlayer-designer-shimmer {
4
4
  0% { background-position: -320px 0; }
@@ -8,7 +8,7 @@ import{a as H,b as j,c as I,d as N}from"./chunk-OSZ7DOEH.js";import{PickerContro
8
8
  animation: seatlayer-designer-shimmer 1.25s ease-in-out infinite;
9
9
  background-size: 640px 100%;
10
10
  }
11
- }`,e.append(t);let i="linear-gradient(90deg, rgba(255,255,255,0.04) 25%, rgba(255,255,255,0.10) 37%, rgba(255,255,255,0.04) 63%)",s=document.createElement("div");Object.assign(s.style,{position:"absolute",inset:"0",display:"flex",flexDirection:"column",padding:"16px",gap:"14px",opacity:"0.9"});let r=l=>{let p=document.createElement("div");return p.className="sl-shimmer",Object.assign(p.style,{background:i,borderRadius:"8px"}),Object.assign(p.style,l),p};s.append(r({height:"40px",width:"100%",flex:"0 0 auto"}));let n=document.createElement("div");Object.assign(n.style,{display:"flex",gap:"14px",flex:"1 1 auto",minHeight:"0"}),n.append(r({width:"220px",height:"100%",flex:"0 0 auto"})),n.append(r({flex:"1 1 auto",height:"100%"})),s.append(n),e.append(s);let o=document.createElement("div");Object.assign(o.style,{position:"relative",zIndex:"1",display:"flex",alignItems:"center",gap:"10px",padding:"10px 16px",borderRadius:"999px",background:"rgba(16, 22, 37, 0.72)",fontSize:"13px",fontWeight:"500",letterSpacing:"0.01em"});let c=document.createElement("span");c.className="sl-shimmer",Object.assign(c.style,{width:"9px",height:"9px",borderRadius:"50%",background:i,flex:"0 0 auto"}),o.append(c),o.append(document.createTextNode("Loading designer\u2026")),e.append(o)}buildErrorCard(e,t){let i=ti[t],s=document.createElement("div");Object.assign(s.style,{maxWidth:"420px",margin:"0 24px",padding:"28px",textAlign:"center",background:"rgba(255, 255, 255, 0.03)",border:"1px solid rgba(255, 255, 255, 0.08)",borderRadius:"16px",boxShadow:"0 12px 40px rgba(0, 0, 0, 0.35)"});let r=document.createElement("h2");r.textContent=i.title,Object.assign(r.style,{margin:"0 0 8px",fontSize:"17px",fontWeight:"600",color:"#f4f7ff"});let n=document.createElement("p");n.textContent=i.body,Object.assign(n.style,{margin:"0 0 20px",fontSize:"13.5px",lineHeight:"1.5",color:"#aab4c8"});let o=document.createElement("button");o.type="button",o.textContent="Try again",Object.assign(o.style,{appearance:"none",cursor:"pointer",border:"0",borderRadius:"10px",padding:"10px 22px",fontSize:"14px",fontWeight:"600",color:"#101625",background:"#7aa2ff"}),o.addEventListener("click",()=>this.handleTryAgain()),s.append(r,n,o),e.append(s)}};import{PickerController as gi,ACCESSIBILITY_TYPES as yi,expandChart as Ve,generateSeatThumb as xi,loadLocale as wi,setStringOverrides as ki,t as x,tCount as Y}from"@seatlayer/core";import{isAuthoredSeatView as Si,seatViewDisclosure as yt}from"@seatlayer/core/view3d/crossfade/panorama";import{seatConfidenceDisclosure as xt}from"@seatlayer/core/core/seatConfidence";import{browserPanoramaConstraints as Ei,loadPanoramaImage as Ti,planPanoramaDelivery as Ci,schedulePanoramaUpgrade as Ai}from"@seatlayer/core/view/panoramaDelivery";var ii=/^[a-zA-Z0-9._-]+$/;function si(a){let e;try{e=new URL(a,"https://seatlayer.invalid")}catch{return null}if(e.search||e.hash)return null;let t=/^\/pub\/events\/([^/]+)\/assets\/([^/]+)$/.exec(e.pathname);if(!t)return null;try{let i=decodeURIComponent(t[1]),s=decodeURIComponent(t[2]);return!i||!ii.test(s)?null:{eventKey:i,asset:s}}catch{return null}}function ri(a){try{return/^\/pub\/events\/[^/]+\/assets(?:\/|$)/.test(new URL(a,"https://seatlayer.invalid").pathname)}catch{return!1}}var xe=class{constructor(e,t){this.eventKey=e;this.load=t;this.pending=new Map;this.created=new Set;this.disposed=!1}resolve(e){let t=si(e);if(!t)return Promise.resolve(ri(e)?null:e);if(t.eventKey!==this.eventKey||!this.load||this.disposed)return Promise.resolve(null);let i=this.pending.get(e);if(i)return i;let s=this.load(this.eventKey,t.asset).then(r=>{let n=URL.createObjectURL(r);return this.disposed?(URL.revokeObjectURL(n),null):(this.created.add(n),n)}).catch(r=>{throw this.pending.delete(e),r});return this.pending.set(e,s),s}dispose(){if(!this.disposed){this.disposed=!0;for(let e of this.created)URL.revokeObjectURL(e);this.created.clear(),this.pending.clear()}}};var ni=["on-sale","low","sold-out","presale","closed"];function we(a){return a==null?null:typeof a=="number"&&Number.isFinite(a)&&a>=0?a:void 0}function et(a){return a==null?null:typeof a=="number"&&Number.isFinite(a)&&a>=0?a:void 0}function Je(a){if(a==null)return null;if(typeof a!="object"||Array.isArray(a))return;let e=a,t=e.count,i=e.index;if(typeof i!="number"||!Number.isInteger(i)||i<1||typeof t!="number"||!Number.isInteger(t)||t<i)return;let s=e.remaining;if(s!=null&&(typeof s!="number"||!Number.isInteger(s)||s<0))return;let r={index:i,count:t,remaining:s??null};if(e.id!==void 0){if(typeof e.id!="string"||!e.id.trim())return;r.id=e.id.trim()}if(e.name!==void 0){if(typeof e.name!="string"||!e.name.trim())return;r.name=e.name.trim()}if(e.categoryKey!==void 0){if(e.categoryKey!==null&&(typeof e.categoryKey!="string"||!e.categoryKey.trim()))return;r.categoryKey=e.categoryKey==null?null:e.categoryKey.trim()}for(let n of["startsAt","endsAt"]){if(e[n]===void 0)continue;let o=et(e[n]);if(o===void 0)return;r[n]=o}return r}function Pe(a){if(!a||typeof a!="object"||Array.isArray(a))return null;let e=a,t=ni.find(l=>l===e.state);if(!t)return null;let i=we(e.fromPrice),s=we(e.previousPrice);if(i===void 0||s===void 0)return null;let r=e.currency==null?null:typeof e.currency=="string"&&e.currency.trim()?e.currency.trim():void 0;if(r===void 0)return null;let n=Je(e.release);if(n===void 0)return null;let o=e.upcoming===void 0?null:Je(e.upcoming);if(o===void 0)return null;let c=[];if(e.prices!=null){if(!Array.isArray(e.prices))return null;let l=[];for(let p of e.prices){if(!p||typeof p!="object"||Array.isArray(p))return null;let d=p,h=typeof d.categoryKey=="string"?d.categoryKey.trim():"";if(!h)return null;let b=we(d.price),m=we(d.previousPrice);if(b==null||m===void 0)return null;let f={categoryKey:h,price:b,previousPrice:m};if(d.offerId!==void 0){if(typeof d.offerId!="string"||!d.offerId.trim())return null;f.offerId=d.offerId.trim()}if(d.offerName!==void 0){if(typeof d.offerName!="string"||!d.offerName.trim())return null;f.offerName=d.offerName.trim()}if(d.remaining!==void 0){if(d.remaining!==null&&(typeof d.remaining!="number"||!Number.isInteger(d.remaining)||d.remaining<0))return null;f.remaining=d.remaining==null?null:d.remaining}for(let S of["startsAt","endsAt"]){if(d[S]===void 0)continue;let E=et(d[S]);if(E===void 0)return null;f[S]=E}l.push(f)}c=l}return{state:t,fromPrice:i,previousPrice:s,currency:r,release:n,upcoming:o,prices:c}}function tt(a,e){if(!a)return null;let t=null,i=s=>{s!=null&&s>e&&(t===null||s<t)&&(t=s)};for(let s of[a.release,a.upcoming])i(s?.startsAt),i(s?.endsAt);for(let s of a.prices)i(s.startsAt),i(s.endsAt);return t}function He(a){let e={};for(let t of a?.prices??[])e[t.categoryKey]=t.price;return e}var it="seatlayer-picker-style",oi=`
11
+ }`,e.append(t);let i="linear-gradient(90deg, rgba(255,255,255,0.04) 25%, rgba(255,255,255,0.10) 37%, rgba(255,255,255,0.04) 63%)",s=document.createElement("div");Object.assign(s.style,{position:"absolute",inset:"0",display:"flex",flexDirection:"column",padding:"16px",gap:"14px",opacity:"0.9"});let r=d=>{let h=document.createElement("div");return h.className="sl-shimmer",Object.assign(h.style,{background:i,borderRadius:"8px"}),Object.assign(h.style,d),h};s.append(r({height:"40px",width:"100%",flex:"0 0 auto"}));let n=document.createElement("div");Object.assign(n.style,{display:"flex",gap:"14px",flex:"1 1 auto",minHeight:"0"}),n.append(r({width:"220px",height:"100%",flex:"0 0 auto"})),n.append(r({flex:"1 1 auto",height:"100%"})),s.append(n),e.append(s);let o=document.createElement("div");Object.assign(o.style,{position:"relative",zIndex:"1",display:"flex",alignItems:"center",gap:"10px",padding:"10px 16px",borderRadius:"999px",background:"rgba(16, 22, 37, 0.72)",fontSize:"13px",fontWeight:"500",letterSpacing:"0.01em"});let l=document.createElement("span");l.className="sl-shimmer",Object.assign(l.style,{width:"9px",height:"9px",borderRadius:"50%",background:i,flex:"0 0 auto"}),o.append(l),o.append(document.createTextNode("Loading designer\u2026")),e.append(o)}buildErrorCard(e,t){let i=ai[t],s=document.createElement("div");Object.assign(s.style,{maxWidth:"420px",margin:"0 24px",padding:"28px",textAlign:"center",background:"rgba(255, 255, 255, 0.03)",border:"1px solid rgba(255, 255, 255, 0.08)",borderRadius:"16px",boxShadow:"0 12px 40px rgba(0, 0, 0, 0.35)"});let r=document.createElement("h2");r.textContent=i.title,Object.assign(r.style,{margin:"0 0 8px",fontSize:"17px",fontWeight:"600",color:"#f4f7ff"});let n=document.createElement("p");n.textContent=i.body,Object.assign(n.style,{margin:"0 0 20px",fontSize:"13.5px",lineHeight:"1.5",color:"#aab4c8"});let o=document.createElement("button");o.type="button",o.textContent="Try again",Object.assign(o.style,{appearance:"none",cursor:"pointer",border:"0",borderRadius:"10px",padding:"10px 22px",fontSize:"14px",fontWeight:"600",color:"#101625",background:"#7aa2ff"}),o.addEventListener("click",()=>this.handleTryAgain()),s.append(r,n,o),e.append(s)}};import{PickerController as Pi,ACCESSIBILITY_TYPES as Hi,expandChart as Ve,formatMoney as Ri,generateSeatThumb as Oi,loadLocale as $i,setStringOverrides as Ii,t as y,tCount as q}from"@seatlayer/core";import{isAuthoredSeatView as Bi,seatViewDisclosure as Tt}from"@seatlayer/core/view3d/crossfade/panorama";import{seatConfidenceDisclosure as Et}from"@seatlayer/core/core/seatConfidence";var li=/^[a-zA-Z0-9._-]+$/;function ci(a){let e;try{e=new URL(a,"https://seatlayer.invalid")}catch{return null}if(e.search||e.hash)return null;let t=/^\/pub\/events\/([^/]+)\/assets\/([^/]+)$/.exec(e.pathname);if(!t)return null;try{let i=decodeURIComponent(t[1]),s=decodeURIComponent(t[2]);return!i||!li.test(s)?null:{eventKey:i,asset:s}}catch{return null}}function di(a){try{return/^\/pub\/events\/[^/]+\/assets(?:\/|$)/.test(new URL(a,"https://seatlayer.invalid").pathname)}catch{return!1}}var ve=class{constructor(e,t){this.eventKey=e;this.load=t;this.pending=new Map;this.created=new Set;this.disposed=!1}resolve(e){let t=ci(e);if(!t)return Promise.resolve(di(e)?null:e);if(t.eventKey!==this.eventKey||!this.load||this.disposed)return Promise.resolve(null);let i=this.pending.get(e);if(i)return i;let s=this.load(this.eventKey,t.asset).then(r=>{let n=URL.createObjectURL(r);return this.disposed?(URL.revokeObjectURL(n),null):(this.created.add(n),n)}).catch(r=>{throw this.pending.delete(e),r});return this.pending.set(e,s),s}dispose(){if(!this.disposed){this.disposed=!0;for(let e of this.created)URL.revokeObjectURL(e);this.created.clear(),this.pending.clear()}}};var pi=["on-sale","low","sold-out","presale","closed"];function ge(a){return a==null?null:typeof a=="number"&&Number.isFinite(a)&&a>=0?a:void 0}function st(a){return a==null?null:typeof a=="number"&&Number.isFinite(a)&&a>=0?a:void 0}function it(a){if(a==null)return null;if(typeof a!="object"||Array.isArray(a))return;let e=a,t=e.count,i=e.index;if(typeof i!="number"||!Number.isInteger(i)||i<1||typeof t!="number"||!Number.isInteger(t)||t<i)return;let s=e.remaining;if(s!=null&&(typeof s!="number"||!Number.isInteger(s)||s<0))return;let r={index:i,count:t,remaining:s??null};if(e.id!==void 0){if(typeof e.id!="string"||!e.id.trim())return;r.id=e.id.trim()}if(e.name!==void 0){if(typeof e.name!="string"||!e.name.trim())return;r.name=e.name.trim()}if(e.categoryKey!==void 0){if(e.categoryKey!==null&&(typeof e.categoryKey!="string"||!e.categoryKey.trim()))return;r.categoryKey=e.categoryKey==null?null:e.categoryKey.trim()}for(let n of["startsAt","endsAt"]){if(e[n]===void 0)continue;let o=st(e[n]);if(o===void 0)return;r[n]=o}return r}function Pe(a){if(!a||typeof a!="object"||Array.isArray(a))return null;let e=a,t=pi.find(d=>d===e.state);if(!t)return null;let i=ge(e.fromPrice),s=ge(e.previousPrice);if(i===void 0||s===void 0)return null;let r=e.currency==null?null:typeof e.currency=="string"&&e.currency.trim()?e.currency.trim():void 0;if(r===void 0)return null;let n=it(e.release);if(n===void 0)return null;let o=e.upcoming===void 0?null:it(e.upcoming);if(o===void 0)return null;let l=[];if(e.prices!=null){if(!Array.isArray(e.prices))return null;let d=[];for(let h of e.prices){if(!h||typeof h!="object"||Array.isArray(h))return null;let c=h,p=typeof c.categoryKey=="string"?c.categoryKey.trim():"";if(!p)return null;let f=ge(c.price),m=ge(c.previousPrice);if(f==null||m===void 0)return null;let v={categoryKey:p,price:f,previousPrice:m};if(c.offerId!==void 0){if(typeof c.offerId!="string"||!c.offerId.trim())return null;v.offerId=c.offerId.trim()}if(c.offerName!==void 0){if(typeof c.offerName!="string"||!c.offerName.trim())return null;v.offerName=c.offerName.trim()}if(c.remaining!==void 0){if(c.remaining!==null&&(typeof c.remaining!="number"||!Number.isInteger(c.remaining)||c.remaining<0))return null;v.remaining=c.remaining==null?null:c.remaining}for(let S of["startsAt","endsAt"]){if(c[S]===void 0)continue;let w=st(c[S]);if(w===void 0)return null;v[S]=w}d.push(v)}l=d}return{state:t,fromPrice:i,previousPrice:s,currency:r,release:n,upcoming:o,prices:l}}function rt(a,e){if(!a)return null;let t=null,i=s=>{s!=null&&s>e&&(t===null||s<t)&&(t=s)};for(let s of[a.release,a.upcoming])i(s?.startsAt),i(s?.endsAt);for(let s of a.prices)i(s.startsAt),i(s.endsAt);return t}function He(a){let e={};for(let t of a?.prices??[])e[t.categoryKey]=t.price;return e}var nt="seatlayer-picker-style",hi=`
12
12
  .sl-picker{position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-height:420px;overflow:hidden;
13
13
  background:var(--sl-bg);color:var(--sl-text);font-family:var(--sl-font);border-radius:var(--sl-radius);
14
14
  --sl-r-sm:calc(var(--sl-radius) * .55);
@@ -1173,7 +1173,7 @@ import{a as H,b as j,c as I,d as N}from"./chunk-OSZ7DOEH.js";import{PickerContro
1173
1173
  corners, and it is the frame. */
1174
1174
  .sl-modal-frame > .sl-picker{border-radius:0}
1175
1175
  @media(max-width:640px){.sl-modal-scrim{padding:0}.sl-modal-frame{width:100%;height:100%;border-radius:0}}
1176
- `;function Re(){if(document.getElementById(it))return;let a=document.createElement("style");a.id=it,a.textContent=oi,document.head.appendChild(a)}function Q(a){if(!a)return null;let e=a.trim().toLowerCase();if(e==="white")return{r:255,g:255,b:255};if(e==="black")return{r:0,g:0,b:0};let t=/^#([0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(e)?.[1];if(t){let s=t.length<=4?[...t].map(r=>`${r}${r}`).join(""):t;return{r:Number.parseInt(s.slice(0,2),16),g:Number.parseInt(s.slice(2,4),16),b:Number.parseInt(s.slice(4,6),16)}}let i=/^rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)(?:\s*[,/]\s*[\d.]+%?)?\s*\)$/i.exec(e);return i?{r:Math.max(0,Math.min(255,Number(i[1]))),g:Math.max(0,Math.min(255,Number(i[2]))),b:Math.max(0,Math.min(255,Number(i[3])))}:null}function ke(a){let e=t=>{let i=t/255;return i<=.04045?i/12.92:((i+.055)/1.055)**2.4};return .2126*e(a.r)+.7152*e(a.g)+.0722*e(a.b)}function K(a,e){let t=Q(a),i=Q(e);if(!t||!i)return null;let s=Math.max(ke(t),ke(i)),r=Math.min(ke(t),ke(i));return(s+.05)/(r+.05)}function fe(a,e="#172033",t="#eef1f8"){return(K(e,a)??0)>=(K(t,a)??0)?e:t}function ai(a){let e=t=>Math.round(t).toString(16).padStart(2,"0");return`#${e(a.r)}${e(a.g)}${e(a.b)}`}function $e(a,e,t){let i=Q(a),s=Q(e);if(!i||!s)return null;let r=Math.max(0,Math.min(1,t));return ai({r:i.r*r+s.r*(1-r),g:i.g*r+s.g*(1-r),b:i.b*r+s.b*(1-r)})}function li(a,e,t,i){if((K(a,t)??4.5)>=4.5&&(K(a,i)??4.5)>=4.5)return a;if(!Q(a)||!Q(e))return e;for(let s=.15;s<=1;s+=.05){let r=$e(a,e,1-s);if(r&&(K(r,t)??0)>=4.5&&(K(r,i)??0)>=4.5)return r}return e}function Ie(a,e){let t=e?.background??a?.background??"#0f1522",i=Q(t)?fe(t)==="#172033":!1,s=e?.surface??(i?"#ffffff":"#1a2234"),r=e?.accent??a?.accent??"#f4b740",n=a?.accentInk,o=e?.accentInk??(n&&(K(n,r)??4.5)>=4.5?n:fe(r,"#1a1200","#ffffff")),c=a?.textColor,l=e?.text??(c&&(K(c,t)??4.5)>=4.5&&(K(c,s)??4.5)>=4.5?c:fe(t));return{"--sl-accent":r,"--sl-accent-ink":o,"--sl-accent-text":li(r,l,t,s),"--sl-bg":t,"--sl-surface":s,"--sl-text":l,"--sl-muted":e?.muted??(i?"#667085":"#a5aec2"),"--sl-line":e?.line??(i?"rgba(23,32,51,.16)":"rgba(165,174,194,.24)"),"--sl-font":e?.fontFamily??a?.fontFamily??"-apple-system,BlinkMacSystemFont,'Segoe UI',Inter,sans-serif","--sl-radius":`${e?.radius??14}px`}}import{seatConfidenceDisclosure as pi}from"@seatlayer/core/core/seatConfidence";import{t as ci}from"@seatlayer/core";function k(a,e){let t=ci(a);return t===a?e:t}function st(a){if(typeof a=="string"){let e=document.querySelector(a);if(!e)throw new Error(`seatmap: container "${a}" not found`);return e}if(!(a instanceof HTMLElement))throw new Error("seatmap: container must be a CSS selector or an HTMLElement");return a}function B(a){return String(a??"").replace(/[&<>"']/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[e])}var di=(()=>{if(typeof document<"u"&&document.currentScript instanceof HTMLScriptElement&&document.currentScript.src)return document.currentScript.src;try{let a=import.meta.url;if(typeof a=="string"&&a)return a}catch{}})(),oe=null;function rt(){if(oe!==null)return oe;try{if(typeof document>"u")return oe=!1;oe=!!document.createElement("canvas").getContext("webgl2")}catch{oe=!1}return oe}function Oe(a){let e=di??(typeof location<"u"?location.href:void 0);if(!e)throw new Error(`seatlayer: cannot resolve the ${a} chunk URL`);return new URL(`./${a}`,e).href}async function nt(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import(Oe("seatlayer-view3d.mjs")):import("@seatlayer/core/view3d")}async function ot(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import(Oe("seatlayer-panorama.mjs")):import("@seatlayer/core")}async function at(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import(Oe("seatlayer-checkout.mjs")):import("./hostedCheckout-3NTOVIZG.js")}function lt(a){return a==="unavailable_for_event"||a==="payments_off_for_event"?a:"not_configured"}function Se(a,e,t){let i={month:"short",day:"numeric",hour:"numeric",minute:"2-digit"},s=new Date(a);if(e)try{return s.toLocaleString(t,{...i,timeZone:e})}catch{}return s.toLocaleString(t,i)}function V(a){return String(a??"").replace(/[&<>"]/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[e])}function ae(a){return a?.restrictedView?k("picker.restrictedView","Restricted view"):a?.obstructedView?k("picker.obstructedView","Obstructed view"):""}function ct(a){if(!a)return"";let e=[];a.premium&&e.push(`<div class="sl-cx-premium"><span class="sl-cx-star" aria-hidden="true">\u2605</span>${k("picker.premiumSeat","Premium seat")}</div>`);let t=ae(a);return t?e.push(`<div class="sl-cx-warn"><span class="sl-cx-glyph" aria-hidden="true">\u25D0</span><span class="sl-cx-txt"><b>${t}</b>${a.note?`<span class="sl-cx-note">${V(a.note)}</span>`:""}</span></div>`):a.note&&e.push(`<div class="sl-cx-warn"><span class="sl-cx-glyph" aria-hidden="true">\u2139</span><span class="sl-cx-txt"><span class="sl-cx-note">${V(a.note)}</span></span></div>`),e.length?`<div class="sl-cx">${e.join("")}</div>`:""}function Be(a){let e=ae(a);if(!e)return"";let t=V(a?.note?a.note:e);return`<span class="sl-cx-mark" role="img" aria-label="${t}" title="${t}">\u25D0</span>`}function be(a){return a==="no-seat"?k("picker.emptyWheelchairSpace","Empty wheelchair space"):a==="seat-present"?k("picker.accessiblePhysicalSeat","Accessible physical seat"):""}function dt(a){let e=be(a);return e?`<div class="sl-cx"><div class="sl-cx-warn"><span class="sl-cx-glyph" aria-hidden="true">\u267F</span><span class="sl-cx-txt"><b>${e}</b></span></div></div>`:""}function ze(a){let e=be(a);return e?`<span class="sl-cx-mark" role="img" aria-label="${e}" title="${e}">\u267F</span>`:""}function Fe(a,e){if(!a)return"";let t=e?k("picker.viewFromThisSeat","View from this seat"):k("picker.seeItIn3d","See it in 3D");return`<button type="button" class="sl-confirm-3d" aria-label="${t}"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2l9 5v10l-9 5-9-5V7z"/><path d="M12 12l9-5M12 12v10M12 12L3 7"/></svg><span>${t}</span></button>`}function pt(a){if(!a)return"";let e=a.previous.label||a.previous.id,t=a.next.label||a.next.id;return`<span class="sl-seccard-nav" aria-label="${k("picker.browseSections","Browse sections")}"><button type="button" data-section-nav="${B(a.previous.id)}" aria-label="${k("picker.previousSection","Previous section")}: ${B(e)}" title="${B(e)}">\u2190</button><button type="button" data-section-nav="${B(a.next.id)}" aria-label="${k("picker.nextSection","Next section")}: ${B(t)}" title="${B(t)}">\u2192</button></span>`}function ht(a,e){if(!e)return"";let t=e,i=t.includes(a.id),s=i?t.length>1?k("picker.openComparison","Open comparison"):k("picker.savedForComparison","Saved for comparison"):t.length?k("picker.compareWithSaved","Compare with saved"):k("picker.saveToCompare","Save to compare");return`<button type="button" class="sl-confirm-compare"${i&&t.length===1?" disabled":""}><span aria-hidden="true">\u21C4</span><span>${V(s)}</span></button>`}function ut(a,e,t){if(!t)return"";let i=pi(a.confidenceEvidence),s=i.modeledTarget??i.reality;return`<button type="button" class="sl-confirm-confidence" aria-label="Open seat confidence passport for ${V(a.displayLabel??a.label)}"><span><em>${V(e)}</em><strong>${V(i.headline)}</strong><small>${V(s)}</small></span><b>Passport</b></button>`}function Z(a){let e=a?.rowLabel,t=a?.sectionLabel;if(!e||!t)return e;for(let i of["-"," ","\xB7","/","_"]){let s=`${t}${i}`;if(e.startsWith(s)&&e.length>s.length)return e.slice(s.length)}return e}import{pointInPolygon as hi}from"@seatlayer/core";import{createMinimapTransform as ui,minimapPointToWorld as mi,minimapViewportPlan as fi}from"@seatlayer/core/picker/minimapGeometry";function mt(a,e){let t=new De(a);return t.build(e),t}var De=class{constructor(e){this.host=e;this.miniCanvas=null;this.miniBase=null;this.miniWrap=null;this.miniToggle=null;this.miniLabel=null;this.miniTf=null;this.miniDrag=null;this.miniSuppressClick=!1}build(e){if(!this.host.controller.getViewport())return;let i=document.createElement("button");i.type="button",i.className="sl-minimap-toggle",i.setAttribute("aria-label",k("picker.openVenueMap","Open venue overview map")),i.setAttribute("aria-expanded","false"),i.innerHTML='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M3 6l5-2 8 3 5-2v13l-5 2-8-3-5 2zM8 4v13M16 7v13"/></svg>',e.appendChild(i),this.miniToggle=i;let s=document.createElement("div");s.className="sl-minimap",s.setAttribute("role","group");let r=document.createElement("div");r.className="sl-minimap-bar";let n=document.createElement("span");n.className="sl-minimap-label";let o=document.createElement("span");o.className="sl-minimap-key",o.setAttribute("aria-label",k("picker.minimapStateKey","Focused, selected, available, and inactive sections")),o.innerHTML='<i class="focused" title="Focused"></i><i class="selected" title="Selected"></i><i title="Available"></i><i class="inactive" title="Inactive"></i>';let c=document.createElement("button");c.type="button",c.className="sl-minimap-close",c.setAttribute("aria-label",k("picker.closeVenueMap","Close venue overview map")),c.textContent="\xD7",r.append(n,o,c);let l=document.createElement("canvas");l.tabIndex=0,l.setAttribute("role","application"),l.setAttribute("aria-label",k("picker.venueMapInstructions","Venue overview map. Drag the viewport, click a section, or use arrow keys to pan.")),s.append(r,l),e.appendChild(s),this.miniWrap=s,this.miniLabel=n,this.miniCanvas=l;let p=document.createElement("canvas");this.miniBase=p,i.addEventListener("click",()=>this.setMinimapOpen(!0)),c.addEventListener("click",()=>this.setMinimapOpen(!1)),l.addEventListener("click",d=>{if(this.miniSuppressClick){this.miniSuppressClick=!1;return}this.minimapJump(d)}),l.addEventListener("pointerdown",d=>this.minimapPointerDown(d)),l.addEventListener("pointermove",d=>this.minimapPointerMove(d)),l.addEventListener("pointerup",d=>this.minimapPointerUp(d)),l.addEventListener("pointercancel",d=>this.minimapPointerUp(d)),l.addEventListener("keydown",d=>this.minimapKeydown(d)),this.layoutMinimap(),this.syncMinimapLabel(),this.drawMinimapStatic(),this.drawMinimapRect()}setMinimapOpen(e){this.host.root()?.setAttribute("data-minimap-open",String(e)),this.miniToggle?.setAttribute("aria-expanded",String(e)),e?this.miniCanvas?.focus():this.miniToggle?.focus()}layoutMinimap(){let e=this.miniCanvas,t=this.miniBase,i=this.host.controller.getViewport()?.bounds;if(!e||!t||!i||!(i.width>0&&i.height>0))return;let s=196,r=146,n=6,o=i.width/Math.max(1,i.height),c=s,l=Math.round(s/o);l>r&&(l=r,c=Math.round(r*o)),c=Math.max(64,c),l=Math.max(48,l);let p=Math.min(2,window.devicePixelRatio||1);e.width=Math.round(c*p),e.height=Math.round(l*p),e.style.width=`${c}px`,e.style.height=`${l}px`,t.width=e.width,t.height=e.height,this.miniTf=ui(i,e.width,e.height,p,n)}syncMinimapLabel(){if(!this.miniLabel||!this.miniWrap)return;let e=this.host.controller.getFloors(),t=this.host.controller.isFloorOverview()?k("picker.allFloors","All floors"):e.find(p=>p.id===this.host.controller.getActiveFloorId())?.name??k("picker.venueOverview","Venue overview"),i=this.host.controller.getMinimapSnapshot().sections,r=i.find(p=>p.active)?.label??this.host.focusedSectionLabel(),n=r?`${t} \xB7 ${r}`:t;this.miniLabel.textContent=n;let o=i.filter(p=>p.state==="selected").length,c=i.filter(p=>p.state==="available").length,l=i.filter(p=>p.state==="inactive").length;this.miniWrap.setAttribute("aria-label",i.length?`${n}. ${o} selected, ${c} available, ${l} inactive sections.`:n),this.miniCanvas?.setAttribute("aria-label",i.length?`${n}. ${o} selected, ${c} available, ${l} inactive sections. ${k("picker.venueMapInstructions","The outlined region is the visible map area. Drag it, click a section, or use arrow keys to pan.")}`:`${n}. ${k("picker.venueMapInstructions","The outlined region is the visible map area. Drag it, click elsewhere, or use arrow keys to pan.")}`)}refreshMinimap(){this.miniBase&&(this.layoutMinimap(),this.syncMinimapLabel(),this.drawMinimapStatic(),this.drawMinimapRect())}drawMinimapStatic(){let e=this.miniBase,t=this.miniTf;if(!e||!t)return;let i=e.getContext("2d");if(!i)return;i.clearRect(0,0,e.width,e.height);let s=d=>d*t.scale+t.offX,r=d=>d*t.scale+t.offY,n=this.host.cssVar("--sl-line")||"rgba(139,147,167,.5)",o=this.host.cssVar("--sl-muted")||"#8b93a7",c=this.host.cssVar("--sl-accent")||"#6e7bff",l=this.host.cssVar("--sl-success")||"#22a06b",p=this.host.controller.getMinimapSnapshot();for(let d of p.sections)d.outline.length<3||(i.beginPath(),d.outline.forEach((h,b)=>b===0?i.moveTo(s(h.x),r(h.y)):i.lineTo(s(h.x),r(h.y))),i.closePath(),i.globalAlpha=d.state==="inactive"?.18:d.state==="selected"?.72:.34,i.fillStyle=d.state==="inactive"?o:d.state==="selected"?c:l,i.fill(),i.globalAlpha=.82,i.lineWidth=Math.max(1,t.dpr),i.strokeStyle=n,i.stroke(),d.active&&(i.globalAlpha=1,i.lineJoin="round",i.lineWidth=Math.max(4,t.dpr*3.5),i.strokeStyle=this.host.cssVar("--sl-surface")||"#fff",i.stroke(),i.lineWidth=Math.max(2,t.dpr*1.75),i.strokeStyle=c,i.stroke()));if(i.globalAlpha=1,!p.sections.length){let d=Math.max(1,t.dpr);for(let h of p.seats)i.globalAlpha=h.state==="inactive"?.22:.78,i.fillStyle=h.state==="inactive"?o:h.state==="selected"?c:l,i.beginPath(),i.arc(s(h.x),r(h.y),d,0,Math.PI*2),i.fill();i.globalAlpha=1}}drawMinimapRect(){let e=this.miniCanvas,t=this.miniBase,i=this.miniTf;if(!e||!t||!i)return;let s=e.getContext("2d");if(!s)return;s.clearRect(0,0,e.width,e.height),s.drawImage(t,0,0);let r=this.host.controller.getViewport();if(!r)return;let n=fi(r.visible,i,e.width,e.height,Math.max(2,i.dpr*2)),o=this.host.cssVar("--sl-text")||"#12151c",c=this.host.cssVar("--sl-surface")||"#fff";s.save(),s.globalAlpha=.1,s.fillStyle=o,s.fillRect(n.raw.x,n.raw.y,n.raw.width,n.raw.height),s.globalAlpha=.9,s.lineJoin="round",s.lineWidth=Math.max(4,i.dpr*3.25),s.strokeStyle=c,s.strokeRect(n.raw.x,n.raw.y,n.raw.width,n.raw.height),s.globalAlpha=1,s.lineWidth=Math.max(2,i.dpr*1.75),s.strokeStyle=o,s.strokeRect(n.raw.x,n.raw.y,n.raw.width,n.raw.height),n.clipped&&Object.values(n.clippedEdges).some(Boolean)&&(s.setLineDash([Math.max(3,i.dpr*3),Math.max(2,i.dpr*2)]),s.strokeRect(n.clipped.x,n.clipped.y,n.clipped.width,n.clipped.height)),s.restore()}minimapWorldPoint(e){let t=this.miniCanvas,i=this.miniTf;if(!t||!i)return null;let s=t.getBoundingClientRect(),r=(e.clientX-s.left)*(t.width/Math.max(1,s.width)),n=(e.clientY-s.top)*(t.height/Math.max(1,s.height));return{...mi({x:r,y:n},i),px:r,py:n}}minimapPointerDown(e){let t=this.minimapWorldPoint(e),i=this.host.controller.getViewport()?.visible;!t||!i||!(t.x>=i.x&&t.x<=i.x+i.width&&t.y>=i.y&&t.y<=i.y+i.height)||(this.miniDrag={pointerId:e.pointerId,offsetX:t.x-(i.x+i.width/2),offsetY:t.y-(i.y+i.height/2),startX:e.clientX,startY:e.clientY,moved:!1},this.miniCanvas?.setPointerCapture(e.pointerId),this.miniCanvas?.classList.add("sl-dragging"),e.preventDefault())}minimapPointerMove(e){let t=this.miniDrag;if(!t||t.pointerId!==e.pointerId)return;let i=this.minimapWorldPoint(e);i&&(!t.moved&&Math.hypot(e.clientX-t.startX,e.clientY-t.startY)>2&&(t.moved=!0,this.host.controller.clearSectionFocus()),this.host.controller.panToWorld({x:i.x-t.offsetX,y:i.y-t.offsetY}),e.preventDefault())}minimapPointerUp(e){let t=this.miniDrag;!t||t.pointerId!==e.pointerId||(this.miniSuppressClick=t.moved,this.miniDrag=null,this.miniCanvas?.classList.remove("sl-dragging"),this.miniCanvas?.hasPointerCapture(e.pointerId)&&this.miniCanvas.releasePointerCapture(e.pointerId))}minimapKeydown(e){let t=this.host.controller.getViewport()?.visible;if(!t)return;if(e.key==="Home"){this.host.controller.overview(),e.preventDefault();return}let i=e.key==="ArrowLeft"?-t.width*.2:e.key==="ArrowRight"?t.width*.2:0,s=e.key==="ArrowUp"?-t.height*.2:e.key==="ArrowDown"?t.height*.2:0;!i&&!s||(this.host.controller.clearSectionFocus(),this.host.controller.panToWorld({x:t.x+t.width/2+i,y:t.y+t.height/2+s}),e.preventDefault())}minimapJump(e){let t=this.minimapWorldPoint(e);if(t){for(let i of this.host.controller.getMinimapSnapshot().sections)if(!(i.state==="inactive"||i.outline.length<3)&&hi(t,i.outline)){this.host.controller.focusSection(i.id);return}this.host.controller.clearSectionFocus(),this.host.controller.panToWorld(t)}}};import{t as _e}from"@seatlayer/core";var bi=12;function ft(a,e){let t=e.floors(),i=new Set(t.map(f=>f.label.trim().toLocaleLowerCase())),s=e.zones().filter(f=>f.seatCount>0&&!i.has(f.label.trim().toLocaleLowerCase())),r=e.sections().filter(f=>f.seatCount>0&&!i.has(f.label.trim().toLocaleLowerCase())),n=s.length>1?[]:r,o=t.length>1,c=s.length>1,l=n.length>1;if(!o&&!c&&!l)return;let p=document.createElement("div");p.className="sl-view3d-nav";let d=document.createElement("button");d.type="button",d.className="sl-view3d-nav-toggle",d.setAttribute("aria-expanded","false");let h=f=>{p.classList.toggle("is-open",f),d.setAttribute("aria-expanded",String(f)),d.textContent=f?k("picker.closeVenueNav","Close"):o&&(c||l)?k("picker.levelsAndAreas","Levels & areas"):o?k("picker.levels","Levels"):k("picker.areas","Areas")};d.addEventListener("click",()=>h(!p.classList.contains("is-open"))),p.addEventListener("keydown",f=>{f.key!=="Escape"||!p.classList.contains("is-open")||(f.preventDefault(),f.stopPropagation(),h(!1),d.focus())}),h(!1),p.appendChild(d);let b=f=>{},m=f=>{};if(o){let f=document.createElement("div");f.setAttribute("role","group"),f.setAttribute("aria-label",k("picker.levels","Levels"));let S=[];m=y=>{S.forEach(C=>{C.setAttribute("aria-pressed",String((C.dataset.floor===""?null:Number(C.dataset.floor))===y))})};let E=y=>{e.focusFloor(y)&&(m(y),b(y))},w=(y,C)=>{let u=document.createElement("button");u.type="button",u.textContent=y,u.dataset.floor=C===null?"":String(C),u.setAttribute("aria-pressed",String(C===null)),u.addEventListener("click",()=>{E(C),h(!1)}),S.push(u),f.appendChild(u)};w(k("picker.allLevels","All levels"),null);for(let y of t)w(y.label||_e("picker.levelNumber",{number:y.index+1}),y.index);p.appendChild(f)}if(c||l){let f=document.createElement("div");f.setAttribute("role","group"),f.setAttribute("aria-label",k("picker.areas","Areas"));let S=c?s.map(w=>({id:w.id,label:w.label||w.id,go:()=>{e.focusZone(w.id)}})):n.map(w=>({id:w.id,label:w.label||w.id,floorIndex:w.floorIndex,go:()=>{e.focusSection(w.id),Number.isFinite(w.floorIndex)&&m(w.floorIndex)}})),E=w=>{let y=c||w===null?S:S.filter(C=>C.floorIndex===void 0||C.floorIndex===w);if(f.replaceChildren(),!y.length){f.remove();return}if(f.isConnected||p.appendChild(f),!c&&y.length>bi){let C=document.createElement("select");C.setAttribute("aria-label",k("picker.jumpToSection","Jump to section"));let u=document.createElement("option");u.value="",u.textContent=k("picker.jumpToSection","Jump to section"),C.appendChild(u);for(let g of y){let M=document.createElement("option");M.value=g.id,M.textContent=g.label,C.appendChild(M)}C.addEventListener("change",()=>{y.find(g=>g.id===C.value)?.go()}),f.appendChild(C);return}for(let C of y){let u=document.createElement("button");u.type="button",u.textContent=C.label,u.addEventListener("click",()=>{C.go(),h(!1)}),f.appendChild(u)}};b=E,E(null)}a.appendChild(p)}var Ee=class{constructor(e){this.host=e;this.chip=null}sync(){let e=this.host.overlay();if(!e||this.host.savedSeatIds().length===0){this.chip?.remove(),this.chip=null;return}let t=this.chip;if(!t){t=document.createElement("div"),t.className="sl-view3d-compare-saved",t.setAttribute("role","group"),t.setAttribute("aria-label",k("picker.savedSeatComparison","Saved seat comparison"));let r=document.createElement("button");r.type="button",r.className="main",r.addEventListener("click",()=>{this.host.savedSeatIds().length>1?this.host.openComparison():this.host.toast(k("picker.chooseAnotherToCompare","Choose another seat to compare."),"neutral")});let n=document.createElement("button");n.type="button",n.className="clear",n.textContent="\xD7",n.setAttribute("aria-label",k("picker.clearSavedSeatComparison","Clear saved seat comparison")),n.addEventListener("click",()=>this.host.clearComparison()),t.append(r,n),e.appendChild(t),this.chip=t}let i=this.host.savedSeatIds().length,s=t.querySelector(".main");s&&(s.textContent=i>1?_e("picker.compareCount",{count:i}):k("picker.oneSeatSaved","1 seat saved"),s.setAttribute("aria-label",i>1?_e("picker.openComparisonOfSeats",{count:i}):k("picker.oneSeatSavedChooseAnother","One seat saved; choose another to compare")))}remove(){this.chip?.remove(),this.chip=null}mainButton(){return this.chip?.querySelector(".main")??null}};import{t as Te,tCount as vi}from"@seatlayer/core";function je(a){let e=Math.max(0,a),t=Math.floor(e/6e4),i=String(Math.floor(e%6e4/1e3)).padStart(2,"0");return`${t}:${i}`}function bt({d:a,area:e,label:t,objectType:i,quantity:s=1,identity:r}){let n=p=>String(p??"\u2014").replace(/[&<>"]/g,d=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[d]),o=i==="ga"?"ga":a?.objectType??i,c=r?.displayType?.trim()||a?.displayType?.trim()||e?.displayType?.trim()||(o==="table"?k("picker.table","Table"):o==="booth"?k("picker.booth","Booth"):o==="ga"?k("picker.generalAdmission","General admission"):k("picker.row","Row")),l=r?.rowLabel??r?.displayLabel??a?.rowLabel??a?.displayLabel??e?.displayLabel??e?.label??t;return o==="table"&&r?.bookingMode?`<div class="sl-chip-id"><span class="fld sec"><span class="sl-chip-eb">${n(c)}</span><span class="val">${n(l)}</span></span><span class="fld mid"><span class="sl-chip-eb">${k("picker.guests","Guests")}</span><span class="val">${s}</span></span></div>`:o==="ga"?`<div class="sl-chip-id"><span class="fld sec"><span class="sl-chip-eb">${n(c)}</span><span class="val">${n(l)}</span></span>`+(s>1?`<span class="fld mid"><span class="sl-chip-eb">${k("picker.tickets","Tickets")}</span><span class="val">${s}</span></span>`:"")+"</div>":o==="booth"?'<div class="sl-chip-id">'+(a?.sectionLabel?`<span class="fld sec"><span class="sl-chip-eb">${k("picker.section","Section")}</span><span class="val">${n(a.sectionLabel)}</span></span>`:"")+`<span class="fld mid"><span class="sl-chip-eb">${n(c)}</span><span class="val">${n(l)}</span></span></div>`:!a?.sectionLabel&&!a?.rowLabel&&!a?.seatNumber?`<div class="sl-chip-id"><span class="fld sec"><span class="sl-chip-eb">${k("picker.seat","Seat")}</span><span class="val">${n(l)}</span></span></div>`:'<div class="sl-chip-id">'+(a.sectionLabel?`<span class="fld sec"><span class="sl-chip-eb">${k("picker.section","Section")}</span><span class="val">${n(a.sectionLabel)}</span></span>`:"")+(a.rowLabel?`<span class="fld mid"><span class="sl-chip-eb">${n(c)}</span><span class="val">${n(Z(a))}</span></span>`:"")+(a.seatNumber?`<span class="fld mid"><span class="sl-chip-eb">${k("picker.seat","Seat")}</span><span class="val">${n(a.seatNumber)}</span></span>`:"")+"</div>"}function vt(a,e){return`<div class="sl-chip-rail"><button type="button" class="rm" aria-label="${a}"><svg viewBox="0 0 24 24"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg></button>`+(e?`<button type="button" class="view" data-view-label="${e}" aria-label="${Te("picker.viewFromSeat",{label:e})}"><svg viewBox="0 0 24 24"><path d="M1 12s4-7 11-7 11 7 11 7-4 7-11 7S1 12 1 12z"/><circle cx="12" cy="12" r="3"/></svg></button>`:"")+"</div>"}function gt({count:a,total:e,pendingCount:t,ctaPhase:i,hasHold:s,salesClosed:r,fromPrice:n,money:o}){if(a&&i==="holding")return`<span>${k("picker.securingSeats","Securing your seats\u2026")}</span>`;if(a&&i==="checkout")return`<span>${Te("picker.peekSecured",{count:a,total:o(e)})}</span>`;if(a){let c=!!s;return`<span>${vi("picker.peekTicketsTotal",a,{total:o(e)})}</span><button type="button" class="go sl-sheet-go" data-act="${c?"checkout":"open"}">${s?t?k("picker.secureMore","Secure more"):k("picker.continue","Continue"):k("picker.review","Review")}</button>`}else return r?`<span>${k("picker.salesClosedPill","Sales are closed")}</span>`:(n!=null?`<span>${Te("picker.peekFromPrice",{price:o(n)})}</span>`:`<span>${k("picker.pickYourSeats","Pick your seats")}</span>`)+`<button type="button" class="go sl-sheet-go" data-act="open">${k("picker.bestSeatsStar","\u2726 Best seats")}</button>`}function Ne(a,e=Date.now()){return Te("picker.holdReassurance",{time:je(a-e)})}var Li="https://api.seatlayer.io",Mi=10,wt=6e4,kt=6e4,St=new Set;function Pi(a){let e=St.has(a);return St.add(a),e}var Et="seatmap.a11y.cb";function Hi(){try{if(typeof window>"u")return null;let a=window.localStorage.getItem(Et);return a==null?null:a==="1"}catch{return null}}function Ri(a){try{window.localStorage.setItem(Et,a?"1":"0")}catch{}}var Ue=class a{constructor(e){this.realtime=null;this.accessEl=null;this.root=null;this.mapHost=null;this.rendered=!1;this.destroyed=!1;this.els={};this.regions={};this.ro=null;this.holdTimer=null;this.toastTimer=null;this.offerRefreshTimer=null;this.offerBoundaryTimer=null;this.offerVisibilityHandler=null;this.motionTimers=new Set;this.currency="USD";this.eventTimezone=null;this.eventWhenText=null;this.offerAvailability=null;this.hold=null;this.holdExpiresAt=0;this.handedOff=!1;this.bookedShown=!1;this.paymentOptions=null;this.checkoutPanel=null;this.extendEl=null;this.bookedEl=null;this.gaQty=new Map;this.tipEl=null;this.tipPos={x:0,y:0};this.confirmEl=null;this.confirmSeat=null;this.tableDialogEl=null;this.tableDialog=null;this.tableDialogHeld=!1;this.tableDialogReturnFocus=null;this.srEl=null;this.baQty=2;this.baCat="";this.baZone="";this.baPremium=!1;this.baReopen=!1;this.bestAvailableConfirm=!1;this.releasingHold=!1;this.salesClosed=!1;this.soldOut=!1;this.soldoutEl=null;this.cbSafe=!1;this.rungsEl=null;this.projectionEl=null;this.buyerView="map";this.view3dEl=null;this.view3dHandle=null;this.view3dGen=0;this.view3dReturnSeat=null;this.view3dTargetSeatId=null;this.view3dCompareSeatIds=[];this.view3dCompareChip=new Ee({overlay:()=>this.view3dEl,savedSeatIds:()=>this.view3dCompareSeatIds,openComparison:()=>this.openView3dComparison(),clearComparison:()=>this.clearView3dComparison(),toast:(e,t)=>this.toast(e,t)});this.view3dCompareEl=null;this.view3dCompareCleanup=null;this.view3dPassportEl=null;this.view3dPassportCleanup=null;this.floorsEl=null;this.secCardEl=null;this.viewEl=null;this.viewCleanup=null;this.seatViewGen=0;this.allSeatsCache=null;this.minimap=null;this.pickerLayoutSize={width:0,height:0};this.priceBandKeys=null;this.focusedCatKey=null;this.limitedViewFilter=!1;this.pricesExpanded=!1;this.lastSection=null;this.secCardCollapsed=!1;this.secCardShownAt=0;this.lastTrayCount=0;this.lastTrayTotal=0;this.lastTrayKeys=new Set;this.bestAvailableBusy=!1;this.releasingLabels=new Set;this.holdingLabels=new Set;this.ctaPhase="idle";this.a11yChipsEl=null;this.fsFallback=!1;this.fsChangeHandler=null;this.fsEscHandler=null;this.eventDetailsHidden=!1;this.holdCopyPending=!1;this.sideCollapsed=!1;this.sideToggleEl=null;this.pricesBtnEl=null;this.framedFs=!1;this.lastPostedHeight=0;this.cbEl=null;this.modalScrim=null;this.prevFocus=null;this.escHandler=null;this.closeModal=null;this.lastCatAvail=null;this.lastAvailFloorId="";this.availQuietUntil=0;this.liveTimer=null;this.perspectiveWarned=!1;if(!e||typeof e!="object")throw new Error("seatmap: options object is required");if(!e.event||typeof e.event!="string")throw new Error("seatmap: `event` key is required");if(!e.container)throw new Error("seatmap: `container` is required (or use SeatPicker.open())");this.opts={...e,confirmSelection:e.confirmSelection??!0},this.eventDetailsHidden=!!e.hideEventDetails,this.hostPricing=e.pricing,this.apiBase=(e.apiBase??Li).replace(/\/+$/,""),this.access=e.transport?null:me(e,{onExpired:t=>{this.opts.onAccessExpired?.(t),t.refreshed||this.showAccessPanel({reason:"no_token",retryable:!1})},onUnavailable:t=>{this.opts.onAccessUnavailable?.(t),this.showAccessPanel(t)}}),this.pubApi=e.transport?null:new te(this.apiBase,{access:this.access??void 0,onObjectUnavailable:t=>this.opts.onSelectedObjectUnavailable?.(t)}),this.api=e.transport??this.pubApi,this.buyerAssetUrls=new xe(e.event,this.api.asset?(t,i)=>this.api.asset(t,i):void 0),e.checkout==="hosted"&&!this.pubApi&&console.warn('seatlayer: checkout: "hosted" needs the widget\'s own transport \u2014 a custom `transport` owns its backend, so the picker is staying on onCheckout for this mount.'),this.checkoutMode=e.checkout==="hosted"&&this.pubApi?"hosted":"handoff",this.maxTickets=Math.max(1,Math.floor(e.maxSelection??Mi)),this.cbSafe=Hi()??!!e.colorblindSafe,this.controller=new gi({transport:this.api,eventKey:e.event,maxSelection:this.maxTickets,currency:e.currency,flashOnLiveChange:!0,colorblindSafe:this.cbSafe,mapTheme:e.theme?.map??null,onSelectionChange:()=>{this.syncTray(),this.minimap?.refreshMinimap(),this.committedSelection().length&&this.collapseSectionCard(),this.syncSelectionTo3d()},onStatusChange:()=>{this.syncPrices(),this.scheduleOfferRefresh(!0),this.evictTakenSelections(),this.detectBooked(),this.minimap?.refreshMinimap(),this.pushAvailabilityTo3d()},onHoldExpired:()=>{this.hold=null,this.forgetHold(),this.handedOff=!1,this.bookedShown=!1,this.ctaPhase="idle",this.stopHoldTimer(),this.gaQty.clear(),this.toast(x("picker.holdExpired",void 0)||"Your hold expired \u2014 seats released. Pick again.","warning"),this.syncTray(),this.emitHoldChange(),this.opts.onHoldExpired?.()},confirmSelection:this.opts.confirmSelection,onSelect:t=>{if(this.salesClosed){this.controller.deselect([t.id]),this.toast(this.tf("picker.salesClosedToast","Sales are closed for this event."),"warning");return}this.controller.tableSelection(t.id)||(this.flashPickedSeat(t.id),this.opts.confirmSelection&&this.showConfirm(t))},onTableSelectionRequest:t=>{if(this.salesClosed){this.controller.deselect(t.physicalSeatIds),this.toast(this.tf("picker.salesClosedToast","Sales are closed for this event."),"warning");return}this.showTableDialog(t,!1)},onDeselect:t=>{this.confirmSeat?.id===t.id&&this.dismissConfirm(),this.tableDialog?.physicalSeatIds.includes(t.id)&&this.dismissTableDialog()},onSelectionLimit:()=>{this.toast(x("picker.maxTicketsForOrder",{count:this.maxTickets}),"warning")},onViewChange:()=>{this.reanchorConfirm(),this.syncRung(),this.syncProjection(),this.minimap?.drawMinimapRect(),this.sectionCardOnView()},onSectionFocus:t=>this.showSectionCard(t),onDeckTap:()=>{this.showSectionCard(null),this.syncFloors(),this.syncRung(),this.minimap?.refreshMinimap()},onFocusSeat:t=>this.announceSeat(t),onSeatHover:t=>this.updateTooltip(t),onHint:t=>{t&&this.toast(t)},onSalesClosed:()=>this.setSalesClosed(!0),onError:t=>this.opts.onError?.(t)})}chartHasStage(){let e=this.controller.doc;if(!e)return!1;let t=e.floors?.length?e.floors.map(i=>i.objects??[]):[e.objects??[]];for(let i of t)for(let s of i)if(s.type==="shape"&&(s.role==="stage"||s.stageKind))return!0;return!1}confirmThumbHtml(e){let t=this.controller.doc;if(!t)return"";let i=e.viewUrl??"",s=this.chartHasStage();if(!i&&!s)return"";let r=null;if(!i)try{r=xi(e,e.focalPoint??t.focalPoint).distanceM??null}catch{return""}let n=s&&r!=null?`<div class="sl-confirm-sight">${x("picker.sightline",{m:r})}</div>`:"";return(i?`<button type="button" class="sl-confirm-view sl-confirm-thumbwrap" aria-label="${x("picker.viewFromSeat",{label:e.label})}"><img class="sl-confirm-thumb" alt="" /><span class="sl-confirm-thumb-badge">\u{1F52D} ${this.tf("picker.viewFromHere","View from here")}</span></button>`:`<button type="button" class="sl-confirm-view sl-confirm-viewbtn" aria-label="${x("picker.viewFromSeat",{label:e.label})}"><span aria-hidden="true">\u{1F52D}</span><span>${this.tf("picker.viewFromHere","View from here")}</span></button>`)+n}isFramed(){return typeof window<"u"&&window.parent!==window}postToHost(e){if(this.isFramed())try{window.parent.postMessage(e,"*")}catch{}}measureFramedHeight(){let e=this.root;if(!e)return 0;let t=e.clientWidth||(typeof window<"u"?window.innerWidth:0)||0;if(t<=0)return 0;let i=t<640?1.2:.62;return Math.max(420,Math.round(t*i))}reportFramedHeight(){if(!this.isFramed())return;let e=this.measureFramedHeight();e<=0||e===this.lastPostedHeight||(this.lastPostedHeight=e,this.postToHost({type:"seatlayer:height",px:e}))}toggleFullscreen(){let e=this.root;if(!e)return;!!document.fullscreenElement||this.fsFallback||this.framedFs?document.fullscreenElement?document.exitFullscreen().catch(()=>{}):this.framedFs?this.setFramedFs(!1):this.setFsFallback(!1):e.requestFullscreen?e.requestFullscreen().catch(()=>this.enterFsFallback()):this.enterFsFallback()}syncFullscreenButtons(){let e=!!document.fullscreenElement||this.fsFallback||this.framedFs,t=this.eventDetailsHidden&&!e;this.root?.setAttribute("data-event-details-hidden",String(t)),this.els.zfs?.setAttribute("aria-pressed",String(e)),this.els.zfs?.setAttribute("title",e?this.tf("picker.exitFullScreen","Exit full screen"):this.tf("picker.fullScreen","Full screen"));let i=this.els.zfs?.querySelector(".sl-zfs-lbl");i&&(i.textContent=e?this.tf("picker.exitFullScreen","Exit full screen"):this.tf("picker.fullScreen","Full screen")),this.view3dEl?.querySelector(".sl-view3d-fs")?.setAttribute("aria-pressed",String(e))}enterFsFallback(){this.isFramed()?this.setFramedFs(!0):this.setFsFallback(!0)}setFramedFs(e){this.framedFs!==e&&(this.framedFs=e,this.syncFullscreenButtons(),this.postToHost({type:"seatlayer:fullscreen",on:e}),e&&!this.fsEscHandler?(this.fsEscHandler=t=>{t.key==="Escape"&&!document.fullscreenElement&&this.setFramedFs(!1)},window.addEventListener("keydown",this.fsEscHandler)):!e&&this.fsEscHandler&&(window.removeEventListener("keydown",this.fsEscHandler),this.fsEscHandler=null),requestAnimationFrame(()=>this.controller.refitCurrentView()))}setFsFallback(e){this.fsFallback!==e&&(this.fsFallback=e,this.root?.classList.toggle("sl-fs",e),this.syncFullscreenButtons(),e&&!this.fsEscHandler?(this.fsEscHandler=t=>{t.key==="Escape"&&!document.fullscreenElement&&this.setFsFallback(!1)},window.addEventListener("keydown",this.fsEscHandler)):!e&&this.fsEscHandler&&(window.removeEventListener("keydown",this.fsEscHandler),this.fsEscHandler=null),requestAnimationFrame(()=>this.controller.refitCurrentView()))}close(){this.closeModal?this.closeModal():this.destroy()}static async open(e){Re();let t=document.activeElement instanceof HTMLElement?document.activeElement:null,i=document.createElement("div");i.className="sl-modal-scrim";let s=document.createElement("div");s.className="sl-modal-frame",s.setAttribute("role","dialog"),s.setAttribute("aria-modal","true"),s.setAttribute("aria-label",k("picker.seatSelection","Seat selection")),s.tabIndex=-1,i.appendChild(s),document.body.appendChild(i);let r=document.body.style.overflow;document.body.style.overflow="hidden";let n=new a({...e,container:s});n.modalScrim=i,n.prevFocus=t;let o=["a[href]","area[href]","button","input","select","textarea","iframe","object","embed","summary","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])',"[tabindex]"].join(","),c=()=>{let m=[...s.querySelectorAll('[role="dialog"][aria-modal="true"]')].filter(f=>f.isConnected&&!f.closest('[hidden], [aria-hidden="true"], [inert]'));return m[m.length-1]??s},l=(m,f)=>{let S=m;for(;S;){let E=window.getComputedStyle(S);if(S.hidden||S.getAttribute("aria-hidden")==="true"||S.hasAttribute("inert")||E.display==="none"||E.visibility==="hidden"||E.visibility==="collapse")return!0;if(S===f)return!1;S=S.parentElement}return!0},p=m=>[...m.querySelectorAll(o)].filter(f=>f.tabIndex>=0&&!f.matches(":disabled")&&!l(f,m)),d=(m,f)=>{let S=p(m),E=f?S[S.length-1]:S[0];E?E.focus({preventScroll:!0}):(m.hasAttribute("tabindex")||(m.tabIndex=-1),m.focus({preventScroll:!0}))},h=!1,b=()=>{if(h)return;h=!0,document.body.style.overflow=r,n.escHandler&&document.removeEventListener("keydown",n.escHandler),i.remove(),n.modalScrim=null;let m=n.prevFocus;n.prevFocus=null,m?.isConnected&&m.focus({preventScroll:!0});let f=()=>{n.destroy(),e.onClose?.()};n.hold&&!n.handedOff?n.release().finally(f):f()};return n.closeModal=b,i.addEventListener("mousedown",m=>{m.target===i&&b()}),n.escHandler=m=>{if(m.key==="Tab"){if(m.defaultPrevented)return;let f=c(),S=p(f),E=S[0],w=S[S.length-1],y=document.activeElement;!E||!w?(m.preventDefault(),d(f,m.shiftKey)):y===f||!y||!f.contains(y)?(m.preventDefault(),(m.shiftKey?w:E).focus({preventScroll:!0})):m.shiftKey&&y===E?(m.preventDefault(),w.focus({preventScroll:!0})):!m.shiftKey&&y===w&&(m.preventDefault(),E.focus({preventScroll:!0}));return}m.key==="Escape"&&(n.tableDialog?(m.preventDefault(),n.cancelTableDialog()):n.confirmSeat?(m.preventDefault(),n.cancelConfirm()):n.bestAvailableConfirm?(m.preventDefault(),n.bestAvailableConfirm=!1,n.syncTray()):(m.preventDefault(),b()))},document.addEventListener("keydown",n.escHandler),await n.render(),n.els.close?.classList.add("on"),n.els.close?.addEventListener("click",b),d(c(),!1),n}async render(){if(this.rendered)return this;let e=performance.now(),t={},i=v=>Math.round((performance.now()-v)*100)/100;this.rendered=!0,Re();let s=performance.now();await wi(this.opts.locale),t.loadLocale=i(s),this.opts.messages&&ki(this.opts.messages),this.checkoutMode==="hosted"&&(this.paymentOptions=this.pubApi.paymentOptions(this.opts.event));let r=performance.now(),n=st(this.opts.container),o=document.createElement("div");o.className="sl-picker",o.tabIndex=-1,this.root=o,n.appendChild(o),o.addEventListener("keydown",v=>{v.key==="Escape"&&(this.tableDialog?(v.preventDefault(),v.stopPropagation(),this.cancelTableDialog()):this.confirmSeat?(v.preventDefault(),v.stopPropagation(),this.cancelConfirm()):this.bestAvailableConfirm&&(v.preventDefault(),v.stopPropagation(),this.bestAvailableConfirm=!1,this.syncTray()))}),Object.entries(Ie(void 0,this.opts.theme)).forEach(([v,T])=>o.style.setProperty(v,T)),o.innerHTML=`
1176
+ `;function Re(){if(document.getElementById(nt))return;let a=document.createElement("style");a.id=nt,a.textContent=hi,document.head.appendChild(a)}import{relativeLuminance255 as ui,rgb255ToHex as mi}from"@seatlayer/core/core/color";function W(a){if(!a)return null;let e=a.trim().toLowerCase();if(e==="white")return{r:255,g:255,b:255};if(e==="black")return{r:0,g:0,b:0};let t=/^#([0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(e)?.[1];if(t){let s=t.length<=4?[...t].map(r=>`${r}${r}`).join(""):t;return{r:Number.parseInt(s.slice(0,2),16),g:Number.parseInt(s.slice(2,4),16),b:Number.parseInt(s.slice(4,6),16)}}let i=/^rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)(?:\s*[,/]\s*[\d.]+%?)?\s*\)$/i.exec(e);return i?{r:Math.max(0,Math.min(255,Number(i[1]))),g:Math.max(0,Math.min(255,Number(i[2]))),b:Math.max(0,Math.min(255,Number(i[3])))}:null}function ye(a){return ui([a.r,a.g,a.b])}function N(a,e){let t=W(a),i=W(e);if(!t||!i)return null;let s=Math.max(ye(t),ye(i)),r=Math.min(ye(t),ye(i));return(s+.05)/(r+.05)}function pe(a,e="#172033",t="#eef1f8"){return(N(e,a)??0)>=(N(t,a)??0)?e:t}function fi(a){return mi(a.r,a.g,a.b)}function Oe(a,e,t){let i=W(a),s=W(e);if(!i||!s)return null;let r=Math.max(0,Math.min(1,t));return fi({r:i.r*r+s.r*(1-r),g:i.g*r+s.g*(1-r),b:i.b*r+s.b*(1-r)})}function bi(a,e,t,i){if((N(a,t)??4.5)>=4.5&&(N(a,i)??4.5)>=4.5)return a;if(!W(a)||!W(e))return e;for(let s=.15;s<=1;s+=.05){let r=Oe(a,e,1-s);if(r&&(N(r,t)??0)>=4.5&&(N(r,i)??0)>=4.5)return r}return e}function xe(a,e){let t=e?.background??a?.background??"#0f1522",i=W(t)?pe(t)==="#172033":!1,s=e?.surface??(i?"#ffffff":"#1a2234"),r=e?.accent??a?.accent??"#f4b740",n=a?.accentInk,o=e?.accentInk??(n&&(N(n,r)??4.5)>=4.5?n:pe(r,"#1a1200","#ffffff")),l=a?.textColor,d=e?.text??(l&&(N(l,t)??4.5)>=4.5&&(N(l,s)??4.5)>=4.5?l:pe(t));return{"--sl-accent":r,"--sl-accent-ink":o,"--sl-accent-text":bi(r,d,t,s),"--sl-bg":t,"--sl-surface":s,"--sl-text":d,"--sl-muted":e?.muted??(i?"#667085":"#a5aec2"),"--sl-line":e?.line??(i?"rgba(23,32,51,.16)":"rgba(165,174,194,.24)"),"--sl-font":e?.fontFamily??a?.fontFamily??"-apple-system,BlinkMacSystemFont,'Segoe UI',Inter,sans-serif","--sl-radius":`${e?.radius??14}px`}}function ot(a,e,t){let i=document.createElement("div");i.className="sl-picker",i.tabIndex=-1,a.appendChild(i),Object.entries(xe(void 0,t)).forEach(([r,n])=>i.style.setProperty(r,n)),i.innerHTML=`
1177
1177
  <div class="sl-head">
1178
1178
  <div class="sl-logo" data-ref="logo"></div>
1179
1179
  <div class="sl-head-info" data-ref="headInfo">
@@ -1185,7 +1185,7 @@ import{a as H,b as j,c as I,d as N}from"./chunk-OSZ7DOEH.js";import{PickerContro
1185
1185
  <svg viewBox="0 0 24 24" aria-hidden="true"><rect x="5" y="11" width="14" height="9" rx="2"/><path d="M8 11V7a4 4 0 0 1 8 0v4"/></svg>
1186
1186
  <span data-ref="closedPillText"></span>
1187
1187
  </span>
1188
- <button type="button" class="sl-close" data-ref="close" aria-label="${this.tf("picker.close","Close")}">
1188
+ <button type="button" class="sl-close" data-ref="close" aria-label="${e("picker.close","Close")}">
1189
1189
  <svg viewBox="0 0 24 24"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>
1190
1190
  </button>
1191
1191
  </div>
@@ -1193,17 +1193,17 @@ import{a as H,b as j,c as I,d as N}from"./chunk-OSZ7DOEH.js";import{PickerContro
1193
1193
  <div class="sl-map">
1194
1194
  <div class="sl-map-host" data-ref="map"></div>
1195
1195
  <div class="sl-zoom" data-ref="zoom">
1196
- <button type="button" aria-label="${this.tf("picker.zoomIn","Zoom in")}" title="${this.tf("picker.zoomIn","Zoom in")}" data-ref="zin">+</button>
1197
- <button type="button" aria-label="${this.tf("picker.zoomOut","Zoom out")}" title="${this.tf("picker.zoomOut","Zoom out")}" data-ref="zout">\u2212</button>
1198
- <button type="button" aria-label="${this.tf("picker.fitToScreen","Fit to screen")}" title="${this.tf("picker.fitToScreen","Fit to screen")}" data-ref="zfit">
1199
- <svg viewBox="0 0 24 24"><path d="M8 3H5a2 2 0 0 0-2 2v3M16 3h3a2 2 0 0 1 2 2v3M8 21H5a2 2 0 0 1-2-2v-3M16 21h3a2 2 0 0 0 2-2v-3"/></svg>
1196
+ <button type="button" aria-label="${e("picker.zoomIn","Zoom in")}" title="${e("picker.zoomIn","Zoom in")}" data-ref="zin">+</button>
1197
+ <button type="button" aria-label="${e("picker.zoomOut","Zoom out")}" title="${e("picker.zoomOut","Zoom out")}" data-ref="zout">\u2212</button>
1198
+ <button type="button" aria-label="${e("picker.fitToScreen","Fit to screen")}" title="${e("picker.fitToScreen","Fit to screen")}" data-ref="zfit">
1199
+ <svg viewBox="0 0 24 24"><path d="M8 3H5a2 2 0 0 0-2 2v3M16 3h3a2 2 0 0 0 2 2v3M8 21H5a2 2 0 0 0-2-2v-3M16 21h3a2 2 0 0 0 2-2v-3"/></svg>
1200
1200
  </button>
1201
- <button type="button" aria-label="${this.tf("picker.fullScreen","Full screen")}" title="${this.tf("picker.fullScreen","Full screen")}" aria-pressed="false" data-ref="zfs">
1201
+ <button type="button" aria-label="${e("picker.fullScreen","Full screen")}" title="${e("picker.fullScreen","Full screen")}" aria-pressed="false" data-ref="zfs">
1202
1202
  <svg viewBox="0 0 24 24"><path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/></svg>
1203
- <span class="sl-zfs-lbl" aria-hidden="true">${this.tf("picker.fullScreen","Full screen")}</span>
1203
+ <span class="sl-zfs-lbl" aria-hidden="true">${e("picker.fullScreen","Full screen")}</span>
1204
1204
  </button>
1205
1205
  </div>
1206
- <div class="sl-boot" data-ref="boot"><span class="sl-boot-spin"></span>${this.tf("picker.loadingSeatMap","Loading seat map\u2026")}</div>
1206
+ <div class="sl-boot" data-ref="boot"><span class="sl-boot-spin"></span>${e("picker.loadingSeatMap","Loading seat map\u2026")}</div>
1207
1207
  <div class="sl-toast" data-ref="toast" role="status" aria-live="polite"></div>
1208
1208
  </div>
1209
1209
  <div class="sl-side" data-ref="side">
@@ -1211,28 +1211,37 @@ import{a as H,b as j,c as I,d as N}from"./chunk-OSZ7DOEH.js";import{PickerContro
1211
1211
  <div class="sl-sheet-grab"></div>
1212
1212
  <div class="sl-sheet-bar">
1213
1213
  <div class="sl-sheet-peek" data-ref="peek"></div>
1214
- <button type="button" class="sl-sheet-toggle" data-ref="sheetToggle" aria-label="${this.tf("picker.openTicketPanel","Open ticket panel")}" aria-expanded="false">
1214
+ <button type="button" class="sl-sheet-toggle" data-ref="sheetToggle" aria-label="${e("picker.openTicketPanel","Open ticket panel")}" aria-expanded="false">
1215
1215
  <svg viewBox="0 0 24 24"><path d="M6 15l6-6 6 6"/></svg>
1216
1216
  </button>
1217
1217
  </div>
1218
1218
  </div>
1219
- <div class="sl-sec sl-filtersec" data-ref="filtersSec">${this.tf("picker.filters","Filters")}</div>
1219
+ <div class="sl-sec sl-filtersec" data-ref="filtersSec">${e("picker.filters","Filters")}</div>
1220
1220
  <div class="sl-filters" data-ref="filters"></div>
1221
1221
  <div class="sl-offer" data-ref="offer" role="status" aria-live="polite"></div>
1222
- <div class="sl-sec sl-prices-sec" data-ref="pricesSec"><span>${this.tf("picker.ticketPrices","Ticket prices")}</span></div>
1222
+ <div class="sl-sec sl-prices-sec" data-ref="pricesSec"><span>${e("picker.ticketPrices","Ticket prices")}</span></div>
1223
1223
  <div class="sl-prices-hint" data-ref="pricesHint"></div>
1224
1224
  <div class="sl-prices" data-ref="prices"></div>
1225
- <div class="sl-live" data-ref="live" role="status" aria-live="polite"><span class="dot" aria-hidden="true"></span><span data-ref="liveText">${this.tf("picker.liveAvailability","Live availability \u2014 seats update in real time")}</span></div>
1226
- <div class="sl-sec sl-seats-sec"><span>${this.tf("picker.yourSeats","Your seats")}</span><span class="sl-seat-summary" data-ref="seatSummary"></span></div>
1225
+ <div class="sl-live" data-ref="live" role="status" aria-live="polite">
1226
+ <span class="dot" aria-hidden="true"></span>
1227
+ <span data-ref="liveText">${e("picker.liveAvailability","Live availability \u2014 seats update in real time")}</span>
1228
+ </div>
1229
+ <div class="sl-sec sl-seats-sec">
1230
+ <span>${e("picker.yourSeats","Your seats")}</span>
1231
+ <span class="sl-seat-summary" data-ref="seatSummary"></span>
1232
+ </div>
1227
1233
  <div class="sl-tray" data-ref="tray"></div>
1228
1234
  <div class="sl-foot" data-ref="foot">
1229
1235
  <div class="sl-hold-note" data-ref="holdNote" role="status" aria-live="polite">
1230
1236
  <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6L9 17l-5-5"/></svg>
1231
- <span><b data-ref="holdTitle">${this.tf("picker.seatsSecured","Seats secured")}</b><span class="sl-hold-copy" data-ref="holdCopy">${this.tf("picker.notChargedYet","You won\u2019t be charged yet.")}</span></span>
1232
- <button type="button" class="sl-hold-change" data-ref="holdChange" aria-label="${this.tf("picker.releaseHeldTickets","Release held tickets and choose different seats")}">${this.tf("picker.change","Change")}</button>
1237
+ <span>
1238
+ <b data-ref="holdTitle">${e("picker.seatsSecured","Seats secured")}</b>
1239
+ <span class="sl-hold-copy" data-ref="holdCopy">${e("picker.notChargedYet","You won\u2019t be charged yet.")}</span>
1240
+ </span>
1241
+ <button type="button" class="sl-hold-change" data-ref="holdChange" aria-label="${e("picker.releaseHeldTickets","Release held tickets and choose different seats")}">${e("picker.change","Change")}</button>
1233
1242
  </div>
1234
1243
  <div class="sl-total"><span data-ref="count"></span><b data-ref="total"></b></div>
1235
1244
  <button type="button" class="sl-cta" data-ref="cta" disabled></button>
1236
1245
  </div>
1237
1246
  </div>
1238
- </div>`,o.querySelectorAll("[data-ref]").forEach(v=>{this.els[v.dataset.ref]=v}),this.mapHost=this.els.map,this.syncFullscreenButtons(),this.refreshOfferAvailability(!1),this.api.availability&&(this.offerVisibilityHandler=()=>{!document.hidden&&!this.destroyed&&this.refreshOfferAvailability(!1)},document.addEventListener("visibilitychange",this.offerVisibilityHandler));let c=()=>{let v=o.clientWidth;if(v<=0)return;let T=o.clientHeight,L=v!==this.pickerLayoutSize.width||T!==this.pickerLayoutSize.height;this.pickerLayoutSize={width:v,height:T},this.reportFramedHeight();let O=v<640?"narrow":"wide",$=T<560?"compact":"comfortable";(o.dataset.layout!==O||o.dataset.density!==$)&&(o.dataset.layout=O,o.dataset.density=$,O==="narrow"&&!o.dataset.sheet&&(o.dataset.sheet="peek"),this.dockLayoutChrome()),L&&this.minimap?.refreshMinimap()};this.ro=new ResizeObserver(c),this.ro.observe(o),c(),requestAnimationFrame(c),this.els.zin.addEventListener("click",()=>this.controller.zoomIn()),this.els.zout.addEventListener("click",()=>this.controller.zoomOut()),this.els.zfit.addEventListener("click",()=>this.controller.zoomToFit()),this.els.zfs.addEventListener("click",()=>this.toggleFullscreen()),this.fsChangeHandler=()=>{document.fullscreenElement||this.setFsFallback(!1),this.syncFullscreenButtons(),requestAnimationFrame(()=>this.controller.refitCurrentView())},document.addEventListener("fullscreenchange",this.fsChangeHandler);let l=this.els.sheetHead;if(l){let v=this.els.sheetToggle,T=P=>{o.dataset.sheet=P?"open":"peek",v?.setAttribute("aria-expanded",String(P)),v?.setAttribute("aria-label",P?this.tf("picker.collapseTicketPanel","Collapse ticket panel"):this.tf("picker.openTicketPanel","Open ticket panel"))};T(o.dataset.sheet==="open"),v?.addEventListener("click",P=>{P.stopPropagation(),T(o.dataset.sheet!=="open")}),this.els.peek?.addEventListener("click",P=>{let A=P.target.closest(".sl-sheet-go");A&&(P.stopPropagation(),A.dataset.act==="checkout"?this.handleCta():T(!0))});let L=0,O=!1,$=!1;l.addEventListener("pointerdown",P=>{if(P.target.closest?.(".sl-seccard,.sl-sheet-toggle,.sl-sheet-go")){$=!1;return}$=!0,O=!1,L=P.clientY,l.setPointerCapture?.(P.pointerId)}),l.addEventListener("pointermove",P=>{if(!$||O)return;let A=P.clientY-L;A<-18?(T(!0),O=!0):A>18&&(T(!1),O=!0)}),l.addEventListener("pointerup",P=>{$&&!O&&Math.abs(P.clientY-L)<6&&T(o.dataset.sheet!=="open"),$=!1,l.releasePointerCapture?.(P.pointerId)})}let p=()=>{if(this.root?.dataset.layout!=="narrow")return;let v=this.root.getAttribute("data-prices-open")==="true";if(this.root.setAttribute("data-prices-open",String(!v)),this.els.pricesSec?.setAttribute("aria-expanded",String(!v)),this.pricesBtnEl?.setAttribute("aria-pressed",String(!v)),!v&&this.root.dataset.sheet!=="open"){this.root.dataset.sheet="open";let T=this.els.sheetToggle;T?.setAttribute("aria-expanded","true"),T?.setAttribute("aria-label","Collapse ticket panel")}};this.els.pricesSec?.addEventListener("click",v=>{v.target.closest("select,button")||p()}),this.els.pricesSec?.addEventListener("keydown",v=>{v.key!=="Enter"&&v.key!==" "||v.target.closest("select,button")||(v.preventDefault(),p())});let d=document.createElement("button");d.type="button",d.className="sl-prices-btn",d.setAttribute("aria-label",this.tf("picker.ticketPrices","Ticket prices")),d.setAttribute("title",this.tf("picker.ticketPrices","Ticket prices")),d.setAttribute("aria-pressed","false"),d.innerHTML='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M20.6 13.4 13.4 20.6a2 2 0 0 1-2.8 0L3 13V5a2 2 0 0 1 2-2h8l7.6 7.6a2 2 0 0 1 0 2.8z"/><circle cx="7.5" cy="7.5" r="1.3"/></svg>',d.addEventListener("click",()=>p()),this.els.headInfo?.parentElement?.insertBefore(d,this.els.hold??null),this.pricesBtnEl=d,this.tipEl=document.createElement("div"),this.tipEl.setAttribute("role","tooltip"),this.tipEl.className="sl-tip",this.els.map.appendChild(this.tipEl),this.els.map.addEventListener("mousemove",v=>{let T=this.els.map.getBoundingClientRect();this.tipPos={x:v.clientX-T.left,y:v.clientY-T.top},this.tipEl&&this.tipEl.style.display!=="none"&&this.placeTooltip()}),this.els.cta.addEventListener("click",()=>{this.handleCta()}),this.els.holdChange?.addEventListener("click",()=>{this.handleChangeSeats()});let h=document.createElement("div");h.style.cssText="position:absolute;inset:0",this.mapHost.appendChild(h),t.mountBuyerShell=i(r);let b=performance.now(),m=await this.controller.render(h);if(t.loadChartAndStatuses=i(b),this.destroyed)return this;if(!m)return this.els.boot.innerHTML=`<div class="sl-boot-title">${this.tf("picker.mapDidNotLoad","The seat map didn\u2019t load")}</div><div>${this.tf("picker.checkConnection","Check your connection and try again.")}</div><button type="button" class="sl-boot-retry">${this.tf("picker.accessRetry","Try again")}</button>`,this.els.boot.querySelector("button").addEventListener("click",()=>{let v=this.opts.container,T=this.opts;this.destroy(),new a({...T,container:v}).render()}),this;Object.assign(t,m.performanceProfile),this.els.boot.remove();let f=performance.now();if(this.startRealtime(),this.salesClosed=!!m.salesClosed||!!this.opts.readOnly,o.dataset.eventMode=m.mode==="test"?"test":"live",this.controller.setViewMode(this.normalizeInitialView(this.opts.initialView)),this.buildRegions(),this.regions["bottom-right"].appendChild(this.els.zoom),this.regions["bottom-center"].appendChild(this.els.toast),m.mode==="test"){let v=document.createElement("div");v.className="sl-testbadge",v.textContent=x("picker.testMode"),v.setAttribute("aria-label",x("picker.testMode")),this.regions["top-left"].appendChild(v)}let S=this.controller.doc?.theme;Object.entries(Ie(S,this.opts.theme)).forEach(([v,T])=>o.style.setProperty(v,T)),this.currency=m.currency??this.opts.currency??"USD",this.eventTimezone=m.timezone??null;let E=this.opts.theme?.logoUrl??S?.logoUrl??m.posterUrl??null;E?this.els.logo.innerHTML=`<img src="${E}" alt="">`:this.els.logo.textContent=(this.opts.theme?.brandName??S?.brandName??m.eventName??"?").slice(0,1).toUpperCase(),this.els.name.textContent=m.eventName??"";let w=m.startsAt?Se(m.startsAt,m.timezone??null,this.opts.locale):"";this.eventWhenText=w||null,this.els.meta.textContent=[m.venue,w].filter(Boolean).join(" \xB7 "),this.els.pricesHint&&(this.els.pricesHint.textContent=this.tf("picker.priceHint","Colours on the map are ticket types \u2014 tap one below to show just those seats.")),this.buildBadge(S);let y=new Set,C=!1;if(this.controller.doc)for(let v of Ve(this.controller.doc)){for(let T of v.accessibility??[])y.add(T);v.accessible&&!v.accessibility?.length&&y.add("wheelchair"),(v.commercial?.restrictedView||v.commercial?.obstructedView)&&(C=!0)}let u=()=>{this.rungsEl&&this.controller.getRung()!=="seats"&&(this.controller.setRung("seats"),this.collapseSectionCard(),this.syncRung())};if(y.size||C){let v=document.createElement("div");if(v.className="sl-chips",this.regions["top-left"].appendChild(v),this.a11yChipsEl=v,y.size){let T=($,P)=>`<button type="button" class="sl-chip-f${$==="all"?" on":""}" data-a11y="1" data-f="${$}">${P}</button>`;v.insertAdjacentHTML("beforeend",T("all",this.tf("picker.allSeats","All seats"))+yi.filter(({key:$})=>y.has($)).map(({key:$,short:P,icon:A})=>T($,`${A} ${P}`)).join(""));let L=new Set,O=()=>{v.querySelectorAll("button[data-a11y]").forEach(P=>{let A=P.dataset.f,z=A==="all"?L.size===0:L.has(A);P.classList.toggle("on",z),P.setAttribute("aria-pressed",String(z))});let $=L.size?[...L]:null;this.controller.setAccessibilityFilter($),$&&u()};v.querySelectorAll("button[data-a11y]").forEach($=>{$.addEventListener("click",()=>{let P=$.dataset.f;P==="all"?L.clear():L.has(P)?L.delete(P):L.add(P),O()})})}if(C){let T=document.createElement("button");T.type="button",T.className="sl-chip-f",T.setAttribute("aria-pressed","false"),T.innerHTML=`\u25D0 ${this.tf("picker.hideLimitedView","Hide limited-view seats")}`,v.appendChild(T),T.addEventListener("click",()=>{let L=!this.limitedViewFilter;this.limitedViewFilter=L,T.classList.toggle("on",L),T.setAttribute("aria-pressed",String(L)),this.controller.setCommercialLimitedFilter(L),this.pushAvailabilityTo3d(),L&&u()})}}let g=document.createElement("button");g.type="button",g.className="sl-cbbtn",this.cbEl=g,g.setAttribute("aria-label",this.tf("picker.toggleColorblindColors","Toggle colorblind-friendly colors")),g.setAttribute("aria-pressed",String(this.cbSafe)),g.innerHTML='<svg viewBox="0 0 24 24"><path d="M1 12s4-7 11-7 11 7 11 7-4 7-11 7S1 12 1 12z"/><circle cx="12" cy="12" r="3"/></svg>',this.els.zfit.parentElement.appendChild(g),g.addEventListener("click",()=>{this.setColorblindSafe(!this.cbSafe)}),this.srEl=document.createElement("div"),this.srEl.className="sl-sr",this.srEl.setAttribute("aria-live","polite"),o.appendChild(this.srEl),this.buildArenaChrome(),this.buildMinimap(),this.buildPriceFilter(),this.buildExtendPrompt(),this.buildBookedOverlay(),this.buildSoldoutOverlay(),this.buildPanelToggle(),this.opts.panelCollapsed&&this.setPanelCollapsed(!0),this.dockLayoutChrome(),t.buildBuyerControls=i(f);let M=performance.now();if(await this.restoreRememberedHold(),t.restoreHold=i(M),this.destroyed)return this;this.salesClosed&&this.applySalesClosed(),this.syncPrices(),this.syncTray(),this.resumeHostedOrder();let R=this.controller.doc;return this.emitAnalytics("chart_rendered",{renderingTimeMillis:i(e),performanceProfile:t,seatCount:this.allSeats().length,objectCount:R?.objects.length??0,sectionCount:R?.objects.filter(v=>v.type==="section").length??0,view:this.buyerView,eventKey:this.opts.event,chartName:R?.name,floorCount:this.controller.getFloors().length,transport:this.opts.transport?"custom":"pubapi",load:Pi(this.opts.event)?"repeat":"cold"}),this}resumeHostedOrder(){if(this.checkoutMode!=="hosted"||typeof location>"u")return;let e=new URLSearchParams(location.search),t=e.get("order");if(!t)return;let i=e.get("status");e.delete("order"),e.delete("status");try{let s=e.toString();history.replaceState(history.state,"",`${location.pathname}${s?`?${s}`:""}${location.hash}`)}catch{}i==="success"&&this.openCheckoutPanel({kind:"resume",orderId:t})}buildPanelToggle(){if(!this.regions["top-right"])return;let e=document.createElement("button");e.type="button",e.className="sl-side-toggle",e.addEventListener("click",()=>this.setPanelCollapsed(!this.sideCollapsed)),this.sideToggleEl=e,this.regions["top-right"].appendChild(e),this.syncPanelToggle()}syncPanelToggle(){let e=this.sideToggleEl;if(!e)return;let t=this.sideCollapsed;e.setAttribute("aria-expanded",String(!t)),e.setAttribute("aria-label",t?this.tf("picker.showTicketPanel","Show the ticket panel"):this.tf("picker.hideTicketPanel","Hide the ticket panel")),e.title=t?this.tf("picker.showTicketPanel","Show the ticket panel"):this.tf("picker.hideTicketPanel","Hide the ticket panel"),e.innerHTML=t?`<svg viewBox="0 0 24 24"><path d="M15 6l-6 6 6 6"/></svg><span>${this.tf("picker.tickets","Tickets")}</span>`:'<svg viewBox="0 0 24 24"><path d="M9 6l6 6-6 6"/></svg>'}setPanelCollapsed(e){this.destroyed||(this.sideCollapsed=e,this.applyPanelCollapsed(),this.scheduleMotion(()=>this.controller.refitCurrentView(),340))}applyPanelCollapsed(){let e=this.root?.dataset.layout!=="narrow";this.root?.setAttribute("data-side-collapsed",String(this.sideCollapsed)),this.els.side?.toggleAttribute("inert",this.sideCollapsed&&e),this.syncPanelToggle()}dockLayoutChrome(){let e=this.root?.dataset.layout==="narrow";this.applyPanelCollapsed();let t=this.els.zfs,i=this.els.headInfo?.parentElement;t&&i&&t.parentElement!==i&&(t.classList.add("sl-fs-pill"),i.insertBefore(t,this.els.hold??null));let s=this.els.pricesSec;s&&(e?(s.setAttribute("role","button"),s.tabIndex=0,s.setAttribute("aria-expanded",String(this.root?.getAttribute("data-prices-open")==="true"))):(s.removeAttribute("role"),s.removeAttribute("aria-expanded"),s.tabIndex=-1));let r=this.els.filters;if(r){this.cbEl&&this.els.zoom?.appendChild(this.cbEl),e?this.a11yChipsEl&&r.appendChild(this.a11yChipsEl):this.a11yChipsEl&&this.regions["top-left"]?.appendChild(this.a11yChipsEl);let n=e&&r.children.length>0;r.classList.toggle("has",n),this.els.filtersSec?.classList.toggle("has",n)}this.lastSection&&this.renderSectionCard(this.lastSection)}buildExtendPrompt(){let e=document.createElement("div");e.className="sl-extend",e.setAttribute("role","status"),e.innerHTML='<span class="sl-extend-txt" data-ref="extendTxt"></span><button type="button" class="sl-extend-btn" data-ref="extendBtn"></button>',(this.regions["bottom-center"]??this.els.map).appendChild(e),this.extendEl=e,this.els.extendTxt=e.querySelector('[data-ref="extendTxt"]'),this.els.extendBtn=e.querySelector('[data-ref="extendBtn"]'),this.els.extendBtn.textContent=this.tf("picker.addTime","Add time"),this.els.extendBtn.addEventListener("click",()=>{this.handleExtend()})}buildBookedOverlay(){let e=document.createElement("div");e.className="sl-booked",e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e.innerHTML=`<div class="sl-booked-badge"><svg viewBox="0 0 24 24"><path d="M20 6L9 17l-5-5"/></svg></div><div class="sl-booked-title">${this.tf("picker.allSetTitle","You're all set")}</div><div class="sl-booked-sub" data-ref="bookedSub"></div>`,this.root.appendChild(e),this.bookedEl=e,this.els.bookedSub=e.querySelector('[data-ref="bookedSub"]')}tf(e,t){return k(e,t)}buildSoldoutOverlay(){if(!this.els.map)return;let e=document.createElement("div");e.className="sl-soldout",e.setAttribute("role","status");let t=(this.controller.doc?.theme?.brandName??this.opts.theme?.brandName??this.els.name?.textContent??this.tf("picker.soldOutEyebrow","This event")).toUpperCase();e.innerHTML=`<div class="sl-soldout-eyebrow">${t}</div><div class="sl-soldout-title">${this.tf("picker.soldOutTitle","Sold out")}</div><p class="sl-soldout-copy">${this.tf("picker.soldOutCopy","No reserved seats are currently available for this event.")}</p>`,this.els.map.appendChild(e),this.soldoutEl=e}syncSoldout(e,t){let i=this.controller.getGAAreas().length>0,s=this.isSoldOut(e,t,i);s!==this.soldOut&&(this.soldOut=s,this.soldoutEl?.classList.toggle("on",s))}isSoldOut(e,t,i){return!i&&e.length>0&&e.every(s=>(t[s.key]??0)===0)}setSalesClosed(e){let t=e||!!this.opts.readOnly;this.salesClosed!==t&&(this.salesClosed=t,this.applySalesClosed())}applySalesClosed(){this.salesClosed&&this.tableDialog&&!this.tableDialogHeld&&this.cancelTableDialog();let e=this.els.closedPill;if(e){e.classList.toggle("on",this.salesClosed);let t=this.els.closedPillText??e;t.textContent=this.tf("picker.salesClosedPill","Sales are closed")}this.root?.setAttribute("data-sales-closed",String(this.salesClosed)),this.salesClosed&&this.srEl&&(this.srEl.textContent=this.tf("picker.salesClosedToast","Sales are closed for this event.")),this.syncCta(),this.syncTray()}badgeHidden(e){return!!(this.opts.hideBadge||e?.hideBadge)}buildBadge(e){if(this.badgeHidden(e))return;let t=this.els.foot;if(!t)return;let i=document.createElement("a");i.className="sl-powered",i.href="https://seatlayer.io/?ref=picker",i.target="_blank",i.rel="noopener noreferrer",i.setAttribute("aria-label",this.tf("picker.poweredBy","Powered by SeatLayer")),i.innerHTML='<span class="sl-powered-mark" aria-hidden="true">'+ye+`</span><span>${this.tf("picker.poweredBy","Powered by SeatLayer")}</span>`,t.appendChild(i)}buildRegions(){if(!this.els.map)return;let e=["top-left","top-center","top-right","left-rail","bottom-left","bottom-center","bottom-right"];for(let t of e){let i=document.createElement("div");i.className="sl-anchor",i.dataset.region=t,this.els.map.appendChild(i),this.regions[t]=i}}cssVar(e){return this.root?getComputedStyle(this.root).getPropertyValue(e).trim():""}reducedMotion(){return typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}scheduleMotion(e,t){let i=setTimeout(()=>{this.motionTimers.delete(i),this.destroyed||e()},t);this.motionTimers.add(i)}animateOnce(e,t,i=600){!e||this.reducedMotion()||(e.classList.remove(t),e.offsetWidth,e.classList.add(t),this.scheduleMotion(()=>e.classList.remove(t),i))}flashPickedSeat(e){this.reducedMotion()||this.controller.flashSeat(e,this.cssVar("--sl-accent")||"#f4b740")}flashHeldSeats(e){if(this.reducedMotion())return;(e.items??[]).filter(i=>i.objectType!=="ga").map(i=>i.label).slice(0,10).forEach((i,s)=>{let r=this.controller.seatByLabel(i);r&&this.scheduleMotion(()=>this.controller.flashSeat(r.id,this.cssVar("--sl-accent")||"#f4b740"),s*55)})}committedSelection(){let e=this.confirmSeat?.id,t=this.tableDialog&&!this.tableDialogHeld?this.tableDialog.id:null;return this.controller.getSelection().filter(i=>i.id!==e&&i.id!==t)}pendingSelectionCount(){let e=this.hold?.items??[],t=new Set(e.map(s=>s.label));return this.committedSelection().filter(s=>!t.has(s.label)).reduce((s,r)=>s+(r.quantity??1),0)+this.pendingGACount()}heldGACounts(){let e=new Map;for(let t of(this.hold?.items??[]).filter(i=>i.objectType==="ga"))e.set(t.objectId,(e.get(t.objectId)??0)+(t.quantity??1));return e}pendingGACount(){let e=this.heldGACounts();return[...this.gaQty.entries()].reduce((t,[i,s])=>t+Math.max(0,s-(e.get(i)??0)),0)}heldTicketCount(){return(this.hold?.items??[]).reduce((e,t)=>e+(t.quantity??1),0)}totalTicketCount(){let e=new Set((this.hold?.items??[]).map(i=>i.label)),t=this.committedSelection().filter(i=>!e.has(i.label)).reduce((i,s)=>i+(s.quantity??1),0);return this.heldTicketCount()+t+this.pendingGACount()}updateSelectionCapacity(){let e=new Set((this.hold?.items??[]).map(s=>s.label)),t=this.committedSelection().filter(s=>e.has(s.label)).reduce((s,r)=>s+(r.quantity??1),0),i=Math.max(0,this.maxTickets-this.heldTicketCount()-this.pendingGACount());this.controller.setMaxSelection(t+i)}canAddTicket(){return this.totalTicketCount()<this.maxTickets?!0:(this.toast(x("picker.maxTicketsForOrder",{count:this.maxTickets}),"warning"),!1)}pendingGATotal(e){let t=new Map;for(let i of(this.hold?.items??[]).filter(s=>s.objectType==="ga"))t.set(i.objectId,(t.get(i.objectId)??0)+(i.quantity??1));return e.reduce((i,s)=>i+this.paidPrice(s.categoryKey,null,s.price)*Math.max(0,(this.gaQty.get(s.id)??0)-(t.get(s.id)??0)),0)}syncCta(e=this.lastTrayCount,t=this.pendingSelectionCount()){let i=this.els.cta;if(i){if(this.salesClosed){i.disabled=!0,i.textContent=this.tf("picker.salesClosedCta","Sales closed");return}if(this.confirmSeat||this.tableDialog&&!this.tableDialogHeld){i.disabled=!0,i.textContent=this.tableDialog?this.tf("picker.confirmYourTable","Confirm your table"):this.tf("picker.confirmOrCancelSeat","Confirm or cancel this seat");return}if(this.ctaPhase==="holding"){i.disabled=!0,i.innerHTML=`<span class="sl-cta-spin" aria-hidden="true"></span>${this.tf("picker.securingSeats","Securing your seats\u2026")}`;return}if(this.ctaPhase==="checkout"){i.disabled=!0,i.innerHTML=`<span class="sl-cta-spin" aria-hidden="true"></span>${this.tf("picker.openingCheckout","Opening secure checkout\u2026")}`;return}i.disabled=e===0,i.textContent=this.hold?t?x("picker.secureMoreAndCheckout",{count:t}):this.tf("picker.continueToCheckout","Continue to checkout"):e?this.tf("picker.holdSeatsAndCheckout","Hold seats & checkout"):this.tf("picker.selectSeats","Select seats")}}setCtaPhase(e){this.ctaPhase=e,this.syncCta(),this.renderPeek(this.lastTrayCount,this.lastTrayTotal,this.pendingSelectionCount()),e==="checkout"&&this.scheduleMotion(()=>{this.ctaPhase==="checkout"&&(this.ctaPhase="idle",this.syncCta(),this.renderPeek(this.lastTrayCount,this.lastTrayTotal,this.pendingSelectionCount()))},1100)}holdStorageKey(){return`@seatlayer/hold/v1/${encodeURIComponent(this.apiBase)}/${encodeURIComponent(this.opts.event)}`}rememberedHoldId(){if(this.opts.initialHoldId)return this.opts.initialHoldId;if(this.opts.restoreHold===!1||typeof window>"u")return null;try{return window.sessionStorage.getItem(this.holdStorageKey())}catch{return null}}rememberHold(e){if(!(this.opts.restoreHold===!1||typeof window>"u"))try{window.sessionStorage.setItem(this.holdStorageKey(),e.holdId)}catch{}}forgetHold(){if(!(typeof window>"u"))try{window.sessionStorage.removeItem(this.holdStorageKey())}catch{}}async resumeHoldFromServer(e,t){try{let i=await this.controller.resumeHold(e);if(!i)return null;let s={holdId:i.holdId,expiresAt:i.expiresAt,seats:i.seats,items:i.items};return this.hold=s,this.handedOff=!0,this.bookedShown=!1,this.ctaPhase="idle",this.startHoldTimer(s.expiresAt),this.rememberHold(s),this.syncTray(),this.emitHoldChange(),this.opts.onHoldRestored?.(s,s.seats??[],this.buildHandoff(s)),t&&this.toast(this.tf("picker.heldTicketsRestored","Your held tickets have been restored."),"success"),s}catch(i){let s=i?.status;return s===404||s===409?this.forgetHold():this.opts.onError?.(i),null}}async restoreRememberedHold(){let e=this.rememberedHoldId();e&&await this.resumeHoldFromServer(e,!0)}activeFloorObjects(){let e=this.controller.doc;if(!e)return[];let t=e.floors;if(t?.length){let i=this.controller.getActiveFloorId();return(t.find(s=>s.id===i)??t[0]).objects??[]}return e.objects??[]}buildMinimap(){this.els.map&&(this.minimap=mt({controller:this.controller,root:()=>this.root,cssVar:e=>this.cssVar(e),focusedSectionLabel:()=>this.lastSection?.label},this.regions["bottom-left"]??this.els.map))}catPrice(e){let t=e.tiers?.length?e.tiers[0].price:e.price;return t===void 0||!e.key?t:this.paidPrice(e.key,e.tiers?.[0]?.id??null,t)}catPriceRange(e){let t=e.tiers?.length?e.tiers.map(i=>this.paidPrice(e.key,i.id??null,i.price)):e.price==null?[]:[this.paidPrice(e.key,null,e.price)];return t.length?{min:Math.min(...t),max:Math.max(...t)}:void 0}priceBands(){let e=this.controller.doc;if(!e)return[];let t=e.categories.map(o=>({key:o.key,range:this.catPriceRange(o)})).filter(o=>o.range!=null);if(!t.length)return[];let i=[...new Map(t.map(o=>[`${o.range.min}:${o.range.max}`,o.range])).values()].sort((o,c)=>o.min-c.min||o.max-c.max);if(i.length<=5)return i.map(o=>({id:`p${o.min}-${o.max}`,label:o.min===o.max?this.money(o.min):`${this.money(o.min)}\u2013${this.money(o.max)}`,keys:t.filter(c=>c.range.min===o.min&&c.range.max===o.max).map(c=>c.key),min:o.min,max:o.max}));let s=[...t].sort((o,c)=>o.range.min-c.range.min||o.range.max-c.range.max),r=Math.ceil(s.length/4),n=[];for(let o=0;o<s.length;o+=r){let c=s.slice(o,o+r),l=Math.min(...c.map(d=>d.range.min)),p=Math.max(...c.map(d=>d.range.max));n.push({id:`b${o}`,label:l===p?this.money(l):`${this.money(l)}\u2013${this.money(p)}`,keys:c.map(d=>d.key),min:l,max:p})}return n}buildPriceFilter(){if(!this.els.prices||!this.els.pricesSec)return;let e=this.priceBands();if(e.length<2)return;let t=document.createElement("select");t.className="sl-price-select",t.setAttribute("aria-label",this.tf("picker.filterAndFocusByPrice","Filter and focus seats by price")),t.innerHTML=`<option value="all">${this.tf("picker.allPrices","All prices")}</option>`+e.map(i=>`<option value="${i.id}">${i.label}</option>`).join(""),this.els.pricesSec.appendChild(t),t.addEventListener("change",()=>{let s=e.find(r=>r.id===t.value)?.keys??null;this.focusedCatKey=null,this.priceBandKeys=s?new Set(s):null,this.controller.setCategoryFilter(s),this.controller.focusCategoryFilter(s),this.pushAvailabilityTo3d(),this.syncFloors(),this.syncRung(),this.minimap?.refreshMinimap(),this.syncPrices(),this.lastSection&&this.showSectionCard(this.lastSection)})}buildArenaChrome(){let e=this.controller.doc;if(!e||!this.els.map)return;let t=e.objects.some(i=>i.type==="section")||(e.floors??[]).some(i=>i.objects.some(s=>s.type==="section"));if(this.canOffer3d()){let i=document.createElement("div");i.className="sl-projection",i.setAttribute("role","group"),i.setAttribute("aria-label",this.tf("picker.venueView","Venue view")),i.innerHTML=`<button type="button" data-view="map" aria-pressed="true" title="${this.tf("picker.flat2dMap","Flat 2D map")}">${this.tf("picker.map","Map")}</button><button type="button" data-view="venue3d" aria-pressed="false" title="${this.tf("picker.interactive3dVenueView","Interactive 3D venue view")}">3D</button>`,i.querySelectorAll("button").forEach(s=>{s.addEventListener("click",()=>{this.setBuyerView(s.dataset.view)})}),this.regions["top-right"].appendChild(i),this.projectionEl=i,this.syncProjection()}if(t){let i=[...e.objects,...(e.floors??[]).flatMap(p=>p.objects)],s=new Set((e.zones??[]).map(p=>p.id)),n=i.some(p=>p.type==="section"&&typeof p.zone=="string"&&s.has(p.zone))?["zones","sections","seats"]:["sections","seats"],o=document.createElement("div");o.className="sl-rungs on",o.setAttribute("role","group"),o.setAttribute("aria-label",x("picker.zoomLevel"));let c={zones:x("picker.rungLabel.zones"),sections:x("picker.rungLabel.sections"),seats:x("picker.rungLabel.seats")},l={zones:x("picker.rungTip.zones"),sections:x("picker.rungTip.sections"),seats:x("picker.rungTip.seats")};o.innerHTML=n.map(p=>`<button type="button" data-rung="${p}" title="${l[p]}" aria-pressed="false">${c[p]}</button>`).join(""),o.querySelectorAll("button").forEach(p=>{p.addEventListener("click",()=>{let d=p.dataset.rung;this.controller.setRung(d),d==="seats"&&this.collapseSectionCard()})}),this.regions["top-center"].appendChild(o),this.rungsEl=o,this.syncRung()}if(this.controller.isMultiFloor()){let i=this.controller.getFloors(),s=document.createElement("div");s.className="sl-floors on";let r=document.createElement("select");r.setAttribute("aria-label",this.tf("picker.chooseLevel","Choose level"));let n=document.createElement("option");n.value="",n.textContent=this.tf("picker.allFloors","All floors"),r.appendChild(n);for(let l of i){let p=document.createElement("option");p.value=l.id,p.textContent=l.name,r.appendChild(p)}r.addEventListener("change",()=>{r.value===""?this.controller.setFloorOverview(!0):this.controller.setFloor(r.value),this.showSectionCard(null),this.syncFloors(),this.syncRung(),this.minimap?.refreshMinimap()}),s.appendChild(r);let o=document.createElement("button");o.type="button",o.className="sl-floor-info",o.textContent="i";let c=this.tf("picker.floorHelp","All floors shows the complete venue. Choose one level to inspect and select its seats.");o.setAttribute("aria-label",c),o.title=c,s.appendChild(o),this.regions["left-rail"].appendChild(s),this.floorsEl=s,this.syncFloors()}}syncRung(){if(!this.rungsEl)return;let e=this.controller.getRung();this.rungsEl.querySelectorAll("button").forEach(t=>{let i=t.dataset.rung===e;t.classList.toggle("on",i),t.setAttribute("aria-pressed",String(i))})}syncProjection(){this.projectionEl&&this.projectionEl.querySelectorAll("button").forEach(e=>{let t=e.dataset.view===this.buyerView;e.classList.toggle("on",t),e.setAttribute("aria-pressed",String(t))})}canOffer3d(){return this.opts.enable3D===!1||!this.controller.doc||!rt()?!1:this.allSeats().length<=this.max3dSeats()}max3dSeats(){let e=this.opts.max3DSeats;if(typeof e=="number"&&e>0)return e;let t=globalThis.navigator;return(t?.hardwareConcurrency??8)<=4||(t?.deviceMemory??8)<=4||(globalThis.matchMedia?.("(pointer: coarse)").matches??!1)?kt/2:kt}syncFloors(){if(!this.floorsEl)return;let e=this.controller.getActiveFloorId(),t=this.controller.isFloorOverview(),i=this.floorsEl.querySelector("select");i&&(i.value=t?"":e)}showSectionCard(e){if(this.lastSection=e,this.secCardEl?.remove(),this.secCardEl=null,!e){this.minimap?.refreshMinimap();return}this.secCardCollapsed=this.controller.getRung()==="seats",this.secCardShownAt=Date.now(),this.renderSectionCard(e),this.minimap?.refreshMinimap()}sectionNeighbours(e){let t=this.activeFloorObjects().filter(s=>s.type==="section"&&!this.controller.isSectionClosed(s.id)&&this.controller.getSectionSeatCount(s.id)>0);if(t.length<2)return null;let i=t.findIndex(s=>s.id===e);return i<0?null:{previous:t[(i-1+t.length)%t.length],next:t[(i+1)%t.length]}}wireSectionNavigation(e){e.querySelectorAll("[data-section-nav]").forEach(t=>{t.addEventListener("click",i=>{i.preventDefault(),i.stopPropagation();let s=t.dataset.sectionNav;s&&this.controller.focusSection(s)})})}renderSectionCard(e){if(!this.els.map)return;if(this.secCardEl?.remove(),this.root?.dataset.layout==="narrow"&&(this.hold||this.committedSelection().length||this.pendingGACount())){this.lastSection=null;return}let t=e.categories.length?e.categories.map(d=>{let h=this.controller.doc?.categories.find(b=>b.key===d.key);return h?this.catPriceRange(h):{min:d.priceMin,max:d.priceMax}}).filter(d=>d!=null):[{min:e.priceMin,max:e.priceMax}],i=Math.min(...t.map(d=>d.min)),s=Math.max(...t.map(d=>d.max)),r=i===s?this.money(i):`${this.money(i)}\u2013${this.money(s)}`,n=Y("picker.seatsLeftInSection",e.seatsLeft),o=`<button type="button" class="sl-seccard-x" aria-label="${x("picker.closeSectionSummary")}">\u2715</button>`,c=pt(this.sectionNeighbours(e.id)),l=document.createElement("div");if(this.root?.dataset.layout==="narrow")l.className="sl-seccard strip on",l.setAttribute("role","status"),l.setAttribute("aria-label",x("picker.sectionSummaryAria",{label:e.label})),l.innerHTML=`<span class="sl-seccard-dot" style="background:${e.color}"></span><span class="sl-seccard-name">${e.label}</span><span class="sl-seccard-left">${n}</span>`+(e.categories.length?`<span class="sl-seccard-price">${r}</span>`:"")+c+o,this.wireSectionNavigation(l),l.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),(this.els.sheetHead??this.els.side??this.els.map).appendChild(l);else if(this.secCardCollapsed)l.className="sl-seccard mini on",l.setAttribute("role","button"),l.setAttribute("aria-label",x("picker.sectionSummaryAria",{label:e.label})),l.innerHTML=`<span class="sl-seccard-dot" style="background:${e.color}"></span><span class="sl-seccard-name">${e.label}</span><span class="sl-seccard-left">${n}</span>`+c+o,this.wireSectionNavigation(l),l.addEventListener("click",d=>{d.target.closest(".sl-seccard-x")||(this.secCardCollapsed=!1,this.secCardShownAt=Date.now(),this.renderSectionCard(e))}),l.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),(this.regions["top-center"]??this.els.map).appendChild(l);else{l.className="sl-seccard on",l.setAttribute("role","dialog"),l.setAttribute("aria-label",x("picker.sectionSummaryAria",{label:e.label}));let d=e.categories.map(h=>{let b=this.priceBandKeys!=null&&!this.priceBandKeys.has(h.key),m=this.controller.doc?.categories.find(E=>E.key===h.key),f=m?this.catPriceRange(m):{min:h.priceMin,max:h.priceMax},S=f&&f.min!==f.max?`${this.money(f.min)}\u2013${this.money(f.max)}`:this.money(f?.min??h.price);return`<span class="sl-seccard-mix-item${b?" sl-dim":""}"><span class="sl-seccard-mix-dot" style="background:${h.color}"></span>${h.label} <span class="sl-seccard-mix-price">${S}</span></span>`}).join("");l.innerHTML=`<div class="sl-seccard-head"><span class="sl-seccard-dot" style="background:${e.color}"></span><span class="sl-seccard-name">${e.label}</span>`+(e.categories.length?`<span class="sl-seccard-price">${r}</span>`:"")+o+`</div><div class="sl-seccard-zone">${e.zoneLabel?`${e.zoneLabel} \xB7 `:""}<span class="sl-seccard-left">${n}</span></div>`+(e.entrance?`<div class="sl-seccard-entrance">${x("picker.entrance")} ${String(e.entrance).replace(/[&<>"]/g,h=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[h])}</div>`:"")+(d?`<div class="sl-seccard-mix">${d}</div>`:"")+`<div class="sl-seccard-foot"><button type="button" class="sl-seccard-overview">\u2190 ${x("picker.overview")}</button>`+c+`<span class="sl-seccard-hint">${x("picker.tapSeatHint")}</span></div>`,this.wireSectionNavigation(l),l.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),l.querySelector(".sl-seccard-overview").addEventListener("click",()=>this.controller.overview()),(this.regions["top-center"]??this.els.map).appendChild(l)}this.secCardEl=l}collapseSectionCard(){!this.secCardEl||this.secCardCollapsed||!this.lastSection||this.root?.dataset.layout!=="narrow"&&(this.secCardCollapsed=!0,this.renderSectionCard(this.lastSection))}sectionCardOnView(){if(!(!this.secCardEl||this.secCardCollapsed||!this.lastSection)&&this.root?.dataset.layout!=="narrow"){if(this.controller.getRung()==="seats"){this.collapseSectionCard();return}if(Date.now()-this.secCardShownAt<1400){this.sectionCardCoverage()>.25&&this.collapseSectionCard();return}this.collapseSectionCard()}}sectionCardCoverage(){let e=this.secCardEl,t=this.lastSection;if(!e||!t||!this.els.map)return 0;let i=this.activeFloorObjects().find(E=>E.type==="section"&&E.id===t.id)?.outline;if(!i||i.length<3)return 0;let s=i.map(E=>this.controller.worldToScreen(E)),r=s.map(E=>E.x),n=s.map(E=>E.y),o=Math.min(...r),c=Math.min(...n),l=Math.max(...r)-o,p=Math.max(...n)-c;if(l<=0||p<=0)return 0;let d=this.els.map.getBoundingClientRect(),h=e.getBoundingClientRect(),b=h.left-d.left,m=h.top-d.top,f=Math.max(0,Math.min(b+h.width,o+l)-Math.max(b,o)),S=Math.max(0,Math.min(m+h.height,c+p)-Math.max(m,c));return f*S/(l*p)}announceSeat(e){if(!this.srEl)return;if(!e){this.srEl.textContent="";return}let t=this.controller.doc?.categories.find(h=>h.key===e.categoryKey),i=this.controller.getStatus(e.id)??"free",s=i==="free"?this.tf("picker.statusAvailable","available"):i==="held"?this.tf("picker.statusOnHold","on hold"):this.tf("picker.statusTaken2","taken"),r=t?this.catPriceRange(t):void 0,n=r?r.min===r.max?this.money(r.min):`${this.money(r.min)}\u2013${this.money(r.max)}`:void 0,o=this.controller.tableSelection(e.id),c=o??this.controller.seatDetails(e.id),l=this.rowTypeWord(c),p=c?.rowLabel??c?.displayLabel??e.displayLabel??e.label,d=o?`${l} ${p}, ${o.bookingMode==="variable"?x("picker.minToMaxGuests",{min:o.minOccupancy,max:o.maxOccupancy}):x("picker.capacityGuests",{count:o.capacity})}`:c?.objectType==="booth"?`${l} ${p}`:c?.objectType==="table"?`${l} ${p}, ${x("picker.seatNumberLower",{label:c.seatNumber??e.label})}`:x("picker.seatLabel",{label:c?.displayLabel??e.displayLabel??e.label});this.srEl.textContent=`${d}, ${t?.label??e.categoryKey}${n?`, ${n}`:""}, ${s}`}showTableDialog(e,t,i){this.dismissTableDialog(!1),this.tableDialog={...e},this.tableDialogHeld=t,this.tableDialogReturnFocus=i??document.activeElement;let s=l=>String(l??"").replace(/[&<>"']/g,p=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[p]),r=this.controller.doc?.categories.find(l=>l.key===e.categoryKey),n=e.bookingMode==="variable",o=this.rowTypeWord(e),c=document.createElement("div");c.className="sl-table-scrim",c.innerHTML=`<section class="sl-table-dialog" role="dialog" aria-modal="true" aria-labelledby="sl-table-title" aria-describedby="sl-table-copy"><div class="sl-table-head"><div class="sl-table-eyebrow">${s(n?x("picker.flexiblePartyTypeWord",{typeWord:o}):x("picker.wholeTypeWord",{typeWord:o}))}</div><h2 class="sl-table-title" id="sl-table-title">${s(e.displayLabel??e.label)}</h2><p class="sl-table-copy" id="sl-table-copy">${n?this.tf("picker.chooseGuestsCopy","Choose how many guests will sit together. This table is held exclusively for your party."):x("picker.allPlacesBookedTogether",{count:e.capacity})}</p></div><div class="sl-table-body"><div class="sl-table-summary"><span>${s(r?.label??e.categoryKey)}</span><b data-table-unit>${x("picker.perGuestPrice",{price:this.money(this.paidPrice(e.categoryKey,e.tierId??null,e.price))})}</b><span class="muted">${this.tf("picker.tableCapacity","Table capacity")}</span><span>${x("picker.guestsCount",{count:e.capacity})}</span><span class="muted">${this.tf("picker.total","Total")}</span><b data-table-total></b></div>`+(n?`<label class="sl-table-qtylabel" id="sl-table-qty-label">${this.tf("picker.numberOfGuests","Number of guests")}</label><div class="sl-table-stepper" role="group" aria-labelledby="sl-table-qty-label"><button type="button" data-table-step="-1" aria-label="${this.tf("picker.fewerGuests","Fewer guests")}">\u2212</button><output aria-live="polite" data-table-qty>${e.quantity}</output><button type="button" data-table-step="1" aria-label="${this.tf("picker.moreGuests","More guests")}">+</button></div><div class="sl-table-range">${x("picker.chooseMinMaxGuests",{min:e.minOccupancy,max:e.maxOccupancy})}</div>`:`<input type="hidden" data-table-qty value="${e.capacity}">`)+`<div class="sl-table-actions"><button type="button" class="sl-table-cancel">${x("common.cancel")}</button><button type="button" class="sl-table-confirm">${t?this.tf("picker.updateTable","Update table"):n?this.tf("picker.selectTable","Select table"):this.tf("picker.selectWholeTable","Select whole table")}</button></div></div></section>`,this.root.appendChild(c),this.tableDialogEl=c,this.renderTableDialogState(),c.querySelectorAll("[data-table-step]").forEach(l=>{l.addEventListener("click",()=>{if(!this.tableDialog)return;let p=Math.max(this.tableDialog.minOccupancy,Math.min(this.tableDialog.maxOccupancy,this.tableDialog.quantity+Number(l.dataset.tableStep)));this.tableDialog={...this.tableDialog,quantity:p},this.renderTableDialogState()})}),c.querySelector(".sl-table-cancel").addEventListener("click",()=>this.cancelTableDialog()),c.querySelector(".sl-table-confirm").addEventListener("click",()=>{this.confirmTableDialog()}),c.addEventListener("mousedown",l=>{l.target===c&&this.cancelTableDialog()}),c.addEventListener("keydown",l=>{if(l.key!=="Tab")return;let p=[...c.querySelectorAll('button:not(:disabled),[tabindex]:not([tabindex="-1"])')];if(!p.length)return;let d=p[0],h=p[p.length-1];l.shiftKey&&document.activeElement===d?(l.preventDefault(),h.focus()):!l.shiftKey&&document.activeElement===h&&(l.preventDefault(),d.focus())}),requestAnimationFrame(()=>c.querySelector(n?'[data-table-step="-1"]':".sl-table-confirm")?.focus())}renderTableDialogState(){let e=this.tableDialog,t=this.tableDialogEl;if(!e||!t)return;let i=t.querySelector("output[data-table-qty]");i&&(i.value=String(e.quantity));let s=t.querySelector("input[data-table-qty]");s&&(s.value=String(e.quantity)),t.querySelectorAll("[data-table-step]").forEach(o=>{let c=Number(o.dataset.tableStep);o.disabled=c<0?e.quantity<=e.minOccupancy:e.quantity>=e.maxOccupancy});let r=this.paidPrice(e.categoryKey,e.tierId??null,e.price),n=t.querySelector("[data-table-total]");n&&(n.textContent=this.money(r*e.quantity))}async confirmTableDialog(){let e=this.tableDialog,t=this.tableDialogHeld;if(!e)return;let i=this.tableDialogEl?.querySelector(".sl-table-confirm");if(i&&(i.disabled=!0,i.textContent=t?this.tf("picker.updatingEllipsis","Updating\u2026"):this.tf("picker.selectingEllipsis","Selecting\u2026")),t){try{let s=await this.controller.replaceTableQuantity(e.label,e.quantity,this.opts.holdTtlMs);if(!s){this.toast(this.tf("picker.guestCountCouldNotBeSecured","That guest count could not be secured. Your current table hold is unchanged."),"warning"),this.renderTableDialogState(),i&&(i.disabled=!1,i.textContent=this.tf("picker.updateTable","Update table"));return}this.hold={holdId:s.holdId,expiresAt:s.expiresAt,seats:s.seats,items:s.items},this.startHoldTimer(s.expiresAt),this.dismissTableDialog(),this.syncTray(),this.emitHoldChange(),this.toast(x("picker.tableUpdatedForGuests",{label:e.label,count:e.quantity}),"success")}catch(s){this.opts.onError?.(s),this.toast(this.tf("picker.guestCountNoLongerAvailable","That guest count is no longer available. Your current hold is unchanged."),"error"),i&&(i.disabled=!1,i.textContent=this.tf("picker.updateTable","Update table"))}return}if(!this.controller.setTableQuantity(e.label,e.quantity)){i&&(i.disabled=!1,i.textContent=e.bookingMode==="variable"?this.tf("picker.selectTable","Select table"):this.tf("picker.selectWholeTable","Select whole table"));return}this.dismissTableDialog(),this.collapseSectionCard(),this.syncTray()}cancelTableDialog(){let e=this.tableDialog,t=this.tableDialogHeld;this.dismissTableDialog(),e&&!t&&this.controller.deselect(e.physicalSeatIds)}dismissTableDialog(e=!0){let t=this.tableDialogReturnFocus;this.tableDialogEl?.remove(),this.tableDialogEl=null,this.tableDialog=null,this.tableDialogHeld=!1,this.tableDialogReturnFocus=null,e&&requestAnimationFrame(()=>(t?.isConnected?t:this.root)?.focus())}showConfirm(e){let t=this.confirmSeat?.id;this.confirmEl?.remove(),this.confirmEl=null,this.confirmSeat=e,this.root?.setAttribute("data-confirming","true"),this.els.side?.toggleAttribute("inert",!0),Object.values(this.regions).forEach(w=>w.toggleAttribute("inert",!0)),this.controller.setSelectionFocus(e.id),t&&t!==e.id&&this.controller.deselect([t]),this.tipEl&&(this.tipEl.style.display="none");let i=this.controller.seatDetails(e.id),s=this.controller.doc?.categories.find(w=>w.key===e.categoryKey),r=i?.price??(s?.tiers?.length?s.tiers[0].price:s?.price),n=r!=null?this.paidPrice(e.categoryKey,i?.tierId??s?.tiers?.[0]?.id??null,r):void 0,o=w=>String(w??"\u2014").replace(/[&<>"]/g,y=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[y]),c=[i?.sectionLabel?`<div class="sl-confirm-field"><span class="sl-confirm-key">${this.tf("picker.section","Section")}</span><span class="sl-confirm-value">${o(i.sectionLabel)}</span></div>`:"",i?.rowLabel||i?.objectType==="booth"?`<div class="sl-confirm-field"><span class="sl-confirm-key">${o(this.rowTypeWord(i))}</span><span class="sl-confirm-value">${o(Z(i)??i?.displayLabel??e.displayLabel??e.label)}</span></div>`:"",i?.objectType!=="booth"?`<div class="sl-confirm-field"><span class="sl-confirm-key">${this.tf("picker.seat","Seat")}</span><span class="sl-confirm-value">${o(i?.seatNumber??i?.displayLabel??e.displayLabel??e.label)}</span></div>`:""].filter(Boolean).join(""),l=i?.tiers??s?.tiers??[],p=i?.tierId??l[0]?.id,d=w=>w.buyerMessage?.trim()||(w.restriction==="companion"?this.tf("picker.companionRequiresWheelchair","Requires the adjacent wheelchair place"):void 0),h=l.length>1?`<fieldset class="sl-confirm-tiers"><legend>${this.tf("picker.ticketType","Ticket type")}</legend>`+l.map(w=>{let y=d(w);return`<button type="button" class="sl-confirm-tier" data-confirm-tier="${o(w.id)}" aria-pressed="${w.id===p}"><span class="sl-confirm-tier-copy"><span class="sl-confirm-tier-name">${o(w.name)}</span>`+(y?`<small class="sl-confirm-tier-note">${o(y)}</small>`:"")+`</span><span class="sl-confirm-tier-price">${this.money(this.paidPrice(e.categoryKey,w.id,w.price))}</span></button>`}).join("")+"</fieldset>":l[0]&&d(l[0])?`<p class="sl-confirm-tier-note">${o(d(l[0]))}</p>`:"",b=this.buyerView==="venue3d",m=document.createElement("div");m.className="sl-confirm",m.setAttribute("role","dialog"),m.setAttribute("aria-label",x("picker.confirmSeatLabel",{label:e.label}));let f=s?.color??"#6e7bff",S=$e(f,this.cssVar("--sl-surface")||"#1a2234",.76)??f;m.style.setProperty("--sl-cat",f),m.style.setProperty("--sl-cat-ink",fe(S,"#172033","#ffffff")),m.innerHTML='<div class="sl-confirm-grid">'+c+`</div><div class="sl-confirm-cat"><span class="sl-dot" style="background:${s?.color??"#6e7bff"}"></span><span class="sl-confirm-cat-name">${o(i?.categoryLabel??s?.label??e.categoryKey)}</span>`+(n!=null?`<span class="sl-confirm-price">${this.money(n)}</span>`:"")+'</div><div class="sl-confirm-body">'+h+dt(i?.wheelchairSpaceType)+ct(e.commercial)+(this.seatViewEnabled()&&this.buyerView!=="venue3d"?this.confirmThumbHtml(e):"")+(b?`${ut(e,`${i?.displayLabel??e.displayLabel??e.label} \xB7 ${n==null?this.tf("picker.priceNotSupplied","Price not supplied"):this.money(n)}`,b)}<div class="sl-confirm-inspect-row">${ht(e,b?this.view3dCompareSeatIds:null)}${Fe(this.canOffer3d(),b)}</div>`:Fe(this.canOffer3d(),b))+`<div class="sl-confirm-row"><button type="button" class="sl-confirm-cancel">${x("common.cancel")}</button><button type="button" class="sl-confirm-add"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12.5l4 4L19 7"/></svg>${this.tf("picker.select","Select")}</button></div></div>`,this.els.map.appendChild(m),this.confirmEl=m;let E=m.querySelector(".sl-confirm-thumb");if(E&&e.viewUrl){let w=e.viewMeta?.previewUrl??e.viewUrl;this.buyerAssetUrls.resolve(w).then(y=>{y&&m.isConnected&&this.confirmEl===m&&(E.src=y)}).catch(y=>this.opts.onError?.(y))}this.reanchorConfirm(),m.querySelector(".sl-confirm-view")?.addEventListener("click",()=>{this.openSeatView(e)}),m.querySelector(".sl-confirm-confidence")?.addEventListener("click",w=>{this.openSeatConfidencePassport(e,w.currentTarget instanceof HTMLElement?w.currentTarget:null)}),m.querySelector(".sl-confirm-compare")?.addEventListener("click",()=>this.saveView3dComparisonSeat(e)),m.querySelectorAll("[data-confirm-tier]").forEach(w=>{w.addEventListener("click",()=>{let y=w.dataset.confirmTier,C=l.find(g=>g.id===y);if(!C)return;this.controller.setSeatTier(e.id,C.id),m.querySelectorAll("[data-confirm-tier]").forEach(g=>{g.setAttribute("aria-pressed",String(g===w))});let u=m.querySelector(".sl-confirm-price");u&&(u.textContent=this.money(this.paidPrice(e.categoryKey,C.id,C.price))),this.reanchorConfirm()})}),m.querySelector(".sl-confirm-3d")?.addEventListener("click",()=>{this.buyerView==="venue3d"?(this.dismissConfirm(),this.view3dHandle?.flyToSeat(e.id)):(this.view3dReturnSeat=e,this.dismissConfirm(),this.enter3d(e.id))}),m.querySelector(".sl-confirm-add").addEventListener("click",()=>this.commitConfirm()),m.querySelector(".sl-confirm-cancel").addEventListener("click",()=>this.cancelConfirm()),requestAnimationFrame(()=>m.querySelector(".sl-confirm-add")?.focus())}reanchorConfirm(){if(!this.confirmEl||!this.confirmSeat||this.root?.dataset.view3d==="on")return;let e=this.controller.worldToScreen({x:this.confirmSeat.x,y:this.confirmSeat.y});if(this.root?.dataset.layout==="narrow")return;let t=this.els.map.clientWidth,i=this.els.map.clientHeight,s=this.confirmEl.offsetWidth||276,r=this.confirmEl.offsetHeight||230,n=s/2+12,o=Math.max(n,Math.min(t-n,e.x)),c=e.y+r+24<=i,l=e.y<r+24&&c;this.confirmEl.dataset.placement=l?"below":"above",this.confirmEl.style.left=`${o}px`,this.confirmEl.style.top=`${Math.max(8,Math.min(i-8,e.y))}px`}dismissConfirm(){this.confirmEl?.remove(),this.confirmEl=null,this.confirmSeat=null,this.root?.removeAttribute("data-confirming"),Object.values(this.regions).forEach(e=>e.toggleAttribute("inert",!1)),this.applyPanelCollapsed(),this.controller.setSelectionFocus(null)}commitConfirm(){this.confirmSeat&&(this.dismissConfirm(),this.collapseSectionCard(),this.syncTray(),this.syncSelectionTo3d())}cancelConfirm(){let e=this.confirmSeat;e&&(this.controller.deselect([e.id]),this.confirmSeat&&this.dismissConfirm(),this.syncSelectionTo3d(),this.root?.focus({preventScroll:!0}))}closeConfirm(){this.dismissConfirm()}seatViewEnabled(){return this.opts.seatView!==!1}allSeats(){if(!this.allSeatsCache){let e=this.controller.doc;this.allSeatsCache=e?Ve(e):[]}return this.allSeatsCache}async openSeatView(e){if(!this.root||!this.seatViewEnabled())return;let t=++this.seatViewGen,i=this.controller.doc,s=this.controller.getActiveFloorId(),r=e.focalPoint??i?.floors?.find(A=>A.id===s)?.focalPoint??i?.focalPoint??{x:0,y:0},n,o,c=!1;if(e.viewUrl){let A,z=null;try{let W=e.viewMeta?.previewUrl;W&&W!==e.viewUrl?(z=await this.buyerAssetUrls.resolve(W),A=e.viewUrl):A=await this.buyerAssetUrls.resolve(e.viewUrl)}catch(W){t===this.seatViewGen&&this.opts.onError?.(W);return}if(t!==this.seatViewGen||!A||e.viewMeta?.previewUrl&&e.viewMeta.previewUrl!==e.viewUrl&&!z||!this.root||!this.seatViewEnabled())return;let J={url:A,...z?{previewUrl:z}:{},...e.viewMeta?.sourceWidth!==void 0?{sourceWidth:e.viewMeta.sourceWidth}:{},...e.viewMeta?.sourceHeight!==void 0?{sourceHeight:e.viewMeta.sourceHeight}:{},...e.viewMeta?.previewWidth!==void 0?{previewWidth:e.viewMeta.previewWidth}:{},...e.viewMeta?.previewHeight!==void 0?{previewHeight:e.viewMeta.previewHeight}:{},...e.viewMeta?.coverage?{coverage:e.viewMeta.coverage}:{},...e.viewMeta?.capturedAt?{capturedAt:e.viewMeta.capturedAt}:{},...e.viewMeta?.sourceLabel?{sourceLabel:e.viewMeta.sourceLabel}:{}};n=J,o=yt(J),c=Si(J)}else{let A;try{let{generateSeatPanorama:z}=await ot();A=z(e,r,this.allSeats())}catch(z){t===this.seatViewGen&&this.opts.onError?.(z);return}if(t!==this.seatViewGen||!this.root||!this.seatViewEnabled())return;n={url:A.url,generated:!0},o=x("picker.illustrationCaption",{m:A.distanceM})}this.closeSeatView(!1);let l=document.createElement("div");l.className="sl-view",l.setAttribute("role","dialog"),l.setAttribute("aria-label",x("picker.viewFromSeat",{label:e.label})),l.innerHTML=`<div class="sl-view-head"><span class="sl-view-title">${x("picker.viewFromSeat",{label:e.label})}</span><span class="sl-view-cap">${o}</span><button type="button" class="sl-view-x" aria-label="${this.tf("picker.close","Close")}"><svg viewBox="0 0 24 24"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg></button></div><div class="sl-view-pano"><span class="sl-view-badge">${c?x("picker.real360"):x("picker.preview")}</span><span class="sl-view-hint">${this.tf("picker.dragToLookAround","Drag to look around \xB7 scroll to zoom")}</span></div>`,this.root.appendChild(l),this.viewEl=l;let p=l.querySelector(".sl-view-pano"),d=Ci(n,Ei()),h=new AbortController;p.style.backgroundImage=`url("${d.initialUrl}")`;let b=()=>{};d.upgradeUrl&&(b=Ai(()=>{this.buyerAssetUrls.resolve(d.upgradeUrl).then(A=>!A||h.signal.aborted?null:Ti(A,h.signal).then(()=>A)).then(A=>{!A||!l.isConnected||h.signal.aborted||(p.style.backgroundImage=`url("${A}")`)}).catch(()=>{})}));let m=70,f=35,S=1,E=p.clientHeight||1,w=p.clientWidth||1,y=-(E*(180/m)*2/2-w/2),C=0,u=()=>{let A=p.clientHeight||1,z=A*(180/m)*S,J=Math.max(0,z-A),W=Math.min(J/2,f/180*z);C=Math.min(W,Math.max(-W,C)),p.style.backgroundSize=`auto ${z}px`,p.style.backgroundPosition=`${y}px ${C-J/2}px`};u();let g=!1,M=0,R=0,v=A=>{g=!0,M=A.clientX,R=A.clientY,p.classList.add("drag"),p.setPointerCapture?.(A.pointerId)},T=A=>{g&&(y+=A.clientX-M,C+=A.clientY-R,M=A.clientX,R=A.clientY,u())},L=A=>{g=!1,p.classList.remove("drag"),p.releasePointerCapture?.(A.pointerId)},O=A=>{A.preventDefault(),S=Math.min(2.4,Math.max(1,S+(A.deltaY<0?.12:-.12))),u()};p.addEventListener("pointerdown",v),p.addEventListener("pointermove",T),p.addEventListener("pointerup",L),p.addEventListener("pointercancel",L),p.addEventListener("wheel",O,{passive:!1});let $=l.querySelector(".sl-view-x");$.addEventListener("click",()=>this.closeSeatView());let P=A=>{A.key==="Escape"&&(A.stopPropagation(),this.closeSeatView())};l.addEventListener("keydown",P),$.focus(),this.viewCleanup=()=>{b(),h.abort(),p.removeEventListener("pointerdown",v),p.removeEventListener("pointermove",T),p.removeEventListener("pointerup",L),p.removeEventListener("pointercancel",L),p.removeEventListener("wheel",O),l.removeEventListener("keydown",P)}}closeSeatView(e=!0){e&&(this.seatViewGen+=1),this.viewCleanup?.(),this.viewCleanup=null,this.viewEl?.remove(),this.viewEl=null}money(e){let t=this.opts.pricing?.formatter;if(t)return t(e,this.currency);try{return new Intl.NumberFormat(this.opts.locale,{style:"currency",currency:this.currency}).format(e)}catch{return`${e} ${this.currency}`}}scheduleOfferBoundary(e){if(this.offerBoundaryTimer&&clearTimeout(this.offerBoundaryTimer),this.offerBoundaryTimer=null,!this.api.availability||this.destroyed)return;let t=Date.now(),i=tt(e,t);if(i==null)return;let s=6*36e5,r=Math.min(Math.max(i-t+1e3,1e3),s);this.offerBoundaryTimer=setTimeout(()=>{this.offerBoundaryTimer=null,!document.hidden&&this.refreshOfferAvailability(!1)},r)}scheduleOfferRefresh(e){!this.api.availability||this.destroyed||(this.offerRefreshTimer&&clearTimeout(this.offerRefreshTimer),this.offerRefreshTimer=setTimeout(()=>{this.offerRefreshTimer=null,this.refreshOfferAvailability(e)},e?180:0))}async refreshOfferAvailability(e){if(!(!this.api.availability||this.destroyed))try{let t=await this.api.availability(this.opts.event,e);if(this.destroyed)return;let i=Pe(t);if(!i)return;this.offerAvailability=i,this.scheduleOfferBoundary(i);let s=He(i),r={...this.hostPricing?.prices??{},...s},n=Object.keys(r).length>0||this.hostPricing?.formatter?{prices:r,...this.hostPricing?.formatter?{formatter:this.hostPricing.formatter}:{}}:void 0;this.setPricing(n),this.syncOffer(),this.opts.onOfferAvailabilityChange?.(i)}catch{!this.destroyed&&!this.offerBoundaryTimer&&!document.hidden&&(this.offerBoundaryTimer=setTimeout(()=>{this.offerBoundaryTimer=null,!document.hidden&&this.refreshOfferAvailability(!1)},3e4))}}offerPrice(e){return e?this.offerAvailability?.prices.find(t=>t.categoryKey===e)??null:null}syncOffer(){let e=this.els.offer;if(!e)return;let t=this.offerAvailability,i=t?.release??null,s=i?null:t?.upcoming??null;if(!t||t.state==="closed"||t.state==="sold-out"||!i&&!s){e.classList.remove("has"),e.replaceChildren();return}let r=i??s,n=document.createElement("div");n.className="sl-offer-main";let o=document.createElement("div");o.className="sl-offer-copy";let c=document.createElement("span");c.className="sl-offer-kicker",c.textContent=i?this.tf("picker.currentTicketOffer","Current ticket offer"):this.tf("picker.upcomingTicketOffer","Upcoming ticket offer");let l=document.createElement("strong");l.className="sl-offer-name",l.textContent=r.name||(i?this.tf("picker.currentOffer","Current offer"):this.tf("picker.scheduledOffer","Scheduled offer"));let p=document.createElement("span");p.className="sl-offer-line";let d=[];i&&t.fromPrice!=null&&d.push(this.money(t.fromPrice/100)),i&&r.remaining!=null&&d.push(x("picker.offerRemainingAvailable",{count:r.remaining})),i&&r.endsAt!=null&&d.push(x("picker.offerUntil",{time:Se(r.endsAt,this.eventTimezone,this.opts.locale)})),s?.startsAt!=null&&d.push(x("picker.offerStarts",{time:Se(s.startsAt,this.eventTimezone,this.opts.locale)})),p.textContent=d.join(" \xB7 "),o.append(c,l,p);let h=document.createElement("details");h.className="sl-offer-info";let b=document.createElement("summary");b.setAttribute("aria-label",x("picker.howOfferWorks",{name:l.textContent??""})),b.textContent="i";let m=document.createElement("div");m.className="sl-offer-detail",m.textContent=i?this.tf("picker.offerDetailActive","This price applies automatically to eligible seats. Tickets in active carts temporarily reduce the available quantity; released or expired holds return it. When the offer ends, the next matching offer or normal ticket price takes over."):this.tf("picker.offerDetailUpcoming","Tickets are available at their normal price now. This scheduled offer will apply automatically to eligible seats when it starts."),h.append(b,m),n.append(o,h),e.replaceChildren(n),e.classList.add("has")}paidPrice(e,t,i){let s=e?this.opts.pricing?.prices?.[e]:void 0;return s===void 0?i:typeof s=="number"?s:t&&s.tiers?.[t]!==void 0?s.tiers[t]:s.base??i}syncPrices(){let e=this.controller.doc;if(!e||!this.els.prices)return;let t=this.controller.categoryAvailability(),i=e.categories.filter(c=>!c.notForSale);this.narrateAvailability(i,t),this.syncSoldout(i,t);let s=5,r=i.length-s,n=r>1&&!this.pricesExpanded,o=n?i.slice(0,s):i;this.els.prices.classList.toggle("sl-expanded",r>1&&this.pricesExpanded),this.els.prices.innerHTML=o.map(c=>{let l=this.catPrice(c),p=this.catPriceRange(c),d=this.offerPrice(c.key),h=d?.previousPrice!=null&&d.previousPrice>d.price?d.previousPrice:null,b=this.focusedCatKey===c.key;return`<div class="sl-price-row${this.priceBandKeys!=null&&!this.priceBandKeys.has(c.key)?" sl-dim":""}${b?" sl-active":""}" data-cat="${B(c.key)}" role="button" tabindex="0" aria-pressed="${b}" title="${B(b?this.tf("picker.showAllSeats","Show all seats"):x("picker.showLabelSeatsOnMap",{label:c.label}))}"><span class="sl-dot" style="background:${B(c.color)}"></span><span class="sl-price-label">${B(c.label)}`+(d?.offerName?`<small class="sl-price-offer">${B(d.offerName)}</small>`:"")+`</span><span class="sl-price-left">${Y("picker.leftCount",t[c.key]??0)}</span>`+(h!=null?`<span class="sl-price-was">${B(this.money(h))}</span>`:"")+(p!=null?`<span class="sl-price-amt">${p.min===p.max?this.money(p.min):`${this.money(p.min)}\u2013${this.money(p.max)}`}</span>`:l!=null?`<span class="sl-price-amt">${this.money(l)}</span>`:"")+"</div>"}).join("")+(r>1?`<button type="button" class="sl-price-more" aria-expanded="${!n}">`+(n?x("picker.showAllTicketTypes",{count:i.length}):this.tf("picker.showFewer","Show fewer"))+"</button>":"")+`<div class="sl-status-key" aria-label="${this.tf("picker.seatStatusLegend","Seat status legend")}"><span class="sl-status-item"><i class="sl-status-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><rect x="5" y="10" width="14" height="10" rx="2"/><path d="M8 10V7a4 4 0 0 1 8 0v3"/></svg></i>${this.tf("picker.temporarilyHeld","Temporarily held")}</span><span class="sl-status-item"><i class="sl-status-icon sold" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M7 17L17 7"/></svg></i>${this.tf("picker.sold","Sold")}</span></div>`,this.els.prices.querySelectorAll(".sl-price-row").forEach(c=>{c.addEventListener("mouseenter",()=>this.controller.getRenderer()?.setCategoryHighlight?.(c.dataset.cat??null)),c.addEventListener("mouseleave",()=>this.controller.getRenderer()?.setCategoryHighlight?.(null));let l=()=>this.focusCategory(c.dataset.cat??"");c.addEventListener("click",l),c.addEventListener("keydown",p=>{(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),l())})}),this.els.prices.querySelector(".sl-price-more")?.addEventListener("click",()=>{this.pricesExpanded=!this.pricesExpanded,this.syncPrices()})}focusCategory(e){if(!e)return;let t=this.focusedCatKey===e?null:e;this.focusedCatKey=t,this.priceBandKeys=t?new Set([t]):null;let i=this.els.pricesSec?.querySelector(".sl-price-select");i&&(i.value="all"),this.controller.setCategoryFilter(t?[t]:null),this.controller.focusCategoryFilter(t?[t]:null),this.pushAvailabilityTo3d(),this.syncFloors(),this.syncRung(),this.minimap?.refreshMinimap(),this.syncPrices(),this.lastSection&&this.showSectionCard(this.lastSection)}narrateAvailability(e,t){let i=this.els.liveText,s=this.lastCatAvail;this.lastCatAvail={...t};let r=this.controller.getActiveFloorId();if(r!==this.lastAvailFloorId&&(this.lastAvailFloorId=r,this.availQuietUntil=performance.now()+2e3),!(!i||!s||performance.now()<this.availQuietUntil))for(let n of e){let o=s[n.key],c=t[n.key]??0;if(o===void 0||c>=o)continue;let l=o-c;i.textContent=Y("picker.seatsJustTakenInCategory",l,{label:n.label,left:c}),this.els.live?.classList.remove("on"),this.els.live?.offsetWidth,this.els.live?.classList.add("on"),this.liveTimer&&clearTimeout(this.liveTimer),this.liveTimer=setTimeout(()=>this.els.live?.classList.remove("on"),8e3);return}}evictTakenSelections(){let e=new Set([...this.controller.currentHold()?.labels??[],...this.holdingLabels]),t=this.controller.getSelection().filter(i=>!e.has(i.label)&&(this.controller.getStatus(i.id)??"free")!=="free");t.length&&(this.controller.deselect(t.map(i=>i.id)),this.toast(x("picker.seatJustTakenByAnother",{label:t[0].label}),"error"))}syncTray(){if(!this.els.tray)return;this.updateSelectionCapacity();let e=this.committedSelection();this.root?.dataset.layout==="narrow"&&this.secCardEl&&(this.hold||e.length||this.pendingGACount())&&(this.secCardEl.remove(),this.secCardEl=null,this.lastSection=null);let t=this.controller.getGAAreas(),i=this.hold?.items??[],s=[],r=new Set;if(this.salesClosed&&!e.length&&!i.length){let u=this.eventWhenText?`<span class="when">${String(this.eventWhenText).replace(/[&<>"]/g,g=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[g])}</span>`:"";s.push(`<div class="sl-closed-note" role="status"><b>${this.tf("picker.salesClosedPill","Sales are closed")}</b><span>${this.tf("picker.salesClosedCopy","Ticket sales for this event have ended.")}${u}</span></div>`)}else!e.length&&!i.length&&!t.length?s.push(`<div class="sl-tray-hint">${this.tf("picker.trayHintTapOrBest","Tap a seat on the map, or let us pick the best available for you.")}</div>`):!e.length&&!i.length&&s.push(`<div class="sl-tray-hint">${this.tf("picker.trayHintTapOrStanding","Tap a seat on the map \u2014 or grab standing tickets below.")}</div>`);let n=!e.length&&!i.length&&!this.pendingGACount();if(n&&(this.baReopen=!1),!this.salesClosed&&!this.hold&&(n||this.baReopen||this.bestAvailableBusy||this.bestAvailableConfirm)){let u=(this.controller.doc?.categories??[]).filter(M=>!M.notForSale),g=this.controller.getBestAvailableZones();this.baZone&&!g.some(M=>M.id===this.baZone)&&(this.baZone=""),s.push(this.bestAvailableConfirm?`<div class="sl-ba" role="alert"><div class="sl-ba-title"><span class="spark" aria-hidden="true">\u2726</span>${this.tf("picker.replaceCurrentChoices","Replace your current choices?")}</div><div class="sl-ba-replace"><b>${x("picker.willFindSeatsTogether",{count:this.baQty})}</b><span>${this.tf("picker.manualTicketsRemovedNote","Your manually selected tickets will be removed only after a new group is secured.")}</span></div><div class="sl-ba-actions"><button type="button" data-ba-cancel>${this.tf("picker.keepMine","Keep mine")}</button><button type="button" class="replace" data-ba-replace>${this.tf("picker.findNewSeats","Find new seats")}</button></div></div>`:`<div class="sl-ba"><div class="sl-ba-title"><span class="spark" aria-hidden="true">\u2726</span>${this.tf("picker.findBestSeatsTogether","Find the best seats together")}</div><div class="sl-ba-copy"><span class="wide">${this.tf("picker.willChooseClosestGroup","We\u2019ll choose the closest available group for you.")}</span><span class="narrow">${this.tf("picker.closestGroupChosenInstantly","Closest available group, chosen instantly.")}</span></div>`+(this.controller.hasPremiumSeats()?`<button type="button" class="sl-ba-premium${this.baPremium?" on":""}" data-ba-premium aria-pressed="${this.baPremium?"true":"false"}"><span class="star" aria-hidden="true">\u2605</span>${this.tf("picker.bestSeatsPremium","Best seats")}</button>`:"")+(u.length>1?`<select aria-label="${this.tf("picker.preferredTicketType","Preferred ticket type")}" data-ba-cat><option value="">${this.tf("picker.anyTicketType","Any ticket type")}</option>`+u.map(M=>`<option value="${M.key}"${this.baCat===M.key?" selected":""}>${M.label}</option>`).join("")+"</select>":'<span aria-hidden="true"></span>')+(g.length?`<select aria-label="${this.tf("picker.preferredVenueZone","Preferred venue zone")}" data-ba-zone><option value="">${this.tf("picker.anyVenueZone","Any venue zone")}</option>`+g.map(M=>`<option value="${B(M.id)}"${this.baZone===M.id?" selected":""}>${B(M.label)}</option>`).join("")+"</select>":"")+`<div class="sl-ba-qty"><button type="button" data-ba="-1" aria-label="${this.tf("picker.fewerSeats","Fewer seats")}">\u2212</button><span>${this.baQty}</span><button type="button" data-ba="1" aria-label="${this.tf("picker.moreSeats","More seats")}">+</button></div><button type="button" class="sl-ba-go${this.bestAvailableBusy?" sl-busy":""}"${this.bestAvailableBusy?" disabled":""}>`+(this.bestAvailableBusy?`<span class="sl-ba-spin" aria-hidden="true"></span>${this.tf("picker.findingBestSeats","Finding the best seats\u2026")}`:Y("picker.findBestSeatsCount",this.baQty))+"</button>"+(this.baReopen?`<button type="button" class="sl-ba-back" data-ba-close>${this.tf("picker.keepMyPicks","Keep my picks")}</button>`:"")+"</div>")}let o=(u,g,M,R=1,v,T)=>bt({d:u?this.controller.seatDetails(u):null,area:M==="ga"?t.find(L=>L.id===v):void 0,label:g,objectType:M,quantity:R,identity:T}),c=vt;for(let u of i){let g=`held:${u.label}`;r.add(g);let M=this.controller.doc?.categories.find(O=>O.key===u.categoryKey),R=u.tierId?M?.tiers?.find(O=>O.id===u.tierId)?.name:void 0,v=u.objectType!=="ga"?this.controller.seatByLabel(u.label):null,T=u.objectType==="table"?this.controller.tableSelection(u.label):null,L=this.seatViewEnabled()&&!!v&&u.objectType!=="table";s.push(`<div class="sl-chip sl-held${this.lastTrayKeys.has(g)?"":" sl-enter"}" data-key="${g}" data-held="${encodeURIComponent(u.label)}"${v?` data-locate="${v.id}"`:""}><div class="sl-chip-main">`+o(v?.id??null,u.label,u.objectType,u.quantity??1,u.objectId,T??void 0)+`<div class="sl-chip-sub"><span class="sl-ticket-state held" aria-label="${this.tf("picker.heldForYou","Held for you")}" title="${this.tf("picker.heldForYou","Held for you")}"><svg viewBox="0 0 24 24"><rect x="5" y="10" width="14" height="10" rx="2"/><path d="M8 10V7a4 4 0 0 1 8 0v3"/></svg></span><span class="cat">${M?.label??u.categoryKey}${R?` \xB7 ${R}`:""}</span>`+(T?.bookingMode==="variable"?`<button type="button" class="sl-table-edit" data-table-edit="${encodeURIComponent(u.label)}">${x("picker.guestsCountEdit",{count:u.quantity??1})}</button>`:"")+ze(v?.wheelchairSpaceType)+Be(v?.commercial)+`<span class="amt">${this.money(this.paidPrice(u.categoryKey,u.tierId,u.unitPrice)*(u.quantity??1))}</span></div></div>`+c(x("picker.removeHeldTicketLabel",{label:u.label}),L?u.label:null)+"</div>")}let l=new Set(i.map(u=>u.label)),p=this.seatViewEnabled();for(let u of e.filter(g=>!l.has(g.label))){let g=`seat:${u.id}`;r.add(g);let M=this.controller.doc?.categories.find(L=>L.key===u.categoryKey),R=u.tiers&&u.tiers.length?`<select class="tier" data-tier="${u.id}" aria-label="${x("picker.ticketTierFor",{label:u.label})}">`+u.tiers.map(L=>`<option value="${L.id}"${L.id===u.tierId?" selected":""}>${L.name} \xB7 ${this.money(this.paidPrice(u.categoryKey,L.id,L.price))}</option>`).join("")+"</select>":"",v=u.tiers?.find(L=>L.id===u.tierId)??u.tiers?.[0],T=v?.buyerMessage?.trim()||(v?.restriction==="companion"?this.tf("picker.companionRequiresWheelchair","Requires the adjacent wheelchair place"):"");s.push(`<div class="sl-chip${this.lastTrayKeys.has(g)?"":" sl-enter"}" data-key="${g}" data-seat="${u.id}" data-locate="${u.id}"><div class="sl-chip-main">`+o(u.id,u.label,u.objectType,u.quantity??1,u.objectId,u)+`<div class="sl-chip-sub"><span class="sl-ticket-state" aria-label="${this.tf("picker.selected","Selected")}" title="${this.tf("picker.selected","Selected")}"><svg viewBox="0 0 24 24"><path d="M5 12l4 4L19 6"/></svg></span><span class="cat">${M?.label??u.categoryKey}</span>`+(u.objectType==="table"&&u.bookingMode==="variable"?`<button type="button" class="sl-table-edit" data-table-edit="${encodeURIComponent(u.label)}">${x("picker.guestsCountEdit",{count:u.quantity??1})}</button>`:"")+`${ze(u.wheelchairSpaceType)}${Be(u.commercial)}${R}<span class="amt">${this.money(this.paidPrice(u.categoryKey,u.tierId??null,u.price)*(u.quantity??1))}</span></div>`+(T?`<small class="sl-tier-note">${B(T)}</small>`:"")+"</div>"+c(x("picker.removeSeatLabel",{label:u.label}),p&&u.objectType!=="table"?u.label:null)+"</div>")}for(let u of t){let g=this.gaQty.get(u.id)??0;s.push(`<div class="sl-ga" data-ga="${u.id}"><div class="sl-ga-info"><div class="sl-ga-name">${u.displayLabel??u.label}</div><div class="sl-ga-sub">${u.displayType??this.tf("picker.generalAdmission","General admission")} \xB7 ${this.money(this.paidPrice(u.categoryKey,null,u.price))} \xB7 ${Y("picker.leftCount",u.available)}</div></div><div class="sl-ga-qty"><button type="button" data-d="-1" aria-label="${this.tf("picker.fewer","Fewer")}">\u2212</button><span>${g}</span><button type="button" data-d="1" aria-label="${this.tf("picker.more","More")}">+</button></div></div>`)}!this.salesClosed&&!this.hold&&!n&&!this.baReopen&&!this.bestAvailableBusy&&!this.bestAvailableConfirm&&s.push(`<button type="button" class="sl-ba-reopen" data-ba-reopen><span aria-hidden="true">\u2726</span>${this.tf("picker.findTogetherInstead","Find seats together instead")}</button>`),this.els.tray.innerHTML=s.join(""),this.lastTrayKeys=r,this.els.tray.querySelectorAll("[data-ba]").forEach(u=>{u.addEventListener("click",()=>{this.baQty=Math.max(1,Math.min(this.maxTickets,this.baQty+Number(u.dataset.ba))),this.syncTray()})}),this.els.tray.querySelector("[data-ba-cat]")?.addEventListener("change",u=>{this.baCat=u.target.value}),this.els.tray.querySelector("[data-ba-zone]")?.addEventListener("change",u=>{this.baZone=u.target.value}),this.els.tray.querySelector("[data-ba-premium]")?.addEventListener("click",()=>{this.baPremium=!this.baPremium,this.syncTray()}),this.els.tray.querySelector(".sl-ba-go")?.addEventListener("click",()=>{if(this.pendingSelectionCount()>0){this.bestAvailableConfirm=!0,this.syncTray(),this.els.tray.querySelector("[data-ba-replace]")?.focus();return}this.bestAvailable(this.baQty,this.baCat||void 0,{preferPremium:this.baPremium,zoneId:this.baZone||void 0})}),this.els.tray.querySelector("[data-ba-cancel]")?.addEventListener("click",()=>{this.bestAvailableConfirm=!1,this.syncTray(),this.els.tray.querySelector(".sl-ba-go")?.focus()}),this.els.tray.querySelector("[data-ba-reopen]")?.addEventListener("click",()=>{this.baReopen=!0,this.syncTray(),this.els.tray.querySelector(".sl-ba-go")?.focus()}),this.els.tray.querySelector("[data-ba-close]")?.addEventListener("click",()=>{this.baReopen=!1,this.syncTray(),this.els.tray.querySelector("[data-ba-reopen]")?.focus()}),this.els.tray.querySelector("[data-ba-replace]")?.addEventListener("click",()=>{this.bestAvailableConfirm=!1,this.bestAvailable(this.baQty,this.baCat||void 0,{preferPremium:this.baPremium,zoneId:this.baZone||void 0})}),this.els.tray.querySelectorAll(".sl-chip .rm").forEach(u=>{u.addEventListener("click",()=>{let g=u.closest(".sl-chip");if(g.dataset.held){this.removeHeldLabel(decodeURIComponent(g.dataset.held),g);return}let M=g.dataset.seat,R=this.controller.getSelection().find(T=>T.id===M)?.label??this.tf("picker.seat","Seat"),v=()=>{this.controller.deselect([M]),this.toast(x("picker.labelRemoved",{label:R}),"neutral",{label:this.tf("picker.undo","Undo"),onClick:()=>{let T=this.controller.select([M]);this.toast(T.length?x("picker.labelRestored",{label:R}):x("picker.labelNoLongerAvailable",{label:R}),T.length?"success":"warning")}})};if(this.reducedMotion()){v();return}g.classList.add("sl-leave"),this.scheduleMotion(v,150)})}),this.els.tray.querySelectorAll("[data-table-edit]").forEach(u=>{u.addEventListener("click",g=>{g.stopPropagation();let M=decodeURIComponent(u.dataset.tableEdit??""),R=this.controller.tableSelection(M);if(!R)return;let v=i.find(T=>T.label===M&&T.objectType==="table");this.showTableDialog({...R,quantity:v?.quantity??R.quantity},!!v,u)})}),this.els.tray.querySelectorAll(".sl-chip .tier").forEach(u=>{u.addEventListener("change",()=>this.controller.setSeatTier(u.dataset.tier,u.value||null))}),this.els.tray.querySelectorAll(".sl-chip .view[data-view-label]").forEach(u=>{u.addEventListener("click",()=>{let g=this.controller.seatByLabel(u.dataset.viewLabel);g&&this.openSeatView(g)})}),this.els.tray.querySelectorAll(".sl-chip[data-locate]").forEach(u=>{let g=()=>this.controller.flashSeat(u.dataset.locate,this.cssVar("--sl-accent")||"#f4b740");u.addEventListener("mouseenter",g),u.addEventListener("focusin",g)}),this.els.tray.querySelectorAll(".sl-ga button").forEach(u=>{u.addEventListener("click",()=>{let M=u.closest(".sl-ga").dataset.ga,R=t.find(L=>L.id===M),v=Number(u.dataset.d);if(v>0&&!this.canAddTicket())return;let T=Math.max(0,Math.min(R?.available??0,(this.gaQty.get(M)??0)+v));this.gaQty.set(M,T),this.syncTray()})}),this.salesClosed&&this.els.tray.querySelectorAll(".sl-ba-go,[data-ba],[data-ba-cat],[data-ba-zone],[data-ba-replace],.sl-ga button").forEach(u=>{u.disabled=!0});let d=this.pendingGATotal(t),h=this.pendingGACount(),b=i.reduce((u,g)=>u+this.paidPrice(g.categoryKey,g.tierId,g.unitPrice)*(g.quantity??1),0),m=i.reduce((u,g)=>u+(g.quantity??1),0),f=e.filter(u=>!l.has(u.label)),S=f.reduce((u,g)=>u+this.paidPrice(g.categoryKey,g.tierId??null,g.price)*(g.quantity??1),0)+d+b,E=f.reduce((u,g)=>u+(g.quantity??1),0)+h+m,w=this.pendingSelectionCount(),y=this.lastTrayCount,C=this.lastTrayTotal;if(this.els.count.textContent=E?Y("picker.ticketsCount",E):this.tf("picker.noSeatsSelected","No seats selected"),this.els.total.textContent=E?this.money(S):"",this.root?.setAttribute("data-has-selection",String(E>0)),this.root?.setAttribute("data-ba-active",String(this.bestAvailableConfirm||this.bestAvailableBusy||this.baReopen)),this.els.foot?.classList.toggle("empty",E===0),this.els.seatSummary&&(this.els.seatSummary.textContent=E?Y("picker.seatsSelectedCount",E):""),this.syncCta(E,w),this.hold){let u=m||this.hold.seats?.length||0;this.els.holdTitle&&(this.els.holdTitle.textContent=x("picker.securedCount",{count:u})),this.els.holdCopy&&(this.holdCopyPending=w>0,this.els.holdCopy.textContent=w?x("picker.moreSelectedCount",{count:w}):Ne(this.holdExpiresAt));let g=this.els.holdChange;g&&(g.disabled=this.releasingHold,g.textContent=this.releasingHold?this.tf("picker.releasingEllipsis","Releasing\u2026"):this.tf("picker.change","Change"))}E!==y&&this.animateOnce(this.els.count,"sl-value-pop",380),S!==C&&this.animateOnce(this.els.total,"sl-value-pop",380),y===0&&E>0&&(this.animateOnce(this.els.cta,"sl-ready",520),this.sideCollapsed&&this.root?.dataset.layout!=="narrow"&&this.setPanelCollapsed(!1)),this.renderPeek(E,S,w),this.lastTrayCount=E,this.lastTrayTotal=S,this.opts.onSelectionChange?.(e)}renderPeek(e,t,i){if(!this.els.peek)return;let s=(this.controller.doc?.categories??[]).map(r=>this.catPrice(r)).filter(r=>r!=null);this.els.peek.innerHTML=gt({count:e,total:t,pendingCount:i,ctaPhase:this.ctaPhase,hasHold:!!this.hold,salesClosed:this.salesClosed,fromPrice:s.length?Math.min(...s):null,money:r=>this.money(r)})}async removeHeldLabel(e,t){if(!e||this.releasingLabels.has(e))return!1;this.releasingLabels.add(e),t?.setAttribute("aria-busy","true");let i=t?.querySelector(".rm");i&&(i.disabled=!0);try{let s=this.handedOff;if(!await this.controller.releaseLabels([e]))return this.toast(x("picker.couldNotRemoveLabel",{label:e}),"error"),!1;let n=this.controller.currentHold();return this.hold=n?{holdId:n.holdId,expiresAt:n.expiresAt,seats:n.seats,items:n.items}:null,this.handedOff=!!this.hold&&s,this.bookedShown=!1,this.ctaPhase="idle",this.hold?this.startHoldTimer(this.hold.expiresAt):(this.stopHoldTimer(),this.forgetHold()),this.syncTray(),this.emitHoldChange(),this.toast(x("picker.labelRemovedFromHold",{label:e}),"success"),!0}finally{this.releasingLabels.delete(e),t?.removeAttribute("aria-busy"),i?.isConnected&&(i.disabled=!1)}}async handleChangeSeats(){if(!this.hold||this.releasingHold)return;this.releasingHold=!0;let e=this.els.holdChange;e&&(e.disabled=!0,e.textContent=this.tf("picker.releasingEllipsis","Releasing\u2026"));try{await this.release(),this.hold||this.toast(this.tf("picker.heldTicketsReleased","Held tickets released. Choose your new seats."),"success")}finally{this.releasingHold=!1,e?.isConnected&&(e.disabled=!1,e.textContent=this.tf("picker.change","Change"))}}async handleCta(){if(this.salesClosed)return;if(this.totalTicketCount()>this.maxTickets){this.toast(x("picker.removeTicketsUntilOrFewer",{count:this.maxTickets}),"warning");return}let e=this.committedSelection();if(this.hold&&!e.some(t=>!(this.hold.items??[]).some(i=>i.label===t.label))){let t=this.hold.seats??e;this.handedOff=!0,this.setCtaPhase("checkout"),this.checkoutHandoff(this.hold,t);return}this.holdingLabels=new Set(e.map(t=>t.label)),this.setCtaPhase("holding");try{let t=null,i=[...this.gaQty.entries()].filter(([,r])=>r>0),s=this.committedSelection();if(s.length){let r=await this.controller.hold(void 0,this.opts.holdTtlMs);t=r?{holdId:r.holdId,expiresAt:r.expiresAt,seats:r.seats,items:r.items}:null}for(let[r,n]of i){let o=await this.controller.holdGA(r,n,{ttlMs:this.opts.holdTtlMs});t=o?{holdId:o.holdId,expiresAt:o.expiresAt,seats:o.seats,items:o.items}:t}if(!t){this.toast(this.tf("picker.seatsJustTaken","One or more seats were just taken. Please pick again."),"error"),this.setCtaPhase("idle"),this.syncTray();return}this.hold=t,this.handedOff=!0,this.startHoldTimer(t.expiresAt),this.flashHeldSeats(t),this.setCtaPhase("checkout"),this.emitHoldChange(),this.checkoutHandoff(t,t.seats??s)}catch(t){this.opts.onError?.(t);let i=t,s=(i.conflicts??[]).map(n=>n.label).filter(Boolean).slice(0,3);i.reason==="event_closed"&&this.setSalesClosed(!0);let r=i.reason==="event_closed"?this.tf("picker.seatSalesClosedForEvent","Seat sales have closed for this event."):i.reason==="companion_pair_required"?this.tf("picker.companionPairRequired","Select the adjacent wheelchair place with each companion ticket."):i.reason==="ticket_option_not_applicable"?this.tf("picker.ticketOptionNotApplicable","That ticket choice is not available for the selected seat."):s.length?s.length===1?x("picker.labelsNoLongerAvailable.one",{labels:s.join(", ")}):x("picker.labelsNoLongerAvailable.other",{labels:s.join(", ")}):this.tf("picker.seatsJustTaken","One or more seats were just taken. Please pick again.");this.toast(r,"error"),this.setCtaPhase("idle")}finally{this.holdingLabels.clear(),this.ctaPhase==="holding"&&(this.ctaPhase="idle"),this.syncTray()}}startHoldTimer(e){this.stopHoldTimer(),this.holdExpiresAt=e,this.hold&&this.rememberHold(this.hold);let t=this.els.hold;t.innerHTML=`<span class="sl-hold-dot" aria-hidden="true"></span><span>${this.tf("picker.held","Held")}</span><span class="sl-hold-time" data-ref="holdTime"></span>`;let i=t.querySelector('[data-ref="holdTime"]');this.els.holdNote?.classList.add("on");let s=()=>{let r=Math.max(0,this.holdExpiresAt-Date.now());i&&(i.textContent=je(r)),!this.holdCopyPending&&this.els.holdCopy&&(this.els.holdCopy.textContent=Ne(this.holdExpiresAt)),t.classList.add("on"),t.classList.toggle("is-expiring",r>0&&r<=wt),this.setExtendPrompt(r>0&&r<=wt,r),r<=0&&this.stopHoldTimer()};s(),this.holdTimer=setInterval(s,500)}stopHoldTimer(){this.holdTimer&&clearInterval(this.holdTimer),this.holdTimer=null,this.els.hold?.classList.remove("on","is-expiring"),this.els.holdNote?.classList.remove("on"),this.setExtendPrompt(!1,0)}setExtendPrompt(e,t){if(this.extendEl)if(e&&this.controller.currentHold()&&!this.bookedShown){let i=Math.ceil(t/1e3),s=Math.floor(i/60),r=String(i%60).padStart(2,"0");this.els.extendTxt.innerHTML=x("picker.seatsHeldForNeedMoreTime",{time:`${s}:${r}`}),this.extendEl.classList.add("on")}else this.extendEl.classList.remove("on")}async handleExtend(){let e=this.els.extendBtn;e.disabled=!0;let t=e.textContent;e.textContent=this.tf("picker.addingEllipsis","Adding\u2026");try{let i=await this.controller.extendHold(this.opts.holdTtlMs);i?(this.hold={holdId:i.holdId,expiresAt:i.expiresAt,seats:i.seats,items:i.items},this.holdExpiresAt=i.expiresAt,this.extendEl?.classList.remove("on"),this.rememberHold(this.hold),this.emitHoldChange(),this.toast(this.tf("picker.moreTimeAdded","More time added \u2014 your seats are still held."),"success")):this.toast(this.tf("picker.couldNotAddMoreTime","Couldn't add more time \u2014 please head to checkout now."),"warning")}catch(i){this.opts.onError?.(i),this.toast(this.tf("picker.couldNotAddMoreTime","Couldn't add more time \u2014 please head to checkout now."),"warning")}finally{e.disabled=!1,e.textContent=t}}detectBooked(){this.bookedShown||!this.handedOff||!this.hold||this.controller.currentHold()===null&&this.showBooked()}showBooked(){if(this.bookedShown||!this.hold)return;this.bookedShown=!0;let e=this.buildHandoff(this.hold);this.stopHoldTimer(),this.forgetHold();let t=e.lineItems.reduce((i,s)=>i+s.quantity,0);this.els.bookedSub&&(this.els.bookedSub.innerHTML=`<span class="sl-booked-seats">${Y("picker.ticketsCount",t)}</span> ${this.tf("picker.confirmedAndOnWay","confirmed. A confirmation is on its way.")}`),this.bookedEl?.classList.add("on"),this.opts.onBooked?.(e)}checkoutHandoff(e,t){if(this.checkoutMode==="hosted"){this.startHostedCheckout(e,t);return}this.opts.onCheckout?.(e,t,this.buildHandoff(e))}async startHostedCheckout(e,t){let i=this.buildHandoff(e),s=null;try{s=await(this.paymentOptions??=this.pubApi.paymentOptions(this.opts.event))}catch(n){this.opts.onError?.(n)}if(this.destroyed)return;let r=s?.providers?.[0];if(!r){let n=lt(s?.reason),o=!!this.opts.onCheckoutUnavailable||!!this.opts.onCheckout;this.opts.onCheckoutUnavailable?.({reason:n,handoff:i}),this.opts.onCheckout?.(e,t,i),o||this.openCheckoutPanel({kind:"unavailable",reason:n,seatCount:i.lineItems.reduce((c,l)=>c+l.quantity,0)});return}await this.openCheckoutPanel({kind:"pay",provider:r,order:{holdId:i.holdId,expiresAt:i.expiresAt,currency:i.currency,total:i.total,labels:i.lineItems.map(n=>n.displayLabel??n.label)}})}async openCheckoutPanel(e){let t;try{({mountCheckout:t}=await at())}catch(i){this.opts.onError?.(i),this.toast(this.tf("picker.checkoutCouldNotBeOpened","Checkout could not be opened. Your seats are still held \u2014 please try again."),"error"),this.setCtaPhase("idle");return}this.destroyed||!this.root||(this.closeCheckoutPanel(),this.checkoutPanel=t({root:this.root,state:e,startSession:i=>this.pubApi.startCheckout(this.opts.event,{...i,...this.opts.returnUrl?{returnUrl:this.opts.returnUrl}:{}}),orderStatus:i=>this.pubApi.orderStatus(i),onCancel:()=>{this.checkoutPanel=null,this.hold||this.setCtaPhase("idle")},onConfirmed:i=>{this.opts.onOrderConfirmed?.(i),this.controller.refresh()},onError:i=>this.opts.onError?.(i)}))}closeCheckoutPanel(){this.checkoutPanel?.destroy(),this.checkoutPanel=null}buildHandoff(e){let i=(e.items??[]).map(n=>{let o=this.controller.lineItemDisplay(n);return{label:n.label,...o.displayLabel?{displayLabel:o.displayLabel}:{},...o.displayType?{displayType:o.displayType}:{},objectId:n.objectId,objectType:n.objectType,categoryKey:n.categoryKey,tierId:n.tierId,unitPrice:this.paidPrice(n.categoryKey,n.tierId,n.unitPrice),currency:n.currency??this.currency,quantity:n.quantity??1}}),s=i[0]?.currency??this.currency,r=i.reduce((n,o)=>n+o.unitPrice*o.quantity,0);return{holdId:e.holdId,expiresAt:e.expiresAt,currency:s,lineItems:i,total:r}}emitHoldChange(){let e=this.hold;this.scheduleOfferRefresh(!0),this.opts.onHoldChange?.(e,e?.seats??[],e?this.buildHandoff(e):null)}toast(e,t="neutral",i){let s=this.els.toast;if(!s)return;s.replaceChildren();let r=document.createElement("span");if(r.textContent=e,s.appendChild(r),s.classList.toggle("has-action",!!i),i){let n=document.createElement("button");n.type="button",n.className="sl-toast-action",n.textContent=i.label,n.addEventListener("click",i.onClick,{once:!0}),s.appendChild(n)}s.dataset.tone=t,s.classList.add("on"),this.toastTimer&&clearTimeout(this.toastTimer),this.toastTimer=setTimeout(()=>{s.classList.remove("on"),s.classList.remove("has-action"),s.dataset.tone="neutral"},4200)}placeTooltip(){if(!this.tipEl)return;let e=this.els.map.clientWidth,t=this.tipEl.offsetWidth,i=this.tipEl.offsetHeight,s=this.tipPos.x+14,r=this.tipPos.y-i-12;s+t>e-8&&(s=this.tipPos.x-t-14),r<8&&(r=this.tipPos.y+18),this.tipEl.style.left=`${Math.max(8,s)}px`,this.tipEl.style.top=`${Math.max(8,r)}px`}rowTypeWord(e){let t=e?.displayType?.trim()||e?.rowType?.trim();return t||(e?.objectType==="table"?this.tf("picker.table","Table"):e?.objectType==="booth"?this.tf("picker.booth","Booth"):this.tf("picker.row","Row"))}updateTooltip(e){if(!this.tipEl)return;if(!e){this.tipEl.style.display="none";return}let t=m=>String(m??"\u2014").replace(/[&<>"]/g,f=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[f]),i=this.money(this.paidPrice(e.categoryKey,e.tierId??null,e.price)),s=e.objectType==="table"&&!!e.bookingMode,r=e.objectType==="booth",n=e.sectionLabel||e.rowLabel||e.seatNumber,o=s?`<div class="sl-tip-grid"><div class="sl-tip-field"><span class="sl-tip-key">${t(this.rowTypeWord(e))}</span><span class="sl-tip-val">${t(e.rowLabel??e.displayLabel??e.label)}</span></div><div class="sl-tip-field"><span class="sl-tip-key">${this.tf("picker.guests","Guests")}</span><span class="sl-tip-val">${e.bookingMode==="variable"?`${e.minOccupancy}\u2013${e.maxOccupancy}`:e.capacity}</span></div></div>`:r?'<div class="sl-tip-grid">'+(e.sectionLabel?`<div class="sl-tip-field"><span class="sl-tip-key">${this.tf("picker.section","Section")}</span><span class="sl-tip-val">${t(e.sectionLabel)}</span></div>`:"")+`<div class="sl-tip-field"><span class="sl-tip-key">${t(this.rowTypeWord(e))}</span><span class="sl-tip-val">${t(e.rowLabel??e.displayLabel??e.label)}</span></div></div>`:n?'<div class="sl-tip-grid">'+(e.sectionLabel?`<div class="sl-tip-field"><span class="sl-tip-key">${this.tf("picker.section","Section")}</span><span class="sl-tip-val">${t(e.sectionLabel)}</span></div>`:"")+(e.rowLabel?`<div class="sl-tip-field"><span class="sl-tip-key">${t(this.rowTypeWord(e))}</span><span class="sl-tip-val">${t(Z(e))}</span></div>`:"")+(e.seatNumber?`<div class="sl-tip-field"><span class="sl-tip-key">${this.tf("picker.seat","Seat")}</span><span class="sl-tip-val">${t(e.seatNumber)}</span></div>`:"")+"</div>":`<div class="sl-tip-grid one"><div class="sl-tip-field"><span class="sl-tip-key">${this.tf("picker.seat","Seat")}</span><span class="sl-tip-val">${t(e.displayLabel??e.label)}</span></div></div>`,c=e.status==="not_for_sale",l=e.status==="free"?"":`<div class="sl-tip-status">${c?this.tf("picker.notAvailable","Not available"):e.status==="held"?x("map.statusHeld"):x("map.statusTaken")}</div>`,p=ae(e.commercial),d=p?`<div class="sl-tip-cx"><span class="g" aria-hidden="true">\u25D0</span>${t(p)}</div>`:"",h=be(e.wheelchairSpaceType),b=h?`<div class="sl-tip-cx"><span class="g" aria-hidden="true">\u267F</span>${t(h)}</div>`:"";this.tipEl.style.setProperty("--sl-cat",e.categoryColor),this.tipEl.innerHTML=o+`<div class="sl-tip-cat"><span class="sl-tip-dot" style="background:${e.categoryColor}"></span><span class="sl-tip-name">${t(e.categoryLabel)}</span>`+(c?"":`<span class="sl-tip-amt">${i}</span>`)+"</div>"+b+d+l,this.tipEl.style.display="block",this.placeTooltip()}getSelection(){return this.committedSelection()}setMapTheme(e){this.destroyed||(this.opts.theme={...this.opts.theme??{},map:e??void 0},this.controller.setMapTheme(e))}setEventDetailsHidden(e){this.eventDetailsHidden=e,this.syncFullscreenButtons()}setPricing(e){let t=JSON.stringify(this.opts.pricing??null),i=JSON.stringify(e??null);t!==i&&(this.opts.pricing=e,!(this.destroyed||!this.els.prices)&&(this.els.pricesSec?.querySelector(".sl-price-select")?.remove(),this.buildPriceFilter(),this.syncPrices(),this.syncTray(),this.lastSection&&this.showSectionCard(this.lastSection)))}isColorblindSafe(){return this.cbSafe}setColorblindSafe(e){e!==this.cbSafe&&(this.cbSafe=e,this.cbEl?.setAttribute("aria-pressed",String(e)),this.controller.setColorblindSafe(e),Ri(e))}setViewMode(e){this.controller.setViewMode(this.normalizeInitialView(e)),this.syncProjection(),this.dismissConfirm()}getViewMode(){return this.controller.getViewMode()}normalizeInitialView(e){return e==="perspective"?(this.perspectiveWarned||(this.perspectiveWarned=!0,console.warn("[seatlayer] initialView:'perspective' (2.5D) is deprecated for the buyer picker and was coerced to 'flat'. Use the Map | 3D control for the immersive view.")),"flat"):e??"flat"}getBuyerView(){return this.buyerView}setBuyerView(e,t){if(e==="map"){this.exit3d();return}let i=t?.flyToSeatId;if(this.buyerView==="venue3d"){i?(this.opts.onBuyerViewChange?.({view:"venue3d",seatId:i}),this.view3dHandle?.flyToSeat(i)):t?.resetView&&this.view3dHandle?.focusOverview();return}this.enter3d(i)}seatState3dFor(e){switch(this.controller.getStatus(e.id)){case"held":return"held";case"booked":return"sold";case"not_for_sale":return"dimmed";default:break}return this.priceBandKeys!=null&&!this.priceBandKeys.has(e.categoryKey)||this.limitedViewFilter&&(e.commercial?.restrictedView||e.commercial?.obstructedView)?"dimmed":"available"}pushAvailabilityTo3d(){if(!this.view3dHandle)return;let e=this.allSeats().map(t=>({seatId:t.id,state:this.seatState3dFor(t)}));this.view3dHandle.setAvailability(e)}syncSelectionTo3d(){this.view3dHandle&&this.view3dHandle.setSelection(this.controller.getSelection().map(e=>e.id))}async seatViewFor3d(e){let t=this.allSeats().find(i=>i.id===e);if(!t)return null;if(t.viewUrl)try{let i=t.viewMeta?.previewUrl,s=!!i&&i!==t.viewUrl,r=s?await this.buyerAssetUrls.resolve(i):null,n=s?t.viewUrl:await this.buyerAssetUrls.resolve(t.viewUrl);return!n||s&&!r?null:{url:n,...r?{previewUrl:r}:{},...s?{resolveUrl:o=>this.buyerAssetUrls.resolve(o)}:{},...t.viewMeta?.sourceWidth!==void 0?{sourceWidth:t.viewMeta.sourceWidth}:{},...t.viewMeta?.sourceHeight!==void 0?{sourceHeight:t.viewMeta.sourceHeight}:{},...t.viewMeta?.previewWidth!==void 0?{previewWidth:t.viewMeta.previewWidth}:{},...t.viewMeta?.previewHeight!==void 0?{previewHeight:t.viewMeta.previewHeight}:{},...t.viewMeta?.initialBearingDeg!==void 0?{initialBearingDeg:t.viewMeta.initialBearingDeg}:{},...t.viewMeta?.initialPitchDeg!==void 0?{initialPitchDeg:t.viewMeta.initialPitchDeg}:{},...t.viewMeta?.coverage?{coverage:t.viewMeta.coverage}:{},...t.viewMeta?.capturedAt?{capturedAt:t.viewMeta.capturedAt}:{},...t.viewMeta?.sourceLabel?{sourceLabel:t.viewMeta.sourceLabel}:{}}}catch(i){return this.opts.onError?.(i),null}return{url:"",generated:!0,mediaKind:"model",coverage:"exact-seat",sourceLabel:this.tf("picker.chartDerivedModel","Chart-derived model")}}emitAnalytics(e,t){try{this.opts.onAnalytics?.(e,{...t,surface:"buyer"})}catch{}}emit3dAnalytics(e,t){this.emitAnalytics(e,t)}onView3dSeatPick(e){if(this.salesClosed){this.toast(this.tf("picker.salesClosedToast","Sales are closed for this event."),"warning"),this.syncSelectionTo3d();return}let t=this.allSeats().find(o=>o.id===e);if(!t)return;let i=this.controller.tableSelection(e);if(this.committedSelection().some(o=>i?o.label===i.label:o.id===e)){this.controller.deselect([e]),this.dismissConfirm(),this.syncSelectionTo3d();return}let r=this.controller.getStatus(t.id);if(r==="held"||r==="booked"||r==="not_for_sale"){this.showUnavailable3dSeat(t,this.seatState3dFor(t),r),this.syncSelectionTo3d();return}if(this.dismissUnavailable3dSeat(),!this.controller.select([e]).length){this.syncSelectionTo3d(),this.dismissConfirm();return}if(this.opts.onBuyerViewChange?.({view:"venue3d",seatId:e}),this.flashPickedSeat(e),i){this.showTableDialog(i,!1),this.syncSelectionTo3d();return}this.opts.confirmSelection!==!1?this.showConfirm(t):this.syncTray(),this.syncSelectionTo3d()}showUnavailable3dSeat(e,t,i){let s=this.view3dEl;if(!s)return;this.dismissUnavailable3dSeat();let r=this.controller.seatDetails(e.id),n=r?.displayLabel??e.displayLabel??e.label,o=r?.sectionLabel,c=Z(r),l=[o,c?x("picker.rowLabel",{label:c}):null,n].filter(Boolean).join(" \xB7 "),p=i==="held"?{title:this.tf("picker.temporarilyHeld","Temporarily held"),message:this.tf("picker.heldSeatExplanation","Another buyer is holding this seat. It may become available again.")}:i==="booked"?{title:this.tf("picker.sold","Sold"),message:this.tf("picker.soldSeatExplanation","This seat has already been booked.")}:{title:this.tf("picker.notForSale","Not for sale"),message:this.tf("picker.notForSaleExplanation","This seat is not included in the current sale.")},d=document.createElement("div");d.className="sl-view3d-unavailable",d.dataset.state=t,d.setAttribute("role","status"),d.setAttribute("aria-live","polite");let h=document.createElement("span");h.className="sl-view3d-unavailable-eyebrow",h.textContent=l||n;let b=document.createElement("strong");b.textContent=p.title;let m=document.createElement("div");m.className="sl-view3d-unavailable-copy",m.append(h,b);let f=document.createElement("button");f.type="button",f.setAttribute("aria-label",this.tf("picker.closeSeatStatus","Close seat status")),f.textContent="\xD7";let S=document.createElement("p");S.textContent=p.message,d.append(m,f,S),f.addEventListener("click",()=>d.remove()),s.appendChild(d),this.announceSeat(e)}dismissUnavailable3dSeat(){this.view3dEl?.querySelector(".sl-view3d-unavailable")?.remove()}saveView3dComparisonSeat(e){if(this.buyerView!=="venue3d")return;let t=this.view3dCompareSeatIds;t.includes(e.id)||(this.view3dCompareSeatIds=t.length===0?[e.id]:[t[0],e.id]),this.confirmSeat?.id===e.id&&(this.controller.deselect([e.id]),this.dismissConfirm(),this.syncSelectionTo3d(),this.syncTray()),this.view3dCompareChip.sync(),this.emit3dAnalytics("3d_comparison_saved",{seatId:e.id,count:this.view3dCompareSeatIds.length}),this.view3dCompareSeatIds.length>1?this.openView3dComparison():this.toast(this.tf("picker.chooseAnotherToCompare","Seat saved. Choose another seat to compare."),"success")}clearView3dComparison(){this.closeView3dComparison(!1),this.view3dCompareSeatIds=[],this.view3dCompareChip.remove(),this.emit3dAnalytics("3d_comparison_cleared")}view3dComparisonSnapshot(e){let t=this.allSeats().find(b=>b.id===e);if(!t)return null;let i=this.controller.seatDetails(t.id),s=this.controller.doc?.categories.find(b=>b.key===t.categoryKey),r=i?.price??(s?.tiers?.length?s.tiers[0].price:s?.price),n=r!=null?this.paidPrice(t.categoryKey,i?.tierId??s?.tiers?.[0]?.id??null,r):void 0,o=this.controller.getStatus(t.id),c=o==="held"?this.tf("picker.temporarilyHeld","Temporarily held"):o==="booked"?this.tf("picker.sold","Sold"):o==="not_for_sale"?this.tf("picker.notForSale","Not for sale"):this.tf("picker.available","Available"),l=t.viewUrl?yt({url:t.viewUrl,...t.viewMeta?.coverage?{coverage:t.viewMeta.coverage}:{},...t.viewMeta?.capturedAt?{capturedAt:t.viewMeta.capturedAt}:{},...t.viewMeta?.sourceLabel?{sourceLabel:t.viewMeta.sourceLabel}:{}}):this.tf("picker.chartDerivedSeatEye","Live 3D \xB7 chart-derived seat-eye \xB7 not surveyed"),p=ae(t.commercial)||this.tf("picker.noAuthoredRestriction","No organizer-authored restriction"),d=i?.wheelchairSpaceType?`${be(i.wheelchairSpaceType)} \xB7 metadata, not access certification`:this.tf("picker.noAccessibilityMetadata","No accessibility metadata supplied"),h=xt(t.confidenceEvidence);return{seat:t,label:i?.displayLabel??t.displayLabel??t.label,section:i?.sectionLabel??t.sectionId??"\u2014",row:Z(i)??i?.rowLabel??"\u2014",category:i?.categoryLabel??s?.label??t.categoryKey,price:n==null?this.tf("picker.priceNotSupplied","Not supplied"):this.money(n),availability:c,selectable:o==null||o==="free",viewSource:l,limited:p,accessibility:d,confidence:h}}openSeatConfidencePassport(e,t=null){let i=this.view3dEl;if(!i)return;this.closeSeatConfidencePassport(!1);let s=xt(e.confidenceEvidence),r=e.confidenceEvidence,n=this.controller.seatDetails(e.id),o=y=>V(y),c=s.limitations.length?`<h4>Known limits</h4><ul>${s.limitations.map(y=>`<li>${o(y)}</li>`).join("")}</ul>`:"",l=s.modeledTarget?`<div><dt>Modeled target</dt><dd>${o(s.modeledTarget)}</dd></div>`:"",p=r?`<div><dt>Evidence ID</dt><dd>${o(r.evidenceId)}</dd></div><div><dt>Model version</dt><dd>${o(r.modelVersion)}</dd></div><div><dt>Event configuration</dt><dd>${o(r.eventConfigurationId??"Not configuration-specific")}</dd></div><div><dt>Approval</dt><dd>${o(r.approvedByRole??"No external approval supplied")}</dd></div>`+(r.validUntil?`<div><dt>Valid until</dt><dd>${o(r.validUntil.slice(0,10))}</dd></div>`:""):"<div><dt>Evidence ID</dt><dd>None supplied</dd></div>",d=ae(e.commercial)||this.tf("picker.noAuthoredRestriction","No organizer-authored restriction"),h=`<div><dt>View restriction</dt><dd>${o(d)}</dd></div>`+(e.commercial?.note?`<div><dt>Organizer note</dt><dd>${o(e.commercial.note)}</dd></div>`:""),b=document.createElement("div");b.className="sl-view3d-passport-shell",b.innerHTML=`<div class="sl-view3d-passport-scrim" aria-hidden="true"></div><section class="sl-view3d-passport" role="dialog" aria-modal="true" aria-labelledby="sl-view3d-passport-title"><header><div><span>Seat confidence passport</span><strong id="sl-view3d-passport-title">${o(n?.displayLabel??e.displayLabel??e.label)}</strong></div><button type="button" data-close aria-label="Close seat confidence passport">\xD7</button></header><div class="sl-view3d-passport-summary"><strong>${o(s.headline)}</strong><span>${o(s.coverage)} \xB7 ${o(s.freshness)}</span></div><dl><div><dt>Model status</dt><dd>${o(s.model)}</dd></div><div><dt>Reality evidence</dt><dd>${o(s.reality)}</dd></div><div><dt>Source</dt><dd>${o(s.provenance)}</dd></div>`+h+l+p+`</dl>${c}<p class="sl-view3d-passport-note">This passport describes supplied evidence and known limits. It does not guarantee that every temporary obstruction or real-world condition is knowable before the event build.</p></section>`;let m=[...new Set([...i.children,...[...this.els.map.children].filter(y=>y!==i)])].filter(y=>y instanceof HTMLElement),f=m.map(y=>({element:y,inert:y.inert,ariaHidden:y.getAttribute("aria-hidden")}));for(let y of m)y.inert=!0,y.setAttribute("aria-hidden","true");i.appendChild(b),i.classList.add("has-passport"),this.view3dPassportEl=b;let S=b.querySelector(".sl-view3d-passport"),E=()=>[...S.querySelectorAll('button:not(:disabled),[href],[tabindex]:not([tabindex="-1"])')],w=y=>{if(y.key==="Escape"){y.preventDefault(),y.stopPropagation(),y.stopImmediatePropagation(),this.closeSeatConfidencePassport();return}if(y.key!=="Tab")return;let C=E();if(!C.length)return;let u=C[0],g=C[C.length-1];y.shiftKey&&document.activeElement===u?(y.preventDefault(),g.focus()):!y.shiftKey&&document.activeElement===g&&(y.preventDefault(),u.focus())};window.addEventListener("keydown",w,!0),this.view3dPassportCleanup=()=>{window.removeEventListener("keydown",w,!0);for(let g of f)g.element.inert=g.inert,g.ariaHidden===null?g.element.removeAttribute("aria-hidden"):g.element.setAttribute("aria-hidden",g.ariaHidden);let y=t?.isConnected?t:this.confirmEl?.querySelector(".sl-confirm-confidence")??this.view3dCompareEl?.querySelector("[data-passport-seat]")??null,C=y?.closest(".sl-confirm,.sl-view3d-compare");C?.isConnected&&(C.inert=!1,C.removeAttribute("aria-hidden")),b.remove(),i.classList.remove("has-passport"),this.view3dPassportEl===b&&(this.view3dPassportEl=null);let u=y??this.view3dCompareEl?.querySelector("[data-passport-seat]")??this.confirmEl?.querySelector(".sl-confirm-confidence")??this.view3dCompareChip.mainButton();(t?.isConnected?t:u)?.focus()},b.addEventListener("click",y=>{let C=y.target instanceof HTMLElement?y.target:null;(C?.closest("[data-close]")||C?.classList.contains("sl-view3d-passport-scrim"))&&this.closeSeatConfidencePassport()}),requestAnimationFrame(()=>E()[0]?.focus()),this.emit3dAnalytics("3d_confidence_passport_opened",{seatId:e.id,evidenceId:r?.evidenceId??null,eventConfigurationId:r?.eventConfigurationId??null,modelLevel:r?.modelLevel??"unverified",realityLevel:r?.realityLevel??"none"})}closeSeatConfidencePassport(e=!0){let t=this.view3dPassportCleanup;if(this.view3dPassportCleanup=null,!t){this.view3dPassportEl?.remove(),this.view3dPassportEl=null,this.view3dEl?.classList.remove("has-passport");return}e||(document.activeElement instanceof HTMLElement?document.activeElement:null)?.blur(),t(),e||this.root?.focus({preventScroll:!0})}openView3dComparison(){let e=this.view3dEl;if(!e||this.view3dCompareSeatIds.length<2)return;this.closeView3dComparison(!1);let t=this.view3dCompareSeatIds.map(h=>this.view3dComparisonSnapshot(h)).filter(h=>!!h);if(t.length<2){this.clearView3dComparison();return}let i=h=>V(h),s=document.createElement("div");s.className="sl-view3d-compare-shell";let r=t.map((h,b)=>`<article><span>Seat ${b===0?"A":"B"}</span><strong>${i(h.label)}</strong><small>Section ${i(h.section)} \xB7 Row ${i(h.row)}</small><dl><div><dt>Current price</dt><dd>${i(h.price)}</dd></div><div><dt>Ticket type</dt><dd>${i(h.category)}</dd></div><div><dt>Availability</dt><dd>${i(h.availability)}</dd></div><div><dt>View source</dt><dd>${i(h.viewSource)}</dd></div><div><dt>View restriction</dt><dd>${i(h.limited)}</dd></div><div><dt>Seat confidence</dt><dd>${i(h.confidence.headline)}</dd></div><div><dt>Reality check</dt><dd>${i(h.confidence.reality)}</dd></div><div><dt>Accessibility</dt><dd>${i(h.accessibility)}</dd></div></dl><div class="sl-view3d-compare-actions"><button type="button" data-passport-seat="${i(h.seat.id)}">Passport</button><button type="button" data-view-seat="${i(h.seat.id)}">View seat</button><button type="button" class="select" data-select-seat="${i(h.seat.id)}"${h.selectable?"":" disabled"}>Select seat</button></div></article>`).join("");s.innerHTML=`<div class="sl-view3d-compare-scrim" aria-hidden="true"></div><section class="sl-view3d-compare" role="dialog" aria-modal="true" aria-labelledby="sl-view3d-compare-title"><header><div><span>Seat inspection</span><strong id="sl-view3d-compare-title">Compare disclosed attributes</strong></div><button type="button" data-close aria-label="Close seat comparison">\xD7</button></header><p class="sl-view3d-compare-note">Current price and availability come from this picker. Modeled views are chart-derived unless organizer media is labeled; SeatLayer does not invent why a seat has its price.</p><div class="sl-view3d-compare-grid">${r}</div></section>`;let n=document.activeElement instanceof HTMLElement?document.activeElement:null,o=[...e.children].filter(h=>h instanceof HTMLElement),c=o.map(h=>({element:h,inert:h.inert,ariaHidden:h.getAttribute("aria-hidden")}));for(let h of o)h.inert=!0,h.setAttribute("aria-hidden","true");e.appendChild(s),e.classList.add("has-comparison"),this.view3dCompareEl=s;let l=s.querySelector(".sl-view3d-compare"),p=()=>[...l.querySelectorAll('button:not(:disabled),[href],[tabindex]:not([tabindex="-1"])')],d=h=>{if(h.key==="Escape"){h.preventDefault(),this.closeView3dComparison();return}if(h.key!=="Tab")return;let b=p();if(!b.length)return;let m=b[0],f=b[b.length-1];h.shiftKey&&document.activeElement===m?(h.preventDefault(),f.focus()):!h.shiftKey&&document.activeElement===f&&(h.preventDefault(),m.focus())};window.addEventListener("keydown",d),this.view3dCompareCleanup=()=>{window.removeEventListener("keydown",d);for(let h of c)h.element.inert=h.inert,h.ariaHidden===null?h.element.removeAttribute("aria-hidden"):h.element.setAttribute("aria-hidden",h.ariaHidden);s.remove(),e.classList.remove("has-comparison"),this.view3dCompareEl===s&&(this.view3dCompareEl=null),n?.isConnected?n.focus():this.view3dCompareChip.mainButton()?.focus()},s.querySelector("[data-close]")?.addEventListener("click",()=>this.closeView3dComparison()),s.querySelectorAll("[data-passport-seat]").forEach(h=>h.addEventListener("click",()=>{let b=h.dataset.passportSeat,m=b?this.allSeats().find(f=>f.id===b):void 0;m&&this.openSeatConfidencePassport(m,h)})),s.querySelectorAll("[data-view-seat]").forEach(h=>h.addEventListener("click",()=>{let b=h.dataset.viewSeat;this.closeView3dComparison(!1),b&&this.view3dHandle?.flyToSeat(b)})),s.querySelectorAll("[data-select-seat]").forEach(h=>h.addEventListener("click",()=>{let b=h.dataset.selectSeat;b&&this.selectComparedSeat(b)})),requestAnimationFrame(()=>p()[0]?.focus()),this.emit3dAnalytics("3d_comparison_opened",{seatIds:this.view3dCompareSeatIds.slice()})}closeView3dComparison(e=!0){let t=this.view3dCompareCleanup;if(this.view3dCompareCleanup=null,!t){this.view3dCompareEl?.remove(),this.view3dCompareEl=null,this.view3dEl?.classList.remove("has-comparison");return}e||(document.activeElement instanceof HTMLElement?document.activeElement:null)?.blur(),t(),e||this.root?.focus({preventScroll:!0})}selectComparedSeat(e){if(this.salesClosed){this.toast(this.tf("picker.salesClosedToast","Sales are closed for this event."),"warning");return}let t=this.allSeats().find(s=>s.id===e);if(!t)return;if(this.closeView3dComparison(!1),!this.controller.select([e]).length){this.syncSelectionTo3d(),this.toast(this.tf("picker.seatNoLongerAvailable","That seat is no longer available."),"warning");return}this.syncSelectionTo3d(),this.showConfirm(t),this.emit3dAnalytics("3d_comparison_selected",{seatId:e})}async enter3d(e){if(this.view3dEl||!this.canOffer3d()||!this.els.map)return;let t=this.controller.doc;if(!t)return;this.buyerView="venue3d",this.view3dTargetSeatId=null,this.opts.onBuyerViewChange?.({view:"venue3d",...e?{seatId:e}:{}}),this.root?.setAttribute("data-view3d","on"),this.dismissConfirm(),this.syncProjection();let i=document.createElement("div");i.className="sl-view3d",i.setAttribute("role","group"),i.setAttribute("aria-label",this.tf("picker.interactive3dVenueView","Interactive 3D venue view"));let s=document.createElement("button");s.type="button",s.className="sl-view3d-back",s.innerHTML=`<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M15 18l-6-6 6-6"/></svg><span>${this.tf("picker.backToMap","Back to map")}</span>`;let r=s.querySelector("span"),n=p=>{this.view3dTargetSeatId=p;let d=!!p;i.classList.toggle("is-seat-focused",d);let h=d?this.tf("picker.backToVenue","Back to venue"):this.tf("picker.backToMap","Back to map");r&&(r.textContent=h),s.setAttribute("aria-label",h)};s.addEventListener("click",()=>{if(this.view3dTargetSeatId&&this.view3dHandle){this.view3dHandle.focusOverview();return}this.exit3d()}),i.appendChild(s);let o=document.createElement("button");o.type="button",o.className="sl-view3d-fs",o.textContent="\u26F6",o.setAttribute("aria-label",this.tf("picker.fullScreen","Full screen")),o.setAttribute("aria-pressed",String(!!document.fullscreenElement||this.fsFallback||this.framedFs)),o.addEventListener("click",()=>this.toggleFullscreen()),i.appendChild(o);let c=document.createElement("div");c.className="sl-view3d-loading",c.setAttribute("role","status"),c.setAttribute("aria-live","polite"),c.textContent=this.tf("picker.loading3d","Building the 3D venue\u2026"),i.appendChild(c),this.els.map.appendChild(i),this.view3dEl=i,this.view3dCompareChip.sync(),requestAnimationFrame(()=>{i.style.opacity="1"});let l=++this.view3dGen;try{let p=Ve(t),d=await nt();if(l!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==i)return;let h=await d.prepareVenue3D({doc:t,seats:p});if(l!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==i)return;let b=d.mountVenue3D(i,{doc:t,seats:p,prepared:h},{portraitOverviewCrop:!0,arriveAtSeatEye:!0,seatViewActionLabel:m=>this.allSeats().find(f=>f.id===m)?.viewUrl?this.tf("picker.openAuthored360","Open venue 360\xB0"):this.tf("picker.lookAroundLive3d","Look around in live 3D"),onSeatPick:m=>this.onView3dSeatPick(m),onSeatInspect:m=>this.onView3dSeatPick(m),onSectionFocusChange:m=>{let f=i.querySelector('select[data-locator="section"]'),S=m??"";!f||f.value===S||(f.value=S,f.dispatchEvent(new Event("change")))},onViewTargetChange:m=>{i.querySelector(".sl-view3d-nav")?.classList.toggle("is-seat-focused",!!m),n(m),this.opts.onBuyerViewChange?.({view:"venue3d",...m?{seatId:m}:{}})},getSeatView:m=>new Promise((f,S)=>{let E=()=>{this.seatViewFor3d(m).then(y=>{y?f(y):S(new Error("seat_view_unavailable"))})},w=globalThis.requestIdleCallback;typeof w=="function"?w(E,{timeout:1500}):setTimeout(E,50)}),onAnalytics:(m,f)=>this.emit3dAnalytics(m,f)});this.view3dHandle=b,c.remove(),this.pushAvailabilityTo3d(),this.syncSelectionTo3d(),ft(i,b),e&&b.flyToSeat(e)}catch(p){if(l!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==i)return;this.opts.onError?.(p),this.toast(this.tf("picker.unavailable3d","3D could not start. The seat map is still available."),"warning"),this.exit3d()}}exit3d(){if(this.buyerView!=="venue3d"&&!this.view3dEl)return;this.view3dGen++,this.buyerView="map",this.view3dTargetSeatId=null,this.opts.onBuyerViewChange?.({view:"map"}),this.root?.removeAttribute("data-view3d"),this.closeSeatConfidencePassport(!1),this.closeView3dComparison(!1),this.view3dCompareChip.remove();try{this.view3dHandle?.dispose()}catch{}this.view3dHandle=null;let e=this.view3dEl;this.view3dEl=null,e&&(e.style.opacity="0",setTimeout(()=>e.remove(),320)),this.syncProjection();let t=this.view3dReturnSeat;this.view3dReturnSeat=null,t&&this.committedSelection().some(i=>i.id===t.id)&&this.opts.confirmSelection!==!1&&this.showConfirm(t)}getCurrentHold(){return this.hold}async resumeHold(e){return this.resumeHoldFromServer(e,!1)}async removeHeldTicket(e){return this.removeHeldLabel(e)}async bestAvailable(e,t,i={}){if(this.salesClosed||this.bestAvailableBusy)return null;e=Math.max(1,Math.min(this.maxTickets,Math.floor(e))),this.confirmSeat&&this.cancelConfirm(),this.bestAvailableConfirm=!1,this.bestAvailableBusy=!0;let s=this.els.tray?.querySelector(".sl-ba-go");s&&(s.disabled=!0,s.classList.add("sl-busy"),s.innerHTML=`<span class="sl-ba-spin" aria-hidden="true"></span>${this.tf("picker.findingEllipsis","Finding\u2026")}`);try{let r=await this.controller.bestAvailable(e,t,{...i,ttlMs:this.opts.holdTtlMs});return r?(this.hold={holdId:r.holdId,expiresAt:r.expiresAt,seats:r.seats,items:r.items},this.handedOff=!1,this.bookedShown=!1,this.gaQty.clear(),this.startHoldTimer(r.expiresAt),this.flashHeldSeats(this.hold),this.syncTray(),this.emitHoldChange(),i.preferPremium&&r.seats.length&&!r.seats.every(n=>n.commercial?.premium)&&this.toast(x("picker.premiumFallbackNote",{count:e}),"neutral"),this.hold):null}catch(r){this.opts.onError?.(r);let n=r?.reason,o=n==="not_enough_together"?x("picker.couldNotFindSeatsTogether",{count:e}):n==="companion_pair_required"?this.tf("picker.companionPairRequired","Select the adjacent wheelchair place with each companion ticket."):n==="ticket_option_not_applicable"?this.tf("picker.ticketOptionNotApplicable","That ticket choice is not available for the selected seat."):n==="sold_out"?this.tf("picker.ticketTypeSoldOut","That ticket type is sold out. Try another ticket type."):n==="event_closed"?this.tf("picker.seatSalesClosedForEvent","Seat sales have closed for this event."):this.tf("picker.seatsNoLongerAvailableTryAnother","Those seats are no longer available. Try another quantity or ticket type.");return this.toast(o,"error"),null}finally{this.bestAvailableBusy=!1,this.syncTray()}}async release(){let e=this.hold,t=this.controller.currentHold(),i=!0;if(t)i=await this.controller.release();else if(e){let s=[...new Set([...(e.items??[]).map(r=>r.label),...(e.seats??[]).map(r=>r.label)])];if(s.length)try{await this.api.release(this.opts.event,s,e.holdId)}catch(r){this.opts.onError?.(r),i=!1}}if(!i){this.toast(this.tf("picker.couldNotReleaseTickets","Couldn't release your tickets. Your hold is unchanged."),"error");return}this.hold=null,this.forgetHold(),this.handedOff=!1,this.bookedShown=!1,this.ctaPhase="idle",this.stopHoldTimer(),this.gaQty.clear(),this.syncTray(),this.emitHoldChange()}startRealtime(){if(!this.access?.configured||!this.pubApi||this.realtime)return;let e=this.opts.event;this.realtime=new U({url:this.pubApi.subscribeUrl(e),mintTicket:()=>this.pubApi.subscribeTicket(e),onAccessUnavailable:t=>{this.opts.onAccessUnavailable?.(t),this.showAccessPanel(t)},sink:le(this.controller,{flashOnLiveChange:!0,onStatusChange:()=>{this.syncPrices(),this.scheduleOfferRefresh(!0),this.detectBooked(),this.minimap?.refreshMinimap(),this.pushAvailabilityTo3d()},onSelectedObjectUnavailable:(t,i)=>{this.opts.onSelectedObjectUnavailable?.({labels:t,reason:i}),this.syncTray(),this.toast(i==="ineligible"?this.tf("picker.seatNoLongerYours","Some seats are no longer available to you. They have been removed from your order."):this.tf("picker.seatTaken","Someone else took a seat you had picked. It has been removed from your order."),"warning")}})}),this.realtime.start()}async refreshAccess(){return!this.access?.configured||!await this.access.refresh("manual")?!1:(this.dismissAccessPanel(),await this.controller.refresh(),this.realtime?this.realtime.restart():this.startRealtime(),!0)}showAccessPanel(e){if(this.destroyed||!this.root)return;let t=this.accessCopy(e.reason);this.dismissAccessPanel();let i=document.createElement("div");i.className="sl-access",i.setAttribute("role","status"),i.setAttribute("aria-live","polite");let s=document.createElement("div"),r=document.createElement("div");r.className="sl-access-title",r.textContent=t.title;let n=document.createElement("div");if(n.className="sl-access-body",n.textContent=t.body,s.appendChild(r),s.appendChild(n),t.action){let o=document.createElement("button");o.type="button",o.className="sl-access-act",o.textContent=t.action,o.addEventListener("click",()=>{this.refreshAccess()}),s.appendChild(o)}i.appendChild(s),(this.regions?.["bottom-center"]??this.root).appendChild(i),this.accessEl=i}dismissAccessPanel(){this.accessEl?.remove(),this.accessEl=null}accessCopy(e){switch(e){case"paused":return{title:this.tf("picker.accessPausedTitle","These seats are on hold right now"),body:this.tf("picker.accessPausedBody","The organizer has paused this selection. Try again in a few minutes."),action:this.tf("picker.accessRetry","Try again")};case"revoked":return{title:this.tf("picker.accessRevokedTitle","This access link is no longer active"),body:this.tf("picker.accessRevokedBody","Ask whoever sent you here for a new link to keep booking these seats.")};case"no_token":case"provider_failed":return{title:this.tf("picker.accessExpiredTitle","Your access session has ended"),body:this.tf("picker.accessExpiredBody","Sign in again, or reload the page, to keep browsing these seats. Anything you are already holding stays yours."),action:this.tf("picker.accessRetry","Try again")};default:return{title:this.tf("picker.accessInvalidTitle","We couldn\u2019t verify your access"),body:this.tf("picker.accessInvalidBody","You can still book anything shown as available. Contact whoever sent you here for access to the rest.")}}}destroy(){this.destroyed=!0,this.realtime?.stop(),this.realtime=null,this.dismissAccessPanel(),this.access?.clear(),this.hold&&!this.handedOff&&this.controller.release(),this.closeConfirm(),this.dismissTableDialog(!1),this.closeSeatView(),this.closeCheckoutPanel(),this.exit3d(),this.buyerAssetUrls.dispose(),this.stopHoldTimer(),this.toastTimer&&clearTimeout(this.toastTimer),this.liveTimer&&clearTimeout(this.liveTimer),this.offerRefreshTimer&&clearTimeout(this.offerRefreshTimer),this.offerBoundaryTimer&&clearTimeout(this.offerBoundaryTimer),this.offerRefreshTimer=null,this.offerBoundaryTimer=null,this.offerVisibilityHandler&&(document.removeEventListener("visibilitychange",this.offerVisibilityHandler),this.offerVisibilityHandler=null);for(let e of this.motionTimers)clearTimeout(e);this.motionTimers.clear(),this.ro?.disconnect(),this.ro=null,this.framedFs&&this.setFramedFs(!1),this.escHandler&&document.removeEventListener("keydown",this.escHandler),this.fsChangeHandler&&document.removeEventListener("fullscreenchange",this.fsChangeHandler),this.fsEscHandler&&window.removeEventListener("keydown",this.fsEscHandler),this.controller.destroy(),this.projectionEl=null,this.root?.remove(),this.root=null,this.modalScrim&&(this.modalScrim.remove(),this.modalScrim=null,this.prevFocus?.isConnected&&this.prevFocus.focus({preventScroll:!0}),this.prevFocus=null)}};function $i(a,e={}){let t=e.origin??"";if(!t)try{t=new URL(a.src,window.location.href).origin}catch{t=""}let i=!1,s=null,r=null,n=null,o="",c=null,l=()=>{if(i)return;i=!0,s=a.getAttribute("style"),Object.assign(a.style,{position:"fixed",inset:"0",width:"100vw",height:"100vh",margin:"0",border:"0",zIndex:"2147483000",background:"#101625"});let h=document.documentElement;r=h.style.overflow,h.style.overflow="hidden",document.body&&(n=document.body.style.overflow,document.body.style.overflow="hidden"),c=b=>{b.key==="Escape"&&p()},window.addEventListener("keydown",c)},p=()=>{i&&(i=!1,s===null?a.removeAttribute("style"):a.setAttribute("style",s),s=null,o&&(a.style.height=o),r!==null&&(document.documentElement.style.overflow=r,r=null),n!==null&&document.body&&(document.body.style.overflow=n,n=null),c&&(window.removeEventListener("keydown",c),c=null))},d=h=>{if(h.source!==a.contentWindow||t&&h.origin!==t||!h.data||typeof h.data!="object")return;let b=h.data;if(b.type==="seatlayer:height"){typeof b.px=="number"&&Number.isFinite(b.px)&&b.px>0&&(o=`${Math.round(b.px)}px`,i||(a.style.height=o));return}b.type==="seatlayer:fullscreen"&&(b.on===!0?l():b.on===!1&&p())};return window.addEventListener("message",d),()=>{window.removeEventListener("message",d),p()}}export{ee as ApiError,ge as BuyerAccessContext,ce as BuyerAccessUnavailableError,U as BuyerRealtimeClient,Me as EmbeddedDesigner,Ze as SEATING_CHART_CALLBACK_PROPS,Ye as SEATING_CHART_HANDLE_METHODS,Xe as SEATING_CHART_IDENTITY_PROPS,Qe as SEATING_CHART_VALUE_PROPS,Ue as SeatPicker,Ae as SeatingChart,$i as attachPickerFrame,Nt as bindSeatingChartHandle,Vt as buildSeatingChartOptions,me as createBuyerAccessContext,le as createControllerSink,Pe as parseTicketOfferAvailability,He as ticketOfferPrices};
1247
+ </div>`;let s={};return i.querySelectorAll("[data-ref]").forEach(r=>{s[r.dataset.ref]=r}),{root:i,mapHost:s.map,els:s}}import{browserPanoramaConstraints as vi,loadPanoramaImage as gi,planPanoramaDelivery as yi,schedulePanoramaUpgrade as xi}from"@seatlayer/core/view/panoramaDelivery";function at(a){let{root:e,source:t,caption:i,real:s,closeLabel:r,dragHint:n,viewFromSeatLabel:o,real360Label:l,previewLabel:d,resolveAsset:h,onClose:c}=a,p=document.createElement("div");p.className="sl-view",p.setAttribute("role","dialog"),p.setAttribute("aria-label",o),p.innerHTML=`<div class="sl-view-head"><span class="sl-view-title">${o}</span><span class="sl-view-cap">${i}</span><button type="button" class="sl-view-x" aria-label="${r}"><svg viewBox="0 0 24 24"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg></button></div><div class="sl-view-pano"><span class="sl-view-badge">${s?l:d}</span><span class="sl-view-hint">${n}</span></div>`,e.appendChild(p);let f=p.querySelector(".sl-view-pano"),m=yi(t,vi()),v=new AbortController;f.style.backgroundImage=`url("${m.initialUrl}")`;let S=()=>{};m.upgradeUrl&&(S=xi(()=>{h(m.upgradeUrl).then(H=>!H||v.signal.aborted?null:gi(H,v.signal).then(()=>H)).then(H=>{!H||!p.isConnected||v.signal.aborted||(f.style.backgroundImage=`url("${H}")`)}).catch(()=>{})}));let w=70,x=35,g=1,E=f.clientHeight||1,u=f.clientWidth||1,b=-(E*(180/w)*2/2-u/2),T=0,C=()=>{let H=f.clientHeight||1,Ee=H*(180/w)*g,Ke=Math.max(0,Ee-H),We=Math.min(Ke/2,x/180*Ee);T=Math.min(We,Math.max(-We,T)),f.style.backgroundSize=`auto ${Ee}px`,f.style.backgroundPosition=`${b}px ${T-Ke/2}px`};C();let P=!1,A=0,L=0,D=H=>{P=!0,A=H.clientX,L=H.clientY,f.classList.add("drag"),f.setPointerCapture?.(H.pointerId)},se=H=>{P&&(b+=H.clientX-A,T+=H.clientY-L,A=H.clientX,L=H.clientY,C())},ue=H=>{P=!1,f.classList.remove("drag"),f.releasePointerCapture?.(H.pointerId)},Ue=H=>{H.preventDefault(),g=Math.min(2.4,Math.max(1,g+(H.deltaY<0?.12:-.12))),C()};f.addEventListener("pointerdown",D),f.addEventListener("pointermove",se),f.addEventListener("pointerup",ue),f.addEventListener("pointercancel",ue),f.addEventListener("wheel",Ue,{passive:!1});let Te=p.querySelector(".sl-view-x");Te.addEventListener("click",c);let qe=H=>{H.key==="Escape"&&(H.stopPropagation(),c())};return p.addEventListener("keydown",qe),Te.focus(),{element:p,dispose(){S(),v.abort(),f.removeEventListener("pointerdown",D),f.removeEventListener("pointermove",se),f.removeEventListener("pointerup",ue),f.removeEventListener("pointercancel",ue),f.removeEventListener("wheel",Ue),p.removeEventListener("keydown",qe),Te.removeEventListener("click",c)}}}import{seatConfidenceDisclosure as Si}from"@seatlayer/core/core/seatConfidence";import{t as wi}from"@seatlayer/core";function k(a,e){let t=wi(a);return t===a?e:t}function lt(a){if(typeof a=="string"){let e=document.querySelector(a);if(!e)throw new Error(`seatmap: container "${a}" not found`);return e}if(!(a instanceof HTMLElement))throw new Error("seatmap: container must be a CSS selector or an HTMLElement");return a}function O(a){return String(a??"").replace(/[&<>"']/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[e])}var ki=(()=>{if(typeof document<"u"&&document.currentScript instanceof HTMLScriptElement&&document.currentScript.src)return document.currentScript.src;try{let a=import.meta.url;if(typeof a=="string"&&a)return a}catch{}})(),te=null;function ct(){if(te!==null)return te;try{if(typeof document>"u")return te=!1;te=!!document.createElement("canvas").getContext("webgl2")}catch{te=!1}return te}function $e(a){let e=ki??(typeof location<"u"?location.href:void 0);if(!e)throw new Error(`seatlayer: cannot resolve the ${a} chunk URL`);return new URL(`./${a}`,e).href}async function dt(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import($e("seatlayer-view3d.mjs")):import("@seatlayer/core/view3d")}async function pt(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import($e("seatlayer-panorama.mjs")):import("@seatlayer/core")}async function ht(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import($e("seatlayer-checkout.mjs")):import("./hostedCheckout-3Y24DB65.js")}function ut(a){return a==="unavailable_for_event"||a==="payments_off_for_event"?a:"not_configured"}function we(a,e,t){let i={month:"short",day:"numeric",hour:"numeric",minute:"2-digit"},s=new Date(a);if(e)try{return s.toLocaleString(t,{...i,timeZone:e})}catch{}return s.toLocaleString(t,i)}function _(a){return String(a??"").replace(/[&<>"]/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[e])}function ie(a){return a?.restrictedView?k("picker.restrictedView","Restricted view"):a?.obstructedView?k("picker.obstructedView","Obstructed view"):""}function mt(a){if(!a)return"";let e=[];a.premium&&e.push(`<div class="sl-cx-premium"><span class="sl-cx-star" aria-hidden="true">\u2605</span>${k("picker.premiumSeat","Premium seat")}</div>`);let t=ie(a);return t?e.push(`<div class="sl-cx-warn"><span class="sl-cx-glyph" aria-hidden="true">\u25D0</span><span class="sl-cx-txt"><b>${t}</b>${a.note?`<span class="sl-cx-note">${_(a.note)}</span>`:""}</span></div>`):a.note&&e.push(`<div class="sl-cx-warn"><span class="sl-cx-glyph" aria-hidden="true">\u2139</span><span class="sl-cx-txt"><span class="sl-cx-note">${_(a.note)}</span></span></div>`),e.length?`<div class="sl-cx">${e.join("")}</div>`:""}function Ie(a){let e=ie(a);if(!e)return"";let t=_(a?.note?a.note:e);return`<span class="sl-cx-mark" role="img" aria-label="${t}" title="${t}">\u25D0</span>`}function he(a){return a==="no-seat"?k("picker.emptyWheelchairSpace","Empty wheelchair space"):a==="seat-present"?k("picker.accessiblePhysicalSeat","Accessible physical seat"):""}function ft(a){let e=he(a);return e?`<div class="sl-cx"><div class="sl-cx-warn"><span class="sl-cx-glyph" aria-hidden="true">\u267F</span><span class="sl-cx-txt"><b>${e}</b></span></div></div>`:""}function Be(a){let e=he(a);return e?`<span class="sl-cx-mark" role="img" aria-label="${e}" title="${e}">\u267F</span>`:""}function ze(a,e){if(!a)return"";let t=e?k("picker.viewFromThisSeat","View from this seat"):k("picker.seeItIn3d","See it in 3D");return`<button type="button" class="sl-confirm-3d" aria-label="${t}"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 2l9 5v10l-9 5-9-5V7z"/><path d="M12 12l9-5M12 12v10M12 12L3 7"/></svg><span>${t}</span></button>`}function bt(a){if(!a)return"";let e=a.previous.label||a.previous.id,t=a.next.label||a.next.id;return`<span class="sl-seccard-nav" aria-label="${k("picker.browseSections","Browse sections")}"><button type="button" data-section-nav="${O(a.previous.id)}" aria-label="${k("picker.previousSection","Previous section")}: ${O(e)}" title="${O(e)}">\u2190</button><button type="button" data-section-nav="${O(a.next.id)}" aria-label="${k("picker.nextSection","Next section")}: ${O(t)}" title="${O(t)}">\u2192</button></span>`}function vt(a,e){if(!e)return"";let t=e,i=t.includes(a.id),s=i?t.length>1?k("picker.openComparison","Open comparison"):k("picker.savedForComparison","Saved for comparison"):t.length?k("picker.compareWithSaved","Compare with saved"):k("picker.saveToCompare","Save to compare");return`<button type="button" class="sl-confirm-compare"${i&&t.length===1?" disabled":""}><span aria-hidden="true">\u21C4</span><span>${_(s)}</span></button>`}function gt(a,e,t){if(!t)return"";let i=Si(a.confidenceEvidence),s=i.modeledTarget??i.reality;return`<button type="button" class="sl-confirm-confidence" aria-label="Open seat confidence passport for ${_(a.displayLabel??a.label)}"><span><em>${_(e)}</em><strong>${_(i.headline)}</strong><small>${_(s)}</small></span><b>Passport</b></button>`}function G(a){let e=a?.rowLabel,t=a?.sectionLabel;if(!e||!t)return e;for(let i of["-"," ","\xB7","/","_"]){let s=`${t}${i}`;if(e.startsWith(s)&&e.length>s.length)return e.slice(s.length)}return e}import{pointInPolygon as Ti}from"@seatlayer/core";import{createMinimapTransform as Ei,minimapPointToWorld as Ci,minimapViewportPlan as Ai}from"@seatlayer/core/picker/minimapGeometry";function yt(a,e){let t=new De(a);return t.build(e),t}var De=class{constructor(e){this.host=e;this.miniCanvas=null;this.miniBase=null;this.miniWrap=null;this.miniToggle=null;this.miniLabel=null;this.miniTf=null;this.miniDrag=null;this.miniSuppressClick=!1}build(e){if(!this.host.controller.getViewport())return;let i=document.createElement("button");i.type="button",i.className="sl-minimap-toggle",i.setAttribute("aria-label",k("picker.openVenueMap","Open venue overview map")),i.setAttribute("aria-expanded","false"),i.innerHTML='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M3 6l5-2 8 3 5-2v13l-5 2-8-3-5 2zM8 4v13M16 7v13"/></svg>',e.appendChild(i),this.miniToggle=i;let s=document.createElement("div");s.className="sl-minimap",s.setAttribute("role","group");let r=document.createElement("div");r.className="sl-minimap-bar";let n=document.createElement("span");n.className="sl-minimap-label";let o=document.createElement("span");o.className="sl-minimap-key",o.setAttribute("aria-label",k("picker.minimapStateKey","Focused, selected, available, and inactive sections")),o.innerHTML='<i class="focused" title="Focused"></i><i class="selected" title="Selected"></i><i title="Available"></i><i class="inactive" title="Inactive"></i>';let l=document.createElement("button");l.type="button",l.className="sl-minimap-close",l.setAttribute("aria-label",k("picker.closeVenueMap","Close venue overview map")),l.textContent="\xD7",r.append(n,o,l);let d=document.createElement("canvas");d.tabIndex=0,d.setAttribute("role","application"),d.setAttribute("aria-label",k("picker.venueMapInstructions","Venue overview map. Drag the viewport, click a section, or use arrow keys to pan.")),s.append(r,d),e.appendChild(s),this.miniWrap=s,this.miniLabel=n,this.miniCanvas=d;let h=document.createElement("canvas");this.miniBase=h,i.addEventListener("click",()=>this.setMinimapOpen(!0)),l.addEventListener("click",()=>this.setMinimapOpen(!1)),d.addEventListener("click",c=>{if(this.miniSuppressClick){this.miniSuppressClick=!1;return}this.minimapJump(c)}),d.addEventListener("pointerdown",c=>this.minimapPointerDown(c)),d.addEventListener("pointermove",c=>this.minimapPointerMove(c)),d.addEventListener("pointerup",c=>this.minimapPointerUp(c)),d.addEventListener("pointercancel",c=>this.minimapPointerUp(c)),d.addEventListener("keydown",c=>this.minimapKeydown(c)),this.layoutMinimap(),this.syncMinimapLabel(),this.drawMinimapStatic(),this.drawMinimapRect()}setMinimapOpen(e){this.host.root()?.setAttribute("data-minimap-open",String(e)),this.miniToggle?.setAttribute("aria-expanded",String(e)),e?this.miniCanvas?.focus():this.miniToggle?.focus()}layoutMinimap(){let e=this.miniCanvas,t=this.miniBase,i=this.host.controller.getViewport()?.bounds;if(!e||!t||!i||!(i.width>0&&i.height>0))return;let s=196,r=146,n=6,o=i.width/Math.max(1,i.height),l=s,d=Math.round(s/o);d>r&&(d=r,l=Math.round(r*o)),l=Math.max(64,l),d=Math.max(48,d);let h=Math.min(2,window.devicePixelRatio||1);e.width=Math.round(l*h),e.height=Math.round(d*h),e.style.width=`${l}px`,e.style.height=`${d}px`,t.width=e.width,t.height=e.height,this.miniTf=Ei(i,e.width,e.height,h,n)}syncMinimapLabel(){if(!this.miniLabel||!this.miniWrap)return;let e=this.host.controller.getFloors(),t=this.host.controller.isFloorOverview()?k("picker.allFloors","All floors"):e.find(h=>h.id===this.host.controller.getActiveFloorId())?.name??k("picker.venueOverview","Venue overview"),i=this.host.controller.getMinimapSnapshot().sections,r=i.find(h=>h.active)?.label??this.host.focusedSectionLabel(),n=r?`${t} \xB7 ${r}`:t;this.miniLabel.textContent=n;let o=i.filter(h=>h.state==="selected").length,l=i.filter(h=>h.state==="available").length,d=i.filter(h=>h.state==="inactive").length;this.miniWrap.setAttribute("aria-label",i.length?`${n}. ${o} selected, ${l} available, ${d} inactive sections.`:n),this.miniCanvas?.setAttribute("aria-label",i.length?`${n}. ${o} selected, ${l} available, ${d} inactive sections. ${k("picker.venueMapInstructions","The outlined region is the visible map area. Drag it, click a section, or use arrow keys to pan.")}`:`${n}. ${k("picker.venueMapInstructions","The outlined region is the visible map area. Drag it, click elsewhere, or use arrow keys to pan.")}`)}refreshMinimap(){this.miniBase&&(this.layoutMinimap(),this.syncMinimapLabel(),this.drawMinimapStatic(),this.drawMinimapRect())}drawMinimapStatic(){let e=this.miniBase,t=this.miniTf;if(!e||!t)return;let i=e.getContext("2d");if(!i)return;i.clearRect(0,0,e.width,e.height);let s=c=>c*t.scale+t.offX,r=c=>c*t.scale+t.offY,n=this.host.cssVar("--sl-line")||"rgba(139,147,167,.5)",o=this.host.cssVar("--sl-muted")||"#8b93a7",l=this.host.cssVar("--sl-accent")||"#6e7bff",d=this.host.cssVar("--sl-success")||"#22a06b",h=this.host.controller.getMinimapSnapshot();for(let c of h.sections)c.outline.length<3||(i.beginPath(),c.outline.forEach((p,f)=>f===0?i.moveTo(s(p.x),r(p.y)):i.lineTo(s(p.x),r(p.y))),i.closePath(),i.globalAlpha=c.state==="inactive"?.18:c.state==="selected"?.72:.34,i.fillStyle=c.state==="inactive"?o:c.state==="selected"?l:d,i.fill(),i.globalAlpha=.82,i.lineWidth=Math.max(1,t.dpr),i.strokeStyle=n,i.stroke(),c.active&&(i.globalAlpha=1,i.lineJoin="round",i.lineWidth=Math.max(4,t.dpr*3.5),i.strokeStyle=this.host.cssVar("--sl-surface")||"#fff",i.stroke(),i.lineWidth=Math.max(2,t.dpr*1.75),i.strokeStyle=l,i.stroke()));if(i.globalAlpha=1,!h.sections.length){let c=Math.max(1,t.dpr);for(let p of h.seats)i.globalAlpha=p.state==="inactive"?.22:.78,i.fillStyle=p.state==="inactive"?o:p.state==="selected"?l:d,i.beginPath(),i.arc(s(p.x),r(p.y),c,0,Math.PI*2),i.fill();i.globalAlpha=1}}drawMinimapRect(){let e=this.miniCanvas,t=this.miniBase,i=this.miniTf;if(!e||!t||!i)return;let s=e.getContext("2d");if(!s)return;s.clearRect(0,0,e.width,e.height),s.drawImage(t,0,0);let r=this.host.controller.getViewport();if(!r)return;let n=Ai(r.visible,i,e.width,e.height,Math.max(2,i.dpr*2)),o=this.host.cssVar("--sl-text")||"#12151c",l=this.host.cssVar("--sl-surface")||"#fff";s.save(),s.globalAlpha=.1,s.fillStyle=o,s.fillRect(n.raw.x,n.raw.y,n.raw.width,n.raw.height),s.globalAlpha=.9,s.lineJoin="round",s.lineWidth=Math.max(4,i.dpr*3.25),s.strokeStyle=l,s.strokeRect(n.raw.x,n.raw.y,n.raw.width,n.raw.height),s.globalAlpha=1,s.lineWidth=Math.max(2,i.dpr*1.75),s.strokeStyle=o,s.strokeRect(n.raw.x,n.raw.y,n.raw.width,n.raw.height),n.clipped&&Object.values(n.clippedEdges).some(Boolean)&&(s.setLineDash([Math.max(3,i.dpr*3),Math.max(2,i.dpr*2)]),s.strokeRect(n.clipped.x,n.clipped.y,n.clipped.width,n.clipped.height)),s.restore()}minimapWorldPoint(e){let t=this.miniCanvas,i=this.miniTf;if(!t||!i)return null;let s=t.getBoundingClientRect(),r=(e.clientX-s.left)*(t.width/Math.max(1,s.width)),n=(e.clientY-s.top)*(t.height/Math.max(1,s.height));return{...Ci({x:r,y:n},i),px:r,py:n}}minimapPointerDown(e){let t=this.minimapWorldPoint(e),i=this.host.controller.getViewport()?.visible;!t||!i||!(t.x>=i.x&&t.x<=i.x+i.width&&t.y>=i.y&&t.y<=i.y+i.height)||(this.miniDrag={pointerId:e.pointerId,offsetX:t.x-(i.x+i.width/2),offsetY:t.y-(i.y+i.height/2),startX:e.clientX,startY:e.clientY,moved:!1},this.miniCanvas?.setPointerCapture(e.pointerId),this.miniCanvas?.classList.add("sl-dragging"),e.preventDefault())}minimapPointerMove(e){let t=this.miniDrag;if(!t||t.pointerId!==e.pointerId)return;let i=this.minimapWorldPoint(e);i&&(!t.moved&&Math.hypot(e.clientX-t.startX,e.clientY-t.startY)>2&&(t.moved=!0,this.host.controller.clearSectionFocus()),this.host.controller.panToWorld({x:i.x-t.offsetX,y:i.y-t.offsetY}),e.preventDefault())}minimapPointerUp(e){let t=this.miniDrag;!t||t.pointerId!==e.pointerId||(this.miniSuppressClick=t.moved,this.miniDrag=null,this.miniCanvas?.classList.remove("sl-dragging"),this.miniCanvas?.hasPointerCapture(e.pointerId)&&this.miniCanvas.releasePointerCapture(e.pointerId))}minimapKeydown(e){let t=this.host.controller.getViewport()?.visible;if(!t)return;if(e.key==="Home"){this.host.controller.overview(),e.preventDefault();return}let i=e.key==="ArrowLeft"?-t.width*.2:e.key==="ArrowRight"?t.width*.2:0,s=e.key==="ArrowUp"?-t.height*.2:e.key==="ArrowDown"?t.height*.2:0;!i&&!s||(this.host.controller.clearSectionFocus(),this.host.controller.panToWorld({x:t.x+t.width/2+i,y:t.y+t.height/2+s}),e.preventDefault())}minimapJump(e){let t=this.minimapWorldPoint(e);if(t){for(let i of this.host.controller.getMinimapSnapshot().sections)if(!(i.state==="inactive"||i.outline.length<3)&&Ti(t,i.outline)){this.host.controller.focusSection(i.id);return}this.host.controller.clearSectionFocus(),this.host.controller.panToWorld(t)}}};import{t as Fe}from"@seatlayer/core";var Li=12;function xt(a,e){let t=e.floors(),i=new Set(t.map(v=>v.label.trim().toLocaleLowerCase())),s=e.zones().filter(v=>v.seatCount>0&&!i.has(v.label.trim().toLocaleLowerCase())),r=e.sections().filter(v=>v.seatCount>0&&!i.has(v.label.trim().toLocaleLowerCase())),n=s.length>1?[]:r,o=t.length>1,l=s.length>1,d=n.length>1;if(!o&&!l&&!d)return;let h=document.createElement("div");h.className="sl-view3d-nav";let c=document.createElement("button");c.type="button",c.className="sl-view3d-nav-toggle",c.setAttribute("aria-expanded","false");let p=v=>{h.classList.toggle("is-open",v),c.setAttribute("aria-expanded",String(v)),c.textContent=v?k("picker.closeVenueNav","Close"):o&&(l||d)?k("picker.levelsAndAreas","Levels & areas"):o?k("picker.levels","Levels"):k("picker.areas","Areas")};c.addEventListener("click",()=>p(!h.classList.contains("is-open"))),h.addEventListener("keydown",v=>{v.key!=="Escape"||!h.classList.contains("is-open")||(v.preventDefault(),v.stopPropagation(),p(!1),c.focus())}),p(!1),h.appendChild(c);let f=v=>{},m=v=>{};if(o){let v=document.createElement("div");v.setAttribute("role","group"),v.setAttribute("aria-label",k("picker.levels","Levels"));let S=[];m=g=>{S.forEach(E=>{E.setAttribute("aria-pressed",String((E.dataset.floor===""?null:Number(E.dataset.floor))===g))})};let w=g=>{e.focusFloor(g)&&(m(g),f(g))},x=(g,E)=>{let u=document.createElement("button");u.type="button",u.textContent=g,u.dataset.floor=E===null?"":String(E),u.setAttribute("aria-pressed",String(E===null)),u.addEventListener("click",()=>{w(E),p(!1)}),S.push(u),v.appendChild(u)};x(k("picker.allLevels","All levels"),null);for(let g of t)x(g.label||Fe("picker.levelNumber",{number:g.index+1}),g.index);h.appendChild(v)}if(l||d){let v=document.createElement("div");v.setAttribute("role","group"),v.setAttribute("aria-label",k("picker.areas","Areas"));let S=l?s.map(x=>({id:x.id,label:x.label||x.id,go:()=>{e.focusZone(x.id)}})):n.map(x=>({id:x.id,label:x.label||x.id,floorIndex:x.floorIndex,go:()=>{e.focusSection(x.id),Number.isFinite(x.floorIndex)&&m(x.floorIndex)}})),w=x=>{let g=l||x===null?S:S.filter(E=>E.floorIndex===void 0||E.floorIndex===x);if(v.replaceChildren(),!g.length){v.remove();return}if(v.isConnected||h.appendChild(v),!l&&g.length>Li){let E=document.createElement("select");E.setAttribute("aria-label",k("picker.jumpToSection","Jump to section"));let u=document.createElement("option");u.value="",u.textContent=k("picker.jumpToSection","Jump to section"),E.appendChild(u);for(let b of g){let T=document.createElement("option");T.value=b.id,T.textContent=b.label,E.appendChild(T)}E.addEventListener("change",()=>{g.find(b=>b.id===E.value)?.go()}),v.appendChild(E);return}for(let E of g){let u=document.createElement("button");u.type="button",u.textContent=E.label,u.addEventListener("click",()=>{E.go(),p(!1)}),v.appendChild(u)}};f=w,w(null)}a.appendChild(h)}var ke=class{constructor(e){this.host=e;this.chip=null}sync(){let e=this.host.overlay();if(!e||this.host.savedSeatIds().length===0){this.chip?.remove(),this.chip=null;return}let t=this.chip;if(!t){t=document.createElement("div"),t.className="sl-view3d-compare-saved",t.setAttribute("role","group"),t.setAttribute("aria-label",k("picker.savedSeatComparison","Saved seat comparison"));let r=document.createElement("button");r.type="button",r.className="main",r.addEventListener("click",()=>{this.host.savedSeatIds().length>1?this.host.openComparison():this.host.toast(k("picker.chooseAnotherToCompare","Choose another seat to compare."),"neutral")});let n=document.createElement("button");n.type="button",n.className="clear",n.textContent="\xD7",n.setAttribute("aria-label",k("picker.clearSavedSeatComparison","Clear saved seat comparison")),n.addEventListener("click",()=>this.host.clearComparison()),t.append(r,n),e.appendChild(t),this.chip=t}let i=this.host.savedSeatIds().length,s=t.querySelector(".main");s&&(s.textContent=i>1?Fe("picker.compareCount",{count:i}):k("picker.oneSeatSaved","1 seat saved"),s.setAttribute("aria-label",i>1?Fe("picker.openComparisonOfSeats",{count:i}):k("picker.oneSeatSavedChooseAnother","One seat saved; choose another to compare")))}remove(){this.chip?.remove(),this.chip=null}mainButton(){return this.chip?.querySelector(".main")??null}};import{t as Se,tCount as Mi}from"@seatlayer/core";function _e(a){let e=Math.max(0,a),t=Math.floor(e/6e4),i=String(Math.floor(e%6e4/1e3)).padStart(2,"0");return`${t}:${i}`}function wt({d:a,area:e,label:t,objectType:i,quantity:s=1,identity:r}){let n=h=>String(h??"\u2014").replace(/[&<>"]/g,c=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[c]),o=i==="ga"?"ga":a?.objectType??i,l=r?.displayType?.trim()||a?.displayType?.trim()||e?.displayType?.trim()||(o==="table"?k("picker.table","Table"):o==="booth"?k("picker.booth","Booth"):o==="ga"?k("picker.generalAdmission","General admission"):k("picker.row","Row")),d=r?.rowLabel??r?.displayLabel??a?.rowLabel??a?.displayLabel??e?.displayLabel??e?.label??t;return o==="table"&&r?.bookingMode?`<div class="sl-chip-id"><span class="fld sec"><span class="sl-chip-eb">${n(l)}</span><span class="val">${n(d)}</span></span><span class="fld mid"><span class="sl-chip-eb">${k("picker.guests","Guests")}</span><span class="val">${s}</span></span></div>`:o==="ga"?`<div class="sl-chip-id"><span class="fld sec"><span class="sl-chip-eb">${n(l)}</span><span class="val">${n(d)}</span></span>`+(s>1?`<span class="fld mid"><span class="sl-chip-eb">${k("picker.tickets","Tickets")}</span><span class="val">${s}</span></span>`:"")+"</div>":o==="booth"?'<div class="sl-chip-id">'+(a?.sectionLabel?`<span class="fld sec"><span class="sl-chip-eb">${k("picker.section","Section")}</span><span class="val">${n(a.sectionLabel)}</span></span>`:"")+`<span class="fld mid"><span class="sl-chip-eb">${n(l)}</span><span class="val">${n(d)}</span></span></div>`:!a?.sectionLabel&&!a?.rowLabel&&!a?.seatNumber?`<div class="sl-chip-id"><span class="fld sec"><span class="sl-chip-eb">${k("picker.seat","Seat")}</span><span class="val">${n(d)}</span></span></div>`:'<div class="sl-chip-id">'+(a.sectionLabel?`<span class="fld sec"><span class="sl-chip-eb">${k("picker.section","Section")}</span><span class="val">${n(a.sectionLabel)}</span></span>`:"")+(a.rowLabel?`<span class="fld mid"><span class="sl-chip-eb">${n(l)}</span><span class="val">${n(G(a))}</span></span>`:"")+(a.seatNumber?`<span class="fld mid"><span class="sl-chip-eb">${k("picker.seat","Seat")}</span><span class="val">${n(a.seatNumber)}</span></span>`:"")+"</div>"}function kt(a,e){return`<div class="sl-chip-rail"><button type="button" class="rm" aria-label="${a}"><svg viewBox="0 0 24 24"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg></button>`+(e?`<button type="button" class="view" data-view-label="${e}" aria-label="${Se("picker.viewFromSeat",{label:e})}"><svg viewBox="0 0 24 24"><path d="M1 12s4-7 11-7 11 7 11 7-4 7-11 7S1 12 1 12z"/><circle cx="12" cy="12" r="3"/></svg></button>`:"")+"</div>"}function St({count:a,total:e,pendingCount:t,ctaPhase:i,hasHold:s,salesClosed:r,fromPrice:n,money:o}){if(a&&i==="holding")return`<span>${k("picker.securingSeats","Securing your seats\u2026")}</span>`;if(a&&i==="checkout")return`<span>${Se("picker.peekSecured",{count:a,total:o(e)})}</span>`;if(a){let l=!!s;return`<span>${Mi("picker.peekTicketsTotal",a,{total:o(e)})}</span><button type="button" class="go sl-sheet-go" data-act="${l?"checkout":"open"}">${s?t?k("picker.secureMore","Secure more"):k("picker.continue","Continue"):k("picker.review","Review")}</button>`}else return r?`<span>${k("picker.salesClosedPill","Sales are closed")}</span>`:(n!=null?`<span>${Se("picker.peekFromPrice",{price:o(n)})}</span>`:`<span>${k("picker.pickYourSeats","Pick your seats")}</span>`)+`<button type="button" class="go sl-sheet-go" data-act="open">${k("picker.bestSeatsStar","\u2726 Best seats")}</button>`}function je(a,e=Date.now()){return Se("picker.holdReassurance",{time:_e(a-e)})}var zi="https://api.seatlayer.io",Di=10,Ct=6e4,At=6e4,Lt=new Set;function Fi(a){let e=Lt.has(a);return Lt.add(a),e}var Mt="seatmap.a11y.cb";function _i(){try{if(typeof window>"u")return null;let a=window.localStorage.getItem(Mt);return a==null?null:a==="1"}catch{return null}}function ji(a){try{window.localStorage.setItem(Mt,a?"1":"0")}catch{}}var Ne=class a{constructor(e){this.realtime=null;this.accessEl=null;this.lastExactSelectionValidity=null;this.root=null;this.mapHost=null;this.rendered=!1;this.destroyed=!1;this.els={};this.regions={};this.ro=null;this.holdTimer=null;this.toastTimer=null;this.offerRefreshTimer=null;this.offerBoundaryTimer=null;this.offerVisibilityHandler=null;this.motionTimers=new Set;this.currency="USD";this.eventTimezone=null;this.eventWhenText=null;this.offerAvailability=null;this.hold=null;this.holdExpiresAt=0;this.handedOff=!1;this.bookedShown=!1;this.paymentOptions=null;this.checkoutPanel=null;this.extendEl=null;this.bookedEl=null;this.gaQty=new Map;this.tipEl=null;this.tipPos={x:0,y:0};this.confirmEl=null;this.confirmSeat=null;this.tableDialogEl=null;this.tableDialog=null;this.tableDialogHeld=!1;this.tableDialogReturnFocus=null;this.srEl=null;this.baQty=2;this.baCat="";this.baZone="";this.baPremium=!1;this.baReopen=!1;this.bestAvailableConfirm=!1;this.releasingHold=!1;this.salesClosed=!1;this.soldOut=!1;this.soldoutEl=null;this.cbSafe=!1;this.rungsEl=null;this.projectionEl=null;this.buyerView="map";this.view3dEl=null;this.view3dHandle=null;this.view3dGen=0;this.view3dReturnSeat=null;this.view3dTargetSeatId=null;this.view3dCompareSeatIds=[];this.view3dCompareChip=new ke({overlay:()=>this.view3dEl,savedSeatIds:()=>this.view3dCompareSeatIds,openComparison:()=>this.openView3dComparison(),clearComparison:()=>this.clearView3dComparison(),toast:(e,t)=>this.toast(e,t)});this.view3dCompareEl=null;this.view3dCompareCleanup=null;this.view3dPassportEl=null;this.view3dPassportCleanup=null;this.floorsEl=null;this.secCardEl=null;this.viewEl=null;this.viewCleanup=null;this.seatViewGen=0;this.allSeatsCache=null;this.minimap=null;this.pickerLayoutSize={width:0,height:0};this.priceBandKeys=null;this.focusedCatKey=null;this.limitedViewFilter=!1;this.pricesExpanded=!1;this.lastSection=null;this.secCardCollapsed=!1;this.secCardShownAt=0;this.lastTrayCount=0;this.lastTrayTotal=0;this.lastTrayKeys=new Set;this.bestAvailableBusy=!1;this.releasingLabels=new Set;this.holdingLabels=new Set;this.ctaPhase="idle";this.a11yChipsEl=null;this.fsFallback=!1;this.fsChangeHandler=null;this.fsEscHandler=null;this.eventDetailsHidden=!1;this.holdCopyPending=!1;this.sideCollapsed=!1;this.sideToggleEl=null;this.pricesBtnEl=null;this.framedFs=!1;this.lastPostedHeight=0;this.cbEl=null;this.modalScrim=null;this.prevFocus=null;this.escHandler=null;this.closeModal=null;this.lastCatAvail=null;this.lastAvailFloorId="";this.availQuietUntil=0;this.liveTimer=null;this.perspectiveWarned=!1;if(!e||typeof e!="object")throw new Error("seatmap: options object is required");if(!e.event||typeof e.event!="string")throw new Error("seatmap: `event` key is required");if(!e.container)throw new Error("seatmap: `container` is required (or use SeatPicker.open())");this.opts={...e,confirmSelection:e.confirmSelection??!0},this.eventDetailsHidden=!!e.hideEventDetails,this.hostPricing=e.pricing,this.apiBase=(e.apiBase??zi).replace(/\/+$/,""),this.access=e.transport?null:de(e,{onExpired:s=>{this.opts.onAccessExpired?.(s),s.refreshed||this.showAccessPanel({reason:"no_token",retryable:!1})},onUnavailable:s=>{this.opts.onAccessUnavailable?.(s),this.showAccessPanel(s)}}),this.pubApi=e.transport?null:new X(this.apiBase,{access:this.access??void 0,onObjectUnavailable:s=>this.opts.onSelectedObjectUnavailable?.(s)}),this.api=e.transport??this.pubApi,this.buyerAssetUrls=new ve(e.event,this.api.asset?(s,r)=>this.api.asset(s,r):void 0),e.checkout==="hosted"&&!this.pubApi&&console.warn('seatlayer: checkout: "hosted" needs the widget\'s own transport \u2014 a custom `transport` owns its backend, so the picker is staying on onCheckout for this mount.'),this.checkoutMode=e.checkout==="hosted"&&this.pubApi?"hosted":"handoff";let t=e.numberOfPlacesToSelect;if(t!=null&&(!Number.isInteger(t)||t<1))throw new Error("seatmap: `numberOfPlacesToSelect` must be a positive integer");this.exactTickets=t??null;let i=Math.max(1,Math.floor(e.maxSelection??this.exactTickets??Di));if(this.exactTickets!=null&&i<this.exactTickets)throw new Error("seatmap: `maxSelection` cannot be lower than `numberOfPlacesToSelect`");this.maxTickets=this.exactTickets??i,this.cbSafe=_i()??!!e.colorblindSafe,this.controller=this.wireController(e)}chartHasStage(){let e=this.controller.doc;if(!e)return!1;let t=e.floors?.length?e.floors.map(i=>i.objects??[]):[e.objects??[]];for(let i of t)for(let s of i)if(s.type==="shape"&&(s.role==="stage"||s.stageKind))return!0;return!1}confirmThumbHtml(e){let t=this.controller.doc;if(!t)return"";let i=e.viewUrl??"",s=this.chartHasStage();if(!i&&!s)return"";let r=null;if(!i)try{r=Oi(e,e.focalPoint??t.focalPoint).distanceM??null}catch{return""}let n=s&&r!=null?`<div class="sl-confirm-sight">${y("picker.sightline",{m:r})}</div>`:"";return(i?`<button type="button" class="sl-confirm-view sl-confirm-thumbwrap" aria-label="${y("picker.viewFromSeat",{label:e.label})}"><img class="sl-confirm-thumb" alt="" /><span class="sl-confirm-thumb-badge">\u{1F52D} ${this.tf("picker.viewFromHere","View from here")}</span></button>`:`<button type="button" class="sl-confirm-view sl-confirm-viewbtn" aria-label="${y("picker.viewFromSeat",{label:e.label})}"><span aria-hidden="true">\u{1F52D}</span><span>${this.tf("picker.viewFromHere","View from here")}</span></button>`)+n}isFramed(){return typeof window<"u"&&window.parent!==window}postToHost(e){if(this.isFramed())try{window.parent.postMessage(e,"*")}catch{}}measureFramedHeight(){let e=this.root;if(!e)return 0;let t=e.clientWidth||(typeof window<"u"?window.innerWidth:0)||0;if(t<=0)return 0;let i=t<640?1.2:.62;return Math.max(420,Math.round(t*i))}reportFramedHeight(){if(!this.isFramed())return;let e=this.measureFramedHeight();e<=0||e===this.lastPostedHeight||(this.lastPostedHeight=e,this.postToHost({type:"seatlayer:height",px:e}))}toggleFullscreen(){let e=this.root;if(!e)return;!!document.fullscreenElement||this.fsFallback||this.framedFs?document.fullscreenElement?document.exitFullscreen().catch(()=>{}):this.framedFs?this.setFramedFs(!1):this.setFsFallback(!1):e.requestFullscreen?e.requestFullscreen().catch(()=>this.enterFsFallback()):this.enterFsFallback()}syncFullscreenButtons(){let e=!!document.fullscreenElement||this.fsFallback||this.framedFs,t=this.eventDetailsHidden&&!e;this.root?.setAttribute("data-event-details-hidden",String(t)),this.els.zfs?.setAttribute("aria-pressed",String(e)),this.els.zfs?.setAttribute("title",e?this.tf("picker.exitFullScreen","Exit full screen"):this.tf("picker.fullScreen","Full screen"));let i=this.els.zfs?.querySelector(".sl-zfs-lbl");i&&(i.textContent=e?this.tf("picker.exitFullScreen","Exit full screen"):this.tf("picker.fullScreen","Full screen")),this.view3dEl?.querySelector(".sl-view3d-fs")?.setAttribute("aria-pressed",String(e))}enterFsFallback(){this.isFramed()?this.setFramedFs(!0):this.setFsFallback(!0)}setFramedFs(e){this.framedFs!==e&&(this.framedFs=e,this.syncFullscreenButtons(),this.postToHost({type:"seatlayer:fullscreen",on:e}),e&&!this.fsEscHandler?(this.fsEscHandler=t=>{t.key==="Escape"&&!document.fullscreenElement&&this.setFramedFs(!1)},window.addEventListener("keydown",this.fsEscHandler)):!e&&this.fsEscHandler&&(window.removeEventListener("keydown",this.fsEscHandler),this.fsEscHandler=null),requestAnimationFrame(()=>this.controller.refitCurrentView()))}setFsFallback(e){this.fsFallback!==e&&(this.fsFallback=e,this.root?.classList.toggle("sl-fs",e),this.syncFullscreenButtons(),e&&!this.fsEscHandler?(this.fsEscHandler=t=>{t.key==="Escape"&&!document.fullscreenElement&&this.setFsFallback(!1)},window.addEventListener("keydown",this.fsEscHandler)):!e&&this.fsEscHandler&&(window.removeEventListener("keydown",this.fsEscHandler),this.fsEscHandler=null),requestAnimationFrame(()=>this.controller.refitCurrentView()))}close(){this.closeModal?this.closeModal():this.destroy()}static async open(e){Re();let t=document.activeElement instanceof HTMLElement?document.activeElement:null,i=document.createElement("div");i.className="sl-modal-scrim";let s=document.createElement("div");s.className="sl-modal-frame",s.setAttribute("role","dialog"),s.setAttribute("aria-modal","true"),s.setAttribute("aria-label",k("picker.seatSelection","Seat selection")),s.tabIndex=-1,i.appendChild(s),document.body.appendChild(i);let r=document.body.style.overflow;document.body.style.overflow="hidden";let n=new a({...e,container:s});n.modalScrim=i,n.prevFocus=t;let o=["a[href]","area[href]","button","input","select","textarea","iframe","object","embed","summary","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])',"[tabindex]"].join(","),l=()=>{let m=[...s.querySelectorAll('[role="dialog"][aria-modal="true"]')].filter(v=>v.isConnected&&!v.closest('[hidden], [aria-hidden="true"], [inert]'));return m[m.length-1]??s},d=(m,v)=>{let S=m;for(;S;){let w=window.getComputedStyle(S);if(S.hidden||S.getAttribute("aria-hidden")==="true"||S.hasAttribute("inert")||w.display==="none"||w.visibility==="hidden"||w.visibility==="collapse")return!0;if(S===v)return!1;S=S.parentElement}return!0},h=m=>[...m.querySelectorAll(o)].filter(v=>v.tabIndex>=0&&!v.matches(":disabled")&&!d(v,m)),c=(m,v)=>{let S=h(m),w=v?S[S.length-1]:S[0];w?w.focus({preventScroll:!0}):(m.hasAttribute("tabindex")||(m.tabIndex=-1),m.focus({preventScroll:!0}))},p=!1,f=()=>{if(p)return;p=!0,document.body.style.overflow=r,n.escHandler&&document.removeEventListener("keydown",n.escHandler),i.remove(),n.modalScrim=null;let m=n.prevFocus;n.prevFocus=null,m?.isConnected&&m.focus({preventScroll:!0});let v=()=>{n.destroy(),e.onClose?.()};n.hold&&!n.handedOff?n.release().finally(v):v()};return n.closeModal=f,i.addEventListener("mousedown",m=>{m.target===i&&f()}),n.escHandler=m=>{if(m.key==="Tab"){if(m.defaultPrevented)return;let v=l(),S=h(v),w=S[0],x=S[S.length-1],g=document.activeElement;!w||!x?(m.preventDefault(),c(v,m.shiftKey)):g===v||!g||!v.contains(g)?(m.preventDefault(),(m.shiftKey?x:w).focus({preventScroll:!0})):m.shiftKey&&g===w?(m.preventDefault(),x.focus({preventScroll:!0})):!m.shiftKey&&g===x&&(m.preventDefault(),w.focus({preventScroll:!0}));return}m.key==="Escape"&&(n.tableDialog?(m.preventDefault(),n.cancelTableDialog()):n.confirmSeat?(m.preventDefault(),n.cancelConfirm()):n.bestAvailableConfirm?(m.preventDefault(),n.bestAvailableConfirm=!1,n.syncTray()):(m.preventDefault(),f()))},document.addEventListener("keydown",n.escHandler),await n.render(),n.els.close?.classList.add("on"),n.els.close?.addEventListener("click",f),c(l(),!1),n}wireController(e){return new Pi({transport:this.api,eventKey:e.event,maxSelection:this.maxTickets,selectedObjects:e.selectedObjects,selectableObjects:e.selectableObjects,numberOfPlacesToSelect:e.numberOfPlacesToSelect,currency:e.currency,flashOnLiveChange:!0,colorblindSafe:this.cbSafe,mapTheme:e.theme?.map??null,onSelectionChange:()=>{this.syncTray(),this.minimap?.refreshMinimap(),this.committedSelection().length&&this.collapseSectionCard(),this.syncSelectionTo3d()},onStatusChange:()=>{this.syncPrices(),this.scheduleOfferRefresh(!0),this.evictTakenSelections(),this.detectBooked(),this.minimap?.refreshMinimap(),this.pushAvailabilityTo3d()},onHoldExpired:()=>{this.hold=null,this.forgetHold(),this.handedOff=!1,this.bookedShown=!1,this.ctaPhase="idle",this.stopHoldTimer(),this.gaQty.clear(),this.toast(y("picker.holdExpired",void 0)||"Your hold expired \u2014 seats released. Pick again.","warning"),this.syncTray(),this.emitHoldChange(),this.opts.onHoldExpired?.()},confirmSelection:this.opts.confirmSelection,onSelect:t=>{if(this.salesClosed){this.controller.deselect([t.id]),this.toast(this.tf("picker.salesClosedToast","Sales are closed for this event."),"warning");return}this.controller.tableSelection(t.id)||(this.flashPickedSeat(t.id),this.opts.confirmSelection&&this.showConfirm(t))},onTableSelectionRequest:t=>{if(this.salesClosed){this.controller.deselect(t.physicalSeatIds),this.toast(this.tf("picker.salesClosedToast","Sales are closed for this event."),"warning");return}this.showTableDialog(t,!1)},onDeselect:t=>{this.confirmSeat?.id===t.id&&this.dismissConfirm(),this.tableDialog?.physicalSeatIds.includes(t.id)&&this.dismissTableDialog()},onSelectionLimit:()=>{this.toast(y("picker.maxTicketsForOrder",{count:this.maxTickets}),"warning"),this.opts.onSelectionLimit?.(this.maxTickets)},onViewChange:()=>{this.reanchorConfirm(),this.syncRung(),this.syncProjection(),this.minimap?.drawMinimapRect(),this.sectionCardOnView()},onSectionFocus:t=>this.showSectionCard(t),onDeckTap:()=>{this.showSectionCard(null),this.syncFloors(),this.syncRung(),this.minimap?.refreshMinimap()},onFocusSeat:t=>this.announceSeat(t),onSeatHover:t=>this.updateTooltip(t),onHint:t=>{t&&this.toast(t)},onSalesClosed:()=>this.setSalesClosed(!0),onError:t=>this.opts.onError?.(t)})}async render(){if(this.rendered)return this;let e=performance.now(),t={},i=b=>Math.round((performance.now()-b)*100)/100;this.rendered=!0,Re();let s=performance.now();await $i(this.opts.locale),t.loadLocale=i(s),this.opts.messages&&Ii(this.opts.messages),this.checkoutMode==="hosted"&&(this.paymentOptions=this.pubApi.paymentOptions(this.opts.event));let r=performance.now(),n=lt(this.opts.container),{root:o,els:l,mapHost:d}=ot(n,(b,T)=>this.tf(b,T),this.opts.theme);this.root=o,this.els=l,this.mapHost=d,o.addEventListener("keydown",b=>{b.key==="Escape"&&(this.tableDialog?(b.preventDefault(),b.stopPropagation(),this.cancelTableDialog()):this.confirmSeat?(b.preventDefault(),b.stopPropagation(),this.cancelConfirm()):this.bestAvailableConfirm&&(b.preventDefault(),b.stopPropagation(),this.bestAvailableConfirm=!1,this.syncTray()))}),this.syncFullscreenButtons(),this.wireBuyerShell(o);let h=document.createElement("div");h.style.cssText="position:absolute;inset:0",this.mapHost.appendChild(h),t.mountBuyerShell=i(r);let c=await this.loadChart(h,t,i);if(!c)return this;this.els.boot.remove();let p=performance.now();if(this.startRealtime(),this.salesClosed=!!c.salesClosed||!!this.opts.readOnly,o.dataset.eventMode=c.mode==="test"?"test":"live",this.controller.setViewMode(this.normalizeInitialView(this.opts.initialView)),this.buildRegions(),this.regions["bottom-right"].appendChild(this.els.zoom),this.regions["bottom-center"].appendChild(this.els.toast),c.mode==="test"){let b=document.createElement("div");b.className="sl-testbadge",b.textContent=y("picker.testMode"),b.setAttribute("aria-label",y("picker.testMode")),this.regions["top-left"].appendChild(b)}let f=this.controller.doc?.theme;Object.entries(xe(f,this.opts.theme)).forEach(([b,T])=>o.style.setProperty(b,T)),this.currency=c.currency??this.opts.currency??"USD",this.eventTimezone=c.timezone??null;let m=this.opts.theme?.logoUrl??f?.logoUrl??c.posterUrl??null;m?this.els.logo.innerHTML=`<img src="${m}" alt="">`:this.els.logo.textContent=(this.opts.theme?.brandName??f?.brandName??c.eventName??"?").slice(0,1).toUpperCase(),this.els.name.textContent=c.eventName??"";let v=c.startsAt?we(c.startsAt,c.timezone??null,this.opts.locale):"";this.eventWhenText=v||null,this.els.meta.textContent=[c.venue,v].filter(Boolean).join(" \xB7 "),this.els.pricesHint&&(this.els.pricesHint.textContent=this.tf("picker.priceHint","Colours on the map are ticket types \u2014 tap one below to show just those seats.")),this.buildBadge(f);let S=new Set,w=!1;if(this.controller.doc)for(let b of Ve(this.controller.doc)){for(let T of b.accessibility??[])S.add(T);b.accessible&&!b.accessibility?.length&&S.add("wheelchair"),(b.commercial?.restrictedView||b.commercial?.obstructedView)&&(w=!0)}let x=()=>{this.rungsEl&&this.controller.getRung()!=="seats"&&(this.controller.setRung("seats"),this.collapseSectionCard(),this.syncRung())};if(S.size||w){let b=document.createElement("div");if(b.className="sl-chips",this.regions["top-left"].appendChild(b),this.a11yChipsEl=b,S.size){let T=(A,L)=>`<button type="button" class="sl-chip-f${A==="all"?" on":""}" data-a11y="1" data-f="${A}">${L}</button>`;b.insertAdjacentHTML("beforeend",T("all",this.tf("picker.allSeats","All seats"))+Hi.filter(({key:A})=>S.has(A)).map(({key:A,short:L,icon:D})=>T(A,`${D} ${L}`)).join(""));let C=new Set,P=()=>{b.querySelectorAll("button[data-a11y]").forEach(L=>{let D=L.dataset.f,se=D==="all"?C.size===0:C.has(D);L.classList.toggle("on",se),L.setAttribute("aria-pressed",String(se))});let A=C.size?[...C]:null;this.controller.setAccessibilityFilter(A),A&&x()};b.querySelectorAll("button[data-a11y]").forEach(A=>{A.addEventListener("click",()=>{let L=A.dataset.f;L==="all"?C.clear():C.has(L)?C.delete(L):C.add(L),P()})})}if(w){let T=document.createElement("button");T.type="button",T.className="sl-chip-f",T.setAttribute("aria-pressed","false"),T.innerHTML=`\u25D0 ${this.tf("picker.hideLimitedView","Hide limited-view seats")}`,b.appendChild(T),T.addEventListener("click",()=>{let C=!this.limitedViewFilter;this.limitedViewFilter=C,T.classList.toggle("on",C),T.setAttribute("aria-pressed",String(C)),this.controller.setCommercialLimitedFilter(C),this.pushAvailabilityTo3d(),C&&x()})}}let g=document.createElement("button");g.type="button",g.className="sl-cbbtn",this.cbEl=g,g.setAttribute("aria-label",this.tf("picker.toggleColorblindColors","Toggle colorblind-friendly colors")),g.setAttribute("aria-pressed",String(this.cbSafe)),g.innerHTML='<svg viewBox="0 0 24 24"><path d="M1 12s4-7 11-7 11 7 11 7-4 7-11 7S1 12 1 12z"/><circle cx="12" cy="12" r="3"/></svg>',this.els.zfit.parentElement.appendChild(g),g.addEventListener("click",()=>{this.setColorblindSafe(!this.cbSafe)}),this.srEl=document.createElement("div"),this.srEl.className="sl-sr",this.srEl.setAttribute("aria-live","polite"),o.appendChild(this.srEl),this.buildArenaChrome(),this.buildMinimap(),this.buildPriceFilter(),this.buildExtendPrompt(),this.buildBookedOverlay(),this.buildSoldoutOverlay(),this.buildPanelToggle(),this.opts.panelCollapsed&&this.setPanelCollapsed(!0),this.dockLayoutChrome(),t.buildBuyerControls=i(p);let E=performance.now();if(await this.restoreRememberedHold(),t.restoreHold=i(E),this.destroyed)return this;this.salesClosed&&this.applySalesClosed(),this.syncPrices(),this.syncTray(),this.resumeHostedOrder();let u=this.controller.doc;return this.emitAnalytics("chart_rendered",{renderingTimeMillis:i(e),performanceProfile:t,seatCount:this.allSeats().length,objectCount:u?.objects.length??0,sectionCount:u?.objects.filter(b=>b.type==="section").length??0,view:this.buyerView,eventKey:this.opts.event,chartName:u?.name,floorCount:this.controller.getFloors().length,transport:this.opts.transport?"custom":"pubapi",load:Fi(this.opts.event)?"repeat":"cold"}),this}wireBuyerShell(e){this.refreshOfferAvailability(!1),this.api.availability&&(this.offerVisibilityHandler=()=>{!document.hidden&&!this.destroyed&&this.refreshOfferAvailability(!1)},document.addEventListener("visibilitychange",this.offerVisibilityHandler)),this.observeLayout(e),this.els.zin.addEventListener("click",()=>this.controller.zoomIn()),this.els.zout.addEventListener("click",()=>this.controller.zoomOut()),this.els.zfit.addEventListener("click",()=>this.controller.zoomToFit()),this.els.zfs.addEventListener("click",()=>this.toggleFullscreen()),this.fsChangeHandler=()=>{document.fullscreenElement||this.setFsFallback(!1),this.syncFullscreenButtons(),requestAnimationFrame(()=>this.controller.refitCurrentView())},document.addEventListener("fullscreenchange",this.fsChangeHandler);let t=this.els.sheetHead;if(t){let r=this.els.sheetToggle,n=h=>{e.dataset.sheet=h?"open":"peek",r?.setAttribute("aria-expanded",String(h)),r?.setAttribute("aria-label",h?this.tf("picker.collapseTicketPanel","Collapse ticket panel"):this.tf("picker.openTicketPanel","Open ticket panel"))};n(e.dataset.sheet==="open"),r?.addEventListener("click",h=>{h.stopPropagation(),n(e.dataset.sheet!=="open")}),this.els.peek?.addEventListener("click",h=>{let c=h.target.closest(".sl-sheet-go");c&&(h.stopPropagation(),c.dataset.act==="checkout"?this.handleCta():n(!0))});let o=0,l=!1,d=!1;t.addEventListener("pointerdown",h=>{if(h.target.closest?.(".sl-seccard,.sl-sheet-toggle,.sl-sheet-go")){d=!1;return}d=!0,l=!1,o=h.clientY,t.setPointerCapture?.(h.pointerId)}),t.addEventListener("pointermove",h=>{if(!d||l)return;let c=h.clientY-o;c<-18?(n(!0),l=!0):c>18&&(n(!1),l=!0)}),t.addEventListener("pointerup",h=>{d&&!l&&Math.abs(h.clientY-o)<6&&n(e.dataset.sheet!=="open"),d=!1,t.releasePointerCapture?.(h.pointerId)})}let i=()=>{if(this.root?.dataset.layout!=="narrow")return;let r=this.root.getAttribute("data-prices-open")==="true";if(this.root.setAttribute("data-prices-open",String(!r)),this.els.pricesSec?.setAttribute("aria-expanded",String(!r)),this.pricesBtnEl?.setAttribute("aria-pressed",String(!r)),!r&&this.root.dataset.sheet!=="open"){this.root.dataset.sheet="open";let n=this.els.sheetToggle;n?.setAttribute("aria-expanded","true"),n?.setAttribute("aria-label","Collapse ticket panel")}};this.els.pricesSec?.addEventListener("click",r=>{r.target.closest("select,button")||i()}),this.els.pricesSec?.addEventListener("keydown",r=>{r.key!=="Enter"&&r.key!==" "||r.target.closest("select,button")||(r.preventDefault(),i())});let s=document.createElement("button");s.type="button",s.className="sl-prices-btn",s.setAttribute("aria-label",this.tf("picker.ticketPrices","Ticket prices")),s.setAttribute("title",this.tf("picker.ticketPrices","Ticket prices")),s.setAttribute("aria-pressed","false"),s.innerHTML='<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M20.6 13.4 13.4 20.6a2 2 0 0 1-2.8 0L3 13V5a2 2 0 0 1 2-2h8l7.6 7.6a2 2 0 0 1 0 2.8z"/><circle cx="7.5" cy="7.5" r="1.3"/></svg>',s.addEventListener("click",()=>i()),this.els.headInfo?.parentElement?.insertBefore(s,this.els.hold??null),this.pricesBtnEl=s,this.tipEl=document.createElement("div"),this.tipEl.setAttribute("role","tooltip"),this.tipEl.className="sl-tip",this.els.map.appendChild(this.tipEl),this.els.map.addEventListener("mousemove",r=>{let n=this.els.map.getBoundingClientRect();this.tipPos={x:r.clientX-n.left,y:r.clientY-n.top},this.tipEl&&this.tipEl.style.display!=="none"&&this.placeTooltip()}),this.els.cta.addEventListener("click",()=>{this.handleCta()}),this.els.holdChange?.addEventListener("click",()=>{this.handleChangeSeats()})}observeLayout(e){let t=()=>{let i=e.clientWidth;if(i<=0)return;let s=e.clientHeight,r=i!==this.pickerLayoutSize.width||s!==this.pickerLayoutSize.height;this.pickerLayoutSize={width:i,height:s},this.reportFramedHeight();let n=i<640?"narrow":"wide",o=s<560?"compact":"comfortable";(e.dataset.layout!==n||e.dataset.density!==o)&&(e.dataset.layout=n,e.dataset.density=o,n==="narrow"&&!e.dataset.sheet&&(e.dataset.sheet="peek"),this.dockLayoutChrome()),r&&this.minimap?.refreshMinimap()};this.ro=new ResizeObserver(t),this.ro.observe(e),t(),requestAnimationFrame(t)}async loadChart(e,t,i){let s=performance.now(),r=await this.controller.render(e);return t.loadChartAndStatuses=i(s),this.destroyed?null:r?(Object.assign(t,r.performanceProfile),r):(this.els.boot.innerHTML=`<div class="sl-boot-title">${this.tf("picker.mapDidNotLoad","The seat map didn\u2019t load")}</div><div>${this.tf("picker.checkConnection","Check your connection and try again.")}</div><button type="button" class="sl-boot-retry">${this.tf("picker.accessRetry","Try again")}</button>`,this.els.boot.querySelector("button").addEventListener("click",()=>{let n=this.opts.container,o=this.opts;this.destroy(),new a({...o,container:n}).render()}),null)}resumeHostedOrder(){if(this.checkoutMode!=="hosted"||typeof location>"u")return;let e=new URLSearchParams(location.search),t=e.get("order");if(!t)return;let i=e.get("status");e.delete("order"),e.delete("status");try{let s=e.toString();history.replaceState(history.state,"",`${location.pathname}${s?`?${s}`:""}${location.hash}`)}catch{}i==="success"&&this.openCheckoutPanel({kind:"resume",orderId:t})}buildPanelToggle(){if(!this.regions["top-right"])return;let e=document.createElement("button");e.type="button",e.className="sl-side-toggle",e.addEventListener("click",()=>this.setPanelCollapsed(!this.sideCollapsed)),this.sideToggleEl=e,this.regions["top-right"].appendChild(e),this.syncPanelToggle()}syncPanelToggle(){let e=this.sideToggleEl;if(!e)return;let t=this.sideCollapsed;e.setAttribute("aria-expanded",String(!t)),e.setAttribute("aria-label",t?this.tf("picker.showTicketPanel","Show the ticket panel"):this.tf("picker.hideTicketPanel","Hide the ticket panel")),e.title=t?this.tf("picker.showTicketPanel","Show the ticket panel"):this.tf("picker.hideTicketPanel","Hide the ticket panel"),e.innerHTML=t?`<svg viewBox="0 0 24 24"><path d="M15 6l-6 6 6 6"/></svg><span>${this.tf("picker.tickets","Tickets")}</span>`:'<svg viewBox="0 0 24 24"><path d="M9 6l6 6-6 6"/></svg>'}setPanelCollapsed(e){this.destroyed||(this.sideCollapsed=e,this.applyPanelCollapsed(),this.scheduleMotion(()=>this.controller.refitCurrentView(),340))}applyPanelCollapsed(){let e=this.root?.dataset.layout!=="narrow";this.root?.setAttribute("data-side-collapsed",String(this.sideCollapsed)),this.els.side?.toggleAttribute("inert",this.sideCollapsed&&e),this.syncPanelToggle()}dockLayoutChrome(){let e=this.root?.dataset.layout==="narrow";this.applyPanelCollapsed();let t=this.els.zfs,i=this.els.headInfo?.parentElement;t&&i&&t.parentElement!==i&&(t.classList.add("sl-fs-pill"),i.insertBefore(t,this.els.hold??null));let s=this.els.pricesSec;s&&(e?(s.setAttribute("role","button"),s.tabIndex=0,s.setAttribute("aria-expanded",String(this.root?.getAttribute("data-prices-open")==="true"))):(s.removeAttribute("role"),s.removeAttribute("aria-expanded"),s.tabIndex=-1));let r=this.els.filters;if(r){this.cbEl&&this.els.zoom?.appendChild(this.cbEl),e?this.a11yChipsEl&&r.appendChild(this.a11yChipsEl):this.a11yChipsEl&&this.regions["top-left"]?.appendChild(this.a11yChipsEl);let n=e&&r.children.length>0;r.classList.toggle("has",n),this.els.filtersSec?.classList.toggle("has",n)}this.lastSection&&this.renderSectionCard(this.lastSection)}buildExtendPrompt(){let e=document.createElement("div");e.className="sl-extend",e.setAttribute("role","status"),e.innerHTML='<span class="sl-extend-txt" data-ref="extendTxt"></span><button type="button" class="sl-extend-btn" data-ref="extendBtn"></button>',(this.regions["bottom-center"]??this.els.map).appendChild(e),this.extendEl=e,this.els.extendTxt=e.querySelector('[data-ref="extendTxt"]'),this.els.extendBtn=e.querySelector('[data-ref="extendBtn"]'),this.els.extendBtn.textContent=this.tf("picker.addTime","Add time"),this.els.extendBtn.addEventListener("click",()=>{this.handleExtend()})}buildBookedOverlay(){let e=document.createElement("div");e.className="sl-booked",e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e.innerHTML=`<div class="sl-booked-badge"><svg viewBox="0 0 24 24"><path d="M20 6L9 17l-5-5"/></svg></div><div class="sl-booked-title">${this.tf("picker.allSetTitle","You're all set")}</div><div class="sl-booked-sub" data-ref="bookedSub"></div>`,this.root.appendChild(e),this.bookedEl=e,this.els.bookedSub=e.querySelector('[data-ref="bookedSub"]')}tf(e,t){return k(e,t)}buildSoldoutOverlay(){if(!this.els.map)return;let e=document.createElement("div");e.className="sl-soldout",e.setAttribute("role","status");let t=(this.controller.doc?.theme?.brandName??this.opts.theme?.brandName??this.els.name?.textContent??this.tf("picker.soldOutEyebrow","This event")).toUpperCase();e.innerHTML=`<div class="sl-soldout-eyebrow">${t}</div><div class="sl-soldout-title">${this.tf("picker.soldOutTitle","Sold out")}</div><p class="sl-soldout-copy">${this.tf("picker.soldOutCopy","No reserved seats are currently available for this event.")}</p>`,this.els.map.appendChild(e),this.soldoutEl=e}syncSoldout(e,t){let i=this.controller.getGAAreas().length>0,s=this.isSoldOut(e,t,i);s!==this.soldOut&&(this.soldOut=s,this.soldoutEl?.classList.toggle("on",s))}isSoldOut(e,t,i){return!i&&e.length>0&&e.every(s=>(t[s.key]??0)===0)}setSalesClosed(e){let t=e||!!this.opts.readOnly;this.salesClosed!==t&&(this.salesClosed=t,this.applySalesClosed())}applySalesClosed(){this.salesClosed&&this.tableDialog&&!this.tableDialogHeld&&this.cancelTableDialog();let e=this.els.closedPill;if(e){e.classList.toggle("on",this.salesClosed);let t=this.els.closedPillText??e;t.textContent=this.tf("picker.salesClosedPill","Sales are closed")}this.root?.setAttribute("data-sales-closed",String(this.salesClosed)),this.salesClosed&&this.srEl&&(this.srEl.textContent=this.tf("picker.salesClosedToast","Sales are closed for this event.")),this.syncCta(),this.syncTray()}badgeHidden(e){return!!(this.opts.hideBadge||e?.hideBadge)}buildBadge(e){if(this.badgeHidden(e))return;let t=this.els.foot;if(!t)return;let i=document.createElement("a");i.className="sl-powered",i.href="https://seatlayer.io/?ref=picker",i.target="_blank",i.rel="noopener noreferrer",i.setAttribute("aria-label",this.tf("picker.poweredBy","Powered by SeatLayer")),i.innerHTML='<span class="sl-powered-mark" aria-hidden="true">'+be+`</span><span>${this.tf("picker.poweredBy","Powered by SeatLayer")}</span>`,t.appendChild(i)}buildRegions(){if(!this.els.map)return;let e=["top-left","top-center","top-right","left-rail","bottom-left","bottom-center","bottom-right"];for(let t of e){let i=document.createElement("div");i.className="sl-anchor",i.dataset.region=t,this.els.map.appendChild(i),this.regions[t]=i}}cssVar(e){return this.root?getComputedStyle(this.root).getPropertyValue(e).trim():""}reducedMotion(){return typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}scheduleMotion(e,t){let i=setTimeout(()=>{this.motionTimers.delete(i),this.destroyed||e()},t);this.motionTimers.add(i)}animateOnce(e,t,i=600){!e||this.reducedMotion()||(e.classList.remove(t),e.offsetWidth,e.classList.add(t),this.scheduleMotion(()=>e.classList.remove(t),i))}flashPickedSeat(e){this.reducedMotion()||this.controller.flashSeat(e,this.cssVar("--sl-accent")||"#f4b740")}flashHeldSeats(e){if(this.reducedMotion())return;(e.items??[]).filter(i=>i.objectType!=="ga").map(i=>i.label).slice(0,10).forEach((i,s)=>{let r=this.controller.seatByLabel(i);r&&this.scheduleMotion(()=>this.controller.flashSeat(r.id,this.cssVar("--sl-accent")||"#f4b740"),s*55)})}committedSelection(){let e=this.confirmSeat?.id,t=this.tableDialog&&!this.tableDialogHeld?this.tableDialog.id:null;return this.controller.getSelection().filter(i=>i.id!==e&&i.id!==t)}pendingSelectionCount(){let e=this.hold?.items??[],t=new Set(e.map(s=>s.label));return this.committedSelection().filter(s=>!t.has(s.label)).reduce((s,r)=>s+(r.quantity??1),0)+this.pendingGACount()}heldGACounts(){let e=new Map;for(let t of(this.hold?.items??[]).filter(i=>i.objectType==="ga"))e.set(t.objectId,(e.get(t.objectId)??0)+(t.quantity??1));return e}pendingGACount(){let e=this.heldGACounts();return[...this.gaQty.entries()].reduce((t,[i,s])=>t+Math.max(0,s-(e.get(i)??0)),0)}heldTicketCount(){return(this.hold?.items??[]).reduce((e,t)=>e+(t.quantity??1),0)}totalTicketCount(){let e=new Set((this.hold?.items??[]).map(i=>i.label)),t=this.committedSelection().filter(i=>!e.has(i.label)).reduce((i,s)=>i+(s.quantity??1),0);return this.heldTicketCount()+t+this.pendingGACount()}updateSelectionCapacity(){let e=new Set((this.hold?.items??[]).map(s=>s.label)),t=this.committedSelection().filter(s=>e.has(s.label)).reduce((s,r)=>s+(r.quantity??1),0),i=Math.max(0,this.maxTickets-this.heldTicketCount()-this.pendingGACount());this.controller.setMaxSelection(t+i)}canAddTicket(){return this.totalTicketCount()<this.maxTickets?!0:(this.toast(y("picker.maxTicketsForOrder",{count:this.maxTickets}),"warning"),!1)}pendingGATotal(e){let t=new Map;for(let i of(this.hold?.items??[]).filter(s=>s.objectType==="ga"))t.set(i.objectId,(t.get(i.objectId)??0)+(i.quantity??1));return e.reduce((i,s)=>i+this.paidPrice(s.categoryKey,null,s.price)*Math.max(0,(this.gaQty.get(s.id)??0)-(t.get(s.id)??0)),0)}syncCta(e=this.lastTrayCount,t=this.pendingSelectionCount()){let i=this.els.cta;if(i){if(this.salesClosed){i.disabled=!0,i.textContent=this.tf("picker.salesClosedCta","Sales closed");return}if(this.confirmSeat||this.tableDialog&&!this.tableDialogHeld){i.disabled=!0,i.textContent=this.tableDialog?this.tf("picker.confirmYourTable","Confirm your table"):this.tf("picker.confirmOrCancelSeat","Confirm or cancel this seat");return}if(this.ctaPhase==="holding"){i.disabled=!0,i.innerHTML=`<span class="sl-cta-spin" aria-hidden="true"></span>${this.tf("picker.securingSeats","Securing your seats\u2026")}`;return}if(this.ctaPhase==="checkout"){i.disabled=!0,i.innerHTML=`<span class="sl-cta-spin" aria-hidden="true"></span>${this.tf("picker.openingCheckout","Opening secure checkout\u2026")}`;return}if(this.exactTickets!=null&&e!==this.exactTickets){let s=Math.max(0,this.exactTickets-e);i.disabled=!0,i.textContent=s>0?y("picker.selectExactMore",{count:s}):y("picker.selectExactCount",{count:this.exactTickets});return}i.disabled=e===0,i.textContent=this.hold?t?y("picker.secureMoreAndCheckout",{count:t}):this.tf("picker.continueToCheckout","Continue to checkout"):e?this.tf("picker.holdSeatsAndCheckout","Hold seats & checkout"):this.tf("picker.selectSeats","Select seats")}}setCtaPhase(e){this.ctaPhase=e,this.syncCta(),this.renderPeek(this.lastTrayCount,this.lastTrayTotal,this.pendingSelectionCount()),e==="checkout"&&this.scheduleMotion(()=>{this.ctaPhase==="checkout"&&(this.ctaPhase="idle",this.syncCta(),this.renderPeek(this.lastTrayCount,this.lastTrayTotal,this.pendingSelectionCount()))},1100)}holdStorageKey(){return`@seatlayer/hold/v1/${encodeURIComponent(this.apiBase)}/${encodeURIComponent(this.opts.event)}`}rememberedHoldId(){if(this.opts.initialHoldId)return this.opts.initialHoldId;if(this.opts.restoreHold===!1||typeof window>"u")return null;try{return window.sessionStorage.getItem(this.holdStorageKey())}catch{return null}}rememberHold(e){if(!(this.opts.restoreHold===!1||typeof window>"u"))try{window.sessionStorage.setItem(this.holdStorageKey(),e.holdId)}catch{}}forgetHold(){if(!(typeof window>"u"))try{window.sessionStorage.removeItem(this.holdStorageKey())}catch{}}async resumeHoldFromServer(e,t){try{let i=await this.controller.resumeHold(e);if(!i)return null;let s={holdId:i.holdId,expiresAt:i.expiresAt,seats:i.seats,items:i.items};return this.hold=s,this.handedOff=!0,this.bookedShown=!1,this.ctaPhase="idle",this.startHoldTimer(s.expiresAt),this.rememberHold(s),this.syncTray(),this.emitHoldChange(),this.opts.onHoldRestored?.(s,s.seats??[],this.buildHandoff(s)),t&&this.toast(this.tf("picker.heldTicketsRestored","Your held tickets have been restored."),"success"),s}catch(i){let s=i?.status;return s===404||s===409?this.forgetHold():this.opts.onError?.(i),null}}async restoreRememberedHold(){let e=this.rememberedHoldId();e&&await this.resumeHoldFromServer(e,!0)}activeFloorObjects(){let e=this.controller.doc;if(!e)return[];let t=e.floors;if(t?.length){let i=this.controller.getActiveFloorId();return(t.find(s=>s.id===i)??t[0]).objects??[]}return e.objects??[]}buildMinimap(){this.els.map&&(this.minimap=yt({controller:this.controller,root:()=>this.root,cssVar:e=>this.cssVar(e),focusedSectionLabel:()=>this.lastSection?.label},this.regions["bottom-left"]??this.els.map))}catPrice(e){let t=e.tiers?.length?e.tiers[0].price:e.price;return t===void 0||!e.key?t:this.paidPrice(e.key,e.tiers?.[0]?.id??null,t)}catPriceRange(e){let t=e.tiers?.length?e.tiers.map(i=>this.paidPrice(e.key,i.id??null,i.price)):e.price==null?[]:[this.paidPrice(e.key,null,e.price)];return t.length?{min:Math.min(...t),max:Math.max(...t)}:void 0}priceBands(){let e=this.controller.doc;if(!e)return[];let t=e.categories.map(o=>({key:o.key,range:this.catPriceRange(o)})).filter(o=>o.range!=null);if(!t.length)return[];let i=[...new Map(t.map(o=>[`${o.range.min}:${o.range.max}`,o.range])).values()].sort((o,l)=>o.min-l.min||o.max-l.max);if(i.length<=5)return i.map(o=>({id:`p${o.min}-${o.max}`,label:o.min===o.max?this.money(o.min):`${this.money(o.min)}\u2013${this.money(o.max)}`,keys:t.filter(l=>l.range.min===o.min&&l.range.max===o.max).map(l=>l.key),min:o.min,max:o.max}));let s=[...t].sort((o,l)=>o.range.min-l.range.min||o.range.max-l.range.max),r=Math.ceil(s.length/4),n=[];for(let o=0;o<s.length;o+=r){let l=s.slice(o,o+r),d=Math.min(...l.map(c=>c.range.min)),h=Math.max(...l.map(c=>c.range.max));n.push({id:`b${o}`,label:d===h?this.money(d):`${this.money(d)}\u2013${this.money(h)}`,keys:l.map(c=>c.key),min:d,max:h})}return n}buildPriceFilter(){if(!this.els.prices||!this.els.pricesSec)return;let e=this.priceBands();if(e.length<2)return;let t=document.createElement("select");t.className="sl-price-select",t.setAttribute("aria-label",this.tf("picker.filterAndFocusByPrice","Filter and focus seats by price")),t.innerHTML=`<option value="all">${this.tf("picker.allPrices","All prices")}</option>`+e.map(i=>`<option value="${i.id}">${i.label}</option>`).join(""),this.els.pricesSec.appendChild(t),t.addEventListener("change",()=>{let s=e.find(r=>r.id===t.value)?.keys??null;this.focusedCatKey=null,this.priceBandKeys=s?new Set(s):null,this.controller.setCategoryFilter(s),this.controller.focusCategoryFilter(s),this.pushAvailabilityTo3d(),this.syncFloors(),this.syncRung(),this.minimap?.refreshMinimap(),this.syncPrices(),this.lastSection&&this.showSectionCard(this.lastSection)})}buildArenaChrome(){let e=this.controller.doc;if(!e||!this.els.map)return;let t=e.objects.some(i=>i.type==="section")||(e.floors??[]).some(i=>i.objects.some(s=>s.type==="section"));if(this.canOffer3d()){let i=document.createElement("div");i.className="sl-projection",i.setAttribute("role","group"),i.setAttribute("aria-label",this.tf("picker.venueView","Venue view")),i.innerHTML=`<button type="button" data-view="map" aria-pressed="true" title="${this.tf("picker.flat2dMap","Flat 2D map")}">${this.tf("picker.map","Map")}</button><button type="button" data-view="venue3d" aria-pressed="false" title="${this.tf("picker.interactive3dVenueView","Interactive 3D venue view")}">3D</button>`,i.querySelectorAll("button").forEach(s=>{s.addEventListener("click",()=>{this.setBuyerView(s.dataset.view)})}),this.regions["top-right"].appendChild(i),this.projectionEl=i,this.syncProjection()}if(t){let i=[...e.objects,...(e.floors??[]).flatMap(h=>h.objects)],s=new Set((e.zones??[]).map(h=>h.id)),n=i.some(h=>h.type==="section"&&typeof h.zone=="string"&&s.has(h.zone))?["zones","sections","seats"]:["sections","seats"],o=document.createElement("div");o.className="sl-rungs on",o.setAttribute("role","group"),o.setAttribute("aria-label",y("picker.zoomLevel"));let l={zones:y("picker.rungLabel.zones"),sections:y("picker.rungLabel.sections"),seats:y("picker.rungLabel.seats")},d={zones:y("picker.rungTip.zones"),sections:y("picker.rungTip.sections"),seats:y("picker.rungTip.seats")};o.innerHTML=n.map(h=>`<button type="button" data-rung="${h}" title="${d[h]}" aria-pressed="false">${l[h]}</button>`).join(""),o.querySelectorAll("button").forEach(h=>{h.addEventListener("click",()=>{let c=h.dataset.rung;this.controller.setRung(c),c==="seats"&&this.collapseSectionCard()})}),this.regions["top-center"].appendChild(o),this.rungsEl=o,this.syncRung()}if(this.controller.isMultiFloor()){let i=this.controller.getFloors(),s=document.createElement("div");s.className="sl-floors on";let r=document.createElement("select");r.setAttribute("aria-label",this.tf("picker.chooseLevel","Choose level"));let n=document.createElement("option");n.value="",n.textContent=this.tf("picker.allFloors","All floors"),r.appendChild(n);for(let d of i){let h=document.createElement("option");h.value=d.id,h.textContent=d.name,r.appendChild(h)}r.addEventListener("change",()=>{r.value===""?this.controller.setFloorOverview(!0):this.controller.setFloor(r.value),this.showSectionCard(null),this.syncFloors(),this.syncRung(),this.minimap?.refreshMinimap()}),s.appendChild(r);let o=document.createElement("button");o.type="button",o.className="sl-floor-info",o.textContent="i";let l=this.tf("picker.floorHelp","All floors shows the complete venue. Choose one level to inspect and select its seats.");o.setAttribute("aria-label",l),o.title=l,s.appendChild(o),this.regions["left-rail"].appendChild(s),this.floorsEl=s,this.syncFloors()}}syncRung(){if(!this.rungsEl)return;let e=this.controller.getRung();this.rungsEl.querySelectorAll("button").forEach(t=>{let i=t.dataset.rung===e;t.classList.toggle("on",i),t.setAttribute("aria-pressed",String(i))})}syncProjection(){this.projectionEl&&this.projectionEl.querySelectorAll("button").forEach(e=>{let t=e.dataset.view===this.buyerView;e.classList.toggle("on",t),e.setAttribute("aria-pressed",String(t))})}canOffer3d(){return this.opts.enable3D===!1||!this.controller.doc||!ct()?!1:this.allSeats().length<=this.max3dSeats()}max3dSeats(){let e=this.opts.max3DSeats;if(typeof e=="number"&&e>0)return e;let t=globalThis.navigator;return(t?.hardwareConcurrency??8)<=4||(t?.deviceMemory??8)<=4||(globalThis.matchMedia?.("(pointer: coarse)").matches??!1)?At/2:At}syncFloors(){if(!this.floorsEl)return;let e=this.controller.getActiveFloorId(),t=this.controller.isFloorOverview(),i=this.floorsEl.querySelector("select");i&&(i.value=t?"":e)}showSectionCard(e){if(this.lastSection=e,this.secCardEl?.remove(),this.secCardEl=null,!e){this.minimap?.refreshMinimap();return}this.secCardCollapsed=this.controller.getRung()==="seats",this.secCardShownAt=Date.now(),this.renderSectionCard(e),this.minimap?.refreshMinimap()}sectionNeighbours(e){let t=this.activeFloorObjects().filter(s=>s.type==="section"&&!this.controller.isSectionClosed(s.id)&&this.controller.getSectionSeatCount(s.id)>0);if(t.length<2)return null;let i=t.findIndex(s=>s.id===e);return i<0?null:{previous:t[(i-1+t.length)%t.length],next:t[(i+1)%t.length]}}wireSectionNavigation(e){e.querySelectorAll("[data-section-nav]").forEach(t=>{t.addEventListener("click",i=>{i.preventDefault(),i.stopPropagation();let s=t.dataset.sectionNav;s&&this.controller.focusSection(s)})})}renderSectionCard(e){if(!this.els.map)return;if(this.secCardEl?.remove(),this.root?.dataset.layout==="narrow"&&(this.hold||this.committedSelection().length||this.pendingGACount())){this.lastSection=null;return}let t=e.categories.length?e.categories.map(c=>{let p=this.controller.doc?.categories.find(f=>f.key===c.key);return p?this.catPriceRange(p):{min:c.priceMin,max:c.priceMax}}).filter(c=>c!=null):[{min:e.priceMin,max:e.priceMax}],i=Math.min(...t.map(c=>c.min)),s=Math.max(...t.map(c=>c.max)),r=i===s?this.money(i):`${this.money(i)}\u2013${this.money(s)}`,n=q("picker.seatsLeftInSection",e.seatsLeft),o=`<button type="button" class="sl-seccard-x" aria-label="${y("picker.closeSectionSummary")}">\u2715</button>`,l=bt(this.sectionNeighbours(e.id)),d=document.createElement("div");if(this.root?.dataset.layout==="narrow")d.className="sl-seccard strip on",d.setAttribute("role","status"),d.setAttribute("aria-label",y("picker.sectionSummaryAria",{label:e.label})),d.innerHTML=`<span class="sl-seccard-dot" style="background:${e.color}"></span><span class="sl-seccard-name">${e.label}</span><span class="sl-seccard-left">${n}</span>`+(e.categories.length?`<span class="sl-seccard-price">${r}</span>`:"")+l+o,this.wireSectionNavigation(d),d.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),(this.els.sheetHead??this.els.side??this.els.map).appendChild(d);else if(this.secCardCollapsed)d.className="sl-seccard mini on",d.setAttribute("role","button"),d.setAttribute("aria-label",y("picker.sectionSummaryAria",{label:e.label})),d.innerHTML=`<span class="sl-seccard-dot" style="background:${e.color}"></span><span class="sl-seccard-name">${e.label}</span><span class="sl-seccard-left">${n}</span>`+l+o,this.wireSectionNavigation(d),d.addEventListener("click",c=>{c.target.closest(".sl-seccard-x")||(this.secCardCollapsed=!1,this.secCardShownAt=Date.now(),this.renderSectionCard(e))}),d.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),(this.regions["top-center"]??this.els.map).appendChild(d);else{d.className="sl-seccard on",d.setAttribute("role","dialog"),d.setAttribute("aria-label",y("picker.sectionSummaryAria",{label:e.label}));let c=e.categories.map(p=>{let f=this.priceBandKeys!=null&&!this.priceBandKeys.has(p.key),m=this.controller.doc?.categories.find(w=>w.key===p.key),v=m?this.catPriceRange(m):{min:p.priceMin,max:p.priceMax},S=v&&v.min!==v.max?`${this.money(v.min)}\u2013${this.money(v.max)}`:this.money(v?.min??p.price);return`<span class="sl-seccard-mix-item${f?" sl-dim":""}"><span class="sl-seccard-mix-dot" style="background:${p.color}"></span>${p.label} <span class="sl-seccard-mix-price">${S}</span></span>`}).join("");d.innerHTML=`<div class="sl-seccard-head"><span class="sl-seccard-dot" style="background:${e.color}"></span><span class="sl-seccard-name">${e.label}</span>`+(e.categories.length?`<span class="sl-seccard-price">${r}</span>`:"")+o+`</div><div class="sl-seccard-zone">${e.zoneLabel?`${e.zoneLabel} \xB7 `:""}<span class="sl-seccard-left">${n}</span></div>`+(e.entrance?`<div class="sl-seccard-entrance">${y("picker.entrance")} ${String(e.entrance).replace(/[&<>"]/g,p=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[p])}</div>`:"")+(c?`<div class="sl-seccard-mix">${c}</div>`:"")+`<div class="sl-seccard-foot"><button type="button" class="sl-seccard-overview">\u2190 ${y("picker.overview")}</button>`+l+`<span class="sl-seccard-hint">${y("picker.tapSeatHint")}</span></div>`,this.wireSectionNavigation(d),d.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),d.querySelector(".sl-seccard-overview").addEventListener("click",()=>this.controller.overview()),(this.regions["top-center"]??this.els.map).appendChild(d)}this.secCardEl=d}collapseSectionCard(){!this.secCardEl||this.secCardCollapsed||!this.lastSection||this.root?.dataset.layout!=="narrow"&&(this.secCardCollapsed=!0,this.renderSectionCard(this.lastSection))}sectionCardOnView(){if(!(!this.secCardEl||this.secCardCollapsed||!this.lastSection)&&this.root?.dataset.layout!=="narrow"){if(this.controller.getRung()==="seats"){this.collapseSectionCard();return}if(Date.now()-this.secCardShownAt<1400){this.sectionCardCoverage()>.25&&this.collapseSectionCard();return}this.collapseSectionCard()}}sectionCardCoverage(){let e=this.secCardEl,t=this.lastSection;if(!e||!t||!this.els.map)return 0;let i=this.activeFloorObjects().find(w=>w.type==="section"&&w.id===t.id)?.outline;if(!i||i.length<3)return 0;let s=i.map(w=>this.controller.worldToScreen(w)),r=s.map(w=>w.x),n=s.map(w=>w.y),o=Math.min(...r),l=Math.min(...n),d=Math.max(...r)-o,h=Math.max(...n)-l;if(d<=0||h<=0)return 0;let c=this.els.map.getBoundingClientRect(),p=e.getBoundingClientRect(),f=p.left-c.left,m=p.top-c.top,v=Math.max(0,Math.min(f+p.width,o+d)-Math.max(f,o)),S=Math.max(0,Math.min(m+p.height,l+h)-Math.max(m,l));return v*S/(d*h)}announceSeat(e){if(!this.srEl)return;if(!e){this.srEl.textContent="";return}let t=this.controller.doc?.categories.find(p=>p.key===e.categoryKey),i=this.controller.getStatus(e.id)??"free",s=i==="free"?this.tf("picker.statusAvailable","available"):i==="held"?this.tf("picker.statusOnHold","on hold"):this.tf("picker.statusTaken2","taken"),r=t?this.catPriceRange(t):void 0,n=r?r.min===r.max?this.money(r.min):`${this.money(r.min)}\u2013${this.money(r.max)}`:void 0,o=this.controller.tableSelection(e.id),l=o??this.controller.seatDetails(e.id),d=this.rowTypeWord(l),h=l?.rowLabel??l?.displayLabel??e.displayLabel??e.label,c=o?`${d} ${h}, ${o.bookingMode==="variable"?y("picker.minToMaxGuests",{min:o.minOccupancy,max:o.maxOccupancy}):y("picker.capacityGuests",{count:o.capacity})}`:l?.objectType==="booth"?`${d} ${h}`:l?.objectType==="table"?`${d} ${h}, ${y("picker.seatNumberLower",{label:l.seatNumber??e.label})}`:y("picker.seatLabel",{label:l?.displayLabel??e.displayLabel??e.label});this.srEl.textContent=`${c}, ${t?.label??e.categoryKey}${n?`, ${n}`:""}, ${s}`}showTableDialog(e,t,i){this.dismissTableDialog(!1),this.tableDialog={...e},this.tableDialogHeld=t,this.tableDialogReturnFocus=i??document.activeElement;let s=d=>String(d??"").replace(/[&<>"']/g,h=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[h]),r=this.controller.doc?.categories.find(d=>d.key===e.categoryKey),n=e.bookingMode==="variable",o=this.rowTypeWord(e),l=document.createElement("div");l.className="sl-table-scrim",l.innerHTML=`<section class="sl-table-dialog" role="dialog" aria-modal="true" aria-labelledby="sl-table-title" aria-describedby="sl-table-copy"><div class="sl-table-head"><div class="sl-table-eyebrow">${s(n?y("picker.flexiblePartyTypeWord",{typeWord:o}):y("picker.wholeTypeWord",{typeWord:o}))}</div><h2 class="sl-table-title" id="sl-table-title">${s(e.displayLabel??e.label)}</h2><p class="sl-table-copy" id="sl-table-copy">${n?this.tf("picker.chooseGuestsCopy","Choose how many guests will sit together. This table is held exclusively for your party."):y("picker.allPlacesBookedTogether",{count:e.capacity})}</p></div><div class="sl-table-body"><div class="sl-table-summary"><span>${s(r?.label??e.categoryKey)}</span><b data-table-unit>${y("picker.perGuestPrice",{price:this.money(this.paidPrice(e.categoryKey,e.tierId??null,e.price))})}</b><span class="muted">${this.tf("picker.tableCapacity","Table capacity")}</span><span>${y("picker.guestsCount",{count:e.capacity})}</span><span class="muted">${this.tf("picker.total","Total")}</span><b data-table-total></b></div>`+(n?`<label class="sl-table-qtylabel" id="sl-table-qty-label">${this.tf("picker.numberOfGuests","Number of guests")}</label><div class="sl-table-stepper" role="group" aria-labelledby="sl-table-qty-label"><button type="button" data-table-step="-1" aria-label="${this.tf("picker.fewerGuests","Fewer guests")}">\u2212</button><output aria-live="polite" data-table-qty>${e.quantity}</output><button type="button" data-table-step="1" aria-label="${this.tf("picker.moreGuests","More guests")}">+</button></div><div class="sl-table-range">${y("picker.chooseMinMaxGuests",{min:e.minOccupancy,max:e.maxOccupancy})}</div>`:`<input type="hidden" data-table-qty value="${e.capacity}">`)+`<div class="sl-table-actions"><button type="button" class="sl-table-cancel">${y("common.cancel")}</button><button type="button" class="sl-table-confirm">${t?this.tf("picker.updateTable","Update table"):n?this.tf("picker.selectTable","Select table"):this.tf("picker.selectWholeTable","Select whole table")}</button></div></div></section>`,this.root.appendChild(l),this.tableDialogEl=l,this.renderTableDialogState(),l.querySelectorAll("[data-table-step]").forEach(d=>{d.addEventListener("click",()=>{if(!this.tableDialog)return;let h=Math.max(this.tableDialog.minOccupancy,Math.min(this.tableDialog.maxOccupancy,this.tableDialog.quantity+Number(d.dataset.tableStep)));this.tableDialog={...this.tableDialog,quantity:h},this.renderTableDialogState()})}),l.querySelector(".sl-table-cancel").addEventListener("click",()=>this.cancelTableDialog()),l.querySelector(".sl-table-confirm").addEventListener("click",()=>{this.confirmTableDialog()}),l.addEventListener("mousedown",d=>{d.target===l&&this.cancelTableDialog()}),l.addEventListener("keydown",d=>{if(d.key!=="Tab")return;let h=[...l.querySelectorAll('button:not(:disabled),[tabindex]:not([tabindex="-1"])')];if(!h.length)return;let c=h[0],p=h[h.length-1];d.shiftKey&&document.activeElement===c?(d.preventDefault(),p.focus()):!d.shiftKey&&document.activeElement===p&&(d.preventDefault(),c.focus())}),requestAnimationFrame(()=>l.querySelector(n?'[data-table-step="-1"]':".sl-table-confirm")?.focus())}renderTableDialogState(){let e=this.tableDialog,t=this.tableDialogEl;if(!e||!t)return;let i=t.querySelector("output[data-table-qty]");i&&(i.value=String(e.quantity));let s=t.querySelector("input[data-table-qty]");s&&(s.value=String(e.quantity)),t.querySelectorAll("[data-table-step]").forEach(o=>{let l=Number(o.dataset.tableStep);o.disabled=l<0?e.quantity<=e.minOccupancy:e.quantity>=e.maxOccupancy});let r=this.paidPrice(e.categoryKey,e.tierId??null,e.price),n=t.querySelector("[data-table-total]");n&&(n.textContent=this.money(r*e.quantity))}async confirmTableDialog(){let e=this.tableDialog,t=this.tableDialogHeld;if(!e)return;let i=this.tableDialogEl?.querySelector(".sl-table-confirm");if(i&&(i.disabled=!0,i.textContent=t?this.tf("picker.updatingEllipsis","Updating\u2026"):this.tf("picker.selectingEllipsis","Selecting\u2026")),t){try{let s=await this.controller.replaceTableQuantity(e.label,e.quantity,this.opts.holdTtlMs);if(!s){this.toast(this.tf("picker.guestCountCouldNotBeSecured","That guest count could not be secured. Your current table hold is unchanged."),"warning"),this.renderTableDialogState(),i&&(i.disabled=!1,i.textContent=this.tf("picker.updateTable","Update table"));return}this.hold={holdId:s.holdId,expiresAt:s.expiresAt,seats:s.seats,items:s.items},this.startHoldTimer(s.expiresAt),this.dismissTableDialog(),this.syncTray(),this.emitHoldChange(),this.toast(y("picker.tableUpdatedForGuests",{label:e.label,count:e.quantity}),"success")}catch(s){this.opts.onError?.(s),this.toast(this.tf("picker.guestCountNoLongerAvailable","That guest count is no longer available. Your current hold is unchanged."),"error"),i&&(i.disabled=!1,i.textContent=this.tf("picker.updateTable","Update table"))}return}if(!this.controller.setTableQuantity(e.label,e.quantity)){i&&(i.disabled=!1,i.textContent=e.bookingMode==="variable"?this.tf("picker.selectTable","Select table"):this.tf("picker.selectWholeTable","Select whole table"));return}this.dismissTableDialog(),this.collapseSectionCard(),this.syncTray()}cancelTableDialog(){let e=this.tableDialog,t=this.tableDialogHeld;this.dismissTableDialog(),e&&!t&&this.controller.deselect(e.physicalSeatIds)}dismissTableDialog(e=!0){let t=this.tableDialogReturnFocus;this.tableDialogEl?.remove(),this.tableDialogEl=null,this.tableDialog=null,this.tableDialogHeld=!1,this.tableDialogReturnFocus=null,e&&requestAnimationFrame(()=>(t?.isConnected?t:this.root)?.focus())}showConfirm(e){let t=this.confirmSeat?.id;this.confirmEl?.remove(),this.confirmEl=null,this.confirmSeat=e,this.root?.setAttribute("data-confirming","true"),this.els.side?.toggleAttribute("inert",!0),Object.values(this.regions).forEach(x=>x.toggleAttribute("inert",!0)),this.controller.setSelectionFocus(e.id),t&&t!==e.id&&this.controller.deselect([t]),this.tipEl&&(this.tipEl.style.display="none");let i=this.controller.seatDetails(e.id),s=this.controller.doc?.categories.find(x=>x.key===e.categoryKey),r=i?.price??(s?.tiers?.length?s.tiers[0].price:s?.price),n=r!=null?this.paidPrice(e.categoryKey,i?.tierId??s?.tiers?.[0]?.id??null,r):void 0,o=x=>String(x??"\u2014").replace(/[&<>"]/g,g=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[g]),l=[i?.sectionLabel?`<div class="sl-confirm-field"><span class="sl-confirm-key">${this.tf("picker.section","Section")}</span><span class="sl-confirm-value">${o(i.sectionLabel)}</span></div>`:"",i?.rowLabel||i?.objectType==="booth"?`<div class="sl-confirm-field"><span class="sl-confirm-key">${o(this.rowTypeWord(i))}</span><span class="sl-confirm-value">${o(G(i)??i?.displayLabel??e.displayLabel??e.label)}</span></div>`:"",i?.objectType!=="booth"?`<div class="sl-confirm-field"><span class="sl-confirm-key">${this.tf("picker.seat","Seat")}</span><span class="sl-confirm-value">${o(i?.seatNumber??i?.displayLabel??e.displayLabel??e.label)}</span></div>`:""].filter(Boolean).join(""),d=i?.tiers??s?.tiers??[],h=i?.tierId??d[0]?.id,c=x=>x.buyerMessage?.trim()||(x.restriction==="companion"?this.tf("picker.companionRequiresWheelchair","Requires the adjacent wheelchair place"):void 0),p=d.length>1?`<fieldset class="sl-confirm-tiers"><legend>${this.tf("picker.ticketType","Ticket type")}</legend>`+d.map(x=>{let g=c(x);return`<button type="button" class="sl-confirm-tier" data-confirm-tier="${o(x.id)}" aria-pressed="${x.id===h}"><span class="sl-confirm-tier-copy"><span class="sl-confirm-tier-name">${o(x.name)}</span>`+(g?`<small class="sl-confirm-tier-note">${o(g)}</small>`:"")+`</span><span class="sl-confirm-tier-price">${this.money(this.paidPrice(e.categoryKey,x.id,x.price))}</span></button>`}).join("")+"</fieldset>":d[0]&&c(d[0])?`<p class="sl-confirm-tier-note">${o(c(d[0]))}</p>`:"",f=this.buyerView==="venue3d",m=document.createElement("div");m.className="sl-confirm",m.setAttribute("role","dialog"),m.setAttribute("aria-label",y("picker.confirmSeatLabel",{label:e.label}));let v=s?.color??"#6e7bff",S=Oe(v,this.cssVar("--sl-surface")||"#1a2234",.76)??v;m.style.setProperty("--sl-cat",v),m.style.setProperty("--sl-cat-ink",pe(S,"#172033","#ffffff")),m.innerHTML='<div class="sl-confirm-grid">'+l+`</div><div class="sl-confirm-cat"><span class="sl-dot" style="background:${s?.color??"#6e7bff"}"></span><span class="sl-confirm-cat-name">${o(i?.categoryLabel??s?.label??e.categoryKey)}</span>`+(n!=null?`<span class="sl-confirm-price">${this.money(n)}</span>`:"")+'</div><div class="sl-confirm-body">'+p+ft(i?.wheelchairSpaceType)+mt(e.commercial)+(this.seatViewEnabled()&&this.buyerView!=="venue3d"?this.confirmThumbHtml(e):"")+(f?`${gt(e,`${i?.displayLabel??e.displayLabel??e.label} \xB7 ${n==null?this.tf("picker.priceNotSupplied","Price not supplied"):this.money(n)}`,f)}<div class="sl-confirm-inspect-row">${vt(e,f?this.view3dCompareSeatIds:null)}${ze(this.canOffer3d(),f)}</div>`:ze(this.canOffer3d(),f))+`<div class="sl-confirm-row"><button type="button" class="sl-confirm-cancel">${y("common.cancel")}</button><button type="button" class="sl-confirm-add"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5 12.5l4 4L19 7"/></svg>${this.tf("picker.select","Select")}</button></div></div>`,this.els.map.appendChild(m),this.confirmEl=m;let w=m.querySelector(".sl-confirm-thumb");if(w&&e.viewUrl){let x=e.viewMeta?.previewUrl??e.viewUrl;this.buyerAssetUrls.resolve(x).then(g=>{g&&m.isConnected&&this.confirmEl===m&&(w.src=g)}).catch(g=>this.opts.onError?.(g))}this.reanchorConfirm(),m.querySelector(".sl-confirm-view")?.addEventListener("click",()=>{this.openSeatView(e)}),m.querySelector(".sl-confirm-confidence")?.addEventListener("click",x=>{this.openSeatConfidencePassport(e,x.currentTarget instanceof HTMLElement?x.currentTarget:null)}),m.querySelector(".sl-confirm-compare")?.addEventListener("click",()=>this.saveView3dComparisonSeat(e)),m.querySelectorAll("[data-confirm-tier]").forEach(x=>{x.addEventListener("click",()=>{let g=x.dataset.confirmTier,E=d.find(b=>b.id===g);if(!E)return;this.controller.setSeatTier(e.id,E.id),m.querySelectorAll("[data-confirm-tier]").forEach(b=>{b.setAttribute("aria-pressed",String(b===x))});let u=m.querySelector(".sl-confirm-price");u&&(u.textContent=this.money(this.paidPrice(e.categoryKey,E.id,E.price))),this.reanchorConfirm()})}),m.querySelector(".sl-confirm-3d")?.addEventListener("click",()=>{this.buyerView==="venue3d"?(this.dismissConfirm(),this.view3dHandle?.flyToSeat(e.id)):(this.view3dReturnSeat=e,this.dismissConfirm(),this.enter3d(e.id))}),m.querySelector(".sl-confirm-add").addEventListener("click",()=>this.commitConfirm()),m.querySelector(".sl-confirm-cancel").addEventListener("click",()=>this.cancelConfirm()),requestAnimationFrame(()=>m.querySelector(".sl-confirm-add")?.focus())}reanchorConfirm(){if(!this.confirmEl||!this.confirmSeat||this.root?.dataset.view3d==="on")return;let e=this.controller.worldToScreen({x:this.confirmSeat.x,y:this.confirmSeat.y});if(this.root?.dataset.layout==="narrow")return;let t=this.els.map.clientWidth,i=this.els.map.clientHeight,s=this.confirmEl.offsetWidth||276,r=this.confirmEl.offsetHeight||230,n=s/2+12,o=Math.max(n,Math.min(t-n,e.x)),l=e.y+r+24<=i,d=e.y<r+24&&l;this.confirmEl.dataset.placement=d?"below":"above",this.confirmEl.style.left=`${o}px`,this.confirmEl.style.top=`${Math.max(8,Math.min(i-8,e.y))}px`}dismissConfirm(){this.confirmEl?.remove(),this.confirmEl=null,this.confirmSeat=null,this.root?.removeAttribute("data-confirming"),Object.values(this.regions).forEach(e=>e.toggleAttribute("inert",!1)),this.applyPanelCollapsed(),this.controller.setSelectionFocus(null)}commitConfirm(){this.confirmSeat&&(this.dismissConfirm(),this.collapseSectionCard(),this.syncTray(),this.syncSelectionTo3d())}cancelConfirm(){let e=this.confirmSeat;e&&(this.controller.deselect([e.id]),this.confirmSeat&&this.dismissConfirm(),this.syncSelectionTo3d(),this.root?.focus({preventScroll:!0}))}closeConfirm(){this.dismissConfirm()}seatViewEnabled(){return this.opts.seatView!==!1}allSeats(){if(!this.allSeatsCache){let e=this.controller.doc;this.allSeatsCache=e?Ve(e):[]}return this.allSeatsCache}async openSeatView(e){if(!this.root||!this.seatViewEnabled())return;let t=++this.seatViewGen,i=this.controller.doc,s=this.controller.getActiveFloorId(),r=e.focalPoint??i?.floors?.find(c=>c.id===s)?.focalPoint??i?.focalPoint??{x:0,y:0},n,o,l=!1;if(e.viewUrl){let c,p=null;try{let m=e.viewMeta?.previewUrl;m&&m!==e.viewUrl?(p=await this.buyerAssetUrls.resolve(m),c=e.viewUrl):c=await this.buyerAssetUrls.resolve(e.viewUrl)}catch(m){t===this.seatViewGen&&this.opts.onError?.(m);return}if(t!==this.seatViewGen||!c||e.viewMeta?.previewUrl&&e.viewMeta.previewUrl!==e.viewUrl&&!p||!this.root||!this.seatViewEnabled())return;let f={url:c,...p?{previewUrl:p}:{},...e.viewMeta?.sourceWidth!==void 0?{sourceWidth:e.viewMeta.sourceWidth}:{},...e.viewMeta?.sourceHeight!==void 0?{sourceHeight:e.viewMeta.sourceHeight}:{},...e.viewMeta?.previewWidth!==void 0?{previewWidth:e.viewMeta.previewWidth}:{},...e.viewMeta?.previewHeight!==void 0?{previewHeight:e.viewMeta.previewHeight}:{},...e.viewMeta?.coverage?{coverage:e.viewMeta.coverage}:{},...e.viewMeta?.capturedAt?{capturedAt:e.viewMeta.capturedAt}:{},...e.viewMeta?.sourceLabel?{sourceLabel:e.viewMeta.sourceLabel}:{}};n=f,o=Tt(f),l=Bi(f)}else{let c;try{let{generateSeatPanorama:p}=await pt();c=p(e,r,this.allSeats())}catch(p){t===this.seatViewGen&&this.opts.onError?.(p);return}if(t!==this.seatViewGen||!this.root||!this.seatViewEnabled())return;n={url:c.url,generated:!0},o=y("picker.illustrationCaption",{m:c.distanceM})}this.closeSeatView(!1);let d=y("picker.viewFromSeat",{label:e.label}),h=at({root:this.root,source:n,caption:o,real:l,closeLabel:this.tf("picker.close","Close"),dragHint:this.tf("picker.dragToLookAround","Drag to look around \xB7 scroll to zoom"),viewFromSeatLabel:d,real360Label:y("picker.real360"),previewLabel:y("picker.preview"),resolveAsset:c=>this.buyerAssetUrls.resolve(c),onClose:()=>this.closeSeatView()});this.viewEl=h.element,this.viewCleanup=()=>h.dispose()}closeSeatView(e=!0){e&&(this.seatViewGen+=1),this.viewCleanup?.(),this.viewCleanup=null,this.viewEl?.remove(),this.viewEl=null}money(e){let t=this.opts.pricing?.formatter;return t?t(e,this.currency):Ri(e,this.currency,{locale:this.opts.locale,fallback:(i,s)=>`${i} ${s}`})}scheduleOfferBoundary(e){if(this.offerBoundaryTimer&&clearTimeout(this.offerBoundaryTimer),this.offerBoundaryTimer=null,!this.api.availability||this.destroyed)return;let t=Date.now(),i=rt(e,t);if(i==null)return;let s=6*36e5,r=Math.min(Math.max(i-t+1e3,1e3),s);this.offerBoundaryTimer=setTimeout(()=>{this.offerBoundaryTimer=null,!document.hidden&&this.refreshOfferAvailability(!1)},r)}scheduleOfferRefresh(e){!this.api.availability||this.destroyed||(this.offerRefreshTimer&&clearTimeout(this.offerRefreshTimer),this.offerRefreshTimer=setTimeout(()=>{this.offerRefreshTimer=null,this.refreshOfferAvailability(e)},e?180:0))}async refreshOfferAvailability(e){if(!(!this.api.availability||this.destroyed))try{let t=await this.api.availability(this.opts.event,e);if(this.destroyed)return;let i=Pe(t);if(!i)return;this.offerAvailability=i,this.scheduleOfferBoundary(i);let s=He(i),r={...this.hostPricing?.prices??{},...s},n=Object.keys(r).length>0||this.hostPricing?.formatter?{prices:r,...this.hostPricing?.formatter?{formatter:this.hostPricing.formatter}:{}}:void 0;this.setPricing(n),this.syncOffer(),this.opts.onOfferAvailabilityChange?.(i)}catch{!this.destroyed&&!this.offerBoundaryTimer&&!document.hidden&&(this.offerBoundaryTimer=setTimeout(()=>{this.offerBoundaryTimer=null,!document.hidden&&this.refreshOfferAvailability(!1)},3e4))}}offerPrice(e){return e?this.offerAvailability?.prices.find(t=>t.categoryKey===e)??null:null}syncOffer(){let e=this.els.offer;if(!e)return;let t=this.offerAvailability,i=t?.release??null,s=i?null:t?.upcoming??null;if(!t||t.state==="closed"||t.state==="sold-out"||!i&&!s){e.classList.remove("has"),e.replaceChildren();return}let r=i??s,n=document.createElement("div");n.className="sl-offer-main";let o=document.createElement("div");o.className="sl-offer-copy";let l=document.createElement("span");l.className="sl-offer-kicker",l.textContent=i?this.tf("picker.currentTicketOffer","Current ticket offer"):this.tf("picker.upcomingTicketOffer","Upcoming ticket offer");let d=document.createElement("strong");d.className="sl-offer-name",d.textContent=r.name||(i?this.tf("picker.currentOffer","Current offer"):this.tf("picker.scheduledOffer","Scheduled offer"));let h=document.createElement("span");h.className="sl-offer-line";let c=[];i&&t.fromPrice!=null&&c.push(this.money(t.fromPrice/100)),i&&r.remaining!=null&&c.push(y("picker.offerRemainingAvailable",{count:r.remaining})),i&&r.endsAt!=null&&c.push(y("picker.offerUntil",{time:we(r.endsAt,this.eventTimezone,this.opts.locale)})),s?.startsAt!=null&&c.push(y("picker.offerStarts",{time:we(s.startsAt,this.eventTimezone,this.opts.locale)})),h.textContent=c.join(" \xB7 "),o.append(l,d,h);let p=document.createElement("details");p.className="sl-offer-info";let f=document.createElement("summary");f.setAttribute("aria-label",y("picker.howOfferWorks",{name:d.textContent??""})),f.textContent="i";let m=document.createElement("div");m.className="sl-offer-detail",m.textContent=i?this.tf("picker.offerDetailActive","This price applies automatically to eligible seats. Tickets in active carts temporarily reduce the available quantity; released or expired holds return it. When the offer ends, the next matching offer or normal ticket price takes over."):this.tf("picker.offerDetailUpcoming","Tickets are available at their normal price now. This scheduled offer will apply automatically to eligible seats when it starts."),p.append(f,m),n.append(o,p),e.replaceChildren(n),e.classList.add("has")}paidPrice(e,t,i){let s=e?this.opts.pricing?.prices?.[e]:void 0;return s===void 0?i:typeof s=="number"?s:t&&s.tiers?.[t]!==void 0?s.tiers[t]:s.base??i}syncPrices(){let e=this.controller.doc;if(!e||!this.els.prices)return;let t=this.controller.categoryAvailability(),i=e.categories.filter(l=>!l.notForSale);this.narrateAvailability(i,t),this.syncSoldout(i,t);let s=5,r=i.length-s,n=r>1&&!this.pricesExpanded,o=n?i.slice(0,s):i;this.els.prices.classList.toggle("sl-expanded",r>1&&this.pricesExpanded),this.els.prices.innerHTML=o.map(l=>{let d=this.catPrice(l),h=this.catPriceRange(l),c=this.offerPrice(l.key),p=c?.previousPrice!=null&&c.previousPrice>c.price?c.previousPrice:null,f=this.focusedCatKey===l.key;return`<div class="sl-price-row${this.priceBandKeys!=null&&!this.priceBandKeys.has(l.key)?" sl-dim":""}${f?" sl-active":""}" data-cat="${O(l.key)}" role="button" tabindex="0" aria-pressed="${f}" title="${O(f?this.tf("picker.showAllSeats","Show all seats"):y("picker.showLabelSeatsOnMap",{label:l.label}))}"><span class="sl-dot" style="background:${O(l.color)}"></span><span class="sl-price-label">${O(l.label)}`+(c?.offerName?`<small class="sl-price-offer">${O(c.offerName)}</small>`:"")+`</span><span class="sl-price-left">${q("picker.leftCount",t[l.key]??0)}</span>`+(p!=null?`<span class="sl-price-was">${O(this.money(p))}</span>`:"")+(h!=null?`<span class="sl-price-amt">${h.min===h.max?this.money(h.min):`${this.money(h.min)}\u2013${this.money(h.max)}`}</span>`:d!=null?`<span class="sl-price-amt">${this.money(d)}</span>`:"")+"</div>"}).join("")+(r>1?`<button type="button" class="sl-price-more" aria-expanded="${!n}">`+(n?y("picker.showAllTicketTypes",{count:i.length}):this.tf("picker.showFewer","Show fewer"))+"</button>":"")+`<div class="sl-status-key" aria-label="${this.tf("picker.seatStatusLegend","Seat status legend")}"><span class="sl-status-item"><i class="sl-status-icon" aria-hidden="true"><svg viewBox="0 0 24 24"><rect x="5" y="10" width="14" height="10" rx="2"/><path d="M8 10V7a4 4 0 0 1 8 0v3"/></svg></i>${this.tf("picker.temporarilyHeld","Temporarily held")}</span><span class="sl-status-item"><i class="sl-status-icon sold" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M7 17L17 7"/></svg></i>${this.tf("picker.sold","Sold")}</span></div>`,this.els.prices.querySelectorAll(".sl-price-row").forEach(l=>{l.addEventListener("mouseenter",()=>this.controller.getRenderer()?.setCategoryHighlight?.(l.dataset.cat??null)),l.addEventListener("mouseleave",()=>this.controller.getRenderer()?.setCategoryHighlight?.(null));let d=()=>this.focusCategory(l.dataset.cat??"");l.addEventListener("click",d),l.addEventListener("keydown",h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),d())})}),this.els.prices.querySelector(".sl-price-more")?.addEventListener("click",()=>{this.pricesExpanded=!this.pricesExpanded,this.syncPrices()})}focusCategory(e){if(!e)return;let t=this.focusedCatKey===e?null:e;this.focusedCatKey=t,this.priceBandKeys=t?new Set([t]):null;let i=this.els.pricesSec?.querySelector(".sl-price-select");i&&(i.value="all"),this.controller.setCategoryFilter(t?[t]:null),this.controller.focusCategoryFilter(t?[t]:null),this.pushAvailabilityTo3d(),this.syncFloors(),this.syncRung(),this.minimap?.refreshMinimap(),this.syncPrices(),this.lastSection&&this.showSectionCard(this.lastSection)}narrateAvailability(e,t){let i=this.els.liveText,s=this.lastCatAvail;this.lastCatAvail={...t};let r=this.controller.getActiveFloorId();if(r!==this.lastAvailFloorId&&(this.lastAvailFloorId=r,this.availQuietUntil=performance.now()+2e3),!(!i||!s||performance.now()<this.availQuietUntil))for(let n of e){let o=s[n.key],l=t[n.key]??0;if(o===void 0||l>=o)continue;let d=o-l;i.textContent=q("picker.seatsJustTakenInCategory",d,{label:n.label,left:l}),this.els.live?.classList.remove("on"),this.els.live?.offsetWidth,this.els.live?.classList.add("on"),this.liveTimer&&clearTimeout(this.liveTimer),this.liveTimer=setTimeout(()=>this.els.live?.classList.remove("on"),8e3);return}}evictTakenSelections(){let e=new Set([...this.controller.currentHold()?.labels??[],...this.holdingLabels]),t=this.controller.getSelection().filter(i=>!e.has(i.label)&&(this.controller.getStatus(i.id)??"free")!=="free");t.length&&(this.controller.deselect(t.map(i=>i.id)),this.toast(y("picker.seatJustTakenByAnother",{label:t[0].label}),"error"))}syncTray(){if(!this.els.tray)return;this.updateSelectionCapacity();let e=this.committedSelection();this.root?.dataset.layout==="narrow"&&this.secCardEl&&(this.hold||e.length||this.pendingGACount())&&(this.secCardEl.remove(),this.secCardEl=null,this.lastSection=null);let t=this.controller.getGAAreas(),i=this.hold?.items??[],s=[],r=new Set;if(this.salesClosed&&!e.length&&!i.length){let u=this.eventWhenText?`<span class="when">${String(this.eventWhenText).replace(/[&<>"]/g,b=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[b])}</span>`:"";s.push(`<div class="sl-closed-note" role="status"><b>${this.tf("picker.salesClosedPill","Sales are closed")}</b><span>${this.tf("picker.salesClosedCopy","Ticket sales for this event have ended.")}${u}</span></div>`)}else!e.length&&!i.length&&!t.length?s.push(`<div class="sl-tray-hint">${this.tf("picker.trayHintTapOrBest","Tap a seat on the map, or let us pick the best available for you.")}</div>`):!e.length&&!i.length&&s.push(`<div class="sl-tray-hint">${this.tf("picker.trayHintTapOrStanding","Tap a seat on the map \u2014 or grab standing tickets below.")}</div>`);let n=!e.length&&!i.length&&!this.pendingGACount();if(n&&(this.baReopen=!1),!this.salesClosed&&!this.hold&&(n||this.baReopen||this.bestAvailableBusy||this.bestAvailableConfirm)){let u=(this.controller.doc?.categories??[]).filter(T=>!T.notForSale),b=this.controller.getBestAvailableZones();this.baZone&&!b.some(T=>T.id===this.baZone)&&(this.baZone=""),s.push(this.bestAvailableConfirm?`<div class="sl-ba" role="alert"><div class="sl-ba-title"><span class="spark" aria-hidden="true">\u2726</span>${this.tf("picker.replaceCurrentChoices","Replace your current choices?")}</div><div class="sl-ba-replace"><b>${y("picker.willFindSeatsTogether",{count:this.baQty})}</b><span>${this.tf("picker.manualTicketsRemovedNote","Your manually selected tickets will be removed only after a new group is secured.")}</span></div><div class="sl-ba-actions"><button type="button" data-ba-cancel>${this.tf("picker.keepMine","Keep mine")}</button><button type="button" class="replace" data-ba-replace>${this.tf("picker.findNewSeats","Find new seats")}</button></div></div>`:`<div class="sl-ba"><div class="sl-ba-title"><span class="spark" aria-hidden="true">\u2726</span>${this.tf("picker.findBestSeatsTogether","Find the best seats together")}</div><div class="sl-ba-copy"><span class="wide">${this.tf("picker.willChooseClosestGroup","We\u2019ll choose the closest available group for you.")}</span><span class="narrow">${this.tf("picker.closestGroupChosenInstantly","Closest available group, chosen instantly.")}</span></div>`+(this.controller.hasPremiumSeats()?`<button type="button" class="sl-ba-premium${this.baPremium?" on":""}" data-ba-premium aria-pressed="${this.baPremium?"true":"false"}"><span class="star" aria-hidden="true">\u2605</span>${this.tf("picker.bestSeatsPremium","Best seats")}</button>`:"")+(u.length>1?`<select aria-label="${this.tf("picker.preferredTicketType","Preferred ticket type")}" data-ba-cat><option value="">${this.tf("picker.anyTicketType","Any ticket type")}</option>`+u.map(T=>`<option value="${T.key}"${this.baCat===T.key?" selected":""}>${T.label}</option>`).join("")+"</select>":'<span aria-hidden="true"></span>')+(b.length?`<select aria-label="${this.tf("picker.preferredVenueZone","Preferred venue zone")}" data-ba-zone><option value="">${this.tf("picker.anyVenueZone","Any venue zone")}</option>`+b.map(T=>`<option value="${O(T.id)}"${this.baZone===T.id?" selected":""}>${O(T.label)}</option>`).join("")+"</select>":"")+`<div class="sl-ba-qty"><button type="button" data-ba="-1" aria-label="${this.tf("picker.fewerSeats","Fewer seats")}">\u2212</button><span>${this.baQty}</span><button type="button" data-ba="1" aria-label="${this.tf("picker.moreSeats","More seats")}">+</button></div><button type="button" class="sl-ba-go${this.bestAvailableBusy?" sl-busy":""}"${this.bestAvailableBusy?" disabled":""}>`+(this.bestAvailableBusy?`<span class="sl-ba-spin" aria-hidden="true"></span>${this.tf("picker.findingBestSeats","Finding the best seats\u2026")}`:q("picker.findBestSeatsCount",this.baQty))+"</button>"+(this.baReopen?`<button type="button" class="sl-ba-back" data-ba-close>${this.tf("picker.keepMyPicks","Keep my picks")}</button>`:"")+"</div>")}let o=(u,b,T,C=1,P,A)=>wt({d:u?this.controller.seatDetails(u):null,area:T==="ga"?t.find(L=>L.id===P):void 0,label:b,objectType:T,quantity:C,identity:A}),l=kt;for(let u of i){let b=`held:${u.label}`;r.add(b);let T=this.controller.doc?.categories.find(D=>D.key===u.categoryKey),C=u.tierId?T?.tiers?.find(D=>D.id===u.tierId)?.name:void 0,P=u.objectType!=="ga"?this.controller.seatByLabel(u.label):null,A=u.objectType==="table"?this.controller.tableSelection(u.label):null,L=this.seatViewEnabled()&&!!P&&u.objectType!=="table";s.push(`<div class="sl-chip sl-held${this.lastTrayKeys.has(b)?"":" sl-enter"}" data-key="${b}" data-held="${encodeURIComponent(u.label)}"${P?` data-locate="${P.id}"`:""}><div class="sl-chip-main">`+o(P?.id??null,u.label,u.objectType,u.quantity??1,u.objectId,A??void 0)+`<div class="sl-chip-sub"><span class="sl-ticket-state held" aria-label="${this.tf("picker.heldForYou","Held for you")}" title="${this.tf("picker.heldForYou","Held for you")}"><svg viewBox="0 0 24 24"><rect x="5" y="10" width="14" height="10" rx="2"/><path d="M8 10V7a4 4 0 0 1 8 0v3"/></svg></span><span class="cat">${T?.label??u.categoryKey}${C?` \xB7 ${C}`:""}</span>`+(A?.bookingMode==="variable"?`<button type="button" class="sl-table-edit" data-table-edit="${encodeURIComponent(u.label)}">${y("picker.guestsCountEdit",{count:u.quantity??1})}</button>`:"")+Be(P?.wheelchairSpaceType)+Ie(P?.commercial)+`<span class="amt">${this.money(this.paidPrice(u.categoryKey,u.tierId,u.unitPrice)*(u.quantity??1))}</span></div></div>`+l(y("picker.removeHeldTicketLabel",{label:u.label}),L?u.label:null)+"</div>")}let d=new Set(i.map(u=>u.label)),h=this.seatViewEnabled();for(let u of e.filter(b=>!d.has(b.label))){let b=`seat:${u.id}`;r.add(b);let T=this.controller.doc?.categories.find(L=>L.key===u.categoryKey),C=u.tiers&&u.tiers.length?`<select class="tier" data-tier="${u.id}" aria-label="${y("picker.ticketTierFor",{label:u.label})}">`+u.tiers.map(L=>`<option value="${L.id}"${L.id===u.tierId?" selected":""}>${L.name} \xB7 ${this.money(this.paidPrice(u.categoryKey,L.id,L.price))}</option>`).join("")+"</select>":"",P=u.tiers?.find(L=>L.id===u.tierId)??u.tiers?.[0],A=P?.buyerMessage?.trim()||(P?.restriction==="companion"?this.tf("picker.companionRequiresWheelchair","Requires the adjacent wheelchair place"):"");s.push(`<div class="sl-chip${this.lastTrayKeys.has(b)?"":" sl-enter"}" data-key="${b}" data-seat="${u.id}" data-locate="${u.id}"><div class="sl-chip-main">`+o(u.id,u.label,u.objectType,u.quantity??1,u.objectId,u)+`<div class="sl-chip-sub"><span class="sl-ticket-state" aria-label="${this.tf("picker.selected","Selected")}" title="${this.tf("picker.selected","Selected")}"><svg viewBox="0 0 24 24"><path d="M5 12l4 4L19 6"/></svg></span><span class="cat">${T?.label??u.categoryKey}</span>`+(u.objectType==="table"&&u.bookingMode==="variable"?`<button type="button" class="sl-table-edit" data-table-edit="${encodeURIComponent(u.label)}">${y("picker.guestsCountEdit",{count:u.quantity??1})}</button>`:"")+`${Be(u.wheelchairSpaceType)}${Ie(u.commercial)}${C}<span class="amt">${this.money(this.paidPrice(u.categoryKey,u.tierId??null,u.price)*(u.quantity??1))}</span></div>`+(A?`<small class="sl-tier-note">${O(A)}</small>`:"")+"</div>"+l(y("picker.removeSeatLabel",{label:u.label}),h&&u.objectType!=="table"?u.label:null)+"</div>")}for(let u of t){let b=this.gaQty.get(u.id)??0;s.push(`<div class="sl-ga" data-ga="${u.id}"><div class="sl-ga-info"><div class="sl-ga-name">${u.displayLabel??u.label}</div><div class="sl-ga-sub">${u.displayType??this.tf("picker.generalAdmission","General admission")} \xB7 ${this.money(this.paidPrice(u.categoryKey,null,u.price))} \xB7 ${q("picker.leftCount",u.available)}</div></div><div class="sl-ga-qty"><button type="button" data-d="-1" aria-label="${this.tf("picker.fewer","Fewer")}">\u2212</button><span>${b}</span><button type="button" data-d="1" aria-label="${this.tf("picker.more","More")}">+</button></div></div>`)}!this.salesClosed&&!this.hold&&!n&&!this.baReopen&&!this.bestAvailableBusy&&!this.bestAvailableConfirm&&s.push(`<button type="button" class="sl-ba-reopen" data-ba-reopen><span aria-hidden="true">\u2726</span>${this.tf("picker.findTogetherInstead","Find seats together instead")}</button>`),this.els.tray.innerHTML=s.join(""),this.lastTrayKeys=r,this.els.tray.querySelectorAll("[data-ba]").forEach(u=>{u.addEventListener("click",()=>{this.baQty=Math.max(1,Math.min(this.maxTickets,this.baQty+Number(u.dataset.ba))),this.syncTray()})}),this.els.tray.querySelector("[data-ba-cat]")?.addEventListener("change",u=>{this.baCat=u.target.value}),this.els.tray.querySelector("[data-ba-zone]")?.addEventListener("change",u=>{this.baZone=u.target.value}),this.els.tray.querySelector("[data-ba-premium]")?.addEventListener("click",()=>{this.baPremium=!this.baPremium,this.syncTray()}),this.els.tray.querySelector(".sl-ba-go")?.addEventListener("click",()=>{if(this.pendingSelectionCount()>0){this.bestAvailableConfirm=!0,this.syncTray(),this.els.tray.querySelector("[data-ba-replace]")?.focus();return}this.bestAvailable(this.baQty,this.baCat||void 0,{preferPremium:this.baPremium,zoneId:this.baZone||void 0})}),this.els.tray.querySelector("[data-ba-cancel]")?.addEventListener("click",()=>{this.bestAvailableConfirm=!1,this.syncTray(),this.els.tray.querySelector(".sl-ba-go")?.focus()}),this.els.tray.querySelector("[data-ba-reopen]")?.addEventListener("click",()=>{this.baReopen=!0,this.syncTray(),this.els.tray.querySelector(".sl-ba-go")?.focus()}),this.els.tray.querySelector("[data-ba-close]")?.addEventListener("click",()=>{this.baReopen=!1,this.syncTray(),this.els.tray.querySelector("[data-ba-reopen]")?.focus()}),this.els.tray.querySelector("[data-ba-replace]")?.addEventListener("click",()=>{this.bestAvailableConfirm=!1,this.bestAvailable(this.baQty,this.baCat||void 0,{preferPremium:this.baPremium,zoneId:this.baZone||void 0})}),this.els.tray.querySelectorAll(".sl-chip .rm").forEach(u=>{u.addEventListener("click",()=>{let b=u.closest(".sl-chip");if(b.dataset.held){this.removeHeldLabel(decodeURIComponent(b.dataset.held),b);return}let T=b.dataset.seat,C=this.controller.getSelection().find(A=>A.id===T)?.label??this.tf("picker.seat","Seat"),P=()=>{this.controller.deselect([T]),this.toast(y("picker.labelRemoved",{label:C}),"neutral",{label:this.tf("picker.undo","Undo"),onClick:()=>{let A=this.controller.select([T]);this.toast(A.length?y("picker.labelRestored",{label:C}):y("picker.labelNoLongerAvailable",{label:C}),A.length?"success":"warning")}})};if(this.reducedMotion()){P();return}b.classList.add("sl-leave"),this.scheduleMotion(P,150)})}),this.els.tray.querySelectorAll("[data-table-edit]").forEach(u=>{u.addEventListener("click",b=>{b.stopPropagation();let T=decodeURIComponent(u.dataset.tableEdit??""),C=this.controller.tableSelection(T);if(!C)return;let P=i.find(A=>A.label===T&&A.objectType==="table");this.showTableDialog({...C,quantity:P?.quantity??C.quantity},!!P,u)})}),this.els.tray.querySelectorAll(".sl-chip .tier").forEach(u=>{u.addEventListener("change",()=>this.controller.setSeatTier(u.dataset.tier,u.value||null))}),this.els.tray.querySelectorAll(".sl-chip .view[data-view-label]").forEach(u=>{u.addEventListener("click",()=>{let b=this.controller.seatByLabel(u.dataset.viewLabel);b&&this.openSeatView(b)})}),this.els.tray.querySelectorAll(".sl-chip[data-locate]").forEach(u=>{let b=()=>this.controller.flashSeat(u.dataset.locate,this.cssVar("--sl-accent")||"#f4b740");u.addEventListener("mouseenter",b),u.addEventListener("focusin",b)}),this.els.tray.querySelectorAll(".sl-ga button").forEach(u=>{u.addEventListener("click",()=>{let T=u.closest(".sl-ga").dataset.ga,C=t.find(L=>L.id===T),P=Number(u.dataset.d);if(P>0&&!this.canAddTicket())return;let A=Math.max(0,Math.min(C?.available??0,(this.gaQty.get(T)??0)+P));this.gaQty.set(T,A),this.syncTray()})}),this.salesClosed&&this.els.tray.querySelectorAll(".sl-ba-go,[data-ba],[data-ba-cat],[data-ba-zone],[data-ba-replace],.sl-ga button").forEach(u=>{u.disabled=!0});let c=this.pendingGATotal(t),p=this.pendingGACount(),f=i.reduce((u,b)=>u+this.paidPrice(b.categoryKey,b.tierId,b.unitPrice)*(b.quantity??1),0),m=i.reduce((u,b)=>u+(b.quantity??1),0),v=e.filter(u=>!d.has(u.label)),S=v.reduce((u,b)=>u+this.paidPrice(b.categoryKey,b.tierId??null,b.price)*(b.quantity??1),0)+c+f,w=v.reduce((u,b)=>u+(b.quantity??1),0)+p+m,x=this.pendingSelectionCount(),g=this.lastTrayCount,E=this.lastTrayTotal;if(this.els.count.textContent=w?q("picker.ticketsCount",w):this.tf("picker.noSeatsSelected","No seats selected"),this.els.total.textContent=w?this.money(S):"",this.root?.setAttribute("data-has-selection",String(w>0)),this.root?.setAttribute("data-ba-active",String(this.bestAvailableConfirm||this.bestAvailableBusy||this.baReopen)),this.els.foot?.classList.toggle("empty",w===0),this.els.seatSummary&&(this.els.seatSummary.textContent=w?q("picker.seatsSelectedCount",w):""),this.syncCta(w,x),this.hold){let u=m||this.hold.seats?.length||0;this.els.holdTitle&&(this.els.holdTitle.textContent=y("picker.securedCount",{count:u})),this.els.holdCopy&&(this.holdCopyPending=x>0,this.els.holdCopy.textContent=x?y("picker.moreSelectedCount",{count:x}):je(this.holdExpiresAt));let b=this.els.holdChange;b&&(b.disabled=this.releasingHold,b.textContent=this.releasingHold?this.tf("picker.releasingEllipsis","Releasing\u2026"):this.tf("picker.change","Change"))}w!==g&&this.animateOnce(this.els.count,"sl-value-pop",380),S!==E&&this.animateOnce(this.els.total,"sl-value-pop",380),g===0&&w>0&&(this.animateOnce(this.els.cta,"sl-ready",520),this.sideCollapsed&&this.root?.dataset.layout!=="narrow"&&this.setPanelCollapsed(!1)),this.renderPeek(w,S,x),this.lastTrayCount=w,this.lastTrayTotal=S,this.opts.onSelectionChange?.(e),this.emitExactSelectionValidity(w,e)}emitExactSelectionValidity(e,t){let i=this.exactTickets;if(i==null)return;let s={isValid:e===i,count:e,required:i,remaining:Math.max(0,i-e),seats:t};this.opts.onSelectionValidityChange?.(s),s.isValid?this.lastExactSelectionValidity!==!0&&this.opts.onSelectionValid?.(t):this.lastExactSelectionValidity!==!1&&this.opts.onSelectionInvalid?.(s),this.lastExactSelectionValidity=s.isValid}renderPeek(e,t,i){if(!this.els.peek)return;let s=(this.controller.doc?.categories??[]).map(r=>this.catPrice(r)).filter(r=>r!=null);this.els.peek.innerHTML=St({count:e,total:t,pendingCount:i,ctaPhase:this.ctaPhase,hasHold:!!this.hold,salesClosed:this.salesClosed,fromPrice:s.length?Math.min(...s):null,money:r=>this.money(r)})}async removeHeldLabel(e,t){if(!e||this.releasingLabels.has(e))return!1;this.releasingLabels.add(e),t?.setAttribute("aria-busy","true");let i=t?.querySelector(".rm");i&&(i.disabled=!0);try{let s=this.handedOff;if(!await this.controller.releaseLabels([e]))return this.toast(y("picker.couldNotRemoveLabel",{label:e}),"error"),!1;let n=this.controller.currentHold();return this.hold=n?{holdId:n.holdId,expiresAt:n.expiresAt,seats:n.seats,items:n.items}:null,this.handedOff=!!this.hold&&s,this.bookedShown=!1,this.ctaPhase="idle",this.hold?this.startHoldTimer(this.hold.expiresAt):(this.stopHoldTimer(),this.forgetHold()),this.syncTray(),this.emitHoldChange(),this.toast(y("picker.labelRemovedFromHold",{label:e}),"success"),!0}finally{this.releasingLabels.delete(e),t?.removeAttribute("aria-busy"),i?.isConnected&&(i.disabled=!1)}}async handleChangeSeats(){if(!this.hold||this.releasingHold)return;this.releasingHold=!0;let e=this.els.holdChange;e&&(e.disabled=!0,e.textContent=this.tf("picker.releasingEllipsis","Releasing\u2026"));try{await this.release(),this.hold||this.toast(this.tf("picker.heldTicketsReleased","Held tickets released. Choose your new seats."),"success")}finally{this.releasingHold=!1,e?.isConnected&&(e.disabled=!1,e.textContent=this.tf("picker.change","Change"))}}async handleCta(){if(this.salesClosed)return;if(this.exactTickets!=null&&this.totalTicketCount()!==this.exactTickets){let t=Math.max(0,this.exactTickets-this.totalTicketCount());this.toast(t>0?y("picker.selectExactMore",{count:t}):y("picker.selectExactCount",{count:this.exactTickets}),"warning");return}if(this.totalTicketCount()>this.maxTickets){this.toast(y("picker.removeTicketsUntilOrFewer",{count:this.maxTickets}),"warning");return}let e=this.committedSelection();if(this.hold&&!e.some(t=>!(this.hold.items??[]).some(i=>i.label===t.label))){let t=this.hold.seats??e;this.handedOff=!0,this.setCtaPhase("checkout"),this.checkoutHandoff(this.hold,t);return}this.holdingLabels=new Set(e.map(t=>t.label)),this.setCtaPhase("holding");try{let t=null,i=[...this.gaQty.entries()].filter(([,r])=>r>0),s=this.committedSelection();if(s.length){let r=await this.controller.hold(void 0,this.opts.holdTtlMs);t=r?{holdId:r.holdId,expiresAt:r.expiresAt,seats:r.seats,items:r.items}:null}for(let[r,n]of i){let o=await this.controller.holdGA(r,n,{ttlMs:this.opts.holdTtlMs});t=o?{holdId:o.holdId,expiresAt:o.expiresAt,seats:o.seats,items:o.items}:t}if(!t){this.toast(this.tf("picker.seatsJustTaken","One or more seats were just taken. Please pick again."),"error"),this.setCtaPhase("idle"),this.syncTray();return}this.hold=t,this.handedOff=!0,this.startHoldTimer(t.expiresAt),this.flashHeldSeats(t),this.setCtaPhase("checkout"),this.emitHoldChange(),this.checkoutHandoff(t,t.seats??s)}catch(t){this.opts.onError?.(t);let i=t,s=(i.conflicts??[]).map(n=>n.label).filter(Boolean).slice(0,3);i.reason==="event_closed"&&this.setSalesClosed(!0);let r=i.reason==="event_closed"?this.tf("picker.seatSalesClosedForEvent","Seat sales have closed for this event."):i.reason==="companion_pair_required"?this.tf("picker.companionPairRequired","Select the adjacent wheelchair place with each companion ticket."):i.reason==="ticket_option_not_applicable"?this.tf("picker.ticketOptionNotApplicable","That ticket choice is not available for the selected seat."):s.length?s.length===1?y("picker.labelsNoLongerAvailable.one",{labels:s.join(", ")}):y("picker.labelsNoLongerAvailable.other",{labels:s.join(", ")}):this.tf("picker.seatsJustTaken","One or more seats were just taken. Please pick again.");this.toast(r,"error"),this.setCtaPhase("idle")}finally{this.holdingLabels.clear(),this.ctaPhase==="holding"&&(this.ctaPhase="idle"),this.syncTray()}}startHoldTimer(e){this.stopHoldTimer(),this.holdExpiresAt=e,this.hold&&this.rememberHold(this.hold);let t=this.els.hold;t.innerHTML=`<span class="sl-hold-dot" aria-hidden="true"></span><span>${this.tf("picker.held","Held")}</span><span class="sl-hold-time" data-ref="holdTime"></span>`;let i=t.querySelector('[data-ref="holdTime"]');this.els.holdNote?.classList.add("on");let s=()=>{let r=Math.max(0,this.holdExpiresAt-Date.now());i&&(i.textContent=_e(r)),!this.holdCopyPending&&this.els.holdCopy&&(this.els.holdCopy.textContent=je(this.holdExpiresAt)),t.classList.add("on"),t.classList.toggle("is-expiring",r>0&&r<=Ct),this.setExtendPrompt(r>0&&r<=Ct,r),r<=0&&this.stopHoldTimer()};s(),this.holdTimer=setInterval(s,500)}stopHoldTimer(){this.holdTimer&&clearInterval(this.holdTimer),this.holdTimer=null,this.els.hold?.classList.remove("on","is-expiring"),this.els.holdNote?.classList.remove("on"),this.setExtendPrompt(!1,0)}setExtendPrompt(e,t){if(this.extendEl)if(e&&this.controller.currentHold()&&!this.bookedShown){let i=Math.ceil(t/1e3),s=Math.floor(i/60),r=String(i%60).padStart(2,"0");this.els.extendTxt.innerHTML=y("picker.seatsHeldForNeedMoreTime",{time:`${s}:${r}`}),this.extendEl.classList.add("on")}else this.extendEl.classList.remove("on")}async handleExtend(){let e=this.els.extendBtn;e.disabled=!0;let t=e.textContent;e.textContent=this.tf("picker.addingEllipsis","Adding\u2026");try{let i=await this.controller.extendHold(this.opts.holdTtlMs);i?(this.hold={holdId:i.holdId,expiresAt:i.expiresAt,seats:i.seats,items:i.items},this.holdExpiresAt=i.expiresAt,this.extendEl?.classList.remove("on"),this.rememberHold(this.hold),this.emitHoldChange(),this.toast(this.tf("picker.moreTimeAdded","More time added \u2014 your seats are still held."),"success")):this.toast(this.tf("picker.couldNotAddMoreTime","Couldn't add more time \u2014 please head to checkout now."),"warning")}catch(i){this.opts.onError?.(i),this.toast(this.tf("picker.couldNotAddMoreTime","Couldn't add more time \u2014 please head to checkout now."),"warning")}finally{e.disabled=!1,e.textContent=t}}detectBooked(){this.bookedShown||!this.handedOff||!this.hold||this.controller.currentHold()===null&&this.showBooked()}showBooked(){if(this.bookedShown||!this.hold)return;this.bookedShown=!0;let e=this.buildHandoff(this.hold);this.stopHoldTimer(),this.forgetHold();let t=e.lineItems.reduce((i,s)=>i+s.quantity,0);this.els.bookedSub&&(this.els.bookedSub.innerHTML=`<span class="sl-booked-seats">${q("picker.ticketsCount",t)}</span> ${this.tf("picker.confirmedAndOnWay","confirmed. A confirmation is on its way.")}`),this.bookedEl?.classList.add("on"),this.opts.onBooked?.(e)}checkoutHandoff(e,t){if(this.checkoutMode==="hosted"){this.startHostedCheckout(e,t);return}this.opts.onCheckout?.(e,t,this.buildHandoff(e))}async startHostedCheckout(e,t){let i=this.buildHandoff(e),s=null;try{s=await(this.paymentOptions??=this.pubApi.paymentOptions(this.opts.event))}catch(n){this.opts.onError?.(n)}if(this.destroyed)return;let r=s?.providers?.[0];if(!r){let n=ut(s?.reason),o=!!this.opts.onCheckoutUnavailable||!!this.opts.onCheckout;this.opts.onCheckoutUnavailable?.({reason:n,handoff:i}),this.opts.onCheckout?.(e,t,i),o||this.openCheckoutPanel({kind:"unavailable",reason:n,seatCount:i.lineItems.reduce((l,d)=>l+d.quantity,0)});return}await this.openCheckoutPanel({kind:"pay",provider:r,order:{holdId:i.holdId,expiresAt:i.expiresAt,currency:i.currency,total:i.total,labels:i.lineItems.map(n=>n.displayLabel??n.label)}})}async openCheckoutPanel(e){let t;try{({mountCheckout:t}=await ht())}catch(i){this.opts.onError?.(i),this.toast(this.tf("picker.checkoutCouldNotBeOpened","Checkout could not be opened. Your seats are still held \u2014 please try again."),"error"),this.setCtaPhase("idle");return}this.destroyed||!this.root||(this.closeCheckoutPanel(),this.checkoutPanel=t({root:this.root,state:e,formatMoney:i=>this.money(i),startSession:i=>this.pubApi.startCheckout(this.opts.event,{...i,...this.opts.returnUrl?{returnUrl:this.opts.returnUrl}:{}}),orderStatus:i=>this.pubApi.orderStatus(i),onCancel:()=>{this.checkoutPanel=null,this.hold||this.setCtaPhase("idle")},onConfirmed:i=>{this.opts.onOrderConfirmed?.(i),this.controller.refresh()},onError:i=>this.opts.onError?.(i)}))}closeCheckoutPanel(){this.checkoutPanel?.destroy(),this.checkoutPanel=null}buildHandoff(e){let i=(e.items??[]).map(n=>{let o=this.controller.lineItemDisplay(n);return{label:n.label,...o.displayLabel?{displayLabel:o.displayLabel}:{},...o.displayType?{displayType:o.displayType}:{},objectId:n.objectId,objectType:n.objectType,categoryKey:n.categoryKey,tierId:n.tierId,unitPrice:this.paidPrice(n.categoryKey,n.tierId,n.unitPrice),currency:n.currency??this.currency,quantity:n.quantity??1}}),s=i[0]?.currency??this.currency,r=i.reduce((n,o)=>n+o.unitPrice*o.quantity,0);return{holdId:e.holdId,expiresAt:e.expiresAt,currency:s,lineItems:i,total:r}}emitHoldChange(){let e=this.hold;this.scheduleOfferRefresh(!0),this.opts.onHoldChange?.(e,e?.seats??[],e?this.buildHandoff(e):null)}toast(e,t="neutral",i){let s=this.els.toast;if(!s)return;s.replaceChildren();let r=document.createElement("span");if(r.textContent=e,s.appendChild(r),s.classList.toggle("has-action",!!i),i){let n=document.createElement("button");n.type="button",n.className="sl-toast-action",n.textContent=i.label,n.addEventListener("click",i.onClick,{once:!0}),s.appendChild(n)}s.dataset.tone=t,s.classList.add("on"),this.toastTimer&&clearTimeout(this.toastTimer),this.toastTimer=setTimeout(()=>{s.classList.remove("on"),s.classList.remove("has-action"),s.dataset.tone="neutral"},4200)}placeTooltip(){if(!this.tipEl)return;let e=this.els.map.clientWidth,t=this.tipEl.offsetWidth,i=this.tipEl.offsetHeight,s=this.tipPos.x+14,r=this.tipPos.y-i-12;s+t>e-8&&(s=this.tipPos.x-t-14),r<8&&(r=this.tipPos.y+18),this.tipEl.style.left=`${Math.max(8,s)}px`,this.tipEl.style.top=`${Math.max(8,r)}px`}rowTypeWord(e){let t=e?.displayType?.trim()||e?.rowType?.trim();return t||(e?.objectType==="table"?this.tf("picker.table","Table"):e?.objectType==="booth"?this.tf("picker.booth","Booth"):this.tf("picker.row","Row"))}updateTooltip(e){if(!this.tipEl)return;if(!e){this.tipEl.style.display="none";return}let t=m=>String(m??"\u2014").replace(/[&<>"]/g,v=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[v]),i=this.money(this.paidPrice(e.categoryKey,e.tierId??null,e.price)),s=e.objectType==="table"&&!!e.bookingMode,r=e.objectType==="booth",n=e.sectionLabel||e.rowLabel||e.seatNumber,o=s?`<div class="sl-tip-grid"><div class="sl-tip-field"><span class="sl-tip-key">${t(this.rowTypeWord(e))}</span><span class="sl-tip-val">${t(e.rowLabel??e.displayLabel??e.label)}</span></div><div class="sl-tip-field"><span class="sl-tip-key">${this.tf("picker.guests","Guests")}</span><span class="sl-tip-val">${e.bookingMode==="variable"?`${e.minOccupancy}\u2013${e.maxOccupancy}`:e.capacity}</span></div></div>`:r?'<div class="sl-tip-grid">'+(e.sectionLabel?`<div class="sl-tip-field"><span class="sl-tip-key">${this.tf("picker.section","Section")}</span><span class="sl-tip-val">${t(e.sectionLabel)}</span></div>`:"")+`<div class="sl-tip-field"><span class="sl-tip-key">${t(this.rowTypeWord(e))}</span><span class="sl-tip-val">${t(e.rowLabel??e.displayLabel??e.label)}</span></div></div>`:n?'<div class="sl-tip-grid">'+(e.sectionLabel?`<div class="sl-tip-field"><span class="sl-tip-key">${this.tf("picker.section","Section")}</span><span class="sl-tip-val">${t(e.sectionLabel)}</span></div>`:"")+(e.rowLabel?`<div class="sl-tip-field"><span class="sl-tip-key">${t(this.rowTypeWord(e))}</span><span class="sl-tip-val">${t(G(e))}</span></div>`:"")+(e.seatNumber?`<div class="sl-tip-field"><span class="sl-tip-key">${this.tf("picker.seat","Seat")}</span><span class="sl-tip-val">${t(e.seatNumber)}</span></div>`:"")+"</div>":`<div class="sl-tip-grid one"><div class="sl-tip-field"><span class="sl-tip-key">${this.tf("picker.seat","Seat")}</span><span class="sl-tip-val">${t(e.displayLabel??e.label)}</span></div></div>`,l=e.status==="not_for_sale",d=e.status==="free"?"":`<div class="sl-tip-status">${l?this.tf("picker.notAvailable","Not available"):e.status==="held"?y("map.statusHeld"):y("map.statusTaken")}</div>`,h=ie(e.commercial),c=h?`<div class="sl-tip-cx"><span class="g" aria-hidden="true">\u25D0</span>${t(h)}</div>`:"",p=he(e.wheelchairSpaceType),f=p?`<div class="sl-tip-cx"><span class="g" aria-hidden="true">\u267F</span>${t(p)}</div>`:"";this.tipEl.style.setProperty("--sl-cat",e.categoryColor),this.tipEl.innerHTML=o+`<div class="sl-tip-cat"><span class="sl-tip-dot" style="background:${e.categoryColor}"></span><span class="sl-tip-name">${t(e.categoryLabel)}</span>`+(l?"":`<span class="sl-tip-amt">${i}</span>`)+"</div>"+f+c+d,this.tipEl.style.display="block",this.placeTooltip()}getSelection(){return this.committedSelection()}selectObjects(e){return this.controller.select(e)}deselectObjects(e){this.controller.deselect(e)}clearSelection(){this.dismissConfirm(),this.dismissTableDialog(),this.controller.clearSelection()}selectCategories(e){return this.controller.selectCategories(e)}deselectCategories(e){this.controller.deselectCategories(e)}setSelectableObjects(e){this.controller.setSelectableObjects(e)}setMaxSelection(e){this.maxTickets=Math.max(this.exactTickets??1,Math.floor(e)),this.controller.setMaxSelection(this.maxTickets),this.updateSelectionCapacity(),this.syncTray()}getSelectionValidity(){let e=this.exactTickets;if(e==null)return null;let t=this.totalTicketCount();return{isValid:t===e,count:t,required:e,remaining:Math.max(0,e-t),seats:this.committedSelection()}}setMapTheme(e){this.destroyed||(this.opts.theme={...this.opts.theme??{},map:e??void 0},this.controller.setMapTheme(e))}setEventDetailsHidden(e){this.eventDetailsHidden=e,this.syncFullscreenButtons()}setPricing(e){let t=JSON.stringify(this.opts.pricing??null),i=JSON.stringify(e??null);t!==i&&(this.opts.pricing=e,!(this.destroyed||!this.els.prices)&&(this.els.pricesSec?.querySelector(".sl-price-select")?.remove(),this.buildPriceFilter(),this.syncPrices(),this.syncTray(),this.lastSection&&this.showSectionCard(this.lastSection)))}isColorblindSafe(){return this.cbSafe}setColorblindSafe(e){e!==this.cbSafe&&(this.cbSafe=e,this.cbEl?.setAttribute("aria-pressed",String(e)),this.controller.setColorblindSafe(e),ji(e))}setViewMode(e){this.controller.setViewMode(this.normalizeInitialView(e)),this.syncProjection(),this.dismissConfirm()}getViewMode(){return this.controller.getViewMode()}normalizeInitialView(e){return e==="perspective"?(this.perspectiveWarned||(this.perspectiveWarned=!0,console.warn("[seatlayer] initialView:'perspective' (2.5D) is deprecated for the buyer picker and was coerced to 'flat'. Use the Map | 3D control for the immersive view.")),"flat"):e??"flat"}getBuyerView(){return this.buyerView}setBuyerView(e,t){if(e==="map"){this.exit3d();return}let i=t?.flyToSeatId;if(this.buyerView==="venue3d"){i?(this.opts.onBuyerViewChange?.({view:"venue3d",seatId:i}),this.view3dHandle?.flyToSeat(i)):t?.resetView&&this.view3dHandle?.focusOverview();return}this.enter3d(i)}seatState3dFor(e){switch(this.controller.getStatus(e.id)){case"held":return"held";case"booked":return"sold";case"not_for_sale":return"dimmed";default:break}return this.priceBandKeys!=null&&!this.priceBandKeys.has(e.categoryKey)||this.limitedViewFilter&&(e.commercial?.restrictedView||e.commercial?.obstructedView)?"dimmed":"available"}pushAvailabilityTo3d(){if(!this.view3dHandle)return;let e=this.allSeats().map(t=>({seatId:t.id,state:this.seatState3dFor(t)}));this.view3dHandle.setAvailability(e)}syncSelectionTo3d(){this.view3dHandle&&this.view3dHandle.setSelection(this.controller.getSelection().map(e=>e.id))}async seatViewFor3d(e){let t=this.allSeats().find(i=>i.id===e);if(!t)return null;if(t.viewUrl)try{let i=t.viewMeta?.previewUrl,s=!!i&&i!==t.viewUrl,r=s?await this.buyerAssetUrls.resolve(i):null,n=s?t.viewUrl:await this.buyerAssetUrls.resolve(t.viewUrl);return!n||s&&!r?null:{url:n,...r?{previewUrl:r}:{},...s?{resolveUrl:o=>this.buyerAssetUrls.resolve(o)}:{},...t.viewMeta?.sourceWidth!==void 0?{sourceWidth:t.viewMeta.sourceWidth}:{},...t.viewMeta?.sourceHeight!==void 0?{sourceHeight:t.viewMeta.sourceHeight}:{},...t.viewMeta?.previewWidth!==void 0?{previewWidth:t.viewMeta.previewWidth}:{},...t.viewMeta?.previewHeight!==void 0?{previewHeight:t.viewMeta.previewHeight}:{},...t.viewMeta?.initialBearingDeg!==void 0?{initialBearingDeg:t.viewMeta.initialBearingDeg}:{},...t.viewMeta?.initialPitchDeg!==void 0?{initialPitchDeg:t.viewMeta.initialPitchDeg}:{},...t.viewMeta?.coverage?{coverage:t.viewMeta.coverage}:{},...t.viewMeta?.capturedAt?{capturedAt:t.viewMeta.capturedAt}:{},...t.viewMeta?.sourceLabel?{sourceLabel:t.viewMeta.sourceLabel}:{}}}catch(i){return this.opts.onError?.(i),null}return{url:"",generated:!0,mediaKind:"model",coverage:"exact-seat",sourceLabel:this.tf("picker.chartDerivedModel","Chart-derived model")}}emitAnalytics(e,t){try{this.opts.onAnalytics?.(e,{...t,surface:"buyer"})}catch{}}emit3dAnalytics(e,t){this.emitAnalytics(e,t)}onView3dSeatPick(e){if(this.salesClosed){this.toast(this.tf("picker.salesClosedToast","Sales are closed for this event."),"warning"),this.syncSelectionTo3d();return}let t=this.allSeats().find(o=>o.id===e);if(!t)return;let i=this.controller.tableSelection(e);if(this.committedSelection().some(o=>i?o.label===i.label:o.id===e)){this.controller.deselect([e]),this.dismissConfirm(),this.syncSelectionTo3d();return}let r=this.controller.getStatus(t.id);if(r==="held"||r==="booked"||r==="not_for_sale"){this.showUnavailable3dSeat(t,this.seatState3dFor(t),r),this.syncSelectionTo3d();return}if(this.dismissUnavailable3dSeat(),!this.controller.select([e]).length){this.syncSelectionTo3d(),this.dismissConfirm();return}if(this.opts.onBuyerViewChange?.({view:"venue3d",seatId:e}),this.flashPickedSeat(e),i){this.showTableDialog(i,!1),this.syncSelectionTo3d();return}this.opts.confirmSelection!==!1?this.showConfirm(t):this.syncTray(),this.syncSelectionTo3d()}showUnavailable3dSeat(e,t,i){let s=this.view3dEl;if(!s)return;this.dismissUnavailable3dSeat();let r=this.controller.seatDetails(e.id),n=r?.displayLabel??e.displayLabel??e.label,o=r?.sectionLabel,l=G(r),d=[o,l?y("picker.rowLabel",{label:l}):null,n].filter(Boolean).join(" \xB7 "),h=i==="held"?{title:this.tf("picker.temporarilyHeld","Temporarily held"),message:this.tf("picker.heldSeatExplanation","Another buyer is holding this seat. It may become available again.")}:i==="booked"?{title:this.tf("picker.sold","Sold"),message:this.tf("picker.soldSeatExplanation","This seat has already been booked.")}:{title:this.tf("picker.notForSale","Not for sale"),message:this.tf("picker.notForSaleExplanation","This seat is not included in the current sale.")},c=document.createElement("div");c.className="sl-view3d-unavailable",c.dataset.state=t,c.setAttribute("role","status"),c.setAttribute("aria-live","polite");let p=document.createElement("span");p.className="sl-view3d-unavailable-eyebrow",p.textContent=d||n;let f=document.createElement("strong");f.textContent=h.title;let m=document.createElement("div");m.className="sl-view3d-unavailable-copy",m.append(p,f);let v=document.createElement("button");v.type="button",v.setAttribute("aria-label",this.tf("picker.closeSeatStatus","Close seat status")),v.textContent="\xD7";let S=document.createElement("p");S.textContent=h.message,c.append(m,v,S),v.addEventListener("click",()=>c.remove()),s.appendChild(c),this.announceSeat(e)}dismissUnavailable3dSeat(){this.view3dEl?.querySelector(".sl-view3d-unavailable")?.remove()}saveView3dComparisonSeat(e){if(this.buyerView!=="venue3d")return;let t=this.view3dCompareSeatIds;t.includes(e.id)||(this.view3dCompareSeatIds=t.length===0?[e.id]:[t[0],e.id]),this.confirmSeat?.id===e.id&&(this.controller.deselect([e.id]),this.dismissConfirm(),this.syncSelectionTo3d(),this.syncTray()),this.view3dCompareChip.sync(),this.emit3dAnalytics("3d_comparison_saved",{seatId:e.id,count:this.view3dCompareSeatIds.length}),this.view3dCompareSeatIds.length>1?this.openView3dComparison():this.toast(this.tf("picker.chooseAnotherToCompare","Seat saved. Choose another seat to compare."),"success")}clearView3dComparison(){this.closeView3dComparison(!1),this.view3dCompareSeatIds=[],this.view3dCompareChip.remove(),this.emit3dAnalytics("3d_comparison_cleared")}view3dComparisonSnapshot(e){let t=this.allSeats().find(f=>f.id===e);if(!t)return null;let i=this.controller.seatDetails(t.id),s=this.controller.doc?.categories.find(f=>f.key===t.categoryKey),r=i?.price??(s?.tiers?.length?s.tiers[0].price:s?.price),n=r!=null?this.paidPrice(t.categoryKey,i?.tierId??s?.tiers?.[0]?.id??null,r):void 0,o=this.controller.getStatus(t.id),l=o==="held"?this.tf("picker.temporarilyHeld","Temporarily held"):o==="booked"?this.tf("picker.sold","Sold"):o==="not_for_sale"?this.tf("picker.notForSale","Not for sale"):this.tf("picker.available","Available"),d=t.viewUrl?Tt({url:t.viewUrl,...t.viewMeta?.coverage?{coverage:t.viewMeta.coverage}:{},...t.viewMeta?.capturedAt?{capturedAt:t.viewMeta.capturedAt}:{},...t.viewMeta?.sourceLabel?{sourceLabel:t.viewMeta.sourceLabel}:{}}):this.tf("picker.chartDerivedSeatEye","Live 3D \xB7 chart-derived seat-eye \xB7 not surveyed"),h=ie(t.commercial)||this.tf("picker.noAuthoredRestriction","No organizer-authored restriction"),c=i?.wheelchairSpaceType?`${he(i.wheelchairSpaceType)} \xB7 metadata, not access certification`:this.tf("picker.noAccessibilityMetadata","No accessibility metadata supplied"),p=Et(t.confidenceEvidence);return{seat:t,label:i?.displayLabel??t.displayLabel??t.label,section:i?.sectionLabel??t.sectionId??"\u2014",row:G(i)??i?.rowLabel??"\u2014",category:i?.categoryLabel??s?.label??t.categoryKey,price:n==null?this.tf("picker.priceNotSupplied","Not supplied"):this.money(n),availability:l,selectable:o==null||o==="free",viewSource:d,limited:h,accessibility:c,confidence:p}}openSeatConfidencePassport(e,t=null){let i=this.view3dEl;if(!i)return;this.closeSeatConfidencePassport(!1);let s=Et(e.confidenceEvidence),r=e.confidenceEvidence,n=this.controller.seatDetails(e.id),o=g=>_(g),l=s.limitations.length?`<h4>Known limits</h4><ul>${s.limitations.map(g=>`<li>${o(g)}</li>`).join("")}</ul>`:"",d=s.modeledTarget?`<div><dt>Modeled target</dt><dd>${o(s.modeledTarget)}</dd></div>`:"",h=r?`<div><dt>Evidence ID</dt><dd>${o(r.evidenceId)}</dd></div><div><dt>Model version</dt><dd>${o(r.modelVersion)}</dd></div><div><dt>Event configuration</dt><dd>${o(r.eventConfigurationId??"Not configuration-specific")}</dd></div><div><dt>Approval</dt><dd>${o(r.approvedByRole??"No external approval supplied")}</dd></div>`+(r.validUntil?`<div><dt>Valid until</dt><dd>${o(r.validUntil.slice(0,10))}</dd></div>`:""):"<div><dt>Evidence ID</dt><dd>None supplied</dd></div>",c=ie(e.commercial)||this.tf("picker.noAuthoredRestriction","No organizer-authored restriction"),p=`<div><dt>View restriction</dt><dd>${o(c)}</dd></div>`+(e.commercial?.note?`<div><dt>Organizer note</dt><dd>${o(e.commercial.note)}</dd></div>`:""),f=document.createElement("div");f.className="sl-view3d-passport-shell",f.innerHTML=`<div class="sl-view3d-passport-scrim" aria-hidden="true"></div><section class="sl-view3d-passport" role="dialog" aria-modal="true" aria-labelledby="sl-view3d-passport-title"><header><div><span>Seat confidence passport</span><strong id="sl-view3d-passport-title">${o(n?.displayLabel??e.displayLabel??e.label)}</strong></div><button type="button" data-close aria-label="Close seat confidence passport">\xD7</button></header><div class="sl-view3d-passport-summary"><strong>${o(s.headline)}</strong><span>${o(s.coverage)} \xB7 ${o(s.freshness)}</span></div><dl><div><dt>Model status</dt><dd>${o(s.model)}</dd></div><div><dt>Reality evidence</dt><dd>${o(s.reality)}</dd></div><div><dt>Source</dt><dd>${o(s.provenance)}</dd></div>`+p+d+h+`</dl>${l}<p class="sl-view3d-passport-note">This passport describes supplied evidence and known limits. It does not guarantee that every temporary obstruction or real-world condition is knowable before the event build.</p></section>`;let m=[...new Set([...i.children,...[...this.els.map.children].filter(g=>g!==i)])].filter(g=>g instanceof HTMLElement),v=m.map(g=>({element:g,inert:g.inert,ariaHidden:g.getAttribute("aria-hidden")}));for(let g of m)g.inert=!0,g.setAttribute("aria-hidden","true");i.appendChild(f),i.classList.add("has-passport"),this.view3dPassportEl=f;let S=f.querySelector(".sl-view3d-passport"),w=()=>[...S.querySelectorAll('button:not(:disabled),[href],[tabindex]:not([tabindex="-1"])')],x=g=>{if(g.key==="Escape"){g.preventDefault(),g.stopPropagation(),g.stopImmediatePropagation(),this.closeSeatConfidencePassport();return}if(g.key!=="Tab")return;let E=w();if(!E.length)return;let u=E[0],b=E[E.length-1];g.shiftKey&&document.activeElement===u?(g.preventDefault(),b.focus()):!g.shiftKey&&document.activeElement===b&&(g.preventDefault(),u.focus())};window.addEventListener("keydown",x,!0),this.view3dPassportCleanup=()=>{window.removeEventListener("keydown",x,!0);for(let b of v)b.element.inert=b.inert,b.ariaHidden===null?b.element.removeAttribute("aria-hidden"):b.element.setAttribute("aria-hidden",b.ariaHidden);let g=t?.isConnected?t:this.confirmEl?.querySelector(".sl-confirm-confidence")??this.view3dCompareEl?.querySelector("[data-passport-seat]")??null,E=g?.closest(".sl-confirm,.sl-view3d-compare");E?.isConnected&&(E.inert=!1,E.removeAttribute("aria-hidden")),f.remove(),i.classList.remove("has-passport"),this.view3dPassportEl===f&&(this.view3dPassportEl=null);let u=g??this.view3dCompareEl?.querySelector("[data-passport-seat]")??this.confirmEl?.querySelector(".sl-confirm-confidence")??this.view3dCompareChip.mainButton();(t?.isConnected?t:u)?.focus()},f.addEventListener("click",g=>{let E=g.target instanceof HTMLElement?g.target:null;(E?.closest("[data-close]")||E?.classList.contains("sl-view3d-passport-scrim"))&&this.closeSeatConfidencePassport()}),requestAnimationFrame(()=>w()[0]?.focus()),this.emit3dAnalytics("3d_confidence_passport_opened",{seatId:e.id,evidenceId:r?.evidenceId??null,eventConfigurationId:r?.eventConfigurationId??null,modelLevel:r?.modelLevel??"unverified",realityLevel:r?.realityLevel??"none"})}closeSeatConfidencePassport(e=!0){let t=this.view3dPassportCleanup;if(this.view3dPassportCleanup=null,!t){this.view3dPassportEl?.remove(),this.view3dPassportEl=null,this.view3dEl?.classList.remove("has-passport");return}e||(document.activeElement instanceof HTMLElement?document.activeElement:null)?.blur(),t(),e||this.root?.focus({preventScroll:!0})}openView3dComparison(){let e=this.view3dEl;if(!e||this.view3dCompareSeatIds.length<2)return;this.closeView3dComparison(!1);let t=this.view3dCompareSeatIds.map(p=>this.view3dComparisonSnapshot(p)).filter(p=>!!p);if(t.length<2){this.clearView3dComparison();return}let i=p=>_(p),s=document.createElement("div");s.className="sl-view3d-compare-shell";let r=t.map((p,f)=>`<article><span>Seat ${f===0?"A":"B"}</span><strong>${i(p.label)}</strong><small>Section ${i(p.section)} \xB7 Row ${i(p.row)}</small><dl><div><dt>Current price</dt><dd>${i(p.price)}</dd></div><div><dt>Ticket type</dt><dd>${i(p.category)}</dd></div><div><dt>Availability</dt><dd>${i(p.availability)}</dd></div><div><dt>View source</dt><dd>${i(p.viewSource)}</dd></div><div><dt>View restriction</dt><dd>${i(p.limited)}</dd></div><div><dt>Seat confidence</dt><dd>${i(p.confidence.headline)}</dd></div><div><dt>Reality check</dt><dd>${i(p.confidence.reality)}</dd></div><div><dt>Accessibility</dt><dd>${i(p.accessibility)}</dd></div></dl><div class="sl-view3d-compare-actions"><button type="button" data-passport-seat="${i(p.seat.id)}">Passport</button><button type="button" data-view-seat="${i(p.seat.id)}">View seat</button><button type="button" class="select" data-select-seat="${i(p.seat.id)}"${p.selectable?"":" disabled"}>Select seat</button></div></article>`).join("");s.innerHTML=`<div class="sl-view3d-compare-scrim" aria-hidden="true"></div><section class="sl-view3d-compare" role="dialog" aria-modal="true" aria-labelledby="sl-view3d-compare-title"><header><div><span>Seat inspection</span><strong id="sl-view3d-compare-title">Compare disclosed attributes</strong></div><button type="button" data-close aria-label="Close seat comparison">\xD7</button></header><p class="sl-view3d-compare-note">Current price and availability come from this picker. Modeled views are chart-derived unless organizer media is labeled; SeatLayer does not invent why a seat has its price.</p><div class="sl-view3d-compare-grid">${r}</div></section>`;let n=document.activeElement instanceof HTMLElement?document.activeElement:null,o=[...e.children].filter(p=>p instanceof HTMLElement),l=o.map(p=>({element:p,inert:p.inert,ariaHidden:p.getAttribute("aria-hidden")}));for(let p of o)p.inert=!0,p.setAttribute("aria-hidden","true");e.appendChild(s),e.classList.add("has-comparison"),this.view3dCompareEl=s;let d=s.querySelector(".sl-view3d-compare"),h=()=>[...d.querySelectorAll('button:not(:disabled),[href],[tabindex]:not([tabindex="-1"])')],c=p=>{if(p.key==="Escape"){p.preventDefault(),this.closeView3dComparison();return}if(p.key!=="Tab")return;let f=h();if(!f.length)return;let m=f[0],v=f[f.length-1];p.shiftKey&&document.activeElement===m?(p.preventDefault(),v.focus()):!p.shiftKey&&document.activeElement===v&&(p.preventDefault(),m.focus())};window.addEventListener("keydown",c),this.view3dCompareCleanup=()=>{window.removeEventListener("keydown",c);for(let p of l)p.element.inert=p.inert,p.ariaHidden===null?p.element.removeAttribute("aria-hidden"):p.element.setAttribute("aria-hidden",p.ariaHidden);s.remove(),e.classList.remove("has-comparison"),this.view3dCompareEl===s&&(this.view3dCompareEl=null),n?.isConnected?n.focus():this.view3dCompareChip.mainButton()?.focus()},s.querySelector("[data-close]")?.addEventListener("click",()=>this.closeView3dComparison()),s.querySelectorAll("[data-passport-seat]").forEach(p=>p.addEventListener("click",()=>{let f=p.dataset.passportSeat,m=f?this.allSeats().find(v=>v.id===f):void 0;m&&this.openSeatConfidencePassport(m,p)})),s.querySelectorAll("[data-view-seat]").forEach(p=>p.addEventListener("click",()=>{let f=p.dataset.viewSeat;this.closeView3dComparison(!1),f&&this.view3dHandle?.flyToSeat(f)})),s.querySelectorAll("[data-select-seat]").forEach(p=>p.addEventListener("click",()=>{let f=p.dataset.selectSeat;f&&this.selectComparedSeat(f)})),requestAnimationFrame(()=>h()[0]?.focus()),this.emit3dAnalytics("3d_comparison_opened",{seatIds:this.view3dCompareSeatIds.slice()})}closeView3dComparison(e=!0){let t=this.view3dCompareCleanup;if(this.view3dCompareCleanup=null,!t){this.view3dCompareEl?.remove(),this.view3dCompareEl=null,this.view3dEl?.classList.remove("has-comparison");return}e||(document.activeElement instanceof HTMLElement?document.activeElement:null)?.blur(),t(),e||this.root?.focus({preventScroll:!0})}selectComparedSeat(e){if(this.salesClosed){this.toast(this.tf("picker.salesClosedToast","Sales are closed for this event."),"warning");return}let t=this.allSeats().find(s=>s.id===e);if(!t)return;if(this.closeView3dComparison(!1),!this.controller.select([e]).length){this.syncSelectionTo3d(),this.toast(this.tf("picker.seatNoLongerAvailable","That seat is no longer available."),"warning");return}this.syncSelectionTo3d(),this.showConfirm(t),this.emit3dAnalytics("3d_comparison_selected",{seatId:e})}async enter3d(e){if(this.view3dEl||!this.canOffer3d()||!this.els.map)return;let t=this.controller.doc;if(!t)return;this.buyerView="venue3d",this.view3dTargetSeatId=null,this.opts.onBuyerViewChange?.({view:"venue3d",...e?{seatId:e}:{}}),this.root?.setAttribute("data-view3d","on"),this.dismissConfirm(),this.syncProjection();let i=document.createElement("div");i.className="sl-view3d",i.setAttribute("role","group"),i.setAttribute("aria-label",this.tf("picker.interactive3dVenueView","Interactive 3D venue view"));let s=document.createElement("button");s.type="button",s.className="sl-view3d-back",s.innerHTML=`<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M15 18l-6-6 6-6"/></svg><span>${this.tf("picker.backToMap","Back to map")}</span>`;let r=s.querySelector("span"),n=h=>{this.view3dTargetSeatId=h;let c=!!h;i.classList.toggle("is-seat-focused",c);let p=c?this.tf("picker.backToVenue","Back to venue"):this.tf("picker.backToMap","Back to map");r&&(r.textContent=p),s.setAttribute("aria-label",p)};s.addEventListener("click",()=>{if(this.view3dTargetSeatId&&this.view3dHandle){this.view3dHandle.focusOverview();return}this.exit3d()}),i.appendChild(s);let o=document.createElement("button");o.type="button",o.className="sl-view3d-fs",o.textContent="\u26F6",o.setAttribute("aria-label",this.tf("picker.fullScreen","Full screen")),o.setAttribute("aria-pressed",String(!!document.fullscreenElement||this.fsFallback||this.framedFs)),o.addEventListener("click",()=>this.toggleFullscreen()),i.appendChild(o);let l=document.createElement("div");l.className="sl-view3d-loading",l.setAttribute("role","status"),l.setAttribute("aria-live","polite"),l.textContent=this.tf("picker.loading3d","Building the 3D venue\u2026"),i.appendChild(l),this.els.map.appendChild(i),this.view3dEl=i,this.view3dCompareChip.sync(),requestAnimationFrame(()=>{i.style.opacity="1"});let d=++this.view3dGen;try{let h=Ve(t),c=await dt();if(d!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==i)return;let p=await c.prepareVenue3D({doc:t,seats:h});if(d!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==i)return;let f=c.mountVenue3D(i,{doc:t,seats:h,prepared:p},{portraitOverviewCrop:!0,arriveAtSeatEye:!0,seatViewActionLabel:m=>this.allSeats().find(v=>v.id===m)?.viewUrl?this.tf("picker.openAuthored360","Open venue 360\xB0"):this.tf("picker.lookAroundLive3d","Look around in live 3D"),onSeatPick:m=>this.onView3dSeatPick(m),onSeatInspect:m=>this.onView3dSeatPick(m),onSectionFocusChange:m=>{let v=i.querySelector('select[data-locator="section"]'),S=m??"";!v||v.value===S||(v.value=S,v.dispatchEvent(new Event("change")))},onViewTargetChange:m=>{i.querySelector(".sl-view3d-nav")?.classList.toggle("is-seat-focused",!!m),n(m),this.opts.onBuyerViewChange?.({view:"venue3d",...m?{seatId:m}:{}})},getSeatView:m=>new Promise((v,S)=>{let w=()=>{this.seatViewFor3d(m).then(g=>{g?v(g):S(new Error("seat_view_unavailable"))})},x=globalThis.requestIdleCallback;typeof x=="function"?x(w,{timeout:1500}):setTimeout(w,50)}),onAnalytics:(m,v)=>this.emit3dAnalytics(m,v)});this.view3dHandle=f,l.remove(),this.pushAvailabilityTo3d(),this.syncSelectionTo3d(),xt(i,f),e&&f.flyToSeat(e)}catch(h){if(d!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==i)return;this.opts.onError?.(h),this.toast(this.tf("picker.unavailable3d","3D could not start. The seat map is still available."),"warning"),this.exit3d()}}exit3d(){if(this.buyerView!=="venue3d"&&!this.view3dEl)return;this.view3dGen++,this.buyerView="map",this.view3dTargetSeatId=null,this.opts.onBuyerViewChange?.({view:"map"}),this.root?.removeAttribute("data-view3d"),this.closeSeatConfidencePassport(!1),this.closeView3dComparison(!1),this.view3dCompareChip.remove();try{this.view3dHandle?.dispose()}catch{}this.view3dHandle=null;let e=this.view3dEl;this.view3dEl=null,e&&(e.style.opacity="0",setTimeout(()=>e.remove(),320)),this.syncProjection();let t=this.view3dReturnSeat;this.view3dReturnSeat=null,t&&this.committedSelection().some(i=>i.id===t.id)&&this.opts.confirmSelection!==!1&&this.showConfirm(t)}getCurrentHold(){return this.hold}async resumeHold(e){return this.resumeHoldFromServer(e,!1)}async removeHeldTicket(e){return this.removeHeldLabel(e)}async bestAvailable(e,t,i={}){if(this.salesClosed||this.bestAvailableBusy)return null;e=Math.max(1,Math.min(this.maxTickets,Math.floor(e))),this.confirmSeat&&this.cancelConfirm(),this.bestAvailableConfirm=!1,this.bestAvailableBusy=!0;let s=this.els.tray?.querySelector(".sl-ba-go");s&&(s.disabled=!0,s.classList.add("sl-busy"),s.innerHTML=`<span class="sl-ba-spin" aria-hidden="true"></span>${this.tf("picker.findingEllipsis","Finding\u2026")}`);try{let r=await this.controller.bestAvailable(e,t,{...i,ttlMs:this.opts.holdTtlMs});return r?(this.hold={holdId:r.holdId,expiresAt:r.expiresAt,seats:r.seats,items:r.items},this.handedOff=!1,this.bookedShown=!1,this.gaQty.clear(),this.startHoldTimer(r.expiresAt),this.flashHeldSeats(this.hold),this.syncTray(),this.emitHoldChange(),i.preferPremium&&r.seats.length&&!r.seats.every(n=>n.commercial?.premium)&&this.toast(y("picker.premiumFallbackNote",{count:e}),"neutral"),this.hold):null}catch(r){this.opts.onError?.(r);let n=r?.reason,o=n==="not_enough_together"?y("picker.couldNotFindSeatsTogether",{count:e}):n==="companion_pair_required"?this.tf("picker.companionPairRequired","Select the adjacent wheelchair place with each companion ticket."):n==="ticket_option_not_applicable"?this.tf("picker.ticketOptionNotApplicable","That ticket choice is not available for the selected seat."):n==="sold_out"?this.tf("picker.ticketTypeSoldOut","That ticket type is sold out. Try another ticket type."):n==="event_closed"?this.tf("picker.seatSalesClosedForEvent","Seat sales have closed for this event."):this.tf("picker.seatsNoLongerAvailableTryAnother","Those seats are no longer available. Try another quantity or ticket type.");return this.toast(o,"error"),null}finally{this.bestAvailableBusy=!1,this.syncTray()}}async release(){let e=this.hold,t=this.controller.currentHold(),i=!0;if(t)i=await this.controller.release();else if(e){let s=[...new Set([...(e.items??[]).map(r=>r.label),...(e.seats??[]).map(r=>r.label)])];if(s.length)try{await this.api.release(this.opts.event,s,e.holdId)}catch(r){this.opts.onError?.(r),i=!1}}if(!i){this.toast(this.tf("picker.couldNotReleaseTickets","Couldn't release your tickets. Your hold is unchanged."),"error");return}this.hold=null,this.forgetHold(),this.handedOff=!1,this.bookedShown=!1,this.ctaPhase="idle",this.stopHoldTimer(),this.gaQty.clear(),this.syncTray(),this.emitHoldChange()}startRealtime(){if(!this.access?.configured||!this.pubApi||this.realtime)return;let e=this.opts.event;this.realtime=new j({url:this.pubApi.subscribeUrl(e),mintTicket:()=>this.pubApi.subscribeTicket(e),onAccessUnavailable:t=>{this.opts.onAccessUnavailable?.(t),this.showAccessPanel(t)},sink:re(this.controller,{flashOnLiveChange:!0,onStatusChange:()=>{this.syncPrices(),this.scheduleOfferRefresh(!0),this.detectBooked(),this.minimap?.refreshMinimap(),this.pushAvailabilityTo3d()},onSelectedObjectUnavailable:(t,i)=>{this.opts.onSelectedObjectUnavailable?.({labels:t,reason:i}),this.syncTray(),this.toast(i==="ineligible"?this.tf("picker.seatNoLongerYours","Some seats are no longer available to you. They have been removed from your order."):this.tf("picker.seatTaken","Someone else took a seat you had picked. It has been removed from your order."),"warning")}})}),this.realtime.start()}async refreshAccess(){return!this.access?.configured||!await this.access.refresh("manual")?!1:(this.dismissAccessPanel(),await this.controller.refresh(),this.realtime?this.realtime.restart():this.startRealtime(),!0)}showAccessPanel(e){if(this.destroyed||!this.root)return;let t=this.accessCopy(e.reason);this.dismissAccessPanel();let i=document.createElement("div");i.className="sl-access",i.setAttribute("role","status"),i.setAttribute("aria-live","polite");let s=document.createElement("div"),r=document.createElement("div");r.className="sl-access-title",r.textContent=t.title;let n=document.createElement("div");if(n.className="sl-access-body",n.textContent=t.body,s.appendChild(r),s.appendChild(n),t.action){let o=document.createElement("button");o.type="button",o.className="sl-access-act",o.textContent=t.action,o.addEventListener("click",()=>{this.refreshAccess()}),s.appendChild(o)}i.appendChild(s),(this.regions?.["bottom-center"]??this.root).appendChild(i),this.accessEl=i}dismissAccessPanel(){this.accessEl?.remove(),this.accessEl=null}accessCopy(e){switch(e){case"paused":return{title:this.tf("picker.accessPausedTitle","These seats are on hold right now"),body:this.tf("picker.accessPausedBody","The organizer has paused this selection. Try again in a few minutes."),action:this.tf("picker.accessRetry","Try again")};case"revoked":return{title:this.tf("picker.accessRevokedTitle","This access link is no longer active"),body:this.tf("picker.accessRevokedBody","Ask whoever sent you here for a new link to keep booking these seats.")};case"no_token":case"provider_failed":return{title:this.tf("picker.accessExpiredTitle","Your access session has ended"),body:this.tf("picker.accessExpiredBody","Sign in again, or reload the page, to keep browsing these seats. Anything you are already holding stays yours."),action:this.tf("picker.accessRetry","Try again")};default:return{title:this.tf("picker.accessInvalidTitle","We couldn\u2019t verify your access"),body:this.tf("picker.accessInvalidBody","You can still book anything shown as available. Contact whoever sent you here for access to the rest.")}}}destroy(){this.destroyed=!0,this.realtime?.stop(),this.realtime=null,this.dismissAccessPanel(),this.access?.clear(),this.hold&&!this.handedOff&&this.controller.release(),this.closeConfirm(),this.dismissTableDialog(!1),this.closeSeatView(),this.closeCheckoutPanel(),this.exit3d(),this.buyerAssetUrls.dispose(),this.stopHoldTimer(),this.toastTimer&&clearTimeout(this.toastTimer),this.liveTimer&&clearTimeout(this.liveTimer),this.offerRefreshTimer&&clearTimeout(this.offerRefreshTimer),this.offerBoundaryTimer&&clearTimeout(this.offerBoundaryTimer),this.offerRefreshTimer=null,this.offerBoundaryTimer=null,this.offerVisibilityHandler&&(document.removeEventListener("visibilitychange",this.offerVisibilityHandler),this.offerVisibilityHandler=null);for(let e of this.motionTimers)clearTimeout(e);this.motionTimers.clear(),this.ro?.disconnect(),this.ro=null,this.framedFs&&this.setFramedFs(!1),this.escHandler&&document.removeEventListener("keydown",this.escHandler),this.fsChangeHandler&&document.removeEventListener("fullscreenchange",this.fsChangeHandler),this.fsEscHandler&&window.removeEventListener("keydown",this.fsEscHandler),this.controller.destroy(),this.projectionEl=null,this.root?.remove(),this.root=null,this.modalScrim&&(this.modalScrim.remove(),this.modalScrim=null,this.prevFocus?.isConnected&&this.prevFocus.focus({preventScroll:!0}),this.prevFocus=null)}};function Vi(a,e={}){let t=e.origin??"";if(!t)try{t=new URL(a.src,window.location.href).origin}catch{t=""}let i=!1,s=null,r=null,n=null,o="",l=null,d=()=>{if(i)return;i=!0,s=a.getAttribute("style"),Object.assign(a.style,{position:"fixed",inset:"0",width:"100vw",height:"100vh",margin:"0",border:"0",zIndex:"2147483000",background:"#101625"});let p=document.documentElement;r=p.style.overflow,p.style.overflow="hidden",document.body&&(n=document.body.style.overflow,document.body.style.overflow="hidden"),l=f=>{f.key==="Escape"&&h()},window.addEventListener("keydown",l)},h=()=>{i&&(i=!1,s===null?a.removeAttribute("style"):a.setAttribute("style",s),s=null,o&&(a.style.height=o),r!==null&&(document.documentElement.style.overflow=r,r=null),n!==null&&document.body&&(document.body.style.overflow=n,n=null),l&&(window.removeEventListener("keydown",l),l=null))},c=p=>{if(p.source!==a.contentWindow||t&&p.origin!==t||!p.data||typeof p.data!="object")return;let f=p.data;if(f.type==="seatlayer:height"){typeof f.px=="number"&&Number.isFinite(f.px)&&f.px>0&&(o=`${Math.round(f.px)}px`,i||(a.style.height=o));return}f.type==="seatlayer:fullscreen"&&(f.on===!0?d():f.on===!1&&h())};return window.addEventListener("message",c),()=>{window.removeEventListener("message",c),h()}}export{Y as ApiError,fe as BuyerAccessContext,ne as BuyerAccessUnavailableError,j as BuyerRealtimeClient,Me as EmbeddedDesigner,tt as SEATING_CHART_CALLBACK_PROPS,Ze as SEATING_CHART_HANDLE_METHODS,Je as SEATING_CHART_IDENTITY_PROPS,et as SEATING_CHART_VALUE_PROPS,Ne as SeatPicker,Ae as SeatingChart,Vi as attachPickerFrame,Gt as bindSeatingChartHandle,Yt as buildSeatingChartOptions,de as createBuyerAccessContext,re as createControllerSink,Pe as parseTicketOfferAvailability,He as ticketOfferPrices};