@ticketlayer/elements 0.4.0 → 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 (161) hide show
  1. package/dist/cjs/{index-I9CoYv3k.js → index-DanPUX0s.js} +1 -1
  2. package/dist/cjs/index.cjs.js +2 -1
  3. package/dist/cjs/loader.cjs.js +2 -2
  4. package/dist/cjs/ticket-selector-BYVL13k_.js +3623 -0
  5. package/dist/cjs/ticketlayer-elements.cjs.js +2 -2
  6. package/dist/cjs/tl-buy-modal.cjs.entry.js +3 -3
  7. package/dist/cjs/tl-buy-tickets-button.cjs.entry.js +89 -74
  8. package/dist/cjs/tl-buy-tickets-wrapper.cjs.entry.js +61 -30
  9. package/dist/cjs/tl-cart-badge.cjs.entry.js +74 -61
  10. package/dist/cjs/tl-cart-drawer.cjs.entry.js +51 -23
  11. package/dist/cjs/tl-cart.cjs.entry.js +71 -103
  12. package/dist/cjs/tl-checkout-wrapper.cjs.entry.js +51 -29
  13. package/dist/cjs/tl-event-card.cjs.entry.js +43 -105
  14. package/dist/cjs/tl-event-list.cjs.entry.js +72 -35
  15. package/dist/cjs/tl-login.cjs.entry.js +74 -141
  16. package/dist/cjs/tl-my-orders.cjs.entry.js +52 -92
  17. package/dist/cjs/tl-occurrence-selector_2.cjs.entry.js +153 -921
  18. package/dist/cjs/tl-order-confirmation.cjs.entry.js +71 -107
  19. package/dist/cjs/tl-order-tickets_2.cjs.entry.js +48 -74
  20. package/dist/cjs/tl-promo-code.cjs.entry.js +50 -47
  21. package/dist/cjs/tl-seat-map.cjs.entry.js +3 -3
  22. package/dist/cjs/web-query-Ce73jB4k.js +16 -0
  23. package/dist/collection/components/tl-buy-modal/tl-buy-modal.js +2 -2
  24. package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.css +37 -0
  25. package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.js +105 -79
  26. package/dist/collection/components/tl-buy-tickets-wrapper/tl-buy-tickets-wrapper.js +73 -30
  27. package/dist/collection/components/tl-cart/tl-cart.js +82 -107
  28. package/dist/collection/components/tl-cart-badge/tl-cart-badge.js +62 -62
  29. package/dist/collection/components/tl-cart-drawer/tl-cart-drawer.js +56 -24
  30. package/dist/collection/components/tl-checkout-wrapper/tl-checkout-wrapper.js +61 -29
  31. package/dist/collection/components/tl-event-card/event-card-adapter.js +11 -23
  32. package/dist/collection/components/tl-event-card/tl-event-card.js +51 -84
  33. package/dist/collection/components/tl-event-list/tl-event-list.js +82 -38
  34. package/dist/collection/components/tl-login/tl-login.js +83 -147
  35. package/dist/collection/components/tl-my-orders/tl-my-orders.js +58 -96
  36. package/dist/collection/components/tl-occurrence-selector/tl-occurrence-selector.js +137 -516
  37. package/dist/collection/components/tl-order-confirmation/tl-order-confirmation.js +81 -115
  38. package/dist/collection/components/tl-order-tickets/tl-order-tickets.js +57 -92
  39. package/dist/collection/components/tl-promo-code/tl-promo-code.js +55 -50
  40. package/dist/collection/components/tl-seat-map/tl-seat-map.js +2 -2
  41. package/dist/collection/components/tl-ticket-selector/tl-ticket-selector.js +34 -20
  42. package/dist/collection/utils/order-summary.js +15 -135
  43. package/dist/collection/utils/testing/deep-text.js +29 -0
  44. package/dist/collection/utils/testing/fixtures.js +290 -0
  45. package/dist/collection/utils/testing/mock-sdk.js +13 -2
  46. package/dist/collection/utils/web-query.js +12 -0
  47. package/dist/collection/utils/web-storage.js +22 -0
  48. package/dist/components/ticket-selector.js +1 -0
  49. package/dist/components/tl-buy-modal.js +1 -1
  50. package/dist/components/tl-buy-tickets-button.js +1 -1
  51. package/dist/components/tl-buy-tickets-wrapper2.js +1 -1
  52. package/dist/components/tl-cart-badge.js +1 -1
  53. package/dist/components/tl-cart-drawer.js +1 -1
  54. package/dist/components/tl-cart2.js +1 -1
  55. package/dist/components/tl-checkout-wrapper2.js +1 -1
  56. package/dist/components/tl-event-card2.js +1 -1
  57. package/dist/components/tl-event-list.js +1 -1
  58. package/dist/components/tl-login2.js +1 -1
  59. package/dist/components/tl-my-orders.js +1 -1
  60. package/dist/components/tl-occurrence-selector2.js +1 -1
  61. package/dist/components/tl-order-confirmation.js +1 -1
  62. package/dist/components/tl-order-tickets2.js +1 -1
  63. package/dist/components/tl-promo-code.js +1 -1
  64. package/dist/components/tl-seat-map.js +1 -1
  65. package/dist/components/tl-ticket-selector2.js +1 -1
  66. package/dist/components/web-query.js +1 -0
  67. package/dist/elements.docs.json +34 -34
  68. package/dist/esm/{index-OoYV1faY.js → index-imfxp765.js} +1 -1
  69. package/dist/esm/index.js +2 -1
  70. package/dist/esm/loader.js +3 -3
  71. package/dist/esm/ticket-selector-BwChnHVC.js +3606 -0
  72. package/dist/esm/ticketlayer-elements.js +3 -3
  73. package/dist/esm/tl-buy-modal.entry.js +3 -3
  74. package/dist/esm/tl-buy-tickets-button.entry.js +90 -75
  75. package/dist/esm/tl-buy-tickets-wrapper.entry.js +62 -31
  76. package/dist/esm/tl-cart-badge.entry.js +75 -62
  77. package/dist/esm/tl-cart-drawer.entry.js +52 -24
  78. package/dist/esm/tl-cart.entry.js +72 -104
  79. package/dist/esm/tl-checkout-wrapper.entry.js +52 -30
  80. package/dist/esm/tl-event-card.entry.js +44 -106
  81. package/dist/esm/tl-event-list.entry.js +73 -36
  82. package/dist/esm/tl-login.entry.js +75 -142
  83. package/dist/esm/tl-my-orders.entry.js +53 -93
  84. package/dist/esm/tl-occurrence-selector_2.entry.js +152 -920
  85. package/dist/esm/tl-order-confirmation.entry.js +72 -108
  86. package/dist/esm/tl-order-tickets_2.entry.js +49 -75
  87. package/dist/esm/tl-promo-code.entry.js +51 -48
  88. package/dist/esm/tl-seat-map.entry.js +3 -3
  89. package/dist/esm/web-query-Bdbb2lk5.js +14 -0
  90. package/dist/ticketlayer-elements/index.esm.js +1 -1
  91. package/dist/ticketlayer-elements/p-45923d2c.entry.js +1 -0
  92. package/dist/ticketlayer-elements/p-492adc77.entry.js +1 -0
  93. package/dist/ticketlayer-elements/p-4cfc9e53.entry.js +1 -0
  94. package/dist/ticketlayer-elements/{p-ac264adc.entry.js → p-5135630e.entry.js} +1 -1
  95. package/dist/ticketlayer-elements/p-5bbce3b5.entry.js +1 -0
  96. package/dist/ticketlayer-elements/p-7d547721.entry.js +1 -0
  97. package/dist/ticketlayer-elements/p-7fe7b6ba.entry.js +1 -0
  98. package/dist/ticketlayer-elements/p-8122f0c1.entry.js +1 -0
  99. package/dist/ticketlayer-elements/p-98d40869.entry.js +1 -0
  100. package/dist/ticketlayer-elements/p-Bdbb2lk5.js +1 -0
  101. package/dist/ticketlayer-elements/p-BwChnHVC.js +1 -0
  102. package/dist/ticketlayer-elements/p-abec290a.entry.js +1 -0
  103. package/dist/ticketlayer-elements/p-ac79a3f6.entry.js +1 -0
  104. package/dist/ticketlayer-elements/p-d01f4429.entry.js +1 -0
  105. package/dist/ticketlayer-elements/p-d7ffaf46.entry.js +1 -0
  106. package/dist/ticketlayer-elements/p-e7170f3c.entry.js +1 -0
  107. package/dist/ticketlayer-elements/p-e787e862.entry.js +1 -0
  108. package/dist/ticketlayer-elements/p-f1ff931f.entry.js +1 -0
  109. package/dist/ticketlayer-elements/p-imfxp765.js +3 -0
  110. package/dist/ticketlayer-elements/ticketlayer-elements.css +1 -1
  111. package/dist/ticketlayer-elements/ticketlayer-elements.esm.js +1 -1
  112. package/dist/types/components/tl-buy-tickets-button/tl-buy-tickets-button.d.ts +40 -8
  113. package/dist/types/components/tl-buy-tickets-wrapper/tl-buy-tickets-wrapper.d.ts +20 -1
  114. package/dist/types/components/tl-cart/tl-cart.d.ts +40 -42
  115. package/dist/types/components/tl-cart-badge/tl-cart-badge.d.ts +22 -7
  116. package/dist/types/components/tl-cart-drawer/tl-cart-drawer.d.ts +28 -5
  117. package/dist/types/components/tl-checkout-wrapper/tl-checkout-wrapper.d.ts +18 -1
  118. package/dist/types/components/tl-event-card/event-card-adapter.d.ts +9 -20
  119. package/dist/types/components/tl-event-card/tl-event-card.d.ts +25 -28
  120. package/dist/types/components/tl-event-list/tl-event-list.d.ts +46 -6
  121. package/dist/types/components/tl-login/tl-login.d.ts +68 -22
  122. package/dist/types/components/tl-my-orders/tl-my-orders.d.ts +30 -12
  123. package/dist/types/components/tl-occurrence-selector/tl-occurrence-selector.d.ts +73 -161
  124. package/dist/types/components/tl-order-confirmation/tl-order-confirmation.d.ts +48 -15
  125. package/dist/types/components/tl-order-tickets/tl-order-tickets.d.ts +29 -31
  126. package/dist/types/components/tl-promo-code/tl-promo-code.d.ts +28 -10
  127. package/dist/types/components/tl-ticket/tl-ticket.d.ts +2 -11
  128. package/dist/types/components/tl-ticket-selector/tl-ticket-selector.d.ts +22 -4
  129. package/dist/types/components.d.ts +270 -62
  130. package/dist/types/utils/order-summary.d.ts +14 -97
  131. package/dist/types/utils/testing/deep-text.d.ts +13 -0
  132. package/dist/types/utils/testing/fixtures.d.ts +225 -0
  133. package/dist/types/utils/testing/mock-sdk.d.ts +14 -1
  134. package/dist/types/utils/web-query.d.ts +18 -0
  135. package/dist/types/utils/web-storage.d.ts +16 -0
  136. package/elements.catalogue.json +602 -50
  137. package/package.json +8 -6
  138. package/dist/cjs/money-BtmM2gt-.js +0 -118
  139. package/dist/cjs/order-summary-X3TlZxc2.js +0 -150
  140. package/dist/components/money.js +0 -1
  141. package/dist/components/order-summary.js +0 -1
  142. package/dist/esm/money-4ig0-WB6.js +0 -112
  143. package/dist/esm/order-summary-DiDtvfZM.js +0 -136
  144. package/dist/ticketlayer-elements/p-0814420f.entry.js +0 -1
  145. package/dist/ticketlayer-elements/p-0acabc26.entry.js +0 -1
  146. package/dist/ticketlayer-elements/p-109a3feb.entry.js +0 -1
  147. package/dist/ticketlayer-elements/p-1a4ba71c.entry.js +0 -1
  148. package/dist/ticketlayer-elements/p-318965c1.entry.js +0 -1
  149. package/dist/ticketlayer-elements/p-347c7fd1.entry.js +0 -1
  150. package/dist/ticketlayer-elements/p-3649c26d.entry.js +0 -1
  151. package/dist/ticketlayer-elements/p-40260cc9.entry.js +0 -1
  152. package/dist/ticketlayer-elements/p-4ig0-WB6.js +0 -1
  153. package/dist/ticketlayer-elements/p-55fd2f9f.entry.js +0 -1
  154. package/dist/ticketlayer-elements/p-62ee659b.entry.js +0 -1
  155. package/dist/ticketlayer-elements/p-7d4ecc2b.entry.js +0 -1
  156. package/dist/ticketlayer-elements/p-7f0abf95.entry.js +0 -1
  157. package/dist/ticketlayer-elements/p-BXpVGW51.js +0 -1
  158. package/dist/ticketlayer-elements/p-OoYV1faY.js +0 -3
  159. package/dist/ticketlayer-elements/p-a3c1b26c.entry.js +0 -1
  160. package/dist/ticketlayer-elements/p-aeb4c6fb.entry.js +0 -1
  161. package/dist/ticketlayer-elements/p-ba62541f.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
@@ -583,14 +635,19 @@ declare global {
583
635
  new (): HTMLTlBuyTicketsButtonElement;
584
636
  };
585
637
  interface HTMLTlBuyTicketsWrapperElementEventMap {
586
- "tl-complete": OrderResult;
587
- "tl-error": { message: string };
588
- "tl-close": void;
638
+ "tlComplete": OrderResult;
639
+ "tlError": { message: string };
640
+ "tlClose": void;
589
641
  }
590
642
  /**
591
643
  * @component tl-buy-tickets-wrapper
592
644
  * Wraps any content and opens the Ticketlayer modal when clicked.
593
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.
594
651
  * @example <tl-buy-tickets-wrapper event-id="evt_001">
595
652
  * <button>Buy Tickets</button>
596
653
  * </tl-buy-tickets-wrapper>
@@ -618,6 +675,14 @@ declare global {
618
675
  "tlCartUpdated": { cart: TlCartData };
619
676
  "tlError": { message: string };
620
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
+ */
621
686
  interface HTMLTlCartElement extends Components.TlCart, HTMLStencilElement {
622
687
  addEventListener<K extends keyof HTMLTlCartElementEventMap>(type: K, listener: (this: HTMLTlCartElement, ev: TlCartCustomEvent<HTMLTlCartElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
623
688
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -635,6 +700,13 @@ declare global {
635
700
  interface HTMLTlCartBadgeElementEventMap {
636
701
  "tlClick": { itemCount: number };
637
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
+ */
638
710
  interface HTMLTlCartBadgeElement extends Components.TlCartBadge, HTMLStencilElement {
639
711
  addEventListener<K extends keyof HTMLTlCartBadgeElementEventMap>(type: K, listener: (this: HTMLTlCartBadgeElement, ev: TlCartBadgeCustomEvent<HTMLTlCartBadgeElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
640
712
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -661,6 +733,9 @@ declare global {
661
733
  * button, Escape, or `ui:modal-close-requested`. The panel embeds `<tl-cart>`,
662
734
  * so the actual cart rendering / remove / checkout is shared with the inline
663
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.
664
739
  * @prop side - which edge the panel slides from (default 'right')
665
740
  * @event tlOpen - the drawer opened
666
741
  * @event tlClose - the drawer closed
@@ -680,14 +755,17 @@ declare global {
680
755
  new (): HTMLTlCartDrawerElement;
681
756
  };
682
757
  interface HTMLTlCheckoutWrapperElementEventMap {
683
- "tl-complete": OrderResult;
684
- "tl-error": { message: string };
685
- "tl-close": void;
758
+ "tlComplete": OrderResult;
759
+ "tlError": { message: string };
760
+ "tlClose": void;
686
761
  }
687
762
  /**
688
763
  * @component tl-checkout-wrapper
689
764
  * Wraps any content and opens the Ticketlayer checkout modal when clicked.
690
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).
691
769
  * @example <tl-checkout-wrapper>
692
770
  * <button>Proceed to Checkout</button>
693
771
  * </tl-checkout-wrapper>
@@ -710,6 +788,12 @@ declare global {
710
788
  "tlClick": { eventId: string };
711
789
  "tlError": { message: string };
712
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
+ */
713
797
  interface HTMLTlEventCardElement extends Components.TlEventCard, HTMLStencilElement {
714
798
  addEventListener<K extends keyof HTMLTlEventCardElementEventMap>(type: K, listener: (this: HTMLTlEventCardElement, ev: TlEventCardCustomEvent<HTMLTlEventCardElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
715
799
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -727,6 +811,13 @@ declare global {
727
811
  interface HTMLTlEventListElementEventMap {
728
812
  "tlEventClick": { eventId: string };
729
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
+ */
730
821
  interface HTMLTlEventListElement extends Components.TlEventList, HTMLStencilElement {
731
822
  addEventListener<K extends keyof HTMLTlEventListElementEventMap>(type: K, listener: (this: HTMLTlEventListElement, ev: TlEventListCustomEvent<HTMLTlEventListElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
732
823
  addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
@@ -754,6 +845,12 @@ declare global {
754
845
  * password is ever handled here.
755
846
  * States: enter email -> check your inbox (resend, enter code) -> signed in
756
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.
757
854
  * Usage: <tl-login></tl-login>
758
855
  * @event tlAuthChanged - signed in or out ({ customer, authenticated })
759
856
  * @event tlMagicLinkSent - a link was requested for an email
@@ -782,6 +879,9 @@ declare global {
782
879
  * the SDK): event, date, ticket count, total and status per row. Clicking a
783
880
  * row expands it to show the order's tickets (tl-order-tickets). Shows
784
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).
785
885
  * Usage: <tl-my-orders></tl-my-orders>
786
886
  * @event tlOrderSelect - a row was expanded ({ orderId })
787
887
  * @event tlError - the orders could not be loaded
@@ -831,6 +931,12 @@ declare global {
831
931
  * page uses; `?redirect_status=` from a Stripe return is honoured too
832
932
  * 3. the SDK's `checkout:completed` event, for a page that mounts this before
833
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.
834
940
  * Usage: <tl-order-confirmation order-id="ord_xxx"></tl-order-confirmation>
835
941
  * @event tlOrderLoaded - the order was loaded
836
942
  * @event tlError - the order could not be loaded
@@ -854,18 +960,14 @@ declare global {
854
960
  * cards with PDF download. Fetches the order through the SDK (order-access
855
961
  * gated by the session), so it works on a confirmation page or in an account.
856
962
  * Usage: <tl-order-tickets order-id="ord_xxx"></tl-order-tickets>
857
- * On an empty result it waits rather than concluding there is nothing.
858
- * Tickets are issued asynchronously: the payment confirms, the order is
859
- * marked paid, and entitlement issuance follows a moment later. A confirmation
860
- * page therefore renders BEFORE the passes exist - reliably, not occasionally.
861
- * The component used to answer that with "No tickets for this order yet",
862
- * which is true and reads as "something went wrong" to someone who has just
863
- * been charged. Refreshing showed them, so the only thing missing was the
864
- * waiting.
865
- * So: an empty order is treated as issuance in flight and polled, with the
866
- * gaps widening, for about a minute. Then it stops and says the tickets are
867
- * coming by email, because at that point something probably is wrong and a
868
- * 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.
869
971
  */
870
972
  interface HTMLTlOrderTicketsElement extends Components.TlOrderTickets, HTMLStencilElement {
871
973
  }
@@ -884,6 +986,8 @@ declare global {
884
986
  * cart and publishes cart:updated, so tl-cart and badges re-render on their own.
885
987
  * The API has no un-redeem, so the applied state offers only "use a different
886
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).
887
991
  * Usage: <tl-promo-code></tl-promo-code>
888
992
  * @event tlPromoApplied - a code was redeemed ({ code, benefit, alreadyHeld, cart })
889
993
  * @event tlError - the code was rejected
@@ -1076,6 +1180,11 @@ declare namespace LocalJSX {
1076
1180
  * @component tl-buy-tickets-wrapper
1077
1181
  * Wraps any content and opens the Ticketlayer modal when clicked.
1078
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.
1079
1188
  * @example <tl-buy-tickets-wrapper event-id="evt_001">
1080
1189
  * <button>Buy Tickets</button>
1081
1190
  * </tl-buy-tickets-wrapper>
@@ -1100,16 +1209,24 @@ declare namespace LocalJSX {
1100
1209
  /**
1101
1210
  * Emitted when the modal closes
1102
1211
  */
1103
- "onTl-close"?: (event: TlBuyTicketsWrapperCustomEvent<void>) => void;
1212
+ "onTlClose"?: (event: TlBuyTicketsWrapperCustomEvent<void>) => void;
1104
1213
  /**
1105
1214
  * Emitted when purchase completes successfully
1106
1215
  */
1107
- "onTl-complete"?: (event: TlBuyTicketsWrapperCustomEvent<OrderResult>) => void;
1216
+ "onTlComplete"?: (event: TlBuyTicketsWrapperCustomEvent<OrderResult>) => void;
1108
1217
  /**
1109
1218
  * Emitted when an error occurs
1110
1219
  */
1111
- "onTl-error"?: (event: TlBuyTicketsWrapperCustomEvent<{ message: string }>) => void;
1220
+ "onTlError"?: (event: TlBuyTicketsWrapperCustomEvent<{ message: string }>) => void;
1112
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
+ */
1113
1230
  interface TlCart {
1114
1231
  /**
1115
1232
  * Checkout button label
@@ -1148,6 +1265,13 @@ declare namespace LocalJSX {
1148
1265
  */
1149
1266
  "showRemoveButtons"?: boolean;
1150
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
+ */
1151
1275
  interface TlCartBadge {
1152
1276
  /**
1153
1277
  * Badge only mode - only shows the count bubble, no icon or button
@@ -1181,6 +1305,9 @@ declare namespace LocalJSX {
1181
1305
  * button, Escape, or `ui:modal-close-requested`. The panel embeds `<tl-cart>`,
1182
1306
  * so the actual cart rendering / remove / checkout is shared with the inline
1183
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.
1184
1311
  * @prop side - which edge the panel slides from (default 'right')
1185
1312
  * @event tlOpen - the drawer opened
1186
1313
  * @event tlClose - the drawer closed
@@ -1208,6 +1335,9 @@ declare namespace LocalJSX {
1208
1335
  * @component tl-checkout-wrapper
1209
1336
  * Wraps any content and opens the Ticketlayer checkout modal when clicked.
1210
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).
1211
1341
  * @example <tl-checkout-wrapper>
1212
1342
  * <button>Proceed to Checkout</button>
1213
1343
  * </tl-checkout-wrapper>
@@ -1221,16 +1351,22 @@ declare namespace LocalJSX {
1221
1351
  /**
1222
1352
  * Emitted when the modal closes
1223
1353
  */
1224
- "onTl-close"?: (event: TlCheckoutWrapperCustomEvent<void>) => void;
1354
+ "onTlClose"?: (event: TlCheckoutWrapperCustomEvent<void>) => void;
1225
1355
  /**
1226
1356
  * Emitted when checkout completes successfully
1227
1357
  */
1228
- "onTl-complete"?: (event: TlCheckoutWrapperCustomEvent<OrderResult>) => void;
1358
+ "onTlComplete"?: (event: TlCheckoutWrapperCustomEvent<OrderResult>) => void;
1229
1359
  /**
1230
1360
  * Emitted when an error occurs
1231
1361
  */
1232
- "onTl-error"?: (event: TlCheckoutWrapperCustomEvent<{ message: string }>) => void;
1362
+ "onTlError"?: (event: TlCheckoutWrapperCustomEvent<{ message: string }>) => void;
1233
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
+ */
1234
1370
  interface TlEventCard {
1235
1371
  /**
1236
1372
  * Event data to display (tl-event-list passes this)
@@ -1249,6 +1385,13 @@ declare namespace LocalJSX {
1249
1385
  */
1250
1386
  "onTlError"?: (event: TlEventCardCustomEvent<{ message: string }>) => void;
1251
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
+ */
1252
1395
  interface TlEventList {
1253
1396
  /**
1254
1397
  * Category filter
@@ -1277,6 +1420,12 @@ declare namespace LocalJSX {
1277
1420
  * password is ever handled here.
1278
1421
  * States: enter email -> check your inbox (resend, enter code) -> signed in
1279
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.
1280
1429
  * Usage: <tl-login></tl-login>
1281
1430
  * @event tlAuthChanged - signed in or out ({ customer, authenticated })
1282
1431
  * @event tlMagicLinkSent - a link was requested for an email
@@ -1302,6 +1451,9 @@ declare namespace LocalJSX {
1302
1451
  * the SDK): event, date, ticket count, total and status per row. Clicking a
1303
1452
  * row expands it to show the order's tickets (tl-order-tickets). Shows
1304
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).
1305
1457
  * Usage: <tl-my-orders></tl-my-orders>
1306
1458
  * @event tlOrderSelect - a row was expanded ({ orderId })
1307
1459
  * @event tlError - the orders could not be loaded
@@ -1353,6 +1505,12 @@ declare namespace LocalJSX {
1353
1505
  * page uses; `?redirect_status=` from a Stripe return is honoured too
1354
1506
  * 3. the SDK's `checkout:completed` event, for a page that mounts this before
1355
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.
1356
1514
  * Usage: <tl-order-confirmation order-id="ord_xxx"></tl-order-confirmation>
1357
1515
  * @event tlOrderLoaded - the order was loaded
1358
1516
  * @event tlError - the order could not be loaded
@@ -1384,18 +1542,14 @@ declare namespace LocalJSX {
1384
1542
  * cards with PDF download. Fetches the order through the SDK (order-access
1385
1543
  * gated by the session), so it works on a confirmation page or in an account.
1386
1544
  * Usage: <tl-order-tickets order-id="ord_xxx"></tl-order-tickets>
1387
- * On an empty result it waits rather than concluding there is nothing.
1388
- * Tickets are issued asynchronously: the payment confirms, the order is
1389
- * marked paid, and entitlement issuance follows a moment later. A confirmation
1390
- * page therefore renders BEFORE the passes exist - reliably, not occasionally.
1391
- * The component used to answer that with "No tickets for this order yet",
1392
- * which is true and reads as "something went wrong" to someone who has just
1393
- * been charged. Refreshing showed them, so the only thing missing was the
1394
- * waiting.
1395
- * So: an empty order is treated as issuance in flight and polled, with the
1396
- * gaps widening, for about a minute. Then it stops and says the tickets are
1397
- * coming by email, because at that point something probably is wrong and a
1398
- * 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.
1399
1553
  */
1400
1554
  interface TlOrderTickets {
1401
1555
  /**
@@ -1415,6 +1569,8 @@ declare namespace LocalJSX {
1415
1569
  * cart and publishes cart:updated, so tl-cart and badges re-render on their own.
1416
1570
  * The API has no un-redeem, so the applied state offers only "use a different
1417
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).
1418
1574
  * Usage: <tl-promo-code></tl-promo-code>
1419
1575
  * @event tlPromoApplied - a code was redeemed ({ code, benefit, alreadyHeld, cart })
1420
1576
  * @event tlError - the code was rejected
@@ -1680,6 +1836,11 @@ declare module "@stencil/core" {
1680
1836
  * @component tl-buy-tickets-wrapper
1681
1837
  * Wraps any content and opens the Ticketlayer modal when clicked.
1682
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.
1683
1844
  * @example <tl-buy-tickets-wrapper event-id="evt_001">
1684
1845
  * <button>Buy Tickets</button>
1685
1846
  * </tl-buy-tickets-wrapper>
@@ -1688,7 +1849,22 @@ declare module "@stencil/core" {
1688
1849
  * </tl-buy-tickets-wrapper>
1689
1850
  */
1690
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
+ */
1691
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
+ */
1692
1868
  "tl-cart-badge": LocalJSX.IntrinsicElements["tl-cart-badge"] & JSXBase.HTMLAttributes<HTMLTlCartBadgeElement>;
1693
1869
  /**
1694
1870
  * @component tl-cart-drawer
@@ -1698,6 +1874,9 @@ declare module "@stencil/core" {
1698
1874
  * button, Escape, or `ui:modal-close-requested`. The panel embeds `<tl-cart>`,
1699
1875
  * so the actual cart rendering / remove / checkout is shared with the inline
1700
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.
1701
1880
  * @prop side - which edge the panel slides from (default 'right')
1702
1881
  * @event tlOpen - the drawer opened
1703
1882
  * @event tlClose - the drawer closed
@@ -1707,12 +1886,28 @@ declare module "@stencil/core" {
1707
1886
  * @component tl-checkout-wrapper
1708
1887
  * Wraps any content and opens the Ticketlayer checkout modal when clicked.
1709
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).
1710
1892
  * @example <tl-checkout-wrapper>
1711
1893
  * <button>Proceed to Checkout</button>
1712
1894
  * </tl-checkout-wrapper>
1713
1895
  */
1714
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
+ */
1715
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
+ */
1716
1911
  "tl-event-list": LocalJSX.IntrinsicElements["tl-event-list"] & JSXBase.HTMLAttributes<HTMLTlEventListElement>;
1717
1912
  /**
1718
1913
  * tl-login - magic-link sign-in. The customer enters an email, we ask the SDK
@@ -1722,6 +1917,12 @@ declare module "@stencil/core" {
1722
1917
  * password is ever handled here.
1723
1918
  * States: enter email -> check your inbox (resend, enter code) -> signed in
1724
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.
1725
1926
  * Usage: <tl-login></tl-login>
1726
1927
  * @event tlAuthChanged - signed in or out ({ customer, authenticated })
1727
1928
  * @event tlMagicLinkSent - a link was requested for an email
@@ -1733,6 +1934,9 @@ declare module "@stencil/core" {
1733
1934
  * the SDK): event, date, ticket count, total and status per row. Clicking a
1734
1935
  * row expands it to show the order's tickets (tl-order-tickets). Shows
1735
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).
1736
1940
  * Usage: <tl-my-orders></tl-my-orders>
1737
1941
  * @event tlOrderSelect - a row was expanded ({ orderId })
1738
1942
  * @event tlError - the orders could not be loaded
@@ -1749,6 +1953,12 @@ declare module "@stencil/core" {
1749
1953
  * page uses; `?redirect_status=` from a Stripe return is honoured too
1750
1954
  * 3. the SDK's `checkout:completed` event, for a page that mounts this before
1751
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.
1752
1962
  * Usage: <tl-order-confirmation order-id="ord_xxx"></tl-order-confirmation>
1753
1963
  * @event tlOrderLoaded - the order was loaded
1754
1964
  * @event tlError - the order could not be loaded
@@ -1759,18 +1969,14 @@ declare module "@stencil/core" {
1759
1969
  * cards with PDF download. Fetches the order through the SDK (order-access
1760
1970
  * gated by the session), so it works on a confirmation page or in an account.
1761
1971
  * Usage: <tl-order-tickets order-id="ord_xxx"></tl-order-tickets>
1762
- * On an empty result it waits rather than concluding there is nothing.
1763
- * Tickets are issued asynchronously: the payment confirms, the order is
1764
- * marked paid, and entitlement issuance follows a moment later. A confirmation
1765
- * page therefore renders BEFORE the passes exist - reliably, not occasionally.
1766
- * The component used to answer that with "No tickets for this order yet",
1767
- * which is true and reads as "something went wrong" to someone who has just
1768
- * been charged. Refreshing showed them, so the only thing missing was the
1769
- * waiting.
1770
- * So: an empty order is treated as issuance in flight and polled, with the
1771
- * gaps widening, for about a minute. Then it stops and says the tickets are
1772
- * coming by email, because at that point something probably is wrong and a
1773
- * 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.
1774
1980
  */
1775
1981
  "tl-order-tickets": LocalJSX.IntrinsicElements["tl-order-tickets"] & JSXBase.HTMLAttributes<HTMLTlOrderTicketsElement>;
1776
1982
  /**
@@ -1780,6 +1986,8 @@ declare module "@stencil/core" {
1780
1986
  * cart and publishes cart:updated, so tl-cart and badges re-render on their own.
1781
1987
  * The API has no un-redeem, so the applied state offers only "use a different
1782
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).
1783
1991
  * Usage: <tl-promo-code></tl-promo-code>
1784
1992
  * @event tlPromoApplied - a code was redeemed ({ code, benefit, alreadyHeld, cart })
1785
1993
  * @event tlError - the code was rejected