@session-services/web-elements 0.1.22 → 0.1.24
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/cjs/session-services-ticketing.cjs.entry.js +51 -24
- package/dist/collection/components/session-services-ticketing/session-services-ticketing.css +101 -60
- package/dist/collection/components/session-services-ticketing/session-services-ticketing.js +46 -17
- package/dist/collection/components/session-services-ticketing/session-services-ticketing.test.js +72 -2
- package/dist/components/session-services-ticketing.js +51 -24
- package/dist/esm/session-services-ticketing.entry.js +51 -24
- package/dist/session-services-elements/{p-94173d1b.entry.js → p-f40762bb.entry.js} +1 -1
- package/dist/session-services-elements/session-services-elements.esm.js +1 -1
- package/dist/types/components/session-services-ticketing/session-services-ticketing.d.ts +2 -0
- package/package.json +4 -4
package/dist/collection/components/session-services-ticketing/session-services-ticketing.test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it, vi } from "vitest";
|
|
2
2
|
import { SessionsTicketing } from "./session-services-ticketing";
|
|
3
|
-
import { selectionKey, } from "./session-services-ticketing.logic";
|
|
3
|
+
import { getTicketingState, selectionKey, } from "./session-services-ticketing.logic";
|
|
4
4
|
vi.mock("@stencil/core", () => ({
|
|
5
5
|
Component: () => () => undefined,
|
|
6
6
|
Element: () => () => undefined,
|
|
@@ -9,7 +9,7 @@ vi.mock("@stencil/core", () => ({
|
|
|
9
9
|
Prop: () => () => undefined,
|
|
10
10
|
State: () => () => undefined,
|
|
11
11
|
Watch: () => () => undefined,
|
|
12
|
-
h: () =>
|
|
12
|
+
h: (tag, props, ...children) => ({ tag, props: props ?? {}, children }),
|
|
13
13
|
}));
|
|
14
14
|
const futureStart = "2030-01-01T20:00:00";
|
|
15
15
|
const futureEnd = "2030-01-01T23:00:00";
|
|
@@ -115,10 +115,32 @@ function deferred() {
|
|
|
115
115
|
});
|
|
116
116
|
return { promise, resolve };
|
|
117
117
|
}
|
|
118
|
+
function isRenderNode(value) {
|
|
119
|
+
if (!value || typeof value !== "object")
|
|
120
|
+
return false;
|
|
121
|
+
return "tag" in value && "props" in value && "children" in value;
|
|
122
|
+
}
|
|
123
|
+
function rendered(value, predicate) {
|
|
124
|
+
if (Array.isArray(value)) {
|
|
125
|
+
return value.flatMap((item) => rendered(item, predicate));
|
|
126
|
+
}
|
|
127
|
+
if (!isRenderNode(value))
|
|
128
|
+
return [];
|
|
129
|
+
const matches = predicate(value) ? [value] : [];
|
|
130
|
+
return matches.concat(value.children.flatMap((item) => rendered(item, predicate)));
|
|
131
|
+
}
|
|
132
|
+
function hasClass(node, name) {
|
|
133
|
+
return String(node.props.class ?? "")
|
|
134
|
+
.split(/\s+/)
|
|
135
|
+
.includes(name);
|
|
136
|
+
}
|
|
118
137
|
function widget() {
|
|
119
138
|
const item = new SessionsTicketing();
|
|
120
139
|
item.eventId = "evt_1";
|
|
121
140
|
item.event = event();
|
|
141
|
+
item.host = {
|
|
142
|
+
getBoundingClientRect: () => ({ top: 0 }),
|
|
143
|
+
};
|
|
122
144
|
item.selectedItems = new Map();
|
|
123
145
|
item.quote = null;
|
|
124
146
|
item.previewQuote = null;
|
|
@@ -131,6 +153,7 @@ function widget() {
|
|
|
131
153
|
item.quoteLoading = false;
|
|
132
154
|
item.previewLoading = false;
|
|
133
155
|
item.passcodeDenied = false;
|
|
156
|
+
item.stickyCheckout = false;
|
|
134
157
|
item.error = null;
|
|
135
158
|
item.activePasscode = "";
|
|
136
159
|
item.cartUpdate = { emit: vi.fn() };
|
|
@@ -246,6 +269,53 @@ describe("session-services-ticketing component", () => {
|
|
|
246
269
|
});
|
|
247
270
|
expect(item.getCheckoutButtonText()).toBe("Continue");
|
|
248
271
|
});
|
|
272
|
+
it("renders external ticketing in the sticky checkout bar", () => {
|
|
273
|
+
const item = widget();
|
|
274
|
+
item.event = event({ url: "https://tickets.example" });
|
|
275
|
+
item.stickyCheckout = true;
|
|
276
|
+
const state = getTicketingState(item.event);
|
|
277
|
+
const links = rendered(item.renderStickyExternalTicketing(state), (node) => node.tag === "a");
|
|
278
|
+
expect(links).toHaveLength(1);
|
|
279
|
+
expect(links[0].props.href).toBe("https://tickets.example");
|
|
280
|
+
expect(hasClass(links[0], "external-ticket-button")).toBe(true);
|
|
281
|
+
expect(hasClass(links[0], "sticky-checkout-btn")).toBe(true);
|
|
282
|
+
expect(rendered(links[0], (node) => node.tag === "span" &&
|
|
283
|
+
hasClass(node, "external-ticket-domain") &&
|
|
284
|
+
node.children.join("") === "via tickets.example")).toHaveLength(1);
|
|
285
|
+
});
|
|
286
|
+
it("keeps external ticketing under the sticky checkout host state", () => {
|
|
287
|
+
const item = widget();
|
|
288
|
+
item.event = event({ url: "https://tickets.example" });
|
|
289
|
+
item.stickyCheckout = true;
|
|
290
|
+
const view = item.renderReadyState();
|
|
291
|
+
const hosts = rendered(view, (node) => node.tag === "mock-host");
|
|
292
|
+
const links = rendered(view, (node) => node.tag === "a");
|
|
293
|
+
expect(getTicketingState(item.event).showExternalTicketing).toBe(true);
|
|
294
|
+
expect(hosts[0].props["data-sticky-checkout"]).toBe("true");
|
|
295
|
+
expect(links).toHaveLength(2);
|
|
296
|
+
expect(links.some((link) => hasClass(link, "inline-external-ticket-button"))).toBe(true);
|
|
297
|
+
expect(links.some((link) => hasClass(link, "sticky-checkout-btn"))).toBe(true);
|
|
298
|
+
});
|
|
299
|
+
it("scrolls to the ticket selector with a 100px top offset", () => {
|
|
300
|
+
const item = widget();
|
|
301
|
+
const scrollTo = vi.fn();
|
|
302
|
+
const tickets = {
|
|
303
|
+
getBoundingClientRect: () => ({ top: 420 }),
|
|
304
|
+
};
|
|
305
|
+
item.host = {
|
|
306
|
+
shadowRoot: {
|
|
307
|
+
querySelector: vi.fn().mockReturnValue(tickets),
|
|
308
|
+
},
|
|
309
|
+
getBoundingClientRect: () => ({ top: 900 }),
|
|
310
|
+
};
|
|
311
|
+
vi.stubGlobal("window", { scrollY: 250, scrollTo });
|
|
312
|
+
item.handleStickyCheckoutClick(getTicketingState(item.event));
|
|
313
|
+
expect(scrollTo).toHaveBeenCalledWith({
|
|
314
|
+
behavior: "smooth",
|
|
315
|
+
top: 570,
|
|
316
|
+
});
|
|
317
|
+
vi.unstubAllGlobals();
|
|
318
|
+
});
|
|
249
319
|
it("classifies only passcode access failures as passcode errors", async () => {
|
|
250
320
|
const item = widget();
|
|
251
321
|
item.client.event.get = vi
|
|
@@ -23611,21 +23611,20 @@ const sessionServicesTicketingCss = () => `:host{--background:transparent;--fore
|
|
|
23611
23611
|
in srgb,
|
|
23612
23612
|
oklch(0.21 0.006 285.885) 80%,
|
|
23613
23613
|
oklch(0.141 0.005 285.823)
|
|
23614
|
-
);--card-foreground:oklch(0.967 0.001 286.375);--popover:oklch(0.21 0.006 285.885);--popover-foreground:oklch(0.967 0.001 286.375);--primary:oklch(0.537 0.1554 255);--primary-foreground:oklch(0.985 0 0);--secondary:oklch(1 0 0 / 6%);--secondary-foreground:oklch(0.967 0.001 286.375);--muted:oklch(1 0 0 / 6%);--muted-foreground:oklch(0.705 0.015 286.067);--accent:oklch(1 0 0 / 6%);--accent-foreground:oklch(0.967 0.001 286.375);--destructive:oklch(0.637 0.237 25.331);--destructive-foreground:oklch(0.704 0.191 22.216);--border:oklch(1 0 0 / 12%);--input:oklch(1 0 0 / 12%);--ring:oklch(0.552 0.016 285.938);--success:oklch(0.696 0.17 162.48);--warning:oklch(0.769 0.188 70.08);--info:oklch(0.623 0.214 259.815);--info-foreground:oklch(0.707 0.165 254.624)}.tickets-wrapper{padding:0;width:100%}.tickets-heading{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);margin:0 0 var(--internal-spacing-md)}.
|
|
23615
|
-
var(--internal-spacing-lg);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-bold);
|
|
23616
|
-
var(--internal-spacing-sm);background:var(--internal-card);color:var(--internal-foreground);border-radius:calc(var(--internal-radius) - 2px);font:inherit}.passcode-form input:disabled{opacity:0.6;cursor:not-allowed}.ticket-section{background:var(--internal-card);border-radius:var(--internal-radius);margin:0 0 var(--internal-spacing-lg) 0;overflow:hidden;width:100%;transition:all var(--internal-transition-base)}.tickets-wrapper>.ticket-section:last-child{margin-bottom:0}.ticket-section.section-sold-out{position:relative}.ticket-section.section-sold-out .section-header{padding-bottom:var(--internal-spacing-md)}.ticket-section.section-sold-out .section-name,.ticket-section.section-sold-out .section-time,.ticket-section.section-sold-out .section-venue{opacity:0.8}.ticket-section.section-sold-out .admissions-list{opacity:0.6;pointer-events:none;filter:grayscale(0.3)}.ticket-section.section-sold-out .admission-card{background:var(--internal-card)}.ticket-section.section-sold-out .quantity-controls,.ticket-section.section-sold-out .sold-out-controls{opacity:0.7}.section-header{padding:var(--internal-spacing-md) var(--internal-spacing-lg);border-bottom:1px solid var(--internal-border);background:var(--internal-card)}.section-name{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);letter-spacing:-0.025em;margin:0 0 var(--internal-spacing-xs) 0;display:flex;align-items:center;gap:var(--internal-spacing-sm)}.section-time,.section-venue{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);display:flex;align-items:center;gap:var(--internal-spacing-xs)}.section-time,.admission-time{margin-bottom:var(--internal-spacing-xs)}.section-time svg,.section-venue svg,.admission-time svg,.admission-venue svg{width:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs));height:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs));flex-shrink:0;opacity:0.8}.admissions-list{padding:0}.admission-card{border-bottom:1px solid var(--internal-border);padding:var(--internal-spacing-md) var(--internal-spacing-lg);position:relative;transition:background-color var(--internal-transition-base);cursor:default}.admission-card:focus-visible{outline:2px solid var(--internal-ring);outline-offset:-2px;z-index:1}.admission-card.sold-out{background:var(--internal-card)}.admission-card.unavailable{opacity:0.72}.admission-card.sold-out .admission-price{opacity:0.5}.admission-card:last-child{border-bottom:none}.admission-content{display:flex;justify-content:space-between;align-items:center}.admission-details{flex:1}.admission-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--internal-spacing-md);margin-bottom:var(--internal-spacing-sm)}.admission-header-text{flex:1;min-width:0}.admission-title{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);margin-bottom:0;display:flex;align-items:center;gap:var(--internal-spacing-sm)}.admission-subtitle{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);margin-top:var(--internal-spacing-xs);line-height:1.4}.more-info-badge{display:inline-flex;align-items:center;gap:calc(var(--internal-spacing-xs) * 1.5);padding:calc(var(--internal-spacing-xs) * 1.5) var(--internal-spacing-sm);background:oklch(from var(--internal-info) l c h / 0.08);color:var(--internal-info-foreground);border-radius:calc(var(--internal-radius) - 2px);font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);cursor:pointer;transition:all var(--internal-transition-fast);white-space:nowrap;flex-shrink:0}.more-info-badge:hover{background:oklch(from var(--internal-info) l c h / 0.16)}.more-info-badge:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.more-info-badge svg{flex-shrink:0}.admission-time,.admission-venue{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);display:flex;align-items:center;gap:var(--internal-spacing-xs)}.admission-venue{margin-bottom:var(--internal-spacing-sm)}.solo-admission .admission-content{flex-direction:column;align-items:stretch}.solo-admission .admission-details{width:100%}.solo-admission .admission-price-info{margin-top:var(--internal-spacing-md);display:flex;justify-content:space-between;align-items:center;width:100%}.solo-admission .quantity-controls{margin-left:auto;flex-shrink:0}.
|
|
23614
|
+
);--card-foreground:oklch(0.967 0.001 286.375);--popover:oklch(0.21 0.006 285.885);--popover-foreground:oklch(0.967 0.001 286.375);--primary:oklch(0.537 0.1554 255);--primary-foreground:oklch(0.985 0 0);--secondary:oklch(1 0 0 / 6%);--secondary-foreground:oklch(0.967 0.001 286.375);--muted:oklch(1 0 0 / 6%);--muted-foreground:oklch(0.705 0.015 286.067);--accent:oklch(1 0 0 / 6%);--accent-foreground:oklch(0.967 0.001 286.375);--destructive:oklch(0.637 0.237 25.331);--destructive-foreground:oklch(0.704 0.191 22.216);--border:oklch(1 0 0 / 12%);--input:oklch(1 0 0 / 12%);--ring:oklch(0.552 0.016 285.938);--success:oklch(0.696 0.17 162.48);--warning:oklch(0.769 0.188 70.08);--info:oklch(0.623 0.214 259.815);--info-foreground:oklch(0.707 0.165 254.624)}.tickets-wrapper{padding:0;width:100%}.tickets-heading{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);margin:0 0 var(--internal-spacing-md)}.ticket-section.loading-ticket-section{overflow:visible;background:transparent;border:0;box-shadow:none}.loading-ticket-section .admissions-list{display:flex;flex-direction:column;gap:var(--internal-spacing-sm)}.admission-card.loading-admission{min-height:5.25rem;padding:0;background:oklch(from var(--internal-foreground) l c h / 0.07);border:0;border-radius:var(--internal-radius);box-shadow:none;pointer-events:none;animation:loading-card 1.6s ease-out infinite}@keyframes loading-card{0%,100%{opacity:0.48}50%{opacity:0.74}}.passcode-form,.passcode-form input,.ticket-section,.more-info-badge,.quantity-controls,.sold-out-controls,.coupon-row,.coupon-apply,.coupon-remove{border:1px solid var(--internal-input);box-shadow:var(--internal-shadow-edge-light)}.external-ticket-button,.checkout-btn{display:inline-flex;align-items:center;justify-content:center;background:var(--internal-primary);color:var(--internal-primary-foreground);border:1px solid oklch(from var(--internal-primary) calc(l - 0.08) c h);border-radius:calc(var(--internal-radius) - 2px);cursor:pointer;box-shadow:var(--internal-shadow-edge-light);transition:all var(--internal-transition-fast)}.external-ticket-button:hover,.checkout-btn:hover:not(:disabled){background:oklch(from var(--internal-primary) calc(l - 0.08) c h);transform:translateY(-1px)}.external-ticket-button:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.passcode-form{display:flex;flex-direction:column;gap:var(--internal-spacing-sm);padding:var(--internal-spacing-lg);margin-bottom:var(--internal-spacing-md);background:var(--internal-card);border-radius:var(--internal-radius)}.passcode-form h2{color:var(--internal-foreground);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-semibold);line-height:1.3}.passcode-form p{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);line-height:1.5}.door-alert,.empty-ticketing-state,.message-state{display:flex;flex-direction:column;gap:calc(var(--internal-spacing-xs) * 1.5);margin-bottom:var(--internal-spacing-md);padding:0;background:transparent;border:none;border-radius:0;box-shadow:none}.door-alert strong,.empty-ticketing-state strong,.message-state strong{color:var(--internal-foreground);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-semibold);line-height:1.3}.door-alert span,.empty-ticketing-state span,.message-state span{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);line-height:1.4}.external-ticket-button{flex-direction:column;gap:calc(var(--internal-spacing-xs) * 0.5);width:100%;padding:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs))
|
|
23615
|
+
var(--internal-spacing-lg);text-decoration:none}.external-ticket-panel{display:flex;flex-direction:column;gap:var(--internal-spacing-md)}.external-ticket-warning{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);font-weight:var(--internal-font-weight-medium);line-height:1.35}.external-ticket-label{font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-bold);line-height:1.2}.external-ticket-domain{font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);line-height:1.2;opacity:0.82}.passcode-form input{width:100%;min-width:0;padding:calc(var(--internal-spacing-sm) + 0.125rem)
|
|
23616
|
+
var(--internal-spacing-sm);background:var(--internal-card);color:var(--internal-foreground);border-radius:calc(var(--internal-radius) - 2px);font:inherit}.passcode-form input:disabled{opacity:0.6;cursor:not-allowed}.ticket-section{background:var(--internal-card);border-radius:var(--internal-radius);margin:0 0 var(--internal-spacing-lg) 0;overflow:hidden;width:100%;transition:all var(--internal-transition-base)}.tickets-wrapper>.ticket-section:last-child{margin-bottom:0}.ticket-section.section-sold-out{position:relative}.ticket-section.section-sold-out .section-header{padding-bottom:var(--internal-spacing-md)}.ticket-section.section-sold-out .section-name,.ticket-section.section-sold-out .section-time,.ticket-section.section-sold-out .section-venue{opacity:0.8}.ticket-section.section-sold-out .admissions-list{opacity:0.6;pointer-events:none;filter:grayscale(0.3)}.ticket-section.section-sold-out .admission-card{background:var(--internal-card)}.ticket-section.section-sold-out .quantity-controls,.ticket-section.section-sold-out .sold-out-controls{opacity:0.7}.section-header{padding:var(--internal-spacing-md) var(--internal-spacing-lg);border-bottom:1px solid var(--internal-border);background:var(--internal-card)}.section-name{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);letter-spacing:-0.025em;margin:0 0 var(--internal-spacing-xs) 0;display:flex;align-items:center;gap:var(--internal-spacing-sm)}.section-time,.section-venue{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);display:flex;align-items:center;gap:var(--internal-spacing-xs)}.section-time,.admission-time{margin-bottom:var(--internal-spacing-xs)}.section-time svg,.section-venue svg,.admission-time svg,.admission-venue svg{width:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs));height:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs));flex-shrink:0;opacity:0.8}.admissions-list{padding:0}.admission-card{border-bottom:1px solid var(--internal-border);padding:var(--internal-spacing-md) var(--internal-spacing-lg);position:relative;transition:background-color var(--internal-transition-base);cursor:default}.admission-card:focus-visible{outline:2px solid var(--internal-ring);outline-offset:-2px;z-index:1}.admission-card.sold-out{background:var(--internal-card)}.admission-card.unavailable{opacity:0.72}.admission-card.sold-out .admission-price{opacity:0.5}.admission-card:last-child{border-bottom:none}.admission-content{display:flex;justify-content:space-between;align-items:center}.admission-details{flex:1}.admission-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--internal-spacing-md);margin-bottom:var(--internal-spacing-sm)}.admission-header-text{flex:1;min-width:0}.admission-title{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);margin-bottom:0;display:flex;align-items:center;gap:var(--internal-spacing-sm)}.admission-subtitle{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);margin-top:var(--internal-spacing-xs);line-height:1.4}.more-info-badge{display:inline-flex;align-items:center;gap:calc(var(--internal-spacing-xs) * 1.5);padding:calc(var(--internal-spacing-xs) * 1.5) var(--internal-spacing-sm);background:oklch(from var(--internal-info) l c h / 0.08);color:var(--internal-info-foreground);border-radius:calc(var(--internal-radius) - 2px);font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);cursor:pointer;transition:all var(--internal-transition-fast);white-space:nowrap;flex-shrink:0}.more-info-badge:hover{background:oklch(from var(--internal-info) l c h / 0.16)}.more-info-badge:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.more-info-badge svg{flex-shrink:0}.admission-time,.admission-venue{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);display:flex;align-items:center;gap:var(--internal-spacing-xs)}.admission-venue{margin-bottom:var(--internal-spacing-sm)}.solo-admission .admission-content{flex-direction:column;align-items:stretch}.solo-admission .admission-details{width:100%}.solo-admission .admission-price-info{margin-top:var(--internal-spacing-md);display:flex;justify-content:space-between;align-items:center;width:100%}.solo-admission .quantity-controls{margin-left:auto;flex-shrink:0}.admission-price-info{display:flex;align-items:center;justify-content:space-between;gap:var(--internal-spacing-sm);margin-bottom:var(--internal-spacing-sm);width:100%}.admission-price-wrapper{display:flex;flex-direction:column;row-gap:calc(var(--internal-spacing-xs) * 0.5)}.admission-price{color:var(--internal-foreground);font-size:var(--internal-font-size-xl);font-weight:var(--internal-font-weight-bold);letter-spacing:-0.025em;line-height:1.1}.admission-price-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--internal-spacing-sm)}.admission-price-original{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-base);text-decoration:line-through}.admission-booking-fee{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);line-height:1.2}.admission-savings,.admission-availability{font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);line-height:1.2}.admission-savings{color:var(--internal-success)}.admission-availability{color:var(--internal-warning)}.admission-sale-label{display:block;margin-top:var(--internal-spacing-xs);color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);font-weight:var(--internal-font-weight-medium);line-height:1.35}.admission-sale-label.success{color:var(--internal-success)}.quantity-controls{display:inline-flex;align-items:center;gap:0;background:var(--internal-secondary);border-radius:calc(var(--internal-radius) - 2px);overflow:hidden;transition:all var(--internal-transition-fast)}.quantity-controls:has(.quantity-value:focus-visible){box-shadow:0 0 0 2px var(--internal-ring)}.quantity-btn{width:calc(var(--internal-spacing-lg) * 1.5);height:calc(var(--internal-spacing-lg) * 1.5);border:none;background:transparent;color:var(--internal-muted-foreground);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-medium);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--internal-transition-fast);position:relative}.quantity-btn:focus-visible{outline:2px solid var(--internal-ring);outline-offset:-2px;z-index:1}.quantity-btn:hover:not(:disabled){background:var(--internal-accent);color:var(--internal-accent-foreground)}.quantity-btn:active:not(:disabled){transform:scale(0.95)}.quantity-btn:disabled{opacity:0.6;cursor:not-allowed;background:var(--internal-secondary);color:var(--internal-muted-foreground);border-color:var(--internal-border)}.quantity-btn.decrease{border-right:1px solid var(--internal-input)}.quantity-btn.increase{border-left:1px solid var(--internal-input)}.quantity-value{appearance:textfield;width:2.75rem;height:calc(var(--internal-spacing-lg) * 1.5);border:none;background:transparent;min-width:2.5rem;text-align:center;font-size:var(--internal-font-size-sm);font-weight:var(--internal-font-weight-semibold);color:var(--internal-foreground);padding:0 var(--internal-spacing-xs)}.quantity-value:focus-visible{outline:none}.quantity-value::-webkit-inner-spin-button,.quantity-value::-webkit-outer-spin-button{appearance:none;margin:0}.quantity-value:disabled{opacity:0.6;cursor:not-allowed}.sold-out-controls{display:inline-flex;align-items:center;justify-content:center;min-width:calc(var(--internal-spacing-lg) * 1.5 * 2 + 2.5rem);height:calc(var(--internal-spacing-lg) * 1.5);padding:0;background:transparent;border:none;box-shadow:none}.sold-out-controls,.sold-out-text{color:var(--internal-destructive);font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);letter-spacing:0.025em;text-transform:uppercase}.sold-out-controls.success,.sold-out-controls.success .sold-out-text{color:var(--internal-success)}.checkout-actions{margin:var(--internal-spacing-lg) 0 0 0;width:100%}.coupon-panel{margin-bottom:var(--internal-spacing-md)}.coupon-row{position:relative;display:flex;align-items:center;width:100%;min-width:0;overflow:hidden;background:var(--internal-background);background-clip:padding-box;border-radius:var(--internal-radius);transition:border-color var(--internal-transition-fast)}.coupon-row:focus-within{border-color:var(--internal-ring)}.coupon-row:has(input[aria-invalid="true"]){border-color:var(--internal-destructive)}.coupon-row:has(input:disabled){opacity:0.64}.coupon-row input{width:100%;min-width:0;padding:calc(var(--internal-spacing-sm) - 1px)
|
|
23617
23617
|
calc(var(--internal-spacing-xl) * 2.75)
|
|
23618
23618
|
calc(var(--internal-spacing-sm) - 1px)
|
|
23619
23619
|
calc(var(--internal-spacing-md) - 1px);background:var(--internal-card);color:var(--internal-foreground);border:none;border-radius:inherit;font:inherit;font-size:var(--internal-font-size-sm);line-height:1.25rem;outline:none}.coupon-row input::placeholder{color:oklch(from var(--internal-muted-foreground) l c h / 0.64)}.coupon-row input:disabled{cursor:not-allowed}.coupon-apply,.coupon-remove{position:absolute;right:calc((var(--internal-spacing-xs) * 1.5) - 3px);top:50%;transform:translateY(-50%);padding:calc(var(--internal-spacing-xs) * 1.25) var(--internal-spacing-sm);background:var(--internal-secondary);color:var(--internal-foreground);border-radius:calc(var(--internal-radius) - 2px);font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);cursor:pointer;transition:all var(--internal-transition-fast)}.coupon-apply:hover:not(:disabled),.coupon-remove:hover:not(:disabled){background:oklch(from var(--internal-accent) l c h / 0.8)}.coupon-apply:focus-visible,.coupon-remove:focus-visible{outline:2px solid var(--internal-ring);outline-offset:-1px}.coupon-apply:disabled,.coupon-remove:disabled{opacity:0.6;cursor:not-allowed}.checkout-btn{width:100%;padding:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs))
|
|
23620
|
-
var(--internal-spacing-lg);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-bold);line-height:1.25;position:relative;overflow:hidden}.checkout-btn:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.checkout-btn:active:not(:disabled){transform:translateY(0)}.checkout-btn:disabled{opacity:0.5;cursor:not-allowed}.checkout-spinner-wrapper{display:inline-flex;align-items:center;justify-content:center;height:1.25em;vertical-align:middle}.checkout-spinner{width:1.125em;height:1.125em;animation:checkout-spinner 0.8s linear infinite}@keyframes checkout-spinner{to{transform:rotate(360deg)}}.sticky-checkout-bar{position:fixed;right:0;bottom:0;left:0;z-index:40;display:none;padding:var(--internal-spacing-md);background:var(--internal-card);border-top:1px solid var(--internal-border);box-shadow:var(--internal-shadow-lg)}.sticky-checkout-btn.selection-prompt{animation:selection-prompt-shake 400ms ease-in-out}@keyframes selection-prompt-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}.
|
|
23621
|
-
from var(--internal-destructive) calc(l + 0.4) calc(c * 0.2) h / 0.05
|
|
23622
|
-
);border:1px solid oklch(from var(--internal-destructive) l c h / 0.2);border-radius:var(--internal-radius);padding:var(--internal-spacing-lg);margin:var(--internal-spacing-lg);text-align:center}.error-banner strong{display:block;color:var(--internal-destructive);font-size:var(--internal-font-size-lg);margin-bottom:var(--internal-spacing-sm)}.error-banner p{color:var(--internal-muted-foreground);margin-bottom:var(--internal-spacing-md)}.retry-button{background:var(--internal-primary);color:var(--internal-primary-foreground);border:1px solid oklch(from var(--internal-primary) calc(l - 0.08) c h);padding:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs))
|
|
23620
|
+
var(--internal-spacing-lg);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-bold);line-height:1.25;position:relative;overflow:hidden}.checkout-btn:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.checkout-btn:active:not(:disabled){transform:translateY(0)}.checkout-btn:disabled{opacity:0.5;cursor:not-allowed}.checkout-spinner-wrapper{display:inline-flex;align-items:center;justify-content:center;height:1.25em;vertical-align:middle}.checkout-spinner{width:1.125em;height:1.125em;animation:checkout-spinner 0.8s linear infinite}@keyframes checkout-spinner{to{transform:rotate(360deg)}}.sticky-checkout-bar{position:fixed;right:0;bottom:0;left:0;z-index:40;display:none;padding:var(--internal-spacing-md);background:var(--internal-card);border-top:1px solid var(--internal-border);box-shadow:var(--internal-shadow-lg)}.sticky-checkout-btn.selection-prompt{animation:selection-prompt-shake 400ms ease-in-out}@keyframes selection-prompt-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}.retry-button{align-self:flex-start;margin-top:var(--internal-spacing-xs);background:var(--internal-primary);color:var(--internal-primary-foreground);border:1px solid oklch(from var(--internal-primary) calc(l - 0.08) c h);padding:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs))
|
|
23623
23621
|
var(--internal-spacing-lg);border-radius:calc(var(--internal-radius) - 2px);font-size:var(--internal-font-size-sm);font-weight:var(--internal-font-weight-medium);cursor:pointer;transition:all var(--internal-transition-fast);box-shadow:var(--internal-shadow-edge-light)}.retry-button:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.retry-button:hover{background:oklch(from var(--internal-primary) calc(l - 0.08) c h);transform:translateY(-1px)}.retry-button:active{transform:translateY(0)}.error-message{background:oklch(
|
|
23624
23622
|
from var(--internal-destructive) calc(l + 0.4) calc(c * 0.2) h / 0.05
|
|
23625
|
-
);border:1px solid oklch(from var(--internal-destructive) l c h / 0.2);color:var(--internal-destructive);padding:var(--internal-spacing-sm) var(--internal-spacing-md);border-radius:var(--internal-radius);margin-bottom:var(--internal-spacing-md);font-size:var(--internal-font-size-sm)}@media (min-width: 768px){.ticket-section{border-radius:var(--internal-radius);margin:0 0 var(--internal-spacing-md) 0}}@media (max-width: 767px){:host([data-sticky-checkout="true"]) .session-services-ticketing-container{padding-bottom:calc(var(--internal-spacing-xl) * 3)}.sticky-checkout-bar{display:block}}.modal-backdrop{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:var(--internal-spacing-md);background:var(--internal-backdrop);backdrop-filter:blur(4px);animation:modal-backdrop-fade-in var(--internal-transition-base) ease-out}@keyframes modal-backdrop-fade-in{from{opacity:0}to{opacity:1}}.modal-content{position:relative;width:100%;max-width:32rem;max-height:calc(100vh - var(--internal-spacing-xl) * 2);overflow-y:auto;background:var(--internal-popover);color:var(--internal-popover-foreground);border:1px solid var(--internal-border);border-radius:var(--internal-radius);padding:var(--internal-spacing-lg);box-shadow:var(--internal-shadow-xl);animation:modal-content-scale-in var(--internal-transition-base) ease-out}@keyframes modal-content-scale-in{from{opacity:0;transform:scale(0.98)}to{opacity:1;transform:scale(1)}}.modal-close-btn{position:absolute;top:var(--internal-spacing-sm);right:var(--internal-spacing-sm);display:flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;padding:0;background:transparent;border:1px solid transparent;border-radius:calc(var(--internal-radius) - 4px);color:var(--internal-muted-foreground);cursor:pointer;opacity:0.72;transition:all var(--internal-transition-fast)}.modal-close-btn:hover{opacity:1;background:var(--internal-accent)}.modal-close-btn:focus-visible{outline:2px solid var(--internal-ring);outline-offset:1px;opacity:1}.modal-header{margin-bottom:var(--internal-spacing-md);padding-right:var(--internal-spacing-xl)}.modal-title{font-size:var(--internal-font-size-xl);font-weight:var(--internal-font-weight-semibold);color:var(--internal-foreground);margin:0;line-height:1.2}.modal-subtitle{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);margin-top:var(--internal-spacing-xs);line-height:1.4}.modal-description{color:var(--internal-foreground);font-size:var(--internal-font-size-base);line-height:1.6;white-space:pre-wrap;margin:0}`;
|
|
23623
|
+
);border:1px solid oklch(from var(--internal-destructive) l c h / 0.2);color:var(--internal-destructive);padding:var(--internal-spacing-sm) var(--internal-spacing-md);border-radius:var(--internal-radius);margin-bottom:var(--internal-spacing-md);font-size:var(--internal-font-size-sm)}@media (min-width: 768px){.ticket-section{border-radius:var(--internal-radius);margin:0 0 var(--internal-spacing-md) 0}}@media (max-width: 767px){:host([data-sticky-checkout="true"]) .session-services-ticketing-container{padding-bottom:calc(var(--internal-spacing-xl) * 3)}:host([data-sticky-checkout="true"]) .checkout-actions>.checkout-btn,:host([data-sticky-checkout="true"]) .inline-external-ticket-button{display:none}.sticky-checkout-bar{display:block}}.modal-backdrop{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:var(--internal-spacing-md);background:var(--internal-backdrop);backdrop-filter:blur(4px);animation:modal-backdrop-fade-in var(--internal-transition-base) ease-out}@keyframes modal-backdrop-fade-in{from{opacity:0}to{opacity:1}}.modal-content{position:relative;width:100%;max-width:32rem;max-height:calc(100vh - var(--internal-spacing-xl) * 2);overflow-y:auto;background:var(--internal-popover);color:var(--internal-popover-foreground);border:1px solid var(--internal-border);border-radius:var(--internal-radius);padding:var(--internal-spacing-lg);box-shadow:var(--internal-shadow-xl);animation:modal-content-scale-in var(--internal-transition-base) ease-out}@keyframes modal-content-scale-in{from{opacity:0;transform:scale(0.98)}to{opacity:1;transform:scale(1)}}.modal-close-btn{position:absolute;top:var(--internal-spacing-sm);right:var(--internal-spacing-sm);display:flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;padding:0;background:transparent;border:1px solid transparent;border-radius:calc(var(--internal-radius) - 4px);color:var(--internal-muted-foreground);cursor:pointer;opacity:0.72;transition:all var(--internal-transition-fast)}.modal-close-btn:hover{opacity:1;background:var(--internal-accent)}.modal-close-btn:focus-visible{outline:2px solid var(--internal-ring);outline-offset:1px;opacity:1}.modal-header{margin-bottom:var(--internal-spacing-md);padding-right:var(--internal-spacing-xl)}.modal-title{font-size:var(--internal-font-size-xl);font-weight:var(--internal-font-weight-semibold);color:var(--internal-foreground);margin:0;line-height:1.2}.modal-subtitle{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);margin-top:var(--internal-spacing-xs);line-height:1.4}.modal-description{color:var(--internal-foreground);font-size:var(--internal-font-size-base);line-height:1.6;white-space:pre-wrap;margin:0}`;
|
|
23626
23624
|
|
|
23627
23625
|
const quoteTotal = (quote) => quote.price?.total ?? 0;
|
|
23628
23626
|
const QUOTE_DEBOUNCE_MS = 150;
|
|
23627
|
+
const STICKY_CHECKOUT_SCROLL_OFFSET_PX = 100;
|
|
23629
23628
|
function objectValue(value, key) {
|
|
23630
23629
|
if (!value || typeof value !== "object")
|
|
23631
23630
|
return undefined;
|
|
@@ -23661,6 +23660,16 @@ function eventVenueName(event) {
|
|
|
23661
23660
|
function optionalId(id) {
|
|
23662
23661
|
return id || undefined;
|
|
23663
23662
|
}
|
|
23663
|
+
function urlDomain(url) {
|
|
23664
|
+
if (!url)
|
|
23665
|
+
return "external site";
|
|
23666
|
+
try {
|
|
23667
|
+
return new URL(url).hostname.replace(/^www\./, "");
|
|
23668
|
+
}
|
|
23669
|
+
catch {
|
|
23670
|
+
return "external site";
|
|
23671
|
+
}
|
|
23672
|
+
}
|
|
23664
23673
|
function admissionAriaLabel(admission, section, status) {
|
|
23665
23674
|
if (section)
|
|
23666
23675
|
return `${admission.name} in ${section.name} - ${status}`;
|
|
@@ -24446,14 +24455,21 @@ const SessionsTicketing = /*@__PURE__*/ proxyCustomElement(class SessionsTicketi
|
|
|
24446
24455
|
handleStickyCheckoutClick(state) {
|
|
24447
24456
|
if (state.isDoorOnly || !hasQuoteItems(this.quote)) {
|
|
24448
24457
|
this.promptTicketSelection();
|
|
24449
|
-
this.
|
|
24450
|
-
behavior: "smooth",
|
|
24451
|
-
block: "start",
|
|
24452
|
-
});
|
|
24458
|
+
this.scrollToTicketSelector();
|
|
24453
24459
|
return;
|
|
24454
24460
|
}
|
|
24455
24461
|
this.initiateCheckout().catch(() => undefined);
|
|
24456
24462
|
}
|
|
24463
|
+
scrollToTicketSelector() {
|
|
24464
|
+
const target = this.host.shadowRoot?.querySelector(".tickets-wrapper") ??
|
|
24465
|
+
this.host;
|
|
24466
|
+
window.scrollTo({
|
|
24467
|
+
behavior: "smooth",
|
|
24468
|
+
top: Math.max(target.getBoundingClientRect().top +
|
|
24469
|
+
window.scrollY -
|
|
24470
|
+
STICKY_CHECKOUT_SCROLL_OFFSET_PX, 0),
|
|
24471
|
+
});
|
|
24472
|
+
}
|
|
24457
24473
|
getCartProducts() {
|
|
24458
24474
|
if (!this.quote)
|
|
24459
24475
|
return [];
|
|
@@ -24662,29 +24678,29 @@ const SessionsTicketing = /*@__PURE__*/ proxyCustomElement(class SessionsTicketi
|
|
|
24662
24678
|
}
|
|
24663
24679
|
return (h$2(h$2.Fragment, null, this.renderEventTimeAndLocation(event), this.renderPriceAndControls(admission, sectionId, state, mode)));
|
|
24664
24680
|
}
|
|
24665
|
-
renderSectionHeader(section, admissions
|
|
24666
|
-
return (h$2("div", { class: "section-header" }, h$2("h2", { class: "section-name" }, section.name
|
|
24681
|
+
renderSectionHeader(section, admissions) {
|
|
24682
|
+
return (h$2("div", { class: "section-header" }, h$2("h2", { class: "section-name" }, section.name), this.renderAdmissionTime(admissions[0], "section-time"), this.renderSectionLocation(section)));
|
|
24667
24683
|
}
|
|
24668
24684
|
renderSectionWithAdmissions(section, admissions, event, mode) {
|
|
24669
24685
|
const soldOut = isSectionSoldOut({
|
|
24670
24686
|
admissions,
|
|
24671
24687
|
section,
|
|
24672
24688
|
});
|
|
24673
|
-
return (h$2("div", { class: `ticket-section ${soldOut ? "section-sold-out" : ""}`, key: section.id }, this.renderSectionHeader(section, admissions
|
|
24689
|
+
return (h$2("div", { class: `ticket-section ${soldOut ? "section-sold-out" : ""}`, key: section.id }, this.renderSectionHeader(section, admissions), h$2("div", { class: "admissions-list" }, admissions.map((admission) => this.renderAdmission(admission, event, section, soldOut, mode)))));
|
|
24674
24690
|
}
|
|
24675
24691
|
renderLoadingState() {
|
|
24676
|
-
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "loading-
|
|
24692
|
+
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("div", { class: "tickets-wrapper" }, h$2("h2", { class: "tickets-heading" }, "Get Tickets"), h$2("div", { class: "ticket-section loading-ticket-section" }, h$2("div", { class: "admissions-list" }, [0, 1, 2].map((item) => (h$2("div", { "aria-hidden": "true", class: "admission-card loading-admission", key: item })))))))));
|
|
24677
24693
|
}
|
|
24678
24694
|
renderErrorState() {
|
|
24679
24695
|
if (this.passcodeDenied)
|
|
24680
24696
|
return this.renderPasscodeState();
|
|
24681
|
-
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("div", { class: "
|
|
24697
|
+
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("div", { class: "message-state" }, h$2("strong", null, "Tickets Couldn\u2019t Load"), h$2("span", null, "We couldn\u2019t load ticket details. Try again in a moment."), h$2("button", { type: "button", class: "retry-button", onClick: () => this.loadEventData() }, "Try Again")))));
|
|
24682
24698
|
}
|
|
24683
24699
|
renderPasscodeState() {
|
|
24684
24700
|
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("form", { class: "passcode-form", onSubmit: (e) => this.submitPasscode(e) }, h$2("h2", null, "Enter passcode"), h$2("p", null, "Enter the event passcode to view tickets and event details."), h$2("input", { type: "text", name: "passcode", value: this.passcodeInput, onInput: this.handlePasscodeInput, autocomplete: "one-time-code", placeholder: "Passcode", "aria-label": "Passcode" }), this.passcodeDenied && this.activePasscode && (h$2("span", { class: "error-message" }, "Incorrect passcode")), h$2("button", { type: "submit", class: "checkout-btn", disabled: !this.passcodeInput.trim() }, "Unlock event")))));
|
|
24685
24701
|
}
|
|
24686
24702
|
renderNotFoundState() {
|
|
24687
|
-
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("div", { class: "
|
|
24703
|
+
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("div", { class: "message-state" }, h$2("strong", null, "Event not found"), h$2("span", null, "We couldn\u2019t find this event. The link may be incorrect or expired.")))));
|
|
24688
24704
|
}
|
|
24689
24705
|
renderCouponPanel() {
|
|
24690
24706
|
const hasInput = this.couponInput.trim().length > 0;
|
|
@@ -24766,6 +24782,14 @@ const SessionsTicketing = /*@__PURE__*/ proxyCustomElement(class SessionsTicketi
|
|
|
24766
24782
|
return null;
|
|
24767
24783
|
return (h$2("div", { class: "sticky-checkout-bar" }, h$2("button", { type: "button", class: `checkout-btn sticky-checkout-btn ${this.selectionPrompt ? "selection-prompt" : ""}`, onClick: () => this.handleStickyCheckoutClick(state), disabled: this.isStickyCheckoutDisabled(state), "aria-label": this.quoteLoading ? "Updating" : undefined }, this.renderStickyCheckoutButtonContent(state))));
|
|
24768
24784
|
}
|
|
24785
|
+
renderStickyExternalTicketing(state) {
|
|
24786
|
+
if (!this.stickyCheckout)
|
|
24787
|
+
return null;
|
|
24788
|
+
if (!state.externalTicketUrl)
|
|
24789
|
+
return null;
|
|
24790
|
+
const domain = urlDomain(state.externalTicketUrl);
|
|
24791
|
+
return (h$2("div", { class: "sticky-checkout-bar" }, h$2("a", { class: "external-ticket-button sticky-checkout-btn", href: state.externalTicketUrl, target: "_blank", rel: "noreferrer" }, h$2("span", { class: "external-ticket-label" }, "Get tickets"), h$2("span", { class: "external-ticket-domain" }, "via ", domain))));
|
|
24792
|
+
}
|
|
24769
24793
|
renderModal() {
|
|
24770
24794
|
if (!this.openModalAdmissionId)
|
|
24771
24795
|
return null;
|
|
@@ -24792,7 +24816,7 @@ const SessionsTicketing = /*@__PURE__*/ proxyCustomElement(class SessionsTicketi
|
|
|
24792
24816
|
if (mode !== "door")
|
|
24793
24817
|
return null;
|
|
24794
24818
|
const location = event.location?.name?.trim() || "the venue";
|
|
24795
|
-
return (h$2("div", { class: "door-alert" }, h$2("strong", null, "Tickets are available at ", location), h$2("span", null, "Online sales are closed.
|
|
24819
|
+
return (h$2("div", { class: "door-alert" }, h$2("strong", null, "Tickets are available at ", location), h$2("span", null, "Online sales are closed. Tickets are available at the venue when you arrive.")));
|
|
24796
24820
|
}
|
|
24797
24821
|
loadingView() {
|
|
24798
24822
|
return this.loading ? this.renderLoadingState() : undefined;
|
|
@@ -24812,7 +24836,7 @@ const SessionsTicketing = /*@__PURE__*/ proxyCustomElement(class SessionsTicketi
|
|
|
24812
24836
|
return this.renderNotFoundState();
|
|
24813
24837
|
const state = getTicketingState(event);
|
|
24814
24838
|
if (state.showExternalTicketing) {
|
|
24815
|
-
return this.renderExternalTicketing(state.
|
|
24839
|
+
return (h$2(Host, { "data-theme": this.currentTheme, "data-sticky-checkout": this.stickyCheckout ? "true" : undefined }, h$2("div", { class: "session-services-ticketing-container" }, this.renderExternalTicketing(state)), this.renderStickyExternalTicketing(state)));
|
|
24816
24840
|
}
|
|
24817
24841
|
return (h$2(Host, { "data-theme": this.currentTheme, "data-sticky-checkout": this.stickyCheckout ? "true" : undefined }, h$2("div", { class: "session-services-ticketing-container" }, state.showTicketing
|
|
24818
24842
|
? this.renderTicketSections(event)
|
|
@@ -24820,13 +24844,16 @@ const SessionsTicketing = /*@__PURE__*/ proxyCustomElement(class SessionsTicketi
|
|
|
24820
24844
|
state.showTicketing &&
|
|
24821
24845
|
this.renderCheckoutActions()), this.renderStickyCheckout(state), this.renderModal()));
|
|
24822
24846
|
}
|
|
24823
|
-
renderExternalTicketing(
|
|
24824
|
-
|
|
24847
|
+
renderExternalTicketing(state) {
|
|
24848
|
+
const domain = urlDomain(state.externalTicketUrl);
|
|
24849
|
+
if (!state.externalTicketUrl)
|
|
24850
|
+
return null;
|
|
24851
|
+
return (h$2("div", { class: "tickets-wrapper" }, h$2("h2", { class: "tickets-heading" }, state.ticketHeading), h$2("div", { class: "external-ticket-panel" }, h$2("p", { class: "external-ticket-warning" }, "This event sells through an external ticketing site. Checkout, tickets, and support are handled there."), h$2("a", { class: "external-ticket-button inline-external-ticket-button", href: state.externalTicketUrl, target: "_blank", rel: "noreferrer" }, h$2("span", { class: "external-ticket-label" }, "Get tickets"), h$2("span", { class: "external-ticket-domain" }, "via ", domain)))));
|
|
24825
24852
|
}
|
|
24826
24853
|
renderUnavailableState(state) {
|
|
24827
|
-
return (h$2("div", { class: "empty-ticketing-state" }, h$2("strong", null,
|
|
24828
|
-
? "
|
|
24829
|
-
: "Tickets are not
|
|
24854
|
+
return (h$2("div", { class: "empty-ticketing-state" }, h$2("strong", null, "Tickets Unavailable"), h$2("span", null, state.isEnded
|
|
24855
|
+
? "This event has ended, so tickets are no longer available."
|
|
24856
|
+
: "Tickets are not available for this event right now.")));
|
|
24830
24857
|
}
|
|
24831
24858
|
render() {
|
|
24832
24859
|
return this.pendingView() ?? this.renderReadyState();
|
|
@@ -23611,21 +23611,20 @@ const sessionServicesTicketingCss = () => `:host{--background:transparent;--fore
|
|
|
23611
23611
|
in srgb,
|
|
23612
23612
|
oklch(0.21 0.006 285.885) 80%,
|
|
23613
23613
|
oklch(0.141 0.005 285.823)
|
|
23614
|
-
);--card-foreground:oklch(0.967 0.001 286.375);--popover:oklch(0.21 0.006 285.885);--popover-foreground:oklch(0.967 0.001 286.375);--primary:oklch(0.537 0.1554 255);--primary-foreground:oklch(0.985 0 0);--secondary:oklch(1 0 0 / 6%);--secondary-foreground:oklch(0.967 0.001 286.375);--muted:oklch(1 0 0 / 6%);--muted-foreground:oklch(0.705 0.015 286.067);--accent:oklch(1 0 0 / 6%);--accent-foreground:oklch(0.967 0.001 286.375);--destructive:oklch(0.637 0.237 25.331);--destructive-foreground:oklch(0.704 0.191 22.216);--border:oklch(1 0 0 / 12%);--input:oklch(1 0 0 / 12%);--ring:oklch(0.552 0.016 285.938);--success:oklch(0.696 0.17 162.48);--warning:oklch(0.769 0.188 70.08);--info:oklch(0.623 0.214 259.815);--info-foreground:oklch(0.707 0.165 254.624)}.tickets-wrapper{padding:0;width:100%}.tickets-heading{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);margin:0 0 var(--internal-spacing-md)}.
|
|
23615
|
-
var(--internal-spacing-lg);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-bold);
|
|
23616
|
-
var(--internal-spacing-sm);background:var(--internal-card);color:var(--internal-foreground);border-radius:calc(var(--internal-radius) - 2px);font:inherit}.passcode-form input:disabled{opacity:0.6;cursor:not-allowed}.ticket-section{background:var(--internal-card);border-radius:var(--internal-radius);margin:0 0 var(--internal-spacing-lg) 0;overflow:hidden;width:100%;transition:all var(--internal-transition-base)}.tickets-wrapper>.ticket-section:last-child{margin-bottom:0}.ticket-section.section-sold-out{position:relative}.ticket-section.section-sold-out .section-header{padding-bottom:var(--internal-spacing-md)}.ticket-section.section-sold-out .section-name,.ticket-section.section-sold-out .section-time,.ticket-section.section-sold-out .section-venue{opacity:0.8}.ticket-section.section-sold-out .admissions-list{opacity:0.6;pointer-events:none;filter:grayscale(0.3)}.ticket-section.section-sold-out .admission-card{background:var(--internal-card)}.ticket-section.section-sold-out .quantity-controls,.ticket-section.section-sold-out .sold-out-controls{opacity:0.7}.section-header{padding:var(--internal-spacing-md) var(--internal-spacing-lg);border-bottom:1px solid var(--internal-border);background:var(--internal-card)}.section-name{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);letter-spacing:-0.025em;margin:0 0 var(--internal-spacing-xs) 0;display:flex;align-items:center;gap:var(--internal-spacing-sm)}.section-time,.section-venue{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);display:flex;align-items:center;gap:var(--internal-spacing-xs)}.section-time,.admission-time{margin-bottom:var(--internal-spacing-xs)}.section-time svg,.section-venue svg,.admission-time svg,.admission-venue svg{width:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs));height:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs));flex-shrink:0;opacity:0.8}.admissions-list{padding:0}.admission-card{border-bottom:1px solid var(--internal-border);padding:var(--internal-spacing-md) var(--internal-spacing-lg);position:relative;transition:background-color var(--internal-transition-base);cursor:default}.admission-card:focus-visible{outline:2px solid var(--internal-ring);outline-offset:-2px;z-index:1}.admission-card.sold-out{background:var(--internal-card)}.admission-card.unavailable{opacity:0.72}.admission-card.sold-out .admission-price{opacity:0.5}.admission-card:last-child{border-bottom:none}.admission-content{display:flex;justify-content:space-between;align-items:center}.admission-details{flex:1}.admission-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--internal-spacing-md);margin-bottom:var(--internal-spacing-sm)}.admission-header-text{flex:1;min-width:0}.admission-title{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);margin-bottom:0;display:flex;align-items:center;gap:var(--internal-spacing-sm)}.admission-subtitle{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);margin-top:var(--internal-spacing-xs);line-height:1.4}.more-info-badge{display:inline-flex;align-items:center;gap:calc(var(--internal-spacing-xs) * 1.5);padding:calc(var(--internal-spacing-xs) * 1.5) var(--internal-spacing-sm);background:oklch(from var(--internal-info) l c h / 0.08);color:var(--internal-info-foreground);border-radius:calc(var(--internal-radius) - 2px);font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);cursor:pointer;transition:all var(--internal-transition-fast);white-space:nowrap;flex-shrink:0}.more-info-badge:hover{background:oklch(from var(--internal-info) l c h / 0.16)}.more-info-badge:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.more-info-badge svg{flex-shrink:0}.admission-time,.admission-venue{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);display:flex;align-items:center;gap:var(--internal-spacing-xs)}.admission-venue{margin-bottom:var(--internal-spacing-sm)}.solo-admission .admission-content{flex-direction:column;align-items:stretch}.solo-admission .admission-details{width:100%}.solo-admission .admission-price-info{margin-top:var(--internal-spacing-md);display:flex;justify-content:space-between;align-items:center;width:100%}.solo-admission .quantity-controls{margin-left:auto;flex-shrink:0}.
|
|
23614
|
+
);--card-foreground:oklch(0.967 0.001 286.375);--popover:oklch(0.21 0.006 285.885);--popover-foreground:oklch(0.967 0.001 286.375);--primary:oklch(0.537 0.1554 255);--primary-foreground:oklch(0.985 0 0);--secondary:oklch(1 0 0 / 6%);--secondary-foreground:oklch(0.967 0.001 286.375);--muted:oklch(1 0 0 / 6%);--muted-foreground:oklch(0.705 0.015 286.067);--accent:oklch(1 0 0 / 6%);--accent-foreground:oklch(0.967 0.001 286.375);--destructive:oklch(0.637 0.237 25.331);--destructive-foreground:oklch(0.704 0.191 22.216);--border:oklch(1 0 0 / 12%);--input:oklch(1 0 0 / 12%);--ring:oklch(0.552 0.016 285.938);--success:oklch(0.696 0.17 162.48);--warning:oklch(0.769 0.188 70.08);--info:oklch(0.623 0.214 259.815);--info-foreground:oklch(0.707 0.165 254.624)}.tickets-wrapper{padding:0;width:100%}.tickets-heading{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);margin:0 0 var(--internal-spacing-md)}.ticket-section.loading-ticket-section{overflow:visible;background:transparent;border:0;box-shadow:none}.loading-ticket-section .admissions-list{display:flex;flex-direction:column;gap:var(--internal-spacing-sm)}.admission-card.loading-admission{min-height:5.25rem;padding:0;background:oklch(from var(--internal-foreground) l c h / 0.07);border:0;border-radius:var(--internal-radius);box-shadow:none;pointer-events:none;animation:loading-card 1.6s ease-out infinite}@keyframes loading-card{0%,100%{opacity:0.48}50%{opacity:0.74}}.passcode-form,.passcode-form input,.ticket-section,.more-info-badge,.quantity-controls,.sold-out-controls,.coupon-row,.coupon-apply,.coupon-remove{border:1px solid var(--internal-input);box-shadow:var(--internal-shadow-edge-light)}.external-ticket-button,.checkout-btn{display:inline-flex;align-items:center;justify-content:center;background:var(--internal-primary);color:var(--internal-primary-foreground);border:1px solid oklch(from var(--internal-primary) calc(l - 0.08) c h);border-radius:calc(var(--internal-radius) - 2px);cursor:pointer;box-shadow:var(--internal-shadow-edge-light);transition:all var(--internal-transition-fast)}.external-ticket-button:hover,.checkout-btn:hover:not(:disabled){background:oklch(from var(--internal-primary) calc(l - 0.08) c h);transform:translateY(-1px)}.external-ticket-button:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.passcode-form{display:flex;flex-direction:column;gap:var(--internal-spacing-sm);padding:var(--internal-spacing-lg);margin-bottom:var(--internal-spacing-md);background:var(--internal-card);border-radius:var(--internal-radius)}.passcode-form h2{color:var(--internal-foreground);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-semibold);line-height:1.3}.passcode-form p{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);line-height:1.5}.door-alert,.empty-ticketing-state,.message-state{display:flex;flex-direction:column;gap:calc(var(--internal-spacing-xs) * 1.5);margin-bottom:var(--internal-spacing-md);padding:0;background:transparent;border:none;border-radius:0;box-shadow:none}.door-alert strong,.empty-ticketing-state strong,.message-state strong{color:var(--internal-foreground);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-semibold);line-height:1.3}.door-alert span,.empty-ticketing-state span,.message-state span{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);line-height:1.4}.external-ticket-button{flex-direction:column;gap:calc(var(--internal-spacing-xs) * 0.5);width:100%;padding:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs))
|
|
23615
|
+
var(--internal-spacing-lg);text-decoration:none}.external-ticket-panel{display:flex;flex-direction:column;gap:var(--internal-spacing-md)}.external-ticket-warning{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);font-weight:var(--internal-font-weight-medium);line-height:1.35}.external-ticket-label{font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-bold);line-height:1.2}.external-ticket-domain{font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);line-height:1.2;opacity:0.82}.passcode-form input{width:100%;min-width:0;padding:calc(var(--internal-spacing-sm) + 0.125rem)
|
|
23616
|
+
var(--internal-spacing-sm);background:var(--internal-card);color:var(--internal-foreground);border-radius:calc(var(--internal-radius) - 2px);font:inherit}.passcode-form input:disabled{opacity:0.6;cursor:not-allowed}.ticket-section{background:var(--internal-card);border-radius:var(--internal-radius);margin:0 0 var(--internal-spacing-lg) 0;overflow:hidden;width:100%;transition:all var(--internal-transition-base)}.tickets-wrapper>.ticket-section:last-child{margin-bottom:0}.ticket-section.section-sold-out{position:relative}.ticket-section.section-sold-out .section-header{padding-bottom:var(--internal-spacing-md)}.ticket-section.section-sold-out .section-name,.ticket-section.section-sold-out .section-time,.ticket-section.section-sold-out .section-venue{opacity:0.8}.ticket-section.section-sold-out .admissions-list{opacity:0.6;pointer-events:none;filter:grayscale(0.3)}.ticket-section.section-sold-out .admission-card{background:var(--internal-card)}.ticket-section.section-sold-out .quantity-controls,.ticket-section.section-sold-out .sold-out-controls{opacity:0.7}.section-header{padding:var(--internal-spacing-md) var(--internal-spacing-lg);border-bottom:1px solid var(--internal-border);background:var(--internal-card)}.section-name{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);letter-spacing:-0.025em;margin:0 0 var(--internal-spacing-xs) 0;display:flex;align-items:center;gap:var(--internal-spacing-sm)}.section-time,.section-venue{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);display:flex;align-items:center;gap:var(--internal-spacing-xs)}.section-time,.admission-time{margin-bottom:var(--internal-spacing-xs)}.section-time svg,.section-venue svg,.admission-time svg,.admission-venue svg{width:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs));height:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs));flex-shrink:0;opacity:0.8}.admissions-list{padding:0}.admission-card{border-bottom:1px solid var(--internal-border);padding:var(--internal-spacing-md) var(--internal-spacing-lg);position:relative;transition:background-color var(--internal-transition-base);cursor:default}.admission-card:focus-visible{outline:2px solid var(--internal-ring);outline-offset:-2px;z-index:1}.admission-card.sold-out{background:var(--internal-card)}.admission-card.unavailable{opacity:0.72}.admission-card.sold-out .admission-price{opacity:0.5}.admission-card:last-child{border-bottom:none}.admission-content{display:flex;justify-content:space-between;align-items:center}.admission-details{flex:1}.admission-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--internal-spacing-md);margin-bottom:var(--internal-spacing-sm)}.admission-header-text{flex:1;min-width:0}.admission-title{color:var(--internal-foreground);font-size:var(--internal-font-size-lg);font-weight:var(--internal-font-weight-semibold);margin-bottom:0;display:flex;align-items:center;gap:var(--internal-spacing-sm)}.admission-subtitle{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);margin-top:var(--internal-spacing-xs);line-height:1.4}.more-info-badge{display:inline-flex;align-items:center;gap:calc(var(--internal-spacing-xs) * 1.5);padding:calc(var(--internal-spacing-xs) * 1.5) var(--internal-spacing-sm);background:oklch(from var(--internal-info) l c h / 0.08);color:var(--internal-info-foreground);border-radius:calc(var(--internal-radius) - 2px);font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);cursor:pointer;transition:all var(--internal-transition-fast);white-space:nowrap;flex-shrink:0}.more-info-badge:hover{background:oklch(from var(--internal-info) l c h / 0.16)}.more-info-badge:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.more-info-badge svg{flex-shrink:0}.admission-time,.admission-venue{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);display:flex;align-items:center;gap:var(--internal-spacing-xs)}.admission-venue{margin-bottom:var(--internal-spacing-sm)}.solo-admission .admission-content{flex-direction:column;align-items:stretch}.solo-admission .admission-details{width:100%}.solo-admission .admission-price-info{margin-top:var(--internal-spacing-md);display:flex;justify-content:space-between;align-items:center;width:100%}.solo-admission .quantity-controls{margin-left:auto;flex-shrink:0}.admission-price-info{display:flex;align-items:center;justify-content:space-between;gap:var(--internal-spacing-sm);margin-bottom:var(--internal-spacing-sm);width:100%}.admission-price-wrapper{display:flex;flex-direction:column;row-gap:calc(var(--internal-spacing-xs) * 0.5)}.admission-price{color:var(--internal-foreground);font-size:var(--internal-font-size-xl);font-weight:var(--internal-font-weight-bold);letter-spacing:-0.025em;line-height:1.1}.admission-price-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--internal-spacing-sm)}.admission-price-original{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-base);text-decoration:line-through}.admission-booking-fee{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);line-height:1.2}.admission-savings,.admission-availability{font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);line-height:1.2}.admission-savings{color:var(--internal-success)}.admission-availability{color:var(--internal-warning)}.admission-sale-label{display:block;margin-top:var(--internal-spacing-xs);color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);font-weight:var(--internal-font-weight-medium);line-height:1.35}.admission-sale-label.success{color:var(--internal-success)}.quantity-controls{display:inline-flex;align-items:center;gap:0;background:var(--internal-secondary);border-radius:calc(var(--internal-radius) - 2px);overflow:hidden;transition:all var(--internal-transition-fast)}.quantity-controls:has(.quantity-value:focus-visible){box-shadow:0 0 0 2px var(--internal-ring)}.quantity-btn{width:calc(var(--internal-spacing-lg) * 1.5);height:calc(var(--internal-spacing-lg) * 1.5);border:none;background:transparent;color:var(--internal-muted-foreground);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-medium);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all var(--internal-transition-fast);position:relative}.quantity-btn:focus-visible{outline:2px solid var(--internal-ring);outline-offset:-2px;z-index:1}.quantity-btn:hover:not(:disabled){background:var(--internal-accent);color:var(--internal-accent-foreground)}.quantity-btn:active:not(:disabled){transform:scale(0.95)}.quantity-btn:disabled{opacity:0.6;cursor:not-allowed;background:var(--internal-secondary);color:var(--internal-muted-foreground);border-color:var(--internal-border)}.quantity-btn.decrease{border-right:1px solid var(--internal-input)}.quantity-btn.increase{border-left:1px solid var(--internal-input)}.quantity-value{appearance:textfield;width:2.75rem;height:calc(var(--internal-spacing-lg) * 1.5);border:none;background:transparent;min-width:2.5rem;text-align:center;font-size:var(--internal-font-size-sm);font-weight:var(--internal-font-weight-semibold);color:var(--internal-foreground);padding:0 var(--internal-spacing-xs)}.quantity-value:focus-visible{outline:none}.quantity-value::-webkit-inner-spin-button,.quantity-value::-webkit-outer-spin-button{appearance:none;margin:0}.quantity-value:disabled{opacity:0.6;cursor:not-allowed}.sold-out-controls{display:inline-flex;align-items:center;justify-content:center;min-width:calc(var(--internal-spacing-lg) * 1.5 * 2 + 2.5rem);height:calc(var(--internal-spacing-lg) * 1.5);padding:0;background:transparent;border:none;box-shadow:none}.sold-out-controls,.sold-out-text{color:var(--internal-destructive);font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);letter-spacing:0.025em;text-transform:uppercase}.sold-out-controls.success,.sold-out-controls.success .sold-out-text{color:var(--internal-success)}.checkout-actions{margin:var(--internal-spacing-lg) 0 0 0;width:100%}.coupon-panel{margin-bottom:var(--internal-spacing-md)}.coupon-row{position:relative;display:flex;align-items:center;width:100%;min-width:0;overflow:hidden;background:var(--internal-background);background-clip:padding-box;border-radius:var(--internal-radius);transition:border-color var(--internal-transition-fast)}.coupon-row:focus-within{border-color:var(--internal-ring)}.coupon-row:has(input[aria-invalid="true"]){border-color:var(--internal-destructive)}.coupon-row:has(input:disabled){opacity:0.64}.coupon-row input{width:100%;min-width:0;padding:calc(var(--internal-spacing-sm) - 1px)
|
|
23617
23617
|
calc(var(--internal-spacing-xl) * 2.75)
|
|
23618
23618
|
calc(var(--internal-spacing-sm) - 1px)
|
|
23619
23619
|
calc(var(--internal-spacing-md) - 1px);background:var(--internal-card);color:var(--internal-foreground);border:none;border-radius:inherit;font:inherit;font-size:var(--internal-font-size-sm);line-height:1.25rem;outline:none}.coupon-row input::placeholder{color:oklch(from var(--internal-muted-foreground) l c h / 0.64)}.coupon-row input:disabled{cursor:not-allowed}.coupon-apply,.coupon-remove{position:absolute;right:calc((var(--internal-spacing-xs) * 1.5) - 3px);top:50%;transform:translateY(-50%);padding:calc(var(--internal-spacing-xs) * 1.25) var(--internal-spacing-sm);background:var(--internal-secondary);color:var(--internal-foreground);border-radius:calc(var(--internal-radius) - 2px);font-size:var(--internal-font-size-xs);font-weight:var(--internal-font-weight-medium);cursor:pointer;transition:all var(--internal-transition-fast)}.coupon-apply:hover:not(:disabled),.coupon-remove:hover:not(:disabled){background:oklch(from var(--internal-accent) l c h / 0.8)}.coupon-apply:focus-visible,.coupon-remove:focus-visible{outline:2px solid var(--internal-ring);outline-offset:-1px}.coupon-apply:disabled,.coupon-remove:disabled{opacity:0.6;cursor:not-allowed}.checkout-btn{width:100%;padding:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs))
|
|
23620
|
-
var(--internal-spacing-lg);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-bold);line-height:1.25;position:relative;overflow:hidden}.checkout-btn:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.checkout-btn:active:not(:disabled){transform:translateY(0)}.checkout-btn:disabled{opacity:0.5;cursor:not-allowed}.checkout-spinner-wrapper{display:inline-flex;align-items:center;justify-content:center;height:1.25em;vertical-align:middle}.checkout-spinner{width:1.125em;height:1.125em;animation:checkout-spinner 0.8s linear infinite}@keyframes checkout-spinner{to{transform:rotate(360deg)}}.sticky-checkout-bar{position:fixed;right:0;bottom:0;left:0;z-index:40;display:none;padding:var(--internal-spacing-md);background:var(--internal-card);border-top:1px solid var(--internal-border);box-shadow:var(--internal-shadow-lg)}.sticky-checkout-btn.selection-prompt{animation:selection-prompt-shake 400ms ease-in-out}@keyframes selection-prompt-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}.
|
|
23621
|
-
from var(--internal-destructive) calc(l + 0.4) calc(c * 0.2) h / 0.05
|
|
23622
|
-
);border:1px solid oklch(from var(--internal-destructive) l c h / 0.2);border-radius:var(--internal-radius);padding:var(--internal-spacing-lg);margin:var(--internal-spacing-lg);text-align:center}.error-banner strong{display:block;color:var(--internal-destructive);font-size:var(--internal-font-size-lg);margin-bottom:var(--internal-spacing-sm)}.error-banner p{color:var(--internal-muted-foreground);margin-bottom:var(--internal-spacing-md)}.retry-button{background:var(--internal-primary);color:var(--internal-primary-foreground);border:1px solid oklch(from var(--internal-primary) calc(l - 0.08) c h);padding:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs))
|
|
23620
|
+
var(--internal-spacing-lg);font-size:var(--internal-font-size-base);font-weight:var(--internal-font-weight-bold);line-height:1.25;position:relative;overflow:hidden}.checkout-btn:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.checkout-btn:active:not(:disabled){transform:translateY(0)}.checkout-btn:disabled{opacity:0.5;cursor:not-allowed}.checkout-spinner-wrapper{display:inline-flex;align-items:center;justify-content:center;height:1.25em;vertical-align:middle}.checkout-spinner{width:1.125em;height:1.125em;animation:checkout-spinner 0.8s linear infinite}@keyframes checkout-spinner{to{transform:rotate(360deg)}}.sticky-checkout-bar{position:fixed;right:0;bottom:0;left:0;z-index:40;display:none;padding:var(--internal-spacing-md);background:var(--internal-card);border-top:1px solid var(--internal-border);box-shadow:var(--internal-shadow-lg)}.sticky-checkout-btn.selection-prompt{animation:selection-prompt-shake 400ms ease-in-out}@keyframes selection-prompt-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}.retry-button{align-self:flex-start;margin-top:var(--internal-spacing-xs);background:var(--internal-primary);color:var(--internal-primary-foreground);border:1px solid oklch(from var(--internal-primary) calc(l - 0.08) c h);padding:calc(var(--internal-spacing-sm) + var(--internal-spacing-xs))
|
|
23623
23621
|
var(--internal-spacing-lg);border-radius:calc(var(--internal-radius) - 2px);font-size:var(--internal-font-size-sm);font-weight:var(--internal-font-weight-medium);cursor:pointer;transition:all var(--internal-transition-fast);box-shadow:var(--internal-shadow-edge-light)}.retry-button:focus-visible{outline:2px solid var(--internal-ring);outline-offset:2px}.retry-button:hover{background:oklch(from var(--internal-primary) calc(l - 0.08) c h);transform:translateY(-1px)}.retry-button:active{transform:translateY(0)}.error-message{background:oklch(
|
|
23624
23622
|
from var(--internal-destructive) calc(l + 0.4) calc(c * 0.2) h / 0.05
|
|
23625
|
-
);border:1px solid oklch(from var(--internal-destructive) l c h / 0.2);color:var(--internal-destructive);padding:var(--internal-spacing-sm) var(--internal-spacing-md);border-radius:var(--internal-radius);margin-bottom:var(--internal-spacing-md);font-size:var(--internal-font-size-sm)}@media (min-width: 768px){.ticket-section{border-radius:var(--internal-radius);margin:0 0 var(--internal-spacing-md) 0}}@media (max-width: 767px){:host([data-sticky-checkout="true"]) .session-services-ticketing-container{padding-bottom:calc(var(--internal-spacing-xl) * 3)}.sticky-checkout-bar{display:block}}.modal-backdrop{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:var(--internal-spacing-md);background:var(--internal-backdrop);backdrop-filter:blur(4px);animation:modal-backdrop-fade-in var(--internal-transition-base) ease-out}@keyframes modal-backdrop-fade-in{from{opacity:0}to{opacity:1}}.modal-content{position:relative;width:100%;max-width:32rem;max-height:calc(100vh - var(--internal-spacing-xl) * 2);overflow-y:auto;background:var(--internal-popover);color:var(--internal-popover-foreground);border:1px solid var(--internal-border);border-radius:var(--internal-radius);padding:var(--internal-spacing-lg);box-shadow:var(--internal-shadow-xl);animation:modal-content-scale-in var(--internal-transition-base) ease-out}@keyframes modal-content-scale-in{from{opacity:0;transform:scale(0.98)}to{opacity:1;transform:scale(1)}}.modal-close-btn{position:absolute;top:var(--internal-spacing-sm);right:var(--internal-spacing-sm);display:flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;padding:0;background:transparent;border:1px solid transparent;border-radius:calc(var(--internal-radius) - 4px);color:var(--internal-muted-foreground);cursor:pointer;opacity:0.72;transition:all var(--internal-transition-fast)}.modal-close-btn:hover{opacity:1;background:var(--internal-accent)}.modal-close-btn:focus-visible{outline:2px solid var(--internal-ring);outline-offset:1px;opacity:1}.modal-header{margin-bottom:var(--internal-spacing-md);padding-right:var(--internal-spacing-xl)}.modal-title{font-size:var(--internal-font-size-xl);font-weight:var(--internal-font-weight-semibold);color:var(--internal-foreground);margin:0;line-height:1.2}.modal-subtitle{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);margin-top:var(--internal-spacing-xs);line-height:1.4}.modal-description{color:var(--internal-foreground);font-size:var(--internal-font-size-base);line-height:1.6;white-space:pre-wrap;margin:0}`;
|
|
23623
|
+
);border:1px solid oklch(from var(--internal-destructive) l c h / 0.2);color:var(--internal-destructive);padding:var(--internal-spacing-sm) var(--internal-spacing-md);border-radius:var(--internal-radius);margin-bottom:var(--internal-spacing-md);font-size:var(--internal-font-size-sm)}@media (min-width: 768px){.ticket-section{border-radius:var(--internal-radius);margin:0 0 var(--internal-spacing-md) 0}}@media (max-width: 767px){:host([data-sticky-checkout="true"]) .session-services-ticketing-container{padding-bottom:calc(var(--internal-spacing-xl) * 3)}:host([data-sticky-checkout="true"]) .checkout-actions>.checkout-btn,:host([data-sticky-checkout="true"]) .inline-external-ticket-button{display:none}.sticky-checkout-bar{display:block}}.modal-backdrop{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:var(--internal-spacing-md);background:var(--internal-backdrop);backdrop-filter:blur(4px);animation:modal-backdrop-fade-in var(--internal-transition-base) ease-out}@keyframes modal-backdrop-fade-in{from{opacity:0}to{opacity:1}}.modal-content{position:relative;width:100%;max-width:32rem;max-height:calc(100vh - var(--internal-spacing-xl) * 2);overflow-y:auto;background:var(--internal-popover);color:var(--internal-popover-foreground);border:1px solid var(--internal-border);border-radius:var(--internal-radius);padding:var(--internal-spacing-lg);box-shadow:var(--internal-shadow-xl);animation:modal-content-scale-in var(--internal-transition-base) ease-out}@keyframes modal-content-scale-in{from{opacity:0;transform:scale(0.98)}to{opacity:1;transform:scale(1)}}.modal-close-btn{position:absolute;top:var(--internal-spacing-sm);right:var(--internal-spacing-sm);display:flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;padding:0;background:transparent;border:1px solid transparent;border-radius:calc(var(--internal-radius) - 4px);color:var(--internal-muted-foreground);cursor:pointer;opacity:0.72;transition:all var(--internal-transition-fast)}.modal-close-btn:hover{opacity:1;background:var(--internal-accent)}.modal-close-btn:focus-visible{outline:2px solid var(--internal-ring);outline-offset:1px;opacity:1}.modal-header{margin-bottom:var(--internal-spacing-md);padding-right:var(--internal-spacing-xl)}.modal-title{font-size:var(--internal-font-size-xl);font-weight:var(--internal-font-weight-semibold);color:var(--internal-foreground);margin:0;line-height:1.2}.modal-subtitle{color:var(--internal-muted-foreground);font-size:var(--internal-font-size-sm);margin-top:var(--internal-spacing-xs);line-height:1.4}.modal-description{color:var(--internal-foreground);font-size:var(--internal-font-size-base);line-height:1.6;white-space:pre-wrap;margin:0}`;
|
|
23626
23624
|
|
|
23627
23625
|
const quoteTotal = (quote) => quote.price?.total ?? 0;
|
|
23628
23626
|
const QUOTE_DEBOUNCE_MS = 150;
|
|
23627
|
+
const STICKY_CHECKOUT_SCROLL_OFFSET_PX = 100;
|
|
23629
23628
|
function objectValue(value, key) {
|
|
23630
23629
|
if (!value || typeof value !== "object")
|
|
23631
23630
|
return undefined;
|
|
@@ -23661,6 +23660,16 @@ function eventVenueName(event) {
|
|
|
23661
23660
|
function optionalId(id) {
|
|
23662
23661
|
return id || undefined;
|
|
23663
23662
|
}
|
|
23663
|
+
function urlDomain(url) {
|
|
23664
|
+
if (!url)
|
|
23665
|
+
return "external site";
|
|
23666
|
+
try {
|
|
23667
|
+
return new URL(url).hostname.replace(/^www\./, "");
|
|
23668
|
+
}
|
|
23669
|
+
catch {
|
|
23670
|
+
return "external site";
|
|
23671
|
+
}
|
|
23672
|
+
}
|
|
23664
23673
|
function admissionAriaLabel(admission, section, status) {
|
|
23665
23674
|
if (section)
|
|
23666
23675
|
return `${admission.name} in ${section.name} - ${status}`;
|
|
@@ -24442,14 +24451,21 @@ const SessionsTicketing = class {
|
|
|
24442
24451
|
handleStickyCheckoutClick(state) {
|
|
24443
24452
|
if (state.isDoorOnly || !hasQuoteItems(this.quote)) {
|
|
24444
24453
|
this.promptTicketSelection();
|
|
24445
|
-
this.
|
|
24446
|
-
behavior: "smooth",
|
|
24447
|
-
block: "start",
|
|
24448
|
-
});
|
|
24454
|
+
this.scrollToTicketSelector();
|
|
24449
24455
|
return;
|
|
24450
24456
|
}
|
|
24451
24457
|
this.initiateCheckout().catch(() => undefined);
|
|
24452
24458
|
}
|
|
24459
|
+
scrollToTicketSelector() {
|
|
24460
|
+
const target = this.host.shadowRoot?.querySelector(".tickets-wrapper") ??
|
|
24461
|
+
this.host;
|
|
24462
|
+
window.scrollTo({
|
|
24463
|
+
behavior: "smooth",
|
|
24464
|
+
top: Math.max(target.getBoundingClientRect().top +
|
|
24465
|
+
window.scrollY -
|
|
24466
|
+
STICKY_CHECKOUT_SCROLL_OFFSET_PX, 0),
|
|
24467
|
+
});
|
|
24468
|
+
}
|
|
24453
24469
|
getCartProducts() {
|
|
24454
24470
|
if (!this.quote)
|
|
24455
24471
|
return [];
|
|
@@ -24658,29 +24674,29 @@ const SessionsTicketing = class {
|
|
|
24658
24674
|
}
|
|
24659
24675
|
return (h$2(h$2.Fragment, null, this.renderEventTimeAndLocation(event), this.renderPriceAndControls(admission, sectionId, state, mode)));
|
|
24660
24676
|
}
|
|
24661
|
-
renderSectionHeader(section, admissions
|
|
24662
|
-
return (h$2("div", { class: "section-header" }, h$2("h2", { class: "section-name" }, section.name
|
|
24677
|
+
renderSectionHeader(section, admissions) {
|
|
24678
|
+
return (h$2("div", { class: "section-header" }, h$2("h2", { class: "section-name" }, section.name), this.renderAdmissionTime(admissions[0], "section-time"), this.renderSectionLocation(section)));
|
|
24663
24679
|
}
|
|
24664
24680
|
renderSectionWithAdmissions(section, admissions, event, mode) {
|
|
24665
24681
|
const soldOut = isSectionSoldOut({
|
|
24666
24682
|
admissions,
|
|
24667
24683
|
section,
|
|
24668
24684
|
});
|
|
24669
|
-
return (h$2("div", { class: `ticket-section ${soldOut ? "section-sold-out" : ""}`, key: section.id }, this.renderSectionHeader(section, admissions
|
|
24685
|
+
return (h$2("div", { class: `ticket-section ${soldOut ? "section-sold-out" : ""}`, key: section.id }, this.renderSectionHeader(section, admissions), h$2("div", { class: "admissions-list" }, admissions.map((admission) => this.renderAdmission(admission, event, section, soldOut, mode)))));
|
|
24670
24686
|
}
|
|
24671
24687
|
renderLoadingState() {
|
|
24672
|
-
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "loading-
|
|
24688
|
+
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("div", { class: "tickets-wrapper" }, h$2("h2", { class: "tickets-heading" }, "Get Tickets"), h$2("div", { class: "ticket-section loading-ticket-section" }, h$2("div", { class: "admissions-list" }, [0, 1, 2].map((item) => (h$2("div", { "aria-hidden": "true", class: "admission-card loading-admission", key: item })))))))));
|
|
24673
24689
|
}
|
|
24674
24690
|
renderErrorState() {
|
|
24675
24691
|
if (this.passcodeDenied)
|
|
24676
24692
|
return this.renderPasscodeState();
|
|
24677
|
-
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("div", { class: "
|
|
24693
|
+
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("div", { class: "message-state" }, h$2("strong", null, "Tickets Couldn\u2019t Load"), h$2("span", null, "We couldn\u2019t load ticket details. Try again in a moment."), h$2("button", { type: "button", class: "retry-button", onClick: () => this.loadEventData() }, "Try Again")))));
|
|
24678
24694
|
}
|
|
24679
24695
|
renderPasscodeState() {
|
|
24680
24696
|
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("form", { class: "passcode-form", onSubmit: (e) => this.submitPasscode(e) }, h$2("h2", null, "Enter passcode"), h$2("p", null, "Enter the event passcode to view tickets and event details."), h$2("input", { type: "text", name: "passcode", value: this.passcodeInput, onInput: this.handlePasscodeInput, autocomplete: "one-time-code", placeholder: "Passcode", "aria-label": "Passcode" }), this.passcodeDenied && this.activePasscode && (h$2("span", { class: "error-message" }, "Incorrect passcode")), h$2("button", { type: "submit", class: "checkout-btn", disabled: !this.passcodeInput.trim() }, "Unlock event")))));
|
|
24681
24697
|
}
|
|
24682
24698
|
renderNotFoundState() {
|
|
24683
|
-
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("div", { class: "
|
|
24699
|
+
return (h$2(Host, { "data-theme": this.currentTheme }, h$2("div", { class: "session-services-ticketing-container" }, h$2("div", { class: "message-state" }, h$2("strong", null, "Event not found"), h$2("span", null, "We couldn\u2019t find this event. The link may be incorrect or expired.")))));
|
|
24684
24700
|
}
|
|
24685
24701
|
renderCouponPanel() {
|
|
24686
24702
|
const hasInput = this.couponInput.trim().length > 0;
|
|
@@ -24762,6 +24778,14 @@ const SessionsTicketing = class {
|
|
|
24762
24778
|
return null;
|
|
24763
24779
|
return (h$2("div", { class: "sticky-checkout-bar" }, h$2("button", { type: "button", class: `checkout-btn sticky-checkout-btn ${this.selectionPrompt ? "selection-prompt" : ""}`, onClick: () => this.handleStickyCheckoutClick(state), disabled: this.isStickyCheckoutDisabled(state), "aria-label": this.quoteLoading ? "Updating" : undefined }, this.renderStickyCheckoutButtonContent(state))));
|
|
24764
24780
|
}
|
|
24781
|
+
renderStickyExternalTicketing(state) {
|
|
24782
|
+
if (!this.stickyCheckout)
|
|
24783
|
+
return null;
|
|
24784
|
+
if (!state.externalTicketUrl)
|
|
24785
|
+
return null;
|
|
24786
|
+
const domain = urlDomain(state.externalTicketUrl);
|
|
24787
|
+
return (h$2("div", { class: "sticky-checkout-bar" }, h$2("a", { class: "external-ticket-button sticky-checkout-btn", href: state.externalTicketUrl, target: "_blank", rel: "noreferrer" }, h$2("span", { class: "external-ticket-label" }, "Get tickets"), h$2("span", { class: "external-ticket-domain" }, "via ", domain))));
|
|
24788
|
+
}
|
|
24765
24789
|
renderModal() {
|
|
24766
24790
|
if (!this.openModalAdmissionId)
|
|
24767
24791
|
return null;
|
|
@@ -24788,7 +24812,7 @@ const SessionsTicketing = class {
|
|
|
24788
24812
|
if (mode !== "door")
|
|
24789
24813
|
return null;
|
|
24790
24814
|
const location = event.location?.name?.trim() || "the venue";
|
|
24791
|
-
return (h$2("div", { class: "door-alert" }, h$2("strong", null, "Tickets are available at ", location), h$2("span", null, "Online sales are closed.
|
|
24815
|
+
return (h$2("div", { class: "door-alert" }, h$2("strong", null, "Tickets are available at ", location), h$2("span", null, "Online sales are closed. Tickets are available at the venue when you arrive.")));
|
|
24792
24816
|
}
|
|
24793
24817
|
loadingView() {
|
|
24794
24818
|
return this.loading ? this.renderLoadingState() : undefined;
|
|
@@ -24808,7 +24832,7 @@ const SessionsTicketing = class {
|
|
|
24808
24832
|
return this.renderNotFoundState();
|
|
24809
24833
|
const state = getTicketingState(event);
|
|
24810
24834
|
if (state.showExternalTicketing) {
|
|
24811
|
-
return this.renderExternalTicketing(state.
|
|
24835
|
+
return (h$2(Host, { "data-theme": this.currentTheme, "data-sticky-checkout": this.stickyCheckout ? "true" : undefined }, h$2("div", { class: "session-services-ticketing-container" }, this.renderExternalTicketing(state)), this.renderStickyExternalTicketing(state)));
|
|
24812
24836
|
}
|
|
24813
24837
|
return (h$2(Host, { "data-theme": this.currentTheme, "data-sticky-checkout": this.stickyCheckout ? "true" : undefined }, h$2("div", { class: "session-services-ticketing-container" }, state.showTicketing
|
|
24814
24838
|
? this.renderTicketSections(event)
|
|
@@ -24816,13 +24840,16 @@ const SessionsTicketing = class {
|
|
|
24816
24840
|
state.showTicketing &&
|
|
24817
24841
|
this.renderCheckoutActions()), this.renderStickyCheckout(state), this.renderModal()));
|
|
24818
24842
|
}
|
|
24819
|
-
renderExternalTicketing(
|
|
24820
|
-
|
|
24843
|
+
renderExternalTicketing(state) {
|
|
24844
|
+
const domain = urlDomain(state.externalTicketUrl);
|
|
24845
|
+
if (!state.externalTicketUrl)
|
|
24846
|
+
return null;
|
|
24847
|
+
return (h$2("div", { class: "tickets-wrapper" }, h$2("h2", { class: "tickets-heading" }, state.ticketHeading), h$2("div", { class: "external-ticket-panel" }, h$2("p", { class: "external-ticket-warning" }, "This event sells through an external ticketing site. Checkout, tickets, and support are handled there."), h$2("a", { class: "external-ticket-button inline-external-ticket-button", href: state.externalTicketUrl, target: "_blank", rel: "noreferrer" }, h$2("span", { class: "external-ticket-label" }, "Get tickets"), h$2("span", { class: "external-ticket-domain" }, "via ", domain)))));
|
|
24821
24848
|
}
|
|
24822
24849
|
renderUnavailableState(state) {
|
|
24823
|
-
return (h$2("div", { class: "empty-ticketing-state" }, h$2("strong", null,
|
|
24824
|
-
? "
|
|
24825
|
-
: "Tickets are not
|
|
24850
|
+
return (h$2("div", { class: "empty-ticketing-state" }, h$2("strong", null, "Tickets Unavailable"), h$2("span", null, state.isEnded
|
|
24851
|
+
? "This event has ended, so tickets are no longer available."
|
|
24852
|
+
: "Tickets are not available for this event right now.")));
|
|
24826
24853
|
}
|
|
24827
24854
|
render() {
|
|
24828
24855
|
return this.pendingView() ?? this.renderReadyState();
|