@getmicdrop/venue-calendar 4.0.110 → 4.0.112

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 (88) hide show
  1. package/dist/{CartView-bMHSoj75.js → CartView-H6PXIc8m.js} +9 -9
  2. package/dist/{CartView-bMHSoj75.js.map → CartView-H6PXIc8m.js.map} +1 -1
  3. package/dist/{Checkout-DDXZc-yj.js → Checkout-ns94gCrx.js} +9 -9
  4. package/dist/{Checkout-DDXZc-yj.js.map → Checkout-ns94gCrx.js.map} +1 -1
  5. package/dist/{Checkout-DG2iHmHC.js → Checkout-nyPWpzmE.js} +5 -5
  6. package/dist/{Checkout-DG2iHmHC.js.map → Checkout-nyPWpzmE.js.map} +1 -1
  7. package/dist/{CheckoutTimer-Bwq6a_Hl.js → CheckoutTimer-Bv4qR0Mn.js} +5 -5
  8. package/dist/{CheckoutTimer-Bwq6a_Hl.js.map → CheckoutTimer-Bv4qR0Mn.js.map} +1 -1
  9. package/dist/{ClockIcon-ZgeMNNI1.js → ClockIcon-D2ib_bzt.js} +2 -2
  10. package/dist/{ClockIcon-ZgeMNNI1.js.map → ClockIcon-D2ib_bzt.js.map} +1 -1
  11. package/dist/{CollectionView-1pf2C4kX.js → CollectionView-G3OmVuiX.js} +5 -5
  12. package/dist/{CollectionView-1pf2C4kX.js.map → CollectionView-G3OmVuiX.js.map} +1 -1
  13. package/dist/{Event-D3o0fguY.js → Event-B1syGqOf.js} +8 -8
  14. package/dist/{Event-D3o0fguY.js.map → Event-B1syGqOf.js.map} +1 -1
  15. package/dist/{EventPage-DqO-AV8i.js → EventPage-CqryTYfg.js} +8 -8
  16. package/dist/{EventPage-DqO-AV8i.js.map → EventPage-CqryTYfg.js.map} +1 -1
  17. package/dist/{Heading-pURRwiIC.js → Heading-BM6t9w6d.js} +2 -2
  18. package/dist/{Heading-pURRwiIC.js.map → Heading-BM6t9w6d.js.map} +1 -1
  19. package/dist/{ScarcityBadge-ykz32KS9.js → ScarcityBadge-B7KnIEoD.js} +2 -2
  20. package/dist/{ScarcityBadge-ykz32KS9.js.map → ScarcityBadge-B7KnIEoD.js.map} +1 -1
  21. package/dist/{SeriesPage-BmNk80cF.js → SeriesPage-DYbBhYHy.js} +5 -5
  22. package/dist/{SeriesPage-BmNk80cF.js.map → SeriesPage-DYbBhYHy.js.map} +1 -1
  23. package/dist/{Spinner-OGA1hrc5.js → Spinner-D2Ff-2jf.js} +2 -2
  24. package/dist/{Spinner-OGA1hrc5.js.map → Spinner-D2Ff-2jf.js.map} +1 -1
  25. package/dist/{Success-DLlQ54_-.js → Success-CPQuVaaV.js} +8 -8
  26. package/dist/{Success-DLlQ54_-.js.map → Success-CPQuVaaV.js.map} +1 -1
  27. package/dist/{Text-DMpMLgcU.js → Text-C-9C-Rav.js} +2 -2
  28. package/dist/{Text-DMpMLgcU.js.map → Text-C-9C-Rav.js.map} +1 -1
  29. package/dist/{VenueCalendar-ClSRsS6u.js → VenueCalendar-Dkr4qm4p.js} +4344 -4345
  30. package/dist/{VenueCalendar-ClSRsS6u.js.map → VenueCalendar-Dkr4qm4p.js.map} +1 -1
  31. package/dist/{ViewTicketsEmbed-5LMG2xwn.js → ViewTicketsEmbed-B581Bukn.js} +5 -5
  32. package/dist/{ViewTicketsEmbed-5LMG2xwn.js.map → ViewTicketsEmbed-B581Bukn.js.map} +1 -1
  33. package/dist/{labels-Ws4MJjH5.js → labels-DAFwZdnA.js} +3 -3
  34. package/dist/{labels-Ws4MJjH5.js.map → labels-DAFwZdnA.js.map} +1 -1
  35. package/dist/{modalManager.svelte-BPA2JF6c.js → modalManager.svelte-BbA2uxS7.js} +2 -2
  36. package/dist/{modalManager.svelte-BPA2JF6c.js.map → modalManager.svelte-BbA2uxS7.js.map} +1 -1
  37. package/dist/{promo-vXx1bxQm.js → promo-BGoSmBd_.js} +2 -2
  38. package/dist/{promo-vXx1bxQm.js.map → promo-BGoSmBd_.js.map} +1 -1
  39. package/dist/{showcase-state-options-9SoS5WuT.js → showcase-state-options-BWzGMPZ-.js} +2 -2
  40. package/dist/{showcase-state-options-9SoS5WuT.js.map → showcase-state-options-BWzGMPZ-.js.map} +1 -1
  41. package/dist/{transform-BD9xXAq7.js → transform-CpjZiH34.js} +2 -2
  42. package/dist/{transform-BD9xXAq7.js.map → transform-CpjZiH34.js.map} +1 -1
  43. package/dist/{utm-rT0TPh8G.js → utm-D1uGUvk2.js} +2 -2
  44. package/dist/{utm-rT0TPh8G.js.map → utm-D1uGUvk2.js.map} +1 -1
  45. package/dist/venue-calendar.css +1 -1
  46. package/dist/venue-calendar.es.js +2 -2
  47. package/dist/venue-calendar.iife.js +47 -47
  48. package/dist/venue-calendar.iife.js.map +1 -1
  49. package/dist/venue-calendar.umd.js +44 -44
  50. package/dist/venue-calendar.umd.js.map +1 -1
  51. package/package.json +199 -199
  52. package/dist/api/api/client.d.ts +0 -17
  53. package/dist/api/api/cta.d.ts +0 -34
  54. package/dist/api/api/events.d.ts +0 -183
  55. package/dist/api/api/gift-cards.d.ts +0 -108
  56. package/dist/api/api/index.d.ts +0 -46
  57. package/dist/api/api/orders.d.ts +0 -149
  58. package/dist/api/api/promo.d.ts +0 -45
  59. package/dist/api/api/result.d.ts +0 -78
  60. package/dist/api/api/route-manifest.d.ts +0 -179
  61. package/dist/api/api/transformers/address.d.ts +0 -18
  62. package/dist/api/api/transformers/cart.d.ts +0 -19
  63. package/dist/api/api/transformers/collection.d.ts +0 -12
  64. package/dist/api/api/transformers/event.d.ts +0 -173
  65. package/dist/api/api/transformers/giftCard.d.ts +0 -11
  66. package/dist/api/api/transformers/index.d.ts +0 -27
  67. package/dist/api/api/transformers/order.d.ts +0 -44
  68. package/dist/api/api/transformers/performer.d.ts +0 -8
  69. package/dist/api/api/transformers/series.d.ts +0 -12
  70. package/dist/api/api/transformers/venue.d.ts +0 -39
  71. package/dist/api/api/venues.d.ts +0 -33
  72. package/dist/api/api/waitlist.d.ts +0 -49
  73. package/dist/api/api.cjs +0 -2
  74. package/dist/api/api.cjs.map +0 -1
  75. package/dist/api/api.mjs +0 -1302
  76. package/dist/api/api.mjs.map +0 -1
  77. package/dist/api/types.d.ts +0 -483
  78. package/dist/seo/HostSeoController.d.ts +0 -68
  79. package/dist/seo/buildCollectionJsonLd.d.ts +0 -8
  80. package/dist/seo/buildEventJsonLd.d.ts +0 -9
  81. package/dist/seo/buildSeriesJsonLd.d.ts +0 -6
  82. package/dist/seo/helpers.d.ts +0 -88
  83. package/dist/seo/index.d.ts +0 -10
  84. package/dist/seo/seo.cjs +0 -2
  85. package/dist/seo/seo.cjs.map +0 -1
  86. package/dist/seo/seo.mjs +0 -688
  87. package/dist/seo/seo.mjs.map +0 -1
  88. package/dist/seo/types.d.ts +0 -149
package/dist/seo/seo.mjs DELETED
@@ -1,688 +0,0 @@
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