@ticketlayer/elements 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/cjs/{index-BpfoKd9Q.js → index-I9CoYv3k.js} +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/money-BtmM2gt-.js +118 -0
- package/dist/cjs/{order-summary-ZMkJ5bez.js → order-summary-X3TlZxc2.js} +34 -0
- package/dist/cjs/ticketlayer-elements.cjs.js +2 -2
- package/dist/cjs/tl-buy-modal.cjs.entry.js +3 -3
- package/dist/cjs/tl-buy-tickets-button.cjs.entry.js +10 -7
- package/dist/cjs/tl-buy-tickets-wrapper.cjs.entry.js +2 -2
- package/dist/cjs/tl-cart-badge.cjs.entry.js +2 -2
- package/dist/cjs/tl-cart-drawer.cjs.entry.js +3 -3
- package/dist/cjs/tl-cart.cjs.entry.js +10 -4
- package/dist/cjs/tl-checkout-wrapper.cjs.entry.js +2 -2
- package/dist/cjs/tl-event-card.cjs.entry.js +4 -3
- package/dist/cjs/tl-event-list.cjs.entry.js +2 -2
- package/dist/cjs/tl-login.cjs.entry.js +4 -3
- package/dist/cjs/tl-my-orders.cjs.entry.js +4 -3
- package/dist/cjs/tl-occurrence-selector_2.cjs.entry.js +454 -122
- package/dist/cjs/tl-order-confirmation.cjs.entry.js +11 -8
- package/dist/cjs/tl-order-tickets_2.cjs.entry.js +3 -3
- package/dist/cjs/tl-promo-code.cjs.entry.js +4 -3
- package/dist/cjs/tl-seat-map.cjs.entry.js +2 -2
- package/dist/collection/components/tl-buy-modal/tl-buy-modal.css +12 -19
- package/dist/collection/components/tl-buy-modal/tl-buy-modal.js +1 -1
- package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.css +4 -4
- package/dist/collection/components/tl-buy-tickets-button/tl-buy-tickets-button.js +8 -5
- package/dist/collection/components/tl-buy-tickets-wrapper/tl-buy-tickets-wrapper.css +2 -2
- package/dist/collection/components/tl-cart/tl-cart.css +52 -51
- package/dist/collection/components/tl-cart/tl-cart.js +8 -2
- package/dist/collection/components/tl-cart-badge/tl-cart-badge.css +11 -11
- package/dist/collection/components/tl-cart-drawer/tl-cart-drawer.css +6 -6
- package/dist/collection/components/tl-cart-drawer/tl-cart-drawer.js +1 -1
- package/dist/collection/components/tl-checkout-wrapper/tl-checkout-wrapper.css +2 -2
- package/dist/collection/components/tl-event-card/tl-event-card.css +22 -22
- package/dist/collection/components/tl-event-list/tl-event-list.css +17 -17
- package/dist/collection/components/tl-login/tl-login.css +26 -26
- package/dist/collection/components/tl-my-orders/tl-my-orders.css +40 -40
- package/dist/collection/components/tl-occurrence-selector/tl-occurrence-selector.css +54 -65
- package/dist/collection/components/tl-order-confirmation/tl-order-confirmation.css +38 -38
- package/dist/collection/components/tl-order-confirmation/tl-order-confirmation.js +8 -6
- package/dist/collection/components/tl-order-tickets/tl-order-tickets.css +9 -9
- package/dist/collection/components/tl-promo-code/tl-promo-code.css +25 -25
- package/dist/collection/components/tl-seat-map/tl-seat-map.css +10 -10
- package/dist/collection/components/tl-ticket/tl-ticket.css +13 -13
- package/dist/collection/components/tl-ticket-selector/tl-ticket-selector.css +74 -49
- package/dist/collection/components/tl-ticket-selector/tl-ticket-selector.js +72 -126
- package/dist/collection/utils/cart-totals.js +9 -0
- package/dist/collection/utils/order-summary.js +36 -0
- package/dist/components/money.js +1 -0
- package/dist/components/order-summary.js +1 -1
- package/dist/components/tl-buy-modal.js +1 -1
- package/dist/components/tl-buy-tickets-button.js +1 -1
- package/dist/components/tl-buy-tickets-wrapper2.js +1 -1
- package/dist/components/tl-cart-badge.js +1 -1
- package/dist/components/tl-cart-drawer.js +1 -1
- package/dist/components/tl-cart2.js +1 -1
- package/dist/components/tl-checkout-wrapper2.js +1 -1
- package/dist/components/tl-event-card2.js +1 -1
- package/dist/components/tl-event-list.js +1 -1
- package/dist/components/tl-login2.js +1 -1
- package/dist/components/tl-my-orders.js +1 -1
- package/dist/components/tl-occurrence-selector2.js +1 -1
- package/dist/components/tl-order-confirmation.js +1 -1
- package/dist/components/tl-order-tickets2.js +1 -1
- package/dist/components/tl-promo-code.js +1 -1
- package/dist/components/tl-seat-map.js +1 -1
- package/dist/components/tl-ticket-selector2.js +1 -1
- package/dist/components/tl-ticket2.js +1 -1
- package/dist/elements.docs.json +4 -4
- package/dist/esm/{index-CNX8hZa8.js → index-OoYV1faY.js} +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/money-4ig0-WB6.js +112 -0
- package/dist/esm/{order-summary-BGekdjN9.js → order-summary-DiDtvfZM.js} +34 -1
- package/dist/esm/ticketlayer-elements.js +3 -3
- package/dist/esm/tl-buy-modal.entry.js +3 -3
- package/dist/esm/tl-buy-tickets-button.entry.js +10 -7
- package/dist/esm/tl-buy-tickets-wrapper.entry.js +2 -2
- package/dist/esm/tl-cart-badge.entry.js +2 -2
- package/dist/esm/tl-cart-drawer.entry.js +3 -3
- package/dist/esm/tl-cart.entry.js +10 -4
- package/dist/esm/tl-checkout-wrapper.entry.js +2 -2
- package/dist/esm/tl-event-card.entry.js +4 -3
- package/dist/esm/tl-event-list.entry.js +2 -2
- package/dist/esm/tl-login.entry.js +4 -3
- package/dist/esm/tl-my-orders.entry.js +4 -3
- package/dist/esm/tl-occurrence-selector_2.entry.js +455 -123
- package/dist/esm/tl-order-confirmation.entry.js +11 -8
- package/dist/esm/tl-order-tickets_2.entry.js +3 -3
- package/dist/esm/tl-promo-code.entry.js +4 -3
- package/dist/esm/tl-seat-map.entry.js +2 -2
- package/dist/ticketlayer-elements/index.esm.js +1 -1
- package/dist/ticketlayer-elements/p-0814420f.entry.js +1 -0
- package/dist/ticketlayer-elements/p-0acabc26.entry.js +1 -0
- package/dist/ticketlayer-elements/{p-9629029a.entry.js → p-109a3feb.entry.js} +1 -1
- package/dist/ticketlayer-elements/{p-e02079fa.entry.js → p-1a4ba71c.entry.js} +1 -1
- package/dist/ticketlayer-elements/p-318965c1.entry.js +1 -0
- package/dist/ticketlayer-elements/p-347c7fd1.entry.js +1 -0
- package/dist/ticketlayer-elements/p-3649c26d.entry.js +1 -0
- package/dist/ticketlayer-elements/p-40260cc9.entry.js +1 -0
- package/dist/ticketlayer-elements/p-4ig0-WB6.js +1 -0
- package/dist/ticketlayer-elements/p-55fd2f9f.entry.js +1 -0
- package/dist/ticketlayer-elements/p-62ee659b.entry.js +1 -0
- package/dist/ticketlayer-elements/p-7d4ecc2b.entry.js +1 -0
- package/dist/ticketlayer-elements/p-7f0abf95.entry.js +1 -0
- package/dist/ticketlayer-elements/p-BXpVGW51.js +1 -0
- package/dist/ticketlayer-elements/p-OoYV1faY.js +3 -0
- package/dist/ticketlayer-elements/p-a3c1b26c.entry.js +1 -0
- package/dist/ticketlayer-elements/{p-1c51cbc1.entry.js → p-ac264adc.entry.js} +1 -1
- package/dist/ticketlayer-elements/{p-895ba1f3.entry.js → p-aeb4c6fb.entry.js} +1 -1
- package/dist/ticketlayer-elements/{p-fa639d88.entry.js → p-ba62541f.entry.js} +1 -1
- package/dist/ticketlayer-elements/ticketlayer-elements.css +1 -1
- package/dist/ticketlayer-elements/ticketlayer-elements.esm.js +1 -1
- package/dist/types/components/tl-cart/tl-cart.d.ts +10 -0
- package/dist/types/components/tl-ticket-selector/tl-ticket-selector.d.ts +40 -29
- package/dist/types/components.d.ts +32 -0
- package/dist/types/utils/cart-totals.d.ts +10 -0
- package/dist/types/utils/order-summary.d.ts +34 -0
- package/elements.catalogue.json +91 -22
- package/package.json +12 -6
- package/dist/ticketlayer-elements/p-0b1d16f8.entry.js +0 -1
- package/dist/ticketlayer-elements/p-1471f6d8.entry.js +0 -1
- package/dist/ticketlayer-elements/p-5169f68b.entry.js +0 -1
- package/dist/ticketlayer-elements/p-8d5722e1.entry.js +0 -1
- package/dist/ticketlayer-elements/p-917d8e09.entry.js +0 -1
- package/dist/ticketlayer-elements/p-BGekdjN9.js +0 -1
- package/dist/ticketlayer-elements/p-CNX8hZa8.js +0 -3
- package/dist/ticketlayer-elements/p-a22714d0.entry.js +0 -1
- package/dist/ticketlayer-elements/p-bf73044b.entry.js +0 -1
- package/dist/ticketlayer-elements/p-e04ace15.entry.js +0 -1
- package/dist/ticketlayer-elements/p-e6fab1d5.entry.js +0 -1
- package/dist/ticketlayer-elements/p-f826b753.entry.js +0 -1
- package/dist/ticketlayer-elements/p-fbaca948.entry.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r,c as t,h as s}from"./p-OoYV1faY.js";import{w as e}from"./p-CqhvfyKV.js";import{i as o,e as a,t as i,o as n,f as l,a as d,s as c,b as h}from"./p-BXpVGW51.js";import"./p-4ig0-WB6.js";const p=class{constructor(s){r(this,s),this.tlOrderSelect=t(this,"tlOrderSelect"),this.tlError=t(this,"tlError"),this.emptyMessage="When you buy tickets they'll show up here, ready to view and download.",this.columns=2,this.orders=[],this.authenticated=!1,this.loading=!0,this.error=null,this.expandedId=null,this.sdk=null,this.unsubscribes=[]}async componentWillLoad(){if(this.sdk=await e().catch((()=>null)),!this.sdk)return this.loading=!1,void(this.error="Orders are not available right now");const r=this.sdk.getAuthManager?.();this.authenticated=!r||r.authenticated,this.unsubscribes.push(this.sdk.on("auth:changed",(()=>this.syncAuth()))),this.unsubscribes.push(this.sdk.on("session:changed",(()=>this.syncAuth()))),this.authenticated?await this.load():this.loading=!1}disconnectedCallback(){this.unsubscribes.forEach((r=>r())),this.unsubscribes=[]}syncAuth(){const r=this.sdk?.getAuthManager?.();if(!r)return;const t=this.authenticated;this.authenticated=r.authenticated,this.authenticated&&!t?this.load():!this.authenticated&&t&&(this.orders=[],this.expandedId=null)}async load(){if(this.sdk)try{this.loading=!0,this.error=null;const r=this.sdk.getOrdersManager?.();if(!r)throw new Error("Orders are not available");const t=await r.mine();this.orders=t??[],this.authenticated=!0}catch(r){o(r)?(this.authenticated=!1,this.orders=[]):(console.error("[tl-my-orders] Failed to load orders:",r),this.error=a(r,"Failed to load your orders"),this.tlError.emit({message:this.error}))}finally{this.loading=!1}}toggle(r){const t=this.expandedId!==r;this.expandedId=t?r:null,t&&this.tlOrderSelect.emit({orderId:r})}renderRow(r){const t=this.expandedId===r.id,e=i(r),o=c(r.status);return s("li",{class:{order:!0,expanded:t},key:r.id},s("button",{type:"button",class:"order-row","aria-expanded":t?"true":"false",onClick:()=>this.toggle(r.id)},s("span",{class:"order-main"},s("span",{class:"order-number"},"Order ",r.orderNumber),s("span",{class:"order-event"},n(r)??"Order"),s("span",{class:"order-meta"},r.createdAt&&s("span",null,l(r.createdAt)),s("span",null,e," ticket",1===e?"":"s"))),s("span",{class:"order-side"},s("span",{class:"order-total"},d(r.total,r.currency)),s("span",{class:`status status-${o}`},h(r.status)),s("svg",{class:"chevron",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","aria-hidden":"true"},s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 18l6-6-6-6"})))),t&&s("div",{class:"order-tickets"},s("tl-order-tickets",{orderId:r.id,columns:this.columns})))}render(){return this.loading?s("div",{class:"orders"},[0,1,2].map((r=>s("div",{class:"skeleton",key:r})))):this.authenticated?s("div",{class:"orders"},this.error?s("div",{class:"state error"},s("p",{class:"state-title"},"Could not load your orders"),s("p",{class:"state-text"},this.error)):0===this.orders.length?s("div",{class:"state empty"},s("svg",{class:"empty-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","aria-hidden":"true"},s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5",d:"M2 9a3 3 0 0 1 0 6v2a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-2a3 3 0 0 1 0-6V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2Z"}),s("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"1.5",d:"M13 5v2M13 17v2M13 11v2"})),s("p",{class:"state-title"},"No orders yet"),s("p",{class:"state-text"},this.emptyMessage)):s("ul",{class:"order-list"},this.orders.map((r=>this.renderRow(r))))):s("div",{class:"orders"},s("div",{class:"signin"},s("p",{class:"signin-title"},"Sign in to see your orders"),s("p",{class:"signin-text"},"Your tickets and order history live in your account.")),s("tl-login",null))}};p.style=":host{display:block;font-family:var(--tl-font-family);color:var(--tl-foreground)}.orders{display:flex;flex-direction:column;gap:var(--tl-spacing-4)}.order-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--tl-spacing-3)}.order{background:var(--tl-background);border:1px solid var(--tl-border);border-radius:var(--tl-radius-lg);overflow:hidden;transition:border-color 0.2s ease, box-shadow 0.2s ease}.order:hover,.order.expanded{border-color:var(--tl-primary);box-shadow:0 1px 3px rgba(0, 0, 0, 0.08)}.order-row{display:flex;align-items:center;justify-content:space-between;gap:var(--tl-spacing-4);width:100%;padding:var(--tl-spacing-4);font:inherit;color:inherit;text-align:left;background:none;border:none;cursor:pointer}.order-main{display:flex;flex-direction:column;gap:var(--tl-spacing-1);min-width:0}.order-number{font-size:0.75rem;font-weight:500;text-transform:uppercase;letter-spacing:0.05em;color:var(--tl-muted-foreground)}.order-event{font-size:1rem;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.order-meta{display:flex;flex-wrap:wrap;gap:var(--tl-spacing-3);font-size:0.8125rem;color:var(--tl-muted-foreground)}.order-side{display:flex;align-items:center;gap:var(--tl-spacing-3);flex-shrink:0}.order-total{font-weight:600}.status{padding:0.125rem 0.5rem;font-size:0.75rem;font-weight:500;border-radius:9999px;background:var(--tl-secondary);color:var(--tl-secondary-foreground)}.status-success{background:var(--tl-success);color:var(--tl-success-foreground)}.status-info{background:var(--tl-primary);color:var(--tl-primary-foreground)}.status-warning{background:var(--tl-warning);color:var(--tl-warning-foreground)}.status-error{background:var(--tl-error);color:var(--tl-error-foreground)}.chevron{width:1.125rem;height:1.125rem;color:var(--tl-muted-foreground);transition:transform 0.2s ease}.expanded .chevron{transform:rotate(90deg)}.order-tickets{padding:0 var(--tl-spacing-4) var(--tl-spacing-4);border-top:1px solid var(--tl-border);padding-top:var(--tl-spacing-4)}@media (max-width: 480px){.order-row{flex-direction:column;align-items:stretch}.order-side{justify-content:space-between}}.signin{text-align:center}.signin-title,.state-title{margin:0;font-size:1.125rem;font-weight:600}.signin-text,.state-text{margin:var(--tl-spacing-1) 0 0;font-size:0.875rem;color:var(--tl-muted-foreground)}.state{padding:var(--tl-spacing-8) var(--tl-spacing-4);text-align:center;background:var(--tl-background);border:1px solid var(--tl-border);border-radius:var(--tl-radius-lg)}.state.error .state-title{color:var(--tl-error)}.empty-icon{width:3rem;height:3rem;margin:0 auto var(--tl-spacing-3);color:var(--tl-primary)}.skeleton{height:5rem;background:var(--tl-secondary);border-radius:var(--tl-radius-lg);animation:pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite}@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.5}}";export{p as tl_my_orders}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e,c as t,h as a,H as r}from"./p-CNX8hZa8.js";import{w as i,g as o}from"./p-CqhvfyKV.js";const s=class{constructor(a){e(this,a),this.tlClose=t(this,"tlClose"),this.tlCheckout=t(this,"tlCheckout"),this.tlError=t(this,"tlError"),this.step="loading",this.eventName="",this.imageUrl="",this.venueLabel="",this.dateSummary="",this.selectedOccurrenceId=null,this.occurrenceCount=0,this.occurrenceLabel="",this.error=null,this.handleOccurrenceSelect=e=>{const t=e.detail.occurrence;this.selectedOccurrenceId=t.id,this.occurrenceLabel=this.labelFor(t),this.step="tickets"},this.handleAdded=()=>{this.step="done"},this.backToDates=()=>{this.selectedOccurrenceId=null,this.step="occurrence"},this.close=()=>this.tlClose.emit(),this.goCheckout=()=>this.tlCheckout.emit()}async componentWillLoad(){if(this.eventId)try{await i();const e=await o().getEventsManager().get(this.eventId);this.eventName=e?.name??"Tickets",this.imageUrl=e?.imageUrl||e?.heroImageUrl||"",this.venueLabel=[e?.venueName,e?.venueCity].filter(Boolean).join(", ");const t=e?.occurrences??[];this.occurrenceCount=t.length,this.dateSummary=this.summariseDates(t);const a=this.occurrenceId??(1===t.length?t[0]?.id:null);a?(this.selectedOccurrenceId=a,this.occurrenceLabel=this.labelFor(t.find((e=>e.id===a))),this.step="tickets"):this.step="occurrence"}catch(e){this.fail(e instanceof Error?e.message:"Could not load this event")}else this.fail("No event specified")}fail(e){this.error=e,this.step="error",this.tlError.emit({message:e})}summariseDates(e){const t=e.map((e=>e.startsAt)).filter((e=>!!e)).sort();if(0===t.length)return"";const a=e=>new Date(e).toLocaleDateString("en-GB",{day:"numeric",month:"short",year:"numeric"});if(1===t.length)return new Date(t[0]).toLocaleDateString("en-GB",{weekday:"short",day:"numeric",month:"short",year:"numeric"});const r=a(t[0]),i=a(t[t.length-1]);return`${r===i?r:`${r} - ${i}`} · ${t.length} dates`}labelFor(e){return e?.startsAt?new Date(e.startsAt).toLocaleString("en-GB",{weekday:"short",day:"numeric",month:"short",hour:"2-digit",minute:"2-digit"}):""}stepKicker(){switch(this.step){case"occurrence":return"Choose a date";case"tickets":return"Select tickets";case"done":return"Nice one";default:return"Tickets"}}render(){return a(r,{key:"1245e518c2b5232f4d9dba091cf808cd3867fbef"},a("div",{key:"4e770fccdd785444f1cc87df4adab5a5dc1bf58a",class:"overlay",onClick:e=>{e.target===e.currentTarget&&this.close()}},a("div",{key:"57b13dac690028aeebd6a601acfba07f00854c40",class:{panel:!0,"panel--wide":"occurrence"===this.step},role:"dialog","aria-modal":"true","aria-label":this.eventName},a("header",{key:"881e9cc70a0ca25947f272b9ebcb2e6d4b4268f2",class:"panel-header"},this.imageUrl&&a("div",{key:"753f7df1b5118dfacbbc6b89b4e5d7ba114f6cdf",class:"event-thumb",style:{backgroundImage:`url(${this.imageUrl})`}}),a("div",{key:"9aaa32d1add90fabd1b0ea0c100f198962f4e6a5",class:"titles"},a("span",{key:"538032bdf2338206ad763417386852ff97cc472f",class:"kicker"},this.stepKicker()),a("h2",{key:"71429804179e7fbbea1fa90a2937a065517092f5",class:"event-name"},this.eventName),this.venueLabel&&a("p",{key:"dd968b397deab890df3a4fbdff33226e82bd9660",class:"event-meta"},this.venueLabel),this.dateSummary&&a("p",{key:"f40e6049d09b06c9f599e7d14d6fbb43b39b22fd",class:"event-meta"},this.dateSummary)),a("button",{key:"dbe0908f8cd8544654b627921f68cc4961802b77",class:"close-btn","aria-label":"Close",onClick:this.close},a("svg",{key:"23a750830e6e16d28cbcd5025507d25848aaadf7",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},a("path",{key:"e81b8763a5c781f72c1ca8a2113482948e3ba8cc",d:"M6 6l12 12M18 6L6 18","stroke-linecap":"round"})))),a("div",{key:"da71e610f907cf53e78246d2065aaf526d5ceffd",class:"panel-body"},"loading"===this.step&&a("div",{key:"28cbb9a98c7b08fa8dcb9d8d5dfbf3bec93fe38d",class:"state-msg"},a("span",{key:"915c8de87cbdc7da1ccf0622ce6c0f02fccf2cad",class:"spinner"})," Loading…"),"error"===this.step&&a("div",{key:"5785578bfef6f1ee81d938d91ffd3ded975f8c12",class:"state-msg error"},this.error),"occurrence"===this.step&&a("tl-occurrence-selector",{key:"eeb853eab141c3c103015e82d221a140f6a3a109",eventId:this.eventId,onTlSelect:this.handleOccurrenceSelect}),"tickets"===this.step&&this.selectedOccurrenceId&&a("div",{key:"f608f592ba651eb431375433eb4ff9393863ade5",class:"tickets-step"},this.occurrenceCount>1&&a("button",{key:"84adfbdbeaceb2cf4238c6ffd09558b4499ca940",class:"back-link",onClick:this.backToDates},"← Change date"),this.occurrenceLabel&&a("p",{key:"0317e9194049608711e8c622142c3ad2c0a5dc12",class:"occ-label"},this.occurrenceLabel),a("tl-ticket-selector",{key:"27b1e05d9d92fb8d519375e2b27d4b5ea0a4890a",eventId:this.eventId,occurrenceId:this.selectedOccurrenceId,onTlAddToCart:this.handleAdded})),"done"===this.step&&a("div",{key:"0853088206988c66d489f8804df7899821d49e64",class:"done-step"},a("div",{key:"c2955b893c4dffaadcdfd27bee96ef2724a131a6",class:"done-mark"},"🎟️"),a("p",{key:"370c30dfcbc0c25b4794d984dd261a3a5779a9dc",class:"done-title"},"Added to your cart"),a("p",{key:"c462f3c9292740e2fd2c74b173484f80a5dc1a30",class:"done-sub"},"Held for you while you check out."),a("button",{key:"484991f79572e3213ad6413a1af87599880c3643",class:"primary-btn",onClick:this.goCheckout},"Go to checkout"),a("button",{key:"5b4ba5a472b794e8f5af0f131dad1c8c11b869f5",class:"ghost-btn",onClick:this.close},"Keep browsing")))),a("div",{key:"9acdd36744d363f41f0bed7938ecea33322362d1",class:"powered-by"},a("div",{key:"f45545a8fc625336618352f0c0e9e84a1babce96",class:"pb-links"},a("a",{key:"dd929b12419b8353d9a09ad242a9f351dfd699e2",href:"https://ticketlayer.com/privacy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy"),a("a",{key:"859be221bdc76602defaebdb89a997778cda6a91",href:"https://ticketlayer.com/report-abuse",target:"_blank",rel:"noopener noreferrer"},"Report Abuse")),a("a",{key:"d4e1f44b3b084160d2df8b9d15e075ddc5e05363",class:"pb-brand",href:"https://ticketlayer.com",target:"_blank",rel:"noopener noreferrer"},a("span",{key:"fe7fd86576a4e9772daa2c4c449da060f20fa143",class:"pb-pre"},"Powered by"),a("svg",{key:"19412bd9e5522f0af9f847fe8fda6aa0f0004a3a",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true"},a("path",{key:"c159efd1b8fce42b8c0fd5bac21792b4dc2728ce",d:"M4 7.5A1.5 1.5 0 0 1 5.5 6h13A1.5 1.5 0 0 1 20 7.5v2a2 2 0 0 0 0 5v2a1.5 1.5 0 0 1-1.5 1.5h-13A1.5 1.5 0 0 1 4 16.5v-2a2 2 0 0 0 0-5v-2Z",fill:"currentColor"}),a("path",{key:"283956eead27e5919301c30882da6eaa7b093a1a",d:"M13 7v10",stroke:"var(--tl-pb-perforation, var(--tl-background, #fff))","stroke-width":"1.2","stroke-dasharray":"1.5 1.8","stroke-linecap":"round"})),a("span",{key:"bc045fda144885737b88bf81b4f9000ec8d333be",class:"pb-word"},"Ticketlayer")))))}};s.style=":host{--_bg:var(--tl-background, #ffffff);--_fg:var(--tl-foreground, #111827);--_muted:var(--tl-muted, #f3f4f6);--_muted-fg:var(--tl-muted-foreground, #6b7280);--_border:var(--tl-border, #e5e7eb);--_primary:var(--tl-primary, #6366f1);--_primary-fg:var(--tl-primary-foreground, #ffffff);--_radius:var(--tl-radius-lg, var(--tl-radius, 0.75rem));--_font:var(--tl-font-family, system-ui, -apple-system, sans-serif);font-family:var(--_font)}.overlay{position:fixed;inset:0;z-index:2147483646;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:16px;background:rgba(8, 8, 16, 0.6);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:tl-fade 0.18s ease-out}.panel{width:100%;max-width:460px;max-height:86vh;display:flex;flex-direction:column;overflow:hidden;background:var(--_bg);color:var(--_fg);border:1px solid var(--_border);border-radius:var(--_radius);box-shadow:0 24px 64px rgba(0, 0, 0, 0.45);animation:tl-rise 0.22s cubic-bezier(0.16, 1, 0.3, 1);transition:max-width 0.25s cubic-bezier(0.16, 1, 0.3, 1)}.panel--wide{max-width:720px}.powered-by{--tl-pb-perforation:rgba(8, 8, 16, 0.6);width:100%;max-width:460px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 4px;font-size:12px;font-weight:500;color:rgba(255, 255, 255, 0.78);animation:tl-fade 0.3s ease-out}.powered-by a{color:inherit;text-decoration:none;opacity:0.85;transition:opacity 0.15s ease}.powered-by a:hover{opacity:1}.powered-by .pb-links{display:flex;gap:16px;align-items:center}.powered-by .pb-brand{display:inline-flex;align-items:center;gap:6px;opacity:0.92}.powered-by .pb-brand svg{display:block}.powered-by .pb-pre{opacity:0.7}.powered-by .pb-word{font-weight:700;letter-spacing:0.01em}.panel-header{display:flex;align-items:center;gap:14px;padding:16px 18px;border-bottom:1px solid var(--_border)}.event-thumb{flex:none;width:56px;height:56px;border-radius:12px;background-size:cover;background-position:center;background-color:var(--_muted);border:1px solid var(--_border)}.titles{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}.event-meta{margin:0;font-size:0.8rem;color:var(--_muted-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kicker{font-size:0.72rem;font-weight:600;letter-spacing:0.08em;text-transform:uppercase;color:var(--_primary)}.event-name{margin:0;font-size:1.18rem;font-weight:700;line-height:1.25;color:var(--_fg);overflow:hidden;text-overflow:ellipsis}.close-btn{flex:none;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:0;border-radius:999px;background:var(--_muted);color:var(--_muted-fg);cursor:pointer;transition:color 0.15s, background 0.15s}.close-btn:hover{color:var(--_fg)}.close-btn svg{width:16px;height:16px}.panel-body{padding:18px 22px 22px;overflow-y:auto}.state-msg{display:flex;align-items:center;justify-content:center;gap:10px;padding:40px 0;color:var(--_muted-fg)}.state-msg.error{color:#b91c1c}.spinner{width:16px;height:16px;border:2px solid var(--_border);border-top-color:var(--_primary);border-radius:999px;animation:tl-spin 0.7s linear infinite}.tickets-step{display:flex;flex-direction:column;gap:6px}.back-link{align-self:flex-start;padding:0;border:0;background:none;color:var(--_primary);font-size:0.85rem;font-weight:500;cursor:pointer}.back-link:hover{text-decoration:underline}.occ-label{margin:2px 0 8px;font-size:0.9rem;font-weight:600;color:var(--_fg)}.done-step{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:16px 0 4px}.done-mark{font-size:2.4rem;line-height:1;margin-bottom:6px}.done-title{margin:0;font-size:1.1rem;font-weight:700;color:var(--_fg)}.done-sub{margin:0 0 14px;font-size:0.9rem;color:var(--_muted-fg)}.primary-btn{width:100%;padding:13px;border:0;border-radius:var(--tl-radius-md, 0.5rem);background:var(--_primary);color:var(--_primary-fg);font-size:0.98rem;font-weight:600;cursor:pointer;transition:opacity 0.15s}.primary-btn:hover{opacity:0.9}.ghost-btn{width:100%;margin-top:8px;padding:12px;border:1px solid var(--_border);border-radius:var(--tl-radius-md, 0.5rem);background:transparent;color:var(--_fg);font-size:0.95rem;font-weight:500;cursor:pointer;transition:background 0.15s}.ghost-btn:hover{background:var(--_muted)}@keyframes tl-fade{from{opacity:0}}@keyframes tl-rise{from{opacity:0;transform:translateY(12px) scale(0.98)}}@keyframes tl-spin{to{transform:rotate(360deg)}}";export{s as tl_buy_modal}
|
|
1
|
+
import{r as e,c as t,h as a,H as r}from"./p-OoYV1faY.js";import{w as i,g as o}from"./p-CqhvfyKV.js";const s=class{constructor(a){e(this,a),this.tlClose=t(this,"tlClose"),this.tlCheckout=t(this,"tlCheckout"),this.tlError=t(this,"tlError"),this.step="loading",this.eventName="",this.imageUrl="",this.venueLabel="",this.dateSummary="",this.selectedOccurrenceId=null,this.occurrenceCount=0,this.occurrenceLabel="",this.error=null,this.handleOccurrenceSelect=e=>{const t=e.detail.occurrence;this.selectedOccurrenceId=t.id,this.occurrenceLabel=this.labelFor(t),this.step="tickets"},this.handleAdded=()=>{this.step="done"},this.backToDates=()=>{this.selectedOccurrenceId=null,this.step="occurrence"},this.close=()=>this.tlClose.emit(),this.goCheckout=()=>this.tlCheckout.emit()}async componentWillLoad(){if(this.eventId)try{await i();const e=await o().getEventsManager().get(this.eventId);this.eventName=e?.name??"Tickets",this.imageUrl=e?.imageUrl||e?.heroImageUrl||"",this.venueLabel=[e?.venueName,e?.venueCity].filter(Boolean).join(", ");const t=e?.occurrences??[];this.occurrenceCount=t.length,this.dateSummary=this.summariseDates(t);const a=this.occurrenceId??(1===t.length?t[0]?.id:null);a?(this.selectedOccurrenceId=a,this.occurrenceLabel=this.labelFor(t.find((e=>e.id===a))),this.step="tickets"):this.step="occurrence"}catch(e){this.fail(e instanceof Error?e.message:"Could not load this event")}else this.fail("No event specified")}fail(e){this.error=e,this.step="error",this.tlError.emit({message:e})}summariseDates(e){const t=e.map((e=>e.startsAt)).filter((e=>!!e)).sort();if(0===t.length)return"";const a=e=>new Date(e).toLocaleDateString("en-GB",{day:"numeric",month:"short",year:"numeric"});if(1===t.length)return new Date(t[0]).toLocaleDateString("en-GB",{weekday:"short",day:"numeric",month:"short",year:"numeric"});const r=a(t[0]),i=a(t[t.length-1]);return`${r===i?r:`${r} - ${i}`} · ${t.length} dates`}labelFor(e){return e?.startsAt?new Date(e.startsAt).toLocaleString("en-GB",{weekday:"short",day:"numeric",month:"short",hour:"2-digit",minute:"2-digit"}):""}stepKicker(){switch(this.step){case"occurrence":return"Choose a date";case"tickets":return"Select tickets";case"done":return"Nice one";default:return"Tickets"}}render(){return a(r,{key:"1245e518c2b5232f4d9dba091cf808cd3867fbef"},a("div",{key:"4e770fccdd785444f1cc87df4adab5a5dc1bf58a",class:"overlay",onClick:e=>{e.target===e.currentTarget&&this.close()}},a("div",{key:"57b13dac690028aeebd6a601acfba07f00854c40",class:{panel:!0,"panel--wide":"occurrence"===this.step},role:"dialog","aria-modal":"true","aria-label":this.eventName},a("header",{key:"881e9cc70a0ca25947f272b9ebcb2e6d4b4268f2",class:"panel-header"},this.imageUrl&&a("div",{key:"753f7df1b5118dfacbbc6b89b4e5d7ba114f6cdf",class:"event-thumb",style:{backgroundImage:`url(${this.imageUrl})`}}),a("div",{key:"9aaa32d1add90fabd1b0ea0c100f198962f4e6a5",class:"titles"},a("span",{key:"538032bdf2338206ad763417386852ff97cc472f",class:"kicker"},this.stepKicker()),a("h2",{key:"71429804179e7fbbea1fa90a2937a065517092f5",class:"event-name"},this.eventName),this.venueLabel&&a("p",{key:"dd968b397deab890df3a4fbdff33226e82bd9660",class:"event-meta"},this.venueLabel),this.dateSummary&&a("p",{key:"f40e6049d09b06c9f599e7d14d6fbb43b39b22fd",class:"event-meta"},this.dateSummary)),a("button",{key:"dbe0908f8cd8544654b627921f68cc4961802b77",class:"close-btn","aria-label":"Close",onClick:this.close},a("svg",{key:"23a750830e6e16d28cbcd5025507d25848aaadf7",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},a("path",{key:"e81b8763a5c781f72c1ca8a2113482948e3ba8cc",d:"M6 6l12 12M18 6L6 18","stroke-linecap":"round"})))),a("div",{key:"da71e610f907cf53e78246d2065aaf526d5ceffd",class:"panel-body"},"loading"===this.step&&a("div",{key:"28cbb9a98c7b08fa8dcb9d8d5dfbf3bec93fe38d",class:"state-msg"},a("span",{key:"915c8de87cbdc7da1ccf0622ce6c0f02fccf2cad",class:"spinner"})," Loading…"),"error"===this.step&&a("div",{key:"5785578bfef6f1ee81d938d91ffd3ded975f8c12",class:"state-msg error"},this.error),"occurrence"===this.step&&a("tl-occurrence-selector",{key:"eeb853eab141c3c103015e82d221a140f6a3a109",eventId:this.eventId,onTlSelect:this.handleOccurrenceSelect}),"tickets"===this.step&&this.selectedOccurrenceId&&a("div",{key:"f608f592ba651eb431375433eb4ff9393863ade5",class:"tickets-step"},this.occurrenceCount>1&&a("button",{key:"84adfbdbeaceb2cf4238c6ffd09558b4499ca940",class:"back-link",onClick:this.backToDates},"← Change date"),this.occurrenceLabel&&a("p",{key:"0317e9194049608711e8c622142c3ad2c0a5dc12",class:"occ-label"},this.occurrenceLabel),a("tl-ticket-selector",{key:"27b1e05d9d92fb8d519375e2b27d4b5ea0a4890a",eventId:this.eventId,occurrenceId:this.selectedOccurrenceId,onTlAddToCart:this.handleAdded})),"done"===this.step&&a("div",{key:"0853088206988c66d489f8804df7899821d49e64",class:"done-step"},a("div",{key:"c2955b893c4dffaadcdfd27bee96ef2724a131a6",class:"done-mark"},"🎟️"),a("p",{key:"370c30dfcbc0c25b4794d984dd261a3a5779a9dc",class:"done-title"},"Added to your cart"),a("p",{key:"c462f3c9292740e2fd2c74b173484f80a5dc1a30",class:"done-sub"},"Held for you while you check out."),a("button",{key:"484991f79572e3213ad6413a1af87599880c3643",class:"primary-btn",onClick:this.goCheckout},"Go to checkout"),a("button",{key:"5b4ba5a472b794e8f5af0f131dad1c8c11b869f5",class:"ghost-btn",onClick:this.close},"Keep browsing")))),a("div",{key:"9acdd36744d363f41f0bed7938ecea33322362d1",class:"powered-by"},a("div",{key:"f45545a8fc625336618352f0c0e9e84a1babce96",class:"pb-links"},a("a",{key:"dd929b12419b8353d9a09ad242a9f351dfd699e2",href:"https://ticketlayer.com/privacy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy"),a("a",{key:"859be221bdc76602defaebdb89a997778cda6a91",href:"https://ticketlayer.com/report-abuse",target:"_blank",rel:"noopener noreferrer"},"Report Abuse")),a("a",{key:"d4e1f44b3b084160d2df8b9d15e075ddc5e05363",class:"pb-brand",href:"https://ticketlayer.com",target:"_blank",rel:"noopener noreferrer"},a("span",{key:"fe7fd86576a4e9772daa2c4c449da060f20fa143",class:"pb-pre"},"Powered by"),a("svg",{key:"19412bd9e5522f0af9f847fe8fda6aa0f0004a3a",width:"14",height:"14",viewBox:"0 0 50 50",fill:"none","aria-hidden":"true"},a("g",{key:"8e82f14ab1e8094a210db95b1310ce6c0feef446",transform:"matrix(0.0129 0 0 -0.0129 25.4752 25.4752)"},a("path",{key:"b50b04cfc07c4e55fcf5ce92967f69b99d34dd34",fill:"currentColor",transform:"translate(-1781.5, -1759.4003)",d:"M 41 2973 c 1 -285 5 -734 9 -998 c 7 -444 9 -488 30 -580 c 81 -364 235 -634 512 -900 c 135 -130 263 -220 423 -299 c 156 -77 249 -109 409 -143 c 110 -23 142 -25 354 -24 c 230 1 310 8 427 37 c 241 60 453 162 640 309 c 82 64 252 234 317 315 c 210 264 340 604 355 926 l 6 121 l -69 6 c -86 8 -706 9 -755 1 l -36 -6 l -21 -125 c -34 -191 -98 -317 -236 -462 c -111 -115 -249 -198 -396 -238 c -98 -27 -356 -24 -463 5 c -100 27 -183 69 -273 137 c -226 173 -353 409 -354 660 c 0 44 -5 120 -10 169 c -6 49 -8 91 -6 94 c 3 3 65 -22 138 -55 c 140 -64 251 -103 358 -127 c 71 -17 295 -46 347 -46 l 33 0 l 0 434 l 0 434 l -67 7 c -147 14 -269 56 -393 133 c -222 139 -378 393 -397 648 l -6 71 l -75 7 c -41 3 -239 6 -439 6 l -363 0 l 1 -517 z"}))),a("span",{key:"2623449abd22f36f5af80d5605d3b274a4c214c4",class:"pb-word"},"ticketlayer")))))}};s.style=":host{--_bg:var(--tl-background);--_fg:var(--tl-foreground);--_muted:var(--tl-muted);--_muted-fg:var(--tl-muted-foreground);--_border:var(--tl-border);--_primary:var(--tl-primary);--_primary-fg:var(--tl-primary-foreground);--_radius:var(--tl-radius-lg);--_font:var(--tl-font-family);font-family:var(--_font)}.overlay{position:fixed;inset:0;z-index:2147483646;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:16px;background:rgba(8, 8, 16, 0.6);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);animation:tl-fade 0.18s ease-out}.panel{width:100%;max-width:460px;max-height:86vh;display:flex;flex-direction:column;overflow:hidden;background:var(--_bg);color:var(--_fg);border:1px solid var(--_border);border-radius:var(--_radius);box-shadow:0 24px 64px rgba(0, 0, 0, 0.45);animation:tl-rise 0.22s cubic-bezier(0.16, 1, 0.3, 1);transition:max-width 0.25s cubic-bezier(0.16, 1, 0.3, 1)}.panel--wide{max-width:720px}.powered-by{width:100%;max-width:460px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 4px;font-size:12px;font-weight:500;color:rgba(255, 255, 255, 0.78);animation:tl-fade 0.3s ease-out}.powered-by a{color:inherit;text-decoration:none;opacity:0.85;transition:opacity 0.15s ease}.powered-by a:hover{opacity:1}.powered-by .pb-links{display:flex;gap:16px;align-items:center}.powered-by .pb-brand{display:inline-flex;align-items:center;gap:6px;opacity:0.92}.powered-by .pb-brand svg{display:block}.powered-by .pb-pre{opacity:0.7}.powered-by .pb-word{font-weight:700;letter-spacing:0.01em}.panel-header{display:flex;align-items:center;gap:14px;padding:16px 18px;border-bottom:1px solid var(--_border)}.event-thumb{flex:none;width:56px;height:56px;border-radius:12px;background-size:cover;background-position:center;background-color:var(--_muted);border:1px solid var(--_border)}.titles{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}.event-meta{margin:0;font-size:0.8rem;color:var(--_muted-fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kicker{font-size:0.72rem;font-weight:600;letter-spacing:0.08em;text-transform:uppercase;color:var(--_primary)}.event-name{margin:0;font-size:1.18rem;font-weight:700;line-height:1.25;color:var(--_fg);overflow:hidden;text-overflow:ellipsis}.close-btn{flex:none;display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border:0;border-radius:999px;background:var(--_muted);color:var(--_muted-fg);cursor:pointer;transition:color 0.15s, background 0.15s}.close-btn:hover{color:var(--_fg)}.close-btn svg{width:16px;height:16px}.panel-body{padding:18px 22px 22px;overflow-y:auto}.state-msg{display:flex;align-items:center;justify-content:center;gap:10px;padding:40px 0;color:var(--_muted-fg)}.state-msg.error{color:#b91c1c}.spinner{width:16px;height:16px;border:2px solid var(--_border);border-top-color:var(--_primary);border-radius:999px;animation:tl-spin 0.7s linear infinite}.tickets-step{display:flex;flex-direction:column;gap:6px}.back-link{align-self:flex-start;padding:0;border:0;background:none;color:var(--_primary);font-size:0.85rem;font-weight:500;cursor:pointer}.back-link:hover{text-decoration:underline}.occ-label{margin:2px 0 8px;font-size:0.9rem;font-weight:600;color:var(--_fg)}.done-step{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:16px 0 4px}.done-mark{font-size:2.4rem;line-height:1;margin-bottom:6px}.done-title{margin:0;font-size:1.1rem;font-weight:700;color:var(--_fg)}.done-sub{margin:0 0 14px;font-size:0.9rem;color:var(--_muted-fg)}.primary-btn{width:100%;padding:13px;border:0;border-radius:var(--tl-radius-md);background:var(--_primary);color:var(--_primary-fg);font-size:0.98rem;font-weight:600;cursor:pointer;transition:opacity 0.15s}.primary-btn:hover{opacity:0.9}.ghost-btn{width:100%;margin-top:8px;padding:12px;border:1px solid var(--_border);border-radius:var(--tl-radius-md);background:transparent;color:var(--_fg);font-size:0.95rem;font-weight:500;cursor:pointer;transition:background 0.15s}.ghost-btn:hover{background:var(--_muted)}@keyframes tl-fade{from{opacity:0}}@keyframes tl-rise{from{opacity:0;transform:translateY(12px) scale(0.98)}}@keyframes tl-spin{to{transform:rotate(360deg)}}";export{s as tl_buy_modal}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as t,c as e,h as s,H as i,a as r}from"./p-
|
|
1
|
+
import{r as t,c as e,h as s,H as i,a as r}from"./p-OoYV1faY.js";import{h as a,g as l}from"./p-CqhvfyKV.js";const o=class{constructor(s){t(this,s),this.tlComplete=e(this,"tl-complete"),this.tlError=e(this,"tl-error"),this.tlClose=e(this,"tl-close"),this.disabled=!1,this.handleClick=()=>{if(!this.disabled)return a()?void l().event(this.eventId).openModal({occurrenceId:this.occurrenceId,onComplete:t=>{this.tlComplete.emit(t)},onError:t=>{this.tlError.emit({message:t.message})},onClose:()=>{this.tlClose.emit()}}):(console.error("[tl-buy-tickets-wrapper] SDK not initialized. Call setSDK(ticketlayer) first."),void this.tlError.emit({message:"SDK not initialized"}))},this.handleKeyDown=t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),this.handleClick())}}render(){return s(i,{key:"d6ef81ac9bc1a1194eda1603cbb2a75b355a212e",class:{"tl-buy-tickets-wrapper":!0,"tl-buy-tickets-wrapper--disabled":this.disabled},onClick:this.handleClick,onKeyDown:this.handleKeyDown,role:"button",tabindex:this.disabled?-1:0,"aria-disabled":this.disabled?"true":null},s("slot",{key:"faef5aaad20deaf5e442d688c69105e45f9ee26f"}))}get el(){return r(this)}};o.style="tl-buy-tickets-wrapper,.tl-buy-tickets-wrapper{display:inline-block;cursor:pointer}tl-buy-tickets-wrapper:focus,.tl-buy-tickets-wrapper:focus{outline:2px solid var(--tl-ring);outline-offset:2px;border-radius:var(--tl-radius-sm)}tl-buy-tickets-wrapper[disabled],tl-buy-tickets-wrapper.tl-buy-tickets-wrapper--disabled,.tl-buy-tickets-wrapper--disabled{cursor:not-allowed;opacity:0.5}";export{o as tl_buy_tickets_wrapper}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as t,c as i,h as e}from"./p-
|
|
1
|
+
import{r as t,c as i,h as e}from"./p-OoYV1faY.js";import{w as s}from"./p-CqhvfyKV.js";const n="tl_cart_count",o=class{constructor(e){t(this,e),this.tlClick=i(this,"tlClick"),this.showEmpty=!1,this.size="md",this.badgeOnly=!1,this.itemCount=0,this.handleClick=()=>{this.tlClick.emit({itemCount:this.itemCount})}}componentWillLoad(){this.itemCount=this.getPersistedCartCount()}componentDidLoad(){this.subscribeToCartUpdates()}disconnectedCallback(){this.unsubscribe&&this.unsubscribe()}getPersistedCartCount(){if("undefined"==typeof window)return 0;try{const t=localStorage.getItem(n);return t&&parseInt(t,10)||0}catch{return 0}}persistCartCount(t){if("undefined"!=typeof window)try{localStorage.setItem(n,t.toString())}catch{}}async subscribeToCartUpdates(){const t=await s().catch((()=>null));if(!t)return;const i=t.getCartManager?.();i&&(this.unsubscribe=i.on?.("cart:updated",(t=>{const i=t?.itemCount||0;console.log("[tl-cart-badge] Cart updated:",i),this.itemCount=i,this.persistCartCount(i)})),i.get?.().then((t=>{const i=t?.itemCount||0;this.itemCount=i,this.persistCartCount(i)})).catch((()=>{})))}renderIcon(){return this.icon?e("span",{class:"icon-text"},this.icon):e("svg",{class:"icon-svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"}))}render(){const t=this.itemCount>0||this.showEmpty,i=this.itemCount>99?"99+":this.itemCount.toString();return this.badgeOnly?0===this.itemCount?null:e("span",{class:`badge-only size-${this.size}`},i):e("button",{class:`cart-badge size-${this.size}`,onClick:this.handleClick,"aria-label":`Cart with ${this.itemCount} items`},this.renderIcon(),t&&this.itemCount>0&&e("span",{class:"badge-count"},i))}};o.style=":host{display:inline-block}.cart-badge{position:relative;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:none;cursor:pointer;padding:var(--tl-spacing-2);border-radius:var(--tl-radius-md);color:var(--tl-color-foreground);transition:background-color 0.2s, transform 0.15s}.cart-badge:hover{background-color:var(--tl-color-muted)}.cart-badge:active{transform:scale(0.95)}.cart-badge:focus-visible{outline:2px solid var(--tl-color-primary);outline-offset:2px}.size-sm{padding:var(--tl-spacing-1)}.size-sm .icon-svg,.size-sm .icon-text{width:18px;height:18px;font-size:18px}.size-md .icon-svg,.size-md .icon-text{width:24px;height:24px;font-size:24px}.size-lg{padding:var(--tl-spacing-3)}.size-lg .icon-svg,.size-lg .icon-text{width:32px;height:32px;font-size:32px}.icon-svg{width:24px;height:24px;stroke-width:2}.icon-text{line-height:1}.badge-count{position:absolute;top:0;right:0;transform:translate(30%, -30%);min-width:18px;height:18px;padding:0 5px;border-radius:9px;background-color:var(--tl-color-primary);color:var(--tl-color-primary-foreground);font-size:11px;font-weight:600;font-family:var(--tl-font-family);display:flex;align-items:center;justify-content:center;line-height:1;box-shadow:0 1px 3px rgba(0, 0, 0, 0.2)}.size-sm .badge-count{min-width:16px;height:16px;font-size:10px;padding:0 4px}.size-lg .badge-count{min-width:22px;height:22px;font-size:13px;padding:0 6px}.badge-only{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:10px;background-color:rgba(255, 255, 255, 0.3);color:inherit;font-size:12px;font-weight:600;font-family:var(--tl-font-family);line-height:1}.badge-only.size-sm{min-width:18px;height:18px;font-size:11px;padding:0 5px}.badge-only.size-lg{min-width:22px;height:22px;font-size:13px;padding:0 7px}";export{o as tl_cart_badge}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--tl-
|
|
1
|
+
:root{--tl-primary:#6366f1;--tl-color-primary:var(--tl-primary);--tl-primary-foreground:#ffffff;--tl-color-primary-foreground:var(--tl-primary-foreground);--tl-secondary:#f3f4f6;--tl-color-secondary:var(--tl-secondary);--tl-secondary-foreground:#111827;--tl-color-secondary-foreground:var(--tl-secondary-foreground);--tl-accent:#ec4899;--tl-color-accent:var(--tl-accent);--tl-accent-foreground:#ffffff;--tl-color-accent-foreground:var(--tl-accent-foreground);--tl-background:#ffffff;--tl-color-background:var(--tl-background);--tl-foreground:#111827;--tl-color-foreground:var(--tl-foreground);--tl-card:#ffffff;--tl-color-card:var(--tl-card);--tl-muted:#f9fafb;--tl-color-muted:var(--tl-muted);--tl-muted-foreground:#6b7280;--tl-color-muted-foreground:var(--tl-muted-foreground);--tl-border:#e5e7eb;--tl-color-border:var(--tl-border);--tl-border-hover:#9ca3af;--tl-color-border-hover:var(--tl-border-hover);--tl-input:#e5e7eb;--tl-color-input:var(--tl-input);--tl-ring:#6366f1;--tl-color-ring:var(--tl-ring);--tl-success:#10b981;--tl-color-success:var(--tl-success);--tl-success-foreground:#ffffff;--tl-color-success-foreground:var(--tl-success-foreground);--tl-warning:#f59e0b;--tl-color-warning:var(--tl-warning);--tl-warning-foreground:#ffffff;--tl-color-warning-foreground:var(--tl-warning-foreground);--tl-warning-bg:#fef3c7;--tl-color-warning-bg:var(--tl-warning-bg);--tl-error:#ef4444;--tl-color-error:var(--tl-error);--tl-destructive:var(--tl-error);--tl-color-destructive:var(--tl-error);--tl-error-foreground:#ffffff;--tl-color-error-foreground:var(--tl-error-foreground);--tl-destructive-foreground:var(--tl-error-foreground);--tl-color-destructive-foreground:var(--tl-error-foreground);--tl-error-bg:#fee2e2;--tl-color-error-bg:var(--tl-error-bg);--tl-destructive-bg:var(--tl-error-bg);--tl-color-destructive-bg:var(--tl-error-bg);--tl-font-family:system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;--tl-font-family-mono:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;--tl-font-size-base:16px;--tl-base-size:var(--tl-font-size-base);--tl-font-scale:1.25;--tl-radius-none:0px;--tl-radius-sm:0.25rem;--tl-radius-md:0.5rem;--tl-radius:var(--tl-radius-md);--tl-radius-lg:0.75rem;--tl-radius-full:9999px;--tl-spacing-1:0.25rem;--tl-spacing-2:0.5rem;--tl-spacing-3:0.75rem;--tl-spacing-4:1rem;--tl-spacing-5:1.25rem;--tl-spacing-6:1.5rem;--tl-spacing-8:2rem;--tl-duration-fast:120ms;--tl-duration-normal:200ms;--tl-duration-slow:320ms;--tl-easing-standard:cubic-bezier(0.2, 0, 0, 1);--tl-easing-emphasised:cubic-bezier(0.3, 0, 0, 1)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{p as e,g as r,b as t}from"./p-
|
|
1
|
+
import{p as e,g as r,b as t}from"./p-OoYV1faY.js";export{s as setNonce}from"./p-OoYV1faY.js";(()=>{const r=import.meta.url,t={};return""!==r&&(t.resourcesUrl=new URL(".",r).href),e(t)})().then((async e=>(await r(),t([["p-a3c1b26c",[[1,"tl-my-orders",{emptyMessage:[1,"empty-message"],columns:[2],orders:[32],authenticated:[32],loading:[32],error:[32],expandedId:[32]}]]],["p-ac264adc",[[1,"tl-buy-modal",{eventId:[1,"event-id"],occurrenceId:[1,"occurrence-id"],step:[32],eventName:[32],imageUrl:[32],venueLabel:[32],dateSummary:[32],selectedOccurrenceId:[32],occurrenceCount:[32],occurrenceLabel:[32],error:[32]}]]],["p-0acabc26",[[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]},null,{orderId:[{watchOrderId:0}]}]]],["p-7d4ecc2b",[[1,"tl-cart-drawer",{side:[1],heading:[1],open:[1028],visible:[32]},null,{open:[{onOpenProp:0}]}]]],["p-318965c1",[[1,"tl-event-list",{limit:[2],category:[1],columns:[2],events:[32],loading:[32],error:[32]},null,{limit:[{watchFiltersChange:0}],category:[{watchFiltersChange:0}]}]]],["p-55fd2f9f",[[1,"tl-buy-tickets-button",{eventId:[1,"event-id"],occurrenceId:[1,"occurrence-id"],state:[1],label:[1],variant:[1],size:[1],fullWidth:[4,"full-width"],price:[2],currency:[1],pricePrefix:[1,"price-prefix"],disabled:[4],isHovered:[32]}]]],["p-aeb4c6fb",[[260,"tl-buy-tickets-wrapper",{eventId:[1,"event-id"],occurrenceId:[1,"occurrence-id"],disabled:[4]}]]],["p-ba62541f",[[1,"tl-cart-badge",{showEmpty:[4,"show-empty"],icon:[1],size:[1],badgeOnly:[4,"badge-only"],itemCount:[32]}]]],["p-1a4ba71c",[[260,"tl-checkout-wrapper",{disabled:[4]}]]],["p-3649c26d",[[1,"tl-promo-code",{placeholder:[1],buttonLabel:[1,"button-label"],code:[32],applying:[32],applied:[32],error:[32]}]]],["p-109a3feb",[[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]},null,{occurrenceId:[{watchOccurrenceId:0}]}]]],["p-347c7fd1",[[1,"tl-cart",{showCheckoutButton:[4,"show-checkout-button"],checkoutLabel:[1,"checkout-label"],showRemoveButtons:[4,"show-remove-buttons"],compact:[4],cart:[32],loading:[32],error:[32],removingItemId:[32]}]]],["p-7f0abf95",[[1,"tl-event-card",{event:[16],eventId:[1,"event-id"],loadedEvent:[32],loading:[32],error:[32]},null,{eventId:[{watchEventId:0}]}]]],["p-0814420f",[[1,"tl-login",{heading:[1],allowCodeEntry:[4,"allow-code-entry"],phase:[32],email:[32],code:[32],busy:[32],error:[32],notice:[32],customer:[32]}]]],["p-62ee659b",[[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]},null,{eventId:[{onEventIdChange:0}]}],[1,"tl-ticket-selector",{eventId:[1,"event-id"],occurrenceId:[1,"occurrence-id"],showButton:[4,"show-button"],buttonLabel:[1,"button-label"],view:[32]},null,{eventId:[{watchPropsChange:0}],occurrenceId:[{watchPropsChange:0}],showButton:[{syncProps:0}],buttonLabel:[{syncProps:0}]}]]],["p-40260cc9",[[1,"tl-order-tickets",{orderId:[1,"order-id"],columns:[2],tickets:[32],loading:[32],error:[32],issuing:[32]},null,{orderId:[{watchOrder:0}]}],[1,"tl-ticket",{ticket:[16],orderId:[1,"order-id"],qrSvg:[32],downloading:[32]},null,{ticket:[{generateQr:0}]}]]]],e))));
|
|
@@ -13,10 +13,20 @@ export interface TlCartItem {
|
|
|
13
13
|
export interface TlCartData {
|
|
14
14
|
items: TlCartItem[];
|
|
15
15
|
subtotal: number;
|
|
16
|
+
/** Booking fee, minor units. 0 when the surface reports none. */
|
|
16
17
|
fees: number;
|
|
18
|
+
/** Discount as a positive magnitude, minor units. */
|
|
19
|
+
discount?: number;
|
|
17
20
|
total: number;
|
|
18
21
|
currency: string;
|
|
19
22
|
itemCount: number;
|
|
23
|
+
/** Whether the response expressed a fee at all (see utils/cart-totals). */
|
|
24
|
+
hasFees?: boolean;
|
|
25
|
+
/** The channel fee profile's label, when the response carries one. */
|
|
26
|
+
feeLabel?: string | null;
|
|
27
|
+
itemsSubtotal?: number;
|
|
28
|
+
totalFees?: number;
|
|
29
|
+
totalDiscounts?: number;
|
|
20
30
|
}
|
|
21
31
|
export declare class TlCart {
|
|
22
32
|
/**
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
import { EventEmitter } from '../../stencil-public-runtime';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
export interface AddToCartItem {
|
|
16
|
-
ticketTypeId: string;
|
|
17
|
-
quantity: number;
|
|
18
|
-
}
|
|
2
|
+
import { type AddToCartItem as CoreAddToCartItem, type TicketSelectorDerived, type TicketSelectorProps, type TicketSelectorState, type TicketSelectorStatus, type TlFeeQuote, type TlTicketType as CoreTlTicketType } from '@ticketlayer/elements-core';
|
|
3
|
+
export type AddToCartItem = CoreAddToCartItem;
|
|
4
|
+
export type TlTicketType = CoreTlTicketType;
|
|
5
|
+
/**
|
|
6
|
+
* The web harness for `ticketSelectorCore`.
|
|
7
|
+
*
|
|
8
|
+
* It renders and it forwards: every decision, every string and every sum is in
|
|
9
|
+
* `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
|
|
10
|
+
* Stencil surface a host writes HTML against - the tag, the attributes, the
|
|
11
|
+
* three `tl*` events - plus the one thing that is genuinely web: finding the
|
|
12
|
+
* client the page published on `window.Ticketlayer`.
|
|
13
|
+
*/
|
|
19
14
|
export declare class TlTicketSelector {
|
|
20
15
|
/**
|
|
21
16
|
* Event ID
|
|
@@ -33,12 +28,6 @@ export declare class TlTicketSelector {
|
|
|
33
28
|
* Button label
|
|
34
29
|
*/
|
|
35
30
|
buttonLabel: string;
|
|
36
|
-
ticketTypes: TlTicketType[];
|
|
37
|
-
quantities: Record<string, number>;
|
|
38
|
-
loading: boolean;
|
|
39
|
-
error: string | null;
|
|
40
|
-
adding: boolean;
|
|
41
|
-
addSuccess: boolean;
|
|
42
31
|
/**
|
|
43
32
|
* Emitted when items are added to cart
|
|
44
33
|
*/
|
|
@@ -59,18 +48,40 @@ export declare class TlTicketSelector {
|
|
|
59
48
|
tlError: EventEmitter<{
|
|
60
49
|
message: string;
|
|
61
50
|
}>;
|
|
51
|
+
private element;
|
|
52
|
+
private unsubscribe?;
|
|
53
|
+
/** The core's whole view. Assigning it is what makes Stencil re-render. */
|
|
54
|
+
view: import("@ticketlayer/elements-core").ElementView<TicketSelectorProps, TicketSelectorState, TicketSelectorDerived, TicketSelectorStatus, {
|
|
55
|
+
selectTickets: string;
|
|
56
|
+
adding: string;
|
|
57
|
+
added: string;
|
|
58
|
+
limited: string;
|
|
59
|
+
soldOut: string;
|
|
60
|
+
ticketsRow: string;
|
|
61
|
+
totalRow: string;
|
|
62
|
+
decrease: string;
|
|
63
|
+
increase: string;
|
|
64
|
+
loadFailed: string;
|
|
65
|
+
addFailed: string;
|
|
66
|
+
noClient: string;
|
|
67
|
+
}>;
|
|
68
|
+
/**
|
|
69
|
+
* The fee the surface has quoted for this selection. Core state, exposed here
|
|
70
|
+
* because it is set from outside the element and not from an attribute: there
|
|
71
|
+
* is no quote operation on the buyer-facing surface yet, so it stays null and
|
|
72
|
+
* no fee row is rendered.
|
|
73
|
+
*/
|
|
74
|
+
get feeQuote(): TlFeeQuote | null;
|
|
75
|
+
set feeQuote(quote: TlFeeQuote | null);
|
|
62
76
|
watchPropsChange(): void;
|
|
77
|
+
syncProps(): void;
|
|
63
78
|
componentWillLoad(): Promise<void>;
|
|
79
|
+
disconnectedCallback(): void;
|
|
64
80
|
/**
|
|
65
81
|
* Wait for SDK to be ready, then load ticket types
|
|
66
82
|
*/
|
|
67
83
|
private waitForSDKAndLoad;
|
|
68
|
-
private
|
|
69
|
-
private handleQuantityChange;
|
|
70
|
-
private calculateTotal;
|
|
71
|
-
private getTotalItems;
|
|
72
|
-
private handleAddToCart;
|
|
73
|
-
private formatPrice;
|
|
84
|
+
private forward;
|
|
74
85
|
private renderSkeleton;
|
|
75
86
|
private renderError;
|
|
76
87
|
private renderTicketRow;
|
|
@@ -436,6 +436,14 @@ export namespace Components {
|
|
|
436
436
|
*/
|
|
437
437
|
"ticket": TlTicketData;
|
|
438
438
|
}
|
|
439
|
+
/**
|
|
440
|
+
* The web harness for `ticketSelectorCore`.
|
|
441
|
+
* It renders and it forwards: every decision, every string and every sum is in
|
|
442
|
+
* `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
|
|
443
|
+
* Stencil surface a host writes HTML against - the tag, the attributes, the
|
|
444
|
+
* three `tl*` events - plus the one thing that is genuinely web: finding the
|
|
445
|
+
* client the page published on `window.Ticketlayer`.
|
|
446
|
+
*/
|
|
439
447
|
interface TlTicketSelector {
|
|
440
448
|
/**
|
|
441
449
|
* Button label
|
|
@@ -932,6 +940,14 @@ declare global {
|
|
|
932
940
|
"tlQuantityChange": { ticketTypeId: string; quantity: number; total: number };
|
|
933
941
|
"tlError": { message: string };
|
|
934
942
|
}
|
|
943
|
+
/**
|
|
944
|
+
* The web harness for `ticketSelectorCore`.
|
|
945
|
+
* It renders and it forwards: every decision, every string and every sum is in
|
|
946
|
+
* `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
|
|
947
|
+
* Stencil surface a host writes HTML against - the tag, the attributes, the
|
|
948
|
+
* three `tl*` events - plus the one thing that is genuinely web: finding the
|
|
949
|
+
* client the page published on `window.Ticketlayer`.
|
|
950
|
+
*/
|
|
935
951
|
interface HTMLTlTicketSelectorElement extends Components.TlTicketSelector, HTMLStencilElement {
|
|
936
952
|
addEventListener<K extends keyof HTMLTlTicketSelectorElementEventMap>(type: K, listener: (this: HTMLTlTicketSelectorElement, ev: TlTicketSelectorCustomEvent<HTMLTlTicketSelectorElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
|
|
937
953
|
addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
@@ -1482,6 +1498,14 @@ declare namespace LocalJSX {
|
|
|
1482
1498
|
*/
|
|
1483
1499
|
"ticket": TlTicketData;
|
|
1484
1500
|
}
|
|
1501
|
+
/**
|
|
1502
|
+
* The web harness for `ticketSelectorCore`.
|
|
1503
|
+
* It renders and it forwards: every decision, every string and every sum is in
|
|
1504
|
+
* `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
|
|
1505
|
+
* Stencil surface a host writes HTML against - the tag, the attributes, the
|
|
1506
|
+
* three `tl*` events - plus the one thing that is genuinely web: finding the
|
|
1507
|
+
* client the page published on `window.Ticketlayer`.
|
|
1508
|
+
*/
|
|
1485
1509
|
interface TlTicketSelector {
|
|
1486
1510
|
/**
|
|
1487
1511
|
* Button label
|
|
@@ -1768,6 +1792,14 @@ declare module "@stencil/core" {
|
|
|
1768
1792
|
* Used/Void when redeemed or cancelled.
|
|
1769
1793
|
*/
|
|
1770
1794
|
"tl-ticket": LocalJSX.IntrinsicElements["tl-ticket"] & JSXBase.HTMLAttributes<HTMLTlTicketElement>;
|
|
1795
|
+
/**
|
|
1796
|
+
* The web harness for `ticketSelectorCore`.
|
|
1797
|
+
* It renders and it forwards: every decision, every string and every sum is in
|
|
1798
|
+
* `@ticketlayer/elements-core` (AGENTS.md, TKT-11). What is left here is the
|
|
1799
|
+
* Stencil surface a host writes HTML against - the tag, the attributes, the
|
|
1800
|
+
* three `tl*` events - plus the one thing that is genuinely web: finding the
|
|
1801
|
+
* client the page published on `window.Ticketlayer`.
|
|
1802
|
+
*/
|
|
1771
1803
|
"tl-ticket-selector": LocalJSX.IntrinsicElements["tl-ticket-selector"] & JSXBase.HTMLAttributes<HTMLTlTicketSelectorElement>;
|
|
1772
1804
|
}
|
|
1773
1805
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The money rows a cart-shaped view renders.
|
|
3
|
+
*
|
|
4
|
+
* The rule and the arithmetic moved to `@ticketlayer/elements-core` with the
|
|
5
|
+
* core split (TKT-68): it is behaviour, and behaviour lives in a core so every
|
|
6
|
+
* harness derives the same figures. This file stays as the import path the
|
|
7
|
+
* components and their specs already use.
|
|
8
|
+
*/
|
|
9
|
+
export { cartTotals, expressesFee, minorUnits, selectionTotals, FEE_LABEL_FALLBACK, } from '@ticketlayer/elements-core';
|
|
10
|
+
export type { TlCartLike, TlFeeQuote, TlSelectionLine, TlSelectionTotals, TlTotals, } from '@ticketlayer/elements-core';
|
|
@@ -65,3 +65,37 @@ export declare function isAuthError(err: unknown): boolean;
|
|
|
65
65
|
* live-api) until one owns the occurrence. Best effort: null when not found.
|
|
66
66
|
*/
|
|
67
67
|
export declare function resolveOccurrence(sdk: TicketlayerSDK, occurrenceId: string, maxEvents?: number): Promise<TlResolvedOccurrence | null>;
|
|
68
|
+
/**
|
|
69
|
+
* The money rows the order views render.
|
|
70
|
+
*
|
|
71
|
+
* Two things about the sales order view drive this (backstage-api
|
|
72
|
+
* `src/domains/orders/services/order-line-items.service.ts`, `views/index.ts`):
|
|
73
|
+
*
|
|
74
|
+
* - the fee is a LINE ITEM, `type: 'fee'`, named after the channel fee
|
|
75
|
+
* profile's `serviceFeeLabel` (the API falls back to "Service Fee"). That
|
|
76
|
+
* name is the only place the label reaches a buyer-facing response.
|
|
77
|
+
* - `order.subtotal` INCLUDES the fee line, because the order's totals sum
|
|
78
|
+
* every non-discount, non-tax line into it; and `order.totalFees` is set at
|
|
79
|
+
* order creation and never rewritten by the recalculation, so it reads 0 on
|
|
80
|
+
* a real order that charged a fee. Rendering "Subtotal" straight off the
|
|
81
|
+
* order therefore hides the fee inside it, which is the bug this fixes.
|
|
82
|
+
*
|
|
83
|
+
* So the fee comes from the fee lines first and `totalFees` only as a
|
|
84
|
+
* fallback, the subtotal is the ticket lines alone, and the total is the
|
|
85
|
+
* order's own figure - never a sum of ours.
|
|
86
|
+
*/
|
|
87
|
+
export interface TlOrderTotals {
|
|
88
|
+
currency: string;
|
|
89
|
+
/** Ticket lines only, in minor units: the fee is not folded in. */
|
|
90
|
+
subtotal: number;
|
|
91
|
+
fees: number;
|
|
92
|
+
feeLabel: string;
|
|
93
|
+
showFee: boolean;
|
|
94
|
+
tax: number;
|
|
95
|
+
discount: number;
|
|
96
|
+
/** What the buyer was charged, as the order reports it. */
|
|
97
|
+
total: number;
|
|
98
|
+
}
|
|
99
|
+
export declare function orderTotals(order: TlOrderData | null | undefined): TlOrderTotals;
|
|
100
|
+
/** The rows add up to the total the order reports. Asserted in the specs. */
|
|
101
|
+
export declare function totalsAgree(totals: TlOrderTotals): boolean;
|
package/elements.catalogue.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
3
|
-
"generatedAt": "2026-09-
|
|
2
|
+
"version": "0.4.0",
|
|
3
|
+
"generatedAt": "2026-09-18T13:41:58.636Z",
|
|
4
4
|
"elements": [
|
|
5
5
|
{
|
|
6
6
|
"tag": "tl-buy-modal",
|
|
@@ -46,7 +46,8 @@
|
|
|
46
46
|
"web"
|
|
47
47
|
],
|
|
48
48
|
"sdkMethods": [],
|
|
49
|
-
"category": "purchase"
|
|
49
|
+
"category": "purchase",
|
|
50
|
+
"core": false
|
|
50
51
|
},
|
|
51
52
|
{
|
|
52
53
|
"tag": "tl-buy-tickets-button",
|
|
@@ -154,7 +155,8 @@
|
|
|
154
155
|
"web"
|
|
155
156
|
],
|
|
156
157
|
"sdkMethods": [],
|
|
157
|
-
"category": "purchase"
|
|
158
|
+
"category": "purchase",
|
|
159
|
+
"core": false
|
|
158
160
|
},
|
|
159
161
|
{
|
|
160
162
|
"tag": "tl-buy-tickets-wrapper",
|
|
@@ -213,7 +215,8 @@
|
|
|
213
215
|
"web"
|
|
214
216
|
],
|
|
215
217
|
"sdkMethods": [],
|
|
216
|
-
"category": "purchase"
|
|
218
|
+
"category": "purchase",
|
|
219
|
+
"core": false
|
|
217
220
|
},
|
|
218
221
|
{
|
|
219
222
|
"tag": "tl-cart",
|
|
@@ -281,7 +284,8 @@
|
|
|
281
284
|
"native"
|
|
282
285
|
],
|
|
283
286
|
"sdkMethods": [],
|
|
284
|
-
"category": "cart"
|
|
287
|
+
"category": "cart",
|
|
288
|
+
"core": false
|
|
285
289
|
},
|
|
286
290
|
{
|
|
287
291
|
"tag": "tl-cart-badge",
|
|
@@ -333,7 +337,8 @@
|
|
|
333
337
|
"web"
|
|
334
338
|
],
|
|
335
339
|
"sdkMethods": [],
|
|
336
|
-
"category": "cart"
|
|
340
|
+
"category": "cart",
|
|
341
|
+
"core": false
|
|
337
342
|
},
|
|
338
343
|
{
|
|
339
344
|
"tag": "tl-cart-drawer",
|
|
@@ -382,7 +387,8 @@
|
|
|
382
387
|
"web"
|
|
383
388
|
],
|
|
384
389
|
"sdkMethods": [],
|
|
385
|
-
"category": "cart"
|
|
390
|
+
"category": "cart",
|
|
391
|
+
"core": false
|
|
386
392
|
},
|
|
387
393
|
{
|
|
388
394
|
"tag": "tl-checkout-wrapper",
|
|
@@ -425,7 +431,8 @@
|
|
|
425
431
|
"web"
|
|
426
432
|
],
|
|
427
433
|
"sdkMethods": [],
|
|
428
|
-
"category": "checkout"
|
|
434
|
+
"category": "checkout",
|
|
435
|
+
"core": false
|
|
429
436
|
},
|
|
430
437
|
{
|
|
431
438
|
"tag": "tl-event-card",
|
|
@@ -467,7 +474,8 @@
|
|
|
467
474
|
"native"
|
|
468
475
|
],
|
|
469
476
|
"sdkMethods": [],
|
|
470
|
-
"category": "discovery"
|
|
477
|
+
"category": "discovery",
|
|
478
|
+
"core": false
|
|
471
479
|
},
|
|
472
480
|
{
|
|
473
481
|
"tag": "tl-event-list",
|
|
@@ -512,7 +520,8 @@
|
|
|
512
520
|
"native"
|
|
513
521
|
],
|
|
514
522
|
"sdkMethods": [],
|
|
515
|
-
"category": "discovery"
|
|
523
|
+
"category": "discovery",
|
|
524
|
+
"core": false
|
|
516
525
|
},
|
|
517
526
|
{
|
|
518
527
|
"tag": "tl-login",
|
|
@@ -559,7 +568,8 @@
|
|
|
559
568
|
"native"
|
|
560
569
|
],
|
|
561
570
|
"sdkMethods": [],
|
|
562
|
-
"category": "account"
|
|
571
|
+
"category": "account",
|
|
572
|
+
"core": false
|
|
563
573
|
},
|
|
564
574
|
{
|
|
565
575
|
"tag": "tl-my-orders",
|
|
@@ -601,7 +611,8 @@
|
|
|
601
611
|
"native"
|
|
602
612
|
],
|
|
603
613
|
"sdkMethods": [],
|
|
604
|
-
"category": "account"
|
|
614
|
+
"category": "account",
|
|
615
|
+
"core": false
|
|
605
616
|
},
|
|
606
617
|
{
|
|
607
618
|
"tag": "tl-occurrence-selector",
|
|
@@ -653,7 +664,8 @@
|
|
|
653
664
|
"web"
|
|
654
665
|
],
|
|
655
666
|
"sdkMethods": [],
|
|
656
|
-
"category": "discovery"
|
|
667
|
+
"category": "discovery",
|
|
668
|
+
"core": false
|
|
657
669
|
},
|
|
658
670
|
{
|
|
659
671
|
"tag": "tl-order-confirmation",
|
|
@@ -711,7 +723,8 @@
|
|
|
711
723
|
"native"
|
|
712
724
|
],
|
|
713
725
|
"sdkMethods": [],
|
|
714
|
-
"category": "checkout"
|
|
726
|
+
"category": "checkout",
|
|
727
|
+
"core": false
|
|
715
728
|
},
|
|
716
729
|
{
|
|
717
730
|
"tag": "tl-order-tickets",
|
|
@@ -742,7 +755,8 @@
|
|
|
742
755
|
"native"
|
|
743
756
|
],
|
|
744
757
|
"sdkMethods": [],
|
|
745
|
-
"category": "tickets"
|
|
758
|
+
"category": "tickets",
|
|
759
|
+
"core": false
|
|
746
760
|
},
|
|
747
761
|
{
|
|
748
762
|
"tag": "tl-promo-code",
|
|
@@ -783,7 +797,8 @@
|
|
|
783
797
|
"web"
|
|
784
798
|
],
|
|
785
799
|
"sdkMethods": [],
|
|
786
|
-
"category": "purchase"
|
|
800
|
+
"category": "purchase",
|
|
801
|
+
"core": false
|
|
787
802
|
},
|
|
788
803
|
{
|
|
789
804
|
"tag": "tl-seat-map",
|
|
@@ -868,7 +883,8 @@
|
|
|
868
883
|
"web"
|
|
869
884
|
],
|
|
870
885
|
"sdkMethods": [],
|
|
871
|
-
"category": "purchase"
|
|
886
|
+
"category": "purchase",
|
|
887
|
+
"core": false
|
|
872
888
|
},
|
|
873
889
|
{
|
|
874
890
|
"tag": "tl-ticket",
|
|
@@ -899,11 +915,12 @@
|
|
|
899
915
|
"native"
|
|
900
916
|
],
|
|
901
917
|
"sdkMethods": [],
|
|
902
|
-
"category": "tickets"
|
|
918
|
+
"category": "tickets",
|
|
919
|
+
"core": false
|
|
903
920
|
},
|
|
904
921
|
{
|
|
905
922
|
"tag": "tl-ticket-selector",
|
|
906
|
-
"docs": "",
|
|
923
|
+
"docs": "Pick quantities of the ticket types on sale for one occurrence, and add them to the cart.",
|
|
907
924
|
"props": [
|
|
908
925
|
{
|
|
909
926
|
"name": "buttonLabel",
|
|
@@ -961,8 +978,60 @@
|
|
|
961
978
|
"web",
|
|
962
979
|
"native"
|
|
963
980
|
],
|
|
964
|
-
"sdkMethods": [
|
|
965
|
-
|
|
981
|
+
"sdkMethods": [
|
|
982
|
+
"cart.addItem",
|
|
983
|
+
"events.getTicketTypes"
|
|
984
|
+
],
|
|
985
|
+
"category": "purchase",
|
|
986
|
+
"core": true,
|
|
987
|
+
"tokens": [
|
|
988
|
+
"background",
|
|
989
|
+
"border",
|
|
990
|
+
"border-hover",
|
|
991
|
+
"error",
|
|
992
|
+
"error-bg",
|
|
993
|
+
"font-family",
|
|
994
|
+
"foreground",
|
|
995
|
+
"muted",
|
|
996
|
+
"muted-foreground",
|
|
997
|
+
"primary",
|
|
998
|
+
"primary-foreground",
|
|
999
|
+
"radius-md",
|
|
1000
|
+
"radius-sm",
|
|
1001
|
+
"spacing-1",
|
|
1002
|
+
"spacing-2",
|
|
1003
|
+
"spacing-3",
|
|
1004
|
+
"spacing-4",
|
|
1005
|
+
"success",
|
|
1006
|
+
"warning",
|
|
1007
|
+
"warning-bg"
|
|
1008
|
+
],
|
|
1009
|
+
"strings": {
|
|
1010
|
+
"selectTickets": "Select Tickets",
|
|
1011
|
+
"adding": "Adding...",
|
|
1012
|
+
"added": "Added to cart!",
|
|
1013
|
+
"limited": "Limited",
|
|
1014
|
+
"soldOut": "Sold Out",
|
|
1015
|
+
"ticketsRow": "Tickets",
|
|
1016
|
+
"totalRow": "Total",
|
|
1017
|
+
"decrease": "Decrease quantity",
|
|
1018
|
+
"increase": "Increase quantity",
|
|
1019
|
+
"loadFailed": "Failed to load tickets",
|
|
1020
|
+
"addFailed": "Failed to add to cart",
|
|
1021
|
+
"noClient": "SDK not initialized."
|
|
1022
|
+
},
|
|
1023
|
+
"statuses": [
|
|
1024
|
+
"loading",
|
|
1025
|
+
"error",
|
|
1026
|
+
"ready"
|
|
1027
|
+
],
|
|
1028
|
+
"actions": [
|
|
1029
|
+
"addToCart",
|
|
1030
|
+
"changeQuantity",
|
|
1031
|
+
"connectFailed",
|
|
1032
|
+
"load",
|
|
1033
|
+
"setFeeQuote"
|
|
1034
|
+
]
|
|
966
1035
|
}
|
|
967
1036
|
]
|
|
968
1037
|
}
|