@ticketlayer/elements 0.3.2 → 0.4.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 (142) hide show
  1. package/README.md +16 -15
  2. package/dist/cjs/{index-DfzcrE9-.js → index-I9CoYv3k.js} +277 -1798
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/loader.cjs.js +2 -2
  5. package/dist/cjs/money-BtmM2gt-.js +118 -0
  6. package/dist/cjs/{order-summary-ZMkJ5bez.js → order-summary-X3TlZxc2.js} +34 -0
  7. package/dist/cjs/ticketlayer-elements.cjs.js +3 -3
  8. package/dist/cjs/tl-buy-modal.cjs.entry.js +3 -3
  9. package/dist/cjs/tl-buy-tickets-button.cjs.entry.js +10 -7
  10. package/dist/cjs/tl-buy-tickets-wrapper.cjs.entry.js +2 -2
  11. package/dist/cjs/tl-cart-badge.cjs.entry.js +2 -2
  12. package/dist/cjs/tl-cart-drawer.cjs.entry.js +2 -2
  13. package/dist/cjs/tl-cart.cjs.entry.js +10 -4
  14. package/dist/cjs/tl-checkout-wrapper.cjs.entry.js +2 -2
  15. package/dist/cjs/tl-event-card.cjs.entry.js +4 -3
  16. package/dist/cjs/tl-event-list.cjs.entry.js +2 -2
  17. package/dist/cjs/tl-login.cjs.entry.js +4 -3
  18. package/dist/cjs/tl-my-orders.cjs.entry.js +4 -3
  19. package/dist/cjs/tl-occurrence-selector_2.cjs.entry.js +454 -122
  20. package/dist/cjs/tl-order-confirmation.cjs.entry.js +11 -8
  21. package/dist/cjs/tl-order-tickets_2.cjs.entry.js +3 -3
  22. package/dist/cjs/tl-promo-code.cjs.entry.js +4 -3
  23. package/dist/cjs/tl-seat-map.cjs.entry.js +2 -2
  24. package/dist/collection/collection-manifest.json +2 -1
  25. package/dist/collection/components/tl-buy-modal/tl-buy-modal.css +12 -13
  26. package/dist/collection/components/tl-buy-modal/tl-buy-modal.js +1 -1
  27. package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.css +4 -4
  28. package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.js +11 -8
  29. package/dist/collection/components/tl-buy-tickets-wrapper/tl-buy-tickets-wrapper.css +2 -2
  30. package/dist/collection/components/tl-cart/tl-cart.css +52 -51
  31. package/dist/collection/components/tl-cart/tl-cart.js +10 -4
  32. package/dist/collection/components/tl-cart-badge/tl-cart-badge.css +11 -11
  33. package/dist/collection/components/tl-cart-drawer/tl-cart-drawer.css +6 -6
  34. package/dist/collection/components/tl-checkout-wrapper/tl-checkout-wrapper.css +2 -2
  35. package/dist/collection/components/tl-event-card/tl-event-card.css +22 -22
  36. package/dist/collection/components/tl-event-card/tl-event-card.js +1 -1
  37. package/dist/collection/components/tl-event-list/tl-event-list.css +17 -17
  38. package/dist/collection/components/tl-login/tl-login.css +26 -26
  39. package/dist/collection/components/tl-login/tl-login.js +1 -1
  40. package/dist/collection/components/tl-my-orders/tl-my-orders.css +40 -40
  41. package/dist/collection/components/tl-occurrence-selector/tl-occurrence-selector.css +54 -65
  42. package/dist/collection/components/tl-occurrence-selector/tl-occurrence-selector.js +2 -2
  43. package/dist/collection/components/tl-order-confirmation/tl-order-confirmation.css +38 -38
  44. package/dist/collection/components/tl-order-confirmation/tl-order-confirmation.js +8 -6
  45. package/dist/collection/components/tl-order-tickets/tl-order-tickets.css +9 -9
  46. package/dist/collection/components/tl-promo-code/tl-promo-code.css +25 -25
  47. package/dist/collection/components/tl-promo-code/tl-promo-code.js +1 -1
  48. package/dist/collection/components/tl-seat-map/tl-seat-map.css +10 -10
  49. package/dist/collection/components/tl-ticket/tl-ticket.css +13 -13
  50. package/dist/collection/components/tl-ticket/tl-ticket.js +1 -1
  51. package/dist/collection/components/tl-ticket-selector/tl-ticket-selector.css +74 -49
  52. package/dist/collection/components/tl-ticket-selector/tl-ticket-selector.js +73 -127
  53. package/dist/collection/utils/cart-totals.js +9 -0
  54. package/dist/collection/utils/order-summary.js +36 -0
  55. package/dist/components/money.js +1 -0
  56. package/dist/components/order-summary.js +1 -1
  57. package/dist/components/tl-buy-modal.js +1 -1
  58. package/dist/components/tl-buy-tickets-button.js +1 -1
  59. package/dist/components/tl-buy-tickets-wrapper2.js +1 -1
  60. package/dist/components/tl-cart-badge.js +1 -1
  61. package/dist/components/tl-cart-drawer.js +1 -1
  62. package/dist/components/tl-cart2.js +1 -1
  63. package/dist/components/tl-checkout-wrapper2.js +1 -1
  64. package/dist/components/tl-event-card2.js +1 -1
  65. package/dist/components/tl-event-list.js +1 -1
  66. package/dist/components/tl-login2.js +1 -1
  67. package/dist/components/tl-my-orders.js +1 -1
  68. package/dist/components/tl-occurrence-selector2.js +1 -1
  69. package/dist/components/tl-order-confirmation.js +1 -1
  70. package/dist/components/tl-order-tickets2.js +1 -1
  71. package/dist/components/tl-promo-code.js +1 -1
  72. package/dist/components/tl-seat-map.js +1 -1
  73. package/dist/components/tl-ticket-selector2.js +1 -1
  74. package/dist/components/tl-ticket2.js +1 -1
  75. package/dist/elements.docs.d.ts +26 -0
  76. package/dist/elements.docs.json +35 -17
  77. package/dist/esm/{index-Ba-RZTFI.js → index-OoYV1faY.js} +277 -1798
  78. package/dist/esm/index.js +1 -1
  79. package/dist/esm/loader.js +3 -3
  80. package/dist/esm/money-4ig0-WB6.js +112 -0
  81. package/dist/esm/{order-summary-BGekdjN9.js → order-summary-DiDtvfZM.js} +34 -1
  82. package/dist/esm/ticketlayer-elements.js +4 -4
  83. package/dist/esm/tl-buy-modal.entry.js +3 -3
  84. package/dist/esm/tl-buy-tickets-button.entry.js +10 -7
  85. package/dist/esm/tl-buy-tickets-wrapper.entry.js +2 -2
  86. package/dist/esm/tl-cart-badge.entry.js +2 -2
  87. package/dist/esm/tl-cart-drawer.entry.js +2 -2
  88. package/dist/esm/tl-cart.entry.js +10 -4
  89. package/dist/esm/tl-checkout-wrapper.entry.js +2 -2
  90. package/dist/esm/tl-event-card.entry.js +4 -3
  91. package/dist/esm/tl-event-list.entry.js +2 -2
  92. package/dist/esm/tl-login.entry.js +4 -3
  93. package/dist/esm/tl-my-orders.entry.js +4 -3
  94. package/dist/esm/tl-occurrence-selector_2.entry.js +455 -123
  95. package/dist/esm/tl-order-confirmation.entry.js +11 -8
  96. package/dist/esm/tl-order-tickets_2.entry.js +3 -3
  97. package/dist/esm/tl-promo-code.entry.js +4 -3
  98. package/dist/esm/tl-seat-map.entry.js +2 -2
  99. package/dist/ticketlayer-elements/index.esm.js +1 -1
  100. package/dist/ticketlayer-elements/p-0814420f.entry.js +1 -0
  101. package/dist/ticketlayer-elements/p-0acabc26.entry.js +1 -0
  102. package/dist/ticketlayer-elements/{p-9372ff1f.entry.js → p-109a3feb.entry.js} +1 -1
  103. package/dist/ticketlayer-elements/{p-41d22d7c.entry.js → p-1a4ba71c.entry.js} +1 -1
  104. package/dist/ticketlayer-elements/p-318965c1.entry.js +1 -0
  105. package/dist/ticketlayer-elements/p-347c7fd1.entry.js +1 -0
  106. package/dist/ticketlayer-elements/p-3649c26d.entry.js +1 -0
  107. package/dist/ticketlayer-elements/p-40260cc9.entry.js +1 -0
  108. package/dist/ticketlayer-elements/p-4ig0-WB6.js +1 -0
  109. package/dist/ticketlayer-elements/p-55fd2f9f.entry.js +1 -0
  110. package/dist/ticketlayer-elements/p-62ee659b.entry.js +1 -0
  111. package/dist/ticketlayer-elements/{p-f446310d.entry.js → p-7d4ecc2b.entry.js} +1 -1
  112. package/dist/ticketlayer-elements/p-7f0abf95.entry.js +1 -0
  113. package/dist/ticketlayer-elements/p-BXpVGW51.js +1 -0
  114. package/dist/ticketlayer-elements/p-OoYV1faY.js +3 -0
  115. package/dist/ticketlayer-elements/p-a3c1b26c.entry.js +1 -0
  116. package/dist/ticketlayer-elements/p-ac264adc.entry.js +1 -0
  117. package/dist/ticketlayer-elements/{p-82752e3b.entry.js → p-aeb4c6fb.entry.js} +1 -1
  118. package/dist/ticketlayer-elements/{p-9c9072c8.entry.js → p-ba62541f.entry.js} +1 -1
  119. package/dist/ticketlayer-elements/ticketlayer-elements.css +1 -1
  120. package/dist/ticketlayer-elements/ticketlayer-elements.esm.js +1 -1
  121. package/dist/types/components/tl-cart/tl-cart.d.ts +10 -0
  122. package/dist/types/components/tl-ticket-selector/tl-ticket-selector.d.ts +40 -29
  123. package/dist/types/components.d.ts +165 -36
  124. package/dist/types/stencil-public-runtime.d.ts +97 -57
  125. package/dist/types/utils/cart-totals.d.ts +10 -0
  126. package/dist/types/utils/order-summary.d.ts +34 -0
  127. package/elements.catalogue.json +91 -22
  128. package/loader/index.d.ts +1 -1
  129. package/package.json +31 -32
  130. package/dist/ticketlayer-elements/p-0291df4c.entry.js +0 -1
  131. package/dist/ticketlayer-elements/p-11273f8f.entry.js +0 -1
  132. package/dist/ticketlayer-elements/p-340ab4f5.entry.js +0 -1
  133. package/dist/ticketlayer-elements/p-7ff43848.entry.js +0 -1
  134. package/dist/ticketlayer-elements/p-976770f3.entry.js +0 -1
  135. package/dist/ticketlayer-elements/p-9a903ff6.entry.js +0 -1
  136. package/dist/ticketlayer-elements/p-BGekdjN9.js +0 -1
  137. package/dist/ticketlayer-elements/p-Ba-RZTFI.js +0 -2
  138. package/dist/ticketlayer-elements/p-a5c90b68.entry.js +0 -1
  139. package/dist/ticketlayer-elements/p-b6d479ad.entry.js +0 -1
  140. package/dist/ticketlayer-elements/p-eb640760.entry.js +0 -1
  141. package/dist/ticketlayer-elements/p-f5846f61.entry.js +0 -1
  142. package/dist/ticketlayer-elements/p-fb9444c4.entry.js +0 -1
@@ -1,26 +1,15 @@
1
1
  /**
2
2
  * TlOccurrenceSelector Styles
3
- *
4
- * CSS custom properties for theming:
5
- * --tl-primary: Primary brand colour (default: #e64b12)
6
- * --tl-primary-foreground: Text on primary (default: #ffffff)
7
- * --tl-background: Background colour (default: #ffffff)
8
- * --tl-foreground: Main text colour (default: #0f172a)
9
- * --tl-muted: Muted background (default: #f1f5f9)
10
- * --tl-muted-foreground: Muted text (default: #64748b)
11
- * --tl-border: Border colour (default: #e2e8f0)
12
- * --tl-radius: Border radius (default: 0.5rem)
13
- * --tl-font-family: Font family (default: system-ui)
3
+ *
4
+ * The --tl-* tokens this reads, and their defaults, are declared once in
5
+ * @ticketlayer/theme (packages/theme/tokens.json) and shipped in the global
6
+ * stylesheet. There is nothing to repeat here.
14
7
  */
15
8
 
16
9
  :host {
17
- /* Don't redefine CSS variables - let them inherit from parent document */
18
- /* Only define local fallback for radius mapping */
19
- --tl-radius: var(--tl-radius-md, 0.5rem);
20
-
21
10
  display: block;
22
- font-family: var(--tl-font-family, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);
23
- color: var(--tl-foreground, #0f172a);
11
+ font-family: var(--tl-font-family);
12
+ color: var(--tl-foreground);
24
13
  }
25
14
 
26
15
  * {
@@ -37,7 +26,7 @@
37
26
  .no-occurrences {
38
27
  text-align: center;
39
28
  padding: 3rem 1rem;
40
- color: var(--tl-muted-foreground, #64748b);
29
+ color: var(--tl-muted-foreground);
41
30
  }
42
31
 
43
32
  /* =========================================================================
@@ -56,8 +45,8 @@
56
45
  align-items: flex-start;
57
46
  width: 100%;
58
47
  padding: 1rem 1.25rem;
59
- background: var(--tl-background, #ffffff);
60
- border: 1px solid var(--tl-border, #e2e8f0);
48
+ background: var(--tl-background);
49
+ border: 1px solid var(--tl-border);
61
50
  border-radius: var(--tl-radius);
62
51
  text-align: left;
63
52
  cursor: pointer;
@@ -66,8 +55,8 @@
66
55
  }
67
56
 
68
57
  .occurrence-item:hover:not(:disabled) {
69
- border-color: var(--tl-primary, #e64b12);
70
- background: color-mix(in srgb, var(--tl-primary, #e64b12) 5%, var(--tl-background, #ffffff));
58
+ border-color: var(--tl-primary);
59
+ background: color-mix(in srgb, var(--tl-primary) 5%, var(--tl-background));
71
60
  }
72
61
 
73
62
  .occurrence-item:focus-visible {
@@ -78,12 +67,12 @@
78
67
  .occurrence-item:disabled {
79
68
  cursor: not-allowed;
80
69
  opacity: 0.6;
81
- background: var(--tl-muted, #f1f5f9);
70
+ background: var(--tl-muted);
82
71
  }
83
72
 
84
73
  .occurrence-item.sold-out {
85
74
  opacity: 0.6;
86
- background: var(--tl-muted, #f1f5f9);
75
+ background: var(--tl-muted);
87
76
  }
88
77
 
89
78
  .occurrence-info {
@@ -93,7 +82,7 @@
93
82
  .occurrence-date {
94
83
  font-weight: 600;
95
84
  font-size: 0.9375rem;
96
- color: var(--tl-foreground, #0f172a);
85
+ color: var(--tl-foreground);
97
86
  margin-bottom: 0.25rem;
98
87
  }
99
88
 
@@ -120,7 +109,7 @@
120
109
 
121
110
  .status-arrow {
122
111
  font-size: 1.25rem;
123
- color: var(--tl-primary, #e64b12);
112
+ color: var(--tl-primary);
124
113
  }
125
114
 
126
115
  /* =========================================================================
@@ -136,7 +125,7 @@
136
125
  .slots-date-header {
137
126
  font-size: 1.125rem;
138
127
  font-weight: 600;
139
- color: var(--tl-foreground, #0f172a);
128
+ color: var(--tl-foreground);
140
129
  padding-bottom: 0.5rem;
141
130
  border-bottom: 1px solid var(--tl-border);
142
131
  }
@@ -153,8 +142,8 @@
153
142
  align-items: center;
154
143
  justify-content: center;
155
144
  padding: 0.75rem 0.5rem;
156
- background: var(--tl-background, #ffffff);
157
- border: 1px solid var(--tl-border, #e2e8f0);
145
+ background: var(--tl-background);
146
+ border: 1px solid var(--tl-border);
158
147
  border-radius: var(--tl-radius);
159
148
  cursor: pointer;
160
149
  transition: all 0.15s ease;
@@ -163,8 +152,8 @@
163
152
  }
164
153
 
165
154
  .time-slot:hover:not(:disabled) {
166
- border-color: var(--tl-primary, #e64b12);
167
- background: color-mix(in srgb, var(--tl-primary, #e64b12) 5%, var(--tl-background, #ffffff));
155
+ border-color: var(--tl-primary);
156
+ background: color-mix(in srgb, var(--tl-primary) 5%, var(--tl-background));
168
157
  }
169
158
 
170
159
  .time-slot:focus-visible {
@@ -175,18 +164,18 @@
175
164
  .time-slot:disabled {
176
165
  cursor: not-allowed;
177
166
  opacity: 0.6;
178
- background: var(--tl-muted, #f1f5f9);
167
+ background: var(--tl-muted);
179
168
  }
180
169
 
181
170
  .time-slot.sold-out {
182
171
  opacity: 0.6;
183
- background: var(--tl-muted, #f1f5f9);
172
+ background: var(--tl-muted);
184
173
  }
185
174
 
186
175
  .slot-time {
187
176
  font-size: 0.9375rem;
188
177
  font-weight: 600;
189
- color: var(--tl-foreground, #0f172a);
178
+ color: var(--tl-foreground);
190
179
  }
191
180
 
192
181
  .slot-sold-out {
@@ -230,7 +219,7 @@
230
219
  }
231
220
 
232
221
  .calendar-panel {
233
- border: 1px solid var(--tl-border, #e2e8f0);
222
+ border: 1px solid var(--tl-border);
234
223
  border-radius: var(--tl-radius);
235
224
  padding: 1rem;
236
225
  }
@@ -246,7 +235,7 @@
246
235
  .month-label {
247
236
  font-size: 1rem;
248
237
  font-weight: 600;
249
- color: var(--tl-foreground, #0f172a);
238
+ color: var(--tl-foreground);
250
239
  flex: 1;
251
240
  }
252
241
 
@@ -262,16 +251,16 @@
262
251
  width: 1.75rem;
263
252
  height: 1.75rem;
264
253
  padding: 0;
265
- background: var(--tl-background, #ffffff);
266
- border: 1px solid var(--tl-border, #e2e8f0);
254
+ background: var(--tl-background);
255
+ border: 1px solid var(--tl-border);
267
256
  border-radius: var(--tl-radius);
268
257
  cursor: pointer;
269
258
  transition: all 0.15s ease;
270
- color: var(--tl-foreground, #0f172a);
259
+ color: var(--tl-foreground);
271
260
  }
272
261
 
273
262
  .nav-button:hover:not(:disabled) {
274
- background: var(--tl-muted, #f1f5f9);
263
+ background: var(--tl-muted);
275
264
  }
276
265
 
277
266
  .nav-button:disabled {
@@ -309,7 +298,7 @@
309
298
  justify-content: center;
310
299
  aspect-ratio: 1;
311
300
  padding: 0.1875rem;
312
- background: var(--tl-background, #ffffff);
301
+ background: var(--tl-background);
313
302
  border: 1px solid transparent;
314
303
  border-radius: var(--tl-radius);
315
304
  cursor: default;
@@ -317,7 +306,7 @@
317
306
  font-family: inherit;
318
307
  font-size: 0.9375rem;
319
308
  font-weight: 500;
320
- color: var(--tl-foreground, #0f172a);
309
+ color: var(--tl-foreground);
321
310
  }
322
311
 
323
312
  .calendar-day.other-month {
@@ -327,35 +316,35 @@
327
316
 
328
317
  .calendar-day.has-occurrences {
329
318
  cursor: pointer;
330
- background: color-mix(in srgb, var(--tl-primary, #e64b12) 10%, var(--tl-background, #ffffff));
319
+ background: color-mix(in srgb, var(--tl-primary) 10%, var(--tl-background));
331
320
  border-color: transparent;
332
321
  font-weight: 600;
333
- color: var(--tl-primary, #e64b12);
322
+ color: var(--tl-primary);
334
323
  }
335
324
 
336
325
  .calendar-day.has-occurrences:hover {
337
- background: color-mix(in srgb, var(--tl-primary, #e64b12) 18%, var(--tl-background, #ffffff));
326
+ background: color-mix(in srgb, var(--tl-primary) 18%, var(--tl-background));
338
327
  border-color: transparent;
339
328
  }
340
329
 
341
330
  .calendar-day.has-occurrences.sold-out {
342
- background: var(--tl-muted, #f1f5f9);
331
+ background: var(--tl-muted);
343
332
  border-color: transparent;
344
333
  }
345
334
 
346
335
  .calendar-day.has-occurrences.sold-out:hover {
347
- background: color-mix(in srgb, var(--tl-muted, #f1f5f9) 80%, var(--tl-background, #ffffff));
336
+ background: color-mix(in srgb, var(--tl-muted) 80%, var(--tl-background));
348
337
  border-color: transparent;
349
338
  }
350
339
 
351
340
  .calendar-day.selected {
352
- background: var(--tl-primary, #e64b12);
353
- border-color: var(--tl-primary, #e64b12);
354
- color: var(--tl-primary-foreground, #ffffff);
341
+ background: var(--tl-primary);
342
+ border-color: var(--tl-primary);
343
+ color: var(--tl-primary-foreground);
355
344
  }
356
345
 
357
346
  .calendar-day.selected:hover {
358
- background: color-mix(in srgb, var(--tl-primary, #e64b12) 90%, black);
347
+ background: color-mix(in srgb, var(--tl-primary) 90%, black);
359
348
  }
360
349
 
361
350
  .calendar-day.selected .occurrence-dot {
@@ -394,7 +383,7 @@
394
383
  align-items: center;
395
384
  justify-content: center;
396
385
  color: var(--tl-muted-foreground);
397
- background: var(--tl-muted, #f1f5f9);
386
+ background: var(--tl-muted);
398
387
  border-radius: var(--tl-radius);
399
388
  padding: 2rem 1rem;
400
389
  text-align: center;
@@ -405,7 +394,7 @@
405
394
  .selected-date-header {
406
395
  font-size: 0.9375rem;
407
396
  font-weight: 600;
408
- color: var(--tl-foreground, #0f172a);
397
+ color: var(--tl-foreground);
409
398
  padding-bottom: 0.625rem;
410
399
  margin-bottom: 0.625rem;
411
400
  }
@@ -422,8 +411,8 @@
422
411
  justify-content: space-between;
423
412
  width: 100%;
424
413
  padding: 0.625rem 0.875rem;
425
- background: var(--tl-background, #ffffff);
426
- border: 1px solid var(--tl-border, #e2e8f0);
414
+ background: var(--tl-background);
415
+ border: 1px solid var(--tl-border);
427
416
  border-radius: var(--tl-radius);
428
417
  text-align: left;
429
418
  cursor: pointer;
@@ -432,8 +421,8 @@
432
421
  }
433
422
 
434
423
  .time-slot-item:hover:not(:disabled) {
435
- border-color: var(--tl-primary, #e64b12);
436
- background: color-mix(in srgb, var(--tl-primary, #e64b12) 5%, var(--tl-background, #ffffff));
424
+ border-color: var(--tl-primary);
425
+ background: color-mix(in srgb, var(--tl-primary) 5%, var(--tl-background));
437
426
  }
438
427
 
439
428
  .time-slot-item:focus-visible {
@@ -444,12 +433,12 @@
444
433
  .time-slot-item:disabled {
445
434
  cursor: not-allowed;
446
435
  opacity: 0.6;
447
- background: var(--tl-muted, #f1f5f9);
436
+ background: var(--tl-muted);
448
437
  }
449
438
 
450
439
  .time-slot-item.sold-out {
451
440
  opacity: 0.6;
452
- background: var(--tl-muted, #f1f5f9);
441
+ background: var(--tl-muted);
453
442
  }
454
443
 
455
444
  .time-slot-item .slot-time {
@@ -538,7 +527,7 @@
538
527
  }
539
528
 
540
529
  .skeleton {
541
- background: var(--tl-muted, #f1f5f9);
530
+ background: var(--tl-muted);
542
531
  border-radius: var(--tl-radius);
543
532
  animation: skeleton-pulse 1.5s ease-in-out infinite;
544
533
  }
@@ -557,7 +546,7 @@
557
546
 
558
547
  /* Skeleton for calendar view */
559
548
  .skeleton-calendar {
560
- border: 1px solid var(--tl-border, #e2e8f0);
549
+ border: 1px solid var(--tl-border);
561
550
  border-radius: var(--tl-radius);
562
551
  padding: 1rem;
563
552
  min-height: 350px;
@@ -629,7 +618,7 @@
629
618
  }
630
619
 
631
620
  .error-message {
632
- color: var(--tl-foreground, #0f172a);
621
+ color: var(--tl-foreground);
633
622
  font-size: 0.9375rem;
634
623
  max-width: 400px;
635
624
  }
@@ -637,8 +626,8 @@
637
626
  .retry-button {
638
627
  margin-top: 0.5rem;
639
628
  padding: 0.625rem 1.25rem;
640
- background: var(--tl-primary, #e64b12);
641
- color: var(--tl-primary-foreground, #ffffff);
629
+ background: var(--tl-primary);
630
+ color: var(--tl-primary-foreground);
642
631
  border: none;
643
632
  border-radius: var(--tl-radius);
644
633
  font-family: inherit;
@@ -649,7 +638,7 @@
649
638
  }
650
639
 
651
640
  .retry-button:hover {
652
- background: color-mix(in srgb, var(--tl-primary, #e64b12) 90%, black);
641
+ background: color-mix(in srgb, var(--tl-primary) 90%, black);
653
642
  }
654
643
 
655
644
  .retry-button:focus-visible {
@@ -647,7 +647,7 @@ export class TlOccurrenceSelector {
647
647
  "references": {
648
648
  "TlOccurrenceSelectorTheme": {
649
649
  "location": "local",
650
- "path": "/home/runner/work/live-elements/live-elements/src/components/tl-occurrence-selector/tl-occurrence-selector.tsx",
650
+ "path": "/home/runner/work/live/live/packages/elements/src/components/tl-occurrence-selector/tl-occurrence-selector.tsx",
651
651
  "id": "src/components/tl-occurrence-selector/tl-occurrence-selector.tsx::TlOccurrenceSelectorTheme"
652
652
  }
653
653
  }
@@ -691,7 +691,7 @@ export class TlOccurrenceSelector {
691
691
  "references": {
692
692
  "TlOccurrence": {
693
693
  "location": "local",
694
- "path": "/home/runner/work/live-elements/live-elements/src/components/tl-occurrence-selector/tl-occurrence-selector.tsx",
694
+ "path": "/home/runner/work/live/live/packages/elements/src/components/tl-occurrence-selector/tl-occurrence-selector.tsx",
695
695
  "id": "src/components/tl-occurrence-selector/tl-occurrence-selector.tsx::TlOccurrence"
696
696
  }
697
697
  }
@@ -1,7 +1,7 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--tl-font-family, system-ui, sans-serif);
4
- color: var(--tl-foreground, #111827);
3
+ font-family: var(--tl-font-family);
4
+ color: var(--tl-foreground);
5
5
  }
6
6
 
7
7
  .confirmation {
@@ -11,13 +11,13 @@
11
11
  .check {
12
12
  width: 4rem;
13
13
  height: 4rem;
14
- margin: 0 auto var(--tl-spacing-4, 1rem);
14
+ margin: 0 auto var(--tl-spacing-4);
15
15
  display: flex;
16
16
  align-items: center;
17
17
  justify-content: center;
18
18
  border-radius: 9999px;
19
- background: var(--tl-success, #10b981);
20
- color: var(--tl-success-foreground, #ffffff);
19
+ background: var(--tl-success);
20
+ color: var(--tl-success-foreground);
21
21
  }
22
22
 
23
23
  .check svg {
@@ -26,49 +26,49 @@
26
26
  }
27
27
 
28
28
  .title {
29
- margin: 0 0 var(--tl-spacing-2, 0.5rem);
29
+ margin: 0 0 var(--tl-spacing-2);
30
30
  font-size: 1.875rem;
31
31
  font-weight: 700;
32
32
  line-height: 1.2;
33
33
  }
34
34
 
35
35
  .lead {
36
- margin: 0 0 var(--tl-spacing-6, 1.5rem);
37
- color: var(--tl-muted-foreground, #6b7280);
36
+ margin: 0 0 var(--tl-spacing-6);
37
+ color: var(--tl-muted-foreground);
38
38
  }
39
39
 
40
40
  .error {
41
- margin: 0 0 var(--tl-spacing-6, 1.5rem);
41
+ margin: 0 0 var(--tl-spacing-6);
42
42
  font-size: 0.875rem;
43
- color: var(--tl-error, #ef4444);
43
+ color: var(--tl-error);
44
44
  }
45
45
 
46
46
  .summary {
47
47
  text-align: left;
48
- padding: var(--tl-spacing-6, 1.5rem);
49
- margin-bottom: var(--tl-spacing-6, 1.5rem);
50
- background: var(--tl-muted, #f9fafb);
51
- border: 1px solid var(--tl-border, #e5e7eb);
52
- border-radius: var(--tl-radius-lg, 0.75rem);
48
+ padding: var(--tl-spacing-6);
49
+ margin-bottom: var(--tl-spacing-6);
50
+ background: var(--tl-muted);
51
+ border: 1px solid var(--tl-border);
52
+ border-radius: var(--tl-radius-lg);
53
53
  }
54
54
 
55
55
  .rows {
56
56
  display: grid;
57
- gap: var(--tl-spacing-2, 0.5rem);
58
- margin: 0 0 var(--tl-spacing-4, 1rem);
59
- padding: 0 0 var(--tl-spacing-4, 1rem);
60
- border-bottom: 1px solid var(--tl-border, #e5e7eb);
57
+ gap: var(--tl-spacing-2);
58
+ margin: 0 0 var(--tl-spacing-4);
59
+ padding: 0 0 var(--tl-spacing-4);
60
+ border-bottom: 1px solid var(--tl-border);
61
61
  }
62
62
 
63
63
  .row {
64
64
  display: flex;
65
65
  justify-content: space-between;
66
- gap: var(--tl-spacing-4, 1rem);
66
+ gap: var(--tl-spacing-4);
67
67
  font-size: 0.875rem;
68
68
  }
69
69
 
70
70
  .row dt {
71
- color: var(--tl-muted-foreground, #6b7280);
71
+ color: var(--tl-muted-foreground);
72
72
  }
73
73
 
74
74
  .row dd {
@@ -78,7 +78,7 @@
78
78
  }
79
79
 
80
80
  .reference {
81
- font-family: var(--tl-font-family-mono, ui-monospace, monospace);
81
+ font-family: var(--tl-font-family-mono);
82
82
  font-weight: 600;
83
83
  }
84
84
 
@@ -87,40 +87,40 @@
87
87
  margin: 0;
88
88
  padding: 0;
89
89
  display: grid;
90
- gap: var(--tl-spacing-2, 0.5rem);
90
+ gap: var(--tl-spacing-2);
91
91
  }
92
92
 
93
93
  .line {
94
94
  display: flex;
95
95
  justify-content: space-between;
96
- gap: var(--tl-spacing-4, 1rem);
96
+ gap: var(--tl-spacing-4);
97
97
  font-size: 0.875rem;
98
98
  }
99
99
 
100
100
  .totals {
101
- margin-top: var(--tl-spacing-3, 0.75rem);
102
- padding-top: var(--tl-spacing-3, 0.75rem);
103
- border-top: 1px solid var(--tl-border, #e5e7eb);
101
+ margin-top: var(--tl-spacing-3);
102
+ padding-top: var(--tl-spacing-3);
103
+ border-top: 1px solid var(--tl-border);
104
104
  display: grid;
105
- gap: var(--tl-spacing-1, 0.25rem);
105
+ gap: var(--tl-spacing-1);
106
106
  font-size: 0.875rem;
107
107
  }
108
108
 
109
109
  .total-row {
110
110
  display: flex;
111
111
  justify-content: space-between;
112
- color: var(--tl-muted-foreground, #6b7280);
112
+ color: var(--tl-muted-foreground);
113
113
  }
114
114
 
115
115
  .total-row.discount {
116
- color: var(--tl-success, #10b981);
116
+ color: var(--tl-success);
117
117
  }
118
118
 
119
119
  .total-row.total {
120
- margin-top: var(--tl-spacing-1, 0.25rem);
120
+ margin-top: var(--tl-spacing-1);
121
121
  font-size: 1rem;
122
122
  font-weight: 600;
123
- color: var(--tl-foreground, #111827);
123
+ color: var(--tl-foreground);
124
124
  }
125
125
 
126
126
  .tickets {
@@ -128,24 +128,24 @@
128
128
  }
129
129
 
130
130
  .subtitle {
131
- margin: 0 0 var(--tl-spacing-4, 1rem);
131
+ margin: 0 0 var(--tl-spacing-4);
132
132
  font-size: 1.125rem;
133
133
  font-weight: 600;
134
134
  }
135
135
 
136
136
  .hint {
137
- margin: var(--tl-spacing-3, 0.75rem) 0 0;
137
+ margin: var(--tl-spacing-3) 0 0;
138
138
  font-size: 0.75rem;
139
- color: var(--tl-muted-foreground, #6b7280);
139
+ color: var(--tl-muted-foreground);
140
140
  }
141
141
 
142
142
  /* Skeleton */
143
143
  .skeleton-line,
144
144
  .skeleton-block {
145
- background: var(--tl-secondary, #f3f4f6);
146
- border-radius: var(--tl-radius-md, 0.5rem);
145
+ background: var(--tl-secondary);
146
+ border-radius: var(--tl-radius-md);
147
147
  animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
148
- margin: 0 auto var(--tl-spacing-3, 0.75rem);
148
+ margin: 0 auto var(--tl-spacing-3);
149
149
  }
150
150
 
151
151
  .skeleton-line {
@@ -1,6 +1,6 @@
1
1
  import { h } from "@stencil/core";
2
2
  import { onSDKEvent, whenSDK } from "../../utils/sdk-connector";
3
- import { errorMessage, formatDateTime, formatPrice, orderCustomerEmail, orderEventName, resolveOccurrence, ticketItems, } from "../../utils/order-summary";
3
+ import { errorMessage, formatDateTime, formatPrice, orderCustomerEmail, orderEventName, orderTotals, resolveOccurrence, ticketItems, } from "../../utils/order-summary";
4
4
  /**
5
5
  * tl-order-confirmation - the "thank you" page block: order reference,
6
6
  * customer email, event and date, ticket lines, totals, then the tickets
@@ -120,12 +120,14 @@ export class TlOrderConfirmation {
120
120
  const startsAt = this.occurrence?.startsAt;
121
121
  return (h("dl", { class: "rows" }, h("div", { class: "row" }, h("dt", null, "Order reference"), h("dd", { class: "reference" }, order.orderNumber)), email && (h("div", { class: "row" }, h("dt", null, "Email"), h("dd", null, email))), eventName && (h("div", { class: "row" }, h("dt", null, "Event"), h("dd", null, eventName))), startsAt && (h("div", { class: "row" }, h("dt", null, "Date"), h("dd", null, formatDateTime(startsAt))))));
122
122
  }
123
+ // Money comes from orderTotals: the booking fee is its own row named after
124
+ // the channel's fee profile, the subtotal is the ticket lines alone (the
125
+ // order's own `subtotal` folds the fee line into it) and the total is the
126
+ // order's figure, so what is shown is what was charged.
123
127
  renderTotals(order) {
124
- const c = order.currency || 'GBP';
125
- const fees = Number(order.totalFees) || 0;
126
- const tax = Number(order.totalTax) || 0;
127
- const discounts = Number(order.totalDiscounts) || 0;
128
- return (h("div", { class: "totals" }, h("div", { class: "total-row" }, h("span", null, "Subtotal"), h("span", null, formatPrice(order.subtotal, c))), fees > 0 && (h("div", { class: "total-row" }, h("span", null, "Fees"), h("span", null, formatPrice(order.totalFees, c)))), tax > 0 && (h("div", { class: "total-row" }, h("span", null, "Tax"), h("span", null, formatPrice(order.totalTax, c)))), discounts > 0 && (h("div", { class: "total-row discount" }, h("span", null, "Discount"), h("span", null, "-", formatPrice(order.totalDiscounts, c)))), h("div", { class: "total-row total" }, h("span", null, "Total"), h("span", null, formatPrice(order.total, c)))));
128
+ const totals = orderTotals(order);
129
+ const c = totals.currency;
130
+ return (h("div", { class: "totals" }, h("div", { class: "total-row" }, h("span", null, "Subtotal"), h("span", null, formatPrice(totals.subtotal, c))), totals.showFee && (h("div", { class: "total-row fee" }, h("span", null, totals.feeLabel), h("span", null, formatPrice(totals.fees, c)))), totals.tax > 0 && (h("div", { class: "total-row" }, h("span", null, "Tax"), h("span", null, formatPrice(totals.tax, c)))), totals.discount > 0 && (h("div", { class: "total-row discount" }, h("span", null, "Discount"), h("span", null, "-", formatPrice(totals.discount, c)))), h("div", { class: "total-row total" }, h("span", null, "Total"), h("span", null, formatPrice(totals.total, c)))));
129
131
  }
130
132
  render() {
131
133
  if (this.paymentFailed) {
@@ -1,11 +1,11 @@
1
1
  :host {
2
2
  display: block;
3
- font-family: var(--tl-font-family, system-ui, sans-serif);
3
+ font-family: var(--tl-font-family);
4
4
  }
5
5
 
6
6
  .grid {
7
7
  display: grid;
8
- gap: var(--tl-spacing-4, 1rem);
8
+ gap: var(--tl-spacing-4);
9
9
  grid-template-columns: 1fr;
10
10
  }
11
11
 
@@ -19,28 +19,28 @@
19
19
  }
20
20
 
21
21
  .state {
22
- padding: var(--tl-spacing-6, 1.5rem);
22
+ padding: var(--tl-spacing-6);
23
23
  text-align: center;
24
- color: var(--tl-muted-foreground, #6b7280);
24
+ color: var(--tl-muted-foreground);
25
25
  font-size: 0.875rem;
26
26
  }
27
27
 
28
28
  .state.error {
29
- color: var(--tl-error, #dc2626);
29
+ color: var(--tl-error);
30
30
  }
31
31
 
32
32
  .state.issuing {
33
33
  display: flex;
34
34
  align-items: center;
35
35
  justify-content: center;
36
- gap: var(--tl-spacing-2, 0.5rem);
36
+ gap: var(--tl-spacing-2);
37
37
  }
38
38
 
39
39
  .spinner {
40
40
  width: 0.875rem;
41
41
  height: 0.875rem;
42
- border: 2px solid var(--tl-border, #e5e7eb);
43
- border-top-color: var(--tl-primary, #6366f1);
42
+ border: 2px solid var(--tl-border);
43
+ border-top-color: var(--tl-primary);
44
44
  border-radius: 50%;
45
45
  animation: tl-spin 0.7s linear infinite;
46
46
  flex: none;
@@ -57,6 +57,6 @@
57
57
  @media (prefers-reduced-motion: reduce) {
58
58
  .spinner {
59
59
  animation: none;
60
- border-top-color: var(--tl-border, #e5e7eb);
60
+ border-top-color: var(--tl-border);
61
61
  }
62
62
  }