@seatlayer/js 0.59.0 → 0.61.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 P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerController as Wt,formatMoney as Gt,loadLocale as Yt,setStringOverrides as Xt,t as ee}from"@seatlayer/core";var K="seatlayer.v1";function zt(o){let e=typeof o.default=="string"?o.default:"free",t={};if(o.seats&&typeof o.seats=="object")for(let[i,s]of Object.entries(o.seats))typeof s=="string"&&s!==e&&(t[i]=s);return{default:e,exceptions:t}}function Dt(o,e){if(!o||o.default!==e.default)return null;let t=[];for(let[i,s]of Object.entries(e.exceptions))o.exceptions[i]!==s&&t.push({label:i,status:s});for(let i of Object.keys(o.exceptions))i in e.exceptions||t.push({label:i,status:e.default});return t}function Ft(o,e){for(let t of e)t.status===o.default?delete o.exceptions[t.label]:o.exceptions[t.label]=t.status}function Xe(o){if(/(?:^|[?&#])(?:token|access_token|bearer|authorization|ticket|tkt|bse)=/i.test(o))throw new Error("seatlayer: refusing to open a socket with a credential in the URL");if(/\bbse_[A-Za-z0-9._-]+/.test(o))throw new Error("seatlayer: refusing to open a socket with a credential in the URL")}var V=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,Xe(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;Xe(i);let s;try{s=(this.opts.socketFactory??((n,a)=>new WebSocket(n,a)))(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=zt(e),s=Dt(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&&Ft(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 jt(o){return o==="blocked"?"not_for_sale":o==="held"||o==="booked"||o==="free"||o==="not_for_sale"?o:"free"}function re(o,e={}){let t=i=>{let s=o.tableSelection(i);if(s)return s.physicalSeatIds;let r=o.idForLabel(i);return r?[r]:[]};return{applyStatuses(i){let s=o.currentHold()?.labels??[],r={free:[],held:[],booked:[],not_for_sale:[]},n=[],a=[],l=new Map(o.getSelection().map(c=>[c.label,c.id]));for(let c of i){let u=t(c.label);if(!u.length)continue;let p=jt(c.status);if(r[p].push(...u),e.flashOnLiveChange&&p!=="free"&&!s.includes(c.label)&&u.some(d=>o.getStatus(d)==="free")){let d=p==="held"?"#f4b740":"#f43f5e";for(let f of u)n.push({id:f,color:d})}p!=="free"&&!s.includes(c.label)&&l.has(c.label)&&a.push(c.label)}for(let c of["free","held","booked","not_for_sale"])r[c].length&&o.setStatus(r[c],c);for(let c of n)o.flashSeat(c.id,c.color);if(a.length){let c=a.flatMap(p=>t(p));c.length&&o.deselect(c);let u=i.some(p=>p.status==="blocked"&&a.includes(p.label));e.onSelectedObjectUnavailable?.(a,u?"ineligible":"taken")}e.onStatusChange?.()},async resync(){await o.refresh()},onSections(i,s){o.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}},Qe=10,Ze=1;function Je(o,e){let t=(o??"").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 Vt={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 a=await this.access?.authorization(i.auth?"unauthorized":"initial");a&&(r.Authorization=a);let l=await fetch(`${this.base}${e}`,{method:s,headers:r,body:n,credentials:"omit"}),u=(l.headers.get("content-type")??"").includes("application/json")?await l.json().catch(()=>null):null;if(!l.ok){let p=u,d=p?.code??p?.error;if(this.access?.configured&&(l.status===401||l.status===403||l.status===422)&&await this.access.handleFailure(l.status,d)&&!i.auth)return this.request(e,t,{...i,auth:!0});if(l.status===409){let m=d?Vt[d]:void 0,g=p?.conflicts?.map(w=>w.label)??t.labels??[];m&&this.onObjectUnavailable?.({labels:g,reason:m,code:d})}let f;if(l.status===429&&(f=Je(l.headers.get("Retry-After"),p?.retryAfterSeconds)??Ze,s==="GET"&&!i.rateLimit&&f<=Qe))return await new Promise(m=>setTimeout(m,f*1e3)),this.request(e,t,{...i,rateLimit:!0});throw new Y(l.status,p?.error??`request_failed_${l.status}`,d,p?.conflicts,p?.reason,f)}return u}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 a=(r.headers.get("content-type")??"").includes("application/json")?await r.json().catch(()=>null):null,l=a?.code??a?.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 c;if(r.status===429&&(c=Je(r.headers.get("Retry-After"),a?.retryAfterSeconds)??Ze,!t.rateLimit&&c<=Qe))return await new Promise(u=>setTimeout(u,c*1e3)),this.requestBlob(e,{...t,rateLimit:!0});throw new Y(r.status,a?.error??`request_failed_${r.status}`,l,void 0,void 0,c)}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 V({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}},_t=new Set(["buyer_access_expired"]),Nt=new Set(["paused","provider_failed","channel_denied"]);function Ut(o,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 o===401?"invalid":null}function qt(o,e){return o===401&&!!e&&_t.has(e)}var Kt=3e4,O,I,Z,oe,U,_,J,ae,le,ce,$,Ae,fe,Q,be=class{constructor(e){B(this,$);B(this,O,null);B(this,I,0);B(this,Z);B(this,oe);B(this,U,null);B(this,_,null);B(this,J,null);B(this,ae);B(this,le);B(this,ce,!1);if(R(this,Z,e.provider),R(this,oe,e.skewMs??Kt),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,$,Ae).call(this,t)}R(this,ce,!!P(this,Z)||!!P(this,O))}get configured(){return P(this,ce)}get unavailable(){return P(this,_)}get hasToken(){return!!P(this,O)&&(P(this,I)===0||P(this,I)>Date.now())}get expiresAt(){return P(this,I)}async authorization(e="initial"){if(!this.configured)return null;if(P(this,_))throw new ne(P(this,_));let t=Date.now();if(!P(this,O)||P(this,I)>0&&P(this,I)-P(this,oe)<=t){let s=!!P(this,O)&&P(this,I)>0&&P(this,I)<=t,r=P(this,O)?s?"expired":"expiring":e,n=await F(this,$,fe).call(this,r);if(!n)throw new ne(P(this,_)??P(this,J)??F(this,$,Q).call(this,"provider_failed"));return`Bearer ${n}`}return`Bearer ${P(this,O)}`}async handleFailure(e,t){var s;if(!this.configured)return!1;if(qt(e,t)){R(this,O,null),R(this,I,0);let r=await F(this,$,fe).call(this,"unauthorized",t);return(s=P(this,ae))==null||s.call(this,{reason:"unauthorized",code:t,refreshed:!!r}),!!r}let i=Ut(e,t);return i&&F(this,$,Q).call(this,i,t,e),!1}async refresh(e="manual"){return R(this,_,null),R(this,J,null),R(this,O,null),R(this,I,0),!!await F(this,$,fe).call(this,e)}clear(){R(this,O,null),R(this,I,0),R(this,U,null)}toJSON(){return{configured:this.configured,hasToken:this.hasToken}}toString(){return"[BuyerAccessContext redacted]"}};O=new WeakMap,I=new WeakMap,Z=new WeakMap,oe=new WeakMap,U=new WeakMap,_=new WeakMap,J=new WeakMap,ae=new WeakMap,le=new WeakMap,ce=new WeakMap,$=new WeakSet,Ae=function(e){return!e||typeof e.token!="string"||!e.token?null:(R(this,O,e.token),R(this,I,typeof e.expiresAt=="number"?e.expiresAt:0),P(this,O))},fe=function(e,t){if(P(this,U))return P(this,U);let i=P(this,Z);if(!i)return F(this,$,Q).call(this,"no_token",t),Promise.resolve(null);let s=(async()=>{try{let r=await i({reason:e}),n=F(this,$,Ae).call(this,r);return n||(F(this,$,Q).call(this,"provider_failed",t),null)}catch{return F(this,$,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),Nt.has(e)||(R(this,_,s),R(this,O,null),R(this,I,0)),(r=P(this,le))==null||r.call(this,s),s};function de(o,e={}){return!o.buyerAccessTokenProvider&&!o.buyerAccessToken?null:new be({provider:o.buyerAccessTokenProvider,token:o.buyerAccessToken,...e})}var ge='<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 Qt="https://api.seatlayer.io",Zt=10;function Jt(o){if(typeof o=="string"){let e=document.querySelector(o);if(!e)throw new Error(`seatmap: container "${o}" not found`);return e}if(!(o instanceof HTMLElement))throw new Error("seatmap: container must be a CSS selector or an HTMLElement");return o}var Le=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??Qt).replace(/\/+$/,""),{access:this.access??void 0,onObjectUnavailable:i=>this.opts.onSelectedObjectUnavailable?.(i)});this.api=t,this.controller=new Wt({transport:t,eventKey:e.event,maxSelection:e.maxSelection??Zt,selectedObjects:e.selectedObjects,selectableObjects:e.selectableObjects,numberOfPlacesToSelect:e.numberOfPlacesToSelect,selectionValidators:e.selectionValidators,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 Yt(this.opts.locale),this.opts.messages&&Xt(this.opts.messages),this.mount=Jt(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">'+ge+`</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=Gt(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){let s=t.violations.includes("numberOfPlacesToSelect");throw Object.assign(new Error(s?`seatmap: select exactly ${t.required} places before holding`:"seatmap: adjust the ticket selection before holding"),{code:s?"selection_count_mismatch":"selection_invalid",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 V({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 et=["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"],ei={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 ti(o){let e={};for(let t of et)e[t]=(...i)=>{let s=o();return s?s[t](...i):ei[t]()};return e}var tt=["event","apiBase","maxSelection","numberOfPlacesToSelect","selectionValidators","publicKey","locale","currency","colorblindSafe","initialView","errorDisplay"],it=[...tt,"selectedObjects","selectableObjects","messages","seatTooltip","buyerAccessTokenProvider","buyerAccessToken"],st=["onSelectionChange","onSelectionValidityChange","onSelectionValid","onSelectionInvalid","onSelectionLimit","onHold","onHoldRestored","onHoldExpired","onGAClick","onError","onDeckTap","onHint","onSeatHover","onAccessExpired","onAccessUnavailable","onSelectedObjectUnavailable"];function ii(o,e,t){let i={container:o};for(let s of it)i[s]=e[s];for(let s of st)i[s]=t[s];return i}var si=new Set(["seatlayer.designer.ready","seatlayer.designer.saved","seatlayer.designer.published","seatlayer.designer.close","seatlayer.designer.error"]),ri=2e4,ni=480,oi=180*1e3,ai=900*1e3,li=.8,ci=30*1e3,di=1e5,pi=4,hi=50;function Pe(o){if(typeof o!="string")return o;let e=document.querySelector(o);if(!e)throw new Error(`EmbeddedDesigner container not found: ${o}`);return e}function ui(o){let e=(o??"").toLowerCase();return e.includes("expire")||e.includes("revoke")||e==="401"?"expired":e.includes("mismatch")?"mismatch":e.includes("timeout")?"timeout":"load"}var mi={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"||!si.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 a=ui(i.code);if(a==="expired"&&this.autoRenewEnabled()&&!this.autoRecoverUsed){this.autoRecoverUsed=!0,this.clearRenewTimer(),this.options.onRequestRelaunch();return}(typeof i.fatal=="boolean"?i.fatal:a!=="load"||this.phase!=="ready")&&this.showError(a),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=Pe(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??ri;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",`${di}px`,"important");let a=i();return s?t.style.setProperty("height",s,r):t.style.removeProperty("height"),!(a-n>pi)&&n>=hi?"container":"viewport"}applyFill(){if(!this.frame||this.pinned)return;let e=this.options.minHeight??ni;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<ai?t*li:t-oi,s=Math.max(ci,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{Pe(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=Pe(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 P,b as D,c as R,d as j}from"./chunk-OSZ7DOEH.js";import{PickerController as Bi,formatMoney as Di,getLocale as je,loadLocale as Et,localeDirection as Ct,LOCALE_NAMES as Fi,resolveLocale as ji,setStringOverrides as At,t as V}from"@seatlayer/core";var J="seatlayer.v1";function xi(r){let e=typeof r.default=="string"?r.default:"free",i={};if(r.seats&&typeof r.seats=="object")for(let[t,s]of Object.entries(r.seats))typeof s=="string"&&s!==e&&(i[t]=s);return{default:e,exceptions:i}}function wi(r,e){if(!r||r.default!==e.default)return null;let i=[];for(let[t,s]of Object.entries(e.exceptions))r.exceptions[t]!==s&&i.push({label:t,status:s});for(let t of Object.keys(r.exceptions))t in e.exceptions||i.push({label:t,status:e.default});return i}function ki(r,e){for(let i of e)i.status===r.default?delete r.exceptions[i.label]:r.exceptions[i.label]=i.status}function ct(r){if(/(?:^|[?&#])(?:token|access_token|bearer|authorization|ticket|tkt|bse)=/i.test(r))throw new Error("seatlayer: refusing to open a socket with a credential in the URL");if(/\bbse_[A-Za-z0-9._-]+/.test(r))throw new Error("seatlayer: refusing to open a socket with a credential in the URL")}var _=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,ct(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=[J];if(this.opts.mintTicket){let n;try{n=await this.opts.mintTicket()}catch(a){this.reportIfAccessError(a),this.scheduleReconnect();return}if(this.stopped)return;n?.protocols?.length?(e=[...n.protocols],e.includes(J)||e.unshift(J)):n?.ticket&&(e=[J,`tkt.${n.ticket}`])}let i=this.version!==null;i&&e.push(`sv.${this.version}`);let t=this.useQueryMarker?`${this.opts.url}${this.opts.url.includes("?")?"&":"?"}pv=1`:this.opts.url;ct(t);let s;try{s=(this.opts.socketFactory??((a,o)=>new WebSocket(a,o)))(t,e)}catch{this.scheduleReconnect();return}this.ws=s,s.onopen=()=>{this.ws===s&&(this.attempt=0,this.v1=s.protocol===J,this.v1||(this.useQueryMarker=!0),this.startKeepalive(s),i?this.resumeTimer=setTimeout(()=>{this.resumeTimer=null,this.opts.sink.resync()},5e3):this.opts.sink.resync())},s.onmessage=n=>{if(this.ws!==s)return;let a;try{a=JSON.parse(typeof n.data=="string"?n.data:"")}catch{return}!a||typeof a!="object"||this.handleFrame(a)},s.onclose=n=>{if(this.ws===s){if(this.ws=null,this.clearTimers(),n?.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 i=typeof e.type=="string"?e.type:"";if(e.protocol===1&&(this.v1=!0),typeof e.snapshotVersion=="number"&&(this.version=e.snapshotVersion),i==="pong"){this.clearPongTimer();return}if(Array.isArray(e.hidden)||Array.isArray(e.closed)){let t=Array.isArray(e.hidden)?e.hidden:[],s=Array.isArray(e.closed)?e.closed:[],n=t.join("\0"),a=s.join("\0");(n!==this.hidden||a!==this.closedSections)&&(this.hidden=n,this.closedSections=a,this.opts.sink.onSections?.(t,s))}if(i!=="hidden"){if(i==="presence"){this.opts.sink.onPresence?.({shoppingSessions:Number(e.shoppingSessions)||0,activeHolds:Number(e.activeHolds)||0});return}if(i!=="allocation"){if(i==="snapshot"||!i&&e.seats){this.answered();let t=xi(e),s=wi(this.projection,t);this.projection=t,s===null?this.opts.sink.applyProjection?this.opts.sink.applyProjection(t):this.opts.sink.resync():s.length&&this.opts.sink.applyStatuses(s);return}if(i==="delta"&&Array.isArray(e.changes)){this.answered();let t=e.changes.filter(s=>typeof s?.label=="string"&&typeof s?.status=="string").map(s=>({label:s.label,status:s.status}));if(!t.length)return;this.projection&&ki(this.projection,t),this.opts.sink.applyStatuses(t)}}}}answered(){this.resumeTimer&&(clearTimeout(this.resumeTimer),this.resumeTimer=null)}reportIfAccessError(e){let i=e?.reason;e?.name==="BuyerAccessUnavailableError"&&(this.stopped=!0,this.opts.onAccessUnavailable?.({reason:i??"invalid",code:e.code,status:e.status,retryable:i==="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),i=Math.min(1e3*2**e,15e3),t=Math.random()*i;this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.connect()},t)}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 Si(r){return r==="blocked"?"not_for_sale":r==="held"||r==="booked"||r==="free"||r==="not_for_sale"?r:"free"}function he(r,e={}){let i=t=>{let s=r.tableSelection(t);if(s)return s.physicalSeatIds;let n=r.idForLabel(t);return n?[n]:[]};return{applyStatuses(t){let s=r.currentHold()?.labels??[],n={free:[],held:[],booked:[],not_for_sale:[]},a=[],o=[],l=new Map(r.getSelection().map(c=>[c.label,c.id]));for(let c of t){let h=i(c.label);if(!h.length)continue;let p=Si(c.status);if(n[p].push(...h),e.flashOnLiveChange&&p!=="free"&&!s.includes(c.label)&&h.some(d=>r.getStatus(d)==="free")){let d=p==="held"?"#f4b740":"#f43f5e";for(let f of h)a.push({id:f,color:d})}p!=="free"&&!s.includes(c.label)&&l.has(c.label)&&o.push(c.label)}for(let c of["free","held","booked","not_for_sale"])n[c].length&&r.setStatus(n[c],c);for(let c of a)r.flashSeat(c.id,c.color);if(o.length){let c=o.flatMap(p=>i(p));c.length&&r.deselect(c);let h=t.some(p=>p.status==="blocked"&&o.includes(p.label));e.onSelectedObjectUnavailable?.(o,h?"ineligible":"taken")}e.onStatusChange?.()},async resync(){await r.refresh()},onSections(t,s){r.refresh(),e.onSections?.(t,s)}}}var se=class extends Error{constructor(e,i,t,s,n,a){super(i),this.name="ApiError",this.status=e,this.code=t,this.conflicts=s,this.reason=n,this.retryAfterS=a}},dt=10,pt=1;function ht(r,e){let i=(r??"").trim();if(i){let t=Number(i);if(Number.isFinite(t)&&t>=0)return Math.ceil(t);let s=Date.parse(i);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 Ti={seat_conflict:"taken",conflict:"taken",channel_assignment_conflict:"ineligible",allocation_exhausted:"exhausted"},re=class{constructor(e,i={}){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=i.access,this.onObjectUnavailable=i.onObjectUnavailable}get accessScoped(){return!!this.access?.configured}async request(e,i={},t={}){let s=i.method??"GET",n={},a;i.body!==void 0&&(n["Content-Type"]="application/json",a=JSON.stringify(i.body));let o=await this.access?.authorization(t.auth?"unauthorized":"initial");o&&(n.Authorization=o);let l=await fetch(`${this.base}${e}`,{method:s,headers:n,body:a,credentials:"omit"}),h=(l.headers.get("content-type")??"").includes("application/json")?await l.json().catch(()=>null):null;if(!l.ok){let p=h,d=p?.code??p?.error;if(this.access?.configured&&(l.status===401||l.status===403||l.status===422)&&await this.access.handleFailure(l.status,d)&&!t.auth)return this.request(e,i,{...t,auth:!0});if(l.status===409){let m=d?Ti[d]:void 0,g=p?.conflicts?.map(T=>T.label)??i.labels??[];m&&this.onObjectUnavailable?.({labels:g,reason:m,code:d})}let f;if(l.status===429&&(f=ht(l.headers.get("Retry-After"),p?.retryAfterSeconds)??pt,s==="GET"&&!t.rateLimit&&f<=dt))return await new Promise(m=>setTimeout(m,f*1e3)),this.request(e,i,{...t,rateLimit:!0});throw new se(l.status,p?.error??`request_failed_${l.status}`,d,p?.conflicts,p?.reason,f)}return h}async requestBlob(e,i={}){let t={},s=await this.access?.authorization(i.auth?"unauthorized":"initial");s&&(t.Authorization=s);let n=await fetch(`${this.base}${e}`,{method:"GET",headers:t,credentials:"omit"});if(n.ok)return n.blob();let o=(n.headers.get("content-type")??"").includes("application/json")?await n.json().catch(()=>null):null,l=o?.code??o?.error;if(this.access?.configured&&(n.status===401||n.status===403||n.status===422)&&await this.access.handleFailure(n.status,l)&&!i.auth)return this.requestBlob(e,{...i,auth:!0});let c;if(n.status===429&&(c=ht(n.headers.get("Retry-After"),o?.retryAfterSeconds)??pt,!i.rateLimit&&c<=dt))return await new Promise(h=>setTimeout(h,c*1e3)),this.requestBlob(e,{...i,rateLimit:!0});throw new se(n.status,o?.error??`request_failed_${n.status}`,l,void 0,void 0,c)}chart(e){return this.request(`/pub/events/${encodeURIComponent(e)}/chart`)}asset(e,i){return/^[a-zA-Z0-9._-]+$/.test(i)?this.requestBlob(`/pub/events/${encodeURIComponent(e)}/assets/${encodeURIComponent(i)}`):Promise.reject(new se(404,"not_found","not_found"))}objects(e){return this.request(`/pub/events/${encodeURIComponent(e)}/objects?compact=1`)}hold(e,i,t,s){return this.request(`/pub/events/${encodeURIComponent(e)}/hold`,{method:"POST",body:{selections:i,...t?{ttlMs:t}:{},...s?{replaceHoldId:s}:{}},labels:i.map(n=>n.label)})}bestAvailable(e,i,t,s,n){return this.request(`/pub/events/${encodeURIComponent(e)}/best-available`,{method:"POST",body:{qty:i,...t?{categoryKey:t}:{},...s?{zoneId:s}:{},...n?{ttlMs:n}:{}}})}resume(e,i){return this.request(`/pub/events/${encodeURIComponent(e)}/hold/resume`,{method:"POST",body:{holdId:i}})}release(e,i,t){return this.request(`/pub/events/${encodeURIComponent(e)}/release`,{method:"POST",body:{labels:i,holdId:t}})}extend(e,i,t){return this.request(`/pub/events/${encodeURIComponent(e)}/extend`,{method:"POST",body:{holdId:i,...t?{ttlMs:t}:{}}})}paymentOptions(e){return this.request(`/pub/events/${encodeURIComponent(e)}/payment-options`)}availability(e,i=!1){return this.request(`/pub/events/${encodeURIComponent(e)}/availability${i?"?live=1":""}`)}startCheckout(e,i){return this.request(`/pub/events/${encodeURIComponent(e)}/checkout`,{method:"POST",body:i})}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 i=this.base.replace(/^http/,"ws"),t=new URLSearchParams({surface:"picker",viewerId:this.viewerId});return`${i}/pub/events/${encodeURIComponent(e)}/subscribe?${t}`}socketUrl(e){return this.accessScoped?"":this.subscribeUrl(e)}socketProtocols(e){return this.accessScoped?[]:[J]}createRealtime(e,i){return this.accessScoped?null:new _({url:this.subscribeUrl(e),sink:i})}};var ue=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}},Ei=new Set(["buyer_access_expired"]),Ci=new Set(["paused","provider_failed","channel_denied"]);function Ai(r,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 r===401?"invalid":null}function Li(r,e){return r===401&&!!e&&Ei.has(e)}var Pi=3e4,$,z,ae,me,Y,q,oe,fe,ge,be,B,ze,Te,ne,Ee=class{constructor(e){D(this,B);D(this,$,null);D(this,z,0);D(this,ae);D(this,me);D(this,Y,null);D(this,q,null);D(this,oe,null);D(this,fe);D(this,ge);D(this,be,!1);if(R(this,ae,e.provider),R(this,me,e.skewMs??Pi),R(this,fe,e.onExpired),R(this,ge,e.onUnavailable),e.token){let i=typeof e.token=="string"?{token:e.token}:e.token;j(this,B,ze).call(this,i)}R(this,be,!!P(this,ae)||!!P(this,$))}get configured(){return P(this,be)}get unavailable(){return P(this,q)}get hasToken(){return!!P(this,$)&&(P(this,z)===0||P(this,z)>Date.now())}get expiresAt(){return P(this,z)}async authorization(e="initial"){if(!this.configured)return null;if(P(this,q))throw new ue(P(this,q));let i=Date.now();if(!P(this,$)||P(this,z)>0&&P(this,z)-P(this,me)<=i){let s=!!P(this,$)&&P(this,z)>0&&P(this,z)<=i,n=P(this,$)?s?"expired":"expiring":e,a=await j(this,B,Te).call(this,n);if(!a)throw new ue(P(this,q)??P(this,oe)??j(this,B,ne).call(this,"provider_failed"));return`Bearer ${a}`}return`Bearer ${P(this,$)}`}async handleFailure(e,i){var s;if(!this.configured)return!1;if(Li(e,i)){R(this,$,null),R(this,z,0);let n=await j(this,B,Te).call(this,"unauthorized",i);return(s=P(this,fe))==null||s.call(this,{reason:"unauthorized",code:i,refreshed:!!n}),!!n}let t=Ai(e,i);return t&&j(this,B,ne).call(this,t,i,e),!1}async refresh(e="manual"){return R(this,q,null),R(this,oe,null),R(this,$,null),R(this,z,0),!!await j(this,B,Te).call(this,e)}clear(){R(this,$,null),R(this,z,0),R(this,Y,null)}toJSON(){return{configured:this.configured,hasToken:this.hasToken}}toString(){return"[BuyerAccessContext redacted]"}};$=new WeakMap,z=new WeakMap,ae=new WeakMap,me=new WeakMap,Y=new WeakMap,q=new WeakMap,oe=new WeakMap,fe=new WeakMap,ge=new WeakMap,be=new WeakMap,B=new WeakSet,ze=function(e){return!e||typeof e.token!="string"||!e.token?null:(R(this,$,e.token),R(this,z,typeof e.expiresAt=="number"?e.expiresAt:0),P(this,$))},Te=function(e,i){if(P(this,Y))return P(this,Y);let t=P(this,ae);if(!t)return j(this,B,ne).call(this,"no_token",i),Promise.resolve(null);let s=(async()=>{try{let n=await t({reason:e}),a=j(this,B,ze).call(this,n);return a||(j(this,B,ne).call(this,"provider_failed",i),null)}catch{return j(this,B,ne).call(this,"provider_failed",i),null}finally{R(this,Y,null)}})();return R(this,Y,s),s},ne=function(e,i,t){var n;let s={reason:e,code:i,status:t,retryable:e==="paused"||e==="channel_denied"};return R(this,oe,s),Ci.has(e)||(R(this,q,s),R(this,$,null),R(this,z,0)),(n=P(this,ge))==null||n.call(this,s),s};function ve(r,e={}){return!r.buyerAccessTokenProvider&&!r.buyerAccessToken?null:new Ee({provider:r.buyerAccessTokenProvider,token:r.buyerAccessToken,...e})}import{t as G,tCount as ee}from"@seatlayer/core";var M=r=>String(r??"").replace(/[&<>"']/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[e]);function le(r,e){let i=0;for(let t of r.get(e)?.values()??[])i+=t;return i}function ut(r){let e=[];for(let[i,t]of r)for(let[s,n]of t)n>0&&e.push({areaId:i,tierId:s,qty:n});return e}function mt(r){let e=new Map;for(let i of r.keys())e.set(i,le(r,i));return e}function ye(r,e,i,t){let s=r.get(e)??new Map;t>0?s.set(i,t):s.delete(i),s.size?r.set(e,s):r.delete(e)}function ft(r){let e=new Map;for(let i of r)i.objectType!=="ga"||!i.objectId||e.set(i.objectId,(e.get(i.objectId)??0)+(i.quantity??1));return e}function ce(r,e){let i=ft(e),t=0;for(let s of r.keys())t+=Math.max(0,le(r,s)-(i.get(s)??0));return t}function gt(r,e,i){let t=ft(i),s=0;for(let n of e){let a=r.gaQty.get(n.id);if(!a)continue;let o=t.get(n.id)??0;for(let[l,c]of a){let h=Math.max(0,c-o);o=Math.max(0,o-c),s+=h*r.paidPrice(n.categoryKey,l,Mi(n,l),n.id)}}return s}function Mi(r,e){return e?r.tiers?.find(i=>i.id===e)?.price??r.price:r.price}function bt(r){let e=[],i=new Map;for(let t of r){if(t.objectType!=="ga"||!t.objectId){e.push({...t,labels:[t.label]});continue}let s=`${t.objectId}\0${t.tierId??""}`,n=i.get(s);if(n){n.quantity=(n.quantity??0)+(t.quantity??1),n.labels.push(t.label);continue}let a={...t,quantity:t.quantity??1,labels:[t.label]};i.set(s,a),e.push(a)}return e}function vt(r,e,i){let t=new Set(i);for(let s of e)s.objectType==="ga"&&s.objectId&&t.has(s.label)&&ye(r,s.objectId,s.tierId??null,0)}function yt(r,e){if(r.objectType!=="ga")return r.label;let i=e.find(t=>t.id===r.objectId);return i?.displayLabel??i?.label??r.label}function Hi(r){let e=new Map;for(let i of r){if(i.objectType!=="ga"||!i.objectId)continue;let t=`${i.objectId}\0${i.tierId??""}`;e.set(t,(e.get(t)??0)+(i.quantity??1))}return e}function Ce(r){let e=r.tiers??[];return e.length>1?e.map(i=>({id:i.id,label:i.name||i.id,price:i.price})):[{id:null,label:r.displayType??G("picker.generalAdmission"),price:r.price}]}function xt(r,e){let i=r.totalTicketCount()-le(r.gaQty,e.id);return Math.max(0,Math.min(e.available,r.maxTickets-i))}function De(r,e,i,t){if(U(r,!1),r.salesClosed){r.toast(r.tf("picker.salesClosedToast","Sales are closed for this event."),"warning");return}let s=Ce(e),n=r.gaQty.get(e.id),a=le(r.gaQty,e.id)>0,o=xt(r,e);if(o<=0&&!a){r.toast(e.available>0?G("picker.maxTicketsForOrder",{count:r.maxTickets}):r.tf("picker.soldOutTitle","Sold out"),"warning");return}if(r.onGAPromptHook){let d={};for(let[m,g]of n??[])d[m??""]=g;if(r.onGAPromptHook({area:e,selected:d,min:0,max:o,tiers:s,confirm:m=>{$i(r,e,s,m,o)},cancel:()=>U(r)})===!0)return}let l=new Map;for(let d of s)l.set(d.id,n?.get(d.id)??0);!a&&o>0&&l.set(s[0].id,1);let c={area:e,tiers:s,draft:l,max:o,reopened:a},h=r.root?.dataset.layout==="narrow",p=document.createElement("div");p.className=h?"sl-ga-scrim":"sl-ga-pop-layer",p.innerHTML=Ri(r,c,h),r.root?.appendChild(p),r.gaPromptEl=p,r.gaPromptReturnFocus=t??document.activeElement,h||zi(r,p,i),r.reducedMotion()&&(p.dataset.motion="reduced"),kt(r,c),Oi(r,p,c),requestAnimationFrame(()=>p.querySelector('[data-ga-step="1"]')?.focus())}function Ri(r,e,i){let{area:t,tiers:s}=e,n=s.length>1,a=t.displayLabel??t.label,o=s.map(l=>`<div class="sl-ga-prompt-row" data-ga-tier="${M(l.id??"")}"><div class="sl-ga-prompt-label"><span>${M(n?l.label:r.tf("picker.gaChooseTickets","How many tickets?"))}</span>`+(n?`<small>${M(r.money(r.paidPrice(t.categoryKey,l.id,l.price,t.id)))}</small>`:"")+`</div><div class="sl-ga-stepper" role="group" aria-label="${M(n?l.label:a)}"><button type="button" data-ga-step="-1" aria-label="${M(r.tf("picker.fewer","Fewer"))}">\u2212</button><output data-ga-qty aria-live="polite">0</output><button type="button" data-ga-step="1" aria-label="${M(r.tf("picker.more","More"))}">+</button></div></div>`).join("");return`<section class="${i?"sl-ga-sheet":"sl-ga-pop"}" role="dialog" aria-modal="true" aria-label="${M(G("picker.gaChooseForArea",{area:a}))}"><div class="sl-ga-prompt-head"><div class="sl-ga-prompt-eyebrow">${M(t.displayType??r.tf("picker.generalAdmission","General admission"))}</div><h2 class="sl-ga-prompt-title">${M(a)}</h2><p class="sl-ga-prompt-sub" data-ga-sub></p><button type="button" class="sl-ga-prompt-close" data-ga-cancel aria-label="${M(G("common.close"))}">\xD7</button></div><div class="sl-ga-prompt-body">${o}`+(s.length>1?`<div class="sl-ga-prompt-total"><span>${M(r.tf("picker.total","Total"))}</span><b data-ga-total></b></div>`:"")+'<p class="sl-ga-prompt-hint" data-ga-hint></p></div><div class="sl-ga-prompt-actions">'+(e.reopened?`<button type="button" class="sl-ga-prompt-remove" data-ga-remove>${M(r.tf("picker.gaRemove","Remove"))}</button>`:`<button type="button" class="sl-ga-prompt-remove" data-ga-cancel>${M(G("common.cancel"))}</button>`)+'<button type="button" class="sl-ga-prompt-confirm" data-ga-confirm></button></div></section>'}function Fe(r){let e=0;for(let i of r.draft.values())e+=i;return e}function wt(r,e){let i=0;for(let t of e.tiers)i+=(e.draft.get(t.id)??0)*r.paidPrice(e.area.categoryKey,t.id,t.price,e.area.id);return i}function kt(r,e){let i=r.gaPromptEl;if(!i)return;let t=Fe(e),s=wt(r,e);i.querySelectorAll("[data-ga-tier]").forEach(c=>{let h=c.dataset.gaTier?c.dataset.gaTier:null,p=e.draft.get(h)??0,d=c.querySelector("[data-ga-qty]");d&&(d.value=String(p)),c.querySelectorAll("[data-ga-step]").forEach(f=>{f.disabled=Number(f.dataset.gaStep)<0?p<=0:t>=e.max})});let n=i.querySelector("[data-ga-sub]");n&&(n.textContent=`${r.money(r.paidPrice(e.area.categoryKey,e.tiers[0].id,e.tiers[0].price,e.area.id))} \xB7 ${ee("picker.leftCount",e.area.available)}`);let a=i.querySelector("[data-ga-total]");a&&(a.textContent=r.money(s));let o=i.querySelector("[data-ga-hint]");o&&(o.textContent=t>=e.max&&e.max>0?e.area.available<=e.max?ee("picker.leftCount",e.area.available):G("picker.maxTicketsForOrder",{count:r.maxTickets}):"");let l=i.querySelector("[data-ga-confirm]");l&&(l.textContent=e.reopened?ee("picker.gaUpdate",t,{count:t}):ee("picker.gaAdd",t,{count:t,price:r.money(s)}),l.disabled=t<=0&&!e.reopened)}function Oi(r,e,i){e.querySelectorAll("[data-ga-step]").forEach(t=>{t.addEventListener("click",()=>{let s=t.closest("[data-ga-tier]");if(!s)return;let n=s.dataset.gaTier?s.dataset.gaTier:null,a=Number(t.dataset.gaStep),o=i.draft.get(n)??0,l=i.max-Fe(i);i.draft.set(n,Math.max(0,o+(a>0?Math.min(1,l):-1))),kt(r,i)})}),e.querySelectorAll("[data-ga-cancel]").forEach(t=>t.addEventListener("click",()=>U(r))),e.querySelector("[data-ga-remove]")?.addEventListener("click",()=>{r.gaQty.delete(i.area.id),U(r),r.syncTray(),Be(r,G("picker.gaRemoved",{area:i.area.displayLabel??i.area.label}))}),e.querySelector("[data-ga-confirm]")?.addEventListener("click",()=>{Ii(r,i)}),e.addEventListener("mousedown",t=>{t.target===e&&U(r)}),e.addEventListener("keydown",t=>{if(t.key==="Escape"){t.stopPropagation(),U(r);return}if(t.key!=="Tab")return;let s=[...e.querySelectorAll('button:not(:disabled),[tabindex]:not([tabindex="-1"])')];if(!s.length)return;let n=s[0],a=s[s.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),a.focus()):!t.shiftKey&&document.activeElement===a&&(t.preventDefault(),n.focus())})}function Ii(r,e){let i=Fe(e),t=wt(r,e);for(let n of e.tiers)ye(r.gaQty,e.area.id,n.id,e.draft.get(n.id)??0);U(r),r.syncTray();let s=e.area.displayLabel??e.area.label;i>0?Be(r,ee("picker.gaAdded",i,{count:i,area:s,price:r.money(t)})):Be(r,G("picker.gaRemoved",{area:s}))}function $i(r,e,i,t,s){if(typeof t=="number")ye(r.gaQty,e.id,i[0].id,Math.max(0,Math.min(s,Math.floor(t))));else{r.gaQty.delete(e.id);let n=s;for(let a of i){let o=Math.max(0,Math.floor(t[a.id??""]??0)),l=Math.min(o,n);n-=l,ye(r.gaQty,e.id,a.id,l)}}r.syncTray()}function U(r,e=!0){let i=r.gaPromptReturnFocus;r.gaPromptEl?.remove(),r.gaPromptEl=null,r.gaPromptReturnFocus=null,e&&i&&requestAnimationFrame(()=>(i.isConnected?i:r.root)?.focus())}function zi(r,e,i){let t=r.root,s=e.querySelector(".sl-ga-pop");if(!t||!s||!i)return;let n=t.getBoundingClientRect(),a=i.x-n.left,o=i.y-n.top;e.style.setProperty("--sl-ga-anchor-x",`${a}px`),e.style.setProperty("--sl-ga-anchor-y",`${o}px`),requestAnimationFrame(()=>{let l=s.offsetWidth||260,c=s.offsetHeight||220,h=Math.max(8,Math.min(n.width-l-8,a-l/2)),p=o-c-14,d=p>=8?p:Math.min(n.height-c-8,o+14);s.style.left=`${h}px`,s.style.top=`${Math.max(8,d)}px`,s.dataset.side=p>=8?"above":"below",s.style.setProperty("--sl-ga-arrow-x",`${Math.max(12,Math.min(l-12,a-h))}px`)})}function Be(r,e){r.srEl&&(r.srEl.textContent=e)}function St(r,e,i=[]){let t=[],s=Hi(i);for(let a of e){let o=r.gaQty.get(a.id);if(!o)continue;let l=Ce(a);for(let c of l){let h=(o.get(c.id)??0)-(s.get(`${a.id}\0${c.id??""}`)??0);if(h<=0)continue;let p=r.paidPrice(a.categoryKey,c.id,c.price,a.id);t.push(`<div class="sl-ga" data-ga="${M(a.id)}" data-ga-row-tier="${M(c.id??"")}"><div class="sl-ga-info"><div class="sl-ga-name">${M(a.displayLabel??a.label)}</div><div class="sl-ga-sub">${M(l.length>1?c.label:a.displayType??r.tf("picker.generalAdmission","General admission"))} \xB7 ${M(r.money(p))} \xB7 ${M(ee("picker.leftCount",a.available))}</div></div><div class="sl-ga-qty"><button type="button" data-d="-1" aria-label="${M(r.tf("picker.fewer","Fewer"))}">\u2212</button><span>${h}</span><button type="button" data-d="1" aria-label="${M(r.tf("picker.more","More"))}">+</button></div></div>`)}}let n=e.filter(a=>le(r.gaQty,a.id)<=0&&!i.some(o=>o.objectId===a.id));return n.length&&t.push(`<div class="sl-ga-areas" data-ga-areas><button type="button" class="sl-ga-areas-toggle" data-ga-areas-toggle aria-expanded="${r.gaAreasExpanded}"><span>${M(r.tf("picker.gaAreasHeading","Areas"))}</span><small>${n.length}</small></button>`+(r.gaAreasExpanded?`<div class="sl-ga-areas-list">${n.map(a=>`<button type="button" class="sl-ga-area-open" data-ga-open="${M(a.id)}"${a.available<=0?" disabled":""}><span class="name">${M(a.displayLabel??a.label)}<small>${M(a.displayType??r.tf("picker.generalAdmission","General admission"))}</small></span><span class="meta">${M(r.money(r.paidPrice(a.categoryKey,null,a.price,a.id)))} \xB7 ${M(a.available>0?ee("picker.leftCount",a.available):r.tf("picker.soldOutTitle","Sold out"))}</span></button>`).join("")}</div>`:"")+"</div>"),t.join("")}function Tt(r,e,i){e.querySelectorAll(".sl-ga .sl-ga-qty button").forEach(t=>{t.addEventListener("click",()=>{let s=t.closest(".sl-ga");if(!s?.dataset.ga)return;let n=i.find(c=>c.id===s.dataset.ga);if(!n)return;let a=s.dataset.gaRowTier?s.dataset.gaRowTier:null,o=Number(t.dataset.d),l=r.gaQty.get(n.id)?.get(a)??0;if(o>0&&xt(r,n)-le(r.gaQty,n.id)<=0){r.toast(G("picker.maxTicketsForOrder",{count:r.maxTickets}),"warning");return}ye(r.gaQty,n.id,a,Math.max(0,l+o)),r.syncTray()})}),e.querySelector("[data-ga-areas-toggle]")?.addEventListener("click",()=>{r.gaAreasExpanded=!r.gaAreasExpanded,r.syncTray()}),e.querySelectorAll("[data-ga-open]").forEach(t=>{t.addEventListener("click",()=>{let s=i.find(n=>n.id===t.dataset.gaOpen);s&&De(r,s,null,t)})})}var Ae='<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 Vi="https://api.seatlayer.io",Lt=10;function Ni(r){if(typeof r=="string"){let e=document.querySelector(r);if(!e)throw new Error(`seatmap: container "${r}" not found`);return e}if(!(r instanceof HTMLElement))throw new Error("seatmap: container must be a CSS selector or an HTMLElement");return r}var Ve=class{constructor(e){this.mount=null;this.hostEl=null;this.eventLocale=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=ve(e,{onExpired:t=>this.opts.onAccessExpired?.(t),onUnavailable:t=>this.opts.onAccessUnavailable?.(t)});let i=new re((e.apiBase??Vi).replace(/\/+$/,""),{access:this.access??void 0,onObjectUnavailable:t=>this.opts.onSelectedObjectUnavailable?.(t)});this.api=i,this.controller=new Bi({transport:i,eventKey:e.event,maxSelection:e.maxSelection??Lt,selectedObjects:e.selectedObjects,selectableObjects:e.selectableObjects,numberOfPlacesToSelect:e.numberOfPlacesToSelect,selectionValidators:e.selectionValidators,currency:e.currency,onSelectionChange:t=>this.opts.onSelectionChange?.(t),onSelectionValidityChange:t=>this.opts.onSelectionValidityChange?.(t),onSelectionValid:t=>this.opts.onSelectionValid?.(t),onSelectionInvalid:t=>this.opts.onSelectionInvalid?.(t),onSelectionLimit:t=>this.opts.onSelectionLimit?.(t),onHold:t=>this.opts.onHold?.({holdId:t.holdId,expiresAt:t.expiresAt,seats:t.seats,items:t.items}),onHoldRestored:t=>this.opts.onHoldRestored?.({holdId:t.holdId,expiresAt:t.expiresAt,seats:t.seats,items:t.items}),onHoldExpired:()=>this.opts.onHoldExpired?.(),onGAClick:t=>{let s=this.controller.getGAAreas().find(n=>n.id===t);s&&(this.opts.onGAClick?.(s),this.opts.onGAPrompt?.({area:s,selected:{},min:0,max:Math.max(0,Math.min(s.available,(this.opts.maxSelection??Lt)-this.controller.getSelection().length)),tiers:Ce(s),confirm:n=>{let a=typeof n=="number"?n:Object.values(n).reduce((o,l)=>o+l,0);this.holdGA(s.id,a)},cancel:()=>{}}))},onError:t=>this.opts.onError?.(t),onDeckTap:t=>this.opts.onDeckTap?.(t),onHint:t=>this.opts.onHint?.(t),flashOnLiveChange:!0,onSeatHover:t=>{this.opts.onSeatHover?.(t),this.opts.seatTooltip!==!1&&this.updateTooltip(t)},colorblindSafe:e.colorblindSafe})}async render(){if(this.rendered)return this;this.rendered=!0,await Et(this.opts.locale),this.opts.messages&&At(this.opts.messages),this.mount=Ni(this.opts.container);let e=document.createElement("div");e.lang=je(),e.dir=Ct(),e.style.width="100%",e.style.height="100%",e.style.position="relative",this.mount.appendChild(e),this.hostEl=e;let i=await this.controller.render(e);if(!i)return this.rendered=!1,this.opts.errorDisplay!=="none"&&this.showLoadFailure(e),this;if(this.eventLocale=i.locale??null,!this.opts.locale&&this.eventLocale&&await this.setLocale(this.eventLocale),this.buildLanguageSwitcher(e),this.controller.setViewMode(this.opts.initialView??"flat"),this.startRealtime(),this.mode_=i.mode==="test"?"test":"live",this.opts.seatTooltip!==!1){let t=document.createElement("div");t.setAttribute("role","tooltip"),t.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(t),this.tipEl=t,this.onTipMove=s=>{let n=e.getBoundingClientRect();this.tipPos={x:s.clientX-n.left,y:s.clientY-n.top},this.tipEl&&this.tipEl.style.display!=="none"&&this.placeTooltip()},e.addEventListener("mousemove",this.onTipMove)}if(i.mode==="test"){e.style.overflow="hidden";let t=document.createElement("div");t.dataset.slI18n="testMode",t.textContent=V("picker.testMode"),t.setAttribute("aria-label",V("picker.testMode")),t.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(t)}return this.buildBadge(e),this}buildBadge(e){if(this.controller.doc?.theme?.hideBadge)return;let i=document.createElement("a");i.dataset.slI18n="badge",i.href="https://seatlayer.io",i.target="_blank",i.rel="noopener noreferrer",i.setAttribute("aria-label",V("picker.poweredBy")),i.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);',i.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">'+Ae+`</span><span>${V("picker.poweredBy")}</span>`,e.appendChild(i)}placeTooltip(){if(!this.tipEl||!this.hostEl)return;let e=this.hostEl.clientWidth,i=this.tipEl.offsetWidth,t=this.tipEl.offsetHeight,s=this.tipPos.x+14,n=this.tipPos.y-t-12;s+i>e-8&&(s=this.tipPos.x-i-14),n<8&&(n=this.tipPos.y+18),this.tipEl.style.left=`${Math.max(8,s)}px`,this.tipEl.style.top=`${Math.max(8,n)}px`}updateTooltip(e){if(!this.tipEl)return;if(!e){this.tipEl.style.display="none";return}let i=Di(e.price,e.currency,{...Number.isInteger(e.price)?{minimumFractionDigits:0,maximumFractionDigits:0}:{},locale:this.opts.locale,fallback:(s,n)=>`${s} ${n}`}),t=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"?V("map.statusHeld"):V("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">${i}</span></div>`+t,this.tipEl.style.display="block",this.placeTooltip()}buildLanguageSwitcher(e){let i=(this.opts.languages??[]).map(s=>ji(s)).filter((s,n,a)=>a.indexOf(s)===n);if(i.length<2)return;let t=document.createElement("select");t.setAttribute("aria-label",V("picker.preferredTicketType")),t.style.cssText='position:absolute;bottom:10px;left:12px;z-index:5;appearance:none;padding:5px 9px;border-radius:999px;border:0;cursor:pointer;background:rgba(255,255,255,.92);color:#4a5163;font:600 11px/1 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;box-shadow:0 2px 8px rgba(0,0,0,.12);';for(let s of i){let n=document.createElement("option");n.value=s,n.textContent=Fi[s]??s,n.selected=s===je(),t.appendChild(n)}t.addEventListener("change",()=>{this.setLocale(t.value)}),e.appendChild(t)}async setLocale(e){let i=je(),t=await Et(e);if(this.opts.messages&&At(this.opts.messages),t===i)return t;if(this.hostEl){this.hostEl.lang=t,this.hostEl.dir=Ct();for(let s of this.hostEl.querySelectorAll("[data-sl-i18n]"))if(s.dataset.slI18n==="testMode")s.textContent=V("picker.testMode"),s.setAttribute("aria-label",V("picker.testMode"));else if(s.dataset.slI18n==="badge"){s.setAttribute("aria-label",V("picker.poweredBy"));let n=s.querySelector("span:last-child");n&&(n.textContent=V("picker.poweredBy"))}}return this.controller.refreshMapCopy(),t}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(i){return this.opts.onError?.(i),null}}async holdOrThrow(e={}){let i=this.controller.getSelectionValidity();if(i&&!i.isValid){let s=i.violations.includes("numberOfPlacesToSelect");throw Object.assign(new Error(s?`seatmap: select exactly ${i.required} places before holding`:"seatmap: adjust the ticket selection before holding"),{code:s?"selection_count_mismatch":"selection_invalid",selection:i})}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(i){return this.opts.onError?.(i),null}}async resumeHoldOrThrow(e){let i=await this.controller.resumeHold(e);return i?{holdId:i.holdId,expiresAt:i.expiresAt,seats:i.seats,items:i.items}:null}async extendHold(e){try{let i=await this.controller.extendHold(e);return i?{holdId:i.holdId,expiresAt:i.expiresAt,seats:i.seats,items:i.items}:null}catch(i){return this.opts.onError?.(i),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,i,t={}){try{return await this.holdGAOrThrow(e,i,t)}catch(s){return this.opts.onError?.(s),null}}async holdGAOrThrow(e,i,t={}){let s=await this.controller.holdGA(e,i,t);return s?{holdId:s.holdId,expiresAt:s.expiresAt,seats:s.seats,items:s.items}:null}async bestAvailable(e,i,t={}){try{return await this.bestAvailableOrThrow(e,i,t)}catch(s){return this.opts.onError?.(s),null}}async bestAvailableOrThrow(e,i,t={}){let s=await this.controller.bestAvailable(e,i,t);return s?{holdId:s.holdId,expiresAt:s.expiresAt,labels:s.labels,seats:s.seats,items:s.items,...t.zoneId?{zoneId:t.zoneId}:{}}:null}setSeatTier(e,i){this.controller.setSeatTier(e,i)}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 _({url:this.api.subscribeUrl(this.opts.event),mintTicket:()=>this.api.subscribeTicket(this.opts.event),onAccessUnavailable:e=>this.opts.onAccessUnavailable?.(e),sink:he(this.controller,{flashOnLiveChange:!0,onSelectedObjectUnavailable:(e,i)=>this.opts.onSelectedObjectUnavailable?.({labels:e,reason:i})})}),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 i=document.createElement("div");i.setAttribute("role","status"),i.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 t=document.createElement("div");t.textContent="The seat map didn\u2019t load.",i.appendChild(t);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(n=>this.opts.onError?.(n))}),i.appendChild(s),e.appendChild(i)}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 Pt=["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"],_i={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 qi(r){let e={};for(let i of Pt)e[i]=(...t)=>{let s=r();return s?s[i](...t):_i[i]()};return e}var Mt=["event","apiBase","maxSelection","numberOfPlacesToSelect","selectionValidators","publicKey","locale","currency","colorblindSafe","initialView","errorDisplay"],Ht=[...Mt,"selectedObjects","selectableObjects","messages","seatTooltip","buyerAccessTokenProvider","buyerAccessToken"],Rt=["onSelectionChange","onSelectionValidityChange","onSelectionValid","onSelectionInvalid","onSelectionLimit","onHold","onHoldRestored","onHoldExpired","onGAClick","onGAPrompt","onError","onDeckTap","onHint","onSeatHover","onAccessExpired","onAccessUnavailable","onSelectedObjectUnavailable"];function Ui(r,e,i){let t={container:r};for(let s of Ht)t[s]=e[s];for(let s of Rt)t[s]=i[s];return t}var Gi=new Set(["seatlayer.designer.ready","seatlayer.designer.saved","seatlayer.designer.published","seatlayer.designer.close","seatlayer.designer.error"]),Ki=2e4,Wi=480,Yi=180*1e3,Qi=900*1e3,Xi=.8,Zi=30*1e3,Ji=1e5,es=4,ts=50;function Ne(r){if(typeof r!="string")return r;let e=document.querySelector(r);if(!e)throw new Error(`EmbeddedDesigner container not found: ${r}`);return e}function is(r){let e=(r??"").toLowerCase();return e.includes("expire")||e.includes("revoke")||e==="401"?"expired":e.includes("mismatch")?"mismatch":e.includes("timeout")?"timeout":"load"}var ss={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."}},_e=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 i=e.data;if(i.type==="seatlayer.designer.resize"){!this.fillEnabled()&&this.autoResizeEnabled()&&typeof i.px=="number"&&Number.isFinite(i.px)&&i.px>0&&(this.lastAutoHeight=`${Math.round(i.px)}px`,this.pinned||this.setFrameHeight(this.lastAutoHeight));return}if(i.type==="seatlayer.designer.fullscreen"){i.on===!0?this.pinFullscreen():i.on===!1&&this.unpinFullscreen();return}if(typeof i.type!="string"||!Gi.has(i.type))return;let t={type:i.type,chartId:typeof i.chartId=="string"?i.chartId:void 0,workspaceId:typeof i.workspaceId=="string"?i.workspaceId:void 0,expiresAt:typeof i.expiresAt=="number"?i.expiresAt:void 0,code:typeof i.code=="string"?i.code:void 0,message:typeof i.message=="string"?i.message:void 0,meta:i.meta,fatal:typeof i.fatal=="boolean"?i.fatal:void 0,action:typeof i.action=="string"?i.action:void 0},s=this.identityEstablished||t.type==="seatlayer.designer.ready"||t.type==="seatlayer.designer.saved"||t.type==="seatlayer.designer.published"||t.type==="seatlayer.designer.close",n=this.options.expectedChartId!==void 0&&t.chartId!==this.options.expectedChartId&&(s||t.chartId!==void 0),a=this.options.expectedWorkspaceId!==void 0&&t.workspaceId!==this.options.expectedWorkspaceId&&(s||t.workspaceId!==void 0);if(n||a){this.showError("mismatch");return}switch(t.type){case"seatlayer.designer.ready":this.identityEstablished=!0,this.sessionExpiresAt=t.expiresAt,this.phase="ready",this.clearTimeoutTimer(),this.removeOverlay(),this.autoRecoverUsed=!1,this.scheduleRenewal(t.expiresAt),this.options.onReady?.(t);break;case"seatlayer.designer.saved":this.options.onSaved?.(t);break;case"seatlayer.designer.published":this.options.onPublished?.(t);break;case"seatlayer.designer.close":this.options.onClose?.(t);break;case"seatlayer.designer.error":{let o=is(t.code);if(o==="expired"&&this.autoRenewEnabled()&&!this.autoRecoverUsed){this.autoRecoverUsed=!0,this.clearRenewTimer(),this.options.onRequestRelaunch();return}(typeof t.fatal=="boolean"?t.fatal:o!=="load"||this.phase!=="ready")&&this.showError(o),this.options.onError?.(t);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 i=document.createElement("iframe");i.title=this.options.title??"Venue chart Designer",i.allow=this.options.allow??"fullscreen; clipboard-write",i.referrerPolicy=this.options.referrerPolicy??"origin",i.src=e.toString(),i.style.setProperty("width","100%","important"),i.style.setProperty("height",typeof this.options.height=="number"?`${this.options.height}px`:"100%","important"),i.style.border="0",Object.assign(i.style,this.options.style),this.options.className&&(i.className=this.options.className);let t=Ne(this.options.container);if(this.containerEl=t,window.addEventListener("message",this.handleMessage),t.append(i),this.frame=i,this.fillEnabled()&&this.startFill(),this.phase="loading",this.loadingStateEnabled()){this.ensureContainerPositioned(t),this.renderOverlay(t,"loading");let s=this.options.loadingTimeoutMs??Ki;s>0&&Number.isFinite(s)&&(this.timeoutTimer=setTimeout(()=>{this.phase==="loading"&&this.showError("timeout")},s))}return i}setDesignerUrl(e){return this.options={...this.options,designerUrl:e},this.mount()}getIframe(){return this.frame}setSizing(e,i){this.options={...this.options,height:e,minHeight:i},this.frame&&(this.stopFill(),this.lastAutoHeight="",this.fillEnabled()?(this.pinned||this.setFrameHeight("100%"),this.startFill()):this.pinned||this.setFrameHeight(`${e}px`))}setRelaunchPolicy(e,i){this.options={...this.options,onRequestRelaunch:e,autoRenewSession:i},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,i=this.frame;if(this.pinned||!e||!i)return this.fillMode??"viewport";let t=()=>e.getBoundingClientRect().height,s=i.style.getPropertyValue("height"),n=i.style.getPropertyPriority("height");i.style.setProperty("height","0px","important");let a=t();i.style.setProperty("height",`${Ji}px`,"important");let o=t();return s?i.style.setProperty("height",s,n):i.style.removeProperty("height"),!(o-a>es)&&a>=ts?"container":"viewport"}applyFill(){if(!this.frame||this.pinned)return;let e=this.options.minHeight??Wi;if(this.fillMode==="container"&&this.containerEl){let s=Math.max(e,Math.round(this.containerEl.getBoundingClientRect().height));this.setFrameHeight(`${s}px`);return}let i=this.frame.getBoundingClientRect().top,t=Math.max(e,Math.round(window.innerHeight-i));this.setFrameHeight(`${t}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[t,s]of Object.entries(e))this.frame.style.setProperty(t,s,"important");let i=document.documentElement;this.docOverflowBeforeFs=i.style.overflow,i.style.overflow="hidden",document.body&&(this.bodyOverflowBeforeFs=document.body.style.overflow,document.body.style.overflow="hidden"),this.fsKeyHandler=t=>{t.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 i=e-Date.now();if(i<=0)return;let t=i<Qi?i*Xi:i-Yi,s=Math.max(Zi,t);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{Ne(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 i;try{i=Ne(this.options.container)}catch{return}this.renderOverlay(i,"error",e)}handleTryAgain(){if(this.options.onRequestRelaunch){this.options.onRequestRelaunch();return}this.mount()}renderOverlay(e,i,t){this.removeOverlay();let s=document.createElement("div");s.setAttribute("data-seatlayer-designer-overlay",i),s.setAttribute("role",i==="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"}),i==="loading"?this.buildSkeleton(s):this.buildErrorCard(s,t??"load"),e.append(s),this.overlay=s}buildSkeleton(e){let i=document.createElement("style");i.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 P,b as B,c as R,d as F}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=c=>{let u=document.createElement("div");return u.className="sl-shimmer",Object.assign(u.style,{background:i,borderRadius:"8px"}),Object.assign(u.style,c),u};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 a=document.createElement("div");Object.assign(a.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"}),a.append(l),a.append(document.createTextNode("Loading designer\u2026")),e.append(a)}buildErrorCard(e,t){let i=mi[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 a=document.createElement("button");a.type="button",a.textContent="Try again",Object.assign(a.style,{appearance:"none",cursor:"pointer",border:"0",borderRadius:"10px",padding:"10px 22px",fontSize:"14px",fontWeight:"600",color:"#101625",background:"#7aa2ff"}),a.addEventListener("click",()=>this.handleTryAgain()),s.append(r,n,a),e.append(s)}};import{PickerController as ji,ACCESSIBILITY_TYPES as Vi,expandChart as Ue,formatMoney as _i,generateSeatThumb as Ni,loadLocale as Ui,setStringOverrides as qi,t as y,tCount as q}from"@seatlayer/core";import{isAuthoredSeatView as Ki,seatViewDisclosure as Ht}from"@seatlayer/core/view3d/crossfade/panorama";import{seatConfidenceDisclosure as Rt}from"@seatlayer/core/core/seatConfidence";function rt(o){return o?.previousPrice!=null&&o.previousPrice>o.price?o.previousPrice:null}function nt(o){return fi(o)+(o.moreLabel?`<button type="button" class="sl-price-more" aria-expanded="${!o.collapsed}">${o.moreLabel}</button>`:"")+bi(o.status)}function fi(o){let{esc:e,money:t}=o;return o.categories.map(i=>{let s=o.priceOf(i),r=o.rangeOf(i),n=o.offerOf(i.key),a=rt(n),l=o.activeKey===i.key;return`<div class="sl-price-row${o.bandKeys!=null&&!o.bandKeys.has(i.key)?" sl-dim":""}${l?" sl-active":""}" data-cat="${e(i.key)}" role="button" tabindex="0" aria-pressed="${l}" title="${e(o.titleFor(i,l))}"><span class="sl-dot" style="background:${e(o.colorOf(i))}"></span><span class="sl-price-label">${e(i.label)}`+(n?.offerName?`<small class="sl-price-offer">${e(n.offerName)}</small>`:"")+`</span><span class="sl-price-left">${o.leftCount(o.left[i.key]??0)}</span>`+(a!=null?`<span class="sl-price-was">${e(t(a))}</span>`:"")+(r!=null?`<span class="sl-price-amt">${r.min===r.max?t(r.min):`${t(r.min)}\u2013${t(r.max)}`}</span>`:s!=null?`<span class="sl-price-amt">${t(s)}</span>`:"")+"</div>"}).join("")}function bi(o){return`<div class="sl-status-key" aria-label="${o.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>${o.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>${o.sold}</span></div>`}function ot(o){let{esc:e,money:t}=o;return o.categories.map(i=>{let s=o.rangeOf(i),r=o.priceOf(i),n=s?s.min===s.max?t(s.min):`${t(s.min)}+`:r!=null?t(r):null,a=Object.prototype.hasOwnProperty.call(o.left,i.key)&&o.left[i.key]<=0,l=rt(o.offerOf(i.key)),c=n?`${i.label} \u2014 ${n}${a?` (${o.soldOutWord})`:""}`:i.label;return`<button type="button" class="sl-rc" data-cat="${e(i.key)}" aria-pressed="${o.activeKey===i.key}" aria-label="${e(c)}" title="${e(c)}"${a?" disabled":""}><i class="sl-rc-dot" style="background:${e(o.colorOf(i))}"></i>`+(l!=null?`<span class="sl-rc-was">${e(t(l))}</span>`:"")+`<span class="sl-rc-t">${e(n??i.label)}</span></button>`}).join("")}var gi=/^[a-zA-Z0-9._-]+$/;function vi(o){let e;try{e=new URL(o,"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||!gi.test(s)?null:{eventKey:i,asset:s}}catch{return null}}function yi(o){try{return/^\/pub\/events\/[^/]+\/assets(?:\/|$)/.test(new URL(o,"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=vi(e);if(!t)return Promise.resolve(yi(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 xi=["on-sale","low","sold-out","presale","closed"];function pe(o){return o==null?null:typeof o=="number"&&Number.isFinite(o)&&o>=0?o:void 0}function lt(o){return o==null?null:typeof o=="number"&&Number.isFinite(o)&&o>=0?o:void 0}function at(o){if(o==null)return null;if(typeof o!="object"||Array.isArray(o))return;let e=o,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 a=lt(e[n]);if(a===void 0)return;r[n]=a}return r}function wi(o){if(o==null)return null;if(typeof o!="object"||Array.isArray(o))return;let e=o;if(!Number.isInteger(e.assignmentVersion)||e.assignmentVersion<0||!Array.isArray(e.channels)||!Array.isArray(e.objects))return;let t=[],i=new Set;for(let n of e.channels){if(!n||typeof n!="object"||Array.isArray(n))return;let a=n,l=typeof a.channelId=="string"?a.channelId.trim():"";if(!l||i.has(l)||!Number.isInteger(a.pricingVersion)||a.pricingVersion<0||!Array.isArray(a.priceOverrides))return;let c=[],u=new Set;for(let p of a.priceOverrides){if(!p||typeof p!="object"||Array.isArray(p))return;let d=p,f=typeof d.categoryKey=="string"?d.categoryKey.trim():"",m=d.tierId===null?null:typeof d.tierId=="string"&&d.tierId.trim()?d.tierId.trim():void 0,g=pe(d.price);if(!f||m===void 0||g===void 0||g===null)return;let w=`${f}\0${m??""}`;if(u.has(w))return;u.add(w),c.push({categoryKey:f,tierId:m,price:g})}i.add(l),t.push({channelId:l,pricingVersion:a.pricingVersion,priceOverrides:c})}let s=[],r=new Set;for(let n of e.objects){if(!n||typeof n!="object"||Array.isArray(n))return;let a=n,l=typeof a.label=="string"?a.label.trim():"",c=typeof a.channelId=="string"?a.channelId.trim():"";if(!l||r.has(l)||!i.has(c))return;r.add(l),s.push({label:l,channelId:c})}return{assignmentVersion:e.assignmentVersion,channels:t,objects:s}}function He(o){if(!o||typeof o!="object"||Array.isArray(o))return null;let e=o,t=xi.find(u=>u===e.state);if(!t)return null;let i=pe(e.fromPrice),s=pe(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=at(e.release);if(n===void 0)return null;let a=e.upcoming===void 0?null:at(e.upcoming);if(a===void 0)return null;let l=[];if(e.prices!=null){if(!Array.isArray(e.prices))return null;let u=[];for(let p of e.prices){if(!p||typeof p!="object"||Array.isArray(p))return null;let d=p,f=typeof d.categoryKey=="string"?d.categoryKey.trim():"";if(!f)return null;let m=pe(d.price),g=pe(d.previousPrice);if(m==null||g===void 0)return null;let w={categoryKey:f,price:m,previousPrice:g};if(d.offerId!==void 0){if(typeof d.offerId!="string"||!d.offerId.trim())return null;w.offerId=d.offerId.trim()}if(d.offerName!==void 0){if(typeof d.offerName!="string"||!d.offerName.trim())return null;w.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;w.remaining=d.remaining==null?null:d.remaining}for(let k of["startsAt","endsAt"]){if(d[k]===void 0)continue;let x=lt(d[k]);if(x===void 0)return null;w[k]=x}u.push(w)}l=u}let c=wi(e.channelPricing);return c===void 0?null:{state:t,fromPrice:i,previousPrice:s,currency:r,release:n,upcoming:a,prices:l,channelPricing:c}}function ct(o,e){if(!o)return null;let t=null,i=s=>{s!=null&&s>e&&(t===null||s<t)&&(t=s)};for(let s of[o.release,o.upcoming])i(s?.startsAt),i(s?.endsAt);for(let s of o.prices)i(s.startsAt),i(s.endsAt);return t}function Re(o){let e={};for(let t of o?.prices??[])e[t.categoryKey]=t.price;return e}var dt="seatlayer-picker-style",ki=`
11
+ }`,e.append(i);let t="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 n=c=>{let h=document.createElement("div");return h.className="sl-shimmer",Object.assign(h.style,{background:t,borderRadius:"8px"}),Object.assign(h.style,c),h};s.append(n({height:"40px",width:"100%",flex:"0 0 auto"}));let a=document.createElement("div");Object.assign(a.style,{display:"flex",gap:"14px",flex:"1 1 auto",minHeight:"0"}),a.append(n({width:"220px",height:"100%",flex:"0 0 auto"})),a.append(n({flex:"1 1 auto",height:"100%"})),s.append(a),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:t,flex:"0 0 auto"}),o.append(l),o.append(document.createTextNode("Loading designer\u2026")),e.append(o)}buildErrorCard(e,i){let t=ss[i],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 n=document.createElement("h2");n.textContent=t.title,Object.assign(n.style,{margin:"0 0 8px",fontSize:"17px",fontWeight:"600",color:"#f4f7ff"});let a=document.createElement("p");a.textContent=t.body,Object.assign(a.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(n,a,o),e.append(s)}};import{PickerController as Hs,ACCESSIBILITY_TYPES as Rs,expandChart as st,formatMoney as Os,generateSeatThumb as Is,getLocale as pi,loadLocale as hi,localeDirection as $s,LOCALE_NAMES as zs,resolveLocale as Bs,setStringOverrides as ui,t as w,tCount as ie}from"@seatlayer/core";import{isAuthoredSeatView as Ds,seatViewDisclosure as mi}from"@seatlayer/core/view3d/crossfade/panorama";import{seatConfidenceDisclosure as fi}from"@seatlayer/core/core/seatConfidence";function Ot(r){return r?.previousPrice!=null&&r.previousPrice>r.price?r.previousPrice:null}function It(r){return rs(r)+(r.moreLabel?`<button type="button" class="sl-price-more" aria-expanded="${!r.collapsed}">${r.moreLabel}</button>`:"")+ns(r.status)}function rs(r){let{esc:e,money:i}=r;return r.categories.map(t=>{let s=r.priceOf(t),n=r.rangeOf(t),a=r.offerOf(t.key),o=Ot(a),l=r.activeKey===t.key;return`<div class="sl-price-row${r.bandKeys!=null&&!r.bandKeys.has(t.key)?" sl-dim":""}${l?" sl-active":""}" data-cat="${e(t.key)}" role="button" tabindex="0" aria-pressed="${l}" title="${e(r.titleFor(t,l))}"><span class="sl-dot" style="background:${e(r.colorOf(t))}"></span><span class="sl-price-label">${e(t.label)}`+(a?.offerName?`<small class="sl-price-offer">${e(a.offerName)}</small>`:"")+`</span><span class="sl-price-left">${r.leftCount(r.left[t.key]??0)}</span>`+(o!=null?`<span class="sl-price-was">${e(i(o))}</span>`:"")+(n!=null?`<span class="sl-price-amt">${n.min===n.max?i(n.min):`${i(n.min)}\u2013${i(n.max)}`}</span>`:s!=null?`<span class="sl-price-amt">${i(s)}</span>`:"")+"</div>"}).join("")}function ns(r){return`<div class="sl-status-key" aria-label="${r.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>${r.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>${r.sold}</span></div>`}function qe(r){let e=Math.abs(r.scrollLeft),i=e>2,t=e+r.clientWidth<r.scrollWidth-2;return r.dataset.fadeStart=String(i),r.dataset.fadeEnd=String(t),{start:i,end:t}}function $t(r){let{esc:e,money:i}=r;return r.categories.map(t=>{let s=r.rangeOf(t),n=r.priceOf(t),a=s?s.min===s.max?i(s.min):`${i(s.min)}+`:n!=null?i(n):null,o=Object.prototype.hasOwnProperty.call(r.left,t.key)&&r.left[t.key]<=0,l=Ot(r.offerOf(t.key)),c=a?`${t.label} \u2014 ${a}${o?` (${r.soldOutWord})`:""}`:t.label;return`<button type="button" class="sl-rc" data-cat="${e(t.key)}" aria-pressed="${r.activeKey===t.key}" aria-label="${e(c)}" title="${e(c)}"${o?" disabled":""}><i class="sl-rc-dot" style="background:${e(r.colorOf(t))}"></i>`+(l!=null?`<span class="sl-rc-was">${e(i(l))}</span>`:"")+`<span class="sl-rc-t">${e(a??t.label)}</span></button>`}).join("")}var as=/^[a-zA-Z0-9._-]+$/;function os(r){let e;try{e=new URL(r,"https://seatlayer.invalid")}catch{return null}if(e.search||e.hash)return null;let i=/^\/pub\/events\/([^/]+)\/assets\/([^/]+)$/.exec(e.pathname);if(!i)return null;try{let t=decodeURIComponent(i[1]),s=decodeURIComponent(i[2]);return!t||!as.test(s)?null:{eventKey:t,asset:s}}catch{return null}}function ls(r){try{return/^\/pub\/events\/[^/]+\/assets(?:\/|$)/.test(new URL(r,"https://seatlayer.invalid").pathname)}catch{return!1}}var Le=class{constructor(e,i){this.eventKey=e;this.load=i;this.pending=new Map;this.created=new Set;this.disposed=!1}resolve(e){let i=os(e);if(!i)return Promise.resolve(ls(e)?null:e);if(i.eventKey!==this.eventKey||!this.load||this.disposed)return Promise.resolve(null);let t=this.pending.get(e);if(t)return t;let s=this.load(this.eventKey,i.asset).then(n=>{let a=URL.createObjectURL(n);return this.disposed?(URL.revokeObjectURL(a),null):(this.created.add(a),a)}).catch(n=>{throw this.pending.delete(e),n});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 cs=["on-sale","low","sold-out","presale","closed"];function xe(r){return r==null?null:typeof r=="number"&&Number.isFinite(r)&&r>=0?r:void 0}function Bt(r){return r==null?null:typeof r=="number"&&Number.isFinite(r)&&r>=0?r:void 0}function zt(r){if(r==null)return null;if(typeof r!="object"||Array.isArray(r))return;let e=r,i=e.count,t=e.index;if(typeof t!="number"||!Number.isInteger(t)||t<1||typeof i!="number"||!Number.isInteger(i)||i<t)return;let s=e.remaining;if(s!=null&&(typeof s!="number"||!Number.isInteger(s)||s<0))return;let n={index:t,count:i,remaining:s??null};if(e.id!==void 0){if(typeof e.id!="string"||!e.id.trim())return;n.id=e.id.trim()}if(e.name!==void 0){if(typeof e.name!="string"||!e.name.trim())return;n.name=e.name.trim()}if(e.categoryKey!==void 0){if(e.categoryKey!==null&&(typeof e.categoryKey!="string"||!e.categoryKey.trim()))return;n.categoryKey=e.categoryKey==null?null:e.categoryKey.trim()}for(let a of["startsAt","endsAt"]){if(e[a]===void 0)continue;let o=Bt(e[a]);if(o===void 0)return;n[a]=o}return n}function ds(r){if(r==null)return null;if(typeof r!="object"||Array.isArray(r))return;let e=r;if(!Number.isInteger(e.assignmentVersion)||e.assignmentVersion<0||!Array.isArray(e.channels)||!Array.isArray(e.objects))return;let i=[],t=new Set;for(let a of e.channels){if(!a||typeof a!="object"||Array.isArray(a))return;let o=a,l=typeof o.channelId=="string"?o.channelId.trim():"";if(!l||t.has(l)||!Number.isInteger(o.pricingVersion)||o.pricingVersion<0||!Array.isArray(o.priceOverrides))return;let c=[],h=new Set;for(let p of o.priceOverrides){if(!p||typeof p!="object"||Array.isArray(p))return;let d=p,f=typeof d.categoryKey=="string"?d.categoryKey.trim():"",m=d.tierId===null?null:typeof d.tierId=="string"&&d.tierId.trim()?d.tierId.trim():void 0,g=xe(d.price);if(!f||m===void 0||g===void 0||g===null)return;let T=`${f}\0${m??""}`;if(h.has(T))return;h.add(T),c.push({categoryKey:f,tierId:m,price:g})}t.add(l),i.push({channelId:l,pricingVersion:o.pricingVersion,priceOverrides:c})}let s=[],n=new Set;for(let a of e.objects){if(!a||typeof a!="object"||Array.isArray(a))return;let o=a,l=typeof o.label=="string"?o.label.trim():"",c=typeof o.channelId=="string"?o.channelId.trim():"";if(!l||n.has(l)||!t.has(c))return;n.add(l),s.push({label:l,channelId:c})}return{assignmentVersion:e.assignmentVersion,channels:i,objects:s}}function Ue(r){if(!r||typeof r!="object"||Array.isArray(r))return null;let e=r,i=cs.find(h=>h===e.state);if(!i)return null;let t=xe(e.fromPrice),s=xe(e.previousPrice);if(t===void 0||s===void 0)return null;let n=e.currency==null?null:typeof e.currency=="string"&&e.currency.trim()?e.currency.trim():void 0;if(n===void 0)return null;let a=zt(e.release);if(a===void 0)return null;let o=e.upcoming===void 0?null:zt(e.upcoming);if(o===void 0)return null;let l=[];if(e.prices!=null){if(!Array.isArray(e.prices))return null;let h=[];for(let p of e.prices){if(!p||typeof p!="object"||Array.isArray(p))return null;let d=p,f=typeof d.categoryKey=="string"?d.categoryKey.trim():"";if(!f)return null;let m=xe(d.price),g=xe(d.previousPrice);if(m==null||g===void 0)return null;let T={categoryKey:f,price:m,previousPrice:g};if(d.offerId!==void 0){if(typeof d.offerId!="string"||!d.offerId.trim())return null;T.offerId=d.offerId.trim()}if(d.offerName!==void 0){if(typeof d.offerName!="string"||!d.offerName.trim())return null;T.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;T.remaining=d.remaining==null?null:d.remaining}for(let k of["startsAt","endsAt"]){if(d[k]===void 0)continue;let x=Bt(d[k]);if(x===void 0)return null;T[k]=x}h.push(T)}l=h}let c=ds(e.channelPricing);return c===void 0?null:{state:i,fromPrice:t,previousPrice:s,currency:n,release:a,upcoming:o,prices:l,channelPricing:c}}function Dt(r,e){if(!r)return null;let i=null,t=s=>{s!=null&&s>e&&(i===null||s<i)&&(i=s)};for(let s of[r.release,r.upcoming])t(s?.startsAt),t(s?.endsAt);for(let s of r.prices)t(s.startsAt),t(s.endsAt);return i}function Ge(r){let e={};for(let i of r?.prices??[])e[i.categoryKey]=i.price;return e}var Ft="seatlayer-picker-style",ps=`
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);
@@ -118,7 +118,11 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
118
118
  /* With the price list expanded the sheet takes the with-selection height so
119
119
  the tray (cart + best-seats) is never crushed under the fixed-size list. */
120
120
  .sl-picker[data-layout="narrow"][data-sheet="open"][data-prices-open="true"] .sl-side{height:calc(min(480px,74%) + var(--sl-safe-b))}
121
- .sl-picker[data-layout="narrow"][data-sheet="peek"] .sl-side{height:calc(76px + var(--sl-safe-b));overflow:hidden}
121
+ /* SLIM CHROME (owner call 2026-08-19): the peek is ONE 50px row. The grab
122
+ handle no longer owns a row of its own \u2014 it is a 3px bar painted at the
123
+ top of the same head, and the pills inside are 34px, so the whole thing
124
+ still clears the 44px touch floor while giving the map 26px back. */
125
+ .sl-picker[data-layout="narrow"][data-sheet="peek"] .sl-side{height:calc(50px + var(--sl-safe-b));overflow:hidden}
122
126
  .sl-picker[data-layout="narrow"][data-sheet="peek"] .sl-side > :not(.sl-sheet-head){display:none}
123
127
  .sl-picker[data-layout="narrow"] .sl-tray{flex:1;min-height:96px;overflow-y:auto;overscroll-behavior:contain}
124
128
  .sl-picker[data-layout="narrow"][data-prices-open="true"] .sl-tray{min-height:48px}
@@ -184,7 +188,7 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
184
188
  painted on the map, and a phone buyer is matching a colour to a number.
185
189
  Chips scroll rather than truncate \u2014 a legend that hides a ticket type is
186
190
  worse than one that has to be swiped. */
187
- .sl-rail{display:none;align-items:center;gap:7px;padding:7px 10px;flex:none;
191
+ .sl-rail{display:none;align-items:center;gap:6px;padding:3px 10px;flex:none;
188
192
  background:var(--sl-surface);border-bottom:1px solid var(--sl-line)}
189
193
  .sl-picker[data-layout="narrow"] .sl-rail.has{display:flex}
190
194
  /* 3D frames itself; focusCategory drives the 2D map, so the rail has nothing
@@ -192,18 +196,37 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
192
196
  .sl-picker[data-view3d="on"] .sl-rail{display:none!important}
193
197
  /* The accessibility chips are pinned OUTSIDE the scroller: they are the one
194
198
  control that must never be discoverable-only-by-swipe. */
195
- .sl-picker[data-layout="narrow"] .sl-rail .sl-chips{flex:none;display:flex;gap:6px;
196
- padding-right:7px;margin-right:1px;border-right:1px solid var(--sl-line)}
197
- .sl-rail-scroll{display:flex;align-items:center;gap:6px;flex:1;min-width:0;
199
+ .sl-picker[data-layout="narrow"] .sl-rail .sl-chips{flex:none;display:flex;gap:5px;
200
+ padding-right:6px;margin-right:1px;border-right:1px solid var(--sl-line)}
201
+ .sl-picker[data-layout="narrow"] .sl-rail .sl-chip-f{padding:0 9px;min-height:24px;font-size:11px}
202
+ .sl-picker[data-layout="narrow"] .sl-rail .sl-chip-f svg{width:12px;height:12px}
203
+ .sl-rail-scroll{display:flex;align-items:center;gap:5px;flex:1;min-width:0;
198
204
  overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;
199
205
  scroll-snap-type:x proximity;padding:1px}
206
+ /* Fade ONLY a clipping edge, so a hidden sixth chip reads as "more" and a
207
+ rail that fits keeps every rounded end intact (syncRailEdges sets these).
208
+ "start" is the left edge in LTR and the right edge in RTL, so the gradient
209
+ direction follows the root's dir. */
210
+ .sl-rail-scroll[data-fade-end="true"]{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 18px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 18px),transparent)}
211
+ .sl-rail-scroll[data-fade-start="true"]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 18px);mask-image:linear-gradient(90deg,transparent,#000 18px)}
212
+ .sl-rail-scroll[data-fade-start="true"][data-fade-end="true"]{-webkit-mask-image:linear-gradient(90deg,transparent,#000 18px,#000 calc(100% - 18px),transparent);mask-image:linear-gradient(90deg,transparent,#000 18px,#000 calc(100% - 18px),transparent)}
213
+ .sl-picker[dir="rtl"] .sl-rail-scroll[data-fade-end="true"]{-webkit-mask-image:linear-gradient(-90deg,#000 calc(100% - 18px),transparent);mask-image:linear-gradient(-90deg,#000 calc(100% - 18px),transparent)}
214
+ .sl-picker[dir="rtl"] .sl-rail-scroll[data-fade-start="true"]{-webkit-mask-image:linear-gradient(-90deg,transparent,#000 18px);mask-image:linear-gradient(-90deg,transparent,#000 18px)}
200
215
  .sl-rail-scroll::-webkit-scrollbar{display:none}
201
- .sl-rc{display:inline-flex;align-items:center;gap:6px;flex:none;min-height:34px;padding:7px 11px;
216
+ /* 24px ink, taller target: the chip stays small so five prices fit a phone
217
+ without a swipe, and the invisible ::before grows the tap area to the full
218
+ rail strip (the scroller clips it, so ~33px on narrow \u2014 the same
219
+ grow-the-target-not-the-ink pattern the coarse-pointer block uses). */
220
+ .sl-rc{position:relative;display:inline-flex;align-items:center;gap:5px;flex:none;min-height:24px;padding:0 9px 0 7px;
202
221
  border-radius:999px;background:var(--sl-bg);border:1px solid var(--sl-line);color:var(--sl-text);
203
- font-size:12px;font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap;
222
+ font-size:11px;font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap;
204
223
  scroll-snap-align:start;transition:border-color .15s,background .15s}
224
+ .sl-rc::before{content:'';position:absolute;top:50%;left:0;right:0;height:44px;transform:translateY(-50%)}
205
225
  .sl-rc:hover,.sl-rc:focus-visible{border-color:var(--sl-muted)}
206
- .sl-rc-dot{width:9px;height:9px;border-radius:50%;flex:none}
226
+ .sl-rc-dot{width:7px;height:7px;border-radius:50%;flex:none}
227
+ /* On the filled (pinned) chip the dot would vanish into an accent of the
228
+ same hue \u2014 ring it in ink so the colour key survives the highlight. */
229
+ .sl-rc[aria-pressed="true"] .sl-rc-dot{box-shadow:0 0 0 1.5px var(--sl-accent-ink)}
207
230
  .sl-rc-was{color:var(--sl-muted);font-weight:500;text-decoration:line-through}
208
231
  /* Pinned = this category is framed on the map. The state lives on the control
209
232
  the buyer used, so there is never a second place to go and clear it. */
@@ -218,11 +241,24 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
218
241
  head is the tap/swipe toggle target (min 44px), so it reads as one control. */
219
242
  .sl-sheet-head{display:none;flex-direction:column;justify-content:center;padding:6px 12px 8px;min-height:56px;
220
243
  cursor:pointer;touch-action:none;user-select:none;-webkit-user-select:none;flex:none}
221
- .sl-picker[data-layout="narrow"] .sl-sheet-head{display:flex;min-height:52px;padding:3px 10px 5px}
244
+ .sl-picker[data-layout="narrow"] .sl-sheet-head{display:flex;position:relative;min-height:50px;padding:0 6px 0 12px}
245
+ .sl-picker[data-layout="narrow"] .sl-sheet-grab{position:absolute;top:4px;left:50%;width:32px;height:3px;margin:0;transform:translateX(-50%);opacity:.5}
246
+ .sl-picker[data-layout="narrow"] .sl-sheet-bar{min-height:50px;gap:6px}
247
+ .sl-picker[data-layout="narrow"] .sl-sheet-peek{font-size:12.5px}
248
+ .sl-picker[data-layout="narrow"] .sl-sheet-peek .go{min-height:34px;padding:0 14px;font-size:12.5px}
249
+ .sl-picker[data-layout="narrow"] .sl-sheet-peek .go.ghost{padding:0 10px}
250
+ .sl-picker[data-layout="narrow"] .sl-sheet-toggle{width:36px;height:36px;margin:0}
251
+ /* The hold clock rides INSIDE the Continue pill while the sheet is collapsed
252
+ (that pill is the way to pay from the peek), so the header pill can go
253
+ quiet: one live clock on screen, not two. The open sheet hides the peek
254
+ pill, so the header pill comes back there. */
255
+ .sl-peek-time{opacity:.72;font-weight:700;font-variant-numeric:tabular-nums;margin-inline-start:6px}
256
+ .sl-picker[data-layout="narrow"][data-sheet="peek"][data-peek-clock="true"] .sl-hold-pill.on:not(.is-expiring){display:none}
222
257
  /* OPEN sheet: the head is context, not controls \u2014 the pill it carries at peek
223
258
  ("Best seats"/"Continue") duplicates the card and CTA right below it, and
224
259
  every saved pixel is tray room (owner call 2026-08-14). */
225
260
  .sl-picker[data-layout="narrow"][data-sheet="open"] .sl-sheet-head{min-height:42px}
261
+ .sl-picker[data-layout="narrow"][data-sheet="open"] .sl-sheet-grab{top:5px}
226
262
  .sl-picker[data-layout="narrow"][data-sheet="open"] .sl-sheet-bar{min-height:32px}
227
263
  .sl-picker[data-layout="narrow"][data-sheet="open"] .sl-sheet-peek .go{display:none}
228
264
  .sl-picker[data-layout="narrow"][data-sheet="peek"] .sl-sheet-head{height:100%}
@@ -285,6 +321,19 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
285
321
  .sl-cbbtn:hover{border-color:var(--sl-muted)}
286
322
  .sl-cbbtn svg{width:14px;height:14px;stroke:currentColor;stroke-width:2;fill:none;stroke-linecap:round;stroke-linejoin:round}
287
323
 
324
+ /* Language switcher \u2014 docked with the colour-blind toggle because both answer
325
+ "how this looks to me" rather than "where am I". Sized to the same control
326
+ rhythm as its neighbour so the column reads as one cluster, and it inherits
327
+ the map-palette re-tokening applied to the .sl-map subtree. Native <select>
328
+ on purpose: it gets the platform's own picker, keyboard model and, on a
329
+ phone, a full-height wheel that a custom menu would have to reinvent. */
330
+ .sl-langsel{height:32px;max-width:132px;border-radius:999px;background:var(--sl-surface);
331
+ border:1px solid var(--sl-line);color:var(--sl-text);cursor:pointer;
332
+ padding:0 8px;font:600 11px/1 inherit;appearance:none;text-align:center;
333
+ text-align-last:center;transition:border-color .15s}
334
+ .sl-langsel:hover{border-color:var(--sl-muted)}
335
+ .sl-langsel:focus-visible{outline:2px solid var(--sl-accent);outline-offset:2px}
336
+
288
337
  /* price panel \u2014 one compact filter control replaces the wrapping price-chip row. */
289
338
  .sl-offer{display:none;margin:12px 14px 2px;padding:12px;border:1px solid color-mix(in srgb,var(--sl-accent) 34%,var(--sl-line));
290
339
  border-radius:12px;background:color-mix(in srgb,var(--sl-accent) 8%,var(--sl-surface));color:var(--sl-text)}
@@ -389,6 +438,80 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
389
438
  .sl-ga-qty button:hover{border-color:var(--sl-muted)}
390
439
  .sl-ga-qty span{min-width:16px;text-align:center;font-weight:800;font-variant-numeric:tabular-nums}
391
440
 
441
+ /* GA quantity prompt. The map is the thing being chosen, so it stays visible:
442
+ a popover anchored at the tap on wide layouts, a bottom sheet on narrow.
443
+ Both are the same <section>, restyled \u2014 one DOM, one focus trap. */
444
+ .sl-ga-pop-layer{position:absolute;inset:0;z-index:46}
445
+ .sl-ga-scrim{position:absolute;inset:0;z-index:46;display:flex;align-items:flex-end;
446
+ background:rgba(5,7,12,.58);backdrop-filter:blur(3px)}
447
+ .sl-ga-pop,.sl-ga-sheet{background:var(--sl-surface);color:var(--sl-text);border:1px solid var(--sl-line);
448
+ box-shadow:0 28px 70px rgba(0,0,0,.42)}
449
+ .sl-ga-pop{position:absolute;width:272px;border-radius:calc(var(--sl-radius) * 1.05);pointer-events:auto;
450
+ transform-origin:var(--sl-ga-arrow-x,50%) 100%;animation:sl-ga-spring .16s cubic-bezier(.2,.9,.3,1.2)}
451
+ .sl-ga-pop[data-side="below"]{transform-origin:var(--sl-ga-arrow-x,50%) 0}
452
+ .sl-ga-pop::after{content:"";position:absolute;left:var(--sl-ga-arrow-x,50%);width:11px;height:11px;margin-left:-6px;
453
+ background:var(--sl-surface);border:1px solid var(--sl-line);transform:rotate(45deg)}
454
+ .sl-ga-pop[data-side="above"]::after{bottom:-6px;border-width:0 1px 1px 0}
455
+ .sl-ga-pop[data-side="below"]::after{top:-6px;border-width:1px 0 0 1px}
456
+ .sl-ga-sheet{width:100%;max-height:min(80%,640px);overflow:auto;border-radius:18px 18px 0 0;border-width:1px 0 0;
457
+ animation:sl-ga-rise .18s cubic-bezier(.2,.9,.3,1)}
458
+ @keyframes sl-ga-spring{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}
459
+ @keyframes sl-ga-rise{from{transform:translateY(14px)}to{transform:translateY(0)}}
460
+ .sl-ga-pop-layer[data-motion="reduced"] .sl-ga-pop,.sl-ga-scrim[data-motion="reduced"] .sl-ga-sheet{animation:none}
461
+ @media (prefers-reduced-motion:reduce){.sl-ga-pop,.sl-ga-sheet{animation:none}}
462
+ /* The close button is inset-inline-end, so the head reserves that side in the
463
+ same axis. A physical right put the x straight on top of the eyebrow under
464
+ dir=rtl (ar/fa/he \u2014 ku is Kurmanji in Latin script and is LTR). No backticks
465
+ in here: the whole sheet is a template literal. */
466
+ .sl-ga-prompt-head{position:relative;padding:14px 15px 11px;padding-inline-end:44px;
467
+ border-bottom:1px solid var(--sl-line)}
468
+ .sl-ga-sheet .sl-ga-prompt-head{padding:20px 18px 13px;padding-inline-end:46px}
469
+ .sl-ga-prompt-eyebrow{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--sl-muted);font-weight:800}
470
+ .sl-ga-prompt-title{margin-top:4px;font-size:18px;line-height:1.15;font-weight:850}
471
+ .sl-ga-sheet .sl-ga-prompt-title{font-size:22px}
472
+ .sl-ga-prompt-sub{margin-top:3px;font-size:12px;color:var(--sl-muted);font-weight:700}
473
+ .sl-ga-prompt-close{position:absolute;top:8px;inset-inline-end:8px;width:28px;height:28px;border-radius:999px;
474
+ color:var(--sl-muted)!important;font-size:19px;line-height:1}
475
+ .sl-ga-prompt-body{padding:13px 15px}
476
+ .sl-ga-sheet .sl-ga-prompt-body{padding:16px 18px}
477
+ .sl-ga-prompt-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 0}
478
+ .sl-ga-prompt-row + .sl-ga-prompt-row{border-top:1px solid color-mix(in srgb,var(--sl-line) 60%,transparent)}
479
+ .sl-ga-prompt-label{min-width:0;font-size:13px;font-weight:750}
480
+ .sl-ga-prompt-label small{display:block;margin-top:1px;color:var(--sl-muted);font-size:11px;font-weight:700}
481
+ .sl-ga-stepper{display:grid;grid-template-columns:40px 44px 40px;align-items:center;flex:none;
482
+ border:1px solid var(--sl-line);border-radius:11px;overflow:hidden;background:var(--sl-bg)}
483
+ .sl-ga-stepper button{height:40px;font-size:20px;font-weight:700;
484
+ background:color-mix(in srgb,var(--sl-line) 34%,transparent)!important}
485
+ .sl-ga-stepper button:disabled{opacity:.5;cursor:not-allowed}
486
+ .sl-ga-stepper output{text-align:center;font-size:17px;font-weight:850;font-variant-numeric:tabular-nums}
487
+ .sl-ga-prompt-total{display:flex;justify-content:space-between;align-items:baseline;margin-top:11px;padding-top:10px;
488
+ border-top:1px solid var(--sl-line);font-size:12px;color:var(--sl-muted);font-weight:700}
489
+ .sl-ga-prompt-total b{color:var(--sl-text);font-size:16px;font-weight:850}
490
+ .sl-ga-prompt-hint{margin-top:8px;color:var(--sl-muted);font-size:11px;font-weight:700}
491
+ .sl-ga-prompt-hint:empty{display:none}
492
+ .sl-ga-prompt-actions{display:flex;gap:8px;padding:0 15px 14px}
493
+ .sl-ga-sheet .sl-ga-prompt-actions{padding:0 18px max(18px,env(safe-area-inset-bottom))}
494
+ .sl-ga-prompt-actions button{flex:1;min-height:42px;border-radius:10px;font-weight:800;font-size:13px}
495
+ .sl-ga-sheet .sl-ga-prompt-actions button{min-height:48px;font-size:15px}
496
+ .sl-ga-prompt-remove{flex:0 0 auto!important;padding:0 14px;border:1px solid var(--sl-line)!important;color:var(--sl-muted)!important}
497
+ .sl-ga-prompt-confirm{background:var(--sl-accent)!important;color:var(--sl-accent-ink)!important}
498
+ .sl-ga-prompt-confirm:disabled{opacity:.55;cursor:not-allowed}
499
+
500
+ /* The tray's collapsed second entry point into the same prompt. */
501
+ .sl-ga-areas{border:1px dashed var(--sl-line);border-radius:var(--sl-r-sm);overflow:hidden}
502
+ .sl-ga-areas-toggle{display:flex;width:100%;align-items:center;justify-content:space-between;gap:8px;padding:9px 11px;
503
+ font-size:12px;font-weight:800;color:var(--sl-muted)!important}
504
+ .sl-ga-areas-toggle small{padding:1px 7px;border-radius:999px;font-size:10px;font-weight:800;
505
+ background:color-mix(in srgb,var(--sl-line) 40%,transparent)}
506
+ .sl-ga-areas-list{display:flex;flex-direction:column;border-top:1px solid var(--sl-line)}
507
+ .sl-ga-area-open{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;text-align:start}
508
+ .sl-ga-area-open + .sl-ga-area-open{border-top:1px solid color-mix(in srgb,var(--sl-line) 55%,transparent)}
509
+ .sl-ga-area-open:hover:not(:disabled){background:color-mix(in srgb,var(--sl-line) 26%,transparent)}
510
+ .sl-ga-area-open:disabled{opacity:.5;cursor:not-allowed}
511
+ .sl-ga-area-open .name{min-width:0;font-size:13px;font-weight:750}
512
+ .sl-ga-area-open .name small{display:block;margin-top:1px;color:var(--sl-muted);font-size:10px;font-weight:700}
513
+ .sl-ga-area-open .meta{flex:none;font-size:11px;color:var(--sl-muted);font-weight:700}
514
+
392
515
  /* footer */
393
516
  .sl-foot{position:relative;z-index:2;padding:10px 16px 8px;border-top:1px solid var(--sl-line);flex:none;
394
517
  background:var(--sl-bg);box-shadow:0 -10px 24px -22px rgba(0,0,0,.72)}
@@ -485,6 +608,39 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
485
608
  narrow layout had hidden, and the rail is that legend now, already in view. */
486
609
  .sl-head .sl-fs-pill{min-height:34px;min-width:34px;width:34px;padding:0;flex:none}
487
610
  .sl-head .sl-fs-pill .sl-zfs-lbl{display:none}
611
+ /* NARROW HEADER IS ONE 38px LINE. On a phone the host page (or the popup)
612
+ already names the event above the picker, so identity demotes to the
613
+ thumb + name density that data-event-details-hidden already defined, and
614
+ the hold clock becomes a quiet tinted pill: it must stay legible, not
615
+ compete with the Continue pill that actually takes the money. Every token
616
+ is theme-relative (accent-text is contrast-checked against bg AND surface
617
+ in resolvePickerTokens), so light org themes get a readable pill too. */
618
+ .sl-picker[data-layout="narrow"] .sl-head{gap:8px;padding:6px 10px 6px 12px;min-height:38px}
619
+ .sl-picker[data-layout="narrow"] .sl-logo{width:22px;height:22px;border-radius:6px;font-size:11px}
620
+ .sl-picker[data-layout="narrow"] .sl-head-name{font-size:12.5px}
621
+ .sl-picker[data-layout="narrow"] .sl-head-meta{display:none}
622
+ .sl-picker[data-layout="narrow"] .sl-head .sl-fs-pill{min-height:26px;min-width:26px;width:26px;color:var(--sl-muted)}
623
+ .sl-picker[data-layout="narrow"] .sl-head .sl-fs-pill svg{width:12px;height:12px}
624
+ .sl-picker[data-layout="narrow"] .sl-hold-pill{padding:4px 9px;font-size:11px;gap:5px;
625
+ background:color-mix(in srgb,var(--sl-accent) 14%,var(--sl-surface));color:var(--sl-accent-text)}
626
+ .sl-picker[data-layout="narrow"] .sl-hold-pill.is-expiring{background:var(--sl-accent);color:var(--sl-accent-ink)}
627
+ .sl-picker[data-layout="narrow"] .sl-closed-pill{padding:4px 9px;font-size:11px}
628
+ .sl-picker[data-layout="narrow"] .sl-close{width:26px;height:26px}
629
+ .sl-picker[data-layout="narrow"] .sl-close svg{width:12px;height:12px}
630
+ /* ON-MAP CONTROLS SHARE ONE SIZE ON A PHONE: 36px round (zoom column, minimap
631
+ toggle, colour-blind), 28px pills for level/mode groups. Every one of them
632
+ sits over seats, so the smaller they read the more map survives; the 44px
633
+ coarse-pointer floor still applies through the ::after targets below. */
634
+ .sl-picker[data-layout="narrow"] .sl-minimap-toggle{width:36px;height:36px;border-radius:999px}
635
+ .sl-picker[data-layout="narrow"] .sl-minimap-toggle svg{width:16px;height:16px}
636
+ .sl-picker[data-layout="narrow"] .sl-cbbtn{width:36px;height:36px}
637
+ /* One control size on phones \u2014 match the 36px round rhythm the rest of the
638
+ zoom column uses, but keep width for the language name to be readable. */
639
+ .sl-picker[data-layout="narrow"] .sl-langsel{height:36px;max-width:112px;font-size:11.5px}
640
+ .sl-picker[data-layout="narrow"] .sl-floors{padding:3px;gap:1px}
641
+ .sl-picker[data-layout="narrow"] .sl-floors button[data-floor]{min-height:28px;padding:4px 10px;font-size:10.5px}
642
+ .sl-picker[data-layout="narrow"] .sl-floor-info{flex-basis:26px;width:26px;height:26px;font-size:11px}
643
+ .sl-picker[data-layout="narrow"] .sl-projection button{min-height:28px}
488
644
 
489
645
  /* toast + boot states (toast flows in the bottom-center region) */
490
646
  .sl-toast{transform:translateY(6px) scale(.98);max-width:100%;
@@ -784,9 +940,10 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
784
940
  (the cart chip's remove/view rail) instead get real height on narrow. */
785
941
  @media (pointer:coarse){
786
942
  .sl-zoom button,.sl-cbbtn,.sl-close,.sl-ga-qty button,.sl-ba-qty button,.sl-price-more,
787
- .sl-hold-change,.sl-seccard-x,.sl-fs-pill,.sl-side-toggle,.sl-ba-reopen{position:relative}
943
+ .sl-hold-change,.sl-seccard-x,.sl-fs-pill,.sl-side-toggle,.sl-ba-reopen,.sl-minimap-toggle,.sl-floor-info{position:relative}
788
944
  .sl-zoom button::after,.sl-cbbtn::after,.sl-close::after,.sl-ga-qty button::after,.sl-ba-qty button::after,
789
- .sl-price-more::after,.sl-hold-change::after,.sl-seccard-x::after,.sl-fs-pill::after,.sl-side-toggle::after,.sl-ba-reopen::after{
945
+ .sl-price-more::after,.sl-hold-change::after,.sl-seccard-x::after,.sl-fs-pill::after,.sl-side-toggle::after,.sl-ba-reopen::after,
946
+ .sl-minimap-toggle::after,.sl-floor-info::after{
790
947
  content:'';position:absolute;top:50%;left:50%;width:max(100%,44px);height:max(100%,44px);
791
948
  transform:translate(-50%,-50%)}
792
949
  /* The chip rail stacks remove over view in ~53px \u2014 pseudo-targets would
@@ -1062,13 +1219,20 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
1062
1219
  .sl-confirm-3d svg{width:15px;height:15px;stroke:currentColor;stroke-width:1.9;fill:none;stroke-linecap:round;stroke-linejoin:round}
1063
1220
 
1064
1221
  /* One compact multi-floor selector (flows within the left-rail region). */
1065
- .sl-floors{display:none;align-items:center;gap:6px;max-width:min(260px,100%);padding:5px;border-radius:999px;
1222
+ .sl-floors{display:none;align-items:center;gap:2px;max-width:min(420px,100%);overflow-x:auto;
1223
+ scrollbar-width:none;padding:5px;border-radius:999px;
1066
1224
  background:color-mix(in srgb,var(--sl-surface) 92%,transparent);border:1px solid var(--sl-line);
1067
1225
  box-shadow:var(--sl-shadow);backdrop-filter:blur(8px)}
1068
1226
  .sl-floors.on{display:flex}
1069
- .sl-floors select{min-width:0;max-width:210px;min-height:34px;padding:6px 30px 6px 10px;border:0;border-radius:999px;
1070
- font:700 12px/1 inherit;color:var(--sl-text);background:var(--sl-surface);cursor:pointer}
1071
- .sl-floors select:focus-visible,.sl-floor-info:focus-visible{outline:2px solid var(--sl-accent);outline-offset:2px}
1227
+ /* One tap per level. Mirrors .sl-rungs, which sits directly above it and reads
1228
+ as the same kind of control \u2014 a dropdown here asked for two interactions and
1229
+ hid what the other levels even were. */
1230
+ .sl-floors button[data-floor]{min-height:34px;padding:6px 13px;border:0;border-radius:999px;
1231
+ font:600 11px/1 inherit;letter-spacing:.05em;color:var(--sl-muted);background:transparent;
1232
+ white-space:nowrap;cursor:pointer;transition:color .15s,background-color .15s}
1233
+ .sl-floors button[data-floor]:hover{color:var(--sl-text)}
1234
+ .sl-floors button[data-floor][aria-pressed="true"]{background:var(--sl-accent);color:var(--sl-accent-ink)}
1235
+ .sl-floors button[data-floor]:focus-visible,.sl-floor-info:focus-visible{outline:2px solid var(--sl-accent);outline-offset:2px}
1072
1236
  .sl-floor-info{display:inline-grid;place-items:center;flex:0 0 30px;width:30px;height:30px;border-radius:999px;
1073
1237
  border:1px solid var(--sl-line);color:var(--sl-muted);background:transparent;font:800 13px/1 inherit;cursor:help}
1074
1238
  .sl-floor-info:hover{color:var(--sl-text);border-color:var(--sl-accent)}
@@ -1269,7 +1433,7 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
1269
1433
  corners, and it is the frame. */
1270
1434
  .sl-modal-frame > .sl-picker{border-radius:0}
1271
1435
  @media(max-width:640px){.sl-modal-scrim{padding:0}.sl-modal-frame{width:100%;height:100%;border-radius:0}}
1272
- `;function Oe(){if(document.getElementById(dt))return;let o=document.createElement("style");o.id=dt,o.textContent=ki,document.head.appendChild(o)}import{relativeLuminance255 as Si,rgb255ToHex as Ti}from"@seatlayer/core/core/color";function W(o){if(!o)return null;let e=o.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(o){return Si([o.r,o.g,o.b])}function N(o,e){let t=W(o),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 he(o,e="#172033",t="#eef1f8"){return(N(e,o)??0)>=(N(t,o)??0)?e:t}function Ci(o){return Ti(o.r,o.g,o.b)}function Ie(o,e,t){let i=W(o),s=W(e);if(!i||!s)return null;let r=Math.max(0,Math.min(1,t));return Ci({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 Ei(o,e,t,i){if((N(o,t)??4.5)>=4.5&&(N(o,i)??4.5)>=4.5)return o;if(!W(o)||!W(e))return e;for(let s=.15;s<=1;s+=.05){let r=Ie(o,e,1-s);if(r&&(N(r,t)??0)>=4.5&&(N(r,i)??0)>=4.5)return r}return e}function xe(o,e){let t=e?.background??o?.background??"#0f1522",i=W(t)?he(t)==="#172033":!1,s=e?.surface??(i?"#ffffff":"#1a2234"),r=e?.accent??o?.accent??"#f4b740",n=o?.accentInk,a=e?.accentInk??(n&&(N(n,r)??4.5)>=4.5?n:he(r,"#1a1200","#ffffff")),l=o?.textColor,c=e?.text??(l&&(N(l,t)??4.5)>=4.5&&(N(l,s)??4.5)>=4.5?l:he(t));return{"--sl-accent":r,"--sl-accent-ink":a,"--sl-accent-text":Ei(r,c,t,s),"--sl-bg":t,"--sl-surface":s,"--sl-text":c,"--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??o?.fontFamily??"-apple-system,BlinkMacSystemFont,'Segoe UI',Inter,sans-serif","--sl-radius":`${e?.radius??14}px`}}function pt(o,e,t){let i=document.createElement("div");i.className="sl-picker",i.tabIndex=-1,o.appendChild(i),Object.entries(xe(void 0,t)).forEach(([r,n])=>i.style.setProperty(r,n)),i.innerHTML=`
1436
+ `;function Ke(){if(document.getElementById(Ft))return;let r=document.createElement("style");r.id=Ft,r.textContent=ps,document.head.appendChild(r)}import{getLocale as fs,localeDirection as gs,t as bs}from"@seatlayer/core";import{relativeLuminance255 as hs,rgb255ToHex as us}from"@seatlayer/core/core/color";function W(r){if(!r)return null;let e=r.trim().toLowerCase();if(e==="white")return{r:255,g:255,b:255};if(e==="black")return{r:0,g:0,b:0};let i=/^#([0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(e)?.[1];if(i){let s=i.length<=4?[...i].map(n=>`${n}${n}`).join(""):i;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 t=/^rgba?\(\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)(?:\s*[,/]\s*[\d.]+%?)?\s*\)$/i.exec(e);return t?{r:Math.max(0,Math.min(255,Number(t[1]))),g:Math.max(0,Math.min(255,Number(t[2]))),b:Math.max(0,Math.min(255,Number(t[3])))}:null}function Pe(r){return hs([r.r,r.g,r.b])}function K(r,e){let i=W(r),t=W(e);if(!i||!t)return null;let s=Math.max(Pe(i),Pe(t)),n=Math.min(Pe(i),Pe(t));return(s+.05)/(n+.05)}function Q(r,e="#172033",i="#eef1f8"){return(K(e,r)??0)>=(K(i,r)??0)?e:i}function ms(r){return us(r.r,r.g,r.b)}function We(r,e,i){let t=W(r),s=W(e);if(!t||!s)return null;let n=Math.max(0,Math.min(1,i));return ms({r:t.r*n+s.r*(1-n),g:t.g*n+s.g*(1-n),b:t.b*n+s.b*(1-n)})}function jt(r,e,i,t){if((K(r,i)??4.5)>=4.5&&(K(r,t)??4.5)>=4.5)return r;if(!W(r)||!W(e))return e;for(let s=.15;s<=1;s+=.05){let n=We(r,e,1-s);if(n&&(K(n,i)??0)>=4.5&&(K(n,t)??0)>=4.5)return n}return e}function Vt(r,e){let i=e??r["--sl-bg"],t=W(i)?Q(i)==="#172033":!1,s=W(r["--sl-bg"])?Q(r["--sl-bg"])==="#172033":!1;if(t===s)return null;let n=t?"#ffffff":"#1a2234",a=Q(i),o=r["--sl-accent"];return{"--sl-bg":i,"--sl-surface":n,"--sl-text":a,"--sl-muted":t?"#667085":"#a5aec2","--sl-line":t?"rgba(23,32,51,.16)":"rgba(165,174,194,.24)","--sl-accent-text":jt(o,a,i,n)}}function we(r,e){let i=e?.background??r?.background??"#0f1522",t=W(i)?Q(i)==="#172033":!1,s=e?.surface??(t?"#ffffff":"#1a2234"),n=e?.accent??r?.accent??"#f4b740",a=r?.accentInk,o=e?.accentInk??(a&&(K(a,n)??4.5)>=4.5?a:Q(n,"#1a1200","#ffffff")),l=r?.textColor,c=e?.text??(l&&(K(l,i)??4.5)>=4.5&&(K(l,s)??4.5)>=4.5?l:Q(i));return{"--sl-accent":n,"--sl-accent-ink":o,"--sl-accent-text":jt(n,c,i,s),"--sl-bg":i,"--sl-surface":s,"--sl-text":c,"--sl-muted":e?.muted??(t?"#667085":"#a5aec2"),"--sl-line":e?.line??(t?"rgba(23,32,51,.16)":"rgba(165,174,194,.24)"),"--sl-font":e?.fontFamily??r?.fontFamily??"-apple-system,BlinkMacSystemFont,'Segoe UI',Inter,sans-serif","--sl-radius":`${e?.radius??14}px`}}function Nt(r,e,i){let t=document.createElement("div");t.className="sl-picker",t.tabIndex=-1,t.lang=fs(),t.dir=gs(),r.appendChild(t),Object.entries(we(void 0,i)).forEach(([n,a])=>t.style.setProperty(n,a)),t.innerHTML=`
1273
1437
  <div class="sl-head">
1274
1438
  <div class="sl-logo" data-ref="logo"></div>
1275
1439
  <div class="sl-head-info" data-ref="headInfo">
@@ -1281,28 +1445,28 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
1281
1445
  <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>
1282
1446
  <span data-ref="closedPillText"></span>
1283
1447
  </span>
1284
- <button type="button" class="sl-close" data-ref="close" aria-label="${e("picker.close","Close")}">
1448
+ <button type="button" class="sl-close" data-ref="close" data-sl-a="picker.close" aria-label="${e("picker.close","Close")}">
1285
1449
  <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>
1286
1450
  </button>
1287
1451
  </div>
1288
- <div class="sl-rail" data-ref="rail" role="group" aria-label="${e("picker.ticketPrices","Ticket prices")}">
1452
+ <div class="sl-rail" data-ref="rail" role="group" data-sl-a="picker.ticketPrices" aria-label="${e("picker.ticketPrices","Ticket prices")}">
1289
1453
  <div class="sl-rail-scroll" data-ref="railScroll"></div>
1290
1454
  </div>
1291
1455
  <div class="sl-body">
1292
1456
  <div class="sl-map">
1293
1457
  <div class="sl-map-host" data-ref="map"></div>
1294
1458
  <div class="sl-zoom" data-ref="zoom">
1295
- <button type="button" aria-label="${e("picker.zoomIn","Zoom in")}" title="${e("picker.zoomIn","Zoom in")}" data-ref="zin">+</button>
1296
- <button type="button" aria-label="${e("picker.zoomOut","Zoom out")}" title="${e("picker.zoomOut","Zoom out")}" data-ref="zout">\u2212</button>
1297
- <button type="button" aria-label="${e("picker.fitToScreen","Fit to screen")}" title="${e("picker.fitToScreen","Fit to screen")}" data-ref="zfit">
1459
+ <button type="button" data-sl-a="picker.zoomIn" aria-label="${e("picker.zoomIn","Zoom in")}" data-sl-ti="picker.zoomIn" title="${e("picker.zoomIn","Zoom in")}" data-ref="zin">+</button>
1460
+ <button type="button" data-sl-a="picker.zoomOut" aria-label="${e("picker.zoomOut","Zoom out")}" data-sl-ti="picker.zoomOut" title="${e("picker.zoomOut","Zoom out")}" data-ref="zout">\u2212</button>
1461
+ <button type="button" data-sl-a="picker.fitToScreen" aria-label="${e("picker.fitToScreen","Fit to screen")}" data-sl-ti="picker.fitToScreen" title="${e("picker.fitToScreen","Fit to screen")}" data-ref="zfit">
1298
1462
  <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>
1299
1463
  </button>
1300
- <button type="button" aria-label="${e("picker.fullScreen","Full screen")}" title="${e("picker.fullScreen","Full screen")}" aria-pressed="false" data-ref="zfs">
1464
+ <button type="button" data-sl-a="picker.fullScreen" aria-label="${e("picker.fullScreen","Full screen")}" data-sl-ti="picker.fullScreen" title="${e("picker.fullScreen","Full screen")}" aria-pressed="false" data-ref="zfs">
1301
1465
  <svg viewBox="0 0 24 24"><path d="M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7"/></svg>
1302
- <span class="sl-zfs-lbl" aria-hidden="true">${e("picker.fullScreen","Full screen")}</span>
1466
+ <span class="sl-zfs-lbl" data-sl-t="picker.fullScreen" aria-hidden="true">${e("picker.fullScreen","Full screen")}</span>
1303
1467
  </button>
1304
1468
  </div>
1305
- <div class="sl-boot" data-ref="boot"><span class="sl-boot-spin"></span>${e("picker.loadingSeatMap","Loading seat map\u2026")}</div>
1469
+ <div class="sl-boot" data-ref="boot"><span class="sl-boot-spin"></span><span data-sl-t="picker.loadingSeatMap">${e("picker.loadingSeatMap","Loading seat map\u2026")}</span></div>
1306
1470
  <div class="sl-toast" data-ref="toast" role="status" aria-live="polite"></div>
1307
1471
  </div>
1308
1472
  <div class="sl-side" data-ref="side">
@@ -1310,23 +1474,23 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
1310
1474
  <div class="sl-sheet-grab"></div>
1311
1475
  <div class="sl-sheet-bar">
1312
1476
  <div class="sl-sheet-peek" data-ref="peek"></div>
1313
- <button type="button" class="sl-sheet-toggle" data-ref="sheetToggle" aria-label="${e("picker.openTicketPanel","Open ticket panel")}" aria-expanded="false">
1477
+ <button type="button" class="sl-sheet-toggle" data-ref="sheetToggle" data-sl-a="picker.openTicketPanel" aria-label="${e("picker.openTicketPanel","Open ticket panel")}" aria-expanded="false">
1314
1478
  <svg viewBox="0 0 24 24"><path d="M6 15l6-6 6 6"/></svg>
1315
1479
  </button>
1316
1480
  </div>
1317
1481
  </div>
1318
- <div class="sl-sec sl-filtersec" data-ref="filtersSec">${e("picker.filters","Filters")}</div>
1482
+ <div class="sl-sec sl-filtersec" data-ref="filtersSec" data-sl-t="picker.filters">${e("picker.filters","Filters")}</div>
1319
1483
  <div class="sl-filters" data-ref="filters"></div>
1320
1484
  <div class="sl-offer" data-ref="offer" role="status" aria-live="polite"></div>
1321
- <div class="sl-sec sl-prices-sec" data-ref="pricesSec"><span>${e("picker.ticketPrices","Ticket prices")}</span></div>
1485
+ <div class="sl-sec sl-prices-sec" data-ref="pricesSec"><span data-sl-t="picker.ticketPrices">${e("picker.ticketPrices","Ticket prices")}</span></div>
1322
1486
  <div class="sl-prices-hint" data-ref="pricesHint"></div>
1323
1487
  <div class="sl-prices" data-ref="prices"></div>
1324
1488
  <div class="sl-live" data-ref="live" role="status" aria-live="polite">
1325
1489
  <span class="dot" aria-hidden="true"></span>
1326
- <span data-ref="liveText">${e("picker.liveAvailability","Live availability \u2014 seats update in real time")}</span>
1490
+ <span data-ref="liveText" data-sl-t="picker.liveAvailability">${e("picker.liveAvailability","Live availability \u2014 seats update in real time")}</span>
1327
1491
  </div>
1328
1492
  <div class="sl-sec sl-seats-sec">
1329
- <span>${e("picker.yourSeats","Your seats")}</span>
1493
+ <span data-sl-t="picker.yourSeats">${e("picker.yourSeats","Your seats")}</span>
1330
1494
  <span class="sl-seat-summary" data-ref="seatSummary"></span>
1331
1495
  </div>
1332
1496
  <div class="sl-tray" data-ref="tray"></div>
@@ -1334,13 +1498,15 @@ import{a as P,b as B,c as R,d as F}from"./chunk-OSZ7DOEH.js";import{PickerContro
1334
1498
  <div class="sl-hold-note" data-ref="holdNote" role="status" aria-live="polite">
1335
1499
  <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M20 6L9 17l-5-5"/></svg>
1336
1500
  <span>
1337
- <b data-ref="holdTitle">${e("picker.seatsSecured","Seats secured")}</b>
1338
- <span class="sl-hold-copy" data-ref="holdCopy">${e("picker.notChargedYet","You won\u2019t be charged yet.")}</span>
1501
+ <b data-ref="holdTitle" data-sl-t="picker.seatsSecured">${e("picker.seatsSecured","Seats secured")}</b>
1502
+ <span class="sl-hold-copy" data-ref="holdCopy" data-sl-t="picker.notChargedYet">${e("picker.notChargedYet","You won\u2019t be charged yet.")}</span>
1339
1503
  </span>
1340
- <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>
1504
+ <button type="button" class="sl-hold-change" data-ref="holdChange" data-sl-a="picker.releaseHeldTickets" data-sl-t="picker.change" aria-label="${e("picker.releaseHeldTickets","Release held tickets and choose different seats")}">${e("picker.change","Change")}</button>
1341
1505
  </div>
1342
1506
  <div class="sl-total"><span data-ref="count"></span><b data-ref="total"></b></div>
1343
1507
  <button type="button" class="sl-cta" data-ref="cta" disabled></button>
1344
1508
  </div>
1345
1509
  </div>
1346
- </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 Ai,loadPanoramaImage as Li,planPanoramaDelivery as Pi,schedulePanoramaUpgrade as Mi}from"@seatlayer/core/view/panoramaDelivery";function ht(o){let{root:e,source:t,caption:i,real:s,closeLabel:r,dragHint:n,viewFromSeatLabel:a,real360Label:l,previewLabel:c,resolveAsset:u,onClose:p}=o,d=document.createElement("div");d.className="sl-view",d.setAttribute("role","dialog"),d.setAttribute("aria-label",a),d.innerHTML=`<div class="sl-view-head"><span class="sl-view-title">${a}</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:c}</span><span class="sl-view-hint">${n}</span></div>`,e.appendChild(d);let f=d.querySelector(".sl-view-pano"),m=Pi(t,Ai()),g=new AbortController;f.style.backgroundImage=`url("${m.initialUrl}")`;let w=()=>{};m.upgradeUrl&&(w=Mi(()=>{u(m.upgradeUrl).then(H=>!H||g.signal.aborted?null:Li(H,g.signal).then(()=>H)).then(H=>{!H||!d.isConnected||g.signal.aborted||(f.style.backgroundImage=`url("${H}")`)}).catch(()=>{})}));let k=70,x=35,v=1,C=f.clientHeight||1,h=f.clientWidth||1,b=-(C*(180/k)*2/2-h/2),T=0,E=()=>{let H=f.clientHeight||1,Ee=H*(180/k)*v,Ge=Math.max(0,Ee-H),Ye=Math.min(Ge/2,x/180*Ee);T=Math.min(Ye,Math.max(-Ye,T)),f.style.backgroundSize=`auto ${Ee}px`,f.style.backgroundPosition=`${b}px ${T-Ge/2}px`};E();let M=!1,A=0,L=0,D=H=>{M=!0,A=H.clientX,L=H.clientY,f.classList.add("drag"),f.setPointerCapture?.(H.pointerId)},se=H=>{M&&(b+=H.clientX-A,T+=H.clientY-L,A=H.clientX,L=H.clientY,E())},me=H=>{M=!1,f.classList.remove("drag"),f.releasePointerCapture?.(H.pointerId)},Ke=H=>{H.preventDefault(),v=Math.min(2.4,Math.max(1,v+(H.deltaY<0?.12:-.12))),E()};f.addEventListener("pointerdown",D),f.addEventListener("pointermove",se),f.addEventListener("pointerup",me),f.addEventListener("pointercancel",me),f.addEventListener("wheel",Ke,{passive:!1});let Ce=d.querySelector(".sl-view-x");Ce.addEventListener("click",p);let We=H=>{H.key==="Escape"&&(H.stopPropagation(),p())};return d.addEventListener("keydown",We),Ce.focus(),{element:d,dispose(){w(),g.abort(),f.removeEventListener("pointerdown",D),f.removeEventListener("pointermove",se),f.removeEventListener("pointerup",me),f.removeEventListener("pointercancel",me),f.removeEventListener("wheel",Ke),d.removeEventListener("keydown",We),Ce.removeEventListener("click",p)}}}import{seatConfidenceDisclosure as Oi}from"@seatlayer/core/core/seatConfidence";import{t as Hi}from"@seatlayer/core";function S(o,e){let t=Hi(o);return t===o?e:t}function ut(o){if(typeof o=="string"){let e=document.querySelector(o);if(!e)throw new Error(`seatmap: container "${o}" not found`);return e}if(!(o instanceof HTMLElement))throw new Error("seatmap: container must be a CSS selector or an HTMLElement");return o}function z(o){return String(o??"").replace(/[&<>"']/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[e])}var Ri=(()=>{if(typeof document<"u"&&document.currentScript instanceof HTMLScriptElement&&document.currentScript.src)return document.currentScript.src;try{let o=import.meta.url;if(typeof o=="string"&&o)return o}catch{}})(),te=null;function mt(){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(o){let e=Ri??(typeof location<"u"?location.href:void 0);if(!e)throw new Error(`seatlayer: cannot resolve the ${o} chunk URL`);return new URL(`./${o}`,e).href}async function ft(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import($e("seatlayer-view3d.mjs")):import("@seatlayer/core/view3d")}async function bt(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import($e("seatlayer-panorama.mjs")):import("@seatlayer/core")}async function gt(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import($e("seatlayer-checkout.mjs")):import("./hostedCheckout-ILVKHB3C.js")}function vt(o){return o==="unavailable_for_event"||o==="payments_off_for_event"?o:"not_configured"}function we(o,e,t){let i={month:"short",day:"numeric",hour:"numeric",minute:"2-digit"},s=new Date(o);if(e)try{return s.toLocaleString(t,{...i,timeZone:e})}catch{}return s.toLocaleString(t,i)}function j(o){return String(o??"").replace(/[&<>"]/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[e])}function ie(o){return o?.restrictedView?S("picker.restrictedView","Restricted view"):o?.obstructedView?S("picker.obstructedView","Obstructed view"):""}function yt(o){if(!o)return"";let e=[];o.premium&&e.push(`<div class="sl-cx-premium"><span class="sl-cx-star" aria-hidden="true">\u2605</span>${S("picker.premiumSeat","Premium seat")}</div>`);let t=ie(o);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>${o.note?`<span class="sl-cx-note">${j(o.note)}</span>`:""}</span></div>`):o.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">${j(o.note)}</span></span></div>`),e.length?`<div class="sl-cx">${e.join("")}</div>`:""}function Be(o){let e=ie(o);if(!e)return"";let t=j(o?.note?o.note:e);return`<span class="sl-cx-mark" role="img" aria-label="${t}" title="${t}">\u25D0</span>`}function ue(o){return o==="no-seat"?S("picker.emptyWheelchairSpace","Empty wheelchair space"):o==="seat-present"?S("picker.accessiblePhysicalSeat","Accessible physical seat"):""}function xt(o){let e=ue(o);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(o){let e=ue(o);return e?`<span class="sl-cx-mark" role="img" aria-label="${e}" title="${e}">\u267F</span>`:""}function De(o,e){if(!o)return"";let t=e?S("picker.viewFromThisSeat","View from this seat"):S("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 wt(o){if(!o)return"";let e=o.previous.label||o.previous.id,t=o.next.label||o.next.id;return`<span class="sl-seccard-nav" aria-label="${S("picker.browseSections","Browse sections")}"><button type="button" data-section-nav="${z(o.previous.id)}" aria-label="${S("picker.previousSection","Previous section")}: ${z(e)}" title="${z(e)}">\u2190</button><button type="button" data-section-nav="${z(o.next.id)}" aria-label="${S("picker.nextSection","Next section")}: ${z(t)}" title="${z(t)}">\u2192</button></span>`}function kt(o,e){if(!e)return"";let t=e,i=t.includes(o.id),s=i?t.length>1?S("picker.openComparison","Open comparison"):S("picker.savedForComparison","Saved for comparison"):t.length?S("picker.compareWithSaved","Compare with saved"):S("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>${j(s)}</span></button>`}function St(o,e,t){if(!t)return"";let i=Oi(o.confidenceEvidence),s=i.modeledTarget??i.reality;return`<button type="button" class="sl-confirm-confidence" aria-label="Open seat confidence passport for ${j(o.displayLabel??o.label)}"><span><em>${j(e)}</em><strong>${j(i.headline)}</strong><small>${j(s)}</small></span><b>Passport</b></button>`}function G(o){let e=o?.rowLabel,t=o?.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 Ii}from"@seatlayer/core";import{createMinimapTransform as $i,minimapPointToWorld as Bi,minimapViewportPlan as zi}from"@seatlayer/core/picker/minimapGeometry";function Tt(o,e){let t=new Fe(o);return t.build(e),t}var Fe=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;this.userClosed=!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",S("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 a=document.createElement("span");a.className="sl-minimap-key",a.setAttribute("aria-label",S("picker.minimapStateKey","Focused, selected, available, and inactive sections")),a.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",S("picker.closeVenueMap","Close venue overview map")),l.textContent="\xD7",r.append(n,a,l);let c=document.createElement("canvas");c.tabIndex=0,c.setAttribute("role","application"),c.setAttribute("aria-label",S("picker.venueMapInstructions","Venue overview map. Drag the viewport, click a section, or use arrow keys to pan.")),s.append(r,c),e.appendChild(s),this.miniWrap=s,this.miniLabel=n,this.miniCanvas=c;let u=document.createElement("canvas");this.miniBase=u,i.addEventListener("click",()=>{let p=this.host.root()?.dataset.minimapOpen==="true";this.userClosed=p,this.setMinimapOpen(!p)}),l.addEventListener("click",()=>{this.userClosed=!0,this.setMinimapOpen(!1)}),c.addEventListener("click",p=>{if(this.miniSuppressClick){this.miniSuppressClick=!1;return}this.minimapJump(p)}),c.addEventListener("pointerdown",p=>this.minimapPointerDown(p)),c.addEventListener("pointermove",p=>this.minimapPointerMove(p)),c.addEventListener("pointerup",p=>this.minimapPointerUp(p)),c.addEventListener("pointercancel",p=>this.minimapPointerUp(p)),c.addEventListener("keydown",p=>this.minimapKeydown(p)),this.layoutMinimap(),this.syncMinimapLabel(),this.drawMinimapStatic(),this.drawMinimapRect()}setAutoOpen(e){if(this.miniWrap){if(!e){this.userClosed=!1,this.host.root()?.dataset.minimapOpen==="true"&&this.setMinimapOpen(!1,!1);return}this.userClosed||this.host.root()?.dataset.minimapOpen==="true"||this.setMinimapOpen(!0,!1)}}setMinimapOpen(e,t=!0){this.host.root()?.setAttribute("data-minimap-open",String(e)),this.miniToggle?.setAttribute("aria-expanded",String(e)),t&&(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,a=i.width/Math.max(1,i.height),l=s,c=Math.round(s/a);c>r&&(c=r,l=Math.round(r*a)),l=Math.max(64,l),c=Math.max(48,c);let u=Math.min(2,window.devicePixelRatio||1);e.width=Math.round(l*u),e.height=Math.round(c*u),e.style.width=`${l}px`,e.style.height=`${c}px`,t.width=e.width,t.height=e.height,this.miniTf=$i(i,e.width,e.height,u,n)}syncMinimapLabel(){if(!this.miniLabel||!this.miniWrap)return;let e=this.host.controller.getFloors(),t=this.host.controller.isFloorOverview()?S("picker.allFloors","All floors"):e.find(u=>u.id===this.host.controller.getActiveFloorId())?.name??S("picker.venueOverview","Venue overview"),i=this.host.controller.getMinimapSnapshot().sections,r=i.find(u=>u.active)?.label??this.host.focusedSectionLabel(),n=r?`${t} \xB7 ${r}`:t;this.miniLabel.textContent=n;let a=i.filter(u=>u.state==="selected").length,l=i.filter(u=>u.state==="available").length,c=i.filter(u=>u.state==="inactive").length;this.miniWrap.setAttribute("aria-label",i.length?`${n}. ${a} selected, ${l} available, ${c} inactive sections.`:n),this.miniCanvas?.setAttribute("aria-label",i.length?`${n}. ${a} selected, ${l} available, ${c} inactive sections. ${S("picker.venueMapInstructions","The outlined region is the visible map area. Drag it, click a section, or use arrow keys to pan.")}`:`${n}. ${S("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=p=>p*t.scale+t.offX,r=p=>p*t.scale+t.offY,n=this.host.cssVar("--sl-line")||"rgba(139,147,167,.5)",a=this.host.cssVar("--sl-muted")||"#8b93a7",l=this.host.cssVar("--sl-accent")||"#6e7bff",c=this.host.cssVar("--sl-success")||"#22a06b",u=this.host.controller.getMinimapSnapshot();for(let p of u.sections)p.outline.length<3||(i.beginPath(),p.outline.forEach((d,f)=>f===0?i.moveTo(s(d.x),r(d.y)):i.lineTo(s(d.x),r(d.y))),i.closePath(),i.globalAlpha=p.state==="inactive"?.18:p.state==="selected"?.72:.34,i.fillStyle=p.state==="inactive"?a:p.state==="selected"?l:c,i.fill(),i.globalAlpha=.82,i.lineWidth=Math.max(1,t.dpr),i.strokeStyle=n,i.stroke(),p.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,!u.sections.length){let p=Math.max(1,t.dpr);for(let d of u.seats)i.globalAlpha=d.state==="inactive"?.22:.78,i.fillStyle=d.state==="inactive"?a:d.state==="selected"?l:c,i.beginPath(),i.arc(s(d.x),r(d.y),p,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=zi(r.visible,i,e.width,e.height,Math.max(2,i.dpr*2)),a=this.host.cssVar("--sl-text")||"#12151c",l=this.host.cssVar("--sl-surface")||"#fff";s.save(),s.globalAlpha=.1,s.fillStyle=a,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=a,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{...Bi({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)&&Ii(t,i.outline)){this.host.controller.focusSection(i.id);return}this.host.controller.clearSectionFocus(),this.host.controller.panToWorld(t)}}};import{t as je}from"@seatlayer/core";var Di=12;function Ct(o,e){let t=e.floors(),i=new Set(t.map(g=>g.label.trim().toLocaleLowerCase())),s=e.zones().filter(g=>g.seatCount>0&&!i.has(g.label.trim().toLocaleLowerCase())),r=e.sections().filter(g=>g.seatCount>0&&!i.has(g.label.trim().toLocaleLowerCase())),n=s.length>1?[]:r,a=t.length>1,l=s.length>1,c=n.length>1;if(!a&&!l&&!c)return;let u=document.createElement("div");u.className="sl-view3d-nav";let p=document.createElement("button");p.type="button",p.className="sl-view3d-nav-toggle",p.setAttribute("aria-expanded","false");let d=g=>{u.classList.toggle("is-open",g),p.setAttribute("aria-expanded",String(g)),p.textContent=g?S("picker.closeVenueNav","Close"):a&&(l||c)?S("picker.levelsAndAreas","Levels & areas"):a?S("picker.levels","Levels"):S("picker.areas","Areas")};p.addEventListener("click",()=>d(!u.classList.contains("is-open"))),u.addEventListener("keydown",g=>{g.key!=="Escape"||!u.classList.contains("is-open")||(g.preventDefault(),g.stopPropagation(),d(!1),p.focus())}),d(!1),u.appendChild(p);let f=g=>{},m=g=>{};if(a){let g=document.createElement("div");g.setAttribute("role","group"),g.setAttribute("aria-label",S("picker.levels","Levels"));let w=[];m=v=>{w.forEach(C=>{C.setAttribute("aria-pressed",String((C.dataset.floor===""?null:Number(C.dataset.floor))===v))})};let k=v=>{e.focusFloor(v)&&(m(v),f(v))},x=(v,C)=>{let h=document.createElement("button");h.type="button",h.textContent=v,h.dataset.floor=C===null?"":String(C),h.setAttribute("aria-pressed",String(C===null)),h.addEventListener("click",()=>{k(C),d(!1)}),w.push(h),g.appendChild(h)};x(S("picker.allLevels","All levels"),null);for(let v of t)x(v.label||je("picker.levelNumber",{number:v.index+1}),v.index);u.appendChild(g)}if(l||c){let g=document.createElement("div");g.setAttribute("role","group"),g.setAttribute("aria-label",S("picker.areas","Areas"));let w=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)}})),k=x=>{let v=l||x===null?w:w.filter(C=>C.floorIndex===void 0||C.floorIndex===x);if(g.replaceChildren(),!v.length){g.remove();return}if(g.isConnected||u.appendChild(g),!l&&v.length>Di){let C=document.createElement("select");C.setAttribute("aria-label",S("picker.jumpToSection","Jump to section"));let h=document.createElement("option");h.value="",h.textContent=S("picker.jumpToSection","Jump to section"),C.appendChild(h);for(let b of v){let T=document.createElement("option");T.value=b.id,T.textContent=b.label,C.appendChild(T)}C.addEventListener("change",()=>{v.find(b=>b.id===C.value)?.go()}),g.appendChild(C);return}for(let C of v){let h=document.createElement("button");h.type="button",h.textContent=C.label,h.addEventListener("click",()=>{C.go(),d(!1)}),g.appendChild(h)}};f=k,k(null)}o.appendChild(u)}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",S("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(S("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",S("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?je("picker.compareCount",{count:i}):S("picker.oneSeatSaved","1 seat saved"),s.setAttribute("aria-label",i>1?je("picker.openComparisonOfSeats",{count:i}):S("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}from"@seatlayer/core";function Et(o){return Array.isArray(o)?o.reduce((e,t)=>t.type==="minimumSelectedPlaces"?Math.max(e,t.minimum):e,0):0}function Ve(o,e,t=!1){let i=o.violations[0];return i==="numberOfPlacesToSelect"?o.remaining>0?Se("picker.selectExactMore",{count:o.remaining}):Se("picker.selectExactCount",{count:o.required}):i==="minimumSelectedPlaces"?Se("picker.selectMinimumMore",{count:o.remaining}):t?e("picker.adjustSeatSelection","Adjust seat selection"):i==="consecutiveSeats"?e("picker.selectSeatsTogether","Choose seats together in the same row and ticket category."):Se("picker.orphanHint")}import{t as Te,tCount as Fi}from"@seatlayer/core";function _e(o){let e=Math.max(0,o),t=Math.floor(e/6e4),i=String(Math.floor(e%6e4/1e3)).padStart(2,"0");return`${t}:${i}`}function At({d:o,area:e,label:t,objectType:i,quantity:s=1,identity:r}){let n=u=>String(u??"\u2014").replace(/[&<>"]/g,p=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[p]),a=i==="ga"?"ga":o?.objectType??i,l=r?.displayType?.trim()||o?.displayType?.trim()||e?.displayType?.trim()||(a==="table"?S("picker.table","Table"):a==="booth"?S("picker.booth","Booth"):a==="ga"?S("picker.generalAdmission","General admission"):S("picker.row","Row")),c=r?.rowLabel??r?.displayLabel??o?.rowLabel??o?.displayLabel??e?.displayLabel??e?.label??t;return a==="table"&&r?.bookingMode?`<div class="sl-chip-id"><span class="fld sec"><span class="sl-chip-eb">${n(l)}</span><span class="val">${n(c)}</span></span><span class="fld mid"><span class="sl-chip-eb">${S("picker.guests","Guests")}</span><span class="val">${s}</span></span></div>`:a==="ga"?`<div class="sl-chip-id"><span class="fld sec"><span class="sl-chip-eb">${n(l)}</span><span class="val">${n(c)}</span></span>`+(s>1?`<span class="fld mid"><span class="sl-chip-eb">${S("picker.tickets","Tickets")}</span><span class="val">${s}</span></span>`:"")+"</div>":a==="booth"?'<div class="sl-chip-id">'+(o?.sectionLabel?`<span class="fld sec"><span class="sl-chip-eb">${S("picker.section","Section")}</span><span class="val">${n(o.sectionLabel)}</span></span>`:"")+`<span class="fld mid"><span class="sl-chip-eb">${n(l)}</span><span class="val">${n(c)}</span></span></div>`:!o?.sectionLabel&&!o?.rowLabel&&!o?.seatNumber?`<div class="sl-chip-id"><span class="fld sec"><span class="sl-chip-eb">${S("picker.seat","Seat")}</span><span class="val">${n(c)}</span></span></div>`:'<div class="sl-chip-id">'+(o.sectionLabel?`<span class="fld sec"><span class="sl-chip-eb">${S("picker.section","Section")}</span><span class="val">${n(o.sectionLabel)}</span></span>`:"")+(o.rowLabel?`<span class="fld mid"><span class="sl-chip-eb">${n(l)}</span><span class="val">${n(G(o))}</span></span>`:"")+(o.seatNumber?`<span class="fld mid"><span class="sl-chip-eb">${S("picker.seat","Seat")}</span><span class="val">${n(o.seatNumber)}</span></span>`:"")+"</div>"}function Lt(o,e){return`<div class="sl-chip-rail"><button type="button" class="rm" aria-label="${o}"><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 Pt(o){return o.salesClosed||o.hasHold||o.ctaPhase!=="idle"||o.formOpen||o.room<=0?null:Math.max(1,Math.min(o.wanted,o.room))}function Mt({count:o,total:e,pendingCount:t,ctaPhase:i,hasHold:s,salesClosed:r,fromPrice:n,addMore:a,money:l}){if(o&&i==="holding")return`<span>${S("picker.securingSeats","Securing your seats\u2026")}</span>`;if(o&&i==="checkout")return`<span>${Te("picker.peekSecured",{count:o,total:l(e)})}</span>`;if(o){let c=!!s;return`<span>${Fi("picker.peekTicketsTotal",o,{total:l(e)})}</span>`+(a?`<button type="button" class="go ghost sl-sheet-go" data-act="best" aria-label="${S("picker.findTogetherInstead","Find seats together instead")}">\u2726 +${a}</button>`:"")+`<button type="button" class="go sl-sheet-go" data-act="${c?"checkout":"open"}">${s?t?S("picker.secureMore","Secure more"):S("picker.continue","Continue"):S("picker.review","Review")}</button>`}else return r?`<span>${S("picker.salesClosedPill","Sales are closed")}</span>`:(n!=null?`<span>${Te("picker.peekFromPrice",{price:l(n)})}</span>`:`<span>${S("picker.pickYourSeats","Pick your seats")}</span>`)+`<button type="button" class="go sl-sheet-go" data-act="open">${S("picker.bestSeatsStar","\u2726 Best seats")}</button>`}function Ne(o,e=Date.now()){return Te("picker.holdReassurance",{time:_e(o-e)})}var Wi="https://api.seatlayer.io",Gi=10,Ot=6e4,It=6e4,$t=new Set;function Yi(o){let e=$t.has(o);return $t.add(o),e}var Bt="seatmap.a11y.cb";function Xi(){try{if(typeof window>"u")return null;let o=window.localStorage.getItem(Bt);return o==null?null:o==="1"}catch{return null}}function Qi(o){try{window.localStorage.setItem(Bt,o?"1":"0")}catch{}}var qe=class o{constructor(e){this.realtime=null;this.accessEl=null;this.lastSelectionValidity=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.channelByObject=new Map;this.pricesByChannel=new Map;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.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??Wi).replace(/\/+$/,""),this.access=e.transport?null:de(e,{onExpired:r=>{this.opts.onAccessExpired?.(r),r.refreshed||this.showAccessPanel({reason:"no_token",retryable:!1})},onUnavailable:r=>{this.opts.onAccessUnavailable?.(r),this.showAccessPanel(r)}}),this.pubApi=e.transport?null:new X(this.apiBase,{access:this.access??void 0,onObjectUnavailable:r=>this.opts.onSelectedObjectUnavailable?.(r)}),this.api=e.transport??this.pubApi,this.buyerAssetUrls=new ve(e.event,this.api.asset?(r,n)=>this.api.asset(r,n):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=Et(e.selectionValidators);if(this.exactTickets!=null&&i>this.exactTickets)throw new Error("seatmap: `minimumSelectedPlaces.minimum` cannot exceed `numberOfPlacesToSelect`");let s=Math.max(1,Math.floor(e.maxSelection??this.exactTickets??Math.max(Gi,i)));if(this.exactTickets!=null&&s<this.exactTickets)throw new Error("seatmap: `maxSelection` cannot be lower than `numberOfPlacesToSelect`");if(e.maxSelection!=null&&s<i)throw new Error("seatmap: `maxSelection` cannot be lower than `minimumSelectedPlaces.minimum`");this.maxTickets=this.exactTickets??s,this.cbSafe=Xi()??!!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=Ni(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){Oe();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",S("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 o({...e,container:s});n.modalScrim=i,n.prevFocus=t;let a=["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(g=>g.isConnected&&!g.closest('[hidden], [aria-hidden="true"], [inert]'));return m[m.length-1]??s},c=(m,g)=>{let w=m;for(;w;){let k=window.getComputedStyle(w);if(w.hidden||w.getAttribute("aria-hidden")==="true"||w.hasAttribute("inert")||k.display==="none"||k.visibility==="hidden"||k.visibility==="collapse")return!0;if(w===g)return!1;w=w.parentElement}return!0},u=m=>[...m.querySelectorAll(a)].filter(g=>g.tabIndex>=0&&!g.matches(":disabled")&&!c(g,m)),p=(m,g)=>{let w=u(m),k=g?w[w.length-1]:w[0];k?k.focus({preventScroll:!0}):(m.hasAttribute("tabindex")||(m.tabIndex=-1),m.focus({preventScroll:!0}))},d=!1,f=()=>{if(d)return;d=!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 g=()=>{n.destroy(),e.onClose?.()};n.hold&&!n.handedOff?n.release().finally(g):g()};return n.closeModal=f,i.addEventListener("mousedown",m=>{m.target===i&&f()}),n.escHandler=m=>{if(m.key==="Tab"){if(m.defaultPrevented)return;let g=l(),w=u(g),k=w[0],x=w[w.length-1],v=document.activeElement;!k||!x?(m.preventDefault(),p(g,m.shiftKey)):v===g||!v||!g.contains(v)?(m.preventDefault(),(m.shiftKey?x:k).focus({preventScroll:!0})):m.shiftKey&&v===k?(m.preventDefault(),x.focus({preventScroll:!0})):!m.shiftKey&&v===x&&(m.preventDefault(),k.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),p(l(),!1),n}wireController(e){return new ji({transport:this.api,eventKey:e.event,maxSelection:this.maxTickets,selectedObjects:e.selectedObjects,selectableObjects:e.selectableObjects,numberOfPlacesToSelect:e.numberOfPlacesToSelect,selectionValidators:e.selectionValidators,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,Oe();let s=performance.now();await Ui(this.opts.locale),t.loadLocale=i(s),this.opts.messages&&qi(this.opts.messages),this.checkoutMode==="hosted"&&(this.paymentOptions=this.pubApi.paymentOptions(this.opts.event));let r=performance.now(),n=ut(this.opts.container),{root:a,els:l,mapHost:c}=pt(n,(b,T)=>this.tf(b,T),this.opts.theme);this.root=a,this.els=l,this.mapHost=c,a.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(a);let u=document.createElement("div");u.style.cssText="position:absolute;inset:0",this.mapHost.appendChild(u),t.mountBuyerShell=i(r);let p=await this.loadChart(u,t,i);if(!p)return this;this.els.boot.remove();let d=performance.now();if(this.startRealtime(),this.salesClosed=!!p.salesClosed||!!this.opts.readOnly,a.dataset.eventMode=p.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),p.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])=>a.style.setProperty(b,T)),this.currency=p.currency??this.opts.currency??"USD",this.eventTimezone=p.timezone??null;let m=this.opts.theme?.logoUrl??f?.logoUrl??p.posterUrl??null;m?this.els.logo.innerHTML=`<img src="${m}" alt="">`:this.els.logo.textContent=(this.opts.theme?.brandName??f?.brandName??p.eventName??"?").slice(0,1).toUpperCase(),this.els.name.textContent=p.eventName??"";let g=p.startsAt?we(p.startsAt,p.timezone??null,this.opts.locale):"";this.eventWhenText=g||null,this.els.meta.textContent=[p.venue,g].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 w=new Set,k=!1;if(this.controller.doc)for(let b of Ue(this.controller.doc)){for(let T of b.accessibility??[])w.add(T);b.accessible&&!b.accessibility?.length&&w.add("wheelchair"),(b.commercial?.restrictedView||b.commercial?.obstructedView)&&(k=!0)}let x=()=>{this.rungsEl&&this.controller.getRung()!=="seats"&&(this.controller.setRung("seats"),this.collapseSectionCard(),this.syncRung())};if(w.size||k){let b=document.createElement("div");if(b.className="sl-chips",this.regions["top-left"].appendChild(b),this.a11yChipsEl=b,w.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"))+Vi.filter(({key:A})=>w.has(A)).map(({key:A,short:L,icon:D})=>T(A,`${D} ${L}`)).join(""));let E=new Set,M=()=>{b.querySelectorAll("button[data-a11y]").forEach(L=>{let D=L.dataset.f,se=D==="all"?E.size===0:E.has(D);L.classList.toggle("on",se),L.setAttribute("aria-pressed",String(se))});let A=E.size?[...E]:null;this.controller.setAccessibilityFilter(A),A&&x()};b.querySelectorAll("button[data-a11y]").forEach(A=>{A.addEventListener("click",()=>{let L=A.dataset.f;L==="all"?E.clear():E.has(L)?E.delete(L):E.add(L),M()})})}if(k){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 E=!this.limitedViewFilter;this.limitedViewFilter=E,T.classList.toggle("on",E),T.setAttribute("aria-pressed",String(E)),this.controller.setCommercialLimitedFilter(E),this.pushAvailabilityTo3d(),E&&x()})}}let v=document.createElement("button");v.type="button",v.className="sl-cbbtn",this.cbEl=v,v.setAttribute("aria-label",this.tf("picker.toggleColorblindColors","Toggle colorblind-friendly colors")),v.setAttribute("aria-pressed",String(this.cbSafe)),v.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(v),v.addEventListener("click",()=>{this.setColorblindSafe(!this.cbSafe)}),this.srEl=document.createElement("div"),this.srEl.className="sl-sr",this.srEl.setAttribute("aria-live","polite"),a.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(d);let C=performance.now();if(await this.restoreRememberedHold(),t.restoreHold=i(C),this.destroyed)return this;this.salesClosed&&this.applySalesClosed(),this.syncPrices(),this.syncTray(),this.resumeHostedOrder();let h=this.controller.doc;return this.emitAnalytics("chart_rendered",{renderingTimeMillis:i(e),performanceProfile:t,seatCount:this.allSeats().length,objectCount:h?.objects.length??0,sectionCount:h?.objects.filter(b=>b.type==="section").length??0,view:this.buyerView,eventKey:this.opts.event,chartName:h?.name,floorCount:this.controller.getFloors().length,transport:this.opts.transport?"custom":"pubapi",load:Yi(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 s=this.els.sheetToggle,r=c=>{e.dataset.sheet=c?"open":"peek",s?.setAttribute("aria-expanded",String(c)),s?.setAttribute("aria-label",c?this.tf("picker.collapseTicketPanel","Collapse ticket panel"):this.tf("picker.openTicketPanel","Open ticket panel"))};r(e.dataset.sheet==="open"),s?.addEventListener("click",c=>{c.stopPropagation(),r(e.dataset.sheet!=="open")}),this.els.peek?.addEventListener("click",c=>{let u=c.target.closest(".sl-sheet-go");u&&(c.stopPropagation(),u.dataset.act==="checkout"?this.handleCta():u.dataset.act==="best"?(this.baReopen=!0,this.baQty=Math.max(1,Math.min(this.baQty,this.maxTickets-this.totalTicketCount())),this.syncTray(),r(!0),this.els.tray?.querySelector(".sl-ba-go")?.focus()):r(!0))});let n=0,a=!1,l=!1;t.addEventListener("pointerdown",c=>{if(c.target.closest?.(".sl-seccard,.sl-sheet-toggle,.sl-sheet-go")){l=!1;return}l=!0,a=!1,n=c.clientY,t.setPointerCapture?.(c.pointerId)}),t.addEventListener("pointermove",c=>{if(!l||a)return;let u=c.clientY-n;u<-18?(r(!0),a=!0):u>18&&(r(!1),a=!0)}),t.addEventListener("pointerup",c=>{l&&!a&&Math.abs(c.clientY-n)<6&&r(e.dataset.sheet!=="open"),l=!1,t.releasePointerCapture?.(c.pointerId)})}let i=()=>{if(this.root?.dataset.layout!=="narrow")return;let s=this.root.getAttribute("data-prices-open")==="true";if(this.root.setAttribute("data-prices-open",String(!s)),this.els.pricesSec?.setAttribute("aria-expanded",String(!s)),!s&&this.root.dataset.sheet!=="open"){this.root.dataset.sheet="open";let r=this.els.sheetToggle;r?.setAttribute("aria-expanded","true"),r?.setAttribute("aria-label","Collapse ticket panel")}};this.els.pricesSec?.addEventListener("click",s=>{s.target.closest("select,button")||i()}),this.els.pricesSec?.addEventListener("keydown",s=>{s.key!=="Enter"&&s.key!==" "||s.target.closest("select,button")||(s.preventDefault(),i())}),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",s=>{let r=this.els.map.getBoundingClientRect();this.tipPos={x:s.clientX-r.left,y:s.clientY-r.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",a=s<560?"compact":"comfortable";(e.dataset.layout!==n||e.dataset.density!==a)&&(e.dataset.layout=n,e.dataset.density=a,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,a=this.opts;this.destroy(),new o({...a,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)),this.cbEl&&this.els.zoom?.appendChild(this.cbEl),this.a11yChipsEl&&(e?this.els.rail?.insertBefore(this.a11yChipsEl,this.els.railScroll??null):this.regions["top-left"]?.appendChild(this.a11yChipsEl)),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 S(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">'+ge+`</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,s.id)*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)return;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}let s=this.controller.getSelectionValidity(e);if(s&&!s.isValid){i.disabled=!0,i.textContent=Ve(s,(r,n)=>this.tf(r,n),!0);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=Tt({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)];if(e.key)for(let i of this.pricesByChannel.values())for(let s of i)s.categoryKey===e.key&&t.push(s.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(a=>({key:a.key,range:this.catPriceRange(a)})).filter(a=>a.range!=null);if(!t.length)return[];let i=[...new Map(t.map(a=>[`${a.range.min}:${a.range.max}`,a.range])).values()].sort((a,l)=>a.min-l.min||a.max-l.max);if(i.length<=5)return i.map(a=>({id:`p${a.min}-${a.max}`,label:a.min===a.max?this.money(a.min):`${this.money(a.min)}\u2013${this.money(a.max)}`,keys:t.filter(l=>l.range.min===a.min&&l.range.max===a.max).map(l=>l.key),min:a.min,max:a.max}));let s=[...t].sort((a,l)=>a.range.min-l.range.min||a.range.max-l.range.max),r=Math.ceil(s.length/4),n=[];for(let a=0;a<s.length;a+=r){let l=s.slice(a,a+r),c=Math.min(...l.map(p=>p.range.min)),u=Math.max(...l.map(p=>p.range.max));n.push({id:`b${a}`,label:c===u?this.money(c):`${this.money(c)}\u2013${this.money(u)}`,keys:l.map(p=>p.key),min:c,max:u})}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(u=>u.objects)],s=new Set((e.zones??[]).map(u=>u.id)),n=i.some(u=>u.type==="section"&&typeof u.zone=="string"&&s.has(u.zone))?["zones","sections","seats"]:["sections","seats"],a=document.createElement("div");a.className="sl-rungs on",a.setAttribute("role","group"),a.setAttribute("aria-label",y("picker.zoomLevel"));let l={zones:y("picker.rungLabel.zones"),sections:y("picker.rungLabel.sections"),seats:y("picker.rungLabel.seats")},c={zones:y("picker.rungTip.zones"),sections:y("picker.rungTip.sections"),seats:y("picker.rungTip.seats")};a.innerHTML=n.map(u=>`<button type="button" data-rung="${u}" title="${c[u]}" aria-pressed="false">${l[u]}</button>`).join(""),a.querySelectorAll("button").forEach(u=>{u.addEventListener("click",()=>{let p=u.dataset.rung;this.controller.setRung(p),p==="seats"&&this.collapseSectionCard()})}),this.regions["top-center"].appendChild(a),this.rungsEl=a,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 c of i){let u=document.createElement("option");u.value=c.id,u.textContent=c.name,r.appendChild(u)}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 a=document.createElement("button");a.type="button",a.className="sl-floor-info",a.textContent="i";let l=this.tf("picker.floorHelp","All floors shows the complete venue. Choose one level to inspect and select its seats.");a.setAttribute("aria-label",l),a.title=l,s.appendChild(a),this.regions["left-rail"].appendChild(s),this.floorsEl=s,this.syncFloors()}}syncRung(){let e=this.controller.getRung(),t=e==="seats";this.root&&(this.root.dataset.zoomed=String(t)),this.minimap?.setAutoOpen(!1),this.rungsEl&&this.rungsEl.querySelectorAll("button").forEach(i=>{let s=i.dataset.rung===e;i.classList.toggle("on",s),i.setAttribute("aria-pressed",String(s))})}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||!mt()?!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)?It/2:It}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;this.secCardEl?.remove();let t=e.categories.length?e.categories.map(p=>{let d=this.controller.doc?.categories.find(f=>f.key===p.key);return d?this.catPriceRange(d):{min:p.priceMin,max:p.priceMax}}).filter(p=>p!=null):[{min:e.priceMin,max:e.priceMax}],i=Math.min(...t.map(p=>p.min)),s=Math.max(...t.map(p=>p.max)),r=i===s?this.money(i):`${this.money(i)}\u2013${this.money(s)}`,n=q("picker.seatsLeftInSection",e.seatsLeft),a=`<button type="button" class="sl-seccard-x" aria-label="${y("picker.closeSectionSummary")}">\u2715</button>`,l=wt(this.sectionNeighbours(e.id)),c=document.createElement("div");if(this.root?.dataset.layout==="narrow")c.className="sl-seccard strip on",c.setAttribute("role","status"),c.setAttribute("aria-label",y("picker.sectionSummaryAria",{label:e.label})),c.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+a,this.wireSectionNavigation(c),c.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),this.els.map.appendChild(c);else if(this.secCardCollapsed)c.className="sl-seccard mini on",c.setAttribute("role","button"),c.setAttribute("aria-label",y("picker.sectionSummaryAria",{label:e.label})),c.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+a,this.wireSectionNavigation(c),c.addEventListener("click",p=>{p.target.closest(".sl-seccard-x")||(this.secCardCollapsed=!1,this.secCardShownAt=Date.now(),this.renderSectionCard(e))}),c.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),(this.regions["top-center"]??this.els.map).appendChild(c);else{c.className="sl-seccard on",c.setAttribute("role","dialog"),c.setAttribute("aria-label",y("picker.sectionSummaryAria",{label:e.label}));let p=e.categories.map(d=>{let f=this.priceBandKeys!=null&&!this.priceBandKeys.has(d.key),m=this.controller.doc?.categories.find(k=>k.key===d.key),g=m?this.catPriceRange(m):{min:d.priceMin,max:d.priceMax},w=g&&g.min!==g.max?`${this.money(g.min)}\u2013${this.money(g.max)}`:this.money(g?.min??d.price);return`<span class="sl-seccard-mix-item${f?" sl-dim":""}"><span class="sl-seccard-mix-dot" style="background:${d.color}"></span>${d.label} <span class="sl-seccard-mix-price">${w}</span></span>`}).join("");c.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>`:"")+a+`</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,d=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[d])}</div>`:"")+(p?`<div class="sl-seccard-mix">${p}</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(c),c.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),c.querySelector(".sl-seccard-overview").addEventListener("click",()=>this.controller.overview()),(this.regions["top-center"]??this.els.map).appendChild(c)}this.secCardEl=c}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(k=>k.type==="section"&&k.id===t.id)?.outline;if(!i||i.length<3)return 0;let s=i.map(k=>this.controller.worldToScreen(k)),r=s.map(k=>k.x),n=s.map(k=>k.y),a=Math.min(...r),l=Math.min(...n),c=Math.max(...r)-a,u=Math.max(...n)-l;if(c<=0||u<=0)return 0;let p=this.els.map.getBoundingClientRect(),d=e.getBoundingClientRect(),f=d.left-p.left,m=d.top-p.top,g=Math.max(0,Math.min(f+d.width,a+c)-Math.max(f,a)),w=Math.max(0,Math.min(m+d.height,l+u)-Math.max(m,l));return g*w/(c*u)}announceSeat(e){if(!this.srEl)return;if(!e){this.srEl.textContent="";return}let t=this.controller.doc?.categories.find(d=>d.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,a=this.controller.tableSelection(e.id),l=a??this.controller.seatDetails(e.id),c=this.rowTypeWord(l),u=l?.rowLabel??l?.displayLabel??e.displayLabel??e.label,p=a?`${c} ${u}, ${a.bookingMode==="variable"?y("picker.minToMaxGuests",{min:a.minOccupancy,max:a.maxOccupancy}):y("picker.capacityGuests",{count:a.capacity})}`:l?.objectType==="booth"?`${c} ${u}`:l?.objectType==="table"?`${c} ${u}, ${y("picker.seatNumberLower",{label:l.seatNumber??e.label})}`:y("picker.seatLabel",{label:l?.displayLabel??e.displayLabel??e.label});this.srEl.textContent=`${p}, ${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=c=>String(c??"").replace(/[&<>"']/g,u=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[u]),r=this.controller.doc?.categories.find(c=>c.key===e.categoryKey),n=e.bookingMode==="variable",a=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:a}):y("picker.wholeTypeWord",{typeWord:a}))}</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,e.label))})}</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(c=>{c.addEventListener("click",()=>{if(!this.tableDialog)return;let u=Math.max(this.tableDialog.minOccupancy,Math.min(this.tableDialog.maxOccupancy,this.tableDialog.quantity+Number(c.dataset.tableStep)));this.tableDialog={...this.tableDialog,quantity:u},this.renderTableDialogState()})}),l.querySelector(".sl-table-cancel").addEventListener("click",()=>this.cancelTableDialog()),l.querySelector(".sl-table-confirm").addEventListener("click",()=>{this.confirmTableDialog()}),l.addEventListener("mousedown",c=>{c.target===l&&this.cancelTableDialog()}),l.addEventListener("keydown",c=>{if(c.key!=="Tab")return;let u=[...l.querySelectorAll('button:not(:disabled),[tabindex]:not([tabindex="-1"])')];if(!u.length)return;let p=u[0],d=u[u.length-1];c.shiftKey&&document.activeElement===p?(c.preventDefault(),d.focus()):!c.shiftKey&&document.activeElement===d&&(c.preventDefault(),p.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(a=>{let l=Number(a.dataset.tableStep);a.disabled=l<0?e.quantity<=e.minOccupancy:e.quantity>=e.maxOccupancy});let r=this.paidPrice(e.categoryKey,e.tierId??null,e.price,e.label),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,e.label):void 0,a=x=>String(x??"\u2014").replace(/[&<>"]/g,v=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[v]),l=[i?.sectionLabel?`<div class="sl-confirm-field"><span class="sl-confirm-key">${this.tf("picker.section","Section")}</span><span class="sl-confirm-value">${a(i.sectionLabel)}</span></div>`:"",i?.rowLabel||i?.objectType==="booth"?`<div class="sl-confirm-field"><span class="sl-confirm-key">${a(this.rowTypeWord(i))}</span><span class="sl-confirm-value">${a(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">${a(i?.seatNumber??i?.displayLabel??e.displayLabel??e.label)}</span></div>`:""].filter(Boolean).join(""),c=i?.tiers??s?.tiers??[],u=i?.tierId??c[0]?.id,p=x=>x.buyerMessage?.trim()||(x.restriction==="companion"?this.tf("picker.companionRequiresWheelchair","Requires the adjacent wheelchair place"):void 0),d=c.length>1?`<fieldset class="sl-confirm-tiers"><legend>${this.tf("picker.ticketType","Ticket type")}</legend>`+c.map(x=>{let v=p(x);return`<button type="button" class="sl-confirm-tier" data-confirm-tier="${a(x.id)}" aria-pressed="${x.id===u}"><span class="sl-confirm-tier-copy"><span class="sl-confirm-tier-name">${a(x.name)}</span>`+(v?`<small class="sl-confirm-tier-note">${a(v)}</small>`:"")+`</span><span class="sl-confirm-tier-price">${this.money(this.paidPrice(e.categoryKey,x.id,x.price,e.label))}</span></button>`}).join("")+"</fieldset>":c[0]&&p(c[0])?`<p class="sl-confirm-tier-note">${a(p(c[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 g=s?.color??"#6e7bff",w=Ie(g,this.cssVar("--sl-surface")||"#1a2234",.76)??g;m.style.setProperty("--sl-cat",g),m.style.setProperty("--sl-cat-ink",he(w,"#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">${a(i?.categoryLabel??s?.label??e.categoryKey)}</span>`+(n!=null?`<span class="sl-confirm-price">${this.money(n)}</span>`:"")+'</div><div class="sl-confirm-body">'+d+xt(i?.wheelchairSpaceType)+yt(e.commercial)+(this.seatViewEnabled()&&this.buyerView!=="venue3d"?this.confirmThumbHtml(e):"")+(f?`${St(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">${kt(e,f?this.view3dCompareSeatIds:null)}${De(this.canOffer3d(),f)}</div>`:De(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 k=m.querySelector(".sl-confirm-thumb");if(k&&e.viewUrl){let x=e.viewMeta?.previewUrl??e.viewUrl;this.buyerAssetUrls.resolve(x).then(v=>{v&&m.isConnected&&this.confirmEl===m&&(k.src=v)}).catch(v=>this.opts.onError?.(v))}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 v=x.dataset.confirmTier,C=c.find(b=>b.id===v);if(!C)return;this.controller.setSeatTier(e.id,C.id),m.querySelectorAll("[data-confirm-tier]").forEach(b=>{b.setAttribute("aria-pressed",String(b===x))});let h=m.querySelector(".sl-confirm-price");h&&(h.textContent=this.money(this.paidPrice(e.categoryKey,C.id,C.price,e.label))),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,a=Math.max(n,Math.min(t-n,e.x)),l=e.y+r+24<=i,c=e.y<r+24&&l;this.confirmEl.dataset.placement=c?"below":"above",this.confirmEl.style.left=`${a}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?Ue(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(p=>p.id===s)?.focalPoint??i?.focalPoint??{x:0,y:0},n,a,l=!1;if(e.viewUrl){let p,d=null;try{let m=e.viewMeta?.previewUrl;m&&m!==e.viewUrl?(d=await this.buyerAssetUrls.resolve(m),p=e.viewUrl):p=await this.buyerAssetUrls.resolve(e.viewUrl)}catch(m){t===this.seatViewGen&&this.opts.onError?.(m);return}if(t!==this.seatViewGen||!p||e.viewMeta?.previewUrl&&e.viewMeta.previewUrl!==e.viewUrl&&!d||!this.root||!this.seatViewEnabled())return;let f={url:p,...d?{previewUrl:d}:{},...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,a=Ht(f),l=Ki(f)}else{let p;try{let{generateSeatPanorama:d}=await bt();p=d(e,r,this.allSeats())}catch(d){t===this.seatViewGen&&this.opts.onError?.(d);return}if(t!==this.seatViewGen||!this.root||!this.seatViewEnabled())return;n={url:p.url,generated:!0},a=y("picker.illustrationCaption",{m:p.distanceM})}this.closeSeatView(!1);let c=y("picker.viewFromSeat",{label:e.label}),u=ht({root:this.root,source:n,caption:a,real:l,closeLabel:this.tf("picker.close","Close"),dragHint:this.tf("picker.dragToLookAround","Drag to look around \xB7 scroll to zoom"),viewFromSeatLabel:c,real360Label:y("picker.real360"),previewLabel:y("picker.preview"),resolveAsset:p=>this.buyerAssetUrls.resolve(p),onClose:()=>this.closeSeatView()});this.viewEl=u.element,this.viewCleanup=()=>u.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):_i(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=ct(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=He(t);if(!i)return;this.offerAvailability=i,this.applyChannelPricing(i.channelPricing),this.scheduleOfferBoundary(i);let s=Re(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}applyChannelPricing(e){this.channelByObject.clear(),this.pricesByChannel.clear();for(let t of e?.channels??[])this.pricesByChannel.set(t.channelId,t.priceOverrides);for(let t of e?.objects??[])this.pricesByChannel.has(t.channelId)&&this.channelByObject.set(t.label,t.channelId)}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 a=document.createElement("div");a.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 c=document.createElement("strong");c.className="sl-offer-name",c.textContent=r.name||(i?this.tf("picker.currentOffer","Current offer"):this.tf("picker.scheduledOffer","Scheduled offer"));let u=document.createElement("span");u.className="sl-offer-line";let p=[];i&&t.fromPrice!=null&&p.push(this.money(t.fromPrice/100)),i&&r.remaining!=null&&p.push(y("picker.offerRemainingAvailable",{count:r.remaining})),i&&r.endsAt!=null&&p.push(y("picker.offerUntil",{time:we(r.endsAt,this.eventTimezone,this.opts.locale)})),s?.startsAt!=null&&p.push(y("picker.offerStarts",{time:we(s.startsAt,this.eventTimezone,this.opts.locale)})),u.textContent=p.join(" \xB7 "),a.append(l,c,u);let d=document.createElement("details");d.className="sl-offer-info";let f=document.createElement("summary");f.setAttribute("aria-label",y("picker.howOfferWorks",{name:c.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."),d.append(f,m),n.append(a,d),e.replaceChildren(n),e.classList.add("has")}paidPrice(e,t,i,s){let r=s?this.channelByObject.get(s):void 0;if(r&&e){let a=this.pricesByChannel.get(r)?.find(l=>l.categoryKey===e&&l.tierId===(t??null));if(a)return a.price}let n=e?this.opts.pricing?.prices?.[e]:void 0;return n===void 0?i:typeof n=="number"?n:t&&n.tiers?.[t]!==void 0?n.tiers[t]:n.base??i}legendDeps(){return{colorOf:e=>this.controller.getRenderer()?.categoryDisplayColor?.(e.key)??e.color,rangeOf:e=>this.catPriceRange(e),priceOf:e=>this.catPrice(e),offerOf:e=>this.offerPrice(e),money:e=>this.money(e),esc:z}}syncPriceRail(e,t){let i=this.els.railScroll,s=e.length>1;this.els.rail?.classList.toggle("has",s||!!this.a11yChipsEl?.children.length),i&&(i.innerHTML=s?ot({...this.legendDeps(),categories:e,left:t,activeKey:this.focusedCatKey,soldOutWord:this.tf("picker.soldOut","Sold out")}):"",i.querySelectorAll(".sl-rc").forEach(r=>{r.addEventListener("click",()=>this.focusCategory(r.dataset.cat??""))}))}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),this.syncPriceRail(i,t);let s=5,r=i.length-s,n=r>1&&!this.pricesExpanded,a=n?i.slice(0,s):i;this.els.prices.classList.toggle("sl-expanded",r>1&&this.pricesExpanded),this.els.prices.innerHTML=nt({...this.legendDeps(),categories:a,left:t,collapsed:n,activeKey:this.focusedCatKey,bandKeys:this.priceBandKeys,leftCount:l=>q("picker.leftCount",l),titleFor:(l,c)=>c?this.tf("picker.showAllSeats","Show all seats"):y("picker.showLabelSeatsOnMap",{label:l.label}),moreLabel:r>1?n?y("picker.showAllTicketTypes",{count:i.length}):this.tf("picker.showFewer","Show fewer"):null,status:{legend:this.tf("picker.seatStatusLegend","Seat status legend"),held:this.tf("picker.temporarilyHeld","Temporarily held"),sold:this.tf("picker.sold","Sold")}}),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 c=()=>this.focusCategory(l.dataset.cat??"");l.addEventListener("click",c),l.addEventListener("keydown",u=>{(u.key==="Enter"||u.key===" ")&&(u.preventDefault(),c())})}),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 a=s[n.key],l=t[n.key]??0;if(a===void 0||l>=a)continue;let c=a-l;i.textContent=q("picker.seatsJustTakenInCategory",c,{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(),t=this.controller.getGAAreas(),i=this.hold?.items??[],s=[],r=new Set;if(this.salesClosed&&!e.length&&!i.length){let h=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.")}${h}</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 h=(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>`:"")+(h.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>`+h.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="${z(T.id)}"${this.baZone===T.id?" selected":""}>${z(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 a=(h,b,T,E=1,M,A)=>At({d:h?this.controller.seatDetails(h):null,area:T==="ga"?t.find(L=>L.id===M):void 0,label:b,objectType:T,quantity:E,identity:A}),l=Lt;for(let h of i){let b=`held:${h.label}`;r.add(b);let T=this.controller.doc?.categories.find(D=>D.key===h.categoryKey),E=h.tierId?T?.tiers?.find(D=>D.id===h.tierId)?.name:void 0,M=h.objectType!=="ga"?this.controller.seatByLabel(h.label):null,A=h.objectType==="table"?this.controller.tableSelection(h.label):null,L=this.seatViewEnabled()&&!!M&&h.objectType!=="table";s.push(`<div class="sl-chip sl-held${this.lastTrayKeys.has(b)?"":" sl-enter"}" data-key="${b}" data-held="${encodeURIComponent(h.label)}"${M?` data-locate="${M.id}"`:""}><div class="sl-chip-main">`+a(M?.id??null,h.label,h.objectType,h.quantity??1,h.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??h.categoryKey}${E?` \xB7 ${E}`:""}</span>`+(A?.bookingMode==="variable"?`<button type="button" class="sl-table-edit" data-table-edit="${encodeURIComponent(h.label)}">${y("picker.guestsCountEdit",{count:h.quantity??1})}</button>`:"")+ze(M?.wheelchairSpaceType)+Be(M?.commercial)+`<span class="amt">${this.money(this.paidPrice(h.categoryKey,h.tierId,h.unitPrice,h.label)*(h.quantity??1))}</span></div></div>`+l(y("picker.removeHeldTicketLabel",{label:h.label}),L?h.label:null)+"</div>")}let c=new Set(i.map(h=>h.label)),u=this.seatViewEnabled();for(let h of e.filter(b=>!c.has(b.label))){let b=`seat:${h.id}`;r.add(b);let T=this.controller.doc?.categories.find(L=>L.key===h.categoryKey),E=h.tiers&&h.tiers.length?`<select class="tier" data-tier="${h.id}" aria-label="${y("picker.ticketTierFor",{label:h.label})}">`+h.tiers.map(L=>`<option value="${L.id}"${L.id===h.tierId?" selected":""}>${L.name} \xB7 ${this.money(this.paidPrice(h.categoryKey,L.id,L.price,h.label))}</option>`).join("")+"</select>":"",M=h.tiers?.find(L=>L.id===h.tierId)??h.tiers?.[0],A=M?.buyerMessage?.trim()||(M?.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="${h.id}" data-locate="${h.id}"><div class="sl-chip-main">`+a(h.id,h.label,h.objectType,h.quantity??1,h.objectId,h)+`<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??h.categoryKey}</span>`+(h.objectType==="table"&&h.bookingMode==="variable"?`<button type="button" class="sl-table-edit" data-table-edit="${encodeURIComponent(h.label)}">${y("picker.guestsCountEdit",{count:h.quantity??1})}</button>`:"")+`${ze(h.wheelchairSpaceType)}${Be(h.commercial)}${E}<span class="amt">${this.money(this.paidPrice(h.categoryKey,h.tierId??null,h.price,h.label)*(h.quantity??1))}</span></div>`+(A?`<small class="sl-tier-note">${z(A)}</small>`:"")+"</div>"+l(y("picker.removeSeatLabel",{label:h.label}),u&&h.objectType!=="table"?h.label:null)+"</div>")}for(let h of t){let b=this.gaQty.get(h.id)??0;s.push(`<div class="sl-ga" data-ga="${h.id}"><div class="sl-ga-info"><div class="sl-ga-name">${h.displayLabel??h.label}</div><div class="sl-ga-sub">${h.displayType??this.tf("picker.generalAdmission","General admission")} \xB7 ${this.money(this.paidPrice(h.categoryKey,null,h.price,h.id))} \xB7 ${q("picker.leftCount",h.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(h=>{h.addEventListener("click",()=>{this.baQty=Math.max(1,Math.min(this.maxTickets,this.baQty+Number(h.dataset.ba))),this.syncTray()})}),this.els.tray.querySelector("[data-ba-cat]")?.addEventListener("change",h=>{this.baCat=h.target.value}),this.els.tray.querySelector("[data-ba-zone]")?.addEventListener("change",h=>{this.baZone=h.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(h=>{h.addEventListener("click",()=>{let b=h.closest(".sl-chip");if(b.dataset.held){this.removeHeldLabel(decodeURIComponent(b.dataset.held),b);return}let T=b.dataset.seat,E=this.controller.getSelection().find(A=>A.id===T)?.label??this.tf("picker.seat","Seat"),M=()=>{this.controller.deselect([T]),this.toast(y("picker.labelRemoved",{label:E}),"neutral",{label:this.tf("picker.undo","Undo"),onClick:()=>{let A=this.controller.select([T]);this.toast(A.length?y("picker.labelRestored",{label:E}):y("picker.labelNoLongerAvailable",{label:E}),A.length?"success":"warning")}})};if(this.reducedMotion()){M();return}b.classList.add("sl-leave"),this.scheduleMotion(M,150)})}),this.els.tray.querySelectorAll("[data-table-edit]").forEach(h=>{h.addEventListener("click",b=>{b.stopPropagation();let T=decodeURIComponent(h.dataset.tableEdit??""),E=this.controller.tableSelection(T);if(!E)return;let M=i.find(A=>A.label===T&&A.objectType==="table");this.showTableDialog({...E,quantity:M?.quantity??E.quantity},!!M,h)})}),this.els.tray.querySelectorAll(".sl-chip .tier").forEach(h=>{h.addEventListener("change",()=>this.controller.setSeatTier(h.dataset.tier,h.value||null))}),this.els.tray.querySelectorAll(".sl-chip .view[data-view-label]").forEach(h=>{h.addEventListener("click",()=>{let b=this.controller.seatByLabel(h.dataset.viewLabel);b&&this.openSeatView(b)})}),this.els.tray.querySelectorAll(".sl-chip[data-locate]").forEach(h=>{let b=()=>this.controller.flashSeat(h.dataset.locate,this.cssVar("--sl-accent")||"#f4b740");h.addEventListener("mouseenter",b),h.addEventListener("focusin",b)}),this.els.tray.querySelectorAll(".sl-ga button").forEach(h=>{h.addEventListener("click",()=>{let T=h.closest(".sl-ga").dataset.ga,E=t.find(L=>L.id===T),M=Number(h.dataset.d);if(M>0&&!this.canAddTicket())return;let A=Math.max(0,Math.min(E?.available??0,(this.gaQty.get(T)??0)+M));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(h=>{h.disabled=!0});let p=this.pendingGATotal(t),d=this.pendingGACount(),f=i.reduce((h,b)=>h+this.paidPrice(b.categoryKey,b.tierId,b.unitPrice,b.label)*(b.quantity??1),0),m=i.reduce((h,b)=>h+(b.quantity??1),0),g=e.filter(h=>!c.has(h.label)),w=g.reduce((h,b)=>h+this.paidPrice(b.categoryKey,b.tierId??null,b.price,b.label)*(b.quantity??1),0)+p+f,k=g.reduce((h,b)=>h+(b.quantity??1),0)+d+m,x=this.pendingSelectionCount(),v=this.lastTrayCount,C=this.lastTrayTotal;if(this.els.count.textContent=k?q("picker.ticketsCount",k):this.tf("picker.noSeatsSelected","No seats selected"),this.els.total.textContent=k?this.money(w):"",this.root?.setAttribute("data-has-selection",String(k>0)),this.root?.setAttribute("data-ba-active",String(this.bestAvailableConfirm||this.bestAvailableBusy||this.baReopen)),this.els.foot?.classList.toggle("empty",k===0),this.els.seatSummary&&(this.els.seatSummary.textContent=k?q("picker.seatsSelectedCount",k):""),this.syncCta(k,x),this.hold){let h=m||this.hold.seats?.length||0;this.els.holdTitle&&(this.els.holdTitle.textContent=y("picker.securedCount",{count:h})),this.els.holdCopy&&(this.holdCopyPending=x>0,this.els.holdCopy.textContent=x?y("picker.moreSelectedCount",{count:x}):Ne(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"))}k!==v&&this.animateOnce(this.els.count,"sl-value-pop",380),w!==C&&this.animateOnce(this.els.total,"sl-value-pop",380),v===0&&k>0&&(this.animateOnce(this.els.cta,"sl-ready",520),this.sideCollapsed&&this.root?.dataset.layout!=="narrow"&&this.setPanelCollapsed(!1)),this.renderPeek(k,w,x),this.lastTrayCount=k,this.lastTrayTotal=w,this.opts.onSelectionChange?.(e),this.emitSelectionValidity(k,e)}emitSelectionValidity(e,t){let i=this.controller.getSelectionValidity(e);i&&(i.seats=t,this.opts.onSelectionValidityChange?.(i),i.isValid?this.lastSelectionValidity!==!0&&this.opts.onSelectionValid?.(t):this.lastSelectionValidity!==!1&&this.opts.onSelectionInvalid?.(i),this.lastSelectionValidity=i.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=Mt({count:e,total:t,pendingCount:i,ctaPhase:this.ctaPhase,hasHold:!!this.hold,salesClosed:this.salesClosed,fromPrice:s.length?Math.min(...s):null,addMore:Pt({salesClosed:this.salesClosed,hasHold:!!this.hold,ctaPhase:this.ctaPhase,formOpen:this.baReopen||this.bestAvailableBusy||this.bestAvailableConfirm,room:this.maxTickets-this.totalTicketCount(),wanted:this.baQty}),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;let e=this.controller.getSelectionValidity(this.totalTicketCount());if(e&&!e.isValid){this.toast(Ve(e,(i,s)=>this.tf(i,s)),"warning");return}if(this.totalTicketCount()>this.maxTickets){this.toast(y("picker.removeTicketsUntilOrFewer",{count:this.maxTickets}),"warning");return}let t=this.committedSelection();if(this.hold&&!t.some(i=>!(this.hold.items??[]).some(s=>s.label===i.label))){let i=this.hold.seats??t;this.handedOff=!0,this.setCtaPhase("checkout"),this.checkoutHandoff(this.hold,i);return}this.holdingLabels=new Set(t.map(i=>i.label)),this.setCtaPhase("holding");try{let i=null,s=[...this.gaQty.entries()].filter(([,n])=>n>0),r=this.committedSelection();if(r.length){let n=await this.controller.hold(void 0,this.opts.holdTtlMs);i=n?{holdId:n.holdId,expiresAt:n.expiresAt,seats:n.seats,items:n.items}:null}for(let[n,a]of s){let l=await this.controller.holdGA(n,a,{ttlMs:this.opts.holdTtlMs});i=l?{holdId:l.holdId,expiresAt:l.expiresAt,seats:l.seats,items:l.items}:i}if(!i){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=i,this.handedOff=!0,this.startHoldTimer(i.expiresAt),this.flashHeldSeats(i),this.setCtaPhase("checkout"),this.emitHoldChange(),this.checkoutHandoff(i,i.seats??r)}catch(i){this.opts.onError?.(i);let s=i,r=(s.conflicts??[]).map(a=>a.label).filter(Boolean).slice(0,3);s.reason==="event_closed"&&this.setSalesClosed(!0);let n=s.reason==="event_closed"?this.tf("picker.seatSalesClosedForEvent","Seat sales have closed for this event."):s.reason==="companion_pair_required"?this.tf("picker.companionPairRequired","Select the adjacent wheelchair place with each companion ticket."):s.reason==="ticket_option_not_applicable"?this.tf("picker.ticketOptionNotApplicable","That ticket choice is not available for the selected seat."):r.length?r.length===1?y("picker.labelsNoLongerAvailable.one",{labels:r.join(", ")}):y("picker.labelsNoLongerAvailable.other",{labels:r.join(", ")}):this.tf("picker.seatsJustTaken","One or more seats were just taken. Please pick again.");this.toast(n,"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=Ne(this.holdExpiresAt)),t.classList.add("on"),t.classList.toggle("is-expiring",r>0&&r<=Ot),this.setExtendPrompt(r>0&&r<=Ot,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=vt(s?.reason),a=!!this.opts.onCheckoutUnavailable||!!this.opts.onCheckout;this.opts.onCheckoutUnavailable?.({reason:n,handoff:i}),this.opts.onCheckout?.(e,t,i),a||this.openCheckoutPanel({kind:"unavailable",reason:n,seatCount:i.lineItems.reduce((l,c)=>l+c.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 gt())}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 a=this.controller.lineItemDisplay(n);return{label:n.label,...a.displayLabel?{displayLabel:a.displayLabel}:{},...a.displayType?{displayType:a.displayType}:{},objectId:n.objectId,objectType:n.objectType,categoryKey:n.categoryKey,tierId:n.tierId,unitPrice:this.paidPrice(n.categoryKey,n.tierId,n.unitPrice,n.label),currency:n.currency??this.currency,quantity:n.quantity??1}}),s=i[0]?.currency??this.currency,r=i.reduce((n,a)=>n+a.unitPrice*a.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,g=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[g]),i=this.money(this.paidPrice(e.categoryKey,e.tierId??null,e.price,e.label)),s=e.objectType==="table"&&!!e.bookingMode,r=e.objectType==="booth",n=e.sectionLabel||e.rowLabel||e.seatNumber,a=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",c=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>`,u=ie(e.commercial),p=u?`<div class="sl-tip-cx"><span class="g" aria-hidden="true">\u25D0</span>${t(u)}</div>`:"",d=ue(e.wheelchairSpaceType),f=d?`<div class="sl-tip-cx"><span class="g" aria-hidden="true">\u267F</span>${t(d)}</div>`:"";this.tipEl.style.setProperty("--sl-cat",e.categoryColor),this.tipEl.innerHTML=a+`<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+p+c,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.controller.getSelectionValidity(this.totalTicketCount());return e&&(e.seats=this.committedSelection()),e}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),this.syncPrices(),Qi(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:a=>this.buyerAssetUrls.resolve(a)}:{},...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(a=>a.id===e);if(!t)return;let i=this.controller.tableSelection(e);if(this.committedSelection().some(a=>i?a.label===i.label:a.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,a=r?.sectionLabel,l=G(r),c=[a,l?y("picker.rowLabel",{label:l}):null,n].filter(Boolean).join(" \xB7 "),u=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.")},p=document.createElement("div");p.className="sl-view3d-unavailable",p.dataset.state=t,p.setAttribute("role","status"),p.setAttribute("aria-live","polite");let d=document.createElement("span");d.className="sl-view3d-unavailable-eyebrow",d.textContent=c||n;let f=document.createElement("strong");f.textContent=u.title;let m=document.createElement("div");m.className="sl-view3d-unavailable-copy",m.append(d,f);let g=document.createElement("button");g.type="button",g.setAttribute("aria-label",this.tf("picker.closeSeatStatus","Close seat status")),g.textContent="\xD7";let w=document.createElement("p");w.textContent=u.message,p.append(m,g,w),g.addEventListener("click",()=>p.remove()),s.appendChild(p),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,t.label):void 0,a=this.controller.getStatus(t.id),l=a==="held"?this.tf("picker.temporarilyHeld","Temporarily held"):a==="booked"?this.tf("picker.sold","Sold"):a==="not_for_sale"?this.tf("picker.notForSale","Not for sale"):this.tf("picker.available","Available"),c=t.viewUrl?Ht({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"),u=ie(t.commercial)||this.tf("picker.noAuthoredRestriction","No organizer-authored restriction"),p=i?.wheelchairSpaceType?`${ue(i.wheelchairSpaceType)} \xB7 metadata, not access certification`:this.tf("picker.noAccessibilityMetadata","No accessibility metadata supplied"),d=Rt(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:a==null||a==="free",viewSource:c,limited:u,accessibility:p,confidence:d}}openSeatConfidencePassport(e,t=null){let i=this.view3dEl;if(!i)return;this.closeSeatConfidencePassport(!1);let s=Rt(e.confidenceEvidence),r=e.confidenceEvidence,n=this.controller.seatDetails(e.id),a=v=>j(v),l=s.limitations.length?`<h4>Known limits</h4><ul>${s.limitations.map(v=>`<li>${a(v)}</li>`).join("")}</ul>`:"",c=s.modeledTarget?`<div><dt>Modeled target</dt><dd>${a(s.modeledTarget)}</dd></div>`:"",u=r?`<div><dt>Evidence ID</dt><dd>${a(r.evidenceId)}</dd></div><div><dt>Model version</dt><dd>${a(r.modelVersion)}</dd></div><div><dt>Event configuration</dt><dd>${a(r.eventConfigurationId??"Not configuration-specific")}</dd></div><div><dt>Approval</dt><dd>${a(r.approvedByRole??"No external approval supplied")}</dd></div>`+(r.validUntil?`<div><dt>Valid until</dt><dd>${a(r.validUntil.slice(0,10))}</dd></div>`:""):"<div><dt>Evidence ID</dt><dd>None supplied</dd></div>",p=ie(e.commercial)||this.tf("picker.noAuthoredRestriction","No organizer-authored restriction"),d=`<div><dt>View restriction</dt><dd>${a(p)}</dd></div>`+(e.commercial?.note?`<div><dt>Organizer note</dt><dd>${a(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">${a(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>${a(s.headline)}</strong><span>${a(s.coverage)} \xB7 ${a(s.freshness)}</span></div><dl><div><dt>Model status</dt><dd>${a(s.model)}</dd></div><div><dt>Reality evidence</dt><dd>${a(s.reality)}</dd></div><div><dt>Source</dt><dd>${a(s.provenance)}</dd></div>`+d+c+u+`</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(v=>v!==i)])].filter(v=>v instanceof HTMLElement),g=m.map(v=>({element:v,inert:v.inert,ariaHidden:v.getAttribute("aria-hidden")}));for(let v of m)v.inert=!0,v.setAttribute("aria-hidden","true");i.appendChild(f),i.classList.add("has-passport"),this.view3dPassportEl=f;let w=f.querySelector(".sl-view3d-passport"),k=()=>[...w.querySelectorAll('button:not(:disabled),[href],[tabindex]:not([tabindex="-1"])')],x=v=>{if(v.key==="Escape"){v.preventDefault(),v.stopPropagation(),v.stopImmediatePropagation(),this.closeSeatConfidencePassport();return}if(v.key!=="Tab")return;let C=k();if(!C.length)return;let h=C[0],b=C[C.length-1];v.shiftKey&&document.activeElement===h?(v.preventDefault(),b.focus()):!v.shiftKey&&document.activeElement===b&&(v.preventDefault(),h.focus())};window.addEventListener("keydown",x,!0),this.view3dPassportCleanup=()=>{window.removeEventListener("keydown",x,!0);for(let b of g)b.element.inert=b.inert,b.ariaHidden===null?b.element.removeAttribute("aria-hidden"):b.element.setAttribute("aria-hidden",b.ariaHidden);let v=t?.isConnected?t:this.confirmEl?.querySelector(".sl-confirm-confidence")??this.view3dCompareEl?.querySelector("[data-passport-seat]")??null,C=v?.closest(".sl-confirm,.sl-view3d-compare");C?.isConnected&&(C.inert=!1,C.removeAttribute("aria-hidden")),f.remove(),i.classList.remove("has-passport"),this.view3dPassportEl===f&&(this.view3dPassportEl=null);let h=v??this.view3dCompareEl?.querySelector("[data-passport-seat]")??this.confirmEl?.querySelector(".sl-confirm-confidence")??this.view3dCompareChip.mainButton();(t?.isConnected?t:h)?.focus()},f.addEventListener("click",v=>{let C=v.target instanceof HTMLElement?v.target:null;(C?.closest("[data-close]")||C?.classList.contains("sl-view3d-passport-scrim"))&&this.closeSeatConfidencePassport()}),requestAnimationFrame(()=>k()[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(d=>this.view3dComparisonSnapshot(d)).filter(d=>!!d);if(t.length<2){this.clearView3dComparison();return}let i=d=>j(d),s=document.createElement("div");s.className="sl-view3d-compare-shell";let r=t.map((d,f)=>`<article><span>Seat ${f===0?"A":"B"}</span><strong>${i(d.label)}</strong><small>Section ${i(d.section)} \xB7 Row ${i(d.row)}</small><dl><div><dt>Current price</dt><dd>${i(d.price)}</dd></div><div><dt>Ticket type</dt><dd>${i(d.category)}</dd></div><div><dt>Availability</dt><dd>${i(d.availability)}</dd></div><div><dt>View source</dt><dd>${i(d.viewSource)}</dd></div><div><dt>View restriction</dt><dd>${i(d.limited)}</dd></div><div><dt>Seat confidence</dt><dd>${i(d.confidence.headline)}</dd></div><div><dt>Reality check</dt><dd>${i(d.confidence.reality)}</dd></div><div><dt>Accessibility</dt><dd>${i(d.accessibility)}</dd></div></dl><div class="sl-view3d-compare-actions"><button type="button" data-passport-seat="${i(d.seat.id)}">Passport</button><button type="button" data-view-seat="${i(d.seat.id)}">View seat</button><button type="button" class="select" data-select-seat="${i(d.seat.id)}"${d.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,a=[...e.children].filter(d=>d instanceof HTMLElement),l=a.map(d=>({element:d,inert:d.inert,ariaHidden:d.getAttribute("aria-hidden")}));for(let d of a)d.inert=!0,d.setAttribute("aria-hidden","true");e.appendChild(s),e.classList.add("has-comparison"),this.view3dCompareEl=s;let c=s.querySelector(".sl-view3d-compare"),u=()=>[...c.querySelectorAll('button:not(:disabled),[href],[tabindex]:not([tabindex="-1"])')],p=d=>{if(d.key==="Escape"){d.preventDefault(),this.closeView3dComparison();return}if(d.key!=="Tab")return;let f=u();if(!f.length)return;let m=f[0],g=f[f.length-1];d.shiftKey&&document.activeElement===m?(d.preventDefault(),g.focus()):!d.shiftKey&&document.activeElement===g&&(d.preventDefault(),m.focus())};window.addEventListener("keydown",p),this.view3dCompareCleanup=()=>{window.removeEventListener("keydown",p);for(let d of l)d.element.inert=d.inert,d.ariaHidden===null?d.element.removeAttribute("aria-hidden"):d.element.setAttribute("aria-hidden",d.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(d=>d.addEventListener("click",()=>{let f=d.dataset.passportSeat,m=f?this.allSeats().find(g=>g.id===f):void 0;m&&this.openSeatConfidencePassport(m,d)})),s.querySelectorAll("[data-view-seat]").forEach(d=>d.addEventListener("click",()=>{let f=d.dataset.viewSeat;this.closeView3dComparison(!1),f&&this.view3dHandle?.flyToSeat(f)})),s.querySelectorAll("[data-select-seat]").forEach(d=>d.addEventListener("click",()=>{let f=d.dataset.selectSeat;f&&this.selectComparedSeat(f)})),requestAnimationFrame(()=>u()[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=u=>{this.view3dTargetSeatId=u;let p=!!u;i.classList.toggle("is-seat-focused",p);let d=p?this.tf("picker.backToVenue","Back to venue"):this.tf("picker.backToMap","Back to map");r&&(r.textContent=d),s.setAttribute("aria-label",d)};s.addEventListener("click",()=>{if(this.view3dTargetSeatId&&this.view3dHandle){this.view3dHandle.focusOverview();return}this.exit3d()}),i.appendChild(s);let a=document.createElement("button");a.type="button",a.className="sl-view3d-fs",a.textContent="\u26F6",a.setAttribute("aria-label",this.tf("picker.fullScreen","Full screen")),a.setAttribute("aria-pressed",String(!!document.fullscreenElement||this.fsFallback||this.framedFs)),a.addEventListener("click",()=>this.toggleFullscreen()),i.appendChild(a);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 c=++this.view3dGen;try{let u=Ue(t),p=await ft();if(c!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==i)return;let d=await p.prepareVenue3D({doc:t,seats:u});if(c!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==i)return;let f=p.mountVenue3D(i,{doc:t,seats:u,prepared:d},{portraitOverviewCrop:!0,arriveAtSeatEye:!0,seatViewActionLabel:m=>this.allSeats().find(g=>g.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 g=i.querySelector('select[data-locator="section"]'),w=m??"";!g||g.value===w||(g.value=w,g.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((g,w)=>{let k=()=>{this.seatViewFor3d(m).then(v=>{v?g(v):w(new Error("seat_view_unavailable"))})},x=globalThis.requestIdleCallback;typeof x=="function"?x(k,{timeout:1500}):setTimeout(k,50)}),onAnalytics:(m,g)=>this.emit3dAnalytics(m,g)});this.view3dHandle=f,l.remove(),this.pushAvailabilityTo3d(),this.syncSelectionTo3d(),Ct(i,f),e&&f.flyToSeat(e)}catch(u){if(c!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==i)return;this.opts.onError?.(u),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,a=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(a,"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 V({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 a=document.createElement("button");a.type="button",a.className="sl-access-act",a.textContent=t.action,a.addEventListener("click",()=>{this.refreshAccess()}),s.appendChild(a)}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 Zi(o,e={}){let t=e.origin??"";if(!t)try{t=new URL(o.src,window.location.href).origin}catch{t=""}let i=!1,s=null,r=null,n=null,a="",l=null,c=()=>{if(i)return;i=!0,s=o.getAttribute("style"),Object.assign(o.style,{position:"fixed",inset:"0",width:"100vw",height:"100vh",margin:"0",border:"0",zIndex:"2147483000",background:"#101625"});let d=document.documentElement;r=d.style.overflow,d.style.overflow="hidden",document.body&&(n=document.body.style.overflow,document.body.style.overflow="hidden"),l=f=>{f.key==="Escape"&&u()},window.addEventListener("keydown",l)},u=()=>{i&&(i=!1,s===null?o.removeAttribute("style"):o.setAttribute("style",s),s=null,a&&(o.style.height=a),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))},p=d=>{if(d.source!==o.contentWindow||t&&d.origin!==t||!d.data||typeof d.data!="object")return;let f=d.data;if(f.type==="seatlayer:height"){typeof f.px=="number"&&Number.isFinite(f.px)&&f.px>0&&(a=`${Math.round(f.px)}px`,i||(o.style.height=a));return}f.type==="seatlayer:fullscreen"&&(f.on===!0?c():f.on===!1&&u())};return window.addEventListener("message",p),()=>{window.removeEventListener("message",p),u()}}export{Y as ApiError,be as BuyerAccessContext,ne as BuyerAccessUnavailableError,V as BuyerRealtimeClient,Me as EmbeddedDesigner,st as SEATING_CHART_CALLBACK_PROPS,et as SEATING_CHART_HANDLE_METHODS,tt as SEATING_CHART_IDENTITY_PROPS,it as SEATING_CHART_VALUE_PROPS,qe as SeatPicker,Le as SeatingChart,Zi as attachPickerFrame,ti as bindSeatingChartHandle,ii as buildSeatingChartOptions,de as createBuyerAccessContext,re as createControllerSink,He as parseTicketOfferAvailability,Re as ticketOfferPrices};
1510
+ </div>`;let s={};return t.querySelectorAll("[data-ref]").forEach(n=>{s[n.dataset.ref]=n}),{root:t,mapHost:s.map,els:s}}function _t(r){let e=(i,t)=>{for(let s of r.querySelectorAll(`[${i}]`)){let n=s.getAttribute(i);if(!n)continue;let a=bs(n);a!==n&&t(s,a)}};e("data-sl-t",(i,t)=>{i.textContent=t}),e("data-sl-a",(i,t)=>{i.setAttribute("aria-label",t)}),e("data-sl-ti",(i,t)=>{i.setAttribute("title",t)})}import{browserPanoramaConstraints as vs,loadPanoramaImage as ys,planPanoramaDelivery as xs,schedulePanoramaUpgrade as ws}from"@seatlayer/core/view/panoramaDelivery";function qt(r){let{root:e,source:i,caption:t,real:s,closeLabel:n,dragHint:a,viewFromSeatLabel:o,real360Label:l,previewLabel:c,resolveAsset:h,onClose:p}=r,d=document.createElement("div");d.className="sl-view",d.setAttribute("role","dialog"),d.setAttribute("aria-label",o),d.innerHTML=`<div class="sl-view-head"><span class="sl-view-title">${o}</span><span class="sl-view-cap">${t}</span><button type="button" class="sl-view-x" aria-label="${n}"><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:c}</span><span class="sl-view-hint">${a}</span></div>`,e.appendChild(d);let f=d.querySelector(".sl-view-pano"),m=xs(i,vs()),g=new AbortController;f.style.backgroundImage=`url("${m.initialUrl}")`;let T=()=>{};m.upgradeUrl&&(T=ws(()=>{h(m.upgradeUrl).then(H=>!H||g.signal.aborted?null:ys(H,g.signal).then(()=>H)).then(H=>{!H||!d.isConnected||g.signal.aborted||(f.style.backgroundImage=`url("${H}")`)}).catch(()=>{})}));let k=70,x=35,v=1,E=f.clientHeight||1,u=f.clientWidth||1,b=-(E*(180/k)*2/2-u/2),y=0,C=()=>{let H=f.clientHeight||1,$e=H*(180/k)*v,ot=Math.max(0,$e-H),lt=Math.min(ot/2,x/180*$e);y=Math.min(lt,Math.max(-lt,y)),f.style.backgroundSize=`auto ${$e}px`,f.style.backgroundPosition=`${b}px ${y-ot/2}px`};C();let A=!1,O=0,L=0,I=H=>{A=!0,O=H.clientX,L=H.clientY,f.classList.add("drag"),f.setPointerCapture?.(H.pointerId)},X=H=>{A&&(b+=H.clientX-O,y+=H.clientY-L,O=H.clientX,L=H.clientY,C())},Z=H=>{A=!1,f.classList.remove("drag"),f.releasePointerCapture?.(H.pointerId)},nt=H=>{H.preventDefault(),v=Math.min(2.4,Math.max(1,v+(H.deltaY<0?.12:-.12))),C()};f.addEventListener("pointerdown",I),f.addEventListener("pointermove",X),f.addEventListener("pointerup",Z),f.addEventListener("pointercancel",Z),f.addEventListener("wheel",nt,{passive:!1});let Ie=d.querySelector(".sl-view-x");Ie.addEventListener("click",p);let at=H=>{H.key==="Escape"&&(H.stopPropagation(),p())};return d.addEventListener("keydown",at),Ie.focus(),{element:d,dispose(){T(),g.abort(),f.removeEventListener("pointerdown",I),f.removeEventListener("pointermove",X),f.removeEventListener("pointerup",Z),f.removeEventListener("pointercancel",Z),f.removeEventListener("wheel",nt),d.removeEventListener("keydown",at),Ie.removeEventListener("click",p)}}}import{seatConfidenceDisclosure as Ts}from"@seatlayer/core/core/seatConfidence";import{t as ks}from"@seatlayer/core";import{cdnAssetUrl as Ss}from"@seatlayer/core/core/cdnAsset";import{SEATLAYER_MODULE_URL as Sr}from"@seatlayer/core/core/cdnAsset";function S(r,e){let i=ks(r);return i===r?e:i}function Ut(r){if(typeof r=="string"){let e=document.querySelector(r);if(!e)throw new Error(`seatmap: container "${r}" not found`);return e}if(!(r instanceof HTMLElement))throw new Error("seatmap: container must be a CSS selector or an HTMLElement");return r}function F(r){return String(r??"").replace(/[&<>"']/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[e])}var de=null;function Gt(){if(de!==null)return de;try{if(typeof document>"u")return de=!1;de=!!document.createElement("canvas").getContext("webgl2")}catch{de=!1}return de}function Ye(r){return Ss(r)}async function Kt(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import(Ye("seatlayer-view3d.mjs")):import("@seatlayer/core/view3d")}async function Wt(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import(Ye("seatlayer-panorama.mjs")):import("@seatlayer/core")}async function Yt(){return typeof __SEATLAYER_CDN__<"u"&&__SEATLAYER_CDN__?import(Ye("seatlayer-checkout.mjs")):import("./hostedCheckout-ILVKHB3C.js")}function Qt(r){return r==="unavailable_for_event"||r==="payments_off_for_event"?r:"not_configured"}function Me(r,e,i){let t={month:"short",day:"numeric",hour:"numeric",minute:"2-digit"},s=new Date(r);if(e)try{return s.toLocaleString(i,{...t,timeZone:e})}catch{}return s.toLocaleString(i,t)}function N(r){return String(r??"").replace(/[&<>"]/g,e=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[e])}function pe(r){return r?.restrictedView?S("picker.restrictedView","Restricted view"):r?.obstructedView?S("picker.obstructedView","Obstructed view"):""}function Xt(r){if(!r)return"";let e=[];r.premium&&e.push(`<div class="sl-cx-premium"><span class="sl-cx-star" aria-hidden="true">\u2605</span>${S("picker.premiumSeat","Premium seat")}</div>`);let i=pe(r);return i?e.push(`<div class="sl-cx-warn"><span class="sl-cx-glyph" aria-hidden="true">\u25D0</span><span class="sl-cx-txt"><b>${i}</b>${r.note?`<span class="sl-cx-note">${N(r.note)}</span>`:""}</span></div>`):r.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">${N(r.note)}</span></span></div>`),e.length?`<div class="sl-cx">${e.join("")}</div>`:""}function Qe(r){let e=pe(r);if(!e)return"";let i=N(r?.note?r.note:e);return`<span class="sl-cx-mark" role="img" aria-label="${i}" title="${i}">\u25D0</span>`}function ke(r){return r==="no-seat"?S("picker.emptyWheelchairSpace","Empty wheelchair space"):r==="seat-present"?S("picker.accessiblePhysicalSeat","Accessible physical seat"):""}function Zt(r){let e=ke(r);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 Xe(r){let e=ke(r);return e?`<span class="sl-cx-mark" role="img" aria-label="${e}" title="${e}">\u267F</span>`:""}function Ze(r,e){if(!r)return"";let i=e?S("picker.viewFromThisSeat","View from this seat"):S("picker.seeItIn3d","See it in 3D");return`<button type="button" class="sl-confirm-3d" aria-label="${i}"><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>${i}</span></button>`}function Jt(r){if(!r)return"";let e=r.previous.label||r.previous.id,i=r.next.label||r.next.id;return`<span class="sl-seccard-nav" aria-label="${S("picker.browseSections","Browse sections")}"><button type="button" data-section-nav="${F(r.previous.id)}" aria-label="${S("picker.previousSection","Previous section")}: ${F(e)}" title="${F(e)}">\u2190</button><button type="button" data-section-nav="${F(r.next.id)}" aria-label="${S("picker.nextSection","Next section")}: ${F(i)}" title="${F(i)}">\u2192</button></span>`}function ei(r,e){if(!e)return"";let i=e,t=i.includes(r.id),s=t?i.length>1?S("picker.openComparison","Open comparison"):S("picker.savedForComparison","Saved for comparison"):i.length?S("picker.compareWithSaved","Compare with saved"):S("picker.saveToCompare","Save to compare");return`<button type="button" class="sl-confirm-compare"${t&&i.length===1?" disabled":""}><span aria-hidden="true">\u21C4</span><span>${N(s)}</span></button>`}function ti(r,e,i){if(!i)return"";let t=Ts(r.confidenceEvidence),s=t.modeledTarget??t.reality;return`<button type="button" class="sl-confirm-confidence" aria-label="Open seat confidence passport for ${N(r.displayLabel??r.label)}"><span><em>${N(e)}</em><strong>${N(t.headline)}</strong><small>${N(s)}</small></span><b>Passport</b></button>`}function te(r){let e=r?.rowLabel,i=r?.sectionLabel;if(!e||!i)return e;for(let t of["-"," ","\xB7","/","_"]){let s=`${i}${t}`;if(e.startsWith(s)&&e.length>s.length)return e.slice(s.length)}return e}function ii(r){let e=document.createElement("div");e.className="sl-floors on",e.setAttribute("role","group"),e.setAttribute("aria-label",r.tf("picker.chooseLevel","Choose level"));let i=[{id:"",name:r.tf("picker.allFloors","All floors")},...r.floors.map(n=>({id:n.id,name:n.name}))];for(let n of i){let a=document.createElement("button");a.type="button",a.dataset.floor=n.id,a.textContent=n.name,a.setAttribute("aria-pressed","false"),a.addEventListener("click",()=>r.onChoose(n.id)),e.appendChild(a)}let t=document.createElement("button");t.type="button",t.className="sl-floor-info",t.textContent="i";let s=r.tf("picker.floorHelp","All floors shows the complete venue. Choose one level to inspect and select its seats.");return t.setAttribute("aria-label",s),t.title=s,e.appendChild(t),e}function si(r,e,i){if(!r)return;let t=i?"":e;r.querySelectorAll("button[data-floor]").forEach(s=>{s.setAttribute("aria-pressed",String(s.dataset.floor===t))})}import{pointInPolygon as Es}from"@seatlayer/core";import{createMinimapTransform as Cs,minimapPointToWorld as As,minimapViewportPlan as Ls}from"@seatlayer/core/picker/minimapGeometry";function ri(r,e){let i=new Je(r);return i.build(e),i}var Je=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;this.userClosed=!1}build(e){if(!this.host.controller.getViewport())return;let t=document.createElement("button");t.type="button",t.className="sl-minimap-toggle",t.setAttribute("aria-label",S("picker.openVenueMap","Open venue overview map")),t.setAttribute("aria-expanded","false"),t.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(t),this.miniToggle=t;let s=document.createElement("div");s.className="sl-minimap",s.setAttribute("role","group");let n=document.createElement("div");n.className="sl-minimap-bar";let a=document.createElement("span");a.className="sl-minimap-label";let o=document.createElement("span");o.className="sl-minimap-key",o.setAttribute("aria-label",S("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",S("picker.closeVenueMap","Close venue overview map")),l.textContent="\xD7",n.append(a,o,l);let c=document.createElement("canvas");c.tabIndex=0,c.setAttribute("role","application"),c.setAttribute("aria-label",S("picker.venueMapInstructions","Venue overview map. Drag the viewport, click a section, or use arrow keys to pan.")),s.append(n,c),e.appendChild(s),this.miniWrap=s,this.miniLabel=a,this.miniCanvas=c;let h=document.createElement("canvas");this.miniBase=h,t.addEventListener("click",()=>{let p=this.host.root()?.dataset.minimapOpen==="true";this.userClosed=p,this.setMinimapOpen(!p)}),l.addEventListener("click",()=>{this.userClosed=!0,this.setMinimapOpen(!1)}),c.addEventListener("click",p=>{if(this.miniSuppressClick){this.miniSuppressClick=!1;return}this.minimapJump(p)}),c.addEventListener("pointerdown",p=>this.minimapPointerDown(p)),c.addEventListener("pointermove",p=>this.minimapPointerMove(p)),c.addEventListener("pointerup",p=>this.minimapPointerUp(p)),c.addEventListener("pointercancel",p=>this.minimapPointerUp(p)),c.addEventListener("keydown",p=>this.minimapKeydown(p)),this.layoutMinimap(),this.syncMinimapLabel(),this.drawMinimapStatic(),this.drawMinimapRect()}setAutoOpen(e){if(this.miniWrap){if(!e){this.userClosed=!1,this.host.root()?.dataset.minimapOpen==="true"&&this.setMinimapOpen(!1,!1);return}this.userClosed||this.host.root()?.dataset.minimapOpen==="true"||this.setMinimapOpen(!0,!1)}}setMinimapOpen(e,i=!0){this.host.root()?.setAttribute("data-minimap-open",String(e)),this.miniToggle?.setAttribute("aria-expanded",String(e)),i&&(e?this.miniCanvas?.focus():this.miniToggle?.focus())}layoutMinimap(){let e=this.miniCanvas,i=this.miniBase,t=this.host.controller.getViewport()?.bounds;if(!e||!i||!t||!(t.width>0&&t.height>0))return;let s=196,n=146,a=6,o=t.width/Math.max(1,t.height),l=s,c=Math.round(s/o);c>n&&(c=n,l=Math.round(n*o)),l=Math.max(64,l),c=Math.max(48,c);let h=Math.min(2,window.devicePixelRatio||1);e.width=Math.round(l*h),e.height=Math.round(c*h),e.style.width=`${l}px`,e.style.height=`${c}px`,i.width=e.width,i.height=e.height,this.miniTf=Cs(t,e.width,e.height,h,a)}syncMinimapLabel(){if(!this.miniLabel||!this.miniWrap)return;let e=this.host.controller.getFloors(),i=this.host.controller.isFloorOverview()?S("picker.allFloors","All floors"):e.find(h=>h.id===this.host.controller.getActiveFloorId())?.name??S("picker.venueOverview","Venue overview"),t=this.host.controller.getMinimapSnapshot().sections,n=t.find(h=>h.active)?.label??this.host.focusedSectionLabel(),a=n?`${i} \xB7 ${n}`:i;this.miniLabel.textContent=a;let o=t.filter(h=>h.state==="selected").length,l=t.filter(h=>h.state==="available").length,c=t.filter(h=>h.state==="inactive").length;this.miniWrap.setAttribute("aria-label",t.length?`${a}. ${o} selected, ${l} available, ${c} inactive sections.`:a),this.miniCanvas?.setAttribute("aria-label",t.length?`${a}. ${o} selected, ${l} available, ${c} inactive sections. ${S("picker.venueMapInstructions","The outlined region is the visible map area. Drag it, click a section, or use arrow keys to pan.")}`:`${a}. ${S("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,i=this.miniTf;if(!e||!i)return;let t=e.getContext("2d");if(!t)return;t.clearRect(0,0,e.width,e.height);let s=p=>p*i.scale+i.offX,n=p=>p*i.scale+i.offY,a=this.host.cssVar("--sl-line")||"rgba(139,147,167,.5)",o=this.host.cssVar("--sl-muted")||"#8b93a7",l=this.host.cssVar("--sl-accent")||"#6e7bff",c=this.host.cssVar("--sl-success")||"#22a06b",h=this.host.controller.getMinimapSnapshot();for(let p of h.sections)p.outline.length<3||(t.beginPath(),p.outline.forEach((d,f)=>f===0?t.moveTo(s(d.x),n(d.y)):t.lineTo(s(d.x),n(d.y))),t.closePath(),t.globalAlpha=p.state==="inactive"?.18:p.state==="selected"?.72:.34,t.fillStyle=p.state==="inactive"?o:p.state==="selected"?l:c,t.fill(),t.globalAlpha=.82,t.lineWidth=Math.max(1,i.dpr),t.strokeStyle=a,t.stroke(),p.active&&(t.globalAlpha=1,t.lineJoin="round",t.lineWidth=Math.max(4,i.dpr*3.5),t.strokeStyle=this.host.cssVar("--sl-surface")||"#fff",t.stroke(),t.lineWidth=Math.max(2,i.dpr*1.75),t.strokeStyle=l,t.stroke()));if(t.globalAlpha=1,!h.sections.length){let p=Math.max(1,i.dpr);for(let d of h.seats)t.globalAlpha=d.state==="inactive"?.22:.78,t.fillStyle=d.state==="inactive"?o:d.state==="selected"?l:c,t.beginPath(),t.arc(s(d.x),n(d.y),p,0,Math.PI*2),t.fill();t.globalAlpha=1}}drawMinimapRect(){let e=this.miniCanvas,i=this.miniBase,t=this.miniTf;if(!e||!i||!t)return;let s=e.getContext("2d");if(!s)return;s.clearRect(0,0,e.width,e.height),s.drawImage(i,0,0);let n=this.host.controller.getViewport();if(!n)return;let a=Ls(n.visible,t,e.width,e.height,Math.max(2,t.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(a.raw.x,a.raw.y,a.raw.width,a.raw.height),s.globalAlpha=.9,s.lineJoin="round",s.lineWidth=Math.max(4,t.dpr*3.25),s.strokeStyle=l,s.strokeRect(a.raw.x,a.raw.y,a.raw.width,a.raw.height),s.globalAlpha=1,s.lineWidth=Math.max(2,t.dpr*1.75),s.strokeStyle=o,s.strokeRect(a.raw.x,a.raw.y,a.raw.width,a.raw.height),a.clipped&&Object.values(a.clippedEdges).some(Boolean)&&(s.setLineDash([Math.max(3,t.dpr*3),Math.max(2,t.dpr*2)]),s.strokeRect(a.clipped.x,a.clipped.y,a.clipped.width,a.clipped.height)),s.restore()}minimapWorldPoint(e){let i=this.miniCanvas,t=this.miniTf;if(!i||!t)return null;let s=i.getBoundingClientRect(),n=(e.clientX-s.left)*(i.width/Math.max(1,s.width)),a=(e.clientY-s.top)*(i.height/Math.max(1,s.height));return{...As({x:n,y:a},t),px:n,py:a}}minimapPointerDown(e){let i=this.minimapWorldPoint(e),t=this.host.controller.getViewport()?.visible;!i||!t||!(i.x>=t.x&&i.x<=t.x+t.width&&i.y>=t.y&&i.y<=t.y+t.height)||(this.miniDrag={pointerId:e.pointerId,offsetX:i.x-(t.x+t.width/2),offsetY:i.y-(t.y+t.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 i=this.miniDrag;if(!i||i.pointerId!==e.pointerId)return;let t=this.minimapWorldPoint(e);t&&(!i.moved&&Math.hypot(e.clientX-i.startX,e.clientY-i.startY)>2&&(i.moved=!0,this.host.controller.clearSectionFocus()),this.host.controller.panToWorld({x:t.x-i.offsetX,y:t.y-i.offsetY}),e.preventDefault())}minimapPointerUp(e){let i=this.miniDrag;!i||i.pointerId!==e.pointerId||(this.miniSuppressClick=i.moved,this.miniDrag=null,this.miniCanvas?.classList.remove("sl-dragging"),this.miniCanvas?.hasPointerCapture(e.pointerId)&&this.miniCanvas.releasePointerCapture(e.pointerId))}minimapKeydown(e){let i=this.host.controller.getViewport()?.visible;if(!i)return;if(e.key==="Home"){this.host.controller.overview(),e.preventDefault();return}let t=e.key==="ArrowLeft"?-i.width*.2:e.key==="ArrowRight"?i.width*.2:0,s=e.key==="ArrowUp"?-i.height*.2:e.key==="ArrowDown"?i.height*.2:0;!t&&!s||(this.host.controller.clearSectionFocus(),this.host.controller.panToWorld({x:i.x+i.width/2+t,y:i.y+i.height/2+s}),e.preventDefault())}minimapJump(e){let i=this.minimapWorldPoint(e);if(i){for(let t of this.host.controller.getMinimapSnapshot().sections)if(!(t.state==="inactive"||t.outline.length<3)&&Es(i,t.outline)){this.host.controller.focusSection(t.id);return}this.host.controller.clearSectionFocus(),this.host.controller.panToWorld(i)}}};import{t as et}from"@seatlayer/core";var Ps=12;function ni(r,e){let i=e.floors(),t=new Set(i.map(g=>g.label.trim().toLocaleLowerCase())),s=e.zones().filter(g=>g.seatCount>0&&!t.has(g.label.trim().toLocaleLowerCase())),n=e.sections().filter(g=>g.seatCount>0&&!t.has(g.label.trim().toLocaleLowerCase())),a=s.length>1?[]:n,o=i.length>1,l=s.length>1,c=a.length>1;if(!o&&!l&&!c)return;let h=document.createElement("div");h.className="sl-view3d-nav";let p=document.createElement("button");p.type="button",p.className="sl-view3d-nav-toggle",p.setAttribute("aria-expanded","false");let d=g=>{h.classList.toggle("is-open",g),p.setAttribute("aria-expanded",String(g)),p.textContent=g?S("picker.closeVenueNav","Close"):o&&(l||c)?S("picker.levelsAndAreas","Levels & areas"):o?S("picker.levels","Levels"):S("picker.areas","Areas")};p.addEventListener("click",()=>d(!h.classList.contains("is-open"))),h.addEventListener("keydown",g=>{g.key!=="Escape"||!h.classList.contains("is-open")||(g.preventDefault(),g.stopPropagation(),d(!1),p.focus())}),d(!1),h.appendChild(p);let f=g=>{},m=g=>{};if(o){let g=document.createElement("div");g.setAttribute("role","group"),g.setAttribute("aria-label",S("picker.levels","Levels"));let T=[];m=v=>{T.forEach(E=>{E.setAttribute("aria-pressed",String((E.dataset.floor===""?null:Number(E.dataset.floor))===v))})};let k=v=>{e.focusFloor(v)&&(m(v),f(v))},x=(v,E)=>{let u=document.createElement("button");u.type="button",u.textContent=v,u.dataset.floor=E===null?"":String(E),u.setAttribute("aria-pressed",String(E===null)),u.addEventListener("click",()=>{k(E),d(!1)}),T.push(u),g.appendChild(u)};x(S("picker.allLevels","All levels"),null);for(let v of i)x(v.label||et("picker.levelNumber",{number:v.index+1}),v.index);h.appendChild(g)}if(l||c){let g=document.createElement("div");g.setAttribute("role","group"),g.setAttribute("aria-label",S("picker.areas","Areas"));let T=l?s.map(x=>({id:x.id,label:x.label||x.id,go:()=>{e.focusZone(x.id)}})):a.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)}})),k=x=>{let v=l||x===null?T:T.filter(E=>E.floorIndex===void 0||E.floorIndex===x);if(g.replaceChildren(),!v.length){g.remove();return}if(g.isConnected||h.appendChild(g),!l&&v.length>Ps){let E=document.createElement("select");E.setAttribute("aria-label",S("picker.jumpToSection","Jump to section"));let u=document.createElement("option");u.value="",u.textContent=S("picker.jumpToSection","Jump to section"),E.appendChild(u);for(let b of v){let y=document.createElement("option");y.value=b.id,y.textContent=b.label,E.appendChild(y)}E.addEventListener("change",()=>{v.find(b=>b.id===E.value)?.go()}),g.appendChild(E);return}for(let E of v){let u=document.createElement("button");u.type="button",u.textContent=E.label,u.addEventListener("click",()=>{E.go(),d(!1)}),g.appendChild(u)}};f=k,k(null)}r.appendChild(h)}var He=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 i=this.chip;if(!i){i=document.createElement("div"),i.className="sl-view3d-compare-saved",i.setAttribute("role","group"),i.setAttribute("aria-label",S("picker.savedSeatComparison","Saved seat comparison"));let n=document.createElement("button");n.type="button",n.className="main",n.addEventListener("click",()=>{this.host.savedSeatIds().length>1?this.host.openComparison():this.host.toast(S("picker.chooseAnotherToCompare","Choose another seat to compare."),"neutral")});let a=document.createElement("button");a.type="button",a.className="clear",a.textContent="\xD7",a.setAttribute("aria-label",S("picker.clearSavedSeatComparison","Clear saved seat comparison")),a.addEventListener("click",()=>this.host.clearComparison()),i.append(n,a),e.appendChild(i),this.chip=i}let t=this.host.savedSeatIds().length,s=i.querySelector(".main");s&&(s.textContent=t>1?et("picker.compareCount",{count:t}):S("picker.oneSeatSaved","1 seat saved"),s.setAttribute("aria-label",t>1?et("picker.openComparisonOfSeats",{count:t}):S("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 Re}from"@seatlayer/core";function ai(r){return Array.isArray(r)?r.reduce((e,i)=>i.type==="minimumSelectedPlaces"?Math.max(e,i.minimum):e,0):0}function tt(r,e,i=!1){let t=r.violations[0];return t==="numberOfPlacesToSelect"?r.remaining>0?Re("picker.selectExactMore",{count:r.remaining}):Re("picker.selectExactCount",{count:r.required}):t==="minimumSelectedPlaces"?Re("picker.selectMinimumMore",{count:r.remaining}):i?e("picker.adjustSeatSelection","Adjust seat selection"):t==="consecutiveSeats"?e("picker.selectSeatsTogether","Choose seats together in the same row and ticket category."):Re("picker.orphanHint")}import{t as Oe,tCount as Ms}from"@seatlayer/core";function Se(r){let e=Math.max(0,r),i=Math.floor(e/6e4),t=String(Math.floor(e%6e4/1e3)).padStart(2,"0");return`${i}:${t}`}function oi({d:r,area:e,label:i,objectType:t,quantity:s=1,identity:n}){let a=h=>String(h??"\u2014").replace(/[&<>"]/g,p=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[p]),o=t==="ga"?"ga":r?.objectType??t,l=n?.displayType?.trim()||r?.displayType?.trim()||e?.displayType?.trim()||(o==="table"?S("picker.table","Table"):o==="booth"?S("picker.booth","Booth"):o==="ga"?S("picker.generalAdmission","General admission"):S("picker.row","Row")),c=n?.rowLabel??n?.displayLabel??r?.rowLabel??r?.displayLabel??e?.displayLabel??e?.label??i;return o==="table"&&n?.bookingMode?`<div class="sl-chip-id"><span class="fld sec"><span class="sl-chip-eb">${a(l)}</span><span class="val">${a(c)}</span></span><span class="fld mid"><span class="sl-chip-eb">${S("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">${a(l)}</span><span class="val">${a(c)}</span></span>`+(s>1?`<span class="fld mid"><span class="sl-chip-eb">${S("picker.tickets","Tickets")}</span><span class="val">${s}</span></span>`:"")+"</div>":o==="booth"?'<div class="sl-chip-id">'+(r?.sectionLabel?`<span class="fld sec"><span class="sl-chip-eb">${S("picker.section","Section")}</span><span class="val">${a(r.sectionLabel)}</span></span>`:"")+`<span class="fld mid"><span class="sl-chip-eb">${a(l)}</span><span class="val">${a(c)}</span></span></div>`:!r?.sectionLabel&&!r?.rowLabel&&!r?.seatNumber?`<div class="sl-chip-id"><span class="fld sec"><span class="sl-chip-eb">${S("picker.seat","Seat")}</span><span class="val">${a(c)}</span></span></div>`:'<div class="sl-chip-id">'+(r.sectionLabel?`<span class="fld sec"><span class="sl-chip-eb">${S("picker.section","Section")}</span><span class="val">${a(r.sectionLabel)}</span></span>`:"")+(r.rowLabel?`<span class="fld mid"><span class="sl-chip-eb">${a(l)}</span><span class="val">${a(te(r))}</span></span>`:"")+(r.seatNumber?`<span class="fld mid"><span class="sl-chip-eb">${S("picker.seat","Seat")}</span><span class="val">${a(r.seatNumber)}</span></span>`:"")+"</div>"}function li(r,e){return`<div class="sl-chip-rail"><button type="button" class="rm" 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>`+(e?`<button type="button" class="view" data-view-label="${e}" aria-label="${Oe("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 ci(r){return r.salesClosed||r.hasHold||r.ctaPhase!=="idle"||r.formOpen||r.room<=0?null:Math.max(1,Math.min(r.wanted,r.room))}function di({count:r,total:e,pendingCount:i,ctaPhase:t,hasHold:s,salesClosed:n,fromPrice:a,addMore:o,holdTime:l,money:c}){if(r&&t==="holding")return`<span>${S("picker.securingSeats","Securing your seats\u2026")}</span>`;if(r&&t==="checkout")return`<span>${Oe("picker.peekSecured",{count:r,total:c(e)})}</span>`;if(r){let h=!!s;return`<span>${Ms("picker.peekTicketsTotal",r,{total:c(e)})}</span>`+(o?`<button type="button" class="go ghost sl-sheet-go" data-act="best" aria-label="${S("picker.findTogetherInstead","Find seats together instead")}">\u2726 +${o}</button>`:"")+`<button type="button" class="go sl-sheet-go" data-act="${h?"checkout":"open"}">${s?i?S("picker.secureMore","Secure more"):S("picker.continue","Continue"):S("picker.review","Review")}`+(s&&l?`<span class="sl-peek-time" aria-hidden="true">${l}</span>`:"")+"</button>"}else return n?`<span>${S("picker.salesClosedPill","Sales are closed")}</span>`:(a!=null?`<span>${Oe("picker.peekFromPrice",{price:c(a)})}</span>`:`<span>${S("picker.pickYourSeats","Pick your seats")}</span>`)+`<button type="button" class="go sl-sheet-go" data-act="open">${S("picker.bestSeatsStar","\u2726 Best seats")}</button>`}function it(r,e=Date.now()){return Oe("picker.holdReassurance",{time:Se(r-e)})}var Fs="https://api.seatlayer.io",js=10,gi=6e4,bi=6e4,vi=new Set;function Vs(r){let e=vi.has(r);return vi.add(r),e}var yi="seatmap.a11y.cb";function Ns(){try{if(typeof window>"u")return null;let r=window.localStorage.getItem(yi);return r==null?null:r==="1"}catch{return null}}function _s(r){try{window.localStorage.setItem(yi,r?"1":"0")}catch{}}var rt=class r{constructor(e){this.realtime=null;this.accessEl=null;this.lastSelectionValidity=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.channelByObject=new Map;this.pricesByChannel=new Map;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.gaPromptEl=null;this.gaPromptReturnFocus=null;this.gaAreasExpanded=!1;this.lastMapPoint=null;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 He({overlay:()=>this.view3dEl,savedSeatIds:()=>this.view3dCompareSeatIds,openComparison:()=>this.openView3dComparison(),clearComparison:()=>this.clearView3dComparison(),toast:(e,i)=>this.toast(e,i)});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.langSel=null;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.railEdgesBound=!1;this.fsFallback=!1;this.fsChangeHandler=null;this.fsEscHandler=null;this.eventDetailsHidden=!1;this.holdCopyPending=!1;this.sideCollapsed=!1;this.sideToggleEl=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??Fs).replace(/\/+$/,""),this.access=e.transport?null:ve(e,{onExpired:n=>{this.opts.onAccessExpired?.(n),n.refreshed||this.showAccessPanel({reason:"no_token",retryable:!1})},onUnavailable:n=>{this.opts.onAccessUnavailable?.(n),this.showAccessPanel(n)}}),this.pubApi=e.transport?null:new re(this.apiBase,{access:this.access??void 0,onObjectUnavailable:n=>this.opts.onSelectedObjectUnavailable?.(n)}),this.api=e.transport??this.pubApi,this.buyerAssetUrls=new Le(e.event,this.api.asset?(n,a)=>this.api.asset(n,a):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 i=e.numberOfPlacesToSelect;if(i!=null&&(!Number.isInteger(i)||i<1))throw new Error("seatmap: `numberOfPlacesToSelect` must be a positive integer");this.exactTickets=i??null;let t=ai(e.selectionValidators);if(this.exactTickets!=null&&t>this.exactTickets)throw new Error("seatmap: `minimumSelectedPlaces.minimum` cannot exceed `numberOfPlacesToSelect`");let s=Math.max(1,Math.floor(e.maxSelection??this.exactTickets??Math.max(js,t)));if(this.exactTickets!=null&&s<this.exactTickets)throw new Error("seatmap: `maxSelection` cannot be lower than `numberOfPlacesToSelect`");if(e.maxSelection!=null&&s<t)throw new Error("seatmap: `maxSelection` cannot be lower than `minimumSelectedPlaces.minimum`");this.maxTickets=this.exactTickets??s,this.cbSafe=Ns()??!!e.colorblindSafe,this.controller=this.wireController(e)}chartHasStage(){let e=this.controller.doc;if(!e)return!1;let i=e.floors?.length?e.floors.map(t=>t.objects??[]):[e.objects??[]];for(let t of i)for(let s of t)if(s.type==="shape"&&(s.role==="stage"||s.stageKind))return!0;return!1}confirmThumbHtml(e){let i=this.controller.doc;if(!i)return"";let t=e.viewUrl??"",s=this.chartHasStage();if(!t&&!s)return"";let n=null;if(!t)try{n=Is(e,e.focalPoint??i.focalPoint).distanceM??null}catch{return""}let a=s&&n!=null?`<div class="sl-confirm-sight">${w("picker.sightline",{m:n})}</div>`:"";return(t?`<button type="button" class="sl-confirm-view sl-confirm-thumbwrap" aria-label="${w("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="${w("picker.viewFromSeat",{label:e.label})}"><span aria-hidden="true">\u{1F52D}</span><span>${this.tf("picker.viewFromHere","View from here")}</span></button>`)+a}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 i=e.clientWidth||(typeof window<"u"?window.innerWidth:0)||0;if(i<=0)return 0;let t=i<640?1.2:.62;return Math.max(420,Math.round(i*t))}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,i=this.eventDetailsHidden&&!e;this.root?.setAttribute("data-event-details-hidden",String(i)),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 t=this.els.zfs?.querySelector(".sl-zfs-lbl");t&&(t.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=i=>{i.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=i=>{i.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){Ke();let i=document.activeElement instanceof HTMLElement?document.activeElement:null,t=document.createElement("div");t.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",S("picker.seatSelection","Seat selection")),s.tabIndex=-1,t.appendChild(s),document.body.appendChild(t);let n=document.body.style.overflow;document.body.style.overflow="hidden";let a=new r({...e,container:s});a.modalScrim=t,a.prevFocus=i;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(g=>g.isConnected&&!g.closest('[hidden], [aria-hidden="true"], [inert]'));return m[m.length-1]??s},c=(m,g)=>{let T=m;for(;T;){let k=window.getComputedStyle(T);if(T.hidden||T.getAttribute("aria-hidden")==="true"||T.hasAttribute("inert")||k.display==="none"||k.visibility==="hidden"||k.visibility==="collapse")return!0;if(T===g)return!1;T=T.parentElement}return!0},h=m=>[...m.querySelectorAll(o)].filter(g=>g.tabIndex>=0&&!g.matches(":disabled")&&!c(g,m)),p=(m,g)=>{let T=h(m),k=g?T[T.length-1]:T[0];k?k.focus({preventScroll:!0}):(m.hasAttribute("tabindex")||(m.tabIndex=-1),m.focus({preventScroll:!0}))},d=!1,f=()=>{if(d)return;d=!0,document.body.style.overflow=n,a.escHandler&&document.removeEventListener("keydown",a.escHandler),t.remove(),a.modalScrim=null;let m=a.prevFocus;a.prevFocus=null,m?.isConnected&&m.focus({preventScroll:!0});let g=()=>{a.destroy(),e.onClose?.()};a.hold&&!a.handedOff?a.release().finally(g):g()};return a.closeModal=f,t.addEventListener("mousedown",m=>{m.target===t&&f()}),a.escHandler=m=>{if(m.key==="Tab"){if(m.defaultPrevented)return;let g=l(),T=h(g),k=T[0],x=T[T.length-1],v=document.activeElement;!k||!x?(m.preventDefault(),p(g,m.shiftKey)):v===g||!v||!g.contains(v)?(m.preventDefault(),(m.shiftKey?x:k).focus({preventScroll:!0})):m.shiftKey&&v===k?(m.preventDefault(),x.focus({preventScroll:!0})):!m.shiftKey&&v===x&&(m.preventDefault(),k.focus({preventScroll:!0}));return}m.key==="Escape"&&(a.tableDialog?(m.preventDefault(),a.cancelTableDialog()):a.confirmSeat?(m.preventDefault(),a.cancelConfirm()):a.bestAvailableConfirm?(m.preventDefault(),a.bestAvailableConfirm=!1,a.syncTray()):(m.preventDefault(),f()))},document.addEventListener("keydown",a.escHandler),await a.render(),a.els.close?.classList.add("on"),a.els.close?.addEventListener("click",f),p(l(),!1),a}wireController(e){return new Hs({transport:this.api,eventKey:e.event,maxSelection:this.maxTickets,selectedObjects:e.selectedObjects,selectableObjects:e.selectableObjects,numberOfPlacesToSelect:e.numberOfPlacesToSelect,selectionValidators:e.selectionValidators,currency:e.currency,flashOnLiveChange:!0,colorblindSafe:this.cbSafe,mapTheme:e.theme?.map??null,onGAClick:i=>{let t=this.controller.getGAAreas().find(s=>s.id===i);t&&De(this,t,this.lastMapPoint)},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(w("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:i=>{if(this.salesClosed){this.controller.deselect([i.id]),this.toast(this.tf("picker.salesClosedToast","Sales are closed for this event."),"warning");return}this.controller.tableSelection(i.id)||(this.flashPickedSeat(i.id),this.opts.confirmSelection&&this.showConfirm(i))},onTableSelectionRequest:i=>{if(this.salesClosed){this.controller.deselect(i.physicalSeatIds),this.toast(this.tf("picker.salesClosedToast","Sales are closed for this event."),"warning");return}this.showTableDialog(i,!1)},onDeselect:i=>{this.confirmSeat?.id===i.id&&this.dismissConfirm(),this.tableDialog?.physicalSeatIds.includes(i.id)&&this.dismissTableDialog()},onSelectionLimit:()=>{this.toast(w("picker.maxTicketsForOrder",{count:this.maxTickets}),"warning"),this.opts.onSelectionLimit?.(this.maxTickets)},onViewChange:()=>{this.reanchorConfirm(),this.syncRung(),this.syncProjection(),this.minimap?.drawMinimapRect(),this.sectionCardOnView()},onSectionFocus:i=>this.showSectionCard(i),onDeckTap:()=>{this.showSectionCard(null),this.syncFloors(),this.syncRung(),this.minimap?.refreshMinimap()},onFocusSeat:i=>this.announceSeat(i),onSeatHover:i=>this.updateTooltip(i),onHint:i=>{i&&this.toast(i)},onSalesClosed:()=>this.setSalesClosed(!0),onError:i=>this.opts.onError?.(i)})}async render(){if(this.rendered)return this;let e=performance.now(),i={},t=y=>Math.round((performance.now()-y)*100)/100;this.rendered=!0,Ke();let s=performance.now();await hi(this.opts.locale),i.loadLocale=t(s),this.opts.messages&&ui(this.opts.messages),this.checkoutMode==="hosted"&&(this.paymentOptions=this.pubApi.paymentOptions(this.opts.event));let n=performance.now(),a=Ut(this.opts.container),{root:o,els:l,mapHost:c}=Nt(a,(y,C)=>this.tf(y,C),this.opts.theme);this.root=o,this.els=l,this.mapHost=c,o.addEventListener("keydown",y=>{y.key==="Escape"&&(this.tableDialog?(y.preventDefault(),y.stopPropagation(),this.cancelTableDialog()):this.confirmSeat?(y.preventDefault(),y.stopPropagation(),this.cancelConfirm()):this.bestAvailableConfirm&&(y.preventDefault(),y.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),i.mountBuyerShell=t(n);let p=await this.loadChart(h,i,t);if(!p)return this;this.els.boot.remove();let d=performance.now();if(this.startRealtime(),this.salesClosed=!!p.salesClosed||!!this.opts.readOnly,o.dataset.eventMode=p.mode==="test"?"test":"live",!this.opts.locale&&p.locale&&await this.setLocale(p.locale),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),p.mode==="test"){let y=document.createElement("div");y.className="sl-testbadge",y.textContent=w("picker.testMode"),y.setAttribute("aria-label",w("picker.testMode")),this.regions["top-left"].appendChild(y)}let f=this.controller.doc?.theme,m=we(f,this.opts.theme);Object.entries(m).forEach(([y,C])=>o.style.setProperty(y,C)),this.applyMapChromeTokens(),this.currency=p.currency??this.opts.currency??"USD",this.eventTimezone=p.timezone??null;let g=this.opts.theme?.logoUrl??f?.logoUrl??p.posterUrl??null;g?this.els.logo.innerHTML=`<img src="${g}" alt="">`:this.els.logo.textContent=(this.opts.theme?.brandName??f?.brandName??p.eventName??"?").slice(0,1).toUpperCase(),this.els.name.textContent=p.eventName??"";let T=p.startsAt?Me(p.startsAt,p.timezone??null,this.opts.locale):"";this.eventWhenText=T||null,this.els.meta.textContent=[p.venue,T].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 k=new Set,x=!1;if(this.controller.doc)for(let y of st(this.controller.doc)){for(let C of y.accessibility??[])k.add(C);y.accessible&&!y.accessibility?.length&&k.add("wheelchair"),(y.commercial?.restrictedView||y.commercial?.obstructedView)&&(x=!0)}let v=()=>{this.rungsEl&&this.controller.getRung()!=="seats"&&(this.controller.setRung("seats"),this.collapseSectionCard(),this.syncRung())};if(k.size||x){let y=document.createElement("div");if(y.className="sl-chips",this.regions["top-left"].appendChild(y),this.a11yChipsEl=y,k.size){let C=(L,I)=>`<button type="button" class="sl-chip-f${L==="all"?" on":""}" data-a11y="1" data-f="${L}">${I}</button>`;y.insertAdjacentHTML("beforeend",C("all",this.tf("picker.allSeats","All seats"))+Rs.filter(({key:L})=>k.has(L)).map(({key:L,short:I,icon:X})=>C(L,`${X} ${I}`)).join(""));let A=new Set,O=()=>{y.querySelectorAll("button[data-a11y]").forEach(I=>{let X=I.dataset.f,Z=X==="all"?A.size===0:A.has(X);I.classList.toggle("on",Z),I.setAttribute("aria-pressed",String(Z))});let L=A.size?[...A]:null;this.controller.setAccessibilityFilter(L),L&&v()};y.querySelectorAll("button[data-a11y]").forEach(L=>{L.addEventListener("click",()=>{let I=L.dataset.f;I==="all"?A.clear():A.has(I)?A.delete(I):A.add(I),O()})})}if(x){let C=document.createElement("button");C.type="button",C.className="sl-chip-f",C.setAttribute("aria-pressed","false"),C.innerHTML=`\u25D0 ${this.tf("picker.hideLimitedView","Hide limited-view seats")}`,y.appendChild(C),C.addEventListener("click",()=>{let A=!this.limitedViewFilter;this.limitedViewFilter=A,C.classList.toggle("on",A),C.setAttribute("aria-pressed",String(A)),this.controller.setCommercialLimitedFilter(A),this.pushAvailabilityTo3d(),A&&v()})}}let E=document.createElement("button");E.type="button",E.className="sl-cbbtn",this.cbEl=E,E.setAttribute("aria-label",this.tf("picker.toggleColorblindColors","Toggle colorblind-friendly colors")),E.setAttribute("aria-pressed",String(this.cbSafe)),E.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(E),E.addEventListener("click",()=>{this.setColorblindSafe(!this.cbSafe)}),this.buildLanguageSwitcher(E.parentElement),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(),i.buildBuyerControls=t(d);let u=performance.now();if(await this.restoreRememberedHold(),i.restoreHold=t(u),this.destroyed)return this;this.salesClosed&&this.applySalesClosed(),this.syncPrices(),this.syncTray(),this.resumeHostedOrder();let b=this.controller.doc;return this.emitAnalytics("chart_rendered",{renderingTimeMillis:t(e),performanceProfile:i,seatCount:this.allSeats().length,objectCount:b?.objects.length??0,sectionCount:b?.objects.filter(y=>y.type==="section").length??0,view:this.buyerView,eventKey:this.opts.event,chartName:b?.name,floorCount:this.controller.getFloors().length,transport:this.opts.transport?"custom":"pubapi",load:Vs(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 i=this.els.sheetHead;if(i){let s=this.els.sheetToggle,n=c=>{e.dataset.sheet=c?"open":"peek",s?.setAttribute("aria-expanded",String(c)),s?.setAttribute("aria-label",c?this.tf("picker.collapseTicketPanel","Collapse ticket panel"):this.tf("picker.openTicketPanel","Open ticket panel"))};n(e.dataset.sheet==="open"),s?.addEventListener("click",c=>{c.stopPropagation(),n(e.dataset.sheet!=="open")}),this.els.peek?.addEventListener("click",c=>{let h=c.target.closest(".sl-sheet-go");h&&(c.stopPropagation(),h.dataset.act==="checkout"?this.handleCta():h.dataset.act==="best"?(this.baReopen=!0,this.baQty=Math.max(1,Math.min(this.baQty,this.maxTickets-this.totalTicketCount())),this.syncTray(),n(!0),this.els.tray?.querySelector(".sl-ba-go")?.focus()):n(!0))});let a=0,o=!1,l=!1;i.addEventListener("pointerdown",c=>{if(c.target.closest?.(".sl-seccard,.sl-sheet-toggle,.sl-sheet-go")){l=!1;return}l=!0,o=!1,a=c.clientY,i.setPointerCapture?.(c.pointerId)}),i.addEventListener("pointermove",c=>{if(!l||o)return;let h=c.clientY-a;h<-18?(n(!0),o=!0):h>18&&(n(!1),o=!0)}),i.addEventListener("pointerup",c=>{l&&!o&&Math.abs(c.clientY-a)<6&&n(e.dataset.sheet!=="open"),l=!1,i.releasePointerCapture?.(c.pointerId)})}let t=()=>{if(this.root?.dataset.layout!=="narrow")return;let s=this.root.getAttribute("data-prices-open")==="true";if(this.root.setAttribute("data-prices-open",String(!s)),this.els.pricesSec?.setAttribute("aria-expanded",String(!s)),!s&&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",s=>{s.target.closest("select,button")||t()}),this.els.pricesSec?.addEventListener("keydown",s=>{s.key!=="Enter"&&s.key!==" "||s.target.closest("select,button")||(s.preventDefault(),t())}),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("pointerdown",s=>{this.lastMapPoint={x:s.clientX,y:s.clientY}},!0),this.els.map.addEventListener("mousemove",s=>{let n=this.els.map.getBoundingClientRect();this.tipPos={x:s.clientX-n.left,y:s.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 i=()=>{let t=e.clientWidth;if(t<=0)return;let s=e.clientHeight,n=t!==this.pickerLayoutSize.width||s!==this.pickerLayoutSize.height;this.pickerLayoutSize={width:t,height:s},this.reportFramedHeight();let a=t<640?"narrow":"wide",o=s<560?"compact":"comfortable";(e.dataset.layout!==a||e.dataset.density!==o)&&(e.dataset.layout=a,e.dataset.density=o,a==="narrow"&&!e.dataset.sheet&&(e.dataset.sheet="peek"),this.dockLayoutChrome()),n&&this.minimap?.refreshMinimap()};this.ro=new ResizeObserver(i),this.ro.observe(e),i(),requestAnimationFrame(i)}async loadChart(e,i,t){let s=performance.now(),n=await this.controller.render(e);return i.loadChartAndStatuses=t(s),this.destroyed?null:n?(Object.assign(i,n.performanceProfile),n):(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 a=this.opts.container,o=this.opts;this.destroy(),new r({...o,container:a}).render()}),null)}resumeHostedOrder(){if(this.checkoutMode!=="hosted"||typeof location>"u")return;let e=new URLSearchParams(location.search),i=e.get("order");if(!i)return;let t=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{}t==="success"&&this.openCheckoutPanel({kind:"resume",orderId:i})}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 i=this.sideCollapsed;e.setAttribute("aria-expanded",String(!i)),e.setAttribute("aria-label",i?this.tf("picker.showTicketPanel","Show the ticket panel"):this.tf("picker.hideTicketPanel","Hide the ticket panel")),e.title=i?this.tf("picker.showTicketPanel","Show the ticket panel"):this.tf("picker.hideTicketPanel","Hide the ticket panel"),e.innerHTML=i?`<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 i=this.els.zfs,t=this.els.headInfo?.parentElement;i&&t&&i.parentElement!==t&&(i.classList.add("sl-fs-pill"),t.insertBefore(i,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)),this.cbEl&&this.els.zoom?.appendChild(this.cbEl),this.a11yChipsEl&&(e?this.els.rail?.insertBefore(this.a11yChipsEl,this.els.railScroll??null):this.regions["top-left"]?.appendChild(this.a11yChipsEl)),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"]')}get onGAPromptHook(){return this.opts.onGAPrompt}tf(e,i){return S(e,i)}buildSoldoutOverlay(){if(!this.els.map)return;let e=document.createElement("div");e.className="sl-soldout",e.setAttribute("role","status");let i=(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">${i}</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,i){let t=this.controller.getGAAreas().length>0,s=this.isSoldOut(e,i,t);s!==this.soldOut&&(this.soldOut=s,this.soldoutEl?.classList.toggle("on",s))}isSoldOut(e,i,t){return!t&&e.length>0&&e.every(s=>(i[s.key]??0)===0)}setSalesClosed(e){let i=e||!!this.opts.readOnly;this.salesClosed!==i&&(this.salesClosed=i,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 i=this.els.closedPillText??e;i.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 i=this.els.foot;if(!i)return;let t=document.createElement("a");t.className="sl-powered",t.href="https://seatlayer.io/?ref=picker",t.target="_blank",t.rel="noopener noreferrer",t.setAttribute("aria-label",this.tf("picker.poweredBy","Powered by SeatLayer")),t.innerHTML='<span class="sl-powered-mark" aria-hidden="true">'+Ae+`</span><span>${this.tf("picker.poweredBy","Powered by SeatLayer")}</span>`,i.appendChild(t)}buildRegions(){if(!this.els.map)return;let e=["top-left","top-center","top-right","left-rail","bottom-left","bottom-center","bottom-right"];for(let i of e){let t=document.createElement("div");t.className="sl-anchor",t.dataset.region=i,this.els.map.appendChild(t),this.regions[i]=t}}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,i){let t=setTimeout(()=>{this.motionTimers.delete(t),this.destroyed||e()},i);this.motionTimers.add(t)}animateOnce(e,i,t=600){!e||this.reducedMotion()||(e.classList.remove(i),e.offsetWidth,e.classList.add(i),this.scheduleMotion(()=>e.classList.remove(i),t))}flashPickedSeat(e){this.reducedMotion()||this.controller.flashSeat(e,this.cssVar("--sl-accent")||"#f4b740")}flashHeldSeats(e){if(this.reducedMotion())return;(e.items??[]).filter(t=>t.objectType!=="ga").map(t=>t.label).slice(0,10).forEach((t,s)=>{let n=this.controller.seatByLabel(t);n&&this.scheduleMotion(()=>this.controller.flashSeat(n.id,this.cssVar("--sl-accent")||"#f4b740"),s*55)})}committedSelection(){let e=this.confirmSeat?.id,i=this.tableDialog&&!this.tableDialogHeld?this.tableDialog.id:null;return this.controller.getSelection().filter(t=>t.id!==e&&t.id!==i)}pendingSelectionCount(){let e=this.hold?.items??[],i=new Set(e.map(s=>s.label));return this.committedSelection().filter(s=>!i.has(s.label)).reduce((s,n)=>s+(n.quantity??1),0)+ce(this.gaQty,this.hold?.items??[])}heldTicketCount(){return(this.hold?.items??[]).reduce((e,i)=>e+(i.quantity??1),0)}totalTicketCount(){let e=new Set((this.hold?.items??[]).map(t=>t.label)),i=this.committedSelection().filter(t=>!e.has(t.label)).reduce((t,s)=>t+(s.quantity??1),0);return this.heldTicketCount()+i+ce(this.gaQty,this.hold?.items??[])}updateSelectionCapacity(){let e=new Set((this.hold?.items??[]).map(s=>s.label)),i=this.committedSelection().filter(s=>e.has(s.label)).reduce((s,n)=>s+(n.quantity??1),0),t=Math.max(0,this.maxTickets-this.heldTicketCount()-ce(this.gaQty,this.hold?.items??[]));this.controller.setMaxSelection(i+t)}syncCta(e=this.lastTrayCount,i=this.pendingSelectionCount()){let t=this.els.cta;if(!t)return;if(this.salesClosed){t.disabled=!0,t.textContent=this.tf("picker.salesClosedCta","Sales closed");return}if(this.confirmSeat||this.tableDialog&&!this.tableDialogHeld){t.disabled=!0,t.textContent=this.tableDialog?this.tf("picker.confirmYourTable","Confirm your table"):this.tf("picker.confirmOrCancelSeat","Confirm or cancel this seat");return}if(this.ctaPhase==="holding"){t.disabled=!0,t.innerHTML=`<span class="sl-cta-spin" aria-hidden="true"></span>${this.tf("picker.securingSeats","Securing your seats\u2026")}`;return}if(this.ctaPhase==="checkout"){t.disabled=!0,t.innerHTML=`<span class="sl-cta-spin" aria-hidden="true"></span>${this.tf("picker.openingCheckout","Opening secure checkout\u2026")}`;return}let s=this.controller.getSelectionValidity(e);if(s&&!s.isValid){t.disabled=!0,t.textContent=tt(s,(n,a)=>this.tf(n,a),!0);return}t.disabled=e===0,t.textContent=this.hold?i?w("picker.secureMoreAndCheckout",{count:i}):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,i){try{let t=await this.controller.resumeHold(e);if(!t)return null;let s={holdId:t.holdId,expiresAt:t.expiresAt,seats:t.seats,items:t.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)),i&&this.toast(this.tf("picker.heldTicketsRestored","Your held tickets have been restored."),"success"),s}catch(t){let s=t?.status;return s===404||s===409?this.forgetHold():this.opts.onError?.(t),null}}async restoreRememberedHold(){let e=this.rememberedHoldId();e&&await this.resumeHoldFromServer(e,!0)}activeFloorObjects(){let e=this.controller.doc;if(!e)return[];let i=e.floors;if(i?.length){let t=this.controller.getActiveFloorId();return(i.find(s=>s.id===t)??i[0]).objects??[]}return e.objects??[]}buildMinimap(){this.els.map&&(this.minimap=ri({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 i=e.tiers?.length?e.tiers[0].price:e.price;return i===void 0||!e.key?i:this.paidPrice(e.key,e.tiers?.[0]?.id??null,i)}catPriceRange(e){let i=e.tiers?.length?e.tiers.map(t=>this.paidPrice(e.key,t.id??null,t.price)):e.price==null?[]:[this.paidPrice(e.key,null,e.price)];if(e.key)for(let t of this.pricesByChannel.values())for(let s of t)s.categoryKey===e.key&&i.push(s.price);return i.length?{min:Math.min(...i),max:Math.max(...i)}:void 0}priceBands(){let e=this.controller.doc;if(!e)return[];let i=e.categories.map(o=>({key:o.key,range:this.catPriceRange(o)})).filter(o=>o.range!=null);if(!i.length)return[];let t=[...new Map(i.map(o=>[`${o.range.min}:${o.range.max}`,o.range])).values()].sort((o,l)=>o.min-l.min||o.max-l.max);if(t.length<=5)return t.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:i.filter(l=>l.range.min===o.min&&l.range.max===o.max).map(l=>l.key),min:o.min,max:o.max}));let s=[...i].sort((o,l)=>o.range.min-l.range.min||o.range.max-l.range.max),n=Math.ceil(s.length/4),a=[];for(let o=0;o<s.length;o+=n){let l=s.slice(o,o+n),c=Math.min(...l.map(p=>p.range.min)),h=Math.max(...l.map(p=>p.range.max));a.push({id:`b${o}`,label:c===h?this.money(c):`${this.money(c)}\u2013${this.money(h)}`,keys:l.map(p=>p.key),min:c,max:h})}return a}buildPriceFilter(){if(!this.els.prices||!this.els.pricesSec)return;let e=this.priceBands();if(e.length<2)return;let i=document.createElement("select");i.className="sl-price-select",i.setAttribute("aria-label",this.tf("picker.filterAndFocusByPrice","Filter and focus seats by price")),i.innerHTML=`<option value="all">${this.tf("picker.allPrices","All prices")}</option>`+e.map(t=>`<option value="${t.id}">${t.label}</option>`).join(""),this.els.pricesSec.appendChild(i),i.addEventListener("change",()=>{let s=e.find(n=>n.id===i.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 i=e.objects.some(t=>t.type==="section")||(e.floors??[]).some(t=>t.objects.some(s=>s.type==="section"));if(this.canOffer3d()){let t=document.createElement("div");t.className="sl-projection",t.setAttribute("role","group"),t.setAttribute("aria-label",this.tf("picker.venueView","Venue view")),t.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>`,t.querySelectorAll("button").forEach(s=>{s.addEventListener("click",()=>{this.setBuyerView(s.dataset.view)})}),this.regions["top-right"].appendChild(t),this.projectionEl=t,this.syncProjection()}if(i){let t=[...e.objects,...(e.floors??[]).flatMap(h=>h.objects)],s=new Set((e.zones??[]).map(h=>h.id)),a=t.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",w("picker.zoomLevel"));let l={zones:w("picker.rungLabel.zones"),sections:w("picker.rungLabel.sections"),seats:w("picker.rungLabel.seats")},c={zones:w("picker.rungTip.zones"),sections:w("picker.rungTip.sections"),seats:w("picker.rungTip.seats")};o.innerHTML=a.map(h=>`<button type="button" data-rung="${h}" title="${c[h]}" aria-pressed="false">${l[h]}</button>`).join(""),o.querySelectorAll("button").forEach(h=>{h.addEventListener("click",()=>{let p=h.dataset.rung;this.controller.setRung(p),p==="seats"&&this.collapseSectionCard()})}),this.regions["top-center"].appendChild(o),this.rungsEl=o,this.syncRung()}if(this.controller.isMultiFloor()){let t=ii({floors:this.controller.getFloors(),tf:(s,n)=>this.tf(s,n),onChoose:s=>{s===""?this.controller.setFloorOverview(!0):this.controller.setFloor(s),this.showSectionCard(null),this.syncFloors(),this.syncRung(),this.minimap?.refreshMinimap()}});this.regions["left-rail"].appendChild(t),this.floorsEl=t,this.syncFloors()}}syncRung(){let e=this.controller.getRung(),i=e==="seats";this.root&&(this.root.dataset.zoomed=String(i)),this.minimap?.setAutoOpen(!1),this.rungsEl&&this.rungsEl.querySelectorAll("button").forEach(t=>{let s=t.dataset.rung===e;t.classList.toggle("on",s),t.setAttribute("aria-pressed",String(s))})}syncProjection(){this.projectionEl&&this.projectionEl.querySelectorAll("button").forEach(e=>{let i=e.dataset.view===this.buyerView;e.classList.toggle("on",i),e.setAttribute("aria-pressed",String(i))})}canOffer3d(){return this.opts.enable3D===!1||!this.controller.doc||!Gt()?!1:this.allSeats().length<=this.max3dSeats()}max3dSeats(){let e=this.opts.max3DSeats;if(typeof e=="number"&&e>0)return e;let i=globalThis.navigator;return(i?.hardwareConcurrency??8)<=4||(i?.deviceMemory??8)<=4||(globalThis.matchMedia?.("(pointer: coarse)").matches??!1)?bi/2:bi}syncFloors(){si(this.floorsEl,this.controller.getActiveFloorId(),this.controller.isFloorOverview())}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 i=this.activeFloorObjects().filter(s=>s.type==="section"&&!this.controller.isSectionClosed(s.id)&&this.controller.getSectionSeatCount(s.id)>0);if(i.length<2)return null;let t=i.findIndex(s=>s.id===e);return t<0?null:{previous:i[(t-1+i.length)%i.length],next:i[(t+1)%i.length]}}wireSectionNavigation(e){e.querySelectorAll("[data-section-nav]").forEach(i=>{i.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation();let s=i.dataset.sectionNav;s&&this.controller.focusSection(s)})})}renderSectionCard(e){if(!this.els.map)return;this.secCardEl?.remove();let i=e.categories.length?e.categories.map(p=>{let d=this.controller.doc?.categories.find(f=>f.key===p.key);return d?this.catPriceRange(d):{min:p.priceMin,max:p.priceMax}}).filter(p=>p!=null):[{min:e.priceMin,max:e.priceMax}],t=Math.min(...i.map(p=>p.min)),s=Math.max(...i.map(p=>p.max)),n=t===s?this.money(t):`${this.money(t)}\u2013${this.money(s)}`,a=ie("picker.seatsLeftInSection",e.seatsLeft),o=`<button type="button" class="sl-seccard-x" aria-label="${w("picker.closeSectionSummary")}">\u2715</button>`,l=Jt(this.sectionNeighbours(e.id)),c=document.createElement("div");if(this.root?.dataset.layout==="narrow")c.className="sl-seccard strip on",c.setAttribute("role","status"),c.setAttribute("aria-label",w("picker.sectionSummaryAria",{label:e.label})),c.innerHTML=`<span class="sl-seccard-dot" style="background:${e.color}"></span><span class="sl-seccard-name">${e.label}</span><span class="sl-seccard-left">${a}</span>`+l+o,this.wireSectionNavigation(c),c.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),this.els.map.appendChild(c);else if(this.secCardCollapsed)c.className="sl-seccard mini on",c.setAttribute("role","button"),c.setAttribute("aria-label",w("picker.sectionSummaryAria",{label:e.label})),c.innerHTML=`<span class="sl-seccard-dot" style="background:${e.color}"></span><span class="sl-seccard-name">${e.label}</span><span class="sl-seccard-left">${a}</span>`+l+o,this.wireSectionNavigation(c),c.addEventListener("click",p=>{p.target.closest(".sl-seccard-x")||(this.secCardCollapsed=!1,this.secCardShownAt=Date.now(),this.renderSectionCard(e))}),c.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),(this.regions["top-center"]??this.els.map).appendChild(c);else{c.className="sl-seccard on",c.setAttribute("role","dialog"),c.setAttribute("aria-label",w("picker.sectionSummaryAria",{label:e.label}));let p=e.categories.map(d=>{let f=this.priceBandKeys!=null&&!this.priceBandKeys.has(d.key),m=this.controller.doc?.categories.find(k=>k.key===d.key),g=m?this.catPriceRange(m):{min:d.priceMin,max:d.priceMax},T=g&&g.min!==g.max?`${this.money(g.min)}\u2013${this.money(g.max)}`:this.money(g?.min??d.price);return`<span class="sl-seccard-mix-item${f?" sl-dim":""}"><span class="sl-seccard-mix-dot" style="background:${d.color}"></span>${d.label} <span class="sl-seccard-mix-price">${T}</span></span>`}).join("");c.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">${n}</span>`:"")+o+`</div><div class="sl-seccard-zone">${e.zoneLabel?`${e.zoneLabel} \xB7 `:""}<span class="sl-seccard-left">${a}</span></div>`+(e.entrance?`<div class="sl-seccard-entrance">${w("picker.entrance")} ${String(e.entrance).replace(/[&<>"]/g,d=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[d])}</div>`:"")+(p?`<div class="sl-seccard-mix">${p}</div>`:"")+`<div class="sl-seccard-foot"><button type="button" class="sl-seccard-overview">\u2190 ${w("picker.overview")}</button>`+l+`<span class="sl-seccard-hint">${w("picker.tapSeatHint")}</span></div>`,this.wireSectionNavigation(c),c.querySelector(".sl-seccard-x").addEventListener("click",()=>this.controller.overview()),c.querySelector(".sl-seccard-overview").addEventListener("click",()=>this.controller.overview()),(this.regions["top-center"]??this.els.map).appendChild(c)}this.secCardEl=c}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,i=this.lastSection;if(!e||!i||!this.els.map)return 0;let t=this.activeFloorObjects().find(k=>k.type==="section"&&k.id===i.id)?.outline;if(!t||t.length<3)return 0;let s=t.map(k=>this.controller.worldToScreen(k)),n=s.map(k=>k.x),a=s.map(k=>k.y),o=Math.min(...n),l=Math.min(...a),c=Math.max(...n)-o,h=Math.max(...a)-l;if(c<=0||h<=0)return 0;let p=this.els.map.getBoundingClientRect(),d=e.getBoundingClientRect(),f=d.left-p.left,m=d.top-p.top,g=Math.max(0,Math.min(f+d.width,o+c)-Math.max(f,o)),T=Math.max(0,Math.min(m+d.height,l+h)-Math.max(m,l));return g*T/(c*h)}announceSeat(e){if(!this.srEl)return;if(!e){this.srEl.textContent="";return}let i=this.controller.doc?.categories.find(d=>d.key===e.categoryKey),t=this.controller.getStatus(e.id)??"free",s=t==="free"?this.tf("picker.statusAvailable","available"):t==="held"?this.tf("picker.statusOnHold","on hold"):this.tf("picker.statusTaken2","taken"),n=i?this.catPriceRange(i):void 0,a=n?n.min===n.max?this.money(n.min):`${this.money(n.min)}\u2013${this.money(n.max)}`:void 0,o=this.controller.tableSelection(e.id),l=o??this.controller.seatDetails(e.id),c=this.rowTypeWord(l),h=l?.rowLabel??l?.displayLabel??e.displayLabel??e.label,p=o?`${c} ${h}, ${o.bookingMode==="variable"?w("picker.minToMaxGuests",{min:o.minOccupancy,max:o.maxOccupancy}):w("picker.capacityGuests",{count:o.capacity})}`:l?.objectType==="booth"?`${c} ${h}`:l?.objectType==="table"?`${c} ${h}, ${w("picker.seatNumberLower",{label:l.seatNumber??e.label})}`:w("picker.seatLabel",{label:l?.displayLabel??e.displayLabel??e.label});this.srEl.textContent=`${p}, ${i?.label??e.categoryKey}${a?`, ${a}`:""}, ${s}`}showTableDialog(e,i,t){this.dismissTableDialog(!1),this.tableDialog={...e},this.tableDialogHeld=i,this.tableDialogReturnFocus=t??document.activeElement;let s=c=>String(c??"").replace(/[&<>"']/g,h=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[h]),n=this.controller.doc?.categories.find(c=>c.key===e.categoryKey),a=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(a?w("picker.flexiblePartyTypeWord",{typeWord:o}):w("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">${a?this.tf("picker.chooseGuestsCopy","Choose how many guests will sit together. This table is held exclusively for your party."):w("picker.allPlacesBookedTogether",{count:e.capacity})}</p></div><div class="sl-table-body"><div class="sl-table-summary"><span>${s(n?.label??e.categoryKey)}</span><b data-table-unit>${w("picker.perGuestPrice",{price:this.money(this.paidPrice(e.categoryKey,e.tierId??null,e.price,e.label))})}</b><span class="muted">${this.tf("picker.tableCapacity","Table capacity")}</span><span>${w("picker.guestsCount",{count:e.capacity})}</span><span class="muted">${this.tf("picker.total","Total")}</span><b data-table-total></b></div>`+(a?`<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">${w("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">${w("common.cancel")}</button><button type="button" class="sl-table-confirm">${i?this.tf("picker.updateTable","Update table"):a?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(c=>{c.addEventListener("click",()=>{if(!this.tableDialog)return;let h=Math.max(this.tableDialog.minOccupancy,Math.min(this.tableDialog.maxOccupancy,this.tableDialog.quantity+Number(c.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",c=>{c.target===l&&this.cancelTableDialog()}),l.addEventListener("keydown",c=>{if(c.key!=="Tab")return;let h=[...l.querySelectorAll('button:not(:disabled),[tabindex]:not([tabindex="-1"])')];if(!h.length)return;let p=h[0],d=h[h.length-1];c.shiftKey&&document.activeElement===p?(c.preventDefault(),d.focus()):!c.shiftKey&&document.activeElement===d&&(c.preventDefault(),p.focus())}),requestAnimationFrame(()=>l.querySelector(a?'[data-table-step="-1"]':".sl-table-confirm")?.focus())}renderTableDialogState(){let e=this.tableDialog,i=this.tableDialogEl;if(!e||!i)return;let t=i.querySelector("output[data-table-qty]");t&&(t.value=String(e.quantity));let s=i.querySelector("input[data-table-qty]");s&&(s.value=String(e.quantity)),i.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 n=this.paidPrice(e.categoryKey,e.tierId??null,e.price,e.label),a=i.querySelector("[data-table-total]");a&&(a.textContent=this.money(n*e.quantity))}async confirmTableDialog(){let e=this.tableDialog,i=this.tableDialogHeld;if(!e)return;let t=this.tableDialogEl?.querySelector(".sl-table-confirm");if(t&&(t.disabled=!0,t.textContent=i?this.tf("picker.updatingEllipsis","Updating\u2026"):this.tf("picker.selectingEllipsis","Selecting\u2026")),i){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(),t&&(t.disabled=!1,t.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(w("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"),t&&(t.disabled=!1,t.textContent=this.tf("picker.updateTable","Update table"))}return}if(!this.controller.setTableQuantity(e.label,e.quantity)){t&&(t.disabled=!1,t.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,i=this.tableDialogHeld;this.dismissTableDialog(),e&&!i&&this.controller.deselect(e.physicalSeatIds)}dismissTableDialog(e=!0){let i=this.tableDialogReturnFocus;this.tableDialogEl?.remove(),this.tableDialogEl=null,this.tableDialog=null,this.tableDialogHeld=!1,this.tableDialogReturnFocus=null,e&&requestAnimationFrame(()=>(i?.isConnected?i:this.root)?.focus())}showConfirm(e){let i=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),i&&i!==e.id&&this.controller.deselect([i]),this.tipEl&&(this.tipEl.style.display="none");let t=this.controller.seatDetails(e.id),s=this.controller.doc?.categories.find(x=>x.key===e.categoryKey),n=t?.price??(s?.tiers?.length?s.tiers[0].price:s?.price),a=n!=null?this.paidPrice(e.categoryKey,t?.tierId??s?.tiers?.[0]?.id??null,n,e.label):void 0,o=x=>String(x??"\u2014").replace(/[&<>"]/g,v=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[v]),l=[t?.sectionLabel?`<div class="sl-confirm-field"><span class="sl-confirm-key">${this.tf("picker.section","Section")}</span><span class="sl-confirm-value">${o(t.sectionLabel)}</span></div>`:"",t?.rowLabel||t?.objectType==="booth"?`<div class="sl-confirm-field"><span class="sl-confirm-key">${o(this.rowTypeWord(t))}</span><span class="sl-confirm-value">${o(te(t)??t?.displayLabel??e.displayLabel??e.label)}</span></div>`:"",t?.objectType!=="booth"?`<div class="sl-confirm-field"><span class="sl-confirm-key">${this.tf("picker.seat","Seat")}</span><span class="sl-confirm-value">${o(t?.seatNumber??t?.displayLabel??e.displayLabel??e.label)}</span></div>`:""].filter(Boolean).join(""),c=t?.tiers??s?.tiers??[],h=t?.tierId??c[0]?.id,p=x=>x.buyerMessage?.trim()||(x.restriction==="companion"?this.tf("picker.companionRequiresWheelchair","Requires the adjacent wheelchair place"):void 0),d=c.length>1?`<fieldset class="sl-confirm-tiers"><legend>${this.tf("picker.ticketType","Ticket type")}</legend>`+c.map(x=>{let v=p(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>`+(v?`<small class="sl-confirm-tier-note">${o(v)}</small>`:"")+`</span><span class="sl-confirm-tier-price">${this.money(this.paidPrice(e.categoryKey,x.id,x.price,e.label))}</span></button>`}).join("")+"</fieldset>":c[0]&&p(c[0])?`<p class="sl-confirm-tier-note">${o(p(c[0]))}</p>`:"",f=this.buyerView==="venue3d",m=document.createElement("div");m.className="sl-confirm",m.setAttribute("role","dialog"),m.setAttribute("aria-label",w("picker.confirmSeatLabel",{label:e.label}));let g=s?.color??"#6e7bff",T=We(g,this.cssVar("--sl-surface")||"#1a2234",.76)??g;m.style.setProperty("--sl-cat",g),m.style.setProperty("--sl-cat-ink",Q(T,"#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(t?.categoryLabel??s?.label??e.categoryKey)}</span>`+(a!=null?`<span class="sl-confirm-price">${this.money(a)}</span>`:"")+'</div><div class="sl-confirm-body">'+d+Zt(t?.wheelchairSpaceType)+Xt(e.commercial)+(this.seatViewEnabled()&&this.buyerView!=="venue3d"?this.confirmThumbHtml(e):"")+(f?`${ti(e,`${t?.displayLabel??e.displayLabel??e.label} \xB7 ${a==null?this.tf("picker.priceNotSupplied","Price not supplied"):this.money(a)}`,f)}<div class="sl-confirm-inspect-row">${ei(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">${w("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 k=m.querySelector(".sl-confirm-thumb");if(k&&e.viewUrl){let x=e.viewMeta?.previewUrl??e.viewUrl;this.buyerAssetUrls.resolve(x).then(v=>{v&&m.isConnected&&this.confirmEl===m&&(k.src=v)}).catch(v=>this.opts.onError?.(v))}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 v=x.dataset.confirmTier,E=c.find(b=>b.id===v);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,e.label))),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 i=this.els.map.clientWidth,t=this.els.map.clientHeight,s=this.confirmEl.offsetWidth||276,n=this.confirmEl.offsetHeight||230,a=s/2+12,o=Math.max(a,Math.min(i-a,e.x)),l=e.y+n+24<=t,c=e.y<n+24&&l;this.confirmEl.dataset.placement=c?"below":"above",this.confirmEl.style.left=`${o}px`,this.confirmEl.style.top=`${Math.max(8,Math.min(t-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?st(e):[]}return this.allSeatsCache}async openSeatView(e){if(!this.root||!this.seatViewEnabled())return;let i=++this.seatViewGen,t=this.controller.doc,s=this.controller.getActiveFloorId(),n=e.focalPoint??t?.floors?.find(p=>p.id===s)?.focalPoint??t?.focalPoint??{x:0,y:0},a,o,l=!1;if(e.viewUrl){let p,d=null;try{let m=e.viewMeta?.previewUrl;m&&m!==e.viewUrl?(d=await this.buyerAssetUrls.resolve(m),p=e.viewUrl):p=await this.buyerAssetUrls.resolve(e.viewUrl)}catch(m){i===this.seatViewGen&&this.opts.onError?.(m);return}if(i!==this.seatViewGen||!p||e.viewMeta?.previewUrl&&e.viewMeta.previewUrl!==e.viewUrl&&!d||!this.root||!this.seatViewEnabled())return;let f={url:p,...d?{previewUrl:d}:{},...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}:{}};a=f,o=mi(f),l=Ds(f)}else{let p;try{let{generateSeatPanorama:d}=await Wt();p=d(e,n,this.allSeats())}catch(d){i===this.seatViewGen&&this.opts.onError?.(d);return}if(i!==this.seatViewGen||!this.root||!this.seatViewEnabled())return;a={url:p.url,generated:!0},o=w("picker.illustrationCaption",{m:p.distanceM})}this.closeSeatView(!1);let c=w("picker.viewFromSeat",{label:e.label}),h=qt({root:this.root,source:a,caption:o,real:l,closeLabel:this.tf("picker.close","Close"),dragHint:this.tf("picker.dragToLookAround","Drag to look around \xB7 scroll to zoom"),viewFromSeatLabel:c,real360Label:w("picker.real360"),previewLabel:w("picker.preview"),resolveAsset:p=>this.buyerAssetUrls.resolve(p),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 i=this.opts.pricing?.formatter;if(i)return i(e,this.currency);let t=Number.isInteger(e);return Os(e,this.currency,{locale:this.opts.locale,fallback:(s,n)=>`${s} ${n}`,...t?{minimumFractionDigits:0,maximumFractionDigits:0}:{}})}scheduleOfferBoundary(e){if(this.offerBoundaryTimer&&clearTimeout(this.offerBoundaryTimer),this.offerBoundaryTimer=null,!this.api.availability||this.destroyed)return;let i=Date.now(),t=Dt(e,i);if(t==null)return;let s=6*36e5,n=Math.min(Math.max(t-i+1e3,1e3),s);this.offerBoundaryTimer=setTimeout(()=>{this.offerBoundaryTimer=null,!document.hidden&&this.refreshOfferAvailability(!1)},n)}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 i=await this.api.availability(this.opts.event,e);if(this.destroyed)return;let t=Ue(i);if(!t)return;this.offerAvailability=t,this.applyChannelPricing(t.channelPricing),this.scheduleOfferBoundary(t);let s=Ge(t),n={...this.hostPricing?.prices??{},...s},a=Object.keys(n).length>0||this.hostPricing?.formatter?{prices:n,...this.hostPricing?.formatter?{formatter:this.hostPricing.formatter}:{}}:void 0;this.setPricing(a),this.syncOffer(),this.opts.onOfferAvailabilityChange?.(t)}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(i=>i.categoryKey===e)??null:null}applyChannelPricing(e){this.channelByObject.clear(),this.pricesByChannel.clear();for(let i of e?.channels??[])this.pricesByChannel.set(i.channelId,i.priceOverrides);for(let i of e?.objects??[])this.pricesByChannel.has(i.channelId)&&this.channelByObject.set(i.label,i.channelId)}syncOffer(){let e=this.els.offer;if(!e)return;let i=this.offerAvailability,t=i?.release??null,s=t?null:i?.upcoming??null;if(!i||i.state==="closed"||i.state==="sold-out"||!t&&!s){e.classList.remove("has"),e.replaceChildren();return}let n=t??s,a=document.createElement("div");a.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=t?this.tf("picker.currentTicketOffer","Current ticket offer"):this.tf("picker.upcomingTicketOffer","Upcoming ticket offer");let c=document.createElement("strong");c.className="sl-offer-name",c.textContent=n.name||(t?this.tf("picker.currentOffer","Current offer"):this.tf("picker.scheduledOffer","Scheduled offer"));let h=document.createElement("span");h.className="sl-offer-line";let p=[];t&&i.fromPrice!=null&&p.push(this.money(i.fromPrice/100)),t&&n.remaining!=null&&p.push(w("picker.offerRemainingAvailable",{count:n.remaining})),t&&n.endsAt!=null&&p.push(w("picker.offerUntil",{time:Me(n.endsAt,this.eventTimezone,this.opts.locale)})),s?.startsAt!=null&&p.push(w("picker.offerStarts",{time:Me(s.startsAt,this.eventTimezone,this.opts.locale)})),h.textContent=p.join(" \xB7 "),o.append(l,c,h);let d=document.createElement("details");d.className="sl-offer-info";let f=document.createElement("summary");f.setAttribute("aria-label",w("picker.howOfferWorks",{name:c.textContent??""})),f.textContent="i";let m=document.createElement("div");m.className="sl-offer-detail",m.textContent=t?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."),d.append(f,m),a.append(o,d),e.replaceChildren(a),e.classList.add("has")}paidPrice(e,i,t,s){let n=s?this.channelByObject.get(s):void 0;if(n&&e){let o=this.pricesByChannel.get(n)?.find(l=>l.categoryKey===e&&l.tierId===(i??null));if(o)return o.price}let a=e?this.opts.pricing?.prices?.[e]:void 0;return a===void 0?t:typeof a=="number"?a:i&&a.tiers?.[i]!==void 0?a.tiers[i]:a.base??t}legendDeps(){return{colorOf:e=>this.controller.getRenderer()?.categoryDisplayColor?.(e.key)??e.color,rangeOf:e=>this.catPriceRange(e),priceOf:e=>this.catPrice(e),offerOf:e=>this.offerPrice(e),money:e=>this.money(e),esc:F}}syncPriceRail(e,i){let t=this.els.railScroll,s=e.length>1;this.els.rail?.classList.toggle("has",s||!!this.a11yChipsEl?.children.length),t&&(t.innerHTML=s?$t({...this.legendDeps(),categories:e,left:i,activeKey:this.focusedCatKey,soldOutWord:this.tf("picker.soldOut","Sold out")}):"",t.querySelectorAll(".sl-rc").forEach(n=>{n.addEventListener("click",()=>this.focusCategory(n.dataset.cat??""))}),this.railEdgesBound||(this.railEdgesBound=!0,t.addEventListener("scroll",()=>qe(t),{passive:!0})),requestAnimationFrame(()=>qe(t)))}syncPrices(){let e=this.controller.doc;if(!e||!this.els.prices)return;let i=this.controller.categoryAvailability(),t=e.categories.filter(l=>!l.notForSale);this.narrateAvailability(t,i),this.syncSoldout(t,i),this.syncPriceRail(t,i);let s=5,n=t.length-s,a=n>1&&!this.pricesExpanded,o=a?t.slice(0,s):t;this.els.prices.classList.toggle("sl-expanded",n>1&&this.pricesExpanded),this.els.prices.innerHTML=It({...this.legendDeps(),categories:o,left:i,collapsed:a,activeKey:this.focusedCatKey,bandKeys:this.priceBandKeys,leftCount:l=>ie("picker.leftCount",l),titleFor:(l,c)=>c?this.tf("picker.showAllSeats","Show all seats"):w("picker.showLabelSeatsOnMap",{label:l.label}),moreLabel:n>1?a?w("picker.showAllTicketTypes",{count:t.length}):this.tf("picker.showFewer","Show fewer"):null,status:{legend:this.tf("picker.seatStatusLegend","Seat status legend"),held:this.tf("picker.temporarilyHeld","Temporarily held"),sold:this.tf("picker.sold","Sold")}}),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 c=()=>this.focusCategory(l.dataset.cat??"");l.addEventListener("click",c),l.addEventListener("keydown",h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),c())})}),this.els.prices.querySelector(".sl-price-more")?.addEventListener("click",()=>{this.pricesExpanded=!this.pricesExpanded,this.syncPrices()})}focusCategory(e){if(!e)return;let i=this.focusedCatKey===e?null:e;this.focusedCatKey=i,this.priceBandKeys=i?new Set([i]):null;let t=this.els.pricesSec?.querySelector(".sl-price-select");t&&(t.value="all"),this.controller.setCategoryFilter(i?[i]:null),this.controller.focusCategoryFilter(i?[i]:null),this.pushAvailabilityTo3d(),this.syncFloors(),this.syncRung(),this.minimap?.refreshMinimap(),this.syncPrices(),this.lastSection&&this.showSectionCard(this.lastSection)}narrateAvailability(e,i){let t=this.els.liveText,s=this.lastCatAvail;this.lastCatAvail={...i};let n=this.controller.getActiveFloorId();if(n!==this.lastAvailFloorId&&(this.lastAvailFloorId=n,this.availQuietUntil=performance.now()+2e3),!(!t||!s||performance.now()<this.availQuietUntil))for(let a of e){let o=s[a.key],l=i[a.key]??0;if(o===void 0||l>=o)continue;let c=o-l;t.textContent=ie("picker.seatsJustTakenInCategory",c,{label:a.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]),i=this.controller.getSelection().filter(t=>!e.has(t.label)&&(this.controller.getStatus(t.id)??"free")!=="free");i.length&&(this.controller.deselect(i.map(t=>t.id)),this.toast(w("picker.seatJustTakenByAnother",{label:i[0].label}),"error"))}syncTray(){if(!this.els.tray)return;this.updateSelectionCapacity();let e=this.committedSelection(),i=this.controller.getGAAreas(),t=this.hold?.items??[],s=[],n=new Set;if(this.salesClosed&&!e.length&&!t.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 if(!e.length&&!t.length&&!i.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>`);else if(!e.length&&!t.length){let u=this.controller.doc?.objects?.some(b=>b.type!=="gaArea");s.push(`<div class="sl-tray-hint">${u?this.tf("picker.trayHintTapOrStanding","Tap a seat on the map \u2014 or grab standing tickets below."):this.tf("picker.gaTrayHintTapArea","Tap an area on the map to choose tickets.")}</div>`)}let a=!e.length&&!t.length&&!ce(this.gaQty,this.hold?.items??[]);if(a&&(this.baReopen=!1),!this.salesClosed&&!this.hold&&(a||this.baReopen||this.bestAvailableBusy||this.bestAvailableConfirm)){let u=(this.controller.doc?.categories??[]).filter(y=>!y.notForSale),b=this.controller.getBestAvailableZones();this.baZone&&!b.some(y=>y.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>${w("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(y=>`<option value="${y.key}"${this.baCat===y.key?" selected":""}>${y.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(y=>`<option value="${F(y.id)}"${this.baZone===y.id?" selected":""}>${F(y.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")}`:ie("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,y,C=1,A,O)=>oi({d:u?this.controller.seatDetails(u):null,area:y==="ga"?i.find(L=>L.id===A):void 0,label:b,objectType:y,quantity:C,identity:O}),l=li;for(let u of bt(t)){let b=u.objectType==="ga"?`held:ga:${u.objectId}:${u.tierId??""}`:`held:${u.label}`;n.add(b);let y=this.controller.doc?.categories.find(I=>I.key===u.categoryKey),C=u.tierId?y?.tiers?.find(I=>I.id===u.tierId)?.name:void 0,A=u.objectType!=="ga"?this.controller.seatByLabel(u.label):null,O=u.objectType==="table"?this.controller.tableSelection(u.label):null,L=this.seatViewEnabled()&&!!A&&u.objectType!=="table";s.push(`<div class="sl-chip sl-held${this.lastTrayKeys.has(b)?"":" sl-enter"}" data-key="${b}" data-held="${encodeURIComponent(u.labels.join(`
1511
+ `))}"${A?` data-locate="${A.id}"`:""}><div class="sl-chip-main">`+o(A?.id??null,u.label,u.objectType,u.quantity??1,u.objectId,O??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">${y?.label??u.categoryKey}${C?` \xB7 ${C}`:""}</span>`+(O?.bookingMode==="variable"?`<button type="button" class="sl-table-edit" data-table-edit="${encodeURIComponent(u.label)}">${w("picker.guestsCountEdit",{count:u.quantity??1})}</button>`:"")+Xe(A?.wheelchairSpaceType)+Qe(A?.commercial)+`<span class="amt">${this.money(this.paidPrice(u.categoryKey,u.tierId,u.unitPrice,u.label)*(u.quantity??1))}</span></div></div>`+l(w("picker.removeHeldTicketLabel",{label:yt(u,i)}),L?u.label:null)+"</div>")}let c=new Set(t.map(u=>u.label)),h=this.seatViewEnabled();for(let u of e.filter(b=>!c.has(b.label))){let b=`seat:${u.id}`;n.add(b);let y=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="${w("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,u.label))}</option>`).join("")+"</select>":"",A=u.tiers?.find(L=>L.id===u.tierId)??u.tiers?.[0],O=A?.buyerMessage?.trim()||(A?.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">${y?.label??u.categoryKey}</span>`+(u.objectType==="table"&&u.bookingMode==="variable"?`<button type="button" class="sl-table-edit" data-table-edit="${encodeURIComponent(u.label)}">${w("picker.guestsCountEdit",{count:u.quantity??1})}</button>`:"")+`${Xe(u.wheelchairSpaceType)}${Qe(u.commercial)}${C}<span class="amt">${this.money(this.paidPrice(u.categoryKey,u.tierId??null,u.price,u.label)*(u.quantity??1))}</span></div>`+(O?`<small class="sl-tier-note">${F(O)}</small>`:"")+"</div>"+l(w("picker.removeSeatLabel",{label:u.label}),h&&u.objectType!=="table"?u.label:null)+"</div>")}i.length&&s.push(St(this,i,t)),!this.salesClosed&&!this.hold&&!a&&!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=n,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.removeHeldLabels(decodeURIComponent(b.dataset.held).split(`
1512
+ `),b);return}let y=b.dataset.seat,C=this.controller.getSelection().find(O=>O.id===y)?.label??this.tf("picker.seat","Seat"),A=()=>{this.controller.deselect([y]),this.toast(w("picker.labelRemoved",{label:C}),"neutral",{label:this.tf("picker.undo","Undo"),onClick:()=>{let O=this.controller.select([y]);this.toast(O.length?w("picker.labelRestored",{label:C}):w("picker.labelNoLongerAvailable",{label:C}),O.length?"success":"warning")}})};if(this.reducedMotion()){A();return}b.classList.add("sl-leave"),this.scheduleMotion(A,150)})}),this.els.tray.querySelectorAll("[data-table-edit]").forEach(u=>{u.addEventListener("click",b=>{b.stopPropagation();let y=decodeURIComponent(u.dataset.tableEdit??""),C=this.controller.tableSelection(y);if(!C)return;let A=t.find(O=>O.label===y&&O.objectType==="table");this.showTableDialog({...C,quantity:A?.quantity??C.quantity},!!A,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)}),Tt(this,this.els.tray,i),this.controller.setGASelection(mt(this.gaQty)),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 p=gt(this,i,this.hold?.items??[]),d=ce(this.gaQty,this.hold?.items??[]),f=t.reduce((u,b)=>u+this.paidPrice(b.categoryKey,b.tierId,b.unitPrice,b.label)*(b.quantity??1),0),m=t.reduce((u,b)=>u+(b.quantity??1),0),g=e.filter(u=>!c.has(u.label)),T=g.reduce((u,b)=>u+this.paidPrice(b.categoryKey,b.tierId??null,b.price,b.label)*(b.quantity??1),0)+p+f,k=g.reduce((u,b)=>u+(b.quantity??1),0)+d+m,x=this.pendingSelectionCount(),v=this.lastTrayCount,E=this.lastTrayTotal;if(this.els.count.textContent=k?ie("picker.ticketsCount",k):this.tf("picker.noSeatsSelected","No seats selected"),this.els.total.textContent=k?this.money(T):"",this.root?.setAttribute("data-has-selection",String(k>0)),this.root?.setAttribute("data-ba-active",String(this.bestAvailableConfirm||this.bestAvailableBusy||this.baReopen)),this.els.foot?.classList.toggle("empty",k===0),this.els.seatSummary&&(this.els.seatSummary.textContent=k?ie("picker.seatsSelectedCount",k):""),this.syncCta(k,x),this.hold){let u=m||this.hold.seats?.length||0;this.els.holdTitle&&(this.els.holdTitle.textContent=w("picker.securedCount",{count:u})),this.els.holdCopy&&(this.holdCopyPending=x>0,this.els.holdCopy.textContent=x?w("picker.moreSelectedCount",{count:x}):it(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"))}k!==v&&this.animateOnce(this.els.count,"sl-value-pop",380),T!==E&&this.animateOnce(this.els.total,"sl-value-pop",380),v===0&&k>0&&(this.animateOnce(this.els.cta,"sl-ready",520),this.sideCollapsed&&this.root?.dataset.layout!=="narrow"&&this.setPanelCollapsed(!1)),this.renderPeek(k,T,x),this.lastTrayCount=k,this.lastTrayTotal=T,this.opts.onSelectionChange?.(e),this.emitSelectionValidity(k,e)}emitSelectionValidity(e,i){let t=this.controller.getSelectionValidity(e);t&&(t.seats=i,this.opts.onSelectionValidityChange?.(t),t.isValid?this.lastSelectionValidity!==!0&&this.opts.onSelectionValid?.(i):this.lastSelectionValidity!==!1&&this.opts.onSelectionInvalid?.(t),this.lastSelectionValidity=t.isValid)}renderPeek(e,i,t){if(!this.els.peek)return;let s=(this.controller.doc?.categories??[]).map(n=>this.catPrice(n)).filter(n=>n!=null);this.els.peek.innerHTML=di({count:e,total:i,pendingCount:t,ctaPhase:this.ctaPhase,hasHold:!!this.hold,salesClosed:this.salesClosed,fromPrice:s.length?Math.min(...s):null,addMore:ci({salesClosed:this.salesClosed,hasHold:!!this.hold,ctaPhase:this.ctaPhase,formOpen:this.baReopen||this.bestAvailableBusy||this.bestAvailableConfirm,room:this.maxTickets-this.totalTicketCount(),wanted:this.baQty}),holdTime:this.hold&&this.holdTimer?Se(Math.max(0,this.holdExpiresAt-Date.now())):null,money:n=>this.money(n)}),this.root&&(this.root.dataset.peekClock=String(!!this.els.peek.querySelector(".sl-peek-time")))}async removeHeldLabels(e,i){let t=e.filter(a=>a&&!this.releasingLabels.has(a));if(!t.length)return!1;let s=t[0];t.forEach(a=>this.releasingLabels.add(a)),i?.setAttribute("aria-busy","true");let n=i?.querySelector(".rm");n&&(n.disabled=!0);try{let a=this.handedOff;if(!await this.controller.releaseLabels(t))return this.toast(w("picker.couldNotRemoveLabel",{label:s}),"error"),!1;vt(this.gaQty,this.hold?.items??[],t);let l=this.controller.currentHold();return this.hold=l?{holdId:l.holdId,expiresAt:l.expiresAt,seats:l.seats,items:l.items}:null,this.handedOff=!!this.hold&&a,this.bookedShown=!1,this.ctaPhase="idle",this.hold?this.startHoldTimer(this.hold.expiresAt):(this.stopHoldTimer(),this.forgetHold()),this.syncTray(),this.emitHoldChange(),this.toast(w("picker.labelRemovedFromHold",{label:s}),"success"),!0}finally{t.forEach(a=>this.releasingLabels.delete(a)),i?.removeAttribute("aria-busy"),n?.isConnected&&(n.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;let e=this.controller.getSelectionValidity(this.totalTicketCount());if(e&&!e.isValid){this.toast(tt(e,(t,s)=>this.tf(t,s)),"warning");return}if(this.totalTicketCount()>this.maxTickets){this.toast(w("picker.removeTicketsUntilOrFewer",{count:this.maxTickets}),"warning");return}let i=this.committedSelection();if(this.hold&&!i.some(t=>!(this.hold.items??[]).some(s=>s.label===t.label))){let t=this.hold.seats??i;this.handedOff=!0,this.setCtaPhase("checkout"),this.checkoutHandoff(this.hold,t);return}this.holdingLabels=new Set(i.map(t=>t.label)),this.setCtaPhase("holding");try{let t=null,s=ut(this.gaQty),n=this.committedSelection();if(n.length){let a=await this.controller.hold(void 0,this.opts.holdTtlMs);t=a?{holdId:a.holdId,expiresAt:a.expiresAt,seats:a.seats,items:a.items}:null}for(let{areaId:a,tierId:o,qty:l}of s){let c=await this.controller.holdGA(a,l,{tierId:o,ttlMs:this.opts.holdTtlMs});t=c?{holdId:c.holdId,expiresAt:c.expiresAt,seats:c.seats,items:c.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??n)}catch(t){this.opts.onError?.(t);let s=t,n=(s.conflicts??[]).map(o=>o.label).filter(Boolean).slice(0,3);s.reason==="event_closed"&&this.setSalesClosed(!0);let a=s.reason==="event_closed"?this.tf("picker.seatSalesClosedForEvent","Seat sales have closed for this event."):s.reason==="companion_pair_required"?this.tf("picker.companionPairRequired","Select the adjacent wheelchair place with each companion ticket."):s.reason==="ticket_option_not_applicable"?this.tf("picker.ticketOptionNotApplicable","That ticket choice is not available for the selected seat."):n.length?n.length===1?w("picker.labelsNoLongerAvailable.one",{labels:n.join(", ")}):w("picker.labelsNoLongerAvailable.other",{labels:n.join(", ")}):this.tf("picker.seatsJustTaken","One or more seats were just taken. Please pick again.");this.toast(a,"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 i=this.els.hold;i.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 t=i.querySelector('[data-ref="holdTime"]');this.els.holdNote?.classList.add("on");let s=()=>{let n=Math.max(0,this.holdExpiresAt-Date.now());t&&(t.textContent=Se(n));let a=this.els.peek?.querySelector(".sl-peek-time");a&&(a.textContent=Se(n)),!this.holdCopyPending&&this.els.holdCopy&&(this.els.holdCopy.textContent=it(this.holdExpiresAt)),i.classList.add("on"),i.classList.toggle("is-expiring",n>0&&n<=gi),this.setExtendPrompt(n>0&&n<=gi,n),n<=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.root&&delete this.root.dataset.peekClock,this.setExtendPrompt(!1,0)}setExtendPrompt(e,i){if(this.extendEl)if(e&&this.controller.currentHold()&&!this.bookedShown){let t=Math.ceil(i/1e3),s=Math.floor(t/60),n=String(t%60).padStart(2,"0");this.els.extendTxt.innerHTML=w("picker.seatsHeldForNeedMoreTime",{time:`${s}:${n}`}),this.extendEl.classList.add("on")}else this.extendEl.classList.remove("on")}async handleExtend(){let e=this.els.extendBtn;e.disabled=!0;let i=e.textContent;e.textContent=this.tf("picker.addingEllipsis","Adding\u2026");try{let t=await this.controller.extendHold(this.opts.holdTtlMs);t?(this.hold={holdId:t.holdId,expiresAt:t.expiresAt,seats:t.seats,items:t.items},this.holdExpiresAt=t.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(t){this.opts.onError?.(t),this.toast(this.tf("picker.couldNotAddMoreTime","Couldn't add more time \u2014 please head to checkout now."),"warning")}finally{e.disabled=!1,e.textContent=i}}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 i=e.lineItems.reduce((t,s)=>t+s.quantity,0);this.els.bookedSub&&(this.els.bookedSub.innerHTML=`<span class="sl-booked-seats">${ie("picker.ticketsCount",i)}</span> ${this.tf("picker.confirmedAndOnWay","confirmed. A confirmation is on its way.")}`),this.bookedEl?.classList.add("on"),this.opts.onBooked?.(e)}checkoutHandoff(e,i){if(this.checkoutMode==="hosted"){this.startHostedCheckout(e,i);return}this.opts.onCheckout?.(e,i,this.buildHandoff(e))}async startHostedCheckout(e,i){let t=this.buildHandoff(e),s=null;try{s=await(this.paymentOptions??=this.pubApi.paymentOptions(this.opts.event))}catch(a){this.opts.onError?.(a)}if(this.destroyed)return;let n=s?.providers?.[0];if(!n){let a=Qt(s?.reason),o=!!this.opts.onCheckoutUnavailable||!!this.opts.onCheckout;this.opts.onCheckoutUnavailable?.({reason:a,handoff:t}),this.opts.onCheckout?.(e,i,t),o||this.openCheckoutPanel({kind:"unavailable",reason:a,seatCount:t.lineItems.reduce((l,c)=>l+c.quantity,0)});return}await this.openCheckoutPanel({kind:"pay",provider:n,order:{holdId:t.holdId,expiresAt:t.expiresAt,currency:t.currency,total:t.total,labels:t.lineItems.map(a=>a.displayLabel??a.label)}})}async openCheckoutPanel(e){let i;try{({mountCheckout:i}=await Yt())}catch(t){this.opts.onError?.(t),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=i({root:this.root,state:e,formatMoney:t=>this.money(t),startSession:t=>this.pubApi.startCheckout(this.opts.event,{...t,...this.opts.returnUrl?{returnUrl:this.opts.returnUrl}:{}}),orderStatus:t=>this.pubApi.orderStatus(t),onCancel:()=>{this.checkoutPanel=null,this.hold||this.setCtaPhase("idle")},onConfirmed:t=>{this.opts.onOrderConfirmed?.(t),this.controller.refresh()},onError:t=>this.opts.onError?.(t)}))}closeCheckoutPanel(){this.checkoutPanel?.destroy(),this.checkoutPanel=null}buildHandoff(e){let t=(e.items??[]).map(a=>{let o=this.controller.lineItemDisplay(a);return{label:a.label,...o.displayLabel?{displayLabel:o.displayLabel}:{},...o.displayType?{displayType:o.displayType}:{},objectId:a.objectId,objectType:a.objectType,categoryKey:a.categoryKey,tierId:a.tierId,unitPrice:this.paidPrice(a.categoryKey,a.tierId,a.unitPrice,a.label),currency:a.currency??this.currency,quantity:a.quantity??1}}),s=t[0]?.currency??this.currency,n=t.reduce((a,o)=>a+o.unitPrice*o.quantity,0);return{holdId:e.holdId,expiresAt:e.expiresAt,currency:s,lineItems:t,total:n}}emitHoldChange(){let e=this.hold;this.scheduleOfferRefresh(!0),this.opts.onHoldChange?.(e,e?.seats??[],e?this.buildHandoff(e):null)}toast(e,i="neutral",t){let s=this.els.toast;if(!s)return;s.replaceChildren();let n=document.createElement("span");if(n.textContent=e,s.appendChild(n),s.classList.toggle("has-action",!!t),t){let a=document.createElement("button");a.type="button",a.className="sl-toast-action",a.textContent=t.label,a.addEventListener("click",t.onClick,{once:!0}),s.appendChild(a)}s.dataset.tone=i,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,i=this.tipEl.offsetWidth,t=this.tipEl.offsetHeight,s=this.tipPos.x+14,n=this.tipPos.y-t-12;s+i>e-8&&(s=this.tipPos.x-i-14),n<8&&(n=this.tipPos.y+18),this.tipEl.style.left=`${Math.max(8,s)}px`,this.tipEl.style.top=`${Math.max(8,n)}px`}rowTypeWord(e){let i=e?.displayType?.trim()||e?.rowType?.trim();return i||(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 i=m=>String(m??"\u2014").replace(/[&<>"]/g,g=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[g]),t=this.money(this.paidPrice(e.categoryKey,e.tierId??null,e.price,e.label)),s=e.objectType==="table"&&!!e.bookingMode,n=e.objectType==="booth",a=e.sectionLabel||e.rowLabel||e.seatNumber,o=s?`<div class="sl-tip-grid"><div class="sl-tip-field"><span class="sl-tip-key">${i(this.rowTypeWord(e))}</span><span class="sl-tip-val">${i(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>`: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">${i(e.sectionLabel)}</span></div>`:"")+`<div class="sl-tip-field"><span class="sl-tip-key">${i(this.rowTypeWord(e))}</span><span class="sl-tip-val">${i(e.rowLabel??e.displayLabel??e.label)}</span></div></div>`:a?'<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">${i(e.sectionLabel)}</span></div>`:"")+(e.rowLabel?`<div class="sl-tip-field"><span class="sl-tip-key">${i(this.rowTypeWord(e))}</span><span class="sl-tip-val">${i(te(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">${i(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">${i(e.displayLabel??e.label)}</span></div></div>`,l=e.status==="not_for_sale",c=e.status==="free"?"":`<div class="sl-tip-status">${l?this.tf("picker.notAvailable","Not available"):e.status==="held"?w("map.statusHeld"):w("map.statusTaken")}</div>`,h=pe(e.commercial),p=h?`<div class="sl-tip-cx"><span class="g" aria-hidden="true">\u25D0</span>${i(h)}</div>`:"",d=ke(e.wheelchairSpaceType),f=d?`<div class="sl-tip-cx"><span class="g" aria-hidden="true">\u267F</span>${i(d)}</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">${i(e.categoryLabel)}</span>`+(l?"":`<span class="sl-tip-amt">${t}</span>`)+"</div>"+f+p+c,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.controller.getSelectionValidity(this.totalTicketCount());return e&&(e.seats=this.committedSelection()),e}setMapTheme(e){this.destroyed||(this.opts.theme={...this.opts.theme??{},map:e??void 0},this.controller.setMapTheme(e),this.applyMapChromeTokens())}applyMapChromeTokens(){let e=this.els.map?.parentElement;if(!e||!this.root)return;let i=we(this.controller.doc?.theme,this.opts.theme),t=this.opts.theme?.map?.background??this.controller.doc?.theme?.background??void 0,s=Vt(i,t);for(let n of["--sl-bg","--sl-surface","--sl-text","--sl-muted","--sl-line","--sl-accent-text"])s?e.style.setProperty(n,s[n]):e.style.removeProperty(n)}setEventDetailsHidden(e){this.eventDetailsHidden=e,this.syncFullscreenButtons()}setPricing(e){let i=JSON.stringify(this.opts.pricing??null),t=JSON.stringify(e??null);i!==t&&(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)))}buildLanguageSwitcher(e){if(!e)return;let i=(this.opts.languages??[]).map(s=>Bs(s)).filter((s,n,a)=>a.indexOf(s)===n);if(i.length<2)return;let t=document.createElement("select");t.className="sl-langsel",t.setAttribute("aria-label",this.tf("picker.preferredTicketType","Language"));for(let s of i){let n=document.createElement("option");n.value=s,n.textContent=zs[s]??s,n.selected=s===pi(),t.appendChild(n)}t.addEventListener("change",()=>{this.setLocale(t.value)}),this.langSel=t,e.appendChild(t)}async setLocale(e){let i=pi(),t=await hi(e);if(this.opts.messages&&ui(this.opts.messages),t===i)return t;let s=this.root;if(!s)return t;s.lang=t,s.dir=$s(),_t(s);try{this.syncTray()}catch{}try{this.syncPrices()}catch{}try{this.syncOffer()}catch{}try{this.syncRung()}catch{}try{this.syncFloors()}catch{}try{this.syncPanelToggle()}catch{}try{this.syncFullscreenButtons()}catch{}return this.controller.refreshMapCopy(),this.langSel&&this.langSel.value!==t&&(this.langSel.value=t),t}isColorblindSafe(){return this.cbSafe}setColorblindSafe(e){e!==this.cbSafe&&(this.cbSafe=e,this.cbEl?.setAttribute("aria-pressed",String(e)),this.controller.setColorblindSafe(e),this.syncPrices(),_s(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,i){if(e==="map"){this.exit3d();return}let t=i?.flyToSeatId;if(this.buyerView==="venue3d"){t?(this.opts.onBuyerViewChange?.({view:"venue3d",seatId:t}),this.view3dHandle?.flyToSeat(t)):i?.resetView&&this.view3dHandle?.focusOverview();return}this.enter3d(t)}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(i=>({seatId:i.id,state:this.seatState3dFor(i)}));this.view3dHandle.setAvailability(e)}syncSelectionTo3d(){this.view3dHandle&&this.view3dHandle.setSelection(this.controller.getSelection().map(e=>e.id))}async seatViewFor3d(e){let i=this.allSeats().find(t=>t.id===e);if(!i)return null;if(i.viewUrl)try{let t=i.viewMeta?.previewUrl,s=!!t&&t!==i.viewUrl,n=s?await this.buyerAssetUrls.resolve(t):null,a=s?i.viewUrl:await this.buyerAssetUrls.resolve(i.viewUrl);return!a||s&&!n?null:{url:a,...n?{previewUrl:n}:{},...s?{resolveUrl:o=>this.buyerAssetUrls.resolve(o)}:{},...i.viewMeta?.sourceWidth!==void 0?{sourceWidth:i.viewMeta.sourceWidth}:{},...i.viewMeta?.sourceHeight!==void 0?{sourceHeight:i.viewMeta.sourceHeight}:{},...i.viewMeta?.previewWidth!==void 0?{previewWidth:i.viewMeta.previewWidth}:{},...i.viewMeta?.previewHeight!==void 0?{previewHeight:i.viewMeta.previewHeight}:{},...i.viewMeta?.initialBearingDeg!==void 0?{initialBearingDeg:i.viewMeta.initialBearingDeg}:{},...i.viewMeta?.initialPitchDeg!==void 0?{initialPitchDeg:i.viewMeta.initialPitchDeg}:{},...i.viewMeta?.coverage?{coverage:i.viewMeta.coverage}:{},...i.viewMeta?.capturedAt?{capturedAt:i.viewMeta.capturedAt}:{},...i.viewMeta?.sourceLabel?{sourceLabel:i.viewMeta.sourceLabel}:{}}}catch(t){return this.opts.onError?.(t),null}return{url:"",generated:!0,mediaKind:"model",coverage:"exact-seat",sourceLabel:this.tf("picker.chartDerivedModel","Chart-derived model")}}emitAnalytics(e,i){try{this.opts.onAnalytics?.(e,{...i,surface:"buyer"})}catch{}}emit3dAnalytics(e,i){this.emitAnalytics(e,i)}onView3dSeatPick(e){if(this.salesClosed){this.toast(this.tf("picker.salesClosedToast","Sales are closed for this event."),"warning"),this.syncSelectionTo3d();return}let i=this.allSeats().find(o=>o.id===e);if(!i)return;let t=this.controller.tableSelection(e);if(this.committedSelection().some(o=>t?o.label===t.label:o.id===e)){this.controller.deselect([e]),this.dismissConfirm(),this.syncSelectionTo3d();return}let n=this.controller.getStatus(i.id);if(n==="held"||n==="booked"||n==="not_for_sale"){this.showUnavailable3dSeat(i,this.seatState3dFor(i),n),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),t){this.showTableDialog(t,!1),this.syncSelectionTo3d();return}this.opts.confirmSelection!==!1?this.showConfirm(i):this.syncTray(),this.syncSelectionTo3d()}showUnavailable3dSeat(e,i,t){let s=this.view3dEl;if(!s)return;this.dismissUnavailable3dSeat();let n=this.controller.seatDetails(e.id),a=n?.displayLabel??e.displayLabel??e.label,o=n?.sectionLabel,l=te(n),c=[o,l?w("picker.rowLabel",{label:l}):null,a].filter(Boolean).join(" \xB7 "),h=t==="held"?{title:this.tf("picker.temporarilyHeld","Temporarily held"),message:this.tf("picker.heldSeatExplanation","Another buyer is holding this seat. It may become available again.")}:t==="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.")},p=document.createElement("div");p.className="sl-view3d-unavailable",p.dataset.state=i,p.setAttribute("role","status"),p.setAttribute("aria-live","polite");let d=document.createElement("span");d.className="sl-view3d-unavailable-eyebrow",d.textContent=c||a;let f=document.createElement("strong");f.textContent=h.title;let m=document.createElement("div");m.className="sl-view3d-unavailable-copy",m.append(d,f);let g=document.createElement("button");g.type="button",g.setAttribute("aria-label",this.tf("picker.closeSeatStatus","Close seat status")),g.textContent="\xD7";let T=document.createElement("p");T.textContent=h.message,p.append(m,g,T),g.addEventListener("click",()=>p.remove()),s.appendChild(p),this.announceSeat(e)}dismissUnavailable3dSeat(){this.view3dEl?.querySelector(".sl-view3d-unavailable")?.remove()}saveView3dComparisonSeat(e){if(this.buyerView!=="venue3d")return;let i=this.view3dCompareSeatIds;i.includes(e.id)||(this.view3dCompareSeatIds=i.length===0?[e.id]:[i[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 i=this.allSeats().find(f=>f.id===e);if(!i)return null;let t=this.controller.seatDetails(i.id),s=this.controller.doc?.categories.find(f=>f.key===i.categoryKey),n=t?.price??(s?.tiers?.length?s.tiers[0].price:s?.price),a=n!=null?this.paidPrice(i.categoryKey,t?.tierId??s?.tiers?.[0]?.id??null,n,i.label):void 0,o=this.controller.getStatus(i.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"),c=i.viewUrl?mi({url:i.viewUrl,...i.viewMeta?.coverage?{coverage:i.viewMeta.coverage}:{},...i.viewMeta?.capturedAt?{capturedAt:i.viewMeta.capturedAt}:{},...i.viewMeta?.sourceLabel?{sourceLabel:i.viewMeta.sourceLabel}:{}}):this.tf("picker.chartDerivedSeatEye","Live 3D \xB7 chart-derived seat-eye \xB7 not surveyed"),h=pe(i.commercial)||this.tf("picker.noAuthoredRestriction","No organizer-authored restriction"),p=t?.wheelchairSpaceType?`${ke(t.wheelchairSpaceType)} \xB7 metadata, not access certification`:this.tf("picker.noAccessibilityMetadata","No accessibility metadata supplied"),d=fi(i.confidenceEvidence);return{seat:i,label:t?.displayLabel??i.displayLabel??i.label,section:t?.sectionLabel??i.sectionId??"\u2014",row:te(t)??t?.rowLabel??"\u2014",category:t?.categoryLabel??s?.label??i.categoryKey,price:a==null?this.tf("picker.priceNotSupplied","Not supplied"):this.money(a),availability:l,selectable:o==null||o==="free",viewSource:c,limited:h,accessibility:p,confidence:d}}openSeatConfidencePassport(e,i=null){let t=this.view3dEl;if(!t)return;this.closeSeatConfidencePassport(!1);let s=fi(e.confidenceEvidence),n=e.confidenceEvidence,a=this.controller.seatDetails(e.id),o=v=>N(v),l=s.limitations.length?`<h4>Known limits</h4><ul>${s.limitations.map(v=>`<li>${o(v)}</li>`).join("")}</ul>`:"",c=s.modeledTarget?`<div><dt>Modeled target</dt><dd>${o(s.modeledTarget)}</dd></div>`:"",h=n?`<div><dt>Evidence ID</dt><dd>${o(n.evidenceId)}</dd></div><div><dt>Model version</dt><dd>${o(n.modelVersion)}</dd></div><div><dt>Event configuration</dt><dd>${o(n.eventConfigurationId??"Not configuration-specific")}</dd></div><div><dt>Approval</dt><dd>${o(n.approvedByRole??"No external approval supplied")}</dd></div>`+(n.validUntil?`<div><dt>Valid until</dt><dd>${o(n.validUntil.slice(0,10))}</dd></div>`:""):"<div><dt>Evidence ID</dt><dd>None supplied</dd></div>",p=pe(e.commercial)||this.tf("picker.noAuthoredRestriction","No organizer-authored restriction"),d=`<div><dt>View restriction</dt><dd>${o(p)}</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(a?.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>`+d+c+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([...t.children,...[...this.els.map.children].filter(v=>v!==t)])].filter(v=>v instanceof HTMLElement),g=m.map(v=>({element:v,inert:v.inert,ariaHidden:v.getAttribute("aria-hidden")}));for(let v of m)v.inert=!0,v.setAttribute("aria-hidden","true");t.appendChild(f),t.classList.add("has-passport"),this.view3dPassportEl=f;let T=f.querySelector(".sl-view3d-passport"),k=()=>[...T.querySelectorAll('button:not(:disabled),[href],[tabindex]:not([tabindex="-1"])')],x=v=>{if(v.key==="Escape"){v.preventDefault(),v.stopPropagation(),v.stopImmediatePropagation(),this.closeSeatConfidencePassport();return}if(v.key!=="Tab")return;let E=k();if(!E.length)return;let u=E[0],b=E[E.length-1];v.shiftKey&&document.activeElement===u?(v.preventDefault(),b.focus()):!v.shiftKey&&document.activeElement===b&&(v.preventDefault(),u.focus())};window.addEventListener("keydown",x,!0),this.view3dPassportCleanup=()=>{window.removeEventListener("keydown",x,!0);for(let b of g)b.element.inert=b.inert,b.ariaHidden===null?b.element.removeAttribute("aria-hidden"):b.element.setAttribute("aria-hidden",b.ariaHidden);let v=i?.isConnected?i:this.confirmEl?.querySelector(".sl-confirm-confidence")??this.view3dCompareEl?.querySelector("[data-passport-seat]")??null,E=v?.closest(".sl-confirm,.sl-view3d-compare");E?.isConnected&&(E.inert=!1,E.removeAttribute("aria-hidden")),f.remove(),t.classList.remove("has-passport"),this.view3dPassportEl===f&&(this.view3dPassportEl=null);let u=v??this.view3dCompareEl?.querySelector("[data-passport-seat]")??this.confirmEl?.querySelector(".sl-confirm-confidence")??this.view3dCompareChip.mainButton();(i?.isConnected?i:u)?.focus()},f.addEventListener("click",v=>{let E=v.target instanceof HTMLElement?v.target:null;(E?.closest("[data-close]")||E?.classList.contains("sl-view3d-passport-scrim"))&&this.closeSeatConfidencePassport()}),requestAnimationFrame(()=>k()[0]?.focus()),this.emit3dAnalytics("3d_confidence_passport_opened",{seatId:e.id,evidenceId:n?.evidenceId??null,eventConfigurationId:n?.eventConfigurationId??null,modelLevel:n?.modelLevel??"unverified",realityLevel:n?.realityLevel??"none"})}closeSeatConfidencePassport(e=!0){let i=this.view3dPassportCleanup;if(this.view3dPassportCleanup=null,!i){this.view3dPassportEl?.remove(),this.view3dPassportEl=null,this.view3dEl?.classList.remove("has-passport");return}e||(document.activeElement instanceof HTMLElement?document.activeElement:null)?.blur(),i(),e||this.root?.focus({preventScroll:!0})}openView3dComparison(){let e=this.view3dEl;if(!e||this.view3dCompareSeatIds.length<2)return;this.closeView3dComparison(!1);let i=this.view3dCompareSeatIds.map(d=>this.view3dComparisonSnapshot(d)).filter(d=>!!d);if(i.length<2){this.clearView3dComparison();return}let t=d=>N(d),s=document.createElement("div");s.className="sl-view3d-compare-shell";let n=i.map((d,f)=>`<article><span>Seat ${f===0?"A":"B"}</span><strong>${t(d.label)}</strong><small>Section ${t(d.section)} \xB7 Row ${t(d.row)}</small><dl><div><dt>Current price</dt><dd>${t(d.price)}</dd></div><div><dt>Ticket type</dt><dd>${t(d.category)}</dd></div><div><dt>Availability</dt><dd>${t(d.availability)}</dd></div><div><dt>View source</dt><dd>${t(d.viewSource)}</dd></div><div><dt>View restriction</dt><dd>${t(d.limited)}</dd></div><div><dt>Seat confidence</dt><dd>${t(d.confidence.headline)}</dd></div><div><dt>Reality check</dt><dd>${t(d.confidence.reality)}</dd></div><div><dt>Accessibility</dt><dd>${t(d.accessibility)}</dd></div></dl><div class="sl-view3d-compare-actions"><button type="button" data-passport-seat="${t(d.seat.id)}">Passport</button><button type="button" data-view-seat="${t(d.seat.id)}">View seat</button><button type="button" class="select" data-select-seat="${t(d.seat.id)}"${d.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">${n}</div></section>`;let a=document.activeElement instanceof HTMLElement?document.activeElement:null,o=[...e.children].filter(d=>d instanceof HTMLElement),l=o.map(d=>({element:d,inert:d.inert,ariaHidden:d.getAttribute("aria-hidden")}));for(let d of o)d.inert=!0,d.setAttribute("aria-hidden","true");e.appendChild(s),e.classList.add("has-comparison"),this.view3dCompareEl=s;let c=s.querySelector(".sl-view3d-compare"),h=()=>[...c.querySelectorAll('button:not(:disabled),[href],[tabindex]:not([tabindex="-1"])')],p=d=>{if(d.key==="Escape"){d.preventDefault(),this.closeView3dComparison();return}if(d.key!=="Tab")return;let f=h();if(!f.length)return;let m=f[0],g=f[f.length-1];d.shiftKey&&document.activeElement===m?(d.preventDefault(),g.focus()):!d.shiftKey&&document.activeElement===g&&(d.preventDefault(),m.focus())};window.addEventListener("keydown",p),this.view3dCompareCleanup=()=>{window.removeEventListener("keydown",p);for(let d of l)d.element.inert=d.inert,d.ariaHidden===null?d.element.removeAttribute("aria-hidden"):d.element.setAttribute("aria-hidden",d.ariaHidden);s.remove(),e.classList.remove("has-comparison"),this.view3dCompareEl===s&&(this.view3dCompareEl=null),a?.isConnected?a.focus():this.view3dCompareChip.mainButton()?.focus()},s.querySelector("[data-close]")?.addEventListener("click",()=>this.closeView3dComparison()),s.querySelectorAll("[data-passport-seat]").forEach(d=>d.addEventListener("click",()=>{let f=d.dataset.passportSeat,m=f?this.allSeats().find(g=>g.id===f):void 0;m&&this.openSeatConfidencePassport(m,d)})),s.querySelectorAll("[data-view-seat]").forEach(d=>d.addEventListener("click",()=>{let f=d.dataset.viewSeat;this.closeView3dComparison(!1),f&&this.view3dHandle?.flyToSeat(f)})),s.querySelectorAll("[data-select-seat]").forEach(d=>d.addEventListener("click",()=>{let f=d.dataset.selectSeat;f&&this.selectComparedSeat(f)})),requestAnimationFrame(()=>h()[0]?.focus()),this.emit3dAnalytics("3d_comparison_opened",{seatIds:this.view3dCompareSeatIds.slice()})}closeView3dComparison(e=!0){let i=this.view3dCompareCleanup;if(this.view3dCompareCleanup=null,!i){this.view3dCompareEl?.remove(),this.view3dCompareEl=null,this.view3dEl?.classList.remove("has-comparison");return}e||(document.activeElement instanceof HTMLElement?document.activeElement:null)?.blur(),i(),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 i=this.allSeats().find(s=>s.id===e);if(!i)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(i),this.emit3dAnalytics("3d_comparison_selected",{seatId:e})}async enter3d(e){if(this.view3dEl||!this.canOffer3d()||!this.els.map)return;let i=this.controller.doc;if(!i)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 t=document.createElement("div");t.className="sl-view3d",t.setAttribute("role","group"),t.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 n=s.querySelector("span"),a=h=>{this.view3dTargetSeatId=h;let p=!!h;t.classList.toggle("is-seat-focused",p);let d=p?this.tf("picker.backToVenue","Back to venue"):this.tf("picker.backToMap","Back to map");n&&(n.textContent=d),s.setAttribute("aria-label",d)};s.addEventListener("click",()=>{if(this.view3dTargetSeatId&&this.view3dHandle){this.view3dHandle.focusOverview();return}this.exit3d()}),t.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()),t.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"),t.appendChild(l),this.els.map.appendChild(t),this.view3dEl=t,this.view3dCompareChip.sync(),requestAnimationFrame(()=>{t.style.opacity="1"});let c=++this.view3dGen;try{let h=st(i),p=await Kt();if(c!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==t)return;let d=await p.prepareVenue3D({doc:i,seats:h});if(c!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==t)return;let f=p.mountVenue3D(t,{doc:i,seats:h,prepared:d},{portraitOverviewCrop:!0,arriveAtSeatEye:!0,seatViewActionLabel:m=>this.allSeats().find(g=>g.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 g=t.querySelector('select[data-locator="section"]'),T=m??"";!g||g.value===T||(g.value=T,g.dispatchEvent(new Event("change")))},onViewTargetChange:m=>{t.querySelector(".sl-view3d-nav")?.classList.toggle("is-seat-focused",!!m),a(m),this.opts.onBuyerViewChange?.({view:"venue3d",...m?{seatId:m}:{}})},getSeatView:m=>new Promise((g,T)=>{let k=()=>{this.seatViewFor3d(m).then(v=>{v?g(v):T(new Error("seat_view_unavailable"))})},x=globalThis.requestIdleCallback;typeof x=="function"?x(k,{timeout:1500}):setTimeout(k,50)}),onAnalytics:(m,g)=>this.emit3dAnalytics(m,g)});this.view3dHandle=f,l.remove(),this.pushAvailabilityTo3d(),this.syncSelectionTo3d(),ni(t,f),e&&f.flyToSeat(e)}catch(h){if(c!==this.view3dGen||this.buyerView!=="venue3d"||this.view3dEl!==t)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 i=this.view3dReturnSeat;this.view3dReturnSeat=null,i&&this.committedSelection().some(t=>t.id===i.id)&&this.opts.confirmSelection!==!1&&this.showConfirm(i)}getCurrentHold(){return this.hold}async resumeHold(e){return this.resumeHoldFromServer(e,!1)}async removeHeldTicket(e){return this.removeHeldLabels([e])}async bestAvailable(e,i,t={}){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 n=await this.controller.bestAvailable(e,i,{...t,ttlMs:this.opts.holdTtlMs});return n?(this.hold={holdId:n.holdId,expiresAt:n.expiresAt,seats:n.seats,items:n.items},this.handedOff=!1,this.bookedShown=!1,this.gaQty.clear(),this.startHoldTimer(n.expiresAt),this.flashHeldSeats(this.hold),this.syncTray(),this.emitHoldChange(),t.preferPremium&&n.seats.length&&!n.seats.every(a=>a.commercial?.premium)&&this.toast(w("picker.premiumFallbackNote",{count:e}),"neutral"),this.hold):null}catch(n){this.opts.onError?.(n);let a=n?.reason,o=a==="not_enough_together"?w("picker.couldNotFindSeatsTogether",{count:e}):a==="companion_pair_required"?this.tf("picker.companionPairRequired","Select the adjacent wheelchair place with each companion ticket."):a==="ticket_option_not_applicable"?this.tf("picker.ticketOptionNotApplicable","That ticket choice is not available for the selected seat."):a==="sold_out"?this.tf("picker.ticketTypeSoldOut","That ticket type is sold out. Try another ticket type."):a==="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,i=this.controller.currentHold(),t=!0;if(i)t=await this.controller.release();else if(e){let s=[...new Set([...(e.items??[]).map(n=>n.label),...(e.seats??[]).map(n=>n.label)])];if(s.length)try{await this.api.release(this.opts.event,s,e.holdId)}catch(n){this.opts.onError?.(n),t=!1}}if(!t){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 _({url:this.pubApi.subscribeUrl(e),mintTicket:()=>this.pubApi.subscribeTicket(e),onAccessUnavailable:i=>{this.opts.onAccessUnavailable?.(i),this.showAccessPanel(i)},sink:he(this.controller,{flashOnLiveChange:!0,onStatusChange:()=>{this.syncPrices(),this.scheduleOfferRefresh(!0),this.detectBooked(),this.minimap?.refreshMinimap(),this.pushAvailabilityTo3d()},onSelectedObjectUnavailable:(i,t)=>{this.opts.onSelectedObjectUnavailable?.({labels:i,reason:t}),this.syncTray(),this.toast(t==="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 i=this.accessCopy(e.reason);this.dismissAccessPanel();let t=document.createElement("div");t.className="sl-access",t.setAttribute("role","status"),t.setAttribute("aria-live","polite");let s=document.createElement("div"),n=document.createElement("div");n.className="sl-access-title",n.textContent=i.title;let a=document.createElement("div");if(a.className="sl-access-body",a.textContent=i.body,s.appendChild(n),s.appendChild(a),i.action){let o=document.createElement("button");o.type="button",o.className="sl-access-act",o.textContent=i.action,o.addEventListener("click",()=>{this.refreshAccess()}),s.appendChild(o)}t.appendChild(s),(this.regions?.["bottom-center"]??this.root).appendChild(t),this.accessEl=t}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),U(this,!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 qs(r,e={}){let i=e.origin??"";if(!i)try{i=new URL(r.src,window.location.href).origin}catch{i=""}let t=!1,s=null,n=null,a=null,o="",l=null,c=()=>{if(t)return;t=!0,s=r.getAttribute("style"),Object.assign(r.style,{position:"fixed",inset:"0",width:"100vw",height:"100vh",margin:"0",border:"0",zIndex:"2147483000",background:"#101625"});let d=document.documentElement;n=d.style.overflow,d.style.overflow="hidden",document.body&&(a=document.body.style.overflow,document.body.style.overflow="hidden"),l=f=>{f.key==="Escape"&&h()},window.addEventListener("keydown",l)},h=()=>{t&&(t=!1,s===null?r.removeAttribute("style"):r.setAttribute("style",s),s=null,o&&(r.style.height=o),n!==null&&(document.documentElement.style.overflow=n,n=null),a!==null&&document.body&&(document.body.style.overflow=a,a=null),l&&(window.removeEventListener("keydown",l),l=null))},p=d=>{if(d.source!==r.contentWindow||i&&d.origin!==i||!d.data||typeof d.data!="object")return;let f=d.data;if(f.type==="seatlayer:height"){typeof f.px=="number"&&Number.isFinite(f.px)&&f.px>0&&(o=`${Math.round(f.px)}px`,t||(r.style.height=o));return}f.type==="seatlayer:fullscreen"&&(f.on===!0?c():f.on===!1&&h())};return window.addEventListener("message",p),()=>{window.removeEventListener("message",p),h()}}export{se as ApiError,Ee as BuyerAccessContext,ue as BuyerAccessUnavailableError,_ as BuyerRealtimeClient,_e as EmbeddedDesigner,Rt as SEATING_CHART_CALLBACK_PROPS,Pt as SEATING_CHART_HANDLE_METHODS,Mt as SEATING_CHART_IDENTITY_PROPS,Ht as SEATING_CHART_VALUE_PROPS,rt as SeatPicker,Ve as SeatingChart,qs as attachPickerFrame,qi as bindSeatingChartHandle,Ui as buildSeatingChartOptions,ve as createBuyerAccessContext,he as createControllerSink,Ue as parseTicketOfferAvailability,Ge as ticketOfferPrices};