@getmicdrop/venue-calendar 4.0.107 → 4.0.109

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 (76) hide show
  1. package/dist/CartView-C3N5pw89.js +2381 -0
  2. package/dist/CartView-C3N5pw89.js.map +1 -0
  3. package/dist/{Checkout-Db6v9jHf.js → Checkout-CMEf_qnp.js} +604 -620
  4. package/dist/Checkout-CMEf_qnp.js.map +1 -0
  5. package/dist/{Checkout-JvsT5PvE.js → Checkout-Chki2df_.js} +130 -130
  6. package/dist/Checkout-Chki2df_.js.map +1 -0
  7. package/dist/{CheckoutTimer-3Hp1OSA3.js → CheckoutTimer-BAaY_60w.js} +5 -5
  8. package/dist/{CheckoutTimer-3Hp1OSA3.js.map → CheckoutTimer-BAaY_60w.js.map} +1 -1
  9. package/dist/{ClockIcon-CaqjP14C.js → ClockIcon-Dbbj_qur.js} +2 -2
  10. package/dist/{ClockIcon-CaqjP14C.js.map → ClockIcon-Dbbj_qur.js.map} +1 -1
  11. package/dist/{CollectionView-DXJfvNlt.js → CollectionView-RM30YPOJ.js} +41 -41
  12. package/dist/CollectionView-RM30YPOJ.js.map +1 -0
  13. package/dist/{Event-BJRx05iL.js → Event-kdxMa6OT.js} +1683 -1603
  14. package/dist/{Event-BJRx05iL.js.map → Event-kdxMa6OT.js.map} +1 -1
  15. package/dist/EventPage-BRBByBHe.js +1001 -0
  16. package/dist/EventPage-BRBByBHe.js.map +1 -0
  17. package/dist/{Heading-BbCHtFCM.js → Heading-CSDFD80h.js} +5 -5
  18. package/dist/{Heading-BbCHtFCM.js.map → Heading-CSDFD80h.js.map} +1 -1
  19. package/dist/{ScarcityBadge-iHyVN-k7.js → ScarcityBadge-B0ca48su.js} +12 -12
  20. package/dist/{ScarcityBadge-iHyVN-k7.js.map → ScarcityBadge-B0ca48su.js.map} +1 -1
  21. package/dist/{SeriesPage-b9aAGbcb.js → SeriesPage-CczfbUKO.js} +5 -5
  22. package/dist/{SeriesPage-b9aAGbcb.js.map → SeriesPage-CczfbUKO.js.map} +1 -1
  23. package/dist/{Spinner-DC99jWmt.js → Spinner--TOwvv9A.js} +2 -2
  24. package/dist/{Spinner-DC99jWmt.js.map → Spinner--TOwvv9A.js.map} +1 -1
  25. package/dist/{Success-H4fQrbfA.js → Success-DIWUGUPs.js} +136 -153
  26. package/dist/Success-DIWUGUPs.js.map +1 -0
  27. package/dist/{Text-CKmfSVMa.js → Text-WLl_ELy9.js} +7 -7
  28. package/dist/{Text-CKmfSVMa.js.map → Text-WLl_ELy9.js.map} +1 -1
  29. package/dist/{VenueCalendar-DmxiEy6q.js → VenueCalendar-CU5N9klc.js} +3366 -3319
  30. package/dist/VenueCalendar-CU5N9klc.js.map +1 -0
  31. package/dist/{ViewTicketsEmbed-BKrQgPf8.js → ViewTicketsEmbed-BOukxQIF.js} +6 -6
  32. package/dist/ViewTicketsEmbed-BOukxQIF.js.map +1 -0
  33. package/dist/api/api/events.d.ts +28 -12
  34. package/dist/api/api/index.d.ts +1 -1
  35. package/dist/api/api/route-manifest.d.ts +179 -0
  36. package/dist/api/api.cjs +1 -1
  37. package/dist/api/api.cjs.map +1 -1
  38. package/dist/api/api.mjs +316 -316
  39. package/dist/api/api.mjs.map +1 -1
  40. package/dist/{labels-DgU1irgj.js → labels-DXGieQXs.js} +86 -89
  41. package/dist/labels-DXGieQXs.js.map +1 -0
  42. package/dist/{modalManager.svelte-Ddxmimtn.js → modalManager.svelte-Dbd1xgTQ.js} +2 -2
  43. package/dist/{modalManager.svelte-Ddxmimtn.js.map → modalManager.svelte-Dbd1xgTQ.js.map} +1 -1
  44. package/dist/promo-oWi_MKmY.js +29 -0
  45. package/dist/promo-oWi_MKmY.js.map +1 -0
  46. package/dist/seo/helpers.d.ts +11 -0
  47. package/dist/seo/seo.cjs +1 -1
  48. package/dist/seo/seo.cjs.map +1 -1
  49. package/dist/seo/seo.mjs +170 -179
  50. package/dist/seo/seo.mjs.map +1 -1
  51. package/dist/{data-toggle-store.svelte-BEm-nTSr.js → showcase-state-options-DJJdjxvZ.js} +72 -45
  52. package/dist/showcase-state-options-DJJdjxvZ.js.map +1 -0
  53. package/dist/{transform-BOx8W51w.js → transform-Bgqwj9i-.js} +42 -42
  54. package/dist/transform-Bgqwj9i-.js.map +1 -0
  55. package/dist/venue-calendar.css +1 -1
  56. package/dist/venue-calendar.es.js +4 -4
  57. package/dist/venue-calendar.iife.js +50 -50
  58. package/dist/venue-calendar.iife.js.map +1 -1
  59. package/dist/venue-calendar.umd.js +44 -44
  60. package/dist/venue-calendar.umd.js.map +1 -1
  61. package/package.json +199 -187
  62. package/dist/CartView-DC_stfl4.js +0 -2348
  63. package/dist/CartView-DC_stfl4.js.map +0 -1
  64. package/dist/Checkout-Db6v9jHf.js.map +0 -1
  65. package/dist/Checkout-JvsT5PvE.js.map +0 -1
  66. package/dist/CollectionView-DXJfvNlt.js.map +0 -1
  67. package/dist/EventPage-E0tOQVFN.js +0 -940
  68. package/dist/EventPage-E0tOQVFN.js.map +0 -1
  69. package/dist/Success-H4fQrbfA.js.map +0 -1
  70. package/dist/VenueCalendar-DmxiEy6q.js.map +0 -1
  71. package/dist/ViewTicketsEmbed-BKrQgPf8.js.map +0 -1
  72. package/dist/data-toggle-store.svelte-BEm-nTSr.js.map +0 -1
  73. package/dist/labels-DgU1irgj.js.map +0 -1
  74. package/dist/promo-WWbp2OWI.js +0 -12
  75. package/dist/promo-WWbp2OWI.js.map +0 -1
  76. package/dist/transform-BOx8W51w.js.map +0 -1
@@ -1,22 +1,22 @@
1
1
  import "svelte/internal/disclose-version";
2
2
  import * as e from "svelte/internal/client";
3
- import { u as I, aW as M, aX as N, ae as Y, N as F, z as D, aN as V } from "./VenueCalendar-DmxiEy6q.js";
4
- import { T as p } from "./Text-CKmfSVMa.js";
5
- var G = e.from_svg('<path d="M208,32H184V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM112,184a8,8,0,0,1-16,0V132.94l-4.42,2.22a8,8,0,0,1-7.16-14.32l16-8A8,8,0,0,1,112,120Zm56-8a8,8,0,0,1,0,16H136a8,8,0,0,1-6.4-12.8l28.78-38.37A8,8,0,1,0,145.07,132a8,8,0,1,1-13.85-8A24,24,0,0,1,176,136a23.76,23.76,0,0,1-4.84,14.45L152,176ZM48,80V48H72v8a8,8,0,0,0,16,0V48h80v8a8,8,0,0,0,16,0V48h24V80Z"></path>'), j = e.from_svg('<rect x="40" y="40" width="176" height="176" rx="8" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></rect><line x1="176" y1="24" x2="176" y2="56" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></line><line x1="80" y1="24" x2="80" y2="56" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></line><line x1="40" y1="88" x2="216" y2="88" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></line><polyline points="88 128 104 120 104 184" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></polyline><path d="M138.14,128a16,16,0,1,1,26.64,17.63L136,184h32" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></path>', 1), U = e.from_svg('<svg aria-hidden="true" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><!></svg>');
6
- function re(r, t) {
3
+ import { u as I, b1 as M, b2 as O, am as Y, b3 as N, aj as V, Q as F, D as $, ai as G } from "./VenueCalendar-CU5N9klc.js";
4
+ import { T as p } from "./Text-WLl_ELy9.js";
5
+ var j = e.from_svg('<path d="M208,32H184V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM112,184a8,8,0,0,1-16,0V132.94l-4.42,2.22a8,8,0,0,1-7.16-14.32l16-8A8,8,0,0,1,112,120Zm56-8a8,8,0,0,1,0,16H136a8,8,0,0,1-6.4-12.8l28.78-38.37A8,8,0,1,0,145.07,132a8,8,0,1,1-13.85-8A24,24,0,0,1,176,136a23.76,23.76,0,0,1-4.84,14.45L152,176ZM48,80V48H72v8a8,8,0,0,0,16,0V48h80v8a8,8,0,0,0,16,0V48h24V80Z"></path>'), U = e.from_svg('<rect x="40" y="40" width="176" height="176" rx="8" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></rect><line x1="176" y1="24" x2="176" y2="56" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></line><line x1="80" y1="24" x2="80" y2="56" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></line><line x1="40" y1="88" x2="216" y2="88" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></line><polyline points="88 128 104 120 104 184" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></polyline><path d="M138.14,128a16,16,0,1,1,26.64,17.63L136,184h32" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"></path>', 1), W = e.from_svg('<svg aria-hidden="true" viewBox="0 0 256 256" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><!></svg>');
6
+ function ae(r, t) {
7
7
  e.push(t, !0);
8
8
  let a = e.prop(t, "size", 3, "24"), f = e.prop(t, "color", 3, "currentColor"), m = e.prop(t, "class", 3, "");
9
9
  const T = I();
10
10
  let _ = e.derived(() => t.weight ?? T?.weight ?? "regular");
11
- var i = U();
11
+ var i = W();
12
12
  let S;
13
13
  var g = e.child(i);
14
14
  {
15
15
  var P = (v) => {
16
- var u = G();
16
+ var u = j();
17
17
  e.append(v, u);
18
18
  }, E = (v) => {
19
- var u = j();
19
+ var u = U();
20
20
  e.next(5), e.append(v, u);
21
21
  };
22
22
  e.if(g, (v) => {
@@ -27,15 +27,12 @@ function re(r, t) {
27
27
  e.set_class(i, 0, e.clsx(m())), e.set_attribute(i, "width", a()), e.set_attribute(i, "height", a()), S = e.set_style(i, "", S, { color: f() });
28
28
  }), e.append(r, i), e.pop();
29
29
  }
30
- function O(r, t, a = "en-US") {
31
- return new Intl.DateTimeFormat(a, t).format(r);
32
- }
33
- function W(r, t, a = {}) {
30
+ function B(r, t, a = {}) {
34
31
  const {
35
32
  cancelled: f = !1,
36
33
  isRegistration: m = !1,
37
34
  waitlistEnabled: T = !1
38
- } = a, _ = /* @__PURE__ */ new Date();
35
+ } = a, _ = Y();
39
36
  if (f)
40
37
  return { text: "Cancelled", disabled: !0, reason: "cancelled" };
41
38
  const i = r.endDateTime || r.startDateTime;
@@ -56,9 +53,9 @@ function W(r, t, a = {}) {
56
53
  };
57
54
  let P = !1, E = !0, v = !0, u = null;
58
55
  for (const o of g) {
59
- const y = o.salesBegin || o.salesStart || o.saleBegin || o.onSaleStart, A = o.salesEnd || o.saleEnd || o.onSaleEnd, b = o.remainingCapacity ?? o.quantityRemaining ?? o.quantity, x = o.soldOut || b != null && b <= 0, h = y ? new Date(y) > _ : !1, $ = A ? new Date(A) < _ : !1;
60
- if (!x && !h && !$ && (P = !0), x || (E = !1), h || (v = !1), h && y && !x && !$) {
61
- const R = new Date(y);
56
+ const w = o.salesBegin || o.salesStart || o.saleBegin || o.onSaleStart, A = o.salesEnd || o.saleEnd || o.onSaleEnd, b = o.remainingCapacity ?? o.quantityRemaining ?? o.quantity, x = o.soldOut || b != null && b <= 0, h = w ? new Date(w) > _ : !1, D = A ? new Date(A) < _ : !1;
57
+ if (!x && !h && !D && (P = !0), x || (E = !1), h || (v = !1), h && w && !x && !D) {
58
+ const R = new Date(w);
62
59
  (!u || R < u) && (u = R);
63
60
  }
64
61
  }
@@ -75,13 +72,13 @@ function W(r, t, a = {}) {
75
72
  disabled: !1,
76
73
  reason: "hidden_only"
77
74
  };
78
- const o = u.getTime() - _.getTime(), y = o / (1e3 * 60 * 60), A = o / (1e3 * 60 * 60 * 24), b = (h) => O(
75
+ const o = u.getTime() - _.getTime(), w = o / (1e3 * 60 * 60), A = o / (1e3 * 60 * 60 * 24), b = (h) => O(
79
76
  h,
80
77
  { hour: "numeric", minute: "2-digit", hour12: !0 },
81
78
  "en-US"
82
79
  );
83
80
  let x;
84
- return y < 24 ? x = b(u) : A <= 7 ? x = O(
81
+ return w < 24 ? x = b(u) : A <= 7 ? x = O(
85
82
  u,
86
83
  { weekday: "short", hour: "numeric", minute: "2-digit", hour12: !0 },
87
84
  "en-US"
@@ -109,14 +106,14 @@ function W(r, t, a = {}) {
109
106
  reason: "hidden_only"
110
107
  } : { text: "Sales ended", disabled: !0, reason: "sales_ended" };
111
108
  }
112
- function ae(r, t) {
113
- const a = Y(r, t);
109
+ function ie(r, t) {
110
+ const a = V(r, t);
114
111
  return a === "sold-out" ? "sold_out" : a === "plenty" ? "none" : a;
115
112
  }
116
- function ie(r, t, a, f) {
113
+ function oe(r, t, a, f) {
117
114
  return r === "none" ? null : r === "sold_out" ? "Sold out" : r === "urgent" && a !== "browse" && t <= N.MAX_EXACT_COUNT ? `Only ${t} left` : r === "low" || r === "urgent" ? "Selling fast" : null;
118
115
  }
119
- function oe(r) {
116
+ function ne(r) {
120
117
  const t = r.tickets.map((f) => ({
121
118
  salesBegin: f.salesStartDate,
122
119
  salesEnd: f.salesEndDate,
@@ -139,7 +136,7 @@ function oe(r) {
139
136
  disabled: !0,
140
137
  reason: "This event has ended"
141
138
  };
142
- const a = W(
139
+ const a = B(
143
140
  { startDateTime: r.startDateTime, endDateTime: r.endDateTime },
144
141
  t,
145
142
  {
@@ -151,10 +148,10 @@ function oe(r) {
151
148
  return {
152
149
  text: a.text,
153
150
  disabled: a.disabled,
154
- reason: a.disabled ? B(a.reason) : void 0
151
+ reason: a.disabled ? K(a.reason) : void 0
155
152
  };
156
153
  }
157
- function B(r) {
154
+ function K(r) {
158
155
  if (r)
159
156
  switch (r) {
160
157
  case "cancelled":
@@ -178,7 +175,7 @@ function B(r) {
178
175
  return;
179
176
  }
180
177
  }
181
- function ne(r) {
178
+ function le(r) {
182
179
  const t = r.tickets.filter(
183
180
  (i) => i.status === "on_sale" && !i.isHidden
184
181
  );
@@ -193,13 +190,13 @@ function ne(r) {
193
190
  const _ = Math.min(...T.map((i) => i.price));
194
191
  return m ? "Free" : a ? `From $${_}` : T.length === 1 ? `$${_}` : `From $${_}`;
195
192
  }
196
- function le(r, t) {
193
+ function de(r, t) {
197
194
  return F(r * (t / 100));
198
195
  }
199
- const K = {
196
+ const Z = {
200
197
  normal: 300
201
198
  };
202
- function de() {
199
+ function ce() {
203
200
  return {
204
201
  code: "",
205
202
  isApplied: !1,
@@ -213,8 +210,8 @@ function de() {
213
210
  revealTicketIds: []
214
211
  };
215
212
  }
216
- var q = e.from_html('<div class="flex justify-between"><!> <!></div>'), Z = e.from_html('<div class="flex justify-between pt-1 border-t border-default"><!> <!></div>'), J = e.from_html('<!> <!> <!> <!> <!> <div class="flex justify-between pt-2 border-t border-default"><!> <!></div>', 1), X = e.from_html('<div class="space-y-2"><!> <!></div>');
217
- function ce(r, t) {
213
+ var q = e.from_html('<div class="flex justify-between"><!> <!></div>'), J = e.from_html('<div class="flex justify-between pt-1 border-t border-default"><!> <!></div>'), Q = e.from_html('<!> <!> <!> <!> <!> <div class="flex justify-between pt-2 border-t border-default"><!> <!></div>', 1), X = e.from_html('<div class="space-y-2"><!> <!></div>');
214
+ function ue(r, t) {
218
215
  e.push(t, !0);
219
216
  let a = e.prop(t, "labels", 19, () => ({})), f = e.prop(t, "mode", 3, "full");
220
217
  var m = X(), T = e.child(m);
@@ -222,8 +219,8 @@ function ce(r, t) {
222
219
  var _ = (g) => {
223
220
  var P = e.comment(), E = e.first_child(P);
224
221
  e.each(E, 17, () => t.orderTotals.lines, (v) => v.ticketId, (v, u) => {
225
- var o = q(), y = e.child(o);
226
- p(y, {
222
+ var o = q(), w = e.child(o);
223
+ p(w, {
227
224
  size: "sm",
228
225
  children: (b, x) => {
229
226
  e.next();
@@ -232,14 +229,14 @@ function ce(r, t) {
232
229
  },
233
230
  $$slots: { default: !0 }
234
231
  });
235
- var A = e.sibling(y, 2);
232
+ var A = e.sibling(w, 2);
236
233
  p(A, {
237
234
  size: "sm",
238
235
  children: (b, x) => {
239
236
  e.next();
240
237
  var h = e.text();
241
- e.template_effect(($) => e.set_text(h, $), [
242
- () => e.get(u).isDonation ? D(e.get(u).subtotal) : V(e.get(u).subtotal, a())
238
+ e.template_effect((D) => e.set_text(h, D), [
239
+ () => e.get(u).isDonation ? $(e.get(u).subtotal) : G(e.get(u).subtotal, a())
243
240
  ]), e.append(b, h);
244
241
  },
245
242
  $$slots: { default: !0 }
@@ -253,14 +250,14 @@ function ce(r, t) {
253
250
  var i = e.sibling(T, 2);
254
251
  {
255
252
  var S = (g) => {
256
- var P = J(), E = e.first_child(P);
253
+ var P = Q(), E = e.first_child(P);
257
254
  {
258
255
  var v = (n) => {
259
- var l = Z(), d = e.child(l);
256
+ var l = J(), d = e.child(l);
260
257
  p(d, {
261
258
  size: "sm",
262
259
  color: "muted",
263
- children: (c, w) => {
260
+ children: (c, y) => {
264
261
  e.next();
265
262
  var s = e.text();
266
263
  e.template_effect(() => e.set_text(s, a().subtotal || "Subtotal")), e.append(c, s);
@@ -271,10 +268,10 @@ function ce(r, t) {
271
268
  p(k, {
272
269
  size: "sm",
273
270
  color: "muted",
274
- children: (c, w) => {
271
+ children: (c, y) => {
275
272
  e.next();
276
273
  var s = e.text();
277
- e.template_effect((C) => e.set_text(s, C), [() => D(t.orderTotals.subtotal)]), e.append(c, s);
274
+ e.template_effect((C) => e.set_text(s, C), [() => $(t.orderTotals.subtotal)]), e.append(c, s);
278
275
  },
279
276
  $$slots: { default: !0 }
280
277
  }), e.reset(l), e.append(n, l);
@@ -283,7 +280,7 @@ function ce(r, t) {
283
280
  p(d, {
284
281
  size: "sm",
285
282
  color: "muted",
286
- children: (c, w) => {
283
+ children: (c, y) => {
287
284
  e.next();
288
285
  var s = e.text();
289
286
  e.template_effect(() => e.set_text(s, a().subtotal || "Subtotal")), e.append(c, s);
@@ -294,10 +291,10 @@ function ce(r, t) {
294
291
  p(k, {
295
292
  size: "sm",
296
293
  color: "muted",
297
- children: (c, w) => {
294
+ children: (c, y) => {
298
295
  e.next();
299
296
  var s = e.text();
300
- e.template_effect((C) => e.set_text(s, C), [() => D(t.orderTotals.subtotal)]), e.append(c, s);
297
+ e.template_effect((C) => e.set_text(s, C), [() => $(t.orderTotals.subtotal)]), e.append(c, s);
301
298
  },
302
299
  $$slots: { default: !0 }
303
300
  }), e.reset(l), e.append(n, l);
@@ -308,12 +305,12 @@ function ce(r, t) {
308
305
  }
309
306
  var o = e.sibling(E, 2);
310
307
  {
311
- var y = (n) => {
308
+ var w = (n) => {
312
309
  var l = q(), d = e.child(l);
313
310
  p(d, {
314
311
  size: "sm",
315
312
  color: "muted",
316
- children: (c, w) => {
313
+ children: (c, y) => {
317
314
  e.next();
318
315
  var s = e.text();
319
316
  e.template_effect(() => e.set_text(s, a().serviceFees || "Service fees")), e.append(c, s);
@@ -324,16 +321,16 @@ function ce(r, t) {
324
321
  p(k, {
325
322
  size: "sm",
326
323
  color: "muted",
327
- children: (c, w) => {
324
+ children: (c, y) => {
328
325
  e.next();
329
326
  var s = e.text();
330
- e.template_effect((C) => e.set_text(s, C), [() => D(t.orderTotals.fees)]), e.append(c, s);
327
+ e.template_effect((C) => e.set_text(s, C), [() => $(t.orderTotals.fees)]), e.append(c, s);
331
328
  },
332
329
  $$slots: { default: !0 }
333
330
  }), e.reset(l), e.append(n, l);
334
331
  };
335
332
  e.if(o, (n) => {
336
- t.orderTotals.fees > 0 && n(y);
333
+ t.orderTotals.fees > 0 && n(w);
337
334
  });
338
335
  }
339
336
  var A = e.sibling(o, 2);
@@ -343,7 +340,7 @@ function ce(r, t) {
343
340
  p(d, {
344
341
  size: "sm",
345
342
  color: "muted",
346
- children: (c, w) => {
343
+ children: (c, y) => {
347
344
  e.next();
348
345
  var s = e.text();
349
346
  e.template_effect(() => e.set_text(s, a().taxes || "Taxes")), e.append(c, s);
@@ -354,10 +351,10 @@ function ce(r, t) {
354
351
  p(k, {
355
352
  size: "sm",
356
353
  color: "muted",
357
- children: (c, w) => {
354
+ children: (c, y) => {
358
355
  e.next();
359
356
  var s = e.text();
360
- e.template_effect((C) => e.set_text(s, C), [() => D(t.orderTotals.taxes)]), e.append(c, s);
357
+ e.template_effect((C) => e.set_text(s, C), [() => $(t.orderTotals.taxes)]), e.append(c, s);
361
358
  },
362
359
  $$slots: { default: !0 }
363
360
  }), e.reset(l), e.append(n, l);
@@ -373,7 +370,7 @@ function ce(r, t) {
373
370
  p(d, {
374
371
  size: "sm",
375
372
  color: "success",
376
- children: (c, w) => {
373
+ children: (c, y) => {
377
374
  e.next();
378
375
  var s = e.text();
379
376
  e.template_effect(() => e.set_text(s, a().promoDiscount || "Promo discount")), e.append(c, s);
@@ -384,10 +381,10 @@ function ce(r, t) {
384
381
  p(k, {
385
382
  size: "sm",
386
383
  color: "success",
387
- children: (c, w) => {
384
+ children: (c, y) => {
388
385
  e.next();
389
386
  var s = e.text();
390
- e.template_effect((C) => e.set_text(s, `-${C ?? ""}`), [() => D(t.orderTotals.promoDiscount)]), e.append(c, s);
387
+ e.template_effect((C) => e.set_text(s, `-${C ?? ""}`), [() => $(t.orderTotals.promoDiscount)]), e.append(c, s);
391
388
  },
392
389
  $$slots: { default: !0 }
393
390
  }), e.reset(l), e.append(n, l);
@@ -396,14 +393,14 @@ function ce(r, t) {
396
393
  t.orderTotals.promoDiscount > 0 && n(h);
397
394
  });
398
395
  }
399
- var $ = e.sibling(x, 2);
396
+ var D = e.sibling(x, 2);
400
397
  {
401
398
  var L = (n) => {
402
399
  var l = q(), d = e.child(l);
403
400
  p(d, {
404
401
  size: "sm",
405
402
  color: "success",
406
- children: (c, w) => {
403
+ children: (c, y) => {
407
404
  e.next();
408
405
  var s = e.text();
409
406
  e.template_effect(() => e.set_text(s, a().giftCard || "Gift card")), e.append(c, s);
@@ -414,20 +411,20 @@ function ce(r, t) {
414
411
  p(k, {
415
412
  size: "sm",
416
413
  color: "success",
417
- children: (c, w) => {
414
+ children: (c, y) => {
418
415
  e.next();
419
416
  var s = e.text();
420
- e.template_effect((C) => e.set_text(s, `-${C ?? ""}`), [() => D(t.orderTotals.giftCardAmount)]), e.append(c, s);
417
+ e.template_effect((C) => e.set_text(s, `-${C ?? ""}`), [() => $(t.orderTotals.giftCardAmount)]), e.append(c, s);
421
418
  },
422
419
  $$slots: { default: !0 }
423
420
  }), e.reset(l), e.append(n, l);
424
421
  };
425
- e.if($, (n) => {
422
+ e.if(D, (n) => {
426
423
  t.orderTotals.giftCardAmount > 0 && n(L);
427
424
  });
428
425
  }
429
- var R = e.sibling($, 2), z = e.child(R);
430
- p(z, {
426
+ var R = e.sibling(D, 2), H = e.child(R);
427
+ p(H, {
431
428
  size: "base",
432
429
  weight: "semibold",
433
430
  children: (n, l) => {
@@ -437,14 +434,14 @@ function ce(r, t) {
437
434
  },
438
435
  $$slots: { default: !0 }
439
436
  });
440
- var H = e.sibling(z, 2);
441
- p(H, {
437
+ var z = e.sibling(H, 2);
438
+ p(z, {
442
439
  size: "base",
443
440
  weight: "semibold",
444
441
  children: (n, l) => {
445
442
  e.next();
446
443
  var d = e.text();
447
- e.template_effect((k) => e.set_text(d, k), [() => D(t.orderTotals.total)]), e.append(n, d);
444
+ e.template_effect((k) => e.set_text(d, k), [() => $(t.orderTotals.total)]), e.append(n, d);
448
445
  },
449
446
  $$slots: { default: !0 }
450
447
  }), e.reset(R), e.append(g, P);
@@ -453,9 +450,9 @@ function ce(r, t) {
453
450
  f() !== "lines" && g(S);
454
451
  });
455
452
  }
456
- e.reset(m), e.template_effect(() => e.set_style(m, `transition-duration: ${K.normal}ms;`)), e.append(r, m), e.pop();
453
+ e.reset(m), e.template_effect(() => e.set_style(m, `transition-duration: ${Z.normal}ms;`)), e.append(r, m), e.pop();
457
454
  }
458
- const Q = {
455
+ const ee = {
459
456
  // ── Ticket quantity controls ──────────────────────────────────────
460
457
  // Stepper aria-labels compose these into "Increase <name> quantity" etc.
461
458
  // `quantityNoun` is deliberately its OWN key (not the main i18n's `quantity`,
@@ -482,9 +479,9 @@ const Q = {
482
479
  selectTicketsToContinue: "Select tickets to continue",
483
480
  reserveASpot: "Reserve a spot",
484
481
  // ── Password modal / gate ─────────────────────────────────────────
485
- enterPassword: "Enter Password",
482
+ enterPassword: "Enter password",
486
483
  enterEventPassword: "Enter event password",
487
- passwordRequired: "Password Required",
484
+ passwordRequired: "Password required",
488
485
  passwordRequiredShort: "Password required",
489
486
  eventRequiresPassword: "This event requires a password to purchase tickets.",
490
487
  eventRequiresPasswordAccess: "This event requires a password to access tickets.",
@@ -508,7 +505,7 @@ const Q = {
508
505
  giftCard: "Gift card",
509
506
  total: "Total",
510
507
  orderSummary: "Order summary",
511
- yourOrder: "Your Order",
508
+ yourOrder: "Your order",
512
509
  // ── Ticket counts (used in CTA buttons) ───────────────────────────
513
510
  ticket: "ticket",
514
511
  tickets: "tickets",
@@ -573,7 +570,7 @@ const Q = {
573
570
  doors: "Doors",
574
571
  doorsOpenAt: "Doors open at",
575
572
  // ── Series occurrences ────────────────────────────────────────────
576
- upcomingDates: "Upcoming Dates",
573
+ upcomingDates: "Upcoming dates",
577
574
  // ── Close / dismiss ───────────────────────────────────────────────
578
575
  closeTicketSelection: "Close ticket selection",
579
576
  closeTicketSelector: "Close ticket selector",
@@ -582,20 +579,20 @@ const Q = {
582
579
  ticketsSelected: "tickets selected",
583
580
  view: "View",
584
581
  // ── Success page (public-calendar-flow) ────────────────────────────────
585
- youreIn: "You're in!",
586
- youreRegistered: "You're registered!",
582
+ youreIn: "You're in",
583
+ youreRegistered: "You're registered",
587
584
  confirmed: "confirmed",
588
585
  viewTickets: "View tickets",
589
586
  order: "Order",
590
587
  confirmationSentTo: "Confirmation sent to",
591
- addToCalendar: "Add to Calendar",
588
+ addToCalendar: "Add to calendar",
592
589
  googleCalendar: "Google Calendar",
593
590
  appleCalendar: "Apple Calendar (.ics)",
594
591
  share: "Share",
595
592
  map: "Map",
596
593
  backToEvent: "Back to event",
597
594
  needHelp: "Need help?",
598
- linkCopied: "Link copied to clipboard!",
595
+ linkCopied: "Link copied to clipboard",
599
596
  copyLink: "Copy this link:",
600
597
  addToAppleWallet: "Add to Apple Wallet",
601
598
  saveToGoogleWallet: "Save to Google Wallet",
@@ -614,9 +611,9 @@ const Q = {
614
611
  selectTicketsAgain: "Select tickets again",
615
612
  extendingSession: "Extending...",
616
613
  // ── MobileCta ─────────────────────────────────────────────────────
617
- selectTicketsLabel: "Select Tickets",
614
+ selectTicketsLabel: "Select tickets",
618
615
  // ── Waitlist (sold-out gating + tokenized unlock) ─────────────────
619
- joinWaitlist: "Join Waitlist",
616
+ joinWaitlist: "Join waitlist",
620
617
  getNotifiedWhenAvailable: "Get notified when tickets are available",
621
618
  // Tokenized-link unlock outcomes (decisions #3/#22/#36). Mapped from the
622
619
  // server's failure enum; shown as a small dismissible notice near the CTA.
@@ -627,19 +624,19 @@ const Q = {
627
624
  waitlistLinkInventoryExhausted: "Those tickets were just claimed. You're still on the waitlist — we'll email you if more free up.",
628
625
  dismiss: "Dismiss"
629
626
  };
630
- function ue(r = {}) {
631
- return { ...Q, ...r };
627
+ function fe(r = {}) {
628
+ return { ...ee, ...r };
632
629
  }
633
630
  export {
634
- re as C,
635
- K as D,
636
- ce as O,
637
- ie as a,
638
- oe as b,
639
- le as c,
640
- ne as d,
641
- de as e,
642
- ae as g,
643
- ue as m
631
+ ae as C,
632
+ Z as D,
633
+ ue as O,
634
+ oe as a,
635
+ ne as b,
636
+ de as c,
637
+ le as d,
638
+ ce as e,
639
+ ie as g,
640
+ fe as m
644
641
  };
645
- //# sourceMappingURL=labels-DgU1irgj.js.map
642
+ //# sourceMappingURL=labels-DXGieQXs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labels-DXGieQXs.js","sources":["../node_modules/@getmicdrop/svelte-components/dist/primitives/Icons/phosphor/CalendarIcon.svelte","../src/lib/api/cta.ts","../src/lib/public-calendar-flow/defaults.ts","../src/lib/public-calendar-flow/OrderSummary.svelte","../src/lib/public-calendar-flow/i18n/labels.js"],"sourcesContent":["<script lang=\"ts\">\r\n /**\r\n * Calendar — Phosphor icon (canonical Micdrop icon family).\r\n * Outline by default; pass `weight=\"fill\"` for solid, or let a stateful parent\r\n * (NavItem / Tabs / BottomNav / status badge) drive it via icon-weight context.\r\n */\r\n import { useIconWeight, type IconWeight } from './iconWeight.js';\r\n\r\n interface Props {\r\n /** Pixel size (width + height). */\r\n size?: string;\r\n /** Icon color; defaults to `currentColor` (inherits text color). */\r\n color?: string;\r\n /** Extra classes. */\r\n class?: string;\r\n /** `regular` (outline) or `fill` (solid). Overrides ambient state weight. */\r\n weight?: IconWeight;\r\n }\r\n\r\n let { size = '24', color = 'currentColor', class: className = '', weight }: Props = $props();\r\n\r\n const ctx = useIconWeight();\r\n let resolved: IconWeight = $derived(weight ?? ctx?.weight ?? 'regular');\r\n</script>\r\n\r\n<svg\r\n class={className}\r\n aria-hidden=\"true\"\r\n width={size}\r\n height={size}\r\n viewBox=\"0 0 256 256\"\r\n fill=\"currentColor\"\r\n style:color={color}\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n>\r\n {#if resolved === 'fill'}<path d=\"M208,32H184V24a8,8,0,0,0-16,0v8H88V24a8,8,0,0,0-16,0v8H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V48A16,16,0,0,0,208,32ZM112,184a8,8,0,0,1-16,0V132.94l-4.42,2.22a8,8,0,0,1-7.16-14.32l16-8A8,8,0,0,1,112,120Zm56-8a8,8,0,0,1,0,16H136a8,8,0,0,1-6.4-12.8l28.78-38.37A8,8,0,1,0,145.07,132a8,8,0,1,1-13.85-8A24,24,0,0,1,176,136a23.76,23.76,0,0,1-4.84,14.45L152,176ZM48,80V48H72v8a8,8,0,0,0,16,0V48h80v8a8,8,0,0,0,16,0V48h24V80Z\"/>{:else}<rect x=\"40\" y=\"40\" width=\"176\" height=\"176\" rx=\"8\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"176\" y1=\"24\" x2=\"176\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"80\" y1=\"24\" x2=\"80\" y2=\"56\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><line x1=\"40\" y1=\"88\" x2=\"216\" y2=\"88\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><polyline points=\"88 128 104 120 104 184\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/><path d=\"M138.14,128a16,16,0,1,1,26.64,17.63L136,184h32\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"16\"/>{/if}\r\n</svg>\r\n","/**\r\n * CTA state computation.\r\n *\r\n * Pure function (no I/O) — derives the buy-button state from an event and\r\n * its ticket list. Lives in `api/` because it is the canonical, single\r\n * source of truth that replaces the duplicate implementations previously\r\n * scattered across utils/api.js, core/api-client.js, and a few components.\r\n */\r\n\r\n// Import from the specific subpath (not the bare entry) so the api/\r\n// bundle doesn't pull in the entire SC component graph (Accordion etc.)\r\n// and break `npm run build:api`. `formatLocal` is the sanctioned browser-local\r\n// (no-timezone) Intl label home — these \"On sale …\" countdown labels render in\r\n// the viewer's own clock, so no venue timezone applies. The datetime subpath is\r\n// leaf/component-free; only `formatLocal` (→ Intl) is pulled, no date-fns.\r\nimport { browserNow, formatLocal } from '@getmicdrop/svelte-components/datetime';\r\n// Hidden-ticket predicate from the `/transforms` leaf subpath (no component\r\n// graph, so `npm run build:api` stays clean). SC's copy was pinned FROM this\r\n// body (dedup #392) and additionally honours the backend-resolved\r\n// `effectiveSales*` window for relative-offset tickets (#388). Imported (not\r\n// just re-exported) so it stays in local scope for `computeCtaState` below.\r\nimport { isHiddenTicketPurchasable } from '@getmicdrop/svelte-components/transforms';\r\n\r\nexport interface CtaStateOptions {\r\n cancelled?: boolean;\r\n isRegistration?: boolean;\r\n waitlistEnabled?: boolean;\r\n}\r\n\r\nexport interface CtaState {\r\n text: string;\r\n disabled: boolean;\r\n reason:\r\n | 'cancelled'\r\n | 'event_past'\r\n | 'no_tickets'\r\n | 'available'\r\n | 'coming_soon'\r\n | 'sold_out_waitlist'\r\n | 'sold_out'\r\n | 'sales_ended'\r\n | 'hidden_only';\r\n}\r\n\r\ninterface CtaEvent {\r\n startDateTime?: string | null;\r\n endDateTime?: string | null;\r\n hasPurchasableHiddenTickets?: boolean;\r\n}\r\n\r\ninterface CtaTicket {\r\n salesChannel?: number;\r\n salesBegin?: string | null;\r\n salesStart?: string | null;\r\n saleBegin?: string | null;\r\n onSaleStart?: string | null;\r\n salesEnd?: string | null;\r\n saleEnd?: string | null;\r\n onSaleEnd?: string | null;\r\n remainingCapacity?: number | null;\r\n quantityRemaining?: number | null;\r\n quantity?: number | null;\r\n soldOut?: boolean;\r\n isHidden?: boolean;\r\n visibility?: number;\r\n}\r\n\r\n// A hidden ticket (visibility>=2 or isHidden) that's still on sale drives the\r\n// \"Sales ended\" / \"Sold out\" / \"No tickets\" → \"Get tickets\" override. The user\r\n// just needs the promo code to see it. Re-exported from the SC canonical so\r\n// existing consumers (cta.test.ts, computeCtaState) keep their import path while\r\n// the single-source body lives in SC (dedup #392).\r\nexport { isHiddenTicketPurchasable };\r\n\r\nexport function computeCtaState(\r\n event: CtaEvent,\r\n tickets: CtaTicket[] | undefined,\r\n options: CtaStateOptions = {}\r\n): CtaState {\r\n const {\r\n cancelled = false,\r\n isRegistration = false,\r\n waitlistEnabled = false,\r\n } = options;\r\n const now = browserNow();\r\n\r\n if (cancelled)\r\n return { text: 'Cancelled', disabled: true, reason: 'cancelled' };\r\n\r\n const eventEnd = event.endDateTime || event.startDateTime;\r\n // @datetime-escape: absolute-instant compare of a UTC-Z field vs now — tz-independent\r\n if (eventEnd && new Date(eventEnd) < now) {\r\n return { text: 'Sales ended', disabled: true, reason: 'event_past' };\r\n }\r\n\r\n const hiddenAvailable =\r\n event?.hasPurchasableHiddenTickets === true ||\r\n (Array.isArray(tickets) && tickets.some(isHiddenTicketPurchasable));\r\n\r\n const publicTickets = (tickets || []).filter(\r\n t =>\r\n t.salesChannel !== 2 &&\r\n !t.isHidden &&\r\n !(typeof t.visibility === 'number' && t.visibility >= 2)\r\n );\r\n if (publicTickets.length === 0) {\r\n if (hiddenAvailable) {\r\n return {\r\n text: isRegistration ? 'Reserve a spot' : 'Get tickets',\r\n disabled: false,\r\n reason: 'hidden_only',\r\n };\r\n }\r\n return {\r\n text: 'No tickets available',\r\n disabled: true,\r\n reason: 'no_tickets',\r\n };\r\n }\r\n\r\n let hasPurchasable = false;\r\n let allSoldOut = true;\r\n let allComingSoon = true;\r\n let earliestSalesStart: Date | null = null;\r\n\r\n for (const ticket of publicTickets) {\r\n const salesBegin =\r\n ticket.salesBegin ||\r\n ticket.salesStart ||\r\n ticket.saleBegin ||\r\n ticket.onSaleStart;\r\n const salesEnd = ticket.salesEnd || ticket.saleEnd || ticket.onSaleEnd;\r\n const remaining =\r\n ticket.remainingCapacity ?? ticket.quantityRemaining ?? ticket.quantity;\r\n const isSoldOut =\r\n ticket.soldOut ||\r\n (remaining !== null && remaining !== undefined && remaining <= 0);\r\n\r\n const isScheduled = salesBegin ? new Date(salesBegin) > now : false; // @datetime-escape: absolute-instant compare of a UTC-Z field vs now — tz-independent\r\n const hasSalesEnded = salesEnd ? new Date(salesEnd) < now : false; // @datetime-escape: absolute-instant compare of a UTC-Z field vs now — tz-independent\r\n const isPurchasable = !isSoldOut && !isScheduled && !hasSalesEnded;\r\n\r\n if (isPurchasable) hasPurchasable = true;\r\n if (!isSoldOut) allSoldOut = false;\r\n if (!isScheduled) allComingSoon = false;\r\n\r\n if (isScheduled && salesBegin && !isSoldOut && !hasSalesEnded) {\r\n const startDate = new Date(salesBegin); // @datetime-escape: absolute-instant compare of a UTC-Z field vs now — tz-independent\r\n if (!earliestSalesStart || startDate < earliestSalesStart) {\r\n earliestSalesStart = startDate;\r\n }\r\n }\r\n }\r\n\r\n if (hasPurchasable) {\r\n return {\r\n text: isRegistration ? 'Reserve a spot' : 'Get tickets',\r\n disabled: false,\r\n reason: 'available',\r\n };\r\n }\r\n\r\n if (allComingSoon && earliestSalesStart) {\r\n if (hiddenAvailable) {\r\n return {\r\n text: isRegistration ? 'Reserve a spot' : 'Get tickets',\r\n disabled: false,\r\n reason: 'hidden_only',\r\n };\r\n }\r\n const diffMs = earliestSalesStart.getTime() - now.getTime();\r\n const diffHours = diffMs / (1000 * 60 * 60);\r\n const diffDays = diffMs / (1000 * 60 * 60 * 24);\r\n // Viewer-local time label (\"8:00 PM\") — the shape shared by the <24h branch\r\n // and the >7d composite. Matches the deprecated `formatTime(d,{hour12:true})`\r\n // defaults-merge exactly.\r\n const timeLabel = (d: Date) =>\r\n formatLocal(\r\n d,\r\n { hour: 'numeric', minute: '2-digit', hour12: true },\r\n 'en-US'\r\n );\r\n let dateText: string;\r\n if (diffHours < 24) {\r\n dateText = timeLabel(earliestSalesStart);\r\n } else if (diffDays <= 7) {\r\n dateText = formatLocal(\r\n earliestSalesStart,\r\n { weekday: 'short', hour: 'numeric', minute: '2-digit', hour12: true },\r\n 'en-US'\r\n );\r\n } else {\r\n const d = formatLocal(\r\n earliestSalesStart,\r\n { month: 'short', day: 'numeric' },\r\n 'en-US'\r\n );\r\n dateText = `${d} ${timeLabel(earliestSalesStart)}`;\r\n }\r\n return {\r\n text: `On sale ${dateText}`,\r\n disabled: true,\r\n reason: 'coming_soon',\r\n };\r\n }\r\n\r\n if (allSoldOut) {\r\n if (hiddenAvailable) {\r\n return {\r\n text: isRegistration ? 'Reserve a spot' : 'Get tickets',\r\n disabled: false,\r\n reason: 'hidden_only',\r\n };\r\n }\r\n if (waitlistEnabled) {\r\n return {\r\n text: 'Join Waitlist',\r\n disabled: false,\r\n reason: 'sold_out_waitlist',\r\n };\r\n }\r\n return { text: 'Sold out', disabled: true, reason: 'sold_out' };\r\n }\r\n\r\n if (hiddenAvailable) {\r\n return {\r\n text: isRegistration ? 'Reserve a spot' : 'Get tickets',\r\n disabled: false,\r\n reason: 'hidden_only',\r\n };\r\n }\r\n\r\n return { text: 'Sales ended', disabled: true, reason: 'sales_ended' };\r\n}\r\n","// @currency-escape: feeCents / 100 in calculateServiceFee is arithmetic,\r\n// not display. Produces a dollar-magnitude number used in the fee formula\r\n// `price * (feePercentage / 100) + feeCents / 100`. Per Atlas\r\n// utility-currency convergence record; the no-handrolled-currency\r\n// ESLint rule's divideByHundred detector treats variable-name `Cents`\r\n// as drift but here it's real math.\r\n\r\n// Premium Ticket Experience — Constants & Defaults\r\n// Used by all design variants. DO NOT MODIFY per-variant.\r\n\r\n// This file is the canonical formatter module for public-calendar-flow: it\r\n// wraps + re-exports the timezone-aware production date/time formatters, plus\r\n// the shared sales-countdown formatter (formatSmartSalesDate) hoisted into\r\n// svelte-components (SC #471). No raw Intl date formatting lives here anymore.\r\n\r\nimport type {\r\n EventData,\r\n TicketTypeData,\r\n ScarcityLevel,\r\n CtaConfig,\r\n PromoCodeState,\r\n} from './types';\r\nimport { computeCtaState } from '$lib/api';\r\nimport {\r\n computeScarcityLevel,\r\n SCARCITY_THRESHOLDS,\r\n} from '$lib/constants/scarcity';\r\nimport type { Cents } from '@getmicdrop/svelte-components';\r\nimport { roundCurrency } from '@getmicdrop/svelte-components';\r\nimport { formatSmartSalesDate } from '@getmicdrop/svelte-components/utils/formatters';\r\nimport {\r\n formatFullDate,\r\n formatFullDateCompact,\r\n formatEventTime,\r\n formatTimeRange,\r\n formatDoorsTime,\r\n formatSalesDate,\r\n formatBrowseDate,\r\n formatEventDate,\r\n formatCleanTimeRange,\r\n getDateParts,\r\n} from '$lib/utils/datetime.js';\r\n\r\n// --- Re-export production date/time formatters (timezone-aware) ---\r\nexport {\r\n formatFullDate,\r\n formatFullDateCompact,\r\n formatEventTime,\r\n formatTimeRange,\r\n formatDoorsTime,\r\n formatSalesDate,\r\n formatBrowseDate,\r\n formatEventDate,\r\n formatCleanTimeRange,\r\n getDateParts,\r\n};\r\n\r\n// Shared sales-countdown formatter, adopted from svelte-components (SC #471).\r\n// Kept as a re-export so public-calendar-flow consumers import it from this\r\n// module unchanged. English defaults match VC's prior copy; the clock time\r\n// renders in UTC (matching the production TicketBlock origin) rather than the\r\n// old copy's viewer-local time.\r\nexport { formatSmartSalesDate };\r\n\r\n// --- Scarcity Badge Rules ---\r\n// Threshold logic lives in the ONE canonical computeScarcityLevel\r\n// ($lib/constants/scarcity) — including the sliding floor/cap that keeps a\r\n// 1,000-seat show from flagging \"Selling fast\" at 200 left. This module only\r\n// adapts the canon's tier enum ('sold-out'/'plenty') to public-calendar-flow's\r\n// display enum ('sold_out'/'none') and renders the copy.\r\nexport function getScarcityLevel(\r\n remaining: number,\r\n total: number\r\n): ScarcityLevel {\r\n const level = computeScarcityLevel(remaining, total);\r\n if (level === 'sold-out') return 'sold_out';\r\n if (level === 'plenty') return 'none';\r\n return level; // 'urgent' | 'low' — identical between the two enums\r\n}\r\n\r\nexport function getScarcityText(\r\n level: ScarcityLevel,\r\n remaining: number,\r\n context: 'browse' | 'event' | 'ticket',\r\n options?: { isFree?: boolean }\r\n): string | null {\r\n if (level === 'none') return null;\r\n if (level === 'sold_out') return 'Sold out';\r\n // No scarcity badges on free events/tickets — nothing to lose = no urgency\r\n if (options?.isFree) return null;\r\n if (\r\n level === 'urgent' &&\r\n context !== 'browse' &&\r\n remaining <= SCARCITY_THRESHOLDS.MAX_EXACT_COUNT\r\n ) {\r\n return `Only ${remaining} left`;\r\n }\r\n if (level === 'low' || level === 'urgent') return 'Selling fast';\r\n return null;\r\n}\r\n\r\n// --- CTA Rules ---\r\n// Delegates to production computeCtaState() but adapts our EventData shape.\r\n// Components keep calling getCtaConfig(event) — internal logic is production-aligned.\r\nexport function getCtaConfig(event: EventData): CtaConfig {\r\n // Map our EventData tickets to the shape computeCtaState expects.\r\n // `isHidden` flows through so computeCtaState can apply the hidden-only\r\n // \"Sales ended\" → \"Get tickets\" override (MIC-1039).\r\n const apiTickets = event.tickets.map(t => ({\r\n salesBegin: t.salesStartDate,\r\n salesEnd: t.salesEndDate,\r\n remainingCapacity: t.quantityAvailable,\r\n totalCapacity: t.quantityTotal,\r\n soldOut: t.status === 'sold_out',\r\n salesChannel: 1, // All our tickets are online (not \"at the door only\")\r\n isHidden: t.isHidden,\r\n }));\r\n\r\n // Handle statuses that computeCtaState doesn't compute from tickets\r\n if (event.status === 'cancelled') {\r\n return {\r\n text: 'Cancelled',\r\n disabled: true,\r\n reason: 'This event has been cancelled',\r\n };\r\n }\r\n if (event.status === 'past') {\r\n return {\r\n text: 'Event ended',\r\n disabled: true,\r\n reason: 'This event has ended',\r\n };\r\n }\r\n\r\n const result = computeCtaState(\r\n { startDateTime: event.startDateTime, endDateTime: event.endDateTime },\r\n apiTickets,\r\n {\r\n cancelled: false,\r\n isRegistration: event.isRegistrationEvent,\r\n waitlistEnabled: false,\r\n }\r\n );\r\n\r\n return {\r\n text: result.text,\r\n disabled: result.disabled,\r\n reason: result.disabled ? toFriendlyReason(result.reason) : undefined,\r\n };\r\n}\r\n\r\n/**\r\n * computeCtaState() returns machine-enum reasons ('event_past', 'sold_out',\r\n * 'coming_soon', etc) intended for branching, not display. The BookingWidget\r\n * and MobileCta render `reason` directly as supplementary copy below the\r\n * button text — which leaks raw enum strings to users.\r\n *\r\n * Map each enum to a friendly sentence, OR return undefined when the button\r\n * `text` already says everything (\"Sales ended\" / \"Sold out\" — no need for\r\n * a second line repeating it).\r\n */\r\nfunction toFriendlyReason(reason: string | undefined): string | undefined {\r\n if (!reason) return undefined;\r\n switch (reason) {\r\n case 'cancelled':\r\n return 'This event has been cancelled.';\r\n case 'event_past':\r\n return 'This event has already happened.';\r\n case 'no_tickets':\r\n return 'There are no tickets configured for this event.';\r\n case 'coming_soon':\r\n return undefined; // text already shows \"On sale <date>\"\r\n case 'sold_out':\r\n return undefined; // text already shows \"Sold out\"\r\n case 'sold_out_waitlist':\r\n return 'All tickets are claimed. Join the waitlist to be notified.';\r\n case 'sales_ended':\r\n return undefined; // text already shows \"Sales ended\"\r\n default:\r\n return undefined; // unknown enum — never leak it\r\n }\r\n}\r\n\r\n// --- Price Display Rules (from DECISIONS.md #1) ---\r\nexport function getPriceDisplay(event: EventData): string | null {\r\n const visibleTickets = event.tickets.filter(\r\n t => t.status === 'on_sale' && !t.isHidden\r\n );\r\n if (visibleTickets.length === 0) return null;\r\n\r\n const hasDonation = visibleTickets.some(\r\n t => t.isDonation || t.ticketType === 2\r\n );\r\n const paidTickets = visibleTickets.filter(\r\n t => !t.isDonation && t.ticketType !== 2\r\n );\r\n const hasFree = paidTickets.some(t => t.price === 0);\r\n const pricedTickets = paidTickets.filter(t => t.price > 0);\r\n\r\n // Only donation tickets → \"Donation\"\r\n if (pricedTickets.length === 0 && !hasFree && hasDonation) return 'Donation';\r\n\r\n // Only free tickets (no paid, no donation) → null (BookingWidget shows \"Free\" via isFreeEvent)\r\n if (pricedTickets.length === 0 && hasFree) return null;\r\n\r\n const minPrice = Math.min(...pricedTickets.map(t => t.price));\r\n\r\n // Free + paid → \"Free\" (free dominates the display). Non-donation free tickets\r\n // outrank the paid options in the headline, matching the shared \"Free\" label\r\n // every other price surface uses. Returning null here left the widget blank.\r\n if (hasFree) return 'Free';\r\n\r\n // Donation + paid → \"From $X\" (donation is an alternative option)\r\n if (hasDonation) return `From $${minPrice}`;\r\n\r\n // Single paid ticket type → \"$X\"\r\n if (pricedTickets.length === 1) return `$${minPrice}`;\r\n\r\n // Multiple paid ticket types → \"From $X\"\r\n return `From $${minPrice}`;\r\n}\r\n\r\n// --- Fee Calculation ---\r\nexport function calculateFee(\r\n price: number,\r\n feePercentage: number,\r\n feeCents: Cents\r\n): number {\r\n return roundCurrency(price * (feePercentage / 100) + feeCents / 100);\r\n}\r\n\r\nexport function calculateTax(amount: number, taxPercentage: number): number {\r\n return roundCurrency(amount * (taxPercentage / 100));\r\n}\r\n\r\n// --- Date Formatting ---\r\n// PREFERRED: Use the timezone-aware production formatters re-exported above:\r\n// formatBrowseDate(iso, tz) → \"Fri, Feb 20\"\r\n// formatFullDateCompact(iso, tz) → \"Friday, February 20\"\r\n// formatEventTime(iso, tz) → \"8:00 PM\"\r\n// formatTimeRange(start, end, tz) → \"8:00 PM - 10:00 PM\"\r\n// formatDoorsTime(doors, tz) → \"7:00 PM\"\r\n\r\n// --- Animation Durations ---\r\nexport const DURATION = {\r\n instant: 100,\r\n micro: 150,\r\n fast: 200,\r\n normal: 300,\r\n slow: 400,\r\n elaborate: 600,\r\n} as const;\r\n\r\n// --- Promo Code State Factory ---\r\nexport function createDefaultPromoState(): PromoCodeState {\r\n return {\r\n code: '',\r\n isApplied: false,\r\n isValidating: false,\r\n error: '',\r\n hint: '',\r\n discountAmount: 0,\r\n discountType: '',\r\n discountTicketIds: [],\r\n revealHiddenTickets: false,\r\n revealTicketIds: [],\r\n };\r\n}\r\n\r\n// --- Ticket helpers ---\r\nexport function getAvailableTickets(\r\n tickets: TicketTypeData[]\r\n): TicketTypeData[] {\r\n return tickets.filter(t => !t.isHidden && t.status === 'on_sale');\r\n}\r\n","<!-- @style-escape: widget-intentional. -->\r\n<script lang=\"ts\">\r\n import type { USD } from '@getmicdrop/svelte-components';\r\n import { Text, formatCurrency } from '@getmicdrop/svelte-components';\r\n import type { OrderTotals } from '$lib/public-calendar-flow/types';\r\n import { formatPriceOrFree } from '$lib/core';\r\n import { DURATION } from '$lib/public-calendar-flow/defaults';\r\n\r\n interface Props {\r\n orderTotals: OrderTotals;\r\n labels?: Record<string, string>;\r\n /**\r\n * Which section to render.\r\n * - `full` (default): ticket lines + totals stacked together.\r\n * - `lines` : ticket-line items only. Use when the parent scrolls\r\n * this section in a flex column.\r\n * - `totals` : subtotal/fees/taxes/promo/total only. Use in a fixed\r\n * footer alongside the action button.\r\n *\r\n * Splitting via `lines` / `totals` lets the sticky sidebars scroll\r\n * just the variable-length ticket list while keeping the summary\r\n * block and CTA always visible.\r\n */\r\n mode?: 'full' | 'lines' | 'totals';\r\n }\r\n\r\n let { orderTotals, labels = {}, mode = 'full' }: Props = $props();\r\n</script>\r\n\r\n<div class=\"space-y-2\" style=\"transition-duration: {DURATION.normal}ms;\">\r\n {#if mode !== 'totals'}\r\n <!-- Line items -->\r\n {#each orderTotals.lines as line (line.ticketId)}\r\n <div class=\"flex justify-between\">\r\n <Text size=\"sm\">{line.quantity}x {line.ticketName}</Text>\r\n <Text size=\"sm\"\r\n >{line.isDonation\r\n ? formatCurrency(line.subtotal as USD)\r\n : formatPriceOrFree(line.subtotal, labels)}</Text\r\n >\r\n </div>\r\n {/each}\r\n {/if}\r\n\r\n {#if mode !== 'lines'}\r\n <!-- Subtotal. In `totals` mode the parent supplies the separator above\r\n\t\t this block (BookingWidget wraps the totals block in border-t); a\r\n\t\t second internal border would render as a double line. Only show\r\n\t\t the internal border-t in `full` mode where lines + totals stack\r\n\t\t in one container with no external separator. -->\r\n {#if mode === 'full' && orderTotals.lines.length > 1}\r\n <div class=\"flex justify-between pt-1 border-t border-default\">\r\n <Text size=\"sm\" color=\"muted\">{labels.subtotal || 'Subtotal'}</Text>\r\n <Text size=\"sm\" color=\"muted\"\r\n >{formatCurrency(orderTotals.subtotal as USD)}</Text\r\n >\r\n </div>\r\n {:else if orderTotals.lines.length > 1}\r\n <div class=\"flex justify-between\">\r\n <Text size=\"sm\" color=\"muted\">{labels.subtotal || 'Subtotal'}</Text>\r\n <Text size=\"sm\" color=\"muted\"\r\n >{formatCurrency(orderTotals.subtotal as USD)}</Text\r\n >\r\n </div>\r\n {/if}\r\n\r\n <!-- Fees -->\r\n {#if orderTotals.fees > 0}\r\n <div class=\"flex justify-between\">\r\n <Text size=\"sm\" color=\"muted\"\r\n >{labels.serviceFees || 'Service fees'}</Text\r\n >\r\n <Text size=\"sm\" color=\"muted\"\r\n >{formatCurrency(orderTotals.fees as USD)}</Text\r\n >\r\n </div>\r\n {/if}\r\n\r\n <!-- Taxes -->\r\n {#if orderTotals.taxes > 0}\r\n <div class=\"flex justify-between\">\r\n <Text size=\"sm\" color=\"muted\">{labels.taxes || 'Taxes'}</Text>\r\n <Text size=\"sm\" color=\"muted\"\r\n >{formatCurrency(orderTotals.taxes as USD)}</Text\r\n >\r\n </div>\r\n {/if}\r\n\r\n <!-- Promo discount -->\r\n {#if orderTotals.promoDiscount > 0}\r\n <div class=\"flex justify-between\">\r\n <Text size=\"sm\" color=\"success\"\r\n >{labels.promoDiscount || 'Promo discount'}</Text\r\n >\r\n <Text size=\"sm\" color=\"success\"\r\n >-{formatCurrency(orderTotals.promoDiscount as USD)}</Text\r\n >\r\n </div>\r\n {/if}\r\n\r\n <!-- Gift card — deduction from the amount due; `total` already reflects it -->\r\n {#if orderTotals.giftCardAmount > 0}\r\n <div class=\"flex justify-between\">\r\n <Text size=\"sm\" color=\"success\">{labels.giftCard || 'Gift card'}</Text>\r\n <Text size=\"sm\" color=\"success\"\r\n >-{formatCurrency(orderTotals.giftCardAmount as USD)}</Text\r\n >\r\n </div>\r\n {/if}\r\n\r\n <!-- Total -->\r\n <div class=\"flex justify-between pt-2 border-t border-default\">\r\n <Text size=\"base\" weight=\"semibold\">{labels.total || 'Total'}</Text>\r\n <Text size=\"base\" weight=\"semibold\"\r\n >{formatCurrency(orderTotals.total as USD)}</Text\r\n >\r\n </div>\r\n {/if}\r\n</div>\r\n","/**\r\n * Default English labels for public-calendar-flow components.\r\n * Consumers override via the `labels` prop on any *Main component.\r\n *\r\n * Label keys use flat camelCase. For composed strings (e.g. aria-labels),\r\n * components build them from atomic label parts.\r\n */\r\nexport const defaultLabels = {\r\n // ── Ticket quantity controls ──────────────────────────────────────\r\n // Stepper aria-labels compose these into \"Increase <name> quantity\" etc.\r\n // `quantityNoun` is deliberately its OWN key (not the main i18n's `quantity`,\r\n // whose value is the sr-only display PREFIX 'Quantity:') so the main-i18n\r\n // merge can't leak a capital-Q + trailing colon into the button labels.\r\n // Overridable, same as increase/decrease, which main i18n also doesn't define.\r\n decrease: 'Decrease',\r\n increase: 'Increase',\r\n quantityNoun: 'quantity',\r\n\r\n // ── Ticket states ─────────────────────────────────────────────────\r\n soldOut: 'Sold out',\r\n free: 'Free',\r\n unavailable: 'Unavailable',\r\n eventSoldOut: 'This event is sold out',\r\n\r\n // ── Price display ─────────────────────────────────────────────────\r\n includesFees: 'Includes',\r\n fees: 'fees',\r\n fee: 'fee',\r\n\r\n // ── Checkout CTAs ─────────────────────────────────────────────────\r\n checkout: 'Checkout',\r\n getTickets: 'Get tickets',\r\n selectTickets: 'Select tickets',\r\n selectTicketsBelow: 'Select tickets below',\r\n selectTicketsToContinue: 'Select tickets to continue',\r\n reserveASpot: 'Reserve a spot',\r\n\r\n // ── Password modal / gate ─────────────────────────────────────────\r\n enterPassword: 'Enter password',\r\n enterEventPassword: 'Enter event password',\r\n passwordRequired: 'Password required',\r\n passwordRequiredShort: 'Password required',\r\n eventRequiresPassword: 'This event requires a password to purchase tickets.',\r\n eventRequiresPasswordAccess:\r\n 'This event requires a password to access tickets.',\r\n enterEventPasswordToView: 'Enter the event password to view tickets.',\r\n enterEventPasswordToViewAvailable:\r\n 'Enter the event password to view available tickets.',\r\n eventPassword: 'Event password',\r\n password: 'Password',\r\n pleaseEnterPassword: 'Please enter the event password',\r\n pleaseEnterAPassword: 'Please enter a password',\r\n eventRequiresPasswordShort: 'This event requires a password',\r\n unlockTickets: 'Unlock tickets',\r\n cancel: 'Cancel',\r\n continue: 'Continue',\r\n submit: 'Submit',\r\n\r\n // ── Order summary ─────────────────────────────────────────────────\r\n subtotal: 'Subtotal',\r\n serviceFees: 'Service fees',\r\n taxes: 'Taxes',\r\n tax: 'Tax',\r\n promoDiscount: 'Promo discount',\r\n giftCard: 'Gift card',\r\n total: 'Total',\r\n orderSummary: 'Order summary',\r\n yourOrder: 'Your order',\r\n\r\n // ── Ticket counts (used in CTA buttons) ───────────────────────────\r\n ticket: 'ticket',\r\n tickets: 'tickets',\r\n\r\n // ── Checkout form (public-calendar-flow) ───────────────────────────────\r\n yourDetails: 'Your details',\r\n attendeeDetails: 'Attendee details',\r\n attendee: 'Attendee',\r\n sameAsPurchaser: 'Same as purchaser',\r\n payment: 'Payment',\r\n noPaymentRequired: 'No payment required',\r\n freeEventMessage:\r\n 'This is a free event. Complete the form above to reserve your spot.',\r\n firstName: 'First name',\r\n lastName: 'Last name',\r\n emailAddress: 'Email address',\r\n email: 'Email',\r\n emailPlaceholder: 'you@example.com',\r\n attendeeEmailPlaceholder: 'attendee@example.com',\r\n cardNumber: 'Card number',\r\n cardPlaceholder: '4242 4242 4242 4242',\r\n expiryDate: 'Expiry date',\r\n expiryPlaceholder: 'MM / YY',\r\n cvc: 'CVC',\r\n cvcPlaceholder: '123',\r\n keepMeUpdated: 'Keep me updated about this event and similar events',\r\n agreeToTerms: 'I agree to the terms and conditions',\r\n goBack: 'Go back',\r\n loadingPaymentForm: 'Loading secure payment form...',\r\n\r\n // ── Checkout form validation ──────────────────────────────────────\r\n firstNameRequired: 'First name is required',\r\n lastNameRequired: 'Last name is required',\r\n emailRequired: 'Email is required',\r\n emailInvalid: 'Enter a valid email address',\r\n emailInvalidShort: 'Enter a valid email',\r\n cardNumberRequired: 'Card number is required',\r\n expiryRequired: 'Expiry date is required',\r\n cvcRequired: 'CVC is required',\r\n mustAgreeTerms: 'You must agree to the terms',\r\n\r\n // ── Place order CTAs ──────────────────────────────────────────────\r\n placeOrder: 'Place order',\r\n completeOrder: 'Complete order',\r\n placingOrder: 'Placing order...',\r\n\r\n // ── Promo code ────────────────────────────────────────────────────\r\n havePromoCode: 'Have a promo code?',\r\n promoCode: 'Promo code',\r\n enterCode: 'Enter code',\r\n apply: 'Apply',\r\n remove: 'Remove',\r\n removePromoCode: 'Remove promo code',\r\n applyPromoCode: 'Apply promo code',\r\n checkingPromoCode: 'Checking promo code',\r\n checking: 'Checking...',\r\n promoApplied: 'Promo applied',\r\n\r\n // ── Navigation tabs (app-segments) ────────────────────────────────\r\n about: 'About',\r\n ticketsTab: 'Tickets',\r\n eventSections: 'Event sections',\r\n\r\n // ── Event details ─────────────────────────────────────────────────\r\n eventDetails: 'Event details',\r\n performers: 'Performers',\r\n faq: 'FAQ',\r\n frequentlyAskedQuestions: 'Frequently asked questions',\r\n doors: 'Doors',\r\n doorsOpenAt: 'Doors open at',\r\n\r\n // ── Series occurrences ────────────────────────────────────────────\r\n upcomingDates: 'Upcoming dates',\r\n\r\n // ── Close / dismiss ───────────────────────────────────────────────\r\n closeTicketSelection: 'Close ticket selection',\r\n closeTicketSelector: 'Close ticket selector',\r\n\r\n // ── Accessibility ─────────────────────────────────────────────────\r\n ticketSelection: 'ticket selection',\r\n ticketsSelected: 'tickets selected',\r\n view: 'View',\r\n\r\n // ── Success page (public-calendar-flow) ────────────────────────────────\r\n youreIn: \"You're in\",\r\n youreRegistered: \"You're registered\",\r\n confirmed: 'confirmed',\r\n viewTickets: 'View tickets',\r\n order: 'Order',\r\n confirmationSentTo: 'Confirmation sent to',\r\n addToCalendar: 'Add to calendar',\r\n googleCalendar: 'Google Calendar',\r\n appleCalendar: 'Apple Calendar (.ics)',\r\n share: 'Share',\r\n map: 'Map',\r\n backToEvent: 'Back to event',\r\n needHelp: 'Need help?',\r\n linkCopied: 'Link copied to clipboard',\r\n copyLink: 'Copy this link:',\r\n addToAppleWallet: 'Add to Apple Wallet',\r\n saveToGoogleWallet: 'Save to Google Wallet',\r\n\r\n // ── Session timer / expiration modals ─────────────────────────────\r\n sessionExpiringSoon: 'Session expiring soon',\r\n sessionExpiringSoonMessage:\r\n 'Your checkout session will expire in {time}. Your selected tickets will be released back to inventory.',\r\n extensionsRemaining: '{count} extension{plural} remaining',\r\n continueCheckout: 'Continue checkout',\r\n okIllHurry: \"OK, I'll hurry\",\r\n maxExtensionsReached: 'Maximum extensions reached',\r\n wantToKeepTickets: 'Want to keep your tickets?',\r\n sessionExpiredMessage:\r\n 'Your checkout session has expired and your selected tickets have been released.',\r\n sessionExpired: 'Session expired',\r\n reservationTimedOut:\r\n 'Your reservation has timed out. Please select your tickets again to continue.',\r\n keepMyTickets: 'Keep my tickets',\r\n selectTicketsAgain: 'Select tickets again',\r\n extendingSession: 'Extending...',\r\n\r\n // ── MobileCta ─────────────────────────────────────────────────────\r\n selectTicketsLabel: 'Select tickets',\r\n\r\n // ── Waitlist (sold-out gating + tokenized unlock) ─────────────────\r\n joinWaitlist: 'Join waitlist',\r\n getNotifiedWhenAvailable: 'Get notified when tickets are available',\r\n // Tokenized-link unlock outcomes (decisions #3/#22/#36). Mapped from the\r\n // server's failure enum; shown as a small dismissible notice near the CTA.\r\n waitlistLinkInvalid:\r\n \"This link isn't valid. You're still on the waitlist — we'll email you if tickets free up.\",\r\n waitlistLinkExpired: \"This link has expired. You're still on the waitlist.\",\r\n waitlistLinkUsed:\r\n \"This link has already been used. You're still on the waitlist.\",\r\n waitlistLinkEmailMismatch:\r\n \"This link was sent to a different email address. You're still on the waitlist.\",\r\n waitlistLinkInventoryExhausted:\r\n \"Those tickets were just claimed. You're still on the waitlist — we'll email you if more free up.\",\r\n dismiss: 'Dismiss',\r\n};\r\n\r\n/**\r\n * Merge user-provided label overrides with the defaults.\r\n * Shallow merge — any key provided by the consumer wins.\r\n *\r\n * @param {Record<string, string>} [userLabels] - Partial label overrides\r\n * @returns {Record<string, string>} Merged labels object\r\n */\r\nexport function mergeLabels(userLabels = {}) {\r\n return { ...defaultLabels, ...userLabels };\r\n}\r\n"],"names":["size","$","$$props","color","className","ctx","useIconWeight","resolved","svg","root_2","path","root","$$render","consequent","alternate","styles","computeCtaState","event","tickets","options","cancelled","isRegistration","waitlistEnabled","now","browserNow","eventEnd","hiddenAvailable","isHiddenTicketPurchasable","publicTickets","t","hasPurchasable","allSoldOut","allComingSoon","earliestSalesStart","ticket","salesBegin","salesEnd","remaining","isSoldOut","isScheduled","hasSalesEnded","startDate","diffMs","diffHours","diffDays","timeLabel","d","formatLocal","dateText","getScarcityLevel","total","level","computeScarcityLevel","getScarcityText","context","SCARCITY_THRESHOLDS","getCtaConfig","apiTickets","result","toFriendlyReason","reason","getPriceDisplay","visibleTickets","hasDonation","paidTickets","hasFree","pricedTickets","minPrice","calculateTax","amount","taxPercentage","roundCurrency","DURATION","createDefaultPromoState","labels","mode","div","root_3","node_1","line","div_1","Text","node_2","text","node_3","formatCurrency","formatPriceOrFree","div_2","root_1","node_6","node_7","$0","text_3","div_3","node_8","node_9","text_5","consequent_1","consequent_2","div_4","node_11","node_12","text_7","consequent_3","div_5","node_14","node_15","text_9","consequent_4","div_6","node_17","node_18","text_11","consequent_5","div_7","node_20","node_21","text_13","consequent_6","div_8","node_19","node_22","node_23","text_15","consequent_7","defaultLabels","mergeLabels","userLabels"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,6 +1,6 @@
1
1
  import "svelte/internal/disclose-version";
2
2
  import * as e from "svelte/internal/client";
3
- import { aG as u, aH as d } from "./VenueCalendar-DmxiEy6q.js";
3
+ import { aO as u, aP as d } from "./VenueCalendar-CU5N9klc.js";
4
4
  var f = e.from_html("<div><!></div>");
5
5
  function g(t, s) {
6
6
  e.push(s, !0), u();
@@ -53,4 +53,4 @@ export {
53
53
  g as M,
54
54
  m as c
55
55
  };
56
- //# sourceMappingURL=modalManager.svelte-Ddxmimtn.js.map
56
+ //# sourceMappingURL=modalManager.svelte-Dbd1xgTQ.js.map