@ticketlayer/elements 0.2.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 (195) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +55 -0
  3. package/dist/cjs/index-DfzcrE9-.js +3598 -0
  4. package/dist/cjs/index.cjs.js +16 -0
  5. package/dist/cjs/loader.cjs.js +12 -0
  6. package/dist/cjs/order-summary-ZMkJ5bez.js +116 -0
  7. package/dist/cjs/sdk-connector-ClDF3013.js +108 -0
  8. package/dist/cjs/ticketlayer-elements.cjs.js +24 -0
  9. package/dist/cjs/tl-buy-modal.cjs.entry.js +127 -0
  10. package/dist/cjs/tl-buy-tickets-button.cjs.entry.js +131 -0
  11. package/dist/cjs/tl-buy-tickets-wrapper.cjs.entry.js +58 -0
  12. package/dist/cjs/tl-cart-badge.cjs.entry.js +109 -0
  13. package/dist/cjs/tl-cart-drawer.cjs.entry.js +67 -0
  14. package/dist/cjs/tl-cart.cjs.entry.js +148 -0
  15. package/dist/cjs/tl-checkout-wrapper.cjs.entry.js +57 -0
  16. package/dist/cjs/tl-event-card.cjs.entry.js +140 -0
  17. package/dist/cjs/tl-event-list.cjs.entry.js +80 -0
  18. package/dist/cjs/tl-login.cjs.entry.js +184 -0
  19. package/dist/cjs/tl-my-orders.cjs.entry.js +123 -0
  20. package/dist/cjs/tl-occurrence-selector_2.cjs.entry.js +754 -0
  21. package/dist/cjs/tl-order-confirmation.cjs.entry.js +146 -0
  22. package/dist/cjs/tl-order-tickets_2.cjs.entry.js +3198 -0
  23. package/dist/cjs/tl-promo-code.cjs.entry.js +75 -0
  24. package/dist/cjs/tl-seat-map.cjs.entry.js +147 -0
  25. package/dist/collection/collection-manifest.json +29 -0
  26. package/dist/collection/components/tl-buy-modal/tl-buy-modal.css +264 -0
  27. package/dist/collection/components/tl-buy-modal/tl-buy-modal.js +249 -0
  28. package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.css +120 -0
  29. package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.js +412 -0
  30. package/dist/collection/components/tl-buy-tickets-wrapper/tl-buy-tickets-wrapper.css +23 -0
  31. package/dist/collection/components/tl-buy-tickets-wrapper/tl-buy-tickets-wrapper.js +192 -0
  32. package/dist/collection/components/tl-cart/tl-cart.css +251 -0
  33. package/dist/collection/components/tl-cart/tl-cart.js +314 -0
  34. package/dist/collection/components/tl-cart-badge/tl-cart-badge.css +138 -0
  35. package/dist/collection/components/tl-cart-badge/tl-cart-badge.js +217 -0
  36. package/dist/collection/components/tl-cart-drawer/tl-cart-drawer.css +98 -0
  37. package/dist/collection/components/tl-cart-drawer/tl-cart-drawer.js +185 -0
  38. package/dist/collection/components/tl-checkout-wrapper/tl-checkout-wrapper.css +23 -0
  39. package/dist/collection/components/tl-checkout-wrapper/tl-checkout-wrapper.js +148 -0
  40. package/dist/collection/components/tl-event-card/event-card-adapter.js +23 -0
  41. package/dist/collection/components/tl-event-card/tl-event-card.css +175 -0
  42. package/dist/collection/components/tl-event-card/tl-event-card.js +205 -0
  43. package/dist/collection/components/tl-event-list/tl-event-list.css +134 -0
  44. package/dist/collection/components/tl-event-list/tl-event-list.js +171 -0
  45. package/dist/collection/components/tl-login/tl-login.css +133 -0
  46. package/dist/collection/components/tl-login/tl-login.js +309 -0
  47. package/dist/collection/components/tl-my-orders/tl-my-orders.css +204 -0
  48. package/dist/collection/components/tl-my-orders/tl-my-orders.js +221 -0
  49. package/dist/collection/components/tl-occurrence-selector/tl-occurrence-selector.css +658 -0
  50. package/dist/collection/components/tl-occurrence-selector/tl-occurrence-selector.js +707 -0
  51. package/dist/collection/components/tl-order-confirmation/tl-order-confirmation.css +176 -0
  52. package/dist/collection/components/tl-order-confirmation/tl-order-confirmation.js +298 -0
  53. package/dist/collection/components/tl-order-tickets/tl-order-tickets.css +30 -0
  54. package/dist/collection/components/tl-order-tickets/tl-order-tickets.js +122 -0
  55. package/dist/collection/components/tl-promo-code/tl-promo-code.css +106 -0
  56. package/dist/collection/components/tl-promo-code/tl-promo-code.js +181 -0
  57. package/dist/collection/components/tl-seat-map/tl-seat-map.css +85 -0
  58. package/dist/collection/components/tl-seat-map/tl-seat-map.js +366 -0
  59. package/dist/collection/components/tl-ticket/tl-ticket.css +90 -0
  60. package/dist/collection/components/tl-ticket/tl-ticket.js +129 -0
  61. package/dist/collection/components/tl-ticket-selector/tl-ticket-selector.css +205 -0
  62. package/dist/collection/components/tl-ticket-selector/tl-ticket-selector.js +332 -0
  63. package/dist/collection/index.js +10 -0
  64. package/dist/collection/utils/order-summary.js +101 -0
  65. package/dist/collection/utils/sdk-connector.js +100 -0
  66. package/dist/collection/utils/testing/mock-sdk.js +95 -0
  67. package/dist/components/index.d.ts +35 -0
  68. package/dist/components/index.js +1 -0
  69. package/dist/components/order-summary.js +1 -0
  70. package/dist/components/sdk-connector.js +1 -0
  71. package/dist/components/tl-buy-modal.d.ts +11 -0
  72. package/dist/components/tl-buy-modal.js +1 -0
  73. package/dist/components/tl-buy-tickets-button.d.ts +11 -0
  74. package/dist/components/tl-buy-tickets-button.js +1 -0
  75. package/dist/components/tl-buy-tickets-wrapper.d.ts +11 -0
  76. package/dist/components/tl-buy-tickets-wrapper.js +1 -0
  77. package/dist/components/tl-buy-tickets-wrapper2.js +1 -0
  78. package/dist/components/tl-cart-badge.d.ts +11 -0
  79. package/dist/components/tl-cart-badge.js +1 -0
  80. package/dist/components/tl-cart-drawer.d.ts +11 -0
  81. package/dist/components/tl-cart-drawer.js +1 -0
  82. package/dist/components/tl-cart.d.ts +11 -0
  83. package/dist/components/tl-cart.js +1 -0
  84. package/dist/components/tl-cart2.js +1 -0
  85. package/dist/components/tl-checkout-wrapper.d.ts +11 -0
  86. package/dist/components/tl-checkout-wrapper.js +1 -0
  87. package/dist/components/tl-checkout-wrapper2.js +1 -0
  88. package/dist/components/tl-event-card.d.ts +11 -0
  89. package/dist/components/tl-event-card.js +1 -0
  90. package/dist/components/tl-event-card2.js +1 -0
  91. package/dist/components/tl-event-list.d.ts +11 -0
  92. package/dist/components/tl-event-list.js +1 -0
  93. package/dist/components/tl-login.d.ts +11 -0
  94. package/dist/components/tl-login.js +1 -0
  95. package/dist/components/tl-login2.js +1 -0
  96. package/dist/components/tl-my-orders.d.ts +11 -0
  97. package/dist/components/tl-my-orders.js +1 -0
  98. package/dist/components/tl-occurrence-selector.d.ts +11 -0
  99. package/dist/components/tl-occurrence-selector.js +1 -0
  100. package/dist/components/tl-occurrence-selector2.js +1 -0
  101. package/dist/components/tl-order-confirmation.d.ts +11 -0
  102. package/dist/components/tl-order-confirmation.js +1 -0
  103. package/dist/components/tl-order-tickets.d.ts +11 -0
  104. package/dist/components/tl-order-tickets.js +1 -0
  105. package/dist/components/tl-order-tickets2.js +1 -0
  106. package/dist/components/tl-promo-code.d.ts +11 -0
  107. package/dist/components/tl-promo-code.js +1 -0
  108. package/dist/components/tl-seat-map.d.ts +11 -0
  109. package/dist/components/tl-seat-map.js +1 -0
  110. package/dist/components/tl-ticket-selector.d.ts +11 -0
  111. package/dist/components/tl-ticket-selector.js +1 -0
  112. package/dist/components/tl-ticket-selector2.js +1 -0
  113. package/dist/components/tl-ticket.d.ts +11 -0
  114. package/dist/components/tl-ticket.js +1 -0
  115. package/dist/components/tl-ticket2.js +1 -0
  116. package/dist/elements.docs.d.ts +454 -0
  117. package/dist/elements.docs.json +3008 -0
  118. package/dist/esm/index-Ba-RZTFI.js +3588 -0
  119. package/dist/esm/index.js +4 -0
  120. package/dist/esm/loader.js +10 -0
  121. package/dist/esm/order-summary-BGekdjN9.js +103 -0
  122. package/dist/esm/sdk-connector-CqhvfyKV.js +102 -0
  123. package/dist/esm/ticketlayer-elements.js +20 -0
  124. package/dist/esm/tl-buy-modal.entry.js +125 -0
  125. package/dist/esm/tl-buy-tickets-button.entry.js +129 -0
  126. package/dist/esm/tl-buy-tickets-wrapper.entry.js +56 -0
  127. package/dist/esm/tl-cart-badge.entry.js +107 -0
  128. package/dist/esm/tl-cart-drawer.entry.js +65 -0
  129. package/dist/esm/tl-cart.entry.js +146 -0
  130. package/dist/esm/tl-checkout-wrapper.entry.js +55 -0
  131. package/dist/esm/tl-event-card.entry.js +138 -0
  132. package/dist/esm/tl-event-list.entry.js +78 -0
  133. package/dist/esm/tl-login.entry.js +182 -0
  134. package/dist/esm/tl-my-orders.entry.js +121 -0
  135. package/dist/esm/tl-occurrence-selector_2.entry.js +751 -0
  136. package/dist/esm/tl-order-confirmation.entry.js +144 -0
  137. package/dist/esm/tl-order-tickets_2.entry.js +3195 -0
  138. package/dist/esm/tl-promo-code.entry.js +73 -0
  139. package/dist/esm/tl-seat-map.entry.js +145 -0
  140. package/dist/index.cjs.js +1 -0
  141. package/dist/index.js +1 -0
  142. package/dist/ticketlayer-elements/index.esm.js +1 -0
  143. package/dist/ticketlayer-elements/p-0291df4c.entry.js +1 -0
  144. package/dist/ticketlayer-elements/p-10f01a1f.entry.js +1 -0
  145. package/dist/ticketlayer-elements/p-11273f8f.entry.js +1 -0
  146. package/dist/ticketlayer-elements/p-340ab4f5.entry.js +1 -0
  147. package/dist/ticketlayer-elements/p-41d22d7c.entry.js +1 -0
  148. package/dist/ticketlayer-elements/p-82752e3b.entry.js +1 -0
  149. package/dist/ticketlayer-elements/p-976770f3.entry.js +1 -0
  150. package/dist/ticketlayer-elements/p-9a903ff6.entry.js +1 -0
  151. package/dist/ticketlayer-elements/p-9c9072c8.entry.js +1 -0
  152. package/dist/ticketlayer-elements/p-9d8163d6.entry.js +1 -0
  153. package/dist/ticketlayer-elements/p-BGekdjN9.js +1 -0
  154. package/dist/ticketlayer-elements/p-Ba-RZTFI.js +2 -0
  155. package/dist/ticketlayer-elements/p-CqhvfyKV.js +1 -0
  156. package/dist/ticketlayer-elements/p-a5c90b68.entry.js +1 -0
  157. package/dist/ticketlayer-elements/p-b6d479ad.entry.js +1 -0
  158. package/dist/ticketlayer-elements/p-dd43f015.entry.js +1 -0
  159. package/dist/ticketlayer-elements/p-eb640760.entry.js +1 -0
  160. package/dist/ticketlayer-elements/p-ee3aa227.entry.js +1 -0
  161. package/dist/ticketlayer-elements/p-fb9444c4.entry.js +1 -0
  162. package/dist/ticketlayer-elements/ticketlayer-elements.css +1 -0
  163. package/dist/ticketlayer-elements/ticketlayer-elements.esm.js +1 -0
  164. package/dist/types/components/tl-buy-modal/tl-buy-modal.d.ts +54 -0
  165. package/dist/types/components/tl-buy-tickets-button/tl-buy-tickets-button.d.ts +61 -0
  166. package/dist/types/components/tl-buy-tickets-wrapper/tl-buy-tickets-wrapper.d.ts +52 -0
  167. package/dist/types/components/tl-cart/tl-cart.d.ts +80 -0
  168. package/dist/types/components/tl-cart-badge/tl-cart-badge.d.ts +36 -0
  169. package/dist/types/components/tl-cart-drawer/tl-cart-drawer.d.ts +35 -0
  170. package/dist/types/components/tl-checkout-wrapper/tl-checkout-wrapper.d.ts +39 -0
  171. package/dist/types/components/tl-event-card/event-card-adapter.d.ts +23 -0
  172. package/dist/types/components/tl-event-card/tl-event-card.d.ts +55 -0
  173. package/dist/types/components/tl-event-list/tl-event-list.d.ts +30 -0
  174. package/dist/types/components/tl-login/tl-login.d.ts +59 -0
  175. package/dist/types/components/tl-my-orders/tl-my-orders.d.ts +39 -0
  176. package/dist/types/components/tl-occurrence-selector/tl-occurrence-selector.d.ts +208 -0
  177. package/dist/types/components/tl-order-confirmation/tl-order-confirmation.d.ts +54 -0
  178. package/dist/types/components/tl-order-tickets/tl-order-tickets.d.ts +21 -0
  179. package/dist/types/components/tl-promo-code/tl-promo-code.d.ts +39 -0
  180. package/dist/types/components/tl-seat-map/tl-seat-map.d.ts +68 -0
  181. package/dist/types/components/tl-ticket/tl-ticket.d.ts +28 -0
  182. package/dist/types/components/tl-ticket-selector/tl-ticket-selector.d.ts +78 -0
  183. package/dist/types/components.d.ts +1629 -0
  184. package/dist/types/index.d.ts +14 -0
  185. package/dist/types/stencil-public-runtime.d.ts +1839 -0
  186. package/dist/types/utils/order-summary.d.ts +67 -0
  187. package/dist/types/utils/sdk-connector.d.ts +113 -0
  188. package/dist/types/utils/testing/mock-sdk.d.ts +36 -0
  189. package/elements.catalogue.json +968 -0
  190. package/loader/cdn.js +1 -0
  191. package/loader/index.cjs.js +1 -0
  192. package/loader/index.d.ts +24 -0
  193. package/loader/index.es2017.js +1 -0
  194. package/loader/index.js +2 -0
  195. package/package.json +101 -0
@@ -0,0 +1 @@
1
+ import{proxyCustomElement as e,HTMLElement as t,createEvent as r,h as a,transformTag as s}from"@stencil/core/internal/client";import{w as o,g as i}from"./sdk-connector.js";const n=e(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.tlSelect=r(this,"tlSelect",7),this.orientation="auto",this.loading=!0,this.error=null,this.occurrences=[],this.currentMonth=new Date,this.selectedDate=null,this.computedDisplayMode="list",this.containerWidth=0}async componentWillLoad(){await this.waitForSDKAndFetch()}async waitForSDKAndFetch(){if(!this.eventId)return this.error="Event ID is required",void(this.loading=!1);try{await o(),await this.fetchOccurrences()}catch(e){this.error=e instanceof Error?e.message:"SDK not initialized.",this.loading=!1}}componentDidLoad(){this.containerRef&&"undefined"!=typeof ResizeObserver&&(this.resizeObserver=new ResizeObserver((e=>{for(const t of e)this.containerWidth=t.contentRect.width})),this.resizeObserver.observe(this.containerRef))}disconnectedCallback(){this.resizeObserver&&this.resizeObserver.disconnect()}async onEventIdChange(){await this.fetchOccurrences()}async fetchOccurrences(){this.loading=!0,this.error=null;try{const e=i().getEventsManager(),t=await e.get(this.eventId);if(!t)throw new Error("Event not found");this.occurrences=(t.occurrences||[]).map((e=>({id:e.id,startsAt:e.startsAt,endsAt:e.endsAt,status:e.availabilityStatus,availableCapacity:e.availableCapacity,soldOut:"sold_out"===e.availabilityStatus}))),this.computeDisplayMode(),this.computeInitialSelection()}catch(e){console.error("[tl-occurrence-selector] Failed to fetch occurrences:",e),this.error=e instanceof Error?e.message:"Failed to load occurrences",this.occurrences=[]}finally{this.loading=!1}}computeDisplayMode(){if(this.displayMode)return void(this.computedDisplayMode=this.displayMode);if(this.occurrences.length<=5)return void(this.computedDisplayMode="list");const e=new Set;for(const t of this.occurrences){const r=new Date(t.startsAt);e.add(r.toDateString())}this.computedDisplayMode=1===e.size?"slots":"calendar"}computeInitialSelection(){if(0===this.occurrences.length)return;const e=new Date;e.setHours(0,0,0,0);const t=this.getDatesWithOccurrences();let r=null;for(const a of Array.from(t.keys()).sort()){const t=new Date(a);if(t>=e){r=t;break}}if(!r&&t.size>0){const e=Array.from(t.keys()).sort();r=new Date(e[e.length-1])}r&&(this.selectedDate=r,this.currentMonth=new Date(r.getFullYear(),r.getMonth(),1))}getDatesWithOccurrences(){const e=new Map;for(const t of this.occurrences){const r=new Date(t.startsAt);r.setHours(0,0,0,0);const a=r.toDateString();e.has(a)||e.set(a,[]),e.get(a).push(t)}return e}getDateRange(){if(0===this.occurrences.length)return null;let e=new Date(this.occurrences[0].startsAt),t=new Date(this.occurrences[0].startsAt);for(const r of this.occurrences){const a=new Date(r.startsAt);a<e&&(e=a),a>t&&(t=a)}return{first:e,last:t}}isSingleWeek(){const e=this.getDateRange();if(!e)return!1;const t=new Date(e.first),r=t.getDay(),a=0===r?6:r-1;t.setDate(t.getDate()-a),t.setHours(0,0,0,0);const s=new Date(t);return s.setDate(s.getDate()+6),s.setHours(23,59,59,999),e.last<=s}isSingleMonth(){const e=this.getDateRange();return!!e&&e.first.getMonth()===e.last.getMonth()&&e.first.getFullYear()===e.last.getFullYear()}isHorizontalLayout(){return"horizontal"===this.orientation||"vertical"!==this.orientation&&this.containerWidth>=768}formatDate(e){return e.toLocaleDateString("en-GB",{weekday:"long",day:"numeric",month:"long",year:"numeric"})}formatTime(e){return new Date(e).toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit"})}formatDateTime(e){const t=new Date(e);return{date:t.toLocaleDateString("en-GB",{weekday:"long",day:"numeric",month:"long",year:"numeric"}),time:t.toLocaleTimeString("en-GB",{hour:"2-digit",minute:"2-digit"})}}handleSelect(e){e.soldOut||0===e.availableCapacity||(console.log("[tl-occurrence-selector] Selected:",e.id),this.tlSelect.emit({occurrence:e}))}handleDateSelect(e){this.selectedDate=e,e.getMonth()===this.currentMonth.getMonth()&&e.getFullYear()===this.currentMonth.getFullYear()||(this.currentMonth=new Date(e.getFullYear(),e.getMonth(),1))}handlePrevMonth(){const e=this.getDateRange();if(!e)return;const t=new Date(this.currentMonth);t.setMonth(t.getMonth()-1),t>=new Date(e.first.getFullYear(),e.first.getMonth(),1)&&(this.currentMonth=t)}handleNextMonth(){const e=this.getDateRange();if(!e)return;const t=new Date(this.currentMonth);t.setMonth(t.getMonth()+1),t<=new Date(e.last.getFullYear(),e.last.getMonth(),1)&&(this.currentMonth=t)}isPrevMonthDisabled(){const e=this.getDateRange();if(!e)return!0;const t=new Date(e.first.getFullYear(),e.first.getMonth(),1);return this.currentMonth<=t}isNextMonthDisabled(){const e=this.getDateRange();if(!e)return!0;const t=new Date(e.last.getFullYear(),e.last.getMonth(),1);return this.currentMonth>=t}getCalendarDays(){if(this.isSingleWeek()){const e=this.getDateRange();if(!e)return[];const t=new Date(e.first),r=t.getDay(),a=0===r?6:r-1;t.setDate(t.getDate()-a),t.setHours(0,0,0,0);const s=[],o=new Date(t);for(let e=0;e<7;e++)s.push(new Date(o)),o.setDate(o.getDate()+1);return s}const e=this.currentMonth.getFullYear(),t=this.currentMonth.getMonth(),r=new Date(e,t,1),a=new Date(e,t+1,0),s=r.getDay(),o=0===s?6:s-1,i=new Date(r);i.setDate(i.getDate()-o);const n=a.getDay(),l=0===n?0:7-n,d=new Date(a);d.setDate(d.getDate()+l);const c=[],u=new Date(i);for(;u<=d;)c.push(new Date(u)),u.setDate(u.getDate()+1);return c}hasOccurrencesOnDate(e){const t=e.toDateString();return this.getDatesWithOccurrences().has(t)}isDateSoldOut(e){const t=e.toDateString(),r=this.getDatesWithOccurrences().get(t);return!!r&&r.every((e=>e.soldOut||0===e.availableCapacity))}getSelectedDateOccurrences(){if(!this.selectedDate)return[];const e=this.selectedDate.toDateString();return(this.getDatesWithOccurrences().get(e)||[]).sort(((e,t)=>new Date(e.startsAt).getTime()-new Date(t.startsAt).getTime()))}getThemeStyles(){if(!this.theme)return{};const e={};return this.theme.primaryColor&&(e["--tl-primary"]=this.theme.primaryColor),this.theme.primaryForeground&&(e["--tl-primary-foreground"]=this.theme.primaryForeground),this.theme.backgroundColor&&(e["--tl-background"]=this.theme.backgroundColor),this.theme.foregroundColor&&(e["--tl-foreground"]=this.theme.foregroundColor),this.theme.mutedColor&&(e["--tl-muted"]=this.theme.mutedColor),this.theme.mutedForeground&&(e["--tl-muted-foreground"]=this.theme.mutedForeground),this.theme.borderColor&&(e["--tl-border"]=this.theme.borderColor),this.theme.borderRadius&&(e["--tl-radius"]=this.theme.borderRadius),this.theme.fontFamily&&(e["--tl-font-family"]=this.theme.fontFamily),e}renderListView(){return a("div",{class:"list-view"},this.occurrences.map((e=>{const t=e.soldOut||0===e.availableCapacity,{date:r,time:s}=this.formatDateTime(e.startsAt);return a("button",{key:e.id,class:"occurrence-item "+(t?"sold-out":""),onClick:()=>this.handleSelect(e),disabled:t},a("div",{class:"occurrence-info"},a("div",{class:"occurrence-date"},r),a("div",{class:"occurrence-time"},s,e.endsAt&&` - ${this.formatTime(e.endsAt)}`)),a("div",{class:"occurrence-status"},t?a("span",{class:"status-sold-out"},"Sold Out"):e.availableCapacity?a("span",{class:"status-available"},e.availableCapacity," available"):a("span",{class:"status-arrow"},"→")))})))}renderSlotsView(){const e=[...this.occurrences].sort(((e,t)=>new Date(e.startsAt).getTime()-new Date(t.startsAt).getTime())),t=e.length>0?this.formatDate(new Date(e[0].startsAt)):"";return a("div",{class:"slots-view"},t&&a("div",{class:"slots-date-header"},t),a("div",{class:"time-slots-grid"},e.map((e=>{const t=e.soldOut||0===e.availableCapacity;return a("button",{key:e.id,class:"time-slot "+(t?"sold-out":""),onClick:()=>this.handleSelect(e),disabled:t},a("span",{class:"slot-time"},this.formatTime(e.startsAt)),t&&a("span",{class:"slot-sold-out"},"Sold Out"))}))))}renderCalendarHeader(){const e=this.currentMonth.toLocaleDateString("en-GB",{month:"long",year:"numeric"}),t=!this.isSingleMonth();return a("div",{class:"calendar-header"},a("span",{class:"month-label"},e),t&&a("div",{class:"calendar-nav-buttons"},a("button",{class:"nav-button",onClick:()=>this.handlePrevMonth(),disabled:this.isPrevMonthDisabled(),"aria-label":"Previous month"},a("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},a("path",{d:"M15 18l-6-6 6-6"}))),a("button",{class:"nav-button",onClick:()=>this.handleNextMonth(),disabled:this.isNextMonthDisabled(),"aria-label":"Next month"},a("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},a("path",{d:"M9 18l6-6-6-6"})))))}renderCalendarGrid(){const e=this.getCalendarDays(),t=new Date;return t.setHours(0,0,0,0),a("div",{class:"calendar-grid"},["Mon","Tue","Wed","Thu","Fri","Sat","Sun"].map((e=>a("div",{class:"weekday-header",key:e},e))),e.map((e=>{const r=e.getMonth()===this.currentMonth.getMonth(),s=this.hasOccurrencesOnDate(e),o=this.isDateSoldOut(e),i=this.selectedDate&&e.toDateString()===this.selectedDate.toDateString(),n=e.toDateString()===t.toDateString(),l=e<t;return a("button",{key:e.toISOString(),class:`calendar-day \n ${r?"":"other-month"} \n ${s?"has-occurrences":""} \n ${o?"sold-out":""} \n ${i?"selected":""} \n ${n?"today":""}\n ${l?"past":""}`,onClick:()=>s&&this.handleDateSelect(e),disabled:!s},a("span",{class:"day-number"},e.getDate()),s&&a("span",{class:"occurrence-dot"}))})))}renderSelectedDateSlots(){const e=this.getSelectedDateOccurrences();if(!this.selectedDate||0===e.length)return a("div",{class:"selected-date-slots empty"},a("p",null,"Select a date to see available times"));const t=this.formatDate(this.selectedDate);return a("div",{class:"selected-date-slots"},a("div",{class:"selected-date-header"},t),a("div",{class:"time-slots-list"},e.map((e=>{const t=e.soldOut||0===e.availableCapacity;return a("button",{key:e.id,class:"time-slot-item "+(t?"sold-out":""),onClick:()=>this.handleSelect(e),disabled:t},a("span",{class:"slot-time"},this.formatTime(e.startsAt)),a("div",{class:"slot-status"},t?a("span",{class:"status-sold-out"},"Sold Out"):e.availableCapacity?a("span",{class:"status-available"},e.availableCapacity," available"):a("span",{class:"status-arrow"},"→")))}))))}renderCalendarView(){const e=this.isHorizontalLayout();return a("div",{class:"calendar-view "+(e?"horizontal":"vertical")},a("div",{class:"calendar-panel"},this.renderCalendarHeader(),this.renderCalendarGrid()),a("div",{class:"slots-panel"},this.renderSelectedDateSlots()))}renderSkeleton(){return a("div",{class:"loading-container"},a("div",{class:"skeleton-calendar"},a("div",{class:"skeleton skeleton-calendar-header"}),a("div",{class:"skeleton-calendar-grid"},Array.from({length:35},((e,t)=>a("div",{key:t,class:"skeleton skeleton-calendar-day"}))))))}render(){const e=this.getThemeStyles();return a("div",{key:"40758aaa06e5f062de92675766e4531995f74bc7",class:"occurrence-selector",ref:e=>this.containerRef=e,style:e},this.loading&&this.renderSkeleton(),!this.loading&&this.error&&a("div",{key:"6d2f5b9c07f65d4941bfb4870729fe3248cb277e",class:"error-container"},a("svg",{key:"daaf1f48dcff80ae7cf94ae0da1d66d9c9b7fb0f",class:"error-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},a("circle",{key:"0a9f494a5cf7f79146e56fc44469a3ca9e5238ae",cx:"12",cy:"12",r:"10"}),a("path",{key:"67d7b453508c847593136bd60e34ea0c38d30cda",d:"M12 8v4m0 4h.01"})),a("p",{key:"c1cc92585ed4451b686350b6d718c3ba06b72dd3",class:"error-message"},this.error),a("button",{key:"4ec9d048af704af12a800385b9868501973ba477",class:"retry-button",onClick:()=>this.fetchOccurrences()},"Retry")),!this.loading&&!this.error&&(0===this.occurrences.length?a("div",{class:"no-occurrences"},a("p",null,"No dates available for this event.")):a("div",{class:"selector-content"},"list"===this.computedDisplayMode&&this.renderListView(),"slots"===this.computedDisplayMode&&this.renderSlotsView(),"calendar"===this.computedDisplayMode&&this.renderCalendarView())))}static get watchers(){return{eventId:[{onEventIdChange:0}]}}static get style(){return":host{--tl-radius:var(--tl-radius-md, 0.5rem);display:block;font-family:var(--tl-font-family, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);color:var(--tl-foreground, #0f172a)}*{box-sizing:border-box;margin:0;padding:0}.occurrence-selector{width:100%}.no-occurrences{text-align:center;padding:3rem 1rem;color:var(--tl-muted-foreground, #64748b)}.list-view{display:flex;flex-direction:column;gap:0.75rem}.occurrence-item{display:flex;justify-content:space-between;align-items:flex-start;width:100%;padding:1rem 1.25rem;background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);text-align:left;cursor:pointer;transition:all 0.15s ease;font-family:inherit}.occurrence-item:hover:not(:disabled){border-color:var(--tl-primary, #e64b12);background:color-mix(in srgb, var(--tl-primary, #e64b12) 5%, var(--tl-background, #ffffff))}.occurrence-item:focus-visible{outline:2px solid var(--tl-primary);outline-offset:2px}.occurrence-item:disabled{cursor:not-allowed;opacity:0.6;background:var(--tl-muted, #f1f5f9)}.occurrence-item.sold-out{opacity:0.6;background:var(--tl-muted, #f1f5f9)}.occurrence-info{flex:1}.occurrence-date{font-weight:600;font-size:0.9375rem;color:var(--tl-foreground, #0f172a);margin-bottom:0.25rem}.occurrence-time{font-size:0.875rem;color:var(--tl-muted-foreground)}.occurrence-status{flex-shrink:0;text-align:right}.status-sold-out{font-size:0.875rem;font-weight:500;color:var(--tl-muted-foreground)}.status-available{font-size:0.875rem;color:var(--tl-muted-foreground)}.status-arrow{font-size:1.25rem;color:var(--tl-primary, #e64b12)}.slots-view{display:flex;flex-direction:column;gap:1rem}.slots-date-header{font-size:1.125rem;font-weight:600;color:var(--tl-foreground, #0f172a);padding-bottom:0.5rem;border-bottom:1px solid var(--tl-border)}.time-slots-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(100px, 1fr));gap:0.5rem}.time-slot{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:0.75rem 0.5rem;background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);cursor:pointer;transition:all 0.15s ease;font-family:inherit;min-height:3.5rem}.time-slot:hover:not(:disabled){border-color:var(--tl-primary, #e64b12);background:color-mix(in srgb, var(--tl-primary, #e64b12) 5%, var(--tl-background, #ffffff))}.time-slot:focus-visible{outline:2px solid var(--tl-primary);outline-offset:2px}.time-slot:disabled{cursor:not-allowed;opacity:0.6;background:var(--tl-muted, #f1f5f9)}.time-slot.sold-out{opacity:0.6;background:var(--tl-muted, #f1f5f9)}.slot-time{font-size:0.9375rem;font-weight:600;color:var(--tl-foreground, #0f172a)}.slot-sold-out{font-size:0.6875rem;color:var(--tl-muted-foreground);margin-top:0.125rem}.calendar-view{display:flex;flex-direction:column;gap:1.5rem}.calendar-view.horizontal{flex-direction:row;gap:1.5rem;align-items:flex-start}.calendar-view.horizontal .calendar-panel{flex-shrink:0;width:340px}.calendar-view.horizontal .slots-panel{flex:1;min-width:0}.calendar-view.vertical .calendar-panel{width:100%}.calendar-view.vertical .slots-panel{width:100%}.calendar-panel{border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);padding:1rem}.calendar-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:0.75rem}.month-label{font-size:1rem;font-weight:600;color:var(--tl-foreground, #0f172a);flex:1}.calendar-nav-buttons{display:flex;gap:0.375rem}.nav-button{display:flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;padding:0;background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);cursor:pointer;transition:all 0.15s ease;color:var(--tl-foreground, #0f172a)}.nav-button:hover:not(:disabled){background:var(--tl-muted, #f1f5f9)}.nav-button:disabled{cursor:not-allowed;opacity:0.4}.nav-button svg{width:0.875rem;height:0.875rem}.calendar-grid{display:grid;grid-template-columns:repeat(7, 1fr);gap:0.1875rem}.weekday-header{text-align:center;font-size:0.6875rem;font-weight:600;color:var(--tl-muted-foreground);padding:0.375rem 0;text-transform:uppercase;letter-spacing:0.05em}.calendar-day{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;aspect-ratio:1;padding:0.1875rem;background:var(--tl-background, #ffffff);border:1px solid transparent;border-radius:var(--tl-radius);cursor:default;transition:all 0.15s ease;font-family:inherit;font-size:0.9375rem;font-weight:500;color:var(--tl-foreground, #0f172a)}.calendar-day.other-month{color:var(--tl-muted-foreground);opacity:0.5}.calendar-day.has-occurrences{cursor:pointer;background:color-mix(in srgb, var(--tl-primary, #e64b12) 10%, var(--tl-background, #ffffff));border-color:transparent;font-weight:600;color:var(--tl-primary, #e64b12)}.calendar-day.has-occurrences:hover{background:color-mix(in srgb, var(--tl-primary, #e64b12) 18%, var(--tl-background, #ffffff));border-color:transparent}.calendar-day.has-occurrences.sold-out{background:var(--tl-muted, #f1f5f9);border-color:transparent}.calendar-day.has-occurrences.sold-out:hover{background:color-mix(in srgb, var(--tl-muted, #f1f5f9) 80%, var(--tl-background, #ffffff));border-color:transparent}.calendar-day.selected{background:var(--tl-primary, #e64b12);border-color:var(--tl-primary, #e64b12);color:var(--tl-primary-foreground, #ffffff)}.calendar-day.selected:hover{background:color-mix(in srgb, var(--tl-primary, #e64b12) 90%, black)}.calendar-day.selected .occurrence-dot{background:var(--tl-primary-foreground)}.calendar-day.today .day-number{font-weight:700;text-decoration:underline;text-underline-offset:2px}.calendar-day.past:not(.has-occurrences){opacity:0.4}.day-number{line-height:1}.occurrence-dot{display:none}.slots-panel{min-height:200px}.selected-date-slots{height:100%}.selected-date-slots.empty{display:flex;align-items:center;justify-content:center;color:var(--tl-muted-foreground);background:var(--tl-muted, #f1f5f9);border-radius:var(--tl-radius);padding:2rem 1rem;text-align:center;min-height:200px;font-size:0.875rem}.selected-date-header{font-size:0.9375rem;font-weight:600;color:var(--tl-foreground, #0f172a);padding-bottom:0.625rem;margin-bottom:0.625rem}.time-slots-list{display:flex;flex-direction:column;gap:0.5rem}.time-slot-item{display:flex;align-items:center;justify-content:space-between;width:100%;padding:0.625rem 0.875rem;background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);text-align:left;cursor:pointer;transition:all 0.15s ease;font-family:inherit}.time-slot-item:hover:not(:disabled){border-color:var(--tl-primary, #e64b12);background:color-mix(in srgb, var(--tl-primary, #e64b12) 5%, var(--tl-background, #ffffff))}.time-slot-item:focus-visible{outline:2px solid var(--tl-primary);outline-offset:2px}.time-slot-item:disabled{cursor:not-allowed;opacity:0.6;background:var(--tl-muted, #f1f5f9)}.time-slot-item.sold-out{opacity:0.6;background:var(--tl-muted, #f1f5f9)}.time-slot-item .slot-time{font-size:0.9375rem;font-weight:600}.slot-status{flex-shrink:0}.slot-status .status-sold-out{font-size:0.75rem}.slot-status .status-available{font-size:0.75rem}.slot-status .status-arrow{font-size:1rem}@media (max-width: 640px){.event-name{font-size:1.25rem}.occurrence-date{font-size:0.875rem}.time-slots-grid{grid-template-columns:repeat(auto-fill, minmax(80px, 1fr))}.time-slot{padding:0.625rem 0.375rem;min-height:3rem}.slot-time{font-size:0.875rem}.calendar-day{font-size:0.75rem}.weekday-header{font-size:0.625rem}.calendar-view.horizontal .calendar-panel{width:100%}}@media (max-width: 767px){.calendar-view.horizontal{flex-direction:column}}.loading-container{padding:1rem 0;min-height:400px}@keyframes skeleton-pulse{0%,100%{opacity:1}50%{opacity:0.5}}.skeleton{background:var(--tl-muted, #f1f5f9);border-radius:var(--tl-radius);animation:skeleton-pulse 1.5s ease-in-out infinite}.skeleton-list{display:flex;flex-direction:column;gap:0.75rem}.skeleton-list-item{height:4.5rem;border-radius:var(--tl-radius)}.skeleton-calendar{border:1px solid var(--tl-border, #e2e8f0);border-radius:var(--tl-radius);padding:1rem;min-height:350px}.skeleton-calendar-header{height:1.75rem;width:50%;margin-bottom:0.75rem;border-radius:var(--tl-radius)}.skeleton-calendar-grid{display:grid;grid-template-columns:repeat(7, 1fr);gap:0.1875rem;margin-top:0.75rem}.skeleton-calendar-day{aspect-ratio:1;border-radius:var(--tl-radius)}.skeleton-slots{display:flex;flex-direction:column;gap:1rem}.skeleton-slots-header{height:1.75rem;width:60%;border-radius:var(--tl-radius);margin-bottom:0.5rem}.skeleton-slots-grid{display:grid;grid-template-columns:repeat(auto-fill, minmax(100px, 1fr));gap:0.5rem}.skeleton-slot-item{height:3.5rem;border-radius:var(--tl-radius)}.error-container{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:3rem 1rem;gap:1rem;text-align:center}.error-icon{width:3rem;height:3rem;color:var(--tl-muted-foreground);stroke-width:1.5}.error-message{color:var(--tl-foreground, #0f172a);font-size:0.9375rem;max-width:400px}.retry-button{margin-top:0.5rem;padding:0.625rem 1.25rem;background:var(--tl-primary, #e64b12);color:var(--tl-primary-foreground, #ffffff);border:none;border-radius:var(--tl-radius);font-family:inherit;font-size:0.875rem;font-weight:500;cursor:pointer;transition:all 0.15s ease}.retry-button:hover{background:color-mix(in srgb, var(--tl-primary, #e64b12) 90%, black)}.retry-button:focus-visible{outline:2px solid var(--tl-primary);outline-offset:2px}"}},[1,"tl-occurrence-selector",{eventId:[1,"event-id"],displayMode:[1,"display-mode"],orientation:[1],theme:[16],loading:[32],error:[32],occurrences:[32],currentMonth:[32],selectedDate:[32],computedDisplayMode:[32],containerWidth:[32]},void 0,{eventId:[{onEventIdChange:0}]}]);function l(){"undefined"!=typeof customElements&&["tl-occurrence-selector"].forEach((e=>{"tl-occurrence-selector"===e&&(customElements.get(s(e))||customElements.define(s(e),n))}))}export{n as T,l as d}
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface TlOrderConfirmation extends Components.TlOrderConfirmation, HTMLElement {}
4
+ export const TlOrderConfirmation: {
5
+ prototype: TlOrderConfirmation;
6
+ new (): TlOrderConfirmation;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1 @@
1
+ import{proxyCustomElement as t,HTMLElement as e,createEvent as r,h as s,transformTag as i}from"@stencil/core/internal/client";import{o,w as a}from"./sdk-connector.js";import{e as l,r as n,o as c,c as d,d as m,a as u,g as h}from"./order-summary.js";import{d as p}from"./tl-order-tickets2.js";import{d as f}from"./tl-ticket2.js";const g=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.tlOrderLoaded=r(this,"tlOrderLoaded",7),this.tlError=r(this,"tlError",7),this.showTickets=!0,this.columns=2,this.order=null,this.resolvedOrderId=null,this.loading=!1,this.error=null,this.paymentFailed=!1,this.occurrence=null,this.signedInCustomer=null}watchOrderId(t){this.resolvedOrderId=t||this.orderIdFromUrl(),this.load()}async componentWillLoad(){const t=this.urlParams(),e=t?.get("redirect_status");this.paymentFailed=!!e&&"succeeded"!==e,this.resolvedOrderId=this.orderId||this.orderIdFromUrl(),this.resolvedOrderId&&!this.paymentFailed&&await this.load()}componentDidLoad(){this.unsubscribe=o("checkout:completed",(t=>{const e=t;e?.id&&(this.paymentFailed=!1,this.order=e,this.resolvedOrderId=e.id,this.tlOrderLoaded.emit({order:e}),this.load())}))}disconnectedCallback(){this.unsubscribe?.()}urlParams(){return"undefined"!=typeof window&&window.location?.search?new URLSearchParams(window.location.search):null}orderIdFromUrl(){return this.urlParams()?.get("orderId")||null}async load(){const t=this.resolvedOrderId;if(t)try{this.loading=!this.order,this.error=null;const e=await a(),r=e.getOrdersManager?.();if(!r)throw Error("Orders are not available");const s=await r.get(t);if(!s)throw Error("Order not found");this.order=s,this.signedInCustomer=e.getAuthManager?.()?.customer??null,this.tlOrderLoaded.emit({order:s}),this.resolveEvent(e,s)}catch(t){console.error("[tl-order-confirmation] Failed to load order:",t),this.error=l(t,"Failed to load your order"),this.tlError.emit({message:this.error})}finally{this.loading=!1}}async resolveEvent(t,e){const r=e.tickets?.find((t=>t.eventOccurrenceId))?.eventOccurrenceId;if(r)try{const s=await n(t,r);s&&this.order?.id===e.id&&(this.occurrence=s)}catch{}}renderRows(t){const e=this.customerEmail||d(t,this.signedInCustomer),r=this.occurrence?.eventName||c(t),i=this.occurrence?.startsAt;return s("dl",{class:"rows"},s("div",{class:"row"},s("dt",null,"Order reference"),s("dd",{class:"reference"},t.orderNumber)),e&&s("div",{class:"row"},s("dt",null,"Email"),s("dd",null,e)),r&&s("div",{class:"row"},s("dt",null,"Event"),s("dd",null,r)),i&&s("div",{class:"row"},s("dt",null,"Date"),s("dd",null,m(i))))}renderTotals(t){const e=t.currency||"GBP",r=Number(t.totalFees)||0,i=Number(t.totalTax)||0,o=Number(t.totalDiscounts)||0;return s("div",{class:"totals"},s("div",{class:"total-row"},s("span",null,"Subtotal"),s("span",null,u(t.subtotal,e))),r>0&&s("div",{class:"total-row"},s("span",null,"Fees"),s("span",null,u(t.totalFees,e))),i>0&&s("div",{class:"total-row"},s("span",null,"Tax"),s("span",null,u(t.totalTax,e))),o>0&&s("div",{class:"total-row discount"},s("span",null,"Discount"),s("span",null,"-",u(t.totalDiscounts,e))),s("div",{class:"total-row total"},s("span",null,"Total"),s("span",null,u(t.total,e))))}render(){if(this.paymentFailed)return s("div",{class:"confirmation"},s("h1",{class:"title"},"Payment not completed"),s("p",{class:"lead"},"Your payment wasn't completed. Your cart is still saved, so you can try again."));if(!this.resolvedOrderId&&!this.order)return null;if(this.loading)return s("div",{class:"confirmation"},s("div",{class:"skeleton-line short"}),s("div",{class:"skeleton-line long"}),s("div",{class:"skeleton-block"}));const t=this.order,e=t?.id||this.resolvedOrderId;return s("div",{class:"confirmation"},s("div",{class:"check","aria-hidden":"true"},s("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M5 13l4 4L19 7"}))),s("h1",{class:"title"},"You're going!"),s("p",{class:"lead"},t?.orderNumber?`Order ${t.orderNumber} is confirmed. Your tickets are on their way to your email.`:"Your order is confirmed. Your tickets are on their way to your email."),this.error&&!t&&s("p",{class:"error"},"We couldn't load your order details yet. ",this.error),t&&Array.isArray(t.items)&&s("div",{class:"summary"},this.renderRows(t),s("ul",{class:"lines"},h(t).map(((e,r)=>s("li",{class:"line",key:r},s("span",{class:"line-name"},e.quantity," x ",e.name),s("span",{class:"line-price"},u(e.subtotal,t.currency)))))),this.renderTotals(t)),this.showTickets&&t&&s("div",{class:"tickets"},s("h2",{class:"subtitle"},"Your tickets"),s("tl-order-tickets",{orderId:e,columns:this.columns}),s("p",{class:"hint"},"Show these QR codes at the door for entry. Use Download PDF on a ticket to save it.")))}static get watchers(){return{orderId:[{watchOrderId:0}]}}static get style(){return":host{display:block;font-family:var(--tl-font-family, system-ui, sans-serif);color:var(--tl-foreground, #111827)}.confirmation{text-align:center}.check{width:4rem;height:4rem;margin:0 auto var(--tl-spacing-4, 1rem);display:flex;align-items:center;justify-content:center;border-radius:9999px;background:var(--tl-success, #10b981);color:var(--tl-success-foreground, #ffffff)}.check svg{width:2rem;height:2rem}.title{margin:0 0 var(--tl-spacing-2, 0.5rem);font-size:1.875rem;font-weight:700;line-height:1.2}.lead{margin:0 0 var(--tl-spacing-6, 1.5rem);color:var(--tl-muted-foreground, #6b7280)}.error{margin:0 0 var(--tl-spacing-6, 1.5rem);font-size:0.875rem;color:var(--tl-error, #ef4444)}.summary{text-align:left;padding:var(--tl-spacing-6, 1.5rem);margin-bottom:var(--tl-spacing-6, 1.5rem);background:var(--tl-muted, #f9fafb);border:1px solid var(--tl-border, #e5e7eb);border-radius:var(--tl-radius-lg, 0.75rem)}.rows{display:grid;gap:var(--tl-spacing-2, 0.5rem);margin:0 0 var(--tl-spacing-4, 1rem);padding:0 0 var(--tl-spacing-4, 1rem);border-bottom:1px solid var(--tl-border, #e5e7eb)}.row{display:flex;justify-content:space-between;gap:var(--tl-spacing-4, 1rem);font-size:0.875rem}.row dt{color:var(--tl-muted-foreground, #6b7280)}.row dd{margin:0;text-align:right;overflow-wrap:anywhere}.reference{font-family:var(--tl-font-family-mono, ui-monospace, monospace);font-weight:600}.lines{list-style:none;margin:0;padding:0;display:grid;gap:var(--tl-spacing-2, 0.5rem)}.line{display:flex;justify-content:space-between;gap:var(--tl-spacing-4, 1rem);font-size:0.875rem}.totals{margin-top:var(--tl-spacing-3, 0.75rem);padding-top:var(--tl-spacing-3, 0.75rem);border-top:1px solid var(--tl-border, #e5e7eb);display:grid;gap:var(--tl-spacing-1, 0.25rem);font-size:0.875rem}.total-row{display:flex;justify-content:space-between;color:var(--tl-muted-foreground, #6b7280)}.total-row.discount{color:var(--tl-success, #10b981)}.total-row.total{margin-top:var(--tl-spacing-1, 0.25rem);font-size:1rem;font-weight:600;color:var(--tl-foreground, #111827)}.tickets{text-align:left}.subtitle{margin:0 0 var(--tl-spacing-4, 1rem);font-size:1.125rem;font-weight:600}.hint{margin:var(--tl-spacing-3, 0.75rem) 0 0;font-size:0.75rem;color:var(--tl-muted-foreground, #6b7280)}.skeleton-line,.skeleton-block{background:var(--tl-secondary, #f3f4f6);border-radius:var(--tl-radius-md, 0.5rem);animation:pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;margin:0 auto var(--tl-spacing-3, 0.75rem)}.skeleton-line{height:1rem}.skeleton-line.short{width:40%;height:1.75rem}.skeleton-line.long{width:70%}.skeleton-block{height:8rem}@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.5}}"}},[1,"tl-order-confirmation",{orderId:[1,"order-id"],customerEmail:[1,"customer-email"],showTickets:[4,"show-tickets"],columns:[2],order:[32],resolvedOrderId:[32],loading:[32],error:[32],paymentFailed:[32],occurrence:[32],signedInCustomer:[32]},void 0,{orderId:[{watchOrderId:0}]}]),v=g,w=function(){"undefined"!=typeof customElements&&["tl-order-confirmation","tl-order-tickets","tl-ticket"].forEach((t=>{switch(t){case"tl-order-confirmation":customElements.get(i(t))||customElements.define(i(t),g);break;case"tl-order-tickets":customElements.get(i(t))||p();break;case"tl-ticket":customElements.get(i(t))||f()}}))};export{v as TlOrderConfirmation,w as defineCustomElement}
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface TlOrderTickets extends Components.TlOrderTickets, HTMLElement {}
4
+ export const TlOrderTickets: {
5
+ prototype: TlOrderTickets;
6
+ new (): TlOrderTickets;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1 @@
1
+ import{T as t,d as o}from"./tl-order-tickets2.js";const r=t,s=o;export{r as TlOrderTickets,s as defineCustomElement}
@@ -0,0 +1 @@
1
+ import{proxyCustomElement as t,HTMLElement as e,h as r,transformTag as s}from"@stencil/core/internal/client";import{w as i}from"./sdk-connector.js";import{d as o}from"./tl-ticket2.js";const a=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.columns=2,this.tickets=[],this.loading=!0,this.error=null}watchOrder(){this.load()}async componentWillLoad(){await this.load()}async load(){try{this.loading=!0,this.error=null;const t=await i(),e=t.getOrdersManager?.();if(!e)throw new Error("Tickets are not available");const r=await e.get(this.orderId);this.tickets=r?.tickets??[]}catch(t){this.error=t instanceof Error?t.message:"Failed to load tickets"}finally{this.loading=!1}}render(){return this.loading?r("div",{class:"state"},"Loading tickets…"):this.error?r("div",{class:"state error"},this.error):0===this.tickets.length?r("div",{class:"state"},"No tickets for this order yet."):r("div",{class:`grid cols-${this.columns}`},this.tickets.map((t=>r("tl-ticket",{key:t.id,ticket:t,orderId:this.orderId}))))}static get watchers(){return{orderId:[{watchOrder:0}]}}static get style(){return":host{display:block;font-family:var(--tl-font-family, system-ui, sans-serif)}.grid{display:grid;gap:var(--tl-spacing-4, 1rem);grid-template-columns:1fr}@media (min-width: 480px){.grid.cols-2{grid-template-columns:repeat(2, 1fr)}.grid.cols-3{grid-template-columns:repeat(3, 1fr)}}.state{padding:var(--tl-spacing-6, 1.5rem);text-align:center;color:var(--tl-muted-foreground, #6b7280);font-size:0.875rem}.state.error{color:var(--tl-error, #dc2626)}"}},[1,"tl-order-tickets",{orderId:[1,"order-id"],columns:[2],tickets:[32],loading:[32],error:[32]},void 0,{orderId:[{watchOrder:0}]}]);function c(){"undefined"!=typeof customElements&&["tl-order-tickets","tl-ticket"].forEach((t=>{switch(t){case"tl-order-tickets":customElements.get(s(t))||customElements.define(s(t),a);break;case"tl-ticket":customElements.get(s(t))||o()}}))}export{a as T,c as d}
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface TlPromoCode extends Components.TlPromoCode, HTMLElement {}
4
+ export const TlPromoCode: {
5
+ prototype: TlPromoCode;
6
+ new (): TlPromoCode;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1 @@
1
+ import{proxyCustomElement as t,HTMLElement as e,createEvent as r,h as o,transformTag as i}from"@stencil/core/internal/client";import{w as s}from"./sdk-connector.js";import{e as a,i as l}from"./order-summary.js";const n=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.tlPromoApplied=r(this,"tlPromoApplied",7),this.tlError=r(this,"tlError",7),this.placeholder="Promo or presale code",this.buttonLabel="Apply",this.code="",this.applying=!1,this.applied=null,this.error=null,this.handleInput=t=>{this.code=t.target.value,this.error=null},this.handleSubmit=t=>{t.preventDefault(),this.apply()},this.reset=()=>{this.applied=null,this.error=null}}async apply(){const t=this.code.trim();if(t){this.applying=!0,this.error=null;try{const e=await s(),r=e.getPresaleManager?.();if(!r)throw Error("Promo codes are not available");const o=await r.redeem(t),i=await(e.getCartManager?.()?.get().catch((()=>null)))??null;this.applied={code:t.toUpperCase(),...o,cart:i},this.code="",this.tlPromoApplied.emit(this.applied)}catch(t){console.error("[tl-promo-code] Redeem failed:",t),this.error=l(t)?"Sign in to use this code":a(t,"That code could not be applied"),this.tlError.emit({message:this.error})}finally{this.applying=!1}}else this.error="Enter a code"}render(){return this.applied?o("div",{class:"applied",role:"status"},o("span",{class:"applied-text"},o("svg",{class:"icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","aria-hidden":"true"},o("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M5 13l4 4L19 7"})),"Code ",o("strong",{class:"code"},this.applied.code),this.applied.alreadyHeld?" was already applied":" applied"),o("button",{type:"button",class:"link",onClick:this.reset},"Use a different code")):o("form",{class:"promo",onSubmit:this.handleSubmit},o("div",{class:"field"},o("input",{class:"input",type:"text",autocomplete:"off",autoCapitalize:"characters",spellcheck:!1,"aria-label":this.placeholder,placeholder:this.placeholder,value:this.code,disabled:this.applying,onInput:this.handleInput}),o("button",{type:"submit",class:"apply",disabled:this.applying},this.applying?"Applying…":this.buttonLabel)),this.error&&o("p",{class:"error",role:"alert"},this.error))}static get style(){return":host{display:block;font-family:var(--tl-font-family, system-ui, sans-serif);color:var(--tl-foreground, #111827)}.field{display:flex;gap:var(--tl-spacing-2, 0.5rem)}.input{flex:1;min-width:0;padding:var(--tl-spacing-3, 0.75rem);font:inherit;font-size:0.875rem;color:var(--tl-foreground, #111827);background:var(--tl-background, #ffffff);border:1px solid var(--tl-border, #e5e7eb);border-radius:var(--tl-radius-md, 0.5rem);text-transform:uppercase}.input::placeholder{text-transform:none;color:var(--tl-muted-foreground, #6b7280)}.input:focus{outline:2px solid var(--tl-primary, #6366f1);outline-offset:1px}.apply{padding:var(--tl-spacing-3, 0.75rem) var(--tl-spacing-4, 1rem);font:inherit;font-size:0.875rem;font-weight:500;color:var(--tl-primary-foreground, #ffffff);background:var(--tl-primary, #6366f1);border:none;border-radius:var(--tl-radius-md, 0.5rem);cursor:pointer;white-space:nowrap}.apply:hover:not(:disabled){opacity:0.9}.apply:disabled,.input:disabled{opacity:0.6;cursor:not-allowed}.error{margin:var(--tl-spacing-2, 0.5rem) 0 0;font-size:0.8125rem;color:var(--tl-error, #ef4444)}.applied{display:flex;align-items:center;justify-content:space-between;gap:var(--tl-spacing-3, 0.75rem);padding:var(--tl-spacing-3, 0.75rem);font-size:0.875rem;background:var(--tl-muted, #f9fafb);border:1px solid var(--tl-border, #e5e7eb);border-radius:var(--tl-radius-md, 0.5rem)}.applied-text{display:flex;align-items:center;gap:var(--tl-spacing-2, 0.5rem)}.icon{width:1rem;height:1rem;flex-shrink:0;color:var(--tl-success, #10b981)}.code{font-family:var(--tl-font-family-mono, ui-monospace, monospace)}.link{padding:0;font:inherit;font-size:0.8125rem;color:var(--tl-primary, #6366f1);background:none;border:none;cursor:pointer;white-space:nowrap}.link:hover{text-decoration:underline}"}},[1,"tl-promo-code",{placeholder:[1],buttonLabel:[1,"button-label"],code:[32],applying:[32],applied:[32],error:[32]}]),d=n,p=function(){"undefined"!=typeof customElements&&["tl-promo-code"].forEach((t=>{"tl-promo-code"===t&&(customElements.get(i(t))||customElements.define(i(t),n))}))};export{d as TlPromoCode,p as defineCustomElement}
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface TlSeatMap extends Components.TlSeatMap, HTMLElement {}
4
+ export const TlSeatMap: {
5
+ prototype: TlSeatMap;
6
+ new (): TlSeatMap;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1 @@
1
+ import{proxyCustomElement as e,HTMLElement as t,createEvent as a,h as s,transformTag as r}from"@stencil/core/internal/client";import{h as i,g as o}from"./sdk-connector.js";const c=e(class extends t{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.tlReady=a(this,"tlReady",7),this.tlLoad=a(this,"tlLoad",7),this.tlError=a(this,"tlError",7),this.tlSeatAdded=a(this,"tlSeatAdded",7),this.tlSeatRemoved=a(this,"tlSeatRemoved",7),this.tlCartChange=a(this,"tlCartChange",7),this.hboUrl="https://checkout.ticketlayer.com",this.apiUrl="https://api.ticketlayer.com",this.height="600px",this.width="100%",this.isReady=!1,this.isLoading=!0,this.error=null,this.seatsInCart=[],this.postToIframe=(e,t={})=>{this.iframeRef?.contentWindow&&this.iframeRef.contentWindow.postMessage({type:e,...t},"*")},this.handleMessage=e=>{if(e.data&&e.data.type)switch(e.data.type){case"seatmap:ready":this.isReady=!0,this.isLoading=!1,this.tlReady.emit(),this.postToIframe("seatmap:set-cart-seats",{seatIds:this.seatsInCart});break;case"seatmap:loaded":this.tlLoad.emit({seatMapId:e.data.seatMapId});break;case"seatmap:error":this.error=e.data.error,this.isLoading=!1,this.tlError.emit({error:e.data.error});break;case"seatmap:add-seat":this.handleAddSeat(e.data.seatId,e.data.ticketTypeId);break;case"seatmap:remove-seat":this.handleRemoveSeat(e.data.seatId)}},this.handleAddSeat=async(e,t)=>{if(!i())return console.warn("[tl-seat-map] SDK not available, cannot add seat"),void this.postToIframe("seatmap:add-seat-failed",{seatId:e,error:"SDK not available"});try{const a=o();await a.getCartManager().addSeat(e,t,this.occurrenceId),this.postToIframe("seatmap:add-seat-confirmed",{seatId:e}),this.seatsInCart=[...this.seatsInCart,e],this.tlSeatAdded.emit({seatId:e,ticketTypeId:t}),this.tlCartChange.emit({seatIds:this.seatsInCart})}catch(t){console.error("[tl-seat-map] Failed to add seat:",t),this.postToIframe("seatmap:add-seat-failed",{seatId:e,error:"Failed to add seat"})}},this.handleRemoveSeat=async e=>{if(!i())return console.warn("[tl-seat-map] SDK not available, cannot remove seat"),void this.postToIframe("seatmap:remove-seat-failed",{seatId:e,error:"SDK not available"});try{const t=o();await t.getCartManager().removeSeat(e,this.occurrenceId),this.postToIframe("seatmap:remove-seat-confirmed",{seatId:e}),this.seatsInCart=this.seatsInCart.filter((t=>t!==e)),this.tlSeatRemoved.emit({seatId:e}),this.tlCartChange.emit({seatIds:this.seatsInCart})}catch(t){console.error("[tl-seat-map] Failed to remove seat:",t),this.postToIframe("seatmap:remove-seat-failed",{seatId:e,error:"Failed to remove seat"})}}}componentWillLoad(){window.addEventListener("message",this.handleMessage)}disconnectedCallback(){window.removeEventListener("message",this.handleMessage)}watchOccurrenceId(){this.isReady=!1,this.isLoading=!0,this.error=null}getIframeSrc(){return`${this.hboUrl}/embed/seats?occurrenceId=${encodeURIComponent(this.occurrenceId)}&apiUrl=${encodeURIComponent(this.apiUrl)}`}render(){return s("div",{key:"f1efda6053825bdeb72aa277ad9fb5533fc56881",class:"seat-map-container",style:{width:this.width,height:this.height}},this.isLoading&&s("div",{key:"d6017235cb2e06fcc27184b382747dc8bcae5b6c",class:"loading"},s("div",{key:"63618e07b6f4a2822418283fc83ab08aaec054a2",class:"spinner"}),s("p",{key:"0de2e4f71f78c5e662b03f5c0217ae43a2c4c1df"},"Loading seat map...")),this.error&&s("div",{key:"a2b45dc5a66e18109cd4cf8677989e669117dcc0",class:"error"},s("p",{key:"c50b5527a2f6308b53e0389f94cacb2ebeef7262",class:"error-title"},"Error"),s("p",{key:"1625a73993cbac40bfefb7913e0b735c0082a23f",class:"error-message"},this.error)),s("iframe",{key:"c7fc0441b436086d4717a87723108b1471c941ad",ref:e=>this.iframeRef=e,src:this.getIframeSrc(),class:{"seat-map-iframe":!0,hidden:this.isLoading||!!this.error},title:"Ticketlayer Seat Map",allow:"fullscreen"}))}get el(){return this}static get watchers(){return{occurrenceId:[{watchOccurrenceId:0}]}}static get style(){return":host{display:block;font-family:var(--tl-font-family, system-ui, -apple-system, sans-serif)}.seat-map-container{position:relative;overflow:hidden;border-radius:var(--tl-radius-md, 0.5rem);background:var(--tl-color-background, #ffffff)}.seat-map-iframe{width:100%;height:100%;border:none}.seat-map-iframe.hidden{display:none}.loading{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--tl-color-background, #ffffff);color:var(--tl-color-foreground, #0f172a);gap:1rem}.loading p{margin:0;font-size:0.875rem;color:var(--tl-color-muted-foreground, #64748b)}.spinner{width:40px;height:40px;border:3px solid var(--tl-color-border, #e2e8f0);border-top-color:var(--tl-color-primary, #e64b12);border-radius:50%;animation:tl-seat-map-spin 1s linear infinite}@keyframes tl-seat-map-spin{to{transform:rotate(360deg)}}.error{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--tl-color-background, #ffffff);color:var(--tl-color-error, #ef4444);padding:1.5rem;text-align:center}.error-title{margin:0 0 0.5rem;font-size:1.125rem;font-weight:600}.error-message{margin:0;font-size:0.875rem;opacity:0.9}"}},[1,"tl-seat-map",{occurrenceId:[1,"occurrence-id"],hboUrl:[1,"hbo-url"],apiUrl:[1,"api-url"],height:[1],width:[1],isReady:[32],isLoading:[32],error:[32],seatsInCart:[32]},void 0,{occurrenceId:[{watchOccurrenceId:0}]}]),n=c,d=function(){"undefined"!=typeof customElements&&["tl-seat-map"].forEach((e=>{"tl-seat-map"===e&&(customElements.get(r(e))||customElements.define(r(e),c))}))};export{n as TlSeatMap,d as defineCustomElement}
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface TlTicketSelector extends Components.TlTicketSelector, HTMLElement {}
4
+ export const TlTicketSelector: {
5
+ prototype: TlTicketSelector;
6
+ new (): TlTicketSelector;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1 @@
1
+ import{T as t,d as o}from"./tl-ticket-selector2.js";const s=t,e=o;export{s as TlTicketSelector,e as defineCustomElement}
@@ -0,0 +1 @@
1
+ import{proxyCustomElement as t,HTMLElement as e,createEvent as r,h as o,transformTag as s}from"@stencil/core/internal/client";import{w as i,g as a,h as c}from"./sdk-connector.js";const n=t(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.tlAddToCart=r(this,"tlAddToCart",7),this.tlQuantityChange=r(this,"tlQuantityChange",7),this.tlError=r(this,"tlError",7),this.showButton=!0,this.buttonLabel="Add to Cart",this.ticketTypes=[],this.quantities={},this.loading=!0,this.error=null,this.adding=!1,this.addSuccess=!1}watchPropsChange(){this.loadTicketTypes()}async componentWillLoad(){await this.waitForSDKAndLoad()}async waitForSDKAndLoad(){if(this.eventId&&this.occurrenceId)try{await i(),await this.loadTicketTypes()}catch(t){this.error=t instanceof Error?t.message:"SDK not initialized.",this.loading=!1}}async loadTicketTypes(){try{console.log("[tl-ticket-selector] Loading ticket types...",{eventId:this.eventId,occurrenceId:this.occurrenceId}),this.loading=!0,this.error=null;const t=a().getEventsManager(),e=await t.getTicketTypes(this.eventId,this.occurrenceId);console.log("[tl-ticket-selector] Ticket types loaded:",e.length),this.ticketTypes=e;const r={};e.forEach((t=>{r[t.id]=0})),this.quantities=r}catch(t){console.error("[tl-ticket-selector] Failed to load ticket types:",t),this.error=t instanceof Error?t.message:"Failed to load tickets",this.tlError.emit({message:this.error})}finally{this.loading=!1}}handleQuantityChange(t,e){const r=this.ticketTypes.find((e=>e.id===t));if(!r)return;const o=Math.max(0,Math.min(r.maxPerOrder,(this.quantities[t]||0)+e));this.quantities={...this.quantities,[t]:o};const s=this.calculateTotal();this.tlQuantityChange.emit({ticketTypeId:t,quantity:o,total:s})}calculateTotal(){return this.ticketTypes.reduce(((t,e)=>t+(this.quantities[e.id]||0)*e.price),0)}getTotalItems(){return Object.values(this.quantities).reduce(((t,e)=>t+e),0)}async handleAddToCart(){const t=Object.entries(this.quantities).filter((([t,e])=>e>0)).map((([t,e])=>({ticketTypeId:t,quantity:e})));if(0!==t.length){this.adding=!0,this.addSuccess=!1;try{if(c()){const e=a(),r=e.getCartManager?.();if(r){for(const e of t)await r.addItem(e.ticketTypeId,e.quantity,this.occurrenceId);console.log("[tl-ticket-selector] Items added to cart")}}const e={};this.ticketTypes.forEach((t=>{e[t.id]=0})),this.quantities=e,this.addSuccess=!0,setTimeout((()=>{this.addSuccess=!1}),3e3),this.tlAddToCart.emit({items:t})}catch(t){console.error("[tl-ticket-selector] Failed to add to cart:",t),this.error=t instanceof Error?t.message:"Failed to add to cart",this.tlError.emit({message:this.error})}finally{this.adding=!1}}}formatPrice(t,e="GBP"){return new Intl.NumberFormat("en-GB",{style:"currency",currency:e}).format(t/100)}renderSkeleton(){return o("div",{class:"skeleton-container"},o("div",{class:"skeleton-row"}),o("div",{class:"skeleton-row"}),o("div",{class:"skeleton-row"}))}renderError(){return o("div",{class:"error-state"},o("p",{class:"error-message"},this.error))}renderTicketRow(t){const e="sold_out"===t.availabilityStatus,r=this.quantities[t.id]||0;return o("div",{class:"ticket-row "+(e?"sold-out":""),key:t.id},o("div",{class:"ticket-info"},o("div",{class:"ticket-header"},o("span",{class:"ticket-name"},t.name),"limited"===t.availabilityStatus&&o("span",{class:"status-badge limited"},"Limited"),e&&o("span",{class:"status-badge sold-out"},"Sold Out")),t.description&&o("p",{class:"ticket-description"},t.description),o("p",{class:"ticket-price"},this.formatPrice(t.price,t.currency))),o("div",{class:"quantity-controls"},o("button",{class:"qty-btn",onClick:()=>this.handleQuantityChange(t.id,-1),disabled:e||0===r,"aria-label":"Decrease quantity"},"−"),o("span",{class:"qty-value"},r),o("button",{class:"qty-btn",onClick:()=>this.handleQuantityChange(t.id,1),disabled:e||r>=t.maxPerOrder,"aria-label":"Increase quantity"},"+")))}render(){if(this.loading)return this.renderSkeleton();if(this.error)return this.renderError();const t=this.getTotalItems(),e=this.calculateTotal();return o("div",{class:"ticket-selector"},o("div",{class:"ticket-list"},this.ticketTypes.map((t=>this.renderTicketRow(t)))),this.addSuccess&&o("div",{class:"success-message"},o("svg",{class:"success-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},o("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M5 13l4 4L19 7"})),"Added to cart!"),this.showButton&&o("button",{class:"add-to-cart-btn "+(0===t?"disabled":""),onClick:()=>this.handleAddToCart(),disabled:0===t||this.adding},this.adding?"Adding...":0===t?"Select Tickets":`${this.buttonLabel} - ${this.formatPrice(e)}`))}static get watchers(){return{eventId:[{watchPropsChange:0}],occurrenceId:[{watchPropsChange:0}]}}static get style(){return":host{--tl-color-primary:var(--tl-primary, #6366f1);--tl-color-primary-foreground:var(--tl-primary-foreground, #ffffff);--tl-color-background:var(--tl-background, #ffffff);--tl-color-foreground:var(--tl-foreground, #111827);--tl-color-muted:var(--tl-muted, #f3f4f6);--tl-color-muted-foreground:var(--tl-muted-foreground, #6b7280);--tl-color-border:var(--tl-border, #e5e7eb);--tl-color-destructive:var(--tl-error, #ef4444);display:block;font-family:var(--tl-font-family, system-ui, sans-serif)}.ticket-selector{background:var(--tl-color-background, #ffffff)}.skeleton-container{padding:var(--tl-spacing-4, 1rem)}.skeleton-row{height:60px;background:var(--tl-color-muted, #f3f4f6);border-radius:var(--tl-radius-md, 0.5rem);margin-bottom:var(--tl-spacing-3, 0.75rem);animation:pulse 1.5s ease-in-out infinite}@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.5}}.error-state{padding:var(--tl-spacing-4, 1rem);color:var(--tl-color-destructive, #ef4444)}.error-message{margin:0;font-size:14px}.ticket-list{margin-bottom:var(--tl-spacing-4, 1rem)}.ticket-row{display:flex;align-items:center;justify-content:space-between;padding:var(--tl-spacing-3, 0.75rem) 0;border-bottom:1px solid var(--tl-color-border, #e5e7eb)}.ticket-row.sold-out{opacity:0.5}.ticket-info{flex:1;min-width:0}.ticket-header{display:flex;align-items:center;gap:var(--tl-spacing-2, 0.5rem);flex-wrap:wrap}.ticket-name{font-weight:600;color:var(--tl-color-foreground, #111827);font-size:15px}.status-badge{font-size:12px;font-weight:500;padding:2px 8px;border-radius:4px}.status-badge.limited{background-color:var(--tl-color-warning-bg, #fef3c7);color:var(--tl-color-warning, #d97706)}.status-badge.sold-out{background-color:var(--tl-color-destructive-bg, #fee2e2);color:var(--tl-color-destructive, #ef4444)}.ticket-description{margin:var(--tl-spacing-1, 0.25rem) 0 0;font-size:14px;color:var(--tl-color-muted-foreground, #6b7280)}.ticket-price{margin:var(--tl-spacing-1, 0.25rem) 0 0;font-size:14px;font-weight:600;color:var(--tl-color-foreground, #111827)}.quantity-controls{display:flex;align-items:center;gap:var(--tl-spacing-2, 0.5rem);margin-left:var(--tl-spacing-4, 1rem)}.qty-btn{width:32px;height:32px;border-radius:var(--tl-radius-sm, 0.25rem);border:1px solid var(--tl-color-border, #d1d5db);background:var(--tl-color-background, #ffffff);color:var(--tl-color-foreground, #111827);font-size:18px;font-weight:500;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color 0.15s, border-color 0.15s}.qty-btn:hover:not(:disabled){background-color:var(--tl-color-muted, #f3f4f6);border-color:var(--tl-color-border-hover, #9ca3af)}.qty-btn:disabled{cursor:not-allowed;opacity:0.5}.qty-value{width:32px;text-align:center;font-weight:600;font-size:16px;color:var(--tl-color-foreground, #111827)}.success-message{display:flex;align-items:center;justify-content:center;gap:var(--tl-spacing-2, 0.5rem);padding:var(--tl-spacing-3, 0.75rem);background-color:var(--tl-color-success, #10b981);color:#ffffff;border-radius:var(--tl-radius-md, 0.5rem);margin-bottom:var(--tl-spacing-3, 0.75rem);font-weight:500;font-size:14px}.success-icon{width:18px;height:18px}.add-to-cart-btn{width:100%;padding:var(--tl-spacing-3, 0.75rem) var(--tl-spacing-4, 1rem);border-radius:var(--tl-radius-md, 0.5rem);border:none;background-color:var(--tl-color-primary, #6366f1);color:var(--tl-color-primary-foreground, #ffffff);font-weight:600;font-size:16px;cursor:pointer;transition:opacity 0.15s, transform 0.1s}.add-to-cart-btn:hover:not(:disabled){opacity:0.9}.add-to-cart-btn:active:not(:disabled){transform:scale(0.98)}.add-to-cart-btn.disabled,.add-to-cart-btn:disabled{background-color:var(--tl-color-muted, #d1d5db);color:var(--tl-color-muted-foreground, #6b7280);cursor:not-allowed}"}},[1,"tl-ticket-selector",{eventId:[1,"event-id"],occurrenceId:[1,"occurrence-id"],showButton:[4,"show-button"],buttonLabel:[1,"button-label"],ticketTypes:[32],quantities:[32],loading:[32],error:[32],adding:[32],addSuccess:[32]},void 0,{eventId:[{watchPropsChange:0}],occurrenceId:[{watchPropsChange:0}]}]);function l(){"undefined"!=typeof customElements&&["tl-ticket-selector"].forEach((t=>{"tl-ticket-selector"===t&&(customElements.get(s(t))||customElements.define(s(t),n))}))}export{n as T,l as d}
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface TlTicket extends Components.TlTicket, HTMLElement {}
4
+ export const TlTicket: {
5
+ prototype: TlTicket;
6
+ new (): TlTicket;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1 @@
1
+ import{T as t,d as o}from"./tl-ticket2.js";const s=t,r=o;export{s as TlTicket,r as defineCustomElement}
@@ -0,0 +1 @@
1
+ import{proxyCustomElement as t,HTMLElement as n,h as r,transformTag as e}from"@stencil/core/internal/client";import{w as o}from"./sdk-connector.js";function i(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var u,c,s={};function f(){return c?u:(c=1,u=function(){return"function"==typeof Promise&&Promise.prototype&&Promise.prototype.then})}var a,l={},h={};function d(){if(a)return h;let t;a=1;const n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return h.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return 4*t+17},h.getSymbolTotalCodewords=function(t){return n[t]},h.getBCHDigit=function(t){let n=0;for(;0!==t;)n++,t>>>=1;return n},h.setToSJISFunction=function(n){if("function"!=typeof n)throw new Error('"toSJISFunc" is not a valid function.');t=n},h.isKanjiModeEnabled=function(){return void 0!==t},h.toSJIS=function(n){return t(n)},h}var w,m,p,v,g,y={};function E(){return w||(w=1,(t=y).L={bit:1},t.M={bit:0},t.Q={bit:3},t.H={bit:2},t.isValid=function(t){return t&&void 0!==t.bit&&t.bit>=0&&t.bit<4},t.from=function(n,r){if(t.isValid(n))return n;try{return function(n){if("string"!=typeof n)throw new Error("Param is not a string");switch(n.toLowerCase()){case"l":case"low":return t.L;case"m":case"medium":return t.M;case"q":case"quartile":return t.Q;case"h":case"high":return t.H;default:throw new Error("Unknown EC Level: "+n)}}(n)}catch(t){return r}}),y;var t}var b,A,k,x,M={},T={},R={},U={};function P(){if(x)return U;x=1;const t=E(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];return U.getBlocksCount=function(r,e){switch(e){case t.L:return n[4*(r-1)+0];case t.M:return n[4*(r-1)+1];case t.Q:return n[4*(r-1)+2];case t.H:return n[4*(r-1)+3];default:return}},U.getTotalCodewordsCount=function(n,e){switch(e){case t.L:return r[4*(n-1)+0];case t.M:return r[4*(n-1)+1];case t.Q:return r[4*(n-1)+2];case t.H:return r[4*(n-1)+3];default:return}},U}var I,F,N,C,B={},q={};var _,L={},Q={},$={};function S(){return _||(_=1,$.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),$}var z,j,D,Z={};function O(){if(z)return Z;z=1;const t="[0-9]+";let n="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";n=n.replace(/u/g,"\\u");const r="(?:(?![A-Z0-9 $%*+\\-./:]|"+n+")(?:.|[\r\n]))+";Z.KANJI=new RegExp(n,"g"),Z.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),Z.BYTE=new RegExp(r,"g"),Z.NUMERIC=new RegExp(t,"g"),Z.ALPHANUMERIC=new RegExp("[A-Z $%*+\\-./:]+","g");const e=new RegExp("^"+n+"$"),o=new RegExp("^"+t+"$"),i=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return Z.testKanji=function(t){return e.test(t)},Z.testNumeric=function(t){return o.test(t)},Z.testAlphanumeric=function(t){return i.test(t)},Z}function H(){return j||(j=1,function(t){const n=S(),r=O();t.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},t.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},t.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},t.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},t.MIXED={bit:-1},t.getCharCountIndicator=function(t,r){if(!t.ccBits)throw new Error("Invalid mode: "+t);if(!n.isValid(r))throw new Error("Invalid version: "+r);return r>=1&&r<10?t.ccBits[0]:r<27?t.ccBits[1]:t.ccBits[2]},t.getBestModeForData=function(n){return r.testNumeric(n)?t.NUMERIC:r.testAlphanumeric(n)?t.ALPHANUMERIC:r.testKanji(n)?t.KANJI:t.BYTE},t.toString=function(t){if(t&&t.id)return t.id;throw new Error("Invalid mode")},t.isValid=function(t){return t&&t.bit&&t.ccBits},t.from=function(n,r){if(t.isValid(n))return n;try{return function(n){if("string"!=typeof n)throw new Error("Param is not a string");switch(n.toLowerCase()){case"numeric":return t.NUMERIC;case"alphanumeric":return t.ALPHANUMERIC;case"kanji":return t.KANJI;case"byte":return t.BYTE;default:throw new Error("Unknown mode: "+n)}}(n)}catch(t){return r}}}(Q)),Q}var J,K,V,W,Y,G,X,tt,nt,rt,et,ot,it={},ut={},ct={exports:{}};function st(){return rt||(rt=1,function(t){var n={single_source_shortest_paths:function(t,r,e){var o={},i={};i[r]=0;var u,c,s,f,a,l,h=n.PriorityQueue.make();for(h.push(r,0);!h.empty();)for(s in f=(u=h.pop()).cost,a=t[c=u.value]||{})a.hasOwnProperty(s)&&(l=f+a[s],(void 0===i[s]||i[s]>l)&&(i[s]=l,h.push(s,l),o[s]=c));if(void 0!==e&&void 0===i[e]){var d=["Could not find a path from ",r," to ",e,"."].join("");throw new Error(d)}return o},extract_shortest_path_from_predecessor_list:function(t,n){for(var r=[],e=n;e;)r.push(e),e=t[e];return r.reverse(),r},find_path:function(t,r,e){var o=n.single_source_shortest_paths(t,r,e);return n.extract_shortest_path_from_predecessor_list(o,e)},PriorityQueue:{make:function(t){var r,e=n.PriorityQueue,o={};for(r in t=t||{},e)e.hasOwnProperty(r)&&(o[r]=e[r]);return o.queue=[],o.sorter=t.sorter||e.default_sorter,o},default_sorter:function(t,n){return t.cost-n.cost},push:function(t,n){this.queue.push({value:t,cost:n}),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};t.exports=n}(ct)),ct.exports}function ft(){if(ot)return l;ot=1;const t=d(),n=E(),r=function(){if(p)return m;function t(){this.buffer=[],this.length=0}return p=1,t.prototype={get:function(t){const n=Math.floor(t/8);return 1==(this.buffer[n]>>>7-t%8&1)},put:function(t,n){for(let r=0;r<n;r++)this.putBit(1==(t>>>n-r-1&1))},getLengthInBits:function(){return this.length},putBit:function(t){const n=Math.floor(this.length/8);this.buffer.length<=n&&this.buffer.push(0),t&&(this.buffer[n]|=128>>>this.length%8),this.length++}},m=t}(),e=function(){if(g)return v;function t(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}return g=1,t.prototype.set=function(t,n,r,e){const o=t*this.size+n;this.data[o]=r,e&&(this.reservedBit[o]=!0)},t.prototype.get=function(t,n){return this.data[t*this.size+n]},t.prototype.xor=function(t,n,r){this.data[t*this.size+n]^=r},t.prototype.isReserved=function(t,n){return this.reservedBit[t*this.size+n]},v=t}(),o=(b||(b=1,function(t){const n=d().getSymbolSize;t.getRowColCoords=function(t){if(1===t)return[];const r=Math.floor(t/7)+2,e=n(t),o=145===e?26:2*Math.ceil((e-13)/(2*r-2)),i=[e-7];for(let t=1;t<r-1;t++)i[t]=i[t-1]-o;return i.push(6),i.reverse()},t.getPositions=function(n){const r=[],e=t.getRowColCoords(n),o=e.length;for(let t=0;t<o;t++)for(let n=0;n<o;n++)0===t&&0===n||0===t&&n===o-1||t===o-1&&0===n||r.push([e[t],e[n]]);return r}}(M)),M),i=function(){if(A)return T;A=1;const t=d().getSymbolSize;return T.getPositions=function(n){const r=t(n);return[[0,0],[r-7,0],[0,r-7]]},T}(),u=(k||(k=1,function(t){t.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};function n(n,r,e){switch(n){case t.Patterns.PATTERN000:return(r+e)%2==0;case t.Patterns.PATTERN001:return r%2==0;case t.Patterns.PATTERN010:return e%3==0;case t.Patterns.PATTERN011:return(r+e)%3==0;case t.Patterns.PATTERN100:return(Math.floor(r/2)+Math.floor(e/3))%2==0;case t.Patterns.PATTERN101:return r*e%2+r*e%3==0;case t.Patterns.PATTERN110:return(r*e%2+r*e%3)%2==0;case t.Patterns.PATTERN111:return(r*e%3+(r+e)%2)%2==0;default:throw new Error("bad maskPattern:"+n)}}t.isValid=function(t){return null!=t&&""!==t&&!isNaN(t)&&t>=0&&t<=7},t.from=function(n){return t.isValid(n)?parseInt(n,10):void 0},t.getPenaltyN1=function(t){const n=t.size;let r=0,e=0,o=0,i=null,u=null;for(let c=0;c<n;c++){e=o=0,i=u=null;for(let s=0;s<n;s++){let n=t.get(c,s);n===i?e++:(e>=5&&(r+=e-5+3),i=n,e=1),n=t.get(s,c),n===u?o++:(o>=5&&(r+=o-5+3),u=n,o=1)}e>=5&&(r+=e-5+3),o>=5&&(r+=o-5+3)}return r},t.getPenaltyN2=function(t){const n=t.size;let r=0;for(let e=0;e<n-1;e++)for(let o=0;o<n-1;o++){const n=t.get(e,o)+t.get(e,o+1)+t.get(e+1,o)+t.get(e+1,o+1);4!==n&&0!==n||r++}return 3*r},t.getPenaltyN3=function(t){const n=t.size;let r=0,e=0,o=0;for(let i=0;i<n;i++){e=o=0;for(let u=0;u<n;u++)e=e<<1&2047|t.get(i,u),u>=10&&(1488===e||93===e)&&r++,o=o<<1&2047|t.get(u,i),u>=10&&(1488===o||93===o)&&r++}return 40*r},t.getPenaltyN4=function(t){let n=0;const r=t.data.length;for(let e=0;e<r;e++)n+=t.data[e];return 10*Math.abs(Math.ceil(100*n/r/5)-10)},t.applyMask=function(t,r){const e=r.size;for(let o=0;o<e;o++)for(let i=0;i<e;i++)r.isReserved(i,o)||r.xor(i,o,n(t,i,o))},t.getBestMask=function(n,r){const e=Object.keys(t.Patterns).length;let o=0,i=1/0;for(let u=0;u<e;u++){r(u),t.applyMask(u,n);const e=t.getPenaltyN1(n)+t.getPenaltyN2(n)+t.getPenaltyN3(n)+t.getPenaltyN4(n);t.applyMask(u,n),e<i&&(i=e,o=u)}return o}}(R)),R),c=P(),s=function(){if(C)return N;C=1;const t=(F||(F=1,function(t){const n=function(){if(I)return q;I=1;const t=new Uint8Array(512),n=new Uint8Array(256);return function(){let r=1;for(let e=0;e<255;e++)t[e]=r,n[r]=e,r<<=1,256&r&&(r^=285);for(let n=255;n<512;n++)t[n]=t[n-255]}(),q.log=function(t){if(t<1)throw new Error("log("+t+")");return n[t]},q.exp=function(n){return t[n]},q.mul=function(r,e){return 0===r||0===e?0:t[n[r]+n[e]]},q}();t.mul=function(t,r){const e=new Uint8Array(t.length+r.length-1);for(let o=0;o<t.length;o++)for(let i=0;i<r.length;i++)e[o+i]^=n.mul(t[o],r[i]);return e},t.mod=function(t,r){let e=new Uint8Array(t);for(;e.length-r.length>=0;){const t=e[0];for(let o=0;o<r.length;o++)e[o]^=n.mul(r[o],t);let o=0;for(;o<e.length&&0===e[o];)o++;e=e.slice(o)}return e},t.generateECPolynomial=function(r){let e=new Uint8Array([1]);for(let o=0;o<r;o++)e=t.mul(e,new Uint8Array([1,n.exp(o)]));return e}}(B)),B);function n(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}return n.prototype.initialize=function(n){this.degree=n,this.genPoly=t.generateECPolynomial(this.degree)},n.prototype.encode=function(n){if(!this.genPoly)throw new Error("Encoder not initialized");const r=new Uint8Array(n.length+this.degree);r.set(n);const e=t.mod(r,this.genPoly),o=this.degree-e.length;if(o>0){const t=new Uint8Array(this.degree);return t.set(e,o),t}return e},N=n}(),f=(D||(D=1,function(t){const n=d(),r=P(),e=E(),o=H(),i=S(),u=n.getBCHDigit(7973);function c(t,n){return o.getCharCountIndicator(t,n)+4}function s(t,n){let r=0;return t.forEach((function(t){const e=c(t.mode,n);r+=e+t.getBitsLength()})),r}t.from=function(t,n){return i.isValid(t)?parseInt(t,10):n},t.getCapacity=function(t,e,u){if(!i.isValid(t))throw new Error("Invalid QR Code version");void 0===u&&(u=o.BYTE);const s=8*(n.getSymbolTotalCodewords(t)-r.getTotalCodewordsCount(t,e));if(u===o.MIXED)return s;const f=s-c(u,t);switch(u){case o.NUMERIC:return Math.floor(f/10*3);case o.ALPHANUMERIC:return Math.floor(f/11*2);case o.KANJI:return Math.floor(f/13);default:return Math.floor(f/8)}},t.getBestVersionForData=function(n,r){let i;const u=e.from(r,e.M);if(Array.isArray(n)){if(n.length>1)return function(n,r){for(let e=1;e<=40;e++)if(s(n,e)<=t.getCapacity(e,r,o.MIXED))return e}(n,u);if(0===n.length)return 1;i=n[0]}else i=n;return function(n,r,e){for(let o=1;o<=40;o++)if(r<=t.getCapacity(o,e,n))return o}(i.mode,i.getLength(),u)},t.getEncodedBits=function(t){if(!i.isValid(t)||t<7)throw new Error("Invalid QR Code version");let r=t<<12;for(;n.getBCHDigit(r)-u>=0;)r^=7973<<n.getBCHDigit(r)-u;return t<<12|r}}(L)),L),a=function(){if(J)return it;J=1;const t=d(),n=t.getBCHDigit(1335);return it.getEncodedBits=function(r,e){const o=r.bit<<3|e;let i=o<<10;for(;t.getBCHDigit(i)-n>=0;)i^=1335<<t.getBCHDigit(i)-n;return 21522^(o<<10|i)},it}(),h=H(),w=(et||(et=1,function(t){const n=H(),r=function(){if(V)return K;V=1;const t=H();function n(n){this.mode=t.NUMERIC,this.data=n.toString()}return n.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(t){let n,r,e;for(n=0;n+3<=this.data.length;n+=3)r=this.data.substr(n,3),e=parseInt(r,10),t.put(e,10);const o=this.data.length-n;o>0&&(r=this.data.substr(n),e=parseInt(r,10),t.put(e,3*o+1))},K=n}(),e=function(){if(Y)return W;Y=1;const t=H(),n=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function r(n){this.mode=t.ALPHANUMERIC,this.data=n}return r.getBitsLength=function(t){return 11*Math.floor(t/2)+t%2*6},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(t){let r;for(r=0;r+2<=this.data.length;r+=2){let e=45*n.indexOf(this.data[r]);e+=n.indexOf(this.data[r+1]),t.put(e,11)}this.data.length%2&&t.put(n.indexOf(this.data[r]),6)},W=r}(),o=function(){if(X)return G;X=1;const t=H();function n(n){this.mode=t.BYTE,this.data="string"==typeof n?(new TextEncoder).encode(n):new Uint8Array(n)}return n.getBitsLength=function(t){return 8*t},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(t){for(let n=0,r=this.data.length;n<r;n++)t.put(this.data[n],8)},G=n}(),i=function(){if(nt)return tt;nt=1;const t=H(),n=d();function r(n){this.mode=t.KANJI,this.data=n}return r.getBitsLength=function(t){return 13*t},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(t){let r;for(r=0;r<this.data.length;r++){let e=n.toSJIS(this.data[r]);if(e>=33088&&e<=40956)e-=33088;else{if(!(e>=57408&&e<=60351))throw new Error("Invalid SJIS character: "+this.data[r]+"\nMake sure your charset is UTF-8");e-=49472}e=192*(e>>>8&255)+(255&e),t.put(e,13)}},tt=r}(),u=O(),c=d(),s=st();function f(t){return unescape(encodeURIComponent(t)).length}function a(t,n,r){const e=[];let o;for(;null!==(o=t.exec(r));)e.push({data:o[0],index:o.index,mode:n,length:o[0].length});return e}function l(t){const r=a(u.NUMERIC,n.NUMERIC,t),e=a(u.ALPHANUMERIC,n.ALPHANUMERIC,t);let o,i;return c.isKanjiModeEnabled()?(o=a(u.BYTE,n.BYTE,t),i=a(u.KANJI,n.KANJI,t)):(o=a(u.BYTE_KANJI,n.BYTE,t),i=[]),r.concat(e,o,i).sort((function(t,n){return t.index-n.index})).map((function(t){return{data:t.data,mode:t.mode,length:t.length}}))}function h(t,u){switch(u){case n.NUMERIC:return r.getBitsLength(t);case n.ALPHANUMERIC:return e.getBitsLength(t);case n.KANJI:return i.getBitsLength(t);case n.BYTE:return o.getBitsLength(t)}}function w(t,u){let s;const f=n.getBestModeForData(t);if(s=n.from(u,f),s!==n.BYTE&&s.bit<f.bit)throw new Error('"'+t+'" cannot be encoded with mode '+n.toString(s)+".\n Suggested mode is: "+n.toString(f));switch(s!==n.KANJI||c.isKanjiModeEnabled()||(s=n.BYTE),s){case n.NUMERIC:return new r(t);case n.ALPHANUMERIC:return new e(t);case n.KANJI:return new i(t);case n.BYTE:return new o(t)}}t.fromArray=function(t){return t.reduce((function(t,n){return"string"==typeof n?t.push(w(n,null)):n.data&&t.push(w(n.data,n.mode)),t}),[])},t.fromString=function(r,e){const o=function(t,r){const e={},o={start:{}};let i=["start"];for(let u=0;u<t.length;u++){const c=t[u],s=[];for(let t=0;t<c.length;t++){const f=c[t],a=""+u+t;s.push(a),e[a]={node:f,lastCount:0},o[a]={};for(let t=0;t<i.length;t++){const u=i[t];e[u]&&e[u].node.mode===f.mode?(o[u][a]=h(e[u].lastCount+f.length,f.mode)-h(e[u].lastCount,f.mode),e[u].lastCount+=f.length):(e[u]&&(e[u].lastCount=f.length),o[u][a]=h(f.length,f.mode)+4+n.getCharCountIndicator(f.mode,r))}}i=s}for(let t=0;t<i.length;t++)o[i[t]].end=0;return{map:o,table:e}}(function(t){const r=[];for(let e=0;e<t.length;e++){const o=t[e];switch(o.mode){case n.NUMERIC:r.push([o,{data:o.data,mode:n.ALPHANUMERIC,length:o.length},{data:o.data,mode:n.BYTE,length:o.length}]);break;case n.ALPHANUMERIC:r.push([o,{data:o.data,mode:n.BYTE,length:o.length}]);break;case n.KANJI:r.push([o,{data:o.data,mode:n.BYTE,length:f(o.data)}]);break;case n.BYTE:r.push([{data:o.data,mode:n.BYTE,length:f(o.data)}])}}return r}(l(r,c.isKanjiModeEnabled())),e),i=s.find_path(o.map,"start","end"),u=[];for(let t=1;t<i.length-1;t++)u.push(o.table[i[t]].node);return t.fromArray(u.reduce((function(t,n){const r=t.length-1>=0?t[t.length-1]:null;return r&&r.mode===n.mode?(t[t.length-1].data+=n.data,t):(t.push(n),t)}),[]))},t.rawSplit=function(n){return t.fromArray(l(n,c.isKanjiModeEnabled()))}}(ut)),ut);function y(t,n,r){const e=t.size,o=a.getEncodedBits(n,r);let i,u;for(i=0;i<15;i++)u=1==(o>>i&1),t.set(i<6?i:i<8?i+1:e-15+i,8,u,!0),t.set(8,i<8?e-i-1:i<9?15-i-1+1:15-i-1,u,!0);t.set(e-8,8,1,!0)}function x(n,a,l,d){let m;if(Array.isArray(n))m=w.fromArray(n);else{if("string"!=typeof n)throw new Error("Invalid data");{let t=a;if(!t){const r=w.rawSplit(n);t=f.getBestVersionForData(r,l)}m=w.fromString(n,t||40)}}const p=f.getBestVersionForData(m,l);if(!p)throw new Error("The amount of data is too big to be stored in a QR Code");if(a){if(a<p)throw new Error("\nThe chosen QR Code version cannot contain this amount of data.\nMinimum version required to store current data is: "+p+".\n")}else a=p;const v=function(n,e,o){const i=new r;o.forEach((function(t){i.put(t.mode.bit,4),i.put(t.getLength(),h.getCharCountIndicator(t.mode,n)),t.write(i)}));const u=8*(t.getSymbolTotalCodewords(n)-c.getTotalCodewordsCount(n,e));for(i.getLengthInBits()+4<=u&&i.put(0,4);i.getLengthInBits()%8!=0;)i.putBit(0);const f=(u-i.getLengthInBits())/8;for(let t=0;t<f;t++)i.put(t%2?17:236,8);return function(n,r,e){const o=t.getSymbolTotalCodewords(r),i=o-c.getTotalCodewordsCount(r,e),u=c.getBlocksCount(r,e),f=u-o%u,a=Math.floor(o/u),l=Math.floor(i/u),h=l+1,d=a-l,w=new s(d);let m=0;const p=new Array(u),v=new Array(u);let g=0;const y=new Uint8Array(n.buffer);for(let t=0;t<u;t++){const n=t<f?l:h;p[t]=y.slice(m,m+n),v[t]=w.encode(p[t]),m+=n,g=Math.max(g,n)}const E=new Uint8Array(o);let b,A,k=0;for(b=0;b<g;b++)for(A=0;A<u;A++)b<p[A].length&&(E[k++]=p[A][b]);for(b=0;b<d;b++)for(A=0;A<u;A++)E[k++]=v[A][b];return E}(i,n,e)}(a,l,m),g=t.getSymbolSize(a),E=new e(g);return function(t,n){const r=t.size,e=i.getPositions(n);for(let n=0;n<e.length;n++){const o=e[n][0],i=e[n][1];for(let n=-1;n<=7;n++)if(!(o+n<=-1||r<=o+n))for(let e=-1;e<=7;e++)i+e<=-1||r<=i+e||t.set(o+n,i+e,n>=0&&n<=6&&(0===e||6===e)||e>=0&&e<=6&&(0===n||6===n)||n>=2&&n<=4&&e>=2&&e<=4,!0)}}(E,a),function(t){const n=t.size;for(let r=8;r<n-8;r++){const n=r%2==0;t.set(r,6,n,!0),t.set(6,r,n,!0)}}(E),function(t,n){const r=o.getPositions(n);for(let n=0;n<r.length;n++){const e=r[n][0],o=r[n][1];for(let n=-2;n<=2;n++)for(let r=-2;r<=2;r++)t.set(e+n,o+r,-2===n||2===n||-2===r||2===r||0===n&&0===r,!0)}}(E,a),y(E,l,0),a>=7&&function(t,n){const r=t.size,e=f.getEncodedBits(n);let o,i,u;for(let n=0;n<18;n++)o=Math.floor(n/3),i=n%3+r-8-3,u=1==(e>>n&1),t.set(o,i,u,!0),t.set(i,o,u,!0)}(E,a),function(t,n){const r=t.size;let e=-1,o=r-1,i=7,u=0;for(let c=r-1;c>0;c-=2)for(6===c&&c--;;){for(let r=0;r<2;r++)if(!t.isReserved(o,c-r)){let e=!1;u<n.length&&(e=1==(n[u]>>>i&1)),t.set(o,c-r,e),i--,-1===i&&(u++,i=7)}if(o+=e,o<0||r<=o){o-=e,e=-e;break}}}(E,v),isNaN(d)&&(d=u.getBestMask(E,y.bind(null,E,l))),u.applyMask(d,E),y(E,l,d),{modules:E,version:a,errorCorrectionLevel:l,maskPattern:d,segments:m}}return l.create=function(r,e){if(void 0===r||""===r)throw new Error("No input text");let o,i,c=n.M;return void 0!==e&&(c=n.from(e.errorCorrectionLevel,n.M),o=f.from(e.version),i=u.from(e.maskPattern),e.toSJISFunc&&t.setToSJISFunction(e.toSJISFunc)),x(r,o,c,i)},l}var at,lt,ht={},dt={};function wt(){return at||(at=1,function(t){function n(t){if("number"==typeof t&&(t=t.toString()),"string"!=typeof t)throw new Error("Color should be defined as hex string");let n=t.slice().replace("#","").split("");if(n.length<3||5===n.length||n.length>8)throw new Error("Invalid hex color: "+t);3!==n.length&&4!==n.length||(n=Array.prototype.concat.apply([],n.map((function(t){return[t,t]})))),6===n.length&&n.push("F","F");const r=parseInt(n.join(""),16);return{r:r>>24&255,g:r>>16&255,b:r>>8&255,a:255&r,hex:"#"+n.slice(0,6).join("")}}t.getOptions=function(t){t||(t={}),t.color||(t.color={});const r=t.width&&t.width>=21?t.width:void 0;return{width:r,scale:r?4:t.scale||4,margin:null==t.margin||t.margin<0?4:t.margin,color:{dark:n(t.color.dark||"#000000ff"),light:n(t.color.light||"#ffffffff")},type:t.type,rendererOpts:t.rendererOpts||{}}},t.getScale=function(t,n){return n.width&&n.width>=t+2*n.margin?n.width/(t+2*n.margin):n.scale},t.getImageWidth=function(n,r){const e=t.getScale(n,r);return Math.floor((n+2*r.margin)*e)},t.qrToImageData=function(n,r,e){const o=r.modules.size,i=r.modules.data,u=t.getScale(o,e),c=Math.floor((o+2*e.margin)*u),s=e.margin*u,f=[e.color.light,e.color.dark];for(let t=0;t<c;t++)for(let r=0;r<c;r++){let a=4*(t*c+r),l=e.color.light;t>=s&&r>=s&&t<c-s&&r<c-s&&(l=f[i[Math.floor((t-s)/u)*o+Math.floor((r-s)/u)]?1:0]),n[a++]=l.r,n[a++]=l.g,n[a++]=l.b,n[a]=l.a}}}(dt)),dt}var mt,pt,vt={};var gt=function(){if(pt)return s;pt=1;const t=f(),n=ft(),r=(lt||(lt=1,function(t){const n=wt();t.render=function(t,r,e){let o=e,i=r;void 0!==o||r&&r.getContext||(o=r,r=void 0),r||(i=function(){try{return document.createElement("canvas")}catch(t){throw new Error("You need to specify a canvas element")}}()),o=n.getOptions(o);const u=n.getImageWidth(t.modules.size,o),c=i.getContext("2d"),s=c.createImageData(u,u);return n.qrToImageData(s.data,t,o),function(t,n,r){t.clearRect(0,0,n.width,n.height),n.style||(n.style={}),n.height=r,n.width=r,n.style.height=r+"px",n.style.width=r+"px"}(c,i,u),c.putImageData(s,0,0),i},t.renderToDataURL=function(n,r,e){let o=e;return void 0!==o||r&&r.getContext||(o=r,r=void 0),o||(o={}),t.render(n,r,o).toDataURL(o.type||"image/png",(o.rendererOpts||{}).quality)}}(ht)),ht),e=function(){if(mt)return vt;mt=1;const t=wt();function n(t,n){const r=t.a/255,e=n+'="'+t.hex+'"';return r<1?e+" "+n+'-opacity="'+r.toFixed(2).slice(1)+'"':e}function r(t,n,r){let e=t+n;return void 0!==r&&(e+=" "+r),e}return vt.render=function(e,o,i){const u=t.getOptions(o),c=e.modules.size,s=e.modules.data,f=c+2*u.margin,a=u.color.light.a?"<path "+n(u.color.light,"fill")+' d="M0 0h'+f+"v"+f+'H0z"/>':"",l="<path "+n(u.color.dark,"stroke")+' d="'+function(t,n,e){let o="",i=0,u=!1,c=0;for(let s=0;s<t.length;s++){const f=Math.floor(s%n),a=Math.floor(s/n);f||u||(u=!0),t[s]?(c++,s>0&&f>0&&t[s-1]||(o+=u?r("M",f+e,.5+a+e):r("m",i,0),i=0,u=!1),f+1<n&&t[s+1]||(o+=r("h",c),c=0)):i++}return o}(s,c,u.margin)+'"/>',h='<svg xmlns="http://www.w3.org/2000/svg" '+(u.width?'width="'+u.width+'" height="'+u.width+'" ':"")+'viewBox="0 0 '+f+" "+f+'" shape-rendering="crispEdges">'+a+l+"</svg>\n";return"function"==typeof i&&i(null,h),h},vt}();function o(r,e,o,i,u){const c=[].slice.call(arguments,1),s=c.length,f="function"==typeof c[s-1];if(!f&&!t())throw new Error("Callback required as last argument");if(!f){if(s<1)throw new Error("Too few arguments provided");return 1===s?(o=e,e=i=void 0):2!==s||e.getContext||(i=o,o=e,e=void 0),new Promise((function(t,u){try{const u=n.create(o,i);t(r(u,e,i))}catch(t){u(t)}}))}if(s<2)throw new Error("Too few arguments provided");2===s?(u=o,o=e,e=i=void 0):3===s&&(e.getContext&&void 0===u?(u=i,i=void 0):(u=i,i=o,o=e,e=void 0));try{const t=n.create(o,i);u(null,r(t,e,i))}catch(t){u(t)}}return s.create=n.create,s.toCanvas=o.bind(null,r.render),s.toDataURL=o.bind(null,r.renderToDataURL),s.toString=o.bind(null,(function(t,n,r){return e.render(t,r)})),s}(),yt=i(gt);const Et=t(class extends n{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.qrSvg="",this.downloading=!1}async generateQr(){this.ticket?.barcode&&(this.qrSvg=await yt.toString(this.ticket.barcode,{type:"svg",margin:0,errorCorrectionLevel:"M"}))}async componentWillLoad(){await this.generateQr()}async download(){try{this.downloading=!0;const t=await o(),n=t.getOrdersManager?.();if(!n)throw new Error("Ticket downloads are not available");const r=await n.ticketPdf(this.orderId,this.ticket.id),e=URL.createObjectURL(r),i=document.createElement("a");i.href=e,i.download=`ticket-${this.ticket.id}.pdf`,document.body.appendChild(i),i.click(),i.remove(),URL.revokeObjectURL(e)}catch(t){console.error("[tl-ticket] download failed",t)}finally{this.downloading=!1}}render(){const t=this.ticket;if(!t)return null;const n="fully_redeemed"===t.admissionStatus,e=["cancelled","expired"].includes(t.status),o=n||e;return r("div",{class:"ticket"},r("div",{class:"qr-wrap"},r("div",{class:{qr:!0,inactive:o},innerHTML:this.qrSvg}),o&&r("span",{class:"stamp"},n?"Used":"Void")),r("p",{class:"name"},t.name),t.seatLabel&&r("p",{class:"meta"},"Seat ",t.seatLabel),t.holderName&&r("p",{class:"meta"},t.holderName),r("p",{class:"barcode"},t.barcode),r("button",{class:"download",disabled:this.downloading,onClick:()=>this.download()},this.downloading?"Preparing…":"Download PDF"))}static get watchers(){return{ticket:[{generateQr:0}]}}static get style(){return":host{display:block;font-family:var(--tl-font-family, system-ui, sans-serif)}.ticket{border:1px solid var(--tl-border, #e5e7eb);border-radius:var(--tl-radius-lg, 0.75rem);background:var(--tl-card, #ffffff);padding:var(--tl-spacing-5, 1.25rem);text-align:center}.qr-wrap{position:relative;width:160px;height:160px;margin:0 auto}.qr{width:160px;height:160px}.qr svg{width:100%;height:100%;display:block}.qr.inactive{opacity:0.3}.stamp{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);padding:0.25rem 0.5rem;border-radius:var(--tl-radius-sm, 0.25rem);background:rgba(17, 24, 39, 0.85);color:#ffffff;font-size:0.7rem;font-weight:700;text-transform:uppercase;letter-spacing:0.05em}.name{margin:1rem 0 0;font-weight:600;color:var(--tl-foreground, #111827)}.meta{margin:0.125rem 0 0;font-size:0.875rem;color:var(--tl-muted-foreground, #6b7280)}.barcode{margin:0.25rem 0 0;font-family:ui-monospace, monospace;font-size:0.625rem;color:var(--tl-muted-foreground, #9ca3af);word-break:break-all}.download{margin-top:0.75rem;padding:0.375rem 0.75rem;border:1px solid var(--tl-border, #e5e7eb);border-radius:var(--tl-radius-md, 0.5rem);background:transparent;color:var(--tl-foreground, #111827);font-size:0.875rem;font-weight:500;cursor:pointer}.download:hover{background:var(--tl-muted, #f3f4f6)}.download:disabled{opacity:0.5;cursor:default}"}},[1,"tl-ticket",{ticket:[16],orderId:[1,"order-id"],qrSvg:[32],downloading:[32]},void 0,{ticket:[{generateQr:0}]}]);function bt(){"undefined"!=typeof customElements&&["tl-ticket"].forEach((t=>{"tl-ticket"===t&&(customElements.get(e(t))||customElements.define(e(t),Et))}))}export{Et as T,bt as d}