@getmicdrop/venue-calendar 4.0.111 → 4.0.113

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 (99) hide show
  1. package/README.md +2 -0
  2. package/dist/CartView-DBV2yZaL.js +2466 -0
  3. package/dist/CartView-DBV2yZaL.js.map +1 -0
  4. package/dist/{Checkout-DwJr030c.js → Checkout-CukZs5WU.js} +5 -5
  5. package/dist/{Checkout-DwJr030c.js.map → Checkout-CukZs5WU.js.map} +1 -1
  6. package/dist/{Checkout-DBaNrRya.js → Checkout-DBXrhhKW.js} +54 -54
  7. package/dist/{Checkout-DBaNrRya.js.map → Checkout-DBXrhhKW.js.map} +1 -1
  8. package/dist/{CheckoutTimer-DPFVh7QG.js → CheckoutTimer-C7osBosg.js} +5 -5
  9. package/dist/{CheckoutTimer-DPFVh7QG.js.map → CheckoutTimer-C7osBosg.js.map} +1 -1
  10. package/dist/{ClockIcon-BoEIfS3d.js → ClockIcon-BeCxOp69.js} +2 -2
  11. package/dist/{ClockIcon-BoEIfS3d.js.map → ClockIcon-BeCxOp69.js.map} +1 -1
  12. package/dist/{CollectionView-DM3WLpLu.js → CollectionView-CMm-2iBY.js} +44 -45
  13. package/dist/CollectionView-CMm-2iBY.js.map +1 -0
  14. package/dist/{Event-DymZpajQ.js → Event-CGnKZ-pZ.js} +585 -581
  15. package/dist/Event-CGnKZ-pZ.js.map +1 -0
  16. package/dist/{EventPage-D7GG_BWH.js → EventPage-DBGHmWGD.js} +10 -10
  17. package/dist/EventPage-DBGHmWGD.js.map +1 -0
  18. package/dist/{Heading-C8oOcA05.js → Heading-NDMjqlhz.js} +5 -5
  19. package/dist/Heading-NDMjqlhz.js.map +1 -0
  20. package/dist/{ScarcityBadge-BqJHRkab.js → ScarcityBadge-BqL0twaw.js} +28 -28
  21. package/dist/{ScarcityBadge-BqJHRkab.js.map → ScarcityBadge-BqL0twaw.js.map} +1 -1
  22. package/dist/{SeriesPage-DsJ9zGPQ.js → SeriesPage-BggX59ED.js} +5 -5
  23. package/dist/{SeriesPage-DsJ9zGPQ.js.map → SeriesPage-BggX59ED.js.map} +1 -1
  24. package/dist/{Spinner-DPzuHWU6.js → Spinner-C4aYrnjh.js} +2 -2
  25. package/dist/{Spinner-DPzuHWU6.js.map → Spinner-C4aYrnjh.js.map} +1 -1
  26. package/dist/{Success-C0D_INAc.js → Success-BtREZD7W.js} +8 -8
  27. package/dist/Success-BtREZD7W.js.map +1 -0
  28. package/dist/{Text-DOd8068v.js → Text-B0QR6Ape.js} +4 -4
  29. package/dist/{Text-DOd8068v.js.map → Text-B0QR6Ape.js.map} +1 -1
  30. package/dist/{VenueCalendar-B809Hecp.js → VenueCalendar-DIAMhER4.js} +4199 -4141
  31. package/dist/VenueCalendar-DIAMhER4.js.map +1 -0
  32. package/dist/{ViewTicketsEmbed-BPMp4JM0.js → ViewTicketsEmbed-D4zF9Qgm.js} +388 -381
  33. package/dist/{ViewTicketsEmbed-BPMp4JM0.js.map → ViewTicketsEmbed-D4zF9Qgm.js.map} +1 -1
  34. package/dist/api/api/client.d.ts +17 -0
  35. package/dist/api/api/cta.d.ts +34 -0
  36. package/dist/api/api/events.d.ts +183 -0
  37. package/dist/api/api/gift-cards.d.ts +108 -0
  38. package/dist/api/api/index.d.ts +46 -0
  39. package/dist/api/api/orders.d.ts +149 -0
  40. package/dist/api/api/promo.d.ts +45 -0
  41. package/dist/api/api/result.d.ts +78 -0
  42. package/dist/api/api/route-manifest.d.ts +179 -0
  43. package/dist/api/api/transformers/address.d.ts +18 -0
  44. package/dist/api/api/transformers/cart.d.ts +19 -0
  45. package/dist/api/api/transformers/collection.d.ts +12 -0
  46. package/dist/api/api/transformers/event.d.ts +173 -0
  47. package/dist/api/api/transformers/giftCard.d.ts +11 -0
  48. package/dist/api/api/transformers/index.d.ts +27 -0
  49. package/dist/api/api/transformers/order.d.ts +44 -0
  50. package/dist/api/api/transformers/performer.d.ts +8 -0
  51. package/dist/api/api/transformers/series.d.ts +12 -0
  52. package/dist/api/api/transformers/venue.d.ts +39 -0
  53. package/dist/api/api/venues.d.ts +33 -0
  54. package/dist/api/api/waitlist.d.ts +49 -0
  55. package/dist/api/api.cjs +2 -0
  56. package/dist/api/api.cjs.map +1 -0
  57. package/dist/api/api.mjs +1302 -0
  58. package/dist/api/api.mjs.map +1 -0
  59. package/dist/api/types.d.ts +483 -0
  60. package/dist/{labels-wFEhrJkb.js → labels-CUDO5VqI.js} +3 -3
  61. package/dist/{labels-wFEhrJkb.js.map → labels-CUDO5VqI.js.map} +1 -1
  62. package/dist/{modalManager.svelte-DjiZPIja.js → modalManager.svelte-CWfqhQHL.js} +2 -2
  63. package/dist/{modalManager.svelte-DjiZPIja.js.map → modalManager.svelte-CWfqhQHL.js.map} +1 -1
  64. package/dist/navigation--gZASiSa.js.map +1 -1
  65. package/dist/{promo-DK6Hxogl.js → promo-4scuh00Y.js} +9 -9
  66. package/dist/{promo-DK6Hxogl.js.map → promo-4scuh00Y.js.map} +1 -1
  67. package/dist/seo/HostSeoController.d.ts +68 -0
  68. package/dist/seo/buildCollectionJsonLd.d.ts +8 -0
  69. package/dist/seo/buildEventJsonLd.d.ts +9 -0
  70. package/dist/seo/buildSeriesJsonLd.d.ts +6 -0
  71. package/dist/seo/helpers.d.ts +88 -0
  72. package/dist/seo/index.d.ts +10 -0
  73. package/dist/seo/seo.cjs +2 -0
  74. package/dist/seo/seo.cjs.map +1 -0
  75. package/dist/seo/seo.mjs +688 -0
  76. package/dist/seo/seo.mjs.map +1 -0
  77. package/dist/seo/types.d.ts +149 -0
  78. package/dist/{showcase-state-options-BuPnUf0V.js → showcase-state-options-DG5Bn9mL.js} +2 -2
  79. package/dist/showcase-state-options-DG5Bn9mL.js.map +1 -0
  80. package/dist/{transform-C6LCkao6.js → transform-B1kRFSE7.js} +10 -10
  81. package/dist/{transform-C6LCkao6.js.map → transform-B1kRFSE7.js.map} +1 -1
  82. package/dist/{utm-DYGTGbVA.js → utm-CPOH8BYT.js} +2 -2
  83. package/dist/{utm-DYGTGbVA.js.map → utm-CPOH8BYT.js.map} +1 -1
  84. package/dist/venue-calendar.css +1 -1
  85. package/dist/venue-calendar.es.js +4 -4
  86. package/dist/venue-calendar.iife.js +37 -37
  87. package/dist/venue-calendar.iife.js.map +1 -1
  88. package/dist/venue-calendar.umd.js +32 -32
  89. package/dist/venue-calendar.umd.js.map +1 -1
  90. package/package.json +7 -3
  91. package/dist/CartView-DiSdmuA_.js +0 -2475
  92. package/dist/CartView-DiSdmuA_.js.map +0 -1
  93. package/dist/CollectionView-DM3WLpLu.js.map +0 -1
  94. package/dist/Event-DymZpajQ.js.map +0 -1
  95. package/dist/EventPage-D7GG_BWH.js.map +0 -1
  96. package/dist/Heading-C8oOcA05.js.map +0 -1
  97. package/dist/Success-C0D_INAc.js.map +0 -1
  98. package/dist/VenueCalendar-B809Hecp.js.map +0 -1
  99. package/dist/showcase-state-options-BuPnUf0V.js.map +0 -1
@@ -0,0 +1,688 @@
1
+ function E() {
2
+ return "America/Los_Angeles";
3
+ }
4
+ const V = /<\/(?:p|div|h[1-6]|li|ul|ol|blockquote|tr)>/gi, x = /<br\s*\/?>/gi, z = /<[^>]*>/g, J = {
5
+ "&amp;": "&",
6
+ "&lt;": "<",
7
+ "&gt;": ">",
8
+ "&quot;": '"',
9
+ "&#39;": "'",
10
+ "&apos;": "'",
11
+ "&nbsp;": " "
12
+ };
13
+ function j(t) {
14
+ return t.replace(/&#x([0-9a-f]+);/gi, (e, n) => v(parseInt(n, 16))).replace(/&#(\d+);/g, (e, n) => v(Number(n))).replace(/&[a-z0-9]+;/gi, (e) => J[e.toLowerCase()] ?? e);
15
+ }
16
+ function v(t) {
17
+ return Number.isFinite(t) && t > 0 && t <= 1114111 ? String.fromCodePoint(t) : "";
18
+ }
19
+ function I(t, e) {
20
+ if (!t)
21
+ return "";
22
+ let n = String(t).replace(x, " ").replace(V, " ").replace(z, "");
23
+ if (n = j(n).replace(/\s+/g, " ").trim(), e && e > 0 && n.length > e) {
24
+ const i = n.slice(0, e), s = i.lastIndexOf(" ");
25
+ n = (s > 40 ? i.slice(0, s) : i).trimEnd() + "…";
26
+ }
27
+ return n;
28
+ }
29
+ function w() {
30
+ return /* @__PURE__ */ new Date();
31
+ }
32
+ class F extends Error {
33
+ constructor(e, n, i = {}) {
34
+ super(e), this.name = "AppError", this.code = n, this.status = i.status ?? 500, this.details = i.details, this.timestamp = w(), this.recoverable = i.recoverable ?? !0, this.cause = i.cause, Error.captureStackTrace && Error.captureStackTrace(this, this.constructor);
35
+ }
36
+ /**
37
+ * Serialize error for logging/reporting
38
+ */
39
+ toJSON() {
40
+ return {
41
+ name: this.name,
42
+ code: this.code,
43
+ message: this.message,
44
+ status: this.status,
45
+ details: this.details,
46
+ timestamp: this.timestamp.toISOString(),
47
+ recoverable: this.recoverable,
48
+ stack: this.stack,
49
+ cause: this.cause?.message
50
+ };
51
+ }
52
+ /**
53
+ * Get user-friendly message.
54
+ *
55
+ * Subclasses override this and may consult an optional `ErrorMessageResolver`
56
+ * to localize. The base class returns the raw message and ignores any
57
+ * resolver (the parameter exists only so the signature is uniform across the
58
+ * hierarchy).
59
+ */
60
+ getUserMessage(e) {
61
+ return this.message;
62
+ }
63
+ /**
64
+ * Check if this error type is retryable
65
+ */
66
+ isRetryable() {
67
+ return this.recoverable;
68
+ }
69
+ }
70
+ class k extends F {
71
+ constructor(e, n, i = {}) {
72
+ super(e, n, {
73
+ // 422 Unprocessable — the value itself failed an invariant. Not a 500
74
+ // (nothing crashed server-side) and not retryable (re-running the same
75
+ // bad value fails identically), so recoverable defaults to false.
76
+ status: 422,
77
+ recoverable: !1,
78
+ ...i
79
+ }), this.name = "ValueGuardError";
80
+ }
81
+ }
82
+ class _ extends k {
83
+ constructor(e, n, i) {
84
+ super(e, n, { details: i }), this.name = "DateTimeError";
85
+ }
86
+ }
87
+ var d;
88
+ (function(t) {
89
+ t.INVALID_TIMEZONE = "INVALID_TIMEZONE", t.INVALID_ISO_STRING = "INVALID_ISO_STRING", t.INVALID_DATE = "INVALID_DATE", t.INVALID_TIME = "INVALID_TIME", t.MISSING_TIMEZONE = "MISSING_TIMEZONE", t.PARSE_ERROR = "PARSE_ERROR";
90
+ })(d || (d = {}));
91
+ function M(t, e, n, i = 0, s = 0, r = 0) {
92
+ const o = new Date(Date.UTC(t, e - 1, n, i, s, r));
93
+ return t >= 0 && t <= 99 && o.setUTCFullYear(t), o;
94
+ }
95
+ const B = /^(\d{4})-(\d{2})-(\d{2})(?:T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?(?:Z|[+-]\d{2}:\d{2}))?$/, H = /^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}(?::\d{2}(?:\.\d{1,9})?)?$/;
96
+ function U(t, e, n) {
97
+ const i = M(t, e, n);
98
+ return i.getUTCFullYear() === t && i.getUTCMonth() === e - 1 && i.getUTCDate() === n;
99
+ }
100
+ const W = /^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,9}))? ?([+-])(\d{2}):?(\d{2})(?: [A-Za-z][A-Za-z0-9_/+-]*)?(?: m=[+-][\d.]+)?$/, P = M(1, 1, 1).getTime();
101
+ function C(t) {
102
+ const e = B.exec(t);
103
+ if (e) {
104
+ const [, i, s, r] = e;
105
+ return { iso: t, year: +i, month: +s, day: +r };
106
+ }
107
+ const n = W.exec(t);
108
+ if (n) {
109
+ const [, i, s, r, o, c, u, a, m, l, h] = n, f = a ? `.${a.slice(0, 3).padEnd(3, "0")}` : "";
110
+ return {
111
+ iso: `${i}-${s}-${r}T${o}:${c}:${u}${f}${m}${l}:${h}`,
112
+ year: +i,
113
+ month: +s,
114
+ day: +r
115
+ };
116
+ }
117
+ return null;
118
+ }
119
+ function K(t) {
120
+ if (typeof t == "number") {
121
+ if (!Number.isFinite(t))
122
+ return null;
123
+ const i = new Date(t);
124
+ return Number.isNaN(i.getTime()) ? null : i;
125
+ }
126
+ if (typeof t != "string")
127
+ return null;
128
+ const e = C(t.trim());
129
+ if (!e || !U(e.year, e.month, e.day))
130
+ return null;
131
+ const n = new Date(e.iso);
132
+ return Number.isNaN(n.getTime()) ? null : n;
133
+ }
134
+ function Y(t) {
135
+ const e = K(t);
136
+ return e !== null && e.getTime() === P;
137
+ }
138
+ function O(t, e) {
139
+ if (t.getTime() === P)
140
+ throw new _(`toInstant: ${JSON.stringify(e)} is the backend's UNSET marker (Go's zero time.Time), not a moment — the field was never filled in. toInstant is the REQUIRED-timestamp door, so an unset value here is a bug: returning the year-1 instant it names would sort this row ahead of every real date and answer "yes" to "has this started?". If the field is allowed to be unset, read it with toInstantOrNull (null), ask isAbsentTimestamp why it is missing, and order it with compareWireInstants.`, d.INVALID_ISO_STRING, { value: e });
141
+ }
142
+ function A(t, e) {
143
+ if (!(t instanceof Date) || Number.isNaN(t.getTime()))
144
+ throw new _(`${e} must be a valid Date`, d.INVALID_DATE, { value: t });
145
+ }
146
+ function D(t, e) {
147
+ return A(t, "compareInstants(a)"), A(e, "compareInstants(b)"), t.getTime() - e.getTime();
148
+ }
149
+ function Q(t) {
150
+ if (typeof t == "number") {
151
+ if (!Number.isFinite(t))
152
+ throw new _(`toInstant: epoch milliseconds must be a finite number, got ${t}`, d.INVALID_DATE, { value: t });
153
+ const o = new Date(t);
154
+ return A(o, "toInstant(value)"), O(o, t), o;
155
+ }
156
+ if (typeof t != "string" || t.trim() === "")
157
+ throw new _(`toInstant: a UTC ISO timestamp or epoch ms is required, got ${JSON.stringify(t)}`, typeof t == "string" ? d.INVALID_ISO_STRING : d.INVALID_DATE, { value: t });
158
+ const e = C(t);
159
+ if (!e)
160
+ throw H.test(t) ? new _(`toInstant: ${JSON.stringify(t)} carries a time but no timezone, so it is not an instant — it would resolve on the viewer's clock and land on a different calendar day for a viewer in Los Angeles than one in London. Send a UTC wire timestamp (2026-06-09T20:00:00Z) or an explicit offset (2026-06-09T13:00:00-07:00). If this is a local wall-clock value, it belongs in datetime/local or parseLocalToUTC(value, timezone), not here.`, d.MISSING_TIMEZONE, { value: t }) : new _(`toInstant: not an ISO-8601 timestamp: ${JSON.stringify(t)}`, d.INVALID_ISO_STRING, { value: t });
161
+ const { year: n, month: i, day: s } = e;
162
+ if (!U(n, i, s))
163
+ throw new _(`toInstant: ${n}-${i}-${s} is not a real calendar date: ${JSON.stringify(t)}`, d.INVALID_ISO_STRING, { value: t });
164
+ const r = new Date(e.iso);
165
+ if (Number.isNaN(r.getTime()))
166
+ throw new _(`toInstant: ISO-8601 shaped but not a real instant: ${JSON.stringify(t)}`, d.INVALID_ISO_STRING, { value: t });
167
+ return O(r, t), r;
168
+ }
169
+ function $(t) {
170
+ if (t == null || typeof t == "string" && t.trim() === "" || Y(t))
171
+ return null;
172
+ try {
173
+ return Q(t);
174
+ } catch {
175
+ return null;
176
+ }
177
+ }
178
+ function le(t) {
179
+ return t.replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/&/g, "\\u0026");
180
+ }
181
+ function S(t, e) {
182
+ if (!t) return null;
183
+ const n = new Date(t);
184
+ if (isNaN(n.getTime())) return null;
185
+ const i = {
186
+ year: "numeric",
187
+ month: "2-digit",
188
+ day: "2-digit",
189
+ hour: "2-digit",
190
+ minute: "2-digit",
191
+ second: "2-digit",
192
+ hour12: !1,
193
+ timeZoneName: "shortOffset"
194
+ };
195
+ let s;
196
+ try {
197
+ s = new Intl.DateTimeFormat("en-US", { ...i, timeZone: e });
198
+ } catch {
199
+ s = new Intl.DateTimeFormat("en-US", {
200
+ ...i,
201
+ timeZone: E()
202
+ });
203
+ }
204
+ const r = s.formatToParts(n), o = (g) => r.find((T) => T.type === g)?.value || "", c = o("year"), u = o("month"), a = o("day"), m = o("hour"), l = o("minute"), h = o("second"), f = o("timeZoneName");
205
+ let y = "+00:00";
206
+ if (f) {
207
+ const g = f.match(/GMT([+-])(\d+)(?::(\d+))?/);
208
+ if (g) {
209
+ const T = g[1], G = g[2].padStart(2, "0"), q = g[3] || "00";
210
+ y = `${T}${G}:${q}`;
211
+ }
212
+ }
213
+ return `${c}-${u}-${a}T${m}:${l}:${h}${y}`;
214
+ }
215
+ function X(t) {
216
+ if (!t) return null;
217
+ const e = t.split(",").map((s) => s.trim());
218
+ if (e.length < 2)
219
+ return {
220
+ "@type": "PostalAddress",
221
+ streetAddress: t,
222
+ addressCountry: "US"
223
+ };
224
+ const i = e[e.length - 1].match(/^([A-Z]{2})\s+(\d{5}(?:-\d{4})?)$/);
225
+ return i && e.length >= 3 ? {
226
+ "@type": "PostalAddress",
227
+ streetAddress: e.slice(0, -2).join(", "),
228
+ addressLocality: e[e.length - 2],
229
+ addressRegion: i[1],
230
+ postalCode: i[2],
231
+ addressCountry: "US"
232
+ } : {
233
+ "@type": "PostalAddress",
234
+ streetAddress: e[0],
235
+ addressLocality: e.slice(1).join(", "),
236
+ addressCountry: "US"
237
+ };
238
+ }
239
+ function Z(t, e) {
240
+ if (t && (t.city || t.state || t.postalCode)) {
241
+ const n = { "@type": "PostalAddress" };
242
+ return t.address && (n.streetAddress = t.address), t.city && (n.addressLocality = t.city), t.state && (n.addressRegion = t.state), t.postalCode && (n.postalCode = t.postalCode), n.addressCountry = t.country || "US", n;
243
+ }
244
+ return X(t && t.address || e || null);
245
+ }
246
+ function R(t) {
247
+ if (!t) return "https://schema.org/EventScheduled";
248
+ const e = t.toLowerCase();
249
+ return e === "cancelled" || e === "canceled" ? "https://schema.org/EventCancelled" : e === "postponed" ? "https://schema.org/EventPostponed" : e === "rescheduled" ? "https://schema.org/EventRescheduled" : "https://schema.org/EventScheduled";
250
+ }
251
+ function ee(t) {
252
+ if ((t.remainingCapacity ?? t.quantityRemaining ?? t.quantity) === 0 || t.soldOut)
253
+ return "https://schema.org/SoldOut";
254
+ const n = w(), i = $(
255
+ t.salesBegin || t.salesStart || t.saleBegin || t.onSaleStart
256
+ ), s = $(
257
+ t.salesEnd || t.saleEnd || t.onSaleEnd
258
+ );
259
+ return i && D(i, n) > 0 ? "https://schema.org/PreOrder" : s && D(s, n) < 0 ? "https://schema.org/SoldOut" : "https://schema.org/InStock";
260
+ }
261
+ function b(t, e, n, i = {}) {
262
+ return t !== e ? {
263
+ "@type": "AggregateOffer",
264
+ lowPrice: t,
265
+ highPrice: e,
266
+ priceCurrency: "USD",
267
+ availability: n,
268
+ ...i
269
+ } : {
270
+ "@type": "Offer",
271
+ price: t,
272
+ priceCurrency: "USD",
273
+ availability: n,
274
+ ...i
275
+ };
276
+ }
277
+ function te(t, e) {
278
+ if (!t || t.length === 0) return null;
279
+ const n = t.filter((c) => {
280
+ const u = c.visibility ?? 0, a = u === 0 || u === 1, m = c.salesChannel !== 2;
281
+ return a && m;
282
+ });
283
+ if (n.length === 0) return null;
284
+ const i = n.map((c) => parseFloat(String(c.price ?? 0))).filter((c) => !isNaN(c));
285
+ if (i.length === 0) return null;
286
+ const s = Math.min(...i), r = Math.max(...i), o = n[0];
287
+ return b(
288
+ s,
289
+ r,
290
+ ee(o),
291
+ {
292
+ url: e || void 0,
293
+ validFrom: o?.salesBegin || o?.salesStart || void 0
294
+ }
295
+ );
296
+ }
297
+ function ne(t) {
298
+ if (!t || t.length === 0) return null;
299
+ const e = t.filter((n) => {
300
+ const i = n.acceptedState === 2, s = !n.shouldBeHidden, r = n.RosterPerformer?.User?.performerProfile, o = r?.firstName || r?.lastName || r?.displayName;
301
+ return i && s && o;
302
+ });
303
+ return e.length === 0 ? null : e.map((n) => {
304
+ const i = n.RosterPerformer?.User?.performerProfile;
305
+ return {
306
+ "@type": "PerformingGroup",
307
+ name: i?.displayName || [i?.firstName, i?.lastName].filter(Boolean).join(" ")
308
+ };
309
+ });
310
+ }
311
+ function ie(t) {
312
+ const {
313
+ event: e,
314
+ venue: n,
315
+ venueTimeZone: i = E(),
316
+ eventUrl: s,
317
+ organizer: r
318
+ } = t;
319
+ if (!e) return null;
320
+ const o = S(
321
+ e.startDateTime,
322
+ i
323
+ );
324
+ if (!e.name || !o || !n?.name)
325
+ return null;
326
+ const c = Z(
327
+ n,
328
+ n?.googleLocationNameCache
329
+ ), u = {
330
+ "@type": "Place",
331
+ name: n.name
332
+ };
333
+ c && (u.address = c);
334
+ const a = {
335
+ "@context": "https://schema.org",
336
+ "@type": "Event",
337
+ name: e.name,
338
+ startDate: o,
339
+ eventStatus: R(e.status),
340
+ eventAttendanceMode: "https://schema.org/OfflineEventAttendanceMode",
341
+ location: u
342
+ }, m = S(e.endDateTime, i);
343
+ m && (a.endDate = m);
344
+ const l = I(e.description) || e.eventSummary;
345
+ l && (a.description = l);
346
+ const h = e.image || e.coverImage || e.ShowImage;
347
+ h && (a.image = [h]);
348
+ const f = te(e.availableTickets, s);
349
+ f && (a.offers = f);
350
+ const y = ne(e.performers);
351
+ if (y && y.length > 0 && (a.performer = y), r?.name) {
352
+ const g = {
353
+ "@type": "Organization",
354
+ name: r.name
355
+ };
356
+ r.url && (g.url = r.url), a.organizer = g;
357
+ }
358
+ return s && (a.url = s), a;
359
+ }
360
+ function se(t) {
361
+ switch (t) {
362
+ case "available":
363
+ return "https://schema.org/InStock";
364
+ case "sold_out":
365
+ return "https://schema.org/SoldOut";
366
+ case "coming_soon":
367
+ return "https://schema.org/PreOrder";
368
+ case "ended":
369
+ return "https://schema.org/SoldOut";
370
+ default:
371
+ return "https://schema.org/InStock";
372
+ }
373
+ }
374
+ function re(t, e) {
375
+ if (!t || t.length === 0) return null;
376
+ const n = t.filter(
377
+ (s) => s.status !== "sold_out" && s.status !== "ended"
378
+ );
379
+ if (n.length === 0) {
380
+ const s = t.map((r) => r.price).filter((r) => !isNaN(r));
381
+ return s.length === 0 ? null : b(
382
+ Math.min(...s),
383
+ Math.max(...s),
384
+ "https://schema.org/SoldOut"
385
+ );
386
+ }
387
+ const i = n.map((s) => s.price).filter((s) => !isNaN(s));
388
+ return i.length === 0 ? null : b(
389
+ Math.min(...i),
390
+ Math.max(...i),
391
+ se(n[0].status)
392
+ );
393
+ }
394
+ function oe(t) {
395
+ const { series: e, baseEventUrl: n } = t;
396
+ if (!e.title || !e.occurrences || e.occurrences.length === 0 || !e.venue?.name) return null;
397
+ const i = Z(
398
+ e.venue,
399
+ e.venue.googleLocationNameCache
400
+ ), s = {
401
+ "@type": "Place",
402
+ name: e.venue.name
403
+ };
404
+ i && (s.address = i);
405
+ const r = {
406
+ "@context": "https://schema.org",
407
+ "@type": "EventSeries",
408
+ name: e.title,
409
+ location: s
410
+ }, o = I(e.description) || e.eventSummary;
411
+ o && (r.description = o), e.image && (r.image = [e.image]);
412
+ const c = e.performers?.filter((a) => a.displayName);
413
+ c && c.length > 0 && (r.performer = c.map((a) => ({
414
+ "@type": "PerformingGroup",
415
+ name: a.displayName
416
+ })));
417
+ const u = [];
418
+ for (const a of e.occurrences) {
419
+ const m = S(
420
+ a.startDateTime,
421
+ e.timeZone
422
+ );
423
+ if (!m) continue;
424
+ const l = {
425
+ "@type": "Event",
426
+ name: a.title,
427
+ startDate: m,
428
+ eventStatus: R(a.status),
429
+ location: s
430
+ };
431
+ n && (l["@id"] = `${n}/${a.id}-${a.slug}`);
432
+ const h = S(a.endDateTime, e.timeZone);
433
+ h && (l.endDate = h);
434
+ const f = re(a.tickets, a.status);
435
+ f && (l.offers = f), u.push(l);
436
+ }
437
+ return u.length === 0 ? null : (r.subEvent = u, r);
438
+ }
439
+ function ae(t) {
440
+ const { collection: e, baseEventUrl: n } = t;
441
+ if (!e.collectionTitle || !e.events || e.events.length === 0) return null;
442
+ const i = [];
443
+ for (const o of e.events) {
444
+ if (!o.title) continue;
445
+ const c = {
446
+ "@type": "ListItem",
447
+ position: i.length + 1,
448
+ name: o.title
449
+ };
450
+ n && (c.url = o.slug ? `${n}/${o.id}-${o.slug}` : `${n}/${o.id}`), i.push(c);
451
+ }
452
+ if (i.length === 0) return null;
453
+ const s = {
454
+ "@context": "https://schema.org",
455
+ "@type": "CollectionPage",
456
+ name: e.collectionTitle
457
+ }, r = I(e.description) || e.summary;
458
+ return r && (s.description = r), e.coverImage && (s.image = [e.coverImage]), s.mainEntity = {
459
+ "@type": "ItemList",
460
+ numberOfItems: i.length,
461
+ itemListElement: i
462
+ }, s;
463
+ }
464
+ const ce = 70;
465
+ function N(t) {
466
+ return t.normalize("NFKD").replace(/[\u0300-\u036f]/g, "").toLowerCase().trim().replace(/[^\w\s-]/g, "").replace(/[\s_-]+/g, "-").replace(/^-+|-+$/g, "").slice(0, ce).replace(/-+$/g, "");
467
+ }
468
+ const p = class p {
469
+ constructor(e) {
470
+ this._state = "idle", this._originals = null, this._originalsSaved = !1, this._events = [], !(typeof document > "u") && (p._activeInstance && p._activeInstance !== this && p._activeInstance.destroy(), this._venueName = e.venueName, this._venueAddress = e.venueAddress, this._venueTimeZone = e.venueTimeZone || E(), this._baseUrl = e.baseUrl || window.location.origin + window.location.pathname, this._saveOriginals(), p._activeInstance = this);
471
+ }
472
+ // ---------------------------------------------------------------------------
473
+ // Private helpers
474
+ // ---------------------------------------------------------------------------
475
+ _saveOriginals() {
476
+ if (this._originalsSaved) return;
477
+ const e = document.querySelector(
478
+ 'link[rel="canonical"]'
479
+ ), n = document.querySelector(
480
+ 'meta[property="og:title"]'
481
+ ), i = document.querySelector(
482
+ 'meta[property="og:description"]'
483
+ ), s = document.querySelector(
484
+ 'meta[property="og:image"]'
485
+ ), r = document.querySelector(
486
+ 'meta[property="og:url"]'
487
+ ), o = document.querySelector(
488
+ 'meta[property="og:type"]'
489
+ ), c = document.querySelector(
490
+ 'meta[name="description"]'
491
+ );
492
+ this._originals = {
493
+ title: document.title,
494
+ canonicalHref: e?.getAttribute("href") ?? null,
495
+ ogTitle: n?.getAttribute("content") ?? null,
496
+ ogDescription: i?.getAttribute("content") ?? null,
497
+ ogImage: s?.getAttribute("content") ?? null,
498
+ ogUrl: r?.getAttribute("content") ?? null,
499
+ ogType: o?.getAttribute("content") ?? null,
500
+ metaDescription: c?.getAttribute("content") ?? null
501
+ }, this._originalsSaved = !0;
502
+ }
503
+ _injectJsonLd(e) {
504
+ if (typeof document > "u") return;
505
+ document.querySelectorAll('script[data-micdrop="jsonld"]').forEach((i) => i.remove());
506
+ const n = document.createElement("script");
507
+ n.setAttribute("type", "application/ld+json"), n.setAttribute("data-micdrop", "jsonld"), n.textContent = JSON.stringify(e), document.head.appendChild(n);
508
+ }
509
+ _setMeta(e, n) {
510
+ if (!(typeof document > "u"))
511
+ if (e.startsWith("og:")) {
512
+ let i = document.querySelector(
513
+ `meta[property="${e}"]`
514
+ );
515
+ i ? i.setAttribute("content", n) : (i = document.createElement("meta"), i.setAttribute("property", e), i.setAttribute("content", n), i.setAttribute("data-micdrop", "og"), document.head.appendChild(i));
516
+ } else {
517
+ let i = document.querySelector(
518
+ `meta[name="${e}"]`
519
+ );
520
+ i ? i.setAttribute("content", n) : (i = document.createElement("meta"), i.setAttribute("name", e), i.setAttribute("content", n), i.setAttribute("data-micdrop", "meta"), document.head.appendChild(i));
521
+ }
522
+ }
523
+ _setCanonical(e) {
524
+ if (typeof document > "u") return;
525
+ let n = document.querySelector(
526
+ 'link[rel="canonical"]'
527
+ );
528
+ n ? n.setAttribute("href", e) : (n = document.createElement("link"), n.setAttribute("rel", "canonical"), n.setAttribute("href", e), n.setAttribute("data-micdrop", "canonical"), document.head.appendChild(n));
529
+ }
530
+ _removeAllInjected() {
531
+ typeof document > "u" || document.querySelectorAll("[data-micdrop]").forEach((e) => e.remove());
532
+ }
533
+ _restoreOriginals() {
534
+ if (!(typeof document > "u" || !this._originals)) {
535
+ if (document.title = this._originals.title, this._originals.canonicalHref !== null) {
536
+ const e = document.querySelector(
537
+ 'link[rel="canonical"]'
538
+ );
539
+ e && e.setAttribute("href", this._originals.canonicalHref);
540
+ }
541
+ this._restoreMetaProperty("og:title", this._originals.ogTitle), this._restoreMetaProperty("og:description", this._originals.ogDescription), this._restoreMetaProperty("og:image", this._originals.ogImage), this._restoreMetaProperty("og:url", this._originals.ogUrl), this._restoreMetaProperty("og:type", this._originals.ogType), this._restoreMetaName("description", this._originals.metaDescription), this._originalsSaved = !1;
542
+ }
543
+ }
544
+ _restoreMetaProperty(e, n) {
545
+ const i = document.querySelector(
546
+ `meta[property="${e}"]`
547
+ );
548
+ n !== null && i ? i.setAttribute("content", n) : n === null && i?.hasAttribute("data-micdrop") && i.remove();
549
+ }
550
+ _restoreMetaName(e, n) {
551
+ const i = document.querySelector(
552
+ `meta[name="${e}"]`
553
+ );
554
+ n !== null && i ? i.setAttribute("content", n) : n === null && i?.hasAttribute("data-micdrop") && i.remove();
555
+ }
556
+ _buildItemList(e) {
557
+ return {
558
+ "@context": "https://schema.org",
559
+ "@type": "ItemList",
560
+ itemListElement: e.map((n, i) => {
561
+ const s = n.slug || N(n.name || "");
562
+ return {
563
+ "@type": "ListItem",
564
+ position: i + 1,
565
+ url: `${this._baseUrl}?e=${n.id}-${s}`
566
+ };
567
+ })
568
+ };
569
+ }
570
+ _buildEntityUrl(e, n, i) {
571
+ const s = e === "event" ? "e" : e === "series" ? "s" : "c";
572
+ return `${this._baseUrl}?${s}=${n}-${i}`;
573
+ }
574
+ // ---------------------------------------------------------------------------
575
+ // Public API
576
+ // ---------------------------------------------------------------------------
577
+ /**
578
+ * Called when events finish loading from the API.
579
+ * Injects an ItemList JSON-LD for the listing. Does not modify OG/canonical/title.
580
+ */
581
+ onEventsLoaded(e, n) {
582
+ if (typeof document > "u" || this._state === "destroyed") return;
583
+ if (n) {
584
+ this._venueName = n.name || this._venueName, this._venueAddress = n.address || n.googleLocationNameCache || this._venueAddress;
585
+ const s = n.timeZone || n.timezone;
586
+ s && (this._venueTimeZone = s);
587
+ }
588
+ this._events = e;
589
+ const i = this._buildItemList(e);
590
+ this._injectJsonLd(i), this._state = "listing";
591
+ }
592
+ /**
593
+ * Called when the user selects an event, series, or collection.
594
+ * Replaces ItemList JSON-LD with entity-specific JSON-LD and updates
595
+ * all head tags (canonical, OG, meta description, title).
596
+ */
597
+ onEntitySelected(e, n, i) {
598
+ if (typeof document > "u" || this._state === "destroyed") return;
599
+ if (this._saveOriginals(), i) {
600
+ this._venueName = i.name || this._venueName, this._venueAddress = i.address || i.googleLocationNameCache || this._venueAddress;
601
+ const l = i.timeZone || i.timezone;
602
+ l && (this._venueTimeZone = l);
603
+ }
604
+ let s = null, r = "", o = "", c = "", u = "", a = "";
605
+ if (e === "event") {
606
+ const l = n.slug || N(n.name || "");
607
+ a = this._buildEntityUrl(
608
+ "event",
609
+ n.id || n.eventID || "",
610
+ l
611
+ ), s = ie({
612
+ event: n,
613
+ venue: {
614
+ name: this._venueName,
615
+ googleLocationNameCache: this._venueAddress
616
+ },
617
+ venueTimeZone: this._venueTimeZone,
618
+ eventUrl: a
619
+ }), r = n.name || "", o = n.description || "", c = n.eventSummary || "", u = n.image || n.coverImage || n.ShowImage || "";
620
+ } else if (e === "series") {
621
+ const l = n.slug || N(n.title || "");
622
+ a = this._buildEntityUrl("series", n.id || "", l), s = oe({
623
+ series: {
624
+ ...n,
625
+ venue: {
626
+ name: this._venueName,
627
+ googleLocationNameCache: this._venueAddress
628
+ },
629
+ timeZone: this._venueTimeZone
630
+ },
631
+ baseEventUrl: a
632
+ }), r = n.title || "", o = n.description || "", c = n.eventSummary || "", u = n.image || "";
633
+ } else if (e === "collection") {
634
+ const l = n.slug || N(n.collectionTitle || "");
635
+ a = this._buildEntityUrl("collection", n.id || "", l), s = ae({
636
+ collection: n,
637
+ baseEventUrl: a,
638
+ defaultTimeZone: this._venueTimeZone
639
+ }), r = n.collectionTitle || "", o = n.description || "", c = n.summary || "", u = n.coverImage || "";
640
+ }
641
+ s && this._injectJsonLd(s), a && this._setCanonical(a), r && this._setMeta("og:title", r);
642
+ const m = I(o, 160) || I(c, 160);
643
+ m ? this._setMeta("og:description", m) : this._restoreMetaProperty(
644
+ "og:description",
645
+ this._originals?.ogDescription ?? null
646
+ ), u && this._setMeta("og:image", u), a && this._setMeta("og:url", a), this._setMeta("og:type", "website"), this._setMeta("twitter:card", "summary_large_image"), m ? this._setMeta("description", m) : this._restoreMetaName(
647
+ "description",
648
+ this._originals?.metaDescription ?? null
649
+ ), r && (document.title = `${r} | ${this._venueName}`), this._state = "entity";
650
+ }
651
+ /**
652
+ * Called when the user navigates back to the event listing.
653
+ * Restores original head elements and re-injects ItemList JSON-LD.
654
+ */
655
+ onBackToListing() {
656
+ if (!(typeof document > "u") && this._state !== "destroyed") {
657
+ if (this._restoreOriginals(), this._removeAllInjected(), this._events.length > 0) {
658
+ const e = this._buildItemList(this._events);
659
+ this._injectJsonLd(e);
660
+ }
661
+ this._saveOriginals(), this._state = "listing";
662
+ }
663
+ }
664
+ /**
665
+ * Called when the widget is destroyed. Removes all injected elements
666
+ * and restores originals. Clears the static active instance.
667
+ */
668
+ destroy() {
669
+ typeof document > "u" || this._state !== "destroyed" && (this._removeAllInjected(), this._restoreOriginals(), p._activeInstance === this && (p._activeInstance = null), this._state = "destroyed");
670
+ }
671
+ };
672
+ p._activeInstance = null;
673
+ let L = p;
674
+ export {
675
+ L as HostSeoController,
676
+ ae as buildCollectionJsonLd,
677
+ ie as buildEventJsonLd,
678
+ te as buildOffers,
679
+ ne as buildPerformers,
680
+ Z as buildPostalAddress,
681
+ oe as buildSeriesJsonLd,
682
+ le as escapeJsonLdForScript,
683
+ S as formatDateTimeWithOffset,
684
+ R as getEventStatus,
685
+ ee as getTicketAvailability,
686
+ X as parseAddressToPostal
687
+ };
688
+ //# sourceMappingURL=seo.mjs.map