@ticketlayer/elements 0.3.3 → 1.0.0

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 (179) hide show
  1. package/README.md +3 -2
  2. package/dist/cjs/{index-BpfoKd9Q.js → index-DanPUX0s.js} +1 -1
  3. package/dist/cjs/index.cjs.js +2 -1
  4. package/dist/cjs/loader.cjs.js +2 -2
  5. package/dist/cjs/ticket-selector-BYVL13k_.js +3623 -0
  6. package/dist/cjs/ticketlayer-elements.cjs.js +2 -2
  7. package/dist/cjs/tl-buy-modal.cjs.entry.js +4 -4
  8. package/dist/cjs/tl-buy-tickets-button.cjs.entry.js +89 -71
  9. package/dist/cjs/tl-buy-tickets-wrapper.cjs.entry.js +62 -31
  10. package/dist/cjs/tl-cart-badge.cjs.entry.js +75 -62
  11. package/dist/cjs/tl-cart-drawer.cjs.entry.js +52 -24
  12. package/dist/cjs/tl-cart.cjs.entry.js +72 -98
  13. package/dist/cjs/tl-checkout-wrapper.cjs.entry.js +52 -30
  14. package/dist/cjs/tl-event-card.cjs.entry.js +44 -105
  15. package/dist/cjs/tl-event-list.cjs.entry.js +73 -36
  16. package/dist/cjs/tl-login.cjs.entry.js +75 -141
  17. package/dist/cjs/tl-my-orders.cjs.entry.js +53 -92
  18. package/dist/cjs/tl-occurrence-selector_2.cjs.entry.js +205 -641
  19. package/dist/cjs/tl-order-confirmation.cjs.entry.js +72 -105
  20. package/dist/cjs/tl-order-tickets_2.cjs.entry.js +50 -76
  21. package/dist/cjs/tl-promo-code.cjs.entry.js +51 -47
  22. package/dist/cjs/tl-seat-map.cjs.entry.js +4 -4
  23. package/dist/cjs/web-query-Ce73jB4k.js +16 -0
  24. package/dist/collection/components/tl-buy-modal/tl-buy-modal.css +12 -19
  25. package/dist/collection/components/tl-buy-modal/tl-buy-modal.js +2 -2
  26. package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.css +41 -4
  27. package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.js +105 -76
  28. package/dist/collection/components/tl-buy-tickets-wrapper/tl-buy-tickets-wrapper.css +2 -2
  29. package/dist/collection/components/tl-buy-tickets-wrapper/tl-buy-tickets-wrapper.js +73 -30
  30. package/dist/collection/components/tl-cart/tl-cart.css +52 -51
  31. package/dist/collection/components/tl-cart/tl-cart.js +82 -101
  32. package/dist/collection/components/tl-cart-badge/tl-cart-badge.css +11 -11
  33. package/dist/collection/components/tl-cart-badge/tl-cart-badge.js +62 -62
  34. package/dist/collection/components/tl-cart-drawer/tl-cart-drawer.css +6 -6
  35. package/dist/collection/components/tl-cart-drawer/tl-cart-drawer.js +56 -24
  36. package/dist/collection/components/tl-checkout-wrapper/tl-checkout-wrapper.css +2 -2
  37. package/dist/collection/components/tl-checkout-wrapper/tl-checkout-wrapper.js +61 -29
  38. package/dist/collection/components/tl-event-card/event-card-adapter.js +11 -23
  39. package/dist/collection/components/tl-event-card/tl-event-card.css +22 -22
  40. package/dist/collection/components/tl-event-card/tl-event-card.js +51 -84
  41. package/dist/collection/components/tl-event-list/tl-event-list.css +17 -17
  42. package/dist/collection/components/tl-event-list/tl-event-list.js +82 -38
  43. package/dist/collection/components/tl-login/tl-login.css +26 -26
  44. package/dist/collection/components/tl-login/tl-login.js +83 -147
  45. package/dist/collection/components/tl-my-orders/tl-my-orders.css +40 -40
  46. package/dist/collection/components/tl-my-orders/tl-my-orders.js +58 -96
  47. package/dist/collection/components/tl-occurrence-selector/tl-occurrence-selector.css +54 -65
  48. package/dist/collection/components/tl-occurrence-selector/tl-occurrence-selector.js +137 -516
  49. package/dist/collection/components/tl-order-confirmation/tl-order-confirmation.css +38 -38
  50. package/dist/collection/components/tl-order-confirmation/tl-order-confirmation.js +81 -113
  51. package/dist/collection/components/tl-order-tickets/tl-order-tickets.css +9 -9
  52. package/dist/collection/components/tl-order-tickets/tl-order-tickets.js +57 -92
  53. package/dist/collection/components/tl-promo-code/tl-promo-code.css +25 -25
  54. package/dist/collection/components/tl-promo-code/tl-promo-code.js +55 -50
  55. package/dist/collection/components/tl-seat-map/tl-seat-map.css +10 -10
  56. package/dist/collection/components/tl-seat-map/tl-seat-map.js +2 -2
  57. package/dist/collection/components/tl-ticket/tl-ticket.css +13 -13
  58. package/dist/collection/components/tl-ticket-selector/tl-ticket-selector.css +74 -49
  59. package/dist/collection/components/tl-ticket-selector/tl-ticket-selector.js +95 -135
  60. package/dist/collection/utils/cart-totals.js +9 -0
  61. package/dist/collection/utils/order-summary.js +15 -99
  62. package/dist/collection/utils/testing/deep-text.js +29 -0
  63. package/dist/collection/utils/testing/fixtures.js +290 -0
  64. package/dist/collection/utils/testing/mock-sdk.js +13 -2
  65. package/dist/collection/utils/web-query.js +12 -0
  66. package/dist/collection/utils/web-storage.js +22 -0
  67. package/dist/components/ticket-selector.js +1 -0
  68. package/dist/components/tl-buy-modal.js +1 -1
  69. package/dist/components/tl-buy-tickets-button.js +1 -1
  70. package/dist/components/tl-buy-tickets-wrapper2.js +1 -1
  71. package/dist/components/tl-cart-badge.js +1 -1
  72. package/dist/components/tl-cart-drawer.js +1 -1
  73. package/dist/components/tl-cart2.js +1 -1
  74. package/dist/components/tl-checkout-wrapper2.js +1 -1
  75. package/dist/components/tl-event-card2.js +1 -1
  76. package/dist/components/tl-event-list.js +1 -1
  77. package/dist/components/tl-login2.js +1 -1
  78. package/dist/components/tl-my-orders.js +1 -1
  79. package/dist/components/tl-occurrence-selector2.js +1 -1
  80. package/dist/components/tl-order-confirmation.js +1 -1
  81. package/dist/components/tl-order-tickets2.js +1 -1
  82. package/dist/components/tl-promo-code.js +1 -1
  83. package/dist/components/tl-seat-map.js +1 -1
  84. package/dist/components/tl-ticket-selector2.js +1 -1
  85. package/dist/components/tl-ticket2.js +1 -1
  86. package/dist/components/web-query.js +1 -0
  87. package/dist/elements.docs.json +36 -36
  88. package/dist/esm/{index-CNX8hZa8.js → index-imfxp765.js} +1 -1
  89. package/dist/esm/index.js +2 -1
  90. package/dist/esm/loader.js +3 -3
  91. package/dist/esm/ticket-selector-BwChnHVC.js +3606 -0
  92. package/dist/esm/ticketlayer-elements.js +3 -3
  93. package/dist/esm/tl-buy-modal.entry.js +4 -4
  94. package/dist/esm/tl-buy-tickets-button.entry.js +90 -72
  95. package/dist/esm/tl-buy-tickets-wrapper.entry.js +63 -32
  96. package/dist/esm/tl-cart-badge.entry.js +76 -63
  97. package/dist/esm/tl-cart-drawer.entry.js +53 -25
  98. package/dist/esm/tl-cart.entry.js +73 -99
  99. package/dist/esm/tl-checkout-wrapper.entry.js +53 -31
  100. package/dist/esm/tl-event-card.entry.js +45 -106
  101. package/dist/esm/tl-event-list.entry.js +74 -37
  102. package/dist/esm/tl-login.entry.js +76 -142
  103. package/dist/esm/tl-my-orders.entry.js +54 -93
  104. package/dist/esm/tl-occurrence-selector_2.entry.js +206 -642
  105. package/dist/esm/tl-order-confirmation.entry.js +73 -106
  106. package/dist/esm/tl-order-tickets_2.entry.js +51 -77
  107. package/dist/esm/tl-promo-code.entry.js +52 -48
  108. package/dist/esm/tl-seat-map.entry.js +4 -4
  109. package/dist/esm/web-query-Bdbb2lk5.js +14 -0
  110. package/dist/ticketlayer-elements/index.esm.js +1 -1
  111. package/dist/ticketlayer-elements/p-45923d2c.entry.js +1 -0
  112. package/dist/ticketlayer-elements/p-492adc77.entry.js +1 -0
  113. package/dist/ticketlayer-elements/p-4cfc9e53.entry.js +1 -0
  114. package/dist/ticketlayer-elements/p-5135630e.entry.js +1 -0
  115. package/dist/ticketlayer-elements/p-5bbce3b5.entry.js +1 -0
  116. package/dist/ticketlayer-elements/p-7d547721.entry.js +1 -0
  117. package/dist/ticketlayer-elements/p-7fe7b6ba.entry.js +1 -0
  118. package/dist/ticketlayer-elements/p-8122f0c1.entry.js +1 -0
  119. package/dist/ticketlayer-elements/p-98d40869.entry.js +1 -0
  120. package/dist/ticketlayer-elements/p-Bdbb2lk5.js +1 -0
  121. package/dist/ticketlayer-elements/p-BwChnHVC.js +1 -0
  122. package/dist/ticketlayer-elements/p-abec290a.entry.js +1 -0
  123. package/dist/ticketlayer-elements/p-ac79a3f6.entry.js +1 -0
  124. package/dist/ticketlayer-elements/p-d01f4429.entry.js +1 -0
  125. package/dist/ticketlayer-elements/p-d7ffaf46.entry.js +1 -0
  126. package/dist/ticketlayer-elements/p-e7170f3c.entry.js +1 -0
  127. package/dist/ticketlayer-elements/p-e787e862.entry.js +1 -0
  128. package/dist/ticketlayer-elements/p-f1ff931f.entry.js +1 -0
  129. package/dist/ticketlayer-elements/p-imfxp765.js +3 -0
  130. package/dist/ticketlayer-elements/ticketlayer-elements.css +1 -1
  131. package/dist/ticketlayer-elements/ticketlayer-elements.esm.js +1 -1
  132. package/dist/types/components/tl-buy-tickets-button/tl-buy-tickets-button.d.ts +40 -8
  133. package/dist/types/components/tl-buy-tickets-wrapper/tl-buy-tickets-wrapper.d.ts +20 -1
  134. package/dist/types/components/tl-cart/tl-cart.d.ts +40 -32
  135. package/dist/types/components/tl-cart-badge/tl-cart-badge.d.ts +22 -7
  136. package/dist/types/components/tl-cart-drawer/tl-cart-drawer.d.ts +28 -5
  137. package/dist/types/components/tl-checkout-wrapper/tl-checkout-wrapper.d.ts +18 -1
  138. package/dist/types/components/tl-event-card/event-card-adapter.d.ts +9 -20
  139. package/dist/types/components/tl-event-card/tl-event-card.d.ts +25 -28
  140. package/dist/types/components/tl-event-list/tl-event-list.d.ts +46 -6
  141. package/dist/types/components/tl-login/tl-login.d.ts +68 -22
  142. package/dist/types/components/tl-my-orders/tl-my-orders.d.ts +30 -12
  143. package/dist/types/components/tl-occurrence-selector/tl-occurrence-selector.d.ts +73 -161
  144. package/dist/types/components/tl-order-confirmation/tl-order-confirmation.d.ts +48 -15
  145. package/dist/types/components/tl-order-tickets/tl-order-tickets.d.ts +29 -31
  146. package/dist/types/components/tl-promo-code/tl-promo-code.d.ts +28 -10
  147. package/dist/types/components/tl-ticket/tl-ticket.d.ts +2 -11
  148. package/dist/types/components/tl-ticket-selector/tl-ticket-selector.d.ts +61 -32
  149. package/dist/types/components.d.ts +302 -62
  150. package/dist/types/utils/cart-totals.d.ts +10 -0
  151. package/dist/types/utils/order-summary.d.ts +16 -65
  152. package/dist/types/utils/testing/deep-text.d.ts +13 -0
  153. package/dist/types/utils/testing/fixtures.d.ts +225 -0
  154. package/dist/types/utils/testing/mock-sdk.d.ts +14 -1
  155. package/dist/types/utils/web-query.d.ts +18 -0
  156. package/dist/types/utils/web-storage.d.ts +16 -0
  157. package/elements.catalogue.json +676 -55
  158. package/package.json +14 -6
  159. package/dist/cjs/order-summary-ZMkJ5bez.js +0 -116
  160. package/dist/components/order-summary.js +0 -1
  161. package/dist/esm/order-summary-BGekdjN9.js +0 -103
  162. package/dist/ticketlayer-elements/p-0b1d16f8.entry.js +0 -1
  163. package/dist/ticketlayer-elements/p-1471f6d8.entry.js +0 -1
  164. package/dist/ticketlayer-elements/p-1c51cbc1.entry.js +0 -1
  165. package/dist/ticketlayer-elements/p-5169f68b.entry.js +0 -1
  166. package/dist/ticketlayer-elements/p-895ba1f3.entry.js +0 -1
  167. package/dist/ticketlayer-elements/p-8d5722e1.entry.js +0 -1
  168. package/dist/ticketlayer-elements/p-917d8e09.entry.js +0 -1
  169. package/dist/ticketlayer-elements/p-9629029a.entry.js +0 -1
  170. package/dist/ticketlayer-elements/p-BGekdjN9.js +0 -1
  171. package/dist/ticketlayer-elements/p-CNX8hZa8.js +0 -3
  172. package/dist/ticketlayer-elements/p-a22714d0.entry.js +0 -1
  173. package/dist/ticketlayer-elements/p-bf73044b.entry.js +0 -1
  174. package/dist/ticketlayer-elements/p-e02079fa.entry.js +0 -1
  175. package/dist/ticketlayer-elements/p-e04ace15.entry.js +0 -1
  176. package/dist/ticketlayer-elements/p-e6fab1d5.entry.js +0 -1
  177. package/dist/ticketlayer-elements/p-f826b753.entry.js +0 -1
  178. package/dist/ticketlayer-elements/p-fa639d88.entry.js +0 -1
  179. package/dist/ticketlayer-elements/p-fbaca948.entry.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ticketlayer/elements",
3
- "version": "0.3.3",
3
+ "version": "1.0.0",
4
4
  "description": "Ticketlayer UI components built with Stencil.js",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.js",
@@ -41,10 +41,11 @@
41
41
  "registry": "https://registry.npmjs.org/"
42
42
  },
43
43
  "dependencies": {
44
- "qrcode": "^1.5.4"
44
+ "qrcode": "^1.5.4",
45
+ "@ticketlayer/elements-core": "^0.2.0"
45
46
  },
46
47
  "peerDependencies": {
47
- "@ticketlayer/live": "^0.3.2"
48
+ "@ticketlayer/live": ">=1.0.0"
48
49
  },
49
50
  "peerDependenciesMeta": {
50
51
  "@ticketlayer/live": {
@@ -74,10 +75,13 @@
74
75
  "react": "^18.3.1",
75
76
  "react-dom": "^18.3.1",
76
77
  "storybook": "^10.1.11",
77
- "typescript": "^5.3.3"
78
+ "typescript": "^5.3.3",
79
+ "@ticketlayer/live": "^1.0.0",
80
+ "@ticketlayer/theme": "^0.2.0"
78
81
  },
79
82
  "scripts": {
80
- "build": "stencil build && node scripts/patch-react-generated.js && node scripts/build-catalogue.mjs",
83
+ "build": "node scripts/write-global-css.mjs && stencil build && node scripts/patch-react-generated.js",
84
+ "build:global": "node scripts/write-global-css.mjs",
81
85
  "dev": "stencil build --dev --watch --serve",
82
86
  "test": "stencil test --spec",
83
87
  "test:watch": "stencil test --spec --watch",
@@ -88,7 +92,11 @@
88
92
  "storybook": "storybook dev -p 6006",
89
93
  "build-storybook": "storybook build",
90
94
  "build:catalogue": "node scripts/build-catalogue.mjs",
95
+ "build:catalogue:version": "node scripts/build-catalogue.mjs --version-only",
96
+ "build:stories": "node scripts/build-stories.mjs",
91
97
  "test:catalogue": "node scripts/build-catalogue.mjs --check",
92
- "typecheck": "tsc -p tsconfig.json --noEmit"
98
+ "test:stories": "node scripts/build-stories.mjs --check",
99
+ "typecheck": "tsc -p tsconfig.json --noEmit",
100
+ "lint": "node scripts/write-global-css.mjs --check && node scripts/check-token-usage.mjs && node scripts/check-core-tokens.mjs && node scripts/build-stories.mjs --check"
93
101
  }
94
102
  }
@@ -1,116 +0,0 @@
1
- 'use strict';
2
-
3
- /** Money arrives as minor-unit integers or decimal strings ("50.00"). */
4
- function formatPrice(value, currency = 'GBP') {
5
- if (value === null || value === undefined || value === '')
6
- return '';
7
- const fmt = new Intl.NumberFormat('en-GB', { style: 'currency', currency });
8
- if (typeof value === 'number')
9
- return fmt.format(value / 100);
10
- const n = Number(value);
11
- return Number.isNaN(n) ? String(value) : fmt.format(n);
12
- }
13
- function formatDateTime(iso) {
14
- return new Date(iso).toLocaleDateString('en-GB', {
15
- weekday: 'short',
16
- day: 'numeric',
17
- month: 'short',
18
- year: 'numeric',
19
- hour: '2-digit',
20
- minute: '2-digit',
21
- });
22
- }
23
- function formatDate(iso) {
24
- return new Date(iso).toLocaleDateString('en-GB', {
25
- day: 'numeric',
26
- month: 'short',
27
- year: 'numeric',
28
- });
29
- }
30
- /** Line items that are tickets (fees, taxes and discounts have their own type). */
31
- function ticketItems(order) {
32
- return (order.items ?? []).filter((i) => !i.type || i.type === 'ticket');
33
- }
34
- function ticketCount(order) {
35
- const fromItems = ticketItems(order).reduce((sum, i) => sum + (Number(i.quantity) || 0), 0);
36
- return fromItems || order.tickets?.length || 0;
37
- }
38
- /** Event name as the order view exposes it: the first ticket line's name. */
39
- function orderEventName(order) {
40
- return order.eventName || ticketItems(order)[0]?.name || order.items?.[0]?.name || null;
41
- }
42
- function orderCustomerEmail(order, customer) {
43
- const fromOrder = order?.customerEmail || order?.customer?.email;
44
- if (fromOrder)
45
- return fromOrder;
46
- const c = customer;
47
- return c?.email || null;
48
- }
49
- function statusLabel(status) {
50
- if (!status)
51
- return '';
52
- return status.replace(/_/g, ' ').replace(/^\w/, (m) => m.toUpperCase());
53
- }
54
- function statusTone(status) {
55
- switch (status) {
56
- case 'confirmed':
57
- return 'success';
58
- case 'completed':
59
- case 'fulfilled':
60
- return 'info';
61
- case 'pending':
62
- case 'processing':
63
- return 'warning';
64
- case 'cancelled':
65
- case 'expired':
66
- case 'failed':
67
- return 'error';
68
- default:
69
- return 'muted';
70
- }
71
- }
72
- function errorMessage(err, fallback) {
73
- return err instanceof Error && err.message ? err.message : fallback;
74
- }
75
- /** True for the "not signed in" family of API errors (401/403, NO_SESSION, NOT_AUTHENTICATED). */
76
- function isAuthError(err) {
77
- const e = err;
78
- if (!e || typeof e !== 'object')
79
- return false;
80
- return e.status === 401 || e.status === 403 || e.code === 'NO_SESSION' || e.code === 'NOT_AUTHENTICATED';
81
- }
82
- /**
83
- * Find the event and start time for an occurrence id. The order view only
84
- * carries the occurrence id, so this walks the channel's listings (cached by
85
- * live-api) until one owns the occurrence. Best effort: null when not found.
86
- */
87
- async function resolveOccurrence(sdk, occurrenceId, maxEvents = 12) {
88
- const events = sdk.getEventsManager();
89
- const listing = await events.list({ limit: maxEvents });
90
- const candidates = listing.items.slice(0, maxEvents);
91
- for (const candidate of candidates) {
92
- const detail = (await events.get(candidate.id).catch(() => null));
93
- const occ = detail?.occurrences?.find((o) => o.id === occurrenceId);
94
- if (occ) {
95
- return {
96
- eventId: detail?.id ?? candidate.id,
97
- eventName: detail?.name ?? candidate.name ?? '',
98
- startsAt: occ.startsAt ?? null,
99
- };
100
- }
101
- }
102
- return null;
103
- }
104
-
105
- exports.errorMessage = errorMessage;
106
- exports.formatDate = formatDate;
107
- exports.formatDateTime = formatDateTime;
108
- exports.formatPrice = formatPrice;
109
- exports.isAuthError = isAuthError;
110
- exports.orderCustomerEmail = orderCustomerEmail;
111
- exports.orderEventName = orderEventName;
112
- exports.resolveOccurrence = resolveOccurrence;
113
- exports.statusLabel = statusLabel;
114
- exports.statusTone = statusTone;
115
- exports.ticketCount = ticketCount;
116
- exports.ticketItems = ticketItems;
@@ -1 +0,0 @@
1
- function n(n,e="GBP"){if(null==n||""===n)return"";const r=new Intl.NumberFormat("en-GB",{style:"currency",currency:e});if("number"==typeof n)return r.format(n/100);const t=Number(n);return Number.isNaN(t)?String(n):r.format(t)}function e(n){return new Date(n).toLocaleDateString("en-GB",{weekday:"short",day:"numeric",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit"})}function r(n){return new Date(n).toLocaleDateString("en-GB",{day:"numeric",month:"short",year:"numeric"})}function t(n){return(n.items??[]).filter((n=>!n.type||"ticket"===n.type))}function u(n){return t(n).reduce(((n,e)=>n+(Number(e.quantity)||0)),0)||n.tickets?.length||0}function c(n){return n.eventName||t(n)[0]?.name||n.items?.[0]?.name||null}function i(n,e){const r=n?.customerEmail||n?.customer?.email;if(r)return r;const t=e;return t?.email||null}function s(n){return n?n.replace(/_/g," ").replace(/^\w/,(n=>n.toUpperCase())):""}function a(n){switch(n){case"confirmed":return"success";case"completed":case"fulfilled":return"info";case"pending":case"processing":return"warning";case"cancelled":case"expired":case"failed":return"error";default:return"muted"}}function o(n,e){return n instanceof Error&&n.message?n.message:e}function f(n){return!(!n||"object"!=typeof n||401!==n.status&&403!==n.status&&"NO_SESSION"!==n.code&&"NOT_AUTHENTICATED"!==n.code)}async function l(n,e,r=12){const t=n.getEventsManager(),u=(await t.list({limit:r})).items.slice(0,r);for(const n of u){const r=await t.get(n.id).catch((()=>null)),u=r?.occurrences?.find((n=>n.id===e));if(u)return{eventId:r?.id??n.id,eventName:r?.name??n.name??"",startsAt:u.startsAt??null}}return null}export{n as a,s as b,i as c,e as d,o as e,r as f,t as g,f as i,c as o,l as r,a as s,u as t}
@@ -1,103 +0,0 @@
1
- /** Money arrives as minor-unit integers or decimal strings ("50.00"). */
2
- function formatPrice(value, currency = 'GBP') {
3
- if (value === null || value === undefined || value === '')
4
- return '';
5
- const fmt = new Intl.NumberFormat('en-GB', { style: 'currency', currency });
6
- if (typeof value === 'number')
7
- return fmt.format(value / 100);
8
- const n = Number(value);
9
- return Number.isNaN(n) ? String(value) : fmt.format(n);
10
- }
11
- function formatDateTime(iso) {
12
- return new Date(iso).toLocaleDateString('en-GB', {
13
- weekday: 'short',
14
- day: 'numeric',
15
- month: 'short',
16
- year: 'numeric',
17
- hour: '2-digit',
18
- minute: '2-digit',
19
- });
20
- }
21
- function formatDate(iso) {
22
- return new Date(iso).toLocaleDateString('en-GB', {
23
- day: 'numeric',
24
- month: 'short',
25
- year: 'numeric',
26
- });
27
- }
28
- /** Line items that are tickets (fees, taxes and discounts have their own type). */
29
- function ticketItems(order) {
30
- return (order.items ?? []).filter((i) => !i.type || i.type === 'ticket');
31
- }
32
- function ticketCount(order) {
33
- const fromItems = ticketItems(order).reduce((sum, i) => sum + (Number(i.quantity) || 0), 0);
34
- return fromItems || order.tickets?.length || 0;
35
- }
36
- /** Event name as the order view exposes it: the first ticket line's name. */
37
- function orderEventName(order) {
38
- return order.eventName || ticketItems(order)[0]?.name || order.items?.[0]?.name || null;
39
- }
40
- function orderCustomerEmail(order, customer) {
41
- const fromOrder = order?.customerEmail || order?.customer?.email;
42
- if (fromOrder)
43
- return fromOrder;
44
- const c = customer;
45
- return c?.email || null;
46
- }
47
- function statusLabel(status) {
48
- if (!status)
49
- return '';
50
- return status.replace(/_/g, ' ').replace(/^\w/, (m) => m.toUpperCase());
51
- }
52
- function statusTone(status) {
53
- switch (status) {
54
- case 'confirmed':
55
- return 'success';
56
- case 'completed':
57
- case 'fulfilled':
58
- return 'info';
59
- case 'pending':
60
- case 'processing':
61
- return 'warning';
62
- case 'cancelled':
63
- case 'expired':
64
- case 'failed':
65
- return 'error';
66
- default:
67
- return 'muted';
68
- }
69
- }
70
- function errorMessage(err, fallback) {
71
- return err instanceof Error && err.message ? err.message : fallback;
72
- }
73
- /** True for the "not signed in" family of API errors (401/403, NO_SESSION, NOT_AUTHENTICATED). */
74
- function isAuthError(err) {
75
- const e = err;
76
- if (!e || typeof e !== 'object')
77
- return false;
78
- return e.status === 401 || e.status === 403 || e.code === 'NO_SESSION' || e.code === 'NOT_AUTHENTICATED';
79
- }
80
- /**
81
- * Find the event and start time for an occurrence id. The order view only
82
- * carries the occurrence id, so this walks the channel's listings (cached by
83
- * live-api) until one owns the occurrence. Best effort: null when not found.
84
- */
85
- async function resolveOccurrence(sdk, occurrenceId, maxEvents = 12) {
86
- const events = sdk.getEventsManager();
87
- const listing = await events.list({ limit: maxEvents });
88
- const candidates = listing.items.slice(0, maxEvents);
89
- for (const candidate of candidates) {
90
- const detail = (await events.get(candidate.id).catch(() => null));
91
- const occ = detail?.occurrences?.find((o) => o.id === occurrenceId);
92
- if (occ) {
93
- return {
94
- eventId: detail?.id ?? candidate.id,
95
- eventName: detail?.name ?? candidate.name ?? '',
96
- startsAt: occ.startsAt ?? null,
97
- };
98
- }
99
- }
100
- return null;
101
- }
102
-
103
- export { formatPrice as a, statusLabel as b, formatDateTime as c, orderCustomerEmail as d, errorMessage as e, formatDate as f, ticketItems as g, isAuthError as i, orderEventName as o, resolveOccurrence as r, statusTone as s, ticketCount as t };
@@ -1 +0,0 @@
1
- import{r,c as t,h as e}from"./p-CNX8hZa8.js";import{w as s}from"./p-CqhvfyKV.js";import{i as o,e as a,t as i,o as n,f as l,a as d,s as c,b as h}from"./p-BGekdjN9.js";const f=class{constructor(e){r(this,e),this.tlOrderSelect=t(this,"tlOrderSelect"),this.tlError=t(this,"tlError"),this.emptyMessage="When you buy tickets they'll show up here, ready to view and download.",this.columns=2,this.orders=[],this.authenticated=!1,this.loading=!0,this.error=null,this.expandedId=null,this.sdk=null,this.unsubscribes=[]}async componentWillLoad(){if(this.sdk=await s().catch((()=>null)),!this.sdk)return this.loading=!1,void(this.error="Orders are not available right now");const r=this.sdk.getAuthManager?.();this.authenticated=!r||r.authenticated,this.unsubscribes.push(this.sdk.on("auth:changed",(()=>this.syncAuth()))),this.unsubscribes.push(this.sdk.on("session:changed",(()=>this.syncAuth()))),this.authenticated?await this.load():this.loading=!1}disconnectedCallback(){this.unsubscribes.forEach((r=>r())),this.unsubscribes=[]}syncAuth(){const r=this.sdk?.getAuthManager?.();if(!r)return;const t=this.authenticated;this.authenticated=r.authenticated,this.authenticated&&!t?this.load():!this.authenticated&&t&&(this.orders=[],this.expandedId=null)}async load(){if(this.sdk)try{this.loading=!0,this.error=null;const r=this.sdk.getOrdersManager?.();if(!r)throw new Error("Orders are not available");const t=await r.mine();this.orders=t??[],this.authenticated=!0}catch(r){o(r)?(this.authenticated=!1,this.orders=[]):(console.error("[tl-my-orders] Failed to load orders:",r),this.error=a(r,"Failed to load your orders"),this.tlError.emit({message:this.error}))}finally{this.loading=!1}}toggle(r){const t=this.expandedId!==r;this.expandedId=t?r:null,t&&this.tlOrderSelect.emit({orderId:r})}renderRow(r){const t=this.expandedId===r.id,s=i(r),o=c(r.status);return e("li",{class:{order:!0,expanded:t},key:r.id},e("button",{type:"button",class:"order-row","aria-expanded":t?"true":"false",onClick:()=>this.toggle(r.id)},e("span",{class:"order-main"},e("span",{class:"order-number"},"Order ",r.orderNumber),e("span",{class:"order-event"},n(r)??"Order"),e("span",{class:"order-meta"},r.createdAt&&e("span",null,l(r.createdAt)),e("span",null,s," ticket",1===s?"":"s"))),e("span",{class:"order-side"},e("span",{class:"order-total"},d(r.total,r.currency)),e("span",{class:`status status-${o}`},h(r.status)),e("svg",{class:"chevron",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","aria-hidden":"true"},e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 18l6-6-6-6"})))),t&&e("div",{class:"order-tickets"},e("tl-order-tickets",{orderId:r.id,columns:this.columns})))}render(){return this.loading?e("div",{class:"orders"},[0,1,2].map((r=>e("div",{class:"skeleton",key:r})))):this.authenticated?e("div",{class:"orders"},this.error?e("div",{class:"state error"},e("p",{class:"state-title"},"Could not load your orders"),e("p",{class:"state-text"},this.error)):0===this.orders.length?e("div",{class:"state empty"},e("svg",{class:"empty-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","aria-hidden":"true"},e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5",d:"M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"}),e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5",d:"M13 5v2M13 17v2M13 11v2"})),e("p",{class:"state-title"},"No orders yet"),e("p",{class:"state-text"},this.emptyMessage)):e("ul",{class:"order-list"},this.orders.map((r=>this.renderRow(r))))):e("div",{class:"orders"},e("div",{class:"signin"},e("p",{class:"signin-title"},"Sign in to see your orders"),e("p",{class:"signin-text"},"Your tickets and order history live in your account.")),e("tl-login",null))}};f.style=":host{display:block;font-family:var(--tl-font-family, system-ui, sans-serif);color:var(--tl-foreground, #111827)}.orders{display:flex;flex-direction:column;gap:var(--tl-spacing-4, 1rem)}.order-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--tl-spacing-3, 0.75rem)}.order{background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e5e7eb);border-radius:var(--tl-radius-lg, 0.75rem);overflow:hidden;transition:border-color 0.2s ease, box-shadow 0.2s ease}.order:hover,.order.expanded{border-color:var(--tl-primary, #6366f1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.08)}.order-row{display:flex;align-items:center;justify-content:space-between;gap:var(--tl-spacing-4, 1rem);width:100%;padding:var(--tl-spacing-4, 1rem);font:inherit;color:inherit;text-align:left;background:none;border:none;cursor:pointer}.order-main{display:flex;flex-direction:column;gap:var(--tl-spacing-1, 0.25rem);min-width:0}.order-number{font-size:0.75rem;font-weight:500;text-transform:uppercase;letter-spacing:0.05em;color:var(--tl-muted-foreground, #6b7280)}.order-event{font-size:1rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.order-meta{display:flex;flex-wrap:wrap;gap:var(--tl-spacing-3, 0.75rem);font-size:0.8125rem;color:var(--tl-muted-foreground, #6b7280)}.order-side{display:flex;align-items:center;gap:var(--tl-spacing-3, 0.75rem);flex-shrink:0}.order-total{font-weight:600}.status{padding:0.125rem 0.5rem;font-size:0.75rem;font-weight:500;border-radius:9999px;background:var(--tl-secondary, #f3f4f6);color:var(--tl-secondary-foreground, #111827)}.status-success{background:var(--tl-success, #10b981);color:var(--tl-success-foreground, #ffffff)}.status-info{background:var(--tl-primary, #6366f1);color:var(--tl-primary-foreground, #ffffff)}.status-warning{background:var(--tl-warning, #f59e0b);color:var(--tl-warning-foreground, #ffffff)}.status-error{background:var(--tl-error, #ef4444);color:var(--tl-error-foreground, #ffffff)}.chevron{width:1.125rem;height:1.125rem;color:var(--tl-muted-foreground, #6b7280);transition:transform 0.2s ease}.expanded .chevron{transform:rotate(90deg)}.order-tickets{padding:0 var(--tl-spacing-4, 1rem) var(--tl-spacing-4, 1rem);border-top:1px solid var(--tl-border, #e5e7eb);padding-top:var(--tl-spacing-4, 1rem)}@media (max-width: 480px){.order-row{flex-direction:column;align-items:stretch}.order-side{justify-content:space-between}}.signin{text-align:center}.signin-title,.state-title{margin:0;font-size:1.125rem;font-weight:600}.signin-text,.state-text{margin:var(--tl-spacing-1, 0.25rem) 0 0;font-size:0.875rem;color:var(--tl-muted-foreground, #6b7280)}.state{padding:var(--tl-spacing-8, 2rem) var(--tl-spacing-4, 1rem);text-align:center;background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e5e7eb);border-radius:var(--tl-radius-lg, 0.75rem)}.state.error .state-title{color:var(--tl-error, #ef4444)}.empty-icon{width:3rem;height:3rem;margin:0 auto var(--tl-spacing-3, 0.75rem);color:var(--tl-primary, #6366f1)}.skeleton{height:5rem;background:var(--tl-secondary, #f3f4f6);border-radius:var(--tl-radius-lg, 0.75rem);animation:pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite}@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.5}}";export{f as tl_my_orders}
@@ -1 +0,0 @@
1
- import{r as e,c as t,h as s}from"./p-CNX8hZa8.js";import{w as r}from"./p-CqhvfyKV.js";const i=class{constructor(s){e(this,s),this.tlEventClick=t(this,"tlEventClick"),this.limit=12,this.columns=3,this.events=[],this.loading=!0,this.error=null,this.handleEventClick=e=>{console.log("[tl-event-list] Event clicked:",e.detail.eventId),this.tlEventClick.emit(e.detail)}}watchFiltersChange(){this.loadEvents()}async componentWillLoad(){await this.loadEvents()}async loadEvents(){try{console.log("[tl-event-list] Loading events via SDK...",{limit:this.limit,category:this.category}),this.loading=!0,this.error=null;const e=(await r()).getEventsManager(),t=await e.list({limit:this.limit,category:this.category});console.log("[tl-event-list] Events loaded:",t.items.length),this.events=t.items}catch(e){console.error("[tl-event-list] Failed to load events:",e),this.error=e instanceof Error?e.message:"Failed to load events"}finally{this.loading=!1}}render(){const e=`event-grid cols-${Math.min(Math.max(this.columns,1),4)}`;return this.loading?s("div",{class:e},Array.from({length:6}).map(((e,t)=>s("div",{class:"skeleton-card",key:t},s("div",{class:"skeleton-image"}),s("div",{class:"skeleton-content"},s("div",{class:"skeleton-line short"}),s("div",{class:"skeleton-line medium"}),s("div",{class:"skeleton-line long"})))))):this.error?s("div",{class:"error-state"},s("p",{class:"error-title"},"Error loading events"),s("p",{class:"error-message"},this.error)):0===this.events.length?s("div",{class:"empty-state"},s("svg",{class:"empty-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5",d:"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"})),s("p",{class:"empty-title"},"No events available"),s("p",{class:"empty-message"},"Check back later for upcoming events.")):s("div",{class:e},this.events.map((e=>s("tl-event-card",{key:e.id,event:e,onTlClick:this.handleEventClick}))))}static get watchers(){return{limit:[{watchFiltersChange:0}],category:[{watchFiltersChange:0}]}}};i.style=":host{display:block;font-family:var(--tl-font-family, system-ui, sans-serif)}.event-grid{display:grid;gap:var(--tl-spacing-6, 1.5rem)}.cols-1{grid-template-columns:1fr}.cols-2{grid-template-columns:repeat(2, 1fr)}.cols-3{grid-template-columns:repeat(3, 1fr)}.cols-4{grid-template-columns:repeat(4, 1fr)}@media (max-width: 1024px){.cols-4,.cols-3{grid-template-columns:repeat(2, 1fr)}}@media (max-width: 640px){.cols-4,.cols-3,.cols-2{grid-template-columns:1fr}}.skeleton-card{background:var(--tl-secondary, #f3f4f6);border-radius:var(--tl-radius-lg, 0.75rem);overflow:hidden}.skeleton-image{aspect-ratio:16 / 9;background:var(--tl-muted, #f9fafb);animation:pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite}.skeleton-content{padding:var(--tl-spacing-4, 1rem);display:flex;flex-direction:column;gap:0.5rem}.skeleton-line{height:1rem;background:var(--tl-muted, #f9fafb);border-radius:var(--tl-radius-sm, 0.25rem);animation:pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite}.skeleton-line.short{width:4rem;height:0.75rem}.skeleton-line.medium{width:75%}.skeleton-line.long{width:50%}@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.5}}.error-state{background:rgba(239, 68, 68, 0.1);border:1px solid var(--tl-error, #ef4444);border-radius:var(--tl-radius-lg, 0.75rem);padding:var(--tl-spacing-4, 1rem)}.error-title{margin:0;font-weight:500;color:var(--tl-error, #ef4444)}.error-message{margin:0.25rem 0 0;font-size:0.875rem;color:var(--tl-error, #ef4444)}.empty-state{text-align:center;padding:var(--tl-spacing-8, 2rem) var(--tl-spacing-4, 1rem)}.empty-icon{width:4rem;height:4rem;margin:0 auto 1rem;color:var(--tl-muted-foreground, #6b7280)}.empty-title{margin:0;font-size:1.25rem;font-weight:600;color:var(--tl-foreground, #111827)}.empty-message{margin:0.5rem 0 0;color:var(--tl-muted-foreground, #6b7280)}";export{i as tl_event_list}
@@ -1 +0,0 @@
1
- import{r as e,c as t,h as a,H as r}from"./p-CNX8hZa8.js";import{w as i,g as o}from"./p-CqhvfyKV.js";const s=class{constructor(a){e(this,a),this.tlClose=t(this,"tlClose"),this.tlCheckout=t(this,"tlCheckout"),this.tlError=t(this,"tlError"),this.step="loading",this.eventName="",this.imageUrl="",this.venueLabel="",this.dateSummary="",this.selectedOccurrenceId=null,this.occurrenceCount=0,this.occurrenceLabel="",this.error=null,this.handleOccurrenceSelect=e=>{const t=e.detail.occurrence;this.selectedOccurrenceId=t.id,this.occurrenceLabel=this.labelFor(t),this.step="tickets"},this.handleAdded=()=>{this.step="done"},this.backToDates=()=>{this.selectedOccurrenceId=null,this.step="occurrence"},this.close=()=>this.tlClose.emit(),this.goCheckout=()=>this.tlCheckout.emit()}async componentWillLoad(){if(this.eventId)try{await i();const e=await o().getEventsManager().get(this.eventId);this.eventName=e?.name??"Tickets",this.imageUrl=e?.imageUrl||e?.heroImageUrl||"",this.venueLabel=[e?.venueName,e?.venueCity].filter(Boolean).join(", ");const t=e?.occurrences??[];this.occurrenceCount=t.length,this.dateSummary=this.summariseDates(t);const a=this.occurrenceId??(1===t.length?t[0]?.id:null);a?(this.selectedOccurrenceId=a,this.occurrenceLabel=this.labelFor(t.find((e=>e.id===a))),this.step="tickets"):this.step="occurrence"}catch(e){this.fail(e instanceof Error?e.message:"Could not load this event")}else this.fail("No event specified")}fail(e){this.error=e,this.step="error",this.tlError.emit({message:e})}summariseDates(e){const t=e.map((e=>e.startsAt)).filter((e=>!!e)).sort();if(0===t.length)return"";const a=e=>new Date(e).toLocaleDateString("en-GB",{day:"numeric",month:"short",year:"numeric"});if(1===t.length)return new Date(t[0]).toLocaleDateString("en-GB",{weekday:"short",day:"numeric",month:"short",year:"numeric"});const r=a(t[0]),i=a(t[t.length-1]);return`${r===i?r:`${r} - ${i}`} · ${t.length} dates`}labelFor(e){return e?.startsAt?new Date(e.startsAt).toLocaleString("en-GB",{weekday:"short",day:"numeric",month:"short",hour:"2-digit",minute:"2-digit"}):""}stepKicker(){switch(this.step){case"occurrence":return"Choose a date";case"tickets":return"Select tickets";case"done":return"Nice one";default:return"Tickets"}}render(){return a(r,{key:"1245e518c2b5232f4d9dba091cf808cd3867fbef"},a("div",{key:"4e770fccdd785444f1cc87df4adab5a5dc1bf58a",class:"overlay",onClick:e=>{e.target===e.currentTarget&&this.close()}},a("div",{key:"57b13dac690028aeebd6a601acfba07f00854c40",class:{panel:!0,"panel--wide":"occurrence"===this.step},role:"dialog","aria-modal":"true","aria-label":this.eventName},a("header",{key:"881e9cc70a0ca25947f272b9ebcb2e6d4b4268f2",class:"panel-header"},this.imageUrl&&a("div",{key:"753f7df1b5118dfacbbc6b89b4e5d7ba114f6cdf",class:"event-thumb",style:{backgroundImage:`url(${this.imageUrl})`}}),a("div",{key:"9aaa32d1add90fabd1b0ea0c100f198962f4e6a5",class:"titles"},a("span",{key:"538032bdf2338206ad763417386852ff97cc472f",class:"kicker"},this.stepKicker()),a("h2",{key:"71429804179e7fbbea1fa90a2937a065517092f5",class:"event-name"},this.eventName),this.venueLabel&&a("p",{key:"dd968b397deab890df3a4fbdff33226e82bd9660",class:"event-meta"},this.venueLabel),this.dateSummary&&a("p",{key:"f40e6049d09b06c9f599e7d14d6fbb43b39b22fd",class:"event-meta"},this.dateSummary)),a("button",{key:"dbe0908f8cd8544654b627921f68cc4961802b77",class:"close-btn","aria-label":"Close",onClick:this.close},a("svg",{key:"23a750830e6e16d28cbcd5025507d25848aaadf7",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},a("path",{key:"e81b8763a5c781f72c1ca8a2113482948e3ba8cc",d:"M6 6l12 12M18 6L6 18","stroke-linecap":"round"})))),a("div",{key:"da71e610f907cf53e78246d2065aaf526d5ceffd",class:"panel-body"},"loading"===this.step&&a("div",{key:"28cbb9a98c7b08fa8dcb9d8d5dfbf3bec93fe38d",class:"state-msg"},a("span",{key:"915c8de87cbdc7da1ccf0622ce6c0f02fccf2cad",class:"spinner"})," Loading…"),"error"===this.step&&a("div",{key:"5785578bfef6f1ee81d938d91ffd3ded975f8c12",class:"state-msg error"},this.error),"occurrence"===this.step&&a("tl-occurrence-selector",{key:"eeb853eab141c3c103015e82d221a140f6a3a109",eventId:this.eventId,onTlSelect:this.handleOccurrenceSelect}),"tickets"===this.step&&this.selectedOccurrenceId&&a("div",{key:"f608f592ba651eb431375433eb4ff9393863ade5",class:"tickets-step"},this.occurrenceCount>1&&a("button",{key:"84adfbdbeaceb2cf4238c6ffd09558b4499ca940",class:"back-link",onClick:this.backToDates},"← Change date"),this.occurrenceLabel&&a("p",{key:"0317e9194049608711e8c622142c3ad2c0a5dc12",class:"occ-label"},this.occurrenceLabel),a("tl-ticket-selector",{key:"27b1e05d9d92fb8d519375e2b27d4b5ea0a4890a",eventId:this.eventId,occurrenceId:this.selectedOccurrenceId,onTlAddToCart:this.handleAdded})),"done"===this.step&&a("div",{key:"0853088206988c66d489f8804df7899821d49e64",class:"done-step"},a("div",{key:"c2955b893c4dffaadcdfd27bee96ef2724a131a6",class:"done-mark"},"🎟️"),a("p",{key:"370c30dfcbc0c25b4794d984dd261a3a5779a9dc",class:"done-title"},"Added to your cart"),a("p",{key:"c462f3c9292740e2fd2c74b173484f80a5dc1a30",class:"done-sub"},"Held for you while you check out."),a("button",{key:"484991f79572e3213ad6413a1af87599880c3643",class:"primary-btn",onClick:this.goCheckout},"Go to checkout"),a("button",{key:"5b4ba5a472b794e8f5af0f131dad1c8c11b869f5",class:"ghost-btn",onClick:this.close},"Keep browsing")))),a("div",{key:"9acdd36744d363f41f0bed7938ecea33322362d1",class:"powered-by"},a("div",{key:"f45545a8fc625336618352f0c0e9e84a1babce96",class:"pb-links"},a("a",{key:"dd929b12419b8353d9a09ad242a9f351dfd699e2",href:"https://ticketlayer.com/privacy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy"),a("a",{key:"859be221bdc76602defaebdb89a997778cda6a91",href:"https://ticketlayer.com/report-abuse",target:"_blank",rel:"noopener noreferrer"},"Report Abuse")),a("a",{key:"d4e1f44b3b084160d2df8b9d15e075ddc5e05363",class:"pb-brand",href:"https://ticketlayer.com",target:"_blank",rel:"noopener noreferrer"},a("span",{key:"fe7fd86576a4e9772daa2c4c449da060f20fa143",class:"pb-pre"},"Powered by"),a("svg",{key:"19412bd9e5522f0af9f847fe8fda6aa0f0004a3a",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},a("path",{key:"c159efd1b8fce42b8c0fd5bac21792b4dc2728ce",d:"M4 7.5A1.5 1.5 0 0 1 5.5 6h13A1.5 1.5 0 0 1 20 7.5v2a2 2 0 0 0 0 5v2a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 4 16.5v-2a2 2 0 0 0 0-5v-2Z",fill:"currentColor"}),a("path",{key:"283956eead27e5919301c30882da6eaa7b093a1a",d:"M13 7v10",stroke:"var(--tl-pb-perforation, var(--tl-background, #fff))","stroke-width":"1.2","stroke-dasharray":"1.5 1.8","stroke-linecap":"round"})),a("span",{key:"bc045fda144885737b88bf81b4f9000ec8d333be",class:"pb-word"},"Ticketlayer")))))}};s.style=":host{--_bg:var(--tl-background, #ffffff);--_fg:var(--tl-foreground, #111827);--_muted:var(--tl-muted, #f3f4f6);--_muted-fg:var(--tl-muted-foreground, #6b7280);--_border:var(--tl-border, #e5e7eb);--_primary:var(--tl-primary, #6366f1);--_primary-fg:var(--tl-primary-foreground, #ffffff);--_radius:var(--tl-radius-lg, var(--tl-radius, 0.75rem));--_font:var(--tl-font-family, system-ui, -apple-system, sans-serif);font-family:var(--_font)}.overlay{position:fixed;inset:0;z-index:2147483646;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:16px;background:rgba(8, 8, 16, 0.6);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:tl-fade 0.18s ease-out}.panel{width:100%;max-width:460px;max-height:86vh;display:flex;flex-direction:column;overflow:hidden;background:var(--_bg);color:var(--_fg);border:1px solid var(--_border);border-radius:var(--_radius);box-shadow:0 24px 64px rgba(0, 0, 0, 0.45);animation:tl-rise 0.22s cubic-bezier(0.16, 1, 0.3, 1);transition:max-width 0.25s cubic-bezier(0.16, 1, 0.3, 1)}.panel--wide{max-width:720px}.powered-by{--tl-pb-perforation:rgba(8, 8, 16, 0.6);width:100%;max-width:460px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 4px;font-size:12px;font-weight:500;color:rgba(255, 255, 255, 0.78);animation:tl-fade 0.3s ease-out}.powered-by a{color:inherit;text-decoration:none;opacity:0.85;transition:opacity 0.15s ease}.powered-by a:hover{opacity:1}.powered-by .pb-links{display:flex;gap:16px;align-items:center}.powered-by .pb-brand{display:inline-flex;align-items:center;gap:6px;opacity:0.92}.powered-by .pb-brand svg{display:block}.powered-by .pb-pre{opacity:0.7}.powered-by .pb-word{font-weight:700;letter-spacing:0.01em}.panel-header{display:flex;align-items:center;gap:14px;padding:16px 18px;border-bottom:1px solid var(--_border)}.event-thumb{flex:none;width:56px;height:56px;border-radius:12px;background-size:cover;background-position:center;background-color:var(--_muted);border:1px solid var(--_border)}.titles{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}.event-meta{margin:0;font-size:0.8rem;color:var(--_muted-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kicker{font-size:0.72rem;font-weight:600;letter-spacing:0.08em;text-transform:uppercase;color:var(--_primary)}.event-name{margin:0;font-size:1.18rem;font-weight:700;line-height:1.25;color:var(--_fg);overflow:hidden;text-overflow:ellipsis}.close-btn{flex:none;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:0;border-radius:999px;background:var(--_muted);color:var(--_muted-fg);cursor:pointer;transition:color 0.15s, background 0.15s}.close-btn:hover{color:var(--_fg)}.close-btn svg{width:16px;height:16px}.panel-body{padding:18px 22px 22px;overflow-y:auto}.state-msg{display:flex;align-items:center;justify-content:center;gap:10px;padding:40px 0;color:var(--_muted-fg)}.state-msg.error{color:#b91c1c}.spinner{width:16px;height:16px;border:2px solid var(--_border);border-top-color:var(--_primary);border-radius:999px;animation:tl-spin 0.7s linear infinite}.tickets-step{display:flex;flex-direction:column;gap:6px}.back-link{align-self:flex-start;padding:0;border:0;background:none;color:var(--_primary);font-size:0.85rem;font-weight:500;cursor:pointer}.back-link:hover{text-decoration:underline}.occ-label{margin:2px 0 8px;font-size:0.9rem;font-weight:600;color:var(--_fg)}.done-step{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:16px 0 4px}.done-mark{font-size:2.4rem;line-height:1;margin-bottom:6px}.done-title{margin:0;font-size:1.1rem;font-weight:700;color:var(--_fg)}.done-sub{margin:0 0 14px;font-size:0.9rem;color:var(--_muted-fg)}.primary-btn{width:100%;padding:13px;border:0;border-radius:var(--tl-radius-md, 0.5rem);background:var(--_primary);color:var(--_primary-fg);font-size:0.98rem;font-weight:600;cursor:pointer;transition:opacity 0.15s}.primary-btn:hover{opacity:0.9}.ghost-btn{width:100%;margin-top:8px;padding:12px;border:1px solid var(--_border);border-radius:var(--tl-radius-md, 0.5rem);background:transparent;color:var(--_fg);font-size:0.95rem;font-weight:500;cursor:pointer;transition:background 0.15s}.ghost-btn:hover{background:var(--_muted)}@keyframes tl-fade{from{opacity:0}}@keyframes tl-rise{from{opacity:0;transform:translateY(12px) scale(0.98)}}@keyframes tl-spin{to{transform:rotate(360deg)}}";export{s as tl_buy_modal}
@@ -1 +0,0 @@
1
- import{r as t,c as e,h as r}from"./p-CNX8hZa8.js";import{w as a}from"./p-CqhvfyKV.js";import{e as i}from"./p-BGekdjN9.js";const s=class{constructor(r){t(this,r),this.tlClick=e(this,"tlClick"),this.tlError=e(this,"tlError"),this.loadedEvent=null,this.loading=!1,this.error=null,this.handleClick=()=>{const t=this.current;t&&(console.log("[tl-event-card] Clicked:",t.id),this.tlClick.emit({eventId:t.id}))}}watchEventId(){this.loadEvent()}async componentWillLoad(){!this.event&&this.eventId&&await this.loadEvent()}async loadEvent(){if(!this.event&&this.eventId)try{this.loading=!0,this.error=null;const t=await a(),e=await t.getEventsManager().get(this.eventId);if(!e)throw new Error("Event not found");this.loadedEvent=function(t){const e=t.occurrences??[],r=e.map((t=>t.startsAt)).filter((t=>!!t)).sort(),a=Date.now(),i=r.find((t=>new Date(t).getTime()>=a))??r[0],s="sold_out"===t.status||e.length>0&&e.every((t=>"sold_out"===t.status));return{id:t.id,name:t.name,...t.shortDescription?{shortDescription:t.shortDescription}:{},...t.imageUrl?{imageUrl:t.imageUrl}:{},...t.venueName?{venue:{id:t.venueId??"",name:t.venueName,city:t.venueCity??""}}:{},...i?{nextOccurrence:{startsAt:i}}:{},availabilityStatus:s?"sold_out":"available"}}(e)}catch(t){console.error("[tl-event-card] Failed to load event:",t),this.error=i(t,"Failed to load event"),this.tlError.emit({message:this.error})}finally{this.loading=!1}}get current(){return this.event??this.loadedEvent}formatDate(t){return new Date(t).toLocaleDateString("en-GB",{weekday:"short",day:"numeric",month:"short",hour:"2-digit",minute:"2-digit"})}getStatusBadgeClass(){const t="status-badge";switch(this.current?.availabilityStatus){case"available":return`${t} status-available`;case"limited":return`${t} status-limited`;case"sold_out":return`${t} status-sold-out`;default:return t}}getStatusLabel(){switch(this.current?.availabilityStatus){case"available":return"Available";case"limited":return"Limited";case"sold_out":return"Sold Out";default:return""}}render(){if(this.loading)return r("div",{class:"event-card card-skeleton","aria-busy":"true"},r("div",{class:"image-container"}),r("div",{class:"content"},r("div",{class:"skeleton-line short"}),r("div",{class:"skeleton-line long"})));if(this.error)return r("div",{class:"event-card card-error"},this.error);const t=this.current;if(!t)return null;const e=t.thumbnailUrl||t.imageUrl;return r("div",{class:"event-card",onClick:this.handleClick},r("div",{class:"image-container"},e?r("img",{src:e,alt:t.name,class:"event-image"}):r("div",{class:"image-placeholder"},r("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5",d:"M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"}))),r("div",{class:"status-container"},r("span",{class:this.getStatusBadgeClass()},this.getStatusLabel()))),r("div",{class:"content"},t.category&&r("span",{class:"category"},t.category),r("h3",{class:"title"},t.name),t.nextOccurrence&&r("p",{class:"meta"},r("svg",{class:"icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"})),this.formatDate(t.nextOccurrence.startsAt)),t.venue&&r("p",{class:"meta"},r("svg",{class:"icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"}),r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 11a3 3 0 11-6 0 3 3 0 016 0z"})),t.venue.name,", ",t.venue.city),t.shortDescription&&r("p",{class:"description"},t.shortDescription)))}static get watchers(){return{eventId:[{watchEventId:0}]}}};s.style=":host{display:block;font-family:var(--tl-font-family, system-ui, sans-serif)}.event-card{background:var(--tl-secondary, #f3f4f6);border-radius:var(--tl-radius-lg, 0.75rem);overflow:hidden;box-shadow:0 1px 3px rgba(0, 0, 0, 0.1);cursor:pointer;transition:box-shadow 0.2s ease, transform 0.2s ease}.event-card:hover{box-shadow:0 4px 12px rgba(0, 0, 0, 0.15);transform:translateY(-2px)}.image-container{position:relative;aspect-ratio:16 / 9;overflow:hidden;background:var(--tl-muted, #f9fafb)}.event-image{width:100%;height:100%;object-fit:cover;transition:transform 0.3s ease}.event-card:hover .event-image{transform:scale(1.05)}.image-placeholder{width:100%;height:100%;display:flex;align-items:center;justify-content:center;color:var(--tl-muted-foreground, #6b7280)}.status-container{position:absolute;top:0.5rem;right:0.5rem}.status-badge{display:inline-block;padding:0.25rem 0.5rem;font-size:0.75rem;font-weight:500;border-radius:var(--tl-radius-sm, 0.25rem)}.status-available{background:var(--tl-success, #10b981);color:var(--tl-success-foreground, #ffffff)}.status-limited{background:var(--tl-warning, #f59e0b);color:var(--tl-warning-foreground, #ffffff)}.status-sold-out{background:var(--tl-error, #ef4444);color:var(--tl-error-foreground, #ffffff)}.content{padding:var(--tl-spacing-4, 1rem)}.category{display:inline-block;font-size:0.75rem;font-weight:500;text-transform:uppercase;letter-spacing:0.05em;color:var(--tl-primary, #6366f1)}.title{margin:0.25rem 0 0;font-size:1.125rem;font-weight:600;color:var(--tl-foreground, #111827);line-height:1.3}.event-card:hover .title{color:var(--tl-primary, #6366f1)}.meta{display:flex;align-items:center;gap:0.5rem;margin:0.5rem 0 0;font-size:0.875rem;color:var(--tl-muted-foreground, #6b7280)}.meta:first-of-type{margin-top:0.75rem}.icon{width:1rem;height:1rem;flex-shrink:0}.description{margin:0.75rem 0 0;font-size:0.875rem;color:var(--tl-muted-foreground, #6b7280);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.card-skeleton{cursor:default;pointer-events:none}.card-skeleton .image-container{animation:pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite}.skeleton-line{height:0.875rem;margin-top:0.5rem;background:var(--tl-muted, #f9fafb);border-radius:var(--tl-radius-sm, 0.25rem);animation:pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite}.skeleton-line.short{width:40%}.skeleton-line.long{width:80%}.card-error{padding:var(--tl-spacing-4, 1rem);font-size:0.875rem;color:var(--tl-error, #ef4444);cursor:default}.card-error:hover{transform:none}@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.5}}";export{s as tl_event_card}
@@ -1 +0,0 @@
1
- import{r as t,c as e,h as s,H as i,a as r}from"./p-CNX8hZa8.js";import{h as a,g as l}from"./p-CqhvfyKV.js";const o=class{constructor(s){t(this,s),this.tlComplete=e(this,"tl-complete"),this.tlError=e(this,"tl-error"),this.tlClose=e(this,"tl-close"),this.disabled=!1,this.handleClick=()=>{if(!this.disabled)return a()?void l().event(this.eventId).openModal({occurrenceId:this.occurrenceId,onComplete:t=>{this.tlComplete.emit(t)},onError:t=>{this.tlError.emit({message:t.message})},onClose:()=>{this.tlClose.emit()}}):(console.error("[tl-buy-tickets-wrapper] SDK not initialized. Call setSDK(ticketlayer) first."),void this.tlError.emit({message:"SDK not initialized"}))},this.handleKeyDown=t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),this.handleClick())}}render(){return s(i,{key:"d6ef81ac9bc1a1194eda1603cbb2a75b355a212e",class:{"tl-buy-tickets-wrapper":!0,"tl-buy-tickets-wrapper--disabled":this.disabled},onClick:this.handleClick,onKeyDown:this.handleKeyDown,role:"button",tabindex:this.disabled?-1:0,"aria-disabled":this.disabled?"true":null},s("slot",{key:"faef5aaad20deaf5e442d688c69105e45f9ee26f"}))}get el(){return r(this)}};o.style="tl-buy-tickets-wrapper,.tl-buy-tickets-wrapper{display:inline-block;cursor:pointer}tl-buy-tickets-wrapper:focus,.tl-buy-tickets-wrapper:focus{outline:2px solid var(--tl-ring, #3b82f6);outline-offset:2px;border-radius:var(--tl-radius-sm, 0.25rem)}tl-buy-tickets-wrapper[disabled],tl-buy-tickets-wrapper.tl-buy-tickets-wrapper--disabled,.tl-buy-tickets-wrapper--disabled{cursor:not-allowed;opacity:0.5}";export{o as tl_buy_tickets_wrapper}
@@ -1 +0,0 @@
1
- import{r as t,c as r,h as e}from"./p-CNX8hZa8.js";import{w as o,h as a,g as i}from"./p-CqhvfyKV.js";const s=class{constructor(e){t(this,e),this.tlCheckout=r(this,"tlCheckout"),this.tlItemRemoved=r(this,"tlItemRemoved"),this.tlCartUpdated=r(this,"tlCartUpdated"),this.tlError=r(this,"tlError"),this.showCheckoutButton=!0,this.checkoutLabel="Checkout",this.showRemoveButtons=!0,this.compact=!1,this.cart=null,this.loading=!0,this.error=null,this.removingItemId=null,this.handleCheckout=()=>{this.cart&&this.cart.items.length>0&&this.tlCheckout.emit({cart:this.cart})}}componentWillLoad(){this.loadCart()}componentDidLoad(){this.subscribeToCartUpdates()}disconnectedCallback(){this.unsubscribe&&this.unsubscribe()}async loadCart(){try{console.log("[tl-cart] Loading cart..."),this.loading=!0,this.error=null;const t=await o(),r=t.getCartManager?.();if(r){const t=await r.get();console.log("[tl-cart] Cart loaded:",t),this.cart=t}}catch(t){console.error("[tl-cart] Failed to load cart:",t),this.error=t instanceof Error?t.message:"Failed to load cart",this.tlError.emit({message:this.error})}finally{this.loading=!1}}async subscribeToCartUpdates(){const t=await o().catch((()=>null));if(!t)return;const r=t.getCartManager?.();r&&(this.unsubscribe=r.on?.("cart:updated",(t=>{console.log("[tl-cart] Cart updated:",t),this.cart=t,this.tlCartUpdated.emit({cart:t})})))}async handleRemoveItem(t){if(a()){this.removingItemId=t;try{const r=i(),e=r.getCartManager?.();e&&(await e.removeItem(t),console.log("[tl-cart] Item removed:",t),this.tlItemRemoved.emit({itemId:t}))}catch(t){console.error("[tl-cart] Failed to remove item:",t),this.error=t instanceof Error?t.message:"Failed to remove item",this.tlError.emit({message:this.error})}finally{this.removingItemId=null}}}formatPrice(t,r="GBP"){return new Intl.NumberFormat("en-GB",{style:"currency",currency:r}).format(t/100)}formatDate(t){return new Date(t).toLocaleDateString("en-GB",{weekday:"short",day:"numeric",month:"short",hour:"2-digit",minute:"2-digit"})}renderSkeleton(){return e("div",{class:"skeleton-container"},e("div",{class:"skeleton-item"}),e("div",{class:"skeleton-item"}),e("div",{class:"skeleton-totals"}))}renderEmptyCart(){return e("div",{class:"empty-cart"},e("svg",{class:"empty-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5",d:"M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"})),e("p",{class:"empty-title"},"Your cart is empty"),e("p",{class:"empty-message"},"Add tickets to get started"))}renderCartItem(t){const r=this.removingItemId===t.id;return e("div",{class:"cart-item "+(r?"removing":""),key:t.id},e("div",{class:"item-info"},e("p",{class:"item-name"},t.ticketTypeName),!this.compact&&e("p",{class:"item-event"},t.eventName),!this.compact&&t.occurrenceDate&&e("p",{class:"item-date"},this.formatDate(t.occurrenceDate)),e("p",{class:"item-quantity"},"Qty: ",t.quantity)),e("div",{class:"item-actions"},e("p",{class:"item-price"},this.formatPrice(t.totalPrice,t.currency)),this.showRemoveButtons&&e("button",{class:"remove-btn",onClick:()=>this.handleRemoveItem(t.id),disabled:r,"aria-label":"Remove item"},r?e("span",{class:"spinner"}):e("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M6 18L18 6M6 6l12 12"})))))}render(){if(this.loading)return this.renderSkeleton();if(!this.cart||0===this.cart.items.length)return this.renderEmptyCart();const{items:t,subtotal:r,fees:o,total:a,currency:i}=this.cart;return e("div",{class:"cart "+(this.compact?"compact":"")},e("div",{class:"cart-items"},t.map((t=>this.renderCartItem(t)))),e("div",{class:"cart-totals"},!this.compact&&e("div",{class:"total-row subtotal"},e("span",null,"Subtotal"),e("span",null,this.formatPrice(r,i))),o>0&&!this.compact&&e("div",{class:"total-row fees"},e("span",null,"Fees"),e("span",null,this.formatPrice(o,i))),e("div",{class:"total-row total"},e("span",null,"Total"),e("span",null,this.formatPrice(a,i)))),this.showCheckoutButton&&e("button",{class:"checkout-btn",onClick:this.handleCheckout,disabled:0===t.length},this.checkoutLabel))}};s.style=":host{display:block;font-family:var(--tl-font-family, system-ui, sans-serif)}.skeleton-container{padding:var(--tl-spacing-4, 1rem)}.skeleton-item{height:70px;background:var(--tl-color-muted, #f3f4f6);border-radius:var(--tl-radius-md, 0.5rem);margin-bottom:var(--tl-spacing-3, 0.75rem);animation:pulse 1.5s ease-in-out infinite}.skeleton-totals{height:100px;background:var(--tl-color-muted, #f3f4f6);border-radius:var(--tl-radius-md, 0.5rem);animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.5}}.empty-cart{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--tl-spacing-8, 2rem);text-align:center}.empty-icon{width:48px;height:48px;color:var(--tl-color-muted-foreground, #9ca3af);margin-bottom:var(--tl-spacing-4, 1rem)}.empty-title{margin:0 0 var(--tl-spacing-2, 0.5rem);font-size:16px;font-weight:600;color:var(--tl-color-foreground, #111827)}.empty-message{margin:0;font-size:14px;color:var(--tl-color-muted-foreground, #6b7280)}.cart{background:var(--tl-color-background, #ffffff)}.cart.compact .cart-items{margin-bottom:var(--tl-spacing-2, 0.5rem)}.cart-items{margin-bottom:var(--tl-spacing-4, 1rem)}.cart-item{display:flex;justify-content:space-between;align-items:flex-start;padding:var(--tl-spacing-3, 0.75rem) 0;border-bottom:1px solid var(--tl-color-border, #e5e7eb);transition:opacity 0.2s}.cart-item:last-child{border-bottom:none}.cart-item.removing{opacity:0.5}.item-info{flex:1;min-width:0}.item-name{margin:0;font-weight:600;font-size:15px;color:var(--tl-color-foreground, #111827)}.item-event{margin:var(--tl-spacing-1, 0.25rem) 0 0;font-size:14px;color:var(--tl-color-muted-foreground, #6b7280)}.item-date{margin:var(--tl-spacing-1, 0.25rem) 0 0;font-size:13px;color:var(--tl-color-muted-foreground, #9ca3af)}.item-quantity{margin:var(--tl-spacing-1, 0.25rem) 0 0;font-size:13px;color:var(--tl-color-muted-foreground, #6b7280)}.item-actions{display:flex;align-items:center;gap:var(--tl-spacing-3, 0.75rem);margin-left:var(--tl-spacing-4, 1rem)}.item-price{margin:0;font-weight:600;font-size:15px;color:var(--tl-color-foreground, #111827);white-space:nowrap}.remove-btn{width:28px;height:28px;padding:0;border:none;background:transparent;border-radius:var(--tl-radius-sm, 0.25rem);color:var(--tl-color-muted-foreground, #9ca3af);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color 0.15s, color 0.15s}.remove-btn:hover:not(:disabled){background-color:var(--tl-color-destructive-bg, #fee2e2);color:var(--tl-color-destructive, #ef4444)}.remove-btn:disabled{cursor:not-allowed;opacity:0.5}.remove-btn svg{width:16px;height:16px}.spinner{width:14px;height:14px;border:2px solid var(--tl-color-border, #e5e7eb);border-top-color:var(--tl-color-primary, #6366f1);border-radius:50%;animation:spin 0.6s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.cart-totals{padding:var(--tl-spacing-3, 0.75rem) 0;border-top:1px solid var(--tl-color-border, #e5e7eb)}.total-row{display:flex;justify-content:space-between;align-items:center;padding:var(--tl-spacing-1, 0.25rem) 0}.total-row.subtotal,.total-row.fees{font-size:14px;color:var(--tl-color-muted-foreground, #6b7280)}.total-row.total{font-size:16px;font-weight:700;color:var(--tl-color-foreground, #111827);padding-top:var(--tl-spacing-2, 0.5rem);border-top:1px solid var(--tl-color-border, #e5e7eb);margin-top:var(--tl-spacing-2, 0.5rem)}.checkout-btn{width:100%;margin-top:var(--tl-spacing-4, 1rem);padding:var(--tl-spacing-3, 0.75rem) var(--tl-spacing-4, 1rem);border-radius:var(--tl-radius-md, 0.5rem);border:none;background-color:var(--tl-color-primary, #6366f1);color:var(--tl-color-primary-foreground, #ffffff);font-weight:600;font-size:16px;cursor:pointer;transition:opacity 0.15s, transform 0.1s}.checkout-btn:hover:not(:disabled){opacity:0.9}.checkout-btn:active:not(:disabled){transform:scale(0.98)}.checkout-btn:disabled{background-color:var(--tl-color-muted, #d1d5db);color:var(--tl-color-muted-foreground, #6b7280);cursor:not-allowed}.cart.compact .item-info{flex-direction:row;align-items:center}.cart.compact .cart-totals{padding:var(--tl-spacing-2, 0.5rem) 0}.cart.compact .total-row.total{margin-top:0;border-top:none;padding-top:0}";export{s as tl_cart}
@@ -1 +0,0 @@
1
- import{r as t,c as e,h as r}from"./p-CNX8hZa8.js";import{w as a,g as o,h as s}from"./p-CqhvfyKV.js";const i=class{constructor(r){t(this,r),this.tlSelect=e(this,"tlSelect"),this.orientation="auto",this.loading=!0,this.error=null,this.occurrences=[],this.currentMonth=new Date,this.selectedDate=null,this.computedDisplayMode="list",this.containerWidth=0}async componentWillLoad(){await this.waitForSDKAndFetch()}async waitForSDKAndFetch(){if(!this.eventId)return this.error="Event ID is required",void(this.loading=!1);try{await a(),await this.fetchOccurrences()}catch(t){this.error=t instanceof Error?t.message:"SDK not initialized.",this.loading=!1}}componentDidLoad(){this.containerRef&&"undefined"!=typeof ResizeObserver&&(this.resizeObserver=new ResizeObserver((t=>{for(const e of t)this.containerWidth=e.contentRect.width})),this.resizeObserver.observe(this.containerRef))}disconnectedCallback(){this.resizeObserver&&this.resizeObserver.disconnect()}async onEventIdChange(){await this.fetchOccurrences()}async fetchOccurrences(){this.loading=!0,this.error=null;try{const t=o().getEventsManager(),e=await t.get(this.eventId);if(!e)throw new Error("Event not found");this.occurrences=(e.occurrences||[]).map((t=>({id:t.id,startsAt:t.startsAt,endsAt:t.endsAt,status:t.availabilityStatus,availableCapacity:t.availableCapacity,soldOut:"sold_out"===t.availabilityStatus}))),this.computeDisplayMode(),this.computeInitialSelection()}catch(t){console.error("[tl-occurrence-selector] Failed to fetch occurrences:",t),this.error=t instanceof Error?t.message:"Failed to load occurrences",this.occurrences=[]}finally{this.loading=!1}}computeDisplayMode(){if(this.displayMode)return void(this.computedDisplayMode=this.displayMode);if(this.occurrences.length<=5)return void(this.computedDisplayMode="list");const t=new Set;for(const e of this.occurrences){const r=new Date(e.startsAt);t.add(r.toDateString())}this.computedDisplayMode=1===t.size?"slots":"calendar"}computeInitialSelection(){if(0===this.occurrences.length)return;const t=new Date;t.setHours(0,0,0,0);const e=this.getDatesWithOccurrences();let r=null;for(const a of Array.from(e.keys()).sort()){const e=new Date(a);if(e>=t){r=e;break}}if(!r&&e.size>0){const t=Array.from(e.keys()).sort();r=new Date(t[t.length-1])}r&&(this.selectedDate=r,this.currentMonth=new Date(r.getFullYear(),r.getMonth(),1))}getDatesWithOccurrences(){const t=new Map;for(const e of this.occurrences){const r=new Date(e.startsAt);r.setHours(0,0,0,0);const a=r.toDateString();t.has(a)||t.set(a,[]),t.get(a).push(e)}return t}getDateRange(){if(0===this.occurrences.length)return null;let t=new Date(this.occurrences[0].startsAt),e=new Date(this.occurrences[0].startsAt);for(const r of this.occurrences){const a=new Date(r.startsAt);a<t&&(t=a),a>e&&(e=a)}return{first:t,last:e}}isSingleWeek(){const t=this.getDateRange();if(!t)return!1;const e=new Date(t.first),r=e.getDay(),a=0===r?6:r-1;e.setDate(e.getDate()-a),e.setHours(0,0,0,0);const o=new Date(e);return o.setDate(o.getDate()+6),o.setHours(23,59,59,999),t.last<=o}isSingleMonth(){const t=this.getDateRange();return!!t&&t.first.getMonth()===t.last.getMonth()&&t.first.getFullYear()===t.last.getFullYear()}isHorizontalLayout(){return"horizontal"===this.orientation||"vertical"!==this.orientation&&this.containerWidth>=768}formatDate(t){return t.toLocaleDateString("en-GB",{weekday:"long",day:"numeric",month:"long",year:"numeric"})}formatTime(t){return new Date(t).toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit"})}formatDateTime(t){const e=new Date(t);return{date:e.toLocaleDateString("en-GB",{weekday:"long",day:"numeric",month:"long",year:"numeric"}),time:e.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit"})}}handleSelect(t){t.soldOut||0===t.availableCapacity||(console.log("[tl-occurrence-selector] Selected:",t.id),this.tlSelect.emit({occurrence:t}))}handleDateSelect(t){this.selectedDate=t,t.getMonth()===this.currentMonth.getMonth()&&t.getFullYear()===this.currentMonth.getFullYear()||(this.currentMonth=new Date(t.getFullYear(),t.getMonth(),1))}handlePrevMonth(){const t=this.getDateRange();if(!t)return;const e=new Date(this.currentMonth);e.setMonth(e.getMonth()-1),e>=new Date(t.first.getFullYear(),t.first.getMonth(),1)&&(this.currentMonth=e)}handleNextMonth(){const t=this.getDateRange();if(!t)return;const e=new Date(this.currentMonth);e.setMonth(e.getMonth()+1),e<=new Date(t.last.getFullYear(),t.last.getMonth(),1)&&(this.currentMonth=e)}isPrevMonthDisabled(){const t=this.getDateRange();if(!t)return!0;const e=new Date(t.first.getFullYear(),t.first.getMonth(),1);return this.currentMonth<=e}isNextMonthDisabled(){const t=this.getDateRange();if(!t)return!0;const e=new Date(t.last.getFullYear(),t.last.getMonth(),1);return this.currentMonth>=e}getCalendarDays(){if(this.isSingleWeek()){const t=this.getDateRange();if(!t)return[];const e=new Date(t.first),r=e.getDay(),a=0===r?6:r-1;e.setDate(e.getDate()-a),e.setHours(0,0,0,0);const o=[],s=new Date(e);for(let t=0;t<7;t++)o.push(new Date(s)),s.setDate(s.getDate()+1);return o}const t=this.currentMonth.getFullYear(),e=this.currentMonth.getMonth(),r=new Date(t,e,1),a=new Date(t,e+1,0),o=r.getDay(),s=0===o?6:o-1,i=new Date(r);i.setDate(i.getDate()-s);const n=a.getDay(),l=0===n?0:7-n,c=new Date(a);c.setDate(c.getDate()+l);const d=[],f=new Date(i);for(;f<=c;)d.push(new Date(f)),f.setDate(f.getDate()+1);return d}hasOccurrencesOnDate(t){const e=t.toDateString();return this.getDatesWithOccurrences().has(e)}isDateSoldOut(t){const e=t.toDateString(),r=this.getDatesWithOccurrences().get(e);return!!r&&r.every((t=>t.soldOut||0===t.availableCapacity))}getSelectedDateOccurrences(){if(!this.selectedDate)return[];const t=this.selectedDate.toDateString();return(this.getDatesWithOccurrences().get(t)||[]).sort(((t,e)=>new Date(t.startsAt).getTime()-new Date(e.startsAt).getTime()))}getThemeStyles(){if(!this.theme)return{};const t={};return this.theme.primaryColor&&(t["--tl-primary"]=this.theme.primaryColor),this.theme.primaryForeground&&(t["--tl-primary-foreground"]=this.theme.primaryForeground),this.theme.backgroundColor&&(t["--tl-background"]=this.theme.backgroundColor),this.theme.foregroundColor&&(t["--tl-foreground"]=this.theme.foregroundColor),this.theme.mutedColor&&(t["--tl-muted"]=this.theme.mutedColor),this.theme.mutedForeground&&(t["--tl-muted-foreground"]=this.theme.mutedForeground),this.theme.borderColor&&(t["--tl-border"]=this.theme.borderColor),this.theme.borderRadius&&(t["--tl-radius"]=this.theme.borderRadius),this.theme.fontFamily&&(t["--tl-font-family"]=this.theme.fontFamily),t}renderListView(){return r("div",{class:"list-view"},this.occurrences.map((t=>{const e=t.soldOut||0===t.availableCapacity,{date:a,time:o}=this.formatDateTime(t.startsAt);return r("button",{key:t.id,class:"occurrence-item "+(e?"sold-out":""),onClick:()=>this.handleSelect(t),disabled:e},r("div",{class:"occurrence-info"},r("div",{class:"occurrence-date"},a),r("div",{class:"occurrence-time"},o,t.endsAt&&` - ${this.formatTime(t.endsAt)}`)),r("div",{class:"occurrence-status"},e?r("span",{class:"status-sold-out"},"Sold Out"):t.availableCapacity?r("span",{class:"status-available"},t.availableCapacity," available"):r("span",{class:"status-arrow"},"→")))})))}renderSlotsView(){const t=[...this.occurrences].sort(((t,e)=>new Date(t.startsAt).getTime()-new Date(e.startsAt).getTime())),e=t.length>0?this.formatDate(new Date(t[0].startsAt)):"";return r("div",{class:"slots-view"},e&&r("div",{class:"slots-date-header"},e),r("div",{class:"time-slots-grid"},t.map((t=>{const e=t.soldOut||0===t.availableCapacity;return r("button",{key:t.id,class:"time-slot "+(e?"sold-out":""),onClick:()=>this.handleSelect(t),disabled:e},r("span",{class:"slot-time"},this.formatTime(t.startsAt)),e&&r("span",{class:"slot-sold-out"},"Sold Out"))}))))}renderCalendarHeader(){const t=this.currentMonth.toLocaleDateString("en-GB",{month:"long",year:"numeric"}),e=!this.isSingleMonth();return r("div",{class:"calendar-header"},r("span",{class:"month-label"},t),e&&r("div",{class:"calendar-nav-buttons"},r("button",{class:"nav-button",onClick:()=>this.handlePrevMonth(),disabled:this.isPrevMonthDisabled(),"aria-label":"Previous month"},r("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},r("path",{d:"M15 18l-6-6 6-6"}))),r("button",{class:"nav-button",onClick:()=>this.handleNextMonth(),disabled:this.isNextMonthDisabled(),"aria-label":"Next month"},r("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},r("path",{d:"M9 18l6-6-6-6"})))))}renderCalendarGrid(){const t=this.getCalendarDays(),e=new Date;return e.setHours(0,0,0,0),r("div",{class:"calendar-grid"},["Mon","Tue","Wed","Thu","Fri","Sat","Sun"].map((t=>r("div",{class:"weekday-header",key:t},t))),t.map((t=>{const a=t.getMonth()===this.currentMonth.getMonth(),o=this.hasOccurrencesOnDate(t),s=this.isDateSoldOut(t),i=this.selectedDate&&t.toDateString()===this.selectedDate.toDateString(),n=t.toDateString()===e.toDateString(),l=t<e;return r("button",{key:t.toISOString(),class:`calendar-day \n ${a?"":"other-month"} \n ${o?"has-occurrences":""} \n ${s?"sold-out":""} \n ${i?"selected":""} \n ${n?"today":""}\n ${l?"past":""}`,onClick:()=>o&&this.handleDateSelect(t),disabled:!o},r("span",{class:"day-number"},t.getDate()),o&&r("span",{class:"occurrence-dot"}))})))}renderSelectedDateSlots(){const t=this.getSelectedDateOccurrences();if(!this.selectedDate||0===t.length)return r("div",{class:"selected-date-slots empty"},r("p",null,"Select a date to see available times"));const e=this.formatDate(this.selectedDate);return r("div",{class:"selected-date-slots"},r("div",{class:"selected-date-header"},e),r("div",{class:"time-slots-list"},t.map((t=>{const e=t.soldOut||0===t.availableCapacity;return r("button",{key:t.id,class:"time-slot-item "+(e?"sold-out":""),onClick:()=>this.handleSelect(t),disabled:e},r("span",{class:"slot-time"},this.formatTime(t.startsAt)),r("div",{class:"slot-status"},e?r("span",{class:"status-sold-out"},"Sold Out"):t.availableCapacity?r("span",{class:"status-available"},t.availableCapacity," available"):r("span",{class:"status-arrow"},"→")))}))))}renderCalendarView(){const t=this.isHorizontalLayout();return r("div",{class:"calendar-view "+(t?"horizontal":"vertical")},r("div",{class:"calendar-panel"},this.renderCalendarHeader(),this.renderCalendarGrid()),r("div",{class:"slots-panel"},this.renderSelectedDateSlots()))}renderSkeleton(){return r("div",{class:"loading-container"},r("div",{class:"skeleton-calendar"},r("div",{class:"skeleton skeleton-calendar-header"}),r("div",{class:"skeleton-calendar-grid"},Array.from({length:35},((t,e)=>r("div",{key:e,class:"skeleton skeleton-calendar-day"}))))))}render(){const t=this.getThemeStyles();return r("div",{key:"40758aaa06e5f062de92675766e4531995f74bc7",class:"occurrence-selector",ref:t=>this.containerRef=t,style:t},this.loading&&this.renderSkeleton(),!this.loading&&this.error&&r("div",{key:"6d2f5b9c07f65d4941bfb4870729fe3248cb277e",class:"error-container"},r("svg",{key:"daaf1f48dcff80ae7cf94ae0da1d66d9c9b7fb0f",class:"error-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},r("circle",{key:"0a9f494a5cf7f79146e56fc44469a3ca9e5238ae",cx:"12",cy:"12",r:"10"}),r("path",{key:"67d7b453508c847593136bd60e34ea0c38d30cda",d:"M12 8v4m0 4h.01"})),r("p",{key:"c1cc92585ed4451b686350b6d718c3ba06b72dd3",class:"error-message"},this.error),r("button",{key:"4ec9d048af704af12a800385b9868501973ba477",class:"retry-button",onClick:()=>this.fetchOccurrences()},"Retry")),!this.loading&&!this.error&&(0===this.occurrences.length?r("div",{class:"no-occurrences"},r("p",null,"No dates available for this event.")):r("div",{class:"selector-content"},"list"===this.computedDisplayMode&&this.renderListView(),"slots"===this.computedDisplayMode&&this.renderSlotsView(),"calendar"===this.computedDisplayMode&&this.renderCalendarView())))}static get watchers(){return{eventId:[{onEventIdChange:0}]}}};i.style=":host{--tl-radius:var(--tl-radius-md, 0.5rem);display:block;font-family:var(--tl-font-family, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);color:var(--tl-foreground, #0f172a)}*{box-sizing:border-box;margin:0;padding:0}.occurrence-selector{width:100%}.no-occurrences{text-align:center;padding:3rem 1rem;color:var(--tl-muted-foreground, #64748b)}.list-view{display:flex;flex-direction:column;gap:0.75rem}.occurrence-item{display:flex;justify-content:space-between;align-items:flex-start;width:100%;padding:1rem 1.25rem;background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);text-align:left;cursor:pointer;transition:all 0.15s ease;font-family:inherit}.occurrence-item:hover:not(:disabled){border-color:var(--tl-primary, #e64b12);background:color-mix(in srgb, var(--tl-primary, #e64b12) 5%, var(--tl-background, #ffffff))}.occurrence-item:focus-visible{outline:2px solid var(--tl-primary);outline-offset:2px}.occurrence-item:disabled{cursor:not-allowed;opacity:0.6;background:var(--tl-muted, #f1f5f9)}.occurrence-item.sold-out{opacity:0.6;background:var(--tl-muted, #f1f5f9)}.occurrence-info{flex:1}.occurrence-date{font-weight:600;font-size:0.9375rem;color:var(--tl-foreground, #0f172a);margin-bottom:0.25rem}.occurrence-time{font-size:0.875rem;color:var(--tl-muted-foreground)}.occurrence-status{flex-shrink:0;text-align:right}.status-sold-out{font-size:0.875rem;font-weight:500;color:var(--tl-muted-foreground)}.status-available{font-size:0.875rem;color:var(--tl-muted-foreground)}.status-arrow{font-size:1.25rem;color:var(--tl-primary, #e64b12)}.slots-view{display:flex;flex-direction:column;gap:1rem}.slots-date-header{font-size:1.125rem;font-weight:600;color:var(--tl-foreground, #0f172a);padding-bottom:0.5rem;border-bottom:1px solid var(--tl-border)}.time-slots-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(100px, 1fr));gap:0.5rem}.time-slot{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0.75rem 0.5rem;background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);cursor:pointer;transition:all 0.15s ease;font-family:inherit;min-height:3.5rem}.time-slot:hover:not(:disabled){border-color:var(--tl-primary, #e64b12);background:color-mix(in srgb, var(--tl-primary, #e64b12) 5%, var(--tl-background, #ffffff))}.time-slot:focus-visible{outline:2px solid var(--tl-primary);outline-offset:2px}.time-slot:disabled{cursor:not-allowed;opacity:0.6;background:var(--tl-muted, #f1f5f9)}.time-slot.sold-out{opacity:0.6;background:var(--tl-muted, #f1f5f9)}.slot-time{font-size:0.9375rem;font-weight:600;color:var(--tl-foreground, #0f172a)}.slot-sold-out{font-size:0.6875rem;color:var(--tl-muted-foreground);margin-top:0.125rem}.calendar-view{display:flex;flex-direction:column;gap:1.5rem}.calendar-view.horizontal{flex-direction:row;gap:1.5rem;align-items:flex-start}.calendar-view.horizontal .calendar-panel{flex-shrink:0;width:340px}.calendar-view.horizontal .slots-panel{flex:1;min-width:0}.calendar-view.vertical .calendar-panel{width:100%}.calendar-view.vertical .slots-panel{width:100%}.calendar-panel{border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);padding:1rem}.calendar-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:0.75rem}.month-label{font-size:1rem;font-weight:600;color:var(--tl-foreground, #0f172a);flex:1}.calendar-nav-buttons{display:flex;gap:0.375rem}.nav-button{display:flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;padding:0;background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);cursor:pointer;transition:all 0.15s ease;color:var(--tl-foreground, #0f172a)}.nav-button:hover:not(:disabled){background:var(--tl-muted, #f1f5f9)}.nav-button:disabled{cursor:not-allowed;opacity:0.4}.nav-button svg{width:0.875rem;height:0.875rem}.calendar-grid{display:grid;grid-template-columns:repeat(7, 1fr);gap:0.1875rem}.weekday-header{text-align:center;font-size:0.6875rem;font-weight:600;color:var(--tl-muted-foreground);padding:0.375rem 0;text-transform:uppercase;letter-spacing:0.05em}.calendar-day{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;aspect-ratio:1;padding:0.1875rem;background:var(--tl-background, #ffffff);border:1px solid transparent;border-radius:var(--tl-radius);cursor:default;transition:all 0.15s ease;font-family:inherit;font-size:0.9375rem;font-weight:500;color:var(--tl-foreground, #0f172a)}.calendar-day.other-month{color:var(--tl-muted-foreground);opacity:0.5}.calendar-day.has-occurrences{cursor:pointer;background:color-mix(in srgb, var(--tl-primary, #e64b12) 10%, var(--tl-background, #ffffff));border-color:transparent;font-weight:600;color:var(--tl-primary, #e64b12)}.calendar-day.has-occurrences:hover{background:color-mix(in srgb, var(--tl-primary, #e64b12) 18%, var(--tl-background, #ffffff));border-color:transparent}.calendar-day.has-occurrences.sold-out{background:var(--tl-muted, #f1f5f9);border-color:transparent}.calendar-day.has-occurrences.sold-out:hover{background:color-mix(in srgb, var(--tl-muted, #f1f5f9) 80%, var(--tl-background, #ffffff));border-color:transparent}.calendar-day.selected{background:var(--tl-primary, #e64b12);border-color:var(--tl-primary, #e64b12);color:var(--tl-primary-foreground, #ffffff)}.calendar-day.selected:hover{background:color-mix(in srgb, var(--tl-primary, #e64b12) 90%, black)}.calendar-day.selected .occurrence-dot{background:var(--tl-primary-foreground)}.calendar-day.today .day-number{font-weight:700;text-decoration:underline;text-underline-offset:2px}.calendar-day.past:not(.has-occurrences){opacity:0.4}.day-number{line-height:1}.occurrence-dot{display:none}.slots-panel{min-height:200px}.selected-date-slots{height:100%}.selected-date-slots.empty{display:flex;align-items:center;justify-content:center;color:var(--tl-muted-foreground);background:var(--tl-muted, #f1f5f9);border-radius:var(--tl-radius);padding:2rem 1rem;text-align:center;min-height:200px;font-size:0.875rem}.selected-date-header{font-size:0.9375rem;font-weight:600;color:var(--tl-foreground, #0f172a);padding-bottom:0.625rem;margin-bottom:0.625rem}.time-slots-list{display:flex;flex-direction:column;gap:0.5rem}.time-slot-item{display:flex;align-items:center;justify-content:space-between;width:100%;padding:0.625rem 0.875rem;background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);text-align:left;cursor:pointer;transition:all 0.15s ease;font-family:inherit}.time-slot-item:hover:not(:disabled){border-color:var(--tl-primary, #e64b12);background:color-mix(in srgb, var(--tl-primary, #e64b12) 5%, var(--tl-background, #ffffff))}.time-slot-item:focus-visible{outline:2px solid var(--tl-primary);outline-offset:2px}.time-slot-item:disabled{cursor:not-allowed;opacity:0.6;background:var(--tl-muted, #f1f5f9)}.time-slot-item.sold-out{opacity:0.6;background:var(--tl-muted, #f1f5f9)}.time-slot-item .slot-time{font-size:0.9375rem;font-weight:600}.slot-status{flex-shrink:0}.slot-status .status-sold-out{font-size:0.75rem}.slot-status .status-available{font-size:0.75rem}.slot-status .status-arrow{font-size:1rem}@media (max-width: 640px){.event-name{font-size:1.25rem}.occurrence-date{font-size:0.875rem}.time-slots-grid{grid-template-columns:repeat(auto-fill, minmax(80px, 1fr))}.time-slot{padding:0.625rem 0.375rem;min-height:3rem}.slot-time{font-size:0.875rem}.calendar-day{font-size:0.75rem}.weekday-header{font-size:0.625rem}.calendar-view.horizontal .calendar-panel{width:100%}}@media (max-width: 767px){.calendar-view.horizontal{flex-direction:column}}.loading-container{padding:1rem 0;min-height:400px}@keyframes skeleton-pulse{0%,100%{opacity:1}50%{opacity:0.5}}.skeleton{background:var(--tl-muted, #f1f5f9);border-radius:var(--tl-radius);animation:skeleton-pulse 1.5s ease-in-out infinite}.skeleton-list{display:flex;flex-direction:column;gap:0.75rem}.skeleton-list-item{height:4.5rem;border-radius:var(--tl-radius)}.skeleton-calendar{border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);padding:1rem;min-height:350px}.skeleton-calendar-header{height:1.75rem;width:50%;margin-bottom:0.75rem;border-radius:var(--tl-radius)}.skeleton-calendar-grid{display:grid;grid-template-columns:repeat(7, 1fr);gap:0.1875rem;margin-top:0.75rem}.skeleton-calendar-day{aspect-ratio:1;border-radius:var(--tl-radius)}.skeleton-slots{display:flex;flex-direction:column;gap:1rem}.skeleton-slots-header{height:1.75rem;width:60%;border-radius:var(--tl-radius);margin-bottom:0.5rem}.skeleton-slots-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(100px, 1fr));gap:0.5rem}.skeleton-slot-item{height:3.5rem;border-radius:var(--tl-radius)}.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 1rem;gap:1rem;text-align:center}.error-icon{width:3rem;height:3rem;color:var(--tl-muted-foreground);stroke-width:1.5}.error-message{color:var(--tl-foreground, #0f172a);font-size:0.9375rem;max-width:400px}.retry-button{margin-top:0.5rem;padding:0.625rem 1.25rem;background:var(--tl-primary, #e64b12);color:var(--tl-primary-foreground, #ffffff);border:none;border-radius:var(--tl-radius);font-family:inherit;font-size:0.875rem;font-weight:500;cursor:pointer;transition:all 0.15s ease}.retry-button:hover{background:color-mix(in srgb, var(--tl-primary, #e64b12) 90%, black)}.retry-button:focus-visible{outline:2px solid var(--tl-primary);outline-offset:2px}";const n=class{constructor(r){t(this,r),this.tlAddToCart=e(this,"tlAddToCart"),this.tlQuantityChange=e(this,"tlQuantityChange"),this.tlError=e(this,"tlError"),this.showButton=!0,this.buttonLabel="Add to Cart",this.ticketTypes=[],this.quantities={},this.loading=!0,this.error=null,this.adding=!1,this.addSuccess=!1}watchPropsChange(){this.loadTicketTypes()}async componentWillLoad(){await this.waitForSDKAndLoad()}async waitForSDKAndLoad(){if(this.eventId&&this.occurrenceId)try{await a(),await this.loadTicketTypes()}catch(t){this.error=t instanceof Error?t.message:"SDK not initialized.",this.loading=!1}}async loadTicketTypes(){try{console.log("[tl-ticket-selector] Loading ticket types...",{eventId:this.eventId,occurrenceId:this.occurrenceId}),this.loading=!0,this.error=null;const t=o().getEventsManager(),e=await t.getTicketTypes(this.eventId,this.occurrenceId);console.log("[tl-ticket-selector] Ticket types loaded:",e.length),this.ticketTypes=e;const r={};e.forEach((t=>{r[t.id]=0})),this.quantities=r}catch(t){console.error("[tl-ticket-selector] Failed to load ticket types:",t),this.error=t instanceof Error?t.message:"Failed to load tickets",this.tlError.emit({message:this.error})}finally{this.loading=!1}}handleQuantityChange(t,e){const r=this.ticketTypes.find((e=>e.id===t));if(!r)return;const a=Math.max(0,Math.min(r.maxPerOrder,(this.quantities[t]||0)+e));this.quantities={...this.quantities,[t]:a};const o=this.calculateTotal();this.tlQuantityChange.emit({ticketTypeId:t,quantity:a,total:o})}calculateTotal(){return this.ticketTypes.reduce(((t,e)=>t+(this.quantities[e.id]||0)*e.price),0)}getTotalItems(){return Object.values(this.quantities).reduce(((t,e)=>t+e),0)}async handleAddToCart(){const t=Object.entries(this.quantities).filter((([t,e])=>e>0)).map((([t,e])=>({ticketTypeId:t,quantity:e})));if(0!==t.length){this.adding=!0,this.addSuccess=!1;try{if(s()){const e=o(),r=e.getCartManager?.();if(r){for(const e of t)await r.addItem(e.ticketTypeId,e.quantity,this.occurrenceId);console.log("[tl-ticket-selector] Items added to cart")}}const e={};this.ticketTypes.forEach((t=>{e[t.id]=0})),this.quantities=e,this.addSuccess=!0,setTimeout((()=>{this.addSuccess=!1}),3e3),this.tlAddToCart.emit({items:t})}catch(t){console.error("[tl-ticket-selector] Failed to add to cart:",t),this.error=t instanceof Error?t.message:"Failed to add to cart",this.tlError.emit({message:this.error})}finally{this.adding=!1}}}formatPrice(t,e="GBP"){return new Intl.NumberFormat("en-GB",{style:"currency",currency:e}).format(t/100)}renderSkeleton(){return r("div",{class:"skeleton-container"},r("div",{class:"skeleton-row"}),r("div",{class:"skeleton-row"}),r("div",{class:"skeleton-row"}))}renderError(){return r("div",{class:"error-state"},r("p",{class:"error-message"},this.error))}renderTicketRow(t){const e="sold_out"===t.availabilityStatus,a=this.quantities[t.id]||0;return r("div",{class:"ticket-row "+(e?"sold-out":""),key:t.id},r("div",{class:"ticket-info"},r("div",{class:"ticket-header"},r("span",{class:"ticket-name"},t.name),"limited"===t.availabilityStatus&&r("span",{class:"status-badge limited"},"Limited"),e&&r("span",{class:"status-badge sold-out"},"Sold Out")),t.description&&r("p",{class:"ticket-description"},t.description),r("p",{class:"ticket-price"},this.formatPrice(t.price,t.currency))),r("div",{class:"quantity-controls"},r("button",{class:"qty-btn",onClick:()=>this.handleQuantityChange(t.id,-1),disabled:e||0===a,"aria-label":"Decrease quantity"},"−"),r("span",{class:"qty-value"},a),r("button",{class:"qty-btn",onClick:()=>this.handleQuantityChange(t.id,1),disabled:e||a>=t.maxPerOrder,"aria-label":"Increase quantity"},"+")))}render(){if(this.loading)return this.renderSkeleton();if(this.error)return this.renderError();const t=this.getTotalItems(),e=this.calculateTotal();return r("div",{class:"ticket-selector"},r("div",{class:"ticket-list"},this.ticketTypes.map((t=>this.renderTicketRow(t)))),this.addSuccess&&r("div",{class:"success-message"},r("svg",{class:"success-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},r("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M5 13l4 4L19 7"})),"Added to cart!"),this.showButton&&r("button",{class:"add-to-cart-btn "+(0===t?"disabled":""),onClick:()=>this.handleAddToCart(),disabled:0===t||this.adding},this.adding?"Adding...":0===t?"Select Tickets":`${this.buttonLabel} - ${this.formatPrice(e)}`))}static get watchers(){return{eventId:[{watchPropsChange:0}],occurrenceId:[{watchPropsChange:0}]}}};n.style=":host{--tl-color-primary:var(--tl-primary, #6366f1);--tl-color-primary-foreground:var(--tl-primary-foreground, #ffffff);--tl-color-background:var(--tl-background, #ffffff);--tl-color-foreground:var(--tl-foreground, #111827);--tl-color-muted:var(--tl-muted, #f3f4f6);--tl-color-muted-foreground:var(--tl-muted-foreground, #6b7280);--tl-color-border:var(--tl-border, #e5e7eb);--tl-color-destructive:var(--tl-error, #ef4444);display:block;font-family:var(--tl-font-family, system-ui, sans-serif)}.ticket-selector{background:var(--tl-color-background, #ffffff)}.skeleton-container{padding:var(--tl-spacing-4, 1rem)}.skeleton-row{height:60px;background:var(--tl-color-muted, #f3f4f6);border-radius:var(--tl-radius-md, 0.5rem);margin-bottom:var(--tl-spacing-3, 0.75rem);animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.5}}.error-state{padding:var(--tl-spacing-4, 1rem);color:var(--tl-color-destructive, #ef4444)}.error-message{margin:0;font-size:14px}.ticket-list{margin-bottom:var(--tl-spacing-4, 1rem)}.ticket-row{display:flex;align-items:center;justify-content:space-between;padding:var(--tl-spacing-3, 0.75rem) 0;border-bottom:1px solid var(--tl-color-border, #e5e7eb)}.ticket-row.sold-out{opacity:0.5}.ticket-info{flex:1;min-width:0}.ticket-header{display:flex;align-items:center;gap:var(--tl-spacing-2, 0.5rem);flex-wrap:wrap}.ticket-name{font-weight:600;color:var(--tl-color-foreground, #111827);font-size:15px}.status-badge{font-size:12px;font-weight:500;padding:2px 8px;border-radius:4px}.status-badge.limited{background-color:var(--tl-color-warning-bg, #fef3c7);color:var(--tl-color-warning, #d97706)}.status-badge.sold-out{background-color:var(--tl-color-destructive-bg, #fee2e2);color:var(--tl-color-destructive, #ef4444)}.ticket-description{margin:var(--tl-spacing-1, 0.25rem) 0 0;font-size:14px;color:var(--tl-color-muted-foreground, #6b7280)}.ticket-price{margin:var(--tl-spacing-1, 0.25rem) 0 0;font-size:14px;font-weight:600;color:var(--tl-color-foreground, #111827)}.quantity-controls{display:flex;align-items:center;gap:var(--tl-spacing-2, 0.5rem);margin-left:var(--tl-spacing-4, 1rem)}.qty-btn{width:32px;height:32px;border-radius:var(--tl-radius-sm, 0.25rem);border:1px solid var(--tl-color-border, #d1d5db);background:var(--tl-color-background, #ffffff);color:var(--tl-color-foreground, #111827);font-size:18px;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color 0.15s, border-color 0.15s}.qty-btn:hover:not(:disabled){background-color:var(--tl-color-muted, #f3f4f6);border-color:var(--tl-color-border-hover, #9ca3af)}.qty-btn:disabled{cursor:not-allowed;opacity:0.5}.qty-value{width:32px;text-align:center;font-weight:600;font-size:16px;color:var(--tl-color-foreground, #111827)}.success-message{display:flex;align-items:center;justify-content:center;gap:var(--tl-spacing-2, 0.5rem);padding:var(--tl-spacing-3, 0.75rem);background-color:var(--tl-color-success, #10b981);color:#ffffff;border-radius:var(--tl-radius-md, 0.5rem);margin-bottom:var(--tl-spacing-3, 0.75rem);font-weight:500;font-size:14px}.success-icon{width:18px;height:18px}.add-to-cart-btn{width:100%;padding:var(--tl-spacing-3, 0.75rem) var(--tl-spacing-4, 1rem);border-radius:var(--tl-radius-md, 0.5rem);border:none;background-color:var(--tl-color-primary, #6366f1);color:var(--tl-color-primary-foreground, #ffffff);font-weight:600;font-size:16px;cursor:pointer;transition:opacity 0.15s, transform 0.1s}.add-to-cart-btn:hover:not(:disabled){opacity:0.9}.add-to-cart-btn:active:not(:disabled){transform:scale(0.98)}.add-to-cart-btn.disabled,.add-to-cart-btn:disabled{background-color:var(--tl-color-muted, #d1d5db);color:var(--tl-color-muted-foreground, #6b7280);cursor:not-allowed}";export{i as tl_occurrence_selector,n as tl_ticket_selector}
@@ -1 +0,0 @@
1
- import{r as e,c as t,h as a,a as s}from"./p-CNX8hZa8.js";import{h as i,g as r}from"./p-CqhvfyKV.js";const o=class{constructor(a){e(this,a),this.tlReady=t(this,"tlReady"),this.tlLoad=t(this,"tlLoad"),this.tlError=t(this,"tlError"),this.tlSeatAdded=t(this,"tlSeatAdded"),this.tlSeatRemoved=t(this,"tlSeatRemoved"),this.tlCartChange=t(this,"tlCartChange"),this.hboUrl="https://checkout.ticketlayer.com",this.apiUrl="https://api.ticketlayer.com",this.height="600px",this.width="100%",this.isReady=!1,this.isLoading=!0,this.error=null,this.seatsInCart=[],this.postToIframe=(e,t={})=>{this.iframeRef?.contentWindow&&this.iframeRef.contentWindow.postMessage({type:e,...t},"*")},this.handleMessage=e=>{if(e.data&&e.data.type)switch(e.data.type){case"seatmap:ready":this.isReady=!0,this.isLoading=!1,this.tlReady.emit(),this.postToIframe("seatmap:set-cart-seats",{seatIds:this.seatsInCart});break;case"seatmap:loaded":this.tlLoad.emit({seatMapId:e.data.seatMapId});break;case"seatmap:error":this.error=e.data.error,this.isLoading=!1,this.tlError.emit({error:e.data.error});break;case"seatmap:add-seat":this.handleAddSeat(e.data.seatId,e.data.ticketTypeId);break;case"seatmap:remove-seat":this.handleRemoveSeat(e.data.seatId)}},this.handleAddSeat=async(e,t)=>{if(!i())return console.warn("[tl-seat-map] SDK not available, cannot add seat"),void this.postToIframe("seatmap:add-seat-failed",{seatId:e,error:"SDK not available"});try{const a=r();await a.getCartManager().addSeat(e,t,this.occurrenceId),this.postToIframe("seatmap:add-seat-confirmed",{seatId:e}),this.seatsInCart=[...this.seatsInCart,e],this.tlSeatAdded.emit({seatId:e,ticketTypeId:t}),this.tlCartChange.emit({seatIds:this.seatsInCart})}catch(t){console.error("[tl-seat-map] Failed to add seat:",t),this.postToIframe("seatmap:add-seat-failed",{seatId:e,error:"Failed to add seat"})}},this.handleRemoveSeat=async e=>{if(!i())return console.warn("[tl-seat-map] SDK not available, cannot remove seat"),void this.postToIframe("seatmap:remove-seat-failed",{seatId:e,error:"SDK not available"});try{const t=r();await t.getCartManager().removeSeat(e,this.occurrenceId),this.postToIframe("seatmap:remove-seat-confirmed",{seatId:e}),this.seatsInCart=this.seatsInCart.filter((t=>t!==e)),this.tlSeatRemoved.emit({seatId:e}),this.tlCartChange.emit({seatIds:this.seatsInCart})}catch(t){console.error("[tl-seat-map] Failed to remove seat:",t),this.postToIframe("seatmap:remove-seat-failed",{seatId:e,error:"Failed to remove seat"})}}}componentWillLoad(){window.addEventListener("message",this.handleMessage)}disconnectedCallback(){window.removeEventListener("message",this.handleMessage)}watchOccurrenceId(){this.isReady=!1,this.isLoading=!0,this.error=null}getIframeSrc(){return`${this.hboUrl}/embed/seats?occurrenceId=${encodeURIComponent(this.occurrenceId)}&apiUrl=${encodeURIComponent(this.apiUrl)}`}render(){return a("div",{key:"c9beadc1792d7825ac3f99e6abc8b181e28fd1b6",class:"seat-map-container",style:{width:this.width,height:this.height}},this.isLoading&&a("div",{key:"ad792ea35f433a268c81722ce4e7d0e34780d337",class:"loading"},a("div",{key:"dd3e0657b16c2f265f59fbaa2ac39c559c2093b7",class:"spinner"}),a("p",{key:"2714e3073d0e5cddc50d530aa1cf46a7f73ba96f"},"Loading seat map...")),this.error&&a("div",{key:"3de9d73ab89a1ee963e73b4192d5c93e9667f11b",class:"error"},a("p",{key:"0fea5c828b5b212ffdb45c9c7702d241e2b79cc4",class:"error-title"},"Error"),a("p",{key:"f2c090b982bb1ee6fb7d347d8860b4ce4798a891",class:"error-message"},this.error)),a("iframe",{key:"8023219fdd467ec736f9627190690a6f73df3bb3",ref:e=>this.iframeRef=e,src:this.getIframeSrc(),class:{"seat-map-iframe":!0,hidden:this.isLoading||!!this.error},title:"Ticketlayer Seat Map",allow:"fullscreen"}))}get el(){return s(this)}static get watchers(){return{occurrenceId:[{watchOccurrenceId:0}]}}};o.style=":host{display:block;font-family:var(--tl-font-family, system-ui, -apple-system, sans-serif)}.seat-map-container{position:relative;overflow:hidden;border-radius:var(--tl-radius-md, 0.5rem);background:var(--tl-color-background, #ffffff)}.seat-map-iframe{width:100%;height:100%;border:none}.seat-map-iframe.hidden{display:none}.loading{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--tl-color-background, #ffffff);color:var(--tl-color-foreground, #0f172a);gap:1rem}.loading p{margin:0;font-size:0.875rem;color:var(--tl-color-muted-foreground, #64748b)}.spinner{width:40px;height:40px;border:3px solid var(--tl-color-border, #e2e8f0);border-top-color:var(--tl-color-primary, #e64b12);border-radius:50%;animation:tl-seat-map-spin 1s linear infinite}@keyframes tl-seat-map-spin{to{transform:rotate(360deg)}}.error{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--tl-color-background, #ffffff);color:var(--tl-color-error, #ef4444);padding:1.5rem;text-align:center}.error-title{margin:0 0 0.5rem;font-size:1.125rem;font-weight:600}.error-message{margin:0;font-size:0.875rem;opacity:0.9}";export{o as tl_seat_map}
@@ -1 +0,0 @@
1
- function n(n,e="GBP"){if(null==n||""===n)return"";const r=new Intl.NumberFormat("en-GB",{style:"currency",currency:e});if("number"==typeof n)return r.format(n/100);const t=Number(n);return Number.isNaN(t)?String(n):r.format(t)}function e(n){return new Date(n).toLocaleDateString("en-GB",{weekday:"short",day:"numeric",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit"})}function r(n){return new Date(n).toLocaleDateString("en-GB",{day:"numeric",month:"short",year:"numeric"})}function t(n){return(n.items??[]).filter((n=>!n.type||"ticket"===n.type))}function u(n){return t(n).reduce(((n,e)=>n+(Number(e.quantity)||0)),0)||n.tickets?.length||0}function c(n){return n.eventName||t(n)[0]?.name||n.items?.[0]?.name||null}function i(n,e){const r=n?.customerEmail||n?.customer?.email;if(r)return r;const t=e;return t?.email||null}function s(n){return n?n.replace(/_/g," ").replace(/^\w/,(n=>n.toUpperCase())):""}function a(n){switch(n){case"confirmed":return"success";case"completed":case"fulfilled":return"info";case"pending":case"processing":return"warning";case"cancelled":case"expired":case"failed":return"error";default:return"muted"}}function o(n,e){return n instanceof Error&&n.message?n.message:e}function f(n){return!(!n||"object"!=typeof n||401!==n.status&&403!==n.status&&"NO_SESSION"!==n.code&&"NOT_AUTHENTICATED"!==n.code)}async function l(n,e,r=12){const t=n.getEventsManager(),u=(await t.list({limit:r})).items.slice(0,r);for(const n of u){const r=await t.get(n.id).catch((()=>null)),u=r?.occurrences?.find((n=>n.id===e));if(u)return{eventId:r?.id??n.id,eventName:r?.name??n.name??"",startsAt:u.startsAt??null}}return null}export{n as a,s as b,e as c,i as d,o as e,r as f,t as g,f as i,c as o,l as r,a as s,u as t}
@@ -1,3 +0,0 @@
1
- const t=()=>{},e=":root{--tl-font-family:system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;--tl-font-family-mono:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;--tl-primary:#6366f1;--tl-primary-foreground:#ffffff;--tl-secondary:#f3f4f6;--tl-secondary-foreground:#111827;--tl-background:#ffffff;--tl-foreground:#111827;--tl-muted:#f9fafb;--tl-muted-foreground:#6b7280;--tl-border:#e5e7eb;--tl-success:#10b981;--tl-success-foreground:#ffffff;--tl-warning:#f59e0b;--tl-warning-foreground:#ffffff;--tl-error:#ef4444;--tl-error-foreground:#ffffff;--tl-radius-sm:0.25rem;--tl-radius-md:0.5rem;--tl-radius-lg:0.75rem;--tl-spacing-1:0.25rem;--tl-spacing-2:0.5rem;--tl-spacing-3:0.75rem;--tl-spacing-4:1rem;--tl-spacing-6:1.5rem;--tl-spacing-8:2rem}";function n(t,e,n){const o="undefined"!=typeof HTMLElement?HTMLElement.prototype:null;for(;t&&t!==o;){const o=Object.getOwnPropertyDescriptor(t,e);if(o&&(!n||o.get))return o;t=Object.getPrototypeOf(t)}}var o,l=(t,e)=>{var o;Object.entries(null!=(o=e.o.t)?o:{}).map((([o,[l]])=>{if(31&l||32&l){const l=t[o],s=n(Object.getPrototypeOf(t),o,!0)||Object.getOwnPropertyDescriptor(t,o);s&&Object.defineProperty(t,o,{get(){return s.get.call(this)},set(t){s.set.call(this,t)},configurable:!0,enumerable:!0}),e.l.has(o)?t[o]=e.l.get(o):void 0!==l&&(t[o]=l)}}))},s=t=>{if(t.__stencil__getHostRef)return t.__stencil__getHostRef()},r=(t,e)=>{e&&(t.__stencil__getHostRef=()=>e,e.i=t,512&e.o.u&&l(t,e))},i=(t,e)=>e in t,c=(t,e)=>(0,console.error)(t,e),f=new Map,u=new Map,a=new Map,d="slot-fb{display:contents}slot-fb[hidden]{display:none}",p="undefined"!=typeof window?window:{},m={u:0,p:"",jmp:t=>t(),raf:t=>requestAnimationFrame(t),ael:(t,e,n,o)=>t.addEventListener(e,n,o),rel:(t,e,n,o)=>t.removeEventListener(e,n,o),ce:(t,e)=>new CustomEvent(t,e)},h=t=>Promise.resolve(t),v=(()=>{try{return!!p.document.adoptedStyleSheets&&(new CSSStyleSheet,"function"==typeof(new CSSStyleSheet).replaceSync)}catch(t){}return!1})(),y=!!v&&(()=>!!p.document&&Object.getOwnPropertyDescriptor(p.document.adoptedStyleSheets,"length").writable)(),b=!1,g=[],$=[],w=()=>{var t;return(null==(t=p.document)?void 0:t.hidden)?k(O):m.raf(O)},S=(t,e)=>n=>{t.push(n),b||(b=!0,e&&4&m.u?k(O):w())},j=t=>{for(let e=0;e<t.length;e++)try{t[e](performance.now())}catch(t){c(t)}t.length=0},O=()=>{j(g),j($),(b=g.length>0)&&w()},k=t=>h().then(t),M=S($,!0);function N(){var t;const n=this.attachShadow({mode:"open"});if(void 0===o&&(o=null!=(t=function(t){if(!v)return;const e=new CSSStyleSheet;return e.replaceSync(t),e}(e))?t:null),o)y?n.adoptedStyleSheets.push(o):n.adoptedStyleSheets=[...n.adoptedStyleSheets,o];else if(!v){const t=document.createElement("style");t.innerHTML=e,n.prepend(t)}}var C=t=>{const e=L(t,"childNodes");t.tagName&&t.tagName.includes("-")&&t["s-cr"]&&"SLOT-FB"!==t.tagName&&E(e,t.tagName).forEach((t=>{1===t.nodeType&&"SLOT-FB"===t.tagName&&(t.hidden=!!R(t,F(t),!1).length)}));let n=0;for(n=0;n<e.length;n++){const t=e[n];1===t.nodeType&&L(t,"childNodes").length&&C(t)}};function E(t,e,n){let o,l=0,s=[];for(;l<t.length;l++){if(o=t[l],o["s-sr"]&&(!e||o["s-hn"]===e)&&(void 0===n||F(o)===n)&&(s.push(o),void 0!==n))return s;s=[...s,...E(L(o,"childNodes"),e,n)]}return s}var R=(t,e,n=!0)=>{const o=[];(n&&t["s-sr"]||!t["s-sr"])&&o.push(t);let l=t;for(;l=l.nextSibling;)F(l)!==e||!n&&l["s-sr"]||o.push(l);return o},T=(t,e)=>1===t.nodeType?null===t.getAttribute("slot")&&""===e||t.getAttribute("slot")===e:t["s-sn"]===e||""===e,F=t=>"string"==typeof t["s-sn"]?t["s-sn"]:1===t.nodeType&&t.getAttribute("slot")||void 0;function L(t,e){if("__"+e in t){const n=t["__"+e];return"function"!=typeof n?n:n.bind(t)}return"function"!=typeof t[e]?t[e]:t[e].bind(t)}function x(t){var e,n,o;return null!=(o=null==(n=null==(e=t.head)?void 0:e.querySelector('meta[name="csp-nonce"]'))?void 0:n.getAttribute("content"))?o:void 0}var A,D,H=new WeakMap,P=t=>"sc-"+t.m,U=t=>"object"==(t=typeof t)||"function"===t,B=(t,e,...n)=>{let o=null,l=null,s=null,r=!1,i=!1;const f=[],u=e=>{for(let n=0;n<e.length;n++)if(o=e[n],Array.isArray(o))u(o);else if(null!=o&&"boolean"!=typeof o){if(r="function"!=typeof t&&!U(o))o+="";else if("function"!=typeof t&&void 0===o.u){c("Invalid vNode child");continue}r&&i?f[f.length-1].h+=o:f.push(r?_(null,o):o),i=r}};if(u(n),e){e.key&&(l=e.key),e.name&&(s=e.name);{const t=e.className||e.class;t&&(e.class="object"!=typeof t?t:Object.keys(t).filter((e=>t[e])).join(" "))}}const a=_(t,null);return a.v=e,f.length>0&&(a.$=f),a.S=l,a.j=s,a},_=(t,e)=>({u:0,O:t,h:null!=e?e:null,k:null,$:null,v:null,S:null,j:null}),W={},z=t=>{if(!t)return;const e=Object.keys(t);if(0===e.length)return;let n=!1;for(const o of e){if(n)break;for(const e of t[o])if("string"==typeof e){n=!0;break}}if(!n)return t;const o={};for(const n of e)o[n]=t[n].map((t=>"string"==typeof t?{[t]:0}:t));return o},I=(t,e)=>null==t||U(t)?t:4&e?"false"!==t&&(""===t||!!t):2&e?"string"==typeof t?parseFloat(t):"number"==typeof t?t:NaN:1&e?t+"":t,V=t=>{var e;return null==(e=s(t))?void 0:e.$hostElement$},q=(t,e)=>{const n=V(t);return{emit:t=>Y(n,e,{bubbles:!0,composed:!0,cancelable:!0,detail:t})}},Y=(t,e,n)=>{const o=m.ce(e,n);return t.dispatchEvent(o),o},G=(t,e,n,o,l,r)=>{if(n===o)return;let c=i(t,e),f=e.toLowerCase();if("class"===e){const e=t.classList,l=Q(n);let s=Q(o);e.remove(...l.filter((t=>t&&!s.includes(t)))),e.add(...s.filter((t=>t&&!l.includes(t))))}else if("style"===e){for(const e in n)o&&null!=o[e]||(e.includes("-")?t.style.removeProperty(e):t.style[e]="");for(const e in o)n&&o[e]===n[e]||(e.includes("-")?t.style.setProperty(e,o[e]):t.style[e]=o[e])}else if("key"===e);else if("ref"===e)o&&$t(o,t);else if(c||"o"!==e[0]||"n"!==e[1]){if("a"===e[0]&&e.startsWith("attr:")){const n=e.slice(5);let l;{const e=s(t);if(e&&e.o&&e.o.t){const t=e.o.t[n];t&&t[1]&&(l=t[1])}}return l||(l=n.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),void(null==o||!1===o?!1===o&&""!==t.getAttribute(l)||t.removeAttribute(l):t.setAttribute(l,!0===o?"":o))}if("p"===e[0]&&e.startsWith("prop:")){const n=e.slice(5);try{t[n]=o}catch(t){}return}{const s=U(o);if((c||s&&null!==o)&&!l)try{if(t.tagName.includes("-"))t[e]!==o&&(t[e]=o);else{const l=null==o?"":o;"list"===e?c=!1:null!=n&&t[e]===l||("function"==typeof t.__lookupSetter__(e)?t[e]=l:t.setAttribute(e,l))}}catch(t){}null==o||!1===o?(!1!==o||""===t.getAttribute(e)||4&r&&!J(e))&&t.removeAttribute(e):(!c||4&r||l)&&!s&&1===t.nodeType&&t.setAttribute(e,o=!0===o?"":o)}}else if(e="-"===e[2]?e.slice(3):i(p,f)?f.slice(2):f[2]+e.slice(3),n||o){const l=e.endsWith(X);e=e.replace(tt,""),n&&m.rel(t,e,n,l),o&&m.ael(t,e,o,l)}},Z=new Set(["draggable","contenteditable","spellcheck"]),J=t=>Z.has(t)||t.startsWith("aria-"),K=/\s/,Q=t=>("object"==typeof t&&t&&"baseVal"in t&&(t=t.baseVal),t&&"string"==typeof t?t.split(K):[]),X="Capture",tt=RegExp(X+"$"),et=(t,e,n)=>{const o=11===e.k.nodeType&&e.k.host?e.k.host:e.k,l=t&&t.v||{},s=e.v||{};for(const t of nt(Object.keys(l)))t in s||G(o,t,l[t],void 0,n,e.u);for(const t of nt(Object.keys(s)))G(o,t,l[t],s[t],n,e.u)};function nt(t){return t.includes("ref")?[...t.filter((t=>"ref"!==t)),"ref"]:t}var ot=!1,lt=!1,st=!1,rt=!1,it=[],ct=[],ft=(t,e,n)=>{var o;const l=e.$[n];let s,r,i,c=0;if(ot||(st=!0,"slot"===l.O&&(l.u|=l.$?2:1)),null!=l.h)s=l.k=p.document.createTextNode(l.h);else if(1&l.u)s=l.k=p.document.createTextNode(""),et(null,l,rt);else{if(rt||(rt="svg"===l.O),!p.document)throw Error("You are trying to render a Stencil component in an environment that doesn't support the DOM.");if(s=l.k=p.document.createElementNS(rt?"http://www.w3.org/2000/svg":"http://www.w3.org/1999/xhtml",!ot&&2&l.u?"slot-fb":l.O),rt&&"foreignObject"===l.O&&(rt=!1),et(null,l,rt),l.$){const e="template"===l.O?s.content:s;for(c=0;c<l.$.length;++c)r=ft(t,l,c),r&&e.appendChild(r)}"svg"===l.O?rt=!1:"foreignObject"===s.tagName&&(rt=!0)}return s["s-hn"]=D,3&l.u&&(s["s-sr"]=!0,s["s-cr"]=A,s["s-sn"]=l.j||"",s["s-rf"]=null==(o=l.v)?void 0:o.ref,function(t){if(t.assignedElements||t.assignedNodes||!t["s-sr"])return;const e=e=>function(t){const n=[],o=this["s-sn"];(null==t?void 0:t.flatten)&&console.error("\n Flattening is not supported for Stencil non-shadow slots.\n You can use `.childNodes` to nested slot fallback content.\n If you have a particular use case, please open an issue on the Stencil repo.\n ");const l=this["s-cr"].parentElement;return(l.__childNodes?l.childNodes:(t=>{const e=[];for(let n=0;n<t.length;n++){const o=t[n]["s-nr"]||void 0;o&&o.isConnected&&e.push(o)}return e})(l.childNodes)).forEach((t=>{o===F(t)&&n.push(t)})),e?n.filter((t=>1===t.nodeType)):n}.bind(t);t.assignedElements=e(!0),t.assignedNodes=e(!1)}(s),i=t&&t.$&&t.$[n],i&&i.O===l.O&&t.k&&ut(t.k)),s},ut=t=>{m.u|=1;const e=t.closest(D.toLowerCase());if(null!=e){const n=Array.from(e.__childNodes||e.childNodes).find((t=>t["s-cr"])),o=Array.from(t.__childNodes||t.childNodes);for(const t of n?o.reverse():o)null!=t["s-sh"]&&(wt(e,t,null!=n?n:null),t["s-sh"]=void 0,st=!0)}m.u&=-2},at=(t,e)=>{m.u|=1;const n=Array.from(t.__childNodes||t.childNodes);if(t["s-sr"]){let e=t;for(;e=e.nextSibling;)e&&e["s-sn"]===t["s-sn"]&&e["s-sh"]===D&&n.push(e)}for(let t=n.length-1;t>=0;t--){const o=n[t];o["s-hn"]!==D&&o["s-ol"]&&(wt(ht(o).parentNode,o,ht(o)),o["s-ol"].remove(),o["s-ol"]=void 0,o["s-sh"]=void 0,st=!0),e&&at(o,e)}m.u&=-2},dt=(t,e,n,o,l,s)=>{let r,i=t["s-cr"]&&t["s-cr"].parentNode||t;for(i.shadowRoot&&i.tagName===D&&(i=i.shadowRoot),"template"===n.O&&(i=i.content);l<=s;++l)o[l]&&(r=ft(null,n,l),r&&(o[l].k=r,wt(i,r,ht(e))))},pt=(t,e,n)=>{for(let o=e;o<=n;++o){const e=t[o];if(e){const t=e.k;gt(e),t&&(lt=!0,t["s-ol"]?t["s-ol"].remove():at(t,!0),t.remove())}}},mt=(t,e,n=!1)=>t.O===e.O&&("slot"===t.O?t.j===e.j:n?(n&&!t.S&&e.S&&(t.S=e.S),!0):t.S===e.S),ht=t=>t&&t["s-ol"]||t,vt=(t,e,n=!1)=>{const o=e.k=t.k,l=t.$,s=e.$,r=e.O,i=e.h;let c;null==i?(rt="svg"===r||"foreignObject"!==r&&rt,"slot"!==r||ot||t.j!==e.j&&(e.k["s-sn"]=e.j||"",ut(e.k.parentElement)),et(t,e,rt),null!==l&&null!==s?((t,e,n,o,l=!1)=>{let s,r,i=0,c=0,f=0,u=0,a=e.length-1,d=e[0],p=e[a],m=o.length-1,h=o[0],v=o[m];const y="template"===n.O?t.content:t;for(;i<=a&&c<=m;)if(null==d)d=e[++i];else if(null==p)p=e[--a];else if(null==h)h=o[++c];else if(null==v)v=o[--m];else if(mt(d,h,l))vt(d,h,l),d=e[++i],h=o[++c];else if(mt(p,v,l))vt(p,v,l),p=e[--a],v=o[--m];else if(mt(d,v,l))"slot"!==d.O&&"slot"!==v.O||at(d.k.parentNode,!1),vt(d,v,l),wt(y,d.k,p.k.nextSibling),d=e[++i],v=o[--m];else if(mt(p,h,l))"slot"!==d.O&&"slot"!==v.O||at(p.k.parentNode,!1),vt(p,h,l),wt(y,p.k,d.k),p=e[--a],h=o[++c];else{for(f=-1,u=i;u<=a;++u)if(e[u]&&null!==e[u].S&&e[u].S===h.S){f=u;break}f>=0?(r=e[f],r.O!==h.O?s=ft(e&&e[c],n,c):(vt(r,h,l),e[f]=void 0,s=r.k),h=o[++c]):(s=ft(e&&e[c],n,c),h=o[++c]),s&&wt(ht(d.k).parentNode,s,ht(d.k))}i>a?dt(t,null==o[m+1]?null:o[m+1].k,n,o,c,m):c>m&&pt(e,i,a)})(o,l,e,s,n):null!==s?(null!==t.h&&(o.textContent=""),dt(o,null,e,s,0,s.length-1)):!n&&null!==l&&pt(l,0,l.length-1),rt&&"svg"===r&&(rt=!1)):(c=o["s-cr"])?c.parentNode.textContent=i:t.h!==i&&(o.data=i)},yt=[],bt=t=>{let e,n,o;const l=t.__childNodes||t.childNodes;for(const t of l){if(t["s-sr"]&&(e=t["s-cr"])&&e.parentNode){n=e.parentNode.__childNodes||e.parentNode.childNodes;const l=t["s-sn"];for(o=n.length-1;o>=0;o--)if(e=n[o],!e["s-cn"]&&!e["s-nr"]&&e["s-hn"]!==t["s-hn"]&&(!e["s-sh"]||e["s-sh"]!==t["s-hn"]||""!==l&&F(e)===l))if(T(e,l)){let n=yt.find((t=>t.M===e));lt=!0,e["s-sn"]=e["s-sn"]||l,n?(n.M["s-sh"]=t["s-hn"],n.N=t):(e["s-sh"]=t["s-hn"],yt.push({N:t,M:e})),e["s-sr"]&&yt.map((t=>{T(t.M,e["s-sn"])&&(n=yt.find((t=>t.M===e)),n&&!t.N&&(t.N=n.N))}))}else yt.some((t=>t.M===e))||yt.push({M:e})}1===t.nodeType&&bt(t)}},gt=t=>{t.v&&t.v.ref&&it.push((()=>t.v.ref(null))),t.$&&t.$.map(gt)},$t=(t,e)=>{ct.push((()=>t(e)))},wt=(t,e,n,o)=>{if("string"==typeof e["s-sn"]){t.insertBefore(e,n);const{slotNode:l}=function(t,e){var n;if(!(e=e||(null==(n=t["s-ol"])?void 0:n.parentElement)))return{slotNode:null,slotName:""};const o=t["s-sn"]=F(t)||"";return{slotNode:E(L(e,"childNodes"),e.tagName,o)[0],slotName:o}}(e);return l&&!o&&function(t){t.dispatchEvent(new CustomEvent("slotchange",{bubbles:!1,cancelable:!1,composed:!1}))}(l),e}return(null==t?void 0:t.__insertBefore)?t.__insertBefore(e,n):null==t?void 0:t.insertBefore(e,n)},St=(t,e)=>{if(e&&!t.C&&e["s-p"]){const n=e["s-p"].push(new Promise((o=>t.C=()=>{e["s-p"].splice(n-1,1),o()})))}},jt=(t,e)=>{if(t.u|=16,4&t.u)return void(t.u|=512);St(t,t.R);const n=()=>Ot(t,e);if(!e)return M(n);queueMicrotask((()=>{n()}))},Ot=(t,e)=>{const n=t.$hostElement$,o=t.i;if(!o)throw Error(`Can't render component <${n.tagName.toLowerCase()} /> with invalid Stencil runtime! Make sure this imported component is compiled with a \`externalRuntime: true\` flag. For more information, please refer to https://stenciljs.com/docs/custom-elements#externalruntime`);let l;return e?(t.T&&(t.T=!1,Tt(o,"connectedCallback",void 0,n)),t.F.length&&t.F.forEach((t=>t(n))),l=Tt(o,"componentWillLoad",void 0,n)):l=Tt(o,"componentWillUpdate",void 0,n),l=kt(l,(()=>Tt(o,"componentWillRender",void 0,n))),kt(l,(()=>Nt(t,o,e)))},kt=(t,e)=>Mt(t)?t.then(e).catch((t=>{console.error(t),e()})):e(),Mt=t=>t instanceof Promise||t&&t.then&&"function"==typeof t.then,Nt=async(t,e,n)=>{var o;const l=t.$hostElement$,s=l["s-rc"];n&&(t=>{const e=t.o,n=t.$hostElement$,o=e.u,l=((t,e)=>{var n,o,l;const s=P(e),r=a.get(s);if(!p.document)return s;if(t=11===t.nodeType?t:p.document,r)if("string"==typeof r){let l,i=H.get(t=t.head||t);if(i||H.set(t,i=new Set),!i.has(s)){l=p.document.createElement("style"),l.textContent=r;const c=null!=(n=m.L)?n:x(p.document);if(null!=c&&l.setAttribute("nonce",c),!(1&e.u))if("HEAD"===t.nodeName){const e=t.querySelectorAll("link[rel=preconnect]"),n=e.length>0?e[e.length-1].nextSibling:t.querySelector("style");t.insertBefore(l,(null==n?void 0:n.parentNode)===t?n:null)}else if("host"in t)if(v){const e=new(null!=(o=t.defaultView)?o:t.ownerDocument.defaultView).CSSStyleSheet;e.replaceSync(r),y?t.adoptedStyleSheets.unshift(e):t.adoptedStyleSheets=[e,...t.adoptedStyleSheets]}else{const e=t.querySelector("style");e?e.textContent=r+e.textContent:t.prepend(l)}else t.append(l);1&e.u&&t.insertBefore(l,null),4&e.u&&(l.textContent+=d),i&&i.add(s)}}else{let e=H.get(t);if(e||H.set(t,e=new Set),!e.has(s)){const n=null!=(l=t.defaultView)?l:t.ownerDocument.defaultView;let o;if(r.constructor===n.CSSStyleSheet)o=r;else{o=new n.CSSStyleSheet;for(let t=0;t<r.cssRules.length;t++)o.insertRule(r.cssRules[t].cssText,t)}y?t.adoptedStyleSheets.push(o):t.adoptedStyleSheets=[...t.adoptedStyleSheets,o],e.add(s)}}return s})(n.shadowRoot?n.shadowRoot:n.getRootNode(),e);10&o&&(n["s-sc"]=l,n.classList.add(l+"-h"))})(t);Ct(t,e,l,n),s&&(s.map((t=>t())),l["s-rc"]=void 0);{const e=null!=(o=l["s-p"])?o:[],n=()=>Et(t);0===e.length?n():(Promise.all(e).then(n).catch(n),t.u|=4,e.length=0)}},Ct=(t,e,n,o)=>{try{e=e.render(),t.u&=-17,t.u|=2,((t,e,n=!1)=>{var o,l,s,r,i;const c=t.$hostElement$,f=t.o,u=t.A||_(null,null),a=(t=>t&&t.O===W)(e)?e:B(null,null,e);if(D=c.tagName,n&&a.v)for(const t of Object.keys(a.v))c.hasAttribute(t)&&!["key","ref","style","class"].includes(t)&&(a.v[t]=c[t]);if(a.O=null,a.u|=4,t.A=a,a.k=u.k=c.shadowRoot||c,ot=!(!(1&f.u)||128&f.u),A=c["s-cr"],lt=!1,vt(u,a,n),m.u|=1,st){bt(a.k);for(const t of yt){const e=t.M;if(!e["s-ol"]&&p.document){const t=p.document.createTextNode("");t["s-nr"]=e,wt(e.parentNode,e["s-ol"]=t,e,n)}}for(const t of yt){const e=t.M,i=t.N;if(1===e.nodeType&&n&&(e["s-ih"]=null!=(o=e.hidden)&&o),i){const t=i.parentNode;let o=i.nextSibling;if(o&&1===o.nodeType){let n=null==(l=e["s-ol"])?void 0:l.previousSibling;for(;n;){let l=null!=(s=n["s-nr"])?s:null;if(l&&l["s-sn"]===e["s-sn"]&&t===(l.__parentNode||l.parentNode)){for(l=l.nextSibling;l===e||(null==l?void 0:l["s-sr"]);)l=null==l?void 0:l.nextSibling;if(!l||!l["s-nr"]){o=l;break}}n=n.previousSibling}}if((!o&&t!==(e.__parentNode||e.parentNode)||(e.__nextSibling||e.nextSibling)!==o)&&e!==o){if(wt(t,e,o,n),8===e.nodeType&&e.nodeValue.startsWith("s-nt-")){const t=p.document.createTextNode(e.nodeValue.replace(/^s-nt-/,""));t["s-hn"]=e["s-hn"],t["s-sn"]=e["s-sn"],t["s-sh"]=e["s-sh"],t["s-sr"]=e["s-sr"],t["s-ol"]=e["s-ol"],t["s-ol"]["s-nr"]=t,wt(e.parentNode,t,e,n),e.parentNode.removeChild(e)}1===e.nodeType&&"SLOT-FB"!==e.tagName&&(e.hidden=null!=(r=e["s-ih"])&&r)}e&&"function"==typeof i["s-rf"]&&i["s-rf"](i)}else 1===e.nodeType&&(e.hidden=!0)}}if(lt&&C(a.k),m.u&=-2,yt.length=0,!ot&&!(1&f.u)&&c["s-cr"]){const t=a.k.__childNodes||a.k.childNodes;for(const e of t)if(e["s-hn"]!==D&&!e["s-sh"])if(n&&null==e["s-ih"]&&(e["s-ih"]=null!=(i=e.hidden)&&i),1===e.nodeType)e.hidden=!0;else if(3===e.nodeType&&e.nodeValue.trim()){const t=p.document.createComment("s-nt-"+e.nodeValue);t["s-sn"]=e["s-sn"],wt(e.parentNode,t,e,n),e.parentNode.removeChild(e)}}A=void 0,it.forEach((t=>t())),it.length=0,ct.forEach((t=>t())),ct.length=0})(t,e,o)}catch(e){c(e,t.$hostElement$)}return null},Et=t=>{const e=t.$hostElement$,n=t.i,o=t.R;Tt(n,"componentDidRender",void 0,e),64&t.u?Tt(n,"componentDidUpdate",void 0,e):(t.u|=64,Ft(e),Tt(n,"componentDidLoad",void 0,e),t.D(e),o||Rt()),t.C&&(t.C(),t.C=void 0),512&t.u&&k((()=>jt(t,!1))),t.u&=-517},Rt=()=>{k((()=>Y(p,"appload",{detail:{namespace:"ticketlayer-elements"}})))},Tt=(t,e,n,o)=>{if(t&&t[e])try{return t[e](n)}catch(t){c(t,o)}},Ft=t=>t.classList.add("hydrated"),Lt=(t,e,n,o)=>{const l=s(t);if(!l)return;if(!l)throw Error(`Couldn't find host element for "${o.m}" as it is unknown to this Stencil runtime. This usually happens when integrating a 3rd party Stencil component with another Stencil component or application. Please reach out to the maintainers of the 3rd party Stencil component or report this on the Stencil Discord server (https://chat.stenciljs.com) or comment on this similar [GitHub issue](https://github.com/stenciljs/core/issues/5457).`);const r=l.$hostElement$,i=l.l.get(e),f=l.u,u=l.i;if(n=I(n,o.t[e][0]),!(8&f&&void 0!==i||n===i||Number.isNaN(i)&&Number.isNaN(n))){if(l.l.set(e,n),o.H){const t=o.H[e];t&&t.map((t=>{try{const[[o,s]]=Object.entries(t);(128&f||1&s)&&(u?u[o](n,i,e):l.F.push((()=>{l.i[o](n,i,e)})))}catch(t){c(t,r)}}))}if(2&f){if(u.componentShouldUpdate&&!1===u.componentShouldUpdate(n,i,e)&&!(16&f))return;16&f||jt(l,!1)}}},xt=(t,e,o)=>{var l,r;const i=t.prototype;{t.watchers&&!e.H&&(e.H=z(t.watchers)),t.deserializers&&!e.P&&(e.P=t.deserializers),t.serializers&&!e.U&&(e.U=t.serializers);const c=Object.entries(null!=(l=e.t)?l:{});if(c.map((([t,[l]])=>{if(31&l||2&o&&32&l){const{get:r,set:c}=n(i,t)||{};r&&(e.t[t][0]|=2048),c&&(e.t[t][0]|=4096),(1&o||!r)&&Object.defineProperty(i,t,{get(){{if(!(2048&e.t[t][0]))return((t,e)=>s(this).l.get(e))(0,t);const n=s(this),o=n?n.i:i;if(!o)return;return o[t]}},configurable:!0,enumerable:!0}),Object.defineProperty(i,t,{set(n){const r=s(this);if(r){if(c)return void 0===(32&l?this[t]:r.$hostElement$[t])&&r.l.get(t)&&(n=r.l.get(t)),c.call(this,I(n,l)),void Lt(this,t,n=32&l?this[t]:r.$hostElement$[t],e);{if(!(1&o&&4096&e.t[t][0]))return Lt(this,t,n,e),void(1&o&&!r.i&&r.F.push((()=>{4096&e.t[t][0]&&r.i[t]!==r.l.get(t)&&(r.i[t]=n)})));const s=I(n,l),i=n=>{const o=r.i[t];!r.l.get(t)&&o&&r.l.set(t,o),r.i[t]=n,Lt(this,t,r.i[t],e)};r.i?i(s):(r.l.set(t,s),r.F.push((()=>{const e=r.l.get(t);r.i[t]!==e&&i(e)})))}}}})}})),1&o){const n=new Map;i.attributeChangedCallback=function(t,o,l){m.jmp((()=>{var r;const f=n.get(t),u=s(this);if(this.hasOwnProperty(f)&&(l=this[f],delete this[f]),i.hasOwnProperty(f)&&"number"==typeof this[f]&&this[f]==l)return;if(null==f){const n=null==u?void 0:u.u;if(u&&n&&!(8&n)&&l!==o){const s=u.i,i=null==(r=e.H)?void 0:r[t];null==i||i.forEach((e=>{const[[r,i]]=Object.entries(e);null!=s[r]&&(128&n||1&i)&&s[r].call(s,l,o,t)}))}return}const a=c.find((([t])=>t===f)),d=4&(a?a[1][0]:0),p=d&&null===l&&void 0===this[f];d&&(l=null!==l&&"false"!==l);const m=Object.getOwnPropertyDescriptor(i,f);p||l==this[f]||m.get&&!m.set||(this[f]=l)}))},t.observedAttributes=Array.from(new Set([...Object.keys(null!=(r=e.H)?r:{}),...c.filter((([t,e])=>31&e[0])).map((([t,e])=>{const o=e[1]||t;return n.set(o,t),o}))]))}}return t},At=async(t,e,n)=>{var o;let l;try{if(!(32&e.u)){if(e.u|=32,e.u&=-1025,n.B){const s=((t,e)=>{var n;const o=t.m.replace(/-/g,"_"),l=t.B;if(!l)return;const s=f.get(l);if(s)return s[o];const r=null!=(n=u.get(l))?n:0,i=[r>0?"s-retry="+r:"",""].filter(Boolean).join("&");
2
- /*!__STENCIL_STATIC_IMPORT_SWITCH__*/
3
- return import(`./${l}.entry.js${i?"?"+i:""}`).then((t=>(u.delete(l),f.set(l,t),t[o])),(t=>{u.set(l,r+1),c(t,e.$hostElement$)}))})(n,e);if(s&&"then"in s){const t=()=>{};l=await s,t()}else l=s;if(!l)throw e.u&=-33,e._=(null!=(o=e._)?o:0)+1,e._<3&&(e.u|=1024),Error(`Constructor for "${n.m}#${e.W}" was not found`);l.isProxied||(n.H=z(l.watchers),n.U=l.serializers,n.P=l.deserializers,xt(l,n,2),l.isProxied=!0);const r=()=>{};e.u|=8;try{new l(e)}catch(e){c(e,t)}e.u&=-9,e.u|=128,r(),4&n.u?e.T=!0:Dt(e.i,t)}else l=t.constructor,customElements.whenDefined(t.localName).then((()=>e.u|=128));if(l&&l.style){let t;"string"==typeof l.style&&(t=l.style);const e=P(n);if(!a.has(e)){const o=()=>{};((t,e,n)=>{let o=a.get(t);v&&n?(o=o||new CSSStyleSheet,"string"==typeof o?o=e:o.replaceSync(e)):o=e,a.set(t,o)})(e,t,!!(1&n.u)),o()}}}const s=e.R,r=()=>jt(e,!0);s&&s["s-rc"]?s["s-rc"].push(r):r()}catch(n){c(n,t),e.C&&(e.C(),e.C=void 0),!e.D||1024&e.u||e.D(t)}},Dt=(t,e)=>{Tt(t,"connectedCallback",void 0,e)},Ht=(t,e)=>{Tt(t,"disconnectedCallback",void 0,e||t)},Pt=(t,e={})=>{var n;if(!p.document)return void console.warn("Stencil: No document found. Skipping bootstrapping lazy components.");const o=[],l=e.exclude||[],r=p.customElements,i=p.document.head,c=i.querySelector("meta[charset]"),f=p.document.createElement("style"),u=[];let a,h=!0;Object.assign(m,e),m.p=new URL(e.resourcesUrl||"./",p.document.baseURI).href;let v=!1;if(t.map((t=>{t[1].map((e=>{var n,i;const c={u:e[0],m:e[1],t:e[2],I:e[3]};4&c.u&&(v=!0),c.t=e[2],c.H=z(e[4]),c.U=null!=(n=e[5])?n:{},c.P=null!=(i=e[6])?i:{};const f=c.m,d=class extends HTMLElement{"s-p";"s-rc";hasRegisteredEventListeners=!1;constructor(t){if(super(t),((t,e)=>{const n={u:0,$hostElement$:t,o:e,l:new Map,V:new Map};n.q=new Promise((t=>n.D=t)),t["s-p"]=[],t["s-rc"]=[],n.F=[];const o=n;t.__stencil__getHostRef=()=>o})(t=this,c),1&c.u)if(t.shadowRoot){if("open"!==t.shadowRoot.mode)throw Error(`Unable to re-use existing shadow root for ${c.m}! Mode is set to ${t.shadowRoot.mode} but Stencil only supports open shadow roots.`)}else N.call(t,c)}connectedCallback(){s(this)&&(this.hasRegisteredEventListeners||(this.hasRegisteredEventListeners=!0),a&&(clearTimeout(a),a=null),h?u.push(this):m.jmp((()=>(t=>{if(!(1&m.u)){const e=s(t);if(!e)return;const n=e.o,o=()=>{};if(1&e.u)(null==e?void 0:e.i)?Dt(e.i,t):1024&e.u?setTimeout((()=>At(t,e,n)),1e3):(null==e?void 0:e.q)&&e.q.then((()=>Dt(e.i,t)));else{e.u|=1,12&n.u&&(t=>{if(!p.document)return;const e=t["s-cr"]=p.document.createComment("");e["s-cn"]=!0,wt(t,e,t.firstChild)})(t);{let n=t;for(;n=n.parentNode||n.host;)if(n["s-p"]){St(e,e.R=n);break}}n.t&&Object.entries(n.t).map((([e,[n]])=>{if(31&n&&Object.prototype.hasOwnProperty.call(t,e)){const n=t[e];delete t[e],t[e]=n}})),At(t,e,n)}o()}})(this))))}disconnectedCallback(){m.jmp((()=>(async t=>{if(!(1&m.u)){const e=s(t);(null==e?void 0:e.i)?Ht(e.i,t):(null==e?void 0:e.q)&&e.q.then((()=>Ht(e.i,t)))}H.has(t)&&H.delete(t),t.shadowRoot&&H.has(t.shadowRoot)&&H.delete(t.shadowRoot)})(this))),k((()=>{var t;const e=s(this);if(!e)return;const n=u.findIndex((t=>t===this));n>-1&&u.splice(n,1),(null==(t=null==e?void 0:e.A)?void 0:t.k)instanceof Node&&!e.A.k.isConnected&&delete e.A.k}))}componentOnReady(){var t;return null==(t=s(this))?void 0:t.q}};c.B=t[0],l.includes(f)||r.get(f)||(o.push(f),r.define(f,xt(d,c,1)))}))})),o.length>0&&(v&&(f.textContent+=d),f.textContent+=o.sort()+"{visibility:hidden}.hydrated{visibility:inherit}",f.innerHTML.length)){f.setAttribute("data-styles","");const t=null!=(n=m.L)?n:x(p.document);null!=t&&f.setAttribute("nonce",t),i.insertBefore(f,c?c.nextSibling:i.firstChild)}h=!1,u.length?u.map((t=>t.connectedCallback())):m.jmp((()=>a=setTimeout(Rt,30)))},Ut=t=>m.L=t;export{W as H,V as a,Pt as b,q as c,t as g,B as h,h as p,r,Ut as s}
@@ -1 +0,0 @@
1
- import{r as t,c as r,h as e}from"./p-CNX8hZa8.js";import{w as i}from"./p-CqhvfyKV.js";import{e as o,i as s}from"./p-BGekdjN9.js";const a=class{constructor(e){t(this,e),this.tlPromoApplied=r(this,"tlPromoApplied"),this.tlError=r(this,"tlError"),this.placeholder="Promo or presale code",this.buttonLabel="Apply",this.code="",this.applying=!1,this.applied=null,this.error=null,this.handleInput=t=>{this.code=t.target.value,this.error=null},this.handleSubmit=t=>{t.preventDefault(),this.apply()},this.reset=()=>{this.applied=null,this.error=null}}async apply(){const t=this.code.trim();if(t){this.applying=!0,this.error=null;try{const r=await i(),e=r.getPresaleManager?.();if(!e)throw new Error("Promo codes are not available");const o=await e.redeem(t),s=await(r.getCartManager?.()?.get().catch((()=>null)))??null;this.applied={code:t.toUpperCase(),...o,cart:s},this.code="",this.tlPromoApplied.emit(this.applied)}catch(t){console.error("[tl-promo-code] Redeem failed:",t),this.error=s(t)?"Sign in to use this code":o(t,"That code could not be applied"),this.tlError.emit({message:this.error})}finally{this.applying=!1}}else this.error="Enter a code"}render(){return this.applied?e("div",{class:"applied",role:"status"},e("span",{class:"applied-text"},e("svg",{class:"icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","aria-hidden":"true"},e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M5 13l4 4L19 7"})),"Code ",e("strong",{class:"code"},this.applied.code),this.applied.alreadyHeld?" was already applied":" applied"),e("button",{type:"button",class:"link",onClick:this.reset},"Use a different code")):e("form",{class:"promo",onSubmit:this.handleSubmit},e("div",{class:"field"},e("input",{class:"input",type:"text",autocomplete:"off",autoCapitalize:"characters",spellcheck:!1,"aria-label":this.placeholder,placeholder:this.placeholder,value:this.code,disabled:this.applying,onInput:this.handleInput}),e("button",{type:"submit",class:"apply",disabled:this.applying},this.applying?"Applying…":this.buttonLabel)),this.error&&e("p",{class:"error",role:"alert"},this.error))}};a.style=":host{display:block;font-family:var(--tl-font-family, system-ui, sans-serif);color:var(--tl-foreground, #111827)}.field{display:flex;gap:var(--tl-spacing-2, 0.5rem)}.input{flex:1;min-width:0;padding:var(--tl-spacing-3, 0.75rem);font:inherit;font-size:0.875rem;color:var(--tl-foreground, #111827);background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e5e7eb);border-radius:var(--tl-radius-md, 0.5rem);text-transform:uppercase}.input::placeholder{text-transform:none;color:var(--tl-muted-foreground, #6b7280)}.input:focus{outline:2px solid var(--tl-primary, #6366f1);outline-offset:1px}.apply{padding:var(--tl-spacing-3, 0.75rem) var(--tl-spacing-4, 1rem);font:inherit;font-size:0.875rem;font-weight:500;color:var(--tl-primary-foreground, #ffffff);background:var(--tl-primary, #6366f1);border:none;border-radius:var(--tl-radius-md, 0.5rem);cursor:pointer;white-space:nowrap}.apply:hover:not(:disabled){opacity:0.9}.apply:disabled,.input:disabled{opacity:0.6;cursor:not-allowed}.error{margin:var(--tl-spacing-2, 0.5rem) 0 0;font-size:0.8125rem;color:var(--tl-error, #ef4444)}.applied{display:flex;align-items:center;justify-content:space-between;gap:var(--tl-spacing-3, 0.75rem);padding:var(--tl-spacing-3, 0.75rem);font-size:0.875rem;background:var(--tl-muted, #f9fafb);border:1px solid var(--tl-border, #e5e7eb);border-radius:var(--tl-radius-md, 0.5rem)}.applied-text{display:flex;align-items:center;gap:var(--tl-spacing-2, 0.5rem)}.icon{width:1rem;height:1rem;flex-shrink:0;color:var(--tl-success, #10b981)}.code{font-family:var(--tl-font-family-mono, ui-monospace, monospace)}.link{padding:0;font:inherit;font-size:0.8125rem;color:var(--tl-primary, #6366f1);background:none;border:none;cursor:pointer;white-space:nowrap}.link:hover{text-decoration:underline}";export{a as tl_promo_code}
@@ -1 +0,0 @@
1
- import{r as t,c as e,h as o,H as r}from"./p-CNX8hZa8.js";import{h as i,g as n}from"./p-CqhvfyKV.js";const a={available:{defaultLabel:"Buy Tickets",color:"var(--tl-primary, #e64b12)",hoverColor:"var(--tl-primary, #d4440f)",foreground:"var(--tl-primary-foreground, #ffffff)"},soldOut:{defaultLabel:"Sold Out",color:"#dc2626",hoverColor:"#b91c1c",foreground:"#ffffff"},waitlist:{defaultLabel:"Join Waitlist",color:"#2563eb",hoverColor:"#1d4ed8",foreground:"#ffffff"},comingSoon:{defaultLabel:"On Sale Soon",color:"#d97706",hoverColor:"#b45309",foreground:"#ffffff"}},s=class{constructor(o){t(this,o),this.tlClick=e(this,"tlClick"),this.state="available",this.variant="primary",this.size="md",this.fullWidth=!1,this.currency="GBP",this.pricePrefix="From",this.disabled=!1,this.isHovered=!1,this.handleClick=()=>{if(!this.disabled&&"soldOut"!==this.state&&"comingSoon"!==this.state&&(this.tlClick.emit({eventId:this.eventId,occurrenceId:this.occurrenceId}),i()))try{n().event(this.eventId).openModal({occurrenceId:this.occurrenceId})}catch(t){console.error("[tl-buy-tickets-button] Failed to open modal:",t)}}}formatPrice(t){const e=t/100,o=e%1!=0;return new Intl.NumberFormat("en-GB",{style:"currency",currency:this.currency,minimumFractionDigits:o?2:0,maximumFractionDigits:o?2:0}).format(e)}getStateConfig(){return a[this.state]}isInteractive(){return!this.disabled&&"soldOut"!==this.state&&"comingSoon"!==this.state}render(){const t=this.getStateConfig(),e=this.label||t.defaultLabel,i=this.isInteractive();return o(r,{key:"10c8c36d12223afcfd13c9807c2ef6b0f4c34266",class:{"full-width":this.fullWidth}},o("button",{key:"c7f6a39a837c90ced0176b5d017687afabf99a5a",type:"button",class:{"buy-button":!0,[`variant-${this.variant}`]:!0,[`size-${this.size}`]:!0,disabled:!i,hovered:this.isHovered&&i},style:{"--button-color":t.color,"--button-hover-color":t.hoverColor,"--button-foreground":t.foreground},disabled:!i,onClick:this.handleClick,onMouseEnter:()=>this.isHovered=!0,onMouseLeave:()=>this.isHovered=!1},o("span",{key:"e2bc1edc9fbd2a9c81da8cc3293170b1c4275125",class:"icon"},"soldOut"===this.state&&this.renderSoldOutIcon(),"waitlist"===this.state&&this.renderWaitlistIcon(),"comingSoon"===this.state&&this.renderComingSoonIcon(),"available"===this.state&&this.renderTicketIcon()),o("span",{key:"8371c85dcc24c5ac040744edefe80618421025ef",class:"label"},e),void 0!==this.price&&o("span",{key:"c02cb5b646ade8866deafb9b3e698115abec5708",class:"price"},o("span",{key:"cb0ab272460115a5edebd674362c83711735a70d",class:"price-prefix"},this.pricePrefix),o("span",{key:"e28ba56d3928076b624513de95682351f3e0d92b",class:"price-value"},this.formatPrice(this.price)))))}renderTicketIcon(){return o("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},o("path",{d:"M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"}),o("path",{d:"M13 5v2"}),o("path",{d:"M13 17v2"}),o("path",{d:"M13 11v2"}))}renderSoldOutIcon(){return o("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},o("circle",{cx:"12",cy:"12",r:"10"}),o("path",{d:"m15 9-6 6"}),o("path",{d:"m9 9 6 6"}))}renderWaitlistIcon(){return o("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},o("circle",{cx:"12",cy:"12",r:"10"}),o("polyline",{points:"12 6 12 12 16 14"}))}renderComingSoonIcon(){return o("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},o("path",{d:"M12 2v4"}),o("path",{d:"m16.2 7.8 2.9-2.9"}),o("path",{d:"M18 12h4"}),o("path",{d:"m16.2 16.2 2.9 2.9"}),o("path",{d:"M12 18v4"}),o("path",{d:"m4.9 19.1 2.9-2.9"}),o("path",{d:"M2 12h4"}),o("path",{d:"m4.9 4.9 2.9 2.9"}))}};s.style=":host{display:inline-block;font-family:var(--tl-font-family, system-ui, -apple-system, sans-serif)}:host(.full-width){display:block;width:100%}:host(.full-width) .buy-button{width:100%}.buy-button{display:inline-flex;align-items:center;justify-content:center;gap:0.5rem;font-weight:600;border:none;cursor:pointer;text-decoration:none;outline:none;transition:all 0.2s ease;white-space:nowrap}.buy-button.variant-primary{background:var(--button-color);color:var(--button-foreground)}.buy-button.variant-secondary{background:color-mix(in srgb, var(--button-color) 15%, transparent);color:var(--button-color)}.buy-button.variant-outline{background:transparent;color:var(--button-color);border:2px solid var(--button-color)}.buy-button.size-sm{padding:0.5rem 1rem;font-size:0.875rem;border-radius:var(--tl-radius-sm, 0.375rem)}.buy-button.size-md{padding:0.75rem 1.5rem;font-size:1rem;border-radius:var(--tl-radius-md, 0.5rem)}.buy-button.size-lg{padding:1rem 2rem;font-size:1.125rem;border-radius:var(--tl-radius-lg, 0.625rem);min-height:51px}.buy-button.hovered:not(.disabled){opacity:0.9;transform:translateY(-1px)}.buy-button.hovered.variant-primary{background:var(--button-hover-color)}.buy-button.disabled{opacity:0.7;cursor:not-allowed}.icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.icon svg{width:1em;height:1em}.label{flex-shrink:0}.price{display:inline-flex;align-items:center;gap:0.25rem;margin-left:0.5rem;white-space:nowrap;opacity:0.9}.price-prefix{opacity:0.7}.price-value{font-weight:700}";export{s as tl_buy_tickets_button}
@@ -1 +0,0 @@
1
- import{r as t,c as e,h as r,H as s,a as i}from"./p-CNX8hZa8.js";import{h as o,g as a}from"./p-CqhvfyKV.js";const l=class{constructor(r){t(this,r),this.tlComplete=e(this,"tl-complete"),this.tlError=e(this,"tl-error"),this.tlClose=e(this,"tl-close"),this.disabled=!1,this.handleClick=()=>{if(!this.disabled)return o()?void a().checkout.openModal({onComplete:t=>{this.tlComplete.emit(t)},onError:t=>{this.tlError.emit({message:t.message})},onClose:()=>{this.tlClose.emit()}}):(console.error("[tl-checkout-wrapper] SDK not initialized. Call setSDK(ticketlayer) first."),void this.tlError.emit({message:"SDK not initialized"}))},this.handleKeyDown=t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),this.handleClick())}}render(){return r(s,{key:"ebaae5dd6710ffc5353ece4327012df0332fdbb7",class:{"tl-checkout-wrapper":!0,"tl-checkout-wrapper--disabled":this.disabled},onClick:this.handleClick,onKeyDown:this.handleKeyDown,role:"button",tabindex:this.disabled?-1:0,"aria-disabled":this.disabled?"true":null},r("slot",{key:"0118d9921df5af1ae2376fd4135bac487aac7ebd"}))}get el(){return i(this)}};l.style="tl-checkout-wrapper,.tl-checkout-wrapper{display:inline-block;cursor:pointer}tl-checkout-wrapper:focus,.tl-checkout-wrapper:focus{outline:2px solid var(--tl-ring, #3b82f6);outline-offset:2px;border-radius:var(--tl-radius-sm, 0.25rem)}tl-checkout-wrapper[disabled],tl-checkout-wrapper.tl-checkout-wrapper--disabled,.tl-checkout-wrapper--disabled{cursor:not-allowed;opacity:0.5}";export{l as tl_checkout_wrapper}