@getmicdrop/venue-calendar 3.5.2 → 3.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +661 -661
  2. package/dist/CarouselView.legacy-C9QYS3av.js +64 -0
  3. package/dist/CarouselView.legacy-C9QYS3av.js.map +1 -0
  4. package/dist/{Checkout.legacy-Btt0uT61.js → Checkout.legacy-CyiqW4Im.js} +177 -181
  5. package/dist/Checkout.legacy-CyiqW4Im.js.map +1 -0
  6. package/dist/{CollectionView.legacy-Bxih-dA-.js → CollectionView.legacy-CQeXXMOU.js} +125 -125
  7. package/dist/CollectionView.legacy-CQeXXMOU.js.map +1 -0
  8. package/dist/FeaturedView.legacy-C3td2GLq.js +128 -0
  9. package/dist/FeaturedView.legacy-C3td2GLq.js.map +1 -0
  10. package/dist/GalleryView.legacy-BJwdUDNJ.js +51 -0
  11. package/dist/GalleryView.legacy-BJwdUDNJ.js.map +1 -0
  12. package/dist/GroupedListView.legacy-DWU0K8XY.js +144 -0
  13. package/dist/GroupedListView.legacy-DWU0K8XY.js.map +1 -0
  14. package/dist/{SeriesPage.legacy-Ka81Mn73.js → SeriesPage.legacy-D-ZoVrPE.js} +2 -2
  15. package/dist/SeriesPage.legacy-D-ZoVrPE.js.map +1 -0
  16. package/dist/Success.legacy-D9zlNOn7.js +191 -0
  17. package/dist/Success.legacy-D9zlNOn7.js.map +1 -0
  18. package/dist/{VenueCalendar-B5Y29ZJD.js → VenueCalendar-DX2HF1GE.js} +4859 -4815
  19. package/dist/VenueCalendar-DX2HF1GE.js.map +1 -0
  20. package/dist/api/api.cjs.map +1 -1
  21. package/dist/api/api.mjs.map +1 -1
  22. package/dist/api/types.d.ts +349 -349
  23. package/dist/colors-BZoMuXdh.js.map +1 -1
  24. package/dist/seo/seo.cjs.map +1 -1
  25. package/dist/seo/seo.mjs.map +1 -1
  26. package/dist/seo/types.d.ts +135 -135
  27. package/dist/types/index.d.ts +387 -387
  28. package/dist/venue-calendar.css +1 -1
  29. package/dist/venue-calendar.es.js +2 -2
  30. package/dist/venue-calendar.iife.js +24 -24
  31. package/dist/venue-calendar.iife.js.map +1 -1
  32. package/dist/venue-calendar.umd.js +24 -24
  33. package/dist/venue-calendar.umd.js.map +1 -1
  34. package/package.json +112 -112
  35. package/src/lib/theme.js +209 -209
  36. package/dist/CarouselView.legacy-CRHakGOL.js +0 -64
  37. package/dist/CarouselView.legacy-CRHakGOL.js.map +0 -1
  38. package/dist/Checkout.legacy-Btt0uT61.js.map +0 -1
  39. package/dist/CollectionView.legacy-Bxih-dA-.js.map +0 -1
  40. package/dist/FeaturedView.legacy-CVEXHJBx.js +0 -128
  41. package/dist/FeaturedView.legacy-CVEXHJBx.js.map +0 -1
  42. package/dist/GalleryView.legacy-Ci-IHtAe.js +0 -51
  43. package/dist/GalleryView.legacy-Ci-IHtAe.js.map +0 -1
  44. package/dist/GroupedListView.legacy-qisy7BOS.js +0 -144
  45. package/dist/GroupedListView.legacy-qisy7BOS.js.map +0 -1
  46. package/dist/SeriesPage.legacy-Ka81Mn73.js.map +0 -1
  47. package/dist/Success.legacy-D72O08IB.js +0 -191
  48. package/dist/Success.legacy-D72O08IB.js.map +0 -1
  49. package/dist/VenueCalendar-B5Y29ZJD.js.map +0 -1
@@ -1,51 +0,0 @@
1
- import "svelte/internal/disclose-version";
2
- import * as e from "svelte/internal/client";
3
- import { onMount as C, onDestroy as x } from "svelte";
4
- import { f as M, G as k } from "./VenueCalendar-B5Y29ZJD.js";
5
- var w = e.from_html('<li class="list-none"><!></li>'), E = e.from_html('<div class="flex items-center justify-center gap-2 py-2 p-6" role="status" aria-live="polite"><span class="text-sm text-gray-500 dark:text-gray-400">Loading more events...</span></div>'), G = e.from_html('<section class="w-full" aria-label="Events gallery"><h2 class="sr-only svelte-lb0ck7">Upcoming events</h2> <ul class="grid grid-cols-1 gap-4 bg-gray-50 dark:bg-gray-900 p-2 sm:grid-cols-2 sm:gap-4 sm:p-3 md:grid-cols-3 md:gap-5 md:p-4 lg:grid-cols-4 lg:gap-6 lg:p-5" role="list"></ul> <!></section>');
6
- function A(v, l) {
7
- e.push(l, !0);
8
- let p = e.prop(l, "events", 19, () => []), u = e.prop(l, "initialCount", 3, 12), f = e.prop(l, "loadMoreCount", 3, 12), a = u(), i, t, g = e.derived(() => M(p())), m = e.derived(() => e.get(g).slice(0, a)), c = e.derived(() => a < e.get(g).length);
9
- function y() {
10
- a += f();
11
- }
12
- C(() => {
13
- t = new IntersectionObserver(
14
- (r) => {
15
- r[0].isIntersecting && e.get(c) && y();
16
- },
17
- { rootMargin: "100px" }
18
- ), i && t.observe(i);
19
- }), x(() => {
20
- t && t.disconnect();
21
- }), e.user_effect(() => {
22
- t && i && (t.disconnect(), t.observe(i));
23
- });
24
- var n = G(), d = e.sibling(e.child(n), 2);
25
- e.each(d, 21, () => e.get(m), e.index, (r, s) => {
26
- var o = w(), _ = e.child(o);
27
- k(_, {
28
- get event() {
29
- return e.get(s);
30
- },
31
- get oneventClick() {
32
- return l.oneventClick;
33
- }
34
- }), e.reset(o), e.append(r, o);
35
- }), e.reset(d);
36
- var h = e.sibling(d, 2);
37
- {
38
- var b = (r) => {
39
- var s = E();
40
- e.bind_this(s, (o) => i = o, () => i), e.append(r, s);
41
- };
42
- e.if(h, (r) => {
43
- e.get(c) && r(b);
44
- });
45
- }
46
- e.reset(n), e.append(v, n), e.pop();
47
- }
48
- export {
49
- A as default
50
- };
51
- //# sourceMappingURL=GalleryView.legacy-Ci-IHtAe.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GalleryView.legacy-Ci-IHtAe.js","sources":["../src/components/Calendar/GalleryView.legacy.svelte"],"sourcesContent":["<script>\n import { onMount, onDestroy } from \"svelte\";\n import GalleryCard from \"./GalleryCard.svelte\";\n import { filterTodayAndFuture } from \"$lib/utils/browse-status.js\";\n\n let { events = [], initialCount = 12, loadMoreCount = 12, oneventClick } = $props();\n\n let displayedCount = initialCount;\n let loadMoreTrigger;\n let observer;\n\n // Filter to today and future, sorted chronologically\n let futureEvents = $derived(filterTodayAndFuture(events));\n let displayedEvents = $derived(futureEvents.slice(0, displayedCount));\n let hasMore = $derived(displayedCount < futureEvents.length);\n\n function loadMore() {\n displayedCount += loadMoreCount;\n }\n\n onMount(() => {\n observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && hasMore) {\n loadMore();\n }\n },\n { rootMargin: '100px' }\n );\n\n if (loadMoreTrigger) {\n observer.observe(loadMoreTrigger);\n }\n });\n\n onDestroy(() => {\n if (observer) {\n observer.disconnect();\n }\n });\n\n // Re-observe when trigger element changes\n $effect(() => {\n if (observer && loadMoreTrigger) {\n observer.disconnect();\n observer.observe(loadMoreTrigger);\n }\n });\n</script>\n\n<section class=\"w-full\" aria-label=\"Events gallery\">\n <h2 class=\"sr-only\">Upcoming events</h2>\n <ul class=\"grid grid-cols-1 gap-4 bg-gray-50 dark:bg-gray-900 p-2 sm:grid-cols-2 sm:gap-4 sm:p-3 md:grid-cols-3 md:gap-5 md:p-4 lg:grid-cols-4 lg:gap-6 lg:p-5\" role=\"list\">\n {#each displayedEvents as event}\n <li class=\"list-none\">\n <GalleryCard {event} {oneventClick} />\n </li>\n {/each}\n </ul>\n\n <!-- Infinite scroll trigger -->\n {#if hasMore}\n <div bind:this={loadMoreTrigger} class=\"flex items-center justify-center gap-2 py-2 p-6\" role=\"status\" aria-live=\"polite\">\n <span class=\"text-sm text-gray-500 dark:text-gray-400\">Loading more events...</span>\n </div>\n {/if}\n</section>\n\n<style>\n /* Screen reader only text */\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n</style>\n"],"names":["events","$","$$props","initialCount","loadMoreCount","displayedCount","loadMoreTrigger","observer","futureEvents","filterTodayAndFuture","displayedEvents","hasMore","loadMore","onMount","entries","onDestroy","section","root","ul","$$anchor","event","li","root_1","GalleryCard","node","div","root_2","$$value","$$render","consequent"],"mappings":";;;;;iBAAA;;MAKQA,IAAMC,EAAA,KAAAC,GAAA,UAAA,IAAA,MAAA,EAAA,GAAOC,iCAAe,EAAE,GAAEC,kCAAgB,EAAE,GAEpDC,IAAiBF,EAAY,GAC7BG,GACAC,GAGAC,IAAYP,EAAA,QAAA,MAAYQ,EAAqBT,EAAM,CAAA,CAAA,GACnDU,0BAA2BF,CAAY,EAAC,MAAM,GAAGH,CAAc,CAAA,GAC/DM,IAAOV,EAAA,QAAA,MAAYI,IAAcJ,EAAA,IAAGO,CAAY,EAAC,MAAM;AAElD,WAAAI,IAAW;AAClB,IAAAP,KAAkBD,EAAa;AAAA,EACjC;AAEA,EAAAS,EAAO,MAAO;AACZ,IAAAN,QAAe;AAAA,MACZ,CAAAO,MAAY;AACP,QAAAA,EAAQ,CAAC,EAAE,kBAAcb,EAAA,IAAIU,CAAO,KACtCC,EAAQ;AAAA,MAEZ;AAAA,MACE,EAAA,YAAY,QAAO;AAAA,OAGnBN,KACFC,EAAS,QAAQD,CAAe;AAAA,EAEpC,CAAC,GAEDS,EAAS,MAAO;AACV,IAAAR,KACFA,EAAS,WAAU;AAAA,EAEvB,CAAC,GAGDN,EAAA,YAAO,MAAO;IACRM,KAAYD,MACdC,EAAS,WAAU,GACnBA,EAAS,QAAQD,CAAe;AAAA,EAEpC,CAAC;MAGFU,IAAOC,EAAA,GAELC,sBAFFF,CAAO,GAAA,CAAA;SAELE,GAAE,IAAA,MAAAjB,EAAA,IACMS,CAAe,GAAAT,EAAA,OAAA,CAAAkB,GAAIC,MAAK;QAC5BC,IAAEC,EAAA,eAAFD,CAAE;AACA,IAAAE,EAAWC,GAAA;AAAA;qBAAEJ,CAAK;AAAA;;;;gBADpBC,CAAE,eAAFA,CAAE;AAAA,cAFNH,CAAE;oBAAFA,GAAE,CAAA;;;UAUAO,IAAGC,EAAA;kBAAHD,GAAG,CAAAE,MAAYrB,IAAeqB,GAAA,MAAfrB,CAAe,eAA9BmB,CAAG;AAAA;;YADDd,CAAO,KAAAiB,EAAAC,CAAA;AAAA;;UAXbb,CAAO,eAAPA,CAAO;AAFA;"}
@@ -1,144 +0,0 @@
1
- import "svelte/internal/disclose-version";
2
- import * as e from "svelte/internal/client";
3
- import { onMount as te, onDestroy as ae } from "svelte";
4
- import { f as re, g as se, a as ie, i as le, P as oe, b as F, c as L, S as ne } from "./VenueCalendar-B5Y29ZJD.js";
5
- var de = e.from_html('<div class="w-16 min-w-16 py-4 px-2.5 flex flex-col items-center justify-start bg-gray-50 dark:bg-gray-900 border-r border-gray-200 dark:border-gray-700 max-sm:w-12 max-sm:min-w-12 max-sm:py-2.5 max-sm:px-1.5" aria-hidden="true"><span class="text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-tight"> </span> <span class="text-2xl max-sm:text-lg font-bold text-gray-900 dark:text-white leading-tight"> </span> <span class="text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-tight"> </span></div>'), ge = e.from_html('<p class="event-description text-sm text-gray-600 dark:text-gray-300 mt-1.5 mb-0 line-clamp-2 max-sm:hidden svelte-r2wh13"> </p>'), me = e.from_html("<span> </span>"), ce = e.from_html('<li class="list-none"><div tabindex="0" role="button"><div class="w-36 h-24 min-w-36 max-sm:w-20 max-sm:h-16 max-sm:min-w-20 rounded-lg overflow-hidden bg-gray-50 dark:bg-gray-900 flex items-center justify-center" aria-hidden="true"><img alt="" class="w-full h-full object-contain svelte-r2wh13" loading="lazy"/></div> <div class="flex-1 flex flex-col gap-1.5 min-w-0" aria-hidden="true"><h3 class="text-lg max-sm:text-sm font-semibold text-gray-900 dark:text-white m-0 leading-snug"> </h3> <time class="text-sm max-sm:text-xs font-medium text-gray-600 dark:text-gray-300"> </time> <!></div> <div class="flex items-start pt-0.5" aria-hidden="true"><!></div></div></li>'), fe = e.from_html('<div class="date-group flex border-b border-gray-200 dark:border-gray-700 last:border-b-0 svelte-r2wh13" role="group"><!> <ul class="events-column flex-1 flex flex-col list-none p-0 m-0 svelte-r2wh13"></ul></div>'), ue = e.from_html('<div class="flex justify-center items-center p-6 text-gray-600 dark:text-gray-300" role="status" aria-live="polite"><span class="text-sm">Loading more events...</span></div>'), ve = e.from_html('<section aria-label="Event listings"><h2 class="sr-only svelte-r2wh13">Event list grouped by date</h2> <!> <!></section>');
6
- function he(P, g) {
7
- e.push(g, !0);
8
- let D = e.prop(g, "events", 19, () => []), U = e.prop(g, "initialCount", 3, 10), A = e.prop(g, "loadMoreCount", 3, 10), T = e.prop(g, "showDateColumn", 3, !0), B = e.prop(g, "filterFutureOnly", 3, !0), _ = U(), u, m, E = e.derived(() => B() ? re(D()) : D()), G = e.derived(() => R(e.get(E).slice(0, _))), C = e.derived(() => _ < e.get(E).length);
9
- function I() {
10
- _ += A();
11
- }
12
- te(() => {
13
- m = new IntersectionObserver(
14
- (r) => {
15
- r[0].isIntersecting && e.get(C) && I();
16
- },
17
- { rootMargin: "100px" }
18
- ), u && m.observe(u);
19
- }), ae(() => {
20
- m && m.disconnect();
21
- }), e.user_effect(() => {
22
- m && u && (m.disconnect(), m.observe(u));
23
- });
24
- function R(r) {
25
- const a = {};
26
- for (const s of r) {
27
- const o = s.date;
28
- a[o] || (a[o] = []), a[o].push(s);
29
- }
30
- return Object.entries(a).sort(([s], [o]) => new Date(s) - new Date(o)).map(([s, o]) => ({ date: s, events: o, formattedDate: K(o) }));
31
- }
32
- function K(r) {
33
- const a = r[0];
34
- if (!a?.startDateTime) return { month: "", day: "", weekday: "" };
35
- const s = se(a.startDateTime, a.timeZone);
36
- return {
37
- month: s.month.toUpperCase(),
38
- day: String(s.date).padStart(2, "0"),
39
- weekday: s.day.toUpperCase()
40
- };
41
- }
42
- function M(r) {
43
- g.oneventClick?.(r);
44
- }
45
- function z(r, a) {
46
- (r.key === "Enter" || r.key === " ") && (r.preventDefault(), M(a));
47
- }
48
- var b = ve();
49
- let S;
50
- var O = e.sibling(e.child(b), 2);
51
- e.each(O, 17, () => e.get(G), e.index, (r, a) => {
52
- var s = fe(), o = e.child(s);
53
- {
54
- var q = (c) => {
55
- var t = de(), n = e.child(t), y = e.child(n, !0);
56
- e.reset(n);
57
- var f = e.sibling(n, 2), d = e.child(f, !0);
58
- e.reset(f);
59
- var v = e.sibling(f, 2), x = e.child(v, !0);
60
- e.reset(v), e.reset(t), e.template_effect(() => {
61
- e.set_text(y, e.get(a).formattedDate.month), e.set_text(d, e.get(a).formattedDate.day), e.set_text(x, e.get(a).formattedDate.weekday);
62
- }), e.append(c, t);
63
- };
64
- e.if(o, (c) => {
65
- T() && c(q);
66
- });
67
- }
68
- var j = e.sibling(o, 2);
69
- e.each(j, 21, () => e.get(a).events, e.index, (c, t) => {
70
- const n = e.derived(() => ie(e.get(t))), y = e.derived(() => le(e.get(n)));
71
- var f = ce(), d = e.child(f);
72
- let v;
73
- var x = e.child(d), J = e.child(x);
74
- e.reset(x);
75
- var w = e.sibling(x, 2), k = e.child(w), N = e.child(k, !0);
76
- e.reset(k);
77
- var h = e.sibling(k, 2), Q = e.child(h, !0);
78
- e.reset(h);
79
- var W = e.sibling(h, 2);
80
- {
81
- var X = (i) => {
82
- var l = ge(), p = e.child(l, !0);
83
- e.reset(l), e.template_effect(() => e.set_text(p, e.get(t).description)), e.append(i, l);
84
- };
85
- e.if(W, (i) => {
86
- e.get(t).description && i(X);
87
- });
88
- }
89
- e.reset(w);
90
- var Z = e.sibling(w, 2), Y = e.child(Z);
91
- {
92
- var $ = (i) => {
93
- var l = me(), p = e.child(l, !0);
94
- e.reset(l), e.template_effect(() => {
95
- e.set_class(l, 1, `status-badge status-${e.get(n).type ?? ""}`, "svelte-r2wh13"), e.set_text(p, e.get(n).text);
96
- }), e.append(i, l);
97
- }, ee = (i) => {
98
- {
99
- let l = e.derived(() => e.get(t).ticketsRemaining ?? 0), p = e.derived(() => e.get(t).ticketsTotal ?? 0);
100
- ne(i, {
101
- get remaining() {
102
- return e.get(l);
103
- },
104
- get total() {
105
- return e.get(p);
106
- },
107
- context: "browse"
108
- });
109
- }
110
- };
111
- e.if(Y, (i) => {
112
- e.get(n) ? i($) : (e.get(t).ticketsTotal > 0 || e.get(t).ticketsRemaining === 0) && i(ee, 1);
113
- });
114
- }
115
- e.reset(Z), e.reset(d), e.reset(f), e.template_effect(
116
- (i, l) => {
117
- v = e.set_class(d, 1, "event-row flex gap-4 max-sm:gap-2.5 p-5 max-sm:p-3 cursor-pointer transition-colors duration-150 bg-white dark:bg-gray-800 border-b border-gray-200/50 dark:border-gray-700/50 last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-700 dark:focus:outline-blue-400 focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-blue-700 dark:focus-visible:outline-blue-400 focus-visible:-outline-offset-2 svelte-r2wh13", null, v, { "row-unavailable": e.get(y) }), e.set_attribute(d, "aria-label", i), e.set_attribute(J, "src", e.get(t).image || oe), e.set_text(N, e.get(t).name), e.set_attribute(h, "datetime", e.get(t).startDateTime || e.get(a).date), e.set_text(Q, l);
118
- },
119
- [
120
- () => `${e.get(t).name} on ${e.get(t).startDateTime ? F(e.get(t).startDateTime, e.get(t).timeZone) : e.get(a).date} at ${e.get(t).startDateTime ? L(e.get(t).startDateTime, e.get(t).timeZone) : ""}, ${e.get(n)?.text || e.get(t).status || "On Sale"}. Press Enter to view details.`,
121
- () => e.get(t).startDateTime ? L(e.get(t).startDateTime, e.get(t).timeZone) : ""
122
- ]
123
- ), e.delegated("click", d, () => M(e.get(t))), e.delegated("keydown", d, (i) => z(i, e.get(t))), e.append(c, f);
124
- }), e.reset(j), e.reset(s), e.template_effect((c) => e.set_attribute(s, "aria-label", `Events on ${c ?? ""}`), [
125
- () => e.get(a).events[0]?.startDateTime ? F(e.get(a).events[0].startDateTime, e.get(a).events[0].timeZone) : e.get(a).date
126
- ]), e.append(r, s);
127
- });
128
- var H = e.sibling(O, 2);
129
- {
130
- var V = (r) => {
131
- var a = ue();
132
- e.bind_this(a, (s) => u = s, () => u), e.append(r, a);
133
- };
134
- e.if(H, (r) => {
135
- e.get(C) && r(V);
136
- });
137
- }
138
- e.reset(b), e.template_effect(() => S = e.set_class(b, 1, "flex flex-col gap-0 svelte-r2wh13", null, S, { "no-date-column": !T() })), e.append(P, b), e.pop();
139
- }
140
- e.delegate(["click", "keydown"]);
141
- export {
142
- he as default
143
- };
144
- //# sourceMappingURL=GroupedListView.legacy-qisy7BOS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GroupedListView.legacy-qisy7BOS.js","sources":["../src/components/Calendar/GroupedListView.legacy.svelte"],"sourcesContent":["<script>\n import { onMount, onDestroy } from \"svelte\";\n import { PLACEHOLDER_IMAGE } from \"$lib/utils/constants.js\";\n import { getDateParts, formatFullDate, formatEventTime } from \"$lib/utils/datetime.js\";\n import { getBrowseStatus, isEventUnavailable, filterTodayAndFuture } from \"$lib/utils/browse-status.js\";\n import ScarcityBadge from \"../ScarcityBadge.svelte\";\n\n let {\n events = [],\n initialCount = 10,\n loadMoreCount = 10,\n showDateColumn = true,\n filterFutureOnly = true,\n oneventClick\n } = $props();\n\n let displayedCount = initialCount;\n let loadMoreTrigger;\n let observer;\n\n // Filter to today and future (if enabled), then group by date\n let filteredEvents = $derived(filterFutureOnly ? filterTodayAndFuture(events) : events);\n let groupedEvents = $derived(groupEventsByDate(filteredEvents.slice(0, displayedCount)));\n let hasMore = $derived(displayedCount < filteredEvents.length);\n\n function loadMore() {\n displayedCount += loadMoreCount;\n }\n\n onMount(() => {\n observer = new IntersectionObserver(\n (entries) => {\n if (entries[0].isIntersecting && hasMore) {\n loadMore();\n }\n },\n { rootMargin: '100px' }\n );\n\n if (loadMoreTrigger) {\n observer.observe(loadMoreTrigger);\n }\n });\n\n onDestroy(() => {\n if (observer) {\n observer.disconnect();\n }\n });\n\n // Re-observe when trigger element changes\n $effect(() => {\n if (observer && loadMoreTrigger) {\n observer.disconnect();\n observer.observe(loadMoreTrigger);\n }\n });\n\n function groupEventsByDate(eventList) {\n const groups = {};\n\n for (const event of eventList) {\n const dateKey = event.date; // YYYY-MM-DD format\n if (!groups[dateKey]) {\n groups[dateKey] = [];\n }\n groups[dateKey].push(event);\n }\n\n // Convert to array sorted by date\n return Object.entries(groups)\n .sort(([a], [b]) => new Date(a) - new Date(b))\n .map(([date, events]) => ({\n date,\n events,\n formattedDate: formatGroupDate(events),\n }));\n }\n\n function formatGroupDate(events) {\n // Use the first event in the group to get timezone-aware date parts\n const firstEvent = events[0];\n if (!firstEvent?.startDateTime) return { month: '', day: '', weekday: '' };\n const parts = getDateParts(firstEvent.startDateTime, firstEvent.timeZone);\n return {\n month: parts.month.toUpperCase(),\n day: String(parts.date).padStart(2, '0'),\n weekday: parts.day.toUpperCase(),\n };\n }\n\n function handleEventClick(event) {\n oneventClick?.(event);\n }\n\n function handleKeydown(e, event) {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleEventClick(event);\n }\n }\n</script>\n\n<section class=\"flex flex-col gap-0\" class:no-date-column={!showDateColumn} aria-label=\"Event listings\">\n <h2 class=\"sr-only\">Event list grouped by date</h2>\n {#each groupedEvents as group}\n <div class=\"date-group flex border-b border-gray-200 dark:border-gray-700 last:border-b-0\" role=\"group\" aria-label=\"Events on {group.events[0]?.startDateTime ? formatFullDate(group.events[0].startDateTime, group.events[0].timeZone) : group.date}\">\n <!-- Date Column -->\n {#if showDateColumn}\n <div class=\"w-16 min-w-16 py-4 px-2.5 flex flex-col items-center justify-start bg-gray-50 dark:bg-gray-900 border-r border-gray-200 dark:border-gray-700 max-sm:w-12 max-sm:min-w-12 max-sm:py-2.5 max-sm:px-1.5\" aria-hidden=\"true\">\n <span class=\"text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-tight\">{group.formattedDate.month}</span>\n <span class=\"text-2xl max-sm:text-lg font-bold text-gray-900 dark:text-white leading-tight\">{group.formattedDate.day}</span>\n <span class=\"text-xs font-semibold text-gray-600 dark:text-gray-300 uppercase tracking-tight\">{group.formattedDate.weekday}</span>\n </div>\n {/if}\n\n <!-- Events Column -->\n <ul class=\"events-column flex-1 flex flex-col list-none p-0 m-0\">\n {#each group.events as event, eventIndex}\n {@const eventStatus = getBrowseStatus(event)}\n {@const isUnavailable = isEventUnavailable(eventStatus)}\n <li class=\"list-none\">\n <div\n class=\"event-row flex gap-4 max-sm:gap-2.5 p-5 max-sm:p-3 cursor-pointer transition-colors duration-150 bg-white dark:bg-gray-800 border-b border-gray-200/50 dark:border-gray-700/50 last:border-b-0 hover:bg-gray-50 dark:hover:bg-gray-700 focus:outline-2 focus:outline-blue-700 dark:focus:outline-blue-400 focus:-outline-offset-2 focus-visible:outline-2 focus-visible:outline-blue-700 dark:focus-visible:outline-blue-400 focus-visible:-outline-offset-2\"\n class:row-unavailable={isUnavailable}\n onclick={() => handleEventClick(event)}\n onkeydown={(e) => handleKeydown(e, event)}\n tabindex=\"0\"\n role=\"button\"\n aria-label={`${event.name} on ${event.startDateTime ? formatFullDate(event.startDateTime, event.timeZone) : group.date} at ${event.startDateTime ? formatEventTime(event.startDateTime, event.timeZone) : ''}, ${eventStatus?.text || event.status || 'On Sale'}. Press Enter to view details.`}\n >\n <!-- Event Image -->\n <div class=\"w-36 h-24 min-w-36 max-sm:w-20 max-sm:h-16 max-sm:min-w-20 rounded-lg overflow-hidden bg-gray-50 dark:bg-gray-900 flex items-center justify-center\" aria-hidden=\"true\">\n <img\n src={event.image || PLACEHOLDER_IMAGE}\n alt=\"\"\n class=\"w-full h-full object-contain\"\n loading=\"lazy\"\n />\n </div>\n\n <!-- Event Details (visually shown but also in aria-label, so hide from SR) -->\n <div class=\"flex-1 flex flex-col gap-1.5 min-w-0\" aria-hidden=\"true\">\n <h3 class=\"text-lg max-sm:text-sm font-semibold text-gray-900 dark:text-white m-0 leading-snug\">{event.name}</h3>\n <time class=\"text-sm max-sm:text-xs font-medium text-gray-600 dark:text-gray-300\" datetime={event.startDateTime || group.date}>{event.startDateTime ? formatEventTime(event.startDateTime, event.timeZone) : ''}</time>\n {#if event.description}\n <p class=\"event-description text-sm text-gray-600 dark:text-gray-300 mt-1.5 mb-0 line-clamp-2 max-sm:hidden\">{event.description}</p>\n {/if}\n </div>\n\n <!-- Status / Scarcity Badge -->\n <div class=\"flex items-start pt-0.5\" aria-hidden=\"true\">\n {#if eventStatus}\n <span class=\"status-badge status-{eventStatus.type}\">{eventStatus.text}</span>\n {:else if event.ticketsTotal > 0 || event.ticketsRemaining === 0}\n <ScarcityBadge\n remaining={event.ticketsRemaining ?? 0}\n total={event.ticketsTotal ?? 0}\n context=\"browse\"\n />\n {/if}\n </div>\n </div>\n </li>\n {/each}\n </ul>\n </div>\n {/each}\n\n <!-- Infinite scroll trigger -->\n {#if hasMore}\n <div bind:this={loadMoreTrigger} class=\"flex justify-center items-center p-6 text-gray-600 dark:text-gray-300\" role=\"status\" aria-live=\"polite\">\n <span class=\"text-sm\">Loading more events...</span>\n </div>\n {/if}\n</section>\n\n<style>\n /* When no date column, remove left border styling */\n .no-date-column .date-group {\n border-bottom: 0;\n }\n\n .no-date-column .events-column {\n border-left: 0;\n }\n\n .event-description {\n display: -webkit-box;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n /* Unavailable row dimming */\n .row-unavailable {\n opacity: 0.6;\n }\n\n .row-unavailable img {\n filter: grayscale(0.5);\n }\n\n /* Status badges -- distinct visual treatments matching gallery cards */\n .status-badge {\n display: inline-flex;\n align-items: center;\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 700;\n padding: 0.25rem 0.625rem;\n border-radius: 0.25rem;\n white-space: nowrap;\n letter-spacing: 0.02em;\n }\n\n .status-cancelled {\n background-color: rgb(254 226 226);\n color: rgb(153 27 27);\n text-decoration: line-through;\n text-decoration-thickness: 1.5px;\n\n :global(.dark) & {\n background-color: rgb(127 29 29 / 0.4);\n color: rgb(252 165 165);\n }\n }\n\n .status-past {\n background-color: rgb(243 244 246);\n color: rgb(107 114 128);\n\n :global(.dark) & {\n background-color: rgb(31 41 55);\n color: rgb(156 163 175);\n }\n }\n\n .status-sold_out {\n background-color: rgb(254 226 226);\n color: rgb(185 28 28);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n font-size: 0.65rem;\n\n :global(.dark) & {\n background-color: rgb(127 29 29 / 0.4);\n color: rgb(248 113 113);\n }\n }\n\n .status-sales_ended {\n background-color: rgb(243 244 246);\n color: rgb(107 114 128);\n border: 1px solid rgb(209 213 219);\n\n :global(.dark) & {\n background-color: rgb(31 41 55);\n color: rgb(156 163 175);\n border-color: rgb(75 85 99);\n }\n }\n\n .status-coming_soon {\n background-color: rgb(224 231 255);\n color: rgb(67 56 202);\n\n :global(.dark) & {\n background-color: rgb(49 46 129 / 0.4);\n color: rgb(165 180 252);\n }\n }\n\n /* Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n .event-row {\n transition: none;\n }\n }\n\n /* Screen reader only text */\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n</style>\n"],"names":["events","$","$$props","initialCount","loadMoreCount","showDateColumn","filterFutureOnly","displayedCount","loadMoreTrigger","observer","filteredEvents","filterTodayAndFuture","groupedEvents","groupEventsByDate","hasMore","loadMore","onMount","entries","onDestroy","eventList","groups","event","dateKey","a","b","date","formatGroupDate","firstEvent","parts","getDateParts","handleEventClick","handleKeydown","e","section","root","node","group","div","root_1","div_1","root_2","span","span_1","span_2","$$render","consequent","ul","node_1","eventStatus","getBrowseStatus","isUnavailable","isEventUnavailable","li","root_3","div_2","div_3","img","div_4","h3","time","p","root_4","text_5","consequent_1","div_5","span_3","root_5","text_6","ScarcityBadge","$$anchor","consequent_2","consequent_3","classes_1","$0","PLACEHOLDER_IMAGE","text_3","formatFullDate","formatEventTime","div_6","root_7","$$value","consequent_4","classes"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SeriesPage.legacy-Ka81Mn73.js","sources":["../src/components/Views/SeriesPage.legacy.svelte"],"sourcesContent":["<script>\n import { getImageUrl } from '$lib/utils/utils.js';\n import { formatEventDate, formatEventTime, formatTimeRange } from '$lib/utils/datetime.js';\n import { PLACEHOLDER_IMAGE } from '$lib/utils/constants.js';\n\n let {\n series,\n onNavigateToOccurrence,\n } = $props();\n\n let imageLoaded = $state(false);\n\n let seriesImage = $derived(\n series?.image\n ? getImageUrl(series.image)\n : PLACEHOLDER_IMAGE\n );\n\n let tz = $derived(series?.timeZone || 'America/Los_Angeles');\n\n function formatDate(iso) {\n return formatEventDate(iso, tz);\n }\n\n function formatTime(iso) {\n return formatEventTime(iso, tz);\n }\n\n function handleOccurrenceClick(occurrence) {\n if (!occurrence.ctaState?.disabled && onNavigateToOccurrence) {\n onNavigateToOccurrence(occurrence.id, occurrence.slug || '', occurrence.name || '');\n }\n }\n</script>\n\n{#if series}\n <div class=\"series-page\">\n <!-- Hero Image -->\n <div class=\"hero\">\n <div class=\"hero-skeleton\" class:hidden={imageLoaded}></div>\n <img\n src={seriesImage}\n alt={series.title}\n class=\"hero-image\"\n onload={() => (imageLoaded = true)}\n />\n <div class=\"hero-overlay\">\n <div class=\"hero-content\">\n <span class=\"series-badge\">Recurring Event</span>\n <h1 class=\"series-title\">{series.title}</h1>\n <div class=\"series-venue\">\n <span>{series.venue?.name}</span>\n {#if series.venue?.googleLocationNameCache}\n <span class=\"venue-separator\">&#183;</span>\n <span class=\"venue-location\">{series.venue.googleLocationNameCache}</span>\n {/if}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Content Grid -->\n <div class=\"content-grid\">\n <!-- Main Column -->\n <div class=\"main-column\">\n <!-- About Section -->\n <section class=\"section\">\n <h2 class=\"section-heading\">About this Series</h2>\n {#if series.eventSummary}\n <p class=\"series-summary\">{series.eventSummary}</p>\n {/if}\n {#if series.description}\n <div class=\"series-description\">{series.description}</div>\n {/if}\n </section>\n\n <!-- Upcoming Dates -->\n <section class=\"section\">\n <div class=\"dates-header\">\n <h2 class=\"section-heading\">Upcoming Dates</h2>\n <span class=\"dates-count\">{series.occurrences?.length || 0} events</span>\n </div>\n\n {#if !series.occurrences?.length}\n <div class=\"empty-dates\">\n <p class=\"empty-text\">No upcoming dates scheduled at this time.</p>\n <p class=\"empty-subtext\">Check back soon for new announcements.</p>\n </div>\n {:else}\n <div class=\"dates-list\">\n {#each series.occurrences as occurrence}\n <div class=\"occurrence-card\">\n <div class=\"occurrence-info\">\n <div class=\"occurrence-date\">{formatDate(occurrence.startDateTime)}</div>\n <div class=\"occurrence-time\">\n {formatTime(occurrence.startDateTime)} - {formatTime(occurrence.endDateTime)}\n </div>\n </div>\n <div class=\"occurrence-action\">\n <button\n class=\"cta-button\"\n class:cta-disabled={occurrence.ctaState?.disabled}\n disabled={occurrence.ctaState?.disabled}\n onclick={() => handleOccurrenceClick(occurrence)}\n >\n {occurrence.ctaState?.text || 'Get tickets'}\n </button>\n </div>\n </div>\n {/each}\n </div>\n {/if}\n </section>\n\n <!-- Performers -->\n {#if series.performers?.length}\n <section class=\"section\">\n <h2 class=\"section-heading\">Performers</h2>\n <div class=\"performers-grid\">\n {#each series.performers as performer}\n <div class=\"performer-card\">\n <div class=\"performer-avatar\">\n {#if performer.profileImage}\n <img\n src={getImageUrl(performer.profileImage)}\n alt={performer.displayName || `${performer.firstName} ${performer.lastName}`}\n class=\"performer-image\"\n />\n {:else}\n <div class=\"performer-placeholder\">\n <svg class=\"placeholder-icon\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z\" />\n </svg>\n </div>\n {/if}\n </div>\n <h3 class=\"performer-name\">\n {performer.displayName || `${performer.firstName} ${performer.lastName}`}\n </h3>\n </div>\n {/each}\n </div>\n </section>\n {/if}\n </div>\n\n <!-- Sidebar -->\n <div class=\"sidebar\">\n <div class=\"sidebar-sticky\">\n {#if series.venue?.faq || series.venue?.disclaimer}\n <div class=\"sidebar-card\">\n {#if series.venue.faq}\n <div class=\"sidebar-section\">\n <h3 class=\"sidebar-heading\">FAQ</h3>\n <div class=\"faq-content\">\n {#if Array.isArray(series.venue.faq)}\n {#each series.venue.faq as item}\n <div class=\"faq-item\">\n <p class=\"faq-question\">{item.question}</p>\n <p class=\"faq-answer\">{item.answer}</p>\n </div>\n {/each}\n {:else}\n <p>{series.venue.faq}</p>\n {/if}\n </div>\n </div>\n {/if}\n\n {#if series.venue.disclaimer}\n <div class=\"sidebar-section\">\n <h3 class=\"sidebar-heading\">Important Info</h3>\n <div class=\"disclaimer-text\">{series.venue.disclaimer}</div>\n </div>\n {/if}\n </div>\n {/if}\n </div>\n </div>\n </div>\n </div>\n{/if}\n\n<style>\n .series-page {\n min-height: 100vh;\n padding-bottom: 5rem;\n background: hsl(var(--surface-primary, 0 0% 100%));\n color: hsl(var(--text-primary, 0 0% 10%));\n }\n\n /* Hero */\n .hero {\n position: relative;\n width: 100%;\n overflow: hidden;\n height: 500px;\n }\n\n @media (max-width: 768px) {\n .hero {\n height: 256px;\n }\n }\n\n .hero-skeleton {\n position: absolute;\n inset: 0;\n animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n background: hsl(var(--surface-secondary, 0 0% 96%));\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .hero-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.7s ease;\n }\n\n .hero:hover .hero-image {\n transform: scale(1.05);\n }\n\n .hero-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n padding: 1.5rem;\n background: linear-gradient(to top, color-mix(in srgb, black 90%, transparent), color-mix(in srgb, black 50%, transparent), transparent);\n }\n\n @media (min-width: 768px) {\n .hero-overlay {\n padding: 3rem;\n }\n }\n\n .hero-content {\n max-width: 64rem;\n margin-left: auto;\n margin-right: auto;\n width: 100%;\n }\n\n .series-badge {\n display: inline-flex;\n align-items: center;\n padding: 0.25rem 0.75rem;\n margin-bottom: 1rem;\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n border-radius: 9999px;\n box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n background: hsl(var(--brand-primary, 224 76% 48%));\n color: hsl(var(--text-on-primary, 0 0% 100%));\n }\n\n .series-title {\n font-size: 2.25rem;\n line-height: 1.1;\n font-weight: 700;\n margin-bottom: 0.75rem;\n letter-spacing: -0.025em;\n color: white;\n text-shadow: 0 2px 8px color-mix(in srgb, black 30%, transparent);\n }\n\n @media (min-width: 768px) {\n .series-title {\n font-size: 3.75rem;\n line-height: 1;\n }\n }\n\n .series-venue {\n font-size: 1.125rem;\n line-height: 1.75rem;\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 0.5rem;\n font-weight: 500;\n color: color-mix(in srgb, white 90%, transparent);\n }\n\n @media (min-width: 768px) {\n .series-venue {\n font-size: 1.25rem;\n line-height: 1.75rem;\n }\n }\n\n .venue-separator {\n display: none;\n opacity: 0.6;\n }\n\n @media (min-width: 768px) {\n .venue-separator {\n display: inline;\n }\n }\n\n .venue-location {\n opacity: 0.75;\n }\n\n /* Content Grid */\n .content-grid {\n max-width: 64rem;\n margin-left: auto;\n margin-right: auto;\n padding: 3rem 1.5rem;\n display: grid;\n grid-template-columns: 1fr;\n gap: 3rem;\n }\n\n @media (min-width: 768px) {\n .content-grid {\n padding-top: 5rem;\n padding-bottom: 5rem;\n }\n }\n\n @media (min-width: 1024px) {\n .content-grid {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n\n .main-column {\n display: flex;\n flex-direction: column;\n gap: 4rem;\n }\n\n @media (min-width: 1024px) {\n .main-column {\n grid-column: span 2 / span 2;\n }\n }\n\n .section {\n display: flex;\n flex-direction: column;\n gap: 1.5rem;\n }\n\n .section-heading {\n font-size: 1.875rem;\n line-height: 2.25rem;\n font-weight: 700;\n letter-spacing: -0.025em;\n padding-bottom: 1rem;\n color: hsl(var(--text-primary, 0 0% 10%));\n border-bottom: 1px solid hsl(var(--stroke-secondary, 0 0% 90%));\n }\n\n .series-summary {\n font-size: 1.25rem;\n line-height: 1.75rem;\n font-weight: 500;\n line-height: 1.625;\n color: hsl(var(--text-primary, 0 0% 20%));\n }\n\n .series-description {\n max-width: none;\n white-space: pre-line;\n line-height: 1.625;\n color: hsl(var(--text-secondary, 0 0% 40%));\n }\n\n /* Upcoming Dates */\n .dates-header {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n padding-bottom: 1rem;\n border-bottom: 1px solid hsl(var(--stroke-secondary, 0 0% 90%));\n }\n\n .dates-count {\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 500;\n color: hsl(var(--text-secondary, 0 0% 45%));\n }\n\n .empty-dates {\n padding: 3rem;\n border-radius: 1rem;\n text-align: center;\n background: hsl(var(--surface-secondary, 0 0% 96%));\n border: 2px dashed hsl(var(--stroke-secondary, 0 0% 85%));\n }\n\n .empty-text {\n font-size: 1.125rem;\n line-height: 1.75rem;\n font-weight: 500;\n color: hsl(var(--text-secondary, 0 0% 45%));\n }\n\n .empty-subtext {\n margin-top: 0.5rem;\n color: hsl(var(--text-secondary, 0 0% 55%));\n }\n\n .dates-list {\n display: flex;\n flex-direction: column;\n gap: 1rem;\n }\n\n .occurrence-card {\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding: 1.5rem;\n border-radius: 1rem;\n transition: all 0.2s;\n background: hsl(var(--surface-primary, 0 0% 100%));\n border: 1px solid hsl(var(--stroke-secondary, 0 0% 90%));\n }\n\n @media (min-width: 640px) {\n .occurrence-card {\n flex-direction: row;\n align-items: center;\n }\n }\n\n .occurrence-card:hover {\n border-color: hsl(var(--brand-primary, 224 76% 48%));\n box-shadow: 0 4px 12px color-mix(in srgb, black 8%, transparent);\n }\n\n .occurrence-info {\n margin-bottom: 1rem;\n }\n\n @media (min-width: 640px) {\n .occurrence-info {\n margin-bottom: 0;\n }\n }\n\n .occurrence-date {\n font-size: 1.25rem;\n line-height: 1.75rem;\n font-weight: 700;\n margin-bottom: 0.25rem;\n color: hsl(var(--text-primary, 0 0% 10%));\n }\n\n .occurrence-time {\n font-weight: 500;\n color: hsl(var(--text-secondary, 0 0% 45%));\n }\n\n .occurrence-action {\n padding-left: 0;\n }\n\n @media (min-width: 640px) {\n .occurrence-action {\n padding-left: 1.5rem;\n }\n }\n\n .cta-button {\n width: 100%;\n padding: 0.75rem 1.5rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 600;\n transition: transform 0.15s;\n background: hsl(var(--brand-primary, 224 76% 48%));\n color: hsl(var(--text-on-primary, 0 0% 100%));\n }\n\n @media (min-width: 640px) {\n .cta-button {\n width: auto;\n }\n }\n\n .cta-button:hover:not(:disabled) {\n transform: scale(1.05);\n }\n\n .cta-disabled {\n cursor: not-allowed;\n background: hsl(var(--surface-secondary, 0 0% 90%));\n color: hsl(var(--text-secondary, 0 0% 55%));\n }\n\n /* Performers */\n .performers-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 2rem;\n }\n\n @media (min-width: 640px) {\n .performers-grid {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n\n .performer-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n padding: 1rem;\n border-radius: 0.75rem;\n transition: background-color 0.15s;\n }\n\n .performer-card:hover {\n background: hsl(var(--surface-secondary, 0 0% 96%));\n }\n\n .performer-avatar {\n width: 7rem;\n height: 7rem;\n margin-bottom: 1rem;\n border-radius: 9999px;\n overflow: hidden;\n box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n background: hsl(var(--surface-secondary, 0 0% 92%));\n }\n\n .performer-image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.5s ease;\n }\n\n .performer-card:hover .performer-image {\n transform: scale(1.1);\n }\n\n .performer-placeholder {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: hsl(var(--text-secondary, 0 0% 60%));\n }\n\n .placeholder-icon {\n width: 3rem;\n height: 3rem;\n opacity: 0.5;\n }\n\n .performer-name {\n font-size: 1.125rem;\n line-height: 1.75rem;\n font-weight: 600;\n color: hsl(var(--text-primary, 0 0% 10%));\n }\n\n /* Sidebar */\n .sidebar {\n display: flex;\n flex-direction: column;\n gap: 2rem;\n }\n\n @media (min-width: 1024px) {\n .sidebar {\n grid-column: span 1 / span 1;\n }\n }\n\n .sidebar-sticky {\n position: sticky;\n top: 6rem;\n display: flex;\n flex-direction: column;\n gap: 2rem;\n }\n\n .sidebar-card {\n border-radius: 1rem;\n padding: 2rem;\n background: hsl(var(--surface-secondary, 0 0% 96%));\n border: 1px solid hsl(var(--stroke-secondary, 0 0% 92%));\n }\n\n .sidebar-section {\n margin-bottom: 2rem;\n }\n\n .sidebar-section:last-child {\n margin-bottom: 0;\n }\n\n .sidebar-heading {\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n margin-bottom: 1rem;\n color: hsl(var(--text-primary, 0 0% 10%));\n }\n\n .faq-content {\n color: hsl(var(--text-secondary, 0 0% 40%));\n }\n\n .faq-item {\n margin-bottom: 0.75rem;\n }\n\n .faq-question {\n font-weight: 700;\n color: hsl(var(--text-primary, 0 0% 20%));\n }\n\n .faq-answer {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n .disclaimer-text {\n font-size: 0.875rem;\n line-height: 1.625;\n padding: 1rem;\n border-radius: 0.5rem;\n background: hsl(var(--surface-primary, 0 0% 100%));\n color: hsl(var(--text-secondary, 0 0% 40%));\n border: 1px solid hsl(var(--stroke-secondary, 0 0% 90%));\n }\n</style>\n"],"names":["imageLoaded","$","seriesImage","getImageUrl","$$props","PLACEHOLDER_IMAGE","tz","formatDate","iso","formatEventDate","formatTime","formatEventTime","handleOccurrenceClick","occurrence","div","root_1","div_1","div_2","img","div_3","div_4","h1","div_5","span","span_1","fragment_1","text_2","$$render","consequent","div_6","div_7","section","p","root_3","consequent_1","div_8","root_4","consequent_2","section_1","div_9","span_2","div_10","root_5","div_11","root_6","$$anchor","div_12","root_7","div_13","div_14","div_15","div_16","button","classes_1","text_8","alternate","consequent_3","section_2","root_8","div_17","performer","div_18","root_9","div_19","img_1","root_10","$0","div_20","root_11","consequent_4","alternate_1","h3","consequent_5","div_21","div_22","div_23","root_12","div_24","root_13","div_25","item","div_26","root_15","p_1","p_2","text_10","text_11","d","p_3","root_16","text_12","consequent_7","div_27","root_17","div_28","text_13","consequent_8","consequent_9","classes","text_1"],"mappings":"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"}
@@ -1,191 +0,0 @@
1
- import "svelte/internal/disclose-version";
2
- import * as e from "svelte/internal/client";
3
- import { onMount as ne } from "svelte";
4
- import { t as ce, r as H, s as ge, w as me } from "./VenueCalendar-B5Y29ZJD.js";
5
- import { A as i } from "./colors-BZoMuXdh.js";
6
- var pe = e.from_html('<div class="confetti svelte-g1e40p"></div>'), fe = e.from_html('<div class="confetti-container svelte-g1e40p" aria-hidden="true"></div>'), ue = e.from_html('<div class="detail-row dark:border-b-gray-600/50 svelte-g1e40p"><dt class="detail-label dark:text-gray-400 svelte-g1e40p">Order ID</dt> <dd class="detail-value order-id dark:text-white dark:text-blue-500 svelte-g1e40p"> </dd></div>'), he = e.from_html('<div class="detail-row dark:border-b-gray-600/50 svelte-g1e40p"><dt class="detail-label dark:text-gray-400 svelte-g1e40p">Event</dt> <dd class="detail-value event-name dark:text-white dark:text-blue-500 svelte-g1e40p"> </dd></div>'), _e = e.from_html('<div class="detail-row dark:border-b-gray-600/50 svelte-g1e40p"><dt class="detail-label dark:text-gray-400 svelte-g1e40p">When</dt> <dd class="detail-value dark:text-white dark:text-blue-500 svelte-g1e40p"><time class="svelte-g1e40p"> </time></dd></div>'), be = e.from_html('<div class="detail-row dark:border-b-gray-600/50 svelte-g1e40p"><dt class="detail-label dark:text-gray-400 svelte-g1e40p">Where</dt> <dd class="detail-value dark:text-white dark:text-blue-500 svelte-g1e40p"> </dd></div>'), ke = e.from_html('<a class="nav-link secondary dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 svelte-g1e40p">Back to event</a>'), ye = e.from_html('<a class="nav-link primary dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700 svelte-g1e40p">Browse more events</a>'), xe = e.from_html('<nav aria-label="Next steps"><!> <!></nav>'), we = e.from_html(`<div class="success-container svelte-g1e40p" role="main" aria-labelledby="success-title"><!> <div class="content-wrapper svelte-g1e40p"><div><div class="machine-slot svelte-g1e40p"><div class="slot-inner svelte-g1e40p"></div></div> <div><div class="ticket-content svelte-g1e40p"><div class="ticket-header svelte-g1e40p"><div class="success-badge svelte-g1e40p" aria-hidden="true"><!></div> <h1 id="success-title" class="success-title dark:text-white svelte-g1e40p">You're all set!</h1> <p class="success-subtitle dark:text-gray-300 svelte-g1e40p">Your tickets have been confirmed</p></div> <div class="ticket-divider svelte-g1e40p"><div class="divider-notch left dark:bg-gray-900 svelte-g1e40p"></div> <div class="divider-line svelte-g1e40p"></div> <div class="divider-notch right dark:bg-gray-900 svelte-g1e40p"></div></div> <dl aria-label="Order details"><div class="detail-row dark:border-b-gray-600/50 svelte-g1e40p"><dt class="detail-label dark:text-gray-400 svelte-g1e40p">Email</dt> <dd class="detail-value dark:text-white dark:text-blue-500 svelte-g1e40p"> </dd></div> <!> <!> <!> <!></dl> <div class="ticket-footer dark:bg-gray-800/50 svelte-g1e40p"><p class="footer-text dark:text-gray-300 svelte-g1e40p">Check your email for your tickets</p></div></div> <div class="ticket-stub svelte-g1e40p"></div></div></div> <!></div></div>`);
7
- function Le(J, f) {
8
- e.push(f, !0);
9
- let O = e.prop(f, "data", 19, () => ({})), _ = e.prop(f, "eventUrl", 3, ""), b = e.prop(f, "browseUrl", 3, "/");
10
- const {
11
- organizationID: Ee,
12
- orgSlug: Te,
13
- slug: De,
14
- event: k,
15
- orderId: K,
16
- customerEmail: y,
17
- eventName: x,
18
- eventDateTime: w,
19
- eventLocation: E
20
- } = O() || {};
21
- let l = null;
22
- if (k)
23
- try {
24
- l = ce(k);
25
- } catch (t) {
26
- console.warn("transformEvent failed in Success component:", t), l = k;
27
- }
28
- let Q = null, u = e.state(""), v = e.state(""), n = e.state(""), c = e.state(""), g = e.state(""), m = K || O()?.orderId || "", U = e.state(!1), T = e.state(!1), D = e.state(!1);
29
- function C(t) {
30
- if (!t) return "";
31
- const a = l?.timeZone || "UTC";
32
- return me(t, a);
33
- }
34
- const A = [
35
- i.coral,
36
- i.sky.light,
37
- i.sky[400],
38
- i.mint[600],
39
- i.yellow[300],
40
- i.plum,
41
- i.mint[500],
42
- i.yellow[500]
43
- ], R = Array.from({ length: 50 }, (t, a) => ({
44
- id: a,
45
- color: A[Math.floor(Math.random() * A.length)],
46
- left: Math.random() * 100,
47
- delay: Math.random() * 0.5,
48
- duration: 2 + Math.random() * 2,
49
- size: 6 + Math.random() * 8,
50
- rotation: Math.random() * 360
51
- }));
52
- ne(async () => {
53
- setTimeout(
54
- () => {
55
- e.set(U, !0);
56
- },
57
- 100
58
- ), setTimeout(
59
- () => {
60
- e.set(T, !0);
61
- },
62
- 300
63
- ), setTimeout(
64
- () => {
65
- e.set(D, !0);
66
- },
67
- 800
68
- );
69
- try {
70
- let t = null;
71
- try {
72
- typeof H == "function" && m && (t = await H(m));
73
- } catch (a) {
74
- console.warn("getOrder failed in Success component, falling back to provided data:", a);
75
- }
76
- t ? (Q = t, e.set(u, t.customerEmail || y || "", !0), e.set(v, t.id || m, !0), e.set(n, t.eventName || l?.name || x || "", !0), e.set(c, C(t.eventDateTime || l?.startDateTime || w), !0), e.set(g, t.eventLocation || l?.location || E || "", !0)) : (e.set(u, y || "", !0), e.set(v, m, !0), e.set(n, x || l?.name || "", !0), e.set(c, C(w || l?.startDateTime), !0), e.set(g, E || l?.location || "", !0));
77
- } catch (t) {
78
- console.error("Error fetching order data:", t), t.message, e.set(u, y || "your-email@example.com", !0), e.set(v, m, !0), e.set(n, l?.name || x || "", !0), e.set(c, C(l?.startDateTime || w), !0), e.set(g, l?.location || E || "", !0);
79
- }
80
- });
81
- var M = we(), S = e.child(M);
82
- {
83
- var V = (t) => {
84
- var a = fe();
85
- e.each(a, 21, () => R, (s) => s.id, (s, r) => {
86
- var o = pe();
87
- e.template_effect(() => e.set_style(o, `
88
- left: ${e.get(r).left ?? ""}%;
89
- background-color: ${e.get(r).color ?? ""};
90
- animation-delay: ${e.get(r).delay ?? ""}s;
91
- animation-duration: ${e.get(r).duration ?? ""}s;
92
- width: ${e.get(r).size ?? ""}px;
93
- height: ${e.get(r).size ?? ""}px;
94
- transform: rotate(${e.get(r).rotation ?? ""}deg);
95
- `)), e.append(s, o);
96
- }), e.reset(a), e.append(t, a);
97
- };
98
- e.if(S, (t) => {
99
- e.get(U) && t(V);
100
- });
101
- }
102
- var $ = e.sibling(S, 2), h = e.child($);
103
- let B;
104
- var I = e.sibling(e.child(h), 2);
105
- let W;
106
- var Y = e.child(I), z = e.child(Y), F = e.child(z), X = e.child(F);
107
- ge(X, { class: "check-icon" }), e.reset(F), e.next(4), e.reset(z);
108
- var L = e.sibling(z, 4);
109
- let P;
110
- var N = e.child(L), Z = e.sibling(e.child(N), 2), ee = e.child(Z, !0);
111
- e.reset(Z), e.reset(N);
112
- var j = e.sibling(N, 2);
113
- {
114
- var te = (t) => {
115
- var a = ue(), s = e.sibling(e.child(a), 2), r = e.child(s);
116
- e.reset(s), e.reset(a), e.template_effect(() => e.set_text(r, `#${e.get(v) ?? ""}`)), e.append(t, a);
117
- };
118
- e.if(j, (t) => {
119
- e.get(v) && t(te);
120
- });
121
- }
122
- var q = e.sibling(j, 2);
123
- {
124
- var ae = (t) => {
125
- var a = he(), s = e.sibling(e.child(a), 2), r = e.child(s, !0);
126
- e.reset(s), e.reset(a), e.template_effect(() => e.set_text(r, e.get(n))), e.append(t, a);
127
- };
128
- e.if(q, (t) => {
129
- e.get(n) && t(ae);
130
- });
131
- }
132
- var G = e.sibling(q, 2);
133
- {
134
- var re = (t) => {
135
- var a = _e(), s = e.sibling(e.child(a), 2), r = e.child(s), o = e.child(r, !0);
136
- e.reset(r), e.reset(s), e.reset(a), e.template_effect(() => e.set_text(o, e.get(c))), e.append(t, a);
137
- };
138
- e.if(G, (t) => {
139
- e.get(c) && t(re);
140
- });
141
- }
142
- var se = e.sibling(G, 2);
143
- {
144
- var le = (t) => {
145
- var a = be(), s = e.sibling(e.child(a), 2), r = e.child(s, !0);
146
- e.reset(s), e.reset(a), e.template_effect(() => e.set_text(r, e.get(g))), e.append(t, a);
147
- };
148
- e.if(se, (t) => {
149
- e.get(g) && t(le);
150
- });
151
- }
152
- e.reset(L), e.next(2), e.reset(Y), e.next(2), e.reset(I), e.reset(h);
153
- var ie = e.sibling(h, 2);
154
- {
155
- var de = (t) => {
156
- var a = xe();
157
- let s;
158
- var r = e.child(a);
159
- {
160
- var o = (d) => {
161
- var p = ke();
162
- e.template_effect(() => e.set_attribute(p, "href", _())), e.append(d, p);
163
- };
164
- e.if(r, (d) => {
165
- _() && d(o);
166
- });
167
- }
168
- var oe = e.sibling(r, 2);
169
- {
170
- var ve = (d) => {
171
- var p = ye();
172
- e.template_effect(() => e.set_attribute(p, "href", b())), e.append(d, p);
173
- };
174
- e.if(oe, (d) => {
175
- b() && d(ve);
176
- });
177
- }
178
- e.reset(a), e.template_effect(() => s = e.set_class(a, 1, "nav-ctas svelte-g1e40p", null, s, { "fade-in": e.get(D) })), e.append(t, a);
179
- };
180
- e.if(ie, (t) => {
181
- (_() || b()) && t(de);
182
- });
183
- }
184
- e.reset($), e.reset(M), e.template_effect(() => {
185
- B = e.set_class(h, 1, "ticket-machine svelte-g1e40p", null, B, { animate: e.get(T) }), W = e.set_class(I, 1, "ticket svelte-g1e40p", null, W, { "slide-out": e.get(T) }), P = e.set_class(L, 1, "ticket-details svelte-g1e40p", null, P, { "fade-in": e.get(D) }), e.set_text(ee, e.get(u) || "Loading...");
186
- }), e.append(J, M), e.pop();
187
- }
188
- export {
189
- Le as default
190
- };
191
- //# sourceMappingURL=Success.legacy-D72O08IB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Success.legacy-D72O08IB.js","sources":["../src/components/Views/Success.legacy.svelte"],"sourcesContent":["<script>\n import { onMount } from \"svelte\";\n import { transformEvent, getOrder } from \"$lib/utils/utils.js\";\n import { formatConfirmationDateTime } from \"$lib/utils/datetime.js\";\n import { CheckmarkFilled } from \"carbon-icons-svelte\";\n import { ACCENT, DARK } from \"$lib/constants/colors.ts\";\n\n let {\n data = {},\n eventUrl = '',\n browseUrl = '/',\n } = $props();\n\n const {\n organizationID,\n orgSlug,\n slug,\n event: rawEvent,\n orderId: providedOrderId,\n customerEmail: providedCustomerEmail,\n eventName: providedEventName,\n eventDateTime: providedEventDateTime,\n eventLocation: providedEventLocation,\n } = data || {};\n\n let event = null;\n if (rawEvent) {\n try {\n event = transformEvent(rawEvent);\n } catch (e) {\n console.warn(\"transformEvent failed in Success component:\", e);\n event = rawEvent;\n }\n }\n\n let order = null;\n let error = null;\n let Email = $state(\"\");\n let id = $state(\"\");\n let name = $state(\"\");\n let time = $state(\"\");\n let Location = $state(\"\");\n let orderId = providedOrderId || data?.orderId || \"\";\n\n // Animation states\n let showConfetti = $state(false);\n let showTicket = $state(false);\n let showDetails = $state(false);\n\n function formatDateTime(dateTimeString) {\n if (!dateTimeString) return \"\";\n // Use event timezone if available, otherwise fall back to UTC\n const tz = event?.timeZone || 'UTC';\n return formatConfirmationDateTime(dateTimeString, tz);\n }\n\n // Generate confetti particles\n const confettiColors = [\n ACCENT.coral,\n ACCENT.sky.light,\n ACCENT.sky[400],\n ACCENT.mint[600],\n ACCENT.yellow[300],\n ACCENT.plum,\n ACCENT.mint[500],\n ACCENT.yellow[500]\n ];\n const confettiParticles = Array.from({ length: 50 }, (_, i) => ({\n id: i,\n color: confettiColors[Math.floor(Math.random() * confettiColors.length)],\n left: Math.random() * 100,\n delay: Math.random() * 0.5,\n duration: 2 + Math.random() * 2,\n size: 6 + Math.random() * 8,\n rotation: Math.random() * 360\n }));\n\n onMount(async () => {\n // Start animations\n setTimeout(() => {\n showConfetti = true;\n }, 100);\n\n setTimeout(() => {\n showTicket = true;\n }, 300);\n\n setTimeout(() => {\n showDetails = true;\n }, 800);\n\n try {\n let orderData = null;\n try {\n if (typeof getOrder === \"function\" && orderId) {\n orderData = await getOrder(orderId);\n }\n } catch (e) {\n console.warn(\n \"getOrder failed in Success component, falling back to provided data:\",\n e\n );\n }\n\n if (orderData) {\n order = orderData;\n Email = orderData.customerEmail || providedCustomerEmail || \"\";\n id = orderData.id || orderId;\n name = orderData.eventName || event?.name || providedEventName || \"\";\n time = formatDateTime(\n orderData.eventDateTime ||\n event?.startDateTime ||\n providedEventDateTime\n );\n Location =\n orderData.eventLocation ||\n event?.location ||\n providedEventLocation ||\n \"\";\n } else {\n Email = providedCustomerEmail || \"\";\n id = orderId;\n name = providedEventName || event?.name || \"\";\n time = formatDateTime(providedEventDateTime || event?.startDateTime);\n Location = providedEventLocation || event?.location || \"\";\n }\n } catch (err) {\n console.error(\"Error fetching order data:\", err);\n error = err.message;\n Email = providedCustomerEmail || \"your-email@example.com\";\n id = orderId;\n name = event?.name || providedEventName || \"\";\n time = formatDateTime(event?.startDateTime || providedEventDateTime);\n Location = event?.location || providedEventLocation || \"\";\n }\n });\n</script>\n\n<div class=\"success-container\" role=\"main\" aria-labelledby=\"success-title\">\n <!-- Confetti -->\n {#if showConfetti}\n <div class=\"confetti-container\" aria-hidden=\"true\">\n {#each confettiParticles as particle (particle.id)}\n <div\n class=\"confetti\"\n style=\"\n left: {particle.left}%;\n background-color: {particle.color};\n animation-delay: {particle.delay}s;\n animation-duration: {particle.duration}s;\n width: {particle.size}px;\n height: {particle.size}px;\n transform: rotate({particle.rotation}deg);\n \"\n ></div>\n {/each}\n </div>\n {/if}\n\n <div class=\"content-wrapper\">\n <!-- Ticket Machine Animation -->\n <div class=\"ticket-machine\" class:animate={showTicket}>\n <!-- Machine slot -->\n <div class=\"machine-slot\">\n <div class=\"slot-inner\"></div>\n </div>\n\n <!-- Ticket coming out -->\n <div class=\"ticket\" class:slide-out={showTicket}>\n <div class=\"ticket-content\">\n <div class=\"ticket-header\">\n <div class=\"success-badge\" aria-hidden=\"true\">\n <CheckmarkFilled class=\"check-icon\" />\n </div>\n <h1 id=\"success-title\" class=\"success-title dark:text-white\">You're all set!</h1>\n <p class=\"success-subtitle dark:text-gray-300\">Your tickets have been confirmed</p>\n </div>\n\n <div class=\"ticket-divider\">\n <div class=\"divider-notch left dark:bg-gray-900\"></div>\n <div class=\"divider-line\"></div>\n <div class=\"divider-notch right dark:bg-gray-900\"></div>\n </div>\n\n <dl class=\"ticket-details\" class:fade-in={showDetails} aria-label=\"Order details\">\n <div class=\"detail-row dark:border-b-gray-600/50\">\n <dt class=\"detail-label dark:text-gray-400\">Email</dt>\n <dd class=\"detail-value dark:text-white dark:text-blue-500\">{Email || 'Loading...'}</dd>\n </div>\n\n {#if id}\n <div class=\"detail-row dark:border-b-gray-600/50\">\n <dt class=\"detail-label dark:text-gray-400\">Order ID</dt>\n <dd class=\"detail-value order-id dark:text-white dark:text-blue-500\">#{id}</dd>\n </div>\n {/if}\n\n {#if name}\n <div class=\"detail-row dark:border-b-gray-600/50\">\n <dt class=\"detail-label dark:text-gray-400\">Event</dt>\n <dd class=\"detail-value event-name dark:text-white dark:text-blue-500\">{name}</dd>\n </div>\n {/if}\n\n {#if time}\n <div class=\"detail-row dark:border-b-gray-600/50\">\n <dt class=\"detail-label dark:text-gray-400\">When</dt>\n <dd class=\"detail-value dark:text-white dark:text-blue-500\"><time>{time}</time></dd>\n </div>\n {/if}\n\n {#if Location}\n <div class=\"detail-row dark:border-b-gray-600/50\">\n <dt class=\"detail-label dark:text-gray-400\">Where</dt>\n <dd class=\"detail-value dark:text-white dark:text-blue-500\">{Location}</dd>\n </div>\n {/if}\n </dl>\n\n <div class=\"ticket-footer dark:bg-gray-800/50\">\n <p class=\"footer-text dark:text-gray-300\">Check your email for your tickets</p>\n </div>\n </div>\n\n <!-- Ticket stub pattern -->\n <div class=\"ticket-stub\"></div>\n </div>\n </div>\n\n <!-- Navigation CTAs -->\n {#if eventUrl || browseUrl}\n <nav class=\"nav-ctas\" class:fade-in={showDetails} aria-label=\"Next steps\">\n {#if eventUrl}\n <a href={eventUrl} class=\"nav-link secondary dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700\">Back to event</a>\n {/if}\n {#if browseUrl}\n <a href={browseUrl} class=\"nav-link primary dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700\">Browse more events</a>\n {/if}\n </nav>\n {/if}\n </div>\n</div>\n\n<style>\n .success-container {\n position: relative;\n min-height: 100vh;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.25rem;\n background: linear-gradient(180deg, rgb(255 255 255) 0%, rgb(249 250 251) 100%);\n \n &:where(.dark, .dark *) {\n background: linear-gradient(180deg, rgb(17 24 39) 0%, rgb(31 41 55) 100%);\n }\n }\n\n /* Confetti */\n .confetti-container {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 100%;\n pointer-events: none;\n overflow: hidden;\n }\n\n .confetti {\n position: absolute;\n top: -20px;\n border-radius: 2px;\n animation: confetti-fall linear forwards;\n }\n\n @keyframes confetti-fall {\n 0% {\n transform: translateY(0) rotate(0deg);\n opacity: 1;\n }\n 100% {\n transform: translateY(100vh) rotate(720deg);\n opacity: 0;\n }\n }\n\n /* Content wrapper */\n .content-wrapper {\n position: relative;\n z-index: 10;\n width: 100%;\n max-width: 380px;\n }\n\n /* Ticket machine */\n .ticket-machine {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .machine-slot {\n width: 100%;\n height: 16px;\n background: linear-gradient(180deg, rgb(55 65 81) 0%, rgb(31 41 55) 100%);\n border-radius: 8px 8px 0 0;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 4px 12px color-mix(in srgb, black 20%, transparent);\n position: relative;\n z-index: 5;\n }\n\n .slot-inner {\n width: 80%;\n height: 4px;\n background: rgb(17 24 39);\n border-radius: 2px;\n }\n\n /* Ticket */\n .ticket {\n width: 100%;\n background: white;\n border-radius: 0 0 16px 16px;\n box-shadow: 0 8px 32px color-mix(in srgb, black 12%, transparent);\n overflow: hidden;\n transform: translateY(-100%);\n opacity: 0;\n transition: transform 0.8s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.3s ease;\n }\n\n .ticket.slide-out {\n transform: translateY(0);\n opacity: 1;\n }\n\n .ticket-content {\n padding: 32px 24px 24px;\n }\n\n .ticket-header {\n text-align: center;\n margin-bottom: 24px;\n }\n\n .success-badge {\n width: 64px;\n height: 64px;\n background: linear-gradient(135deg, rgb(22 163 74) 0%, rgb(22 163 74) 100%);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n margin: 0 auto 16px;\n animation: badge-pop 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) 0.5s both;\n }\n\n @keyframes badge-pop {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n }\n\n .success-badge :global(.check-icon) {\n width: 32px;\n height: 32px;\n color: white;\n }\n\n .success-title {\n font-size: 1.5rem;\n line-height: 2rem;\n font-weight: 600;\n color: rgb(17 24 39);\n margin-bottom: 0.5rem;\n }\n\n .success-subtitle {\n font-size: 0.875rem;\n line-height: 1.25rem;\n color: rgb(75 85 99);\n margin: 0;\n }\n\n /* Ticket divider */\n .ticket-divider {\n position: relative;\n display: flex;\n align-items: center;\n margin: 0 -24px 24px;\n padding: 0 24px;\n }\n\n .divider-notch {\n width: 1rem;\n height: 1rem;\n border-radius: 9999px;\n position: absolute;\n background-color: rgb(255 255 255);\n }\n\n .divider-notch.left {\n left: -8px;\n }\n\n .divider-notch.right {\n right: -8px;\n }\n\n .divider-line {\n flex: 1 1 0%;\n height: 0.125rem;\n background: repeating-linear-gradient(\n 90deg,\n rgb(209 213 219) 0,\n rgb(209 213 219) 8px,\n transparent 8px,\n transparent 16px\n );\n \n &:where(.dark, .dark *) {\n background: repeating-linear-gradient(\n 90deg,\n rgb(75 85 99) 0,\n rgb(75 85 99) 8px,\n transparent 8px,\n transparent 16px\n );\n }\n }\n\n /* Ticket details */\n .ticket-details {\n opacity: 0;\n transform: translateY(10px);\n transition: opacity 0.4s ease, transform 0.4s ease;\n }\n\n .ticket-details.fade-in {\n opacity: 1;\n transform: translateY(0);\n }\n\n .detail-row {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n border-bottom: 1px solid rgb(209 213 219 / 0.5);\n }\n\n .detail-row:last-child {\n border-bottom: 0;\n }\n\n .detail-label {\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 600;\n color: rgb(107 114 128);\n text-transform: uppercase;\n letter-spacing: 0.025em;\n }\n\n .detail-value {\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 500;\n color: rgb(17 24 39);\n overflow-wrap: break-word;\n }\n\n .detail-value.order-id {\n color: rgb(29 78 216);\n font-family: 'SF Mono', 'Consolas', monospace;\n }\n\n .detail-value.event-name {\n font-size: 1rem;\n line-height: 1.5rem;\n font-weight: 600;\n }\n\n /* Ticket footer */\n .ticket-footer {\n margin-top: 1.5rem;\n padding: 1rem;\n border-radius: 0.5rem;\n text-align: center;\n background-color: rgb(249 250 251 / 0.5);\n }\n\n .footer-text {\n font-size: 0.875rem;\n line-height: 1.25rem;\n color: rgb(75 85 99);\n margin: 0;\n }\n\n /* Ticket stub pattern */\n .ticket-stub {\n height: 1.5rem;\n background: linear-gradient(\n 90deg,\n transparent 0,\n transparent 8px,\n rgb(209 213 219 / 0.3) 8px,\n rgb(209 213 219 / 0.3) 16px\n );\n background-size: 16px 100%;\n \n &:where(.dark, .dark *) {\n background: linear-gradient(\n 90deg,\n transparent 0,\n transparent 8px,\n rgb(75 85 99 / 0.3) 8px,\n rgb(75 85 99 / 0.3) 16px\n );\n background-size: 16px 100%;\n }\n }\n\n /* Navigation CTAs */\n .nav-ctas {\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n margin-top: 1.5rem;\n opacity: 0;\n transform: translateY(10px);\n transition: opacity 0.4s ease 0.2s, transform 0.4s ease 0.2s;\n }\n\n .nav-ctas.fade-in {\n opacity: 1;\n transform: translateY(0);\n }\n\n .nav-link {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0.75rem 1rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n font-weight: 600;\n text-decoration: none;\n transition: background-color 0.15s, color 0.15s;\n }\n\n .nav-link.primary {\n background: hsl(var(--brand-primary, 220 90% 56%));\n color: hsl(var(--text-on-primary, 0 0% 100%));\n }\n\n .nav-link.primary:hover {\n filter: brightness(0.95);\n }\n\n .nav-link.secondary {\n background-color: rgb(243 244 246);\n color: rgb(55 65 81);\n }\n\n .nav-link.secondary:hover {\n background-color: rgb(229 231 235);\n }\n\n /* Responsive */\n @media (max-width: 480px) {\n .success-container {\n padding: 16px;\n }\n\n .ticket-content {\n padding: 24px 20px 20px;\n }\n\n .success-title {\n font-size: 20px;\n }\n\n .success-badge {\n width: 56px;\n height: 56px;\n }\n\n .success-badge :global(.check-icon) {\n width: 28px;\n height: 28px;\n }\n }\n</style>\n"],"names":["data","$","$$props","eventUrl","browseUrl","organizationID","orgSlug","slug","rawEvent","providedOrderId","providedCustomerEmail","providedEventName","providedEventDateTime","providedEventLocation","event","transformEvent","e","order","Email","id","name","time","Location","orderId","showConfetti","showTicket","showDetails","formatDateTime","dateTimeString","tz","formatConfirmationDateTime","confettiColors","ACCENT","confettiParticles","_","i","onMount","orderData","getOrder","err","div","root","div_1","root_1","particle","$$anchor","div_2","root_2","$$render","consequent","div_3","node","div_4","div_5","div_6","div_7","div_8","CheckmarkFilled","node_1","dl","div_9","dd","div_10","root_3","dd_1","consequent_1","div_11","root_4","dd_2","consequent_2","div_12","root_5","dd_3","time_1","consequent_3","div_13","root_6","dd_4","consequent_4","nav","root_7","a","root_8","consequent_5","a_1","root_9","consequent_6","classes_3","consequent_7","classes","classes_1","classes_2","text"],"mappings":"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"}