@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
@@ -11,7 +11,7 @@ import { TlCartData } from "./components/tl-cart/tl-cart";
11
11
  import { TlEventCardEvent } from "./components/tl-event-card/tl-event-card";
12
12
  import { TlAuthChanged } from "./components/tl-login/tl-login";
13
13
  import { TlOccurrence, TlOccurrenceSelectorTheme } from "./components/tl-occurrence-selector/tl-occurrence-selector";
14
- import { TlOrderData } from "./utils/order-summary";
14
+ import { TlOrderData } from "@ticketlayer/elements-core";
15
15
  import { TlPromoApplied } from "./components/tl-promo-code/tl-promo-code";
16
16
  import { TlTicketData } from "./components/tl-ticket/tl-ticket";
17
17
  import { AddToCartItem } from "./components/tl-ticket-selector/tl-ticket-selector";
@@ -21,7 +21,7 @@ export { TlCartData } from "./components/tl-cart/tl-cart";
21
21
  export { TlEventCardEvent } from "./components/tl-event-card/tl-event-card";
22
22
  export { TlAuthChanged } from "./components/tl-login/tl-login";
23
23
  export { TlOccurrence, TlOccurrenceSelectorTheme } from "./components/tl-occurrence-selector/tl-occurrence-selector";
24
- export { TlOrderData } from "./utils/order-summary";
24
+ export { TlOrderData } from "@ticketlayer/elements-core";
25
25
  export { TlPromoApplied } from "./components/tl-promo-code/tl-promo-code";
26
26
  export { TlTicketData } from "./components/tl-ticket/tl-ticket";
27
27
  export { AddToCartItem } from "./components/tl-ticket-selector/tl-ticket-selector";
@@ -109,6 +109,11 @@ export namespace Components {
109
109
  * @component tl-buy-tickets-wrapper
110
110
  * Wraps any content and opens the Ticketlayer modal when clicked.
111
111
  * Uses the SDK's modal manager which handles the iframe overlay.
112
+ * The web harness for `buyTicketsWrapperCore`. What a press does, what it
113
+ * announces and what happens when no client has been published are all in
114
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11); what is left here is the
115
+ * Stencil surface, the accessibility attributes and the one genuinely web
116
+ * question the core refuses to answer - which key counts as a press.
112
117
  * @example <tl-buy-tickets-wrapper event-id="evt_001">
113
118
  * <button>Buy Tickets</button>
114
119
  * </tl-buy-tickets-wrapper>
@@ -131,6 +136,14 @@ export namespace Components {
131
136
  */
132
137
  "occurrenceId"?: string;
133
138
  }
139
+ /**
140
+ * The web harness for `cartCore`.
141
+ * It renders and it forwards. The cart, the money rows, the subscription that
142
+ * keeps them current and every string are in `@ticketlayer/elements-core`
143
+ * (AGENTS.md, TKT-11); what is left here is the Stencil surface a host writes
144
+ * HTML against and the one genuinely web thing, finding the client the page
145
+ * published on `window.Ticketlayer`.
146
+ */
134
147
  interface TlCart {
135
148
  /**
136
149
  * Checkout button label
@@ -153,6 +166,13 @@ export namespace Components {
153
166
  */
154
167
  "showRemoveButtons": boolean;
155
168
  }
169
+ /**
170
+ * The web harness for `cartBadgeCore`.
171
+ * The count, the "99+" rule, the cart subscription and the remembered value
172
+ * are all in `@ticketlayer/elements-core`. What is here is the Stencil surface,
173
+ * the icon, and the two web things the core is handed: the client the page
174
+ * published and `localStorage`.
175
+ */
156
176
  interface TlCartBadge {
157
177
  /**
158
178
  * Badge only mode - only shows the count bubble, no icon or button
@@ -182,6 +202,9 @@ export namespace Components {
182
202
  * button, Escape, or `ui:modal-close-requested`. The panel embeds `<tl-cart>`,
183
203
  * so the actual cart rendering / remove / checkout is shared with the inline
184
204
  * cart; the drawer only adds the off-canvas chrome.
205
+ * The web harness for `cartDrawerCore`: the open/closed rule and the two
206
+ * intents are the core's (TKT-11). What stays here is the chrome and the one
207
+ * thing only a browser has, the Escape key.
185
208
  * @prop side - which edge the panel slides from (default 'right')
186
209
  * @event tlOpen - the drawer opened
187
210
  * @event tlClose - the drawer closed
@@ -207,6 +230,9 @@ export namespace Components {
207
230
  * @component tl-checkout-wrapper
208
231
  * Wraps any content and opens the Ticketlayer checkout modal when clicked.
209
232
  * Uses the SDK's modal manager which handles the iframe overlay.
233
+ * The web harness for `checkoutWrapperCore`: it renders, it forwards, and it
234
+ * decides only which key press counts as activation. Everything else is in
235
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11).
210
236
  * @example <tl-checkout-wrapper>
211
237
  * <button>Proceed to Checkout</button>
212
238
  * </tl-checkout-wrapper>
@@ -218,6 +244,12 @@ export namespace Components {
218
244
  */
219
245
  "disabled": boolean;
220
246
  }
247
+ /**
248
+ * The web harness for `eventCardCore`.
249
+ * It renders and it forwards: which event is shown, how it is read, the status
250
+ * badge and the date are all in `@ticketlayer/elements-core` (AGENTS.md,
251
+ * TKT-11).
252
+ */
221
253
  interface TlEventCard {
222
254
  /**
223
255
  * Event data to display (tl-event-list passes this)
@@ -228,6 +260,13 @@ export namespace Components {
228
260
  */
229
261
  "eventId"?: string;
230
262
  }
263
+ /**
264
+ * tl-event-list - what the channel is selling, as a grid of tl-event-card.
265
+ * The web harness for `eventListCore`: it renders and it forwards. What to ask
266
+ * for, what came back and every string are in `@ticketlayer/elements-core`
267
+ * (AGENTS.md, TKT-11).
268
+ * Usage: <tl-event-list limit="12" columns="3"></tl-event-list>
269
+ */
231
270
  interface TlEventList {
232
271
  /**
233
272
  * Category filter
@@ -252,6 +291,12 @@ export namespace Components {
252
291
  * password is ever handled here.
253
292
  * States: enter email -> check your inbox (resend, enter code) -> signed in
254
293
  * (email + sign out).
294
+ * The web harness for `loginCore`: it renders and it forwards. The phases, the
295
+ * exchange, the auth subscriptions and every string are in
296
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
297
+ * Stencil surface and the two genuinely web things: the client the page
298
+ * published on `window.Ticketlayer`, and `window.location.search`, which is
299
+ * where this runtime keeps the `?code=` the core asks for.
255
300
  * Usage: <tl-login></tl-login>
256
301
  * @event tlAuthChanged - signed in or out ({ customer, authenticated })
257
302
  * @event tlMagicLinkSent - a link was requested for an email
@@ -274,6 +319,9 @@ export namespace Components {
274
319
  * the SDK): event, date, ticket count, total and status per row. Clicking a
275
320
  * row expands it to show the order's tickets (tl-order-tickets). Shows
276
321
  * tl-login inline when nobody is signed in.
322
+ * The web harness for `myOrdersCore`: it renders and it forwards. Who is
323
+ * signed in, the two auth subscriptions that keep that current, the listing
324
+ * and every string are in `@ticketlayer/elements-core` (AGENTS.md, TKT-11).
277
325
  * Usage: <tl-my-orders></tl-my-orders>
278
326
  * @event tlOrderSelect - a row was expanded ({ orderId })
279
327
  * @event tlError - the orders could not be loaded
@@ -319,6 +367,12 @@ export namespace Components {
319
367
  * page uses; `?redirect_status=` from a Stripe return is honoured too
320
368
  * 3. the SDK's `checkout:completed` event, for a page that mounts this before
321
369
  * the customer pays
370
+ * The web harness for `orderConfirmationCore`: it renders and it forwards. All
371
+ * three of those routes, the money rows, the event lookup and every string are
372
+ * in `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
373
+ * Stencil surface and the two genuinely web things: the client the page
374
+ * published on `window.Ticketlayer`, and `window.location.search`, which is
375
+ * where this runtime keeps the parameters the core asks for.
322
376
  * Usage: <tl-order-confirmation order-id="ord_xxx"></tl-order-confirmation>
323
377
  * @event tlOrderLoaded - the order was loaded
324
378
  * @event tlError - the order could not be loaded
@@ -348,18 +402,14 @@ export namespace Components {
348
402
  * cards with PDF download. Fetches the order through the SDK (order-access
349
403
  * gated by the session), so it works on a confirmation page or in an account.
350
404
  * Usage: <tl-order-tickets order-id="ord_xxx"></tl-order-tickets>
351
- * On an empty result it waits rather than concluding there is nothing.
352
- * Tickets are issued asynchronously: the payment confirms, the order is
353
- * marked paid, and entitlement issuance follows a moment later. A confirmation
354
- * page therefore renders BEFORE the passes exist - reliably, not occasionally.
355
- * The component used to answer that with "No tickets for this order yet",
356
- * which is true and reads as "something went wrong" to someone who has just
357
- * been charged. Refreshing showed them, so the only thing missing was the
358
- * waiting.
359
- * So: an empty order is treated as issuance in flight and polled, with the
360
- * gaps widening, for about a minute. Then it stops and says the tickets are
361
- * coming by email, because at that point something probably is wrong and a
362
- * page that polls forever is worse than one that admits it.
405
+ * On an empty result it waits rather than concluding there is nothing: tickets
406
+ * are issued a moment after the order is paid, so a confirmation page renders
407
+ * before the passes exist. The waiting, the widening schedule behind it and
408
+ * the point at which it gives up are all in `orderTicketsCore`
409
+ * (`@ticketlayer/elements-core`, AGENTS.md, TKT-11), along with every string.
410
+ * This harness renders and forwards, and the one thing it owns is pairing
411
+ * `mount()` with its teardown - which is what stops the polling when the
412
+ * element goes off screen.
363
413
  */
364
414
  interface TlOrderTickets {
365
415
  /**
@@ -379,6 +429,8 @@ export namespace Components {
379
429
  * cart and publishes cart:updated, so tl-cart and badges re-render on their own.
380
430
  * The API has no un-redeem, so the applied state offers only "use a different
381
431
  * code", which clears the input for another redemption.
432
+ * The web harness for `promoCodeCore`: the redemption, the two error messages
433
+ * and every string are the core's (AGENTS.md, TKT-11).
382
434
  * Usage: <tl-promo-code></tl-promo-code>
383
435
  * @event tlPromoApplied - a code was redeemed ({ code, benefit, alreadyHeld, cart })
384
436
  * @event tlError - the code was rejected
@@ -436,6 +488,14 @@ export namespace Components {
436
488
  */
437
489
  "ticket": TlTicketData;
438
490
  }
491
+ /**
492
+ * The web harness for `ticketSelectorCore`.
493
+ * It renders and it forwards: every decision, every string and every sum is in
494
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
495
+ * Stencil surface a host writes HTML against - the tag, the attributes, the
496
+ * three `tl*` events - plus the one thing that is genuinely web: finding the
497
+ * client the page published on `window.Ticketlayer`.
498
+ */
439
499
  interface TlTicketSelector {
440
500
  /**
441
501
  * Button label
@@ -575,14 +635,19 @@ declare global {
575
635
  new (): HTMLTlBuyTicketsButtonElement;
576
636
  };
577
637
  interface HTMLTlBuyTicketsWrapperElementEventMap {
578
- "tl-complete": OrderResult;
579
- "tl-error": { message: string };
580
- "tl-close": void;
638
+ "tlComplete": OrderResult;
639
+ "tlError": { message: string };
640
+ "tlClose": void;
581
641
  }
582
642
  /**
583
643
  * @component tl-buy-tickets-wrapper
584
644
  * Wraps any content and opens the Ticketlayer modal when clicked.
585
645
  * Uses the SDK's modal manager which handles the iframe overlay.
646
+ * The web harness for `buyTicketsWrapperCore`. What a press does, what it
647
+ * announces and what happens when no client has been published are all in
648
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11); what is left here is the
649
+ * Stencil surface, the accessibility attributes and the one genuinely web
650
+ * question the core refuses to answer - which key counts as a press.
586
651
  * @example <tl-buy-tickets-wrapper event-id="evt_001">
587
652
  * <button>Buy Tickets</button>
588
653
  * </tl-buy-tickets-wrapper>
@@ -610,6 +675,14 @@ declare global {
610
675
  "tlCartUpdated": { cart: TlCartData };
611
676
  "tlError": { message: string };
612
677
  }
678
+ /**
679
+ * The web harness for `cartCore`.
680
+ * It renders and it forwards. The cart, the money rows, the subscription that
681
+ * keeps them current and every string are in `@ticketlayer/elements-core`
682
+ * (AGENTS.md, TKT-11); what is left here is the Stencil surface a host writes
683
+ * HTML against and the one genuinely web thing, finding the client the page
684
+ * published on `window.Ticketlayer`.
685
+ */
613
686
  interface HTMLTlCartElement extends Components.TlCart, HTMLStencilElement {
614
687
  addEventListener<K extends keyof HTMLTlCartElementEventMap>(type: K, listener: (this: HTMLTlCartElement, ev: TlCartCustomEvent<HTMLTlCartElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
615
688
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -627,6 +700,13 @@ declare global {
627
700
  interface HTMLTlCartBadgeElementEventMap {
628
701
  "tlClick": { itemCount: number };
629
702
  }
703
+ /**
704
+ * The web harness for `cartBadgeCore`.
705
+ * The count, the "99+" rule, the cart subscription and the remembered value
706
+ * are all in `@ticketlayer/elements-core`. What is here is the Stencil surface,
707
+ * the icon, and the two web things the core is handed: the client the page
708
+ * published and `localStorage`.
709
+ */
630
710
  interface HTMLTlCartBadgeElement extends Components.TlCartBadge, HTMLStencilElement {
631
711
  addEventListener<K extends keyof HTMLTlCartBadgeElementEventMap>(type: K, listener: (this: HTMLTlCartBadgeElement, ev: TlCartBadgeCustomEvent<HTMLTlCartBadgeElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
632
712
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -653,6 +733,9 @@ declare global {
653
733
  * button, Escape, or `ui:modal-close-requested`. The panel embeds `<tl-cart>`,
654
734
  * so the actual cart rendering / remove / checkout is shared with the inline
655
735
  * cart; the drawer only adds the off-canvas chrome.
736
+ * The web harness for `cartDrawerCore`: the open/closed rule and the two
737
+ * intents are the core's (TKT-11). What stays here is the chrome and the one
738
+ * thing only a browser has, the Escape key.
656
739
  * @prop side - which edge the panel slides from (default 'right')
657
740
  * @event tlOpen - the drawer opened
658
741
  * @event tlClose - the drawer closed
@@ -672,14 +755,17 @@ declare global {
672
755
  new (): HTMLTlCartDrawerElement;
673
756
  };
674
757
  interface HTMLTlCheckoutWrapperElementEventMap {
675
- "tl-complete": OrderResult;
676
- "tl-error": { message: string };
677
- "tl-close": void;
758
+ "tlComplete": OrderResult;
759
+ "tlError": { message: string };
760
+ "tlClose": void;
678
761
  }
679
762
  /**
680
763
  * @component tl-checkout-wrapper
681
764
  * Wraps any content and opens the Ticketlayer checkout modal when clicked.
682
765
  * Uses the SDK's modal manager which handles the iframe overlay.
766
+ * The web harness for `checkoutWrapperCore`: it renders, it forwards, and it
767
+ * decides only which key press counts as activation. Everything else is in
768
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11).
683
769
  * @example <tl-checkout-wrapper>
684
770
  * <button>Proceed to Checkout</button>
685
771
  * </tl-checkout-wrapper>
@@ -702,6 +788,12 @@ declare global {
702
788
  "tlClick": { eventId: string };
703
789
  "tlError": { message: string };
704
790
  }
791
+ /**
792
+ * The web harness for `eventCardCore`.
793
+ * It renders and it forwards: which event is shown, how it is read, the status
794
+ * badge and the date are all in `@ticketlayer/elements-core` (AGENTS.md,
795
+ * TKT-11).
796
+ */
705
797
  interface HTMLTlEventCardElement extends Components.TlEventCard, HTMLStencilElement {
706
798
  addEventListener<K extends keyof HTMLTlEventCardElementEventMap>(type: K, listener: (this: HTMLTlEventCardElement, ev: TlEventCardCustomEvent<HTMLTlEventCardElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
707
799
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -719,6 +811,13 @@ declare global {
719
811
  interface HTMLTlEventListElementEventMap {
720
812
  "tlEventClick": { eventId: string };
721
813
  }
814
+ /**
815
+ * tl-event-list - what the channel is selling, as a grid of tl-event-card.
816
+ * The web harness for `eventListCore`: it renders and it forwards. What to ask
817
+ * for, what came back and every string are in `@ticketlayer/elements-core`
818
+ * (AGENTS.md, TKT-11).
819
+ * Usage: <tl-event-list limit="12" columns="3"></tl-event-list>
820
+ */
722
821
  interface HTMLTlEventListElement extends Components.TlEventList, HTMLStencilElement {
723
822
  addEventListener<K extends keyof HTMLTlEventListElementEventMap>(type: K, listener: (this: HTMLTlEventListElement, ev: TlEventListCustomEvent<HTMLTlEventListElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
724
823
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -746,6 +845,12 @@ declare global {
746
845
  * password is ever handled here.
747
846
  * States: enter email -> check your inbox (resend, enter code) -> signed in
748
847
  * (email + sign out).
848
+ * The web harness for `loginCore`: it renders and it forwards. The phases, the
849
+ * exchange, the auth subscriptions and every string are in
850
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
851
+ * Stencil surface and the two genuinely web things: the client the page
852
+ * published on `window.Ticketlayer`, and `window.location.search`, which is
853
+ * where this runtime keeps the `?code=` the core asks for.
749
854
  * Usage: <tl-login></tl-login>
750
855
  * @event tlAuthChanged - signed in or out ({ customer, authenticated })
751
856
  * @event tlMagicLinkSent - a link was requested for an email
@@ -774,6 +879,9 @@ declare global {
774
879
  * the SDK): event, date, ticket count, total and status per row. Clicking a
775
880
  * row expands it to show the order's tickets (tl-order-tickets). Shows
776
881
  * tl-login inline when nobody is signed in.
882
+ * The web harness for `myOrdersCore`: it renders and it forwards. Who is
883
+ * signed in, the two auth subscriptions that keep that current, the listing
884
+ * and every string are in `@ticketlayer/elements-core` (AGENTS.md, TKT-11).
777
885
  * Usage: <tl-my-orders></tl-my-orders>
778
886
  * @event tlOrderSelect - a row was expanded ({ orderId })
779
887
  * @event tlError - the orders could not be loaded
@@ -823,6 +931,12 @@ declare global {
823
931
  * page uses; `?redirect_status=` from a Stripe return is honoured too
824
932
  * 3. the SDK's `checkout:completed` event, for a page that mounts this before
825
933
  * the customer pays
934
+ * The web harness for `orderConfirmationCore`: it renders and it forwards. All
935
+ * three of those routes, the money rows, the event lookup and every string are
936
+ * in `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
937
+ * Stencil surface and the two genuinely web things: the client the page
938
+ * published on `window.Ticketlayer`, and `window.location.search`, which is
939
+ * where this runtime keeps the parameters the core asks for.
826
940
  * Usage: <tl-order-confirmation order-id="ord_xxx"></tl-order-confirmation>
827
941
  * @event tlOrderLoaded - the order was loaded
828
942
  * @event tlError - the order could not be loaded
@@ -846,18 +960,14 @@ declare global {
846
960
  * cards with PDF download. Fetches the order through the SDK (order-access
847
961
  * gated by the session), so it works on a confirmation page or in an account.
848
962
  * Usage: <tl-order-tickets order-id="ord_xxx"></tl-order-tickets>
849
- * On an empty result it waits rather than concluding there is nothing.
850
- * Tickets are issued asynchronously: the payment confirms, the order is
851
- * marked paid, and entitlement issuance follows a moment later. A confirmation
852
- * page therefore renders BEFORE the passes exist - reliably, not occasionally.
853
- * The component used to answer that with "No tickets for this order yet",
854
- * which is true and reads as "something went wrong" to someone who has just
855
- * been charged. Refreshing showed them, so the only thing missing was the
856
- * waiting.
857
- * So: an empty order is treated as issuance in flight and polled, with the
858
- * gaps widening, for about a minute. Then it stops and says the tickets are
859
- * coming by email, because at that point something probably is wrong and a
860
- * page that polls forever is worse than one that admits it.
963
+ * On an empty result it waits rather than concluding there is nothing: tickets
964
+ * are issued a moment after the order is paid, so a confirmation page renders
965
+ * before the passes exist. The waiting, the widening schedule behind it and
966
+ * the point at which it gives up are all in `orderTicketsCore`
967
+ * (`@ticketlayer/elements-core`, AGENTS.md, TKT-11), along with every string.
968
+ * This harness renders and forwards, and the one thing it owns is pairing
969
+ * `mount()` with its teardown - which is what stops the polling when the
970
+ * element goes off screen.
861
971
  */
862
972
  interface HTMLTlOrderTicketsElement extends Components.TlOrderTickets, HTMLStencilElement {
863
973
  }
@@ -876,6 +986,8 @@ declare global {
876
986
  * cart and publishes cart:updated, so tl-cart and badges re-render on their own.
877
987
  * The API has no un-redeem, so the applied state offers only "use a different
878
988
  * code", which clears the input for another redemption.
989
+ * The web harness for `promoCodeCore`: the redemption, the two error messages
990
+ * and every string are the core's (AGENTS.md, TKT-11).
879
991
  * Usage: <tl-promo-code></tl-promo-code>
880
992
  * @event tlPromoApplied - a code was redeemed ({ code, benefit, alreadyHeld, cart })
881
993
  * @event tlError - the code was rejected
@@ -932,6 +1044,14 @@ declare global {
932
1044
  "tlQuantityChange": { ticketTypeId: string; quantity: number; total: number };
933
1045
  "tlError": { message: string };
934
1046
  }
1047
+ /**
1048
+ * The web harness for `ticketSelectorCore`.
1049
+ * It renders and it forwards: every decision, every string and every sum is in
1050
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
1051
+ * Stencil surface a host writes HTML against - the tag, the attributes, the
1052
+ * three `tl*` events - plus the one thing that is genuinely web: finding the
1053
+ * client the page published on `window.Ticketlayer`.
1054
+ */
935
1055
  interface HTMLTlTicketSelectorElement extends Components.TlTicketSelector, HTMLStencilElement {
936
1056
  addEventListener<K extends keyof HTMLTlTicketSelectorElementEventMap>(type: K, listener: (this: HTMLTlTicketSelectorElement, ev: TlTicketSelectorCustomEvent<HTMLTlTicketSelectorElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
937
1057
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -1060,6 +1180,11 @@ declare namespace LocalJSX {
1060
1180
  * @component tl-buy-tickets-wrapper
1061
1181
  * Wraps any content and opens the Ticketlayer modal when clicked.
1062
1182
  * Uses the SDK's modal manager which handles the iframe overlay.
1183
+ * The web harness for `buyTicketsWrapperCore`. What a press does, what it
1184
+ * announces and what happens when no client has been published are all in
1185
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11); what is left here is the
1186
+ * Stencil surface, the accessibility attributes and the one genuinely web
1187
+ * question the core refuses to answer - which key counts as a press.
1063
1188
  * @example <tl-buy-tickets-wrapper event-id="evt_001">
1064
1189
  * <button>Buy Tickets</button>
1065
1190
  * </tl-buy-tickets-wrapper>
@@ -1084,16 +1209,24 @@ declare namespace LocalJSX {
1084
1209
  /**
1085
1210
  * Emitted when the modal closes
1086
1211
  */
1087
- "onTl-close"?: (event: TlBuyTicketsWrapperCustomEvent<void>) => void;
1212
+ "onTlClose"?: (event: TlBuyTicketsWrapperCustomEvent<void>) => void;
1088
1213
  /**
1089
1214
  * Emitted when purchase completes successfully
1090
1215
  */
1091
- "onTl-complete"?: (event: TlBuyTicketsWrapperCustomEvent<OrderResult>) => void;
1216
+ "onTlComplete"?: (event: TlBuyTicketsWrapperCustomEvent<OrderResult>) => void;
1092
1217
  /**
1093
1218
  * Emitted when an error occurs
1094
1219
  */
1095
- "onTl-error"?: (event: TlBuyTicketsWrapperCustomEvent<{ message: string }>) => void;
1220
+ "onTlError"?: (event: TlBuyTicketsWrapperCustomEvent<{ message: string }>) => void;
1096
1221
  }
1222
+ /**
1223
+ * The web harness for `cartCore`.
1224
+ * It renders and it forwards. The cart, the money rows, the subscription that
1225
+ * keeps them current and every string are in `@ticketlayer/elements-core`
1226
+ * (AGENTS.md, TKT-11); what is left here is the Stencil surface a host writes
1227
+ * HTML against and the one genuinely web thing, finding the client the page
1228
+ * published on `window.Ticketlayer`.
1229
+ */
1097
1230
  interface TlCart {
1098
1231
  /**
1099
1232
  * Checkout button label
@@ -1132,6 +1265,13 @@ declare namespace LocalJSX {
1132
1265
  */
1133
1266
  "showRemoveButtons"?: boolean;
1134
1267
  }
1268
+ /**
1269
+ * The web harness for `cartBadgeCore`.
1270
+ * The count, the "99+" rule, the cart subscription and the remembered value
1271
+ * are all in `@ticketlayer/elements-core`. What is here is the Stencil surface,
1272
+ * the icon, and the two web things the core is handed: the client the page
1273
+ * published and `localStorage`.
1274
+ */
1135
1275
  interface TlCartBadge {
1136
1276
  /**
1137
1277
  * Badge only mode - only shows the count bubble, no icon or button
@@ -1165,6 +1305,9 @@ declare namespace LocalJSX {
1165
1305
  * button, Escape, or `ui:modal-close-requested`. The panel embeds `<tl-cart>`,
1166
1306
  * so the actual cart rendering / remove / checkout is shared with the inline
1167
1307
  * cart; the drawer only adds the off-canvas chrome.
1308
+ * The web harness for `cartDrawerCore`: the open/closed rule and the two
1309
+ * intents are the core's (TKT-11). What stays here is the chrome and the one
1310
+ * thing only a browser has, the Escape key.
1168
1311
  * @prop side - which edge the panel slides from (default 'right')
1169
1312
  * @event tlOpen - the drawer opened
1170
1313
  * @event tlClose - the drawer closed
@@ -1192,6 +1335,9 @@ declare namespace LocalJSX {
1192
1335
  * @component tl-checkout-wrapper
1193
1336
  * Wraps any content and opens the Ticketlayer checkout modal when clicked.
1194
1337
  * Uses the SDK's modal manager which handles the iframe overlay.
1338
+ * The web harness for `checkoutWrapperCore`: it renders, it forwards, and it
1339
+ * decides only which key press counts as activation. Everything else is in
1340
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11).
1195
1341
  * @example <tl-checkout-wrapper>
1196
1342
  * <button>Proceed to Checkout</button>
1197
1343
  * </tl-checkout-wrapper>
@@ -1205,16 +1351,22 @@ declare namespace LocalJSX {
1205
1351
  /**
1206
1352
  * Emitted when the modal closes
1207
1353
  */
1208
- "onTl-close"?: (event: TlCheckoutWrapperCustomEvent<void>) => void;
1354
+ "onTlClose"?: (event: TlCheckoutWrapperCustomEvent<void>) => void;
1209
1355
  /**
1210
1356
  * Emitted when checkout completes successfully
1211
1357
  */
1212
- "onTl-complete"?: (event: TlCheckoutWrapperCustomEvent<OrderResult>) => void;
1358
+ "onTlComplete"?: (event: TlCheckoutWrapperCustomEvent<OrderResult>) => void;
1213
1359
  /**
1214
1360
  * Emitted when an error occurs
1215
1361
  */
1216
- "onTl-error"?: (event: TlCheckoutWrapperCustomEvent<{ message: string }>) => void;
1362
+ "onTlError"?: (event: TlCheckoutWrapperCustomEvent<{ message: string }>) => void;
1217
1363
  }
1364
+ /**
1365
+ * The web harness for `eventCardCore`.
1366
+ * It renders and it forwards: which event is shown, how it is read, the status
1367
+ * badge and the date are all in `@ticketlayer/elements-core` (AGENTS.md,
1368
+ * TKT-11).
1369
+ */
1218
1370
  interface TlEventCard {
1219
1371
  /**
1220
1372
  * Event data to display (tl-event-list passes this)
@@ -1233,6 +1385,13 @@ declare namespace LocalJSX {
1233
1385
  */
1234
1386
  "onTlError"?: (event: TlEventCardCustomEvent<{ message: string }>) => void;
1235
1387
  }
1388
+ /**
1389
+ * tl-event-list - what the channel is selling, as a grid of tl-event-card.
1390
+ * The web harness for `eventListCore`: it renders and it forwards. What to ask
1391
+ * for, what came back and every string are in `@ticketlayer/elements-core`
1392
+ * (AGENTS.md, TKT-11).
1393
+ * Usage: <tl-event-list limit="12" columns="3"></tl-event-list>
1394
+ */
1236
1395
  interface TlEventList {
1237
1396
  /**
1238
1397
  * Category filter
@@ -1261,6 +1420,12 @@ declare namespace LocalJSX {
1261
1420
  * password is ever handled here.
1262
1421
  * States: enter email -> check your inbox (resend, enter code) -> signed in
1263
1422
  * (email + sign out).
1423
+ * The web harness for `loginCore`: it renders and it forwards. The phases, the
1424
+ * exchange, the auth subscriptions and every string are in
1425
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
1426
+ * Stencil surface and the two genuinely web things: the client the page
1427
+ * published on `window.Ticketlayer`, and `window.location.search`, which is
1428
+ * where this runtime keeps the `?code=` the core asks for.
1264
1429
  * Usage: <tl-login></tl-login>
1265
1430
  * @event tlAuthChanged - signed in or out ({ customer, authenticated })
1266
1431
  * @event tlMagicLinkSent - a link was requested for an email
@@ -1286,6 +1451,9 @@ declare namespace LocalJSX {
1286
1451
  * the SDK): event, date, ticket count, total and status per row. Clicking a
1287
1452
  * row expands it to show the order's tickets (tl-order-tickets). Shows
1288
1453
  * tl-login inline when nobody is signed in.
1454
+ * The web harness for `myOrdersCore`: it renders and it forwards. Who is
1455
+ * signed in, the two auth subscriptions that keep that current, the listing
1456
+ * and every string are in `@ticketlayer/elements-core` (AGENTS.md, TKT-11).
1289
1457
  * Usage: <tl-my-orders></tl-my-orders>
1290
1458
  * @event tlOrderSelect - a row was expanded ({ orderId })
1291
1459
  * @event tlError - the orders could not be loaded
@@ -1337,6 +1505,12 @@ declare namespace LocalJSX {
1337
1505
  * page uses; `?redirect_status=` from a Stripe return is honoured too
1338
1506
  * 3. the SDK's `checkout:completed` event, for a page that mounts this before
1339
1507
  * the customer pays
1508
+ * The web harness for `orderConfirmationCore`: it renders and it forwards. All
1509
+ * three of those routes, the money rows, the event lookup and every string are
1510
+ * in `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
1511
+ * Stencil surface and the two genuinely web things: the client the page
1512
+ * published on `window.Ticketlayer`, and `window.location.search`, which is
1513
+ * where this runtime keeps the parameters the core asks for.
1340
1514
  * Usage: <tl-order-confirmation order-id="ord_xxx"></tl-order-confirmation>
1341
1515
  * @event tlOrderLoaded - the order was loaded
1342
1516
  * @event tlError - the order could not be loaded
@@ -1368,18 +1542,14 @@ declare namespace LocalJSX {
1368
1542
  * cards with PDF download. Fetches the order through the SDK (order-access
1369
1543
  * gated by the session), so it works on a confirmation page or in an account.
1370
1544
  * Usage: <tl-order-tickets order-id="ord_xxx"></tl-order-tickets>
1371
- * On an empty result it waits rather than concluding there is nothing.
1372
- * Tickets are issued asynchronously: the payment confirms, the order is
1373
- * marked paid, and entitlement issuance follows a moment later. A confirmation
1374
- * page therefore renders BEFORE the passes exist - reliably, not occasionally.
1375
- * The component used to answer that with "No tickets for this order yet",
1376
- * which is true and reads as "something went wrong" to someone who has just
1377
- * been charged. Refreshing showed them, so the only thing missing was the
1378
- * waiting.
1379
- * So: an empty order is treated as issuance in flight and polled, with the
1380
- * gaps widening, for about a minute. Then it stops and says the tickets are
1381
- * coming by email, because at that point something probably is wrong and a
1382
- * page that polls forever is worse than one that admits it.
1545
+ * On an empty result it waits rather than concluding there is nothing: tickets
1546
+ * are issued a moment after the order is paid, so a confirmation page renders
1547
+ * before the passes exist. The waiting, the widening schedule behind it and
1548
+ * the point at which it gives up are all in `orderTicketsCore`
1549
+ * (`@ticketlayer/elements-core`, AGENTS.md, TKT-11), along with every string.
1550
+ * This harness renders and forwards, and the one thing it owns is pairing
1551
+ * `mount()` with its teardown - which is what stops the polling when the
1552
+ * element goes off screen.
1383
1553
  */
1384
1554
  interface TlOrderTickets {
1385
1555
  /**
@@ -1399,6 +1569,8 @@ declare namespace LocalJSX {
1399
1569
  * cart and publishes cart:updated, so tl-cart and badges re-render on their own.
1400
1570
  * The API has no un-redeem, so the applied state offers only "use a different
1401
1571
  * code", which clears the input for another redemption.
1572
+ * The web harness for `promoCodeCore`: the redemption, the two error messages
1573
+ * and every string are the core's (AGENTS.md, TKT-11).
1402
1574
  * Usage: <tl-promo-code></tl-promo-code>
1403
1575
  * @event tlPromoApplied - a code was redeemed ({ code, benefit, alreadyHeld, cart })
1404
1576
  * @event tlError - the code was rejected
@@ -1482,6 +1654,14 @@ declare namespace LocalJSX {
1482
1654
  */
1483
1655
  "ticket": TlTicketData;
1484
1656
  }
1657
+ /**
1658
+ * The web harness for `ticketSelectorCore`.
1659
+ * It renders and it forwards: every decision, every string and every sum is in
1660
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
1661
+ * Stencil surface a host writes HTML against - the tag, the attributes, the
1662
+ * three `tl*` events - plus the one thing that is genuinely web: finding the
1663
+ * client the page published on `window.Ticketlayer`.
1664
+ */
1485
1665
  interface TlTicketSelector {
1486
1666
  /**
1487
1667
  * Button label
@@ -1656,6 +1836,11 @@ declare module "@stencil/core" {
1656
1836
  * @component tl-buy-tickets-wrapper
1657
1837
  * Wraps any content and opens the Ticketlayer modal when clicked.
1658
1838
  * Uses the SDK's modal manager which handles the iframe overlay.
1839
+ * The web harness for `buyTicketsWrapperCore`. What a press does, what it
1840
+ * announces and what happens when no client has been published are all in
1841
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11); what is left here is the
1842
+ * Stencil surface, the accessibility attributes and the one genuinely web
1843
+ * question the core refuses to answer - which key counts as a press.
1659
1844
  * @example <tl-buy-tickets-wrapper event-id="evt_001">
1660
1845
  * <button>Buy Tickets</button>
1661
1846
  * </tl-buy-tickets-wrapper>
@@ -1664,7 +1849,22 @@ declare module "@stencil/core" {
1664
1849
  * </tl-buy-tickets-wrapper>
1665
1850
  */
1666
1851
  "tl-buy-tickets-wrapper": LocalJSX.IntrinsicElements["tl-buy-tickets-wrapper"] & JSXBase.HTMLAttributes<HTMLTlBuyTicketsWrapperElement>;
1852
+ /**
1853
+ * The web harness for `cartCore`.
1854
+ * It renders and it forwards. The cart, the money rows, the subscription that
1855
+ * keeps them current and every string are in `@ticketlayer/elements-core`
1856
+ * (AGENTS.md, TKT-11); what is left here is the Stencil surface a host writes
1857
+ * HTML against and the one genuinely web thing, finding the client the page
1858
+ * published on `window.Ticketlayer`.
1859
+ */
1667
1860
  "tl-cart": LocalJSX.IntrinsicElements["tl-cart"] & JSXBase.HTMLAttributes<HTMLTlCartElement>;
1861
+ /**
1862
+ * The web harness for `cartBadgeCore`.
1863
+ * The count, the "99+" rule, the cart subscription and the remembered value
1864
+ * are all in `@ticketlayer/elements-core`. What is here is the Stencil surface,
1865
+ * the icon, and the two web things the core is handed: the client the page
1866
+ * published and `localStorage`.
1867
+ */
1668
1868
  "tl-cart-badge": LocalJSX.IntrinsicElements["tl-cart-badge"] & JSXBase.HTMLAttributes<HTMLTlCartBadgeElement>;
1669
1869
  /**
1670
1870
  * @component tl-cart-drawer
@@ -1674,6 +1874,9 @@ declare module "@stencil/core" {
1674
1874
  * button, Escape, or `ui:modal-close-requested`. The panel embeds `<tl-cart>`,
1675
1875
  * so the actual cart rendering / remove / checkout is shared with the inline
1676
1876
  * cart; the drawer only adds the off-canvas chrome.
1877
+ * The web harness for `cartDrawerCore`: the open/closed rule and the two
1878
+ * intents are the core's (TKT-11). What stays here is the chrome and the one
1879
+ * thing only a browser has, the Escape key.
1677
1880
  * @prop side - which edge the panel slides from (default 'right')
1678
1881
  * @event tlOpen - the drawer opened
1679
1882
  * @event tlClose - the drawer closed
@@ -1683,12 +1886,28 @@ declare module "@stencil/core" {
1683
1886
  * @component tl-checkout-wrapper
1684
1887
  * Wraps any content and opens the Ticketlayer checkout modal when clicked.
1685
1888
  * Uses the SDK's modal manager which handles the iframe overlay.
1889
+ * The web harness for `checkoutWrapperCore`: it renders, it forwards, and it
1890
+ * decides only which key press counts as activation. Everything else is in
1891
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11).
1686
1892
  * @example <tl-checkout-wrapper>
1687
1893
  * <button>Proceed to Checkout</button>
1688
1894
  * </tl-checkout-wrapper>
1689
1895
  */
1690
1896
  "tl-checkout-wrapper": LocalJSX.IntrinsicElements["tl-checkout-wrapper"] & JSXBase.HTMLAttributes<HTMLTlCheckoutWrapperElement>;
1897
+ /**
1898
+ * The web harness for `eventCardCore`.
1899
+ * It renders and it forwards: which event is shown, how it is read, the status
1900
+ * badge and the date are all in `@ticketlayer/elements-core` (AGENTS.md,
1901
+ * TKT-11).
1902
+ */
1691
1903
  "tl-event-card": LocalJSX.IntrinsicElements["tl-event-card"] & JSXBase.HTMLAttributes<HTMLTlEventCardElement>;
1904
+ /**
1905
+ * tl-event-list - what the channel is selling, as a grid of tl-event-card.
1906
+ * The web harness for `eventListCore`: it renders and it forwards. What to ask
1907
+ * for, what came back and every string are in `@ticketlayer/elements-core`
1908
+ * (AGENTS.md, TKT-11).
1909
+ * Usage: <tl-event-list limit="12" columns="3"></tl-event-list>
1910
+ */
1692
1911
  "tl-event-list": LocalJSX.IntrinsicElements["tl-event-list"] & JSXBase.HTMLAttributes<HTMLTlEventListElement>;
1693
1912
  /**
1694
1913
  * tl-login - magic-link sign-in. The customer enters an email, we ask the SDK
@@ -1698,6 +1917,12 @@ declare module "@stencil/core" {
1698
1917
  * password is ever handled here.
1699
1918
  * States: enter email -> check your inbox (resend, enter code) -> signed in
1700
1919
  * (email + sign out).
1920
+ * The web harness for `loginCore`: it renders and it forwards. The phases, the
1921
+ * exchange, the auth subscriptions and every string are in
1922
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
1923
+ * Stencil surface and the two genuinely web things: the client the page
1924
+ * published on `window.Ticketlayer`, and `window.location.search`, which is
1925
+ * where this runtime keeps the `?code=` the core asks for.
1701
1926
  * Usage: <tl-login></tl-login>
1702
1927
  * @event tlAuthChanged - signed in or out ({ customer, authenticated })
1703
1928
  * @event tlMagicLinkSent - a link was requested for an email
@@ -1709,6 +1934,9 @@ declare module "@stencil/core" {
1709
1934
  * the SDK): event, date, ticket count, total and status per row. Clicking a
1710
1935
  * row expands it to show the order's tickets (tl-order-tickets). Shows
1711
1936
  * tl-login inline when nobody is signed in.
1937
+ * The web harness for `myOrdersCore`: it renders and it forwards. Who is
1938
+ * signed in, the two auth subscriptions that keep that current, the listing
1939
+ * and every string are in `@ticketlayer/elements-core` (AGENTS.md, TKT-11).
1712
1940
  * Usage: <tl-my-orders></tl-my-orders>
1713
1941
  * @event tlOrderSelect - a row was expanded ({ orderId })
1714
1942
  * @event tlError - the orders could not be loaded
@@ -1725,6 +1953,12 @@ declare module "@stencil/core" {
1725
1953
  * page uses; `?redirect_status=` from a Stripe return is honoured too
1726
1954
  * 3. the SDK's `checkout:completed` event, for a page that mounts this before
1727
1955
  * the customer pays
1956
+ * The web harness for `orderConfirmationCore`: it renders and it forwards. All
1957
+ * three of those routes, the money rows, the event lookup and every string are
1958
+ * in `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
1959
+ * Stencil surface and the two genuinely web things: the client the page
1960
+ * published on `window.Ticketlayer`, and `window.location.search`, which is
1961
+ * where this runtime keeps the parameters the core asks for.
1728
1962
  * Usage: <tl-order-confirmation order-id="ord_xxx"></tl-order-confirmation>
1729
1963
  * @event tlOrderLoaded - the order was loaded
1730
1964
  * @event tlError - the order could not be loaded
@@ -1735,18 +1969,14 @@ declare module "@stencil/core" {
1735
1969
  * cards with PDF download. Fetches the order through the SDK (order-access
1736
1970
  * gated by the session), so it works on a confirmation page or in an account.
1737
1971
  * Usage: <tl-order-tickets order-id="ord_xxx"></tl-order-tickets>
1738
- * On an empty result it waits rather than concluding there is nothing.
1739
- * Tickets are issued asynchronously: the payment confirms, the order is
1740
- * marked paid, and entitlement issuance follows a moment later. A confirmation
1741
- * page therefore renders BEFORE the passes exist - reliably, not occasionally.
1742
- * The component used to answer that with "No tickets for this order yet",
1743
- * which is true and reads as "something went wrong" to someone who has just
1744
- * been charged. Refreshing showed them, so the only thing missing was the
1745
- * waiting.
1746
- * So: an empty order is treated as issuance in flight and polled, with the
1747
- * gaps widening, for about a minute. Then it stops and says the tickets are
1748
- * coming by email, because at that point something probably is wrong and a
1749
- * page that polls forever is worse than one that admits it.
1972
+ * On an empty result it waits rather than concluding there is nothing: tickets
1973
+ * are issued a moment after the order is paid, so a confirmation page renders
1974
+ * before the passes exist. The waiting, the widening schedule behind it and
1975
+ * the point at which it gives up are all in `orderTicketsCore`
1976
+ * (`@ticketlayer/elements-core`, AGENTS.md, TKT-11), along with every string.
1977
+ * This harness renders and forwards, and the one thing it owns is pairing
1978
+ * `mount()` with its teardown - which is what stops the polling when the
1979
+ * element goes off screen.
1750
1980
  */
1751
1981
  "tl-order-tickets": LocalJSX.IntrinsicElements["tl-order-tickets"] & JSXBase.HTMLAttributes<HTMLTlOrderTicketsElement>;
1752
1982
  /**
@@ -1756,6 +1986,8 @@ declare module "@stencil/core" {
1756
1986
  * cart and publishes cart:updated, so tl-cart and badges re-render on their own.
1757
1987
  * The API has no un-redeem, so the applied state offers only "use a different
1758
1988
  * code", which clears the input for another redemption.
1989
+ * The web harness for `promoCodeCore`: the redemption, the two error messages
1990
+ * and every string are the core's (AGENTS.md, TKT-11).
1759
1991
  * Usage: <tl-promo-code></tl-promo-code>
1760
1992
  * @event tlPromoApplied - a code was redeemed ({ code, benefit, alreadyHeld, cart })
1761
1993
  * @event tlError - the code was rejected
@@ -1768,6 +2000,14 @@ declare module "@stencil/core" {
1768
2000
  * Used/Void when redeemed or cancelled.
1769
2001
  */
1770
2002
  "tl-ticket": LocalJSX.IntrinsicElements["tl-ticket"] & JSXBase.HTMLAttributes<HTMLTlTicketElement>;
2003
+ /**
2004
+ * The web harness for `ticketSelectorCore`.
2005
+ * It renders and it forwards: every decision, every string and every sum is in
2006
+ * `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
2007
+ * Stencil surface a host writes HTML against - the tag, the attributes, the
2008
+ * three `tl*` events - plus the one thing that is genuinely web: finding the
2009
+ * client the page published on `window.Ticketlayer`.
2010
+ */
1771
2011
  "tl-ticket-selector": LocalJSX.IntrinsicElements["tl-ticket-selector"] & JSXBase.HTMLAttributes<HTMLTlTicketSelectorElement>;
1772
2012
  }
1773
2013
  }